opencode-swarm 7.130.0 → 7.130.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 (42) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +75 -26
  2. package/dist/cli/{config-doctor-2admdwc2.js → config-doctor-489wej17.js} +2 -2
  3. package/dist/cli/{curation-policy-s08pg90f.js → curation-policy-aaz0hap6.js} +2 -2
  4. package/dist/cli/{curator-yppkg914.js → curator-by14m5fc.js} +12 -12
  5. package/dist/cli/{curator-llm-factory-swde9kj0.js → curator-llm-factory-7rz7mvcr.js} +12 -12
  6. package/dist/cli/{guardrail-explain-2w8tezk9.js → guardrail-explain-mvct2n9f.js} +13 -13
  7. package/dist/cli/{guardrail-log-7cychbgs.js → guardrail-log-2cejc33f.js} +3 -3
  8. package/dist/cli/{hive-promoter-k055s568.js → hive-promoter-trezcyrd.js} +12 -12
  9. package/dist/cli/{index-mgz9nm4a.js → index-3rnkyb60.js} +5 -5
  10. package/dist/cli/{index-mkqqh1z9.js → index-4qrbvrz5.js} +41 -38
  11. package/dist/cli/{index-7ttstfv6.js → index-5xxgeksy.js} +9 -0
  12. package/dist/cli/{index-nbdge8b6.js → index-agte9w1e.js} +2 -2
  13. package/dist/cli/{index-v4n224r1.js → index-hjar4crm.js} +1 -1
  14. package/dist/cli/{index-x0d06qx6.js → index-j0py44fv.js} +2 -2
  15. package/dist/cli/{index-8fy8q1px.js → index-jvyn76xe.js} +3 -3
  16. package/dist/cli/{index-bz814zsm.js → index-jxha73tm.js} +1 -1
  17. package/dist/cli/{index-yxz0c97p.js → index-nr5pr54q.js} +1 -1
  18. package/dist/cli/{index-cpssctv1.js → index-p6qgjkbt.js} +1 -1
  19. package/dist/cli/{index-hbbj7ktj.js → index-s8h2cedv.js} +1 -1
  20. package/dist/cli/{index-n08cksd6.js → index-ts9wh1ba.js} +4 -4
  21. package/dist/cli/{index-x7wt1g4w.js → index-wy3q73j2.js} +2 -2
  22. package/dist/cli/{index-nhexgq4a.js → index-xa29259t.js} +1 -1
  23. package/dist/cli/{index-rhc0d3tn.js → index-xdx5b4s1.js} +14 -14
  24. package/dist/cli/{index-8etcyr9r.js → index-zft4hp35.js} +1 -1
  25. package/dist/cli/index.js +12 -12
  26. package/dist/cli/{knowledge-escalator-jjyn29ht.js → knowledge-escalator-1ypz0266.js} +3 -3
  27. package/dist/cli/{knowledge-events-f75n3916.js → knowledge-events-yvcczmja.js} +1 -1
  28. package/dist/cli/{knowledge-store-7sahm702.js → knowledge-store-h8bp9eje.js} +1 -1
  29. package/dist/cli/{knowledge-validator-rjwvafv3.js → knowledge-validator-sz9v1fdq.js} +4 -4
  30. package/dist/cli/{scan-cursor-518rhxyd.js → scan-cursor-k9zyt374.js} +2 -2
  31. package/dist/cli/{schema-2x7wsb0n.js → schema-fkpn2r1s.js} +1 -1
  32. package/dist/cli/{skill-generator-hk6mc7pc.js → skill-generator-a6a9jxfd.js} +5 -5
  33. package/dist/config/schema.d.ts +2 -0
  34. package/dist/hooks/pr-workflow-gate.d.ts +9 -0
  35. package/dist/hooks/pr-workflow-response-gate.d.ts +29 -6
  36. package/dist/index.js +45 -41
  37. package/dist/tools/index.d.ts +1 -0
  38. package/dist/tools/manifest.d.ts +1 -0
  39. package/dist/tools/pr-workflow-status.d.ts +28 -0
  40. package/dist/tools/prepare-pr-workflow-checkout.d.ts +7 -1
  41. package/dist/tools/tool-metadata.d.ts +8 -0
  42. package/package.json +1 -1
@@ -4,7 +4,7 @@ import {
4
4
  readDoctorArtifact,
5
5
  removeStraySwarmDir,
6
6
  runConfigDoctor
7
- } from "./index-cpssctv1.js";
7
+ } from "./index-p6qgjkbt.js";
8
8
  import {
9
9
  EvaluationTaskV1Schema,
10
10
  GateAuditManifestV1Schema,
@@ -94,15 +94,15 @@ import {
94
94
  retireSkill,
95
95
  selectCandidateEntries,
96
96
  syncBundledProjectSkillsIfMissingAsync
97
- } from "./index-8fy8q1px.js";
97
+ } from "./index-jvyn76xe.js";
98
98
  import {
99
99
  readRecentEscalations
100
- } from "./index-mgz9nm4a.js";
100
+ } from "./index-3rnkyb60.js";
101
101
  import {
102
102
  alreadyCuratedThisGeneration,
103
103
  claimNextScanBatch,
104
104
  resolveCohortId
105
- } from "./index-hbbj7ktj.js";
105
+ } from "./index-s8h2cedv.js";
106
106
  import {
107
107
  CURATOR_INIT_PROMPT,
108
108
  CURATOR_PHASE_PROMPT,
@@ -135,11 +135,11 @@ import {
135
135
  validateActionability,
136
136
  validateActionableFields,
137
137
  validateLesson
138
- } from "./index-x7wt1g4w.js";
138
+ } from "./index-wy3q73j2.js";
139
139
  import {
140
140
  authorizeCuration,
141
141
  buildConfigFingerprintInput
142
- } from "./index-nhexgq4a.js";
142
+ } from "./index-xa29259t.js";
143
143
  import {
144
144
  cohortConfigFingerprint
145
145
  } from "./index-rtry5xyf.js";
@@ -169,7 +169,7 @@ import {
169
169
  transactFile,
170
170
  transactKnowledge,
171
171
  wordBigrams
172
- } from "./index-n08cksd6.js";
172
+ } from "./index-ts9wh1ba.js";
173
173
  import {
174
174
  MAX_EVENT_LOG_ENTRIES,
175
175
  _internals,
@@ -179,7 +179,7 @@ import {
179
179
  recordHiveKnowledgeEvent,
180
180
  recordKnowledgeEvent,
181
181
  resolveKnowledgeEventsPath
182
- } from "./index-bz814zsm.js";
182
+ } from "./index-jxha73tm.js";
183
183
  import {
184
184
  resolveHiveDataDir,
185
185
  resolveHiveEventsPath,
@@ -201,7 +201,7 @@ import {
201
201
  init_loader,
202
202
  loadPluginConfig,
203
203
  loadPluginConfigWithMeta
204
- } from "./index-yxz0c97p.js";
204
+ } from "./index-nr5pr54q.js";
205
205
  import {
206
206
  RetrospectiveEvidenceSchema
207
207
  } from "./index-k5jrywpr.js";
@@ -220,7 +220,7 @@ import {
220
220
  init_schema,
221
221
  init_tool_metadata,
222
222
  stripKnownSwarmPrefix
223
- } from "./index-7ttstfv6.js";
223
+ } from "./index-5xxgeksy.js";
224
224
  import {
225
225
  KNOWLEDGE_SCHEMA_VERSION,
226
226
  OUTCOME_BLOCK_THRESHOLD,
@@ -652,7 +652,7 @@ async function assertCurrentCheckoutHead(directory, expectedHead) {
652
652
  throw new Error(`BLOCKED: cannot resolve the current Git HEAD in "${directory}" to verify against PR head "${normalizedExpected}". ` + `This means Git could not resolve HEAD (the working directory may not be a Git repository, ` + `HEAD may be unborn, the commit object may be missing in a shallow clone, the Git binary may not be on PATH, ` + `or the bounded Git invocation may have timed out). ` + `Verify with: git -C "${directory}" rev-parse --verify HEAD^{commit}`);
653
653
  }
654
654
  if (currentHead.toLowerCase() !== normalizedExpected.toLowerCase()) {
655
- throw new Error(`BLOCKED: current checkout HEAD "${currentHead}" does not match PR head "${normalizedExpected}" ` + `(working directory: "${directory}"). ` + `Check out the exact PR head with: git -C "${directory}" switch --detach ${normalizedExpected}`);
655
+ throw new Error(`BLOCKED: current checkout HEAD "${currentHead}" does not match PR head "${normalizedExpected}" ` + `(working directory: "${directory}"). ` + `Run these bare, standalone commands from that directory: if the commit is not present locally, ` + `\`git fetch origin <pr-head-ref>\`; then \`git switch --detach ${normalizedExpected}\`. ` + `Do not prefix the switch with \`git -C\`; the read-only shell classifier refuses \`git -C ... switch\`.`);
656
656
  }
657
657
  return normalizedExpected;
658
658
  }
@@ -736,6 +736,7 @@ var PR_REVIEW_READ_ONLY_TOOL_NAMES = new Set([
736
736
  "codesearch",
737
737
  "glob",
738
738
  "grep",
739
+ "list",
739
740
  "lsp",
740
741
  "open",
741
742
  "read",
@@ -743,6 +744,8 @@ var PR_REVIEW_READ_ONLY_TOOL_NAMES = new Set([
743
744
  "skill",
744
745
  "tree",
745
746
  "view",
747
+ "web_fetch",
748
+ "web_search",
746
749
  "webfetch",
747
750
  "websearch"
748
751
  ]);
@@ -10796,7 +10799,7 @@ function handleSave(label, directory) {
10796
10799
  let allowEmptyCommits = false;
10797
10800
  try {
10798
10801
  const { config } = loadPluginConfigWithMeta(directory);
10799
- maxCheckpoints = config.checkpoint?.auto_checkpoint_threshold ?? maxCheckpoints;
10802
+ maxCheckpoints = config.checkpoint?.max_retention ?? maxCheckpoints;
10800
10803
  allowEmptyCommits = config.checkpoint?.allow_empty_commits === true;
10801
10804
  } catch {}
10802
10805
  const log2 = readCheckpointLog(directory);
@@ -14271,7 +14274,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
14271
14274
  }
14272
14275
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
14273
14276
  try {
14274
- const skillModule = await import("./skill-generator-hk6mc7pc.js");
14277
+ const skillModule = await import("./skill-generator-a6a9jxfd.js");
14275
14278
  for (const cand of skillCandidates) {
14276
14279
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
14277
14280
  continue;
@@ -14608,7 +14611,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
14608
14611
  } catch {}
14609
14612
  }
14610
14613
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
14611
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-jjyn29ht.js");
14614
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-1ypz0266.js");
14612
14615
  for (const { id } of contradictedEntries) {
14613
14616
  try {
14614
14617
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -15407,7 +15410,7 @@ async function runCuratorPostMortem(directory, options = {}) {
15407
15410
  warnings.push("Failed to collect knowledge summary.");
15408
15411
  }
15409
15412
  try {
15410
- const { getScanStatus } = await import("./scan-cursor-518rhxyd.js");
15413
+ const { getScanStatus } = await import("./scan-cursor-k9zyt374.js");
15411
15414
  const scanStatus = await getScanStatus(directory);
15412
15415
  if (scanStatus.remaining_estimate > 0) {
15413
15416
  warnings.push(`Fair scan: reviewed ${knowledgeSummary.length} entries this sweep (generation ${scanStatus.generation}); ${scanStatus.remaining_estimate} more eligible entries will be visited in future curation sweeps.`);
@@ -15579,9 +15582,9 @@ var _internals19 = {
15579
15582
  verifyPostMortemKnowledgeActions,
15580
15583
  repairPostMortemActions,
15581
15584
  loadDefaultKnowledgeConfig: async (directory) => {
15582
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
15585
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fkpn2r1s.js");
15583
15586
  try {
15584
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nbdge8b6.js");
15587
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-agte9w1e.js");
15585
15588
  const loaded = loadPluginConfigWithMeta2(directory);
15586
15589
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
15587
15590
  } catch {
@@ -15589,11 +15592,11 @@ var _internals19 = {
15589
15592
  }
15590
15593
  },
15591
15594
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
15592
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-yppkg914.js");
15595
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-by14m5fc.js");
15593
15596
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
15594
15597
  },
15595
15598
  checkHivePromotions: async (entries, knowledgeConfig, directory) => {
15596
- const { checkHivePromotions } = await import("./hive-promoter-k055s568.js");
15599
+ const { checkHivePromotions } = await import("./hive-promoter-trezcyrd.js");
15597
15600
  return checkHivePromotions(entries, knowledgeConfig, directory);
15598
15601
  },
15599
15602
  applyProposalTriage: async (directory, triage) => {
@@ -15602,7 +15605,7 @@ var _internals19 = {
15602
15605
  activateProposal,
15603
15606
  listSkills: listSkills2,
15604
15607
  sanitizeSlug
15605
- } = await import("./skill-generator-hk6mc7pc.js");
15608
+ } = await import("./skill-generator-a6a9jxfd.js");
15606
15609
  const result = {
15607
15610
  approved: [],
15608
15611
  rejected: [],
@@ -18124,9 +18127,9 @@ function hashContent(content) {
18124
18127
  return createHash7("sha1").update(content).digest("hex");
18125
18128
  }
18126
18129
  async function loadConfigForPolicyCurator(directory) {
18127
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
18130
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fkpn2r1s.js");
18128
18131
  try {
18129
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nbdge8b6.js");
18132
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-agte9w1e.js");
18130
18133
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
18131
18134
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
18132
18135
  } catch {
@@ -21328,7 +21331,7 @@ async function runFinalizeStage(ctx) {
21328
21331
  }
21329
21332
  }
21330
21333
  try {
21331
- const { CuratorConfigSchema: CCS } = await import("./schema-2x7wsb0n.js");
21334
+ const { CuratorConfigSchema: CCS } = await import("./schema-fkpn2r1s.js");
21332
21335
  const { config: pmLoadedConfig } = _internals28.loadPluginConfigWithMeta(ctx.directory);
21333
21336
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
21334
21337
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -23497,9 +23500,9 @@ var _internals32 = {
23497
23500
  readSwarmFileAsync,
23498
23501
  loadCuratorDeps: async () => {
23499
23502
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate: createCuratorLLMDelegate2 }] = await Promise.all([
23500
- import("./schema-2x7wsb0n.js"),
23501
- import("./curator-yppkg914.js"),
23502
- import("./curator-llm-factory-swde9kj0.js")
23503
+ import("./schema-fkpn2r1s.js"),
23504
+ import("./curator-by14m5fc.js"),
23505
+ import("./curator-llm-factory-7rz7mvcr.js")
23503
23506
  ]);
23504
23507
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate: createCuratorLLMDelegate2 };
23505
23508
  }
@@ -23998,7 +24001,7 @@ import { fileURLToPath } from "url";
23998
24001
  // package.json
23999
24002
  var package_default = {
24000
24003
  name: "opencode-swarm",
24001
- version: "7.130.0",
24004
+ version: "7.130.1",
24002
24005
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
24003
24006
  main: "dist/index.js",
24004
24007
  types: "dist/index.d.ts",
@@ -24520,7 +24523,7 @@ async function computeCurationDiagnostics(directory, entries) {
24520
24523
  let scanCompleted = false;
24521
24524
  let scanRemaining = 0;
24522
24525
  try {
24523
- const { getScanStatus } = await import("./scan-cursor-518rhxyd.js");
24526
+ const { getScanStatus } = await import("./scan-cursor-k9zyt374.js");
24524
24527
  const status = await getScanStatus(directory);
24525
24528
  scanGeneration = status.generation;
24526
24529
  scanCompleted = status.completed;
@@ -24530,17 +24533,17 @@ async function computeCurationDiagnostics(directory, entries) {
24530
24533
  try {
24531
24534
  const { isLinked: isLinked2 } = await import("./knowledge-link-4yd2z8ev.js");
24532
24535
  if (isLinked2(directory)) {
24533
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
24536
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fkpn2r1s.js");
24534
24537
  let config;
24535
24538
  try {
24536
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nbdge8b6.js");
24539
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-agte9w1e.js");
24537
24540
  const loaded = loadPluginConfigWithMeta2(directory);
24538
24541
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
24539
24542
  } catch {
24540
24543
  config = KnowledgeConfigSchema2.parse({});
24541
24544
  }
24542
24545
  const { cohortConfigFingerprint: cohortConfigFingerprint2 } = await import("./config-fingerprint-v22xh5a2.js");
24543
- const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-s08pg90f.js");
24546
+ const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-aaz0hap6.js");
24544
24547
  const currentFp = cohortConfigFingerprint2(buildConfigFingerprintInput2(config));
24545
24548
  const cohortFp = await readCohortConfigFingerprint(directory);
24546
24549
  configMatch = cohortFp === null ? null : currentFp === cohortFp;
@@ -25738,7 +25741,7 @@ async function handleDoctorCommand(directory, args) {
25738
25741
  const result = runConfigDoctor(config, directory);
25739
25742
  let output;
25740
25743
  if (enableAutoFix && result.hasAutoFixableIssues) {
25741
- const { runConfigDoctorWithFixes } = await import("./config-doctor-2admdwc2.js");
25744
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-489wej17.js");
25742
25745
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
25743
25746
  applyLossy: true
25744
25747
  });
@@ -44390,7 +44393,7 @@ function buildDetailedHelp(commandName, entry) {
44390
44393
  async function handleHelpCommand(ctx) {
44391
44394
  const targetCommand = ctx.args.join(" ");
44392
44395
  if (!targetCommand) {
44393
- const { buildHelpText } = await import("./index-rhc0d3tn.js");
44396
+ const { buildHelpText } = await import("./index-xdx5b4s1.js");
44394
44397
  return buildHelpText();
44395
44398
  }
44396
44399
  const tokens = targetCommand.split(/\s+/);
@@ -44399,7 +44402,7 @@ async function handleHelpCommand(ctx) {
44399
44402
  return _internals9.buildDetailedHelp(resolved.key, resolved.entry);
44400
44403
  }
44401
44404
  const similar = _internals9.findSimilarCommands(targetCommand);
44402
- const { buildHelpText: fullHelp } = await import("./index-rhc0d3tn.js");
44405
+ const { buildHelpText: fullHelp } = await import("./index-xdx5b4s1.js");
44403
44406
  if (similar.length > 0) {
44404
44407
  return `Command '/swarm ${targetCommand}' not found.
44405
44408
 
@@ -44538,7 +44541,7 @@ var COMMAND_REGISTRY = {
44538
44541
  },
44539
44542
  "guardrail explain": {
44540
44543
  handler: async (ctx) => {
44541
- const { handleGuardrailExplain } = await import("./guardrail-explain-2w8tezk9.js");
44544
+ const { handleGuardrailExplain } = await import("./guardrail-explain-mvct2n9f.js");
44542
44545
  return handleGuardrailExplain(ctx.directory, ctx.args);
44543
44546
  },
44544
44547
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -44548,7 +44551,7 @@ var COMMAND_REGISTRY = {
44548
44551
  },
44549
44552
  "guardrail-explain": {
44550
44553
  handler: async (ctx) => {
44551
- const { handleGuardrailExplain } = await import("./guardrail-explain-2w8tezk9.js");
44554
+ const { handleGuardrailExplain } = await import("./guardrail-explain-mvct2n9f.js");
44552
44555
  return handleGuardrailExplain(ctx.directory, ctx.args);
44553
44556
  },
44554
44557
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -44558,7 +44561,7 @@ var COMMAND_REGISTRY = {
44558
44561
  },
44559
44562
  "guardrail-log": {
44560
44563
  handler: async (ctx) => {
44561
- const { handleGuardrailLog } = await import("./guardrail-log-7cychbgs.js");
44564
+ const { handleGuardrailLog } = await import("./guardrail-log-2cejc33f.js");
44562
44565
  return handleGuardrailLog(ctx.directory, ctx.args);
44563
44566
  },
44564
44567
  description: "Read the guardrail decision log (use --blocks-only for blocks)",
@@ -46342,7 +46345,7 @@ HARD CONSTRAINTS (apply regardless of skill load success):
46342
46345
  - Test execution, explorer lanes, reviewer dispatch, and critic challenge are all permitted within this mode
46343
46346
  - Quality is the only metric \u2014 there is no speed, efficiency, or time exception; time, tokens, and agent dispatches are irrelevant to correctness
46344
46347
  - FOLLOW THE SKILL EXACTLY: execute every phase of the loaded SKILL.md in order with no shortcuts, no phase-skipping, and no premature synthesis. If a required coverage phase cannot complete, apply the skill's coverage gate (retry or verified equivalent alternative). If the gap still cannot be closed, stop and surface the lane failure to the user as BLOCKED; do not produce a degraded review, partial verdict, or final synthesis.
46345
- - CHECK OUT THE EXACT PR HEAD LOCALLY before dispatching explorer lanes: resolve the authoritative full PR head SHA, verify the working tree is clean (git status --porcelain), and if tracked changes exist call \`prepare_pr_workflow_checkout\` with every explicit dirty tracked path before checkout. It returns an auditable stash OID and recovery command; it never stashes untracked files, which must be moved or removed manually. Do NOT run \`git stash\` through shell. Then use standalone commands: fetch the PR head, verify \`git cat-file -e <full_pr_head_sha>^{commit}\`, run \`git switch --detach <full_pr_head_sha>\`, confirm HEAD equals that SHA, and bind it through the PR-review controller. Do not use \`--track FETCH_HEAD\`. Explorers read the working-tree filesystem (Read/Glob/Grep), so without this checkout they read the base branch and produce invalid candidates. Always pass the base..head commit range in explorer delegations.
46348
+ - CHECK OUT THE EXACT PR HEAD LOCALLY before dispatching explorer lanes: resolve the authoritative full PR head SHA, verify the working tree is clean (git status --porcelain), and if it is dirty call \`prepare_pr_workflow_checkout\` before checkout \u2014 either with no \`paths\` to auto-discover and preserve every dirty and untracked change in one auditable stash, or with an explicit exact dirty tracked path set. It returns the stash OID and recovery command; an already-clean tree is a no-op. Do NOT run \`git stash\` through shell. Then use standalone commands: fetch the PR head, verify \`git cat-file -e <full_pr_head_sha>^{commit}\`, run \`git switch --detach <full_pr_head_sha>\`, confirm HEAD equals that SHA, and bind it through the PR-review controller. Do not use \`--track FETCH_HEAD\`. Explorers read the working-tree filesystem (Read/Glob/Grep), so without this checkout they read the base branch and produce invalid candidates. Always pass the base..head commit range in explorer delegations.
46346
46349
  - RUN ALL BASE LANES: the default PR_REVIEW path always launches exactly six repository-agnostic base check-type lanes from the skill. Use \`mode: "swarm-pr-review:base"\` and the exact six \`workflow_lane\` identifiers. The runtime rejects partial, duplicate, or mislabelled waves. Do not collapse, omit, or scale down the base lanes for a small, docs-only, or CI-only PR.
46347
46350
  - RETRY STRUCTURALLY: retry only failed base obligations in later \`swarm-pr-review:base\` async batches with the same exact \`pr_head_sha\`. Blocking \`dispatch_lanes\` and direct Task explorer/reviewer/critic dispatch are not provenance-equivalent and are rejected.
46348
46351
  - USE ASYNC DISPATCH WITHOUT IDLING: launch the base lanes with one \`dispatch_lanes_async\` call when available, record the \`batch_id\`, then keep doing non-dependent architect work while they run. Poll with \`collect_lane_results\` without \`wait\` (or \`wait: false\`) to process settled lanes and continue independent work between polls; use \`wait: true\` only as the final join when no independent work remains.
@@ -529,6 +529,14 @@ var init_tool_metadata = __esm(() => {
529
529
  capability: "observe"
530
530
  }
531
531
  },
532
+ pr_workflow_status: {
533
+ description: "Read-only architect observation of local git state (HEAD, branch, clean/dirty with a bounded changed-file list, remotes) plus a session-pinned PR workflow gate summary. Use to observe state under the fail-closed PR_REVIEW/PR_FEEDBACK gate. Never executes PR-controlled scripts and never reads another session gate.",
534
+ agents: ["architect"],
535
+ prWorkflow: {
536
+ modes: ["PR_REVIEW", "PR_FEEDBACK"],
537
+ capability: "observe"
538
+ }
539
+ },
532
540
  batch_symbols: {
533
541
  description: "Batched symbol extraction across multiple files. Returns per-file symbol summaries with isolated error handling.",
534
542
  agents: [
@@ -1714,6 +1722,7 @@ var init_schema = __esm(() => {
1714
1722
  CheckpointConfigSchema = exports_external.preprocess(rejectCheckpointPrototypePollution, exports_external.object({
1715
1723
  enabled: exports_external.boolean().default(true),
1716
1724
  auto_checkpoint_threshold: exports_external.number().int().min(1).max(20).default(3),
1725
+ max_retention: exports_external.number().int().min(1).max(100).default(20),
1717
1726
  allow_empty_commits: exports_external.boolean().default(false)
1718
1727
  }).strict());
1719
1728
  ApplyPatchConfigSchema = exports_external.object({
@@ -7,7 +7,7 @@ import {
7
7
  loadPluginConfigWithMeta,
8
8
  loadPluginConfigWithMetaAsync,
9
9
  resolveWorktreeIsolationConfig
10
- } from "./index-yxz0c97p.js";
10
+ } from "./index-nr5pr54q.js";
11
11
  import {
12
12
  ApprovalEvidenceSchema,
13
13
  BaseEvidenceSchema,
@@ -59,7 +59,7 @@ import {
59
59
  WorktreeIsolationConfigSchema,
60
60
  isQAAgent,
61
61
  isSubagent
62
- } from "./index-7ttstfv6.js";
62
+ } from "./index-5xxgeksy.js";
63
63
  import"./index-bk5tah7q.js";
64
64
  import {
65
65
  MigrationStatusSchema,
@@ -3,7 +3,7 @@ import {
3
3
  init_constants,
4
4
  init_schema,
5
5
  stripKnownSwarmPrefix
6
- } from "./index-7ttstfv6.js";
6
+ } from "./index-5xxgeksy.js";
7
7
  import {
8
8
  init_logger,
9
9
  warn
@@ -12,14 +12,14 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-mkqqh1z9.js";
15
+ } from "./index-4qrbvrz5.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
19
19
  isInDeclaredScope,
20
20
  redactPath,
21
21
  redactShellCommand
22
- } from "./index-v4n224r1.js";
22
+ } from "./index-hjar4crm.js";
23
23
 
24
24
  // src/services/guardrail-explain-service.ts
25
25
  import path from "path";
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  ALLOWED_SKILL_PATH_PREFIXES,
4
4
  validateSkillPath
5
- } from "./index-x7wt1g4w.js";
5
+ } from "./index-wy3q73j2.js";
6
6
  import {
7
7
  computeOutcomeSignal,
8
8
  readKnowledge,
9
9
  resolveHiveKnowledgePath,
10
10
  resolveSwarmKnowledgePath,
11
11
  transactKnowledge
12
- } from "./index-n08cksd6.js";
12
+ } from "./index-ts9wh1ba.js";
13
13
  import {
14
14
  effectiveRetrievalOutcomes,
15
15
  readKnowledgeCounterRollups
16
- } from "./index-bz814zsm.js";
16
+ } from "./index-jxha73tm.js";
17
17
  import {
18
18
  init_knowledge_types,
19
19
  isActiveStatus
@@ -608,7 +608,7 @@ async function applyKnowledgeVerdictFeedback(directory, options) {
608
608
  deltas.push({ id, delta });
609
609
  }
610
610
  if (deltas.length > 0) {
611
- const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-7sahm702.js");
611
+ const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-h8bp9eje.js");
612
612
  await bumpKnowledgeConfidenceBatch(directory, deltas, options?.floorOptions);
613
613
  }
614
614
  return {
@@ -8,7 +8,7 @@ import {
8
8
  init_constants,
9
9
  init_schema,
10
10
  resolveExternalSkillsConfig
11
- } from "./index-7ttstfv6.js";
11
+ } from "./index-5xxgeksy.js";
12
12
  import {
13
13
  advisoryWarn,
14
14
  init_warning_buffer
@@ -8,7 +8,7 @@ import {
8
8
  init_constants,
9
9
  init_schema,
10
10
  stripKnownSwarmPrefix
11
- } from "./index-7ttstfv6.js";
11
+ } from "./index-5xxgeksy.js";
12
12
  import {
13
13
  log
14
14
  } from "./index-zgwm4ryv.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readKnowledge,
4
4
  transactKnowledge
5
- } from "./index-n08cksd6.js";
5
+ } from "./index-ts9wh1ba.js";
6
6
  import {
7
7
  resolveKnowledgeStoreDir
8
8
  } from "./index-q27bajqb.js";
@@ -650,7 +650,7 @@ async function applyConfidenceFloorAction(directory, touched, options) {
650
650
  const recovered = touched.filter((e) => e.confidence > CONFIDENCE_FLOOR + FLOOR_EPSILON && e.confidence_floor_demoted);
651
651
  if (atFloor.length === 0 && recovered.length === 0)
652
652
  return;
653
- const { readKnowledgeCounterRollups, effectiveRetrievalOutcomes } = await import("./knowledge-events-f75n3916.js");
653
+ const { readKnowledgeCounterRollups, effectiveRetrievalOutcomes } = await import("./knowledge-events-yvcczmja.js");
654
654
  const rollups = await readKnowledgeCounterRollups(directory);
655
655
  const flagIds = new Set;
656
656
  for (const e of atFloor) {
@@ -717,11 +717,11 @@ async function applyConfidenceFloorAction(directory, touched, options) {
717
717
  });
718
718
  }
719
719
  if (action === "quarantine" && toQuarantine.length > 0) {
720
- const { quarantineEntry } = await import("./knowledge-validator-rjwvafv3.js");
721
- const { KnowledgeConfigSchema } = await import("./schema-2x7wsb0n.js");
720
+ const { quarantineEntry } = await import("./knowledge-validator-sz9v1fdq.js");
721
+ const { KnowledgeConfigSchema } = await import("./schema-fkpn2r1s.js");
722
722
  let config;
723
723
  try {
724
- const { loadPluginConfigWithMeta } = await import("./index-nbdge8b6.js");
724
+ const { loadPluginConfigWithMeta } = await import("./index-agte9w1e.js");
725
725
  const { config: loadedConfig } = loadPluginConfigWithMeta(directory);
726
726
  config = KnowledgeConfigSchema.parse(loadedConfig.knowledge ?? {});
727
727
  } catch {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  authorizeCuration
4
- } from "./index-nhexgq4a.js";
4
+ } from "./index-xa29259t.js";
5
5
  import {
6
6
  findNearDuplicate,
7
7
  inferTags,
@@ -9,7 +9,7 @@ import {
9
9
  resolveSwarmKnowledgePath,
10
10
  resolveSwarmRejectedPath,
11
11
  transactKnowledge
12
- } from "./index-n08cksd6.js";
12
+ } from "./index-ts9wh1ba.js";
13
13
  import {
14
14
  resolveKnowledgeStoreDir
15
15
  } from "./index-q27bajqb.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-rtry5xyf.js";
5
5
  import {
6
6
  readKnowledgeEvents
7
- } from "./index-bz814zsm.js";
7
+ } from "./index-jxha73tm.js";
8
8
  import {
9
9
  isLinked,
10
10
  readLinkPointer,
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-x0d06qx6.js";
4
+ } from "./index-j0py44fv.js";
5
5
  import {
6
6
  handleGuardrailLog
7
- } from "./index-8etcyr9r.js";
7
+ } from "./index-zft4hp35.js";
8
8
  import {
9
9
  COMMAND_REGISTRY,
10
10
  SWARM_COMMAND_TOOL_ALLOWLIST,
@@ -83,28 +83,28 @@ import {
83
83
  handleWriteRetroCommand,
84
84
  normalizeSwarmCommandInput,
85
85
  resolveCommand
86
- } from "./index-mkqqh1z9.js";
87
- import"./index-v4n224r1.js";
88
- import"./index-cpssctv1.js";
86
+ } from "./index-4qrbvrz5.js";
87
+ import"./index-hjar4crm.js";
88
+ import"./index-p6qgjkbt.js";
89
89
  import"./index-kzvwb2se.js";
90
90
  import"./index-4905hd2m.js";
91
91
  import"./index-134d35c1.js";
92
92
  import"./index-9f71ye47.js";
93
- import"./index-8fy8q1px.js";
94
- import"./index-mgz9nm4a.js";
95
- import"./index-hbbj7ktj.js";
93
+ import"./index-jvyn76xe.js";
94
+ import"./index-3rnkyb60.js";
95
+ import"./index-s8h2cedv.js";
96
96
  import"./index-vxv732ex.js";
97
97
  import"./index-c8s9a3zh.js";
98
98
  import"./index-9ss2m4rs.js";
99
99
  import"./index-g4mnf3p5.js";
100
- import"./index-x7wt1g4w.js";
101
- import"./index-nhexgq4a.js";
100
+ import"./index-wy3q73j2.js";
101
+ import"./index-xa29259t.js";
102
102
  import"./index-rtry5xyf.js";
103
- import"./index-n08cksd6.js";
104
- import"./index-bz814zsm.js";
103
+ import"./index-ts9wh1ba.js";
104
+ import"./index-jxha73tm.js";
105
105
  import"./index-ae75rja9.js";
106
106
  import"./index-q27bajqb.js";
107
- import"./index-yxz0c97p.js";
107
+ import"./index-nr5pr54q.js";
108
108
  import"./index-k5jrywpr.js";
109
109
  import"./index-n832052r.js";
110
110
  import {
@@ -113,7 +113,7 @@ import {
113
113
  init_constants,
114
114
  init_schema,
115
115
  stripKnownSwarmPrefix
116
- } from "./index-7ttstfv6.js";
116
+ } from "./index-5xxgeksy.js";
117
117
  import"./index-bk5tah7q.js";
118
118
  import"./index-8fwhhayc.js";
119
119
  import"./index-q1exe2b3.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  redactPath,
4
4
  redactShellCommand
5
- } from "./index-v4n224r1.js";
5
+ } from "./index-hjar4crm.js";
6
6
 
7
7
  // src/services/guardrail-log-service.ts
8
8
  import * as fs from "fs/promises";
package/dist/cli/index.js CHANGED
@@ -7,34 +7,34 @@ import {
7
7
  getPluginLockFilePaths,
8
8
  package_default,
9
9
  resolveCommand
10
- } from "./index-mkqqh1z9.js";
11
- import"./index-v4n224r1.js";
12
- import"./index-cpssctv1.js";
10
+ } from "./index-4qrbvrz5.js";
11
+ import"./index-hjar4crm.js";
12
+ import"./index-p6qgjkbt.js";
13
13
  import"./index-kzvwb2se.js";
14
14
  import"./index-4905hd2m.js";
15
15
  import"./index-134d35c1.js";
16
16
  import"./index-9f71ye47.js";
17
- import"./index-8fy8q1px.js";
18
- import"./index-mgz9nm4a.js";
19
- import"./index-hbbj7ktj.js";
17
+ import"./index-jvyn76xe.js";
18
+ import"./index-3rnkyb60.js";
19
+ import"./index-s8h2cedv.js";
20
20
  import"./index-vxv732ex.js";
21
21
  import"./index-c8s9a3zh.js";
22
22
  import"./index-9ss2m4rs.js";
23
23
  import"./index-g4mnf3p5.js";
24
- import"./index-x7wt1g4w.js";
25
- import"./index-nhexgq4a.js";
24
+ import"./index-wy3q73j2.js";
25
+ import"./index-xa29259t.js";
26
26
  import"./index-rtry5xyf.js";
27
- import"./index-n08cksd6.js";
28
- import"./index-bz814zsm.js";
27
+ import"./index-ts9wh1ba.js";
28
+ import"./index-jxha73tm.js";
29
29
  import"./index-ae75rja9.js";
30
30
  import"./index-q27bajqb.js";
31
- import"./index-yxz0c97p.js";
31
+ import"./index-nr5pr54q.js";
32
32
  import"./index-k5jrywpr.js";
33
33
  import"./index-n832052r.js";
34
34
  import {
35
35
  DEFAULT_AGENT_CONFIGS,
36
36
  init_constants
37
- } from "./index-7ttstfv6.js";
37
+ } from "./index-5xxgeksy.js";
38
38
  import"./index-bk5tah7q.js";
39
39
  import"./index-8fwhhayc.js";
40
40
  import"./index-q1exe2b3.js";
@@ -8,9 +8,9 @@ import {
8
8
  maybeEscalateOnViolation,
9
9
  maybeQuarantineOnContradiction,
10
10
  readRecentEscalations
11
- } from "./index-mgz9nm4a.js";
12
- import"./index-n08cksd6.js";
13
- import"./index-bz814zsm.js";
11
+ } from "./index-3rnkyb60.js";
12
+ import"./index-ts9wh1ba.js";
13
+ import"./index-jxha73tm.js";
14
14
  import"./index-ae75rja9.js";
15
15
  import"./index-q27bajqb.js";
16
16
  import"./index-bk5tah7q.js";
@@ -26,7 +26,7 @@ import {
26
26
  resolveKnowledgeCounterBaselinePath,
27
27
  resolveKnowledgeEventsPath,
28
28
  resolveLegacyApplicationLogPath
29
- } from "./index-bz814zsm.js";
29
+ } from "./index-jxha73tm.js";
30
30
  import"./index-ae75rja9.js";
31
31
  import"./index-q27bajqb.js";
32
32
  import"./index-zgwm4ryv.js";
@@ -40,7 +40,7 @@ import {
40
40
  transactKnowledge,
41
41
  transactKnowledgeWithCas,
42
42
  wordBigrams
43
- } from "./index-n08cksd6.js";
43
+ } from "./index-ts9wh1ba.js";
44
44
  import {
45
45
  resolveHiveDataDir
46
46
  } from "./index-ae75rja9.js";