opencode-swarm 7.192.0 → 7.192.2

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 (120) hide show
  1. package/.opencode/skills/critic-gate/SKILL.md +2 -1
  2. package/.opencode/skills/execute/SKILL.md +1 -1
  3. package/.opencode/skills/swarm-pr-review/SKILL.md +2 -2
  4. package/.opencode/skills/swarm-pr-review/references/lane-output-recoverability.md +18 -8
  5. package/README.md +5 -3
  6. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  7. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  8. package/dist/agents/critic.d.ts +2 -2
  9. package/dist/background/pr-review-trigger-contract.d.ts +145 -0
  10. package/dist/cli/{auto-checkpoint-fzybxf58.js → auto-checkpoint-735m8sz7.js} +8 -8
  11. package/dist/cli/{capability-probe-3mgxcfr9.js → capability-probe-rty1315z.js} +1 -1
  12. package/dist/cli/{checkpoint-6fr9tc3h.js → checkpoint-ptzc5jev.js} +16 -16
  13. package/dist/cli/{coder-settlement-1t0r6q0r.js → coder-settlement-hh5165m1.js} +12 -12
  14. package/dist/cli/{config-doctor-0kd6w45h.js → config-doctor-wzzvhpcr.js} +15 -15
  15. package/dist/cli/{core-dxraa2ss.js → core-0jarm64k.js} +3 -3
  16. package/dist/cli/{curation-policy-6p6fcfjb.js → curation-policy-yzdznz4z.js} +6 -6
  17. package/dist/cli/{curator-drift-6qb0c363.js → curator-drift-f4aqxz9e.js} +8 -8
  18. package/dist/cli/{curator-hwwp7e2g.js → curator-f7crssw2.js} +43 -43
  19. package/dist/cli/curator-llm-factory-kxnzvhje.js +82 -0
  20. package/dist/cli/{doctor-knowledge-receipt-phase-id-ay2ngn4a.js → doctor-knowledge-receipt-phase-id-qvp1h3xv.js} +8 -8
  21. package/dist/cli/{evidence-summary-service-fyyzhbsc.js → evidence-summary-service-379skych.js} +19 -19
  22. package/dist/cli/{gate-evidence-zt2vj631.js → gate-evidence-b4cfrrgn.js} +7 -7
  23. package/dist/cli/guardrail-explain-tcnfc3te.js +83 -0
  24. package/dist/cli/{guardrail-log-ppgfsfzt.js → guardrail-log-xe1evybk.js} +7 -7
  25. package/dist/cli/{guardrail-reset-4psprskt.js → guardrail-reset-jwx5hsgp.js} +43 -43
  26. package/dist/cli/{hive-promoter-vxrwvhga.js → hive-promoter-nks9a9s8.js} +43 -43
  27. package/dist/cli/{index-y9v41185.js → index-0e1nxkte.js} +1 -1
  28. package/dist/cli/{index-r9yvpr2m.js → index-1n7sf9gz.js} +2 -2
  29. package/dist/cli/{index-d5dwf6q6.js → index-25zjz6kv.js} +5 -5
  30. package/dist/cli/{index-ywmz75rj.js → index-29z0w323.js} +7 -7
  31. package/dist/cli/{index-05t8f1bj.js → index-2y7y0bxf.js} +43 -43
  32. package/dist/cli/{index-sxw0jbyc.js → index-4qreeddq.js} +4 -4
  33. package/dist/cli/{index-mj237f76.js → index-4tfr4j1a.js} +7 -7
  34. package/dist/cli/{index-z3ahy9c2.js → index-4twjbsfw.js} +2 -2
  35. package/dist/cli/{index-sxj143a4.js → index-5dws7eyb.js} +1 -1
  36. package/dist/cli/{index-b2j231jy.js → index-5gy5dc2n.js} +2 -2
  37. package/dist/cli/{index-hqqfxytt.js → index-5s74qd5b.js} +1 -1
  38. package/dist/cli/{index-dexj54h2.js → index-7a92gwbg.js} +4 -4
  39. package/dist/cli/{index-egkph2cs.js → index-7bppy3ve.js} +4 -4
  40. package/dist/cli/{index-mqf06fyy.js → index-878ksabw.js} +11 -11
  41. package/dist/cli/{index-p1z7pafk.js → index-89826pb5.js} +2 -2
  42. package/dist/cli/{index-2fpv2wmc.js → index-8zj647hc.js} +1 -1
  43. package/dist/cli/{index-ecx8jh7s.js → index-914wsfyy.js} +2 -2
  44. package/dist/cli/{index-tv0m2css.js → index-a83gmv2e.js} +2 -2
  45. package/dist/cli/{index-zk6ttjkt.js → index-a9m7h5v0.js} +2 -2
  46. package/dist/cli/{index-sx3g9nwg.js → index-asm2r4g2.js} +4 -4
  47. package/dist/cli/{index-v9geqn2t.js → index-ba87gkb4.js} +20 -6
  48. package/dist/cli/{index-3zwhxk98.js → index-bgzpw6ge.js} +1 -1
  49. package/dist/cli/{index-3c8v05x1.js → index-br28jc6d.js} +3 -3
  50. package/dist/cli/{index-sgxbqba0.js → index-bzfn85kq.js} +119 -55
  51. package/dist/cli/{index-zv71frp3.js → index-cf003krm.js} +6 -6
  52. package/dist/cli/{index-mcv0v2dp.js → index-dt4cjxbz.js} +1 -1
  53. package/dist/cli/{index-mjfpaxw3.js → index-dtet46e6.js} +7 -7
  54. package/dist/cli/{index-8bx6vhzk.js → index-e8k0v19e.js} +1 -1
  55. package/dist/cli/{index-nkgzkt7c.js → index-eaess7dm.js} +1 -1
  56. package/dist/cli/{index-93zvq6wn.js → index-ejq082zj.js} +5 -5
  57. package/dist/cli/{index-4d04qzw5.js → index-f54stv77.js} +3 -3
  58. package/dist/cli/{index-kfevm0n5.js → index-fzqn2kk8.js} +2 -2
  59. package/dist/cli/{index-n8q43eff.js → index-g8jd3h4r.js} +2 -2
  60. package/dist/cli/{index-gv63kdd3.js → index-hcsz7bhg.js} +3 -3
  61. package/dist/cli/{index-ngjjwcam.js → index-k96fx4yw.js} +2 -2
  62. package/dist/cli/{index-feaxsjrt.js → index-mbn4vn3z.js} +1 -1
  63. package/dist/cli/{index-7vnr5cmp.js → index-mtqwyjrg.js} +1 -1
  64. package/dist/cli/{index-qs9myayh.js → index-nwswxes7.js} +4 -4
  65. package/dist/cli/{index-aazwrwy1.js → index-q0bctx7k.js} +1 -1
  66. package/dist/cli/{index-1ajj6zbq.js → index-qp3twbdz.js} +45 -45
  67. package/dist/cli/{index-rehvfgre.js → index-qta3x82z.js} +253 -108
  68. package/dist/cli/{index-646s7gp9.js → index-w8e73tp0.js} +12 -7
  69. package/dist/cli/{index-c5644p1y.js → index-w917g452.js} +6 -6
  70. package/dist/cli/{index-9qwmx95b.js → index-w9y482mp.js} +1 -1
  71. package/dist/cli/{index-bx6x9ee7.js → index-xen0j48x.js} +2 -2
  72. package/dist/cli/{index-6v42d116.js → index-xf5v44qh.js} +3 -3
  73. package/dist/cli/{index-3pkeqcxe.js → index-ypvz2c60.js} +7 -7
  74. package/dist/cli/{index-x00ghp37.js → index-yte4hqhv.js} +3 -3
  75. package/dist/cli/index.d.ts +2 -2
  76. package/dist/cli/index.js +60 -54
  77. package/dist/cli/{knowledge-escalator-b45xccz8.js → knowledge-escalator-gzzr7cy2.js} +14 -14
  78. package/dist/cli/{knowledge-events-rtmavbyy.js → knowledge-events-b16yc189.js} +12 -12
  79. package/dist/cli/{knowledge-link-6hw3z6wn.js → knowledge-link-a5tvjqdt.js} +5 -5
  80. package/dist/cli/{knowledge-store-0beaqdxd.js → knowledge-store-arj3by4h.js} +6 -6
  81. package/dist/cli/{knowledge-validator-r1kjxt80.js → knowledge-validator-b3qhjg0t.js} +8 -8
  82. package/dist/cli/{mcp-gq7gy5qm.js → mcp-972t0jt0.js} +1 -1
  83. package/dist/cli/{model-preflight-za9f75h1.js → model-preflight-f1xvxk6e.js} +43 -43
  84. package/dist/cli/{pending-delegations-ba4bbh3d.js → pending-delegations-fv5xz799.js} +12 -12
  85. package/dist/cli/{pr-subscriptions-9ge667xn.js → pr-subscriptions-4mcwj33s.js} +12 -12
  86. package/dist/cli/{pr-workflow-gate-p1sv3vp7.js → pr-workflow-gate-ap5cp211.js} +45 -43
  87. package/dist/cli/{runner-ssnsje35.js → runner-8qybgy4n.js} +6 -6
  88. package/dist/cli/{scan-cursor-hrn48cja.js → scan-cursor-tceyckdx.js} +7 -7
  89. package/dist/cli/{schema-6cwam61t.js → schema-pqevpe3m.js} +1 -1
  90. package/dist/cli/{scope-persistence-z8b0cj5e.js → scope-persistence-ta6ydymv.js} +15 -15
  91. package/dist/cli/{server-sqxa4vjy.js → server-s9bfax7h.js} +43 -43
  92. package/dist/cli/{skill-generator-6dfgb9hj.js → skill-generator-xdg4626x.js} +16 -16
  93. package/dist/cli/{snapshot-coordination-init-rt4xyayx.js → snapshot-coordination-init-wn0hnwyv.js} +43 -43
  94. package/dist/cli/{speckit-checkoff-q1zqzwbw.js → speckit-checkoff-8x139jpf.js} +4 -4
  95. package/dist/cli/{telemetry-9szfdfqv.js → telemetry-qaymh4gg.js} +1 -1
  96. package/dist/cli/{workspace-snapshot-9f12p1s1.js → workspace-snapshot-vfpnxjsp.js} +3 -3
  97. package/dist/cli/{worktree-collision-ownership-ge241a9e.js → worktree-collision-ownership-as8hnnff.js} +13 -13
  98. package/dist/cli/{worktree-isolation-c9x73qrk.js → worktree-isolation-7vrs8t9b.js} +49 -43
  99. package/dist/commands/turbo.d.ts +4 -3
  100. package/dist/config/constants.d.ts +2 -2
  101. package/dist/config/plan-schema.d.ts +16 -0
  102. package/dist/epic/phase-readiness.d.ts +4 -2
  103. package/dist/evaluation/ephemeral-agent-dispatcher.d.ts +11 -0
  104. package/dist/failures/provider-message-error.d.ts +32 -0
  105. package/dist/hooks/delegation-gate/worktree-isolation.d.ts +40 -0
  106. package/dist/hooks/delegation-gate.d.ts +13 -0
  107. package/dist/hooks/extractors.d.ts +2 -0
  108. package/dist/hooks/guardrails/index.d.ts +2 -0
  109. package/dist/hooks/guardrails/parallel-gate-attribution.d.ts +10 -0
  110. package/dist/hooks/pr-workflow-gate.d.ts +12 -1
  111. package/dist/index.js +415 -412
  112. package/dist/plan/ledger.d.ts +21 -3
  113. package/dist/sandbox/linux/bubblewrap-executor.d.ts +24 -0
  114. package/dist/services/skill-optimizer/store.d.ts +2 -2
  115. package/dist/tools/phase-complete.d.ts +4 -0
  116. package/dist/tools/write-pr-review-trigger-eval.d.ts +4 -0
  117. package/opencode-swarm.schema.json +1 -1
  118. package/package.json +1 -1
  119. package/dist/cli/curator-llm-factory-w6hvns5a.js +0 -82
  120. package/dist/cli/guardrail-explain-ddtj3djc.js +0 -83
@@ -33,36 +33,36 @@ import {
33
33
  sanitizeSlug,
34
34
  selectCandidateEntries,
35
35
  writeEvalStub
36
- } from "./index-sx3g9nwg.js";
36
+ } from "./index-asm2r4g2.js";
37
37
  import"./index-q7sjgr1y.js";
38
- import"./index-sxw0jbyc.js";
39
- import"./index-646s7gp9.js";
38
+ import"./index-4qreeddq.js";
39
+ import"./index-w8e73tp0.js";
40
40
  import"./index-m9zzj4ee.js";
41
- import"./index-nkgzkt7c.js";
41
+ import"./index-eaess7dm.js";
42
42
  import"./index-2s7dvzff.js";
43
- import"./index-egkph2cs.js";
44
- import"./index-sxj143a4.js";
43
+ import"./index-7bppy3ve.js";
44
+ import"./index-5dws7eyb.js";
45
45
  import"./index-rtry5xyf.js";
46
- import"./index-p1z7pafk.js";
46
+ import"./index-89826pb5.js";
47
47
  import"./index-g22dps7x.js";
48
48
  import"./index-0725jpp7.js";
49
- import"./index-z3ahy9c2.js";
50
- import"./index-ywmz75rj.js";
49
+ import"./index-4twjbsfw.js";
50
+ import"./index-29z0w323.js";
51
51
  import"./index-vzm6zre7.js";
52
52
  import"./index-ae75rja9.js";
53
- import"./index-3zwhxk98.js";
54
- import"./index-r9yvpr2m.js";
55
- import"./index-8bx6vhzk.js";
53
+ import"./index-bgzpw6ge.js";
54
+ import"./index-1n7sf9gz.js";
55
+ import"./index-e8k0v19e.js";
56
56
  import"./index-t7hmqgjy.js";
57
- import"./index-7vnr5cmp.js";
57
+ import"./index-mtqwyjrg.js";
58
58
  import"./index-fzpt2djt.js";
59
59
  import"./index-ejhxgyvm.js";
60
60
  import"./index-7g4c7s5r.js";
61
- import"./index-qs9myayh.js";
61
+ import"./index-nwswxes7.js";
62
62
  import"./index-gx2vp8gx.js";
63
- import"./index-9qwmx95b.js";
63
+ import"./index-w9y482mp.js";
64
64
  import"./index-zxdawwc7.js";
65
- import"./index-tv0m2css.js";
65
+ import"./index-a83gmv2e.js";
66
66
  import"./index-py8wpe81.js";
67
67
  import"./index-bk5tah7q.js";
68
68
  import"./index-gknz3bv1.js";
@@ -8,79 +8,79 @@ import {
8
8
  markSnapshotCoordinationClosing,
9
9
  retrySnapshotCoordinationInitialization,
10
10
  startSnapshotCoordinationInitialization
11
- } from "./index-rehvfgre.js";
12
- import"./index-6v42d116.js";
13
- import"./index-x00ghp37.js";
14
- import"./index-d5dwf6q6.js";
11
+ } from "./index-qta3x82z.js";
12
+ import"./index-xf5v44qh.js";
13
+ import"./index-yte4hqhv.js";
14
+ import"./index-25zjz6kv.js";
15
15
  import"./index-j2vv0h13.js";
16
- import"./index-y9v41185.js";
17
- import"./index-b2j231jy.js";
16
+ import"./index-0e1nxkte.js";
17
+ import"./index-5gy5dc2n.js";
18
18
  import"./index-txdagbh7.js";
19
- import"./index-ecx8jh7s.js";
19
+ import"./index-914wsfyy.js";
20
20
  import"./index-rdec0y3z.js";
21
- import"./index-3c8v05x1.js";
22
- import"./index-mj237f76.js";
23
- import"./index-sx3g9nwg.js";
24
- import"./index-c5644p1y.js";
25
- import"./index-kfevm0n5.js";
26
- import"./index-mjfpaxw3.js";
21
+ import"./index-br28jc6d.js";
22
+ import"./index-4tfr4j1a.js";
23
+ import"./index-asm2r4g2.js";
24
+ import"./index-w917g452.js";
25
+ import"./index-fzqn2kk8.js";
26
+ import"./index-dtet46e6.js";
27
27
  import"./index-cjapb4hy.js";
28
- import"./index-n8q43eff.js";
28
+ import"./index-g8jd3h4r.js";
29
29
  import"./index-pt7h91zc.js";
30
30
  import"./index-q7sjgr1y.js";
31
- import"./index-zv71frp3.js";
32
- import"./index-mqf06fyy.js";
31
+ import"./index-cf003krm.js";
32
+ import"./index-878ksabw.js";
33
33
  import"./index-6b295cas.js";
34
34
  import"./index-9nyqt3kb.js";
35
- import"./index-hqqfxytt.js";
35
+ import"./index-5s74qd5b.js";
36
36
  import"./index-v3bmwmqw.js";
37
- import"./index-ngjjwcam.js";
38
- import"./index-dexj54h2.js";
39
- import"./index-4d04qzw5.js";
37
+ import"./index-k96fx4yw.js";
38
+ import"./index-7a92gwbg.js";
39
+ import"./index-f54stv77.js";
40
40
  import"./index-g4fs6z4e.js";
41
- import"./index-3pkeqcxe.js";
42
- import"./index-sxw0jbyc.js";
43
- import"./index-646s7gp9.js";
41
+ import"./index-ypvz2c60.js";
42
+ import"./index-4qreeddq.js";
43
+ import"./index-w8e73tp0.js";
44
44
  import"./index-m9zzj4ee.js";
45
- import"./index-nkgzkt7c.js";
45
+ import"./index-eaess7dm.js";
46
46
  import"./index-2s7dvzff.js";
47
- import"./index-egkph2cs.js";
48
- import"./index-sxj143a4.js";
47
+ import"./index-7bppy3ve.js";
48
+ import"./index-5dws7eyb.js";
49
49
  import"./index-rtry5xyf.js";
50
- import"./index-p1z7pafk.js";
50
+ import"./index-89826pb5.js";
51
51
  import"./index-g22dps7x.js";
52
52
  import"./index-0725jpp7.js";
53
- import"./index-93zvq6wn.js";
54
- import"./index-v9geqn2t.js";
55
- import"./index-zk6ttjkt.js";
56
- import"./index-mcv0v2dp.js";
57
- import"./index-feaxsjrt.js";
58
- import"./index-2fpv2wmc.js";
53
+ import"./index-ejq082zj.js";
54
+ import"./index-ba87gkb4.js";
55
+ import"./index-a9m7h5v0.js";
56
+ import"./index-dt4cjxbz.js";
57
+ import"./index-mbn4vn3z.js";
58
+ import"./index-8zj647hc.js";
59
59
  import"./index-ry16d01s.js";
60
60
  import"./index-rdm3px0g.js";
61
61
  import"./index-7pmbnjvj.js";
62
- import"./index-z3ahy9c2.js";
63
- import"./index-ywmz75rj.js";
62
+ import"./index-4twjbsfw.js";
63
+ import"./index-29z0w323.js";
64
64
  import"./index-vzm6zre7.js";
65
65
  import"./index-ae75rja9.js";
66
- import"./index-3zwhxk98.js";
67
- import"./index-r9yvpr2m.js";
68
- import"./index-8bx6vhzk.js";
66
+ import"./index-bgzpw6ge.js";
67
+ import"./index-1n7sf9gz.js";
68
+ import"./index-e8k0v19e.js";
69
69
  import"./index-t7hmqgjy.js";
70
- import"./index-7vnr5cmp.js";
70
+ import"./index-mtqwyjrg.js";
71
71
  import"./index-fzpt2djt.js";
72
72
  import"./index-ejhxgyvm.js";
73
73
  import"./index-7g4c7s5r.js";
74
- import"./index-qs9myayh.js";
74
+ import"./index-nwswxes7.js";
75
75
  import"./index-gx2vp8gx.js";
76
- import"./index-9qwmx95b.js";
76
+ import"./index-w9y482mp.js";
77
77
  import"./index-zxdawwc7.js";
78
- import"./index-tv0m2css.js";
78
+ import"./index-a83gmv2e.js";
79
79
  import"./index-py8wpe81.js";
80
80
  import"./index-bk5tah7q.js";
81
81
  import"./index-gknz3bv1.js";
82
82
  import"./index-zpsr8rpc.js";
83
- import"./index-sgxbqba0.js";
83
+ import"./index-bzfn85kq.js";
84
84
  import"./index-9rwhas09.js";
85
85
  import"./index-zgwm4ryv.js";
86
86
  import"./index-a76rekgs.js";
@@ -7,13 +7,13 @@ import {
7
7
  parseSpeckitTasksContent,
8
8
  propagateSpeckitCheckoff,
9
9
  writeSpeckitCheckoffLedger
10
- } from "./index-ngjjwcam.js";
10
+ } from "./index-k96fx4yw.js";
11
11
  import"./index-ejhxgyvm.js";
12
12
  import"./index-7g4c7s5r.js";
13
- import"./index-qs9myayh.js";
14
- import"./index-9qwmx95b.js";
13
+ import"./index-nwswxes7.js";
14
+ import"./index-w9y482mp.js";
15
15
  import"./index-zxdawwc7.js";
16
- import"./index-tv0m2css.js";
16
+ import"./index-a83gmv2e.js";
17
17
  import"./index-py8wpe81.js";
18
18
  import"./index-bk5tah7q.js";
19
19
  import"./index-gknz3bv1.js";
@@ -14,7 +14,7 @@ import {
14
14
  startHeartbeatTracking,
15
15
  stopHeartbeatTracking,
16
16
  telemetry
17
- } from "./index-7vnr5cmp.js";
17
+ } from "./index-mtqwyjrg.js";
18
18
  import"./index-fzpt2djt.js";
19
19
  import"./index-gknz3bv1.js";
20
20
  import"./index-zpsr8rpc.js";
@@ -46,11 +46,11 @@ import {
46
46
  shouldSkipSnapshot,
47
47
  switchPrFeedbackTrackingCandidateAsync,
48
48
  workspaceSnapshotMatches
49
- } from "./index-kfevm0n5.js";
50
- import"./index-nkgzkt7c.js";
49
+ } from "./index-fzqn2kk8.js";
50
+ import"./index-eaess7dm.js";
51
51
  import"./index-2s7dvzff.js";
52
52
  import"./index-fzpt2djt.js";
53
- import"./index-qs9myayh.js";
53
+ import"./index-nwswxes7.js";
54
54
  import"./index-zxdawwc7.js";
55
55
  import"./index-zpsr8rpc.js";
56
56
  import"./index-zgwm4ryv.js";
@@ -6,37 +6,37 @@ import {
6
6
  WORKTREE_PROVISIONING_OWNER_LEASE_MS,
7
7
  removeWorktreeProvisioningOwner,
8
8
  scanWorktreeProvisioningOwnersForRecovery
9
- } from "./index-n8q43eff.js";
9
+ } from "./index-g8jd3h4r.js";
10
10
  import {
11
11
  scanWorktreeMergeFailuresForRecovery
12
12
  } from "./index-v3bmwmqw.js";
13
13
  import {
14
14
  scanDelegationFallbacksForRecovery,
15
15
  scanDelegationsForRecovery
16
- } from "./index-3pkeqcxe.js";
17
- import"./index-nkgzkt7c.js";
16
+ } from "./index-ypvz2c60.js";
17
+ import"./index-eaess7dm.js";
18
18
  import"./index-2s7dvzff.js";
19
- import"./index-mcv0v2dp.js";
20
- import"./index-feaxsjrt.js";
21
- import"./index-2fpv2wmc.js";
19
+ import"./index-dt4cjxbz.js";
20
+ import"./index-mbn4vn3z.js";
21
+ import"./index-8zj647hc.js";
22
22
  import"./index-ry16d01s.js";
23
23
  import"./index-rdm3px0g.js";
24
24
  import"./index-7pmbnjvj.js";
25
- import"./index-z3ahy9c2.js";
26
- import"./index-ywmz75rj.js";
25
+ import"./index-4twjbsfw.js";
26
+ import"./index-29z0w323.js";
27
27
  import"./index-vzm6zre7.js";
28
28
  import"./index-ae75rja9.js";
29
- import"./index-3zwhxk98.js";
30
- import"./index-r9yvpr2m.js";
31
- import"./index-8bx6vhzk.js";
29
+ import"./index-bgzpw6ge.js";
30
+ import"./index-1n7sf9gz.js";
31
+ import"./index-e8k0v19e.js";
32
32
  import"./index-t7hmqgjy.js";
33
- import"./index-7vnr5cmp.js";
33
+ import"./index-mtqwyjrg.js";
34
34
  import {
35
35
  canonicalRootKeyFresh
36
36
  } from "./index-fzpt2djt.js";
37
37
  import"./index-ejhxgyvm.js";
38
38
  import"./index-7g4c7s5r.js";
39
- import"./index-qs9myayh.js";
39
+ import"./index-nwswxes7.js";
40
40
  import"./index-zxdawwc7.js";
41
41
  import"./index-bk5tah7q.js";
42
42
  import"./index-gknz3bv1.js";
@@ -3,6 +3,7 @@ import {
3
3
  MAX_TRACKED_STANDARD_WORKTREE_CALLS,
4
4
  _internals1 as _internals,
5
5
  abortStandardWorktreeDispatch,
6
+ assertTaskIdNotForeignLaneSession,
6
7
  awaitingMergeByCallID,
7
8
  checkStandardWorktreeSerializationRelease,
8
9
  cleanupStandardWorktreeForCallId,
@@ -10,6 +11,7 @@ import {
10
11
  finishStandardWorktreeDispatch,
11
12
  getStandardWorktreeDegradationReason,
12
13
  isLaneOwnedByCurrentSession,
14
+ laneChildSessionAgents,
13
15
  parseLeanLaneIndex,
14
16
  preProvisionCollisionCheck,
15
17
  precreateStandardWorktreeSession,
@@ -17,86 +19,87 @@ import {
17
19
  preserveDirtyWorktreeAtPath,
18
20
  preserveDirtyWorktreeForCallId,
19
21
  readLaneEnvFileFromDisk,
22
+ recordLaneChildSession,
20
23
  resetStandardWorktreeIsolationState,
21
24
  runSerializedWithMergeBacks,
22
25
  sanitizeWorktreeTaskId,
23
26
  standardWorktreeByCallID,
24
27
  standardWorktreeSerializationSessions
25
- } from "./index-rehvfgre.js";
26
- import"./index-6v42d116.js";
27
- import"./index-x00ghp37.js";
28
- import"./index-d5dwf6q6.js";
28
+ } from "./index-qta3x82z.js";
29
+ import"./index-xf5v44qh.js";
30
+ import"./index-yte4hqhv.js";
31
+ import"./index-25zjz6kv.js";
29
32
  import"./index-j2vv0h13.js";
30
- import"./index-y9v41185.js";
31
- import"./index-b2j231jy.js";
33
+ import"./index-0e1nxkte.js";
34
+ import"./index-5gy5dc2n.js";
32
35
  import"./index-txdagbh7.js";
33
- import"./index-ecx8jh7s.js";
36
+ import"./index-914wsfyy.js";
34
37
  import"./index-rdec0y3z.js";
35
- import"./index-3c8v05x1.js";
36
- import"./index-mj237f76.js";
37
- import"./index-sx3g9nwg.js";
38
- import"./index-c5644p1y.js";
39
- import"./index-kfevm0n5.js";
40
- import"./index-mjfpaxw3.js";
38
+ import"./index-br28jc6d.js";
39
+ import"./index-4tfr4j1a.js";
40
+ import"./index-asm2r4g2.js";
41
+ import"./index-w917g452.js";
42
+ import"./index-fzqn2kk8.js";
43
+ import"./index-dtet46e6.js";
41
44
  import"./index-cjapb4hy.js";
42
- import"./index-n8q43eff.js";
45
+ import"./index-g8jd3h4r.js";
43
46
  import"./index-pt7h91zc.js";
44
47
  import"./index-q7sjgr1y.js";
45
- import"./index-zv71frp3.js";
46
- import"./index-mqf06fyy.js";
48
+ import"./index-cf003krm.js";
49
+ import"./index-878ksabw.js";
47
50
  import"./index-6b295cas.js";
48
51
  import"./index-9nyqt3kb.js";
49
- import"./index-hqqfxytt.js";
52
+ import"./index-5s74qd5b.js";
50
53
  import"./index-v3bmwmqw.js";
51
- import"./index-ngjjwcam.js";
52
- import"./index-dexj54h2.js";
53
- import"./index-4d04qzw5.js";
54
+ import"./index-k96fx4yw.js";
55
+ import"./index-7a92gwbg.js";
56
+ import"./index-f54stv77.js";
54
57
  import"./index-g4fs6z4e.js";
55
- import"./index-3pkeqcxe.js";
56
- import"./index-sxw0jbyc.js";
57
- import"./index-646s7gp9.js";
58
+ import"./index-ypvz2c60.js";
59
+ import"./index-4qreeddq.js";
60
+ import"./index-w8e73tp0.js";
58
61
  import"./index-m9zzj4ee.js";
59
- import"./index-nkgzkt7c.js";
62
+ import"./index-eaess7dm.js";
60
63
  import"./index-2s7dvzff.js";
61
- import"./index-egkph2cs.js";
62
- import"./index-sxj143a4.js";
64
+ import"./index-7bppy3ve.js";
65
+ import"./index-5dws7eyb.js";
63
66
  import"./index-rtry5xyf.js";
64
67
  import {
65
68
  resolveWorktreeIsolationConfig
66
- } from "./index-p1z7pafk.js";
69
+ } from "./index-89826pb5.js";
67
70
  import"./index-g22dps7x.js";
68
71
  import"./index-0725jpp7.js";
69
- import"./index-93zvq6wn.js";
70
- import"./index-v9geqn2t.js";
71
- import"./index-zk6ttjkt.js";
72
- import"./index-mcv0v2dp.js";
73
- import"./index-feaxsjrt.js";
74
- import"./index-2fpv2wmc.js";
72
+ import"./index-ejq082zj.js";
73
+ import"./index-ba87gkb4.js";
74
+ import"./index-a9m7h5v0.js";
75
+ import"./index-dt4cjxbz.js";
76
+ import"./index-mbn4vn3z.js";
77
+ import"./index-8zj647hc.js";
75
78
  import"./index-ry16d01s.js";
76
79
  import"./index-rdm3px0g.js";
77
80
  import"./index-7pmbnjvj.js";
78
- import"./index-z3ahy9c2.js";
79
- import"./index-ywmz75rj.js";
81
+ import"./index-4twjbsfw.js";
82
+ import"./index-29z0w323.js";
80
83
  import"./index-vzm6zre7.js";
81
84
  import"./index-ae75rja9.js";
82
- import"./index-3zwhxk98.js";
83
- import"./index-r9yvpr2m.js";
84
- import"./index-8bx6vhzk.js";
85
+ import"./index-bgzpw6ge.js";
86
+ import"./index-1n7sf9gz.js";
87
+ import"./index-e8k0v19e.js";
85
88
  import"./index-t7hmqgjy.js";
86
- import"./index-7vnr5cmp.js";
89
+ import"./index-mtqwyjrg.js";
87
90
  import"./index-fzpt2djt.js";
88
91
  import"./index-ejhxgyvm.js";
89
92
  import"./index-7g4c7s5r.js";
90
- import"./index-qs9myayh.js";
93
+ import"./index-nwswxes7.js";
91
94
  import"./index-gx2vp8gx.js";
92
- import"./index-9qwmx95b.js";
95
+ import"./index-w9y482mp.js";
93
96
  import"./index-zxdawwc7.js";
94
- import"./index-tv0m2css.js";
97
+ import"./index-a83gmv2e.js";
95
98
  import"./index-py8wpe81.js";
96
99
  import"./index-bk5tah7q.js";
97
100
  import"./index-gknz3bv1.js";
98
101
  import"./index-zpsr8rpc.js";
99
- import"./index-sgxbqba0.js";
102
+ import"./index-bzfn85kq.js";
100
103
  import"./index-9rwhas09.js";
101
104
  import"./index-zgwm4ryv.js";
102
105
  import"./index-a76rekgs.js";
@@ -107,6 +110,7 @@ export {
107
110
  runSerializedWithMergeBacks,
108
111
  resolveWorktreeIsolationConfig,
109
112
  resetStandardWorktreeIsolationState,
113
+ recordLaneChildSession,
110
114
  readLaneEnvFileFromDisk,
111
115
  preserveDirtyWorktreeForCallId,
112
116
  preserveDirtyWorktreeAtPath,
@@ -114,6 +118,7 @@ export {
114
118
  precreateStandardWorktreeSession,
115
119
  preProvisionCollisionCheck,
116
120
  parseLeanLaneIndex,
121
+ laneChildSessionAgents,
117
122
  isLaneOwnedByCurrentSession,
118
123
  getStandardWorktreeDegradationReason,
119
124
  finishStandardWorktreeDispatch,
@@ -121,6 +126,7 @@ export {
121
126
  cleanupStandardWorktreeForCallId,
122
127
  checkStandardWorktreeSerializationRelease,
123
128
  awaitingMergeByCallID,
129
+ assertTaskIdNotForeignLaneSession,
124
130
  abortStandardWorktreeDispatch,
125
131
  _internals,
126
132
  MAX_TRACKED_STANDARD_WORKTREE_CALLS
@@ -19,9 +19,10 @@ export declare const _internals: {
19
19
  export declare const TURBO_EPIC_REDIRECT_MESSAGE = "Epic is no longer combined with Turbo; use `/swarm epic start` (it enables neither Lean nor Turbo, and per-task QA is never waived). Turbo state is unchanged.";
20
20
  /**
21
21
  * Reply to any Turbo-enabling invocation while an Epic is open for the
22
- * project: Turbo/Lean would waive per-task QA (Stage B) that Epic never
23
- * waives, so enabling is refused until the Epic is closed. Disabling Turbo
24
- * stays available.
22
+ * project: Turbo/Lean relax gates that Epic keeps (phase_complete Gates 1–5,
23
+ * the coder re-dispatch block before Stage A; per-task Stage B is required in
24
+ * every mode), so enabling is refused until the Epic is closed. Disabling
25
+ * Turbo stays available.
25
26
  */
26
27
  export declare const TURBO_EPIC_OPEN_REFUSAL = "Turbo Mode NOT enabled \u2014 epic-open: close the epic first (/swarm epic close). Turbo state is unchanged.";
27
28
  /**
@@ -135,7 +135,7 @@ export declare const COMPACTION_DEFAULTS: {
135
135
  readonly emergencyThreshold: 80;
136
136
  readonly preserveLastNTurns: 5;
137
137
  };
138
- export declare const TURBO_MODE_BANNER = "## \uD83D\uDE80 TURBO MODE ACTIVE\n\n**Speed optimization enabled for this session.**\n\nWhile Turbo Mode is active:\n- **Stage A gates** (lint, imports, pre_check_batch) are still REQUIRED for ALL tasks\n- **Tier 3 tasks** (security-sensitive files matching: architect*.ts, delegation*.ts, guardrails*.ts, adversarial*.ts, sanitiz*.ts, security*.ts; exact basenames: auth, authenticate, authentication, authorization, permission(s), crypto, secret(s), secretscan; keyword prefixes: auth-*, permission-*, crypto-*, secret-*, security-*; or files under auth/, security/, crypto/, permission/, secret/ directories) still require FULL review (Stage B)\n- **Tier 0-2 tasks** can skip Stage B (reviewer, test_engineer) to speed up execution\n- **Phase completion gates** (Gates 1\u20135: completion-verify, drift-verifier, hallucination-guard, mutation-gate, phase-council) are automatically bypassed via the orchestrator short-circuit at `src/tools/phase-complete.ts:774\u2013827` when turbo is active; Gate 5b (architecture-supervisor), Gate 6 (final-council), and Gate 7 (full-auto) remain enforced. Note: turbo bypass is session-scoped; one session's turbo does not affect other sessions.\n\nClassification still determines the pipeline:\n- TIER 0 (metadata): lint + diff only \u2014 no change\n- TIER 1 (docs): Stage A + reviewer \u2014 no change\n- TIER 2 (standard code): Stage A + reviewer + test_engineer \u2014 CAN SKIP Stage B with turboMode\n- TIER 3 (critical): Stage A + 2x reviewer + 2x test_engineer \u2014 Stage B REQUIRED (no turbo bypass)\n\nDo NOT skip Stage A gates. Do NOT skip Stage B for TIER 3.\n";
138
+ export declare const TURBO_MODE_BANNER = "## \uD83D\uDE80 TURBO MODE ACTIVE\n\n**Speed optimization enabled for this session.**\n\nWhile Turbo Mode is active:\n- **Stage A gates** (lint, imports, pre_check_batch) are still REQUIRED for ALL tasks\n- **Stage B** (reviewer + test_engineer) is NOT bypassed by Turbo: `update_task_status(completed)` applies the same Stage B rule whether or not Turbo is active, so a task needs Stage B exactly when it would without Turbo\n- **Tier 3 tasks** (security-sensitive files matching: architect*.ts, delegation*.ts, guardrails*.ts, adversarial*.ts, sanitiz*.ts, security*.ts; exact basenames: auth, authenticate, authentication, authorization, permission(s), crypto, secret(s), secretscan; keyword prefixes: auth-*, permission-*, crypto-*, secret-*, security-*; or files under auth/, security/, crypto/, permission/, secret/ directories) also keep the coder re-dispatch block until Stage A passes; other tasks whose planned files_touched are known may be re-dispatched to the coder before Stage A (a task with unknown or empty files_touched keeps the block)\n- **Phase completion gates** (Gates 1\u20135: completion-verify, drift-verifier, hallucination-guard, mutation-gate, phase-council) are automatically bypassed by phase_complete's gate table (`src/tools/phase-complete.ts`) when turbo is active; Gate 5b (architecture-supervisor), Gate 6 (final-council), and Gate 7 (full-auto) remain enforced. Note: turbo bypass is session-scoped; one session's turbo does not affect other sessions.\n\nClassification still determines the pipeline:\n- TIER 0 (metadata): lint + diff only \u2014 no change\n- TIER 1 (docs): Stage A + reviewer \u2014 no change\n- TIER 2 (standard code): Stage A + reviewer + test_engineer \u2014 no change\n- TIER 3 (critical): Stage A + 2x reviewer + 2x test_engineer \u2014 no change\n\nDo NOT skip Stage A or Stage B gates.\n";
139
139
  export declare const FULL_AUTO_BANNER = "## \u26A1 FULL-AUTO MODE ACTIVE\n\nYou are operating without a human in the loop. All escalations route to the Autonomous Oversight Critic instead of a user.\n\nBehavioral changes:\n- TIER 3 escalations go to the critic, not a human. Frame your questions technically, not conversationally.\n- Phase completion approval comes from the critic. Ensure all evidence is written before requesting.\n- The critic defaults to REJECT. Do not attempt to pressure, negotiate, or shortcut. Complete the evidence trail.\n- If the critic returns ESCALATE_TO_HUMAN, the session will pause or terminate. Only the critic can trigger this.\n- Do NOT ask \"Ready for Phase N+1?\" \u2014 call phase_complete directly. The critic reviews automatically.\n";
140
140
  export declare const AUTO_PROCEED_BANNER = "## \u23ED\uFE0F AUTO-PROCEED STATUS\n\nAuto-proceed controls whether the architect advances to the next phase automatically (skipping the \"Ready for Phase N+1?\" confirmation).\n\nBehavioral rules:\n- Session override (set via /swarm auto-proceed on|off) wins over the plan default.\n- If neither is set, auto-proceed defaults to OFF and the architect asks before advancing.\n- Full-auto mode (critic oversight) is independent \u2014 while active it suppresses the \"Ready for Phase N+1?\" confirmation itself (it never delegates tasks or runs phases for you); the auto_proceed setting adds nothing on top.\n- autoProceedNudgeDone prevents the FR-004 first-boundary nudge from re-firing in this session.\n\nTo toggle at runtime: call swarm_command({ command: \"auto-proceed\", args: [\"on\"|\"off\"] }) from the architect.\n";
141
141
  /**
@@ -171,5 +171,5 @@ export declare const DEFAULT_LEAN_TURBO_CONFIG: LeanTurboConfig;
171
171
  */
172
172
  export declare const SWARM_WORKTREE_DIR_NAME = ".swarm-worktrees";
173
173
  export declare const DEFAULT_WORKTREE_ISOLATION_CONFIG: WorktreeIsolationConfig;
174
- 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";
174
+ 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 still need per-task Stage B** (reviewer + test_engineer) before `update_task_status(completed)`; the phase reviewer and critic add a holistic gate at phase end.\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. Every task, in a lane or not, MUST still go through full Stage B.\n";
175
175
  export declare const EPIC_MODE_BANNER = "## \uD83E\uDDED EPIC MODE ACTIVE \u2014 an epic is open for this plan\n\n**\u26D4 THE USER ALWAYS COMES FIRST \u2014 this overrides everything below.** The user can message you at ANY time, including mid-wave 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: no dispatch, no retry, no further tool call. Answer them directly, in plain conversation, first \u2014 ignoring the user is the worst failure mode here. Then resume; if mid-wave, 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**An open epic \u2260 start.** The user opened it with `/swarm epic start`; until they ask for execution (\"start phase N\", \"run task X\", \"continue\"): do nothing. On `/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. Only the user opens or closes an epic. Epic enables neither Turbo nor Lean.\n\n**Talk to the user as you work.** Once they ask you to run the plan, say a sentence before each step about what you're doing and why \u2014 never go silent and tool-only.\n\n### How to run it: call `epic_next_wave` and do exactly what its `status` says\n\nIt plans every wave, closes finished waves, and keeps phases in order. Never plan waves yourself; never call `lean_turbo_run_phase` / `lean_turbo_plan_lanes`.\n- `dispatch` \u2192 follow its `instructions`: one `Task` per `taskId`, ALL in ONE message; per task Stage A (`pre_check_batch`) \u2192 Stage B (`reviewer` + `test_engineer`) \u2192 `update_task_status(completed)`; then call `epic_next_wave` again.\n- `declare-scopes` \u2192 `declare_scope` once per listed `taskId` (start from `suggestedFiles`), then call again.\n- `in-progress` \u2192 finish the listed tasks, then call again.\n- `blocked` \u2192 relay `message` to the user and apply its remedy.\n- `phase-ready-for-review` \u2192 `epic_phase_review(phase)` ONCE (phase reviewer, then critic). Both APPROVED \u2192 your normal PHASE-WRAP (phase-wrap skill: docs agent, `write_retro`, \u2026) \u2192 `phase_complete` \u2192 `epic_next_wave`; otherwise add each fix as a NEW pending task of that phase (`save_plan`) and call `epic_next_wave` (it runs them as a fix wave), then re-run it. Never re-dispatch a coder outside a wave.\n- `epic-complete` \u2192 tell the user to close the epic with `/swarm epic close`.\n- `refused` \u2192 relay `message`; run tasks per-task serially.\n\nPer-task QA (Stage A + Stage B) is NEVER waived in Epic. Audit (no architect needed): `/swarm epic status | learning`.\n";
@@ -256,3 +256,19 @@ export declare function normalizeCurrentPhaseInPlace(plan: Plan): void;
256
256
  * @returns The current phase number, or inferred value, or 1 as last resort
257
257
  */
258
258
  export declare function getCurrentPhase(plan: Plan): number;
259
+ /**
260
+ * Whether `phaseId` is in its PHASE-WRAP window: the phase's work is done and
261
+ * the cursor has already moved past it, but nothing after it has started.
262
+ *
263
+ * Completing a phase's last task advances the cursor (#2532) BEFORE the
264
+ * phase-wrap steps run (docs dispatch, directive override, phase_complete),
265
+ * so those steps act on phase N while the cursor names a later phase. This
266
+ * is the window in which they still belong to N: N is effectively terminal,
267
+ * the cursor is later in plan order (ids need not be contiguous), and every
268
+ * phase between them was skipped: every task closed without work (a phase
269
+ * with no tasks counts when its status is terminal). A phase between them
270
+ * with completed work has a wrap of its own, so it ends N's window: one wrap
271
+ * step never stands in for an older phase. Phase status alone cannot tell
272
+ * the two apart, because savePlan derives `complete` from completed tasks.
273
+ */
274
+ export declare function isPhaseInWrapWindow(plan: Plan, phaseId: number): boolean;
@@ -61,8 +61,10 @@ export declare const EPIC_PHASE_REVIEW_TOOL = "epic_phase_review";
61
61
  * every mutating and plugin tool) surfaces ANY provider-side error as a
62
62
  * `completed` response with no text (or, where it reads the assistant
63
63
  * message's `info.error`, as an `error` with a `providerError`) — so the
64
- * retry fires on every empty completion and every structured provider
65
- * refusal, not only the Zen 403; a second refusal stays a fail-closed
64
+ * retry fires on every empty completion and every structured
65
+ * authentication/configuration refusal (HTTP 403 class, or the host's
66
+ * statusless `ProviderAuthError`), not only the Zen 403; a rate limit, quota or outage `providerError` is not retried with
67
+ * `bash` (the model-fallback chain owns it); a second refusal stays a fail-closed
66
68
  * REJECTED. Every other tool stays denied, so this profile is
67
69
  * still narrower than the standard per-task reviewer/critic agents (whose
68
70
  * own config denies only write/edit/patch among the built-ins). Their shell
@@ -1,4 +1,5 @@
1
1
  import type { OpencodeClient } from '@opencode-ai/sdk';
2
+ import { type ProviderMessageError } from '../failures/provider-message-error.js';
2
3
  import type { DelegationCostFields } from '../services/cost-accounting.js';
3
4
  import { type PricingConfig } from '../services/cost-accounting.js';
4
5
  import { log } from '../utils/logger.js';
@@ -53,11 +54,21 @@ export type EphemeralAgentDispatchResult = {
53
54
  modelId?: string;
54
55
  text: string;
55
56
  error?: string;
57
+ /**
58
+ * The provider error OpenCode recorded on the assistant message
59
+ * (`info.error`), when there was one. `status` is then `'error'`.
60
+ */
61
+ providerError?: EphemeralProviderError;
56
62
  durationMs: number;
57
63
  promptBytes: number;
58
64
  responseBytes: number;
59
65
  costFields?: DelegationCostFields;
60
66
  };
67
+ /**
68
+ * The provider error OpenCode recorded on the assistant message, read by the
69
+ * shared {@link readProviderMessageError}.
70
+ */
71
+ export type EphemeralProviderError = ProviderMessageError;
61
72
  /**
62
73
  * Bounded graceful abort of an ephemeral session. opencode's
63
74
  * `POST /session/{id}/abort` resolves only after `Fiber.interrupt` on the
@@ -0,0 +1,32 @@
1
+ export type ProviderMessageError = {
2
+ name: string;
3
+ statusCode?: number;
4
+ /** Bounded display text from {@link classifyProviderFailure}. */
5
+ message: string;
6
+ /** Provider failure category, e.g. `provider.rate_limit`. */
7
+ category: string;
8
+ };
9
+ /**
10
+ * Read the provider error OpenCode records on an assistant message, or
11
+ * `null` when the message carries none.
12
+ */
13
+ export declare function readProviderMessageError(info: unknown): ProviderMessageError | null;
14
+ /** `<prefix>: <name> (HTTP <status>): <message>`. */
15
+ export declare function formatProviderMessageError(prefix: string, error: ProviderMessageError): string;
16
+ /**
17
+ * An `Error` for a provider message error. Its message carries the status
18
+ * and provider text (what the message-based transient/quota classifiers
19
+ * read), and it carries `status` / `category` so `classifyProviderFailure`
20
+ * recovers the same structured category.
21
+ */
22
+ export type ProviderMessageErrorObject = Error & {
23
+ status?: number;
24
+ category: string;
25
+ providerError: ProviderMessageError;
26
+ };
27
+ export declare function providerMessageErrorToError(prefix: string, error: ProviderMessageError): ProviderMessageErrorObject;
28
+ /**
29
+ * Throw when the assistant message carries a provider error; for consumers
30
+ * whose error path is a thrown error.
31
+ */
32
+ export declare function throwIfProviderMessageError(prefix: string, info: unknown): void;