opencode-swarm 7.191.3 → 7.191.4
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/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
- package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
- package/dist/cli/{auto-checkpoint-hzhjkz93.js → auto-checkpoint-mfevgppc.js} +5 -5
- package/dist/cli/{checkpoint-rcszvgf0.js → checkpoint-ft7x9hh4.js} +9 -9
- package/dist/cli/{coder-settlement-xyqg633m.js → coder-settlement-a8v2w1gw.js} +3 -3
- package/dist/cli/{config-doctor-3fmhmr06.js → config-doctor-5jpt3aj0.js} +7 -7
- package/dist/cli/{core-16wgyp5e.js → core-9sekbwxm.js} +1 -1
- package/dist/cli/{curator-drift-eksxa9fp.js → curator-drift-mqcfwm24.js} +5 -5
- package/dist/cli/{curator-llm-factory-ygngs1sz.js → curator-llm-factory-nm91t6p1.js} +26 -26
- package/dist/cli/{curator-ztndrkxb.js → curator-venskykb.js} +26 -26
- package/dist/cli/{doctor-knowledge-receipt-phase-id-ys47kkak.js → doctor-knowledge-receipt-phase-id-0ewtqwxk.js} +5 -5
- package/dist/cli/{evidence-summary-service-67jqzqs8.js → evidence-summary-service-rr3rb5n2.js} +10 -10
- package/dist/cli/{gate-evidence-ytvnsryw.js → gate-evidence-sjp73rfv.js} +2 -2
- package/dist/cli/{guardrail-explain-c7d273s8.js → guardrail-explain-r5x9khp3.js} +27 -27
- package/dist/cli/{guardrail-log-1y95wcs8.js → guardrail-log-87qgtbxw.js} +3 -3
- package/dist/cli/{guardrail-reset-efptt0dd.js → guardrail-reset-z1rhagdh.js} +26 -26
- package/dist/cli/{hive-promoter-1c429hxm.js → hive-promoter-hy0gm4z7.js} +26 -26
- package/dist/cli/{index-5znhb5xh.js → index-02gmv98q.js} +4 -4
- package/dist/cli/{index-7wpdvw9t.js → index-1gv6ja3m.js} +2 -2
- package/dist/cli/{index-p8s1jaxt.js → index-1y1fgtd0.js} +91 -66
- package/dist/cli/{index-yjb4bz8n.js → index-2afvf0hr.js} +2 -2
- package/dist/cli/{index-jehdm4pk.js → index-633j6d5z.js} +1 -1
- package/dist/cli/{index-5hpvw26z.js → index-7tkkhbcw.js} +1 -1
- package/dist/cli/{index-7zkk2jg2.js → index-8nac5633.js} +2 -2
- package/dist/cli/{index-9s7azfyy.js → index-9nh7fhh9.js} +3 -3
- package/dist/cli/{index-cr4zz79g.js → index-9ved57n0.js} +3 -3
- package/dist/cli/{index-8tvne3k7.js → index-bs8yvx1k.js} +1 -1
- package/dist/cli/{index-5wb9rgwk.js → index-ce4skcpr.js} +2 -2
- package/dist/cli/{index-7cwp0ctr.js → index-chdc1wv3.js} +1 -1
- package/dist/cli/{index-czv2q23x.js → index-d4rm6r3c.js} +1 -1
- package/dist/cli/{index-ng2ydjjx.js → index-ez6sczc7.js} +1 -1
- package/dist/cli/{index-j5nhx6e8.js → index-g22dps7x.js} +3 -0
- package/dist/cli/{index-49wjw0ck.js → index-jfk0yzr6.js} +1 -1
- package/dist/cli/{index-0hh6rvj6.js → index-kcx2f95c.js} +6 -6
- package/dist/cli/{index-4999bn4j.js → index-knqvkxc4.js} +26 -26
- package/dist/cli/{index-4mkwppwa.js → index-p4f47xhj.js} +3 -3
- package/dist/cli/{index-sg798y6a.js → index-p4vdas8e.js} +1 -1
- package/dist/cli/{index-p84e7f4q.js → index-q0y8e1db.js} +2 -2
- package/dist/cli/{index-bft3t28s.js → index-qgzyj2vt.js} +5 -5
- package/dist/cli/{index-xhwt7g90.js → index-t775as8a.js} +1 -1
- package/dist/cli/{index-bx8v88ky.js → index-v7bjb1ta.js} +1 -1
- package/dist/cli/{index-kyy4ays9.js → index-w8fbnqhe.js} +1 -1
- package/dist/cli/{index-x50nbnkf.js → index-xbhs0kp0.js} +1 -1
- package/dist/cli/{index-xfyt0bm8.js → index-xgfmzmey.js} +4 -4
- package/dist/cli/{index-zwsxyx8x.js → index-xgy7wakm.js} +28 -28
- package/dist/cli/{index-esv63drs.js → index-xrhhjeas.js} +2 -2
- package/dist/cli/{index-ente7d56.js → index-y7668dn6.js} +3 -3
- package/dist/cli/{index-zywyhw2q.js → index-ydnfnzdq.js} +1 -1
- package/dist/cli/index.js +27 -27
- package/dist/cli/{knowledge-escalator-398a4r2k.js → knowledge-escalator-901znnke.js} +8 -8
- package/dist/cli/{knowledge-events-hwgdqt0t.js → knowledge-events-y2x5c5xe.js} +6 -6
- package/dist/cli/{knowledge-store-t3p01tvz.js → knowledge-store-jkzkgsnw.js} +1 -1
- package/dist/cli/{knowledge-validator-y5s4ppg7.js → knowledge-validator-dar3799k.js} +2 -2
- package/dist/cli/{mcp-62my5s6r.js → mcp-7baqvsr2.js} +1 -1
- package/dist/cli/{model-preflight-v4vrwffw.js → model-preflight-gk2dtfw4.js} +26 -26
- package/dist/cli/{pending-delegations-k50qvt6f.js → pending-delegations-aean4z99.js} +2 -2
- package/dist/cli/{pr-subscriptions-5s0pm800.js → pr-subscriptions-zmv0gtv7.js} +1 -1
- package/dist/cli/{pr-workflow-gate-hf81zjr9.js → pr-workflow-gate-50avx71j.js} +26 -26
- package/dist/cli/{scan-cursor-gh66jjy8.js → scan-cursor-7vnj82v4.js} +2 -2
- package/dist/cli/{schema-xjvvhd3x.js → schema-4v7pnknw.js} +1 -1
- package/dist/cli/{scope-persistence-twqy5vbh.js → scope-persistence-xd30y1ym.js} +5 -5
- package/dist/cli/{server-n74mqqah.js → server-mkvhdc5k.js} +26 -26
- package/dist/cli/{skill-generator-gpsprra6.js → skill-generator-mt61qg5f.js} +9 -9
- package/dist/cli/{snapshot-coordination-init-c2twxn71.js → snapshot-coordination-init-c7r5443q.js} +26 -26
- package/dist/cli/{speckit-checkoff-k2j5s185.js → speckit-checkoff-t17g4ej6.js} +3 -3
- package/dist/cli/{worktree-collision-ownership-h10rm6w4.js → worktree-collision-ownership-negbpp72.js} +2 -2
- package/dist/cli/{worktree-isolation-j2t43rxy.js → worktree-isolation-hhftse76.js} +26 -26
- package/dist/config/evidence-schema.d.ts +9 -0
- package/dist/index.js +8 -8
- package/dist/tools/pre-check-batch.d.ts +64 -1
- package/dist/tools/secretscan.d.ts +15 -0
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ import { resolveGatePreamble } from './phase-complete/gates/gate-helpers';
|
|
|
14
14
|
import type { QualityBudgetResult } from './quality-budget';
|
|
15
15
|
import { qualityBudget } from './quality-budget';
|
|
16
16
|
import type { SastScanFinding, SastScanResult } from './sast-scan';
|
|
17
|
-
import type { SecretscanErrorResult, SecretscanResult } from './secretscan';
|
|
17
|
+
import type { SecretFinding, SecretscanErrorResult, SecretscanResult } from './secretscan';
|
|
18
18
|
export declare const _internals: {
|
|
19
19
|
qualityBudget: typeof qualityBudget;
|
|
20
20
|
runLintWrapped: typeof runLintWrapped;
|
|
@@ -23,6 +23,7 @@ export declare const _internals: {
|
|
|
23
23
|
runQualityBudgetWrapped: typeof runQualityBudgetWrapped;
|
|
24
24
|
runWithTimeout: typeof runWithTimeout;
|
|
25
25
|
getChangedLineRanges: typeof getChangedLineRanges;
|
|
26
|
+
getChangedLineAmbiguousFiles: typeof getChangedLineAmbiguousFiles;
|
|
26
27
|
saveEvidence: typeof saveEvidence;
|
|
27
28
|
runExternalTool: typeof runExternalTool;
|
|
28
29
|
detectResolvedLinter: typeof detectResolvedLinter;
|
|
@@ -76,6 +77,12 @@ export interface ToolResult<T> {
|
|
|
76
77
|
/** Duration in milliseconds */
|
|
77
78
|
duration_ms: number;
|
|
78
79
|
}
|
|
80
|
+
/** #3092: diff-scoped classification input for evaluateSecretscanGate. */
|
|
81
|
+
export interface SecretscanClassification {
|
|
82
|
+
newFindings: SecretFinding[];
|
|
83
|
+
preexistingFindings: SecretFinding[];
|
|
84
|
+
diffScoped: boolean;
|
|
85
|
+
}
|
|
79
86
|
export interface PreCheckBatchResult {
|
|
80
87
|
/** Structured producer status. Optional only for legacy serialized results. */
|
|
81
88
|
batch_status?: 'completed' | 'skipped' | 'invalid';
|
|
@@ -93,6 +100,12 @@ export interface PreCheckBatchResult {
|
|
|
93
100
|
total_duration_ms: number;
|
|
94
101
|
/** Pre-existing SAST findings on unchanged lines, requiring reviewer triage */
|
|
95
102
|
sast_preexisting_findings?: SastScanFinding[];
|
|
103
|
+
/**
|
|
104
|
+
* #3092: pre-existing secret findings on unchanged lines — visible in the
|
|
105
|
+
* scan result and persisted evidence, never gating; reviewer triage input
|
|
106
|
+
* and the hook decoder's diff-scope proof.
|
|
107
|
+
*/
|
|
108
|
+
secretscan_preexisting_findings?: SecretFinding[];
|
|
96
109
|
/** Optional Semgrep exited nonzero with no findings; SAST coverage is incomplete. */
|
|
97
110
|
sast_degraded?: boolean;
|
|
98
111
|
/** SAST was intentionally disabled by the effective QA profile. */
|
|
@@ -144,6 +157,23 @@ declare function runQualityBudgetWrapped(changedFiles: string[], directory: stri
|
|
|
144
157
|
* Returns a Map from normalised file path → Set of changed line numbers.
|
|
145
158
|
*/
|
|
146
159
|
export declare function parseDiffLineRanges(diffOutput: string): Map<string, Set<number>>;
|
|
160
|
+
/**
|
|
161
|
+
* Files whose changed-line evidence mixes more than one Git hop (#3092).
|
|
162
|
+
*
|
|
163
|
+
* `getChangedLineRanges` unions three diffs written in different coordinate
|
|
164
|
+
* systems — `mergeBase..HEAD` in HEAD coordinates, `--cached HEAD` in index
|
|
165
|
+
* coordinates, and the worktree diff — while secretscan findings carry
|
|
166
|
+
* WORKTREE line numbers (the file on disk). A file changed in a committed or
|
|
167
|
+
* staged hop and then edited again (staged and/or unstaged) can have its
|
|
168
|
+
* committed/staged line numbers shifted in the worktree, so the union's
|
|
169
|
+
* membership test alone cannot prove a finding pre-existing: a staged secret
|
|
170
|
+
* with an unstaged insertion above it lands outside the union and would read
|
|
171
|
+
* as untouched. Every finding in such a multi-hop file classifies as NEW.
|
|
172
|
+
* The set is keyed by `normalizeRepoPathKey`, matching the changed-line map.
|
|
173
|
+
* Returns null when a Git source is unavailable — callers must then treat
|
|
174
|
+
* every finding as NEW (fail-closed).
|
|
175
|
+
*/
|
|
176
|
+
export declare function getChangedLineAmbiguousFiles(directory: string, abortSignal?: AbortSignal, requestedFiles?: string[]): Promise<Set<string> | null>;
|
|
147
177
|
/**
|
|
148
178
|
* Get the union of committed, staged, unstaged, and untracked changed lines.
|
|
149
179
|
* A known empty union is authoritative; null means a required Git source was
|
|
@@ -159,6 +189,39 @@ export declare function classifySastFindings(findings: SastScanFinding[], change
|
|
|
159
189
|
newFindings: SastScanFinding[];
|
|
160
190
|
preexistingFindings: SastScanFinding[];
|
|
161
191
|
};
|
|
192
|
+
/**
|
|
193
|
+
* Classify secret findings as "new" (on coder-changed lines) or "pre-existing"
|
|
194
|
+
* (unchanged lines) for the diff-scoped secretscan gate (#3092).
|
|
195
|
+
*
|
|
196
|
+
* Strictly fail-closed — unlike `classifySastFindings`, whose missing-key and
|
|
197
|
+
* empty-set arms deliberately read as pre-existing (pinned by
|
|
198
|
+
* tests/unit/tools/pre-check-batch-sast-preexisting.test.ts), a secret
|
|
199
|
+
* finding is PRE-EXISTING only when EVERY condition holds:
|
|
200
|
+
*
|
|
201
|
+
* - the changed-line map is non-null,
|
|
202
|
+
* - the finding's normalized repo-relative key is present in the map,
|
|
203
|
+
* - the file's changed-line set is non-empty,
|
|
204
|
+
* - the set does not carry the ALL_LINES_CHANGED sentinel (a fully-changed
|
|
205
|
+
* file makes every finding new), and
|
|
206
|
+
* - the finding's line is a safe positive integer and NOT a member of the
|
|
207
|
+
* changed set — the secret sits on a line the coder did not touch.
|
|
208
|
+
*
|
|
209
|
+
* Everything else is NEW: null map, missing key, empty set, ALL-set, a line
|
|
210
|
+
* that IS a changed line, unresolvable / zero / negative / non-integer lines,
|
|
211
|
+
* malformed or root-escaping paths, and any resolution error. Never throws —
|
|
212
|
+
* a failure to resolve classifies the finding as NEW.
|
|
213
|
+
*/
|
|
214
|
+
export declare function classifySecretFindings(findings: SecretFinding[], changedLineRanges: Map<string, Set<number>> | null, directory: string,
|
|
215
|
+
/**
|
|
216
|
+
* #3092: files whose changed-line evidence mixes more than one Git hop
|
|
217
|
+
* (`getChangedLineAmbiguousFiles`). Findings in these files classify as
|
|
218
|
+
* NEW — the unioned map's line numbers for them are not in worktree
|
|
219
|
+
* coordinates, so non-membership cannot prove a line untouched.
|
|
220
|
+
*/
|
|
221
|
+
ambiguousFiles?: Set<string>): {
|
|
222
|
+
newFindings: SecretFinding[];
|
|
223
|
+
preexistingFindings: SecretFinding[];
|
|
224
|
+
};
|
|
162
225
|
/**
|
|
163
226
|
* Run all 4 pre-check tools in parallel with concurrency limit
|
|
164
227
|
* @param input - The pre-check batch input
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import { createSwarmTool } from './create-tool';
|
|
3
|
+
/**
|
|
4
|
+
* Findings cap shared by both scan paths. Exported for gate-side summary
|
|
5
|
+
* wording (#3092) — the value is a frozen contract, not a tunable.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SECRETSCAN_MAX_FINDINGS = 100;
|
|
3
8
|
type SecretType = 'api_key' | 'aws_access_key' | 'aws_secret_key' | 'private_key' | 'password' | 'secret_token' | 'bearer_token' | 'basic_auth' | 'database_url' | 'jwt' | 'github_token' | 'slack_token' | 'stripe_key' | 'sendgrid_key' | 'twilio_key' | 'generic_token' | 'high_entropy';
|
|
4
9
|
type Confidence = 'high' | 'medium' | 'low';
|
|
5
10
|
type Severity = 'critical' | 'high' | 'medium' | 'low';
|
|
@@ -50,6 +55,16 @@ export interface SecretscanResult {
|
|
|
50
55
|
/** Files requested or discovered but not completely examined. */
|
|
51
56
|
incomplete_files: number;
|
|
52
57
|
incomplete_paths: IncompletePath[];
|
|
58
|
+
/**
|
|
59
|
+
* Findings were capped at MAX_FINDINGS and some results were discarded
|
|
60
|
+
* (#3092). Both paths set this alongside their truncation disclosure; the
|
|
61
|
+
* explicit-files path also pushes the `Results limited to ... findings`
|
|
62
|
+
* sentence into `message` exactly like the directory path. Enforcing sites
|
|
63
|
+
* treat `truncated === true` as fail-closed: findings beyond the cap were
|
|
64
|
+
* never classified, so a gate decision over the visible set cannot prove
|
|
65
|
+
* absence of new secrets.
|
|
66
|
+
*/
|
|
67
|
+
truncated?: boolean;
|
|
53
68
|
message?: string;
|
|
54
69
|
}
|
|
55
70
|
export interface IncompletePath {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-swarm",
|
|
3
|
-
"version": "7.191.
|
|
3
|
+
"version": "7.191.4",
|
|
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",
|