@pennixrv/trellis 0.7.0-beta.9 → 0.7.1-beta.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/README.md +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +14 -26
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/ablate.js +1 -1
- package/dist/commands/ablate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -56
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/task-progress.d.ts +2 -0
- package/dist/commands/task-progress.d.ts.map +1 -1
- package/dist/commands/task-progress.js +37 -30
- package/dist/commands/task-progress.js.map +1 -1
- package/dist/commands/{channel → teamwork}/adapters/claude.d.ts +3 -3
- package/dist/commands/teamwork/adapters/claude.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/claude.js +3 -3
- package/dist/commands/teamwork/adapters/claude.js.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/codex.d.ts +1 -15
- package/dist/commands/teamwork/adapters/codex.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/codex.js +5 -42
- package/dist/commands/teamwork/adapters/codex.js.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/index.d.ts +6 -6
- package/dist/commands/teamwork/adapters/index.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/index.js +16 -52
- package/dist/commands/teamwork/adapters/index.js.map +1 -0
- package/dist/commands/{channel → teamwork}/adapters/types.d.ts +2 -2
- package/dist/commands/teamwork/adapters/types.d.ts.map +1 -0
- package/dist/commands/teamwork/adapters/types.js.map +1 -0
- package/dist/commands/{channel → teamwork}/agent-loader.d.ts +2 -4
- package/dist/commands/teamwork/agent-loader.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/agent-loader.js +4 -35
- package/dist/commands/teamwork/agent-loader.js.map +1 -0
- package/dist/commands/teamwork/artifact.d.ts +177 -0
- package/dist/commands/teamwork/artifact.d.ts.map +1 -0
- package/dist/commands/teamwork/artifact.js +908 -0
- package/dist/commands/teamwork/artifact.js.map +1 -0
- package/dist/commands/{channel → teamwork}/context-loader.d.ts +1 -1
- package/dist/commands/teamwork/context-loader.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/context-loader.js +12 -12
- package/dist/commands/teamwork/context-loader.js.map +1 -0
- package/dist/commands/{channel → teamwork}/context-trust.d.ts +6 -6
- package/dist/commands/teamwork/context-trust.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/context-trust.js +16 -16
- package/dist/commands/teamwork/context-trust.js.map +1 -0
- package/dist/commands/teamwork/context.d.ts +16 -0
- package/dist/commands/teamwork/context.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/context.js +17 -17
- package/dist/commands/teamwork/context.js.map +1 -0
- package/dist/commands/teamwork/coordinator.d.ts +89 -0
- package/dist/commands/teamwork/coordinator.d.ts.map +1 -0
- package/dist/commands/teamwork/coordinator.js +1198 -0
- package/dist/commands/teamwork/coordinator.js.map +1 -0
- package/dist/commands/teamwork/create.d.ts +23 -0
- package/dist/commands/teamwork/create.d.ts.map +1 -0
- package/dist/commands/teamwork/create.js +39 -0
- package/dist/commands/teamwork/create.js.map +1 -0
- package/dist/commands/{channel → teamwork}/dev-parse-trace.d.ts +1 -1
- package/dist/commands/teamwork/dev-parse-trace.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/dev-parse-trace.js +1 -1
- package/dist/commands/teamwork/dev-parse-trace.js.map +1 -0
- package/dist/commands/{channel → teamwork}/guard.d.ts +27 -46
- package/dist/commands/teamwork/guard.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/guard.js +54 -156
- package/dist/commands/teamwork/guard.js.map +1 -0
- package/dist/commands/teamwork/index.d.ts +3 -0
- package/dist/commands/teamwork/index.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/index.js +135 -165
- package/dist/commands/teamwork/index.js.map +1 -0
- package/dist/commands/{channel → teamwork}/interrupt.d.ts +1 -1
- package/dist/commands/teamwork/interrupt.d.ts.map +1 -0
- package/dist/commands/teamwork/interrupt.js +22 -0
- package/dist/commands/teamwork/interrupt.js.map +1 -0
- package/dist/commands/teamwork/kill.d.ts +7 -0
- package/dist/commands/teamwork/kill.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/kill.js +21 -21
- package/dist/commands/teamwork/kill.js.map +1 -0
- package/dist/commands/teamwork/list.d.ts +17 -0
- package/dist/commands/teamwork/list.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/list.js +18 -27
- package/dist/commands/teamwork/list.js.map +1 -0
- package/dist/commands/{channel → teamwork}/messages.d.ts +1 -1
- package/dist/commands/teamwork/messages.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/messages.js +18 -18
- package/dist/commands/teamwork/messages.js.map +1 -0
- package/dist/commands/teamwork/profiles.d.ts +25 -0
- package/dist/commands/teamwork/profiles.d.ts.map +1 -0
- package/dist/commands/teamwork/profiles.js +125 -0
- package/dist/commands/teamwork/profiles.js.map +1 -0
- package/dist/commands/teamwork/rm.d.ts +27 -0
- package/dist/commands/teamwork/rm.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/rm.js +21 -22
- package/dist/commands/teamwork/rm.js.map +1 -0
- package/dist/commands/teamwork/run.d.ts +29 -0
- package/dist/commands/{channel → teamwork}/run.d.ts.map +1 -1
- package/dist/commands/teamwork/run.js +129 -0
- package/dist/commands/teamwork/run.js.map +1 -0
- package/dist/commands/{channel → teamwork}/send.d.ts +1 -1
- package/dist/commands/teamwork/send.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/send.js +7 -7
- package/dist/commands/teamwork/send.js.map +1 -0
- package/dist/commands/{channel → teamwork}/spawn.d.ts +8 -12
- package/dist/commands/teamwork/spawn.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/spawn.js +51 -112
- package/dist/commands/teamwork/spawn.js.map +1 -0
- package/dist/commands/teamwork/store/events.d.ts +22 -0
- package/dist/commands/teamwork/store/events.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/store/events.js +8 -8
- package/dist/commands/teamwork/store/events.js.map +1 -0
- package/dist/commands/teamwork/store/filter.d.ts +3 -0
- package/dist/commands/teamwork/store/filter.d.ts.map +1 -0
- package/dist/commands/teamwork/store/filter.js +2 -0
- package/dist/commands/teamwork/store/filter.js.map +1 -0
- package/dist/commands/{channel → teamwork}/store/lock.d.ts +1 -1
- package/dist/commands/teamwork/store/lock.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/store/lock.js +2 -2
- package/dist/commands/teamwork/store/lock.js.map +1 -0
- package/dist/commands/{channel → teamwork}/store/paths.d.ts +18 -32
- package/dist/commands/teamwork/store/paths.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/store/paths.js +42 -109
- package/dist/commands/teamwork/store/paths.js.map +1 -0
- package/dist/commands/teamwork/store/schema.d.ts +18 -0
- package/dist/commands/teamwork/store/schema.d.ts.map +1 -0
- package/dist/commands/teamwork/store/schema.js +23 -0
- package/dist/commands/teamwork/store/schema.js.map +1 -0
- package/dist/commands/{channel → teamwork}/store/thread-state.d.ts +3 -3
- package/dist/commands/teamwork/store/thread-state.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/store/thread-state.js +1 -1
- package/dist/commands/teamwork/store/thread-state.js.map +1 -0
- package/dist/commands/teamwork/store/watch.d.ts +19 -0
- package/dist/commands/teamwork/store/watch.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/store/watch.js +8 -8
- package/dist/commands/teamwork/store/watch.js.map +1 -0
- package/dist/commands/teamwork/supervisor/idle.d.ts.map +1 -0
- package/dist/commands/teamwork/supervisor/idle.js.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/inbox.d.ts +2 -2
- package/dist/commands/teamwork/supervisor/inbox.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/inbox.js +14 -14
- package/dist/commands/teamwork/supervisor/inbox.js.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/shutdown.d.ts +3 -6
- package/dist/commands/teamwork/supervisor/shutdown.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/shutdown.js +7 -17
- package/dist/commands/teamwork/supervisor/shutdown.js.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/stdout.d.ts +3 -5
- package/dist/commands/teamwork/supervisor/stdout.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/stdout.js +12 -23
- package/dist/commands/teamwork/supervisor/stdout.js.map +1 -0
- package/dist/commands/teamwork/supervisor/turns.d.ts.map +1 -0
- package/dist/commands/teamwork/supervisor/turns.js.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/warning.d.ts +5 -5
- package/dist/commands/teamwork/supervisor/warning.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor/warning.js +6 -6
- package/dist/commands/teamwork/supervisor/warning.js.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor.d.ts +21 -21
- package/dist/commands/teamwork/supervisor.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/supervisor.js +53 -63
- package/dist/commands/teamwork/supervisor.js.map +1 -0
- package/dist/commands/teamwork/teammate-adapters.d.ts +31 -0
- package/dist/commands/teamwork/teammate-adapters.d.ts.map +1 -0
- package/dist/commands/teamwork/teammate-adapters.js +96 -0
- package/dist/commands/teamwork/teammate-adapters.js.map +1 -0
- package/dist/commands/teamwork/teammate-config.d.ts +19 -0
- package/dist/commands/teamwork/teammate-config.d.ts.map +1 -0
- package/dist/commands/teamwork/teammate-config.js +97 -0
- package/dist/commands/teamwork/teammate-config.js.map +1 -0
- package/dist/commands/teamwork/teammate-launch.d.ts +58 -0
- package/dist/commands/teamwork/teammate-launch.d.ts.map +1 -0
- package/dist/commands/teamwork/teammate-launch.js +125 -0
- package/dist/commands/teamwork/teammate-launch.js.map +1 -0
- package/dist/commands/teamwork/text-body.d.ts +13 -0
- package/dist/commands/teamwork/text-body.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/text-body.js +3 -3
- package/dist/commands/teamwork/text-body.js.map +1 -0
- package/dist/commands/teamwork/threads.d.ts +35 -0
- package/dist/commands/teamwork/threads.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/threads.js +19 -19
- package/dist/commands/teamwork/threads.js.map +1 -0
- package/dist/commands/teamwork/title.d.ts +12 -0
- package/dist/commands/teamwork/title.d.ts.map +1 -0
- package/dist/commands/teamwork/title.js +24 -0
- package/dist/commands/teamwork/title.js.map +1 -0
- package/dist/commands/{channel → teamwork}/wait.d.ts +1 -5
- package/dist/commands/teamwork/wait.d.ts.map +1 -0
- package/dist/commands/{channel → teamwork}/wait.js +8 -21
- package/dist/commands/teamwork/wait.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +48 -89
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +9 -10
- package/dist/commands/workflow.js.map +1 -1
- package/dist/configurators/claude.d.ts +0 -17
- package/dist/configurators/claude.d.ts.map +1 -1
- package/dist/configurators/claude.js +2 -61
- package/dist/configurators/claude.js.map +1 -1
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +2 -2
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/snow.js +1 -1
- package/dist/configurators/snow.js.map +1 -1
- package/dist/configurators/workflow.d.ts +1 -1
- package/dist/configurators/workflow.js +5 -5
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/constants/paths.d.ts +1 -1
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +1 -1
- package/dist/constants/paths.js.map +1 -1
- package/dist/migrations/manifests/0.7.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.18.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.19.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.20.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.21.json +17 -0
- package/dist/migrations/manifests/0.7.0-beta.22.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.23.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.24.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.25.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.26.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.27.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.28.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.29.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.30.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.31.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.32.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.33.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.34.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.35.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.36.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.37.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.38.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.39.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.40.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.41.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.42.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.43.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.44.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.45.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.46.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.47.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.48.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.49.json +13 -0
- package/dist/migrations/manifests/0.7.0-beta.50.json +12 -0
- package/dist/migrations/manifests/0.7.0-beta.51.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.52.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.53.json +27 -0
- package/dist/migrations/manifests/0.7.0-beta.54.json +8 -0
- package/dist/migrations/manifests/0.7.1-beta.0.json +9 -0
- package/dist/migrations/manifests/0.7.1.json +9 -0
- package/dist/templates/claude/hooks/statusline.py +0 -7
- package/dist/templates/codex/hooks/session-start.py +31 -38
- package/dist/templates/common/bundled-skills/trellis-decision-space-construction-and-merging/SKILL.md +10 -0
- package/dist/templates/common/bundled-skills/trellis-decision-space-construction-and-merging/workflow.md +40 -0
- package/dist/templates/common/bundled-skills/trellis-delivery-review-and-closeout/SKILL.md +10 -0
- package/dist/templates/common/bundled-skills/trellis-delivery-review-and-closeout/workflow.md +55 -0
- package/dist/templates/common/bundled-skills/trellis-goal-exploration-and-requirements/SKILL.md +10 -0
- package/dist/templates/common/bundled-skills/trellis-goal-exploration-and-requirements/workflow.md +33 -0
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +25 -25
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +13 -19
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +27 -75
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +17 -56
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +14 -11
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +0 -33
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-teamwork.md +32 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +25 -111
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +19 -60
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-solution-design-and-convergence/SKILL.md +10 -0
- package/dist/templates/common/bundled-skills/trellis-solution-design-and-convergence/workflow.md +36 -0
- package/dist/templates/common/bundled-skills/trellis-task-implementation/SKILL.md +10 -0
- package/dist/templates/common/bundled-skills/trellis-task-implementation/workflow.md +29 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/SKILL.md +73 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/coordination-modes.md +29 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-configuration-matrix.md +31 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-processes.md +37 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teamwork-plan-construction.md +78 -0
- package/dist/templates/common/commands/continue.md +9 -49
- package/dist/templates/common/commands/finish-work.md +10 -58
- package/dist/templates/common/commands/start.md +19 -49
- package/dist/templates/common/skills/brainstorm.md +11 -199
- package/dist/templates/copilot/hooks/session-start.py +30 -26
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +7 -160
- package/dist/templates/copilot/prompts/finish-work.prompt.md +11 -88
- package/dist/templates/copilot/prompts/record-session.prompt.md +4 -12
- package/dist/templates/copilot/prompts/start.prompt.md +12 -10
- package/dist/templates/dsh/DSH.md +2 -2
- package/dist/templates/kiro/agents/trellis.json +2 -2
- package/dist/templates/markdown/agents.md +14 -3
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +9 -8
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +1 -1
- package/dist/templates/markdown/workspace-index.md +0 -1
- package/dist/templates/omp/extensions/trellis/index.ts.txt +28 -17
- package/dist/templates/opencode/lib/session-utils.js +20 -25
- package/dist/templates/opencode/lib/trellis-context.js +4 -76
- package/dist/templates/opencode/plugins/inject-subagent-context.js +5 -4
- package/dist/templates/opencode/plugins/inject-workflow-state.js +14 -17
- package/dist/templates/shared-hooks/inject-shell-session-context.py +3 -3
- package/dist/templates/shared-hooks/inject-subagent-context.py +445 -67
- package/dist/templates/shared-hooks/inject-workflow-state.py +44 -36
- package/dist/templates/shared-hooks/session-start.py +21 -33
- package/dist/templates/trellis/agents/delegated-worktree-primary-agent.md +18 -0
- package/dist/templates/trellis/agents/teammate-profiles.json +8 -0
- package/dist/templates/trellis/agents/teammate.md +63 -0
- package/dist/templates/trellis/config.yaml +29 -38
- package/dist/templates/trellis/gitignore.txt +1 -0
- package/dist/templates/trellis/index.d.ts +8 -12
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +14 -25
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/add_session.py +1 -1
- package/dist/templates/trellis/scripts/common/__init__.py +0 -1
- package/dist/templates/trellis/scripts/common/active_task.py +136 -100
- package/dist/templates/trellis/scripts/common/config.py +7 -9
- package/dist/templates/trellis/scripts/common/git_context.py +1 -1
- package/dist/templates/trellis/scripts/common/io.py +19 -0
- package/dist/templates/trellis/scripts/common/paths.py +0 -1
- package/dist/templates/trellis/scripts/common/safe_commit.py +11 -90
- package/dist/templates/trellis/scripts/common/session_context.py +1 -8
- package/dist/templates/trellis/scripts/common/spec_match.py +1 -1
- package/dist/templates/trellis/scripts/common/task_context.py +152 -59
- package/dist/templates/trellis/scripts/common/task_continuity.py +598 -0
- package/dist/templates/trellis/scripts/common/task_store.py +70 -548
- package/dist/templates/trellis/scripts/common/task_utils.py +4 -98
- package/dist/templates/trellis/scripts/common/task_workflow.py +1096 -0
- package/dist/templates/trellis/scripts/common/tasks.py +5 -8
- package/dist/templates/trellis/scripts/common/workflow_phase.py +8 -7
- package/dist/templates/trellis/scripts/hooks/linear_sync.py +3 -3
- package/dist/templates/trellis/scripts/task.py +119 -377
- package/dist/templates/trellis/workflow.md +111 -706
- package/dist/utils/agent-refs.d.ts +5 -5
- package/dist/utils/agent-refs.js +6 -6
- package/dist/utils/file-writer.d.ts +3 -2
- package/dist/utils/file-writer.d.ts.map +1 -1
- package/dist/utils/file-writer.js +3 -2
- package/dist/utils/file-writer.js.map +1 -1
- package/dist/utils/managed-paths.d.ts +0 -7
- package/dist/utils/managed-paths.d.ts.map +1 -1
- package/dist/utils/managed-paths.js +0 -40
- package/dist/utils/managed-paths.js.map +1 -1
- package/dist/utils/manifest-prune.d.ts.map +1 -1
- package/dist/utils/manifest-prune.js +2 -11
- package/dist/utils/manifest-prune.js.map +1 -1
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
- package/dist/utils/uninstall-scrubbers.js +3 -3
- package/dist/utils/uninstall-scrubbers.js.map +1 -1
- package/dist/utils/workflow-resolver.d.ts +10 -16
- package/dist/utils/workflow-resolver.d.ts.map +1 -1
- package/dist/utils/workflow-resolver.js +25 -36
- package/dist/utils/workflow-resolver.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/channel/adapters/claude.d.ts.map +0 -1
- package/dist/commands/channel/adapters/claude.js.map +0 -1
- package/dist/commands/channel/adapters/codex.d.ts.map +0 -1
- package/dist/commands/channel/adapters/codex.js.map +0 -1
- package/dist/commands/channel/adapters/index.d.ts.map +0 -1
- package/dist/commands/channel/adapters/index.js.map +0 -1
- package/dist/commands/channel/adapters/types.d.ts.map +0 -1
- package/dist/commands/channel/adapters/types.js.map +0 -1
- package/dist/commands/channel/agent-loader.d.ts.map +0 -1
- package/dist/commands/channel/agent-loader.js.map +0 -1
- package/dist/commands/channel/context-loader.d.ts.map +0 -1
- package/dist/commands/channel/context-loader.js.map +0 -1
- package/dist/commands/channel/context-trust.d.ts.map +0 -1
- package/dist/commands/channel/context-trust.js.map +0 -1
- package/dist/commands/channel/context.d.ts +0 -16
- package/dist/commands/channel/context.d.ts.map +0 -1
- package/dist/commands/channel/context.js.map +0 -1
- package/dist/commands/channel/create.d.ts +0 -29
- package/dist/commands/channel/create.d.ts.map +0 -1
- package/dist/commands/channel/create.js +0 -47
- package/dist/commands/channel/create.js.map +0 -1
- package/dist/commands/channel/dev-parse-trace.d.ts.map +0 -1
- package/dist/commands/channel/dev-parse-trace.js.map +0 -1
- package/dist/commands/channel/guard.d.ts.map +0 -1
- package/dist/commands/channel/guard.js.map +0 -1
- package/dist/commands/channel/index.d.ts +0 -3
- package/dist/commands/channel/index.d.ts.map +0 -1
- package/dist/commands/channel/index.js.map +0 -1
- package/dist/commands/channel/interrupt.d.ts.map +0 -1
- package/dist/commands/channel/interrupt.js +0 -22
- package/dist/commands/channel/interrupt.js.map +0 -1
- package/dist/commands/channel/kill.d.ts +0 -7
- package/dist/commands/channel/kill.d.ts.map +0 -1
- package/dist/commands/channel/kill.js.map +0 -1
- package/dist/commands/channel/list.d.ts +0 -18
- package/dist/commands/channel/list.d.ts.map +0 -1
- package/dist/commands/channel/list.js.map +0 -1
- package/dist/commands/channel/messages.d.ts.map +0 -1
- package/dist/commands/channel/messages.js.map +0 -1
- package/dist/commands/channel/rm.d.ts +0 -27
- package/dist/commands/channel/rm.d.ts.map +0 -1
- package/dist/commands/channel/rm.js.map +0 -1
- package/dist/commands/channel/run.d.ts +0 -32
- package/dist/commands/channel/run.js +0 -141
- package/dist/commands/channel/run.js.map +0 -1
- package/dist/commands/channel/send.d.ts.map +0 -1
- package/dist/commands/channel/send.js.map +0 -1
- package/dist/commands/channel/spawn.d.ts.map +0 -1
- package/dist/commands/channel/spawn.js.map +0 -1
- package/dist/commands/channel/store/events.d.ts +0 -22
- package/dist/commands/channel/store/events.d.ts.map +0 -1
- package/dist/commands/channel/store/events.js.map +0 -1
- package/dist/commands/channel/store/filter.d.ts +0 -3
- package/dist/commands/channel/store/filter.d.ts.map +0 -1
- package/dist/commands/channel/store/filter.js +0 -2
- package/dist/commands/channel/store/filter.js.map +0 -1
- package/dist/commands/channel/store/lock.d.ts.map +0 -1
- package/dist/commands/channel/store/lock.js.map +0 -1
- package/dist/commands/channel/store/paths.d.ts.map +0 -1
- package/dist/commands/channel/store/paths.js.map +0 -1
- package/dist/commands/channel/store/schema.d.ts +0 -27
- package/dist/commands/channel/store/schema.d.ts.map +0 -1
- package/dist/commands/channel/store/schema.js +0 -34
- package/dist/commands/channel/store/schema.js.map +0 -1
- package/dist/commands/channel/store/thread-state.d.ts.map +0 -1
- package/dist/commands/channel/store/thread-state.js.map +0 -1
- package/dist/commands/channel/store/watch.d.ts +0 -19
- package/dist/commands/channel/store/watch.d.ts.map +0 -1
- package/dist/commands/channel/store/watch.js.map +0 -1
- package/dist/commands/channel/supervisor/idle.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/idle.js.map +0 -1
- package/dist/commands/channel/supervisor/inbox.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/inbox.js.map +0 -1
- package/dist/commands/channel/supervisor/shutdown.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/shutdown.js.map +0 -1
- package/dist/commands/channel/supervisor/stdout.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/stdout.js.map +0 -1
- package/dist/commands/channel/supervisor/turns.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/turns.js.map +0 -1
- package/dist/commands/channel/supervisor/warning.d.ts.map +0 -1
- package/dist/commands/channel/supervisor/warning.js.map +0 -1
- package/dist/commands/channel/supervisor.d.ts.map +0 -1
- package/dist/commands/channel/supervisor.js.map +0 -1
- package/dist/commands/channel/text-body.d.ts +0 -13
- package/dist/commands/channel/text-body.d.ts.map +0 -1
- package/dist/commands/channel/text-body.js.map +0 -1
- package/dist/commands/channel/threads.d.ts +0 -39
- package/dist/commands/channel/threads.d.ts.map +0 -1
- package/dist/commands/channel/threads.js.map +0 -1
- package/dist/commands/channel/title.d.ts +0 -12
- package/dist/commands/channel/title.d.ts.map +0 -1
- package/dist/commands/channel/title.js +0 -24
- package/dist/commands/channel/title.js.map +0 -1
- package/dist/commands/channel/wait.d.ts.map +0 -1
- package/dist/commands/channel/wait.js.map +0 -1
- package/dist/commands/channel/workers.d.ts +0 -9
- package/dist/commands/channel/workers.d.ts.map +0 -1
- package/dist/commands/channel/workers.js +0 -31
- package/dist/commands/channel/workers.js.map +0 -1
- package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +0 -69
- package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +0 -549
- package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +0 -233
- package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +0 -237
- package/dist/templates/common/bundled-skills/trellis-channel/references/subnode-work.md +0 -222
- package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +0 -295
- package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +0 -131
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +0 -70
- package/dist/templates/common/bundled-skills/trellis-research-record/SKILL.md +0 -14
- package/dist/templates/copilot/prompts/parallel.prompt.md +0 -204
- package/dist/templates/trellis/agents/check.md +0 -70
- package/dist/templates/trellis/agents/implement.md +0 -71
- package/dist/templates/trellis/agents/subnode.env +0 -4
- package/dist/templates/trellis/agents/subnode.md +0 -76
- package/dist/templates/trellis/scripts/common/context_projection.py +0 -508
- package/dist/templates/trellis/scripts/common/continuation_record.py +0 -450
- package/dist/templates/trellis/scripts/common/ownership_record.py +0 -439
- package/dist/templates/trellis/scripts/subnode_artifact.py +0 -735
- package/dist/templates/trellis/scripts/workspace_note.py +0 -126
- /package/dist/commands/{channel → teamwork}/adapters/types.js +0 -0
- /package/dist/commands/{channel → teamwork}/supervisor/idle.d.ts +0 -0
- /package/dist/commands/{channel → teamwork}/supervisor/idle.js +0 -0
- /package/dist/commands/{channel → teamwork}/supervisor/turns.d.ts +0 -0
- /package/dist/commands/{channel → teamwork}/supervisor/turns.js +0 -0
|
@@ -2,66 +2,62 @@ import chalk from "chalk";
|
|
|
2
2
|
import { InvalidArgumentError } from "commander";
|
|
3
3
|
import { isProvider, listProviders } from "./adapters/index.js";
|
|
4
4
|
import { parseCodexSandboxMode } from "./adapters/codex.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { teamworkSessionContextAdd, teamworkSessionContextDelete, teamworkSessionContextList, } from "./context.js";
|
|
6
|
+
import { createTeamworkSession } from "./create.js";
|
|
7
7
|
import { parseTrace } from "./dev-parse-trace.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { channelTitleClear, channelTitleSet } from "./title.js";
|
|
8
|
+
import { teamworkSessionKill } from "./kill.js";
|
|
9
|
+
import { teamworkSessionInterrupt } from "./interrupt.js";
|
|
10
|
+
import { teamworkSessionList } from "./list.js";
|
|
11
|
+
import { teamworkSessionMessages } from "./messages.js";
|
|
12
|
+
import { teamworkSessionPrune, teamworkSessionRm } from "./rm.js";
|
|
13
|
+
import { teamworkSessionSend } from "./send.js";
|
|
14
|
+
import { teamworkSessionRun } from "./run.js";
|
|
15
|
+
import { teamworkSessionSpawn } from "./spawn.js";
|
|
16
|
+
import { teamworkSessionThreadPost, teamworkSessionThreadRename, teamworkSessionThreadShow, teamworkSessionForumList, } from "./threads.js";
|
|
17
|
+
import { teamworkSessionTitleClear, teamworkSessionTitleSet } from "./title.js";
|
|
19
18
|
import { runSupervisor } from "./supervisor.js";
|
|
20
|
-
import {
|
|
19
|
+
import { teamworkSessionWait, parseDuration } from "./wait.js";
|
|
21
20
|
import { parseCsv } from "./store/schema.js";
|
|
22
|
-
import { parseInboxPolicy } from "@pennixrv/trellis-core/
|
|
21
|
+
import { parseInboxPolicy } from "@pennixrv/trellis-core/teamwork";
|
|
23
22
|
function parseNonNegativeInteger(value) {
|
|
24
23
|
if (!/^\d+$/.test(value)) {
|
|
25
24
|
throw new InvalidArgumentError(`expected a non-negative integer, got '${value}'`);
|
|
26
25
|
}
|
|
27
26
|
return Number(value);
|
|
28
27
|
}
|
|
29
|
-
export function
|
|
30
|
-
const
|
|
31
|
-
.command("
|
|
32
|
-
.description("
|
|
33
|
-
|
|
28
|
+
export function registerTeamworkCommand(program) {
|
|
29
|
+
const teamwork = program
|
|
30
|
+
.command("teamwork")
|
|
31
|
+
.description("Trellis Teamwork runtime — coordinate teammates through a shared event log");
|
|
32
|
+
teamwork
|
|
34
33
|
.command("create <name>")
|
|
35
|
-
.description("Create a
|
|
36
|
-
.option("--scope <scope>", "
|
|
37
|
-
.option("--type <type>", "
|
|
34
|
+
.description("Create a Teamwork session")
|
|
35
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
36
|
+
.option("--type <type>", "session type: chat | forum", "chat")
|
|
38
37
|
.option("--task <path>", "associated Trellis task directory")
|
|
39
38
|
.option("--project <slug>", "project slug")
|
|
40
39
|
.option("--labels <csv>", "comma-separated labels")
|
|
41
|
-
.option("--description <text>", "stable
|
|
42
|
-
.option("--context-file <absolute-path>", "absolute file path attached as
|
|
43
|
-
.option("--context-raw <text>", "raw
|
|
44
|
-
.option("--linked-context-file <absolute-path>", "[deprecated alias for --context-file] absolute file path (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
45
|
-
.option("--linked-context-raw <text>", "[deprecated alias for --context-raw] raw context text (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
40
|
+
.option("--description <text>", "stable Teamwork session description")
|
|
41
|
+
.option("--context-file <absolute-path>", "absolute file path attached as Teamwork session context (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
42
|
+
.option("--context-raw <text>", "raw Teamwork session context text (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
46
43
|
.option("--cwd <path>", "working directory recorded in the create event")
|
|
47
44
|
.option("--by <agent>", "agent name recorded as the creator", "main")
|
|
48
|
-
.option("--
|
|
49
|
-
.option("--
|
|
50
|
-
.option("--ephemeral", "mark as ephemeral — hidden from `channel list` by default and cleanable via `channel prune --ephemeral`")
|
|
45
|
+
.option("--force", "overwrite an existing Teamwork session with the same name")
|
|
46
|
+
.option("--ephemeral", "mark as ephemeral — hidden from `teamwork list` by default and cleanable via `teamwork prune --ephemeral`")
|
|
51
47
|
.action(async (name, opts) => {
|
|
52
48
|
try {
|
|
53
|
-
await
|
|
49
|
+
await createTeamworkSession(name, opts);
|
|
54
50
|
}
|
|
55
51
|
catch (err) {
|
|
56
52
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
57
53
|
process.exit(1);
|
|
58
54
|
}
|
|
59
55
|
});
|
|
60
|
-
|
|
56
|
+
teamwork
|
|
61
57
|
.command("send <name>")
|
|
62
|
-
.description("Send a message
|
|
58
|
+
.description("Send a message in a Teamwork session")
|
|
63
59
|
.requiredOption("--as <agent>", "agent name sending")
|
|
64
|
-
.option("--scope <scope>", "
|
|
60
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
65
61
|
.option("--to <agents>", "comma-separated target agents (default: broadcast)")
|
|
66
62
|
.option("--stdin", "read message body from stdin")
|
|
67
63
|
.option("--text-file <path>", "read message body from file")
|
|
@@ -70,7 +66,7 @@ export function registerChannelCommand(program) {
|
|
|
70
66
|
.action(async (name, text, raw) => {
|
|
71
67
|
const opts = raw;
|
|
72
68
|
try {
|
|
73
|
-
await
|
|
69
|
+
await teamworkSessionSend(name, {
|
|
74
70
|
as: opts.as,
|
|
75
71
|
text,
|
|
76
72
|
stdin: opts.stdin,
|
|
@@ -85,27 +81,12 @@ export function registerChannelCommand(program) {
|
|
|
85
81
|
process.exit(1);
|
|
86
82
|
}
|
|
87
83
|
});
|
|
88
|
-
|
|
89
|
-
.command("barrier <name>")
|
|
90
|
-
.description("Print the current durable event sequence without appending an event")
|
|
91
|
-
.option("--scope <scope>", "channel scope: project | global")
|
|
92
|
-
.action(async (name, raw) => {
|
|
93
|
-
const opts = raw;
|
|
94
|
-
try {
|
|
95
|
-
console.log(await channelBarrier(name, { scope: opts.scope }));
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
channel
|
|
84
|
+
teamwork
|
|
103
85
|
.command("wait <name>")
|
|
104
86
|
.description("Block until an event matching the filter arrives, or timeout")
|
|
105
87
|
.requiredOption("--as <agent>", "agent name waiting")
|
|
106
|
-
.option("--scope <scope>", "
|
|
88
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
107
89
|
.option("--timeout <duration>", "max wait (e.g. 30s, 2m, 1h)")
|
|
108
|
-
.option("--after-seq <sequence>", "replay only events after this durable sequence barrier", parseNonNegativeInteger)
|
|
109
90
|
.option("--from <agents>", "only wake on events from these agents (CSV)")
|
|
110
91
|
.option("--kind <kind[,kind...]>", "only wake on these event kinds (CSV, OR semantics)")
|
|
111
92
|
.option("--thread <key>", "only wake on this thread key")
|
|
@@ -116,10 +97,9 @@ export function registerChannelCommand(program) {
|
|
|
116
97
|
.action(async (name, raw) => {
|
|
117
98
|
const opts = raw;
|
|
118
99
|
try {
|
|
119
|
-
await
|
|
100
|
+
await teamworkSessionWait(name, {
|
|
120
101
|
as: opts.as,
|
|
121
102
|
timeoutMs: parseDuration(opts.timeout),
|
|
122
|
-
afterSeq: opts.afterSeq,
|
|
123
103
|
from: opts.from,
|
|
124
104
|
kind: opts.kind,
|
|
125
105
|
scope: opts.scope,
|
|
@@ -135,19 +115,19 @@ export function registerChannelCommand(program) {
|
|
|
135
115
|
process.exit(1);
|
|
136
116
|
}
|
|
137
117
|
});
|
|
138
|
-
|
|
118
|
+
teamwork
|
|
139
119
|
.command("interrupt <name>")
|
|
140
|
-
.description("Interrupt a
|
|
120
|
+
.description("Interrupt a teammate turn and send a replacement instruction")
|
|
141
121
|
.requiredOption("--as <agent>", "agent name requesting the interrupt")
|
|
142
|
-
.requiredOption("--to <agent>", "target
|
|
143
|
-
.option("--scope <scope>", "
|
|
122
|
+
.requiredOption("--to <agent>", "target teammate name")
|
|
123
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
144
124
|
.option("--stdin", "read interrupt message body from stdin")
|
|
145
125
|
.option("--text-file <path>", "read interrupt message body from file")
|
|
146
126
|
.argument("[text]", "inline interrupt message (otherwise use --stdin / --text-file)")
|
|
147
127
|
.action(async (name, text, raw) => {
|
|
148
128
|
const opts = raw;
|
|
149
129
|
try {
|
|
150
|
-
await
|
|
130
|
+
await teamworkSessionInterrupt(name, {
|
|
151
131
|
as: opts.as,
|
|
152
132
|
to: opts.to,
|
|
153
133
|
text,
|
|
@@ -161,25 +141,25 @@ export function registerChannelCommand(program) {
|
|
|
161
141
|
process.exit(1);
|
|
162
142
|
}
|
|
163
143
|
});
|
|
164
|
-
|
|
144
|
+
teamwork
|
|
165
145
|
.command("spawn <name>")
|
|
166
|
-
.description("Register a
|
|
167
|
-
.option("--scope <scope>", "
|
|
146
|
+
.description("Register a teammate process (claude/codex) in a Teamwork session — it stays idle until the first `teamwork send --to <teammate>` arrives")
|
|
147
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
168
148
|
.option("--agent <agent-name>", "load .trellis/agents/<name>.md (sets default --provider / --model / system prompt)")
|
|
169
|
-
.option("--provider <provider>", "
|
|
170
|
-
.option("--as <name>", "
|
|
171
|
-
.option("--cwd <path>", "
|
|
149
|
+
.option("--provider <provider>", "teammate provider: claude | codex (overrides agent)")
|
|
150
|
+
.option("--as <name>", "teammate name in the Teamwork session (default: <agent-name> if --agent is set)")
|
|
151
|
+
.option("--cwd <path>", "teammate working directory (default: process cwd)")
|
|
172
152
|
.option("--model <id>", "model override")
|
|
173
153
|
.option("--resume <id>", "resume an existing session/thread id")
|
|
174
|
-
.option("--sandbox <mode>", "codex-only:
|
|
175
|
-
.option("--timeout <duration>", "auto-kill
|
|
176
|
-
.option("--warn-before <duration>", "emit supervisor_warning before timeout (
|
|
177
|
-
.option("--file <path>", "include a file's content as context in the
|
|
154
|
+
.option("--sandbox <mode>", "codex-only: teammate sandbox mode: read-only | workspace-write | danger-full-access (default workspace-write)")
|
|
155
|
+
.option("--timeout <duration>", "auto-kill teammate process after this duration (e.g. 30m, 1h, 7200s)")
|
|
156
|
+
.option("--warn-before <duration>", "emit supervisor_warning before timeout (default 5m; 0ms disables)")
|
|
157
|
+
.option("--file <path>", "include a file's content as context in the teammate's system prompt (glob supported, repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
178
158
|
.option("--jsonl <path>", "parse a Trellis jsonl manifest ({file, reason} per line) and include each referenced file (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
179
|
-
.option("--by <agent>", "identity recorded as the spawn author (defaults to
|
|
180
|
-
.option("--inbox-policy <policy>", "
|
|
181
|
-
.option("--idle-timeout <duration>", "OOM-guard idle-cleanup TTL
|
|
182
|
-
.option("--max-live-
|
|
159
|
+
.option("--by <agent>", "identity recorded as the spawn author (defaults to TRELLIS_TEAMWORK_AS env or 'main')")
|
|
160
|
+
.option("--inbox-policy <policy>", "teammate inbox delivery policy: explicitOnly | broadcastAndExplicit (default explicitOnly)")
|
|
161
|
+
.option("--idle-timeout <duration>", "OOM-guard idle-cleanup TTL for this teammate (default 5m; 0 disables)")
|
|
162
|
+
.option("--max-live-teammates <n>", "spawn-time live-teammate budget for this project/scope (default 6; 0 disables)", parseNonNegativeInteger)
|
|
183
163
|
.action(async (name, raw) => {
|
|
184
164
|
const opts = raw;
|
|
185
165
|
if (opts.provider !== undefined && !isProvider(opts.provider)) {
|
|
@@ -188,7 +168,7 @@ export function registerChannelCommand(program) {
|
|
|
188
168
|
}
|
|
189
169
|
try {
|
|
190
170
|
const sandbox = parseCodexSandboxMode(opts.sandbox);
|
|
191
|
-
await
|
|
171
|
+
await teamworkSessionSpawn(name, {
|
|
192
172
|
agent: opts.agent,
|
|
193
173
|
provider: opts.provider,
|
|
194
174
|
as: opts.as,
|
|
@@ -204,7 +184,7 @@ export function registerChannelCommand(program) {
|
|
|
204
184
|
scope: opts.scope,
|
|
205
185
|
inboxPolicy: parseInboxPolicy(opts.inboxPolicy),
|
|
206
186
|
idleTimeoutMs: parseDuration(opts.idleTimeout),
|
|
207
|
-
maxLiveWorkers: opts.
|
|
187
|
+
maxLiveWorkers: opts.maxLiveTeammates,
|
|
208
188
|
});
|
|
209
189
|
}
|
|
210
190
|
catch (err) {
|
|
@@ -212,38 +192,32 @@ export function registerChannelCommand(program) {
|
|
|
212
192
|
process.exit(1);
|
|
213
193
|
}
|
|
214
194
|
});
|
|
215
|
-
|
|
216
|
-
.command("
|
|
217
|
-
.description("
|
|
218
|
-
.
|
|
219
|
-
.option("--project-key <key>", "project bucket containing the channel (project scope only)")
|
|
220
|
-
.option("--include-terminal", "include done, error, killed, and crashed workers")
|
|
221
|
-
.option("--json", "print the complete worker projection as JSON")
|
|
222
|
-
.action(async (name, raw) => {
|
|
223
|
-
const opts = raw;
|
|
195
|
+
teamwork
|
|
196
|
+
.command("batch <plan>")
|
|
197
|
+
.description("Submit one frozen Teamwork plan; requires an installed host adapter")
|
|
198
|
+
.action(async (_planPath) => {
|
|
224
199
|
try {
|
|
225
|
-
|
|
200
|
+
throw new Error("no verified teammate host adapter is installed; batch dispatch refused before writing coordination state");
|
|
226
201
|
}
|
|
227
202
|
catch (err) {
|
|
228
203
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
229
204
|
process.exit(1);
|
|
230
205
|
}
|
|
231
206
|
});
|
|
232
|
-
|
|
207
|
+
teamwork
|
|
233
208
|
.command("run [name]")
|
|
234
|
-
.description("One-shot: create ephemeral
|
|
209
|
+
.description("One-shot: create an ephemeral Teamwork session, start a teammate, send the prompt, wait for completion, print the answer, and clean up")
|
|
235
210
|
.option("--agent <agent-name>", "load .trellis/agents/<name>.md (sets default --provider / --as / system prompt)")
|
|
236
|
-
.option("--provider <provider>", "
|
|
237
|
-
.option("--as <name>", "
|
|
238
|
-
.option("--cwd <path>", "
|
|
211
|
+
.option("--provider <provider>", "teammate provider: claude | codex (overrides agent)")
|
|
212
|
+
.option("--as <name>", "teammate name (default: agent name if --agent set)")
|
|
213
|
+
.option("--cwd <path>", "teammate working directory")
|
|
239
214
|
.option("--model <id>", "model override")
|
|
240
215
|
.option("--file <path>", "include a file as context (glob supported, repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
241
216
|
.option("--jsonl <path>", "parse a Trellis jsonl manifest and include each referenced file (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
242
217
|
.option("--message <text>", "inline prompt text")
|
|
243
218
|
.option("--message-file <path>", "read prompt body from file")
|
|
244
219
|
.option("--stdin", "read prompt body from stdin")
|
|
245
|
-
.option("--
|
|
246
|
-
.option("--timeout <duration>", "max time to wait for done (e.g. 30s, 5m, 1h; default 5m, or channel.subnode.timeout for --agent subnode)")
|
|
220
|
+
.option("--timeout <duration>", "max time to wait for done (e.g. 30s, 5m, 1h; default 5m)")
|
|
247
221
|
.action(async (name, raw) => {
|
|
248
222
|
const opts = raw;
|
|
249
223
|
if (opts.provider !== undefined && !isProvider(opts.provider)) {
|
|
@@ -251,7 +225,7 @@ export function registerChannelCommand(program) {
|
|
|
251
225
|
process.exit(1);
|
|
252
226
|
}
|
|
253
227
|
try {
|
|
254
|
-
await
|
|
228
|
+
await teamworkSessionRun({
|
|
255
229
|
name,
|
|
256
230
|
agent: opts.agent,
|
|
257
231
|
provider: opts.provider,
|
|
@@ -264,7 +238,6 @@ export function registerChannelCommand(program) {
|
|
|
264
238
|
textFile: opts.messageFile,
|
|
265
239
|
stdin: opts.stdin,
|
|
266
240
|
timeoutMs: parseDuration(opts.timeout),
|
|
267
|
-
ownerSession: opts.ownerSession,
|
|
268
241
|
});
|
|
269
242
|
}
|
|
270
243
|
catch (err) {
|
|
@@ -272,34 +245,34 @@ export function registerChannelCommand(program) {
|
|
|
272
245
|
process.exit(1);
|
|
273
246
|
}
|
|
274
247
|
});
|
|
275
|
-
|
|
248
|
+
teamwork
|
|
276
249
|
.command("rm <name>")
|
|
277
|
-
.description("
|
|
278
|
-
.option("--scope <scope>", "
|
|
250
|
+
.description("Stop teammate processes and delete a Teamwork session entirely")
|
|
251
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
279
252
|
.action(async (name, raw) => {
|
|
280
253
|
try {
|
|
281
|
-
await
|
|
254
|
+
await teamworkSessionRm(name, raw);
|
|
282
255
|
}
|
|
283
256
|
catch (err) {
|
|
284
257
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
285
258
|
process.exit(1);
|
|
286
259
|
}
|
|
287
260
|
});
|
|
288
|
-
|
|
261
|
+
teamwork
|
|
289
262
|
.command("prune")
|
|
290
|
-
.description("Bulk-remove
|
|
291
|
-
.option("--scope <scope>", "
|
|
292
|
-
.option("--all", "remove all
|
|
293
|
-
.option("--empty", "remove
|
|
294
|
-
.option("--idle <duration>", "remove
|
|
295
|
-
.option("--ephemeral", "remove only
|
|
263
|
+
.description("Bulk-remove Teamwork sessions by criteria (defaults to dry-run preview)")
|
|
264
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
265
|
+
.option("--all", "remove all Teamwork sessions (except live ones and --keep)")
|
|
266
|
+
.option("--empty", "remove Teamwork sessions with no activity (only create event)")
|
|
267
|
+
.option("--idle <duration>", "remove sessions whose last event is older than this (e.g. 1h, 7d)")
|
|
268
|
+
.option("--ephemeral", "remove only sessions marked `--ephemeral` at create time")
|
|
296
269
|
.option("--yes", "actually delete (default is dry-run)")
|
|
297
270
|
.option("--dry-run", "show what would be removed without deleting", true)
|
|
298
|
-
.option("--keep <names>", "comma-separated
|
|
271
|
+
.option("--keep <names>", "comma-separated Teamwork session names to keep regardless")
|
|
299
272
|
.action(async (raw) => {
|
|
300
273
|
const opts = raw;
|
|
301
274
|
try {
|
|
302
|
-
await
|
|
275
|
+
await teamworkSessionPrune({
|
|
303
276
|
all: opts.all,
|
|
304
277
|
empty: opts.empty,
|
|
305
278
|
idleMs: parseDuration(opts.idle),
|
|
@@ -315,29 +288,28 @@ export function registerChannelCommand(program) {
|
|
|
315
288
|
process.exit(1);
|
|
316
289
|
}
|
|
317
290
|
});
|
|
318
|
-
|
|
291
|
+
teamwork
|
|
319
292
|
.command("list")
|
|
320
|
-
.description("List
|
|
321
|
-
.option("--scope <scope>", "
|
|
293
|
+
.description("List Teamwork Sessions in ~/.trellis/teamwork/ with teammate and activity summary")
|
|
294
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
322
295
|
.option("--json", "emit JSON instead of a formatted table")
|
|
323
|
-
.option("--project <slug>", "filter
|
|
324
|
-
.option("--all", "include ephemeral
|
|
296
|
+
.option("--project <slug>", "filter sessions whose `task` field contains this substring")
|
|
297
|
+
.option("--all", "include ephemeral sessions (default: hide sessions marked ephemeral)")
|
|
325
298
|
.option("--all-projects", "scan every project bucket (default: only the current cwd's project)")
|
|
326
|
-
.option("--owner-session <id>", "exactly match the immutable main Codex session owner")
|
|
327
299
|
.action(async (raw) => {
|
|
328
300
|
const opts = raw;
|
|
329
301
|
try {
|
|
330
|
-
await
|
|
302
|
+
await teamworkSessionList(opts);
|
|
331
303
|
}
|
|
332
304
|
catch (err) {
|
|
333
305
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
334
306
|
process.exit(1);
|
|
335
307
|
}
|
|
336
308
|
});
|
|
337
|
-
|
|
309
|
+
teamwork
|
|
338
310
|
.command("messages <name>")
|
|
339
|
-
.description("View messages and events in
|
|
340
|
-
.option("--scope <scope>", "
|
|
311
|
+
.description("View messages and events in a Teamwork session")
|
|
312
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
341
313
|
.option("--raw", "print raw JSON (one event per line)")
|
|
342
314
|
.option("--follow", "stream new events as they arrive (Ctrl-C to stop)")
|
|
343
315
|
.option("--last <N>", "show only the last N matching events", (v) => Number.parseInt(v, 10))
|
|
@@ -351,7 +323,7 @@ export function registerChannelCommand(program) {
|
|
|
351
323
|
.action(async (name, raw) => {
|
|
352
324
|
const opts = raw;
|
|
353
325
|
try {
|
|
354
|
-
await
|
|
326
|
+
await teamworkSessionMessages(name, {
|
|
355
327
|
raw: opts.raw,
|
|
356
328
|
follow: opts.follow,
|
|
357
329
|
last: opts.last,
|
|
@@ -370,27 +342,27 @@ export function registerChannelCommand(program) {
|
|
|
370
342
|
process.exit(1);
|
|
371
343
|
}
|
|
372
344
|
});
|
|
373
|
-
|
|
345
|
+
teamwork
|
|
374
346
|
.command("kill <name>")
|
|
375
|
-
.description("Stop a
|
|
376
|
-
.requiredOption("--as <agent>", "
|
|
377
|
-
.option("--scope <scope>", "
|
|
347
|
+
.description("Stop a teammate process in the Teamwork session (SIGTERM, or SIGKILL with --force)")
|
|
348
|
+
.requiredOption("--as <agent>", "teammate agent name")
|
|
349
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
378
350
|
.option("--force", "skip graceful shutdown, send SIGKILL immediately")
|
|
379
351
|
.action(async (name, raw) => {
|
|
380
352
|
const opts = raw;
|
|
381
353
|
try {
|
|
382
|
-
await
|
|
354
|
+
await teamworkSessionKill(name, opts);
|
|
383
355
|
}
|
|
384
356
|
catch (err) {
|
|
385
357
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
386
358
|
process.exit(1);
|
|
387
359
|
}
|
|
388
360
|
});
|
|
389
|
-
|
|
361
|
+
teamwork
|
|
390
362
|
.command("post <name> <action>")
|
|
391
|
-
.description("Append a structured thread event to a forum
|
|
363
|
+
.description("Append a structured thread event to a Teamwork forum")
|
|
392
364
|
.requiredOption("--as <agent>", "agent name posting")
|
|
393
|
-
.option("--scope <scope>", "
|
|
365
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
394
366
|
.option("--thread <key>", "thread key (required except opened)")
|
|
395
367
|
.option("--title <text>", "thread title")
|
|
396
368
|
.option("--text <text>", "event body")
|
|
@@ -403,11 +375,9 @@ export function registerChannelCommand(program) {
|
|
|
403
375
|
.option("--summary <text>", "thread summary")
|
|
404
376
|
.option("--context-file <absolute-path>", "absolute file path attached as thread context (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
405
377
|
.option("--context-raw <text>", "raw thread context text (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
406
|
-
.option("--linked-context-file <absolute-path>", "[deprecated alias for --context-file] absolute file path (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
407
|
-
.option("--linked-context-raw <text>", "[deprecated alias for --context-raw] raw context text (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
408
378
|
.action(async (name, action, raw) => {
|
|
409
379
|
try {
|
|
410
|
-
await
|
|
380
|
+
await teamworkSessionThreadPost(name, {
|
|
411
381
|
...raw,
|
|
412
382
|
action,
|
|
413
383
|
});
|
|
@@ -417,32 +387,32 @@ export function registerChannelCommand(program) {
|
|
|
417
387
|
process.exit(1);
|
|
418
388
|
}
|
|
419
389
|
});
|
|
420
|
-
|
|
390
|
+
teamwork
|
|
421
391
|
.command("forum <name>")
|
|
422
|
-
.description("List threads in a forum
|
|
423
|
-
.option("--scope <scope>", "
|
|
392
|
+
.description("List threads in a Teamwork forum")
|
|
393
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
424
394
|
.option("--status <status>", "filter by thread status")
|
|
425
395
|
.option("--raw", "print raw reduced thread JSON")
|
|
426
396
|
.action(async (name, raw) => {
|
|
427
397
|
try {
|
|
428
|
-
await
|
|
398
|
+
await teamworkSessionForumList(name, raw);
|
|
429
399
|
}
|
|
430
400
|
catch (err) {
|
|
431
401
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
432
402
|
process.exit(1);
|
|
433
403
|
}
|
|
434
404
|
});
|
|
435
|
-
const thread =
|
|
405
|
+
const thread = teamwork
|
|
436
406
|
.command("thread")
|
|
437
407
|
.description("Show or mutate one thread timeline");
|
|
438
408
|
thread
|
|
439
|
-
.argument("<name>", "
|
|
409
|
+
.argument("<name>", "Teamwork session name")
|
|
440
410
|
.argument("<thread>", "thread key")
|
|
441
|
-
.option("--scope <scope>", "
|
|
411
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
442
412
|
.option("--raw", "print raw thread events")
|
|
443
413
|
.action(async (name, threadKey, raw) => {
|
|
444
414
|
try {
|
|
445
|
-
await
|
|
415
|
+
await teamworkSessionThreadShow(name, threadKey, raw);
|
|
446
416
|
}
|
|
447
417
|
catch (err) {
|
|
448
418
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
@@ -451,33 +421,33 @@ export function registerChannelCommand(program) {
|
|
|
451
421
|
});
|
|
452
422
|
thread
|
|
453
423
|
.command("rename <name> <oldThread> <newThread>")
|
|
454
|
-
.description("Rename a thread inside a forum
|
|
424
|
+
.description("Rename a thread inside a Teamwork forum")
|
|
455
425
|
.requiredOption("--as <agent>", "agent name")
|
|
456
|
-
.option("--scope <scope>", "
|
|
426
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
457
427
|
.action(async (name, oldThread, newThread, raw) => {
|
|
458
428
|
const opts = raw;
|
|
459
429
|
try {
|
|
460
|
-
await
|
|
430
|
+
await teamworkSessionThreadRename(name, oldThread, newThread, opts);
|
|
461
431
|
}
|
|
462
432
|
catch (err) {
|
|
463
433
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
464
434
|
process.exit(1);
|
|
465
435
|
}
|
|
466
436
|
});
|
|
467
|
-
const context =
|
|
437
|
+
const context = teamwork
|
|
468
438
|
.command("context")
|
|
469
|
-
.description("Manage
|
|
439
|
+
.description("Manage Teamwork session-level or thread-level context entries");
|
|
470
440
|
const addContextOptions = (cmd) => cmd
|
|
471
441
|
.option("--as <agent>", "agent name", "main")
|
|
472
|
-
.option("--scope <scope>", "
|
|
473
|
-
.option("--thread <key>", "mutate thread-level context instead of
|
|
442
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
443
|
+
.option("--thread <key>", "mutate thread-level context instead of Teamwork session-level")
|
|
474
444
|
.option("--file <absolute-path>", "absolute file path (repeatable)", (val, prev) => [...(prev ?? []), val], [])
|
|
475
445
|
.option("--raw <text>", "raw text entry (repeatable)", (val, prev) => [...(prev ?? []), val], []);
|
|
476
446
|
addContextOptions(context.command("add <name>"))
|
|
477
447
|
.description("Add context entries")
|
|
478
448
|
.action(async (name, raw) => {
|
|
479
449
|
try {
|
|
480
|
-
await
|
|
450
|
+
await teamworkSessionContextAdd(name, raw);
|
|
481
451
|
}
|
|
482
452
|
catch (err) {
|
|
483
453
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
@@ -488,7 +458,7 @@ export function registerChannelCommand(program) {
|
|
|
488
458
|
.description("Delete context entries")
|
|
489
459
|
.action(async (name, raw) => {
|
|
490
460
|
try {
|
|
491
|
-
await
|
|
461
|
+
await teamworkSessionContextDelete(name, raw);
|
|
492
462
|
}
|
|
493
463
|
catch (err) {
|
|
494
464
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
@@ -498,31 +468,31 @@ export function registerChannelCommand(program) {
|
|
|
498
468
|
context
|
|
499
469
|
.command("list <name>")
|
|
500
470
|
.description("List projected current context entries")
|
|
501
|
-
.option("--scope <scope>", "
|
|
502
|
-
.option("--thread <key>", "show thread-level context instead of
|
|
471
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
472
|
+
.option("--thread <key>", "show thread-level context instead of Teamwork session-level")
|
|
503
473
|
.option("--raw", "print one context entry JSON per line")
|
|
504
474
|
.action(async (name, raw) => {
|
|
505
475
|
try {
|
|
506
|
-
await
|
|
476
|
+
await teamworkSessionContextList(name, raw);
|
|
507
477
|
}
|
|
508
478
|
catch (err) {
|
|
509
479
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
510
480
|
process.exit(1);
|
|
511
481
|
}
|
|
512
482
|
});
|
|
513
|
-
const title =
|
|
483
|
+
const title = teamwork
|
|
514
484
|
.command("title")
|
|
515
|
-
.description("Set or clear the
|
|
485
|
+
.description("Set or clear the Teamwork session title");
|
|
516
486
|
title
|
|
517
487
|
.command("set <name>")
|
|
518
|
-
.description("Set the
|
|
488
|
+
.description("Set the Teamwork session title")
|
|
519
489
|
.option("--as <agent>", "agent name", "main")
|
|
520
|
-
.option("--scope <scope>", "
|
|
490
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
521
491
|
.requiredOption("--title <text>", "display title")
|
|
522
492
|
.action(async (name, raw) => {
|
|
523
493
|
const opts = raw;
|
|
524
494
|
try {
|
|
525
|
-
await
|
|
495
|
+
await teamworkSessionTitleSet(name, opts);
|
|
526
496
|
}
|
|
527
497
|
catch (err) {
|
|
528
498
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
@@ -531,25 +501,25 @@ export function registerChannelCommand(program) {
|
|
|
531
501
|
});
|
|
532
502
|
title
|
|
533
503
|
.command("clear <name>")
|
|
534
|
-
.description("Clear the
|
|
504
|
+
.description("Clear the Teamwork session title")
|
|
535
505
|
.option("--as <agent>", "agent name", "main")
|
|
536
|
-
.option("--scope <scope>", "
|
|
506
|
+
.option("--scope <scope>", "Teamwork session scope: project | global")
|
|
537
507
|
.action(async (name, raw) => {
|
|
538
508
|
try {
|
|
539
|
-
await
|
|
509
|
+
await teamworkSessionTitleClear(name, raw);
|
|
540
510
|
}
|
|
541
511
|
catch (err) {
|
|
542
512
|
console.error(chalk.red("Error:"), err instanceof Error ? err.message : err);
|
|
543
513
|
process.exit(1);
|
|
544
514
|
}
|
|
545
515
|
});
|
|
546
|
-
// Hidden: supervisor entry point invoked by `
|
|
547
|
-
|
|
548
|
-
.command("__supervisor <
|
|
516
|
+
// Hidden: supervisor entry point invoked by `teamwork spawn` via fork.
|
|
517
|
+
teamwork
|
|
518
|
+
.command("__supervisor <teamwork-session> <teammate> <config>")
|
|
549
519
|
.description("[internal] supervisor process entry point — do not invoke directly")
|
|
550
|
-
.action(async (
|
|
520
|
+
.action(async (sessionId, teammateName, configPath) => {
|
|
551
521
|
try {
|
|
552
|
-
await runSupervisor(
|
|
522
|
+
await runSupervisor(sessionId, teammateName, configPath);
|
|
553
523
|
}
|
|
554
524
|
catch (err) {
|
|
555
525
|
console.error(chalk.red("Supervisor error:"), err instanceof Error ? err.message : err);
|
|
@@ -557,9 +527,9 @@ export function registerChannelCommand(program) {
|
|
|
557
527
|
}
|
|
558
528
|
});
|
|
559
529
|
// Dev-only: feed a recorded stream-json / wire trace through the matching
|
|
560
|
-
// adapter and print the resulting
|
|
530
|
+
// adapter and print the resulting Teamwork events. Used during adapter
|
|
561
531
|
// development to verify against real-CLI fixtures.
|
|
562
|
-
|
|
532
|
+
teamwork
|
|
563
533
|
.command("__parse-trace <adapter> <file>")
|
|
564
534
|
.description("[dev] Run a recorded trace through the parser and print events")
|
|
565
535
|
.action((adapter, file) => {
|