opencode-swarm 6.29.2 → 6.29.3
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 +36 -4
- package/dist/hooks/incremental-verify.d.ts +2 -1
- package/dist/index.js +57 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,10 +49,13 @@ All project state lives in `.swarm/`:
|
|
|
49
49
|
|
|
50
50
|
```text
|
|
51
51
|
.swarm/
|
|
52
|
-
├── plan.md
|
|
53
|
-
├──
|
|
54
|
-
├──
|
|
55
|
-
|
|
52
|
+
├── plan.md # Project roadmap with phases and tasks
|
|
53
|
+
├── plan.json # Structured plan data
|
|
54
|
+
├── context.md # Technical decisions and SME guidance
|
|
55
|
+
├── events.jsonl # Event stream for diagnostics
|
|
56
|
+
├── evidence/ # Review/test evidence bundles per task
|
|
57
|
+
├── curator-summary.json # Curator system state (if enabled)
|
|
58
|
+
└── drift-report-phase-N.json # Plan-vs-reality drift reports
|
|
56
59
|
```
|
|
57
60
|
|
|
58
61
|
That means Swarm is resumable by design. If you come back later and `.swarm/` already exists, the architect may go straight into **RESUME** or **EXECUTE** instead of replaying the full first-run discovery flow.
|
|
@@ -936,6 +939,33 @@ The following tools can be assigned to agents via overrides:
|
|
|
936
939
|
|
|
937
940
|
## Recent Changes
|
|
938
941
|
|
|
942
|
+
### v6.29.3 — Curator Visibility + Documentation Refresh
|
|
943
|
+
|
|
944
|
+
This release adds Curator status reporting to `/swarm diagnose` and refreshes documentation to reflect current behavior.
|
|
945
|
+
|
|
946
|
+
- **Curator status in diagnose**: `/swarm diagnose` now reports whether Curator is enabled/disabled and validates the `curator-summary.json` artifact if present.
|
|
947
|
+
- **README and config docs refreshed**: Updated `.swarm/` directory tree, Curator configuration options, and drift report artifacts to match current implementation.
|
|
948
|
+
|
|
949
|
+
### v6.29.2 — Multi-Language Incremental Verify + Slop-Detector Hardening
|
|
950
|
+
|
|
951
|
+
This release adds multi-language typecheck support and hardens detection of low-quality AI-generated code.
|
|
952
|
+
|
|
953
|
+
- **Multi-language incremental_verify**: Post-coder typecheck now supports TypeScript/JavaScript, Go, Rust, and C#. Runs language-appropriate build/typecheck commands per task for faster feedback.
|
|
954
|
+
- **Slop-detector hardening**: Enhanced detection of AI-generated placeholder code with multi-language heuristics (comments like `// TODO`, `// FIXME`, `// HACK`, language-specific patterns for Go/Rust/C#/Python). Advisory warnings injected into coder context when slop patterns detected.
|
|
955
|
+
- **CODEBASE REALITY CHECK**: Architect dispatches Explorer before planning to verify current state of referenced items. Produces a CODEBASE REALITY REPORT with statuses: NOT STARTED, PARTIALLY DONE, ALREADY COMPLETE, or ASSUMPTION INCORRECT. Skipped for greenfield projects.
|
|
956
|
+
- **Evidence schema fix**: Evidence bundles now correctly validate against schema; invalid entries are filtered.
|
|
957
|
+
- **Curator/docs alignment**: Curator health check in `/swarm diagnose` reports curator.enabled status and validates curator-summary.json.
|
|
958
|
+
|
|
959
|
+
### v6.29.1 — Advisory Hook Message Injection
|
|
960
|
+
|
|
961
|
+
This release improves how advisory warnings are injected into agent context.
|
|
962
|
+
|
|
963
|
+
- **Advisory hook message injection**: Enhanced message formatting for self-coding detection, partial gate tracking, batch detection, and scope violation warnings. Messages now include structured context for faster resolution.
|
|
964
|
+
|
|
965
|
+
### v6.23 through v6.28 — Stability and Incremental Improvements
|
|
966
|
+
|
|
967
|
+
Subsequent releases focused on stability hardening, incremental_verify scaffolding, and tooling improvements across the pipeline. Key areas: pre_check_batch parallelization, evidence bundle validation, and diagnostics tooling.
|
|
968
|
+
|
|
939
969
|
### v6.22 — Curator Background Analysis + Session State Persistence
|
|
940
970
|
|
|
941
971
|
This release adds the optional Curator system for phase-level intelligence and fixes session snapshot persistence for task workflow states.
|
|
@@ -1118,6 +1148,8 @@ OpenCode Swarm v6.16+ ships with language profiles for 11 languages across three
|
|
|
1118
1148
|
|
|
1119
1149
|
The Curator is an optional background analysis system that runs after each phase. It is **disabled by default** (`curator.enabled = false`) and never blocks execution — all Curator operations are wrapped in try/catch.
|
|
1120
1150
|
|
|
1151
|
+
To enable, set `"curator": { "enabled": true }` in your config. When enabled, it writes `.swarm/curator-summary.json` and `.swarm/drift-report-phase-N.json` files.
|
|
1152
|
+
|
|
1121
1153
|
### What the Curator Does
|
|
1122
1154
|
|
|
1123
1155
|
- **Init** (`phase-monitor.ts`): On the first phase, initializes a curator summary file at `.swarm/curator-summary.json`.
|
|
@@ -24,7 +24,8 @@ export declare function resetAdvisoryDedup(): void;
|
|
|
24
24
|
* or null overall if no supported language is detected.
|
|
25
25
|
* Checks in order: TypeScript (package.json) → Go (go.mod) → Rust (Cargo.toml)
|
|
26
26
|
* → Python (pyproject.toml/requirements.txt/setup.py) → C# (*.csproj/*.sln)
|
|
27
|
-
* First match wins; package.json
|
|
27
|
+
* First match wins; package.json only short-circuits when TypeScript markers are present.
|
|
28
|
+
* Otherwise the function falls through to Go/Rust/Python/C# detection.
|
|
28
29
|
*/
|
|
29
30
|
declare function detectTypecheckCommand(projectDir: string): {
|
|
30
31
|
command: string[] | null;
|
package/dist/index.js
CHANGED
|
@@ -45541,6 +45541,58 @@ async function checkSteeringDirectives(directory) {
|
|
|
45541
45541
|
};
|
|
45542
45542
|
}
|
|
45543
45543
|
}
|
|
45544
|
+
async function checkCurator(directory) {
|
|
45545
|
+
try {
|
|
45546
|
+
const config3 = loadPluginConfig(directory);
|
|
45547
|
+
if (!config3.curator?.enabled) {
|
|
45548
|
+
return {
|
|
45549
|
+
name: "Curator",
|
|
45550
|
+
status: "\u2705",
|
|
45551
|
+
detail: "Disabled (enable via curator.enabled)"
|
|
45552
|
+
};
|
|
45553
|
+
}
|
|
45554
|
+
const summaryPath = path16.join(directory, ".swarm/curator-summary.json");
|
|
45555
|
+
if (!existsSync6(summaryPath)) {
|
|
45556
|
+
return {
|
|
45557
|
+
name: "Curator",
|
|
45558
|
+
status: "\u2705",
|
|
45559
|
+
detail: "Enabled, no summary yet (waiting for first phase)"
|
|
45560
|
+
};
|
|
45561
|
+
}
|
|
45562
|
+
try {
|
|
45563
|
+
const content = readFileSync4(summaryPath, "utf-8");
|
|
45564
|
+
const parsed = JSON.parse(content);
|
|
45565
|
+
if (typeof parsed.schema_version !== "number" || parsed.schema_version !== 1) {
|
|
45566
|
+
return {
|
|
45567
|
+
name: "Curator",
|
|
45568
|
+
status: "\u274C",
|
|
45569
|
+
detail: `curator-summary.json has invalid schema_version (expected 1, got ${JSON.stringify(parsed.schema_version)})`
|
|
45570
|
+
};
|
|
45571
|
+
}
|
|
45572
|
+
const phaseInfo = parsed.last_phase_covered !== undefined ? `phase ${parsed.last_phase_covered}` : "unknown phase";
|
|
45573
|
+
const timeInfo = parsed.last_updated ? `, updated ${parsed.last_updated}` : "";
|
|
45574
|
+
return {
|
|
45575
|
+
name: "Curator",
|
|
45576
|
+
status: "\u2705",
|
|
45577
|
+
detail: `Summary present \u2014 covering ${phaseInfo}${timeInfo}`
|
|
45578
|
+
};
|
|
45579
|
+
} catch (err2) {
|
|
45580
|
+
const message = err2 instanceof Error ? err2.message : "Unknown error";
|
|
45581
|
+
return {
|
|
45582
|
+
name: "Curator",
|
|
45583
|
+
status: "\u274C",
|
|
45584
|
+
detail: `curator-summary.json is corrupt or invalid: ${message}`
|
|
45585
|
+
};
|
|
45586
|
+
}
|
|
45587
|
+
} catch (err2) {
|
|
45588
|
+
const message = err2 instanceof Error ? err2.message : "Unknown error";
|
|
45589
|
+
return {
|
|
45590
|
+
name: "Curator",
|
|
45591
|
+
status: "\u274C",
|
|
45592
|
+
detail: `Could not check curator state: ${message}`
|
|
45593
|
+
};
|
|
45594
|
+
}
|
|
45595
|
+
}
|
|
45544
45596
|
async function getDiagnoseData(directory) {
|
|
45545
45597
|
const checks5 = [];
|
|
45546
45598
|
const plan = await loadPlanJsonOnly(directory);
|
|
@@ -45645,6 +45697,7 @@ async function getDiagnoseData(directory) {
|
|
|
45645
45697
|
checks5.push(await checkCheckpointManifest(directory));
|
|
45646
45698
|
checks5.push(await checkEventStreamIntegrity(directory));
|
|
45647
45699
|
checks5.push(await checkSteeringDirectives(directory));
|
|
45700
|
+
checks5.push(await checkCurator(directory));
|
|
45648
45701
|
const passCount = checks5.filter((c) => c.status === "\u2705").length;
|
|
45649
45702
|
const totalCount = checks5.length;
|
|
45650
45703
|
const allPassed = passCount === totalCount;
|
|
@@ -52535,10 +52588,11 @@ function detectTypecheckCommand(projectDir) {
|
|
|
52535
52588
|
...pkg.dependencies,
|
|
52536
52589
|
...pkg.devDependencies
|
|
52537
52590
|
};
|
|
52538
|
-
if (!deps?.typescript && !fs20.existsSync(path32.join(projectDir, "tsconfig.json"))) {
|
|
52539
|
-
|
|
52591
|
+
if (!deps?.typescript && !fs20.existsSync(path32.join(projectDir, "tsconfig.json"))) {}
|
|
52592
|
+
const hasTSMarkers = deps?.typescript || fs20.existsSync(path32.join(projectDir, "tsconfig.json"));
|
|
52593
|
+
if (hasTSMarkers) {
|
|
52594
|
+
return { command: ["npx", "tsc", "--noEmit"], language: "typescript" };
|
|
52540
52595
|
}
|
|
52541
|
-
return { command: ["npx", "tsc", "--noEmit"], language: "typescript" };
|
|
52542
52596
|
} catch {
|
|
52543
52597
|
return null;
|
|
52544
52598
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-swarm",
|
|
3
|
-
"version": "6.29.
|
|
3
|
+
"version": "6.29.3",
|
|
4
4
|
"description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|