opencode-swarm 7.200.12 → 7.200.13
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/test-file-split/SKILL.md +6 -1
- package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
- package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
- package/dist/cli/{attest-task-0h9adt4t.js → attest-task-pvwft49v.js} +26 -26
- package/dist/cli/{auto-checkpoint-f7pcj09v.js → auto-checkpoint-d42tskyk.js} +4 -4
- package/dist/cli/{checkpoint-5j4dqdd1.js → checkpoint-ga9vbvb1.js} +8 -8
- package/dist/cli/{coder-settlement-n69ee5jz.js → coder-settlement-rbhdzxs0.js} +4 -4
- package/dist/cli/{config-doctor-q23166e4.js → config-doctor-qh3aba3c.js} +7 -7
- package/dist/cli/{core-2th9bfmx.js → core-vx7fxf4y.js} +1 -1
- package/dist/cli/{curator-dsf0966y.js → curator-0nv1asjc.js} +26 -26
- package/dist/cli/{curator-drift-b4rcjh23.js → curator-drift-4e5nsjec.js} +5 -5
- package/dist/cli/{curator-llm-factory-3b7b55k6.js → curator-llm-factory-cn47pa0k.js} +26 -26
- package/dist/cli/{doctor-knowledge-receipt-phase-id-4npan6z7.js → doctor-knowledge-receipt-phase-id-5qs5w6jz.js} +4 -4
- package/dist/cli/{evidence-summary-service-evv73ay3.js → evidence-summary-service-fbhdnww1.js} +10 -10
- package/dist/cli/{gate-evidence-vz9gjwkz.js → gate-evidence-44bzkpnp.js} +3 -3
- package/dist/cli/{guardrail-explain-jvvk0at1.js → guardrail-explain-ga6m57w3.js} +27 -27
- package/dist/cli/{guardrail-log-b81vyjvz.js → guardrail-log-aekacstp.js} +3 -3
- package/dist/cli/{guardrail-reset-ygq8e117.js → guardrail-reset-ezjd8vtv.js} +26 -26
- package/dist/cli/{hive-promoter-73e5qa2r.js → hive-promoter-r8z673jn.js} +26 -26
- package/dist/cli/{index-cy2zmsa0.js → index-0g2nvyn9.js} +28 -28
- package/dist/cli/{index-td0bfecx.js → index-165v1k07.js} +3 -3
- package/dist/cli/{index-5ecsb26p.js → index-1nnrz6yd.js} +6 -6
- package/dist/cli/{index-5e5s7p5z.js → index-1w9mc5ck.js} +26 -26
- package/dist/cli/{index-n425a88g.js → index-3jewj7q3.js} +1 -1
- package/dist/cli/{index-jkj598w8.js → index-6kdyc1s7.js} +1 -1
- package/dist/cli/{index-zs5vymnk.js → index-6tpmpc0f.js} +1 -1
- package/dist/cli/{index-2w17wxc1.js → index-6xaft4r3.js} +1 -1
- package/dist/cli/{index-dfgqg3qd.js → index-7811ftfy.js} +5 -5
- package/dist/cli/{index-60yd5f2p.js → index-8az4qgz7.js} +2 -2
- package/dist/cli/{index-wfx209wp.js → index-8kta0a96.js} +2 -2
- package/dist/cli/{index-gvzf86kf.js → index-9v10n049.js} +2 -2
- package/dist/cli/{index-n9mb83fx.js → index-9zw7mh20.js} +3 -3
- package/dist/cli/{index-phm7gmpq.js → index-a01knv2b.js} +276 -133
- package/dist/cli/{index-9t4gxpt5.js → index-cc2vkpg7.js} +1 -1
- package/dist/cli/{index-fe3dtakd.js → index-dkg8meb8.js} +3 -3
- package/dist/cli/{index-bxsbm6xx.js → index-ffz00br0.js} +3 -3
- package/dist/cli/{index-1egy4f76.js → index-fh22ndnh.js} +1 -1
- package/dist/cli/{index-z0jf1tyr.js → index-fxnj2qd5.js} +1 -1
- package/dist/cli/{index-vzd1w4ra.js → index-h59n1rx5.js} +2 -2
- package/dist/cli/{index-213w5jn9.js → index-h8ta8mva.js} +1 -1
- package/dist/cli/{index-2ftz9m3d.js → index-hs96g7xz.js} +1 -1
- package/dist/cli/{index-2pvmk43k.js → index-krrn8eg3.js} +1 -1
- package/dist/cli/{index-sfd8kb4k.js → index-nfjwshs6.js} +1 -1
- package/dist/cli/{index-gkaj31rk.js → index-pxf512yn.js} +3 -3
- package/dist/cli/{index-xdyqfp37.js → index-q0gtj1px.js} +2 -2
- package/dist/cli/{index-0cqr8afr.js → index-qg38v82w.js} +4 -4
- package/dist/cli/{index-9dtd681s.js → index-sx4fm1d2.js} +1 -1
- package/dist/cli/{index-fk1w7r9k.js → index-v4g6rm68.js} +3 -3
- package/dist/cli/{index-0kgqjaaj.js → index-x9gyt21k.js} +2 -2
- package/dist/cli/{index-5t3p0nd1.js → index-xfdx40ba.js} +5 -5
- package/dist/cli/index.js +27 -27
- package/dist/cli/{knowledge-escalator-et068ebg.js → knowledge-escalator-t29wynav.js} +7 -7
- package/dist/cli/{knowledge-events-2ha1zsv5.js → knowledge-events-pqn56zk8.js} +5 -5
- package/dist/cli/{knowledge-store-bpchbre8.js → knowledge-store-tset38av.js} +1 -1
- package/dist/cli/{knowledge-validator-0q4xmhch.js → knowledge-validator-6p132rab.js} +2 -2
- package/dist/cli/{mcp-hh5k6qar.js → mcp-j2zpg3pg.js} +1 -1
- package/dist/cli/{model-preflight-zh4t5ywj.js → model-preflight-0n10a18z.js} +26 -26
- package/dist/cli/{pending-delegations-vxk971ny.js → pending-delegations-qsvc60qb.js} +2 -2
- package/dist/cli/{pr-subscriptions-nhdfz8pc.js → pr-subscriptions-zx205zj2.js} +1 -1
- package/dist/cli/{pr-workflow-gate-bej2nn0c.js → pr-workflow-gate-04ypha5r.js} +26 -26
- package/dist/cli/{scan-cursor-v5f7s9jb.js → scan-cursor-6zb8bjmp.js} +2 -2
- package/dist/cli/{schema-ejerjdcy.js → schema-9spe6r4w.js} +1 -1
- package/dist/cli/{scope-persistence-5nd08ct5.js → scope-persistence-7b330a4k.js} +5 -5
- package/dist/cli/{server-e9xvqypk.js → server-q54h8edd.js} +26 -26
- package/dist/cli/{skill-generator-6c57ckmm.js → skill-generator-k6gtr0fh.js} +8 -8
- package/dist/cli/{snapshot-coordination-init-jbs93ng2.js → snapshot-coordination-init-namz3ae3.js} +26 -26
- package/dist/cli/{speckit-checkoff-ryx6gh3p.js → speckit-checkoff-40evtzf3.js} +3 -3
- package/dist/cli/{workflow-wal-file-3f6ajfce.js → workflow-wal-file-qjez91sg.js} +2 -2
- package/dist/cli/{worktree-collision-ownership-vdjhvm3b.js → worktree-collision-ownership-k471ygv7.js} +2 -2
- package/dist/cli/{worktree-isolation-arqj4g26.js → worktree-isolation-5tbcb2j9.js} +26 -26
- package/dist/hooks/guardrails/cmd-delete-grammar.d.ts +17 -0
- package/dist/hooks/skill-propagation-gate.d.ts +13 -0
- package/dist/index.js +70 -70
- package/dist/turbo/lean/planner.d.ts +8 -5
- package/dist/turbo/lean/runner.d.ts +3 -0
- package/dist/turbo/lean/upstream-committed.d.ts +94 -0
- package/package.json +1 -1
|
@@ -95,11 +95,14 @@ export interface LeanTurboLanePlan {
|
|
|
95
95
|
* redesign). When supplied, a cross-batch dependency (a `depends:`
|
|
96
96
|
* upstream not present in this planning call's task set — typically
|
|
97
97
|
* completed in a prior phase) is treated as satisfied **only** if
|
|
98
|
-
* the predicate returns `true`. Production callers
|
|
99
|
-
* `
|
|
100
|
-
*
|
|
101
|
-
* the
|
|
102
|
-
*
|
|
98
|
+
* the predicate returns `true`. Production lean callers supply it via
|
|
99
|
+
* `resolveLeanRule3Predicate(directory, taskIds)`
|
|
100
|
+
* (`src/turbo/lean/upstream-committed.ts`) ONLY while an Epic is open
|
|
101
|
+
* for the project — `swarm(task <id>):` landing commits exist only
|
|
102
|
+
* under Epic Mode, so wiring it unconditionally would wrongly degrade
|
|
103
|
+
* every healthy pure-lean cross-phase dependent. When undefined (no
|
|
104
|
+
* open Epic) the planner falls back to its legacy behavior (cross-batch
|
|
105
|
+
* deps are implicitly satisfied) for backward compatibility.
|
|
103
106
|
* @returns Complete lane plan with lanes, degraded tasks, and counters
|
|
104
107
|
*/
|
|
105
108
|
export declare function planLeanTurboLanes(directory: string, phaseNumber: number, plan: {
|
|
@@ -29,6 +29,7 @@ import { attemptMergeBackFromDirty, getMergeStrategy, mergeLaneBranch, postMerge
|
|
|
29
29
|
import { planLeanTurboLanes } from './planner';
|
|
30
30
|
import type { LeanTurboDegradedTask, LeanTurboLane } from './state';
|
|
31
31
|
import { loadLeanTurboRunState, saveLeanTurboRunState } from './state';
|
|
32
|
+
import { resolveLeanRule3Predicate } from './upstream-committed';
|
|
32
33
|
import { assertCleanWorkingTree, provisionWorktree, removeLaneProfileFromDiskReal, removeWorktree } from './worktree';
|
|
33
34
|
/**
|
|
34
35
|
* Shape of the OpencodeClient session API used by the runner.
|
|
@@ -216,6 +217,8 @@ export declare class LeanTurboRunner {
|
|
|
216
217
|
static _internals: {
|
|
217
218
|
loadPlanJsonOnly: typeof loadPlanJsonOnly;
|
|
218
219
|
planLeanTurboLanes: typeof planLeanTurboLanes;
|
|
220
|
+
/** Issue #2962: epic-gated Rule-3 upstream-commit predicate for lane planning. */
|
|
221
|
+
resolveLeanRule3Predicate: typeof resolveLeanRule3Predicate;
|
|
219
222
|
acquireLaneLocks: typeof acquireLaneLocks;
|
|
220
223
|
releaseLaneLocks: typeof releaseLaneLocks;
|
|
221
224
|
loadLeanTurboRunState: typeof loadLeanTurboRunState;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lean Turbo Rule-3 upstream-commit predicate (issue #2962).
|
|
3
|
+
*
|
|
4
|
+
* `planLeanTurboLanes` reserves an optional `isUpstreamCommitted` predicate
|
|
5
|
+
* (greenfield-smart Rule 3): when supplied, a cross-batch `depends:` upstream
|
|
6
|
+
* (a dep not present in this planning call's task set — typically completed in
|
|
7
|
+
* a prior phase) counts as satisfied only when the predicate proves the
|
|
8
|
+
* upstream's work landed in git. Before this module existed, neither
|
|
9
|
+
* production caller supplied it, so `makeDependencySatisfactionChecker`
|
|
10
|
+
* (`partition-common.ts`) treated every cross-batch dep as implicitly
|
|
11
|
+
* satisfied — a dependent task was dispatched in a parallel lane against work
|
|
12
|
+
* that never reached HEAD.
|
|
13
|
+
*
|
|
14
|
+
* The predicate is EPIC-GATED: `swarm(task <id>):` landing commits exist only
|
|
15
|
+
* under Epic Mode (`src/epic/plan-key.ts` → `task-landing.ts`/`residue-commit.ts`;
|
|
16
|
+
* `src/plan/manager.ts` performs no git writes). In pure Lean Turbo no such
|
|
17
|
+
* commits ever exist, so this helper returns `undefined` (the planner's
|
|
18
|
+
* byte-identical legacy branch) unless an Epic is open for the project.
|
|
19
|
+
*
|
|
20
|
+
* Evidence reuses the CURRENT Epic marker machinery — never a re-implemented
|
|
21
|
+
* subject scanner: coder landings are `git merge --no-ff` MERGE commits (the
|
|
22
|
+
* log read is merge-inclusive), task ids repeat across plans (the
|
|
23
|
+
* `Swarm-Plan:` trailer filters by planKey), and ids are scrubbed in subjects
|
|
24
|
+
* (`scrubTaskIdForGitSubject` mapping handled inside `findTaskCommits`).
|
|
25
|
+
*
|
|
26
|
+
* Failure taxonomy:
|
|
27
|
+
* - Unreadable Epic state → Epic reads as OFF (same direction as
|
|
28
|
+
* `isEpicOpenForProject`): `undefined` + operator-visible warn.
|
|
29
|
+
* - Epic closed between the reads → `undefined`, no warn (not an error).
|
|
30
|
+
* - Unborn HEAD (positively
|
|
31
|
+
* classified) → defined predicate, EMPTY committed set
|
|
32
|
+
* (nothing has landed yet).
|
|
33
|
+
* - Genuine git failure (log read
|
|
34
|
+
* fails with HEAD resolvable, or
|
|
35
|
+
* the probe itself fails) → disclosed permissive fallback
|
|
36
|
+
* (`() => true`): legacy degradation,
|
|
37
|
+
* NOT continued Rule-3 enforcement — wave
|
|
38
|
+
* ordering never covers cross-batch deps.
|
|
39
|
+
*
|
|
40
|
+
* This module is the Lean-owned side of a documented Lean→Epic seam (see
|
|
41
|
+
* `src/epic/README.md`, upstream consumers): `src/epic/lifecycle.ts` and
|
|
42
|
+
* `src/epic/markers.ts` import nothing from `src/turbo/lean/`, so the edge is
|
|
43
|
+
* acyclic, and Epic-off costs exactly the sentinel `existsSync` inside
|
|
44
|
+
* `isEpicOpenForProject` (Epic rule zero).
|
|
45
|
+
*/
|
|
46
|
+
import { getOpenEpic, isEpicOpenForProject } from '../../epic/lifecycle.js';
|
|
47
|
+
import { epicCommitRange, findTaskCommits } from '../../epic/markers.js';
|
|
48
|
+
import * as logger from '../../utils/logger.js';
|
|
49
|
+
/** Three-way HEAD probe outcome. */
|
|
50
|
+
export type HeadCommitState = 'exists' | 'unborn' | 'unknown';
|
|
51
|
+
/**
|
|
52
|
+
* Bounded HEAD classification. `'exists'` when `git rev-parse --verify HEAD`
|
|
53
|
+
* resolves (exit 0). `'unborn'` ONLY when positively classified: rev-parse
|
|
54
|
+
* fails AND `git symbolic-ref -q HEAD` still resolves the branch (we are on a
|
|
55
|
+
* branch that simply has no commits yet — the structural unborn shape; stderr
|
|
56
|
+
* text varies by git version, so the ref probe is the classifier). Every other
|
|
57
|
+
* outcome — spawn error, timeout, other exit, detached/corrupt HEAD — yields
|
|
58
|
+
* `'unknown'` so a probe failure can never masquerade as "nothing committed".
|
|
59
|
+
*/
|
|
60
|
+
declare function headCommitExistsReal(directory: string): HeadCommitState;
|
|
61
|
+
/**
|
|
62
|
+
* Warn once per (resolved directory, failure class). The class key keeps the
|
|
63
|
+
* two semantically distinct degradations from suppressing each other (#2962
|
|
64
|
+
* review PRR-006): an unreadable-Epic warning must not silence a later
|
|
65
|
+
* git-log-failure warning for the same project, and vice versa. The key is
|
|
66
|
+
* the canonical lexical root so path-spelling variants dedup to one entry.
|
|
67
|
+
*/
|
|
68
|
+
declare function warnOnceReal(directory: string, failureClass: 'epic-unreadable' | 'rule3-git-failure', message: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve the Rule-3 predicate for a Lean Turbo planning call.
|
|
71
|
+
*
|
|
72
|
+
* @param directory - Project root directory.
|
|
73
|
+
* @param taskIds - The plan's full task-id set (all phases) — the candidate
|
|
74
|
+
* cross-batch upstreams the marker read scans for. One bounded git
|
|
75
|
+
* call per planning pass; never on the plugin-init path.
|
|
76
|
+
* @returns `undefined` when no Epic is open for the project (pure-lean
|
|
77
|
+
* legacy semantics, byte-identical placement), otherwise a predicate
|
|
78
|
+
* answering "does this task id have a `swarm(task <id>):` landing in
|
|
79
|
+
* the open Epic's commit range for the current plan?".
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveLeanRule3Predicate(directory: string, taskIds: readonly string[]): ((taskId: string) => boolean) | undefined;
|
|
82
|
+
/** DI seam (AGENTS.md invariant 7). Restore in `afterEach`. */
|
|
83
|
+
export declare const _internals: {
|
|
84
|
+
isEpicOpenForProject: typeof isEpicOpenForProject;
|
|
85
|
+
getOpenEpic: typeof getOpenEpic;
|
|
86
|
+
epicCommitRange: typeof epicCommitRange;
|
|
87
|
+
findTaskCommits: typeof findTaskCommits;
|
|
88
|
+
headCommitExists: typeof headCommitExistsReal;
|
|
89
|
+
warnOnce: typeof warnOnceReal;
|
|
90
|
+
criticalWarn: typeof logger.criticalWarn;
|
|
91
|
+
/** Test-reset surface for the module-level dedup registry (lifecycle.ts precedent). */
|
|
92
|
+
warnedDirectories: Set<string>;
|
|
93
|
+
};
|
|
94
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-swarm",
|
|
3
|
-
"version": "7.200.
|
|
3
|
+
"version": "7.200.13",
|
|
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",
|