@pennixrv/trellis 0.7.0-beta.8 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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.0-beta.9.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 -191
- package/dist/templates/copilot/hooks/session-start.py +30 -26
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +7 -150
- 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 +563 -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 +114 -377
- package/dist/templates/trellis/workflow.md +111 -699
- 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 -193
- 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 -69
- 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 -597
- 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
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Supervisor process: owns
|
|
3
|
-
*
|
|
2
|
+
* Supervisor process: owns one teammate process (Claude Code or Codex) and
|
|
3
|
+
* bridges teammate messages with the TeamworkSession event log.
|
|
4
4
|
*
|
|
5
|
-
* Run as: `trellis
|
|
5
|
+
* Run as: `trellis teamwork __supervisor <sessionId> <teammate> <config-path>`
|
|
6
6
|
*
|
|
7
7
|
* Three concurrent loops:
|
|
8
|
-
* 1. stdout reader — parse
|
|
9
|
-
* 2. inbox watcher — read events.jsonl for `to=<
|
|
10
|
-
* translate via adapter.encodeUserMessage →
|
|
11
|
-
* 3. signal handler — SIGTERM → close
|
|
8
|
+
* 1. stdout reader — parse teammate output → adapter → append events
|
|
9
|
+
* 2. inbox watcher — read events.jsonl for `to=<teammate>` messages,
|
|
10
|
+
* translate via adapter.encodeUserMessage → process stdin
|
|
11
|
+
* 3. signal handler — SIGTERM → close process stdin → 3s → SIGTERM → 3s → SIGKILL
|
|
12
12
|
* → write `killed` event → exit
|
|
13
13
|
*/
|
|
14
14
|
import { spawn } from "node:child_process";
|
|
15
15
|
import fs from "node:fs";
|
|
16
16
|
import path from "node:path";
|
|
17
|
-
import { DEFAULT_INBOX_POLICY, } from "@pennixrv/trellis-core/
|
|
17
|
+
import { DEFAULT_INBOX_POLICY, } from "@pennixrv/trellis-core/teamwork";
|
|
18
18
|
import { shouldUseSystemPromptFile } from "./adapters/claude.js";
|
|
19
19
|
import { getAdapter } from "./adapters/index.js";
|
|
20
20
|
import { appendEvent } from "./store/events.js";
|
|
@@ -27,7 +27,7 @@ import { TurnTracker } from "./supervisor/turns.js";
|
|
|
27
27
|
import { scheduleSupervisorTimeoutWarning } from "./supervisor/warning.js";
|
|
28
28
|
const SHUTDOWN_GRACE_MS = 3000;
|
|
29
29
|
/**
|
|
30
|
-
* Drain
|
|
30
|
+
* Drain teammate output before synthesising terminal state and removing the
|
|
31
31
|
* supervisor's runtime files.
|
|
32
32
|
*/
|
|
33
33
|
export async function finalizeSupervisorExit(args) {
|
|
@@ -55,7 +55,7 @@ export async function finalizeSupervisorExit(args) {
|
|
|
55
55
|
* Resolve the real launch target for npm `.cmd` shims on Windows.
|
|
56
56
|
*
|
|
57
57
|
* @param provider CLI basename for the provider, such as `codex` or `claude`.
|
|
58
|
-
* @param cwd
|
|
58
|
+
* @param cwd Teammate launch directory, used to check local `node_modules/.bin` first.
|
|
59
59
|
* @returns Command and prefix arguments that can be passed directly to `spawn()`.
|
|
60
60
|
*/
|
|
61
61
|
export function resolveProviderPath(provider, cwd) {
|
|
@@ -99,19 +99,19 @@ export function resolveProviderPath(provider, cwd) {
|
|
|
99
99
|
return fallback;
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
|
-
* Entry point invoked by `trellis
|
|
102
|
+
* Entry point invoked by `trellis teamwork __supervisor <sessionId> <teammate> <config>`.
|
|
103
103
|
*/
|
|
104
|
-
export async function runSupervisor(
|
|
104
|
+
export async function runSupervisor(sessionId, workerName, configPath) {
|
|
105
105
|
const config = readConfig(configPath);
|
|
106
|
-
// Self-pid file lets `trellis
|
|
107
|
-
const project = process.env.
|
|
108
|
-
fs.writeFileSync(workerFile(
|
|
106
|
+
// Self-pid file lets `trellis teamwork kill` find us.
|
|
107
|
+
const project = process.env.TRELLIS_TEAMWORK_PROJECT;
|
|
108
|
+
fs.writeFileSync(workerFile(sessionId, workerName, "pid", project), String(process.pid));
|
|
109
109
|
// ── adapter selection ──
|
|
110
110
|
const adapter = getAdapter(config.provider);
|
|
111
111
|
const adapterCtx = adapter.createCtx();
|
|
112
|
-
// Persist an oversized system prompt to the
|
|
112
|
+
// Persist an oversized system prompt to the teammate dir and hand adapters a
|
|
113
113
|
// file path. Inlining a large prompt (agent body + injected --file/--jsonl
|
|
114
|
-
// context) on the
|
|
114
|
+
// context) on the teammate command line breaks spawn(): Windows CreateProcess
|
|
115
115
|
// caps the command line at 32,767 chars and fails with a silent-to-the-user
|
|
116
116
|
// ENAMETOOLONG. Prompts within the inline budget stay on the argv flag so
|
|
117
117
|
// Claude Code installs older than v2.0.34 (no --append-system-prompt-file)
|
|
@@ -119,7 +119,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
119
119
|
// prompt flag (claude: --append-system-prompt-file) prefer it.
|
|
120
120
|
let systemPromptFile;
|
|
121
121
|
if (shouldUseSystemPromptFile(config.systemPrompt)) {
|
|
122
|
-
systemPromptFile = workerFile(
|
|
122
|
+
systemPromptFile = workerFile(sessionId, workerName, "system-prompt.md", project);
|
|
123
123
|
fs.writeFileSync(systemPromptFile, config.systemPrompt);
|
|
124
124
|
}
|
|
125
125
|
const view = {
|
|
@@ -135,10 +135,10 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
135
135
|
...process.env,
|
|
136
136
|
...config.env,
|
|
137
137
|
TRELLIS_HOOKS: "0",
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
TRELLIS_TEAMWORK_SESSION: sessionId,
|
|
139
|
+
TRELLIS_TEAMWORK_AS: workerName,
|
|
140
140
|
};
|
|
141
|
-
const logPath = workerFile(
|
|
141
|
+
const logPath = workerFile(sessionId, workerName, "log", project);
|
|
142
142
|
const log = fs.createWriteStream(logPath);
|
|
143
143
|
const resolvedProvider = resolveProviderPath(adapter.provider, config.cwd);
|
|
144
144
|
const resolvedProviderDisplay = [
|
|
@@ -156,7 +156,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
156
156
|
// create the controller and attach listeners synchronously, with no
|
|
157
157
|
// await between spawn() and child.on("error").
|
|
158
158
|
const shutdown = createShutdown({
|
|
159
|
-
|
|
159
|
+
sessionId,
|
|
160
160
|
workerName,
|
|
161
161
|
log,
|
|
162
162
|
getChild: () => child,
|
|
@@ -168,17 +168,16 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
168
168
|
});
|
|
169
169
|
const stdoutDrain = createStdoutDrainControl();
|
|
170
170
|
const idleTimerRef = {};
|
|
171
|
-
const inboxAbort = new AbortController();
|
|
172
171
|
const turnTracker = new TurnTracker({
|
|
173
172
|
onIdleExit: () => idleTimerRef.current?.pause(),
|
|
174
173
|
onIdleEnter: () => idleTimerRef.current?.reset(),
|
|
175
174
|
});
|
|
176
175
|
// Attach before any await. Node drains unread child stdio after `exit`, so
|
|
177
176
|
// attaching only after the durable `spawned` append can silently discard a
|
|
178
|
-
// fast
|
|
177
|
+
// fast teammate's final output. Line processing stays gated until `spawned`
|
|
179
178
|
// is durable, preserving event-log order.
|
|
180
179
|
const stdoutDrained = startStdoutPump({
|
|
181
|
-
|
|
180
|
+
sessionId,
|
|
182
181
|
workerName,
|
|
183
182
|
child,
|
|
184
183
|
adapter,
|
|
@@ -186,16 +185,6 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
186
185
|
log,
|
|
187
186
|
shutdown,
|
|
188
187
|
turnTracker,
|
|
189
|
-
project,
|
|
190
|
-
...(config.agent === "subnode"
|
|
191
|
-
? {
|
|
192
|
-
onDone: () => {
|
|
193
|
-
idleTimerRef.current?.cancel();
|
|
194
|
-
inboxAbort.abort();
|
|
195
|
-
shutdown.complete();
|
|
196
|
-
},
|
|
197
|
-
}
|
|
198
|
-
: {}),
|
|
199
188
|
processLines: stdoutDrain.processLines,
|
|
200
189
|
signal: stdoutDrain.signal,
|
|
201
190
|
});
|
|
@@ -223,9 +212,9 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
223
212
|
// during pipe teardown). The startup-failed path runs an IIFE that
|
|
224
213
|
// owns process.exit; subsequent fires must be no-ops or we'd queue
|
|
225
214
|
// duplicate error events.
|
|
226
|
-
if (spawnFailed
|
|
215
|
+
if (spawnFailed)
|
|
227
216
|
return;
|
|
228
|
-
log.write(`[supervisor]
|
|
217
|
+
log.write(`[supervisor] teammate error: ${err.message}\n`);
|
|
229
218
|
if (!child.pid) {
|
|
230
219
|
// Pre-spawn failure (ENOENT / EACCES): emit ONE `error` event,
|
|
231
220
|
// skip the misleading `spawned{pid:undefined}`, clean up, and exit
|
|
@@ -236,22 +225,22 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
236
225
|
stdoutDrain.discard();
|
|
237
226
|
void (async () => {
|
|
238
227
|
try {
|
|
239
|
-
await appendEvent(
|
|
228
|
+
await appendEvent(sessionId, {
|
|
240
229
|
kind: "error",
|
|
241
230
|
by: `supervisor:${workerName}`,
|
|
242
|
-
message: `
|
|
231
|
+
message: `teammate process start failed: ${err.message}`,
|
|
243
232
|
provider: config.provider,
|
|
244
233
|
}, project);
|
|
245
234
|
}
|
|
246
235
|
catch {
|
|
247
236
|
// ignore — we're exiting anyway
|
|
248
237
|
}
|
|
249
|
-
await cleanup(
|
|
238
|
+
await cleanup(sessionId, workerName).catch(() => undefined);
|
|
250
239
|
process.exit(1);
|
|
251
240
|
})();
|
|
252
241
|
return;
|
|
253
242
|
}
|
|
254
|
-
// Post-spawn error (
|
|
243
|
+
// Post-spawn error (teammate process already running). Claude M2 fix: await
|
|
255
244
|
// the `error` append BEFORE requesting shutdown so `killed` can't
|
|
256
245
|
// land first in events.jsonl.
|
|
257
246
|
//
|
|
@@ -262,10 +251,10 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
262
251
|
shutdown.claim("crash");
|
|
263
252
|
void (async () => {
|
|
264
253
|
try {
|
|
265
|
-
await appendEvent(
|
|
254
|
+
await appendEvent(sessionId, {
|
|
266
255
|
kind: "error",
|
|
267
256
|
by: `supervisor:${workerName}`,
|
|
268
|
-
message: `
|
|
257
|
+
message: `teammate process error: ${err.message}`,
|
|
269
258
|
provider: config.provider,
|
|
270
259
|
}, project);
|
|
271
260
|
}
|
|
@@ -286,7 +275,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
286
275
|
abortStdoutDrain: stdoutDrain.abortReading,
|
|
287
276
|
onDrainTimeout: () => log.write(`[supervisor] stdout did not close within ${SHUTDOWN_GRACE_MS}ms; draining buffered lines and exiting\n`),
|
|
288
277
|
finalizeOnExit: () => shutdown.finalizeOnExit(code, sig),
|
|
289
|
-
cleanup: () => cleanup(
|
|
278
|
+
cleanup: () => cleanup(sessionId, workerName),
|
|
290
279
|
exit: () => process.exit(0),
|
|
291
280
|
});
|
|
292
281
|
});
|
|
@@ -295,7 +284,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
295
284
|
// into `shutdown.request` instead of using Node's default behaviour
|
|
296
285
|
// (which would orphan the child and skip the `killed` event).
|
|
297
286
|
process.on("SIGTERM", () => {
|
|
298
|
-
void shutdown.request("SIGTERM", readExternalShutdownReason(
|
|
287
|
+
void shutdown.request("SIGTERM", readExternalShutdownReason(sessionId, workerName, project));
|
|
299
288
|
});
|
|
300
289
|
process.on("SIGINT", () => void shutdown.request("SIGINT", "explicit-kill"));
|
|
301
290
|
// SIGHUP arrives when the parent terminal closes — without this
|
|
@@ -320,8 +309,8 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
320
309
|
return;
|
|
321
310
|
}
|
|
322
311
|
try {
|
|
323
|
-
fs.writeFileSync(workerFile(
|
|
324
|
-
await appendEvent(
|
|
312
|
+
fs.writeFileSync(workerFile(sessionId, workerName, "worker-pid", project), String(child.pid));
|
|
313
|
+
await appendEvent(sessionId, {
|
|
325
314
|
kind: "spawned",
|
|
326
315
|
by: config.spawnedBy ?? "main",
|
|
327
316
|
as: workerName,
|
|
@@ -356,16 +345,16 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
356
345
|
// ── timeout guard (anti-zombie) ──
|
|
357
346
|
if (config.timeoutMs && config.timeoutMs > 0) {
|
|
358
347
|
setTimeout(() => {
|
|
359
|
-
log.write(`[supervisor] timeout ${config.timeoutMs}ms reached,
|
|
348
|
+
log.write(`[supervisor] timeout ${config.timeoutMs}ms reached, stopping teammate\n`);
|
|
360
349
|
// shutdown.request emits a single `killed{reason:"timeout"}` event;
|
|
361
350
|
// no need to emit a separate one here.
|
|
362
351
|
void shutdown.request("SIGTERM", "timeout");
|
|
363
352
|
}, config.timeoutMs).unref();
|
|
364
353
|
// Fire-and-forget pre-timeout observability warning. One-shot, guarded
|
|
365
|
-
// by shutdown/terminal/exit state so it stays quiet once the
|
|
354
|
+
// by shutdown/terminal/exit state so it stays quiet once the teammate is
|
|
366
355
|
// already on its way out.
|
|
367
356
|
scheduleSupervisorTimeoutWarning({
|
|
368
|
-
|
|
357
|
+
sessionId,
|
|
369
358
|
workerName,
|
|
370
359
|
timeoutMs: config.timeoutMs,
|
|
371
360
|
warnBeforeMs: config.warnBeforeMs,
|
|
@@ -379,14 +368,15 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
379
368
|
// Start BEFORE adapter.handshake() so messages arriving during the
|
|
380
369
|
// handshake window are captured. The adapter's `isReady()` is checked
|
|
381
370
|
// inside runInboxWatcher; codex blocks there until thread/start lands.
|
|
382
|
-
|
|
371
|
+
const abort = new AbortController();
|
|
372
|
+
process.on("exit", () => abort.abort());
|
|
383
373
|
void runInboxWatcher({
|
|
384
|
-
|
|
374
|
+
sessionId,
|
|
385
375
|
workerName,
|
|
386
376
|
adapter,
|
|
387
377
|
ctx: adapterCtx,
|
|
388
378
|
child,
|
|
389
|
-
signal:
|
|
379
|
+
signal: abort.signal,
|
|
390
380
|
inboxPolicy: config.inboxPolicy ?? DEFAULT_INBOX_POLICY,
|
|
391
381
|
turnTracker,
|
|
392
382
|
});
|
|
@@ -399,11 +389,11 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
399
389
|
const msg = err instanceof Error ? err.message : String(err);
|
|
400
390
|
log.write(`[supervisor] adapter handshake failed: ${msg}\n`);
|
|
401
391
|
// Codex #4 fix: emit an `error` event with the handshake message
|
|
402
|
-
// BEFORE requesting shutdown — otherwise the
|
|
392
|
+
// BEFORE requesting shutdown — otherwise the Teamwork Session only sees a
|
|
403
393
|
// `killed{reason:"crash"}` with no detail on what went wrong.
|
|
404
394
|
void (async () => {
|
|
405
395
|
try {
|
|
406
|
-
await appendEvent(
|
|
396
|
+
await appendEvent(sessionId, {
|
|
407
397
|
kind: "error",
|
|
408
398
|
by: `supervisor:${workerName}`,
|
|
409
399
|
message: `handshake failed: ${msg}`,
|
|
@@ -419,14 +409,14 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
419
409
|
}
|
|
420
410
|
}
|
|
421
411
|
}
|
|
422
|
-
async function cleanup(
|
|
412
|
+
async function cleanup(sessionId, workerName) {
|
|
423
413
|
// Remove ephemeral runtime files. Keep `log` (forensic), `session-id` /
|
|
424
414
|
// `thread-id` (future resume). The .spawnlock should already be gone
|
|
425
415
|
// because `withLock` released it; we delete it defensively in case the
|
|
426
416
|
// CLI crashed mid-spawn and left a stale one.
|
|
427
417
|
// Keep `log` (forensic), `session-id` / `thread-id` (future resume).
|
|
428
|
-
// `inbox-cursor` is kept so a respawn (same
|
|
429
|
-
// killing the
|
|
418
|
+
// `inbox-cursor` is kept so a respawn (same teammate name without
|
|
419
|
+
// killing the Teamwork Session) doesn't replay messages.
|
|
430
420
|
// `system-prompt.md` may carry a large injected context; a respawn rewrites
|
|
431
421
|
// it from config when needed, so it is removed unconditionally (also when
|
|
432
422
|
// the current run inlined the prompt and would otherwise leave a stale one).
|
|
@@ -440,15 +430,15 @@ async function cleanup(channelName, workerName) {
|
|
|
440
430
|
"reservation",
|
|
441
431
|
]) {
|
|
442
432
|
try {
|
|
443
|
-
fs.unlinkSync(workerFile(
|
|
433
|
+
fs.unlinkSync(workerFile(sessionId, workerName, suffix, process.env.TRELLIS_TEAMWORK_PROJECT));
|
|
444
434
|
}
|
|
445
435
|
catch {
|
|
446
436
|
// already gone
|
|
447
437
|
}
|
|
448
438
|
}
|
|
449
439
|
}
|
|
450
|
-
function readExternalShutdownReason(
|
|
451
|
-
const file = workerFile(
|
|
440
|
+
function readExternalShutdownReason(sessionId, workerName, project) {
|
|
441
|
+
const file = workerFile(sessionId, workerName, "shutdown-reason", project);
|
|
452
442
|
try {
|
|
453
443
|
const reason = fs.readFileSync(file, "utf-8").trim();
|
|
454
444
|
fs.unlinkSync(file);
|
|
@@ -464,8 +454,8 @@ function readConfig(p) {
|
|
|
464
454
|
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
465
455
|
}
|
|
466
456
|
// Helper to write a fresh config file before forking the supervisor.
|
|
467
|
-
export function writeSupervisorConfig(
|
|
468
|
-
const p = workerFile(
|
|
457
|
+
export function writeSupervisorConfig(sessionId, workerName, config, project) {
|
|
458
|
+
const p = workerFile(sessionId, workerName, "config", project);
|
|
469
459
|
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
470
460
|
fs.writeFileSync(p, JSON.stringify(config, null, 2), "utf-8");
|
|
471
461
|
return p;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/commands/teamwork/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TeammateProvider } from "./profiles.js";
|
|
2
|
+
export type TeammateTransport = "codex-app-server" | "acp" | "claude-cli";
|
|
3
|
+
export interface TeammateAdapterContract {
|
|
4
|
+
provider: TeammateProvider;
|
|
5
|
+
transport: TeammateTransport;
|
|
6
|
+
nativeDelegationDisabled: true;
|
|
7
|
+
supportsLaunch: true;
|
|
8
|
+
supportsPrompt: true;
|
|
9
|
+
supportsContinuation: boolean;
|
|
10
|
+
supportsInterrupt: boolean;
|
|
11
|
+
supportsCancel: true;
|
|
12
|
+
supportsTerminal: boolean;
|
|
13
|
+
supportsFailure: true;
|
|
14
|
+
}
|
|
15
|
+
export declare function getTeammateAdapter(provider: TeammateProvider): TeammateAdapterContract;
|
|
16
|
+
export declare function listTeammateProviders(): TeammateProvider[];
|
|
17
|
+
export interface TeammateHostCapabilities {
|
|
18
|
+
foregroundWait: boolean;
|
|
19
|
+
protectedArtifactWrites: boolean;
|
|
20
|
+
protectedTargetsReadOnly: boolean;
|
|
21
|
+
gitStateReadOnly: boolean;
|
|
22
|
+
attemptArtifactWrites: boolean;
|
|
23
|
+
nativeDelegationDisabled: boolean;
|
|
24
|
+
implicitMemoryDisabled: boolean;
|
|
25
|
+
providerTransports: TeammateTransport[];
|
|
26
|
+
providerOptions: Partial<Record<TeammateProvider, string[]>>;
|
|
27
|
+
verifiedHostCap: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function assertTeammateHostCapability(provider: TeammateProvider, host: TeammateHostCapabilities, options?: Record<string, string | number | boolean>): void;
|
|
30
|
+
export declare function assertTeammateAdapterContract(provider: TeammateProvider): void;
|
|
31
|
+
//# sourceMappingURL=teammate-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teammate-adapters.d.ts","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,KAAK,GAAG,YAAY,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wBAAwB,EAAE,IAAI,CAAC;IAC/B,cAAc,EAAE,IAAI,CAAC;IACrB,cAAc,EAAE,IAAI,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,IAAI,CAAC;CACvB;AAqDD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAEzB;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,OAAO,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,wBAAwB,EAC9B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,GACtD,IAAI,CAuCN;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,gBAAgB,GACzB,IAAI,CAgBN"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const ADAPTERS = {
|
|
2
|
+
codex: {
|
|
3
|
+
provider: "codex",
|
|
4
|
+
transport: "codex-app-server",
|
|
5
|
+
nativeDelegationDisabled: true,
|
|
6
|
+
supportsLaunch: true,
|
|
7
|
+
supportsPrompt: true,
|
|
8
|
+
supportsContinuation: true,
|
|
9
|
+
supportsInterrupt: true,
|
|
10
|
+
supportsCancel: true,
|
|
11
|
+
supportsTerminal: true,
|
|
12
|
+
supportsFailure: true,
|
|
13
|
+
},
|
|
14
|
+
dsh: {
|
|
15
|
+
provider: "dsh",
|
|
16
|
+
transport: "acp",
|
|
17
|
+
nativeDelegationDisabled: true,
|
|
18
|
+
supportsLaunch: true,
|
|
19
|
+
supportsPrompt: true,
|
|
20
|
+
supportsContinuation: true,
|
|
21
|
+
supportsInterrupt: true,
|
|
22
|
+
supportsCancel: true,
|
|
23
|
+
supportsTerminal: true,
|
|
24
|
+
supportsFailure: true,
|
|
25
|
+
},
|
|
26
|
+
copilot: {
|
|
27
|
+
provider: "copilot",
|
|
28
|
+
transport: "acp",
|
|
29
|
+
nativeDelegationDisabled: true,
|
|
30
|
+
supportsLaunch: true,
|
|
31
|
+
supportsPrompt: true,
|
|
32
|
+
supportsContinuation: true,
|
|
33
|
+
supportsInterrupt: true,
|
|
34
|
+
supportsCancel: true,
|
|
35
|
+
supportsTerminal: true,
|
|
36
|
+
supportsFailure: true,
|
|
37
|
+
},
|
|
38
|
+
claude: {
|
|
39
|
+
provider: "claude",
|
|
40
|
+
transport: "claude-cli",
|
|
41
|
+
nativeDelegationDisabled: true,
|
|
42
|
+
supportsLaunch: true,
|
|
43
|
+
supportsPrompt: true,
|
|
44
|
+
supportsContinuation: true,
|
|
45
|
+
supportsInterrupt: true,
|
|
46
|
+
supportsCancel: true,
|
|
47
|
+
supportsTerminal: true,
|
|
48
|
+
supportsFailure: true,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
export function getTeammateAdapter(provider) {
|
|
52
|
+
return ADAPTERS[provider];
|
|
53
|
+
}
|
|
54
|
+
export function listTeammateProviders() {
|
|
55
|
+
return Object.keys(ADAPTERS);
|
|
56
|
+
}
|
|
57
|
+
export function assertTeammateHostCapability(provider, host, options = {}) {
|
|
58
|
+
const adapter = getTeammateAdapter(provider);
|
|
59
|
+
if (host.foregroundWait !== true ||
|
|
60
|
+
host.protectedArtifactWrites !== true ||
|
|
61
|
+
host.protectedTargetsReadOnly !== true ||
|
|
62
|
+
host.gitStateReadOnly !== true ||
|
|
63
|
+
host.attemptArtifactWrites !== true ||
|
|
64
|
+
host.nativeDelegationDisabled !== true ||
|
|
65
|
+
host.implicitMemoryDisabled !== true) {
|
|
66
|
+
throw new Error("teammate host capability proof is incomplete; refusing batch dispatch");
|
|
67
|
+
}
|
|
68
|
+
if (!Number.isInteger(host.verifiedHostCap) || host.verifiedHostCap <= 0) {
|
|
69
|
+
throw new Error("teammate host capability proof has no positive verified host cap");
|
|
70
|
+
}
|
|
71
|
+
if (!host.providerTransports.includes(adapter.transport)) {
|
|
72
|
+
throw new Error(`teammate provider '${provider}' transport is not verified by the host`);
|
|
73
|
+
}
|
|
74
|
+
if (!adapter.nativeDelegationDisabled) {
|
|
75
|
+
throw new Error(`teammate provider '${provider}' does not disable native delegation`);
|
|
76
|
+
}
|
|
77
|
+
const supportedOptions = host.providerOptions[provider] ?? [];
|
|
78
|
+
const unsupportedOptions = Object.keys(options).filter((key) => !supportedOptions.includes(key));
|
|
79
|
+
if (unsupportedOptions.length > 0) {
|
|
80
|
+
throw new Error(`teammate provider '${provider}' has unsupported options: ${unsupportedOptions.join(", ")}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function assertTeammateAdapterContract(provider) {
|
|
84
|
+
const adapter = getTeammateAdapter(provider);
|
|
85
|
+
if (!adapter.nativeDelegationDisabled ||
|
|
86
|
+
!adapter.supportsLaunch ||
|
|
87
|
+
!adapter.supportsPrompt ||
|
|
88
|
+
!adapter.supportsContinuation ||
|
|
89
|
+
!adapter.supportsInterrupt ||
|
|
90
|
+
!adapter.supportsCancel ||
|
|
91
|
+
!adapter.supportsTerminal ||
|
|
92
|
+
!adapter.supportsFailure) {
|
|
93
|
+
throw new Error(`teammate provider '${provider}' has an incomplete lifecycle contract`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=teammate-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teammate-adapters.js","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TeammateConfig {
|
|
2
|
+
maxConcurrency: number;
|
|
3
|
+
}
|
|
4
|
+
export interface TeammateGuardConfig {
|
|
5
|
+
maxLiveTeammates: number;
|
|
6
|
+
nonBatchReserved: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TeammateRuntimeConfig {
|
|
9
|
+
teammate: TeammateConfig;
|
|
10
|
+
guard: TeammateGuardConfig;
|
|
11
|
+
sourceDigest?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function resolveTeammateRuntimeConfig(cwd?: string, env?: NodeJS.ProcessEnv): TeammateRuntimeConfig;
|
|
14
|
+
export declare function effectiveTeammateCapacity(input: {
|
|
15
|
+
requested?: number;
|
|
16
|
+
config: TeammateRuntimeConfig;
|
|
17
|
+
verifiedHostCap: number;
|
|
18
|
+
}): number;
|
|
19
|
+
//# sourceMappingURL=teammate-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teammate-config.d.ts","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsDD,wBAAgB,4BAA4B,CAC1C,GAAG,SAAgB,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,qBAAqB,CA2CvB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAuCT"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { DIR_NAMES } from "../../constants/paths.js";
|
|
5
|
+
const DEFAULT_CONFIG = {
|
|
6
|
+
teammate: { maxConcurrency: 1 },
|
|
7
|
+
guard: { maxLiveTeammates: 6, nonBatchReserved: 0 },
|
|
8
|
+
};
|
|
9
|
+
function integer(value, field, positive = false) {
|
|
10
|
+
if (value === undefined)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (!Number.isInteger(value) || (positive ? value <= 0 : value < 0)) {
|
|
13
|
+
throw new Error(`${field} must be a ${positive ? "positive" : "non-negative"} integer`);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
function yamlInteger(content, section, key) {
|
|
18
|
+
const lines = content.split("\n");
|
|
19
|
+
let inTeamwork = false;
|
|
20
|
+
let inSection = false;
|
|
21
|
+
for (const raw of lines) {
|
|
22
|
+
const line = raw.replace(/\r$/, "");
|
|
23
|
+
const trimmed = line.trimEnd();
|
|
24
|
+
if (/^teamwork:\s*$/.test(trimmed)) {
|
|
25
|
+
inTeamwork = true;
|
|
26
|
+
inSection = false;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (inTeamwork && new RegExp(`^ ${section}:\\s*$`).test(trimmed)) {
|
|
30
|
+
inSection = true;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (inSection) {
|
|
34
|
+
const match = new RegExp(`^ ${key}:\\s*(-?\\d+)\\s*$`).exec(trimmed);
|
|
35
|
+
if (match)
|
|
36
|
+
return Number(match[1]);
|
|
37
|
+
if (!/^ {4}\S/.test(line))
|
|
38
|
+
inSection = false;
|
|
39
|
+
}
|
|
40
|
+
if (inTeamwork && /^\S/.test(line) && !/^teamwork:\s*$/.test(trimmed)) {
|
|
41
|
+
inTeamwork = false;
|
|
42
|
+
inSection = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
export function resolveTeammateRuntimeConfig(cwd = process.cwd(), env = process.env) {
|
|
48
|
+
const configPath = path.join(cwd, DIR_NAMES.WORKFLOW, "config.yaml");
|
|
49
|
+
let content = "";
|
|
50
|
+
try {
|
|
51
|
+
content = fs.readFileSync(configPath, "utf8");
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Built-in defaults are intentionally conservative.
|
|
55
|
+
}
|
|
56
|
+
const maxConcurrency = integer(env.TRELLIS_TEAMWORK_TEAMMATE_MAX_CONCURRENCY
|
|
57
|
+
? Number(env.TRELLIS_TEAMWORK_TEAMMATE_MAX_CONCURRENCY)
|
|
58
|
+
: yamlInteger(content, "teammate", "max_concurrency"), "teamwork.teammate.max_concurrency", true) ?? DEFAULT_CONFIG.teammate.maxConcurrency;
|
|
59
|
+
const maxLiveTeammates = integer(env.TRELLIS_TEAMWORK_MAX_LIVE_TEAMMATES
|
|
60
|
+
? Number(env.TRELLIS_TEAMWORK_MAX_LIVE_TEAMMATES)
|
|
61
|
+
: yamlInteger(content, "teammate_guard", "max_live_teammates"), "teamwork.teammate_guard.max_live_teammates", true) ?? DEFAULT_CONFIG.guard.maxLiveTeammates;
|
|
62
|
+
const nonBatchReserved = integer(env.TRELLIS_TEAMWORK_TEAMMATE_RESERVED
|
|
63
|
+
? Number(env.TRELLIS_TEAMWORK_TEAMMATE_RESERVED)
|
|
64
|
+
: yamlInteger(content, "teammate_guard", "non_batch_reserved"), "teamwork.teammate_guard.non_batch_reserved") ?? DEFAULT_CONFIG.guard.nonBatchReserved;
|
|
65
|
+
return {
|
|
66
|
+
teammate: { maxConcurrency },
|
|
67
|
+
guard: { maxLiveTeammates, nonBatchReserved },
|
|
68
|
+
...(content
|
|
69
|
+
? {
|
|
70
|
+
sourceDigest: crypto
|
|
71
|
+
.createHash("sha256")
|
|
72
|
+
.update(content)
|
|
73
|
+
.digest("hex"),
|
|
74
|
+
}
|
|
75
|
+
: {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function effectiveTeammateCapacity(input) {
|
|
79
|
+
integer(input.config.teammate.maxConcurrency, "teamwork.teammate.max_concurrency", true);
|
|
80
|
+
integer(input.config.guard.maxLiveTeammates, "teamwork.teammate_guard.max_live_teammates", true);
|
|
81
|
+
integer(input.config.guard.nonBatchReserved, "teamwork.teammate_guard.non_batch_reserved");
|
|
82
|
+
const requested = input.requested ?? input.config.teammate.maxConcurrency;
|
|
83
|
+
integer(requested, "batch.requested_capacity", true);
|
|
84
|
+
integer(input.verifiedHostCap, "verified_host_cap", true);
|
|
85
|
+
const availableGuard = input.config.guard.maxLiveTeammates - input.config.guard.nonBatchReserved;
|
|
86
|
+
if (availableGuard <= 0) {
|
|
87
|
+
throw new Error("teamwork.teammate_guard has no capacity after non-batch reservations");
|
|
88
|
+
}
|
|
89
|
+
const capacity = Math.min(requested, input.config.teammate.maxConcurrency, availableGuard, input.verifiedHostCap);
|
|
90
|
+
if (capacity <= 0)
|
|
91
|
+
throw new Error("effective teammate capacity must be positive");
|
|
92
|
+
if (input.requested !== undefined && input.requested > capacity) {
|
|
93
|
+
throw new Error(`requested teammate capacity ${input.requested} exceeds verified limit ${capacity}`);
|
|
94
|
+
}
|
|
95
|
+
return capacity;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=teammate-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teammate-config.js","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-config.ts"],"names":[],"mappings":"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"}
|