@nexus-cortex/core 4.45.0 → 4.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,6 +40,9 @@ export interface DeficiencyRecord {
40
40
  fixedRef?: string;
41
41
  verifiedRound?: string;
42
42
  notes?: string;
43
+ claimedBy?: string;
44
+ claimedAt?: string;
45
+ leaseExpiresAt?: string;
43
46
  createdAt: string;
44
47
  updatedAt: string;
45
48
  }
@@ -98,5 +101,29 @@ export declare class ResearchBacklog {
98
101
  close(id: string): DeficiencyRecord | undefined;
99
102
  wontFix(id: string, reason: string): DeficiencyRecord | undefined;
100
103
  reopenRegressed(id: string): DeficiencyRecord | undefined;
104
+ static readonly DEFAULT_TTL_MS: number;
105
+ private get lockPath();
106
+ /** Run `fn` while holding an exclusive advisory lock. Spins briefly for the
107
+ * lock; steals a lock older than staleMs (holder presumed dead). */
108
+ private withLock;
109
+ private isLeaseLive;
110
+ /** Claim ONE specific item for `owner`. Returns the claimed record, or
111
+ * undefined if it does not exist, is already resolved, or is held by another
112
+ * worker under a LIVE lease. Idempotent for the same owner (re-extends lease). */
113
+ claim(id: string, owner: string, ttlMs?: number): DeficiencyRecord | undefined;
114
+ /** Release-expired + claim the highest-priority UNCLAIMED workable item.
115
+ * The core work-swarm pull: each worker calls this to get its own task. */
116
+ claimNext(owner: string, ttlMs?: number): DeficiencyRecord | undefined;
117
+ /** Revert every in_progress item whose lease has EXPIRED back to triaged so
118
+ * another worker can pick it up. Returns the reclaimed records. Items marked
119
+ * in_progress WITHOUT a lease (legacy markInProgress) are left untouched. */
120
+ releaseExpired(): DeficiencyRecord[];
121
+ /** Explicitly release a claim you hold (work finished/abandoned) → back to triaged. */
122
+ release(id: string, owner?: string): DeficiencyRecord | undefined;
123
+ private writeClaim;
124
+ private releaseExpiredUnlocked;
125
+ /** append with priority recompute + updatedAt bump (like update(), but takes a
126
+ * full record and is safe to call under the lock without a re-read). */
127
+ private append2;
101
128
  }
102
129
  //# sourceMappingURL=ResearchBacklog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResearchBacklog.d.ts","sourceRoot":"","sources":["../../src/training/ResearchBacklog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResearchBacklog.d.ts","sourceRoot":"","sources":["../../src/training/ResearchBacklog.ts"],"names":[],"mappings":"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"}
@@ -145,5 +145,148 @@ export class ResearchBacklog {
145
145
  close(id) { return this.update(id, { status: 'closed' }); }
146
146
  wontFix(id, reason) { return this.update(id, { status: 'wont_fix', notes: reason }); }
147
147
  reopenRegressed(id) { return this.update(id, { status: 'regressed' }); }
148
+ // ───────────────────────────────────────────────────────────────────────────
149
+ // Work-swarm claim/release (lease with TTL)
150
+ //
151
+ // Lets N workers pull DIFFERENT items from ONE pool concurrently without
152
+ // double-claiming (the §5.4 "claim/release, 15-min TTL" mechanic). An advisory
153
+ // lock file makes the read-check-append sequence atomic on a single machine
154
+ // (the local work-swarm case: N worker processes, one repo). Distributed
155
+ // workers coordinate via the STDB `deficiency` mirror instead, not this JSONL.
156
+ // ───────────────────────────────────────────────────────────────────────────
157
+ static DEFAULT_TTL_MS = 15 * 60 * 1000; // 15 minutes
158
+ get lockPath() { return this.storePath + '.lock'; }
159
+ /** Run `fn` while holding an exclusive advisory lock. Spins briefly for the
160
+ * lock; steals a lock older than staleMs (holder presumed dead). */
161
+ withLock(fn, opts = {}) {
162
+ const timeoutMs = opts.timeoutMs ?? 4000;
163
+ const staleMs = opts.staleMs ?? 30_000;
164
+ fs.mkdirSync(path.dirname(this.storePath), { recursive: true });
165
+ const deadline = Date.now() + timeoutMs;
166
+ let fd;
167
+ for (;;) {
168
+ try {
169
+ fd = fs.openSync(this.lockPath, 'wx'); // exclusive create → fails if held
170
+ break;
171
+ }
172
+ catch {
173
+ // Steal a stale lock (prior holder crashed without releasing).
174
+ try {
175
+ const age = Date.now() - fs.statSync(this.lockPath).mtimeMs;
176
+ if (age > staleMs) {
177
+ try {
178
+ fs.unlinkSync(this.lockPath);
179
+ }
180
+ catch { /* raced */ }
181
+ continue;
182
+ }
183
+ }
184
+ catch { /* lock vanished — retry acquire */ }
185
+ if (Date.now() > deadline) {
186
+ // Give up on the lock rather than hang; proceed unlocked (best-effort).
187
+ break;
188
+ }
189
+ // brief busy-wait (sync context; keep it short)
190
+ const until = Date.now() + 25;
191
+ while (Date.now() < until) { /* spin */ }
192
+ }
193
+ }
194
+ try {
195
+ return fn();
196
+ }
197
+ finally {
198
+ if (fd !== undefined) {
199
+ try {
200
+ fs.closeSync(fd);
201
+ }
202
+ catch { /* ignore */ }
203
+ try {
204
+ fs.unlinkSync(this.lockPath);
205
+ }
206
+ catch { /* ignore */ }
207
+ }
208
+ }
209
+ }
210
+ isLeaseLive(r, nowMs) {
211
+ return !!r.leaseExpiresAt && Date.parse(r.leaseExpiresAt) > nowMs;
212
+ }
213
+ /** Claim ONE specific item for `owner`. Returns the claimed record, or
214
+ * undefined if it does not exist, is already resolved, or is held by another
215
+ * worker under a LIVE lease. Idempotent for the same owner (re-extends lease). */
216
+ claim(id, owner, ttlMs = ResearchBacklog.DEFAULT_TTL_MS) {
217
+ return this.withLock(() => {
218
+ const cur = this.get(id);
219
+ if (!cur)
220
+ return undefined;
221
+ // Only open/triaged (or already-mine in_progress) are claimable.
222
+ const claimableStatus = cur.status === 'open' || cur.status === 'triaged' || cur.status === 'in_progress';
223
+ if (!claimableStatus)
224
+ return undefined;
225
+ const now = Date.now();
226
+ if (cur.claimedBy && cur.claimedBy !== owner && this.isLeaseLive(cur, now))
227
+ return undefined; // held by another
228
+ return this.writeClaim(cur, owner, now, ttlMs);
229
+ });
230
+ }
231
+ /** Release-expired + claim the highest-priority UNCLAIMED workable item.
232
+ * The core work-swarm pull: each worker calls this to get its own task. */
233
+ claimNext(owner, ttlMs = ResearchBacklog.DEFAULT_TTL_MS) {
234
+ return this.withLock(() => {
235
+ this.releaseExpiredUnlocked();
236
+ const now = Date.now();
237
+ const candidate = this.list({ status: ['open', 'triaged'], sortByPriority: true })
238
+ .find((r) => !r.claimedBy || r.claimedBy === owner || !this.isLeaseLive(r, now));
239
+ if (!candidate)
240
+ return undefined;
241
+ return this.writeClaim(candidate, owner, now, ttlMs);
242
+ });
243
+ }
244
+ /** Revert every in_progress item whose lease has EXPIRED back to triaged so
245
+ * another worker can pick it up. Returns the reclaimed records. Items marked
246
+ * in_progress WITHOUT a lease (legacy markInProgress) are left untouched. */
247
+ releaseExpired() {
248
+ return this.withLock(() => this.releaseExpiredUnlocked());
249
+ }
250
+ /** Explicitly release a claim you hold (work finished/abandoned) → back to triaged. */
251
+ release(id, owner) {
252
+ return this.withLock(() => {
253
+ const cur = this.get(id);
254
+ if (!cur || !cur.claimedBy)
255
+ return cur;
256
+ if (owner && cur.claimedBy !== owner)
257
+ return undefined; // not yours
258
+ return this.append2({ ...cur, status: 'triaged', claimedBy: undefined, claimedAt: undefined, leaseExpiresAt: undefined });
259
+ });
260
+ }
261
+ // -- claim internals (assume lock held) -------------------------------------
262
+ writeClaim(cur, owner, nowMs, ttlMs) {
263
+ const nowIso = new Date(nowMs).toISOString();
264
+ return this.append2({
265
+ ...cur,
266
+ status: 'in_progress',
267
+ claimedBy: owner,
268
+ claimedAt: nowIso,
269
+ leaseExpiresAt: new Date(nowMs + ttlMs).toISOString(),
270
+ experimentTag: cur.experimentTag ?? owner,
271
+ });
272
+ }
273
+ releaseExpiredUnlocked() {
274
+ const now = Date.now();
275
+ const released = [];
276
+ for (const r of this.list({ status: ['in_progress'], sortByPriority: false })) {
277
+ if (r.leaseExpiresAt && Date.parse(r.leaseExpiresAt) <= now) {
278
+ released.push(this.append2({ ...r, status: 'triaged', claimedBy: undefined, claimedAt: undefined, leaseExpiresAt: undefined }));
279
+ }
280
+ }
281
+ return released;
282
+ }
283
+ /** append with priority recompute + updatedAt bump (like update(), but takes a
284
+ * full record and is safe to call under the lock without a re-read). */
285
+ append2(rec) {
286
+ const merged = { ...rec, updatedAt: new Date().toISOString() };
287
+ merged.priorityScore = computePriority(merged.severity, merged.impact, merged.effort, merged.confidence);
288
+ this.append(merged);
289
+ return merged;
290
+ }
148
291
  }
149
292
  //# sourceMappingURL=ResearchBacklog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResearchBacklog.js","sourceRoot":"","sources":["../../src/training/ResearchBacklog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResearchBacklog.js","sourceRoot":"","sources":["../../src/training/ResearchBacklog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AA6CjC,MAAM,eAAe,GAA6B,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,UAAkB;IACpG,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACzD,CAAC;AAiBD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAE3E,MAAM,OAAO,eAAe;IACT,SAAS,CAAS;IAEnC,YAAY,WAAmB;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC/D,CAAC;IAED;mCAC+B;IAC/B,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpH,CAAC;IAEO,MAAM,CAAC,GAAqB;QAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,OAAqF,EAAE;QAC1F,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;QACzF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;4CACwC;IACxC,GAAG,CAAC,CAAgB;QAClB,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC;QAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,QAAQ,EAAE,UAAU,IAAI,GAAG,CAAC;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;QAC7F,MAAM,GAAG,GAAqB;YAC5B,EAAE;YACF,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE,QAAQ,IAAI,OAAO;YACrD,wEAAwE;YACxE,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACjG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;YACpC,aAAa,EAAE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;YACpE,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,QAAQ,EAAE,eAAe;YAC/D,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,QAAQ,EAAE,aAAa;YACzD,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,QAAQ,EAAE,cAAc;YAC5D,wBAAwB,EAAE,CAAC,CAAC,wBAAwB,IAAI,QAAQ,EAAE,wBAAwB;YAC1F,aAAa,EAAE,QAAQ,EAAE,aAAa;YACtC,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YAC5B,aAAa,EAAE,QAAQ,EAAE,aAAa;YACtC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK;YACjC,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;YACrC,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,iFAAiF;IACjF,MAAM,CAAC,EAAU,EAAE,KAAgC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,MAAM,GAAqB,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/F,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,CAAiF;QAClG,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,uFAAuF;IACvF,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,cAAc,CAAC,EAAU,EAAE,aAAqB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,kFAAkF;IAClF,SAAS,CAAC,EAAU,EAAE,QAAgB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,mGAAmG;IACnG,YAAY,CAAC,EAAU,EAAE,aAAqB;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,EAAU,IAAkC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,EAAU,EAAE,MAAc,IAAkC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACpI,eAAe,CAAC,EAAU,IAAkC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9G,8EAA8E;IAC9E,4CAA4C;IAC5C,EAAE;IACF,yEAAyE;IACzE,+EAA+E;IAC/E,4EAA4E;IAC5E,yEAAyE;IACzE,+EAA+E;IAC/E,8EAA8E;IAE9E,MAAM,CAAU,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAE9D,IAAY,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAEnE;yEACqE;IAC7D,QAAQ,CAAI,EAAW,EAAE,OAAiD,EAAE;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,EAAsB,CAAC;QAC3B,SAAS,CAAC;YACR,IAAI,CAAC;gBACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;gBAC1E,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;gBAC/D,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;oBAC5D,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;wBAAC,IAAI,CAAC;4BAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;gBAC9F,CAAC;gBAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;gBAC/C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;oBAC1B,wEAAwE;oBACxE,MAAM;gBACR,CAAC;gBACD,gDAAgD;gBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAAC,IAAI,CAAC;oBAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAAC,CAAC;QACzI,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,CAAmB,EAAE,KAAa;QACpD,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;IACpE,CAAC;IAED;;uFAEmF;IACnF,KAAK,CAAC,EAAU,EAAE,KAAa,EAAE,QAAgB,eAAe,CAAC,cAAc;QAC7E,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG;gBAAE,OAAO,SAAS,CAAC;YAC3B,iEAAiE;YACjE,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC;YAC1G,IAAI,CAAC,eAAe;gBAAE,OAAO,SAAS,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC,CAAC,kBAAkB;YAChH,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;gFAC4E;IAC5E,SAAS,CAAC,KAAa,EAAE,QAAgB,eAAe,CAAC,cAAc;QACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;iBAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACnF,IAAI,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YACjC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;kFAE8E;IAC9E,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,uFAAuF;IACvF,OAAO,CAAC,EAAU,EAAE,KAAc;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;gBAAE,OAAO,GAAG,CAAC;YACvC,IAAI,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK;gBAAE,OAAO,SAAS,CAAC,CAAC,YAAY;YACpE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAEtE,UAAU,CAAC,GAAqB,EAAE,KAAa,EAAE,KAAa,EAAE,KAAa;QACnF,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,GAAG;YACN,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE;YACrD,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,KAAK;SAC1C,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAClI,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;6EACyE;IACjE,OAAO,CAAC,GAAqB;QACnC,MAAM,MAAM,GAAqB,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACjF,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * How the ACTUAL next message relates to the displayed prediction (the TUI
3
+ * ghost-text prefill). Spec §5.1 tri-state — splits the exam stream from
4
+ * suggestion telemetry:
5
+ * - 'none' — the prediction was never rendered to the user (late helper,
6
+ * display-holdout, or a non-TUI surface). Cleanest exam grade.
7
+ * - 'shown' — the ghost was rendered but the user typed independently.
8
+ * Exam-eligible; the shown-vs-none score gap measures semantic
9
+ * anchoring at the population level.
10
+ * - 'inserted' — the user Tab/→-accepted the ghost (edited or not). Excluded
11
+ * from the graduation exam; match_score re-reads as suggestion
12
+ * retention/usefulness (1.0 = accepted verbatim).
13
+ */
14
+ export type PrefillProvenance = 'none' | 'shown' | 'inserted';
15
+ export interface TurnPredictionRecord {
16
+ /** deterministic id: <sessionId>:<turnNumber> */
17
+ record_id: string;
18
+ session_id: string;
19
+ turn_number: number;
20
+ /** model that produced the prediction (helper today; the apprentice later). */
21
+ predictor_model: string;
22
+ /** the one-line turn summary generated alongside the prediction. */
23
+ summary: string | null;
24
+ predicted_next: string;
25
+ /** the user's ACTUAL next message (flattened to text). */
26
+ actual_next: string;
27
+ /** deterministic token-F1 in [0,1] — see predictionMatchScore. */
28
+ match_score: number;
29
+ predicted_at_ms: number;
30
+ scored_at_ms: number;
31
+ /** §5.1 provenance of actual_next relative to the displayed prediction. */
32
+ prefill_provenance: PrefillProvenance;
33
+ }
34
+ /** Pending prediction held between turns (in-memory on the orchestrator). */
35
+ export interface PendingTurnPrediction {
36
+ sessionId: string;
37
+ turnNumber: number;
38
+ predictorModel: string;
39
+ summary: string | null;
40
+ prediction: string;
41
+ predictedAtMs: number;
42
+ }
43
+ /**
44
+ * Deterministic prediction↔actual similarity: token-level F1 (harmonic mean of
45
+ * precision and recall over unique tokens). 0 = no overlap, 1 = identical token
46
+ * sets. Chosen over embeddings/LLM-judge for reproducibility and zero cost — the
47
+ * spec upgrades the metric only if this under-separates.
48
+ */
49
+ export declare function predictionMatchScore(predicted: string, actual: string): number;
50
+ /** Flatten a user message (string or content-block array) to comparable text. */
51
+ export declare function flattenUserContent(content: string | unknown[]): string;
52
+ /**
53
+ * Score a pending prediction against the actual next user message and append
54
+ * the completed record. Truncates stored texts (the raw payload belongs in R2,
55
+ * not the hot store). Never throws — recording must not affect the turn.
56
+ */
57
+ export declare function scoreAndRecordTurnPrediction(projectRoot: string, pending: PendingTurnPrediction, actualNext: string, nowMs: number, prefillProvenance?: PrefillProvenance): TurnPredictionRecord | null;
58
+ //# sourceMappingURL=TurnPredictionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnPredictionStore.d.ts","sourceRoot":"","sources":["../../src/training/TurnPredictionStore.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,kBAAkB,EAAE,iBAAiB,CAAC;CACvC;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AASD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU9E;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,MAAM,CAOtE;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,qBAAqB,EAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,iBAAiB,GAAE,iBAA0B,GAC5C,oBAAoB,GAAG,IAAI,CAoB7B"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Turn-prediction records — the graduation signal (Decision Capture Layer §5).
3
+ *
4
+ * TURN_SUMMARY_PREDICTION has the helper model predict the user's next message
5
+ * post-turn; historically that prediction was attached to the response and then
6
+ * THROWN AWAY. This store completes the loop: when the next user message arrives,
7
+ * the pending prediction is scored against it (cheap deterministic token-F1) and
8
+ * the `(predicted, actual, match_score)` pair is appended to
9
+ * `.cortex/training/turn-predictions.jsonl`.
10
+ *
11
+ * Why it matters: the apprentice-model graduation gate is "predict the next
12
+ * turn; graduate when accuracy clears the stage bar." These records are that
13
+ * metric's raw material — today's predictor is the helper model (the baseline);
14
+ * the apprentice fills the same slot later and is scored the same way.
15
+ *
16
+ * OSS boundary: local JSONL only (no STDB). The nexus-side capture layer mirrors
17
+ * this stream up (`ingest_turn_prediction`), same as the other `.cortex` stores.
18
+ */
19
+ import { join } from 'path';
20
+ import { appendJsonlRotating } from '../orchestrator/cortexTrainingRecord.js';
21
+ const STORE_RELATIVE_PATH = join('.cortex', 'training', 'turn-predictions.jsonl');
22
+ /** Lowercased alphanumeric tokens — the comparison alphabet for the match score. */
23
+ function tokens(s) {
24
+ return (s.toLowerCase().match(/[a-z0-9]+/g) ?? []).filter((t) => t.length > 0);
25
+ }
26
+ /**
27
+ * Deterministic prediction↔actual similarity: token-level F1 (harmonic mean of
28
+ * precision and recall over unique tokens). 0 = no overlap, 1 = identical token
29
+ * sets. Chosen over embeddings/LLM-judge for reproducibility and zero cost — the
30
+ * spec upgrades the metric only if this under-separates.
31
+ */
32
+ export function predictionMatchScore(predicted, actual) {
33
+ const p = new Set(tokens(predicted));
34
+ const a = new Set(tokens(actual));
35
+ if (p.size === 0 || a.size === 0)
36
+ return 0;
37
+ let overlap = 0;
38
+ for (const t of p)
39
+ if (a.has(t))
40
+ overlap++;
41
+ if (overlap === 0)
42
+ return 0;
43
+ const precision = overlap / p.size;
44
+ const recall = overlap / a.size;
45
+ return Math.round(((2 * precision * recall) / (precision + recall)) * 1000) / 1000;
46
+ }
47
+ /** Flatten a user message (string or content-block array) to comparable text. */
48
+ export function flattenUserContent(content) {
49
+ if (typeof content === 'string')
50
+ return content;
51
+ if (!Array.isArray(content))
52
+ return String(content ?? '');
53
+ return content
54
+ .map((b) => (typeof b === 'string' ? b : typeof b?.text === 'string' ? b.text : ''))
55
+ .filter(Boolean)
56
+ .join('\n');
57
+ }
58
+ /**
59
+ * Score a pending prediction against the actual next user message and append
60
+ * the completed record. Truncates stored texts (the raw payload belongs in R2,
61
+ * not the hot store). Never throws — recording must not affect the turn.
62
+ */
63
+ export function scoreAndRecordTurnPrediction(projectRoot, pending, actualNext, nowMs, prefillProvenance = 'none') {
64
+ try {
65
+ const record = {
66
+ record_id: `${pending.sessionId}:${pending.turnNumber}`,
67
+ session_id: pending.sessionId,
68
+ turn_number: pending.turnNumber,
69
+ predictor_model: pending.predictorModel,
70
+ summary: pending.summary ? pending.summary.slice(0, 300) : null,
71
+ predicted_next: pending.prediction.slice(0, 500),
72
+ actual_next: actualNext.slice(0, 500),
73
+ match_score: predictionMatchScore(pending.prediction, actualNext),
74
+ predicted_at_ms: pending.predictedAtMs,
75
+ scored_at_ms: nowMs,
76
+ prefill_provenance: prefillProvenance,
77
+ };
78
+ appendJsonlRotating(join(projectRoot, STORE_RELATIVE_PATH), JSON.stringify(record));
79
+ return record;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ //# sourceMappingURL=TurnPredictionStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnPredictionStore.js","sourceRoot":"","sources":["../../src/training/TurnPredictionStore.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus-cortex/core",
3
- "version": "4.45.0",
3
+ "version": "4.46.0",
4
4
  "description": "Core orchestration library implementing Claude CLI architecture patterns",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -46,8 +46,8 @@
46
46
  "@google/genai": "^1.27.0",
47
47
  "@google/generative-ai": "^0.2.1",
48
48
  "@modelcontextprotocol/sdk": "^1.20.2",
49
- "@nexus-cortex/executors": "4.45.0",
50
- "@nexus-cortex/types": "4.45.0",
49
+ "@nexus-cortex/executors": "4.46.0",
50
+ "@nexus-cortex/types": "4.46.0",
51
51
  "@types/uuid": "^10.0.0",
52
52
  "chokidar": "^3.6.0",
53
53
  "openai": "^4.104.0",