opencode-swarm 7.197.2 → 7.198.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +10 -11
  2. package/.opencode/skills/swarm-pr-review/references/lane-output-recoverability.md +4 -2
  3. package/.opencode/skills/swarm-pr-review/references/parser-dry-run.md +5 -2
  4. package/.opencode/skills/swarm-pr-review/references/prompt-templates.md +57 -42
  5. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  6. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  7. package/dist/agents/critic.d.ts +1 -1
  8. package/dist/cli/{auto-checkpoint-6qp3jn7f.js → auto-checkpoint-3mmvyd3g.js} +8 -8
  9. package/dist/cli/{capability-probe-rty1315z.js → capability-probe-dwqn2609.js} +1 -1
  10. package/dist/cli/{checkpoint-qe10m65d.js → checkpoint-e43t6f2b.js} +16 -16
  11. package/dist/cli/{coder-settlement-ry7zxj9v.js → coder-settlement-kb2827hb.js} +12 -12
  12. package/dist/cli/{config-doctor-vcjcdf3f.js → config-doctor-06jwks34.js} +15 -15
  13. package/dist/cli/{core-czytse6q.js → core-sqqs0k1q.js} +3 -3
  14. package/dist/cli/{curation-policy-5hm6328s.js → curation-policy-m8ng2vm5.js} +6 -6
  15. package/dist/cli/{curator-0wa5gjc8.js → curator-dm4nm95q.js} +43 -43
  16. package/dist/cli/{curator-drift-vf2egpr8.js → curator-drift-0502msxm.js} +8 -8
  17. package/dist/cli/curator-llm-factory-54v33gz2.js +82 -0
  18. package/dist/cli/{doctor-knowledge-receipt-phase-id-tkjsgcp6.js → doctor-knowledge-receipt-phase-id-zm56sg6v.js} +8 -8
  19. package/dist/cli/{evidence-summary-service-p9wx1m45.js → evidence-summary-service-ejmywz5a.js} +19 -19
  20. package/dist/cli/{gate-evidence-bfmc23yw.js → gate-evidence-rqev8f8q.js} +7 -7
  21. package/dist/cli/guardrail-explain-0z5cyah2.js +83 -0
  22. package/dist/cli/{guardrail-log-dtkzgxz8.js → guardrail-log-yjbyf5sc.js} +7 -7
  23. package/dist/cli/{guardrail-reset-pbcfymhq.js → guardrail-reset-4zrb40d3.js} +43 -43
  24. package/dist/cli/{hive-promoter-g2sngbc0.js → hive-promoter-swgaebae.js} +43 -43
  25. package/dist/cli/{index-xa7ak8ss.js → index-006b796n.js} +5 -5
  26. package/dist/cli/{index-n0ghdmvx.js → index-0caf038s.js} +7 -7
  27. package/dist/cli/{index-7rtq2t5n.js → index-4s3770gs.js} +3 -3
  28. package/dist/cli/{index-evpq5mqt.js → index-715d35v8.js} +2 -2
  29. package/dist/cli/{index-q267bpej.js → index-730ajx2g.js} +2 -2
  30. package/dist/cli/{index-c5xvm318.js → index-76mg98ac.js} +1 -1
  31. package/dist/cli/{index-dfrcc46h.js → index-84r9rydf.js} +2 -2
  32. package/dist/cli/{index-xmbtwtgw.js → index-89j5h1j9.js} +1 -1
  33. package/dist/cli/{index-bzfn85kq.js → index-8mrentmw.js} +8 -5
  34. package/dist/cli/{index-ptxtqhwv.js → index-9628q121.js} +72 -8
  35. package/dist/cli/{index-6ayj4y71.js → index-9fdddqtn.js} +4 -4
  36. package/dist/cli/{index-zh1dmz46.js → index-a71vh07f.js} +3 -3
  37. package/dist/cli/{index-fz45trs6.js → index-c4fkfbfz.js} +3 -3
  38. package/dist/cli/{index-hy2fqapm.js → index-d31b2zvf.js} +1 -1
  39. package/dist/cli/{index-6183at3v.js → index-e4hj8r57.js} +2 -2
  40. package/dist/cli/{index-xg9t03dg.js → index-f0hpw2f8.js} +43 -43
  41. package/dist/cli/{index-2vtr85p8.js → index-fd105270.js} +5 -5
  42. package/dist/cli/{index-pnbcknzr.js → index-fv6eab1b.js} +8 -3
  43. package/dist/cli/{index-ztchs2p8.js → index-gp9rhg5m.js} +1 -1
  44. package/dist/cli/{index-mk15vyfe.js → index-gyz3kvvm.js} +6 -6
  45. package/dist/cli/{index-n06vxt1k.js → index-hh0at0tt.js} +13 -3
  46. package/dist/cli/{index-nhz85frs.js → index-jj9kzye7.js} +3 -3
  47. package/dist/cli/{index-h5g0nyy8.js → index-kpngvt4q.js} +4 -4
  48. package/dist/cli/{index-4gmxdkcd.js → index-mjmsq8t7.js} +2 -2
  49. package/dist/cli/{index-gw7nkn2q.js → index-ndvnxxbm.js} +5 -5
  50. package/dist/cli/{index-rbevpmff.js → index-p44wgqhb.js} +173 -120
  51. package/dist/cli/{index-yf2z4j7s.js → index-p4xmq6aa.js} +1 -1
  52. package/dist/cli/{index-15j2cze3.js → index-pfwhq6p5.js} +45 -45
  53. package/dist/cli/{index-afrdvad3.js → index-pkdyys9n.js} +53 -11
  54. package/dist/cli/{index-5fzc5krd.js → index-pn6xqhp2.js} +2 -2
  55. package/dist/cli/{index-z7zk3enh.js → index-q9zg0ckd.js} +5 -5
  56. package/dist/cli/{index-ypkfhqbc.js → index-qg6qn99c.js} +7 -7
  57. package/dist/cli/{index-xq0w60za.js → index-qnkk509y.js} +6 -6
  58. package/dist/cli/{index-sx4brx0w.js → index-r5f6q2v4.js} +4 -4
  59. package/dist/cli/{index-23kb8srf.js → index-rj4a1206.js} +7 -7
  60. package/dist/cli/{index-e21b8sjj.js → index-rjcxke49.js} +3 -3
  61. package/dist/cli/{index-crz772sx.js → index-rqxwv4q5.js} +1 -1
  62. package/dist/cli/{index-ntr6263n.js → index-rvn7wbj9.js} +2 -2
  63. package/dist/cli/{index-necqa5bj.js → index-t7qgt5yk.js} +2 -2
  64. package/dist/cli/{index-gc0aeth5.js → index-tdpfecs3.js} +2 -2
  65. package/dist/cli/{index-ghckhk16.js → index-v30zmakk.js} +2 -2
  66. package/dist/cli/{index-1x9ybm51.js → index-vhcgtmpg.js} +11 -11
  67. package/dist/cli/{index-tbm7q03h.js → index-wemkaxc2.js} +17 -10
  68. package/dist/cli/{index-app2rmxv.js → index-wrn4khfb.js} +1 -1
  69. package/dist/cli/{index-kphy4we7.js → index-xez06sc1.js} +1 -1
  70. package/dist/cli/{index-j8t1g5qd.js → index-xt4q610f.js} +1 -1
  71. package/dist/cli/{index-ry5g9s8d.js → index-yk1vnpzx.js} +1 -1
  72. package/dist/cli/{index-65n2ccy2.js → index-z127nfqd.js} +4 -4
  73. package/dist/cli/index.js +44 -44
  74. package/dist/cli/{knowledge-escalator-pad570yc.js → knowledge-escalator-rjcg7k03.js} +14 -14
  75. package/dist/cli/{knowledge-events-gx3x4wfs.js → knowledge-events-rnf6kgdn.js} +12 -12
  76. package/dist/cli/{knowledge-link-8bn2b7vr.js → knowledge-link-5qt3pe5v.js} +5 -5
  77. package/dist/cli/{knowledge-store-me6bx879.js → knowledge-store-gm8j7krw.js} +6 -6
  78. package/dist/cli/{knowledge-validator-qykag9de.js → knowledge-validator-98456296.js} +8 -8
  79. package/dist/cli/{mcp-bn8qx2m6.js → mcp-ngs269rj.js} +1 -1
  80. package/dist/cli/{model-preflight-5pjf9jd2.js → model-preflight-g7yhtdrp.js} +43 -43
  81. package/dist/cli/{pending-delegations-5w5f18wt.js → pending-delegations-dv9j31c3.js} +12 -12
  82. package/dist/cli/{pr-subscriptions-psecfgcz.js → pr-subscriptions-ya88xjph.js} +12 -12
  83. package/dist/cli/{pr-workflow-gate-g8q09z1c.js → pr-workflow-gate-wzatxzej.js} +45 -43
  84. package/dist/cli/{runner-rt2smh14.js → runner-rwya5yhg.js} +6 -6
  85. package/dist/cli/{scan-cursor-w0w1axgk.js → scan-cursor-aygzmf34.js} +7 -7
  86. package/dist/cli/{schema-yav9fk87.js → schema-eppnz9vx.js} +5 -1
  87. package/dist/cli/{scope-persistence-4wakfabk.js → scope-persistence-v5bs3jqt.js} +15 -15
  88. package/dist/cli/{server-y8c23gcg.js → server-t5vtzm9e.js} +43 -43
  89. package/dist/cli/{skill-generator-ddrq8e52.js → skill-generator-mvm55q78.js} +16 -16
  90. package/dist/cli/{snapshot-coordination-init-ckz8tz0b.js → snapshot-coordination-init-ne7q5x7q.js} +43 -43
  91. package/dist/cli/{speckit-checkoff-789etrtx.js → speckit-checkoff-pctc95h1.js} +4 -4
  92. package/dist/cli/{telemetry-vapc5q4p.js → telemetry-t3425cht.js} +1 -1
  93. package/dist/cli/{workspace-snapshot-e3kw9kpg.js → workspace-snapshot-bst64vey.js} +3 -3
  94. package/dist/cli/{worktree-collision-ownership-yv7y35wq.js → worktree-collision-ownership-cgvdsx3n.js} +13 -13
  95. package/dist/cli/{worktree-isolation-5tebr6z1.js → worktree-isolation-afq0jh6n.js} +43 -43
  96. package/dist/config/loader.d.ts +31 -1
  97. package/dist/config/schema.d.ts +17 -0
  98. package/dist/hooks/pr-workflow-gate.d.ts +9 -0
  99. package/dist/index.js +52 -40
  100. package/dist/pr-review/legacy-transcript-adapter.d.ts +18 -0
  101. package/dist/sandbox/capability-probe.d.ts +1 -1
  102. package/dist/sdd/effective-spec.d.ts +48 -5
  103. package/dist/tools/dispatch-lanes.d.ts +18 -0
  104. package/opencode-swarm.schema.json +14 -0
  105. package/package.json +1 -1
  106. package/dist/cli/curator-llm-factory-k4f4c61r.js +0 -82
  107. package/dist/cli/guardrail-explain-vv4c5b39.js +0 -83
@@ -283,7 +283,7 @@ var SWARM_TEMP_GRAMMARS = [
283
283
  "src/services/skill-consolidation.ts (pre-#2035; migrated-to=src/services/skill-consolidation.ts:atomicWrite)",
284
284
  "src/services/skill-generator.ts (pre-#2035; migrated-to=src/services/skill-generator.ts:atomicWrite)",
285
285
  "src/tools/spec-write.ts:98",
286
- "src/sdd/effective-spec.ts:1377",
286
+ "src/sdd/effective-spec.ts:1509",
287
287
  "src/background/lane-output-store.ts:353",
288
288
  "src/background/pending-delegations.ts:1520",
289
289
  "src/background/delegation-health.ts:391",
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-evpq5mqt.js";
4
+ } from "./index-715d35v8.js";
5
5
  import {
6
6
  handleGuardrailLog
7
- } from "./index-ztchs2p8.js";
7
+ } from "./index-gp9rhg5m.js";
8
8
  import {
9
9
  COMMAND_REGISTRY,
10
10
  DEFAULT_CI_DEADLINE_MS,
@@ -97,77 +97,77 @@ import {
97
97
  handleWriteRetroCommand,
98
98
  normalizeSwarmCommandInput,
99
99
  resolveCommand
100
- } from "./index-rbevpmff.js";
101
- import"./index-nhz85frs.js";
102
- import"./index-n06vxt1k.js";
103
- import"./index-xa7ak8ss.js";
100
+ } from "./index-p44wgqhb.js";
101
+ import"./index-jj9kzye7.js";
102
+ import"./index-hh0at0tt.js";
103
+ import"./index-006b796n.js";
104
104
  import"./index-j2vv0h13.js";
105
- import"./index-c5xvm318.js";
106
- import"./index-necqa5bj.js";
105
+ import"./index-76mg98ac.js";
106
+ import"./index-t7qgt5yk.js";
107
107
  import"./index-txdagbh7.js";
108
- import"./index-5fzc5krd.js";
108
+ import"./index-pn6xqhp2.js";
109
109
  import"./index-rdec0y3z.js";
110
- import"./index-fz45trs6.js";
111
- import"./index-23kb8srf.js";
112
- import"./index-6ayj4y71.js";
113
- import"./index-mk15vyfe.js";
114
- import"./index-ghckhk16.js";
115
- import"./index-ypkfhqbc.js";
110
+ import"./index-c4fkfbfz.js";
111
+ import"./index-rj4a1206.js";
112
+ import"./index-9fdddqtn.js";
113
+ import"./index-gyz3kvvm.js";
114
+ import"./index-v30zmakk.js";
115
+ import"./index-qg6qn99c.js";
116
116
  import"./index-cjapb4hy.js";
117
- import"./index-dfrcc46h.js";
117
+ import"./index-84r9rydf.js";
118
118
  import"./index-pt7h91zc.js";
119
119
  import"./index-q7sjgr1y.js";
120
- import"./index-xq0w60za.js";
121
- import"./index-1x9ybm51.js";
120
+ import"./index-qnkk509y.js";
121
+ import"./index-vhcgtmpg.js";
122
122
  import"./index-6b295cas.js";
123
123
  import"./index-9nyqt3kb.js";
124
- import"./index-ptxtqhwv.js";
124
+ import"./index-9628q121.js";
125
125
  import"./index-v3bmwmqw.js";
126
- import"./index-ntr6263n.js";
127
- import"./index-65n2ccy2.js";
128
- import"./index-e21b8sjj.js";
126
+ import"./index-rvn7wbj9.js";
127
+ import"./index-z127nfqd.js";
128
+ import"./index-rjcxke49.js";
129
129
  import"./index-g4fs6z4e.js";
130
- import"./index-tbm7q03h.js";
131
- import"./index-h5g0nyy8.js";
132
- import"./index-2vtr85p8.js";
130
+ import"./index-wemkaxc2.js";
131
+ import"./index-kpngvt4q.js";
132
+ import"./index-fd105270.js";
133
133
  import"./index-m9zzj4ee.js";
134
- import"./index-kphy4we7.js";
134
+ import"./index-xez06sc1.js";
135
135
  import"./index-2s7dvzff.js";
136
- import"./index-sx4brx0w.js";
137
- import"./index-hy2fqapm.js";
136
+ import"./index-r5f6q2v4.js";
137
+ import"./index-d31b2zvf.js";
138
138
  import"./index-rtry5xyf.js";
139
- import"./index-q267bpej.js";
139
+ import"./index-730ajx2g.js";
140
140
  import"./index-g22dps7x.js";
141
141
  import"./index-0725jpp7.js";
142
- import"./index-z7zk3enh.js";
143
- import"./index-gw7nkn2q.js";
144
- import"./index-6183at3v.js";
145
- import"./index-j8t1g5qd.js";
146
- import"./index-crz772sx.js";
147
- import"./index-app2rmxv.js";
142
+ import"./index-q9zg0ckd.js";
143
+ import"./index-ndvnxxbm.js";
144
+ import"./index-e4hj8r57.js";
145
+ import"./index-xt4q610f.js";
146
+ import"./index-rqxwv4q5.js";
147
+ import"./index-wrn4khfb.js";
148
148
  import"./index-ry16d01s.js";
149
149
  import"./index-rdm3px0g.js";
150
150
  import"./index-7pmbnjvj.js";
151
- import"./index-gc0aeth5.js";
152
- import"./index-n0ghdmvx.js";
151
+ import"./index-tdpfecs3.js";
152
+ import"./index-0caf038s.js";
153
153
  import"./index-vzm6zre7.js";
154
154
  import"./index-ae75rja9.js";
155
- import"./index-ry5g9s8d.js";
156
- import"./index-4gmxdkcd.js";
157
- import"./index-xmbtwtgw.js";
155
+ import"./index-yk1vnpzx.js";
156
+ import"./index-mjmsq8t7.js";
157
+ import"./index-89j5h1j9.js";
158
158
  import"./index-t7hmqgjy.js";
159
- import"./index-7rtq2t5n.js";
159
+ import"./index-4s3770gs.js";
160
160
  import"./index-fzpt2djt.js";
161
161
  import"./index-ejhxgyvm.js";
162
162
  import"./index-7g4c7s5r.js";
163
- import"./index-yf2z4j7s.js";
163
+ import"./index-p4xmq6aa.js";
164
164
  import"./index-gx2vp8gx.js";
165
- import"./index-afrdvad3.js";
165
+ import"./index-pkdyys9n.js";
166
166
  import"./index-zxdawwc7.js";
167
167
  import {
168
168
  init_schema,
169
169
  stripKnownSwarmPrefix
170
- } from "./index-pnbcknzr.js";
170
+ } from "./index-fv6eab1b.js";
171
171
  import {
172
172
  AGENT_TOOL_MAP,
173
173
  ORCHESTRATOR_NAME,
@@ -176,7 +176,7 @@ import {
176
176
  import"./index-bk5tah7q.js";
177
177
  import"./index-gknz3bv1.js";
178
178
  import"./index-zpsr8rpc.js";
179
- import"./index-bzfn85kq.js";
179
+ import"./index-8mrentmw.js";
180
180
  import"./index-9rwhas09.js";
181
181
  import"./index-zgwm4ryv.js";
182
182
  import"./index-a76rekgs.js";
@@ -11,11 +11,12 @@ import {
11
11
  GATE_CONFIG_KNOWN_SECTION_KEYS,
12
12
  GateConfigSchema,
13
13
  PluginConfigSchema,
14
+ SDD_SOURCES,
14
15
  findRetiredEpicConfigKeys,
15
16
  init_schema,
16
17
  resolveExternalSkillsConfig,
17
18
  retiredEpicKeyReplacement
18
- } from "./index-pnbcknzr.js";
19
+ } from "./index-fv6eab1b.js";
19
20
  import {
20
21
  DangerousMergeKeyError,
21
22
  MAX_MERGE_DEPTH,
@@ -318,6 +319,7 @@ var init_sanitize_malformed_values = () => {};
318
319
  var exports_loader = {};
319
320
  __export(exports_loader, {
320
321
  resetConfigAdvisoryDedup: () => resetConfigAdvisoryDedup,
322
+ readSddSourceSetting: () => readSddSourceSetting,
321
323
  loadPluginConfigWithMetaAsync: () => loadPluginConfigWithMetaAsync,
322
324
  loadPluginConfigWithMeta: () => loadPluginConfigWithMeta,
323
325
  loadPluginConfig: () => loadPluginConfig,
@@ -346,18 +348,21 @@ function gatesAdvisoryWarn(message, data) {
346
348
  function getUserConfigDir() {
347
349
  return process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config");
348
350
  }
349
- function loadRawConfigFromPath(configPath) {
351
+ function loadRawConfigFromPath(configPath, silent = false) {
352
+ const warn = silent ? () => {
353
+ return;
354
+ } : advisoryWarn;
350
355
  try {
351
356
  const stats = fs.statSync(configPath);
352
357
  if (stats.size > MAX_CONFIG_FILE_BYTES) {
353
- advisoryWarn(`[opencode-swarm] Config file too large (max 100 KB): ${configPath}`);
354
- advisoryWarn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config file exceeds size limit. Falling back to safe defaults with guardrails ENABLED.");
358
+ warn(`[opencode-swarm] Config file too large (max 100 KB): ${configPath}`);
359
+ warn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config file exceeds size limit. Falling back to safe defaults with guardrails ENABLED.");
355
360
  return { config: null, fileExisted: true, hadError: true };
356
361
  }
357
362
  const content = fs.readFileSync(configPath, "utf-8");
358
363
  if (content.length > MAX_CONFIG_FILE_BYTES) {
359
- advisoryWarn(`[opencode-swarm] Config file too large after read (max 100 KB): ${configPath}`);
360
- advisoryWarn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config file exceeds size limit. Falling back to safe defaults with guardrails ENABLED.");
364
+ warn(`[opencode-swarm] Config file too large after read (max 100 KB): ${configPath}`);
365
+ warn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config file exceeds size limit. Falling back to safe defaults with guardrails ENABLED.");
361
366
  return { config: null, fileExisted: true, hadError: true };
362
367
  }
363
368
  let sanitizedContent = content;
@@ -366,8 +371,8 @@ function loadRawConfigFromPath(configPath) {
366
371
  }
367
372
  const rawConfig = JSON.parse(sanitizedContent);
368
373
  if (typeof rawConfig !== "object" || rawConfig === null || Array.isArray(rawConfig)) {
369
- advisoryWarn(`[opencode-swarm] Invalid config at ${configPath}: expected an object`);
370
- advisoryWarn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config format invalid. Falling back to safe defaults with guardrails ENABLED.");
374
+ warn(`[opencode-swarm] Invalid config at ${configPath}: expected an object`);
375
+ warn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config format invalid. Falling back to safe defaults with guardrails ENABLED.");
371
376
  return { config: null, fileExisted: true, hadError: true };
372
377
  }
373
378
  return {
@@ -379,8 +384,8 @@ function loadRawConfigFromPath(configPath) {
379
384
  const isFileNotFoundError = error instanceof Error && "code" in error && error.code === "ENOENT";
380
385
  if (!isFileNotFoundError) {
381
386
  const errorMessage = error instanceof Error ? error.message : String(error);
382
- advisoryWarn(`[opencode-swarm] \u26A0\uFE0F CONFIG LOAD FAILURE \u2014 config exists at ${configPath} but could not be loaded: ${errorMessage}`);
383
- advisoryWarn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config load failed. Falling back to safe defaults with guardrails ENABLED.");
387
+ warn(`[opencode-swarm] \u26A0\uFE0F CONFIG LOAD FAILURE \u2014 config exists at ${configPath} but could not be loaded: ${errorMessage}`);
388
+ warn("[opencode-swarm] \u26A0\uFE0F SECURITY: Config load failed. Falling back to safe defaults with guardrails ENABLED.");
384
389
  return { config: null, fileExisted: true, hadError: true };
385
390
  }
386
391
  return { config: null, fileExisted: false, hadError: false };
@@ -774,6 +779,43 @@ function loadPluginConfig(directory) {
774
779
  const configHadErrors = userResult.hadError || projectResult.hadError;
775
780
  return buildConfigWithMeta(userResult.config, projectResult.config, loadedFromFile, configHadErrors).config;
776
781
  }
782
+ function readSddSourceSetting(directory) {
783
+ const candidates = [
784
+ ["project", path.join(directory, ".opencode", CONFIG_FILENAME)],
785
+ ["user", path.join(getUserConfigDir(), "opencode", CONFIG_FILENAME)]
786
+ ];
787
+ let rejected;
788
+ for (const [origin, configPath] of candidates) {
789
+ const { config } = loadRawConfigFromPath(configPath, true);
790
+ const sdd = config?.sdd;
791
+ if (typeof sdd !== "object" || sdd === null || Array.isArray(sdd)) {
792
+ if (sdd !== undefined) {
793
+ rejected ??= {
794
+ value: describeRejectedSddValue(sdd),
795
+ configPath,
796
+ field: "sdd"
797
+ };
798
+ }
799
+ continue;
800
+ }
801
+ const raw = sdd.source;
802
+ if (raw === undefined)
803
+ continue;
804
+ if (typeof raw === "string" && SDD_SOURCES.includes(raw)) {
805
+ return { source: raw, origin, rejected };
806
+ }
807
+ rejected ??= {
808
+ value: describeRejectedSddValue(raw),
809
+ configPath,
810
+ field: "sdd.source"
811
+ };
812
+ }
813
+ return { source: undefined, rejected };
814
+ }
815
+ function describeRejectedSddValue(value) {
816
+ const text = typeof value === "string" ? value : JSON.stringify(value) ?? "";
817
+ return text.slice(0, 40);
818
+ }
777
819
  function loadPluginConfigWithMeta(directory) {
778
820
  const userConfigPath = path.join(getUserConfigDir(), "opencode", CONFIG_FILENAME);
779
821
  const projectConfigPath = path.join(directory, ".opencode", CONFIG_FILENAME);
@@ -922,4 +964,4 @@ var init_loader = __esm(() => {
922
964
  };
923
965
  });
924
966
 
925
- export { resolveEpicConfig, isEpicModeConfigEnabled, isEpicCochangeConfigEnabled, hasLegacyEpicConfig, migrateLegacyEpicConfig, legacyEpicIssuePath, init_config, loadPluginConfig, loadPluginConfigWithMeta, loadGateOverrides, resetConfigAdvisoryDedup, getSafeDefaultConfigLoadResult, loadPluginConfigWithMetaAsync, loadAgentPrompt, exports_loader, init_loader };
967
+ export { resolveEpicConfig, isEpicModeConfigEnabled, isEpicCochangeConfigEnabled, hasLegacyEpicConfig, migrateLegacyEpicConfig, legacyEpicIssuePath, init_config, loadPluginConfig, readSddSourceSetting, loadPluginConfigWithMeta, loadGateOverrides, resetConfigAdvisoryDedup, getSafeDefaultConfigLoadResult, loadPluginConfigWithMetaAsync, loadAgentPrompt, exports_loader, init_loader };
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  readKnowledge,
4
4
  transactKnowledge
5
- } from "./index-n0ghdmvx.js";
5
+ } from "./index-0caf038s.js";
6
6
  import {
7
7
  resolveKnowledgeStoreDir
8
- } from "./index-ry5g9s8d.js";
8
+ } from "./index-yk1vnpzx.js";
9
9
  import {
10
10
  init_git_executable,
11
11
  resolveGitExecutableAsync
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  computePlanStructureHash
4
- } from "./index-gw7nkn2q.js";
4
+ } from "./index-ndvnxxbm.js";
5
5
  import {
6
6
  appendCoreEventSync
7
- } from "./index-6183at3v.js";
7
+ } from "./index-e4hj8r57.js";
8
8
  import {
9
9
  deleteCoordinationState,
10
10
  importCoordinationOnce,
@@ -12,10 +12,10 @@ import {
12
12
  transitionCoordinationState,
13
13
  transitionCoordinationStateWithinTransaction,
14
14
  withCoordinationTransaction
15
- } from "./index-crz772sx.js";
15
+ } from "./index-rqxwv4q5.js";
16
16
  import {
17
17
  getProjectDb
18
- } from "./index-app2rmxv.js";
18
+ } from "./index-wrn4khfb.js";
19
19
  import {
20
20
  canonicalExistingFilesystemPath,
21
21
  legacyCanonicalExistingFilesystemPath
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  atomicWriteSwarmFile,
34
34
  atomicWriteSwarmFileSync
35
- } from "./index-yf2z4j7s.js";
35
+ } from "./index-p4xmq6aa.js";
36
36
  import {
37
37
  PlanSchema
38
38
  } from "./index-gx2vp8gx.js";
@@ -1,27 +1,27 @@
1
1
  // @bun
2
2
  import {
3
3
  validateSwarmPath
4
- } from "./index-kphy4we7.js";
4
+ } from "./index-xez06sc1.js";
5
5
  import {
6
6
  deleteCoordinationState,
7
7
  importCoordinationOnce,
8
8
  listCoordinationStates,
9
9
  transitionCoordinationState,
10
10
  withCoordinationTransaction
11
- } from "./index-crz772sx.js";
11
+ } from "./index-rqxwv4q5.js";
12
12
  import {
13
13
  getProjectDb,
14
14
  projectDbExists
15
- } from "./index-app2rmxv.js";
15
+ } from "./index-wrn4khfb.js";
16
16
  import {
17
17
  observeStoreHealth
18
- } from "./index-gc0aeth5.js";
18
+ } from "./index-tdpfecs3.js";
19
19
  import {
20
20
  withEvidenceLock
21
- } from "./index-xmbtwtgw.js";
21
+ } from "./index-89j5h1j9.js";
22
22
  import {
23
23
  telemetry
24
- } from "./index-7rtq2t5n.js";
24
+ } from "./index-4s3770gs.js";
25
25
  import {
26
26
  canonicalRootKey,
27
27
  canonicalRootKeyFresh,
@@ -29,7 +29,7 @@ import {
29
29
  } from "./index-fzpt2djt.js";
30
30
  import {
31
31
  atomicWriteSwarmFileSync
32
- } from "./index-yf2z4j7s.js";
32
+ } from "./index-p4xmq6aa.js";
33
33
  import {
34
34
  exports_external,
35
35
  init_zod
@@ -4,7 +4,7 @@ import {
4
4
  ensureTaskCheckpointReceipt,
5
5
  loadPlan,
6
6
  updateTaskCheckpointReceipt
7
- } from "./index-1x9ybm51.js";
7
+ } from "./index-vhcgtmpg.js";
8
8
  import {
9
9
  tool
10
10
  } from "./index-9nyqt3kb.js";
@@ -17,13 +17,13 @@ import {
17
17
  } from "./index-g4fs6z4e.js";
18
18
  import {
19
19
  validateSwarmPath
20
- } from "./index-kphy4we7.js";
20
+ } from "./index-xez06sc1.js";
21
21
  import {
22
22
  readLedgerEvents
23
- } from "./index-gw7nkn2q.js";
23
+ } from "./index-ndvnxxbm.js";
24
24
  import {
25
25
  appendCoreEventSync
26
- } from "./index-6183at3v.js";
26
+ } from "./index-e4hj8r57.js";
27
27
  import {
28
28
  derivePlanId,
29
29
  derivePlanIdentityHash
@@ -38,10 +38,10 @@ import {
38
38
  } from "./index-ejhxgyvm.js";
39
39
  import {
40
40
  atomicWriteSwarmFileSync
41
- } from "./index-yf2z4j7s.js";
41
+ } from "./index-p4xmq6aa.js";
42
42
  import {
43
43
  loadPluginConfigWithMeta
44
- } from "./index-afrdvad3.js";
44
+ } from "./index-pkdyys9n.js";
45
45
  import {
46
46
  init_git_executable,
47
47
  resolveGitExecutable
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  authorizeCuration
4
- } from "./index-hy2fqapm.js";
4
+ } from "./index-d31b2zvf.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-n0ghdmvx.js";
12
+ } from "./index-0caf038s.js";
13
13
  import {
14
14
  resolveKnowledgeStoreDir
15
- } from "./index-ry5g9s8d.js";
15
+ } from "./index-yk1vnpzx.js";
16
16
  import {
17
17
  atomicWriteFile
18
- } from "./index-4gmxdkcd.js";
18
+ } from "./index-mjmsq8t7.js";
19
19
  import {
20
20
  require_proper_lockfile
21
21
  } from "./index-7g4c7s5r.js";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  captureWorkspaceSnapshotAsync,
4
4
  changedFilesSinceSnapshotAsync
5
- } from "./index-ghckhk16.js";
5
+ } from "./index-v30zmakk.js";
6
6
  import {
7
7
  removeWorktreeProvisioningOwner
8
- } from "./index-dfrcc46h.js";
8
+ } from "./index-84r9rydf.js";
9
9
  import {
10
10
  SOURCE_WORKTREE_GONE_STAGE,
11
11
  ensureTaskGateRequirementsReceiptForSettledTransition,
@@ -14,13 +14,13 @@ import {
14
14
  reconcileLandedMerge,
15
15
  withTaskEvidenceTransaction,
16
16
  writeWorkflowWalFile
17
- } from "./index-65n2ccy2.js";
17
+ } from "./index-z127nfqd.js";
18
18
  import {
19
19
  validateSwarmPath
20
- } from "./index-kphy4we7.js";
20
+ } from "./index-xez06sc1.js";
21
21
  import {
22
22
  appendCoreEventSync
23
- } from "./index-6183at3v.js";
23
+ } from "./index-e4hj8r57.js";
24
24
  import {
25
25
  canonicalRootKeyFresh
26
26
  } from "./index-fzpt2djt.js";
@@ -512,7 +512,7 @@ async function cleanupRecoveredWorktree(directory, descriptor, options) {
512
512
  awaitingMergeByCallID,
513
513
  cleanupStandardWorktreeForCallId,
514
514
  standardWorktreeByCallID
515
- } = await import("./worktree-isolation-5tebr6z1.js");
515
+ } = await import("./worktree-isolation-afq0jh6n.js");
516
516
  standardWorktreeByCallID.delete(descriptor.callID);
517
517
  if (hasResidue)
518
518
  awaitingMergeByCallID.set(descriptor.callID, {
@@ -648,7 +648,7 @@ async function recoverCoderSettlement(directory, taskId) {
648
648
  awaitingMergeByCallID,
649
649
  finishStandardWorktreeDispatch,
650
650
  standardWorktreeByCallID
651
- } = await import("./worktree-isolation-5tebr6z1.js");
651
+ } = await import("./worktree-isolation-afq0jh6n.js");
652
652
  const descriptor = wal.worktree;
653
653
  const reconstructedDispatch = {
654
654
  callID: descriptor.callID,
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  validateSwarmPath
4
- } from "./index-kphy4we7.js";
4
+ } from "./index-xez06sc1.js";
5
5
  import {
6
6
  bunSpawn
7
7
  } from "./index-2s7dvzff.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./index-fzpt2djt.js";
11
11
  import {
12
12
  atomicWriteSwarmFileSync
13
- } from "./index-yf2z4j7s.js";
13
+ } from "./index-p4xmq6aa.js";
14
14
  import {
15
15
  advisoryWarn,
16
16
  init_git_executable,
@@ -242,7 +242,7 @@ var _internals2 = {
242
242
  symlinkSync: fs2.symlinkSync
243
243
  },
244
244
  writeScopeToDisk: async (directory, taskId, files) => {
245
- const { writeScopeToDisk: realWrite } = await import("./scope-persistence-4wakfabk.js");
245
+ const { writeScopeToDisk: realWrite } = await import("./scope-persistence-v5bs3jqt.js");
246
246
  return realWrite(directory, taskId, files);
247
247
  },
248
248
  writeLaneProfileToDisk: async (_worktreePath, _laneIndex, _envOverrides) => {
@@ -4,7 +4,7 @@ import {
4
4
  getProjectDb,
5
5
  projectDbExists,
6
6
  withImmediateTransaction
7
- } from "./index-app2rmxv.js";
7
+ } from "./index-wrn4khfb.js";
8
8
 
9
9
  // src/db/coordination-store.ts
10
10
  import { createHash } from "crypto";
@@ -5,11 +5,11 @@ import {
5
5
  import {
6
6
  atomicWriteFileAnyRoot,
7
7
  atomicWriteSwarmFileSync
8
- } from "./index-yf2z4j7s.js";
8
+ } from "./index-p4xmq6aa.js";
9
9
  import {
10
10
  init_loader,
11
11
  loadPluginConfig
12
- } from "./index-afrdvad3.js";
12
+ } from "./index-pkdyys9n.js";
13
13
  import {
14
14
  init_logger,
15
15
  log,
@@ -9,10 +9,10 @@ import {
9
9
  } from "./index-txdagbh7.js";
10
10
  import {
11
11
  atomicWriteFile
12
- } from "./index-4gmxdkcd.js";
12
+ } from "./index-mjmsq8t7.js";
13
13
  import {
14
14
  withEvidenceLock
15
- } from "./index-xmbtwtgw.js";
15
+ } from "./index-89j5h1j9.js";
16
16
  import {
17
17
  assertProjectRoot
18
18
  } from "./index-t7hmqgjy.js";
@@ -3,13 +3,13 @@ import {
3
3
  pseudonymousRef,
4
4
  resolveLineageSalt,
5
5
  telemetry
6
- } from "./index-7rtq2t5n.js";
6
+ } from "./index-4s3770gs.js";
7
7
  import {
8
8
  canonicalRootKeyFresh
9
9
  } from "./index-fzpt2djt.js";
10
10
  import {
11
11
  atomicWriteSwarmFile
12
- } from "./index-yf2z4j7s.js";
12
+ } from "./index-p4xmq6aa.js";
13
13
 
14
14
  // src/health/learning-health.ts
15
15
  import { promises as fs } from "fs";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  validateSwarmPath
4
- } from "./index-kphy4we7.js";
4
+ } from "./index-xez06sc1.js";
5
5
  import {
6
6
  bunSpawn
7
7
  } from "./index-2s7dvzff.js";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./index-fzpt2djt.js";
12
12
  import {
13
13
  atomicWriteSwarmFile
14
- } from "./index-yf2z4j7s.js";
14
+ } from "./index-p4xmq6aa.js";
15
15
  import {
16
16
  init_git_executable,
17
17
  resolveGitExecutable
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-6b295cas.js";
5
5
  import {
6
6
  readEffectiveSpecSync
7
- } from "./index-ptxtqhwv.js";
7
+ } from "./index-9628q121.js";
8
8
  import {
9
9
  _internals,
10
10
  clearWorktreeMergeStatus,
@@ -20,7 +20,7 @@ import {
20
20
  estimateTokens,
21
21
  readSwarmFileAsync,
22
22
  validateSwarmPath
23
- } from "./index-kphy4we7.js";
23
+ } from "./index-xez06sc1.js";
24
24
  import {
25
25
  bunHash,
26
26
  bunWrite
@@ -43,10 +43,10 @@ import {
43
43
  replayFromLedgerWithStatus,
44
44
  takeSnapshotEvent,
45
45
  takeSnapshotWithRetry
46
- } from "./index-gw7nkn2q.js";
46
+ } from "./index-ndvnxxbm.js";
47
47
  import {
48
48
  appendCoreEventSync
49
- } from "./index-6183at3v.js";
49
+ } from "./index-e4hj8r57.js";
50
50
  import {
51
51
  deleteCoordinationStateWithinTransaction,
52
52
  getCoordinationStateRaw,
@@ -55,13 +55,13 @@ import {
55
55
  transitionCoordinationState,
56
56
  transitionCoordinationStateWithinTransaction,
57
57
  withCoordinationTransaction
58
- } from "./index-crz772sx.js";
58
+ } from "./index-rqxwv4q5.js";
59
59
  import {
60
60
  DURABILITY_CLASSES,
61
61
  getProjectDb,
62
62
  projectDbExists,
63
63
  withDurabilityClass
64
- } from "./index-app2rmxv.js";
64
+ } from "./index-wrn4khfb.js";
65
65
  import {
66
66
  derivePlanId,
67
67
  derivePlanIdentityHash
@@ -71,7 +71,7 @@ import {
71
71
  } from "./index-t7hmqgjy.js";
72
72
  import {
73
73
  emit
74
- } from "./index-7rtq2t5n.js";
74
+ } from "./index-4s3770gs.js";
75
75
  import {
76
76
  canonicalRootKeyFresh
77
77
  } from "./index-fzpt2djt.js";
@@ -82,7 +82,7 @@ import {
82
82
  atomicWriteSwarmFileSync,
83
83
  invalidateCachedArtifact,
84
84
  readCachedParsedFile
85
- } from "./index-yf2z4j7s.js";
85
+ } from "./index-p4xmq6aa.js";
86
86
  import {
87
87
  PlanSchema,
88
88
  normalizeCurrentPhaseInPlace,
@@ -93,7 +93,7 @@ import {
93
93
  init_loader,
94
94
  isEpicModeConfigEnabled,
95
95
  loadPluginConfigWithMeta
96
- } from "./index-afrdvad3.js";
96
+ } from "./index-pkdyys9n.js";
97
97
  import {
98
98
  exports_external,
99
99
  init_zod
@@ -2664,7 +2664,7 @@ ${markdown}`;
2664
2664
  }
2665
2665
  }
2666
2666
  async function defaultMaybeSaveAutoCheckpoint(directory, plan) {
2667
- const { maybeSaveAutoCheckpoint } = await import("./auto-checkpoint-6qp3jn7f.js");
2667
+ const { maybeSaveAutoCheckpoint } = await import("./auto-checkpoint-3mmvyd3g.js");
2668
2668
  return maybeSaveAutoCheckpoint(directory, plan);
2669
2669
  }
2670
2670
  async function updateTaskStatus(directory, taskId, status, options) {
@@ -2740,7 +2740,7 @@ async function updateTaskStatus(directory, taskId, status, options) {
2740
2740
  if (status === "completed") {
2741
2741
  try {
2742
2742
  const completedTask = updatedPlan.phases.flatMap((phase) => phase.tasks).find((candidate) => candidate.id === taskId);
2743
- const { maybePropagateSpeckitCheckoff } = await import("./speckit-checkoff-789etrtx.js");
2743
+ const { maybePropagateSpeckitCheckoff } = await import("./speckit-checkoff-pctc95h1.js");
2744
2744
  await maybePropagateSpeckitCheckoff(directory, {
2745
2745
  taskId,
2746
2746
  frRefs: completedTask?.fr_refs ?? [],