pi-crew 0.1.51 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -1
- package/README.md +176 -781
- package/agents/analyst.md +11 -11
- package/agents/critic.md +11 -11
- package/agents/executor.md +11 -11
- package/agents/explorer.md +11 -11
- package/agents/planner.md +11 -11
- package/agents/reviewer.md +11 -11
- package/agents/security-reviewer.md +11 -11
- package/agents/test-engineer.md +11 -11
- package/agents/verifier.md +70 -11
- package/agents/writer.md +11 -11
- package/docs/actions-reference.md +595 -0
- package/docs/commands-reference.md +347 -0
- package/docs/runtime-flow.md +148 -148
- package/index.ts +6 -6
- package/package.json +99 -99
- package/skills/async-worker-recovery/SKILL.md +42 -42
- package/skills/context-artifact-hygiene/SKILL.md +52 -52
- package/skills/delegation-patterns/SKILL.md +54 -54
- package/skills/mailbox-interactive/SKILL.md +40 -40
- package/skills/model-routing-context/SKILL.md +39 -39
- package/skills/multi-perspective-review/SKILL.md +58 -58
- package/skills/observability-reliability/SKILL.md +41 -41
- package/skills/orchestration/SKILL.md +157 -157
- package/skills/ownership-session-security/SKILL.md +41 -41
- package/skills/pi-extension-lifecycle/SKILL.md +39 -39
- package/skills/requirements-to-task-packet/SKILL.md +63 -63
- package/skills/resource-discovery-config/SKILL.md +41 -41
- package/skills/runtime-state-reader/SKILL.md +44 -44
- package/skills/secure-agent-orchestration-review/SKILL.md +45 -45
- package/skills/state-mutation-locking/SKILL.md +42 -42
- package/skills/systematic-debugging/SKILL.md +67 -67
- package/skills/ui-render-performance/SKILL.md +39 -39
- package/skills/verification-before-done/SKILL.md +57 -57
- package/skills/worktree-isolation/SKILL.md +39 -39
- package/src/adapters/claude-adapter.ts +25 -0
- package/src/adapters/codex-adapter.ts +21 -0
- package/src/adapters/cursor-adapter.ts +17 -0
- package/src/adapters/export-util.ts +137 -0
- package/src/adapters/index.ts +15 -0
- package/src/adapters/registry.ts +18 -0
- package/src/adapters/types.ts +23 -0
- package/src/agents/agent-config.ts +2 -0
- package/src/agents/agent-search.ts +98 -98
- package/src/agents/discover-agents.ts +2 -1
- package/src/config/config.ts +13 -1
- package/src/config/drift-detector.ts +211 -0
- package/src/config/markers.ts +327 -0
- package/src/config/resilient-parser.ts +108 -0
- package/src/config/suggestions.ts +74 -0
- package/src/extension/cross-extension-rpc.ts +103 -94
- package/src/extension/project-init.ts +21 -1
- package/src/extension/register.ts +45 -14
- package/src/extension/registration/commands.ts +77 -8
- package/src/extension/registration/subagent-tools.ts +10 -1
- package/src/extension/registration/team-tool.ts +10 -1
- package/src/extension/registration/viewers.ts +48 -34
- package/src/extension/run-bundle-schema.ts +89 -89
- package/src/extension/run-import.ts +25 -1
- package/src/extension/run-index.ts +5 -1
- package/src/extension/run-maintenance.ts +142 -68
- package/src/extension/team-manager-command.ts +10 -1
- package/src/extension/team-tool/doctor.ts +28 -3
- package/src/extension/team-tool/handle-settings.ts +195 -188
- package/src/extension/team-tool/inspect.ts +41 -41
- package/src/extension/team-tool/intent-policy.ts +42 -42
- package/src/extension/team-tool/lifecycle-actions.ts +27 -8
- package/src/extension/team-tool/plan.ts +19 -19
- package/src/extension/team-tool/run.ts +12 -1
- package/src/extension/team-tool.ts +11 -1
- package/src/i18n.ts +184 -184
- package/src/observability/exporters/otlp-exporter.ts +92 -77
- package/src/prompt/prompt-runtime.ts +72 -72
- package/src/runtime/agent-memory.ts +72 -72
- package/src/runtime/agent-observability.ts +114 -114
- package/src/runtime/async-marker.ts +26 -26
- package/src/runtime/attention-events.ts +28 -28
- package/src/runtime/auto-resume.ts +100 -0
- package/src/runtime/background-runner.ts +11 -1
- package/src/runtime/cancellation-token.ts +89 -89
- package/src/runtime/cancellation.ts +61 -61
- package/src/runtime/capability-inventory.ts +116 -116
- package/src/runtime/child-pi.ts +7 -2
- package/src/runtime/compaction-summary.ts +271 -0
- package/src/runtime/completion-guard.ts +190 -190
- package/src/runtime/crash-recovery.ts +33 -0
- package/src/runtime/delta-conflict.ts +360 -0
- package/src/runtime/direct-run.ts +35 -35
- package/src/runtime/foreground-control.ts +82 -82
- package/src/runtime/green-contract.ts +46 -46
- package/src/runtime/group-join.ts +106 -106
- package/src/runtime/heartbeat-gradient.ts +28 -28
- package/src/runtime/heartbeat-watcher.ts +124 -124
- package/src/runtime/iteration-hooks.ts +262 -0
- package/src/runtime/live-agent-control.ts +88 -88
- package/src/runtime/live-control-realtime.ts +36 -36
- package/src/runtime/live-extension-bridge.ts +150 -150
- package/src/runtime/live-irc.ts +92 -92
- package/src/runtime/live-session-health.ts +100 -100
- package/src/runtime/loop-gates.ts +129 -0
- package/src/runtime/metric-parser.ts +40 -0
- package/src/runtime/notebook-helpers.ts +90 -90
- package/src/runtime/orphan-sentinel.ts +7 -7
- package/src/runtime/parallel-research.ts +44 -44
- package/src/runtime/phase-progress.ts +217 -0
- package/src/runtime/pi-args.ts +38 -11
- package/src/runtime/pi-json-output.ts +111 -111
- package/src/runtime/pi-spawn.ts +57 -7
- package/src/runtime/policy-engine.ts +79 -79
- package/src/runtime/post-checks.ts +122 -0
- package/src/runtime/progress-event-coalescer.ts +43 -43
- package/src/runtime/prose-compressor.ts +164 -164
- package/src/runtime/recovery-recipes.ts +74 -74
- package/src/runtime/result-extractor.ts +121 -121
- package/src/runtime/role-permission.ts +39 -39
- package/src/runtime/sensitive-paths.ts +2 -2
- package/src/runtime/session-resources.ts +25 -25
- package/src/runtime/session-snapshot.ts +59 -59
- package/src/runtime/session-usage.ts +79 -79
- package/src/runtime/sidechain-output.ts +29 -29
- package/src/runtime/stream-preview.ts +177 -177
- package/src/runtime/supervisor-contact.ts +59 -59
- package/src/runtime/task-display.ts +38 -38
- package/src/runtime/task-graph.ts +207 -0
- package/src/runtime/task-quality.ts +207 -0
- package/src/runtime/task-runner/capabilities.ts +78 -78
- package/src/runtime/task-runner/live-executor.ts +7 -1
- package/src/runtime/task-runner/progress.ts +119 -119
- package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
- package/src/runtime/task-runner/result-utils.ts +14 -14
- package/src/runtime/task-runner/run-projection.ts +103 -103
- package/src/runtime/task-runner/state-helpers.ts +22 -22
- package/src/runtime/team-runner.ts +117 -7
- package/src/runtime/worker-heartbeat.ts +21 -21
- package/src/runtime/worker-startup.ts +57 -57
- package/src/runtime/workflow-state.ts +187 -0
- package/src/runtime/workspace-tree.ts +298 -298
- package/src/schema/config-schema.ts +11 -0
- package/src/schema/validation-types.ts +148 -0
- package/src/skills/skill-templates.ts +374 -0
- package/src/state/active-run-registry.ts +35 -11
- package/src/state/atomic-write.ts +33 -26
- package/src/state/contracts.ts +1 -0
- package/src/state/event-reconstructor.ts +217 -0
- package/src/state/locks.ts +2 -13
- package/src/state/mailbox.ts +4 -3
- package/src/state/state-store.ts +32 -14
- package/src/state/task-claims.ts +44 -44
- package/src/state/types.ts +9 -0
- package/src/state/usage.ts +29 -29
- package/src/subagents/async-entry.ts +1 -1
- package/src/subagents/index.ts +3 -3
- package/src/subagents/live/control.ts +1 -1
- package/src/subagents/live/manager.ts +1 -1
- package/src/subagents/live/realtime.ts +1 -1
- package/src/subagents/live/session-runtime.ts +1 -1
- package/src/subagents/manager.ts +1 -1
- package/src/subagents/spawn.ts +1 -1
- package/src/teams/team-serializer.ts +38 -38
- package/src/types/diff.d.ts +18 -18
- package/src/ui/crew-footer.ts +101 -101
- package/src/ui/crew-select-list.ts +111 -111
- package/src/ui/crew-widget.ts +5 -2
- package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
- package/src/ui/dashboard-panes/capability-pane.ts +59 -59
- package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
- package/src/ui/dashboard-panes/metrics-pane.ts +34 -34
- package/src/ui/dashboard-panes/progress-pane.ts +11 -0
- package/src/ui/dynamic-border.ts +25 -25
- package/src/ui/layout-primitives.ts +106 -106
- package/src/ui/loaders.ts +158 -158
- package/src/ui/render-coalescer.ts +51 -51
- package/src/ui/render-diff.ts +119 -119
- package/src/ui/render-scheduler.ts +143 -143
- package/src/ui/run-action-dispatcher.ts +10 -1
- package/src/ui/spinner.ts +17 -17
- package/src/ui/status-colors.ts +58 -58
- package/src/ui/syntax-highlight.ts +116 -116
- package/src/ui/transcript-entries.ts +258 -258
- package/src/utils/completion-dedupe.ts +63 -63
- package/src/utils/frontmatter.ts +68 -68
- package/src/utils/git.ts +262 -262
- package/src/utils/ids.ts +17 -17
- package/src/utils/incremental-reader.ts +104 -104
- package/src/utils/names.ts +27 -27
- package/src/utils/redaction.ts +44 -44
- package/src/utils/safe-paths.ts +47 -47
- package/src/utils/scan-cache.ts +136 -136
- package/src/utils/sleep.ts +40 -26
- package/src/utils/task-name-generator.ts +337 -337
- package/src/workflows/validate-workflow.ts +40 -40
- package/src/worktree/branch-freshness.ts +45 -45
- package/teams/default.team.md +12 -12
- package/teams/fast-fix.team.md +11 -11
- package/teams/implementation.team.md +18 -18
- package/teams/parallel-research.team.md +14 -14
- package/teams/research.team.md +11 -11
- package/teams/review.team.md +12 -12
- package/workflows/default.workflow.md +30 -29
- package/workflows/fast-fix.workflow.md +23 -22
- package/workflows/implementation.workflow.md +43 -43
- package/workflows/parallel-research.workflow.md +46 -46
- package/workflows/research.workflow.md +22 -22
- package/workflows/review.workflow.md +30 -30
- package/docs/refactor-tasks-phase3.md +0 -394
- package/docs/refactor-tasks-phase4.md +0 -564
- package/docs/refactor-tasks-phase5.md +0 -402
- package/docs/refactor-tasks-phase6.md +0 -662
- package/docs/refactor-tasks.md +0 -1484
- package/docs/research/AGENT-EXECUTION-ARCHITECTURE.md +0 -261
- package/docs/research/AGENT-LIFECYCLE-COMPARISON.md +0 -111
- package/docs/research/AUDIT_OH_MY_PI.md +0 -261
- package/docs/research/AUDIT_PI_CREW.md +0 -457
- package/docs/research/CAVEMAN-DEEP-RESEARCH.md +0 -281
- package/docs/research/COMPARISON_OH_MY_PI_VS_PI_CREW.md +0 -264
- package/docs/research/DEEP-RESEARCH-PI-POWERBAR.md +0 -343
- package/docs/research/DEEP_RESEARCH_SUBAGENT_ARCHITECTURE.md +0 -480
- package/docs/research/GAP_CLOSURE_IMPLEMENTATION_PLAN.md +0 -354
- package/docs/research/IMPLEMENTATION_PLAN.md +0 -385
- package/docs/research/LIVE-SESSION-PRODUCTION-READY-PLAN.md +0 -502
- package/docs/research/OH-MY-PI-DEEP-RESEARCH-v14.7.6.md +0 -266
- package/docs/research/REMAINING-GAPS-PLAN.md +0 -363
- package/docs/research/SESSION-SUMMARY-2026-05-08.md +0 -146
- package/docs/research/UI-RESPONSIVENESS-AUDIT.md +0 -173
- package/docs/research-awesome-agent-skills-distillation.md +0 -100
- package/docs/research-extension-examples.md +0 -297
- package/docs/research-extension-system.md +0 -324
- package/docs/research-oh-my-pi-distillation.md +0 -369
- package/docs/research-optimization-plan.md +0 -548
- package/docs/research-phase10-distillation.md +0 -199
- package/docs/research-phase11-distillation.md +0 -201
- package/docs/research-phase8-operator-experience-plan.md +0 -819
- package/docs/research-phase9-observability-reliability-plan.md +0 -1190
- package/docs/research-pi-coding-agent.md +0 -357
- package/docs/research-source-pi-crew-reference.md +0 -174
- package/docs/research-ui-optimization-plan.md +0 -480
- package/docs/source-runtime-refactor-map.md +0 -107
- package/src/utils/atomic-write.ts +0 -33
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import type { TeamConfig } from "../teams/team-config.ts";
|
|
2
|
-
import type { WorkflowConfig } from "./workflow-config.ts";
|
|
3
|
-
|
|
4
|
-
export function validateWorkflowForTeam(workflow: WorkflowConfig, team: TeamConfig): string[] {
|
|
5
|
-
const errors: string[] = [];
|
|
6
|
-
const roles = new Set(team.roles.map((role) => role.name));
|
|
7
|
-
const stepIds = new Set<string>();
|
|
8
|
-
|
|
9
|
-
for (const step of workflow.steps) {
|
|
10
|
-
if (stepIds.has(step.id)) errors.push(`Duplicate workflow step id '${step.id}'.`);
|
|
11
|
-
stepIds.add(step.id);
|
|
12
|
-
if (!roles.has(step.role)) errors.push(`Step '${step.id}' references unknown team role '${step.role}'.`);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
for (const step of workflow.steps) {
|
|
16
|
-
for (const dep of step.dependsOn ?? []) {
|
|
17
|
-
if (!stepIds.has(dep)) errors.push(`Step '${step.id}' depends on unknown step '${dep}'.`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const visiting = new Set<string>();
|
|
22
|
-
const visited = new Set<string>();
|
|
23
|
-
const byId = new Map(workflow.steps.map((step) => [step.id, step]));
|
|
24
|
-
|
|
25
|
-
function visit(id: string, trail: string[]): void {
|
|
26
|
-
if (visited.has(id)) return;
|
|
27
|
-
if (visiting.has(id)) {
|
|
28
|
-
errors.push(`Workflow dependency cycle detected: ${[...trail, id].join(" -> ")}.`);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
visiting.add(id);
|
|
32
|
-
const step = byId.get(id);
|
|
33
|
-
for (const dep of step?.dependsOn ?? []) visit(dep, [...trail, id]);
|
|
34
|
-
visiting.delete(id);
|
|
35
|
-
visited.add(id);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
for (const step of workflow.steps) visit(step.id, []);
|
|
39
|
-
return [...new Set(errors)];
|
|
40
|
-
}
|
|
1
|
+
import type { TeamConfig } from "../teams/team-config.ts";
|
|
2
|
+
import type { WorkflowConfig } from "./workflow-config.ts";
|
|
3
|
+
|
|
4
|
+
export function validateWorkflowForTeam(workflow: WorkflowConfig, team: TeamConfig): string[] {
|
|
5
|
+
const errors: string[] = [];
|
|
6
|
+
const roles = new Set(team.roles.map((role) => role.name));
|
|
7
|
+
const stepIds = new Set<string>();
|
|
8
|
+
|
|
9
|
+
for (const step of workflow.steps) {
|
|
10
|
+
if (stepIds.has(step.id)) errors.push(`Duplicate workflow step id '${step.id}'.`);
|
|
11
|
+
stepIds.add(step.id);
|
|
12
|
+
if (!roles.has(step.role)) errors.push(`Step '${step.id}' references unknown team role '${step.role}'.`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
for (const step of workflow.steps) {
|
|
16
|
+
for (const dep of step.dependsOn ?? []) {
|
|
17
|
+
if (!stepIds.has(dep)) errors.push(`Step '${step.id}' depends on unknown step '${dep}'.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const visiting = new Set<string>();
|
|
22
|
+
const visited = new Set<string>();
|
|
23
|
+
const byId = new Map(workflow.steps.map((step) => [step.id, step]));
|
|
24
|
+
|
|
25
|
+
function visit(id: string, trail: string[]): void {
|
|
26
|
+
if (visited.has(id)) return;
|
|
27
|
+
if (visiting.has(id)) {
|
|
28
|
+
errors.push(`Workflow dependency cycle detected: ${[...trail, id].join(" -> ")}.`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
visiting.add(id);
|
|
32
|
+
const step = byId.get(id);
|
|
33
|
+
for (const dep of step?.dependsOn ?? []) visit(dep, [...trail, id]);
|
|
34
|
+
visiting.delete(id);
|
|
35
|
+
visited.add(id);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
for (const step of workflow.steps) visit(step.id, []);
|
|
39
|
+
return [...new Set(errors)];
|
|
40
|
+
}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import { execFileSync } from "node:child_process";
|
|
2
|
-
|
|
3
|
-
export type BranchFreshnessStatus = "fresh" | "stale" | "diverged" | "unknown";
|
|
4
|
-
export type StaleBranchPolicy = "warn" | "block" | "auto_rebase" | "auto_merge_forward";
|
|
5
|
-
|
|
6
|
-
export interface BranchFreshness {
|
|
7
|
-
status: BranchFreshnessStatus;
|
|
8
|
-
branch?: string;
|
|
9
|
-
mainRef: string;
|
|
10
|
-
ahead: number;
|
|
11
|
-
behind: number;
|
|
12
|
-
missingFixes: string[];
|
|
13
|
-
message: string;
|
|
14
|
-
error?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function git(cwd: string, args: string[]): string {
|
|
18
|
-
return execFileSync("git", args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function count(cwd: string, range: string): number {
|
|
22
|
-
const raw = git(cwd, ["rev-list", "--count", range]);
|
|
23
|
-
const parsed = Number.parseInt(raw, 10);
|
|
24
|
-
return Number.isFinite(parsed) ? parsed : 0;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function checkBranchFreshness(cwd: string, mainRef = "main"): BranchFreshness {
|
|
28
|
-
try {
|
|
29
|
-
git(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
30
|
-
const branch = git(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
31
|
-
const behind = count(cwd, `${branch}..${mainRef}`);
|
|
32
|
-
const ahead = count(cwd, `${mainRef}..${branch}`);
|
|
33
|
-
const missingFixes = behind > 0 ? git(cwd, ["log", "--format=%s", `${branch}..${mainRef}`]).split("\n").map((line) => line.trim()).filter(Boolean) : [];
|
|
34
|
-
if (behind === 0) return { status: "fresh", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' is fresh against ${mainRef}.` };
|
|
35
|
-
if (ahead > 0) return { status: "diverged", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' diverged from ${mainRef}: ahead=${ahead}, behind=${behind}.` };
|
|
36
|
-
return { status: "stale", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' is ${behind} commit(s) behind ${mainRef}.` };
|
|
37
|
-
} catch (error) {
|
|
38
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
-
return { status: "unknown", mainRef, ahead: 0, behind: 0, missingFixes: [], message: "Branch freshness could not be determined.", error: message };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function shouldBlockForBranchFreshness(freshness: BranchFreshness, policy: StaleBranchPolicy = "warn"): boolean {
|
|
44
|
-
return policy === "block" && (freshness.status === "stale" || freshness.status === "diverged");
|
|
45
|
-
}
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
|
|
3
|
+
export type BranchFreshnessStatus = "fresh" | "stale" | "diverged" | "unknown";
|
|
4
|
+
export type StaleBranchPolicy = "warn" | "block" | "auto_rebase" | "auto_merge_forward";
|
|
5
|
+
|
|
6
|
+
export interface BranchFreshness {
|
|
7
|
+
status: BranchFreshnessStatus;
|
|
8
|
+
branch?: string;
|
|
9
|
+
mainRef: string;
|
|
10
|
+
ahead: number;
|
|
11
|
+
behind: number;
|
|
12
|
+
missingFixes: string[];
|
|
13
|
+
message: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function git(cwd: string, args: string[]): string {
|
|
18
|
+
return execFileSync("git", args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function count(cwd: string, range: string): number {
|
|
22
|
+
const raw = git(cwd, ["rev-list", "--count", range]);
|
|
23
|
+
const parsed = Number.parseInt(raw, 10);
|
|
24
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function checkBranchFreshness(cwd: string, mainRef = "main"): BranchFreshness {
|
|
28
|
+
try {
|
|
29
|
+
git(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
30
|
+
const branch = git(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
31
|
+
const behind = count(cwd, `${branch}..${mainRef}`);
|
|
32
|
+
const ahead = count(cwd, `${mainRef}..${branch}`);
|
|
33
|
+
const missingFixes = behind > 0 ? git(cwd, ["log", "--format=%s", `${branch}..${mainRef}`]).split("\n").map((line) => line.trim()).filter(Boolean) : [];
|
|
34
|
+
if (behind === 0) return { status: "fresh", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' is fresh against ${mainRef}.` };
|
|
35
|
+
if (ahead > 0) return { status: "diverged", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' diverged from ${mainRef}: ahead=${ahead}, behind=${behind}.` };
|
|
36
|
+
return { status: "stale", branch, mainRef, ahead, behind, missingFixes, message: `Branch '${branch}' is ${behind} commit(s) behind ${mainRef}.` };
|
|
37
|
+
} catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
return { status: "unknown", mainRef, ahead: 0, behind: 0, missingFixes: [], message: "Branch freshness could not be determined.", error: message };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function shouldBlockForBranchFreshness(freshness: BranchFreshness, policy: StaleBranchPolicy = "warn"): boolean {
|
|
44
|
+
return policy === "block" && (freshness.status === "stale" || freshness.status === "diverged");
|
|
45
|
+
}
|
package/teams/default.team.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: default
|
|
3
|
-
description: Balanced team for ordinary implementation tasks
|
|
4
|
-
defaultWorkflow: default
|
|
5
|
-
workspaceMode: single
|
|
6
|
-
maxConcurrency: 2
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
- explorer: agent=explorer fast discovery
|
|
10
|
-
- planner: agent=planner plan the work
|
|
11
|
-
- executor: agent=executor implement changes
|
|
12
|
-
- verifier: agent=verifier verify completion
|
|
1
|
+
---
|
|
2
|
+
name: default
|
|
3
|
+
description: Balanced team for ordinary implementation tasks
|
|
4
|
+
defaultWorkflow: default
|
|
5
|
+
workspaceMode: single
|
|
6
|
+
maxConcurrency: 2
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
- explorer: agent=explorer fast discovery
|
|
10
|
+
- planner: agent=planner plan the work
|
|
11
|
+
- executor: agent=executor implement changes
|
|
12
|
+
- verifier: agent=verifier verify completion
|
package/teams/fast-fix.team.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fast-fix
|
|
3
|
-
description: Small team for quick bug fixes
|
|
4
|
-
defaultWorkflow: fast-fix
|
|
5
|
-
workspaceMode: single
|
|
6
|
-
maxConcurrency: 1
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
- explorer: agent=explorer find the relevant files
|
|
10
|
-
- executor: agent=executor make the fix
|
|
11
|
-
- verifier: agent=verifier verify the fix
|
|
1
|
+
---
|
|
2
|
+
name: fast-fix
|
|
3
|
+
description: Small team for quick bug fixes
|
|
4
|
+
defaultWorkflow: fast-fix
|
|
5
|
+
workspaceMode: single
|
|
6
|
+
maxConcurrency: 1
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
- explorer: agent=explorer find the relevant files
|
|
10
|
+
- executor: agent=executor make the fix
|
|
11
|
+
- verifier: agent=verifier verify the fix
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: implementation
|
|
3
|
-
description: Full implementation team with parallel specialists, critique, execution, review, and verification
|
|
4
|
-
defaultWorkflow: implementation
|
|
5
|
-
workspaceMode: single
|
|
6
|
-
maxConcurrency: 3
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
- explorer: agent=explorer map the codebase
|
|
10
|
-
- analyst: agent=analyst clarify requirements and constraints
|
|
11
|
-
- planner: agent=planner create execution plan
|
|
12
|
-
- critic: agent=critic challenge and synthesize specialist findings
|
|
13
|
-
- executor: agent=executor implement the plan
|
|
14
|
-
- reviewer: agent=reviewer review the implementation
|
|
15
|
-
- security-reviewer: agent=security-reviewer review security and trust boundaries
|
|
16
|
-
- test-engineer: agent=test-engineer design and run verification
|
|
17
|
-
- verifier: agent=verifier verify done
|
|
18
|
-
- writer: agent=writer summarize documentation or release notes when needed
|
|
1
|
+
---
|
|
2
|
+
name: implementation
|
|
3
|
+
description: Full implementation team with parallel specialists, critique, execution, review, and verification
|
|
4
|
+
defaultWorkflow: implementation
|
|
5
|
+
workspaceMode: single
|
|
6
|
+
maxConcurrency: 3
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
- explorer: agent=explorer map the codebase
|
|
10
|
+
- analyst: agent=analyst clarify requirements and constraints
|
|
11
|
+
- planner: agent=planner create execution plan
|
|
12
|
+
- critic: agent=critic challenge and synthesize specialist findings
|
|
13
|
+
- executor: agent=executor implement the plan
|
|
14
|
+
- reviewer: agent=reviewer review the implementation
|
|
15
|
+
- security-reviewer: agent=security-reviewer review security and trust boundaries
|
|
16
|
+
- test-engineer: agent=test-engineer design and run verification
|
|
17
|
+
- verifier: agent=verifier verify done
|
|
18
|
+
- writer: agent=writer summarize documentation or release notes when needed
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: parallel-research
|
|
3
|
-
description: Parallel research team for multi-project/source audits
|
|
4
|
-
workspaceMode: single
|
|
5
|
-
defaultWorkflow: parallel-research
|
|
6
|
-
maxConcurrency: 4
|
|
7
|
-
triggers: đọc sâu, deep read, deep research, source audit, multiple projects, parallel research, pi-*
|
|
8
|
-
category: research
|
|
9
|
-
cost: cheap
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
- explorer: agent=explorer gather source facts in parallel shards
|
|
13
|
-
- analyst: agent=analyst synthesize shard findings
|
|
14
|
-
- writer: agent=writer produce final notes
|
|
1
|
+
---
|
|
2
|
+
name: parallel-research
|
|
3
|
+
description: Parallel research team for multi-project/source audits
|
|
4
|
+
workspaceMode: single
|
|
5
|
+
defaultWorkflow: parallel-research
|
|
6
|
+
maxConcurrency: 4
|
|
7
|
+
triggers: đọc sâu, deep read, deep research, source audit, multiple projects, parallel research, pi-*
|
|
8
|
+
category: research
|
|
9
|
+
cost: cheap
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
- explorer: agent=explorer gather source facts in parallel shards
|
|
13
|
+
- analyst: agent=analyst synthesize shard findings
|
|
14
|
+
- writer: agent=writer produce final notes
|
package/teams/research.team.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: research
|
|
3
|
-
description: Team for investigation and documentation
|
|
4
|
-
defaultWorkflow: research
|
|
5
|
-
workspaceMode: single
|
|
6
|
-
maxConcurrency: 2
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
- explorer: agent=explorer gather codebase facts
|
|
10
|
-
- analyst: agent=analyst analyze findings
|
|
11
|
-
- writer: agent=writer produce final notes
|
|
1
|
+
---
|
|
2
|
+
name: research
|
|
3
|
+
description: Team for investigation and documentation
|
|
4
|
+
defaultWorkflow: research
|
|
5
|
+
workspaceMode: single
|
|
6
|
+
maxConcurrency: 2
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
- explorer: agent=explorer gather codebase facts
|
|
10
|
+
- analyst: agent=analyst analyze findings
|
|
11
|
+
- writer: agent=writer produce final notes
|
package/teams/review.team.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: review
|
|
3
|
-
description: Team for code review and security review
|
|
4
|
-
defaultWorkflow: review
|
|
5
|
-
workspaceMode: single
|
|
6
|
-
maxConcurrency: 2
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
- explorer: agent=explorer understand changed areas
|
|
10
|
-
- reviewer: agent=reviewer review correctness and maintainability
|
|
11
|
-
- security-reviewer: agent=security-reviewer review security risks
|
|
12
|
-
- verifier: agent=verifier summarize pass/fail
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: Team for code review and security review
|
|
4
|
+
defaultWorkflow: review
|
|
5
|
+
workspaceMode: single
|
|
6
|
+
maxConcurrency: 2
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
- explorer: agent=explorer understand changed areas
|
|
10
|
+
- reviewer: agent=reviewer review correctness and maintainability
|
|
11
|
+
- security-reviewer: agent=security-reviewer review security risks
|
|
12
|
+
- verifier: agent=verifier summarize pass/fail
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: default
|
|
3
|
-
description: Explore, plan, execute, and verify
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## explore
|
|
7
|
-
role: explorer
|
|
8
|
-
|
|
9
|
-
Explore the codebase for the goal: {goal}
|
|
10
|
-
|
|
11
|
-
## plan
|
|
12
|
-
role: planner
|
|
13
|
-
dependsOn: explore
|
|
14
|
-
output: plan.md
|
|
15
|
-
|
|
16
|
-
Create a concise implementation plan for: {goal}
|
|
17
|
-
|
|
18
|
-
## execute
|
|
19
|
-
role: executor
|
|
20
|
-
dependsOn: plan
|
|
21
|
-
|
|
22
|
-
Implement the plan for: {goal}
|
|
23
|
-
|
|
24
|
-
## verify
|
|
25
|
-
role: verifier
|
|
26
|
-
dependsOn: execute
|
|
27
|
-
verify: true
|
|
28
|
-
|
|
29
|
-
Verify completion for: {goal}
|
|
1
|
+
---
|
|
2
|
+
name: default
|
|
3
|
+
description: Explore, plan, execute, and verify
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## explore
|
|
7
|
+
role: explorer
|
|
8
|
+
|
|
9
|
+
Explore the codebase for the goal: {goal}
|
|
10
|
+
|
|
11
|
+
## plan
|
|
12
|
+
role: planner
|
|
13
|
+
dependsOn: explore
|
|
14
|
+
output: plan.md
|
|
15
|
+
|
|
16
|
+
Create a concise implementation plan for: {goal}
|
|
17
|
+
|
|
18
|
+
## execute
|
|
19
|
+
role: executor
|
|
20
|
+
dependsOn: plan
|
|
21
|
+
|
|
22
|
+
Implement the plan for: {goal}
|
|
23
|
+
|
|
24
|
+
## verify
|
|
25
|
+
role: verifier
|
|
26
|
+
dependsOn: execute
|
|
27
|
+
verify: true
|
|
28
|
+
|
|
29
|
+
Verify completion for: {goal}
|
|
30
|
+
Run tests ONCE (cache to .crew/cache/), read changed files from executor context. Cross-reference test output with the changes. Do NOT re-run tests. Give PASS or FAIL with specific test evidence.
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fast-fix
|
|
3
|
-
description: Minimal workflow for small fixes
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## explore
|
|
7
|
-
role: explorer
|
|
8
|
-
|
|
9
|
-
Find the likely source of the issue: {goal}
|
|
10
|
-
|
|
11
|
-
## execute
|
|
12
|
-
role: executor
|
|
13
|
-
dependsOn: explore
|
|
14
|
-
|
|
15
|
-
Make the smallest safe fix.
|
|
16
|
-
|
|
17
|
-
## verify
|
|
18
|
-
role: verifier
|
|
19
|
-
dependsOn: execute
|
|
20
|
-
verify: true
|
|
21
|
-
|
|
22
|
-
Verify the fix with available evidence.
|
|
1
|
+
---
|
|
2
|
+
name: fast-fix
|
|
3
|
+
description: Minimal workflow for small fixes
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## explore
|
|
7
|
+
role: explorer
|
|
8
|
+
|
|
9
|
+
Find the likely source of the issue: {goal}
|
|
10
|
+
|
|
11
|
+
## execute
|
|
12
|
+
role: executor
|
|
13
|
+
dependsOn: explore
|
|
14
|
+
|
|
15
|
+
Make the smallest safe fix.
|
|
16
|
+
|
|
17
|
+
## verify
|
|
18
|
+
role: verifier
|
|
19
|
+
dependsOn: execute
|
|
20
|
+
verify: true
|
|
21
|
+
|
|
22
|
+
Verify the fix with available evidence.
|
|
23
|
+
Run tests ONCE (cache to .crew/cache/), read changed files from executor context. Cross-reference test output with the fix. Do NOT re-run tests. Give PASS or FAIL with specific test evidence.
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: implementation
|
|
3
|
-
description: Adaptive implementation workflow where a planner agent decides the subagent fanout
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## assess
|
|
7
|
-
role: planner
|
|
8
|
-
output: adaptive-plan.json
|
|
9
|
-
|
|
10
|
-
Assess this task and decide how many subagents are actually needed for: {goal}
|
|
11
|
-
|
|
12
|
-
You are the orchestration planner. Inspect the repository enough to choose an efficient crew; do not use a fixed template. Small/simple tasks may need one executor plus one verifier. Risky or broad tasks may need parallel explorers, specialists, implementers, reviewers, security reviewers, or test engineers.
|
|
13
|
-
|
|
14
|
-
Return a concise rationale, then include exactly one JSON block between these markers:
|
|
15
|
-
|
|
16
|
-
ADAPTIVE_PLAN_JSON_START
|
|
17
|
-
{
|
|
18
|
-
"phases": [
|
|
19
|
-
{
|
|
20
|
-
"name": "short-phase-name",
|
|
21
|
-
"tasks": [
|
|
22
|
-
{
|
|
23
|
-
"role": "explorer|analyst|planner|critic|executor|reviewer|security-reviewer|test-engineer|verifier|writer",
|
|
24
|
-
"title": "short task title",
|
|
25
|
-
"task": "specific autonomous task prompt for this subagent"
|
|
26
|
-
}
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
ADAPTIVE_PLAN_JSON_END
|
|
32
|
-
|
|
33
|
-
Rules:
|
|
34
|
-
- **MAXIMIZE PARALLELISM**: Put independent tasks in the SAME phase so they run concurrently.
|
|
35
|
-
For example, if a task needs exploration + implementation + review, use 3 phases:
|
|
36
|
-
Phase 1: explorers (2-3 in parallel), Phase 2: executors (2-3 in parallel), Phase 3: reviewers (2 in parallel).
|
|
37
|
-
NEVER create sequential phases when tasks are independent.
|
|
38
|
-
- Choose the smallest effective number of subagents per phase.
|
|
39
|
-
- Tasks within the same phase run in parallel; phases run sequentially.
|
|
40
|
-
- Include verification/review tasks when implementation is requested.
|
|
41
|
-
- Do not include more than 12 total subagents; split or summarize oversized plans instead.
|
|
42
|
-
- A good plan for a complex task has 2-4 phases with 2-4 parallel tasks each.
|
|
43
|
-
- A simple task may have just 1-2 phases with 1-2 tasks.
|
|
1
|
+
---
|
|
2
|
+
name: implementation
|
|
3
|
+
description: Adaptive implementation workflow where a planner agent decides the subagent fanout
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## assess
|
|
7
|
+
role: planner
|
|
8
|
+
output: adaptive-plan.json
|
|
9
|
+
|
|
10
|
+
Assess this task and decide how many subagents are actually needed for: {goal}
|
|
11
|
+
|
|
12
|
+
You are the orchestration planner. Inspect the repository enough to choose an efficient crew; do not use a fixed template. Small/simple tasks may need one executor plus one verifier. Risky or broad tasks may need parallel explorers, specialists, implementers, reviewers, security reviewers, or test engineers.
|
|
13
|
+
|
|
14
|
+
Return a concise rationale, then include exactly one JSON block between these markers:
|
|
15
|
+
|
|
16
|
+
ADAPTIVE_PLAN_JSON_START
|
|
17
|
+
{
|
|
18
|
+
"phases": [
|
|
19
|
+
{
|
|
20
|
+
"name": "short-phase-name",
|
|
21
|
+
"tasks": [
|
|
22
|
+
{
|
|
23
|
+
"role": "explorer|analyst|planner|critic|executor|reviewer|security-reviewer|test-engineer|verifier|writer",
|
|
24
|
+
"title": "short task title",
|
|
25
|
+
"task": "specific autonomous task prompt for this subagent"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
ADAPTIVE_PLAN_JSON_END
|
|
32
|
+
|
|
33
|
+
Rules:
|
|
34
|
+
- **MAXIMIZE PARALLELISM**: Put independent tasks in the SAME phase so they run concurrently.
|
|
35
|
+
For example, if a task needs exploration + implementation + review, use 3 phases:
|
|
36
|
+
Phase 1: explorers (2-3 in parallel), Phase 2: executors (2-3 in parallel), Phase 3: reviewers (2 in parallel).
|
|
37
|
+
NEVER create sequential phases when tasks are independent.
|
|
38
|
+
- Choose the smallest effective number of subagents per phase.
|
|
39
|
+
- Tasks within the same phase run in parallel; phases run sequentially.
|
|
40
|
+
- Include verification/review tasks when implementation is requested.
|
|
41
|
+
- Do not include more than 12 total subagents; split or summarize oversized plans instead.
|
|
42
|
+
- A good plan for a complex task has 2-4 phases with 2-4 parallel tasks each.
|
|
43
|
+
- A simple task may have just 1-2 phases with 1-2 tasks.
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: parallel-research
|
|
3
|
-
description: Parallel research with shard exploration and synthesis
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## discover
|
|
7
|
-
role: explorer
|
|
8
|
-
|
|
9
|
-
Discover the relevant files/projects for: {goal}. Return a shard plan with paths grouped by topic. Do not deeply read every file yet; focus on routing the work.
|
|
10
|
-
|
|
11
|
-
## explore-core
|
|
12
|
-
role: explorer
|
|
13
|
-
parallelGroup: explore
|
|
14
|
-
|
|
15
|
-
Explore the core/runtime shard from the discover output. Focus on architecture, package config, docs, and reusable patterns for: {goal}
|
|
16
|
-
|
|
17
|
-
## explore-ui
|
|
18
|
-
role: explorer
|
|
19
|
-
parallelGroup: explore
|
|
20
|
-
|
|
21
|
-
Explore the UI/TUI/extension-interface shard from the discover output. Focus on widgets, overlays, commands, status bars, package config, docs, and reusable patterns for: {goal}
|
|
22
|
-
|
|
23
|
-
## explore-runtime
|
|
24
|
-
role: explorer
|
|
25
|
-
parallelGroup: explore
|
|
26
|
-
|
|
27
|
-
Explore the worker/runtime/subagent/runtime-control shard from the discover output. Focus on process/session/runtime orchestration, event streams, logs, package config, docs, and reusable patterns for: {goal}
|
|
28
|
-
|
|
29
|
-
## explore-extensions
|
|
30
|
-
role: explorer
|
|
31
|
-
parallelGroup: explore
|
|
32
|
-
|
|
33
|
-
Explore the extension bundle/small-package shard from the discover output. Focus on package config, extension registration, commands/tools, docs, and reusable patterns for: {goal}
|
|
34
|
-
|
|
35
|
-
## synthesize
|
|
36
|
-
role: analyst
|
|
37
|
-
dependsOn: explore-core, explore-ui, explore-runtime, explore-extensions
|
|
38
|
-
|
|
39
|
-
Synthesize all shard findings. Use discover output if available, but do not require it. Identify common patterns, gaps, and concrete recommendations.
|
|
40
|
-
|
|
41
|
-
## write
|
|
42
|
-
role: writer
|
|
43
|
-
dependsOn: synthesize
|
|
44
|
-
output: research-summary.md
|
|
45
|
-
|
|
46
|
-
Write a concise final summary with evidence, risks, and actionable next steps.
|
|
1
|
+
---
|
|
2
|
+
name: parallel-research
|
|
3
|
+
description: Parallel research with shard exploration and synthesis
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## discover
|
|
7
|
+
role: explorer
|
|
8
|
+
|
|
9
|
+
Discover the relevant files/projects for: {goal}. Return a shard plan with paths grouped by topic. Do not deeply read every file yet; focus on routing the work.
|
|
10
|
+
|
|
11
|
+
## explore-core
|
|
12
|
+
role: explorer
|
|
13
|
+
parallelGroup: explore
|
|
14
|
+
|
|
15
|
+
Explore the core/runtime shard from the discover output. Focus on architecture, package config, docs, and reusable patterns for: {goal}
|
|
16
|
+
|
|
17
|
+
## explore-ui
|
|
18
|
+
role: explorer
|
|
19
|
+
parallelGroup: explore
|
|
20
|
+
|
|
21
|
+
Explore the UI/TUI/extension-interface shard from the discover output. Focus on widgets, overlays, commands, status bars, package config, docs, and reusable patterns for: {goal}
|
|
22
|
+
|
|
23
|
+
## explore-runtime
|
|
24
|
+
role: explorer
|
|
25
|
+
parallelGroup: explore
|
|
26
|
+
|
|
27
|
+
Explore the worker/runtime/subagent/runtime-control shard from the discover output. Focus on process/session/runtime orchestration, event streams, logs, package config, docs, and reusable patterns for: {goal}
|
|
28
|
+
|
|
29
|
+
## explore-extensions
|
|
30
|
+
role: explorer
|
|
31
|
+
parallelGroup: explore
|
|
32
|
+
|
|
33
|
+
Explore the extension bundle/small-package shard from the discover output. Focus on package config, extension registration, commands/tools, docs, and reusable patterns for: {goal}
|
|
34
|
+
|
|
35
|
+
## synthesize
|
|
36
|
+
role: analyst
|
|
37
|
+
dependsOn: explore-core, explore-ui, explore-runtime, explore-extensions
|
|
38
|
+
|
|
39
|
+
Synthesize all shard findings. Use discover output if available, but do not require it. Identify common patterns, gaps, and concrete recommendations.
|
|
40
|
+
|
|
41
|
+
## write
|
|
42
|
+
role: writer
|
|
43
|
+
dependsOn: synthesize
|
|
44
|
+
output: research-summary.md
|
|
45
|
+
|
|
46
|
+
Write a concise final summary with evidence, risks, and actionable next steps.
|