opencode-swarm 7.106.0 → 7.107.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.
Files changed (40) hide show
  1. package/.opencode/skills/critic-gate/SKILL.md +19 -5
  2. package/.opencode/skills/plan/SKILL.md +18 -3
  3. package/.opencode/skills/resume/SKILL.md +4 -1
  4. package/.opencode/skills/writing-tests/SKILL.md +31 -0
  5. package/dist/agents/critic.d.ts +1 -1
  6. package/dist/agents/explorer.d.ts +2 -2
  7. package/dist/cli/curator-drift-6ad8mxxb.js +211 -0
  8. package/dist/cli/curator-llm-factory-gdhtm1hh.js +31 -0
  9. package/dist/cli/curator-np2ky29t.js +51 -0
  10. package/dist/cli/{evidence-summary-service-v9kmv783.js → evidence-summary-service-dh44gevz.js} +4 -3
  11. package/dist/cli/{explorer-rwfvbbx5.js → explorer-ksr3xq7n.js} +1 -1
  12. package/dist/cli/{guardrail-explain-fvjc90wa.js → guardrail-explain-414smfg4.js} +13 -11
  13. package/dist/cli/hive-promoter-y9r8d315.js +39 -0
  14. package/dist/cli/{index-ydgy7vg5.js → index-09xpycan.js} +31 -5
  15. package/dist/cli/index-357p0baj.js +719 -0
  16. package/dist/cli/{index-7dtekwvd.js → index-7v734syt.js} +1 -1
  17. package/dist/cli/{index-z4t3w4xf.js → index-87d4wsv9.js} +14 -12
  18. package/dist/cli/{index-vwyjkzgs.js → index-9wstcavp.js} +1 -1
  19. package/dist/cli/index-c8s9a3zh.js +73 -0
  20. package/dist/cli/{index-f4yjypa4.js → index-gt514nt1.js} +29028 -27099
  21. package/dist/cli/{index-k2rmw9sz.js → index-jjp5qrjv.js} +265 -843
  22. package/dist/cli/{index-e9n3xsk0.js → index-t4hbye3v.js} +1 -1
  23. package/dist/cli/index.js +12 -10
  24. package/dist/cli/{pending-delegations-dvprsdfy.js → pending-delegations-46xf2n2e.js} +2 -2
  25. package/dist/cli/{pr-subscriptions-zfxjtyzw.js → pr-subscriptions-3c34rnm1.js} +3 -3
  26. package/dist/cli/{skill-generator-99rrfwae.js → skill-generator-y6mmq8n5.js} +1 -1
  27. package/dist/commands/curate.d.ts +38 -1
  28. package/dist/commands/registry.d.ts +2 -2
  29. package/dist/commands/reset-session.d.ts +10 -0
  30. package/dist/hooks/curator-postmortem.d.ts +52 -3
  31. package/dist/hooks/curator.d.ts +2 -1
  32. package/dist/hooks/delegation-gate/worktree-isolation.d.ts +3 -1
  33. package/dist/hooks/guardrails/index.d.ts +3 -1
  34. package/dist/hooks/system-enhancer.d.ts +4 -0
  35. package/dist/index.js +458 -386
  36. package/dist/plan/manager.d.ts +15 -1
  37. package/dist/tools/update-task-status.d.ts +1 -0
  38. package/dist/utils/spec-hash.d.ts +36 -0
  39. package/package.json +1 -1
  40. package/dist/cli/{index-7ztmmqpt.js → index-mpe0yk9s.js} +3 -3
@@ -173,6 +173,18 @@ export declare function closePlanTerminalState(directory: string, plan: Plan, op
173
173
  closedTaskIds: string[];
174
174
  originalStatuses?: Map<string, string>;
175
175
  }): Promise<void>;
176
+ /**
177
+ * Check whether a task is in a settled state (not pending/in_progress).
178
+ *
179
+ * Settled = status is neither 'pending' nor 'in_progress' (i.e. 'completed',
180
+ * 'closed', or 'blocked'). Returns FALSE when the task is not found or the
181
+ * plan cannot be loaded, so callers only block on known-settled tasks and
182
+ * allow unknown/missing tasks through.
183
+ *
184
+ * Used by the advanceTaskStateAndPersist preflight to prevent re-dispatching
185
+ * a task that has already reached a terminal plan state.
186
+ */
187
+ export declare function isTaskSettled(directory: string, taskId: string): Promise<boolean>;
176
188
  /**
177
189
  * Load plan → find task by ID → update status → save → return updated plan.
178
190
  * Throw if plan not found or task not found.
@@ -185,7 +197,9 @@ export declare function closePlanTerminalState(directory: string, plan: Plan, op
185
197
  * The migration guard in loadPlan() (plan_id identity check) prevents destructive
186
198
  * revert after a swarm rename — so this is safe even in post-migration scenarios.
187
199
  */
188
- export declare function updateTaskStatus(directory: string, taskId: string, status: TaskStatus): Promise<Plan>;
200
+ export declare function updateTaskStatus(directory: string, taskId: string, status: TaskStatus, options?: {
201
+ force?: boolean;
202
+ }): Promise<Plan>;
189
203
  /**
190
204
  * Generate deterministic markdown view from plan object.
191
205
  * Ensures stable ordering: phases by ID (ascending), tasks by ID (natural numeric).
@@ -24,6 +24,7 @@ export interface UpdateTaskStatusArgs {
24
24
  task_id: string;
25
25
  status: string;
26
26
  working_directory?: string;
27
+ force?: boolean;
27
28
  }
28
29
  /**
29
30
  * Result from executing update_task_status
@@ -14,12 +14,48 @@ export declare function isSpecStale(directory: string, plan: Plan): Promise<{
14
14
  reason?: string;
15
15
  currentHash?: string | null;
16
16
  }>;
17
+ /**
18
+ * Returns true iff the recorded spec snapshot and the current effective spec
19
+ * have IDENTICAL obligation-bearing PARAGRAPHS. A paragraph is a block of
20
+ * text separated by blank lines. A paragraph is obligation-bearing if ANY
21
+ * line in it matches /\bSC-\d+/, /\bFR-\d+/, or contains MUST or SHALL
22
+ * (case-insensitive).
23
+ *
24
+ * This paragraph-level comparison detects changes on continuation lines within
25
+ * an obligation paragraph (where the obligation marker is on one line but the
26
+ * body text that changes meaning is on a subsequent line without a token).
27
+ *
28
+ * Conservative default: if the snapshot is missing, the current spec is missing,
29
+ * or any error occurs during reading or comparison, returns false so the edit
30
+ * falls back to the block-with-diff path.
31
+ */
32
+ export declare function isObligationPreserving(directory: string): boolean;
17
33
  /**
18
34
  * DI seam for testability. Contains all test-mocked exports.
19
35
  * Internal calls should use _internals.fn() instead of fn() directly.
20
36
  */
21
37
  export declare const _internals: {
38
+ computeSpecDiff: typeof computeSpecDiff;
22
39
  computeSpecHash: typeof computeSpecHash;
40
+ isObligationPreserving: typeof isObligationPreserving;
23
41
  isSpecStale: typeof isSpecStale;
24
42
  readEffectiveSpecSync: typeof readEffectiveSpecSync;
25
43
  };
44
+ /**
45
+ * Computes a unified line diff between the recorded spec snapshot and the
46
+ * current effective spec. Returns null if no snapshot exists (cannot diff).
47
+ *
48
+ * Diff format: lines prefixed with ' ' (unchanged), '+' (added), '-' (removed).
49
+ * Changed sections are markdown headings (lines starting with '## ') that
50
+ * appear in added or removed lines.
51
+ *
52
+ * The diff is capped at 300 lines; when exceeded, only the changed-sections
53
+ * summary is returned alongside a truncated diff.
54
+ *
55
+ * Uses synchronous reads internally so it can be called from sync contexts
56
+ * (e.g. the spec-drift guardrail block path).
57
+ */
58
+ export declare function computeSpecDiff(directory: string): {
59
+ diff: string;
60
+ changedSections: string[];
61
+ } | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.106.0",
3
+ "version": "7.107.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",
@@ -1,10 +1,10 @@
1
1
  // @bun
2
- import {
3
- readCachedTextFile
4
- } from "./index-jtqkh8jf.js";
5
2
  import {
6
3
  SwarmError
7
4
  } from "./index-5e4e2hvv.js";
5
+ import {
6
+ readCachedTextFile
7
+ } from "./index-jtqkh8jf.js";
8
8
  import {
9
9
  warn
10
10
  } from "./index-zgwm4ryv.js";