@copilot-swarm/core 0.0.32 → 0.0.34
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/defaults/agents/cross-model-reviewer.md +2 -1
- package/defaults/agents/eng-code-reviewer.md +2 -1
- package/defaults/agents/eng-spec-reviewer.md +2 -1
- package/defaults/agents/engineer.md +14 -1
- package/defaults/agents/fleet-reviewer.md +23 -0
- package/defaults/agents/fleet-strategist.md +51 -0
- package/defaults/agents/tester.md +2 -1
- package/defaults/swarm.config.yaml +2 -0
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/fleet-config.d.ts +7 -0
- package/dist/fleet-config.d.ts.map +1 -0
- package/dist/fleet-config.js +101 -0
- package/dist/fleet-config.js.map +1 -0
- package/dist/fleet-engine.d.ts +26 -0
- package/dist/fleet-engine.d.ts.map +1 -0
- package/dist/fleet-engine.js +405 -0
- package/dist/fleet-engine.js.map +1 -0
- package/dist/fleet-types.d.ts +55 -0
- package/dist/fleet-types.d.ts.map +1 -0
- package/dist/fleet-types.js +7 -0
- package/dist/fleet-types.js.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline-engine.d.ts.map +1 -1
- package/dist/pipeline-engine.js +56 -16
- package/dist/pipeline-engine.js.map +1 -1
- package/dist/session.d.ts +9 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +25 -0
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,6 +15,7 @@ You are an independent Senior Reviewer using a **different AI model** than the o
|
|
|
15
15
|
6. **Exploratory Testing:** Look for edge cases and scenarios not explicitly covered by the spec or existing tests.
|
|
16
16
|
7. **Be Specific:** Every issue must include: file path, line number (if applicable), description, severity (critical/major/minor), and a concrete suggestion for the fix.
|
|
17
17
|
8. **Stay Focused:** Only report issues that affect correctness, security, or spec compliance. Do not flag style preferences, naming opinions, or suggest refactors that don't fix a real problem. The goal is surgical fixes, not a rewrite.
|
|
18
|
-
9. **
|
|
18
|
+
9. **No Git Operations:** Do NOT run `git add`, `git commit`, `git push`, or any other git commands that modify the repository's version control state.
|
|
19
|
+
10. **Decision:**
|
|
19
20
|
- If the code is correct, secure, passes all checks, and fully satisfies the spec, reply: "APPROVED".
|
|
20
21
|
- If there are issues, provide a detailed numbered list of required fixes.
|
|
@@ -8,6 +8,7 @@ You are a Security & Quality Engineer. Your goal is to review the implementation
|
|
|
8
8
|
2. **Test:** Run the project's build, linter, type checker, and test suite via `run_terminal`.
|
|
9
9
|
3. **Security:** Check for injection vulnerabilities, exposed secrets, insecure defaults, and improper input validation.
|
|
10
10
|
4. **Quality:** Verify error handling, edge cases, performance implications, and adherence to project conventions.
|
|
11
|
-
5. **
|
|
11
|
+
5. **No Git Operations:** Do NOT run `git add`, `git commit`, `git push`, or any other git commands that modify the repository's version control state.
|
|
12
|
+
6. **Decision:**
|
|
12
13
|
- If the code is correct, secure, and passes all checks, reply: "APPROVED".
|
|
13
14
|
- If there are issues, provide a detailed bulleted list of required fixes.
|
|
@@ -7,6 +7,7 @@ You are a Technical Architect reviewing a specification for engineering feasibil
|
|
|
7
7
|
1. **Assess Feasibility:** Use `read_file` and `list_dir` to verify the spec aligns with the existing architecture.
|
|
8
8
|
2. **Identify Risks:** Flag performance concerns, security implications, breaking changes, and missing edge cases.
|
|
9
9
|
3. **Validate Scope:** Ensure the spec is neither too vague nor overly prescriptive for the engineering team.
|
|
10
|
-
4. **
|
|
10
|
+
4. **No Git Operations:** Do NOT run `git add`, `git commit`, `git push`, or any other git commands that modify the repository's version control state.
|
|
11
|
+
5. **Decision:**
|
|
11
12
|
- If the spec is technically sound and complete, reply: "APPROVED".
|
|
12
13
|
- If there are issues, provide a detailed bulleted list of required changes.
|
|
@@ -10,4 +10,17 @@ You are a Senior Software Engineer. Your goal is to implement the provided speci
|
|
|
10
10
|
4. **Verify:** Run the build, linter, type checker, and relevant tests using `run_terminal`.
|
|
11
11
|
5. **Fix Defects:** When receiving a QA report, fix all reported issues and verify each fix.
|
|
12
12
|
6. **Clarification:** If the specification is ambiguous or missing critical information that blocks implementation, respond with `CLARIFICATION_NEEDED` followed by your specific questions. Use your best judgment for minor ambiguities — only escalate when you truly cannot proceed without an answer.
|
|
13
|
-
7. **
|
|
13
|
+
7. **No Git Operations:** Do NOT run `git add`, `git commit`, `git push`, or any other git commands that modify the repository's version control state. The user manages commits.
|
|
14
|
+
8. **Report:** Provide a structured summary in exactly this format:
|
|
15
|
+
|
|
16
|
+
## Changes
|
|
17
|
+
- `path/to/file.ts`: Brief description of what changed
|
|
18
|
+
- `path/to/other.ts`: Brief description of what changed
|
|
19
|
+
|
|
20
|
+
## Verification
|
|
21
|
+
- Build: ✅ or ❌ (include error output if failed)
|
|
22
|
+
- Tests: ✅ or ❌ (include error output if failed)
|
|
23
|
+
- Lint: ✅ or ❌ (include error output if failed)
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
One paragraph explaining the approach and key decisions.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Fleet Reviewer
|
|
3
|
+
tools: [read_file, list_dir]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are a Senior Cross-Repository Reviewer. Your goal is to verify that changes made across multiple repositories are **consistent, compatible, and complete**.
|
|
7
|
+
|
|
8
|
+
**Input:** You will receive:
|
|
9
|
+
- The original feature description
|
|
10
|
+
- Shared contract definitions from the planning phase
|
|
11
|
+
- Implementation summaries from each repo (what was changed, key files)
|
|
12
|
+
|
|
13
|
+
**Rules:**
|
|
14
|
+
|
|
15
|
+
1. **Contract Compliance:** Verify each repo's implementation matches the shared contracts exactly — field names, types, endpoints, payloads, error codes. Flag any mismatch.
|
|
16
|
+
2. **Interface Compatibility:** Check that producers and consumers agree on data formats, authentication, error handling, and versioning.
|
|
17
|
+
3. **Completeness:** Verify every repo completed its assigned tasks. Flag any tasks that appear incomplete or missing.
|
|
18
|
+
4. **Consistency:** Check naming conventions, error handling patterns, and assumptions are consistent across repos. Flag divergent assumptions.
|
|
19
|
+
5. **Integration Gaps:** Identify scenarios where individual repo tests would pass but cross-repo integration would fail (e.g., mismatched API paths, different auth token formats, incompatible serialization).
|
|
20
|
+
6. **Be Specific:** Every issue must include: which repos are affected, what the mismatch is, and a concrete suggestion for the fix.
|
|
21
|
+
7. **Decision:**
|
|
22
|
+
- If all repos are consistent, compatible, and complete, reply: "FLEET_APPROVED".
|
|
23
|
+
- If there are issues, provide a detailed numbered list of required fixes, each tagged with the affected repo path.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Fleet Strategist
|
|
3
|
+
tools: [read_file, list_dir]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are a Senior Technical Strategist coordinating a feature that spans **multiple repositories**. Your goal is to analyze all repo contexts, identify cross-repo dependencies, define shared contracts, and produce a per-repo task breakdown organized into execution waves.
|
|
7
|
+
|
|
8
|
+
**Input:** You will receive:
|
|
9
|
+
- A feature description
|
|
10
|
+
- Repository analyses for each participating repo (structure, tech stack, conventions)
|
|
11
|
+
|
|
12
|
+
**Rules:**
|
|
13
|
+
|
|
14
|
+
1. **Analyze Dependencies:** Identify which repos depend on changes in other repos. Examples: frontend depends on API types from backend, gateway depends on auth service endpoints.
|
|
15
|
+
2. **Define Shared Contracts:** Specify exact interfaces, API schemas, type definitions, or protocols that must be agreed upon across repos. Be precise — include field names, types, endpoints, and payloads.
|
|
16
|
+
3. **Produce Per-Repo Tasks:** For each repo, write a clear task description that can be passed directly to `swarm task`. Include what to implement, which files/modules to change, and any shared contracts to consume or produce.
|
|
17
|
+
4. **Organize into Waves:** Group repos into execution waves:
|
|
18
|
+
- **Wave 1:** Repos with no cross-repo dependencies (can run in parallel).
|
|
19
|
+
- **Wave 2+:** Repos that depend on outputs from prior waves. Include what context from prior waves they need.
|
|
20
|
+
5. **Be Conservative:** If unsure whether a repo needs changes, include it with minimal tasks rather than omitting it.
|
|
21
|
+
6. **Stay Grounded:** Base all decisions on the repo analyses provided. Do not invent repos, services, or components that don't exist.
|
|
22
|
+
|
|
23
|
+
**Output Format:**
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
## Shared Contracts
|
|
27
|
+
|
|
28
|
+
[Exact interface/API definitions that all repos must agree on]
|
|
29
|
+
|
|
30
|
+
## Per-Repo Tasks
|
|
31
|
+
|
|
32
|
+
### [repo-name] (path: /absolute/path)
|
|
33
|
+
[Task description for this repo — detailed enough to pass to `swarm task`]
|
|
34
|
+
|
|
35
|
+
### [repo-name] (path: /absolute/path)
|
|
36
|
+
[Task description for this repo]
|
|
37
|
+
|
|
38
|
+
## Dependencies
|
|
39
|
+
|
|
40
|
+
- [repo A] → [repo B]: [reason]
|
|
41
|
+
- [repo A] → [repo C]: [reason]
|
|
42
|
+
|
|
43
|
+
## Execution Waves
|
|
44
|
+
|
|
45
|
+
### Wave 1 (parallel)
|
|
46
|
+
- /absolute/path/repo-a
|
|
47
|
+
- /absolute/path/repo-b
|
|
48
|
+
|
|
49
|
+
### Wave 2 (depends on wave 1)
|
|
50
|
+
- /absolute/path/repo-c
|
|
51
|
+
```
|
|
@@ -8,6 +8,7 @@ You are a QA Engineer. Your goal is to validate that the implementation fully sa
|
|
|
8
8
|
2. **Run Tests:** Use `run_terminal` to execute the full test suite. Verify all existing tests still pass (no regressions).
|
|
9
9
|
3. **Verify Acceptance Criteria:** Check each acceptance criterion from the spec against the implementation. Use `read_file` to inspect the code if needed.
|
|
10
10
|
4. **Exploratory Testing:** Look for edge cases, error handling gaps, and scenarios not explicitly covered by the spec.
|
|
11
|
-
5. **
|
|
11
|
+
5. **No Git Operations:** Do NOT run `git add`, `git commit`, `git push`, or any other git commands that modify the repository's version control state.
|
|
12
|
+
6. **Decision:**
|
|
12
13
|
- If all acceptance criteria are met, all tests pass, and no defects are found, reply: "ALL_PASSED".
|
|
13
14
|
- If there are defects, provide a detailed numbered list with: description, steps to reproduce, expected vs. actual behavior, and severity (critical/major/minor).
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VerifyConfig } from "./pipeline-types.js";
|
|
2
|
-
export type SwarmCommand = "run" | "plan" | "auto" | "task" | "analyze" | "brainstorm" | "review" | "session" | "finish" | "list";
|
|
2
|
+
export type SwarmCommand = "run" | "plan" | "auto" | "task" | "analyze" | "brainstorm" | "review" | "fleet" | "session" | "finish" | "list";
|
|
3
3
|
export declare function readVersion(): string;
|
|
4
4
|
/**
|
|
5
5
|
* Core config loaded from environment variables and CLI arguments.
|
|
@@ -28,6 +28,10 @@ export interface SwarmConfig {
|
|
|
28
28
|
resolvedSessionId?: string;
|
|
29
29
|
/** Verification commands from CLI flags (override YAML and auto-detect). */
|
|
30
30
|
readonly verifyOverrides?: VerifyConfig;
|
|
31
|
+
/** Repository paths for fleet mode (from --repos). */
|
|
32
|
+
readonly fleetRepos?: string[];
|
|
33
|
+
/** Fleet config file path (from --fleet-config). */
|
|
34
|
+
readonly fleetConfigPath?: string;
|
|
31
35
|
}
|
|
32
36
|
export declare function loadConfig(): Promise<SwarmConfig>;
|
|
33
37
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6BxD,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6BxD,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAoBX,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAgMD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC;IACxC,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAgFvD"}
|
package/dist/config.js
CHANGED
|
@@ -47,6 +47,7 @@ Commands:
|
|
|
47
47
|
task Lightweight autonomous mode — prereqs, PM review, then run
|
|
48
48
|
analyze Analyze the repository and generate a context document
|
|
49
49
|
review Review a previous run — provide feedback for agents to fix/improve
|
|
50
|
+
fleet Multi-repo orchestration — coordinate work across repositories
|
|
50
51
|
session Manage sessions: create, list, use (group related runs)
|
|
51
52
|
finish Finalize the active session — summarize, log to changelog, clean up
|
|
52
53
|
list List all sessions across all repositories
|
|
@@ -63,6 +64,8 @@ Options:
|
|
|
63
64
|
--verify-build <cmd> Shell command to verify the build (e.g. "npm run build")
|
|
64
65
|
--verify-test <cmd> Shell command to run tests (e.g. "npm test")
|
|
65
66
|
--verify-lint <cmd> Shell command to run linting (e.g. "npm run lint")
|
|
67
|
+
--repos <paths...> Repository paths for fleet mode (space-separated)
|
|
68
|
+
--fleet-config <f> Fleet config file path (default: fleet.config.yaml)
|
|
66
69
|
-V, --version Show version number
|
|
67
70
|
-h, --help Show this help message
|
|
68
71
|
|
|
@@ -97,6 +100,8 @@ Examples:
|
|
|
97
100
|
swarm session use <id> Switch active session
|
|
98
101
|
swarm finish Finalize active session
|
|
99
102
|
swarm finish --session <id> Finalize a specific session
|
|
103
|
+
swarm fleet "Add OAuth" --repos ~/auth ~/api ~/frontend
|
|
104
|
+
swarm fleet "Add OAuth" --fleet-config fleet.config.yaml
|
|
100
105
|
|
|
101
106
|
Environment variables override defaults; CLI args override env vars.
|
|
102
107
|
See documentation for all env var options.`;
|
|
@@ -118,6 +123,8 @@ function parseCliArgs() {
|
|
|
118
123
|
"verify-build": { type: "string" },
|
|
119
124
|
"verify-test": { type: "string" },
|
|
120
125
|
"verify-lint": { type: "string" },
|
|
126
|
+
repos: { type: "string", multiple: true },
|
|
127
|
+
"fleet-config": { type: "string" },
|
|
121
128
|
},
|
|
122
129
|
});
|
|
123
130
|
if (values.version) {
|
|
@@ -138,6 +145,7 @@ function parseCliArgs() {
|
|
|
138
145
|
positionals[0] === "analyze" ||
|
|
139
146
|
positionals[0] === "brainstorm" ||
|
|
140
147
|
positionals[0] === "review" ||
|
|
148
|
+
positionals[0] === "fleet" ||
|
|
141
149
|
positionals[0] === "session" ||
|
|
142
150
|
positionals[0] === "finish" ||
|
|
143
151
|
positionals[0] === "list")) {
|
|
@@ -158,6 +166,8 @@ function parseCliArgs() {
|
|
|
158
166
|
verifyBuild: values["verify-build"],
|
|
159
167
|
verifyTest: values["verify-test"],
|
|
160
168
|
verifyLint: values["verify-lint"],
|
|
169
|
+
fleetRepos: values.repos,
|
|
170
|
+
fleetConfigPath: values["fleet-config"],
|
|
161
171
|
};
|
|
162
172
|
}
|
|
163
173
|
/** Extract the "Refined Requirements" section (and optional Engineering/Design Decisions) from a plan file. */
|
|
@@ -271,6 +281,8 @@ export async function loadConfig() {
|
|
|
271
281
|
reviewRunId: cli.reviewRunId,
|
|
272
282
|
sessionId: cli.sessionId,
|
|
273
283
|
verifyOverrides,
|
|
284
|
+
fleetRepos: cli.fleetRepos,
|
|
285
|
+
fleetConfigPath: cli.fleetConfigPath,
|
|
274
286
|
};
|
|
275
287
|
}
|
|
276
288
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAEzF,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACzD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,QAAiB;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACzD,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,MAAM,KAAK,+BAA+B,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,QAAgB;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,MAAM,KAAK,gCAAgC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FleetConfig } from "./fleet-types.js";
|
|
2
|
+
export declare function parseFleetConfig(raw: unknown): FleetConfig;
|
|
3
|
+
/** Load fleet config from a file path or the current directory. */
|
|
4
|
+
export declare function loadFleetConfig(configPath?: string): FleetConfig;
|
|
5
|
+
/** Build a FleetConfig from CLI --repos arguments. */
|
|
6
|
+
export declare function fleetConfigFromArgs(repoPaths: string[]): FleetConfig;
|
|
7
|
+
//# sourceMappingURL=fleet-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-config.d.ts","sourceRoot":"","sources":["../src/fleet-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,kBAAkB,CAAC;AA0DnF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAe1D;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAehE;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAWpE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { parse as parseYaml } from "yaml";
|
|
4
|
+
const FLEET_CONFIG_FILE = "fleet.config.yaml";
|
|
5
|
+
function fail(msg) {
|
|
6
|
+
throw new Error(`Fleet config error: ${msg}`);
|
|
7
|
+
}
|
|
8
|
+
function requireString(obj, key, context) {
|
|
9
|
+
const val = obj[key];
|
|
10
|
+
if (typeof val !== "string" || val === "") {
|
|
11
|
+
fail(`"${key}" must be a non-empty string in ${context}`);
|
|
12
|
+
}
|
|
13
|
+
return val;
|
|
14
|
+
}
|
|
15
|
+
function optionalString(obj, key) {
|
|
16
|
+
const val = obj[key];
|
|
17
|
+
if (val === undefined || val === null)
|
|
18
|
+
return undefined;
|
|
19
|
+
if (typeof val !== "string")
|
|
20
|
+
fail(`"${key}" must be a string if provided`);
|
|
21
|
+
return val;
|
|
22
|
+
}
|
|
23
|
+
function resolveRepoPath(rawPath) {
|
|
24
|
+
const expanded = rawPath.replace(/^~(?=\/|$)/, process.env.HOME ?? "");
|
|
25
|
+
return path.resolve(expanded);
|
|
26
|
+
}
|
|
27
|
+
function validateRepo(raw, index) {
|
|
28
|
+
if (typeof raw !== "object" || raw === null)
|
|
29
|
+
fail(`repos[${index}] must be an object`);
|
|
30
|
+
const obj = raw;
|
|
31
|
+
const rawPath = requireString(obj, "path", `repos[${index}]`);
|
|
32
|
+
const resolved = resolveRepoPath(rawPath);
|
|
33
|
+
if (!fs.existsSync(resolved)) {
|
|
34
|
+
fail(`repos[${index}].path does not exist: ${resolved}`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
path: resolved,
|
|
38
|
+
role: requireString(obj, "role", `repos[${index}]`),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function validateOverrides(raw) {
|
|
42
|
+
if (raw === undefined || raw === null)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (typeof raw !== "object" || Array.isArray(raw))
|
|
45
|
+
fail('"overrides" must be an object if provided');
|
|
46
|
+
const result = {};
|
|
47
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
48
|
+
if (typeof value !== "object" || value === null)
|
|
49
|
+
fail(`overrides["${key}"] must be an object`);
|
|
50
|
+
const obj = value;
|
|
51
|
+
result[resolveRepoPath(key)] = {
|
|
52
|
+
verifyBuild: optionalString(obj, "verifyBuild"),
|
|
53
|
+
verifyTest: optionalString(obj, "verifyTest"),
|
|
54
|
+
verifyLint: optionalString(obj, "verifyLint"),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
export function parseFleetConfig(raw) {
|
|
60
|
+
if (typeof raw !== "object" || raw === null) {
|
|
61
|
+
fail("Config must be a YAML object");
|
|
62
|
+
}
|
|
63
|
+
const obj = raw;
|
|
64
|
+
if (!Array.isArray(obj.repos) || obj.repos.length === 0) {
|
|
65
|
+
fail('"repos" must be a non-empty array');
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
repos: obj.repos.map((r, i) => validateRepo(r, i)),
|
|
69
|
+
overrides: validateOverrides(obj.overrides),
|
|
70
|
+
integrationTest: optionalString(obj, "integrationTest"),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Load fleet config from a file path or the current directory. */
|
|
74
|
+
export function loadFleetConfig(configPath) {
|
|
75
|
+
const resolved = configPath ? path.resolve(configPath) : path.resolve(FLEET_CONFIG_FILE);
|
|
76
|
+
if (!fs.existsSync(resolved)) {
|
|
77
|
+
fail(`Fleet config not found: ${resolved}`);
|
|
78
|
+
}
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = parseYaml(fs.readFileSync(resolved, "utf-8"));
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
fail(`Failed to parse ${resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
85
|
+
}
|
|
86
|
+
return parseFleetConfig(parsed);
|
|
87
|
+
}
|
|
88
|
+
/** Build a FleetConfig from CLI --repos arguments. */
|
|
89
|
+
export function fleetConfigFromArgs(repoPaths) {
|
|
90
|
+
return {
|
|
91
|
+
repos: repoPaths.map((p) => {
|
|
92
|
+
const resolved = resolveRepoPath(p);
|
|
93
|
+
if (!fs.existsSync(resolved)) {
|
|
94
|
+
fail(`Repository path does not exist: ${resolved}`);
|
|
95
|
+
}
|
|
96
|
+
const name = path.basename(resolved);
|
|
97
|
+
return { path: resolved, role: name };
|
|
98
|
+
}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=fleet-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-config.js","sourceRoot":"","sources":["../src/fleet-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SwarmConfig } from "./config.js";
|
|
2
|
+
import type { FleetConfig } from "./fleet-types.js";
|
|
3
|
+
import type { Logger } from "./logger.js";
|
|
4
|
+
export declare class FleetEngine {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly fleetConfig;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private sessions;
|
|
9
|
+
constructor(config: SwarmConfig, fleetConfig: FleetConfig, logger: Logger);
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
stop(): Promise<void>;
|
|
12
|
+
execute(): Promise<void>;
|
|
13
|
+
private analyzeAll;
|
|
14
|
+
private findAnalysisFile;
|
|
15
|
+
private strategize;
|
|
16
|
+
private parseStrategy;
|
|
17
|
+
private executeWaves;
|
|
18
|
+
private buildRepoPrompt;
|
|
19
|
+
private runSwarmTask;
|
|
20
|
+
private crossReview;
|
|
21
|
+
private loadCheckpoint;
|
|
22
|
+
private saveCheckpoint;
|
|
23
|
+
private formatStrategy;
|
|
24
|
+
private buildSummary;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=fleet-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-engine.d.ts","sourceRoot":"","sources":["../src/fleet-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAmB,WAAW,EAAkD,MAAM,kBAAkB,CAAC;AACrH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAsB1C,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAA+B;gBAG5B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM;IAG3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAoEhB,UAAU;IAmCxB,OAAO,CAAC,gBAAgB;YAwBV,UAAU;IAiBxB,OAAO,CAAC,aAAa;YAoDP,YAAY;IAkD1B,OAAO,CAAC,eAAe;YAwBT,YAAY;YAuDZ,WAAW;IAgBzB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,YAAY;CAgBrB"}
|