opencode-swarm 7.135.1 → 7.135.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 (99) hide show
  1. package/.opencode/skills/critic-gate/SKILL.md +10 -0
  2. package/.opencode/skills/swarm-pr-feedback/SKILL.md +24 -21
  3. package/.opencode/skills/swarm-pr-review/SKILL.md +55 -42
  4. package/dist/agents/explorer.d.ts +1 -1
  5. package/dist/agents/index.d.ts +12 -0
  6. package/dist/background/candidate-contract.d.ts +113 -0
  7. package/dist/background/candidate-parser.d.ts +8 -29
  8. package/dist/background/pr-review-trigger-contract.d.ts +197 -0
  9. package/dist/background/workspace-snapshot.d.ts +26 -0
  10. package/dist/cli/{config-doctor-6398t3a6.js → config-doctor-4nznqeca.js} +3 -2
  11. package/dist/cli/{core-9876t6cs.js → core-4z1s2ak1.js} +3 -2
  12. package/dist/cli/{curation-policy-f7qz4tez.js → curation-policy-81m14519.js} +5 -5
  13. package/dist/cli/{curator-drift-9q6f85bm.js → curator-drift-jpap6hv4.js} +2 -2
  14. package/dist/cli/{curator-fjhyezyx.js → curator-e0z5gcww.js} +28 -27
  15. package/dist/cli/curator-llm-factory-fem13y9n.js +57 -0
  16. package/dist/cli/{dispatch-gxbeb2ps.js → dispatch-b1fge4xk.js} +2 -2
  17. package/dist/cli/{evidence-summary-service-0cczdmjv.js → evidence-summary-service-w006jnpg.js} +6 -6
  18. package/dist/cli/{explorer-jp0nen03.js → explorer-15gqzxh8.js} +1 -1
  19. package/dist/cli/{gate-evidence-8zrwdj69.js → gate-evidence-aenyz6vt.js} +4 -4
  20. package/dist/cli/guardrail-explain-wgaj23hd.js +58 -0
  21. package/dist/cli/{guardrail-log-bd45kw0x.js → guardrail-log-04p1z1vt.js} +5 -4
  22. package/dist/cli/{hive-promoter-f2yh22m1.js → hive-promoter-k345z42k.js} +28 -27
  23. package/dist/cli/{index-wdkkf3xg.js → index-168phrs7.js} +12 -10
  24. package/dist/cli/{index-xhpmagdm.js → index-30pg2rs3.js} +2 -2
  25. package/dist/cli/{index-bjrkg4tc.js → index-36v55ryg.js} +2 -2
  26. package/dist/cli/index-3jcyn8g6.js +1219 -0
  27. package/dist/cli/{index-7an2qn0s.js → index-45t7w06b.js} +2 -2
  28. package/dist/cli/{index-2ghkk9ve.js → index-4qzeef9h.js} +1 -1
  29. package/dist/cli/{index-4pdrmemy.js → index-5436jxnw.js} +2 -2
  30. package/dist/cli/{index-5vp9gka3.js → index-a01r818w.js} +5 -3
  31. package/dist/cli/{index-nbnqf4fj.js → index-bcmrg4t4.js} +1 -1
  32. package/dist/cli/{index-fwkqq9mq.js → index-c9ddxv4k.js} +57 -8
  33. package/dist/cli/{index-ens0gt38.js → index-cggqh2dz.js} +7 -7
  34. package/dist/cli/{index-vxv732ex.js → index-dg1njnms.js} +7 -4
  35. package/dist/cli/{index-aky90eqz.js → index-dwargd10.js} +11596 -10043
  36. package/dist/cli/{index-yhba8swx.js → index-dzyjb33e.js} +1 -1
  37. package/dist/cli/{index-xg9repnx.js → index-ey29aap6.js} +1 -1
  38. package/dist/cli/{index-5wx8wdxg.js → index-f52jt0am.js} +5 -5
  39. package/dist/cli/{index-2nqsr1dx.js → index-gxxxmajn.js} +4 -4
  40. package/dist/cli/{index-jtshf1pd.js → index-kb7qy7an.js} +4 -2
  41. package/dist/cli/{index-b7p0mp2q.js → index-mrtms113.js} +4 -4
  42. package/dist/cli/{index-dzaarxhg.js → index-p5kr35wh.js} +8 -1210
  43. package/dist/cli/{index-j89zmcpx.js → index-p9ngg568.js} +6 -6
  44. package/dist/cli/{index-g1drmgxe.js → index-rv7s2k9y.js} +3 -3
  45. package/dist/cli/{index-z085b4ka.js → index-tcn457d5.js} +1 -1
  46. package/dist/cli/{index-fpkb3mw1.js → index-vg3yx648.js} +1 -1
  47. package/dist/cli/{index-13xxjfhn.js → index-vm4xw9z3.js} +1 -1
  48. package/dist/cli/{index-jxchddjk.js → index-wygxzvtf.js} +6 -4
  49. package/dist/cli/{index-b4z7s917.js → index-x20cgr2q.js} +1 -1
  50. package/dist/cli/{index-qe3v54nb.js → index-y111zefa.js} +64 -23
  51. package/dist/cli/{index-w80r3axq.js → index-y47crdg9.js} +34 -32
  52. package/dist/cli/{index-3nasn371.js → index-y6a7gjtj.js} +126 -42
  53. package/dist/cli/{index-247b1c1m.js → index-yf30m841.js} +3 -3
  54. package/dist/cli/index.js +31 -29
  55. package/dist/cli/{knowledge-escalator-4tp3yy7e.js → knowledge-escalator-42ecv7m3.js} +6 -6
  56. package/dist/cli/{knowledge-events-7854gb3p.js → knowledge-events-zhna7v3g.js} +4 -4
  57. package/dist/cli/{knowledge-link-etrfntkd.js → knowledge-link-mm1w967j.js} +3 -3
  58. package/dist/cli/{knowledge-store-cxnr6v01.js → knowledge-store-56jcfc5k.js} +4 -4
  59. package/dist/cli/{knowledge-validator-3n5t55qy.js → knowledge-validator-8zk0pnb6.js} +7 -7
  60. package/dist/cli/{pending-delegations-4z3tkkct.js → pending-delegations-qajsxct0.js} +4 -4
  61. package/dist/cli/{pr-subscriptions-29j794kd.js → pr-subscriptions-qhr41epq.js} +4 -4
  62. package/dist/cli/{scan-cursor-0cexjh3b.js → scan-cursor-h3ndxd41.js} +5 -5
  63. package/dist/cli/{schema-rs5a7ywx.js → schema-r6wmd7zp.js} +2 -1
  64. package/dist/cli/{scope-persistence-1vsnkmm4.js → scope-persistence-h2fpgxww.js} +3 -3
  65. package/dist/cli/{skill-generator-n0h9n0zd.js → skill-generator-12cftsx4.js} +8 -8
  66. package/dist/cli/{workspace-snapshot-9h5za0s6.js → workspace-snapshot-jmyamqnv.js} +6 -1
  67. package/dist/cli/{worktree-collision-ownership-dtwr0xj4.js → worktree-collision-ownership-13btcj9g.js} +5 -5
  68. package/dist/commands/approve-plan-critic.d.ts +21 -0
  69. package/dist/commands/registry.d.ts +9 -1
  70. package/dist/config/cache-paths.d.ts +48 -0
  71. package/dist/config/constants.d.ts +18 -0
  72. package/dist/config/host-path.d.ts +95 -0
  73. package/dist/config/lane-context.d.ts +117 -0
  74. package/dist/config/lane-permissions.d.ts +277 -0
  75. package/dist/config/schema.d.ts +10 -0
  76. package/dist/config/swarm-branch.d.ts +130 -0
  77. package/dist/hooks/delegation-gate.d.ts +42 -1
  78. package/dist/hooks/pr-workflow-gate.d.ts +30 -4
  79. package/dist/hooks/repo-graph-builder.d.ts +18 -0
  80. package/dist/hooks/skill-propagation-gate.d.ts +10 -0
  81. package/dist/index.js +459 -443
  82. package/dist/memory/schema.d.ts +4 -4
  83. package/dist/tools/approve-plan-critic.d.ts +5 -0
  84. package/dist/tools/convene-council.d.ts +3 -3
  85. package/dist/tools/dispatch-lanes.d.ts +65 -7
  86. package/dist/tools/index.d.ts +1 -0
  87. package/dist/tools/manifest.d.ts +1 -0
  88. package/dist/tools/repo-graph/builder.d.ts +20 -2
  89. package/dist/tools/repo-graph/incremental.d.ts +18 -1
  90. package/dist/tools/repo-graph/ontology.d.ts +8 -0
  91. package/dist/tools/repo-graph/types.d.ts +62 -1
  92. package/dist/tools/repo-graph.d.ts +1 -1
  93. package/dist/tools/submit-phase-council-verdicts.d.ts +3 -3
  94. package/dist/tools/tool-metadata.d.ts +4 -0
  95. package/dist/tools/write-final-council-evidence.d.ts +3 -3
  96. package/dist/tools/write-pr-review-trigger-eval.d.ts +34 -63
  97. package/package.json +1 -1
  98. package/dist/cli/curator-llm-factory-wr3zmy2c.js +0 -56
  99. package/dist/cli/guardrail-explain-g1s89b3e.js +0 -57
package/dist/cli/index.js CHANGED
@@ -6,60 +6,62 @@ import {
6
6
  getPluginConfigDir,
7
7
  getPluginLockFilePaths,
8
8
  resolveCommand
9
- } from "./index-aky90eqz.js";
10
- import"./index-13xxjfhn.js";
11
- import"./index-jtshf1pd.js";
12
- import"./index-5vp9gka3.js";
13
- import"./index-ens0gt38.js";
9
+ } from "./index-dwargd10.js";
10
+ import"./index-vm4xw9z3.js";
11
+ import"./index-kb7qy7an.js";
12
+ import"./index-a01r818w.js";
13
+ import"./index-cggqh2dz.js";
14
14
  import"./index-4905hd2m.js";
15
15
  import"./index-134d35c1.js";
16
- import"./index-247b1c1m.js";
17
- import"./index-5wx8wdxg.js";
18
- import"./index-bjrkg4tc.js";
19
- import"./index-vxv732ex.js";
16
+ import"./index-yf30m841.js";
17
+ import"./index-f52jt0am.js";
18
+ import"./index-36v55ryg.js";
19
+ import"./index-dg1njnms.js";
20
20
  import"./index-c8s9a3zh.js";
21
21
  import"./index-9ss2m4rs.js";
22
- import"./index-b7p0mp2q.js";
23
- import"./index-z085b4ka.js";
24
- import"./index-2nqsr1dx.js";
25
- import"./index-xhpmagdm.js";
22
+ import"./index-y6a7gjtj.js";
23
+ import"./index-mrtms113.js";
24
+ import"./index-gxxxmajn.js";
25
+ import"./index-30pg2rs3.js";
26
26
  import"./index-rtry5xyf.js";
27
- import"./index-j89zmcpx.js";
28
- import"./index-g1drmgxe.js";
27
+ import"./index-p9ngg568.js";
28
+ import"./index-rv7s2k9y.js";
29
29
  import"./index-ae75rja9.js";
30
- import"./index-yhba8swx.js";
31
- import"./index-xg9repnx.js";
32
- import"./index-jxchddjk.js";
30
+ import"./index-dzyjb33e.js";
31
+ import"./index-ey29aap6.js";
32
+ import"./index-wygxzvtf.js";
33
33
  import"./index-k5jrywpr.js";
34
34
  import"./index-n832052r.js";
35
35
  import {
36
- DEFAULT_AGENT_CONFIGS,
37
- init_constants,
38
36
  init_package,
39
37
  package_default
40
- } from "./index-dzaarxhg.js";
38
+ } from "./index-p5kr35wh.js";
41
39
  import"./index-bk5tah7q.js";
42
40
  import"./index-8fwhhayc.js";
43
41
  import"./index-q1exe2b3.js";
44
- import"./index-fpkb3mw1.js";
42
+ import"./index-tcn457d5.js";
43
+ import"./index-vg3yx648.js";
45
44
  import"./index-wxyxf0bd.js";
46
45
  import"./index-1kz6da87.js";
47
- import"./index-b4z7s917.js";
46
+ import"./index-x20cgr2q.js";
48
47
  import"./index-b8zgtz81.js";
49
- import"./index-fwkqq9mq.js";
48
+ import"./index-c9ddxv4k.js";
50
49
  import"./index-4rhhvd1a.js";
51
- import"./index-7an2qn0s.js";
52
- import"./index-2ghkk9ve.js";
50
+ import {
51
+ DEFAULT_AGENT_CONFIGS,
52
+ init_constants
53
+ } from "./index-3jcyn8g6.js";
54
+ import"./index-45t7w06b.js";
55
+ import"./index-4qzeef9h.js";
53
56
  import"./index-fsrp8wp3.js";
54
57
  import"./index-09b9zncg.js";
55
58
  import"./index-7g4c7s5r.js";
56
- import"./index-7a2hm51h.js";
57
59
  import"./index-bpmtbmy9.js";
60
+ import"./index-7a2hm51h.js";
58
61
  import"./index-z6xqpmqg.js";
59
62
  import"./index-zjygnfay.js";
60
- import"./index-qe3v54nb.js";
63
+ import"./index-y111zefa.js";
61
64
  import"./index-zgwm4ryv.js";
62
- import"./index-3nasn371.js";
63
65
  import"./index-a76rekgs.js";
64
66
 
65
67
  // src/cli/index.ts
@@ -8,18 +8,18 @@ import {
8
8
  maybeEscalateOnViolation,
9
9
  maybeQuarantineOnContradiction,
10
10
  readRecentEscalations
11
- } from "./index-5wx8wdxg.js";
12
- import"./index-j89zmcpx.js";
13
- import"./index-g1drmgxe.js";
11
+ } from "./index-f52jt0am.js";
12
+ import"./index-p9ngg568.js";
13
+ import"./index-rv7s2k9y.js";
14
14
  import"./index-ae75rja9.js";
15
- import"./index-yhba8swx.js";
16
- import"./index-xg9repnx.js";
15
+ import"./index-dzyjb33e.js";
16
+ import"./index-ey29aap6.js";
17
17
  import"./index-bk5tah7q.js";
18
18
  import"./index-fsrp8wp3.js";
19
19
  import"./index-09b9zncg.js";
20
20
  import"./index-7g4c7s5r.js";
21
21
  import"./index-7a2hm51h.js";
22
- import"./index-qe3v54nb.js";
22
+ import"./index-y111zefa.js";
23
23
  import"./index-zgwm4ryv.js";
24
24
  import"./index-a76rekgs.js";
25
25
  export {
@@ -26,15 +26,15 @@ import {
26
26
  resolveKnowledgeCounterBaselinePath,
27
27
  resolveKnowledgeEventsPath,
28
28
  resolveLegacyApplicationLogPath
29
- } from "./index-g1drmgxe.js";
29
+ } from "./index-rv7s2k9y.js";
30
30
  import"./index-ae75rja9.js";
31
- import"./index-yhba8swx.js";
32
- import"./index-xg9repnx.js";
31
+ import"./index-dzyjb33e.js";
32
+ import"./index-ey29aap6.js";
33
33
  import"./index-fsrp8wp3.js";
34
34
  import"./index-09b9zncg.js";
35
35
  import"./index-7g4c7s5r.js";
36
36
  import"./index-7a2hm51h.js";
37
- import"./index-qe3v54nb.js";
37
+ import"./index-y111zefa.js";
38
38
  import"./index-zgwm4ryv.js";
39
39
  import"./index-a76rekgs.js";
40
40
  export {
@@ -12,13 +12,13 @@ import {
12
12
  resolveLinkDir,
13
13
  sanitizeLinkId,
14
14
  writeLinkPointer
15
- } from "./index-yhba8swx.js";
16
- import"./index-xg9repnx.js";
15
+ } from "./index-dzyjb33e.js";
16
+ import"./index-ey29aap6.js";
17
17
  import"./index-fsrp8wp3.js";
18
18
  import"./index-09b9zncg.js";
19
19
  import"./index-7g4c7s5r.js";
20
20
  import"./index-7a2hm51h.js";
21
- import"./index-qe3v54nb.js";
21
+ import"./index-y111zefa.js";
22
22
  import"./index-zgwm4ryv.js";
23
23
  import"./index-a76rekgs.js";
24
24
  export {
@@ -41,18 +41,18 @@ import {
41
41
  transactKnowledge,
42
42
  transactKnowledgeWithCas,
43
43
  wordBigrams
44
- } from "./index-j89zmcpx.js";
44
+ } from "./index-p9ngg568.js";
45
45
  import {
46
46
  resolveHiveDataDir
47
47
  } from "./index-ae75rja9.js";
48
- import"./index-yhba8swx.js";
49
- import"./index-xg9repnx.js";
48
+ import"./index-dzyjb33e.js";
49
+ import"./index-ey29aap6.js";
50
50
  import"./index-bk5tah7q.js";
51
51
  import"./index-fsrp8wp3.js";
52
52
  import"./index-09b9zncg.js";
53
53
  import"./index-7g4c7s5r.js";
54
54
  import"./index-7a2hm51h.js";
55
- import"./index-qe3v54nb.js";
55
+ import"./index-y111zefa.js";
56
56
  import"./index-zgwm4ryv.js";
57
57
  import"./index-a76rekgs.js";
58
58
  export {
@@ -23,20 +23,20 @@ import {
23
23
  validateLesson,
24
24
  validateSkillCandidatePath,
25
25
  validateSkillPath
26
- } from "./index-2nqsr1dx.js";
27
- import"./index-xhpmagdm.js";
26
+ } from "./index-gxxxmajn.js";
27
+ import"./index-30pg2rs3.js";
28
28
  import"./index-rtry5xyf.js";
29
- import"./index-j89zmcpx.js";
30
- import"./index-g1drmgxe.js";
29
+ import"./index-p9ngg568.js";
30
+ import"./index-rv7s2k9y.js";
31
31
  import"./index-ae75rja9.js";
32
- import"./index-yhba8swx.js";
33
- import"./index-xg9repnx.js";
32
+ import"./index-dzyjb33e.js";
33
+ import"./index-ey29aap6.js";
34
34
  import"./index-bk5tah7q.js";
35
35
  import"./index-fsrp8wp3.js";
36
36
  import"./index-09b9zncg.js";
37
37
  import"./index-7g4c7s5r.js";
38
38
  import"./index-7a2hm51h.js";
39
- import"./index-qe3v54nb.js";
39
+ import"./index-y111zefa.js";
40
40
  import"./index-zgwm4ryv.js";
41
41
  import"./index-a76rekgs.js";
42
42
  export {
@@ -40,16 +40,16 @@ import {
40
40
  sweepStaleDelegations,
41
41
  updateCoderSettlement,
42
42
  writeDelegationFallback
43
- } from "./index-7an2qn0s.js";
44
- import"./index-2ghkk9ve.js";
43
+ } from "./index-45t7w06b.js";
44
+ import"./index-4qzeef9h.js";
45
45
  import"./index-fsrp8wp3.js";
46
46
  import"./index-09b9zncg.js";
47
47
  import"./index-7g4c7s5r.js";
48
- import"./index-7a2hm51h.js";
49
48
  import"./index-bpmtbmy9.js";
49
+ import"./index-7a2hm51h.js";
50
50
  import"./index-z6xqpmqg.js";
51
51
  import"./index-zjygnfay.js";
52
- import"./index-qe3v54nb.js";
52
+ import"./index-y111zefa.js";
53
53
  import"./index-zgwm4ryv.js";
54
54
  import"./index-a76rekgs.js";
55
55
  export {
@@ -9,16 +9,16 @@ import {
9
9
  sweepStale,
10
10
  unsubscribe,
11
11
  updateSnapshot
12
- } from "./index-z085b4ka.js";
13
- import"./index-2ghkk9ve.js";
12
+ } from "./index-tcn457d5.js";
13
+ import"./index-4qzeef9h.js";
14
14
  import"./index-fsrp8wp3.js";
15
15
  import"./index-09b9zncg.js";
16
16
  import"./index-7g4c7s5r.js";
17
- import"./index-7a2hm51h.js";
18
17
  import"./index-bpmtbmy9.js";
18
+ import"./index-7a2hm51h.js";
19
19
  import"./index-z6xqpmqg.js";
20
20
  import"./index-zjygnfay.js";
21
- import"./index-qe3v54nb.js";
21
+ import"./index-y111zefa.js";
22
22
  import"./index-zgwm4ryv.js";
23
23
  import"./index-a76rekgs.js";
24
24
  export {
@@ -4,17 +4,17 @@ import {
4
4
  alreadyCuratedThisGeneration,
5
5
  claimNextScanBatch,
6
6
  getScanStatus
7
- } from "./index-bjrkg4tc.js";
8
- import"./index-j89zmcpx.js";
7
+ } from "./index-36v55ryg.js";
8
+ import"./index-p9ngg568.js";
9
9
  import"./index-ae75rja9.js";
10
- import"./index-yhba8swx.js";
11
- import"./index-xg9repnx.js";
10
+ import"./index-dzyjb33e.js";
11
+ import"./index-ey29aap6.js";
12
12
  import"./index-bk5tah7q.js";
13
13
  import"./index-fsrp8wp3.js";
14
14
  import"./index-09b9zncg.js";
15
15
  import"./index-7g4c7s5r.js";
16
16
  import"./index-7a2hm51h.js";
17
- import"./index-qe3v54nb.js";
17
+ import"./index-y111zefa.js";
18
18
  import"./index-zgwm4ryv.js";
19
19
  import"./index-a76rekgs.js";
20
20
  export {
@@ -93,8 +93,9 @@ import {
93
93
  resolveGeneratedAgentRole,
94
94
  resolveGuardrailsConfig,
95
95
  stripKnownSwarmPrefix
96
- } from "./index-dzaarxhg.js";
96
+ } from "./index-p5kr35wh.js";
97
97
  import"./index-bk5tah7q.js";
98
+ import"./index-3jcyn8g6.js";
98
99
  import"./index-bpmtbmy9.js";
99
100
  import"./index-zjygnfay.js";
100
101
  import"./index-a76rekgs.js";
@@ -12,14 +12,14 @@ import {
12
12
  resolveScopeWithFallbacks,
13
13
  writeScopeBindingToDisk,
14
14
  writeScopeToDisk
15
- } from "./index-fpkb3mw1.js";
15
+ } from "./index-vg3yx648.js";
16
16
  import"./index-wxyxf0bd.js";
17
17
  import"./index-1kz6da87.js";
18
18
  import"./index-09b9zncg.js";
19
19
  import"./index-7g4c7s5r.js";
20
- import"./index-7a2hm51h.js";
21
20
  import"./index-bpmtbmy9.js";
22
- import"./index-qe3v54nb.js";
21
+ import"./index-7a2hm51h.js";
22
+ import"./index-y111zefa.js";
23
23
  import"./index-zgwm4ryv.js";
24
24
  import"./index-a76rekgs.js";
25
25
  export {
@@ -33,22 +33,22 @@ import {
33
33
  sanitizeSlug,
34
34
  selectCandidateEntries,
35
35
  writeEvalStub
36
- } from "./index-247b1c1m.js";
37
- import"./index-2nqsr1dx.js";
38
- import"./index-xhpmagdm.js";
36
+ } from "./index-yf30m841.js";
37
+ import"./index-gxxxmajn.js";
38
+ import"./index-30pg2rs3.js";
39
39
  import"./index-rtry5xyf.js";
40
- import"./index-j89zmcpx.js";
41
- import"./index-g1drmgxe.js";
40
+ import"./index-p9ngg568.js";
41
+ import"./index-rv7s2k9y.js";
42
42
  import"./index-ae75rja9.js";
43
- import"./index-yhba8swx.js";
44
- import"./index-xg9repnx.js";
43
+ import"./index-dzyjb33e.js";
44
+ import"./index-ey29aap6.js";
45
45
  import"./index-bk5tah7q.js";
46
46
  import"./index-4rhhvd1a.js";
47
47
  import"./index-fsrp8wp3.js";
48
48
  import"./index-09b9zncg.js";
49
49
  import"./index-7g4c7s5r.js";
50
50
  import"./index-7a2hm51h.js";
51
- import"./index-qe3v54nb.js";
51
+ import"./index-y111zefa.js";
52
52
  import"./index-zgwm4ryv.js";
53
53
  import"./index-a76rekgs.js";
54
54
  export {
@@ -26,23 +26,28 @@ import {
26
26
  resolveIsExactSingleChildCommitAsync,
27
27
  resolveIsWorkingTreeClean,
28
28
  resolveIsWorkingTreeCleanAsync,
29
+ resolvePrFeedbackTrackingCandidatesAsync,
29
30
  resolvePrReviewDiffStats,
30
31
  resolvePrReviewDiffStatsAsync,
31
32
  resolvePrWorkflowRevisionDigest,
32
33
  resolvePrWorkflowRevisionDigestAsync,
33
34
  resolveRemoteRefsContainingHead,
34
35
  resolveRemoteRefsContainingHeadAsync,
36
+ switchPrFeedbackTrackingCandidateAsync,
35
37
  workspaceSnapshotMatches
36
- } from "./index-3nasn371.js";
38
+ } from "./index-y6a7gjtj.js";
39
+ import"./index-y111zefa.js";
37
40
  import"./index-a76rekgs.js";
38
41
  export {
39
42
  workspaceSnapshotMatches,
43
+ switchPrFeedbackTrackingCandidateAsync,
40
44
  resolveRemoteRefsContainingHeadAsync,
41
45
  resolveRemoteRefsContainingHead,
42
46
  resolvePrWorkflowRevisionDigestAsync,
43
47
  resolvePrWorkflowRevisionDigest,
44
48
  resolvePrReviewDiffStatsAsync,
45
49
  resolvePrReviewDiffStats,
50
+ resolvePrFeedbackTrackingCandidatesAsync,
46
51
  resolveIsWorkingTreeCleanAsync,
47
52
  resolveIsWorkingTreeClean,
48
53
  resolveIsExactSingleChildCommitAsync,
@@ -1,25 +1,25 @@
1
1
  // @bun
2
2
  import {
3
3
  scanWorktreeProvisioningOwnersForRecovery
4
- } from "./index-b4z7s917.js";
4
+ } from "./index-x20cgr2q.js";
5
5
  import {
6
6
  scanWorktreeMergeFailuresForRecovery
7
7
  } from "./index-b8zgtz81.js";
8
8
  import {
9
9
  scanDelegationFallbacksForRecovery,
10
10
  scanDelegationsForRecovery
11
- } from "./index-7an2qn0s.js";
12
- import"./index-2ghkk9ve.js";
11
+ } from "./index-45t7w06b.js";
12
+ import"./index-4qzeef9h.js";
13
13
  import"./index-fsrp8wp3.js";
14
14
  import"./index-09b9zncg.js";
15
15
  import"./index-7g4c7s5r.js";
16
- import"./index-7a2hm51h.js";
17
16
  import"./index-bpmtbmy9.js";
17
+ import"./index-7a2hm51h.js";
18
18
  import"./index-z6xqpmqg.js";
19
19
  import"./index-zjygnfay.js";
20
20
  import {
21
21
  bunSpawn
22
- } from "./index-qe3v54nb.js";
22
+ } from "./index-y111zefa.js";
23
23
  import"./index-zgwm4ryv.js";
24
24
  import"./index-a76rekgs.js";
25
25
 
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Handle /swarm approve-plan-critic command.
3
+ *
4
+ * Human-only escape hatch for the ratchet-tighter `critic_pre_plan` execution
5
+ * gate (issue #2012). When the critic returns APPROVED but the mechanical
6
+ * snapshot recorder fails to persist it (verdict-format mismatch, dispatch-
7
+ * signal miss, or a plan.json read race), the gate permanently blocks ALL
8
+ * coder delegations because `critic_pre_plan` defaults to `true` and cannot be
9
+ * disabled. This records a manual `plan_critic_gate` approval snapshot so the
10
+ * gate unblocks, with a distinct `method: 'manual_override'` audit marker.
11
+ *
12
+ * The command is `toolPolicy: 'restricted'` — the agent cannot run it via
13
+ * `swarm_command`; the agent must instead call the `approve_plan_critic` tool
14
+ * (or ask the user to run this command). Both paths funnel into
15
+ * `forceRecordPlanCriticApproval`. The command path sets `user_confirmed: true`
16
+ * (human-initiated); the tool path sets `user_confirmed: false`
17
+ * (agent-initiated) so a self-approve is visible in the audit trail.
18
+ *
19
+ * Mirrors the PR_REVIEW #1898 escape-hatch pattern (`/swarm abort-pr-workflow`).
20
+ */
21
+ export declare function handleApprovePlanCriticCommand(directory: string, args: string[], sessionID: string): Promise<string>;
@@ -551,11 +551,19 @@ export declare const COMMAND_REGISTRY: {
551
551
  readonly category: "utility";
552
552
  readonly toolPolicy: "restricted";
553
553
  };
554
+ readonly 'approve-plan-critic': {
555
+ readonly handler: (ctx: CommandContext) => Promise<string>;
556
+ readonly description: "Record a MANUAL plan-critic approval to unblock the critic_pre_plan execution gate [reason...]";
557
+ readonly args: "[reason...]";
558
+ readonly details: "Human-only escape hatch for the ratchet-tighter critic_pre_plan execution gate (issue #2012). When the critic already returned APPROVED but the mechanical snapshot recorder failed to persist it (verdict-format mismatch, dispatch-signal miss, or a plan.json read race), the gate permanently blocks ALL coder delegations because critic_pre_plan defaults to true and cannot be disabled. Running this records a manual plan_critic_gate approval snapshot so the gate unblocks, with a distinct method: \"manual_override\" audit marker. The agent itself cannot run this command; it must call the approve_plan_critic tool (or ask you to run this command). Both paths funnel into the same forceRecordPlanCriticApproval hook, which requires an active architect session. An audit event is appended to .swarm/events.jsonl. Prefer re-running MODE: CRITIC-GATE first; use this only as an escape hatch when a legitimate APPROVED was lost.";
559
+ readonly category: "utility";
560
+ readonly toolPolicy: "restricted";
561
+ };
554
562
  readonly 'pr-review': {
555
563
  readonly handler: (ctx: CommandContext) => CommandResult;
556
564
  readonly description: "Launch deep PR review with multi-lane analysis [url] [--council]";
557
565
  readonly args: "<pr-url|owner/repo#N|N> [--council]";
558
- readonly details: "Launches a structured PR review: reconstructs PR intent via obligation extraction cascade, computes a depth tier (S/M/L) from the bound merge-base diff, launches the base explorer wave through dispatch_lanes_async (all 6 review dimensions covered on every PR — six singleton lanes at tier L, consolidated owned_workflow_lanes partitions at tiers S/M) while the architect keeps doing non-dependent work, polls collect_lane_results incrementally, evaluates all 11 mandatory repository-agnostic risk families without applicability waivers (dedicated micro-lanes at tier L, consolidated sweeps at S/M), validates findings through independent reviewer confirmation, applies critic challenge to HIGH/CRITICAL findings, then synthesizes only after coverage is closed. Failed obligations retry through the same structured async mode and exact PR head; blocking or direct-Task dispatch is not provenance-equivalent, so unclosed coverage leaves the review BLOCKED rather than degraded. --council variant fires adversarial multi-model review. Supports full GitHub URL, owner/repo#N shorthand, or bare PR number (resolves against origin remote).";
566
+ readonly details: "Launches a structured PR review: preserves dirty state, verifies and binds an exact detached PR head, reconstructs PR intent via obligation extraction cascade, computes a depth tier (S/M/L) from the bound merge-base diff, launches the base explorer wave through dispatch_lanes_async (all 6 review dimensions covered on every PR — six singleton lanes at tier L, consolidated owned_workflow_lanes partitions at tiers S/M) while the architect keeps doing non-dependent work, and polls collect_lane_results incrementally. It evaluates an exact 11-row repository-agnostic risk-family ledger, records applicable rows as MATCHED and concretely inapplicable rows as provenance-free NOT_TRIGGERED, always keeps unclassified-risk MATCHED, and dispatches micro work only for MATCHED families (dedicated lanes at tier L, consolidated sweeps at S/M). It then validates findings through independent reviewer confirmation, applies critic challenge to HIGH/CRITICAL findings, and synthesizes only after matched coverage is closed. Failed obligations retry through the same structured async mode and exact PR head; blocking or direct-Task dispatch is not provenance-equivalent, so unclosed matched coverage leaves the review BLOCKED rather than degraded. --council variant fires adversarial multi-model review. Supports full GitHub URL, owner/repo#N shorthand, or bare PR number (resolves against origin remote).";
559
567
  readonly category: "agent";
560
568
  readonly toolPolicy: "none";
561
569
  };
@@ -3,6 +3,54 @@
3
3
  * Mirrors CONFIG_DIR in src/cli/index.ts.
4
4
  */
5
5
  export declare function getPluginConfigDir(): string;
6
+ /**
7
+ * The config directory the OpenCode HOST is actually using, honouring
8
+ * `OPENCODE_CONFIG_DIR`.
9
+ *
10
+ * Verbatim host precedence (`C:\OpenCode\opencode.exe`, opencode 1.18.10,
11
+ * offset 107379448):
12
+ *
13
+ * ```js
14
+ * function y(N={}){return{home:G.home,data:G.data,cache:G.cache,
15
+ * config:e.OPENCODE_CONFIG_DIR??G.config, ...}}
16
+ * ```
17
+ *
18
+ * This is deliberately SEPARATE from {@link getPluginConfigDir}, which has
19
+ * shared semantics relied on by `src/cli/index.ts` and
20
+ * `src/services/diagnose-service.ts` for locating plugin caches and lock files.
21
+ * Changing that function's meaning would move those consumers too.
22
+ *
23
+ * Only the worktree-lane permission allowlist uses this: under
24
+ * `OPENCODE_CONFIG_DIR` the two directories differ, and allowlisting the wrong
25
+ * one grants a directory the host is not reading while denying the one it is.
26
+ */
27
+ export declare function getHostConfigDir(): string;
28
+ /**
29
+ * The data directory the OpenCode HOST uses.
30
+ *
31
+ * Verbatim host source (opencode 1.18.10, offset ~107378180):
32
+ * `V = XDG_DATA_HOME || join(homedir(), ".local", "share")`
33
+ * `U = join(V, "opencode")` -> `Global.Path.data`
34
+ *
35
+ * Unlike `config`, the data path has no environment override: the `y()` service
36
+ * factory passes `data: G.data` straight through (offset 107379448).
37
+ *
38
+ * Used by the worktree-lane allowlist to re-grant `<data>/plans`, which the
39
+ * host natively allows to its `plan` agent.
40
+ */
41
+ export declare function getHostDataDir(): string;
42
+ /**
43
+ * Where OpenCode caches URL-sourced skills (`skills.urls`).
44
+ *
45
+ * Both discovery implementations agree on the root:
46
+ * v1 (offset 102988349): `join(Global.Path.cache, "skills")`
47
+ * v2 (offset 103375250): `resolve(cache, "skills", Bun.hash(url))` — a
48
+ * per-URL subdirectory of the same root.
49
+ *
50
+ * Pure path construction, no I/O and no network: the pull itself is the host's
51
+ * job, and the plugin only needs to know where the result lands.
52
+ */
53
+ export declare function getHostSkillCacheDir(): string;
6
54
  /**
7
55
  * All known locations where OpenCode may cache the opencode-swarm plugin.
8
56
  * Order: newest/canonical first so status reporting shows the most relevant
@@ -118,6 +118,24 @@ export declare const AUTO_PROCEED_BANNER = "## \u23ED\uFE0F AUTO-PROCEED STATUS\
118
118
  * Zod schema in schema.ts).
119
119
  */
120
120
  export declare const DEFAULT_LEAN_TURBO_CONFIG: LeanTurboConfig;
121
+ /**
122
+ * Directory name of the DD-6 default swarm-managed worktree base, created as a
123
+ * SIBLING of the project root (`<project-parent>/.swarm-worktrees`).
124
+ *
125
+ * Single source of truth shared by `resolveWorktreeBaseDir` in
126
+ * `src/worktree/core.ts` (which BUILDS lane paths) and
127
+ * `src/config/lane-context.ts` (which RECOGNISES a lane path after the fact,
128
+ * from inside the lane's own OpenCode instance). Those two must never drift: if
129
+ * creation and recognition disagree, a lane instance silently fails to be
130
+ * identified as a lane and falls back to unscoped permission behaviour.
131
+ *
132
+ * It lives in this leaf constants module rather than in `src/worktree/core.ts`
133
+ * so that the init-path-safe lane modules can share it without pulling the
134
+ * worktree lifecycle module into the plugin entry's import graph
135
+ * (AGENTS.md invariant 1; enforced by
136
+ * `tests/unit/turbo/lean/init-safety.test.ts`).
137
+ */
138
+ export declare const SWARM_WORKTREE_DIR_NAME = ".swarm-worktrees";
121
139
  export declare const DEFAULT_WORKTREE_ISOLATION_CONFIG: WorktreeIsolationConfig;
122
140
  export declare const LEAN_TURBO_BANNER = "## \uD83D\uDEE4\uFE0F LEAN TURBO ACTIVE\n\nLane-based parallel execution is enabled for this phase.\n\nBehavioral changes:\n- Tasks are partitioned into parallel lanes based on file-scope conflicts. Tasks in the same lane run sequentially; tasks in different lanes run concurrently (up to max_parallel_coders).\n- **Lane dispatch overrides the one-agent-per-message rule**: for lean lane dispatch only, you may send multiple Task tool calls concurrently (one per lane).\n- **Lane tasks skip per-task Stage B** (reviewer + test_engineer). Quality is enforced at phase-end via phase reviewer and critic gates instead.\n- **Degraded tasks** (global files, protected paths, high-risk patterns) and **serialized tasks** (lock-conflicted) run through standard serial workflow with full Stage B gates.\n- **Phase reviewer and critic are REQUIRED** before phase_complete when lean turbo is active \u2014 they serve as the holistic quality gate for all lane work.\n- **Full-Auto composition**: if Full-Auto is also active, lane dispatch is subject to Full-Auto delegation policy and phase approval.\n- Use the lean_turbo_run_phase tool to execute a phase with parallel lanes\n\nDo NOT skip phase reviewer/critic when configured. Degraded and serialized tasks MUST still go through full Stage B.\n";
123
141
  export declare const EPIC_MODE_BANNER = "## \uD83E\uDDED EPIC MODE ACTIVE\n\n**\u26D4 THE USER ALWAYS COMES FIRST \u2014 this overrides everything below.** The user can message you at ANY time, including mid-phase while coders are running or retrying. The instant a user message arrives \u2014 a question, a slash command, a comment, anything \u2014 STOP advancing the flow. Do not dispatch, do not retry, do not call another tool. Read what they said and respond to them directly, in plain conversation, first. Never keep executing the protocol and leave a user message unanswered \u2014 ignoring the user is the single worst failure mode in this mode. After you've answered, pick up where you left off. If you're mid-wave when they interrupt, tell them the state (\"3.1 and 3.2 are still running; I'll continue once I've answered you\") rather than going silent.\n\n**Activation \u2260 start.** Until the user asks for execution (\"start phase N\", \"run task X\", \"continue\"): do nothing. On `/swarm turbo epic`, `/swarm epic *` and any slash status/config command: call the named tool ONCE, surface its output VERBATIM, then stop. Don't infer intent \u2014 if unsure, ASK. This restraint applies ONLY before activation.\n\n**Talk to the user as you work** \u2014 like you naturally would. Once they ask you to run a phase, keep them in the loop with a sentence before each step about what you're doing and why (\"Declaring scopes for 3.1\u20133.3 so the planner can find parallelism\u2026\", \"Discrimination and calibration are independent, so I'll run 3.1 and 3.2 in parallel\u2026\"). This is normal conversation, not a form to fill in \u2014 the steps below tell you the key facts to share, but say them in your own voice. Don't go silent and tool-only through a phase.\n\nUse `epic_plan_waves` (NOT `lean_turbo_plan_lanes` or the deprecated `epic_run_phase`) for the wave plan. Do NOT call `lean_turbo_run_phase` directly.\n\n### Six-step flow (only when the user asks to run a phase)\n\n> Supersedes Rule 1a/3a: declare ALL pending scopes UP FRONT (step 1), BEFORE step 2. Just-in-time declaration breaks the wave planner.\n\n**1. `declare_scope` for every pending task** \u2014 one call per single `taskId` string (NOT ranges/arrays/globs). Tight, disjoint scopes; avoid shared files (`__init__.py`, barrels, registries) \u2014 they force serial waves. Declared scope is a CONTRACT; if a task needs more files mid-run, re-declare BEFORE dispatching.\n\n**2. `epic_decide_phase(directory, phase=N, sessionID)`** \u2014 returns:\n- `decided`+`promote` \u2192 step 3\n- `demoted` \u2192 step 6 (per-task serial)\n- `scopes-missing` \u2192 `declare_scope` each `missingScopes[]`, retry step 2\n- `no-phase` | `phase-empty` | `phase-already-complete` | `epic-state-unreadable` \u2192 fix per response `message`, retry. `phase-already-complete` means call step 2 with `phase=N+1` (NOT step 4 directly).\n- other \u2192 fix per `message`, retry\n\n**3. Surface the verdict to the user immediately, before any further action:**\n> Epic Mode: <PROMOTE|DEMOTE> (p=<value>) \u2014 <one-sentence rationale or top blocking reason>\n> Dependencies: <task_id> \u2190 <deps>; \u2026 (omit if none)\n\nThe verdict is the user's only visibility into what Epic is doing \u2014 silence here makes the mode invisible. If you're going to spend time on this phase, tell the user why up front. Phrase it naturally; the format above is a guide, not a script.\n\n**4. `epic_plan_waves(directory, phase=N)`** \u2014 returns `{ waves: [{ waveId, taskIds, files }], serializedTasks, degradedTasks, degradationSummary }`. Failure reasons mirror step 2; additionally: `git-failed` (retry), `planner-error` (check `errors[0]`).\n\n**4b. Surface the wave plan to the user, before dispatching any `Task`:**\n> Wave plan (<N> waves): Wave 1 \u2192 [<ids>] (parallel); Wave 2 \u2192 [<ids>]; \u2026 \u2014 serialized [<ids>], degraded [<ids>]\n\nWalk them through which tasks run in which wave and what's parallel \u2014 naturally, in your own words. If `waves.length` exceeds the distinct-dependency-layer count, also flag the over-split and its likely cause (typical: a shared file like a barrel/registry in multiple scopes forces serial waves), e.g. \"Wave N split into K single-task waves because every scope claims `<shared-file>` \u2014 re-declare those tasks without it to restore parallelism, then re-plan.\"\n\n`serializedTasks` causes (NOT `declare_scope`-fixable): cycle, `no-scope`, `invalid-scope`, cap-exhaustion. Fix dep graph or scope contents, re-plan.\n\n`degradedTasks[].reason` keys:\n- `global file conflict` / `protected path` \u2192 balanced mode, dispatch per-task after waves\n- `cross-batch upstream not committed (greenfield-smart Rule 3): <ids>` \u2192 commit named upstreams, re-plan\n- `unresolved in-batch dependency: <ids>` \u2192 fix upstream degrade/serialize, re-plan\n- `planning leftover (no identifiable blocker)` \u2192 surface as planner bug\n\n**5. Dispatch each wave: `wave.taskIds.length` SEPARATE `Task` calls in ONE assistant message.** Per wave in order:\n- One `Task(subagent_type=\"coder\", description=\"Phase N task <id>\", prompt=\"<scope + acceptance>\")` per `taskId`\n- ALL in same turn \u2192 concurrent\n- Wait for all in wave to reach `update_task_status(completed)` + `epic_record_divergence` before next wave\n\n\u26A0\uFE0F **Three defects:**\n1. **Bundling**: multiple ids in one Task call \u2192 kills 1:1 coder visibility\n2. **Splitting across messages**: serial execution, no parallelism\n3. **Skipping single-task waves**: still emit ONE Task, wait for completion+divergence\n\nThis is the only sanctioned dispatch path. Don't use `lean_turbo_run_phase`; don't bundle through other tools \u2014 visibility requires `Task`.\n\n`serializedTasks` + `degradedTasks` (after wave loop): ONE Task per assistant message each, never batched, wait for completion+divergence between.\n\n**6. After each `update_task_status(completed)`, call `epic_record_divergence(directory, taskId, sessionID)`** (feeds calibration). If `summary.isClean: false`:\n> Divergence: task `<id>` wrote <undeclaredCount> undeclared file(s) (ratio <ratio>)\n\n### Phase-complete + audit\n\nPhase reviewer + critic still required at `phase_complete` (Epic Mode doesn't change Stage B).\n\nAudit (no architect needed): `/swarm epic status | last | decide | calibration`.\n";
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Faithful transcription of OpenCode's path-canonicalisation helpers.
3
+ *
4
+ * ## Why this must exist
5
+ *
6
+ * The host asks for `external_directory` permission with a pattern it has run
7
+ * through `Filesystem.normalizePathPattern` — for example
8
+ * `src/tools/…` (offset 100715012):
9
+ *
10
+ * ```js
11
+ * let u = G.normalizePathPattern(Hr.join(y, "*"));
12
+ * yield* o.ask({ permission: "external_directory", patterns: [u], always: [u], … });
13
+ * ```
14
+ *
15
+ * Rule patterns from config get NO such treatment: `Permission.fromConfig`
16
+ * applies only `~` / `$HOME` expansion. So for a rule to match, its text must
17
+ * already equal what the host will produce for the asked path.
18
+ *
19
+ * That matters because `normalizePathPattern` resolves symlinks via
20
+ * `realpathSync.native`. A lane reached through a Windows junction (or a macOS
21
+ * `/var` → `/private/var` symlink) is asked for under its REAL path, while an
22
+ * un-canonicalised rule names the link path — so the lane is denied access to
23
+ * its own granted directory.
24
+ *
25
+ * Verbatim host source (`C:\OpenCode\opencode.exe`, opencode 1.18.10,
26
+ * offsets 107196170-107196420; the minified names resolve via the chunk's own
27
+ * imports at offset 107192671: `ky`=`path.resolve`, `yy`=`path.join`,
28
+ * `ek`=`fs.realpathSync`):
29
+ *
30
+ * ```js
31
+ * function j(F){ let z=ky(X(F)); try{ return ek.native(z) }catch{ return z } }
32
+ * YW.normalizePath = j;
33
+ *
34
+ * function J(F){
35
+ * if(F==="*") return F;
36
+ * let z=F.match(/^(.*)[\\/]\*$/);
37
+ * if(!z) return j(F);
38
+ * let Z=/^[A-Za-z]:$/.test(z[1]) ? z[1]+"\\" : z[1];
39
+ * return yy(j(Z),"*");
40
+ * }
41
+ * YW.normalizePathPattern = J;
42
+ *
43
+ * function X(F){ return F
44
+ * .replace(/^\/([a-zA-Z]):(?:[\\/]|$)/,(z,Z)=>`${Z.toUpperCase()}:/`)
45
+ * .replace(/^\/([a-zA-Z])(?:\/|$)/,(z,Z)=>`${Z.toUpperCase()}:/`)
46
+ * .replace(/^\/cygdrive\/([a-zA-Z])(?:\/|$)/,(z,Z)=>`${Z.toUpperCase()}:/`)
47
+ * .replace(/^\/mnt\/([a-zA-Z])(?:\/|$)/,(z,Z)=>`${Z.toUpperCase()}:/`) }
48
+ * YW.windowsPath = X;
49
+ * ```
50
+ *
51
+ * If a future OpenCode release changes these, lane rules stop matching. The
52
+ * shared-normaliser tests in `tests/unit/config/lane-permissions.test.ts` are
53
+ * the tripwire — re-extract before "fixing" them.
54
+ *
55
+ * @module config/host-path
56
+ */
57
+ /**
58
+ * Test-only DI seam (AGENTS.md invariant 7). Lets tests simulate a symlink /
59
+ * junction without creating one, and assert the ENOENT degradation.
60
+ */
61
+ export declare const _internals: {
62
+ realpathSyncNative: (p: string) => string;
63
+ };
64
+ /** Host `Filesystem.windowsPath`. */
65
+ declare function hostWindowsPath(input: string): string;
66
+ /**
67
+ * Host `Filesystem.normalizePath`: `realpathSync.native(path.resolve(windowsPath(p)))`,
68
+ * degrading to the un-realpath'd resolved form on ANY realpath failure.
69
+ *
70
+ * The host uses a bare `catch` here (not an ENOENT check), so a permission
71
+ * error degrades identically to a missing path. Transcribed as-is: diverging
72
+ * would make our rule text disagree with the host's asked text in exactly the
73
+ * cases where a lane is already having filesystem trouble.
74
+ */
75
+ declare function hostNormalizePath(input: string): string;
76
+ /**
77
+ * Host `Filesystem.normalizePathPattern`.
78
+ *
79
+ * Canonicalises the DIRECTORY part of a `<dir>/*` pattern and re-appends the
80
+ * wildcard, leaving the bare `*` catch-all untouched. Note the drive-root
81
+ * special case: for `C:/*` the captured directory is `C:` which
82
+ * `path.resolve` would turn into the process's current directory on that
83
+ * drive, so the host appends a separator first.
84
+ */
85
+ export declare function hostNormalizePathPattern(pattern: string): string;
86
+ /**
87
+ * Tier-0 test seam (writing-tests skill): pure transcriptions with no external
88
+ * dependency beyond the DI'd realpath. Only {@link hostNormalizePathPattern} is
89
+ * consumed by production code, so these stay internal.
90
+ */
91
+ export declare const _test_exports: {
92
+ hostWindowsPath: typeof hostWindowsPath;
93
+ hostNormalizePath: typeof hostNormalizePath;
94
+ };
95
+ export {};