opencode-swarm 7.91.0 → 7.91.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/skills/commit-pr/SKILL.md +22 -2
- package/.opencode/skills/engineering-conventions/SKILL.md +12 -0
- package/.opencode/skills/swarm-pr-feedback/SKILL.md +10 -0
- package/.opencode/skills/swarm-pr-review/SKILL.md +12 -1
- package/dist/cli/{guardrail-explain-0ephhnjq.js → guardrail-explain-h2007ev1.js} +2 -2
- package/dist/cli/{index-gpkbg9p4.js → index-07qr9he0.js} +2 -2
- package/dist/cli/{index-e9tp9p2w.js → index-h1cjgz2r.js} +4 -4
- package/dist/cli/{index-wtyysb1n.js → index-sxm9y9a5.js} +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -146,11 +146,11 @@ node --input-type=module -e "await import('./dist/index.js'); console.log('dist
|
|
|
146
146
|
|
|
147
147
|
### Tier 1 - quality
|
|
148
148
|
|
|
149
|
-
Run both linter AND formatter — e.g., `bunx biome check --write .` or equivalent — because CI quality gates reject code that passes tests but fails style validation.
|
|
149
|
+
Run both linter AND formatter — e.g., `bunx @biomejs/biome@<version> check --write .` or equivalent — because CI quality gates reject code that passes tests but fails style validation. **Pin the tool version** to match the version in `package.json` (`@biomejs/biome`); unversioned `bunx biome` resolves to a different version than the CI gate uses.
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
152
|
bun run typecheck
|
|
153
|
-
bunx biome ci .
|
|
153
|
+
bunx @biomejs/biome@<version> ci .
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
### Tier 2 - unit tests
|
|
@@ -392,6 +392,26 @@ $issueCommentPath = Join-Path ([System.IO.Path]::GetTempPath()) "issue-comment.t
|
|
|
392
392
|
gh issue comment <issue-number> --body-file $issueCommentPath
|
|
393
393
|
````
|
|
394
394
|
|
|
395
|
+
## Commit messages
|
|
396
|
+
|
|
397
|
+
`git commit -m "..."` with parens, brackets, backticks, or dollar-signs in the message fails on PowerShell because the shell parses them as expressions. Write the commit message to a UTF-8 (no BOM) file first and use `git commit -F <file>`.
|
|
398
|
+
|
|
399
|
+
PowerShell-safe pattern:
|
|
400
|
+
|
|
401
|
+
```powershell
|
|
402
|
+
$msg = @"
|
|
403
|
+
<type>(<scope>): <description>
|
|
404
|
+
|
|
405
|
+
<optional body — note this is for the git commit message, NOT the PR body>
|
|
406
|
+
"@
|
|
407
|
+
$utf8NoBom = New-Object -TypeName System.Text.UTF8Encoding -ArgumentList $false
|
|
408
|
+
$commitMsgPath = Join-Path ([System.IO.Path]::GetTempPath()) "commit-msg.txt"
|
|
409
|
+
[System.IO.File]::WriteAllText($commitMsgPath, $msg, $utf8NoBom)
|
|
410
|
+
git commit -F $commitMsgPath
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Apply this pattern for any commit message containing special characters, multi-paragraph bodies, or code blocks. The plain `git commit -m "..."` form remains fine for short single-line messages with no special characters.
|
|
414
|
+
|
|
395
415
|
If the PR merged before this was done, post the missing issue comment immediately.
|
|
396
416
|
|
|
397
417
|
## Step 7 - Existing PR follow-up and closeout
|
|
@@ -55,3 +55,15 @@ The OpenCode `test_runner` tool is for **targeted agent validation** with explic
|
|
|
55
55
|
Every PR that touches a relevant area must include an `## Invariant audit` section in its description. The format is in `AGENTS.md` ("Invariant audit required in PRs"). The `commit-pr` skill enforces this gate before push/PR — load it before committing.
|
|
56
56
|
|
|
57
57
|
If you cannot prove a touched invariant from source and test output, **do not push**.
|
|
58
|
+
|
|
59
|
+
## Tool version parity (local vs CI)
|
|
60
|
+
|
|
61
|
+
**Tool versions must match CI.** When `package.json` pins a tool version (e.g., `@biomejs/biome@2.3.14`, `@biomejs/biome@^2`, or any other versioned dev dependency), invoke it **with the pinned version** during local validation. Unversioned `bunx biome` resolves to a different version than the CI gate uses, and a CI-blocking failure can be invisible to local pre-commit validation.
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
- Pinned biome: `bunx @biomejs/biome@<version> ci .` (substitute `<version>` from `package.json`).
|
|
65
|
+
- Unversioned `bunx biome ci .` resolves to whatever Bun's `bunx` registry returns at run time — historically 0.3.x vs the pinned 2.x.
|
|
66
|
+
|
|
67
|
+
The `commit-pr` skill Tier 1 - quality section pins the biome command to the package.json version; this is the canonical pattern for any tool where local and CI versions could diverge. Apply the same discipline to ESLint, Prettier, TypeScript, and any other versioned dev dependency.
|
|
68
|
+
|
|
69
|
+
**Why this matters:** PR #1503 (telemetry rotation fix) had a biome 2.3.14 `organizeImports` failure on the `./telemetry` import block that was invisible to local `bunx biome` (which resolved to 0.3.3 with no equivalent rule). The reviewer caught it from CI logs, not local validation. Pin tool versions to close the local/CI parity gap.
|
|
@@ -167,6 +167,16 @@ branches or prior work sessions.
|
|
|
167
167
|
|
|
168
168
|
*Reference: Caught during PR #1472 Round 1 closure.*
|
|
169
169
|
|
|
170
|
+
## Pre-flight: Scope Discipline
|
|
171
|
+
|
|
172
|
+
`declare_scope({ taskId, files })` enforces that the delegated coder agent may only modify the declared files. The enforcement requires an active `.swarm/plan.json` — calling `declare_scope` in a feedback-closure run (which does not go through `save_plan`) rejects with "No plan found."
|
|
173
|
+
|
|
174
|
+
**When to use `declare_scope` (preferred):** any feedback round that touches 2+ files, OR any feedback round where the file scope is not 100% obvious from the prompt. Before delegating, save a minimal plan via `save_plan` with a single phase containing the feedback-closure tasks, then call `declare_scope` per task with the exact file list.
|
|
175
|
+
|
|
176
|
+
**Carve-out for direct Task delegation:** 1-file, single-function changes where the file path appears verbatim in the coder's prompt may use direct `Task(subagent_type="paid_coder", ...)` delegation without `declare_scope`. This is a narrow exception; the orchestrator is responsible for verifying the scope is unambiguous.
|
|
177
|
+
|
|
178
|
+
**Anti-pattern:** do not use `Task` delegation for multi-file feedback fixes just to skip `save_plan` — the loss of scope discipline is not worth the saved ceremony.
|
|
179
|
+
|
|
170
180
|
## Intake Surfaces
|
|
171
181
|
|
|
172
182
|
Build a complete feedback ledger before editing. Include every available source:
|
|
@@ -741,9 +741,15 @@ The critic must challenge:
|
|
|
741
741
|
Critic output format:
|
|
742
742
|
|
|
743
743
|
```text
|
|
744
|
-
[CRITIC] | finding_id | UPHELD
|
|
744
|
+
[CRITIC] | finding_id | UPHELD/DOWNGRADED/DISPROVED/NEEDS_MORE_EVIDENCE | final_severity | reason | required_report_change
|
|
745
745
|
```
|
|
746
746
|
|
|
747
|
+
## Verdict row contract
|
|
748
|
+
|
|
749
|
+
The `[CRITIC]` row in the format above is **mandatory contract**, not advisory output. A critic response that does not end with that exact row format is treated as a planning preamble, not a verdict, and must be re-dispatched. Do not proceed past Phase 8 join barrier until each dispatched critic lane has produced a parseable `[CRITIC]` row.
|
|
750
|
+
|
|
751
|
+
**Re-dispatch trigger:** when a critic lane response is missing the verdict row, the orchestrator must automatically re-dispatch that lane with the explicit instruction: "Your final line MUST be exactly the Phase 8 contract row: `[CRITIC] | finding_id | UPHELD/DOWNGRADED/DISPROVED/NEEDS_MORE_EVIDENCE | final_severity | reason | required_report_change`. A response without that exact row will be treated as a planning message and re-dispatched." Do not synthesize findings from the planning preamble; only from the re-dispatched verdict.
|
|
752
|
+
|
|
747
753
|
Refuted findings become `DISPROVED` or `ADVISORY`, depending on critic rationale. Downgrades must be listed in the final validation provenance.
|
|
748
754
|
|
|
749
755
|
---
|
|
@@ -1371,6 +1377,11 @@ For each finding, challenge:
|
|
|
1371
1377
|
|
|
1372
1378
|
Return:
|
|
1373
1379
|
[CRITIC] | finding_id | UPHELD/DOWNGRADED/DISPROVED/NEEDS_MORE_EVIDENCE | final_severity | reason | required_report_change
|
|
1380
|
+
|
|
1381
|
+
REQUIRED FINAL LINE — your final line MUST be exactly the row above (no variations, no labeled fields, no placeholders):
|
|
1382
|
+
[CRITIC] | finding_id | UPHELD/DOWNGRADED/DISPROVED/NEEDS_MORE_EVIDENCE | final_severity | reason | required_report_change
|
|
1383
|
+
|
|
1384
|
+
A response without this exact row is treated as a planning preamble and re-dispatched. Do not output only a planning or investigation message.
|
|
1374
1385
|
```
|
|
1375
1386
|
|
|
1376
1387
|
---
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
handleGuardrailExplain
|
|
4
|
-
} from "./index-
|
|
5
|
-
import"./index-
|
|
4
|
+
} from "./index-sxm9y9a5.js";
|
|
5
|
+
import"./index-h1cjgz2r.js";
|
|
6
6
|
import"./index-6tnmt41c.js";
|
|
7
7
|
import"./index-bm4f0nme.js";
|
|
8
8
|
import"./index-5hrexm02.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
handleGuardrailExplain
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-sxm9y9a5.js";
|
|
5
5
|
import {
|
|
6
6
|
handleGuardrailLog
|
|
7
7
|
} from "./index-gg589mfw.js";
|
|
@@ -78,7 +78,7 @@ import {
|
|
|
78
78
|
handleWriteRetroCommand,
|
|
79
79
|
normalizeSwarmCommandInput,
|
|
80
80
|
resolveCommand
|
|
81
|
-
} from "./index-
|
|
81
|
+
} from "./index-h1cjgz2r.js";
|
|
82
82
|
import"./index-6tnmt41c.js";
|
|
83
83
|
import"./index-bm4f0nme.js";
|
|
84
84
|
import"./index-5hrexm02.js";
|
|
@@ -906,7 +906,7 @@ var init_executor = __esm(() => {
|
|
|
906
906
|
// package.json
|
|
907
907
|
var package_default = {
|
|
908
908
|
name: "opencode-swarm",
|
|
909
|
-
version: "7.91.
|
|
909
|
+
version: "7.91.1",
|
|
910
910
|
description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
|
|
911
911
|
main: "dist/index.js",
|
|
912
912
|
types: "dist/index.d.ts",
|
|
@@ -30387,7 +30387,7 @@ function buildDetailedHelp(commandName, entry) {
|
|
|
30387
30387
|
async function handleHelpCommand(ctx) {
|
|
30388
30388
|
const targetCommand = ctx.args.join(" ");
|
|
30389
30389
|
if (!targetCommand) {
|
|
30390
|
-
const { buildHelpText } = await import("./index-
|
|
30390
|
+
const { buildHelpText } = await import("./index-07qr9he0.js");
|
|
30391
30391
|
return buildHelpText();
|
|
30392
30392
|
}
|
|
30393
30393
|
const tokens = targetCommand.split(/\s+/);
|
|
@@ -30396,7 +30396,7 @@ async function handleHelpCommand(ctx) {
|
|
|
30396
30396
|
return _internals45.buildDetailedHelp(resolved.key, resolved.entry);
|
|
30397
30397
|
}
|
|
30398
30398
|
const similar = _internals45.findSimilarCommands(targetCommand);
|
|
30399
|
-
const { buildHelpText: fullHelp } = await import("./index-
|
|
30399
|
+
const { buildHelpText: fullHelp } = await import("./index-07qr9he0.js");
|
|
30400
30400
|
if (similar.length > 0) {
|
|
30401
30401
|
return `Command '/swarm ${targetCommand}' not found.
|
|
30402
30402
|
|
|
@@ -30529,7 +30529,7 @@ var COMMAND_REGISTRY = {
|
|
|
30529
30529
|
},
|
|
30530
30530
|
"guardrail explain": {
|
|
30531
30531
|
handler: async (ctx) => {
|
|
30532
|
-
const { handleGuardrailExplain } = await import("./guardrail-explain-
|
|
30532
|
+
const { handleGuardrailExplain } = await import("./guardrail-explain-h2007ev1.js");
|
|
30533
30533
|
return handleGuardrailExplain(ctx.directory, ctx.args);
|
|
30534
30534
|
},
|
|
30535
30535
|
description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
|
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -69,7 +69,7 @@ var package_default;
|
|
|
69
69
|
var init_package = __esm(() => {
|
|
70
70
|
package_default = {
|
|
71
71
|
name: "opencode-swarm",
|
|
72
|
-
version: "7.91.
|
|
72
|
+
version: "7.91.1",
|
|
73
73
|
description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
|
|
74
74
|
main: "dist/index.js",
|
|
75
75
|
types: "dist/index.d.ts",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-swarm",
|
|
3
|
-
"version": "7.91.
|
|
3
|
+
"version": "7.91.1",
|
|
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",
|