wicked-crew 0.7.34 → 0.7.36

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 (185) hide show
  1. package/dist/api/chat-scope.d.ts +29 -1
  2. package/dist/api/chat-scope.d.ts.map +1 -1
  3. package/dist/api/chat-scope.js +67 -12
  4. package/dist/api/chat-scope.js.map +1 -1
  5. package/dist/api/chat-transcripts.d.ts +60 -0
  6. package/dist/api/chat-transcripts.d.ts.map +1 -0
  7. package/dist/api/chat-transcripts.js +139 -0
  8. package/dist/api/chat-transcripts.js.map +1 -0
  9. package/dist/api/chat-turns.d.ts +43 -4
  10. package/dist/api/chat-turns.d.ts.map +1 -1
  11. package/dist/api/chat-turns.js +73 -6
  12. package/dist/api/chat-turns.js.map +1 -1
  13. package/dist/api/delivery-cache.d.ts +23 -6
  14. package/dist/api/delivery-cache.d.ts.map +1 -1
  15. package/dist/api/delivery-cache.js +27 -17
  16. package/dist/api/delivery-cache.js.map +1 -1
  17. package/dist/api/delivery-index.d.ts +45 -3
  18. package/dist/api/delivery-index.d.ts.map +1 -1
  19. package/dist/api/delivery-index.js +79 -4
  20. package/dist/api/delivery-index.js.map +1 -1
  21. package/dist/api/requirements.d.ts +3 -5
  22. package/dist/api/requirements.d.ts.map +1 -1
  23. package/dist/api/requirements.js +30 -146
  24. package/dist/api/requirements.js.map +1 -1
  25. package/dist/api/retry-index.d.ts +14 -0
  26. package/dist/api/retry-index.d.ts.map +1 -1
  27. package/dist/api/retry-index.js +29 -0
  28. package/dist/api/retry-index.js.map +1 -1
  29. package/dist/api/roster-standing.d.ts +4 -4
  30. package/dist/api/roster-standing.d.ts.map +1 -1
  31. package/dist/api/roster-standing.js +24 -12
  32. package/dist/api/roster-standing.js.map +1 -1
  33. package/dist/api/routes.d.ts +142 -10
  34. package/dist/api/routes.d.ts.map +1 -1
  35. package/dist/api/routes.js +292 -44
  36. package/dist/api/routes.js.map +1 -1
  37. package/dist/api/run-timing-index.d.ts +22 -0
  38. package/dist/api/run-timing-index.d.ts.map +1 -1
  39. package/dist/api/run-timing-index.js +34 -0
  40. package/dist/api/run-timing-index.js.map +1 -1
  41. package/dist/api/seat-health.d.ts +2 -46
  42. package/dist/api/seat-health.d.ts.map +1 -1
  43. package/dist/api/seat-health.js +28 -111
  44. package/dist/api/seat-health.js.map +1 -1
  45. package/dist/api/seat-standing.d.ts +9 -8
  46. package/dist/api/seat-standing.d.ts.map +1 -1
  47. package/dist/api/seat-standing.js +22 -32
  48. package/dist/api/seat-standing.js.map +1 -1
  49. package/dist/api/server.d.ts.map +1 -1
  50. package/dist/api/server.js +114 -12
  51. package/dist/api/server.js.map +1 -1
  52. package/dist/api/skills.d.ts +2 -2
  53. package/dist/api/skills.d.ts.map +1 -1
  54. package/dist/api/skills.js +5 -2
  55. package/dist/api/skills.js.map +1 -1
  56. package/dist/api/stall-frame-index.d.ts +68 -0
  57. package/dist/api/stall-frame-index.d.ts.map +1 -0
  58. package/dist/api/stall-frame-index.js +106 -0
  59. package/dist/api/stall-frame-index.js.map +1 -0
  60. package/dist/api/stall-watchdog.d.ts +22 -2
  61. package/dist/api/stall-watchdog.d.ts.map +1 -1
  62. package/dist/api/stall-watchdog.js +41 -11
  63. package/dist/api/stall-watchdog.js.map +1 -1
  64. package/dist/campaigns/plan.d.ts +12 -2
  65. package/dist/campaigns/plan.d.ts.map +1 -1
  66. package/dist/campaigns/plan.js +3 -0
  67. package/dist/campaigns/plan.js.map +1 -1
  68. package/dist/campaigns/rollup.d.ts +5 -0
  69. package/dist/campaigns/rollup.d.ts.map +1 -1
  70. package/dist/campaigns/rollup.js +3 -2
  71. package/dist/campaigns/rollup.js.map +1 -1
  72. package/dist/campaigns/routes.d.ts +5 -2
  73. package/dist/campaigns/routes.d.ts.map +1 -1
  74. package/dist/campaigns/routes.js +13 -3
  75. package/dist/campaigns/routes.js.map +1 -1
  76. package/dist/cli/index.js +137 -23
  77. package/dist/cli/index.js.map +1 -1
  78. package/dist/cli/port.d.ts +19 -0
  79. package/dist/cli/port.d.ts.map +1 -0
  80. package/dist/cli/port.js +39 -0
  81. package/dist/cli/port.js.map +1 -0
  82. package/dist/core/adapter.d.ts +68 -2
  83. package/dist/core/adapter.d.ts.map +1 -1
  84. package/dist/core/adapter.js +176 -23
  85. package/dist/core/adapter.js.map +1 -1
  86. package/dist/core/bridge-reaper.d.ts +57 -1
  87. package/dist/core/bridge-reaper.d.ts.map +1 -1
  88. package/dist/core/bridge-reaper.js +143 -21
  89. package/dist/core/bridge-reaper.js.map +1 -1
  90. package/dist/core/cursor.d.ts +7 -0
  91. package/dist/core/cursor.d.ts.map +1 -1
  92. package/dist/core/cursor.js +7 -1
  93. package/dist/core/cursor.js.map +1 -1
  94. package/dist/core/deliver-text.d.ts +35 -2
  95. package/dist/core/deliver-text.d.ts.map +1 -1
  96. package/dist/core/deliver-text.js +127 -17
  97. package/dist/core/deliver-text.js.map +1 -1
  98. package/dist/core/deliver-triage.d.ts.map +1 -1
  99. package/dist/core/deliver-triage.js +5 -2
  100. package/dist/core/deliver-triage.js.map +1 -1
  101. package/dist/core/deliver.d.ts +76 -2
  102. package/dist/core/deliver.d.ts.map +1 -1
  103. package/dist/core/deliver.js +209 -16
  104. package/dist/core/deliver.js.map +1 -1
  105. package/dist/core/engine-roster.d.ts +4 -3
  106. package/dist/core/engine-roster.d.ts.map +1 -1
  107. package/dist/core/engine-roster.js +10 -14
  108. package/dist/core/engine-roster.js.map +1 -1
  109. package/dist/core/types.d.ts +30 -0
  110. package/dist/core/types.d.ts.map +1 -1
  111. package/dist/core/types.js +6 -4
  112. package/dist/core/types.js.map +1 -1
  113. package/dist/core/versions.d.ts +17 -0
  114. package/dist/core/versions.d.ts.map +1 -0
  115. package/dist/core/versions.js +35 -0
  116. package/dist/core/versions.js.map +1 -0
  117. package/dist/interactive/bridge-pool.d.ts +66 -14
  118. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  119. package/dist/interactive/bridge-pool.js +130 -17
  120. package/dist/interactive/bridge-pool.js.map +1 -1
  121. package/dist/interactive/bridge-root.d.ts +47 -16
  122. package/dist/interactive/bridge-root.d.ts.map +1 -1
  123. package/dist/interactive/bridge-root.js +102 -31
  124. package/dist/interactive/bridge-root.js.map +1 -1
  125. package/dist/interactive/doc-delete-routes.d.ts +3 -1
  126. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  127. package/dist/interactive/doc-delete-routes.js.map +1 -1
  128. package/dist/interactive/doc-list-routes.d.ts +3 -1
  129. package/dist/interactive/doc-list-routes.d.ts.map +1 -1
  130. package/dist/interactive/doc-list-routes.js.map +1 -1
  131. package/dist/interactive/docs-index.d.ts +3 -1
  132. package/dist/interactive/docs-index.d.ts.map +1 -1
  133. package/dist/interactive/docs-index.js +1 -1
  134. package/dist/interactive/docs-index.js.map +1 -1
  135. package/dist/interactive/project-root.d.ts +8 -2
  136. package/dist/interactive/project-root.d.ts.map +1 -1
  137. package/dist/interactive/project-root.js +1 -1
  138. package/dist/interactive/project-root.js.map +1 -1
  139. package/dist/interactive/proxy-routes.d.ts +3 -1
  140. package/dist/interactive/proxy-routes.d.ts.map +1 -1
  141. package/dist/interactive/proxy-routes.js.map +1 -1
  142. package/dist/projects/graph.d.ts +4 -0
  143. package/dist/projects/graph.d.ts.map +1 -1
  144. package/dist/projects/graph.js +4 -2
  145. package/dist/projects/graph.js.map +1 -1
  146. package/dist/projects/routes.d.ts +2 -2
  147. package/dist/projects/state-home-preflight.d.ts +30 -7
  148. package/dist/projects/state-home-preflight.d.ts.map +1 -1
  149. package/dist/projects/state-home-preflight.js +59 -16
  150. package/dist/projects/state-home-preflight.js.map +1 -1
  151. package/dist/projects/state-home-registry.d.ts.map +1 -1
  152. package/dist/projects/state-home-registry.js +2 -0
  153. package/dist/projects/state-home-registry.js.map +1 -1
  154. package/dist/qe/acceptance.d.ts +9 -0
  155. package/dist/qe/acceptance.d.ts.map +1 -1
  156. package/dist/qe/acceptance.js +16 -1
  157. package/dist/qe/acceptance.js.map +1 -1
  158. package/dist/qe/author-workflow.d.ts.map +1 -1
  159. package/dist/qe/author-workflow.js +2 -1
  160. package/dist/qe/author-workflow.js.map +1 -1
  161. package/dist/skills/base-skill.d.ts +32 -10
  162. package/dist/skills/base-skill.d.ts.map +1 -1
  163. package/dist/skills/base-skill.js +36 -27
  164. package/dist/skills/base-skill.js.map +1 -1
  165. package/dist/skills/guards.d.ts.map +1 -1
  166. package/dist/skills/guards.js +3 -0
  167. package/dist/skills/guards.js.map +1 -1
  168. package/dist/skills/runtime.d.ts +9 -5
  169. package/dist/skills/runtime.d.ts.map +1 -1
  170. package/dist/skills/runtime.js +11 -7
  171. package/dist/skills/runtime.js.map +1 -1
  172. package/dist/skills/store.d.ts +30 -0
  173. package/dist/skills/store.d.ts.map +1 -1
  174. package/dist/skills/store.js +159 -3
  175. package/dist/skills/store.js.map +1 -1
  176. package/dist/skills/tree.d.ts +12 -0
  177. package/dist/skills/tree.d.ts.map +1 -1
  178. package/dist/skills/tree.js +26 -0
  179. package/dist/skills/tree.js.map +1 -1
  180. package/dist/studio/assets/index-Dk98qXKv.js +546 -0
  181. package/dist/studio/index.html +1 -1
  182. package/dist/studio/testid-inventory.json +89 -5
  183. package/endpoint-manifest.json +13 -1
  184. package/package.json +4 -4
  185. package/dist/studio/assets/index-DhojBZ1T.js +0 -544
@@ -18,6 +18,8 @@ import type { AuditLog } from './audit.js';
18
18
  import type { Actor, AuditEntry } from '../core/types.js';
19
19
  export declare class RunTimingIndex {
20
20
  private readonly runToCreatedAt;
21
+ /** runId → terminal instant, unix SECONDS (`AgentSession.ended_at`; api-types 0.38.0, crew#496). */
22
+ private readonly runToEndedAt;
21
23
  /**
22
24
  * Consume pre-read `run.launched` entries — the seam that lets `createServer` feed this index
23
25
  * from the ONE `readAll({ action: 'run.launched' })` it already runs for `RetryIndex` +
@@ -40,6 +42,26 @@ export declare class RunTimingIndex {
40
42
  set(runId: string, launchedAtMillis: number): void;
41
43
  /** The run's launch time in unix SECONDS, or `undefined` (the DTO spells that as an ABSENT field). */
42
44
  createdAtFor(runId: string): number | undefined;
45
+ /**
46
+ * Consume pre-read `run.ended` entries (crew#496 / studio#230) — the daemon records one when it
47
+ * sees a run's terminal frame (`sessionCompleted` | `sessionFailed` | `runCancelled`). The run's
48
+ * FIRST terminal instant wins, the same rule the live {@link setEnded} applies: the trail answers
49
+ * newest first, so the OLDEST entry per run (the last one seen) is kept — a resume/retry
50
+ * re-terminal recorded after a hydrate failure never moves an already-dated run either way.
51
+ * `ts <= 0` stamps nothing. One more filtered scan at boot, in the same try as the `run.launched`
52
+ * scan (DES-L8 §5 PR-8B).
53
+ */
54
+ hydrateFromEndedEntries(entries: AuditEntry[]): void;
55
+ /**
56
+ * Record a run's terminal instant (unix MILLIS — the `run.ended` audit entry's own `ts`, so the
57
+ * live answer and the post-restart rehydrate agree to the second). Idempotent per run: the first
58
+ * stamp wins — a second terminal frame (resume, retry) re-stamps nothing.
59
+ */
60
+ setEnded(runId: string, endedAtMillis: number): void;
61
+ /** The run's terminal time in unix SECONDS, or `undefined` (ABSENT on the wire — never null,
62
+ * never fabricated: a live run, a pre-field run, a run that terminalled before THIS daemon
63
+ * booted, a lost trail). */
64
+ endedAtFor(runId: string): number | undefined;
43
65
  }
44
66
  /**
45
67
  * Record a `run.launched` audit entry AND stamp the run-timing index with the SAME durable `ts`, so
@@ -1 +1 @@
1
- {"version":3,"file":"run-timing-index.d.ts","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAW1D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D;;;;OAIG;IACH,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAQrD;;;;;;OAMG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1E;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIlD,sGAAsG;IACtG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAIR"}
1
+ {"version":3,"file":"run-timing-index.d.ts","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAW1D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D;;;;OAIG;IACH,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAQrD;;;;;;OAMG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1E;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIlD,sGAAsG;IACtG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C;;;;;;;;OAQG;IACH,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAOpD;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAKpD;;iCAE6B;IAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAIR"}
@@ -24,6 +24,8 @@ function toSeconds(millis) {
24
24
  }
25
25
  export class RunTimingIndex {
26
26
  runToCreatedAt = new Map();
27
+ /** runId → terminal instant, unix SECONDS (`AgentSession.ended_at`; api-types 0.38.0, crew#496). */
28
+ runToEndedAt = new Map();
27
29
  /**
28
30
  * Consume pre-read `run.launched` entries — the seam that lets `createServer` feed this index
29
31
  * from the ONE `readAll({ action: 'run.launched' })` it already runs for `RetryIndex` +
@@ -63,6 +65,38 @@ export class RunTimingIndex {
63
65
  createdAtFor(runId) {
64
66
  return this.runToCreatedAt.get(runId);
65
67
  }
68
+ /**
69
+ * Consume pre-read `run.ended` entries (crew#496 / studio#230) — the daemon records one when it
70
+ * sees a run's terminal frame (`sessionCompleted` | `sessionFailed` | `runCancelled`). The run's
71
+ * FIRST terminal instant wins, the same rule the live {@link setEnded} applies: the trail answers
72
+ * newest first, so the OLDEST entry per run (the last one seen) is kept — a resume/retry
73
+ * re-terminal recorded after a hydrate failure never moves an already-dated run either way.
74
+ * `ts <= 0` stamps nothing. One more filtered scan at boot, in the same try as the `run.launched`
75
+ * scan (DES-L8 §5 PR-8B).
76
+ */
77
+ hydrateFromEndedEntries(entries) {
78
+ for (const entry of entries) {
79
+ if (typeof entry.runId !== 'string' || typeof entry.ts !== 'number' || entry.ts <= 0)
80
+ continue;
81
+ this.runToEndedAt.set(entry.runId, toSeconds(entry.ts)); // newest-first trail ⇒ the oldest wins
82
+ }
83
+ }
84
+ /**
85
+ * Record a run's terminal instant (unix MILLIS — the `run.ended` audit entry's own `ts`, so the
86
+ * live answer and the post-restart rehydrate agree to the second). Idempotent per run: the first
87
+ * stamp wins — a second terminal frame (resume, retry) re-stamps nothing.
88
+ */
89
+ setEnded(runId, endedAtMillis) {
90
+ if (this.runToEndedAt.has(runId))
91
+ return;
92
+ this.runToEndedAt.set(runId, toSeconds(endedAtMillis));
93
+ }
94
+ /** The run's terminal time in unix SECONDS, or `undefined` (ABSENT on the wire — never null,
95
+ * never fabricated: a live run, a pre-field run, a run that terminalled before THIS daemon
96
+ * booted, a lost trail). */
97
+ endedAtFor(runId) {
98
+ return this.runToEndedAt.get(runId);
99
+ }
66
100
  }
67
101
  /**
68
102
  * Record a `run.launched` audit entry AND stamp the run-timing index with the SAME durable `ts`, so
@@ -1 +1 @@
1
- {"version":3,"file":"run-timing-index.js","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH;;;;GAIG;AACH,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,cAAc;IACR,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5D;;;;OAIG;IACH,wBAAwB,CAAC,OAAqB;QAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,KAAe,EAAE,GAA2B;QACxD,IAAI,CAAC;YACH,IAAI,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,EAAE,CACH,sFACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,KAAa,EAAE,gBAAwB;QACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,sGAAsG;IACtG,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAe,EACf,cAA0C,EAC1C,KAAY,EACZ,KAAa,EACb,MAA+B;IAE/B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,IAAI,EAAE,GAAG,CAAC;QAAE,cAAc,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"run-timing-index.js","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"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"}
@@ -1,40 +1,6 @@
1
1
  import type { CoreEvent, SeatHealth } from '../core/types.js';
2
2
  import { DaemonSignalLog } from '../core/daemon-signal-log.js';
3
3
  export type { SeatHealth };
4
- /** Rolling window for the repeated-acpFallback rule. */
5
- export declare const FALLBACK_WINDOW_MS: number;
6
- /** Fallbacks within the window that flip a seat inactive. */
7
- export declare const FALLBACK_THRESHOLD = 3;
8
- /**
9
- * The council BENCH fold (independent review of #533, F-1): `councilSeatFailed { cli, kind }` is the
10
- * engine's own evidence that a seat cannot hold a ballot — `non_zero_exit` ("Not logged in", "No
11
- * API key found", "exceeded your monthly quota") or `timed_out` (opencode past the 40 s dispatch
12
- * budget on the phase-4 rig). Until this fold existed the tracker never read it, so a seat benched
13
- * in every council kept `health: active` and the roster's `council_eligible` prediction could not
14
- * learn. The fold is bounded on purpose: only PRIMARY failures count (`benched` is the engine's
15
- * derivative of an earlier failure, not a new observation), only within {@link COUNCIL_BENCH_WINDOW_MS},
16
- * and only from {@link COUNCIL_BENCH_THRESHOLD} failures up (one timed-out ballot is weather). It
17
- * does NOT flip `health` — a chat is not a council and the free tier may still answer — it feeds
18
- * `council_eligible` through {@link SeatHealthTracker.councilBenchFor}, and an ok unit output clears
19
- * it like every other recovery.
20
- */
21
- export declare const COUNCIL_BENCH_WINDOW_MS: number;
22
- export declare const COUNCIL_BENCH_THRESHOLD = 2;
23
- /** The `councilSeatFailed.kind` values that are the seat's OWN failure (the engine's `benched` is derivative). */
24
- export declare const COUNCIL_PRIMARY_FAILURE_KINDS: ReadonlySet<string>;
25
- /** What the roster carries as `council_bench` when a seat is benched by this daemon's recent evidence. */
26
- export interface CouncilBench {
27
- /** Primary ballot failures inside the window. */
28
- failures: number;
29
- last_kind: string;
30
- /** ISO-8601 of the last failure. */
31
- last_at: string;
32
- /** The run the last failure happened in, when the frame named one. */
33
- last_run?: string;
34
- /** A bounded excerpt of the last failure's detail / stderr, when there was one. */
35
- last_detail?: string;
36
- window_ms: number;
37
- }
38
4
  /**
39
5
  * What a seat's OWN output says when it has no credential (F-A45-006, wave 6): the fresh rig's pi
40
6
  * failed every ballot with "No API key found" while the roster read `signed_in: true` off a present
@@ -69,10 +35,6 @@ export declare class SeatHealthTracker {
69
35
  private readonly entries;
70
36
  /** `${session}:${ord}` → cli key. `unitOutputCaptured` carries no seat; this is the correlation. */
71
37
  private readonly assignments;
72
- /** cli key → recent failure-fallback timestamps (epoch ms), pruned to the rolling window. */
73
- private readonly fallbacks;
74
- /** cli key → primary council ballot failures inside {@link COUNCIL_BENCH_WINDOW_MS}. */
75
- private readonly councilFailures;
76
38
  /** cli key → the seat's latest own "no credential" report (F-A45-006), cleared by an ok output. */
77
39
  private readonly authFailures;
78
40
  /** Default `since` for seats that have never changed state. */
@@ -92,20 +54,14 @@ export declare class SeatHealthTracker {
92
54
  markActive(key: string, atMs?: number): void;
93
55
  /** Record a seat's own "no credential" report (F-A45-006) — the newest report wins. */
94
56
  private recordAuthFailure;
57
+ /** Stamp an OBSERVED error on the seat — `lastErrorAt` only; the status stays `active` (R5). */
58
+ private stampError;
95
59
  /**
96
60
  * The seat's own latest "no credential" report inside {@link AUTH_FAILURE_WINDOW_MS} with no ok
97
61
  * output since (F-A45-006), or `null`. `seatStanding` reads it as `auth: 'signed_out'` — the seat
98
62
  * said so itself — whatever the credential-file probe reads.
99
63
  */
100
64
  authFailureFor(key: string, nowMs?: number): SeatAuthFailure | null;
101
- /**
102
- * The seat's council bench from THIS daemon's recent evidence, or `null`: fewer than
103
- * {@link COUNCIL_BENCH_THRESHOLD} primary ballot failures inside {@link COUNCIL_BENCH_WINDOW_MS}
104
- * (older ones have aged out), or an ok output since.
105
- */
106
- councilBenchFor(key: string, nowMs?: number): CouncilBench | null;
107
- /** Flip a seat INACTIVE with the error excerpt; `since` survives while already inactive. */
108
- markInactive(key: string, message: string, atMs?: number): void;
109
65
  /** The seat's health — a seat never seen in an event is ACTIVE with no message (the default). */
110
66
  healthFor(key: string): SeatHealth;
111
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"seat-health.d.ts","sourceRoot":"","sources":["../../src/api/seat-health.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EACL,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AACjD,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AACtD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,kHAAkH;AAClH,eAAO,MAAM,6BAA6B,EAAE,WAAW,CAAC,MAAM,CAA2C,CAAC;AAU1G,0GAA0G;AAC1G,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoCD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAezC,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAKD;yFACyF;AACzF,eAAO,MAAM,sBAAsB,QAA0B,CAAC;AAE9D,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAahB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;IACvE,mGAAmG;IACnG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0G;IACvI,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;gBAEzB,IAAI,GAAE;QACjC;;;WAGG;QACH,SAAS,CAAC,EAAE,eAAe,CAAC;QAC5B,wEAAwE;QACxE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;KACtB;IAEN,4FAA4F;IAC5F,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IA+J9B,oFAAoF;IACpF,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,IAAI;IAYhD,uFAAuF;IACvF,OAAO,CAAC,iBAAiB;IAsBzB;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,eAAe,GAAG,IAAI;IAevE;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,YAAY,GAAG,IAAI;IAmBrE,4FAA4F;IAC5F,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,IAAI;IAWnE,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;CAGnC"}
1
+ {"version":3,"file":"seat-health.d.ts","sourceRoot":"","sources":["../../src/api/seat-health.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EACL,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,UAAU,EAAE,CAAC;AAmC3B;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAezC,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAKD;yFACyF;AACzF,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAShB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,mGAAmG;IACnG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0G;IACvI,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;gBAEzB,IAAI,GAAE;QACjC;;;WAGG;QACH,SAAS,CAAC,EAAE,eAAe,CAAC;QAC5B,wEAAwE;QACxE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;KACtB;IAEN,4FAA4F;IAC5F,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAgI9B,oFAAoF;IACpF,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,IAAI;IAUhD,uFAAuF;IACvF,OAAO,CAAC,iBAAiB;IAgBzB,gGAAgG;IAChG,OAAO,CAAC,UAAU;IAUlB;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,eAAe,GAAG,IAAI;IAevE,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;CAGnC"}
@@ -36,27 +36,17 @@
36
36
  // `ok` output flips it active — recovery by real work, no probe required.
37
37
  import { SIGNAL_CORRELATION_WINDOW_MS, } from '../core/daemon-signal-log.js';
38
38
  import { triageDeliverFailure } from '../core/deliver-triage.js';
39
- /** Rolling window for the repeated-acpFallback rule. */
40
- export const FALLBACK_WINDOW_MS = 10 * 60 * 1000;
41
- /** Fallbacks within the window that flip a seat inactive. */
42
- export const FALLBACK_THRESHOLD = 3;
43
39
  /**
44
- * The council BENCH fold (independent review of #533, F-1): `councilSeatFailed { cli, kind }` is the
45
- * engine's own evidence that a seat cannot hold a ballot — `non_zero_exit` ("Not logged in", "No
46
- * API key found", "exceeded your monthly quota") or `timed_out` (opencode past the 40 s dispatch
47
- * budget on the phase-4 rig). Until this fold existed the tracker never read it, so a seat benched
48
- * in every council kept `health: active` and the roster's `council_eligible` prediction could not
49
- * learn. The fold is bounded on purpose: only PRIMARY failures count (`benched` is the engine's
50
- * derivative of an earlier failure, not a new observation), only within {@link COUNCIL_BENCH_WINDOW_MS},
51
- * and only from {@link COUNCIL_BENCH_THRESHOLD} failures up (one timed-out ballot is weather). It
52
- * does NOT flip `health` — a chat is not a council and the free tier may still answer — it feeds
53
- * `council_eligible` through {@link SeatHealthTracker.councilBenchFor}, and an ok unit output clears
54
- * it like every other recovery.
40
+ * (R5 / R5b — DES-L3 PR-3D, F-RC2-006 / F-RC2-021 / F-RC2-041 / F-RC2-004) What this tracker NO
41
+ * LONGER does: flip a seat `inactive` on a `stepFailed{workerError}`, on quota / 401 / timeout
42
+ * phrases, or on repeated ACP fallbacks; and keep a daemon-wide council-count bench
43
+ * (`council_bench`, 30-min window). Both were second classifiers beside the engine's own per-run
44
+ * ballot ledger (`session.benched_seats`, `unitDistributed.degradedReason`) and they blamed the
45
+ * seat for launch refusals and load timeouts — a roster at 0 eligible seats that only a restart
46
+ * cleared. Seat health is now: the engine's bench (per run) + the seat's OWN auth refusal
47
+ * (`auth: signed_out`, cleared by an ok output). `health.status` is always `active`; observed
48
+ * errors stamp `lastErrorAt` and nothing else.
55
49
  */
56
- export const COUNCIL_BENCH_WINDOW_MS = 30 * 60 * 1000;
57
- export const COUNCIL_BENCH_THRESHOLD = 2;
58
- /** The `councilSeatFailed.kind` values that are the seat's OWN failure (the engine's `benched` is derivative). */
59
- export const COUNCIL_PRIMARY_FAILURE_KINDS = new Set(['non_zero_exit', 'timed_out']);
60
50
  /** Health messages are operator-facing chips, not transcripts — bound them hard. */
61
51
  const EXCERPT_MAX = 240;
62
52
  function excerpt(s) {
@@ -65,18 +55,6 @@ function excerpt(s) {
65
55
  }
66
56
  /** The wrapped runner's seat-naming failure message: "(cli `x` exited N) …" (execute_wrapped.rs). */
67
57
  const CLI_IN_DETAIL = /\(cli `([^`]+)` exited /;
68
- /**
69
- * Seat-level failure signatures in a `stepFailed` detail. Deliberately narrow: a unit that failed
70
- * its WORK (missing deliverable, gate veto) says nothing about the seat's health, so only strings
71
- * that name the CLI process, its transport, or its account state qualify.
72
- */
73
- const SEAT_FAILURE_PATTERNS = [
74
- CLI_IN_DETAIL, // non-zero exit, seat named by the runner itself
75
- /timeout waiting/i, // ACP "timeout waiting for response id=…" (acp_runner.rs)
76
- /\bHTTP\/?[0-9.]*\s+401\b|\b401\s+unauthori[sz]ed\b|\bunauthori[sz]ed\b/i, // auth: needs a re-login (a 401 only as an HTTP status — never a bare number, review M-3 of #536)
77
- /\bquota\b|rate.?limit|too many requests|\b429\b/i, // quota/rate ceiling
78
- /\bout of credits\b|\binsufficient credits\b/i, // account balance
79
- ];
80
58
  /** `acpFallback` kinds that are deliberate routing rather than a failure — never counted:
81
59
  * `governance_requires_wrapped` (crew#276) and `read_only_requires_wrapped` (wicked-core#431 —
82
60
  * an `executes_code: false` unit on an ACP seat not admitted to input governance is routed to the
@@ -115,7 +93,7 @@ export function isAuthRefusal(text) {
115
93
  const AUTH_FALLBACK_KINDS = new Set(['auth_required', 'auth_failed', 'unauthenticated']);
116
94
  /** How long a seat's own "no credential" report keeps its `auth` at `signed_out` with no ok output
117
95
  * since — the same window as the council bench; an ok unit output clears it at once. */
118
- export const AUTH_FAILURE_WINDOW_MS = COUNCIL_BENCH_WINDOW_MS;
96
+ export const AUTH_FAILURE_WINDOW_MS = 30 * 60 * 1000;
119
97
  /**
120
98
  * In-memory per-seat health, folded from live CoreEvents. In-memory ON PURPOSE: health is a
121
99
  * statement about the running platform's ability to reach a CLI right now — a daemon restart
@@ -127,10 +105,6 @@ export class SeatHealthTracker {
127
105
  entries = new Map();
128
106
  /** `${session}:${ord}` → cli key. `unitOutputCaptured` carries no seat; this is the correlation. */
129
107
  assignments = new Map();
130
- /** cli key → recent failure-fallback timestamps (epoch ms), pruned to the rolling window. */
131
- fallbacks = new Map();
132
- /** cli key → primary council ballot failures inside {@link COUNCIL_BENCH_WINDOW_MS}. */
133
- councilFailures = new Map();
134
108
  /** cli key → the seat's latest own "no credential" report (F-A45-006), cleared by an ok output. */
135
109
  authFailures = new Map();
136
110
  /** Default `since` for seats that have never changed state. */
@@ -185,7 +159,6 @@ export class SeatHealthTracker {
185
159
  // (`core/deliver-triage.ts`), it flips nobody.
186
160
  if (triageDeliverFailure(detail) !== null)
187
161
  return;
188
- const failureKind = str(event.failureKind);
189
162
  // The detail names the seat when the wrapped runner produced it; otherwise fall back to
190
163
  // the unit's assignment (a workerError detail is the CLI's own output and rarely does).
191
164
  const named = CLI_IN_DETAIL.exec(detail)?.[1];
@@ -198,11 +171,11 @@ export class SeatHealthTracker {
198
171
  // F-A45-006: the seat's own words beat the file probe — "No API key found" flips `auth`.
199
172
  if (isAuthRefusal(detail))
200
173
  this.recordAuthFailure(seat, detail, 'worker', at, session);
201
- const seatLevel = failureKind === 'workerError' || SEAT_FAILURE_PATTERNS.some((re) => re.test(detail));
202
- if (seatLevel) {
203
- const msg = excerpt(detail) || `seat failure (${failureKind ?? 'unreported'})`;
204
- this.markInactive(seat, msg, at);
205
- }
174
+ // (R5) Every other worker failure is an OBSERVED error, never a status flip: a launch
175
+ // refusal, a load timeout or a worker crash says nothing about whether the seat can take
176
+ // the next turn — the engine's per-run ballot ledger judges that (F-RC2-006).
177
+ else
178
+ this.stampError(seat, at);
206
179
  return;
207
180
  }
208
181
  case 'councilSeatFailed': {
@@ -214,19 +187,11 @@ export class SeatHealthTracker {
214
187
  if (cli !== undefined && (kind === 'not_logged_in' || isAuthRefusal(detail))) {
215
188
  this.recordAuthFailure(cli, detail !== '' ? detail : (kind ?? 'not logged in'), 'ballot', at, session);
216
189
  }
217
- if (cli === undefined || kind === undefined || !COUNCIL_PRIMARY_FAILURE_KINDS.has(kind))
218
- return;
219
- const fresh = (this.councilFailures.get(cli) ?? []).filter((f) => at - f.at < COUNCIL_BENCH_WINDOW_MS);
220
- fresh.push({ at, kind, detail: excerpt(detail), session });
221
- this.councilFailures.set(cli, fresh);
222
- // An observed error — stamped, never a status flip (see COUNCIL_BENCH_WINDOW_MS).
223
- const prev = this.entries.get(cli);
224
- this.entries.set(cli, {
225
- status: prev?.status ?? 'active',
226
- ...(prev?.message !== undefined ? { message: prev.message } : {}),
227
- since: prev?.since ?? this.startedAt,
228
- lastErrorAt: new Date(at).toISOString(),
229
- });
190
+ // (R5b) An observed error — stamped, never counted: the engine benches the seat for the
191
+ // run at its own ballot threshold and says so in `unitDistributed.degradedReason`; crew
192
+ // keeps no cross-run council ledger any more (one bench ledger, DES-L3 PR-3D).
193
+ if (cli !== undefined && kind !== undefined && kind !== 'benched')
194
+ this.stampError(cli, at);
230
195
  return;
231
196
  }
232
197
  case 'acpFallback': {
@@ -242,24 +207,9 @@ export class SeatHealthTracker {
242
207
  const why = str(event.reason) ?? fallbackKind;
243
208
  this.recordAuthFailure(cliKey, why, 'acp', at, session);
244
209
  }
245
- const fresh = (this.fallbacks.get(cliKey) ?? []).filter((t) => at - t < FALLBACK_WINDOW_MS);
246
- fresh.push(at);
247
- this.fallbacks.set(cliKey, fresh);
248
- if (fresh.length >= FALLBACK_THRESHOLD) {
249
- const reason = str(event.reason) ?? fallbackKind ?? 'unknown';
250
- this.markInactive(cliKey, `repeated ACP fallback (${fresh.length} in 10 min): ${reason}`, at);
251
- }
252
- else {
253
- // One fallback is not inactive (session death falls back and the unit can still work),
254
- // but it IS an observed error — stamp lastErrorAt without flipping the status.
255
- const prev = this.entries.get(cliKey);
256
- this.entries.set(cliKey, {
257
- status: prev?.status ?? 'active',
258
- ...(prev?.message !== undefined ? { message: prev.message } : {}),
259
- since: prev?.since ?? this.startedAt,
260
- lastErrorAt: new Date(at).toISOString(),
261
- });
262
- }
210
+ // (R5) A fallback — one or many — is an observed error, never a status flip: the unit
211
+ // still runs on the wrapped carrier, and the seat's next turn is the engine's call.
212
+ this.stampError(cliKey, at);
263
213
  // ── crew#411: signal correlation ───────────────────────────────────────
264
214
  // A session_died fallback is a silent bridge exit-0; whether the daemon was
265
215
  // also signalled at the same time determines the likely cause. Both branches
@@ -305,8 +255,6 @@ export class SeatHealthTracker {
305
255
  since: prev?.status === 'active' ? prev.since : new Date(atMs).toISOString(),
306
256
  ...(prev?.lastErrorAt !== undefined ? { lastErrorAt: prev.lastErrorAt } : {}),
307
257
  });
308
- this.fallbacks.delete(key); // an ok output resets the repeated-fallback window too
309
- this.councilFailures.delete(key); // …and the council bench: real work is the recovery
310
258
  this.authFailures.delete(key); // …and the seat's own "no credential" report (F-A45-006)
311
259
  }
312
260
  /** Record a seat's own "no credential" report (F-A45-006) — the newest report wins. */
@@ -317,9 +265,13 @@ export class SeatHealthTracker {
317
265
  source,
318
266
  ...(session !== undefined ? { session } : {}),
319
267
  });
268
+ this.stampError(key, atMs);
269
+ }
270
+ /** Stamp an OBSERVED error on the seat — `lastErrorAt` only; the status stays `active` (R5). */
271
+ stampError(key, atMs) {
320
272
  const prev = this.entries.get(key);
321
273
  this.entries.set(key, {
322
- status: prev?.status ?? 'active',
274
+ status: 'active',
323
275
  ...(prev?.message !== undefined ? { message: prev.message } : {}),
324
276
  since: prev?.since ?? this.startedAt,
325
277
  lastErrorAt: new Date(atMs).toISOString(),
@@ -345,41 +297,6 @@ export class SeatHealthTracker {
345
297
  ...(rec.session !== undefined ? { run: rec.session } : {}),
346
298
  };
347
299
  }
348
- /**
349
- * The seat's council bench from THIS daemon's recent evidence, or `null`: fewer than
350
- * {@link COUNCIL_BENCH_THRESHOLD} primary ballot failures inside {@link COUNCIL_BENCH_WINDOW_MS}
351
- * (older ones have aged out), or an ok output since.
352
- */
353
- councilBenchFor(key, nowMs = Date.now()) {
354
- const fresh = (this.councilFailures.get(key) ?? []).filter((f) => nowMs - f.at < COUNCIL_BENCH_WINDOW_MS);
355
- if (fresh.length === 0) {
356
- this.councilFailures.delete(key);
357
- return null;
358
- }
359
- this.councilFailures.set(key, fresh);
360
- if (fresh.length < COUNCIL_BENCH_THRESHOLD)
361
- return null;
362
- const last = fresh[fresh.length - 1];
363
- return {
364
- failures: fresh.length,
365
- last_kind: last.kind,
366
- last_at: new Date(last.at).toISOString(),
367
- ...(last.session !== undefined ? { last_run: last.session } : {}),
368
- ...(last.detail !== '' ? { last_detail: last.detail } : {}),
369
- window_ms: COUNCIL_BENCH_WINDOW_MS,
370
- };
371
- }
372
- /** Flip a seat INACTIVE with the error excerpt; `since` survives while already inactive. */
373
- markInactive(key, message, atMs = Date.now()) {
374
- const prev = this.entries.get(key);
375
- const iso = new Date(atMs).toISOString();
376
- this.entries.set(key, {
377
- status: 'inactive',
378
- message: excerpt(message),
379
- since: prev?.status === 'inactive' ? prev.since : iso,
380
- lastErrorAt: iso,
381
- });
382
- }
383
300
  /** The seat's health — a seat never seen in an event is ACTIVE with no message (the default). */
384
301
  healthFor(key) {
385
302
  return this.entries.get(key) ?? { status: 'active', since: this.startedAt };
@@ -1 +1 @@
1
- {"version":3,"file":"seat-health.js","sourceRoot":"","sources":["../../src/api/seat-health.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,EAAE;AACF,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAC/F,kGAAkG;AAClG,2EAA2E;AAC3E,EAAE;AACF,kFAAkF;AAClF,EAAE;AACF,uFAAuF;AACvF,4FAA4F;AAC5F,iGAAiG;AACjG,+FAA+F;AAC/F,+FAA+F;AAC/F,mGAAmG;AACnG,kGAAkG;AAClG,mHAAmH;AACnH,kGAAkG;AAClG,mGAAmG;AACnG,aAAa;AACb,gGAAgG;AAChG,8FAA8F;AAC9F,yFAAyF;AACzF,iGAAiG;AACjG,4FAA4F;AAC5F,iGAAiG;AACjG,6FAA6F;AAC7F,yDAAyD;AACzD,EAAE;AACF,8FAA8F;AAC9F,6FAA6F;AAC7F,+FAA+F;AAC/F,6FAA6F;AAC7F,4FAA4F;AAC5F,0EAA0E;AAG1E,OAAO,EAEL,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACjD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,kHAAkH;AAClH,MAAM,CAAC,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;AAwB1G,oFAAoF;AACpF,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;AAClF,CAAC;AAED,qGAAqG;AACrG,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,qBAAqB,GAAa;IACtC,aAAa,EAAE,iDAAiD;IAChE,kBAAkB,EAAE,0DAA0D;IAC9E,yEAAyE,EAAE,kGAAkG;IAC7K,kDAAkD,EAAE,qBAAqB;IACzE,8CAA8C,EAAE,kBAAkB;CACnE,CAAC;AAEF;;;uFAGuF;AACvF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,6BAA6B,EAAE,4BAA4B,CAAC,CAAC,CAAC;AAErG,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAa;IAC7C,aAAa;IACb,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,kGAAkG;IAClG,kGAAkG;IAClG,2BAA2B;IAC3B,4BAA4B;IAC5B,uCAAuC;IACvC,iBAAiB;IACjB,uBAAuB;IACvB,kBAAkB;IAClB,mCAAmC;IACnC,sCAAsC;CACvC,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,gGAAgG;AAChG,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAEzF;yFACyF;AACzF,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAc9D;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAaC;IAZZ,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACzD,oGAAoG;IACnF,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,6FAA6F;IAC5E,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzD,wFAAwF;IACvE,eAAe,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvE,mGAAmG;IAClF,YAAY,GAAG,IAAI,GAAG,EAA+F,CAAC;IACvI,+DAA+D;IAC9C,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEtD,YAA6B,OAQzB,EAAE;QARuB,SAAI,GAAJ,IAAI,CAQ3B;IAAG,CAAC;IAEV,4FAA4F;IAC5F,MAAM,CAAC,KAAgB;QACrB,wFAAwF;QACxF,0EAA0E;QAC1E,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAElE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACpE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;gBACjD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,wFAAwF;gBACxF,yFAAyF;gBACzF,yFAAyF;gBACzF,MAAM,MAAM,GAAG,GAAG,CAAE,KAA8B,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAO;gBACpF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvD,IAAI,IAAI,KAAK,SAAS;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,iFAAiF;gBACjF,yFAAyF;gBACzF,mFAAmF;gBACnF,2FAA2F;gBAC3F,2FAA2F;gBAC3F,uFAAuF;gBACvF,+CAA+C;gBAC/C,IAAI,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAClD,MAAM,WAAW,GAAG,GAAG,CAAE,KAAmC,CAAC,WAAW,CAAC,CAAC;gBAC1E,wFAAwF;gBACxF,wFAAwF;gBACxF,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GACZ,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;oBACxC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;oBAC3C,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC;gBAC/B,IAAI,IAAI,KAAK,SAAS;oBAAE,OAAO;gBAC/B,yFAAyF;gBACzF,IAAI,aAAa,CAAC,MAAM,CAAC;oBAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACvF,MAAM,SAAS,GACb,WAAW,KAAK,aAAa,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvF,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,iBAAiB,WAAW,IAAI,YAAY,GAAG,CAAC;oBAC/E,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,GAAG,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAE,KAA8B,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACtF,uFAAuF;gBACvF,gFAAgF;gBAChF,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBAC7E,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzG,CAAC;gBACD,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAChG,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,uBAAuB,CAAC,CAAC;gBACvG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACrC,kFAAkF;gBAClF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;oBACpB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ;oBAChC,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS;oBACpC,WAAW,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;iBACxC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,GAAG,CAAE,KAA8B,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,GAAG,CAAE,KAAoC,CAAC,YAAY,CAAC,CAAC;gBAC7E,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO;gBACjC,IAAI,YAAY,KAAK,SAAS,IAAI,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;oBAAE,OAAO;gBAClF,kFAAkF;gBAClF,8FAA8F;gBAC9F,IAAI,YAAY,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxE,MAAM,GAAG,GAAG,GAAG,CAAE,KAA8B,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC;oBACxE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1D,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,kBAAkB,CACnC,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;oBACvC,MAAM,MAAM,GAAG,GAAG,CAAE,KAA8B,CAAC,MAAM,CAAC,IAAI,YAAY,IAAI,SAAS,CAAC;oBACxF,IAAI,CAAC,YAAY,CACf,MAAM,EACN,0BAA0B,KAAK,CAAC,MAAM,gBAAgB,MAAM,EAAE,EAC9D,EAAE,CACH,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,uFAAuF;oBACvF,+EAA+E;oBAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;wBACvB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ;wBAChC,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS;wBACpC,WAAW,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;qBACxC,CAAC,CAAC;gBACL,CAAC;gBACD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,6EAA6E;gBAC7E,6EAA6E;gBAC7E,IAAI,YAAY,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBACzE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oBACnD,MAAM,GAAG,GAAG,iCAAiC,MAAM,WAAW,OAAO,IAAI,SAAS,EAAE,CAAC;oBACrF,iFAAiF;oBACjF,uEAAuE;oBACvE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/D,IAAI,CACF,KAAK;wBACH,CAAC,CAAC,iBAAiB,GAAG,0BAA0B,KAAK,CAAC,MAAM,MAAM;4BAChE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK;4BACrE,4CAA4C;wBAC9C,CAAC,CAAC,iBAAiB,GAAG,4BAA4B;4BAChD,IAAI,4BAA4B,GAAG,IAAI,GAAG;4BAC1C,+DAA+D,CACpE,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YACD,uFAAuF;YACvF,KAAK,kBAAkB,CAAC;YACxB,KAAK,eAAe,CAAC;YACrB,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO;gBAClC,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;gBAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO;YACT,CAAC;YACD;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,UAAU,CAAC,GAAW,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;YAC5E,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,uDAAuD;QACnF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,oDAAoD;QACtF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,yDAAyD;IAC1F,CAAC;IAED,uFAAuF;IAC/E,iBAAiB,CACvB,GAAW,EACX,MAAc,EACd,MAAiC,EACjC,IAAY,EACZ,OAA2B;QAE3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;YACzB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;YACvB,MAAM;YACN,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ;YAChC,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS;YACpC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAW,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,sBAAsB,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;YAClC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,GAAW,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,uBAAuB,CAAC,CAAC;QAC1G,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,uBAAuB;YAAE,OAAO,IAAI,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,MAAM;YACtB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;YACxC,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,SAAS,EAAE,uBAAuB;SACnC,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,YAAY,CAAC,GAAW,EAAE,OAAe,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YACzB,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;YACrD,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IAED,iGAAiG;IACjG,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9E,CAAC;CACF"}
1
+ {"version":3,"file":"seat-health.js","sourceRoot":"","sources":["../../src/api/seat-health.ts"],"names":[],"mappings":"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"}
@@ -29,9 +29,11 @@
29
29
  * ACP adapter asks permissions or whose record arms the kernel write floor). Every refusal
30
30
  * carries every reason that applies, so the thread can say WHY a seat is missing.
31
31
  *
32
- * Pure, synchronous, no IO: the probe result and the health record are inputs.
32
+ * Pure, synchronous, no IO: the probe result and the seat's own auth refusal are the inputs. The
33
+ * runtime HEALTH record is not one any more (R5 / R5b, DES-L3 PR-3D) — `inactive` is never produced
34
+ * and the one bench is the engine's per-run ballot ledger.
33
35
  */
34
- import type { CouncilBench, SeatAuthFailure, SeatHealth } from './seat-health.js';
36
+ import type { SeatAuthFailure } from './seat-health.js';
35
37
  /** The seat's auth state, read for what it MEANS for the seat's usability. */
36
38
  export type SeatAuth = 'signed_in' | 'signed_out' | 'not_required' | 'unknown';
37
39
  /**
@@ -82,17 +84,16 @@ export interface SeatStanding {
82
84
  council_eligible: boolean;
83
85
  /** Present when `council_eligible` is false: the one reason, in the operator's words. */
84
86
  council_ineligible_reason?: string;
85
- /** Present when THIS daemon's recent councils benched the seat (`SeatHealthTracker.councilBenchFor`). */
86
- council_bench?: CouncilBench;
87
87
  }
88
88
  /** A seat whose `auth` lets it take a turn — the ONE predicate the roster and the chat share. */
89
89
  export declare function authUsable(auth: SeatAuth): boolean;
90
- export declare function seatStanding(seat: StandingSeat, signedIn: boolean | null, health: SeatHealth, bench?: CouncilBench | null, authFailure?: SeatAuthFailure | null): SeatStanding;
90
+ export declare function seatStanding(seat: StandingSeat, signedIn: boolean | null, authFailure?: SeatAuthFailure | null): SeatStanding;
91
91
  /** Why a seat was not seated (F-A45-011; `ChatSeatRefusal.source` on the wire): `auth` — signed
92
- * out; `scope` — the scoped-chat admission rule; `bench` — benched by this daemon's recent councils;
93
- * `budget` — the engine did not seat it (its warm-up timed out or it was dropped at dispatch);
92
+ * out; `scope` — the scoped-chat admission rule;
93
+ * `budget` — the engine did not seat it (its warm-up timed out or it was dropped at dispatch; R5b —
94
+ * crew keeps no council bench of its own, so the engine's per-run bench surfaces here);
94
95
  * `engine` — the engine refused it with its own reason. */
95
- export type ChatRefusalSource = 'auth' | 'scope' | 'bench' | 'budget' | 'engine';
96
+ export type ChatRefusalSource = 'auth' | 'scope' | 'budget' | 'engine';
96
97
  export type ChatAdmission = {
97
98
  ok: true;
98
99
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"seat-standing.d.ts","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElF,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAE/E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3D,CAAC;AAEH,gGAAgG;AAChG,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAE3D,4GAA4G;AAC5G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,cAAc,CAAA;CAAE,CAgBhJ;AAED,sGAAsG;AACtG,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,sGAAsG;IACtG,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9C,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC;;+FAE2F;IAC3F,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yFAAyF;IACzF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,yGAAyG;IACzG,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAElD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,EACxB,MAAM,EAAE,UAAU,EAClB,KAAK,GAAE,YAAY,GAAG,IAAW,EACjC,WAAW,GAAE,eAAe,GAAG,IAAW,GACzC,YAAY,CAkDd;AAED;;;4DAG4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEpG;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAmBpG"}
1
+ {"version":3,"file":"seat-standing.d.ts","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEtD,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAE/E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3D,CAAC;AAEH,gGAAgG;AAChG,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAE3D,4GAA4G;AAC5G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,cAAc,CAAA;CAAE,CAgBhJ;AAED,sGAAsG;AACtG,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,sGAAsG;IACtG,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9C,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC;;+FAE2F;IAC3F,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yFAAyF;IACzF,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAElD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,EACxB,WAAW,GAAE,eAAe,GAAG,IAAW,GACzC,YAAY,CAkCd;AAED;;;;4DAI4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEpG;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAwBpG"}
@@ -29,7 +29,9 @@
29
29
  * ACP adapter asks permissions or whose record arms the kernel write floor). Every refusal
30
30
  * carries every reason that applies, so the thread can say WHY a seat is missing.
31
31
  *
32
- * Pure, synchronous, no IO: the probe result and the health record are inputs.
32
+ * Pure, synchronous, no IO: the probe result and the seat's own auth refusal are the inputs. The
33
+ * runtime HEALTH record is not one any more (R5 / R5b, DES-L3 PR-3D) — `inactive` is never produced
34
+ * and the one bench is the engine's per-run ballot ledger.
33
35
  */
34
36
  /**
35
37
  * Seats known to answer with NO credential at all — a free tier the CLI selects by itself when no
@@ -69,7 +71,7 @@ export function seatAuth(seat, signedIn) {
69
71
  export function authUsable(auth) {
70
72
  return auth !== 'signed_out';
71
73
  }
72
- export function seatStanding(seat, signedIn, health, bench = null, authFailure = null) {
74
+ export function seatStanding(seat, signedIn, authFailure = null) {
73
75
  // F-A45-006: the seat's OWN report beats the file probe. The fresh rig's pi read `signed_in`
74
76
  // off a present-but-empty `auth.json` while every ballot failed "No API key found"; when the seat
75
77
  // itself says it has no credential, `auth` is `signed_out` — the free tier does not apply either
@@ -94,27 +96,12 @@ export function seatStanding(seat, signedIn, health, bench = null, authFailure =
94
96
  : 'signed out — a council would bench this seat on its first ballot; sign it in from the System page',
95
97
  };
96
98
  }
97
- if (health.status === 'inactive') {
98
- return {
99
- ...base,
100
- council_eligible: false,
101
- council_ineligible_reason: `inactive after a seat-level error${health.message !== undefined ? `: ${health.message}` : ''}`,
102
- };
103
- }
104
- if (bench !== null) {
105
- // The engine's own evidence, from THIS daemon's recent runs (independent review of #533, F-1):
106
- // a seat that failed its ballots is benched whatever its auth reading says — the free tier
107
- // that answers a chat can still time out a 40 s dispatch budget.
108
- const minutes = Math.max(1, Math.round(bench.window_ms / 60_000));
109
- return {
110
- ...base,
111
- council_eligible: false,
112
- council_ineligible_reason: `benched by this daemon's recent councils: ${bench.failures} ballot failures in the last ${minutes} min — ` +
113
- `last ${bench.last_kind}${bench.last_run !== undefined ? ` on run ${bench.last_run.slice(0, 8)}` : ''}` +
114
- `${bench.last_detail !== undefined ? ` (${bench.last_detail})` : ''}; an ok unit output clears it`,
115
- council_bench: bench,
116
- };
117
- }
99
+ // (R5 / R5b, DES-L3 PR-3D) No `inactive` arm and no crew council bench any more: `health.status`
100
+ // is always `active` (observed errors stamp `lastErrorAt` only), and the one bench is the
101
+ // engine's per-run ballot ledger, read from the run (`session.benched_seats`,
102
+ // `unitDistributed.degradedReason`) — never predicted here from a cross-run count. The runtime
103
+ // health reading is therefore no longer an INPUT to standing: the parameter is gone rather than
104
+ // silenced, so a caller cannot think it still decides something.
118
105
  return base;
119
106
  }
120
107
  /**
@@ -133,15 +120,18 @@ export function chatSeatAdmission(seat, auth, scoped) {
133
120
  reasons.push('signed out — it cannot take a turn until it is signed in from the System page');
134
121
  source = 'auth';
135
122
  }
136
- if (scoped) {
137
- const acp = seat.acp ?? undefined;
138
- if (acp === undefined) {
139
- reasons.push('it has no ACP adapter registered, and a scoped chat holds only ACP-governed seats');
140
- }
141
- else if (acp.acp_input_governance !== true && acp.os_sandbox !== true) {
142
- reasons.push('its ACP adapter asks no permissions and its record arms no OS sandbox, so a scoped chat ' +
143
- 'could not hold the repositories read-only for it (open the chat unscoped to include it)');
144
- }
123
+ const acp = seat.acp ?? undefined;
124
+ if (acp === undefined) {
125
+ // F-W1-003 = A (approved 2026-09-15): chat runs on ACP-adapter seats only, scoped AND
126
+ // unscoped. A seat with no ACP adapter is a WRAPPED seat — it does governed work in runs, but
127
+ // it has no in-process turn/permission channel to hold a chat session, so it is never a chat
128
+ // seat and is not offered in either mode (was: admitted to an unscoped chat).
129
+ reasons.push('it has no ACP adapter, so it is not a chat seat — chat runs on ACP-adapter seats only, and ' +
130
+ 'this seat does governed work in runs instead');
131
+ }
132
+ else if (scoped && acp.acp_input_governance !== true && acp.os_sandbox !== true) {
133
+ reasons.push('its ACP adapter asks no permissions and its record arms no OS sandbox, so a scoped chat ' +
134
+ 'could not hold the repositories read-only for it (open the chat unscoped to include it)');
145
135
  }
146
136
  return reasons.length === 0 ? { ok: true } : { ok: false, reason: reasons.join('; '), source };
147
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"seat-standing.js","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC7E,QAAQ,EAAE,8CAA8C;CACzD,CAAC,CAAC;AAKH,4GAA4G;AAC5G,MAAM,UAAU,QAAQ,CAAC,IAAkB,EAAE,QAAwB;IACnE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClD,8FAA8F;IAC9F,8FAA8F;IAC9F,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,wCAAwC;YAClI,gBAAgB,EAAE,UAAU;SAC7B,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACtH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChC,CAAC;AAgCD,iGAAiG;AACjG,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,OAAO,IAAI,KAAK,YAAY,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAkB,EAClB,QAAwB,EACxB,MAAkB,EAClB,QAA6B,IAAI,EACjC,cAAsC,IAAI;IAE1C,6FAA6F;IAC7F,kGAAkG;IAClG,iGAAiG;IACjG,iGAAiG;IACjG,MAAM,IAAI,GACR,WAAW,KAAK,IAAI;QAClB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,WAAW,EAAE,aAAsB,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE;QACzG,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAiB;QACzB,GAAG,IAAI;QACP,gBAAgB,EAAE,IAAI;KACvB,CAAC;IACF,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,GAAG,IAAI;YACP,gBAAgB,EAAE,KAAK;YACvB,yBAAyB,EACvB,WAAW,KAAK,IAAI;gBAClB,CAAC,CAAC,wDAAwD,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,oCAAoC;gBACvI,CAAC,CAAC,mGAAmG;SAC1G,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,IAAI;YACP,gBAAgB,EAAE,KAAK;YACvB,yBAAyB,EAAE,oCAAoC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;SAC3H,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,+FAA+F;QAC/F,2FAA2F;QAC3F,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC;QAClE,OAAO;YACL,GAAG,IAAI;YACP,gBAAgB,EAAE,KAAK;YACvB,yBAAyB,EACvB,6CAA6C,KAAK,CAAC,QAAQ,gCAAgC,OAAO,SAAS;gBAC3G,QAAQ,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACvG,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B;YACpG,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkB,EAAE,IAAc,EAAE,MAAe;IACnF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAsB,OAAO,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC9F,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QACpG,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACxE,OAAO,CAAC,IAAI,CACV,0FAA0F;gBACxF,yFAAyF,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"seat-standing.js","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"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"}