opencode-swarm 7.127.0 → 7.128.0

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.
@@ -810,8 +810,8 @@ tool clears the durable session gate only when the content digest still equals
810
810
  the independently approved digest, the exact approved commit remains current,
811
811
  its bound upstream remote-tracking ref points to that exact commit, every
812
812
  feedback ID has exact-provenance evidence, and no PR-workflow lanes remain
813
- open. While the gate remains active, the runtime replaces architect
814
- final-response text with a mechanical blocked notice and normally re-wakes an
813
+ open. While the gate remains active, the runtime prepends a workflow-active
814
+ banner to architect text (the model's text is preserved below it) and normally re-wakes an
815
815
  idle parent session. A user interruption pauses automatic wakes until a later
816
816
  explicit user turn settles; the durable gate remains available to continue or
817
817
  abort.
@@ -1631,8 +1631,9 @@ before emitting the user-facing final report, call `complete_pr_workflow` with
1631
1631
  mode `PR_REVIEW` and the same exact
1632
1632
  `pr_head_sha`. The tool refuses to clear the session gate while required base,
1633
1633
  trigger, declared reviewer/critic, or open-lane obligations remain incomplete.
1634
- While the gate remains active, the runtime replaces architect final-response
1635
- text with a mechanical blocked notice and re-wakes an idle parent session. A
1634
+ While the gate remains active, the runtime prepends a workflow-active banner
1635
+ to architect text parts (the model's text is preserved below the banner) and
1636
+ re-wakes an idle parent session. A
1636
1637
  user interruption pauses every automatic wake path until a later explicit user
1637
1638
  turn settles; the durable gate remains available to continue or abort. Only
1638
1639
  emit the final report after the completion tool confirms that the gate cleared.
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  createCuratorLLMDelegate
4
- } from "./index-fcsnw12w.js";
4
+ } from "./index-npycj2tr.js";
5
5
  import"./index-v4n224r1.js";
6
6
  import"./index-cpssctv1.js";
7
7
  import"./index-kk1scggc.js";
@@ -14,7 +14,7 @@ import {
14
14
  runCuratorInit,
15
15
  runCuratorPhase,
16
16
  writeCuratorSummary
17
- } from "./index-fcsnw12w.js";
17
+ } from "./index-npycj2tr.js";
18
18
  import"./index-v4n224r1.js";
19
19
  import"./index-cpssctv1.js";
20
20
  import"./index-kk1scggc.js";
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-xq0etzbh.js";
5
- import"./index-fcsnw12w.js";
4
+ } from "./index-rczj39pc.js";
5
+ import"./index-npycj2tr.js";
6
6
  import"./index-v4n224r1.js";
7
7
  import"./index-cpssctv1.js";
8
8
  import"./index-kk1scggc.js";
@@ -7,7 +7,7 @@ import {
7
7
  isHiveEligible,
8
8
  promoteFromSwarm,
9
9
  promoteToHive
10
- } from "./index-fcsnw12w.js";
10
+ } from "./index-npycj2tr.js";
11
11
  import"./index-v4n224r1.js";
12
12
  import"./index-cpssctv1.js";
13
13
  import"./index-kk1scggc.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-xq0etzbh.js";
4
+ } from "./index-rczj39pc.js";
5
5
  import {
6
6
  handleGuardrailLog
7
7
  } from "./index-8etcyr9r.js";
@@ -83,7 +83,7 @@ import {
83
83
  handleWriteRetroCommand,
84
84
  normalizeSwarmCommandInput,
85
85
  resolveCommand
86
- } from "./index-fcsnw12w.js";
86
+ } from "./index-npycj2tr.js";
87
87
  import"./index-v4n224r1.js";
88
88
  import"./index-cpssctv1.js";
89
89
  import"./index-kk1scggc.js";
@@ -12305,11 +12305,11 @@ var _internals15 = {
12305
12305
  }
12306
12306
  },
12307
12307
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
12308
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-x0sqv6ye.js");
12308
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-x5dzf1p7.js");
12309
12309
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
12310
12310
  },
12311
12311
  checkHivePromotions: async (entries, knowledgeConfig, directory) => {
12312
- const { checkHivePromotions } = await import("./hive-promoter-d11sk30x.js");
12312
+ const { checkHivePromotions } = await import("./hive-promoter-z8gc80zq.js");
12313
12313
  return checkHivePromotions(entries, knowledgeConfig, directory);
12314
12314
  },
12315
12315
  applyProposalTriage: async (directory, triage) => {
@@ -20176,8 +20176,8 @@ var _internals28 = {
20176
20176
  loadCuratorDeps: async () => {
20177
20177
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate: createCuratorLLMDelegate2 }] = await Promise.all([
20178
20178
  import("./schema-2x7wsb0n.js"),
20179
- import("./curator-x0sqv6ye.js"),
20180
- import("./curator-llm-factory-xmwgrfr0.js")
20179
+ import("./curator-x5dzf1p7.js"),
20180
+ import("./curator-llm-factory-rz4cbq28.js")
20181
20181
  ]);
20182
20182
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate: createCuratorLLMDelegate2 };
20183
20183
  }
@@ -20676,7 +20676,7 @@ import { fileURLToPath } from "url";
20676
20676
  // package.json
20677
20677
  var package_default = {
20678
20678
  name: "opencode-swarm",
20679
- version: "7.127.0",
20679
+ version: "7.128.0",
20680
20680
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
20681
20681
  main: "dist/index.js",
20682
20682
  types: "dist/index.d.ts",
@@ -41238,7 +41238,7 @@ function buildDetailedHelp(commandName, entry) {
41238
41238
  async function handleHelpCommand(ctx) {
41239
41239
  const targetCommand = ctx.args.join(" ");
41240
41240
  if (!targetCommand) {
41241
- const { buildHelpText } = await import("./index-hjkczwqm.js");
41241
+ const { buildHelpText } = await import("./index-nmedh7bw.js");
41242
41242
  return buildHelpText();
41243
41243
  }
41244
41244
  const tokens = targetCommand.split(/\s+/);
@@ -41247,7 +41247,7 @@ async function handleHelpCommand(ctx) {
41247
41247
  return _internals63.buildDetailedHelp(resolved.key, resolved.entry);
41248
41248
  }
41249
41249
  const similar = _internals63.findSimilarCommands(targetCommand);
41250
- const { buildHelpText: fullHelp } = await import("./index-hjkczwqm.js");
41250
+ const { buildHelpText: fullHelp } = await import("./index-nmedh7bw.js");
41251
41251
  if (similar.length > 0) {
41252
41252
  return `Command '/swarm ${targetCommand}' not found.
41253
41253
 
@@ -41386,7 +41386,7 @@ var COMMAND_REGISTRY = {
41386
41386
  },
41387
41387
  "guardrail explain": {
41388
41388
  handler: async (ctx) => {
41389
- const { handleGuardrailExplain } = await import("./guardrail-explain-g3tgjv9a.js");
41389
+ const { handleGuardrailExplain } = await import("./guardrail-explain-fwvxteqe.js");
41390
41390
  return handleGuardrailExplain(ctx.directory, ctx.args);
41391
41391
  },
41392
41392
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -41396,7 +41396,7 @@ var COMMAND_REGISTRY = {
41396
41396
  },
41397
41397
  "guardrail-explain": {
41398
41398
  handler: async (ctx) => {
41399
- const { handleGuardrailExplain } = await import("./guardrail-explain-g3tgjv9a.js");
41399
+ const { handleGuardrailExplain } = await import("./guardrail-explain-fwvxteqe.js");
41400
41400
  return handleGuardrailExplain(ctx.directory, ctx.args);
41401
41401
  },
41402
41402
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -12,7 +12,7 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-fcsnw12w.js";
15
+ } from "./index-npycj2tr.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  getPluginLockFilePaths,
8
8
  package_default,
9
9
  resolveCommand
10
- } from "./index-fcsnw12w.js";
10
+ } from "./index-npycj2tr.js";
11
11
  import"./index-v4n224r1.js";
12
12
  import"./index-cpssctv1.js";
13
13
  import"./index-kk1scggc.js";
@@ -21,8 +21,16 @@
21
21
  * Bounds (AGENTS.md invariants 3 and 8): the diff subprocess uses execFile
22
22
  * with cwd/timeout/maxBuffer and ignored stdin; dispatches are guarded by a
23
23
  * per-session in-flight set plus a 60s cooldown in a bounded FIFO map.
24
+ *
25
+ * #1896 / #1905: on a transient/quota dispatch error the reviewer fails over to
26
+ * a configured `fallback_models` entry via the shared `dispatchWithModelFallback`
27
+ * helper, instead of immediately writing a `verdict: 'error'` event (a quota
28
+ * blip previously dropped the review pass with no recovery). The SDK error
29
+ * envelope is preserved in the thrown message so the classifier sees the quota
30
+ * token on the dominant SDK error shape.
24
31
  */
25
32
  import { type AutoReviewConfig } from '../config/schema.js';
33
+ import { type ModelOverride } from '../utils/model-dispatch-fallback.js';
26
34
  /** Test-only: clear module-level dispatch tracking. */
27
35
  export declare function resetAutoReviewTracking(): void;
28
36
  export type ExecutionDiffResult = {
@@ -42,7 +50,7 @@ export type ExecutionDiffResult = {
42
50
  * `maxBytes`.
43
51
  */
44
52
  declare function computeExecutionDiff(directory: string, maxBytes: number): Promise<ExecutionDiffResult>;
45
- declare function dispatchReviewer(directory: string, prompt: string, agentName: string, timeoutMs: number, parentSessionId: string): Promise<string>;
53
+ declare function dispatchReviewer(directory: string, prompt: string, agentName: string, timeoutMs: number, parentSessionId: string, model?: ModelOverride): Promise<string>;
46
54
  export interface AutoReviewRunInput {
47
55
  directory: string;
48
56
  sessionID: string;
@@ -40,14 +40,16 @@ interface WakeBudget {
40
40
  suspended: boolean;
41
41
  }
42
42
  /**
43
- * Prevent an architect from bypassing PR obligations by simply emitting text.
44
- * The text-complete hook replaces every architect-session text part while the
45
- * durable gate exists; session.idle then mechanically resumes that session.
43
+ * Prevent an architect from masquerading a premature text output as a terminal
44
+ * verdict. The text-complete hook prepends a workflow-active banner to every
45
+ * architect-session text part while the durable gate exists; the model's
46
+ * original text is preserved below the banner. session.idle then mechanically
47
+ * resumes that session.
46
48
  *
47
49
  * The resume loop is bounded (see DEFAULT_MAX_CONSECUTIVE_UNPRODUCTIVE_WAKES)
48
50
  * so a session that cannot make progress suspends instead of spinning
49
- * forever. `textComplete` keeps rewriting text after suspension so the
50
- * user-visible surface always names the recovery path.
51
+ * forever. The banner always carries suspension/interruption recovery notices
52
+ * so the user-visible surface always names the recovery path.
51
53
  */
52
54
  export declare function createPrWorkflowResponseGate(options: {
53
55
  directory: string;