wicked-crew 0.7.46 → 0.7.48

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 (263) hide show
  1. package/dist/api/capture.d.ts +2 -2
  2. package/dist/api/chat-citations.d.ts +10 -1
  3. package/dist/api/chat-citations.d.ts.map +1 -1
  4. package/dist/api/chat-citations.js +28 -0
  5. package/dist/api/chat-citations.js.map +1 -1
  6. package/dist/api/chat-scope.d.ts +4 -2
  7. package/dist/api/chat-scope.d.ts.map +1 -1
  8. package/dist/api/chat-scope.js +35 -3
  9. package/dist/api/chat-scope.js.map +1 -1
  10. package/dist/api/chat-transcripts.d.ts +23 -1
  11. package/dist/api/chat-transcripts.d.ts.map +1 -1
  12. package/dist/api/chat-transcripts.js +61 -6
  13. package/dist/api/chat-transcripts.js.map +1 -1
  14. package/dist/api/delivery-index.d.ts +21 -0
  15. package/dist/api/delivery-index.d.ts.map +1 -1
  16. package/dist/api/delivery-index.js +36 -0
  17. package/dist/api/delivery-index.js.map +1 -1
  18. package/dist/api/elicitation-cache.d.ts +12 -0
  19. package/dist/api/elicitation-cache.d.ts.map +1 -1
  20. package/dist/api/elicitation-cache.js +17 -1
  21. package/dist/api/elicitation-cache.js.map +1 -1
  22. package/dist/api/eval-sample.d.ts +12 -12
  23. package/dist/api/governance-steering.d.ts.map +1 -1
  24. package/dist/api/governance-steering.js +1 -0
  25. package/dist/api/governance-steering.js.map +1 -1
  26. package/dist/api/mcp.d.ts +4 -4
  27. package/dist/api/policy-landing.d.ts +55 -0
  28. package/dist/api/policy-landing.d.ts.map +1 -0
  29. package/dist/api/policy-landing.js +174 -0
  30. package/dist/api/policy-landing.js.map +1 -0
  31. package/dist/api/recording.d.ts +228 -0
  32. package/dist/api/recording.d.ts.map +1 -0
  33. package/dist/api/recording.js +1140 -0
  34. package/dist/api/recording.js.map +1 -0
  35. package/dist/api/routes.d.ts +42 -39
  36. package/dist/api/routes.d.ts.map +1 -1
  37. package/dist/api/routes.js +362 -107
  38. package/dist/api/routes.js.map +1 -1
  39. package/dist/api/run-timing-index.d.ts +17 -0
  40. package/dist/api/run-timing-index.d.ts.map +1 -1
  41. package/dist/api/run-timing-index.js +43 -1
  42. package/dist/api/run-timing-index.js.map +1 -1
  43. package/dist/api/server.d.ts +27 -0
  44. package/dist/api/server.d.ts.map +1 -1
  45. package/dist/api/server.js +168 -4
  46. package/dist/api/server.js.map +1 -1
  47. package/dist/api/testing.d.ts +4 -4
  48. package/dist/api/testing.d.ts.map +1 -1
  49. package/dist/api/testing.js +3 -0
  50. package/dist/api/testing.js.map +1 -1
  51. package/dist/api/watch-routes.d.ts +30 -0
  52. package/dist/api/watch-routes.d.ts.map +1 -0
  53. package/dist/api/watch-routes.js +104 -0
  54. package/dist/api/watch-routes.js.map +1 -0
  55. package/dist/campaigns/routes.d.ts +2 -2
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +20 -2
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/core/adapter.d.ts +52 -1
  60. package/dist/core/adapter.d.ts.map +1 -1
  61. package/dist/core/adapter.js +193 -5
  62. package/dist/core/adapter.js.map +1 -1
  63. package/dist/core/run-identity.js +1 -1
  64. package/dist/core/run-identity.js.map +1 -1
  65. package/dist/core/walkthrough-root.d.ts +21 -0
  66. package/dist/core/walkthrough-root.d.ts.map +1 -0
  67. package/dist/core/walkthrough-root.js +66 -0
  68. package/dist/core/walkthrough-root.js.map +1 -0
  69. package/dist/decisions/chat-recorder.d.ts +129 -0
  70. package/dist/decisions/chat-recorder.d.ts.map +1 -0
  71. package/dist/decisions/chat-recorder.js +367 -0
  72. package/dist/decisions/chat-recorder.js.map +1 -0
  73. package/dist/decisions/consider.d.ts +102 -0
  74. package/dist/decisions/consider.d.ts.map +1 -0
  75. package/dist/decisions/consider.js +207 -0
  76. package/dist/decisions/consider.js.map +1 -0
  77. package/dist/decisions/derive.d.ts +79 -0
  78. package/dist/decisions/derive.d.ts.map +1 -0
  79. package/dist/decisions/derive.js +282 -0
  80. package/dist/decisions/derive.js.map +1 -0
  81. package/dist/decisions/events.d.ts +25 -0
  82. package/dist/decisions/events.d.ts.map +1 -0
  83. package/dist/decisions/events.js +24 -0
  84. package/dist/decisions/events.js.map +1 -0
  85. package/dist/decisions/ingest.d.ts +51 -0
  86. package/dist/decisions/ingest.d.ts.map +1 -0
  87. package/dist/decisions/ingest.js +100 -0
  88. package/dist/decisions/ingest.js.map +1 -0
  89. package/dist/decisions/land.d.ts +100 -0
  90. package/dist/decisions/land.d.ts.map +1 -0
  91. package/dist/decisions/land.js +466 -0
  92. package/dist/decisions/land.js.map +1 -0
  93. package/dist/decisions/ledger.d.ts +60 -0
  94. package/dist/decisions/ledger.d.ts.map +1 -0
  95. package/dist/decisions/ledger.js +246 -0
  96. package/dist/decisions/ledger.js.map +1 -0
  97. package/dist/decisions/routes.d.ts +10 -0
  98. package/dist/decisions/routes.d.ts.map +1 -0
  99. package/dist/decisions/routes.js +141 -0
  100. package/dist/decisions/routes.js.map +1 -0
  101. package/dist/decisions/rules-text.d.ts +21 -0
  102. package/dist/decisions/rules-text.d.ts.map +1 -0
  103. package/dist/decisions/rules-text.js +50 -0
  104. package/dist/decisions/rules-text.js.map +1 -0
  105. package/dist/decisions/types.d.ts +120 -0
  106. package/dist/decisions/types.d.ts.map +1 -0
  107. package/dist/decisions/types.js +19 -0
  108. package/dist/decisions/types.js.map +1 -0
  109. package/dist/editors/csp.d.ts +31 -0
  110. package/dist/editors/csp.d.ts.map +1 -0
  111. package/dist/editors/csp.js +46 -0
  112. package/dist/editors/csp.js.map +1 -0
  113. package/dist/editors/pack-install.d.ts +28 -0
  114. package/dist/editors/pack-install.d.ts.map +1 -0
  115. package/dist/editors/pack-install.js +153 -0
  116. package/dist/editors/pack-install.js.map +1 -0
  117. package/dist/editors/registry.d.ts +142 -0
  118. package/dist/editors/registry.d.ts.map +1 -0
  119. package/dist/editors/registry.js +255 -0
  120. package/dist/editors/registry.js.map +1 -0
  121. package/dist/editors/routes.d.ts +46 -0
  122. package/dist/editors/routes.d.ts.map +1 -0
  123. package/dist/editors/routes.js +166 -0
  124. package/dist/editors/routes.js.map +1 -0
  125. package/dist/interactive/bridge-pool.d.ts +7 -2
  126. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  127. package/dist/interactive/bridge-pool.js +6 -1
  128. package/dist/interactive/bridge-pool.js.map +1 -1
  129. package/dist/interactive/draft-events.d.ts.map +1 -1
  130. package/dist/interactive/draft-events.js +1 -0
  131. package/dist/interactive/draft-events.js.map +1 -1
  132. package/dist/interactive/theme-events.d.ts +119 -0
  133. package/dist/interactive/theme-events.d.ts.map +1 -0
  134. package/dist/interactive/theme-events.js +606 -0
  135. package/dist/interactive/theme-events.js.map +1 -0
  136. package/dist/projects/events.d.ts.map +1 -1
  137. package/dist/projects/events.js +2 -1
  138. package/dist/projects/events.js.map +1 -1
  139. package/dist/projects/routes.d.ts +2 -2
  140. package/dist/projects/state-home-preflight.d.ts.map +1 -1
  141. package/dist/projects/state-home-preflight.js +3 -0
  142. package/dist/projects/state-home-preflight.js.map +1 -1
  143. package/dist/projects/state-home-registry.d.ts.map +1 -1
  144. package/dist/projects/state-home-registry.js +2 -0
  145. package/dist/projects/state-home-registry.js.map +1 -1
  146. package/dist/projects/state-home.d.ts +6 -0
  147. package/dist/projects/state-home.d.ts.map +1 -1
  148. package/dist/projects/state-home.js +28 -1
  149. package/dist/projects/state-home.js.map +1 -1
  150. package/dist/qe/acceptance.d.ts +45 -4
  151. package/dist/qe/acceptance.d.ts.map +1 -1
  152. package/dist/qe/acceptance.js +93 -4
  153. package/dist/qe/acceptance.js.map +1 -1
  154. package/dist/qe/ledger.d.ts +20 -0
  155. package/dist/qe/ledger.d.ts.map +1 -1
  156. package/dist/qe/ledger.js +34 -0
  157. package/dist/qe/ledger.js.map +1 -1
  158. package/dist/qe/walkthrough-acceptance.d.ts +82 -0
  159. package/dist/qe/walkthrough-acceptance.d.ts.map +1 -0
  160. package/dist/qe/walkthrough-acceptance.js +248 -0
  161. package/dist/qe/walkthrough-acceptance.js.map +1 -0
  162. package/dist/skills/base-skill.d.ts.map +1 -1
  163. package/dist/skills/base-skill.js +3 -2
  164. package/dist/skills/base-skill.js.map +1 -1
  165. package/dist/skills/plugin-source.d.ts +19 -1
  166. package/dist/skills/plugin-source.d.ts.map +1 -1
  167. package/dist/skills/plugin-source.js +31 -2
  168. package/dist/skills/plugin-source.js.map +1 -1
  169. package/dist/skills/runtime.d.ts +11 -2
  170. package/dist/skills/runtime.d.ts.map +1 -1
  171. package/dist/skills/runtime.js +29 -1
  172. package/dist/skills/runtime.js.map +1 -1
  173. package/dist/skills/store.d.ts +14 -1
  174. package/dist/skills/store.d.ts.map +1 -1
  175. package/dist/skills/store.js +19 -5
  176. package/dist/skills/store.js.map +1 -1
  177. package/dist/standing-orders/routes.d.ts +22 -22
  178. package/dist/standing-orders/store.d.ts +10 -10
  179. package/dist/watch/checks/check-failed.d.ts +24 -0
  180. package/dist/watch/checks/check-failed.d.ts.map +1 -0
  181. package/dist/watch/checks/check-failed.js +56 -0
  182. package/dist/watch/checks/check-failed.js.map +1 -0
  183. package/dist/watch/checks/claim-vs-evidence.d.ts +30 -0
  184. package/dist/watch/checks/claim-vs-evidence.d.ts.map +1 -0
  185. package/dist/watch/checks/claim-vs-evidence.js +152 -0
  186. package/dist/watch/checks/claim-vs-evidence.js.map +1 -0
  187. package/dist/watch/checks/deliver-audit.d.ts +19 -0
  188. package/dist/watch/checks/deliver-audit.d.ts.map +1 -0
  189. package/dist/watch/checks/deliver-audit.js +129 -0
  190. package/dist/watch/checks/deliver-audit.js.map +1 -0
  191. package/dist/watch/checks/index.d.ts +8 -0
  192. package/dist/watch/checks/index.d.ts.map +1 -0
  193. package/dist/watch/checks/index.js +24 -0
  194. package/dist/watch/checks/index.js.map +1 -0
  195. package/dist/watch/checks/lag.d.ts +24 -0
  196. package/dist/watch/checks/lag.d.ts.map +1 -0
  197. package/dist/watch/checks/lag.js +55 -0
  198. package/dist/watch/checks/lag.js.map +1 -0
  199. package/dist/watch/checks/quiet-after-claim.d.ts +17 -0
  200. package/dist/watch/checks/quiet-after-claim.d.ts.map +1 -0
  201. package/dist/watch/checks/quiet-after-claim.js +89 -0
  202. package/dist/watch/checks/quiet-after-claim.js.map +1 -0
  203. package/dist/watch/checks/ungated.d.ts +12 -0
  204. package/dist/watch/checks/ungated.d.ts.map +1 -0
  205. package/dist/watch/checks/ungated.js +64 -0
  206. package/dist/watch/checks/ungated.js.map +1 -0
  207. package/dist/watch/checks/warned-rule.d.ts +26 -0
  208. package/dist/watch/checks/warned-rule.d.ts.map +1 -0
  209. package/dist/watch/checks/warned-rule.js +126 -0
  210. package/dist/watch/checks/warned-rule.js.map +1 -0
  211. package/dist/watch/emit.d.ts +122 -0
  212. package/dist/watch/emit.d.ts.map +1 -0
  213. package/dist/watch/emit.js +443 -0
  214. package/dist/watch/emit.js.map +1 -0
  215. package/dist/watch/events.d.ts +21 -0
  216. package/dist/watch/events.d.ts.map +1 -0
  217. package/dist/watch/events.js +21 -0
  218. package/dist/watch/events.js.map +1 -0
  219. package/dist/watch/keys.d.ts +15 -0
  220. package/dist/watch/keys.d.ts.map +1 -0
  221. package/dist/watch/keys.js +23 -0
  222. package/dist/watch/keys.js.map +1 -0
  223. package/dist/watch/lanes.d.ts +41 -0
  224. package/dist/watch/lanes.d.ts.map +1 -0
  225. package/dist/watch/lanes.js +73 -0
  226. package/dist/watch/lanes.js.map +1 -0
  227. package/dist/watch/loader.d.ts +47 -0
  228. package/dist/watch/loader.d.ts.map +1 -0
  229. package/dist/watch/loader.js +178 -0
  230. package/dist/watch/loader.js.map +1 -0
  231. package/dist/watch/registry.d.ts +166 -0
  232. package/dist/watch/registry.d.ts.map +1 -0
  233. package/dist/watch/registry.js +589 -0
  234. package/dist/watch/registry.js.map +1 -0
  235. package/dist/watch/ring.d.ts +32 -0
  236. package/dist/watch/ring.d.ts.map +1 -0
  237. package/dist/watch/ring.js +90 -0
  238. package/dist/watch/ring.js.map +1 -0
  239. package/dist/watch/router.d.ts +25 -0
  240. package/dist/watch/router.d.ts.map +1 -0
  241. package/dist/watch/router.js +87 -0
  242. package/dist/watch/router.js.map +1 -0
  243. package/dist/watch/sources.d.ts +42 -0
  244. package/dist/watch/sources.d.ts.map +1 -0
  245. package/dist/watch/sources.js +104 -0
  246. package/dist/watch/sources.js.map +1 -0
  247. package/dist/watch/types.d.ts +129 -0
  248. package/dist/watch/types.d.ts.map +1 -0
  249. package/dist/watch/types.js +6 -0
  250. package/dist/watch/types.js.map +1 -0
  251. package/endpoint-manifest.json +272 -1
  252. package/package.json +3 -2
  253. package/watch/entries/claim-vs-evidence.json +13 -0
  254. package/watch/entries/deliver-audit.json +17 -0
  255. package/watch/entries/quiet-after-claim.json +16 -0
  256. package/watch/entries/registry-check-failed.json +12 -0
  257. package/watch/entries/registry-lagging.json +12 -0
  258. package/watch/entries/risky-call.json +12 -0
  259. package/watch/entries/ungated.json +13 -0
  260. package/dist/api/demo.d.ts +0 -90
  261. package/dist/api/demo.d.ts.map +0 -1
  262. package/dist/api/demo.js +0 -492
  263. package/dist/api/demo.js.map +0 -1
@@ -0,0 +1,589 @@
1
+ /**
2
+ * The key-point trigger registry (DES-TRIGGER-REGISTRY-001, TR-W5a): the runtime.
3
+ *
4
+ * ```
5
+ * daemon fan-in ──offer() O(1)──▶ ring[512] ─┐
6
+ * watchdog onFrame ──offerWatchdog() O(1)──▶ ├─▶ router ─▶ deterministic lane ─▶ emitter ─▶ bus ─▶ relay ─▶ /ws
7
+ * bus (pulled, only types an entry wants) ───┘
8
+ * ```
9
+ *
10
+ * - OFF THE HOT PATH (G3). `offer` is synchronous, allocation-light, never awaited and never throws;
11
+ * an input no enabled entry listens for is dropped by one `Set.has`.
12
+ * - ADVISORY BY CONSTRUCTION (G6). The registry is built with no gate, reassign or policy
13
+ * dependency (`tests/watch-no-authority.test.ts` fails the build if `src/watch/**` names one). It
14
+ * emits findings, flags and proposals; it never adds a needs-you row.
15
+ * - ONE RECORD (§4.8). The bus. The feed is hydrated from it once at arm; each live run's persisted
16
+ * events (and its wanted bus rows) are replayed through the entries at boot; every key is built
17
+ * from producer-assigned identity, so a replay resolves to the rows already there.
18
+ * - NO BUS, NO WATCHING (§6). Without an engine bus the registry does not arm, and health says why.
19
+ */
20
+ import { requireEngineBus } from '../core/bus.js';
21
+ import { SHIPPED_CHECKS } from './checks/index.js';
22
+ import { WatchEmitter } from './emit.js';
23
+ import { DeterministicLane } from './lanes.js';
24
+ import { applyOverrides, loadEntries, SHIPPED_ENTRIES_DIR, validateWatchPatch } from './loader.js';
25
+ import { PushRing } from './ring.js';
26
+ import { Router } from './router.js';
27
+ import { replayBusRows, startBusPull, startWatchWsRelay } from './sources.js';
28
+ /** Run states kept for coverage after a run ends (oldest dropped first). */
29
+ const RUN_STATE_CAP = 500;
30
+ const FEED_LIMIT_DEFAULT = 100;
31
+ const FEED_LIMIT_MAX = 500;
32
+ const CHECK_FAILED_ENTRY = 'registry-check-failed';
33
+ /** TR-W6: how long one `listConformanceRules` read serves the warned-rule check. */
34
+ export const RULES_SNAPSHOT_TTL_MS = 30_000;
35
+ /** TR-W6: how long a check waits on that read — well below the deterministic lane's 1 s timeout. */
36
+ export const RULES_READ_DEADLINE_MS = 400;
37
+ export class WatchRegistry {
38
+ opts;
39
+ armedFlag = false;
40
+ reasonText = 'not armed yet';
41
+ accepting = false;
42
+ live = false;
43
+ checks;
44
+ shipped = [];
45
+ refused = [];
46
+ overrideProblems = [];
47
+ effective = [];
48
+ settingsNow;
49
+ router = new Router([]);
50
+ ring;
51
+ lane;
52
+ emitter = null;
53
+ relay = null;
54
+ pull = null;
55
+ tickTimer = null;
56
+ draining = null;
57
+ drainScheduled = false;
58
+ shedTickQueued = false;
59
+ dbPath = null;
60
+ runStates = new Map();
61
+ /** Live runs whose persisted events could not be read at boot (their coverage says so). */
62
+ gapRuns = new Set();
63
+ /** The live runs could not even be listed at boot: every unseen run's coverage says so. */
64
+ listGap = false;
65
+ /** While the boot replay runs, live bus rows wait here (the pull is armed BEFORE the replay). */
66
+ busHold = null;
67
+ now;
68
+ sourceState = { bus: 'down', core: 'down', watchdog: 'down' };
69
+ constructor(opts) {
70
+ this.opts = opts;
71
+ this.checks = opts.checks ?? SHIPPED_CHECKS;
72
+ this.now = opts.now ?? Date.now;
73
+ this.ring = new PushRing(opts.ringCapacity ?? 512);
74
+ // A shed asks for ONE tick, posted outside the push: pushing from inside `push` would refill the
75
+ // ring it is shedding from (a tick per shed item, recursively).
76
+ this.ring.onShed = () => {
77
+ if (this.shedTickQueued)
78
+ return;
79
+ this.shedTickQueued = true;
80
+ setImmediate(() => {
81
+ this.shedTickQueued = false;
82
+ this.offerInternal('registry.tick', { cause: 'shed' });
83
+ });
84
+ };
85
+ this.lane = new DeterministicLane({
86
+ ...(opts.checkBudgetMs !== undefined ? { budgetMs: opts.checkBudgetMs } : {}),
87
+ ...(opts.checkTimeoutMs !== undefined ? { timeoutMs: opts.checkTimeoutMs } : {}),
88
+ onFailure: (entryId, reason) => {
89
+ // The check-failed check failing itself is counted, never fed back into itself.
90
+ if (entryId !== CHECK_FAILED_ENTRY)
91
+ this.offerInternal('registry.check_failed', { entry_id: entryId, reason });
92
+ },
93
+ });
94
+ }
95
+ get armed() {
96
+ return this.armedFlag;
97
+ }
98
+ /** Arm: load entries, hydrate the feed from the bus, replay live runs, then go live. Never throws. */
99
+ async arm() {
100
+ const log = this.opts.log ?? (() => undefined);
101
+ const loaded = loadEntries(this.opts.entriesDir ?? SHIPPED_ENTRIES_DIR, this.checks);
102
+ this.shipped = loaded.entries;
103
+ this.refused = loaded.refused;
104
+ for (const r of this.refused)
105
+ log(`[watch] entry ${r.id} refused: ${r.reason}`);
106
+ try {
107
+ this.applySettings(await this.opts.settings());
108
+ }
109
+ catch (err) {
110
+ log(`[watch] settings unreadable, shipped defaults apply: ${message(err)}`);
111
+ this.applySettings(undefined);
112
+ }
113
+ let dbPath;
114
+ try {
115
+ dbPath = requireEngineBus(this.opts.dbPath);
116
+ }
117
+ catch (err) {
118
+ this.reasonText = `no event bus: ${message(err)}`;
119
+ log(`[watch] not armed — ${this.reasonText}`);
120
+ return;
121
+ }
122
+ const emitter = new WatchEmitter({
123
+ dbPath,
124
+ projectOf: this.opts.projectOf,
125
+ auditEmitFailed: this.opts.auditEmitFailed ?? (() => undefined),
126
+ ...(this.opts.submitProposal !== undefined ? { submitProposal: this.opts.submitProposal } : {}),
127
+ now: this.now,
128
+ ...(this.opts.sleep !== undefined ? { sleep: this.opts.sleep } : {}),
129
+ flushMs: this.opts.flushMs ?? 2_000,
130
+ log,
131
+ });
132
+ try {
133
+ await emitter.hydrate();
134
+ }
135
+ catch (err) {
136
+ this.reasonText = `cannot read the event bus: ${message(err)}`;
137
+ log(`[watch] not armed — ${this.reasonText}`);
138
+ return;
139
+ }
140
+ this.emitter = emitter;
141
+ this.dbPath = dbPath;
142
+ // From here live inputs queue in the ring; they are drained once the replay is through.
143
+ this.accepting = true;
144
+ this.sourceState.core = 'ok';
145
+ this.sourceState.watchdog = 'ok';
146
+ // The live pull starts at the bus tail BEFORE the replay reads history, so no row can fall in
147
+ // between; what it delivers meanwhile is held and processed after the replay (duplicates of a
148
+ // replayed row resolve to the same key).
149
+ this.busHold = [];
150
+ await this.armBusPull(dbPath, log);
151
+ await this.replay(dbPath, log);
152
+ const held = this.busHold;
153
+ this.busHold = null;
154
+ for (const input of held)
155
+ await this.process(input);
156
+ await emitter.flush();
157
+ if (this.opts.broadcast !== undefined) {
158
+ this.relay = await startWatchWsRelay({
159
+ dbPath,
160
+ projectOf: this.opts.projectOf,
161
+ broadcast: this.opts.broadcast,
162
+ ...(this.opts.pollIntervalMs !== undefined ? { pollIntervalMs: this.opts.pollIntervalMs } : {}),
163
+ log,
164
+ });
165
+ }
166
+ emitter.start();
167
+ const tickMs = this.opts.tickMs ?? 30_000;
168
+ if (tickMs > 0) {
169
+ this.tickTimer = setInterval(() => this.offerInternal('registry.tick', {}), tickMs);
170
+ this.tickTimer.unref();
171
+ }
172
+ this.armedFlag = true;
173
+ this.reasonText = null;
174
+ this.live = true;
175
+ this.schedule();
176
+ }
177
+ async armBusPull(dbPath, log) {
178
+ if (this.pull !== null)
179
+ return;
180
+ if (this.router.busTypes().length === 0) {
181
+ this.sourceState.bus = 'ok'; // nothing to pull: no enabled entry listens on the bus
182
+ return;
183
+ }
184
+ try {
185
+ this.pull = await startBusPull({
186
+ dbPath,
187
+ wants: (type) => this.router.wants('bus', type) !== null,
188
+ handle: async (input) => {
189
+ if (this.busHold !== null) {
190
+ this.busHold.push(input);
191
+ return;
192
+ }
193
+ await this.process(input);
194
+ await this.emitter?.flush();
195
+ },
196
+ ...(this.opts.pollIntervalMs !== undefined ? { pollIntervalMs: this.opts.pollIntervalMs } : {}),
197
+ log,
198
+ });
199
+ this.sourceState.bus = 'ok';
200
+ }
201
+ catch (err) {
202
+ this.sourceState.bus = 'down';
203
+ log(`[watch] bus pull not armed: ${message(err)}`);
204
+ }
205
+ }
206
+ /** §4.8 step 2: every run live at boot is re-read from its own record and evaluated. */
207
+ async replay(dbPath, log) {
208
+ if (this.opts.liveRuns === undefined)
209
+ return;
210
+ let runs;
211
+ try {
212
+ runs = await this.opts.liveRuns();
213
+ }
214
+ catch (err) {
215
+ log(`[watch] replay skipped (cannot list live runs): ${message(err)}`);
216
+ this.listGap = true;
217
+ return;
218
+ }
219
+ const inputs = [];
220
+ for (const runId of runs) {
221
+ const events = this.opts.runEvents === undefined ? null : await this.opts.runEvents(runId).catch(() => null);
222
+ if (events === null) {
223
+ this.gapRuns.add(runId);
224
+ continue;
225
+ }
226
+ for (const e of events) {
227
+ if (this.router.wants('core', e.type) === null)
228
+ continue;
229
+ inputs.push({ source: 'core', type: e.type, event: e, runId, at: e.ts, replay: true });
230
+ }
231
+ }
232
+ try {
233
+ inputs.push(...(await replayBusRows(dbPath, this.router.busTypes(), new Set(runs))));
234
+ }
235
+ catch (err) {
236
+ log(`[watch] bus replay failed: ${message(err)}`);
237
+ }
238
+ for (const input of inputs)
239
+ await this.process(input);
240
+ await this.emitter?.flush();
241
+ }
242
+ /** THE HOT PATH (daemon fan-in): synchronous, O(1), never throws, never awaited. */
243
+ offer(event) {
244
+ try {
245
+ if (!this.accepting)
246
+ return;
247
+ const type = event.type;
248
+ const priority = this.router.wants('core', type);
249
+ if (priority === null)
250
+ return;
251
+ const runId = typeof event.session === 'string' ? event.session : null;
252
+ this.ring.push({ source: 'core', type, event: event, runId, at: this.now() }, priority);
253
+ this.schedule();
254
+ }
255
+ catch {
256
+ /* never on the producer's path */
257
+ }
258
+ }
259
+ /** The watchdog's frames (the `onFrame` tee): same contract as {@link offer}. */
260
+ offerWatchdog(frame) {
261
+ try {
262
+ if (!this.accepting)
263
+ return;
264
+ const priority = this.router.wants('watchdog', frame.type);
265
+ if (priority === null)
266
+ return;
267
+ const runId = typeof frame.session === 'string' ? frame.session : null;
268
+ this.ring.push({ source: 'watchdog', type: frame.type, event: frame, runId, at: this.now() }, priority);
269
+ this.schedule();
270
+ }
271
+ catch {
272
+ /* never on the producer's path */
273
+ }
274
+ }
275
+ offerInternal(type, event) {
276
+ if (!this.accepting)
277
+ return;
278
+ const priority = this.router.wants('internal', type);
279
+ if (priority === null)
280
+ return;
281
+ this.ring.push({ source: 'internal', type, event, runId: null, at: this.now() }, priority);
282
+ this.schedule();
283
+ }
284
+ schedule() {
285
+ if (!this.live || this.drainScheduled)
286
+ return;
287
+ this.drainScheduled = true;
288
+ setImmediate(() => {
289
+ this.drainScheduled = false;
290
+ if (this.draining === null) {
291
+ this.draining = this.drain().finally(() => {
292
+ this.draining = null;
293
+ if (this.ring.depth > 0)
294
+ this.schedule();
295
+ });
296
+ }
297
+ });
298
+ }
299
+ async drain() {
300
+ for (let input = this.ring.shift(); input !== undefined; input = this.ring.shift()) {
301
+ await this.process(input);
302
+ }
303
+ }
304
+ stateOf(runId, entryId) {
305
+ const rk = runId ?? '-';
306
+ let perRun = this.runStates.get(rk);
307
+ if (perRun === undefined) {
308
+ perRun = new Map();
309
+ this.runStates.set(rk, perRun);
310
+ if (this.runStates.size > RUN_STATE_CAP) {
311
+ // The oldest RUN goes (the run-less '-' bucket holds the internal entries and stays).
312
+ for (const k of this.runStates.keys()) {
313
+ if (k !== '-' && k !== rk) {
314
+ this.runStates.delete(k);
315
+ break;
316
+ }
317
+ }
318
+ }
319
+ }
320
+ let s = perRun.get(entryId);
321
+ if (s === undefined) {
322
+ s = { runId, seen: new Set(), bag: new Map() };
323
+ perRun.set(entryId, s);
324
+ }
325
+ return s;
326
+ }
327
+ rulesSnapshot = null;
328
+ rulesInFlight = null;
329
+ /**
330
+ * TR-W6: one store read per TTL, shared by every check that asks in the window.
331
+ *
332
+ * The ask has a DEADLINE below the deterministic lane's timeout (codex r1): a slow read must not
333
+ * get the evaluation abandoned mid-way (its dedupe state would move while its output is dropped).
334
+ * Past the deadline the ask is refused — the check keeps the frame and classifies it on a later
335
+ * one — while the read itself goes on and fills the snapshot when it lands. A read that has not
336
+ * settled within one TTL is abandoned: the next ask starts a new one (a hung store never pins the
337
+ * slot), and a late answer from an abandoned read never overwrites a newer snapshot.
338
+ */
339
+ readRules() {
340
+ const source = this.opts.rules;
341
+ if (source === undefined)
342
+ return Promise.reject(new Error('no rule source'));
343
+ const now = this.now();
344
+ if (this.rulesSnapshot !== null && now - this.rulesSnapshot.at < RULES_SNAPSHOT_TTL_MS)
345
+ return Promise.resolve(this.rulesSnapshot.map);
346
+ if (this.rulesInFlight === null || now - this.rulesInFlight.startedAt >= RULES_SNAPSHOT_TTL_MS) {
347
+ const flight = { startedAt: now, promise: Promise.resolve(new Map()) };
348
+ flight.promise = Promise.resolve()
349
+ .then(source)
350
+ .then((list) => {
351
+ const map = new Map();
352
+ for (const r of list)
353
+ if (r.retired !== true)
354
+ map.set(r.id, { effect: r.effect, severity: r.severity });
355
+ // Only the read that still owns the slot may publish (an abandoned one is stale by definition).
356
+ if (this.rulesInFlight === flight)
357
+ this.rulesSnapshot = { at: this.now(), map };
358
+ return map;
359
+ })
360
+ .finally(() => {
361
+ if (this.rulesInFlight === flight)
362
+ this.rulesInFlight = null;
363
+ });
364
+ flight.promise.catch(() => undefined); // an ask past its deadline no longer listens
365
+ this.rulesInFlight = flight;
366
+ }
367
+ const read = this.rulesInFlight.promise;
368
+ const deadlineMs = this.opts.rulesDeadlineMs ?? RULES_READ_DEADLINE_MS;
369
+ return new Promise((resolve, reject) => {
370
+ const timer = setTimeout(() => reject(new Error(`the rules read timed out after ${deadlineMs} ms`)), deadlineMs);
371
+ timer.unref();
372
+ read.then((map) => {
373
+ clearTimeout(timer);
374
+ resolve(map);
375
+ }, (err) => {
376
+ clearTimeout(timer);
377
+ reject(err instanceof Error ? err : new Error(String(err)));
378
+ });
379
+ });
380
+ }
381
+ ctx() {
382
+ return {
383
+ ...(this.opts.rules !== undefined ? { rules: () => this.readRules() } : {}),
384
+ now: this.now,
385
+ stats: () => {
386
+ const r = this.ring.stats();
387
+ return {
388
+ queueDepth: r.depth,
389
+ queueHwm: r.hwm,
390
+ shedTotal: r.shed_by_priority.p0 + r.shed_by_priority.p1 + r.shed_by_priority.p2,
391
+ tailLagMs: this.pull?.tailLagMs() ?? 0,
392
+ };
393
+ },
394
+ };
395
+ }
396
+ /** Route one input through every matching entry and hand the outputs to the emitter. */
397
+ async process(input) {
398
+ const emitter = this.emitter;
399
+ if (emitter === null)
400
+ return;
401
+ for (const entry of this.router.route(input)) {
402
+ const check = this.checks.get(entry.check);
403
+ if (check === undefined)
404
+ continue;
405
+ const state = this.stateOf(input.runId, entry.id);
406
+ state.seen.add(input.type);
407
+ const outputs = await this.lane.run(check, entry, input, state, this.ctx());
408
+ for (const out of outputs) {
409
+ if (out.op === 'raise')
410
+ emitter.raise(entry, input.runId, out, out.at ?? input.at, out.replay ?? input.replay === true);
411
+ else
412
+ emitter.clear(entry, input.runId, out.subject, { reason: 'resolved' });
413
+ }
414
+ }
415
+ }
416
+ /** Drain the ring and flush the emitter (tests, and shutdown). */
417
+ async flush() {
418
+ while (this.draining !== null || this.ring.depth > 0 || this.shedTickQueued) {
419
+ if (this.draining !== null)
420
+ await this.draining;
421
+ else if (this.ring.depth > 0)
422
+ await this.drain();
423
+ else
424
+ await new Promise((resolve) => setImmediate(resolve)); // the posted shed tick
425
+ }
426
+ await this.emitter?.flush();
427
+ }
428
+ /** Stop taking inputs, finish what was accepted, then close the emitter and the taps. */
429
+ async stop() {
430
+ this.live = false;
431
+ this.accepting = false;
432
+ if (this.tickTimer !== null)
433
+ clearInterval(this.tickTimer);
434
+ this.tickTimer = null;
435
+ await this.pull?.stop();
436
+ await this.flush();
437
+ await this.emitter?.stop();
438
+ await this.relay?.stop();
439
+ }
440
+ /** Tick the internal clock by hand (tests; the timer does this every 30 s). */
441
+ tick() {
442
+ this.offerInternal('registry.tick', {});
443
+ }
444
+ // ── settings ────────────────────────────────────────────────────────────────
445
+ /** Apply the operator's `watch` settings: the effective entries and the router are rebuilt. */
446
+ applySettings(watch) {
447
+ this.settingsNow = watch;
448
+ const { entries, problems } = applyOverrides(this.shipped, watch, this.checks);
449
+ this.effective = entries;
450
+ this.overrideProblems = problems;
451
+ this.router = new Router(entries);
452
+ // The first bus-backed entry switched on after boot: the pull arms now, not at the next restart.
453
+ if (this.armedFlag && this.dbPath !== null && this.pull === null && this.router.busTypes().length > 0) {
454
+ void this.armBusPull(this.dbPath, this.opts.log ?? (() => undefined));
455
+ }
456
+ }
457
+ /** The 400 text for a bad `watch` patch, or `null`. */
458
+ validateSettingsPatch(patch) {
459
+ return validateWatchPatch(patch, this.shipped, this.checks);
460
+ }
461
+ /** Merge a validated patch into the current `watch` settings, stamping who changed what and when. */
462
+ mergeSettings(current, patch, actorId, at) {
463
+ const next = { ...(current ?? {}) };
464
+ if (patch.llm !== undefined)
465
+ next.llm = patch.llm;
466
+ if (patch.entries !== undefined) {
467
+ const entries = { ...(current?.entries ?? {}) };
468
+ for (const [id, o] of Object.entries(patch.entries)) {
469
+ const prev = entries[id] ?? {};
470
+ const merged = { ...prev };
471
+ if (o.enabled !== undefined) {
472
+ merged.enabled = o.enabled;
473
+ merged.enabled_changed = { by: actorId, at };
474
+ }
475
+ if (o.threshold !== undefined) {
476
+ merged.threshold = { ...(prev.threshold ?? {}), ...o.threshold };
477
+ merged.threshold_changed = { by: actorId, at };
478
+ }
479
+ entries[id] = merged;
480
+ }
481
+ next.entries = entries;
482
+ }
483
+ return next;
484
+ }
485
+ // ── reads ───────────────────────────────────────────────────────────────────
486
+ health() {
487
+ const r = this.ring.stats();
488
+ const off = [];
489
+ const thresholds = [];
490
+ for (const e of this.effective) {
491
+ const o = this.settingsNow?.entries?.[e.id];
492
+ if (!e.enabled)
493
+ off.push({ id: e.id, by: o?.enabled_changed?.by ?? 'shipped', at: o?.enabled_changed?.at ?? 0 });
494
+ if (o?.threshold !== undefined && o.threshold_changed !== undefined) {
495
+ thresholds.push({ id: e.id, by: o.threshold_changed.by, at: o.threshold_changed.at });
496
+ }
497
+ }
498
+ return {
499
+ armed: this.armedFlag,
500
+ reason: this.armedFlag ? null : this.reasonText,
501
+ sources: { ...this.sourceState },
502
+ queue: { depth: r.depth, hwm: r.hwm, shed_by_priority: r.shed_by_priority },
503
+ tail_lag_ms: this.pull?.tailLagMs() ?? 0,
504
+ emit: { failed: this.emitter?.failed ?? 0 },
505
+ entries: {
506
+ loaded: this.effective.length,
507
+ refused: [...this.refused, ...this.overrideProblems],
508
+ off,
509
+ thresholds_changed: thresholds,
510
+ },
511
+ llm: { enabled: false, inflight: 0, timeouts: 0, skipped_no_seat: 0 },
512
+ replay: { core_gap: this.listGap || this.gapRuns.size > 0 },
513
+ };
514
+ }
515
+ /** `GET /watch/entries`: the effective entries, each threshold in plain words. */
516
+ entries() {
517
+ return this.effective.map((e) => ({
518
+ ...e,
519
+ threshold_text: this.checks.get(e.check)?.describe(e.threshold) ?? '',
520
+ }));
521
+ }
522
+ /** `GET /watch`: the feed, newest first; with `run`, the run's coverage too. */
523
+ feed(q) {
524
+ const limit = Math.min(Math.max(1, q.limit ?? FEED_LIMIT_DEFAULT), FEED_LIMIT_MAX);
525
+ const rows = [...(this.emitter?.feed.rows.values() ?? [])]
526
+ .filter(({ raised }) => (q.project === undefined || raised.project_id === q.project)
527
+ && (q.kind === undefined || raised.watch_kind === q.kind)
528
+ && (q.run === undefined || raised.run_id === q.run)
529
+ && (q.since === undefined || raised.at >= q.since))
530
+ .sort((a, b) => b.raised.at - a.raised.at)
531
+ .slice(0, limit);
532
+ const findings = rows.map((r) => r.raised);
533
+ const cleared = rows.flatMap((r) => (r.cleared !== null ? [r.cleared] : []));
534
+ return {
535
+ findings,
536
+ cleared,
537
+ ...(q.run !== undefined ? { coverage: this.coverage(q.run) } : {}),
538
+ };
539
+ }
540
+ /** G7: per run, which entries checked and which did not (and why). Run-less entries have none. */
541
+ coverage(runId) {
542
+ const out = [];
543
+ for (const e of this.effective) {
544
+ if (e.on.source === 'internal')
545
+ continue;
546
+ const check = this.checks.get(e.check);
547
+ if (check === undefined)
548
+ continue;
549
+ if (!this.armedFlag) {
550
+ out.push({ entry_id: e.id, state: 'not_checked', reason: `watching is off: ${this.reasonText ?? 'not armed'}` });
551
+ continue;
552
+ }
553
+ if (!e.enabled) {
554
+ out.push({ entry_id: e.id, state: 'not_checked', reason: 'turned off' });
555
+ continue;
556
+ }
557
+ const state = this.runStates.get(runId)?.get(e.id);
558
+ if (state === undefined && (this.listGap || this.gapRuns.has(runId))) {
559
+ out.push({ entry_id: e.id, state: 'not_checked', reason: 'the daemon was down' });
560
+ continue;
561
+ }
562
+ const c = check.coverage(state ?? { runId, seen: new Set(), bag: new Map() });
563
+ if (c !== null)
564
+ out.push({ entry_id: e.id, ...c });
565
+ }
566
+ return out;
567
+ }
568
+ /** "Seen, not a problem": publishes `cleared{reason:"dismissed"}` for the row. */
569
+ async dismiss(watchId, actorId) {
570
+ const emitter = this.emitter;
571
+ if (emitter === null)
572
+ return 'not_found';
573
+ const row = emitter.feed.get(watchId);
574
+ if (row === undefined)
575
+ return 'not_found';
576
+ if (row.cleared !== null)
577
+ return 'already_cleared';
578
+ if (!emitter.clearById(watchId, { reason: 'dismissed', dismissed_by: actorId }, 'dismissed'))
579
+ return 'already_cleared';
580
+ await emitter.flush();
581
+ return emitter.feed.get(watchId)?.cleared != null ? 'dismissed' : 'emit_failed';
582
+ }
583
+ /** The sources an entry can name (for the routes' validation and the docs). */
584
+ static SOURCES = ['core', 'bus', 'watchdog', 'internal'];
585
+ }
586
+ function message(err) {
587
+ return err instanceof Error ? err.message : String(err);
588
+ }
589
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/watch/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The push ring (DES-TRIGGER-REGISTRY-001 §4.6): where the daemon fan-in and the watchdog tee drop
3
+ * their key points. A push is O(1) and never blocks the producer.
4
+ *
5
+ * Capacity is shared by three priority classes. On overflow the oldest `p2` item goes first, then
6
+ * the oldest `p1`. A `p0` item is NEVER shed: when only `p0` items remain the ring grows past its
7
+ * capacity rather than lose one (`claim-vs-evidence` and `deliver-audit` are `p0`).
8
+ */
9
+ import type { WatchPriority } from 'wicked-crew-api-types';
10
+ export interface RingStats {
11
+ depth: number;
12
+ /** The deepest the ring has been since boot. */
13
+ hwm: number;
14
+ shed_by_priority: Record<WatchPriority, number>;
15
+ }
16
+ export declare class PushRing<T> {
17
+ readonly capacity: number;
18
+ private readonly classes;
19
+ private seq;
20
+ private hwm;
21
+ private readonly shed;
22
+ /** Called once per shed item (the registry raises one `registry-lagging` flag per episode). */
23
+ onShed: ((priority: WatchPriority) => void) | undefined;
24
+ constructor(capacity?: number);
25
+ get depth(): number;
26
+ /** O(1); never throws, never blocks. */
27
+ push(item: T, priority: WatchPriority): void;
28
+ /** The oldest item across classes, in arrival order. */
29
+ shift(): T | undefined;
30
+ stats(): RingStats;
31
+ }
32
+ //# sourceMappingURL=ring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring.d.ts","sourceRoot":"","sources":["../../src/watch/ring.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAiC3D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,qBAAa,QAAQ,CAAC,CAAC;IAYT,QAAQ,CAAC,QAAQ;IAX7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAItB;IACF,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0D;IAC/E,+FAA+F;IAC/F,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;gBAEnC,QAAQ,SAAM;IAEnC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,wCAAwC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAiB5C,wDAAwD;IACxD,KAAK,IAAI,CAAC,GAAG,SAAS;IAatB,KAAK,IAAI,SAAS;CAGnB"}