opencode-swarm 7.193.0 → 7.194.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 (77) hide show
  1. package/README.md +1 -1
  2. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  3. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  4. package/dist/background/pending-delegations.d.ts +8 -0
  5. package/dist/cli/{auto-checkpoint-taay16xe.js → auto-checkpoint-67dk8rjz.js} +5 -5
  6. package/dist/cli/{checkpoint-6229g3jq.js → checkpoint-jbqqyp5e.js} +9 -9
  7. package/dist/cli/{coder-settlement-hexmmefv.js → coder-settlement-a09t7mvx.js} +4 -4
  8. package/dist/cli/{config-doctor-3ghvthh5.js → config-doctor-dkp263xx.js} +8 -8
  9. package/dist/cli/{core-0k7t9fw0.js → core-stnmz1rg.js} +2 -2
  10. package/dist/cli/{curator-drift-a5142x0d.js → curator-drift-d1wedyed.js} +6 -6
  11. package/dist/cli/{curator-llm-factory-8gt3mvg9.js → curator-llm-factory-97dpqjz4.js} +26 -26
  12. package/dist/cli/{curator-kwwnkyr7.js → curator-mc0wcpvw.js} +26 -26
  13. package/dist/cli/{doctor-knowledge-receipt-phase-id-11nsf9tz.js → doctor-knowledge-receipt-phase-id-dfwx5jha.js} +5 -5
  14. package/dist/cli/{evidence-summary-service-y2ykc6ta.js → evidence-summary-service-k1shqefr.js} +10 -10
  15. package/dist/cli/{gate-evidence-cd5299js.js → gate-evidence-vw9y4gs6.js} +3 -3
  16. package/dist/cli/{guardrail-explain-hpgecr7x.js → guardrail-explain-24g3bsqw.js} +27 -27
  17. package/dist/cli/{guardrail-log-g6krx0s2.js → guardrail-log-vbeyx6nq.js} +4 -4
  18. package/dist/cli/{guardrail-reset-a3xv675m.js → guardrail-reset-jwtt15e3.js} +26 -26
  19. package/dist/cli/{hive-promoter-90svfzvs.js → hive-promoter-p9ad63mx.js} +26 -26
  20. package/dist/cli/{index-ngk8hpc3.js → index-0xe19j9g.js} +1 -1
  21. package/dist/cli/{index-py8wpe81.js → index-1jt12p3y.js} +1 -1
  22. package/dist/cli/{index-jxs9qnad.js → index-3dpb3kps.js} +1 -1
  23. package/dist/cli/{index-cs0p582p.js → index-43v5axvm.js} +2 -2
  24. package/dist/cli/{index-ma71x1aa.js → index-48h1yn6c.js} +1 -1
  25. package/dist/cli/{index-1dx5zyss.js → index-4ftg3p9n.js} +2 -2
  26. package/dist/cli/{index-bkpyff61.js → index-51dxek4p.js} +2 -2
  27. package/dist/cli/{index-bgtfvst1.js → index-6xppb1er.js} +1 -1
  28. package/dist/cli/{index-vbp35frb.js → index-7bfshvq1.js} +3 -3
  29. package/dist/cli/{index-r3mffz78.js → index-9bzgea2y.js} +3 -3
  30. package/dist/cli/{index-cpt38e0e.js → index-9kbnxb7v.js} +2 -2
  31. package/dist/cli/{index-he2nyr7x.js → index-9v43y7y6.js} +5 -5
  32. package/dist/cli/{index-tr47q89d.js → index-ajkdt5b8.js} +2 -2
  33. package/dist/cli/{index-5ev6f1gj.js → index-at34nry4.js} +2 -2
  34. package/dist/cli/{index-bg19b84s.js → index-cwr69qw7.js} +4 -4
  35. package/dist/cli/{index-x2phyvcv.js → index-d7pznffh.js} +2 -2
  36. package/dist/cli/{index-6dn16dre.js → index-dy7nztyp.js} +2 -2
  37. package/dist/cli/{index-4mq8r4be.js → index-ehab3z5y.js} +4 -4
  38. package/dist/cli/{index-4gacy6y6.js → index-f3ttgqak.js} +1 -1
  39. package/dist/cli/{index-rd9th57y.js → index-h14wpwpa.js} +4 -4
  40. package/dist/cli/{index-nz6ehpjn.js → index-jrs2qh6j.js} +1 -1
  41. package/dist/cli/{index-3xj89bf0.js → index-kp5qw5p4.js} +28 -28
  42. package/dist/cli/{index-ymnathfr.js → index-n5xwza76.js} +3 -3
  43. package/dist/cli/{index-1p24bfn2.js → index-r8mavcg6.js} +1 -1
  44. package/dist/cli/{index-5n760fzn.js → index-rpnkp79f.js} +6 -6
  45. package/dist/cli/{index-ntmnse4d.js → index-t6aae9wq.js} +1 -1
  46. package/dist/cli/{index-prvancd0.js → index-vfdkvvkf.js} +1 -1
  47. package/dist/cli/{index-jx80ed6g.js → index-vjytfp05.js} +90 -66
  48. package/dist/cli/{index-db786kn6.js → index-x7qeaa9y.js} +26 -26
  49. package/dist/cli/{index-d2emv8ap.js → index-y3n9ry9q.js} +1 -1
  50. package/dist/cli/{index-nktwf2xm.js → index-yfbk69b1.js} +3 -3
  51. package/dist/cli/index.js +27 -27
  52. package/dist/cli/{knowledge-escalator-2d7g3hs0.js → knowledge-escalator-g6dctrae.js} +8 -8
  53. package/dist/cli/{knowledge-events-hjeaevc9.js → knowledge-events-acdz0x2g.js} +6 -6
  54. package/dist/cli/{knowledge-store-g9cb2m0v.js → knowledge-store-vxtj4m59.js} +1 -1
  55. package/dist/cli/{knowledge-validator-dghf9pcj.js → knowledge-validator-b545vc9t.js} +2 -2
  56. package/dist/cli/{mcp-f5myvd7r.js → mcp-c3t18313.js} +1 -1
  57. package/dist/cli/{model-preflight-4w4wd6dj.js → model-preflight-r99c08re.js} +26 -26
  58. package/dist/cli/{pending-delegations-adm6gf3n.js → pending-delegations-57f3049j.js} +4 -2
  59. package/dist/cli/{pr-subscriptions-n1hks854.js → pr-subscriptions-5jb793xe.js} +1 -1
  60. package/dist/cli/{pr-workflow-gate-59cr6gve.js → pr-workflow-gate-n3x25ddw.js} +28 -26
  61. package/dist/cli/{scan-cursor-t26xmfhd.js → scan-cursor-s9mazw82.js} +2 -2
  62. package/dist/cli/{schema-cr120ar5.js → schema-7czxpvwm.js} +2 -2
  63. package/dist/cli/{scope-persistence-mrnz8j43.js → scope-persistence-y0ebqyjm.js} +6 -6
  64. package/dist/cli/{server-mwk6zn83.js → server-m10e78ey.js} +26 -26
  65. package/dist/cli/{skill-generator-svs4k0g8.js → skill-generator-kzw1dcba.js} +9 -9
  66. package/dist/cli/{snapshot-coordination-init-xzrahhsb.js → snapshot-coordination-init-z1aqsvn4.js} +26 -26
  67. package/dist/cli/{speckit-checkoff-g2qrb1tn.js → speckit-checkoff-1g3vzywn.js} +4 -4
  68. package/dist/cli/{worktree-collision-ownership-d145wmpg.js → worktree-collision-ownership-d0etv08a.js} +2 -2
  69. package/dist/cli/{worktree-isolation-pt1rws6p.js → worktree-isolation-dj2qw13p.js} +26 -26
  70. package/dist/commands/registry.d.ts +1 -1
  71. package/dist/epic/start.d.ts +8 -5
  72. package/dist/hooks/pr-workflow-gate.d.ts +37 -0
  73. package/dist/host/v2/session-client.d.ts +77 -0
  74. package/dist/host/v2/types.d.ts +7 -5
  75. package/dist/index.js +13 -11
  76. package/dist/tools/pr-workflow-status.d.ts +24 -1
  77. package/package.json +1 -1
@@ -25,8 +25,8 @@ import {
25
25
  tombstoneScopeBinding,
26
26
  writeScopeBindingToDisk,
27
27
  writeScopeToDisk
28
- } from "./index-1p24bfn2.js";
29
- import"./index-5ev6f1gj.js";
28
+ } from "./index-r8mavcg6.js";
29
+ import"./index-at34nry4.js";
30
30
  import"./index-qh93qjc2.js";
31
31
  import"./index-st80sjg7.js";
32
32
  import"./index-vg8sxg12.js";
@@ -35,7 +35,7 @@ import"./index-ry16d01s.js";
35
35
  import"./index-rdm3px0g.js";
36
36
  import"./index-7pmbnjvj.js";
37
37
  import"./index-ndec8akq.js";
38
- import"./index-bg19b84s.js";
38
+ import"./index-cwr69qw7.js";
39
39
  import"./index-vzm6zre7.js";
40
40
  import"./index-ae75rja9.js";
41
41
  import"./index-3atkcqpb.js";
@@ -48,10 +48,10 @@ import"./index-ejhxgyvm.js";
48
48
  import"./index-7g4c7s5r.js";
49
49
  import"./index-hfssjyxs.js";
50
50
  import"./index-gx2vp8gx.js";
51
- import"./index-ngk8hpc3.js";
51
+ import"./index-0xe19j9g.js";
52
52
  import"./index-zxdawwc7.js";
53
- import"./index-1dx5zyss.js";
54
- import"./index-py8wpe81.js";
53
+ import"./index-4ftg3p9n.js";
54
+ import"./index-1jt12p3y.js";
55
55
  import"./index-bk5tah7q.js";
56
56
  import"./index-gknz3bv1.js";
57
57
  import"./index-zpsr8rpc.js";
@@ -22,16 +22,16 @@ import {
22
22
  resolveWriteTargets,
23
23
  searchKnowledge,
24
24
  symbols
25
- } from "./index-jx80ed6g.js";
25
+ } from "./index-vjytfp05.js";
26
26
  import {
27
27
  checkFileAuthority,
28
28
  checkWriteTargetForSymlink
29
- } from "./index-bkpyff61.js";
30
- import"./index-4mq8r4be.js";
29
+ } from "./index-51dxek4p.js";
30
+ import"./index-ehab3z5y.js";
31
31
  import {
32
32
  _internals,
33
33
  saveEvidence
34
- } from "./index-ma71x1aa.js";
34
+ } from "./index-48h1yn6c.js";
35
35
  import {
36
36
  getProfileForFile
37
37
  } from "./index-j2vv0h13.js";
@@ -42,12 +42,12 @@ import"./index-7njm9jk1.js";
42
42
  import"./index-txdagbh7.js";
43
43
  import {
44
44
  resolveCohortId
45
- } from "./index-prvancd0.js";
45
+ } from "./index-vfdkvvkf.js";
46
46
  import"./index-rdec0y3z.js";
47
- import"./index-d2emv8ap.js";
48
- import"./index-ymnathfr.js";
49
- import"./index-r3mffz78.js";
50
- import"./index-5n760fzn.js";
47
+ import"./index-y3n9ry9q.js";
48
+ import"./index-n5xwza76.js";
49
+ import"./index-9bzgea2y.js";
50
+ import"./index-rpnkp79f.js";
51
51
  import"./index-fd6b9f38.js";
52
52
  import"./index-hfnyykvm.js";
53
53
  import"./index-cjapb4hy.js";
@@ -59,11 +59,11 @@ import {
59
59
  import"./index-q7sjgr1y.js";
60
60
  import {
61
61
  createSwarmTool
62
- } from "./index-nktwf2xm.js";
62
+ } from "./index-yfbk69b1.js";
63
63
  import {
64
64
  loadPlan,
65
65
  loadPlanJsonOnly
66
- } from "./index-he2nyr7x.js";
66
+ } from "./index-9v43y7y6.js";
67
67
  import {
68
68
  containsControlChars,
69
69
  createTargetWithinRootValidator,
@@ -73,15 +73,15 @@ import {
73
73
  validateWorkspaceRoot
74
74
  } from "./index-6b295cas.js";
75
75
  import"./index-9nyqt3kb.js";
76
- import"./index-bgtfvst1.js";
76
+ import"./index-6xppb1er.js";
77
77
  import"./index-v3bmwmqw.js";
78
- import"./index-4gacy6y6.js";
79
- import"./index-nz6ehpjn.js";
80
- import"./index-x2phyvcv.js";
78
+ import"./index-f3ttgqak.js";
79
+ import"./index-jrs2qh6j.js";
80
+ import"./index-d7pznffh.js";
81
81
  import"./index-g4fs6z4e.js";
82
- import"./index-6dn16dre.js";
83
- import"./index-tr47q89d.js";
84
- import"./index-cs0p582p.js";
82
+ import"./index-dy7nztyp.js";
83
+ import"./index-ajkdt5b8.js";
84
+ import"./index-43v5axvm.js";
85
85
  import"./index-m9zzj4ee.js";
86
86
  import"./index-84k9zzv1.js";
87
87
  import"./index-2s7dvzff.js";
@@ -90,18 +90,18 @@ import {
90
90
  validateActionability,
91
91
  validateActionableFields,
92
92
  validateLesson
93
- } from "./index-jxs9qnad.js";
93
+ } from "./index-3dpb3kps.js";
94
94
  import {
95
95
  resolveWorktreeId
96
96
  } from "./index-w2vbaczx.js";
97
97
  import"./index-rtry5xyf.js";
98
- import"./index-vbp35frb.js";
98
+ import"./index-7bfshvq1.js";
99
99
  import"./index-g22dps7x.js";
100
100
  import"./index-0725jpp7.js";
101
101
  import {
102
102
  normalizeScopeFiles
103
- } from "./index-1p24bfn2.js";
104
- import"./index-5ev6f1gj.js";
103
+ } from "./index-r8mavcg6.js";
104
+ import"./index-at34nry4.js";
105
105
  import"./index-qh93qjc2.js";
106
106
  import"./index-st80sjg7.js";
107
107
  import"./index-vg8sxg12.js";
@@ -119,7 +119,7 @@ import {
119
119
  reinforceSwarmKnowledgeEntry,
120
120
  resolveSwarmKnowledgePath,
121
121
  transactKnowledge
122
- } from "./index-bg19b84s.js";
122
+ } from "./index-cwr69qw7.js";
123
123
  import"./index-vzm6zre7.js";
124
124
  import"./index-ae75rja9.js";
125
125
  import"./index-3atkcqpb.js";
@@ -143,7 +143,7 @@ import"./index-gx2vp8gx.js";
143
143
  import {
144
144
  loadGateOverrides,
145
145
  loadPluginConfigWithMeta
146
- } from "./index-ngk8hpc3.js";
146
+ } from "./index-0xe19j9g.js";
147
147
  import {
148
148
  init_git_executable,
149
149
  resolveGitExecutableAsync
@@ -151,11 +151,11 @@ import {
151
151
  import {
152
152
  KnowledgeConfigSchema,
153
153
  init_schema
154
- } from "./index-1dx5zyss.js";
154
+ } from "./index-4ftg3p9n.js";
155
155
  import {
156
156
  TOOL_METADATA,
157
157
  init_tool_metadata
158
- } from "./index-py8wpe81.js";
158
+ } from "./index-1jt12p3y.js";
159
159
  import {
160
160
  KNOWLEDGE_SCHEMA_VERSION,
161
161
  init_knowledge_types
@@ -33,21 +33,21 @@ import {
33
33
  sanitizeSlug,
34
34
  selectCandidateEntries,
35
35
  writeEvalStub
36
- } from "./index-r3mffz78.js";
36
+ } from "./index-9bzgea2y.js";
37
37
  import"./index-q7sjgr1y.js";
38
- import"./index-tr47q89d.js";
39
- import"./index-cs0p582p.js";
38
+ import"./index-ajkdt5b8.js";
39
+ import"./index-43v5axvm.js";
40
40
  import"./index-m9zzj4ee.js";
41
41
  import"./index-84k9zzv1.js";
42
42
  import"./index-2s7dvzff.js";
43
- import"./index-jxs9qnad.js";
43
+ import"./index-3dpb3kps.js";
44
44
  import"./index-w2vbaczx.js";
45
45
  import"./index-rtry5xyf.js";
46
- import"./index-vbp35frb.js";
46
+ import"./index-7bfshvq1.js";
47
47
  import"./index-g22dps7x.js";
48
48
  import"./index-0725jpp7.js";
49
49
  import"./index-ndec8akq.js";
50
- import"./index-bg19b84s.js";
50
+ import"./index-cwr69qw7.js";
51
51
  import"./index-vzm6zre7.js";
52
52
  import"./index-ae75rja9.js";
53
53
  import"./index-3atkcqpb.js";
@@ -60,10 +60,10 @@ import"./index-ejhxgyvm.js";
60
60
  import"./index-7g4c7s5r.js";
61
61
  import"./index-hfssjyxs.js";
62
62
  import"./index-gx2vp8gx.js";
63
- import"./index-ngk8hpc3.js";
63
+ import"./index-0xe19j9g.js";
64
64
  import"./index-zxdawwc7.js";
65
- import"./index-1dx5zyss.js";
66
- import"./index-py8wpe81.js";
65
+ import"./index-4ftg3p9n.js";
66
+ import"./index-1jt12p3y.js";
67
67
  import"./index-bk5tah7q.js";
68
68
  import"./index-gknz3bv1.js";
69
69
  import"./index-zpsr8rpc.js";
@@ -8,50 +8,50 @@ import {
8
8
  markSnapshotCoordinationClosing,
9
9
  retrySnapshotCoordinationInitialization,
10
10
  startSnapshotCoordinationInitialization
11
- } from "./index-jx80ed6g.js";
12
- import"./index-bkpyff61.js";
13
- import"./index-4mq8r4be.js";
14
- import"./index-ma71x1aa.js";
11
+ } from "./index-vjytfp05.js";
12
+ import"./index-51dxek4p.js";
13
+ import"./index-ehab3z5y.js";
14
+ import"./index-48h1yn6c.js";
15
15
  import"./index-j2vv0h13.js";
16
16
  import"./index-668npagp.js";
17
17
  import"./index-7njm9jk1.js";
18
18
  import"./index-txdagbh7.js";
19
- import"./index-prvancd0.js";
19
+ import"./index-vfdkvvkf.js";
20
20
  import"./index-rdec0y3z.js";
21
- import"./index-d2emv8ap.js";
22
- import"./index-ymnathfr.js";
23
- import"./index-r3mffz78.js";
24
- import"./index-5n760fzn.js";
21
+ import"./index-y3n9ry9q.js";
22
+ import"./index-n5xwza76.js";
23
+ import"./index-9bzgea2y.js";
24
+ import"./index-rpnkp79f.js";
25
25
  import"./index-fd6b9f38.js";
26
26
  import"./index-hfnyykvm.js";
27
27
  import"./index-cjapb4hy.js";
28
28
  import"./index-6s3ab22d.js";
29
29
  import"./index-pt7h91zc.js";
30
30
  import"./index-q7sjgr1y.js";
31
- import"./index-nktwf2xm.js";
32
- import"./index-he2nyr7x.js";
31
+ import"./index-yfbk69b1.js";
32
+ import"./index-9v43y7y6.js";
33
33
  import"./index-6b295cas.js";
34
34
  import"./index-9nyqt3kb.js";
35
- import"./index-bgtfvst1.js";
35
+ import"./index-6xppb1er.js";
36
36
  import"./index-v3bmwmqw.js";
37
- import"./index-4gacy6y6.js";
38
- import"./index-nz6ehpjn.js";
39
- import"./index-x2phyvcv.js";
37
+ import"./index-f3ttgqak.js";
38
+ import"./index-jrs2qh6j.js";
39
+ import"./index-d7pznffh.js";
40
40
  import"./index-g4fs6z4e.js";
41
- import"./index-6dn16dre.js";
42
- import"./index-tr47q89d.js";
43
- import"./index-cs0p582p.js";
41
+ import"./index-dy7nztyp.js";
42
+ import"./index-ajkdt5b8.js";
43
+ import"./index-43v5axvm.js";
44
44
  import"./index-m9zzj4ee.js";
45
45
  import"./index-84k9zzv1.js";
46
46
  import"./index-2s7dvzff.js";
47
- import"./index-jxs9qnad.js";
47
+ import"./index-3dpb3kps.js";
48
48
  import"./index-w2vbaczx.js";
49
49
  import"./index-rtry5xyf.js";
50
- import"./index-vbp35frb.js";
50
+ import"./index-7bfshvq1.js";
51
51
  import"./index-g22dps7x.js";
52
52
  import"./index-0725jpp7.js";
53
- import"./index-1p24bfn2.js";
54
- import"./index-5ev6f1gj.js";
53
+ import"./index-r8mavcg6.js";
54
+ import"./index-at34nry4.js";
55
55
  import"./index-qh93qjc2.js";
56
56
  import"./index-st80sjg7.js";
57
57
  import"./index-vg8sxg12.js";
@@ -60,7 +60,7 @@ import"./index-ry16d01s.js";
60
60
  import"./index-rdm3px0g.js";
61
61
  import"./index-7pmbnjvj.js";
62
62
  import"./index-ndec8akq.js";
63
- import"./index-bg19b84s.js";
63
+ import"./index-cwr69qw7.js";
64
64
  import"./index-vzm6zre7.js";
65
65
  import"./index-ae75rja9.js";
66
66
  import"./index-3atkcqpb.js";
@@ -73,10 +73,10 @@ import"./index-ejhxgyvm.js";
73
73
  import"./index-7g4c7s5r.js";
74
74
  import"./index-hfssjyxs.js";
75
75
  import"./index-gx2vp8gx.js";
76
- import"./index-ngk8hpc3.js";
76
+ import"./index-0xe19j9g.js";
77
77
  import"./index-zxdawwc7.js";
78
- import"./index-1dx5zyss.js";
79
- import"./index-py8wpe81.js";
78
+ import"./index-4ftg3p9n.js";
79
+ import"./index-1jt12p3y.js";
80
80
  import"./index-bk5tah7q.js";
81
81
  import"./index-gknz3bv1.js";
82
82
  import"./index-zpsr8rpc.js";
@@ -7,14 +7,14 @@ import {
7
7
  parseSpeckitTasksContent,
8
8
  propagateSpeckitCheckoff,
9
9
  writeSpeckitCheckoffLedger
10
- } from "./index-4gacy6y6.js";
10
+ } from "./index-f3ttgqak.js";
11
11
  import"./index-ejhxgyvm.js";
12
12
  import"./index-7g4c7s5r.js";
13
13
  import"./index-hfssjyxs.js";
14
- import"./index-ngk8hpc3.js";
14
+ import"./index-0xe19j9g.js";
15
15
  import"./index-zxdawwc7.js";
16
- import"./index-1dx5zyss.js";
17
- import"./index-py8wpe81.js";
16
+ import"./index-4ftg3p9n.js";
17
+ import"./index-1jt12p3y.js";
18
18
  import"./index-bk5tah7q.js";
19
19
  import"./index-gknz3bv1.js";
20
20
  import"./index-zpsr8rpc.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  scanDelegationFallbacksForRecovery,
15
15
  scanDelegationsForRecovery
16
- } from "./index-6dn16dre.js";
16
+ } from "./index-dy7nztyp.js";
17
17
  import"./index-84k9zzv1.js";
18
18
  import"./index-2s7dvzff.js";
19
19
  import"./index-st80sjg7.js";
@@ -23,7 +23,7 @@ import"./index-ry16d01s.js";
23
23
  import"./index-rdm3px0g.js";
24
24
  import"./index-7pmbnjvj.js";
25
25
  import"./index-ndec8akq.js";
26
- import"./index-bg19b84s.js";
26
+ import"./index-cwr69qw7.js";
27
27
  import"./index-vzm6zre7.js";
28
28
  import"./index-ae75rja9.js";
29
29
  import"./index-3atkcqpb.js";
@@ -25,52 +25,52 @@ import {
25
25
  sanitizeWorktreeTaskId,
26
26
  standardWorktreeByCallID,
27
27
  standardWorktreeSerializationSessions
28
- } from "./index-jx80ed6g.js";
29
- import"./index-bkpyff61.js";
30
- import"./index-4mq8r4be.js";
31
- import"./index-ma71x1aa.js";
28
+ } from "./index-vjytfp05.js";
29
+ import"./index-51dxek4p.js";
30
+ import"./index-ehab3z5y.js";
31
+ import"./index-48h1yn6c.js";
32
32
  import"./index-j2vv0h13.js";
33
33
  import"./index-668npagp.js";
34
34
  import"./index-7njm9jk1.js";
35
35
  import"./index-txdagbh7.js";
36
- import"./index-prvancd0.js";
36
+ import"./index-vfdkvvkf.js";
37
37
  import"./index-rdec0y3z.js";
38
- import"./index-d2emv8ap.js";
39
- import"./index-ymnathfr.js";
40
- import"./index-r3mffz78.js";
41
- import"./index-5n760fzn.js";
38
+ import"./index-y3n9ry9q.js";
39
+ import"./index-n5xwza76.js";
40
+ import"./index-9bzgea2y.js";
41
+ import"./index-rpnkp79f.js";
42
42
  import"./index-fd6b9f38.js";
43
43
  import"./index-hfnyykvm.js";
44
44
  import"./index-cjapb4hy.js";
45
45
  import"./index-6s3ab22d.js";
46
46
  import"./index-pt7h91zc.js";
47
47
  import"./index-q7sjgr1y.js";
48
- import"./index-nktwf2xm.js";
49
- import"./index-he2nyr7x.js";
48
+ import"./index-yfbk69b1.js";
49
+ import"./index-9v43y7y6.js";
50
50
  import"./index-6b295cas.js";
51
51
  import"./index-9nyqt3kb.js";
52
- import"./index-bgtfvst1.js";
52
+ import"./index-6xppb1er.js";
53
53
  import"./index-v3bmwmqw.js";
54
- import"./index-4gacy6y6.js";
55
- import"./index-nz6ehpjn.js";
56
- import"./index-x2phyvcv.js";
54
+ import"./index-f3ttgqak.js";
55
+ import"./index-jrs2qh6j.js";
56
+ import"./index-d7pznffh.js";
57
57
  import"./index-g4fs6z4e.js";
58
- import"./index-6dn16dre.js";
59
- import"./index-tr47q89d.js";
60
- import"./index-cs0p582p.js";
58
+ import"./index-dy7nztyp.js";
59
+ import"./index-ajkdt5b8.js";
60
+ import"./index-43v5axvm.js";
61
61
  import"./index-m9zzj4ee.js";
62
62
  import"./index-84k9zzv1.js";
63
63
  import"./index-2s7dvzff.js";
64
- import"./index-jxs9qnad.js";
64
+ import"./index-3dpb3kps.js";
65
65
  import"./index-w2vbaczx.js";
66
66
  import"./index-rtry5xyf.js";
67
67
  import {
68
68
  resolveWorktreeIsolationConfig
69
- } from "./index-vbp35frb.js";
69
+ } from "./index-7bfshvq1.js";
70
70
  import"./index-g22dps7x.js";
71
71
  import"./index-0725jpp7.js";
72
- import"./index-1p24bfn2.js";
73
- import"./index-5ev6f1gj.js";
72
+ import"./index-r8mavcg6.js";
73
+ import"./index-at34nry4.js";
74
74
  import"./index-qh93qjc2.js";
75
75
  import"./index-st80sjg7.js";
76
76
  import"./index-vg8sxg12.js";
@@ -79,7 +79,7 @@ import"./index-ry16d01s.js";
79
79
  import"./index-rdm3px0g.js";
80
80
  import"./index-7pmbnjvj.js";
81
81
  import"./index-ndec8akq.js";
82
- import"./index-bg19b84s.js";
82
+ import"./index-cwr69qw7.js";
83
83
  import"./index-vzm6zre7.js";
84
84
  import"./index-ae75rja9.js";
85
85
  import"./index-3atkcqpb.js";
@@ -92,10 +92,10 @@ import"./index-ejhxgyvm.js";
92
92
  import"./index-7g4c7s5r.js";
93
93
  import"./index-hfssjyxs.js";
94
94
  import"./index-gx2vp8gx.js";
95
- import"./index-ngk8hpc3.js";
95
+ import"./index-0xe19j9g.js";
96
96
  import"./index-zxdawwc7.js";
97
- import"./index-1dx5zyss.js";
98
- import"./index-py8wpe81.js";
97
+ import"./index-4ftg3p9n.js";
98
+ import"./index-1jt12p3y.js";
99
99
  import"./index-bk5tah7q.js";
100
100
  import"./index-gknz3bv1.js";
101
101
  import"./index-zpsr8rpc.js";
@@ -715,7 +715,7 @@ export declare const COMMAND_REGISTRY: {
715
715
  readonly epic: {
716
716
  readonly handler: (ctx: CommandContext) => Promise<string>;
717
717
  readonly description: "Open, inspect, and close a plan-scoped epic (coupling-aware parallel execution of the current plan)";
718
- readonly details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed — the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client — OpenCode 2 does not yet — so worktree-isolated coders and the phase review cannot run), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run — Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup — run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): …` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes — exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch → reviewer + test_engineer → update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review → epic_phase_review → phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default — staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing — rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) — tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue→resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f — planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) — undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.";
718
+ readonly details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed — the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client; on OpenCode 2 the v2 adapter now ships one, so this refusal no longer fires there — v2 is held by the child-session placement work instead), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run — Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup — run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): …` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes — exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch → reviewer + test_engineer → update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review → epic_phase_review → phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default — staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing — rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) — tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue→resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f — planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) — undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.";
719
719
  readonly args: "start [--force] | close [--abandon] [--land squash|merge|none] | status [--repair-refs] | report [<key>|last] [--format json] | learning | prior [show|reset [--confirm=<token>]] | clear-merge-failure <taskId> [--confirm]";
720
720
  readonly category: "diagnostics";
721
721
  readonly toolPolicy: "human-only";
@@ -97,7 +97,7 @@ export interface EpicStartOptions {
97
97
  * with `client: undefined` (`src/host/v2/setup.ts`), so an epic there could
98
98
  * neither dispatch a coder nor complete a phase.
99
99
  */
100
- export declare const EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client (OpenCode 2 does not yet, see docs/host/v2-hook-inventory.md). Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+).";
100
+ export declare const EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client. Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+). (On OpenCode 2 the v2 adapter now ships a session-capable client, so this refusal no longer fires there \u2014 Epic on v2 is held by the #3169 child-session placement work instead.)";
101
101
  /** Durable Lean run marked `running` — read without the migrating Lean reader. */
102
102
  declare function findRunningLeanRun(directory: string): string | null;
103
103
  /** Why Turbo blocks the start, or null (M-a). */
@@ -163,10 +163,13 @@ export declare const _internals: {
163
163
  hasActiveTurboMode: () => boolean;
164
164
  /**
165
165
  * False only when the plugin was initialized on a host that supplies no
166
- * SDK client: the v1 init stores the host client, the OpenCode 2 adapter
167
- * stores `undefined`, and an uninitialized process (tests, scripts) keeps
168
- * the initial `null` — which is not a host verdict, so it is allowed.
169
- * Capability-based: once a v2 client is wired, Epic starts there too.
166
+ * SDK client: the v1 init stores the host client, an uninitialized process
167
+ * (tests, scripts) keeps the initial `null`, and only a genuinely
168
+ * client-less host stores `undefined` — which is not a host verdict, so
169
+ * it is allowed. Capability-based: the v2 adapter now ships a
170
+ * session-capable client (the #3169 session shim), so this passes on v2;
171
+ * Epic's v2 execution is held by the entry-point double-gate and the
172
+ * child-session placement work, not by this check.
170
173
  */
171
174
  hostProvidesClient: () => boolean;
172
175
  findRunningLeanRun: typeof findRunningLeanRun;
@@ -2208,6 +2208,32 @@ interface PrReviewGateContext {
2208
2208
  */
2209
2209
  candidateSeverities?: Map<string, CandidateSeverity>;
2210
2210
  }
2211
+ /**
2212
+ * Issue #3095: read-surface reuse of the derivation above for
2213
+ * `pr_workflow_status`. The derivation itself stays single-sourced: every
2214
+ * production caller is a validation/enforcement path that must keep throwing,
2215
+ * so this wrapper exists only to thread the SAME result to a read-only status
2216
+ * tool and to degrade fail-soft instead of blocking an observation. A status
2217
+ * read must never fail the whole tool for an unbound head or an unreadable
2218
+ * revision digest — the caller renders the `unavailable` arm (with the
2219
+ * bounded reason) and still projects boundaries and lane coverage.
2220
+ *
2221
+ * Read-only by construction: it performs no writes and mutates no state.
2222
+ * COST DISCLOSURE (not free): resolving the derivation context runs the
2223
+ * revision-digest computation on every bound PR_REVIEW call — three bounded
2224
+ * git processes plus a re-read/hash of every changed file
2225
+ * (`createPrReviewGateContext` → `resolvePrWorkflowRevisionDigestForGate` →
2226
+ * the workspace-snapshot digest path). An observation surface pays the same
2227
+ * digest price an enforcement call would.
2228
+ */
2229
+ export type PrReviewCandidateInventoryForStatus = {
2230
+ state: 'available';
2231
+ inventory: string[];
2232
+ } | {
2233
+ state: 'unavailable';
2234
+ reason: string;
2235
+ };
2236
+ export declare function derivePrReviewCandidateInventoryForStatus(directory: string, state: PrWorkflowGateState): Promise<PrReviewCandidateInventoryForStatus>;
2211
2237
  /**
2212
2238
  * Extract candidate ids from a discovery artifact's [CANDIDATE] rows. When
2213
2239
  * `scopeToLanes` is given (base-dimension sources credited for only a subset
@@ -2406,6 +2432,17 @@ export interface PrWorkflowGateRecoveryRead {
2406
2432
  * availability one.
2407
2433
  */
2408
2434
  armedShapeUnreadable: boolean;
2435
+ /**
2436
+ * true when the salvage reconstructed ONLY the abort-relevant fields and
2437
+ * every `prReview*` projection field (base dispatches, artifact
2438
+ * boundaries, run id, findings path, settlement digests) was dropped
2439
+ * because the shadow bytes failed schema validation. The status tool uses
2440
+ * this to mark its derived PR_REVIEW sections `unavailable` instead of
2441
+ * reporting healthy-but-empty coverage — an absent field on a salvaged
2442
+ * state proves nothing about the workflow. Present only when true; a
2443
+ * schema-valid shadow (or an ordinary healthy read) keeps full fidelity.
2444
+ */
2445
+ prReviewProjectionDropped?: boolean;
2409
2446
  }
2410
2447
  /**
2411
2448
  * Recovery-only gate-state reader (issue #2242 R4, wedge W-5).
@@ -0,0 +1,77 @@
1
+ /**
2
+ * v2 session client shim — issue #3169 Phase 2.
3
+ *
4
+ * A narrow `OpencodeClient` subset implementing exactly the v1 session surface
5
+ * Epic's dispatch paths use (`session.create/prompt/abort/delete` plus `get`,
6
+ * which verified teardown requires), backed by the v2 host's `ctx.session`
7
+ * domain. Installed as the synthetic v1 PluginInput's `client` field by
8
+ * `setup.ts`, it flows through the shared init core's single client write site
9
+ * into `swarmState.opencodeClient` and every init-path `ctx.client` consumer —
10
+ * the tracking issue's Decision 2 (a client subset instead of v2 branches
11
+ * spread through consumers).
12
+ *
13
+ * Translation contract (per the issue §4 gap table and the Phase 0 live
14
+ * findings on @opencode/cli 2.0.26):
15
+ *
16
+ * - `create({body:{parentID,title}, query:{directory}})` validates placement
17
+ * BEFORE creating anything: v2 child sessions inherit the parent's
18
+ * directory and ignore the requested one (Phase 0 C1 catch), so a divergent
19
+ * or unverifiable placement fails closed with a typed `{data: null,
20
+ * error}` result — routing worktree isolation to its existing degradation
21
+ * path instead of silently running a "lane" session in the project root.
22
+ * A passing precheck mints a placeholder id; the real v2 session is
23
+ * created at PROMPT time, when the v1 prompt body supplies the create-time
24
+ * options (agent/model/permissions) the published `SessionCreateInput`
25
+ * expects (issue R2: one session per dispatch contains the per-session
26
+ * shift).
27
+ * - `prompt({path:{id}, body:{agent,model?,system?,tools,parts}, signal?})`
28
+ * emulates the v1 BLOCKING call: real create (carrying agent/model and the
29
+ * read-only denial map as `effect:'deny'` permissions) → one sessionID-
30
+ * scoped `context` hook that replaces `event.system` (fence-aware: parts
31
+ * carrying the `<swarm_system_directive` provenance fence survive, per
32
+ * #2526) and deletes denied keys from `event.tools` → `prompt` → bounded
33
+ * `wait` → `context()` translated into the v1 `{data:{info,parts}}`
34
+ * envelope so `dispatchEphemeralAgent` and `readProviderMessageError`
35
+ * work unchanged. A prompt addressed to a non-placeholder (real) session
36
+ * id takes a direct path without re-creating — the pr-event-delivery wake
37
+ * prompt shape.
38
+ * - Provider failures are EVENT-SOURCED on v2 (Phase 0 C4: no error text in
39
+ * `context()`), so the event pump records `session.error` /
40
+ * `session.execution.failed` payloads here (`recordV2SessionErrorFromEnvelope`,
41
+ * called pump-side beside `seedSessionIdentityFromEnvelope`) and the
42
+ * translation surfaces them as the v1 `info.error` shape. A failed outcome
43
+ * without recorded detail yields a bounded `provider.unknown` error
44
+ * instead of a silent empty success.
45
+ * - `abort` maps to `interrupt`, `delete` to `remove`, `get` to the v2 get
46
+ * (unresolved placeholders read as `{data: null}` — never prompted means
47
+ * gone, satisfying `teardownEphemeralSessionVerified`).
48
+ *
49
+ * Deferred-work marker: NONE. The unverified live-host behaviors this design
50
+ * rests on are recorded as deferrals in the trace (context-hook firing for
51
+ * plugin-created sessions, permission vocabulary honor, `context()` entry
52
+ * shapes, `wait` on failed prompts, `get(parent).location` availability) with
53
+ * the owning follow-up on #3169.
54
+ *
55
+ * C6 await convention: every `await` lives inside a `deferredV2Session*`
56
+ * function declaration or `const deferredV2SessionX = async (` binding — the
57
+ * dual-shape-parity scan's function tracker does not recognize object-literal
58
+ * method properties, so the client object's methods never await directly.
59
+ */
60
+ import type { OpencodeClient } from '@opencode-ai/sdk';
61
+ import type { V2EventEnvelope, V2PluginContext, V2SessionPermission } from './types';
62
+ /**
63
+ * Record a `session.error` / `session.execution.failed` envelope's error
64
+ * payload for the shim's result translation. SYNC by contract — the event pump
65
+ * calls it inline in its iteration loop. Accepts the same dual payload dialect
66
+ * `mapV2EventToV1` accepts (live `data`, SDK `properties`).
67
+ */
68
+ export declare function recordV2SessionErrorFromEnvelope(envelope: V2EventEnvelope): void;
69
+ /** Drop all shim-held state (v2 cleanup path; bounded residue documented in the trace). */
70
+ export declare function clearV2SessionClientState(): void;
71
+ /**
72
+ * Map a v1 read-only denial map onto v2 create-time permission entries.
73
+ * Fail-closed shape: only `effect: 'deny'` entries are ever produced.
74
+ */
75
+ export declare function readOnlyToolsToV2Permissions(tools: Readonly<Record<string, false>> | undefined): V2SessionPermission[];
76
+ /** Feature-detect the full surface the shim requires (types.ts host-tolerance contract). */
77
+ export declare function createV2SessionClient(ctx: V2PluginContext): OpencodeClient | undefined;