@pennixrv/trellis 0.7.1 → 0.7.2-beta.2
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 +10 -7
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/ablate.d.ts.map +1 -1
- package/dist/commands/ablate.js +2 -0
- package/dist/commands/ablate.js.map +1 -1
- package/dist/commands/backup.d.ts +4 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +75 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +705 -681
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mem.d.ts.map +1 -1
- package/dist/commands/mem.js +49 -7
- package/dist/commands/mem.js.map +1 -1
- package/dist/commands/task-progress.d.ts +1 -0
- package/dist/commands/task-progress.d.ts.map +1 -1
- package/dist/commands/task-progress.js +67 -25
- package/dist/commands/task-progress.js.map +1 -1
- package/dist/commands/teamwork/adapters/acp.d.ts +20 -0
- package/dist/commands/teamwork/adapters/acp.d.ts.map +1 -0
- package/dist/commands/teamwork/adapters/acp.js +268 -0
- package/dist/commands/teamwork/adapters/acp.js.map +1 -0
- package/dist/commands/teamwork/adapters/claude.d.ts +1 -0
- package/dist/commands/teamwork/adapters/claude.d.ts.map +1 -1
- package/dist/commands/teamwork/adapters/claude.js +5 -0
- package/dist/commands/teamwork/adapters/claude.js.map +1 -1
- package/dist/commands/teamwork/adapters/codex.d.ts +3 -2
- package/dist/commands/teamwork/adapters/codex.d.ts.map +1 -1
- package/dist/commands/teamwork/adapters/codex.js +14 -15
- package/dist/commands/teamwork/adapters/codex.js.map +1 -1
- package/dist/commands/teamwork/adapters/index.d.ts +23 -1
- package/dist/commands/teamwork/adapters/index.d.ts.map +1 -1
- package/dist/commands/teamwork/adapters/index.js +163 -24
- package/dist/commands/teamwork/adapters/index.js.map +1 -1
- package/dist/commands/teamwork/agent-loader.d.ts +2 -1
- package/dist/commands/teamwork/agent-loader.d.ts.map +1 -1
- package/dist/commands/teamwork/agent-loader.js +2 -1
- package/dist/commands/teamwork/agent-loader.js.map +1 -1
- package/dist/commands/teamwork/artifact.d.ts +42 -14
- package/dist/commands/teamwork/artifact.d.ts.map +1 -1
- package/dist/commands/teamwork/artifact.js +188 -85
- package/dist/commands/teamwork/artifact.js.map +1 -1
- package/dist/commands/teamwork/batch-reservation.d.ts +16 -0
- package/dist/commands/teamwork/batch-reservation.d.ts.map +1 -0
- package/dist/commands/teamwork/batch-reservation.js +43 -0
- package/dist/commands/teamwork/batch-reservation.js.map +1 -0
- package/dist/commands/teamwork/batch.d.ts +23 -0
- package/dist/commands/teamwork/batch.d.ts.map +1 -0
- package/dist/commands/teamwork/batch.js +415 -0
- package/dist/commands/teamwork/batch.js.map +1 -0
- package/dist/commands/teamwork/context-loader.d.ts +1 -1
- package/dist/commands/teamwork/context-loader.d.ts.map +1 -1
- package/dist/commands/teamwork/context-loader.js +19 -6
- package/dist/commands/teamwork/context-loader.js.map +1 -1
- package/dist/commands/teamwork/coordination.d.ts +88 -0
- package/dist/commands/teamwork/coordination.d.ts.map +1 -0
- package/dist/commands/teamwork/coordination.js +153 -0
- package/dist/commands/teamwork/coordination.js.map +1 -0
- package/dist/commands/teamwork/coordinator.d.ts +33 -6
- package/dist/commands/teamwork/coordinator.d.ts.map +1 -1
- package/dist/commands/teamwork/coordinator.js +948 -342
- package/dist/commands/teamwork/coordinator.js.map +1 -1
- package/dist/commands/teamwork/create.d.ts +1 -0
- package/dist/commands/teamwork/create.d.ts.map +1 -1
- package/dist/commands/teamwork/create.js +2 -1
- package/dist/commands/teamwork/create.js.map +1 -1
- package/dist/commands/teamwork/dev-parse-trace.d.ts +2 -1
- package/dist/commands/teamwork/dev-parse-trace.d.ts.map +1 -1
- package/dist/commands/teamwork/dev-parse-trace.js +2 -0
- package/dist/commands/teamwork/dev-parse-trace.js.map +1 -1
- package/dist/commands/teamwork/foreground-wait.d.ts +6 -0
- package/dist/commands/teamwork/foreground-wait.d.ts.map +1 -0
- package/dist/commands/teamwork/foreground-wait.js +65 -0
- package/dist/commands/teamwork/foreground-wait.js.map +1 -0
- package/dist/commands/teamwork/guard.d.ts +2 -2
- package/dist/commands/teamwork/guard.d.ts.map +1 -1
- package/dist/commands/teamwork/guard.js +25 -7
- package/dist/commands/teamwork/guard.js.map +1 -1
- package/dist/commands/teamwork/index.d.ts.map +1 -1
- package/dist/commands/teamwork/index.js +163 -10
- package/dist/commands/teamwork/index.js.map +1 -1
- package/dist/commands/teamwork/kill.d.ts +2 -0
- package/dist/commands/teamwork/kill.d.ts.map +1 -1
- package/dist/commands/teamwork/kill.js +79 -38
- package/dist/commands/teamwork/kill.js.map +1 -1
- package/dist/commands/teamwork/messages.d.ts.map +1 -1
- package/dist/commands/teamwork/messages.js +3 -0
- package/dist/commands/teamwork/messages.js.map +1 -1
- package/dist/commands/teamwork/plan.d.ts +22 -0
- package/dist/commands/teamwork/plan.d.ts.map +1 -0
- package/dist/commands/teamwork/plan.js +288 -0
- package/dist/commands/teamwork/plan.js.map +1 -0
- package/dist/commands/teamwork/process-identity.d.ts +3 -0
- package/dist/commands/teamwork/process-identity.d.ts.map +1 -0
- package/dist/commands/teamwork/process-identity.js +24 -0
- package/dist/commands/teamwork/process-identity.js.map +1 -0
- package/dist/commands/teamwork/profiles.d.ts +43 -6
- package/dist/commands/teamwork/profiles.d.ts.map +1 -1
- package/dist/commands/teamwork/profiles.js +138 -110
- package/dist/commands/teamwork/profiles.js.map +1 -1
- package/dist/commands/teamwork/prompt.d.ts +4 -0
- package/dist/commands/teamwork/prompt.d.ts.map +1 -0
- package/dist/commands/teamwork/prompt.js +33 -0
- package/dist/commands/teamwork/prompt.js.map +1 -0
- package/dist/commands/teamwork/result.d.ts +55 -0
- package/dist/commands/teamwork/result.d.ts.map +1 -0
- package/dist/commands/teamwork/result.js +94 -0
- package/dist/commands/teamwork/result.js.map +1 -0
- package/dist/commands/teamwork/rm.d.ts.map +1 -1
- package/dist/commands/teamwork/rm.js +64 -64
- package/dist/commands/teamwork/rm.js.map +1 -1
- package/dist/commands/teamwork/run.d.ts +5 -0
- package/dist/commands/teamwork/run.d.ts.map +1 -1
- package/dist/commands/teamwork/run.js +120 -24
- package/dist/commands/teamwork/run.js.map +1 -1
- package/dist/commands/teamwork/runtime.d.ts +9 -0
- package/dist/commands/teamwork/runtime.d.ts.map +1 -0
- package/dist/commands/teamwork/runtime.js +401 -0
- package/dist/commands/teamwork/runtime.js.map +1 -0
- package/dist/commands/teamwork/send.d.ts +1 -0
- package/dist/commands/teamwork/send.d.ts.map +1 -1
- package/dist/commands/teamwork/send.js +2 -1
- package/dist/commands/teamwork/send.js.map +1 -1
- package/dist/commands/teamwork/spawn.d.ts +10 -3
- package/dist/commands/teamwork/spawn.d.ts.map +1 -1
- package/dist/commands/teamwork/spawn.js +42 -27
- package/dist/commands/teamwork/spawn.js.map +1 -1
- package/dist/commands/teamwork/store/lock.js +28 -4
- package/dist/commands/teamwork/store/lock.js.map +1 -1
- package/dist/commands/teamwork/supervisor/inbox.d.ts +1 -0
- package/dist/commands/teamwork/supervisor/inbox.d.ts.map +1 -1
- package/dist/commands/teamwork/supervisor/inbox.js +28 -9
- package/dist/commands/teamwork/supervisor/inbox.js.map +1 -1
- package/dist/commands/teamwork/supervisor/stdout.d.ts.map +1 -1
- package/dist/commands/teamwork/supervisor/stdout.js +2 -3
- package/dist/commands/teamwork/supervisor/stdout.js.map +1 -1
- package/dist/commands/teamwork/supervisor/warning.d.ts.map +1 -1
- package/dist/commands/teamwork/supervisor/warning.js +2 -3
- package/dist/commands/teamwork/supervisor/warning.js.map +1 -1
- package/dist/commands/teamwork/supervisor.d.ts +5 -0
- package/dist/commands/teamwork/supervisor.d.ts.map +1 -1
- package/dist/commands/teamwork/supervisor.js +21 -12
- package/dist/commands/teamwork/supervisor.js.map +1 -1
- package/dist/commands/teamwork/teammate-adapters.d.ts +0 -5
- package/dist/commands/teamwork/teammate-adapters.d.ts.map +1 -1
- package/dist/commands/teamwork/teammate-adapters.js +9 -56
- package/dist/commands/teamwork/teammate-adapters.js.map +1 -1
- package/dist/commands/teamwork/teammate-config.d.ts +5 -1
- package/dist/commands/teamwork/teammate-config.d.ts.map +1 -1
- package/dist/commands/teamwork/teammate-config.js +62 -19
- package/dist/commands/teamwork/teammate-config.js.map +1 -1
- package/dist/commands/teamwork/teammate-launch.d.ts +15 -6
- package/dist/commands/teamwork/teammate-launch.d.ts.map +1 -1
- package/dist/commands/teamwork/teammate-launch.js +129 -22
- package/dist/commands/teamwork/teammate-launch.js.map +1 -1
- package/dist/commands/teamwork/wait.d.ts +2 -0
- package/dist/commands/teamwork/wait.d.ts.map +1 -1
- package/dist/commands/teamwork/wait.js +44 -3
- package/dist/commands/teamwork/wait.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +92 -84
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +635 -592
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +94 -89
- package/dist/commands/workflow.js.map +1 -1
- package/dist/configurators/shared.js +2 -2
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +14 -32
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/constants/paths.d.ts +3 -10
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +4 -13
- package/dist/constants/paths.js.map +1 -1
- package/dist/migrations/manifests/0.7.1-beta.0.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.1.json +186 -0
- package/dist/migrations/manifests/0.7.1-beta.10.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.11.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.12.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.13.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.14.json +11 -0
- package/dist/migrations/manifests/0.7.1-beta.15.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.16.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.17.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.18.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.19.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.2.json +522 -0
- package/dist/migrations/manifests/0.7.1-beta.3.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.4.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.5.json +9 -0
- package/dist/migrations/manifests/0.7.1-beta.6.json +10 -0
- package/dist/migrations/manifests/0.7.1-beta.7.json +8 -0
- package/dist/migrations/manifests/0.7.1-beta.8.json +481 -0
- package/dist/migrations/manifests/0.7.1-beta.9.json +191 -0
- package/dist/migrations/manifests/0.7.2-beta.0.json +11 -0
- package/dist/migrations/manifests/0.7.2-beta.1.json +11 -0
- package/dist/migrations/manifests/0.7.2-beta.2.json +11 -0
- package/dist/templates/claude/hooks/statusline.py +9 -4
- package/dist/templates/codex/hooks/session-start.py +14 -11
- package/dist/templates/codex/hooks.json +10 -0
- package/dist/templates/common/bundled-skills/trellis-decision-space-construction-and-merging/workflow.md +2 -0
- package/dist/templates/common/bundled-skills/trellis-goal-exploration-and-requirements/workflow.md +2 -0
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +5 -5
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +3 -2
- 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/context-injection.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-teamwork.md +14 -2
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +8 -2
- package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +2 -1
- package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +2 -2
- package/dist/templates/common/bundled-skills/trellis-solution-design-and-convergence/workflow.md +8 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +4 -2
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +2 -2
- package/dist/templates/common/bundled-skills/trellis-task-implementation/workflow.md +6 -0
- package/dist/templates/common/bundled-skills/trellis-teamwork/SKILL.md +18 -3
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/coordination-modes.md +34 -3
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-configuration-matrix.md +37 -26
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-processes.md +128 -14
- package/dist/templates/common/bundled-skills/trellis-teamwork/references/teamwork-plan-construction.md +152 -20
- package/dist/templates/common/commands/start.md +2 -2
- package/dist/templates/common/skills/before-dev.md +1 -4
- package/dist/templates/common/skills/break-loop.md +7 -18
- package/dist/templates/common/skills/check.md +7 -11
- package/dist/templates/common/skills/{brainstorm.md → request-intake.md} +5 -3
- package/dist/templates/common/skills/update-spec.md +5 -7
- package/dist/templates/copilot/hooks/session-start.py +14 -11
- package/dist/templates/copilot/index.d.ts +1 -6
- package/dist/templates/copilot/index.d.ts.map +1 -1
- package/dist/templates/copilot/index.js +1 -14
- package/dist/templates/copilot/index.js.map +1 -1
- package/dist/templates/extract.js +4 -0
- package/dist/templates/extract.js.map +1 -1
- package/dist/templates/markdown/spec/backend/index.md.txt +4 -35
- package/dist/templates/markdown/spec/frontend/index.md.txt +4 -36
- package/dist/templates/omp/extensions/trellis/index.ts.txt +2 -2
- package/dist/templates/opencode/lib/session-utils.js +301 -209
- package/dist/templates/pi/extensions/trellis/index.ts.txt +17 -1
- package/dist/templates/shared-hooks/guard-teamwork-wait.py +58 -0
- package/dist/templates/shared-hooks/index.d.ts +1 -1
- package/dist/templates/shared-hooks/index.d.ts.map +1 -1
- package/dist/templates/shared-hooks/index.js +1 -0
- package/dist/templates/shared-hooks/index.js.map +1 -1
- package/dist/templates/shared-hooks/inject-workflow-state.py +8 -3
- package/dist/templates/shared-hooks/session-start.py +16 -12
- package/dist/templates/snow/SNOW.md +1 -1
- package/dist/templates/trellis/agents/delegated-worktree-primary-agent.md +9 -0
- package/dist/templates/trellis/agents/profiles/architecture.md +9 -0
- package/dist/templates/trellis/agents/profiles/diagnosis.md +9 -0
- package/dist/templates/trellis/agents/profiles/exploration.md +9 -0
- package/dist/templates/trellis/agents/profiles/research.md +9 -0
- package/dist/templates/trellis/agents/profiles/review.md +9 -0
- package/dist/templates/trellis/agents/profiles/verification.md +9 -0
- package/dist/templates/trellis/agents/teammate-profiles.json +56 -4
- package/dist/templates/trellis/agents/teammate.md +4 -52
- package/dist/templates/trellis/config.yaml +2 -5
- package/dist/templates/trellis/index.d.ts +4 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +22 -4
- 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/active_task.py +3 -47
- package/dist/templates/trellis/scripts/common/config.py +5 -0
- package/dist/templates/trellis/scripts/common/paths.py +9 -25
- package/dist/templates/trellis/scripts/common/safe_commit.py +8 -8
- package/dist/templates/trellis/scripts/common/task_context.py +11 -51
- package/dist/templates/trellis/scripts/common/task_continuity.py +191 -60
- package/dist/templates/trellis/scripts/common/task_layout.py +80 -0
- package/dist/templates/trellis/scripts/common/task_move.py +345 -0
- package/dist/templates/trellis/scripts/common/task_store.py +51 -57
- package/dist/templates/trellis/scripts/common/task_utils.py +23 -19
- package/dist/templates/trellis/scripts/common/task_workflow.py +395 -49
- package/dist/templates/trellis/scripts/common/tasks.py +6 -5
- package/dist/templates/trellis/scripts/hooks/linear_sync.py +13 -3
- package/dist/templates/trellis/scripts/task.py +76 -24
- package/dist/templates/trellis/teamwork.json +10 -0
- package/dist/templates/trellis/workflow.md +11 -2
- package/dist/utils/ablation-store.d.ts +1 -1
- package/dist/utils/ablation-store.d.ts.map +1 -1
- package/dist/utils/ablation-store.js +58 -24
- package/dist/utils/ablation-store.js.map +1 -1
- package/dist/utils/asset-backup.d.ts +138 -0
- package/dist/utils/asset-backup.d.ts.map +1 -0
- package/dist/utils/asset-backup.js +525 -0
- package/dist/utils/asset-backup.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +1 -1
- package/dist/utils/atomic-write.d.ts.map +1 -1
- package/dist/utils/atomic-write.js +6 -3
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/manifest-prune.d.ts +4 -1
- package/dist/utils/manifest-prune.d.ts.map +1 -1
- package/dist/utils/manifest-prune.js +17 -6
- package/dist/utils/manifest-prune.js.map +1 -1
- package/dist/utils/template-fetcher.d.ts +4 -19
- package/dist/utils/template-fetcher.d.ts.map +1 -1
- package/dist/utils/template-fetcher.js +9 -45
- package/dist/utils/template-fetcher.js.map +1 -1
- package/dist/utils/template-hash.d.ts +5 -4
- package/dist/utils/template-hash.d.ts.map +1 -1
- package/dist/utils/template-hash.js +24 -17
- package/dist/utils/template-hash.js.map +1 -1
- package/package.json +3 -2
- package/dist/templates/copilot/prompts/before-dev.prompt.md +0 -39
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +0 -13
- package/dist/templates/copilot/prompts/break-loop.prompt.md +0 -129
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +0 -170
- package/dist/templates/copilot/prompts/check.prompt.md +0 -110
- package/dist/templates/copilot/prompts/create-command.prompt.md +0 -116
- package/dist/templates/copilot/prompts/finish-work.prompt.md +0 -22
- package/dist/templates/copilot/prompts/integrate-skill.prompt.md +0 -223
- package/dist/templates/copilot/prompts/onboard.prompt.md +0 -362
- package/dist/templates/copilot/prompts/record-session.prompt.md +0 -58
- package/dist/templates/copilot/prompts/start.prompt.md +0 -65
- package/dist/templates/copilot/prompts/update-spec.prompt.md +0 -358
|
@@ -1202,7 +1202,23 @@ function workflowBreadcrumb(root: string, key: string | null): string {
|
|
|
1202
1202
|
header = `Task: ${id} (${status})`;
|
|
1203
1203
|
lookup = status;
|
|
1204
1204
|
}
|
|
1205
|
-
|
|
1205
|
+
const meta = d.meta as JsonObject | undefined;
|
|
1206
|
+
if (isObj(meta) && "task_workflow" in meta) {
|
|
1207
|
+
const state = meta.task_workflow;
|
|
1208
|
+
const routed = isObj(state) && Array.isArray(state.phase_ids) ? state.phase_ids : [];
|
|
1209
|
+
const phase = isObj(state) && str(state.current_phase_id === null ? routed.at(-1) : state.current_phase_id);
|
|
1210
|
+
const phases = isObj(state) && isObj(state.phases) ? state.phases : null;
|
|
1211
|
+
const record = phase && phases?.[phase];
|
|
1212
|
+
if (phase && isObj(record) && str(record.status)) {
|
|
1213
|
+
lookup = phase;
|
|
1214
|
+
header += `; phase=${phase}; state=${str(record.status) ?? "unknown"}`;
|
|
1215
|
+
} else {
|
|
1216
|
+
lookup = "task_error";
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
} catch {
|
|
1220
|
+
lookup = "task_error";
|
|
1221
|
+
}
|
|
1206
1222
|
}
|
|
1207
1223
|
const body = templates[lookup] ?? "Refer to workflow.md for current step.";
|
|
1208
1224
|
return `<workflow-state>\n${header}\n${body}\n</workflow-state>`;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Codex PreToolUse guard for CLI-owned foreground batches.
|
|
3
|
+
|
|
4
|
+
Only supported host tool hooks are guarded. Ordinary model messages and tools
|
|
5
|
+
that the host does not expose to PreToolUse remain Skill obligations.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import hashlib
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
import shlex
|
|
13
|
+
import sys
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def decision(payload: dict) -> dict | None:
|
|
18
|
+
if not isinstance(payload, dict):
|
|
19
|
+
return None
|
|
20
|
+
if os.environ.get("TRELLIS_HOOKS") == "0":
|
|
21
|
+
return None
|
|
22
|
+
session = payload.get("session_id") or os.environ.get("CODEX_THREAD_ID")
|
|
23
|
+
if not isinstance(session, str) or not session:
|
|
24
|
+
return None
|
|
25
|
+
root = Path(payload.get("cwd") or os.getcwd()).resolve()
|
|
26
|
+
while not (root / ".trellis").is_dir() and root != root.parent:
|
|
27
|
+
root = root.parent
|
|
28
|
+
directory = root / ".trellis/.runtime/teamwork-waits" / hashlib.sha256(session.encode()).hexdigest()
|
|
29
|
+
if not directory.exists():
|
|
30
|
+
return None
|
|
31
|
+
records = list(directory.glob("*.json"))
|
|
32
|
+
if not records:
|
|
33
|
+
return None
|
|
34
|
+
for record in records:
|
|
35
|
+
try:
|
|
36
|
+
state = json.loads(record.read_text(encoding="utf-8"))
|
|
37
|
+
except (OSError, ValueError, TypeError):
|
|
38
|
+
continue
|
|
39
|
+
tool = str(payload.get("tool_name", "")).rsplit(".", 1)[-1]
|
|
40
|
+
if tool in {"write_stdin", "wait"}:
|
|
41
|
+
return None
|
|
42
|
+
tool_input = payload.get("tool_input")
|
|
43
|
+
tool_input = tool_input if isinstance(tool_input, dict) else {}
|
|
44
|
+
command = tool_input.get("command", tool_input.get("cmd"))
|
|
45
|
+
if isinstance(command, str) and not any(character in command for character in "$`;\n&|<>"):
|
|
46
|
+
try:
|
|
47
|
+
argv = shlex.split(command)
|
|
48
|
+
except ValueError:
|
|
49
|
+
argv = []
|
|
50
|
+
if argv[:3] == ["trellis", "teamwork", "reconcile"]:
|
|
51
|
+
return None
|
|
52
|
+
return {"hookSpecificOutput": {"hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "Trellis owns an outstanding foreground batch. Silently continue the original host wait handle, or interrupt that same handle. A dead coordinator still requires native teamwork reconcile; do not start another batch or take over FIFO scheduling."}}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
result = decision(json.load(sys.stdin))
|
|
57
|
+
if result:
|
|
58
|
+
print(json.dumps(result))
|
|
@@ -11,7 +11,7 @@ export interface HookScript {
|
|
|
11
11
|
/** Script content — no placeholders, ready to write directly */
|
|
12
12
|
content: string;
|
|
13
13
|
}
|
|
14
|
-
export type SharedHookName = "session-start.py" | "inject-shell-session-context.py" | "inject-workflow-state.py" | "inject-subagent-context.py" | "inject-spec-context.py";
|
|
14
|
+
export type SharedHookName = "guard-teamwork-wait.py" | "session-start.py" | "inject-shell-session-context.py" | "inject-workflow-state.py" | "inject-subagent-context.py" | "inject-spec-context.py";
|
|
15
15
|
export type SharedHookPlatform = "claude" | "cursor" | "codex" | "opencode" | "gemini" | "qoder" | "copilot" | "codebuddy" | "droid" | "kiro" | "trae" | "zcode";
|
|
16
16
|
/**
|
|
17
17
|
* Which shared hooks each platform actually invokes. Single source of truth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,iCAAiC,GACjC,0BAA0B,GAC1B,4BAA4B,GAC5B,wBAAwB,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,kBAAkB,EAClB,SAAS,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,wBAAwB,GACxB,kBAAkB,GAClB,iCAAiC,GACjC,0BAA0B,GAC1B,4BAA4B,GAC5B,wBAAwB,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,kBAAkB,EAClB,SAAS,cAAc,EAAE,CA2D1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,EAAE,CAWnD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,MAAM,EAAE;QACN,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;QAC5B,wBAAwB;KACzB;IACD,MAAM,EAAE;QACN,kBAAkB;QAClB,iCAAiC;QACjC,4BAA4B;KAC7B;IACD,KAAK,EAAE;QACL,wBAAwB;QACxB,0BAA0B;QAC1B,4BAA4B;QAC5B,wBAAwB;KACzB;IACD,QAAQ,EAAE,CAAC,wBAAwB,CAAC;IACpC,MAAM,EAAE;QACN,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,OAAO,EAAE,CAAC,0BAA0B,CAAC;IACrC,SAAS,EAAE;QACT,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,IAAI,EAAE;QACJ,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,IAAI,EAAE;QACJ,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,EAAE,CAAC;IAEV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -194,8 +194,11 @@ def get_active_task(
|
|
|
194
194
|
status = data.get("status", "")
|
|
195
195
|
if not isinstance(status, str) or not status:
|
|
196
196
|
return task_dir.name, "task_error", active.source, None
|
|
197
|
-
|
|
198
|
-
if isinstance(
|
|
197
|
+
meta = data.get("meta")
|
|
198
|
+
if isinstance(meta, dict) and "task_workflow" in meta:
|
|
199
|
+
phase_workflow = meta["task_workflow"]
|
|
200
|
+
if not isinstance(phase_workflow, dict):
|
|
201
|
+
return task_id, "task_error", active.source, None
|
|
199
202
|
phase_id = phase_workflow.get("current_phase_id")
|
|
200
203
|
phases = phase_workflow.get("phases")
|
|
201
204
|
if phase_id is None:
|
|
@@ -204,7 +207,9 @@ def get_active_task(
|
|
|
204
207
|
phase = phases.get(phase_id) if isinstance(phases, dict) and isinstance(phase_id, str) else None
|
|
205
208
|
if isinstance(phase_id, str) and isinstance(phase, dict):
|
|
206
209
|
phase_status = phase.get("status")
|
|
207
|
-
|
|
210
|
+
if isinstance(phase_status, str) and phase_status:
|
|
211
|
+
return task_id, phase_id, active.source, phase_status
|
|
212
|
+
return task_id, "task_error", active.source, None
|
|
208
213
|
return task_id, status, active.source, None
|
|
209
214
|
|
|
210
215
|
|
|
@@ -429,8 +429,7 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
429
429
|
return (
|
|
430
430
|
"Status: NO ACTIVE TASK\n"
|
|
431
431
|
"Next-Action: Classify the current turn before creating any Trellis task. "
|
|
432
|
-
"
|
|
433
|
-
"Complex task asks whether task creation and planning are allowed."
|
|
432
|
+
"Route through trellis-request-intake using the existing authorization and taskless contract."
|
|
434
433
|
)
|
|
435
434
|
|
|
436
435
|
task_ref = active.task_path
|
|
@@ -443,12 +442,10 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
443
442
|
)
|
|
444
443
|
|
|
445
444
|
task_json_path = task_dir / "task.json"
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
except (json.JSONDecodeError, PermissionError):
|
|
451
|
-
pass # Optional task metadata; fall back to generic status.
|
|
445
|
+
from common.io import read_json_checked # type: ignore[import-not-found]
|
|
446
|
+
task_data, _reason = read_json_checked(task_json_path)
|
|
447
|
+
if task_data is None or task_data.get("status") not in ("planning", "in_progress", "completed", "cancelled"):
|
|
448
|
+
return f"Status: TASK_ERROR\nTask: {task_ref}\nNext-Action: Repair the existing task record through its owner before continuing; do not create a replacement task."
|
|
452
449
|
|
|
453
450
|
task_title = task_data.get("title", task_ref)
|
|
454
451
|
task_status = task_data.get("status", "unknown")
|
|
@@ -475,7 +472,7 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
475
472
|
if task_status == "planning":
|
|
476
473
|
next_bits = [
|
|
477
474
|
"Follow the current per-turn workflow-state; task lifecycle status and artifact presence do not identify the business phase",
|
|
478
|
-
"If no phase route is initialized, load `trellis-goal-exploration-and-requirements
|
|
475
|
+
"If no phase route is initialized, initialize it through Trellis CLI, load `trellis-goal-exploration-and-requirements`, and obtain user confirmation for the recorded requirements artifact before advancing",
|
|
479
476
|
]
|
|
480
477
|
if not jsonl_ready:
|
|
481
478
|
next_bits.append("curate task context manifests only when a dispatched agent needs them")
|
|
@@ -698,13 +695,15 @@ def _build_compact_current_state(
|
|
|
698
695
|
active = _resolve_active_task(trellis_dir, input_data)
|
|
699
696
|
if active.task_path:
|
|
700
697
|
task_dir = _resolve_task_dir(trellis_dir, active.task_path)
|
|
701
|
-
status = "
|
|
698
|
+
status = "task_error"
|
|
702
699
|
task_json = task_dir / "task.json"
|
|
703
700
|
if task_json.is_file():
|
|
704
701
|
try:
|
|
705
702
|
data = json.loads(task_json.read_text(encoding="utf-8"))
|
|
706
703
|
if isinstance(data, dict):
|
|
707
|
-
|
|
704
|
+
value = data.get("status")
|
|
705
|
+
if value in ("planning", "in_progress", "completed", "cancelled"):
|
|
706
|
+
status = value
|
|
708
707
|
except (json.JSONDecodeError, OSError):
|
|
709
708
|
pass # Optional task metadata; fall back to generic status.
|
|
710
709
|
lines.append(f"Current task: {_repo_relative(repo_root, task_dir)}; status={status}.")
|
|
@@ -859,7 +858,12 @@ def main():
|
|
|
859
858
|
project_dir = Path(_normalize_windows_shell_path(val)).resolve()
|
|
860
859
|
break
|
|
861
860
|
if project_dir is None:
|
|
862
|
-
|
|
861
|
+
raw_cwd = hook_input.get("cwd")
|
|
862
|
+
project_dir = Path(_normalize_windows_shell_path(raw_cwd if isinstance(raw_cwd, str) and raw_cwd else ".")).resolve()
|
|
863
|
+
|
|
864
|
+
project_dir = next((candidate for candidate in (project_dir, *project_dir.parents) if (candidate / ".trellis").is_dir()), None)
|
|
865
|
+
if project_dir is None or not (project_dir / ".trellis" / "scripts" / "common" / "active_task.py").is_file():
|
|
866
|
+
return
|
|
863
867
|
|
|
864
868
|
trellis_dir = project_dir / ".trellis"
|
|
865
869
|
context_key = _resolve_context_key(trellis_dir, hook_input)
|
|
@@ -25,7 +25,7 @@ In Snow:
|
|
|
25
25
|
2. Dispatch implement/check/research (project agents under `.snow/agents/`). Prefer prompt first line:
|
|
26
26
|
|
|
27
27
|
```text
|
|
28
|
-
Active task: .trellis/tasks/<
|
|
28
|
+
Active task: .trellis/tasks/<task-dir>
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
3. Optional: `/trellis-continue` / `/trellis-finish-work`, or `skill-execute` on `trellis-*` skills.
|
|
@@ -16,3 +16,12 @@ start another delegated run. Verify the changes with relevant project checks
|
|
|
16
16
|
and report the files changed, evidence, and any remaining limitation. Stop and
|
|
17
17
|
report if the contract conflicts with repository instructions or requires a
|
|
18
18
|
materially different scope.
|
|
19
|
+
|
|
20
|
+
Treat `.trellis/tasks/`, task ownership, session pointers, runtime state, and
|
|
21
|
+
workflow acceptance as read-only control-plane facts. Do not invoke task CLI
|
|
22
|
+
write commands, including create, start, finish, set-meta, phase, transfer,
|
|
23
|
+
link/unlink, rename, delegate, or lifecycle commands. Write the assigned result
|
|
24
|
+
artifact only at its supplied path; do not create a second task contract.
|
|
25
|
+
One level of bounded read-only Teamwork research or review is allowed when the
|
|
26
|
+
parent contract permits it. Those teammates must not implement code or delegate
|
|
27
|
+
again. These are role obligations, not a sandbox guarantee.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 架构与方案评估(architecture)
|
|
2
|
+
|
|
3
|
+
你负责评估 brief 指定的架构问题和实质候选。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含目标与约束、当前结构、受影响边界、候选或待决问题和接受条件。先核对现有职责与接口,再比较满足当前需求的候选,包括数据与控制流、失败恢复、兼容与迁移、可验证性及维护成本。必要的源码探索或外部补证必须服务于当前决定。
|
|
6
|
+
|
|
7
|
+
结果应包含推荐及依据、排除候选与理由、接口和边界、关键情景、风险、实施与验证建议,以及仍须用户决定的取舍。证据足以评估候选后停止;不要为假设的未来增加框架,不自行扩充规划权限或实施授权。最终结论由协调者归并。
|
|
8
|
+
|
|
9
|
+
必要输入缺失、角色与 brief 冲突或需要越界操作时,报告阻断。不编写产品源码、测试或修复,不替协调者接受结果,不继续委派。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 已知故障诊断(diagnosis)
|
|
2
|
+
|
|
3
|
+
你负责诊断 brief 中已经发生的故障。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含实际症状与完整错误、期望行为、环境与版本、复现条件和近期变更。先建立事实及可重复的最小触发,再提出少量可区分的假设,按信息增益选择已授权的观测或验证,记录支持与反证。每次失败先核对现场,不连续猜测或试改。
|
|
6
|
+
|
|
7
|
+
结果应包含故障链、已排除假设、最可能根因及证据强度、剩余未知、最小修复方向和验证建议。根因证据充分或受限无法继续时停止,不把测试失败本身当作根因。复杂方法按项目技能来源规则使用,不复制用户级 Skill 内容进角色卡。
|
|
8
|
+
|
|
9
|
+
必要输入缺失、角色与 brief 冲突或需要越界操作时,报告阻断。不编写修复或顺带重构,不替协调者接受结果,不继续委派。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 本地源码探索(exploration)
|
|
2
|
+
|
|
3
|
+
你负责回答 brief 中的本地源码问题,建立可接续的代码与证据地图。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含问题、仓库与基线、主题范围、已有锚点和所需深度。先确定入口、定义和调用路径,按项目来源规则使用有效索引或有界搜索,再阅读支持结论的当前源码。追踪相关数据流、关键条件、异常路径、依赖和测试入口;区分实际源码、文档陈述和推断。
|
|
6
|
+
|
|
7
|
+
结果应直接回答问题,给出文件、符号及适用行号,说明关键路径、关系、影响边界、反例、证据不足处和建议的下一阅读点。必要路径和边界已核对后停止;不要无限扫描全库,不把代码地图写成未经验证的架构推荐或根因定论。
|
|
8
|
+
|
|
9
|
+
必要输入缺失、角色与 brief 冲突或需要越界操作时,报告阻断。不编写产品源码、测试或修复,不替协调者接受结果,不继续委派。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 外部资料研究(research)
|
|
2
|
+
|
|
3
|
+
你负责按任务输入核对资料与先例;managed batch 以 brief 为任务依据,交互式任务以当前消息为依据。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含研究问题及适用的约束、版本和来源要求。需要外部研究时,先拆出可证伪的问题,再核对官方文档、标准、维护者源码或明确标注的次级材料,记录版本、日期、反证和适用边界。仅处理给定材料的任务不要求检索外部资料。遵循明确分配的检索入口;搜索摘要只是候选,不等于已读全文。
|
|
6
|
+
|
|
7
|
+
结果应包含有出处的结论或比较;使用外部来源时附可核验链接、版本或检索日期。只有任务要求时才分析对当前项目的影响。明确区分已核实、推断、冲突和未知。证据足以支持当前决定后停止;网络或来源访问失败应如实报告,不编造检索结果,不以社区说法代替官方合同。
|
|
8
|
+
|
|
9
|
+
必要输入缺失、角色与任务冲突或需要越界操作时,报告阻断。不编写产品源码、测试或修复,不替协调者接受结果,不继续委派。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 变更与设计审查(review)
|
|
2
|
+
|
|
3
|
+
你负责审查 brief 明确指定的候选、差异、提交或设计。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含候选、需求基线、本次关注点和适用验收。沿真实调用方和相关上下文核对正确性、需求覆盖、回归、数据或安全风险及测试缺口。不能只看 diff,也不能按检查表制造问题或强加风格偏好。
|
|
6
|
+
|
|
7
|
+
结果按 [严重]、[主要]、[轻微] 排序;每项说明触发条件、实际影响、准确定位与证据和修复方向。无发现时说明检查范围及剩余风险,不能据此宣称没有 bug。默认不运行会修改现场的构建或安装;确需验证时遵守 brief 已有授权,或建议由 verification 执行。
|
|
8
|
+
|
|
9
|
+
候选的相关调用与关键风险已核对后停止。必要输入缺失、角色与 brief 冲突或需要越界操作时,报告阻断。不编写产品源码、测试或修复,不替协调者接受结果,不继续委派。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 行为与接受条件验证(verification)
|
|
2
|
+
|
|
3
|
+
你负责检验 brief 中明确的行为声明和接受条件。共同角色卡规定的范围、结果写入和停止条件始终适用。
|
|
4
|
+
|
|
5
|
+
输入应包含待验证声明、期望行为、候选版本与环境、已授权命令,以及产物、临时目录和清理约定。先将声明映射到能够证实或证伪的检查,核对实际版本与环境,再执行适用的已有测试、构建或复现步骤并解释结果。不要无故重复全套检查或添加只镜像实现的断言。
|
|
6
|
+
|
|
7
|
+
结果应将声明、检查和实际结果对应起来,记录退出事实、关键证据、pass/fail/not_run/受限、环境差异、残留资源及不能据此推断的结论。工具输出、缓存和临时复现材料可能产生文件副作用,须遵守 brief 的允许位置及清理约定,不能声称绝无副作用。
|
|
8
|
+
|
|
9
|
+
适用声明已有证据或受限无法继续时停止。缺少账号、环境或授权时停止相关检查并报告,不自行安装、登录、发布或写产品测试。不替协调者接受结果,不继续委派;根因辨析交给 diagnosis。
|
|
@@ -1,8 +1,60 @@
|
|
|
1
1
|
{
|
|
2
|
+
"schema_version": 2,
|
|
3
|
+
"default_profile": "exploration",
|
|
2
4
|
"profiles": {
|
|
3
|
-
"architecture": {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
"architecture": {
|
|
6
|
+
"role": "profiles/architecture.md",
|
|
7
|
+
"default_configuration": "codex-sol",
|
|
8
|
+
"configurations": {
|
|
9
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "xhigh" },
|
|
10
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "xhigh" },
|
|
11
|
+
"copilot-opus": { "provider": "copilot", "model": "claude-opus-5.5", "reasoning_effort": "xhigh" }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"review": {
|
|
15
|
+
"role": "profiles/review.md",
|
|
16
|
+
"default_configuration": "codex-sol",
|
|
17
|
+
"configurations": {
|
|
18
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
19
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
20
|
+
"copilot-opus": { "provider": "copilot", "model": "claude-opus-5.5", "reasoning_effort": "high" }
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"research": {
|
|
24
|
+
"role": "profiles/research.md",
|
|
25
|
+
"default_configuration": "codex-sol",
|
|
26
|
+
"configurations": {
|
|
27
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
28
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
29
|
+
"copilot-sonnet": { "provider": "copilot", "model": "claude-sonnet-5.5", "reasoning_effort": "high" }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"verification": {
|
|
33
|
+
"role": "profiles/verification.md",
|
|
34
|
+
"default_configuration": "codex-sol",
|
|
35
|
+
"configurations": {
|
|
36
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
37
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
38
|
+
"copilot-sonnet": { "provider": "copilot", "model": "claude-sonnet-5.5", "reasoning_effort": "high" }
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"exploration": {
|
|
42
|
+
"role": "profiles/exploration.md",
|
|
43
|
+
"default_configuration": "codex-sol",
|
|
44
|
+
"configurations": {
|
|
45
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
46
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
47
|
+
"copilot-sonnet": { "provider": "copilot", "model": "claude-sonnet-5.5", "reasoning_effort": "high" }
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"diagnosis": {
|
|
51
|
+
"role": "profiles/diagnosis.md",
|
|
52
|
+
"default_configuration": "codex-sol",
|
|
53
|
+
"configurations": {
|
|
54
|
+
"codex-sol": { "provider": "codex", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
55
|
+
"copilot-sol": { "provider": "copilot", "model": "gpt-6.1-sol", "reasoning_effort": "high" },
|
|
56
|
+
"copilot-opus": { "provider": "copilot", "model": "claude-opus-5.5", "reasoning_effort": "high" }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
7
59
|
}
|
|
8
60
|
}
|
|
@@ -6,58 +6,10 @@ labels: [trellis, teammate]
|
|
|
6
6
|
|
|
7
7
|
# Teammate (Teamwork runtime)
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
independently reviewable investigation, research, review, verification, or
|
|
11
|
-
evidence. The coordinator owns dispatch, retry, acceptance, and final
|
|
12
|
-
disposition.
|
|
9
|
+
你只完成协调者分配的研究、审查、验证、证据整理或建议,交付可独立核验的结论、证据、限制和阻断。不要实施产品代码,不修改源码、测试、受保护配置、任务状态或 Git 状态;只写本次明确指定的结果产物。
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
assignment,
|
|
16
|
-
the paths are:
|
|
11
|
+
只使用本次分配的来源和上下文。需要本地探索时,可在指定范围内检索文件;注入的材料是入口,不代表已提供全部来源。不读取或使用环境中的个人、历史会话或跨项目记忆,包括记忆工具;无法将其与必要证据分开时如实报告限制。
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
.trellis/tasks/<task>/teammates/<batch>/<assignment>/brief.json
|
|
20
|
-
.trellis/tasks/<task>/teammates/<batch>/<assignment>/queue.json
|
|
21
|
-
.trellis/tasks/<task>/teammates/<batch>/<assignment>/attempts/<attempt-id>/claim.json
|
|
22
|
-
.trellis/tasks/<task>/teammates/<batch>/<assignment>/attempts/<attempt-id>/worklog.md
|
|
23
|
-
.trellis/tasks/<task>/teammates/<batch>/<assignment>/attempts/<attempt-id>/report.json
|
|
24
|
-
```
|
|
13
|
+
工具可用和权限自动允许不扩大你的任务职责,也不证明存在文件系统或记忆隔离。不创建任务或 teammate,不通过后端原生能力继续委派,不自行重试,不替主代理接受结果。
|
|
25
14
|
|
|
26
|
-
|
|
27
|
-
and create exactly one pending report for this attempt using this JSON shape:
|
|
28
|
-
|
|
29
|
-
```json
|
|
30
|
-
{
|
|
31
|
-
"schema_version": 1,
|
|
32
|
-
"task_id": "<task-id>",
|
|
33
|
-
"batch_id": "<batch-id>",
|
|
34
|
-
"assignment_id": "<assignment-id>",
|
|
35
|
-
"attempt_id": "<attempt-id>",
|
|
36
|
-
"teammate_id": "<teammate-id>",
|
|
37
|
-
"status": "complete",
|
|
38
|
-
"source_digest": "<source_digest from the brief>",
|
|
39
|
-
"evidence": [
|
|
40
|
-
{
|
|
41
|
-
"id": "<evidence-id>",
|
|
42
|
-
"locator": "<path or symbol>",
|
|
43
|
-
"summary": "<finding>"
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Use only the explicit context paths frozen in the brief. Do not read or use
|
|
50
|
-
ambient personal, session, or cross-project memory, including memory tools or
|
|
51
|
-
environment-provided memory. If the host exposes such memory and cannot isolate
|
|
52
|
-
it, stop and report the host-boundary failure through the assigned failure
|
|
53
|
-
protocol.
|
|
54
|
-
|
|
55
|
-
Only submit `status: complete` when every acceptance criterion is met and at
|
|
56
|
-
least one evidence item supports the result. If the work cannot be completed,
|
|
57
|
-
record the blocker in the worklog and end the attempt through its failure
|
|
58
|
-
protocol without creating a misleading completion report. The coordinator
|
|
59
|
-
owns the queue and final disposition. Do not change the brief, task state,
|
|
60
|
-
product source, protected configuration, tests, or Git state. Write only the
|
|
61
|
-
current attempt artifacts. Do not create another teammate, delegate through a
|
|
62
|
-
provider-native mechanism, retry yourself, or claim that a report has been
|
|
63
|
-
accepted.
|
|
15
|
+
输入中的模式和结果合同规定本次提交位置与格式。使用真实证据,区分已核实、推断和未知;缺少必要信息时报告阻断,不编造身份、来源或完成事实。CLI 负责调度、FIFO、容量、继续等待、重试、取消及最终 disposition,主代理负责语义审阅和任务阶段接受。
|
|
@@ -102,7 +102,7 @@ max_journal_lines: 2000
|
|
|
102
102
|
#
|
|
103
103
|
# `idle_timeout: 0` disables idle cleanup (teammates can sit idle forever
|
|
104
104
|
# unless explicitly killed or given `--timeout`).
|
|
105
|
-
#
|
|
105
|
+
# Capacity policy lives in .trellis/teamwork.json (schema 2).
|
|
106
106
|
#
|
|
107
107
|
# `trusted_context_dirs` extends the `--file`/`--jsonl`/`--agent` containment
|
|
108
108
|
# check beyond the teammate cwd — useful when `.trellis/tasks` or
|
|
@@ -115,13 +115,10 @@ max_journal_lines: 2000
|
|
|
115
115
|
teamwork:
|
|
116
116
|
teammate_guard:
|
|
117
117
|
idle_timeout: 5m
|
|
118
|
-
|
|
119
|
-
non_batch_reserved: 0
|
|
118
|
+
# Capacity and shared live budget live in .trellis/teamwork.json.
|
|
120
119
|
# trusted_context_dirs:
|
|
121
120
|
# - /work/user/trellis_workspace
|
|
122
121
|
# auto_trust_trellis_symlinks: false
|
|
123
|
-
teammate:
|
|
124
|
-
max_concurrency: 1
|
|
125
122
|
|
|
126
123
|
#-------------------------------------------------------------------------------
|
|
127
124
|
# Codex (dispatch behavior)
|
|
@@ -25,6 +25,8 @@ export declare const commonDeveloper: string;
|
|
|
25
25
|
export declare const commonGitContext: string;
|
|
26
26
|
export declare const commonTaskQueue: string;
|
|
27
27
|
export declare const commonTaskUtils: string;
|
|
28
|
+
export declare const commonTaskLayout: string;
|
|
29
|
+
export declare const commonTaskMove: string;
|
|
28
30
|
export declare const commonActiveTask: string;
|
|
29
31
|
export declare const commonCliAdapter: string;
|
|
30
32
|
export declare const commonConfig: string;
|
|
@@ -50,8 +52,10 @@ export declare const initDeveloperScript: string;
|
|
|
50
52
|
export declare const taskScript: string;
|
|
51
53
|
export declare const getContextScript: string;
|
|
52
54
|
export declare const addSessionScript: string;
|
|
55
|
+
export declare const linearSyncScript: string;
|
|
53
56
|
export declare const workflowMdTemplate: string;
|
|
54
57
|
export declare const configYamlTemplate: string;
|
|
58
|
+
export declare const teamworkConfigTemplate: string;
|
|
55
59
|
export declare const gitignoreTemplate: string;
|
|
56
60
|
export declare const gitattributesTemplate: string;
|
|
57
61
|
export declare const teammateAgentTemplate: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,cAAc,QAA8C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAA+C,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,sBAAsB,QAAgC,CAAC;AACpE,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAGvE,eAAO,MAAM,qBAAqB,QAAqC,CAAC;AACxE,eAAO,MAAM,8BAA8B,QAE1C,CAAC;AACF,eAAO,MAAM,wBAAwB,QAEpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA6CnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAelD"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* ├── gitignore.txt # .gitignore content
|
|
19
19
|
* └── gitattributes.txt # project-root .gitattributes content
|
|
20
20
|
*/
|
|
21
|
-
import { readFileSync } from "node:fs";
|
|
21
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
22
22
|
import { dirname, join } from "node:path";
|
|
23
23
|
import { fileURLToPath } from "node:url";
|
|
24
24
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -35,6 +35,8 @@ export const commonDeveloper = readTemplate("scripts/common/developer.py");
|
|
|
35
35
|
export const commonGitContext = readTemplate("scripts/common/git_context.py");
|
|
36
36
|
export const commonTaskQueue = readTemplate("scripts/common/task_queue.py");
|
|
37
37
|
export const commonTaskUtils = readTemplate("scripts/common/task_utils.py");
|
|
38
|
+
export const commonTaskLayout = readTemplate("scripts/common/task_layout.py");
|
|
39
|
+
export const commonTaskMove = readTemplate("scripts/common/task_move.py");
|
|
38
40
|
export const commonActiveTask = readTemplate("scripts/common/active_task.py");
|
|
39
41
|
export const commonCliAdapter = readTemplate("scripts/common/cli_adapter.py");
|
|
40
42
|
export const commonConfig = readTemplate("scripts/common/config.py");
|
|
@@ -61,9 +63,11 @@ export const initDeveloperScript = readTemplate("scripts/init_developer.py");
|
|
|
61
63
|
export const taskScript = readTemplate("scripts/task.py");
|
|
62
64
|
export const getContextScript = readTemplate("scripts/get_context.py");
|
|
63
65
|
export const addSessionScript = readTemplate("scripts/add_session.py");
|
|
66
|
+
export const linearSyncScript = readTemplate("scripts/hooks/linear_sync.py");
|
|
64
67
|
// Configuration files
|
|
65
68
|
export const workflowMdTemplate = readTemplate("workflow.md");
|
|
66
69
|
export const configYamlTemplate = readTemplate("config.yaml");
|
|
70
|
+
export const teamworkConfigTemplate = readTemplate("teamwork.json");
|
|
67
71
|
export const gitignoreTemplate = readTemplate("gitignore.txt");
|
|
68
72
|
export const gitattributesTemplate = readTemplate("gitattributes.txt");
|
|
69
73
|
// Project agent roles loaded from `.trellis/agents/`.
|
|
@@ -84,6 +88,8 @@ export function getAllScripts() {
|
|
|
84
88
|
scripts.set("common/git_context.py", commonGitContext);
|
|
85
89
|
scripts.set("common/task_queue.py", commonTaskQueue);
|
|
86
90
|
scripts.set("common/task_utils.py", commonTaskUtils);
|
|
91
|
+
scripts.set("common/task_layout.py", commonTaskLayout);
|
|
92
|
+
scripts.set("common/task_move.py", commonTaskMove);
|
|
87
93
|
scripts.set("common/active_task.py", commonActiveTask);
|
|
88
94
|
scripts.set("common/cli_adapter.py", commonCliAdapter);
|
|
89
95
|
scripts.set("common/config.py", commonConfig);
|
|
@@ -110,6 +116,7 @@ export function getAllScripts() {
|
|
|
110
116
|
scripts.set("task.py", taskScript);
|
|
111
117
|
scripts.set("get_context.py", getContextScript);
|
|
112
118
|
scripts.set("add_session.py", addSessionScript);
|
|
119
|
+
scripts.set("hooks/linear_sync.py", linearSyncScript);
|
|
113
120
|
return scripts;
|
|
114
121
|
}
|
|
115
122
|
/**
|
|
@@ -122,9 +129,20 @@ export function getAllScripts() {
|
|
|
122
129
|
*/
|
|
123
130
|
export function getAllAgents() {
|
|
124
131
|
const agents = new Map();
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
function collect(directory) {
|
|
133
|
+
for (const entry of readdirSync(join(__dirname, "agents", directory), {
|
|
134
|
+
withFileTypes: true,
|
|
135
|
+
})) {
|
|
136
|
+
const relative = join(directory, entry.name);
|
|
137
|
+
if (entry.isDirectory())
|
|
138
|
+
collect(relative);
|
|
139
|
+
else if (entry.isFile())
|
|
140
|
+
agents.set(relative, readTemplate(join("agents", relative)));
|
|
141
|
+
else
|
|
142
|
+
throw new Error(`unsupported agent template: ${relative}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
collect("");
|
|
128
146
|
return agents;
|
|
129
147
|
}
|
|
130
148
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1107,7 +1107,7 @@ def _auto_commit_workspace(repo_root: Path) -> str:
|
|
|
1107
1107
|
|
|
1108
1108
|
commit_msg = get_session_commit_message(repo_root)
|
|
1109
1109
|
# Resolve the current task so staging is scoped to its dir only. The ref
|
|
1110
|
-
# is ``.trellis/tasks/<
|
|
1110
|
+
# is ``.trellis/tasks/<task-dir>`` — pass the bare task name.
|
|
1111
1111
|
current = get_current_task(repo_root)
|
|
1112
1112
|
if current:
|
|
1113
1113
|
task_name = Path(current).name
|