opencode-swarm 7.146.1 → 7.146.3

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 (76) hide show
  1. package/dist/agents/council-prompts.d.ts +3 -3
  2. package/dist/cli/{config-doctor-sd7x5bts.js → config-doctor-yd866pd5.js} +2 -2
  3. package/dist/cli/{core-17febkvw.js → core-nc9a9g5m.js} +1 -1
  4. package/dist/cli/{curation-policy-x19e8bqc.js → curation-policy-9vv7v5rf.js} +6 -6
  5. package/dist/cli/{curator-vghf320v.js → curator-acp80hpc.js} +27 -27
  6. package/dist/cli/{curator-llm-factory-zxbgkjm5.js → curator-llm-factory-ewffa8r1.js} +27 -27
  7. package/dist/cli/{evidence-summary-service-xma4aagr.js → evidence-summary-service-8gw74j8g.js} +11 -11
  8. package/dist/cli/{gate-evidence-2bznvee8.js → gate-evidence-jj3zt2x1.js} +6 -6
  9. package/dist/cli/{guardrail-explain-ppzg0xz9.js → guardrail-explain-50cp8k3r.js} +28 -28
  10. package/dist/cli/{guardrail-log-xexwz93q.js → guardrail-log-jazq10gt.js} +3 -3
  11. package/dist/cli/{hive-promoter-j3vw2hj4.js → hive-promoter-qhrngsvb.js} +27 -27
  12. package/dist/cli/{index-4qvsh3m5.js → index-0a4s2803.js} +6 -6
  13. package/dist/cli/{index-qbpxrw95.js → index-1kq3x5q6.js} +2 -2
  14. package/dist/cli/{index-t7sfrv3v.js → index-262kyrk3.js} +4 -4
  15. package/dist/cli/{index-xz0ccakc.js → index-3377n9qp.js} +1 -1
  16. package/dist/cli/{index-g8qbjqqz.js → index-3gagma8p.js} +4 -4
  17. package/dist/cli/{index-5e5a1y2r.js → index-3p4wgm0d.js} +1 -1
  18. package/dist/cli/{index-e1hjd15c.js → index-463msy1e.js} +1 -1
  19. package/dist/cli/{index-twwb61bh.js → index-4zevsvaa.js} +3 -3
  20. package/dist/cli/{index-bghwrr59.js → index-6q35swn2.js} +1 -1
  21. package/dist/cli/{index-h8qed3pr.js → index-7ph5pz77.js} +17 -4
  22. package/dist/cli/{index-vacrzesw.js → index-923phxsp.js} +6 -6
  23. package/dist/cli/{index-k46kg4t6.js → index-a7cnyp5e.js} +7 -7
  24. package/dist/cli/{index-tzyvmkd1.js → index-bxk21f2w.js} +1 -1
  25. package/dist/cli/{index-97psh79d.js → index-bxs4wkjf.js} +1 -1
  26. package/dist/cli/{index-19f0zycs.js → index-bydybrke.js} +2 -2
  27. package/dist/cli/{index-cw96tpy6.js → index-cgcs823z.js} +4 -4
  28. package/dist/cli/{index-9qbr27bw.js → index-eybamsqg.js} +2 -2
  29. package/dist/cli/{index-1c9mfnj0.js → index-fypq68yn.js} +2 -2
  30. package/dist/cli/{index-n7trn9wz.js → index-gayh8tmh.js} +55 -1
  31. package/dist/cli/{index-va8a2zrq.js → index-gwt7ceh7.js} +2 -2
  32. package/dist/cli/{index-w0cj7zyd.js → index-j2ckvbx7.js} +1 -1
  33. package/dist/cli/{index-7x00nx8m.js → index-n96nt4gb.js} +1235 -589
  34. package/dist/cli/{index-zkaz3fhw.js → index-pc4423w8.js} +2 -2
  35. package/dist/cli/{index-fksfxhmx.js → index-pgsvn005.js} +5 -5
  36. package/dist/cli/{index-qyvjp0bq.js → index-q81s0m8k.js} +66 -37
  37. package/dist/cli/{index-w5r84rd1.js → index-qjgg9qzs.js} +1 -1
  38. package/dist/cli/{index-e3caa7ng.js → index-qqawmxe7.js} +29 -29
  39. package/dist/cli/{index-txh3h83v.js → index-v2eevdbj.js} +4 -4
  40. package/dist/cli/{index-ycgm9pzg.js → index-xz9w7sa9.js} +3 -2
  41. package/dist/cli/{index-bd4g9fvb.js → index-ypwwchs0.js} +1 -1
  42. package/dist/cli/{index-zwn2e2pe.js → index-yr1aabxa.js} +4 -4
  43. package/dist/cli/index.js +27 -27
  44. package/dist/cli/{knowledge-escalator-wj85ppdt.js → knowledge-escalator-7zpg79dx.js} +11 -11
  45. package/dist/cli/{knowledge-events-4y9kk2xe.js → knowledge-events-8abttcnt.js} +9 -9
  46. package/dist/cli/{knowledge-link-8pr02pza.js → knowledge-link-mgg482z6.js} +5 -5
  47. package/dist/cli/{knowledge-store-kc8dwc14.js → knowledge-store-a5mzf986.js} +6 -6
  48. package/dist/cli/{knowledge-validator-584ga9fb.js → knowledge-validator-fn2myc73.js} +8 -8
  49. package/dist/cli/{pending-delegations-kkrczqv7.js → pending-delegations-591vme3d.js} +3 -3
  50. package/dist/cli/{pr-subscriptions-2xn238xt.js → pr-subscriptions-js5v2xr6.js} +3 -3
  51. package/dist/cli/{runner-e7z9cf5y.js → runner-rcnpm510.js} +6 -6
  52. package/dist/cli/{scan-cursor-rhjym1pn.js → scan-cursor-4jv70zwb.js} +7 -7
  53. package/dist/cli/{schema-yb3pvhcs.js → schema-jhz9hme9.js} +1 -1
  54. package/dist/cli/{scope-persistence-bxwjk9rc.js → scope-persistence-ykswenxj.js} +7 -7
  55. package/dist/cli/{skill-generator-3w8w7htr.js → skill-generator-k5pxb3w2.js} +13 -13
  56. package/dist/cli/{telemetry-t109dhv7.js → telemetry-xzy0qeap.js} +1 -1
  57. package/dist/cli/{worktree-collision-ownership-2jtg2my1.js → worktree-collision-ownership-vt0jzmdt.js} +3 -3
  58. package/dist/cli/{worktree-isolation-av1rshr3.js → worktree-isolation-443q0pah.js} +27 -27
  59. package/dist/commands/close.d.ts +1 -0
  60. package/dist/commands/context-map-stats.d.ts +5 -0
  61. package/dist/config/schema.d.ts +16 -0
  62. package/dist/context-map/telemetry.d.ts +168 -26
  63. package/dist/council/council-evidence-writer.d.ts +2 -1
  64. package/dist/council/council-freshness.d.ts +49 -0
  65. package/dist/council/council-review-identity.d.ts +133 -0
  66. package/dist/council/council-round-state.d.ts +27 -3
  67. package/dist/council/disagreement-detector.d.ts +12 -2
  68. package/dist/council/general-council-types.d.ts +32 -0
  69. package/dist/council/types.d.ts +43 -7
  70. package/dist/hooks/knowledge-application-gate.d.ts +23 -0
  71. package/dist/index.js +166 -143
  72. package/dist/observability/catalog.d.ts +7 -5
  73. package/dist/telemetry.d.ts +22 -1
  74. package/dist/tools/phase-complete/gates/types.d.ts +7 -0
  75. package/dist/tools/write-final-council-evidence.d.ts +1 -7
  76. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  autoCommitDirty,
4
4
  cleanUntrackedFiles
5
- } from "./index-tzyvmkd1.js";
5
+ } from "./index-bxk21f2w.js";
6
6
  import {
7
7
  isPathWithinDeclaredScope,
8
8
  unsafePathTextReason
@@ -26,13 +26,13 @@ import {
26
26
  atomicWriteFile,
27
27
  taskEvidencePath,
28
28
  withTaskEvidenceLock
29
- } from "./index-qbpxrw95.js";
29
+ } from "./index-1kq3x5q6.js";
30
30
  import {
31
31
  assertProjectRoot
32
- } from "./index-bghwrr59.js";
32
+ } from "./index-6q35swn2.js";
33
33
  import {
34
34
  telemetry
35
- } from "./index-qyvjp0bq.js";
35
+ } from "./index-q81s0m8k.js";
36
36
  import {
37
37
  exports_external,
38
38
  init_zod
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  init_schema,
13
13
  stripKnownSwarmPrefix
14
- } from "./index-h8qed3pr.js";
14
+ } from "./index-7ph5pz77.js";
15
15
  import {
16
16
  init_constants
17
17
  } from "./index-cpg98bh1.js";
@@ -4,14 +4,14 @@ import {
4
4
  PlanSchema,
5
5
  TaskStatusSchema,
6
6
  init_loader
7
- } from "./index-1c9mfnj0.js";
7
+ } from "./index-fypq68yn.js";
8
8
  import {
9
9
  assertProjectRoot,
10
10
  withEvidenceLock
11
- } from "./index-bghwrr59.js";
11
+ } from "./index-6q35swn2.js";
12
12
  import {
13
13
  emit
14
- } from "./index-qyvjp0bq.js";
14
+ } from "./index-q81s0m8k.js";
15
15
  import {
16
16
  criticalWarn,
17
17
  init_logger,
@@ -962,4 +962,4 @@ var _internals = {
962
962
  randomUUID: () => crypto.randomUUID()
963
963
  };
964
964
 
965
- export { derivePlanId, derivePlanIdentityHash, normalizeExecutionProfileForHash, LedgerStaleWriterError, computePlanHash, computePlanStructureHash, computeCurrentPlanHash, ledgerExists, getLatestLedgerSeq, readLedgerEvents, initLedger, readPlanEpochIdentity, getOrAdoptPlanEpochUnderLock, appendLedgerEvent, takeSnapshotWithRetry, takeSnapshotEvent, replaceTruncatedLedgerWithRecoveryRoot, replayFromLedger, replayFromLedgerWithStatus, readLedgerEventsWithIntegrity, loadLastApprovedPlan };
965
+ export { normalizeExecutionProfileForHash, derivePlanId, derivePlanIdentityHash, LedgerStaleWriterError, computePlanHash, computePlanStructureHash, computeCurrentPlanHash, ledgerExists, getLatestLedgerSeq, readLedgerEvents, initLedger, readPlanEpochIdentity, getOrAdoptPlanEpochUnderLock, appendLedgerEvent, takeSnapshotWithRetry, takeSnapshotEvent, replaceTruncatedLedgerWithRecoveryRoot, replayFromLedger, replayFromLedgerWithStatus, readLedgerEventsWithIntegrity, loadLastApprovedPlan };
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-w8pgjr75.js";
5
5
  import {
6
6
  withEvidenceLock
7
- } from "./index-bghwrr59.js";
7
+ } from "./index-6q35swn2.js";
8
8
  import {
9
9
  exports_external,
10
10
  init_zod
@@ -7,7 +7,7 @@ import {
7
7
  readLinkPointer,
8
8
  resolveKnowledgeStoreDir,
9
9
  resolveLinkDir
10
- } from "./index-w0cj7zyd.js";
10
+ } from "./index-j2ckvbx7.js";
11
11
 
12
12
  // src/knowledge/curation-policy.ts
13
13
  import { appendFile, mkdir as mkdir2, readFile as readFile2 } from "fs/promises";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  _internals,
4
4
  resolveWorktreeIsolationConfig
5
- } from "./index-19f0zycs.js";
5
+ } from "./index-bydybrke.js";
6
6
  import {
7
7
  ApprovalEvidenceSchema,
8
8
  BaseEvidenceSchema,
@@ -42,7 +42,7 @@ import {
42
42
  loadPluginConfig,
43
43
  loadPluginConfigWithMeta,
44
44
  loadPluginConfigWithMetaAsync
45
- } from "./index-1c9mfnj0.js";
45
+ } from "./index-fypq68yn.js";
46
46
  import {
47
47
  AUTO_REVIEW_V8_BURN_IN_DECISION,
48
48
  AgentOverrideConfigSchema,
@@ -64,7 +64,7 @@ import {
64
64
  TurboConfigSchema,
65
65
  WorktreeIsolationConfigSchema,
66
66
  resolveAutoReviewConfig
67
- } from "./index-h8qed3pr.js";
67
+ } from "./index-7ph5pz77.js";
68
68
  import {
69
69
  ALL_AGENT_NAMES,
70
70
  ALL_SUBAGENT_NAMES,
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  emit
4
- } from "./index-qyvjp0bq.js";
4
+ } from "./index-q81s0m8k.js";
5
5
  import {
6
6
  require_proper_lockfile
7
7
  } from "./index-7g4c7s5r.js";
@@ -21,7 +21,7 @@ var package_default;
21
21
  var init_package = __esm(() => {
22
22
  package_default = {
23
23
  name: "opencode-swarm",
24
- version: "7.146.1",
24
+ version: "7.146.3",
25
25
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
26
26
  main: "dist/index.js",
27
27
  types: "dist/index.d.ts",
@@ -1384,12 +1384,25 @@ var init_schema = __esm(() => {
1384
1384
  CouncilConfigSchema = exports_external.object({
1385
1385
  enabled: exports_external.boolean().default(false),
1386
1386
  maxRounds: exports_external.number().int().min(1).max(10).default(3),
1387
- parallelTimeoutMs: exports_external.number().int().min(5000).max(120000).default(30000),
1387
+ parallelTimeoutMs: exports_external.number().int().min(5000).max(120000).default(30000).describe("DEPRECATED \u2014 inert. Accepted for parse compatibility only; no runtime consumer exists and no timeout is enforced. Config doctor warns when this is explicitly set. Remove the key; dispatch timeouts are governed by the agent host. Scheduled for removal in a future release."),
1388
1388
  vetoPriority: exports_external.boolean().default(true),
1389
1389
  requireAllMembers: exports_external.boolean().default(false).describe("When true, submit_council_verdicts rejects if fewer than 5 member verdicts are provided. Equivalent to minimumMembers: 5."),
1390
- minimumMembers: exports_external.number().int().min(1).max(5).default(3).describe("Minimum distinct council member verdicts required for synthesis. Default 3. Set to 1 to disable quorum enforcement. requireAllMembers: true overrides this to 5 (stricter constraint wins)."),
1391
- escalateOnMaxRounds: exports_external.string().optional().describe("Optional webhook URL or handler name invoked when maxRounds is reached without APPROVE. Declared for forward compatibility; no behavior is implemented yet."),
1390
+ minimumMembers: exports_external.number().int().min(1).max(5).default(3).describe("Minimum distinct council member verdicts required for synthesis (task/phase councils only \u2014 the final council uses finalCompletionPolicy). Default 3. Set to 1 to disable quorum enforcement. requireAllMembers: true overrides this to 5 (stricter constraint wins)."),
1391
+ escalateOnMaxRounds: exports_external.string().optional().describe("Optional webhook URL or handler name declared for escalation when maxRounds is reached without APPROVE. REMAINS INERT \u2014 no handler or webhook execution exists or is added; config doctor warns when it is set (issue #1650). Max-rounds exhaustion emits a durable structured event and a user escalation message; wiring real outbound escalation requires a separate security review."),
1392
1392
  phaseConcernsAllowComplete: exports_external.boolean().default(true).describe("When true, a phase-level council CONCERNS verdict with only MEDIUM/LOW findings does NOT block phase completion \u2014 the advisory notes are logged as warnings and the phase proceeds. When false, CONCERNS blocks like REJECT. Note: HIGH/CRITICAL findings from CONCERNS members are always promoted to requiredFixes and block at the tool level regardless of this setting. Default: true."),
1393
+ finalCompletionPolicy: exports_external.object({
1394
+ mode: exports_external.enum(["all_required", "quorum"]).default("all_required").describe("'all_required' (default) preserves the exact legacy final council: all five canonical roles, five distinct members, zero absentees. 'quorum' is an explicit weakening that accepts a bounded minimum of distinct canonical members instead of all five."),
1395
+ minimumMembers: exports_external.number().int().min(3).max(5).optional().describe('Required when mode is "quorum": minimum distinct canonical council members (3\u20135) that must vote. Unknown, duplicate, and cross-swarm identities never count.')
1396
+ }).default({ mode: "all_required" }).superRefine((policy, ctx) => {
1397
+ if (policy.mode === "quorum" && policy.minimumMembers === undefined) {
1398
+ ctx.addIssue({
1399
+ code: "custom",
1400
+ path: ["minimumMembers"],
1401
+ message: 'finalCompletionPolicy.mode "quorum" requires an explicit minimumMembers between 3 and 5.'
1402
+ });
1403
+ }
1404
+ }).describe("Final-council completion policy. Missing/default is all_required (strict five-member requirement). The normalized policy participates in the council policy digest, so any change invalidates previously accepted final-council evidence."),
1405
+ freshnessMaxAgeHours: exports_external.number().int().min(1).max(720).default(24).describe("Maximum age (hours, 1\u2013720) of phase-council, architecture-supervisor, and final-council evidence. Default 24 preserves prior behavior. Part of the council policy digest, so changing it invalidates prior council evidence."),
1393
1406
  general: GeneralCouncilConfigSchema.optional()
1394
1407
  }).strict();
1395
1408
  PrMonitorConfigSchema = exports_external.object({
@@ -6,10 +6,10 @@ import {
6
6
  } from "./index-ae75rja9.js";
7
7
  import {
8
8
  resolveKnowledgeStoreDir
9
- } from "./index-w0cj7zyd.js";
9
+ } from "./index-j2ckvbx7.js";
10
10
  import {
11
11
  atomicWriteFile
12
- } from "./index-qbpxrw95.js";
12
+ } from "./index-1kq3x5q6.js";
13
13
  import {
14
14
  init_knowledge_types,
15
15
  isActiveStatus
@@ -709,7 +709,7 @@ async function applyConfidenceFloorAction(directory, touched, options) {
709
709
  const {
710
710
  readAuthoritativeKnowledgeCounterRollups,
711
711
  effectiveRetrievalOutcomes
712
- } = await import("./knowledge-events-4y9kk2xe.js");
712
+ } = await import("./knowledge-events-8abttcnt.js");
713
713
  const rollups = await readAuthoritativeKnowledgeCounterRollups(directory);
714
714
  const flagIds = new Set;
715
715
  for (const e of atFloor) {
@@ -776,11 +776,11 @@ async function applyConfidenceFloorAction(directory, touched, options) {
776
776
  });
777
777
  }
778
778
  if (action === "quarantine" && toQuarantine.length > 0) {
779
- const { quarantineEntry } = await import("./knowledge-validator-584ga9fb.js");
780
- const { KnowledgeConfigSchema } = await import("./schema-yb3pvhcs.js");
779
+ const { quarantineEntry } = await import("./knowledge-validator-fn2myc73.js");
780
+ const { KnowledgeConfigSchema } = await import("./schema-jhz9hme9.js");
781
781
  let config;
782
782
  try {
783
- const { loadPluginConfigWithMeta } = await import("./index-twwb61bh.js");
783
+ const { loadPluginConfigWithMeta } = await import("./index-4zevsvaa.js");
784
784
  const { config: loadedConfig } = loadPluginConfigWithMeta(directory);
785
785
  config = KnowledgeConfigSchema.parse(loadedConfig.knowledge ?? {});
786
786
  } catch {
@@ -1,11 +1,11 @@
1
1
  // @bun
2
2
  import {
3
3
  loadPluginConfigWithMeta
4
- } from "./index-1c9mfnj0.js";
4
+ } from "./index-fypq68yn.js";
5
5
  import {
6
6
  KnowledgeConfigSchema,
7
7
  init_schema
8
- } from "./index-h8qed3pr.js";
8
+ } from "./index-7ph5pz77.js";
9
9
  import {
10
10
  validateSwarmPath
11
11
  } from "./index-w8pgjr75.js";
@@ -14,16 +14,16 @@ import {
14
14
  } from "./index-ae75rja9.js";
15
15
  import {
16
16
  resolveKnowledgeStoreDir
17
- } from "./index-w0cj7zyd.js";
17
+ } from "./index-j2ckvbx7.js";
18
18
  import {
19
19
  atomicWriteFile
20
- } from "./index-qbpxrw95.js";
20
+ } from "./index-1kq3x5q6.js";
21
21
  import {
22
22
  assertProjectRoot
23
- } from "./index-bghwrr59.js";
23
+ } from "./index-6q35swn2.js";
24
24
  import {
25
25
  emit
26
- } from "./index-qyvjp0bq.js";
26
+ } from "./index-q81s0m8k.js";
27
27
  import {
28
28
  require_proper_lockfile
29
29
  } from "./index-7g4c7s5r.js";
@@ -2693,7 +2693,7 @@ async function applyKnowledgeVerdictFeedback(directory, options) {
2693
2693
  }
2694
2694
  let bumps = 0;
2695
2695
  if (deltas.length > 0) {
2696
- const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-kc8dwc14.js");
2696
+ const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-a5mzf986.js");
2697
2697
  bumps = await bumpKnowledgeConfidenceBatch(directory, deltas, options?.floorOptions);
2698
2698
  }
2699
2699
  return {
@@ -92,7 +92,7 @@ var _internals = {
92
92
  symlinkSync: fs.symlinkSync
93
93
  },
94
94
  writeScopeToDisk: async (directory, taskId, files) => {
95
- const { writeScopeToDisk: realWrite } = await import("./scope-persistence-bxwjk9rc.js");
95
+ const { writeScopeToDisk: realWrite } = await import("./scope-persistence-ykswenxj.js");
96
96
  return realWrite(directory, taskId, files);
97
97
  },
98
98
  writeLaneProfileToDisk: async (_worktreePath, _laneIndex, _envOverrides) => {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./index-zj6t9zgx.js";
8
8
  import {
9
9
  withEvidenceLock
10
- } from "./index-bghwrr59.js";
10
+ } from "./index-6q35swn2.js";
11
11
  import {
12
12
  exports_external,
13
13
  init_zod
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  init_loader,
4
4
  loadPluginConfigWithMeta
5
- } from "./index-1c9mfnj0.js";
5
+ } from "./index-fypq68yn.js";
6
6
  import {
7
7
  init_schema
8
- } from "./index-h8qed3pr.js";
8
+ } from "./index-7ph5pz77.js";
9
9
  import {
10
10
  DEFAULT_WORKTREE_ISOLATION_CONFIG,
11
11
  init_constants
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  authorizeCuration
4
- } from "./index-e1hjd15c.js";
4
+ } from "./index-463msy1e.js";
5
5
  import {
6
6
  findNearDuplicate,
7
7
  inferTags,
@@ -9,13 +9,13 @@ import {
9
9
  resolveSwarmKnowledgePath,
10
10
  resolveSwarmRejectedPath,
11
11
  transactKnowledge
12
- } from "./index-vacrzesw.js";
12
+ } from "./index-923phxsp.js";
13
13
  import {
14
14
  resolveKnowledgeStoreDir
15
- } from "./index-w0cj7zyd.js";
15
+ } from "./index-j2ckvbx7.js";
16
16
  import {
17
17
  atomicWriteFile
18
- } from "./index-qbpxrw95.js";
18
+ } from "./index-1kq3x5q6.js";
19
19
  import {
20
20
  require_proper_lockfile
21
21
  } from "./index-7g4c7s5r.js";
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  readKnowledge,
4
4
  transactKnowledge
5
- } from "./index-vacrzesw.js";
5
+ } from "./index-923phxsp.js";
6
6
  import {
7
7
  init_git_executable,
8
8
  resolveGitExecutableAsync
9
9
  } from "./index-9e6fdz2h.js";
10
10
  import {
11
11
  resolveKnowledgeStoreDir
12
- } from "./index-w0cj7zyd.js";
12
+ } from "./index-j2ckvbx7.js";
13
13
  import {
14
14
  init_knowledge_types,
15
15
  isActiveStatus
@@ -6,7 +6,7 @@ import {
6
6
  PluginConfigSchema,
7
7
  init_schema,
8
8
  resolveExternalSkillsConfig
9
- } from "./index-h8qed3pr.js";
9
+ } from "./index-7ph5pz77.js";
10
10
  import {
11
11
  GIT_BINARY_ENV_VAR,
12
12
  init_git_executable
@@ -788,4 +788,4 @@ var PlanSchema = exports_external.object({
788
788
  execution_profile: ExecutionProfileSchema.optional()
789
789
  });
790
790
 
791
- export { ExecutionProfileSchema, TaskStatusSchema, TaskSizeSchema, PhaseStatusSchema, MigrationStatusSchema, TaskSchema, PhaseSchema, PlanSchema, loadPluginConfig, loadPluginConfigWithMeta, getSafeDefaultConfigLoadResult, loadPluginConfigWithMetaAsync, loadAgentPrompt, exports_loader, init_loader };
791
+ export { loadPluginConfig, loadPluginConfigWithMeta, getSafeDefaultConfigLoadResult, loadPluginConfigWithMetaAsync, loadAgentPrompt, exports_loader, init_loader, ExecutionProfileSchema, TaskStatusSchema, TaskSizeSchema, PhaseStatusSchema, MigrationStatusSchema, TaskSchema, PhaseSchema, PlanSchema };
@@ -6,7 +6,7 @@ import {
6
6
  PluginConfigSchema,
7
7
  init_schema,
8
8
  stripKnownSwarmPrefix
9
- } from "./index-h8qed3pr.js";
9
+ } from "./index-7ph5pz77.js";
10
10
  import {
11
11
  ALL_AGENT_NAMES,
12
12
  init_constants
@@ -100,6 +100,59 @@ function emitObjectTypeMismatch(key, value, findings) {
100
100
  function isPlainObject(value) {
101
101
  return typeof value === "object" && value !== null && !Array.isArray(value);
102
102
  }
103
+ function collectRawCouncilPolicyFindings(directory) {
104
+ const findings = [];
105
+ const { userConfigPath, projectConfigPath } = getConfigPaths(directory);
106
+ for (const configPath of [userConfigPath, projectConfigPath]) {
107
+ if (!fs.existsSync(configPath))
108
+ continue;
109
+ try {
110
+ const stats = fs.statSync(configPath);
111
+ if (stats.size > CONFIG_DOCTOR_MAX_CONFIG_FILE_BYTES)
112
+ continue;
113
+ const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
114
+ if (!isPlainObject(raw) || raw.council === undefined)
115
+ continue;
116
+ if (!isPlainObject(raw.council))
117
+ continue;
118
+ const council = raw.council;
119
+ if ("parallelTimeoutMs" in council) {
120
+ findings.push({
121
+ id: "council-parallel-timeout-deprecated",
122
+ title: "Deprecated and inert: council.parallelTimeoutMs",
123
+ description: 'Config field "council.parallelTimeoutMs" (in ' + configPath + ") is deprecated and inert: no runtime consumer exists and no timeout is enforced. It is accepted only for parse compatibility. Remove the key \u2014 dispatch timeouts are governed by the agent host. The field is scheduled for removal in a future release.",
124
+ severity: "warn",
125
+ path: "council.parallelTimeoutMs",
126
+ currentValue: council.parallelTimeoutMs,
127
+ autoFixable: false
128
+ });
129
+ }
130
+ if ("escalateOnMaxRounds" in council) {
131
+ findings.push({
132
+ id: "council-escalate-inert",
133
+ title: "Inert: council.escalateOnMaxRounds",
134
+ description: 'Config field "council.escalateOnMaxRounds" (in ' + configPath + ") is set, but the handler/webhook remains INERT in this release: no handler, webhook, or outbound execution exists or was added (issue #1650). Max-rounds exhaustion emits a durable structured event (.swarm/council/events/max-rounds-exhaustion.jsonl) and a user escalation message instead; the run stays fail-closed. Wiring real outbound escalation requires a separate security review.",
135
+ severity: "warn",
136
+ path: "council.escalateOnMaxRounds",
137
+ currentValue: "[redacted: handler/webhook strings are never echoed]",
138
+ autoFixable: false
139
+ });
140
+ }
141
+ if (isPlainObject(council.finalCompletionPolicy) && council.finalCompletionPolicy.mode === "quorum") {
142
+ findings.push({
143
+ id: "council-final-quorum-weaker",
144
+ title: 'council.finalCompletionPolicy.mode "quorum" weakens the strict final council',
145
+ description: "Final-council completion is configured in quorum mode (in " + configPath + "): a bounded minimum of distinct canonical members can accept the project instead of the strict default (all five canonical roles, zero absentees). This is weaker than the strict default. Any change to this policy invalidates previously accepted final-council evidence.",
146
+ severity: "warn",
147
+ path: "council.finalCompletionPolicy",
148
+ currentValue: council.finalCompletionPolicy,
149
+ autoFixable: false
150
+ });
151
+ }
152
+ } catch {}
153
+ }
154
+ return findings;
155
+ }
103
156
  function collectRawGatesConfigFindings(directory) {
104
157
  const findings = [];
105
158
  const { userConfigPath, projectConfigPath } = getConfigPaths(directory);
@@ -1234,6 +1287,7 @@ function runConfigDoctor(config, directory) {
1234
1287
  const findings = [];
1235
1288
  walkConfigAndValidate(config, "", findings);
1236
1289
  findings.push(...collectRawGatesConfigFindings(directory));
1290
+ findings.push(...collectRawCouncilPolicyFindings(directory));
1237
1291
  findings.push(...collectRawStrictSectionFindings(directory));
1238
1292
  findings.push(...collectRawValueConstraintFindings(directory));
1239
1293
  findings.push(...collectRawAutoReviewCompatibilityFindings(directory));
@@ -12,14 +12,14 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-7x00nx8m.js";
15
+ } from "./index-n96nt4gb.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
19
19
  isInDeclaredScope,
20
20
  redactPath,
21
21
  redactShellCommand
22
- } from "./index-xz0ccakc.js";
22
+ } from "./index-3377n9qp.js";
23
23
 
24
24
  // src/services/guardrail-explain-service.ts
25
25
  import path from "path";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  atomicWriteFile
4
- } from "./index-qbpxrw95.js";
4
+ } from "./index-1kq3x5q6.js";
5
5
  import {
6
6
  init_logger,
7
7
  warn