opencode-swarm 7.126.2 → 7.126.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.
Files changed (49) hide show
  1. package/.opencode/skills/engineering-conventions/SKILL.md +1 -1
  2. package/.opencode/skills/issue-tracer/scripts/trace-init.sh +20 -0
  3. package/.opencode/skills/swarm-pr-feedback/SKILL.md +14 -3
  4. package/.opencode/skills/swarm-pr-review/SKILL.md +28 -7
  5. package/dist/background/pr-event-delivery.d.ts +1 -1
  6. package/dist/cli/{config-doctor-mfx27331.js → config-doctor-2admdwc2.js} +2 -2
  7. package/dist/cli/{curation-policy-n944aq62.js → curation-policy-s2wydhda.js} +2 -2
  8. package/dist/cli/{curator-qfh9xty4.js → curator-4tp297kp.js} +12 -12
  9. package/dist/cli/{curator-llm-factory-0rf29gfq.js → curator-llm-factory-caf8jqyb.js} +12 -12
  10. package/dist/cli/{guardrail-explain-jsrjqps1.js → guardrail-explain-yjzbs0fq.js} +13 -13
  11. package/dist/cli/{guardrail-log-61gya05m.js → guardrail-log-7cychbgs.js} +3 -3
  12. package/dist/cli/{hive-promoter-ktt17fyf.js → hive-promoter-er83aqka.js} +12 -12
  13. package/dist/cli/{index-nqp13m5a.js → index-360anpk0.js} +1 -1
  14. package/dist/cli/{index-5nq8dp63.js → index-46xgqgd5.js} +14 -14
  15. package/dist/cli/{index-gwss5btk.js → index-4scxzpbz.js} +1 -1
  16. package/dist/cli/{index-c48dvb6j.js → index-6mfcg9ws.js} +2 -2
  17. package/dist/cli/{index-vcqwhe9d.js → index-7ttstfv6.js} +25 -3
  18. package/dist/cli/{index-bf76q8q7.js → index-8etcyr9r.js} +1 -1
  19. package/dist/cli/{index-3xd9a2g7.js → index-cpssctv1.js} +1 -1
  20. package/dist/cli/{index-z8ftpav0.js → index-cxtnbjwn.js} +2 -2
  21. package/dist/cli/{index-pb8ag9vg.js → index-mgdcrhkg.js} +4 -4
  22. package/dist/cli/{index-pf3xae4s.js → index-r3f1z043.js} +1 -1
  23. package/dist/cli/{index-88dt7c9z.js → index-swgsq1ds.js} +2 -2
  24. package/dist/cli/{index-gf9cxvp0.js → index-v3gw3sc5.js} +1 -1
  25. package/dist/cli/{index-gxw20m1d.js → index-v4n224r1.js} +1 -1
  26. package/dist/cli/{index-f97dm6tz.js → index-vbk29hmf.js} +5 -5
  27. package/dist/cli/{index-7bxw3v5w.js → index-ypy3dhbg.js} +3 -3
  28. package/dist/cli/{index-d88y17ht.js → index-yvgmsepb.js} +155 -130
  29. package/dist/cli/index.js +12 -12
  30. package/dist/cli/{knowledge-escalator-nna0zec3.js → knowledge-escalator-9sd533p6.js} +3 -3
  31. package/dist/cli/{knowledge-events-7k82xk36.js → knowledge-events-v0cp1a8d.js} +1 -1
  32. package/dist/cli/{knowledge-store-efvtng9t.js → knowledge-store-mv7qjf4s.js} +1 -1
  33. package/dist/cli/{knowledge-validator-jh93eagj.js → knowledge-validator-g05g6qrt.js} +4 -4
  34. package/dist/cli/{scan-cursor-cydz8d9q.js → scan-cursor-jp2zz6y1.js} +2 -2
  35. package/dist/cli/{schema-fa033pqw.js → schema-2x7wsb0n.js} +1 -1
  36. package/dist/cli/{skill-generator-8v463kj7.js → skill-generator-497vvped.js} +5 -5
  37. package/dist/config/bundled-skills.d.ts +3 -2
  38. package/dist/config/schema.d.ts +4 -4
  39. package/dist/hooks/init-orphan-recovery.d.ts +1 -1
  40. package/dist/hooks/pr-workflow-auto-wake.d.ts +31 -0
  41. package/dist/hooks/pr-workflow-gate.d.ts +1 -1
  42. package/dist/hooks/pr-workflow-response-gate.d.ts +4 -0
  43. package/dist/index.d.ts +14 -0
  44. package/dist/index.js +289 -289
  45. package/dist/tools/repo-graph/builder.d.ts +5 -4
  46. package/dist/tools/test-runner.d.ts +12 -2
  47. package/dist/utils/path-security.d.ts +2 -0
  48. package/dist/utils/timeout.d.ts +8 -4
  49. package/package.json +1 -1
@@ -4,7 +4,7 @@ import {
4
4
  readDoctorArtifact,
5
5
  removeStraySwarmDir,
6
6
  runConfigDoctor
7
- } from "./index-3xd9a2g7.js";
7
+ } from "./index-cpssctv1.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-7bxw3v5w.js";
97
+ } from "./index-ypy3dhbg.js";
98
98
  import {
99
99
  readRecentEscalations
100
- } from "./index-f97dm6tz.js";
100
+ } from "./index-vbk29hmf.js";
101
101
  import {
102
102
  alreadyCuratedThisGeneration,
103
103
  claimNextScanBatch,
104
104
  resolveCohortId
105
- } from "./index-pf3xae4s.js";
105
+ } from "./index-r3f1z043.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-88dt7c9z.js";
138
+ } from "./index-swgsq1ds.js";
139
139
  import {
140
140
  authorizeCuration,
141
141
  buildConfigFingerprintInput
142
- } from "./index-gwss5btk.js";
142
+ } from "./index-4scxzpbz.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-pb8ag9vg.js";
172
+ } from "./index-mgdcrhkg.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-nqp13m5a.js";
182
+ } from "./index-360anpk0.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-gf9cxvp0.js";
204
+ } from "./index-v3gw3sc5.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-vcqwhe9d.js";
223
+ } from "./index-7ttstfv6.js";
224
224
  import {
225
225
  KNOWLEDGE_SCHEMA_VERSION,
226
226
  OUTCOME_BLOCK_THRESHOLD,
@@ -940,8 +940,11 @@ async function bindPrWorkflowHead(directory, sessionID, prHeadSha) {
940
940
  const state = await requireAnyActiveState(directory, sessionID);
941
941
  const normalizedHead = normalizePrHeadSha(prHeadSha);
942
942
  assertCurrentCheckoutHead(directory, normalizedHead);
943
- if (state.mode === "PR_REVIEW")
944
- assertPrReviewCleanCheckout(directory);
943
+ if (!state.prHeadSha)
944
+ assertPrReviewCleanCheckout(directory, state.mode);
945
+ if (!state.prHeadSha && state.mode === "PR_FEEDBACK") {
946
+ assertPrFeedbackTrackingCheckout(directory, normalizedHead);
947
+ }
945
948
  if (state.prHeadSha && state.prHeadSha !== normalizedHead) {
946
949
  throw new Error(`BLOCKED: active ${state.mode} workflow is bound to PR head "${state.prHeadSha}"; received "${normalizedHead}"`);
947
950
  }
@@ -966,9 +969,19 @@ function assertCurrentCheckoutHead(directory, expectedHead) {
966
969
  }
967
970
  return normalizedExpected;
968
971
  }
969
- function assertPrReviewCleanCheckout(directory) {
972
+ function assertPrReviewCleanCheckout(directory, mode = "PR_REVIEW") {
970
973
  if (_test_exports.resolveIsWorkingTreeClean(directory) !== true) {
971
- throw new Error("BLOCKED: PR_REVIEW requires a clean index and working tree at the exact PR head");
974
+ throw new Error(`BLOCKED: ${mode} requires a clean index and working tree at the exact PR head`);
975
+ }
976
+ }
977
+ function assertPrFeedbackTrackingCheckout(directory, prHeadSha) {
978
+ const upstream = _test_exports.resolveCurrentUpstreamPushTarget(directory);
979
+ if (!upstream) {
980
+ throw new Error("BLOCKED: PR_FEEDBACK requires a current local branch bound to an exact remote name, remote branch ref, and remote-tracking ref before the first head bind; detached or non-tracking checkouts are not allowed");
981
+ }
982
+ const matchingRemoteRefs = _test_exports.resolveRemoteRefsContainingHead(directory, prHeadSha);
983
+ if (!matchingRemoteRefs?.includes(upstream.remoteTrackingRef)) {
984
+ throw new Error(`BLOCKED: PR_FEEDBACK upstream "${upstream.remoteTrackingRef}" must point to the exact intake PR head "${prHeadSha}" before the first head bind`);
972
985
  }
973
986
  }
974
987
  var _test_exports = {
@@ -10949,7 +10962,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
10949
10962
  }
10950
10963
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
10951
10964
  try {
10952
- const skillModule = await import("./skill-generator-8v463kj7.js");
10965
+ const skillModule = await import("./skill-generator-497vvped.js");
10953
10966
  for (const cand of skillCandidates) {
10954
10967
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
10955
10968
  continue;
@@ -11286,7 +11299,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
11286
11299
  } catch {}
11287
11300
  }
11288
11301
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
11289
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-nna0zec3.js");
11302
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-9sd533p6.js");
11290
11303
  for (const { id } of contradictedEntries) {
11291
11304
  try {
11292
11305
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -12085,7 +12098,7 @@ async function runCuratorPostMortem(directory, options = {}) {
12085
12098
  warnings.push("Failed to collect knowledge summary.");
12086
12099
  }
12087
12100
  try {
12088
- const { getScanStatus } = await import("./scan-cursor-cydz8d9q.js");
12101
+ const { getScanStatus } = await import("./scan-cursor-jp2zz6y1.js");
12089
12102
  const scanStatus = await getScanStatus(directory);
12090
12103
  if (scanStatus.remaining_estimate > 0) {
12091
12104
  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.`);
@@ -12257,9 +12270,9 @@ var _internals15 = {
12257
12270
  verifyPostMortemKnowledgeActions,
12258
12271
  repairPostMortemActions,
12259
12272
  loadDefaultKnowledgeConfig: async (directory) => {
12260
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fa033pqw.js");
12273
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
12261
12274
  try {
12262
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-c48dvb6j.js");
12275
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-6mfcg9ws.js");
12263
12276
  const loaded = loadPluginConfigWithMeta2(directory);
12264
12277
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
12265
12278
  } catch {
@@ -12267,11 +12280,11 @@ var _internals15 = {
12267
12280
  }
12268
12281
  },
12269
12282
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
12270
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-qfh9xty4.js");
12283
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-4tp297kp.js");
12271
12284
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
12272
12285
  },
12273
12286
  checkHivePromotions: async (entries, knowledgeConfig, directory) => {
12274
- const { checkHivePromotions } = await import("./hive-promoter-ktt17fyf.js");
12287
+ const { checkHivePromotions } = await import("./hive-promoter-er83aqka.js");
12275
12288
  return checkHivePromotions(entries, knowledgeConfig, directory);
12276
12289
  },
12277
12290
  applyProposalTriage: async (directory, triage) => {
@@ -12280,7 +12293,7 @@ var _internals15 = {
12280
12293
  activateProposal,
12281
12294
  listSkills: listSkills2,
12282
12295
  sanitizeSlug
12283
- } = await import("./skill-generator-8v463kj7.js");
12296
+ } = await import("./skill-generator-497vvped.js");
12284
12297
  const result = {
12285
12298
  approved: [],
12286
12299
  rejected: [],
@@ -14805,9 +14818,9 @@ function hashContent(content) {
14805
14818
  return createHash7("sha1").update(content).digest("hex");
14806
14819
  }
14807
14820
  async function loadConfigForPolicyCurator(directory) {
14808
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fa033pqw.js");
14821
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
14809
14822
  try {
14810
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-c48dvb6j.js");
14823
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-6mfcg9ws.js");
14811
14824
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
14812
14825
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
14813
14826
  } catch {
@@ -17968,7 +17981,7 @@ async function runFinalizeStage(ctx) {
17968
17981
  }
17969
17982
  }
17970
17983
  try {
17971
- const { CuratorConfigSchema: CCS } = await import("./schema-fa033pqw.js");
17984
+ const { CuratorConfigSchema: CCS } = await import("./schema-2x7wsb0n.js");
17972
17985
  const { config: pmLoadedConfig } = _internals24.loadPluginConfigWithMeta(ctx.directory);
17973
17986
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
17974
17987
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -20137,9 +20150,9 @@ var _internals28 = {
20137
20150
  readSwarmFileAsync,
20138
20151
  loadCuratorDeps: async () => {
20139
20152
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate: createCuratorLLMDelegate2 }] = await Promise.all([
20140
- import("./schema-fa033pqw.js"),
20141
- import("./curator-qfh9xty4.js"),
20142
- import("./curator-llm-factory-0rf29gfq.js")
20153
+ import("./schema-2x7wsb0n.js"),
20154
+ import("./curator-4tp297kp.js"),
20155
+ import("./curator-llm-factory-caf8jqyb.js")
20143
20156
  ]);
20144
20157
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate: createCuratorLLMDelegate2 };
20145
20158
  }
@@ -20638,7 +20651,7 @@ import { fileURLToPath } from "url";
20638
20651
  // package.json
20639
20652
  var package_default = {
20640
20653
  name: "opencode-swarm",
20641
- version: "7.126.2",
20654
+ version: "7.126.4",
20642
20655
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
20643
20656
  main: "dist/index.js",
20644
20657
  types: "dist/index.d.ts",
@@ -21160,7 +21173,7 @@ async function computeCurationDiagnostics(directory, entries) {
21160
21173
  let scanCompleted = false;
21161
21174
  let scanRemaining = 0;
21162
21175
  try {
21163
- const { getScanStatus } = await import("./scan-cursor-cydz8d9q.js");
21176
+ const { getScanStatus } = await import("./scan-cursor-jp2zz6y1.js");
21164
21177
  const status = await getScanStatus(directory);
21165
21178
  scanGeneration = status.generation;
21166
21179
  scanCompleted = status.completed;
@@ -21170,17 +21183,17 @@ async function computeCurationDiagnostics(directory, entries) {
21170
21183
  try {
21171
21184
  const { isLinked: isLinked2 } = await import("./knowledge-link-4yd2z8ev.js");
21172
21185
  if (isLinked2(directory)) {
21173
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-fa033pqw.js");
21186
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-2x7wsb0n.js");
21174
21187
  let config;
21175
21188
  try {
21176
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-c48dvb6j.js");
21189
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-6mfcg9ws.js");
21177
21190
  const loaded = loadPluginConfigWithMeta2(directory);
21178
21191
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
21179
21192
  } catch {
21180
21193
  config = KnowledgeConfigSchema2.parse({});
21181
21194
  }
21182
21195
  const { cohortConfigFingerprint: cohortConfigFingerprint2 } = await import("./config-fingerprint-v22xh5a2.js");
21183
- const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-n944aq62.js");
21196
+ const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-s2wydhda.js");
21184
21197
  const currentFp = cohortConfigFingerprint2(buildConfigFingerprintInput2(config));
21185
21198
  const cohortFp = await readCohortConfigFingerprint(directory);
21186
21199
  configMatch = cohortFp === null ? null : currentFp === cohortFp;
@@ -22378,7 +22391,7 @@ async function handleDoctorCommand(directory, args) {
22378
22391
  const result = runConfigDoctor(config, directory);
22379
22392
  let output;
22380
22393
  if (enableAutoFix && result.hasAutoFixableIssues) {
22381
- const { runConfigDoctorWithFixes } = await import("./config-doctor-mfx27331.js");
22394
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-2admdwc2.js");
22382
22395
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
22383
22396
  applyLossy: true
22384
22397
  });
@@ -35000,7 +35013,9 @@ var MAX_SAFE_TEST_FILES = 50;
35000
35013
  var MAX_SAFE_SOURCE_FILES = 1;
35001
35014
  async function estimateFanOut(sourceFiles, cwd) {
35002
35015
  try {
35003
- const impactMap = await loadImpactMap(cwd, { skipRebuild: true });
35016
+ const impactMap = await _internals55.loadImpactMap(cwd, {
35017
+ skipRebuild: true
35018
+ });
35004
35019
  const uniqueTestFiles = new Set;
35005
35020
  for (const sourceFile of sourceFiles) {
35006
35021
  const resolvedPath = path70.resolve(cwd, sourceFile);
@@ -35088,45 +35103,45 @@ function hasDevDependency(devDeps, ...patterns) {
35088
35103
  return hasPackageJsonDependency(devDeps, ...patterns);
35089
35104
  }
35090
35105
  function detectGoTest(cwd) {
35091
- return fs31.existsSync(path70.join(cwd, "go.mod")) && isCommandAvailable("go");
35106
+ return _internals55.existsSync(path70.join(cwd, "go.mod")) && _internals55.isCommandAvailable("go");
35092
35107
  }
35093
35108
  function detectJavaMaven(cwd) {
35094
- return fs31.existsSync(path70.join(cwd, "pom.xml")) && isCommandAvailable("mvn");
35109
+ return _internals55.existsSync(path70.join(cwd, "pom.xml")) && _internals55.isCommandAvailable("mvn");
35095
35110
  }
35096
35111
  function detectGradle(cwd) {
35097
- const hasBuildFile = fs31.existsSync(path70.join(cwd, "build.gradle")) || fs31.existsSync(path70.join(cwd, "build.gradle.kts"));
35098
- const hasGradlew = fs31.existsSync(path70.join(cwd, "gradlew")) || fs31.existsSync(path70.join(cwd, "gradlew.bat"));
35099
- return hasBuildFile && (hasGradlew || isCommandAvailable("gradle"));
35112
+ const hasBuildFile = _internals55.existsSync(path70.join(cwd, "build.gradle")) || _internals55.existsSync(path70.join(cwd, "build.gradle.kts"));
35113
+ const hasGradlew = _internals55.existsSync(path70.join(cwd, "gradlew")) || _internals55.existsSync(path70.join(cwd, "gradlew.bat"));
35114
+ return hasBuildFile && (hasGradlew || _internals55.isCommandAvailable("gradle"));
35100
35115
  }
35101
35116
  function detectDotnetTest(cwd) {
35102
35117
  try {
35103
- const files = fs31.readdirSync(cwd);
35118
+ const files = _internals55.readdirSync(cwd);
35104
35119
  const hasCsproj = files.some((f) => f.endsWith(".csproj"));
35105
- return hasCsproj && isCommandAvailable("dotnet");
35120
+ return hasCsproj && _internals55.isCommandAvailable("dotnet");
35106
35121
  } catch {
35107
35122
  return false;
35108
35123
  }
35109
35124
  }
35110
35125
  function detectCTest(cwd) {
35111
- const hasSource = fs31.existsSync(path70.join(cwd, "CMakeLists.txt"));
35112
- const hasBuildCache = fs31.existsSync(path70.join(cwd, "CMakeCache.txt")) || fs31.existsSync(path70.join(cwd, "build", "CMakeCache.txt"));
35113
- return (hasSource || hasBuildCache) && isCommandAvailable("ctest");
35126
+ const hasSource = _internals55.existsSync(path70.join(cwd, "CMakeLists.txt"));
35127
+ const hasBuildCache = _internals55.existsSync(path70.join(cwd, "CMakeCache.txt")) || _internals55.existsSync(path70.join(cwd, "build", "CMakeCache.txt"));
35128
+ return (hasSource || hasBuildCache) && _internals55.isCommandAvailable("ctest");
35114
35129
  }
35115
35130
  function detectSwiftTest(cwd) {
35116
- return fs31.existsSync(path70.join(cwd, "Package.swift")) && isCommandAvailable("swift");
35131
+ return _internals55.existsSync(path70.join(cwd, "Package.swift")) && _internals55.isCommandAvailable("swift");
35117
35132
  }
35118
35133
  function detectDartTest(cwd) {
35119
- return fs31.existsSync(path70.join(cwd, "pubspec.yaml")) && (isCommandAvailable("dart") || isCommandAvailable("flutter"));
35134
+ return _internals55.existsSync(path70.join(cwd, "pubspec.yaml")) && (_internals55.isCommandAvailable("dart") || _internals55.isCommandAvailable("flutter"));
35120
35135
  }
35121
35136
  function detectRSpec(cwd) {
35122
- const hasRSpecFile = fs31.existsSync(path70.join(cwd, ".rspec"));
35123
- const hasGemfile = fs31.existsSync(path70.join(cwd, "Gemfile"));
35124
- const hasSpecDir = fs31.existsSync(path70.join(cwd, "spec"));
35137
+ const hasRSpecFile = _internals55.existsSync(path70.join(cwd, ".rspec"));
35138
+ const hasGemfile = _internals55.existsSync(path70.join(cwd, "Gemfile"));
35139
+ const hasSpecDir = _internals55.existsSync(path70.join(cwd, "spec"));
35125
35140
  const hasRSpec = hasRSpecFile || hasGemfile && hasSpecDir;
35126
- return hasRSpec && (isCommandAvailable("bundle") || isCommandAvailable("rspec"));
35141
+ return hasRSpec && (_internals55.isCommandAvailable("bundle") || _internals55.isCommandAvailable("rspec"));
35127
35142
  }
35128
35143
  function detectMinitest(cwd) {
35129
- return fs31.existsSync(path70.join(cwd, "test")) && (fs31.existsSync(path70.join(cwd, "Gemfile")) || fs31.existsSync(path70.join(cwd, "Rakefile"))) && isCommandAvailable("ruby");
35144
+ return _internals55.existsSync(path70.join(cwd, "test")) && (_internals55.existsSync(path70.join(cwd, "Gemfile")) || _internals55.existsSync(path70.join(cwd, "Rakefile"))) && _internals55.isCommandAvailable("ruby");
35130
35145
  }
35131
35146
  var DISPATCH_FRAMEWORK_MAP = {
35132
35147
  bun: "bun",
@@ -35217,8 +35232,8 @@ async function detectTestFramework(cwd) {
35217
35232
  const baseDir = cwd;
35218
35233
  try {
35219
35234
  const packageJsonPath = path70.join(baseDir, "package.json");
35220
- if (fs31.existsSync(packageJsonPath)) {
35221
- const content = fs31.readFileSync(packageJsonPath, "utf-8");
35235
+ if (_internals55.existsSync(packageJsonPath)) {
35236
+ const content = _internals55.readFileSync(packageJsonPath, "utf-8");
35222
35237
  const pkg = JSON.parse(content);
35223
35238
  const _deps = pkg.dependencies || {};
35224
35239
  const devDeps = pkg.devDependencies || {};
@@ -35237,7 +35252,7 @@ async function detectTestFramework(cwd) {
35237
35252
  return "jest";
35238
35253
  if (hasDevDependency(devDeps, "mocha", "@types/mocha"))
35239
35254
  return "mocha";
35240
- if (fs31.existsSync(path70.join(baseDir, "bun.lockb")) || fs31.existsSync(path70.join(baseDir, "bun.lock"))) {
35255
+ if (_internals55.existsSync(path70.join(baseDir, "bun.lockb")) || _internals55.existsSync(path70.join(baseDir, "bun.lock"))) {
35241
35256
  if (scripts.test?.includes("bun"))
35242
35257
  return "bun";
35243
35258
  }
@@ -35247,28 +35262,28 @@ async function detectTestFramework(cwd) {
35247
35262
  const pyprojectTomlPath = path70.join(baseDir, "pyproject.toml");
35248
35263
  const setupCfgPath = path70.join(baseDir, "setup.cfg");
35249
35264
  const requirementsTxtPath = path70.join(baseDir, "requirements.txt");
35250
- if (fs31.existsSync(pyprojectTomlPath)) {
35251
- const content = fs31.readFileSync(pyprojectTomlPath, "utf-8");
35265
+ if (_internals55.existsSync(pyprojectTomlPath)) {
35266
+ const content = _internals55.readFileSync(pyprojectTomlPath, "utf-8");
35252
35267
  if (content.includes("[tool.pytest"))
35253
35268
  return "pytest";
35254
35269
  if (content.includes("pytest"))
35255
35270
  return "pytest";
35256
35271
  }
35257
- if (fs31.existsSync(setupCfgPath)) {
35258
- const content = fs31.readFileSync(setupCfgPath, "utf-8");
35272
+ if (_internals55.existsSync(setupCfgPath)) {
35273
+ const content = _internals55.readFileSync(setupCfgPath, "utf-8");
35259
35274
  if (content.includes("[pytest]"))
35260
35275
  return "pytest";
35261
35276
  }
35262
- if (fs31.existsSync(requirementsTxtPath)) {
35263
- const content = fs31.readFileSync(requirementsTxtPath, "utf-8");
35277
+ if (_internals55.existsSync(requirementsTxtPath)) {
35278
+ const content = _internals55.readFileSync(requirementsTxtPath, "utf-8");
35264
35279
  if (content.includes("pytest"))
35265
35280
  return "pytest";
35266
35281
  }
35267
35282
  } catch {}
35268
35283
  try {
35269
35284
  const cargoTomlPath = path70.join(baseDir, "Cargo.toml");
35270
- if (fs31.existsSync(cargoTomlPath)) {
35271
- const content = fs31.readFileSync(cargoTomlPath, "utf-8");
35285
+ if (_internals55.existsSync(cargoTomlPath)) {
35286
+ const content = _internals55.readFileSync(cargoTomlPath, "utf-8");
35272
35287
  if (content.includes("[dev-dependencies]")) {
35273
35288
  if (content.includes("tokio") || content.includes("mockall") || content.includes("pretty_assertions")) {
35274
35289
  return "cargo";
@@ -35280,7 +35295,7 @@ async function detectTestFramework(cwd) {
35280
35295
  const pesterConfigPath = path70.join(baseDir, "pester.config.ps1");
35281
35296
  const pesterConfigJsonPath = path70.join(baseDir, "pester.config.ps1.json");
35282
35297
  const pesterPs1Path = path70.join(baseDir, "tests.ps1");
35283
- if (fs31.existsSync(pesterConfigPath) || fs31.existsSync(pesterConfigJsonPath) || fs31.existsSync(pesterPs1Path)) {
35298
+ if (_internals55.existsSync(pesterConfigPath) || _internals55.existsSync(pesterConfigJsonPath) || _internals55.existsSync(pesterPs1Path)) {
35284
35299
  return "pester";
35285
35300
  }
35286
35301
  } catch {}
@@ -35308,12 +35323,12 @@ async function detectTestFramework(cwd) {
35308
35323
  return "none";
35309
35324
  }
35310
35325
  function detectPhpTest(cwd) {
35311
- if (fs31.existsSync(path70.join(cwd, "artisan")) && fs31.existsSync(path70.join(cwd, "composer.json"))) {
35326
+ if (_internals55.existsSync(path70.join(cwd, "artisan")) && _internals55.existsSync(path70.join(cwd, "composer.json"))) {
35312
35327
  return "php-artisan";
35313
35328
  }
35314
- if (fs31.existsSync(path70.join(cwd, "Pest.php")))
35329
+ if (_internals55.existsSync(path70.join(cwd, "Pest.php")))
35315
35330
  return "pest";
35316
- if (fs31.existsSync(path70.join(cwd, "phpunit.xml")) || fs31.existsSync(path70.join(cwd, "phpunit.xml.dist"))) {
35331
+ if (_internals55.existsSync(path70.join(cwd, "phpunit.xml")) || _internals55.existsSync(path70.join(cwd, "phpunit.xml.dist"))) {
35317
35332
  return "phpunit";
35318
35333
  }
35319
35334
  return null;
@@ -35695,9 +35710,9 @@ function buildTestCommand(framework, scope, files, coverage, baseDir, bail) {
35695
35710
  case "swift-test":
35696
35711
  return ["swift", "test"];
35697
35712
  case "dart-test":
35698
- return isCommandAvailable("flutter") ? ["flutter", "test", ...files] : ["dart", "test", ...files];
35713
+ return _internals55.isCommandAvailable("flutter") ? ["flutter", "test", ...files] : ["dart", "test", ...files];
35699
35714
  case "rspec": {
35700
- const args = isCommandAvailable("bundle") ? ["bundle", "exec", "rspec"] : ["rspec"];
35715
+ const args = _internals55.isCommandAvailable("bundle") ? ["bundle", "exec", "rspec"] : ["rspec"];
35701
35716
  if (bail)
35702
35717
  args.push("--fail-fast");
35703
35718
  if (scope !== "all" && files.length > 0) {
@@ -36710,7 +36725,7 @@ var test_runner = createSwarmTool({
36710
36725
  return JSON.stringify(errorResult, null, 2);
36711
36726
  }
36712
36727
  try {
36713
- const impactResult = await analyzeImpact(sourceFiles, workingDir, MAX_SAFE_TEST_FILES);
36728
+ const impactResult = await _internals55.analyzeImpact(sourceFiles, workingDir, MAX_SAFE_TEST_FILES);
36714
36729
  if (impactResult.budgetExceeded) {
36715
36730
  const errorResult = {
36716
36731
  success: false,
@@ -36800,6 +36815,16 @@ var test_runner = createSwarmTool({
36800
36815
  return JSON.stringify(result, null, 2);
36801
36816
  }
36802
36817
  });
36818
+ var _internals55 = {
36819
+ analyzeImpact,
36820
+ loadImpactMap,
36821
+ isCommandAvailable,
36822
+ existsSync: fs31.existsSync,
36823
+ readdirSync: fs31.readdirSync,
36824
+ readFileSync: fs31.readFileSync,
36825
+ selectHistoryForAnalysis,
36826
+ AGGREGATE_TEST_NAME
36827
+ };
36803
36828
 
36804
36829
  // src/services/preflight-service.ts
36805
36830
  var MIN_CHECK_TIMEOUT_MS = 5000;
@@ -36885,9 +36910,9 @@ function getVersionFileVersion(dir) {
36885
36910
  async function runVersionCheck(dir, _timeoutMs) {
36886
36911
  const startTime = Date.now();
36887
36912
  try {
36888
- const packageVersion = _internals55.getPackageVersion(dir);
36889
- const changelogVersion = _internals55.getChangelogVersion(dir);
36890
- const versionFileVersion = _internals55.getVersionFileVersion(dir);
36913
+ const packageVersion = _internals56.getPackageVersion(dir);
36914
+ const changelogVersion = _internals56.getChangelogVersion(dir);
36915
+ const versionFileVersion = _internals56.getVersionFileVersion(dir);
36891
36916
  const versions = [];
36892
36917
  if (packageVersion)
36893
36918
  versions.push(`package.json: ${packageVersion}`);
@@ -37251,7 +37276,7 @@ async function runPreflight(dir, phase, config) {
37251
37276
  const reportId = `preflight-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
37252
37277
  let validatedDir;
37253
37278
  try {
37254
- validatedDir = _internals55.validateDirectoryPath(dir);
37279
+ validatedDir = _internals56.validateDirectoryPath(dir);
37255
37280
  } catch (error2) {
37256
37281
  return {
37257
37282
  id: reportId,
@@ -37271,7 +37296,7 @@ async function runPreflight(dir, phase, config) {
37271
37296
  }
37272
37297
  let validatedTimeout;
37273
37298
  try {
37274
- validatedTimeout = _internals55.validateTimeout(config?.checkTimeoutMs, DEFAULT_CONFIG.checkTimeoutMs);
37299
+ validatedTimeout = _internals56.validateTimeout(config?.checkTimeoutMs, DEFAULT_CONFIG.checkTimeoutMs);
37275
37300
  } catch (error2) {
37276
37301
  return {
37277
37302
  id: reportId,
@@ -37312,12 +37337,12 @@ async function runPreflight(dir, phase, config) {
37312
37337
  });
37313
37338
  const checks = [];
37314
37339
  log("[Preflight] Running lint check...");
37315
- const lintResult = await _internals55.runLintCheck(validatedDir, cfg.linter, cfg.checkTimeoutMs);
37340
+ const lintResult = await _internals56.runLintCheck(validatedDir, cfg.linter, cfg.checkTimeoutMs);
37316
37341
  checks.push(lintResult);
37317
37342
  log(`[Preflight] Lint check: ${lintResult.status} ${lintResult.message}`);
37318
37343
  if (!cfg.skipTests) {
37319
37344
  log("[Preflight] Running tests check...");
37320
- const testsResult = await _internals55.runTestsCheck(validatedDir, cfg.testScope, cfg.checkTimeoutMs);
37345
+ const testsResult = await _internals56.runTestsCheck(validatedDir, cfg.testScope, cfg.checkTimeoutMs);
37321
37346
  checks.push(testsResult);
37322
37347
  log(`[Preflight] Tests check: ${testsResult.status} ${testsResult.message}`);
37323
37348
  } else {
@@ -37329,7 +37354,7 @@ async function runPreflight(dir, phase, config) {
37329
37354
  }
37330
37355
  if (!cfg.skipSecrets) {
37331
37356
  log("[Preflight] Running secrets check...");
37332
- const secretsResult = await _internals55.runSecretsCheck(validatedDir, cfg.checkTimeoutMs);
37357
+ const secretsResult = await _internals56.runSecretsCheck(validatedDir, cfg.checkTimeoutMs);
37333
37358
  checks.push(secretsResult);
37334
37359
  log(`[Preflight] Secrets check: ${secretsResult.status} ${secretsResult.message}`);
37335
37360
  } else {
@@ -37341,7 +37366,7 @@ async function runPreflight(dir, phase, config) {
37341
37366
  }
37342
37367
  if (!cfg.skipEvidence) {
37343
37368
  log("[Preflight] Running evidence check...");
37344
- const evidenceResult = await _internals55.runEvidenceCheck(validatedDir);
37369
+ const evidenceResult = await _internals56.runEvidenceCheck(validatedDir);
37345
37370
  checks.push(evidenceResult);
37346
37371
  log(`[Preflight] Evidence check: ${evidenceResult.status} ${evidenceResult.message}`);
37347
37372
  } else {
@@ -37352,12 +37377,12 @@ async function runPreflight(dir, phase, config) {
37352
37377
  });
37353
37378
  }
37354
37379
  log("[Preflight] Running requirement coverage check...");
37355
- const reqCoverageResult = await _internals55.runRequirementCoverageCheck(validatedDir, phase);
37380
+ const reqCoverageResult = await _internals56.runRequirementCoverageCheck(validatedDir, phase);
37356
37381
  checks.push(reqCoverageResult);
37357
37382
  log(`[Preflight] Requirement coverage check: ${reqCoverageResult.status} ${reqCoverageResult.message}`);
37358
37383
  if (!cfg.skipVersion) {
37359
37384
  log("[Preflight] Running version check...");
37360
- const versionResult = await _internals55.runVersionCheck(validatedDir, cfg.checkTimeoutMs);
37385
+ const versionResult = await _internals56.runVersionCheck(validatedDir, cfg.checkTimeoutMs);
37361
37386
  checks.push(versionResult);
37362
37387
  log(`[Preflight] Version check: ${versionResult.status} ${versionResult.message}`);
37363
37388
  } else {
@@ -37420,10 +37445,10 @@ function formatPreflightMarkdown(report) {
37420
37445
  async function handlePreflightCommand(directory, _args) {
37421
37446
  const plan = await loadPlan(directory);
37422
37447
  const phase = plan?.current_phase ?? 1;
37423
- const report = await _internals55.runPreflight(directory, phase);
37424
- return _internals55.formatPreflightMarkdown(report);
37448
+ const report = await _internals56.runPreflight(directory, phase);
37449
+ return _internals56.formatPreflightMarkdown(report);
37425
37450
  }
37426
- var _internals55 = {
37451
+ var _internals56 = {
37427
37452
  runPreflight,
37428
37453
  formatPreflightMarkdown,
37429
37454
  handlePreflightCommand,
@@ -38395,7 +38420,7 @@ function pruneOldResetBackups(backupsRoot, warnings) {
38395
38420
  }
38396
38421
 
38397
38422
  // src/commands/reset.ts
38398
- var _internals56 = {
38423
+ var _internals57 = {
38399
38424
  backupSwarmStateBeforeReset
38400
38425
  };
38401
38426
  async function handleResetCommand(directory, args) {
@@ -38429,7 +38454,7 @@ async function handleResetCommand(directory, args) {
38429
38454
  ];
38430
38455
  const results = [];
38431
38456
  try {
38432
- const backup = _internals56.backupSwarmStateBeforeReset(directory, "reset", [
38457
+ const backup = _internals57.backupSwarmStateBeforeReset(directory, "reset", [
38433
38458
  ...filesToReset,
38434
38459
  "summaries"
38435
38460
  ]);
@@ -39052,7 +39077,7 @@ async function recordReplayEntry(artifactPath, sessionID, entry) {
39052
39077
  }
39053
39078
 
39054
39079
  // src/prm/index.ts
39055
- var _internals57 = {
39080
+ var _internals58 = {
39056
39081
  getAgentSession,
39057
39082
  readTrajectory,
39058
39083
  getInMemoryTrajectory,
@@ -39075,12 +39100,12 @@ function resetPrmSessionState(session, sessionId) {
39075
39100
  session.prmTrajectoryStep = 0;
39076
39101
  session.replayArtifactPath = null;
39077
39102
  if (sessionId) {
39078
- _internals57.clearTrajectoryCache(sessionId);
39103
+ _internals58.clearTrajectoryCache(sessionId);
39079
39104
  }
39080
39105
  }
39081
39106
 
39082
39107
  // src/commands/reset-session.ts
39083
- var _internals58 = {
39108
+ var _internals59 = {
39084
39109
  cleanupOrphanedBranches,
39085
39110
  backupSwarmStateBeforeReset
39086
39111
  };
@@ -39092,7 +39117,7 @@ function errorMessage(err) {
39092
39117
  async function handleResetSessionCommand(directory, _args) {
39093
39118
  const results = [];
39094
39119
  try {
39095
- const backup = _internals58.backupSwarmStateBeforeReset(directory, "reset-session", ["session"]);
39120
+ const backup = _internals59.backupSwarmStateBeforeReset(directory, "reset-session", ["session"]);
39096
39121
  if (backup.backupDir && backup.copied.length > 0) {
39097
39122
  const rel = path76.relative(directory, backup.backupDir);
39098
39123
  results.push(`\uD83D\uDCE6 Backed up session state to ${rel}/ (restore by copying files back into .swarm/session/)`);
@@ -39159,7 +39184,7 @@ async function handleResetSessionCommand(directory, _args) {
39159
39184
  results.push(`\u26A0\uFE0F Failed to remove .swarm-worktrees/: ${errorMessage(err)}`);
39160
39185
  }
39161
39186
  try {
39162
- const branchResult = await _internals58.cleanupOrphanedBranches(directory, []);
39187
+ const branchResult = await _internals59.cleanupOrphanedBranches(directory, []);
39163
39188
  if (branchResult.removed.length > 0) {
39164
39189
  results.push(`\u2705 Removed ${branchResult.removed.length} orphan swarm-lane branch(es)`);
39165
39190
  }
@@ -39497,7 +39522,7 @@ async function handleRollbackCommand(directory, args) {
39497
39522
  // src/commands/sdd.ts
39498
39523
  import * as fs39 from "fs";
39499
39524
  import * as path79 from "path";
39500
- var _internals59 = {
39525
+ var _internals60 = {
39501
39526
  writeProjectedSpecSync
39502
39527
  };
39503
39528
  var SWARM_SPEC_REL = path79.join(".swarm", "spec.md");
@@ -39893,7 +39918,7 @@ ${USAGE11}`;
39893
39918
 
39894
39919
  ${USAGE11}`;
39895
39920
  }
39896
- const result2 = _internals59.writeProjectedSpecSync(directory, {
39921
+ const result2 = _internals60.writeProjectedSpecSync(directory, {
39897
39922
  source: "speckit",
39898
39923
  feature: resolution.feature,
39899
39924
  dryRun: parsed.dryRun,
@@ -39951,7 +39976,7 @@ ${formatList(result2.projection.warnings)}` : ""
39951
39976
  ].join(`
39952
39977
  `);
39953
39978
  }
39954
- const result = _internals59.writeProjectedSpecSync(directory, {
39979
+ const result = _internals60.writeProjectedSpecSync(directory, {
39955
39980
  changeId: parsed.changeId,
39956
39981
  dryRun: parsed.dryRun,
39957
39982
  overwrite: parsed.overwrite
@@ -40340,7 +40365,7 @@ var DEFAULT_CONTEXT_BUDGET_CONFIG = {
40340
40365
  };
40341
40366
 
40342
40367
  // src/services/status-service.ts
40343
- var _internals60 = {
40368
+ var _internals61 = {
40344
40369
  loadLeanTurboRunState,
40345
40370
  hasActiveLeanTurbo,
40346
40371
  hasActiveFullAuto,
@@ -40495,11 +40520,11 @@ async function getStatusData(directory, agents) {
40495
40520
  } catch {
40496
40521
  status.memoryCohort = { linked: false };
40497
40522
  }
40498
- status.fullAutoActive = _internals60.hasActiveFullAuto();
40523
+ status.fullAutoActive = _internals61.hasActiveFullAuto();
40499
40524
  if (status.fullAutoActive) {
40500
- const sid = _internals60.getActiveFullAutoSessionID();
40525
+ const sid = _internals61.getActiveFullAutoSessionID();
40501
40526
  if (sid) {
40502
- const runState = _internals60.loadFullAutoRunState(directory, sid);
40527
+ const runState = _internals61.loadFullAutoRunState(directory, sid);
40503
40528
  if (runState?.lastEscalation) {
40504
40529
  status.fullAutoEscalation = {
40505
40530
  reason: runState.lastEscalation.reason,
@@ -40514,7 +40539,7 @@ async function getStatusData(directory, agents) {
40514
40539
  }
40515
40540
  function enrichWithLeanTurbo(status, directory) {
40516
40541
  const turboMode = hasActiveTurboMode();
40517
- const leanActive = _internals60.hasActiveLeanTurbo();
40542
+ const leanActive = _internals61.hasActiveLeanTurbo();
40518
40543
  let turboStrategy = "off";
40519
40544
  if (leanActive) {
40520
40545
  turboStrategy = "lean";
@@ -40533,7 +40558,7 @@ function enrichWithLeanTurbo(status, directory) {
40533
40558
  }
40534
40559
  }
40535
40560
  if (leanSessionID) {
40536
- const runState = _internals60.loadLeanTurboRunState(directory, leanSessionID);
40561
+ const runState = _internals61.loadLeanTurboRunState(directory, leanSessionID);
40537
40562
  if (runState) {
40538
40563
  status.leanTurboPhase = runState.phase;
40539
40564
  status.leanMaxParallelCoders = runState.maxParallelCoders;
@@ -40768,7 +40793,7 @@ init_logger();
40768
40793
  var TURBO_BYPASS_DISCLOSURE = "Bypassed: Stage B (reviewer + test_engineer) for Tier 0-2 tasks; phase_complete Gates 1-5 " + "(completion-verify, drift-verifier, hallucination-guard, mutation-gate, phase-council). " + "Still enforced: Stage A (lint, imports, pre_check_batch); Tier 3 Stage B; Gate 5b " + "(architecture-supervisor); Gate 6 (final-council); Gate 7 (full-auto).";
40769
40794
 
40770
40795
  // src/commands/turbo.ts
40771
- var _internals61 = {
40796
+ var _internals62 = {
40772
40797
  loadPluginConfigWithMeta
40773
40798
  };
40774
40799
  async function handleTurboCommand(directory, args, sessionID) {
@@ -40828,7 +40853,7 @@ async function handleTurboCommand(directory, args, sessionID) {
40828
40853
  if (arg0 === "on") {
40829
40854
  let strategy = "standard";
40830
40855
  try {
40831
- const { config } = _internals61.loadPluginConfigWithMeta(directory);
40856
+ const { config } = _internals62.loadPluginConfigWithMeta(directory);
40832
40857
  if (config.turbo?.strategy === "lean") {
40833
40858
  strategy = "lean";
40834
40859
  }
@@ -40925,7 +40950,7 @@ function enableLeanTurbo(session, directory, sessionID) {
40925
40950
  let maxParallelCoders = 4;
40926
40951
  let conflictPolicy = "serialize";
40927
40952
  try {
40928
- const { config } = _internals61.loadPluginConfigWithMeta(directory);
40953
+ const { config } = _internals62.loadPluginConfigWithMeta(directory);
40929
40954
  const leanConfig = config.turbo?.lean;
40930
40955
  if (leanConfig) {
40931
40956
  maxParallelCoders = leanConfig.max_parallel_coders ?? 4;
@@ -41130,7 +41155,7 @@ function findSimilarCommands(query) {
41130
41155
  }
41131
41156
  const scored = VALID_COMMANDS.map((cmd) => {
41132
41157
  const cmdLower = cmd.toLowerCase();
41133
- const fullScore = _internals62.levenshteinDistance(q, cmdLower);
41158
+ const fullScore = _internals63.levenshteinDistance(q, cmdLower);
41134
41159
  let tokenScore = Infinity;
41135
41160
  if (cmd.includes(" ") || cmd.includes("-")) {
41136
41161
  const qTokens = q.split(/[\s-]+/);
@@ -41143,7 +41168,7 @@ function findSimilarCommands(query) {
41143
41168
  for (const ct of cmdTokens) {
41144
41169
  if (ct.length === 0)
41145
41170
  continue;
41146
- const dist = _internals62.levenshteinDistance(qt, ct);
41171
+ const dist = _internals63.levenshteinDistance(qt, ct);
41147
41172
  if (dist < minDist)
41148
41173
  minDist = dist;
41149
41174
  }
@@ -41153,7 +41178,7 @@ function findSimilarCommands(query) {
41153
41178
  }
41154
41179
  const dashStrippedQ = q.replace(/-/g, "");
41155
41180
  const dashStrippedCmd = cmdLower.replace(/-/g, "");
41156
- const dashScore = _internals62.levenshteinDistance(dashStrippedQ, dashStrippedCmd);
41181
+ const dashScore = _internals63.levenshteinDistance(dashStrippedQ, dashStrippedCmd);
41157
41182
  const score = Math.min(fullScore, tokenScore, dashScore);
41158
41183
  return { cmd, score };
41159
41184
  });
@@ -41188,16 +41213,16 @@ function buildDetailedHelp(commandName, entry) {
41188
41213
  async function handleHelpCommand(ctx) {
41189
41214
  const targetCommand = ctx.args.join(" ");
41190
41215
  if (!targetCommand) {
41191
- const { buildHelpText } = await import("./index-5nq8dp63.js");
41216
+ const { buildHelpText } = await import("./index-46xgqgd5.js");
41192
41217
  return buildHelpText();
41193
41218
  }
41194
41219
  const tokens = targetCommand.split(/\s+/);
41195
- const resolved = _internals62.resolveCommand(tokens);
41220
+ const resolved = _internals63.resolveCommand(tokens);
41196
41221
  if (resolved) {
41197
- return _internals62.buildDetailedHelp(resolved.key, resolved.entry);
41222
+ return _internals63.buildDetailedHelp(resolved.key, resolved.entry);
41198
41223
  }
41199
- const similar = _internals62.findSimilarCommands(targetCommand);
41200
- const { buildHelpText: fullHelp } = await import("./index-5nq8dp63.js");
41224
+ const similar = _internals63.findSimilarCommands(targetCommand);
41225
+ const { buildHelpText: fullHelp } = await import("./index-46xgqgd5.js");
41201
41226
  if (similar.length > 0) {
41202
41227
  return `Command '/swarm ${targetCommand}' not found.
41203
41228
 
@@ -41267,7 +41292,7 @@ var COMMAND_REGISTRY = {
41267
41292
  toolNoArgs: true
41268
41293
  },
41269
41294
  help: {
41270
- handler: (ctx) => _internals62.handleHelpCommand(ctx),
41295
+ handler: (ctx) => _internals63.handleHelpCommand(ctx),
41271
41296
  description: "Show help for swarm commands",
41272
41297
  category: "core",
41273
41298
  args: "[command]",
@@ -41336,7 +41361,7 @@ var COMMAND_REGISTRY = {
41336
41361
  },
41337
41362
  "guardrail explain": {
41338
41363
  handler: async (ctx) => {
41339
- const { handleGuardrailExplain } = await import("./guardrail-explain-jsrjqps1.js");
41364
+ const { handleGuardrailExplain } = await import("./guardrail-explain-yjzbs0fq.js");
41340
41365
  return handleGuardrailExplain(ctx.directory, ctx.args);
41341
41366
  },
41342
41367
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -41346,7 +41371,7 @@ var COMMAND_REGISTRY = {
41346
41371
  },
41347
41372
  "guardrail-explain": {
41348
41373
  handler: async (ctx) => {
41349
- const { handleGuardrailExplain } = await import("./guardrail-explain-jsrjqps1.js");
41374
+ const { handleGuardrailExplain } = await import("./guardrail-explain-yjzbs0fq.js");
41350
41375
  return handleGuardrailExplain(ctx.directory, ctx.args);
41351
41376
  },
41352
41377
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -41356,7 +41381,7 @@ var COMMAND_REGISTRY = {
41356
41381
  },
41357
41382
  "guardrail-log": {
41358
41383
  handler: async (ctx) => {
41359
- const { handleGuardrailLog } = await import("./guardrail-log-61gya05m.js");
41384
+ const { handleGuardrailLog } = await import("./guardrail-log-7cychbgs.js");
41360
41385
  return handleGuardrailLog(ctx.directory, ctx.args);
41361
41386
  },
41362
41387
  description: "Read the guardrail decision log (use --blocks-only for blocks)",
@@ -42240,7 +42265,7 @@ function validateToolPolicy() {
42240
42265
  }
42241
42266
  return { valid: warnings.length === 0, warnings };
42242
42267
  }
42243
- var _internals62 = {
42268
+ var _internals63 = {
42244
42269
  handleHelpCommand,
42245
42270
  validateAliases,
42246
42271
  validateToolPolicy,
@@ -42250,16 +42275,16 @@ var _internals62 = {
42250
42275
  findSimilarCommands,
42251
42276
  buildDetailedHelp
42252
42277
  };
42253
- var validation = _internals62.validateAliases();
42278
+ var validation = _internals63.validateAliases();
42254
42279
  if (!validation.valid) {
42255
42280
  throw new Error(`COMMAND_REGISTRY alias validation failed:
42256
42281
  ${validation.errors.join(`
42257
42282
  `)}`);
42258
42283
  }
42259
- _internals62.emitValidationWarnings("COMMAND_REGISTRY alias warnings", validation.warnings);
42284
+ _internals63.emitValidationWarnings("COMMAND_REGISTRY alias warnings", validation.warnings);
42260
42285
  try {
42261
- const toolPolicyValidation = _internals62.validateToolPolicy();
42262
- _internals62.emitValidationWarnings("COMMAND_REGISTRY toolPolicy warnings", toolPolicyValidation.warnings);
42286
+ const toolPolicyValidation = _internals63.validateToolPolicy();
42287
+ _internals63.emitValidationWarnings("COMMAND_REGISTRY toolPolicy warnings", toolPolicyValidation.warnings);
42263
42288
  } catch (e) {
42264
42289
  warn(`COMMAND_REGISTRY toolPolicy validation failed (non-fatal): ${e.message}`);
42265
42290
  }
@@ -43140,7 +43165,7 @@ HARD CONSTRAINTS (apply regardless of skill load success):
43140
43165
  - Test execution, explorer lanes, reviewer dispatch, and critic challenge are all permitted within this mode
43141
43166
  - Quality is the only metric \u2014 there is no speed, efficiency, or time exception; time, tokens, and agent dispatches are irrelevant to correctness
43142
43167
  - 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.
43143
- - CHECK OUT THE PR BRANCH LOCALLY before launching explorer lanes: fetch the PR head ref if it is not present, 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 check out the head branch. Explorers read the working-tree filesystem (Read/Glob/Grep), so without a checkout they read the base branch and produce invalid candidates. Always pass the base..head commit range in explorer delegations.
43168
+ - 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.
43144
43169
  - 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.
43145
43170
  - 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.
43146
43171
  - 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.
@@ -43159,7 +43184,7 @@ ACTION: Load skill ${bundledProjectSkillFileReference("swarm-pr-feedback")} imme
43159
43184
 
43160
43185
  HARD CONSTRAINTS (apply regardless of skill load success):
43161
43186
  - FOLLOW THE SKILL EXACTLY: build the complete feedback ledger from all available sources before editing, and execute every phase in order with no shortcuts.
43162
- - CHECK OUT THE PR BRANCH LOCALLY before verifying feedback or making fixes: fetch the PR head ref if absent, 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 check out the head branch. For a detached/fresh remote head, establish tracking before head binding with only \`git switch -c <local> --track <remote>/<branch>\` (or the constrained set-upstream form documented by the skill). Feedback verification and fix validation require the PR branch in the working tree.
43187
+ - CHECK OUT THE PR BRANCH LOCALLY before dispatching feedback lanes, verifying feedback, or making fixes: fetch the PR head ref if absent, 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 check out the head branch. For a detached/fresh remote head, establish tracking before head binding with only \`git switch -c <local> --track <remote>/<branch>\` (or the constrained set-upstream form documented by the skill). If using \`gh pr checkout\`, never use \`--force\`, \`--recurse-submodules\`, or detached checkout. Before first bind, prove HEAD equals the authoritative full PR head SHA, the tree is clean, and the current branch tracks the intended PR remote/branch. Feedback verification and fix validation require the PR branch in the working tree.
43163
43188
  - Do NOT run a fresh broad PR review \u2014 inspect adjacent code only as needed to verify reachability, dependencies, shared root causes, regression risk, or sibling changes for a confirmed item.
43164
43189
  - Treat every review comment, CI failure, bot summary, and pasted note as a CLAIM until source evidence proves it; classify each ledger item (CONFIRMED, DISPROVED, PRE_EXISTING, or NEEDS_USER_DECISION) and never silently drop, defer, or mark items out of scope.
43165
43190
  - For async verification lanes, use \`mode: "swarm-pr-feedback:verification"\`, record each \`batch_id\`, keep doing ledger-safe work, poll with \`collect_lane_results\` without \`wait\`, process settled lanes immediately, and use \`wait: true\` only at the join. Pass the complete immutable \`feedback_inventory\`, exact current \`pr_head_sha\`, and exact-once cumulative lane \`feedback_item_ids\`; runtime blocks replacement, stale-head artifacts, overlap, gaps, and early mutation.
@@ -45028,7 +45053,7 @@ function formatCommandNotFound(tokens) {
45028
45053
  const attemptedCommand = tokens[0] || "";
45029
45054
  const MAX_DISPLAY = 100;
45030
45055
  const displayCommand = attemptedCommand.length > MAX_DISPLAY ? `${attemptedCommand.slice(0, MAX_DISPLAY)}...` : attemptedCommand;
45031
- const similar = _internals62.findSimilarCommands(attemptedCommand);
45056
+ const similar = _internals63.findSimilarCommands(attemptedCommand);
45032
45057
  const header = `Command \`/swarm ${displayCommand}\` not found.`;
45033
45058
  const suggestions = similar.length > 0 ? `Did you mean:
45034
45059
  ${similar.map((cmd) => ` - /swarm ${cmd}`).join(`
@@ -47056,10 +47081,10 @@ function startAgentSession(sessionId, agentName, staleDurationMs = STALE_SESSION
47056
47081
  }
47057
47082
  telemetry.sessionStarted(sessionId, agentName);
47058
47083
  swarmState.activeAgent.set(sessionId, agentName);
47059
- _internals65.applyRehydrationCache(sessionState);
47084
+ _internals66.applyRehydrationCache(sessionState);
47060
47085
  if (directory) {
47061
47086
  let rehydrationPromise;
47062
- rehydrationPromise = _internals65.rehydrateSessionFromDisk(directory, sessionState).then(async () => {
47087
+ rehydrationPromise = _internals66.rehydrateSessionFromDisk(directory, sessionState).then(async () => {
47063
47088
  try {
47064
47089
  sessionState.prSubscriptions = await rehydratePrSubscriptions(sessionId, directory);
47065
47090
  } catch (err) {
@@ -47255,7 +47280,7 @@ function ensureAgentSession(sessionId, agentName, directory) {
47255
47280
  maybeSweepStaleSessions();
47256
47281
  return session;
47257
47282
  }
47258
- _internals65.startAgentSession(sessionId, agentName ?? "unknown", 7200000, directory);
47283
+ _internals66.startAgentSession(sessionId, agentName ?? "unknown", 7200000, directory);
47259
47284
  session = swarmState.agentSessions.get(sessionId);
47260
47285
  if (!session) {
47261
47286
  throw new Error(`Failed to create guardrail session for ${sessionId}`);
@@ -47544,8 +47569,8 @@ function applyRehydrationCache(session) {
47544
47569
  }
47545
47570
  }
47546
47571
  async function rehydrateSessionFromDisk(directory, session) {
47547
- await _internals65.buildRehydrationCache(directory);
47548
- _internals65.applyRehydrationCache(session);
47572
+ await _internals66.buildRehydrationCache(directory);
47573
+ _internals66.applyRehydrationCache(session);
47549
47574
  }
47550
47575
  function hasActiveTurboMode(sessionID) {
47551
47576
  if (sessionID) {
@@ -47633,7 +47658,7 @@ async function rehydratePrSubscriptions(sessionID, directory) {
47633
47658
  }
47634
47659
  return map;
47635
47660
  }
47636
- var _internals65 = {
47661
+ var _internals66 = {
47637
47662
  swarmState,
47638
47663
  resetSwarmState,
47639
47664
  ensureAgentSession,
@@ -47772,4 +47797,4 @@ function createCuratorLLMDelegate(directory, mode = "init", sessionId) {
47772
47797
  };
47773
47798
  }
47774
47799
 
47775
- export { package_default, handleAcknowledgeSpecDriftCommand, handleAgentsCommand, handleAnalyzeCommand, handleArchiveCommand, DC_SAFE_TARGETS, dcNormalizeCommand, dcUnwrapWrappers, dcSplitSegments, dcValidateTargets, dcCheckJunctionCreation, dcExtractWindowsCmdTargets, dcExtractPowerShellTargets, normalizeSwarmCommandInput, canonicalCommandKey, formatCommandNotFound, executeSwarmCommand, SWARM_COMMAND_TOOL_COMMANDS, SWARM_COMMAND_TOOL_ALLOWLIST, HUMAN_ONLY_SWARM_COMMANDS, classifySwarmCommandToolUse, classifySwarmCommandChatFallbackUse, detectPosixWrites, detectWindowsWrites, resolveWriteTargets, handleAutoProceedCommand, handleBenchmarkCommand, handleBrainstormCommand, handleCheckpointCommand, handleCiSimulateCommand, handleClarifyCommand, createCuratorLLMDelegate, _internals14 as _internals, normalizeRecommendationEntryIdToken, parseKnowledgeRecommendations, parseKnowledgeRecommendationsWithDiagnostics, parseStructuredCuratorBlocks, readCuratorSummary, writeCuratorSummary, appendCuratorRecommendation, mergeCuratorPhaseSummary, filterPhaseEvents, checkPhaseCompliance, runCuratorInit, runCuratorPhase, applyCuratorKnowledgeUpdates, isHiveEligible, countDistinctProjects, checkHivePromotions, _internals17 as _internals1, createHivePromoterHook, promoteToHive, promoteFromSwarm, handleCloseCommand, handleCodebaseReviewCommand, handleConcurrencyCommand, handleConfigCommand, handleConsolidateCommand, handleCostsCommand, handleCouncilCommand, handleCurateCommand, handleDarkMatterCommand, handleDeepDiveCommand, handleDeepResearchCommand, getPluginConfigDir, getPluginCachePaths, getPluginLockFilePaths, handleDiagnoseCommand, handleDoctorCommand, handleEvidenceCommand, handleEvidenceSummaryCommand, handleExportCommand, handleFullAutoCommand, handleGateAuditCommand, handleGateStatsCommand, handleHandoffCommand, handleHistoryCommand, handleKnowledgeQuarantineCommand, handleKnowledgeRestoreCommand, handleKnowledgeMigrateCommand, handleKnowledgeListCommand, handleKnowledgeUnactionableCommand, handleKnowledgeRetryHardeningCommand, handleLearningCommand, handleLinkCommand, handleMemoryCommand, handleMemoryStatusCommand, handleMemoryValueLogCommand, handleMemoryMigrateCommand, handleMemoryImportCommand, handleMemoryExportCommand, handlePlanCommand, handlePreflightCommand, handlePromoteCommand, handleQaGatesCommand, handleResetCommand, handleResetSessionCommand, handleRetrieveCommand, handleRollbackCommand, handleSddStatusCommand, handleSddValidateCommand, handleSddProjectCommand, handleSddCommand, handleSimulateCommand, handleSpecifyCommand, handleStatusCommand, handleSyncPlanCommand, handleTurboCommand, handleUnlinkCommand, handleWriteRetroCommand, handleHelpCommand, COMMAND_REGISTRY, VALID_COMMANDS, _internals62 as _internals2, resolveCommand };
47800
+ export { package_default, handleAcknowledgeSpecDriftCommand, handleAgentsCommand, handleAnalyzeCommand, handleArchiveCommand, DC_SAFE_TARGETS, dcNormalizeCommand, dcUnwrapWrappers, dcSplitSegments, dcValidateTargets, dcCheckJunctionCreation, dcExtractWindowsCmdTargets, dcExtractPowerShellTargets, normalizeSwarmCommandInput, canonicalCommandKey, formatCommandNotFound, executeSwarmCommand, SWARM_COMMAND_TOOL_COMMANDS, SWARM_COMMAND_TOOL_ALLOWLIST, HUMAN_ONLY_SWARM_COMMANDS, classifySwarmCommandToolUse, classifySwarmCommandChatFallbackUse, detectPosixWrites, detectWindowsWrites, resolveWriteTargets, handleAutoProceedCommand, handleBenchmarkCommand, handleBrainstormCommand, handleCheckpointCommand, handleCiSimulateCommand, handleClarifyCommand, createCuratorLLMDelegate, _internals14 as _internals, normalizeRecommendationEntryIdToken, parseKnowledgeRecommendations, parseKnowledgeRecommendationsWithDiagnostics, parseStructuredCuratorBlocks, readCuratorSummary, writeCuratorSummary, appendCuratorRecommendation, mergeCuratorPhaseSummary, filterPhaseEvents, checkPhaseCompliance, runCuratorInit, runCuratorPhase, applyCuratorKnowledgeUpdates, isHiveEligible, countDistinctProjects, checkHivePromotions, _internals17 as _internals1, createHivePromoterHook, promoteToHive, promoteFromSwarm, handleCloseCommand, handleCodebaseReviewCommand, handleConcurrencyCommand, handleConfigCommand, handleConsolidateCommand, handleCostsCommand, handleCouncilCommand, handleCurateCommand, handleDarkMatterCommand, handleDeepDiveCommand, handleDeepResearchCommand, getPluginConfigDir, getPluginCachePaths, getPluginLockFilePaths, handleDiagnoseCommand, handleDoctorCommand, handleEvidenceCommand, handleEvidenceSummaryCommand, handleExportCommand, handleFullAutoCommand, handleGateAuditCommand, handleGateStatsCommand, handleHandoffCommand, handleHistoryCommand, handleKnowledgeQuarantineCommand, handleKnowledgeRestoreCommand, handleKnowledgeMigrateCommand, handleKnowledgeListCommand, handleKnowledgeUnactionableCommand, handleKnowledgeRetryHardeningCommand, handleLearningCommand, handleLinkCommand, handleMemoryCommand, handleMemoryStatusCommand, handleMemoryValueLogCommand, handleMemoryMigrateCommand, handleMemoryImportCommand, handleMemoryExportCommand, handlePlanCommand, handlePreflightCommand, handlePromoteCommand, handleQaGatesCommand, handleResetCommand, handleResetSessionCommand, handleRetrieveCommand, handleRollbackCommand, handleSddStatusCommand, handleSddValidateCommand, handleSddProjectCommand, handleSddCommand, handleSimulateCommand, handleSpecifyCommand, handleStatusCommand, handleSyncPlanCommand, handleTurboCommand, handleUnlinkCommand, handleWriteRetroCommand, handleHelpCommand, COMMAND_REGISTRY, VALID_COMMANDS, _internals63 as _internals2, resolveCommand };