instar 1.2.61 → 1.2.63

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 (42) hide show
  1. package/README.md +10 -0
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +115 -24
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  6. package/dist/config/ConfigDefaults.js +13 -0
  7. package/dist/config/ConfigDefaults.js.map +1 -1
  8. package/dist/core/SessionManager.d.ts +18 -0
  9. package/dist/core/SessionManager.d.ts.map +1 -1
  10. package/dist/core/SessionManager.js +34 -0
  11. package/dist/core/SessionManager.js.map +1 -1
  12. package/dist/core/TopicIntent.d.ts +62 -1
  13. package/dist/core/TopicIntent.d.ts.map +1 -1
  14. package/dist/core/TopicIntent.js +131 -2
  15. package/dist/core/TopicIntent.js.map +1 -1
  16. package/dist/core/TopicIntentCapture.d.ts +124 -0
  17. package/dist/core/TopicIntentCapture.d.ts.map +1 -0
  18. package/dist/core/TopicIntentCapture.js +232 -0
  19. package/dist/core/TopicIntentCapture.js.map +1 -0
  20. package/dist/core/TopicIntentExtractor.d.ts +32 -0
  21. package/dist/core/TopicIntentExtractor.d.ts.map +1 -1
  22. package/dist/core/TopicIntentExtractor.js +52 -3
  23. package/dist/core/TopicIntentExtractor.js.map +1 -1
  24. package/dist/core/types.d.ts +10 -0
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/core/types.js.map +1 -1
  27. package/dist/monitoring/sentinelWiring.d.ts +28 -0
  28. package/dist/monitoring/sentinelWiring.d.ts.map +1 -1
  29. package/dist/monitoring/sentinelWiring.js +48 -0
  30. package/dist/monitoring/sentinelWiring.js.map +1 -1
  31. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  32. package/dist/server/CapabilityIndex.js +1 -0
  33. package/dist/server/CapabilityIndex.js.map +1 -1
  34. package/dist/server/topicIntentRoutes.d.ts.map +1 -1
  35. package/dist/server/topicIntentRoutes.js +61 -1
  36. package/dist/server/topicIntentRoutes.js.map +1 -1
  37. package/package.json +1 -1
  38. package/src/data/builtin-manifest.json +3 -3
  39. package/upgrades/1.2.62.md +75 -0
  40. package/upgrades/1.2.63.md +84 -0
  41. package/upgrades/side-effects/rate-limit-recovery-reachability.md +116 -0
  42. package/upgrades/side-effects/topic-intent-capture-loop.md +100 -0
@@ -17,6 +17,7 @@
17
17
  import fs from 'node:fs';
18
18
  import path from 'node:path';
19
19
  import { randomUUID } from 'node:crypto';
20
+ import { SafeFsExecutor } from './SafeFsExecutor.js';
20
21
  // ── Constants from spec ──────────────────────────────────────────────────
21
22
  const DECAY_HALF_LIFE_DAYS = 180;
22
23
  const DECAY_GRACE_DAYS = 30;
@@ -230,6 +231,10 @@ export class TopicIntentStore {
230
231
  parsed.telemetry = emptyTelemetry();
231
232
  if (parsed.schemaVersion === undefined)
232
233
  parsed.schemaVersion = 1;
234
+ if (parsed.turn === undefined)
235
+ parsed.turn = 0;
236
+ if (!parsed.telemetry.capture)
237
+ parsed.telemetry.capture = defaultCaptureCounters();
233
238
  return parsed;
234
239
  }
235
240
  }
@@ -238,11 +243,18 @@ export class TopicIntentStore {
238
243
  }
239
244
  return emptyFile(topicId);
240
245
  }
241
- /** Persist the topic's intent file. */
246
+ /**
247
+ * Persist the topic's intent file ATOMICALLY (write to a unique temp file +
248
+ * rename — rename is atomic on POSIX, so a concurrent reader never sees a
249
+ * torn/half-written file). This is the corruption-safety half of the
250
+ * concurrent-write guard; appendEvidence adds the lost-update guard (CAS).
251
+ */
242
252
  save(file) {
243
253
  const fp = this.filePath(file.topicId);
244
254
  try {
245
- fs.writeFileSync(fp, JSON.stringify(file, null, 2));
255
+ const tmp = `${fp}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
256
+ fs.writeFileSync(tmp, JSON.stringify(file, null, 2));
257
+ fs.renameSync(tmp, fp);
246
258
  }
247
259
  catch (err) {
248
260
  console.error(`[TopicIntentStore] Failed to save ${fp}: ${err}`);
@@ -254,7 +266,59 @@ export class TopicIntentStore {
254
266
  * Updates telemetry counters.
255
267
  */
256
268
  appendEvidence(topicId, refId, ev, refInit) {
269
+ // Hold a cross-process lock around load→mutate→atomic-save so two sessions
270
+ // capturing the same topic can't lose each other's events (the lost-update
271
+ // race). mkdir is atomic across processes; save() is atomic against torn
272
+ // reads. Together they make the append concurrency-safe.
273
+ return this.withTopicLock(topicId, () => this.applyEvidence(topicId, refId, ev, refInit));
274
+ }
275
+ /**
276
+ * Acquire a per-topic lock (atomic mkdir), run fn, release. Bounded spin with
277
+ * stale-lock steal so a crashed holder can't wedge the file forever. Capture
278
+ * runs off the delivery path (queued), so brief contention spin is acceptable.
279
+ */
280
+ withTopicLock(topicId, fn) {
281
+ const lockPath = this.filePath(topicId) + '.lock';
282
+ const deadline = Date.now() + 2000;
283
+ let held = false;
284
+ while (Date.now() < deadline) {
285
+ try {
286
+ fs.mkdirSync(lockPath);
287
+ held = true;
288
+ break;
289
+ }
290
+ catch {
291
+ try {
292
+ if (Date.now() - fs.statSync(lockPath).mtimeMs > 5000) {
293
+ SafeFsExecutor.safeRmdirSync(lockPath, { operation: 'TopicIntentStore.withTopicLock:steal-stale' });
294
+ continue;
295
+ }
296
+ }
297
+ catch { /* lock vanished — retry acquire */ }
298
+ const until = Date.now() + 15;
299
+ while (Date.now() < until) { /* brief spin */ }
300
+ }
301
+ }
302
+ try {
303
+ return fn();
304
+ }
305
+ finally {
306
+ if (held) {
307
+ try {
308
+ SafeFsExecutor.safeRmdirSync(lockPath, { operation: 'TopicIntentStore.withTopicLock:release' });
309
+ }
310
+ catch { /* best-effort release */ }
311
+ }
312
+ }
313
+ }
314
+ /** Single load→mutate→atomic-save pass (runs under withTopicLock). */
315
+ applyEvidence(topicId, refId, ev, refInit) {
257
316
  const file = this.load(topicId);
317
+ // Idempotency: never append the same event twice (defends retries / replays).
318
+ for (const existing of Object.values(file.refs)) {
319
+ if (existing.evidence.some(e => e.eventId === ev.eventId))
320
+ return file;
321
+ }
258
322
  let ref = file.refs[refId];
259
323
  if (!ref) {
260
324
  ref = {
@@ -290,6 +354,50 @@ export class TopicIntentStore {
290
354
  this.save(file);
291
355
  return file;
292
356
  }
357
+ /** The (single, v1) arc id for a topic. */
358
+ arcIdFor(topicId) {
359
+ return `arc-${topicId}`;
360
+ }
361
+ /** Atomically increment and return the per-topic user-turn counter. */
362
+ bumpTurn(topicId) {
363
+ return this.withTopicLock(topicId, () => {
364
+ const file = this.load(topicId);
365
+ file.turn = (file.turn ?? 0) + 1;
366
+ this.save(file);
367
+ return file.turn;
368
+ });
369
+ }
370
+ /**
371
+ * Atomically increment one or more capture-funnel counters (spec §10).
372
+ * Runs under the per-topic lock so concurrent captures / briefing fetches /
373
+ * arccheck calls don't clobber each other's counter writes. Best-effort —
374
+ * metering must never throw into the path that calls it, so all failures are
375
+ * swallowed (the counter is a diagnostic, not correctness-critical).
376
+ *
377
+ * `at` (when provided) sets `last_capture_at`.
378
+ */
379
+ bumpCaptureCounters(topicId, deltas, at) {
380
+ try {
381
+ this.withTopicLock(topicId, () => {
382
+ const file = this.load(topicId);
383
+ if (!file.telemetry.capture)
384
+ file.telemetry.capture = defaultCaptureCounters();
385
+ const c = file.telemetry.capture;
386
+ for (const [k, v] of Object.entries(deltas)) {
387
+ if (typeof v === 'number' && Number.isFinite(v)) {
388
+ const key = k;
389
+ c[key] = (c[key] ?? 0) + v;
390
+ }
391
+ }
392
+ if (at)
393
+ c.last_capture_at = at;
394
+ this.save(file);
395
+ });
396
+ }
397
+ catch (err) {
398
+ console.error(`[TopicIntentStore] bumpCaptureCounters(${topicId}) failed: ${err}`);
399
+ }
400
+ }
293
401
  /** Get the live projection for a refId (recomputed from evidence). */
294
402
  getProjection(topicId, refId, nowMs) {
295
403
  const file = this.load(topicId);
@@ -328,11 +436,32 @@ function emptyTelemetry() {
328
436
  pending_confirm_abandoned_total: 0,
329
437
  pending_confirm_expired_total: 0,
330
438
  pending_confirm_answered_total: {},
439
+ capture: defaultCaptureCounters(),
440
+ };
441
+ }
442
+ export function defaultCaptureCounters() {
443
+ return {
444
+ turns_seen: 0,
445
+ prefilter_skipped: 0,
446
+ extractions_attempted: 0,
447
+ extractions_emitted: 0,
448
+ refs_created: 0,
449
+ degraded_no_intelligence: 0,
450
+ degraded_cap_or_error: 0,
451
+ degraded_shed: 0,
452
+ rate_limited: 0,
453
+ briefing_served: 0,
454
+ briefing_refs_settled: 0,
455
+ briefing_refs_tentative: 0,
456
+ arccheck_fired: 0,
457
+ arccheck_signalled: 0,
458
+ last_capture_at: null,
331
459
  };
332
460
  }
333
461
  function emptyFile(topicId) {
334
462
  return {
335
463
  topicId,
464
+ turn: 0,
336
465
  refs: {},
337
466
  pending: { outstanding: null, queue: [] },
338
467
  telemetry: emptyTelemetry(),
@@ -1 +1 @@
1
- {"version":3,"file":"TopicIntent.js","sourceRoot":"","sources":["../../src/core/TopicIntent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopicIntent.js","sourceRoot":"","sources":["../../src/core/TopicIntent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * TopicIntentCapture — the adapter-agnostic capture step that fills the
3
+ * topic-intent store from live conversation (rung 0 of the Continuous Working
4
+ * Awareness north star). Spec: docs/specs/topic-intent-capture-loop.md.
5
+ *
6
+ * This is the "clerk" that was missing: the store, briefing, and ArcCheck all
7
+ * shipped, but nothing ever invoked `ingest()` on a real turn, so the cabinet
8
+ * stayed empty (the textbook "shipped but asleep" bug). This module is the
9
+ * single seam that watches each turn and files what matters.
10
+ *
11
+ * Design invariants (carried from the human-as-detector build + spec):
12
+ * - Best-effort, NEVER throws into the message/delivery path (acceptance #4).
13
+ * - Fire-and-forget: extraction runs off the delivery path; capture latency
14
+ * can never slow a message reaching the user.
15
+ * - Degrade-safe: no provider, cap breach, or provider error → a counter tick
16
+ * and a silent no-op, never an error.
17
+ * - Framework-agnostic: Telegram is merely the first wiring; the helper takes
18
+ * a generic entry, not a Telegram type.
19
+ *
20
+ * The pre-filter (`isSubstantiveTurn`) is a STATE-DETECTOR per
21
+ * `[[feedback_state_detection_robustness]]`: deterministic + fail-open, shipped
22
+ * with a canary (`runPreFilterCanary`) and registered in
23
+ * docs/specs/06-state-detector-registry.md. Its silent failure mode is
24
+ * sentinel-format drift → over-skip → real captures dropped → the original
25
+ * "no record for the topic" bug recurs.
26
+ */
27
+ import type { IntelligenceProvider } from './types.js';
28
+ import type { TopicIntentStore } from './TopicIntent.js';
29
+ import type { TopicIntentExtractor } from './TopicIntentExtractor.js';
30
+ /**
31
+ * Decide whether a turn is worth sending to the extractor. Deterministic and
32
+ * FAIL-OPEN: returns true (capture) unless the turn is high-confidence trivial.
33
+ *
34
+ * Skips: empty / whitespace-only; agent sentinel/heartbeat/proxy lines; short
35
+ * bare acknowledgements. Everything else passes to the LLM, which makes the
36
+ * real significance call with broader context.
37
+ */
38
+ export declare function isSubstantiveTurn(text: string | undefined | null, fromUser: boolean): boolean;
39
+ export interface CanarySample {
40
+ text: string;
41
+ fromUser: boolean;
42
+ /** Expected pre-filter verdict: true = should pass to LLM, false = should skip. */
43
+ expectSubstantive: boolean;
44
+ label: string;
45
+ }
46
+ /**
47
+ * Known-good samples the pre-filter MUST classify correctly. If a code change
48
+ * (or sentinel-format drift) breaks one of these, the canary fails loudly so we
49
+ * notice BEFORE real captures are silently dropped.
50
+ */
51
+ export declare const PRE_FILTER_CANARY_SAMPLES: CanarySample[];
52
+ export interface CanaryResult {
53
+ ok: boolean;
54
+ failures: Array<{
55
+ label: string;
56
+ expected: boolean;
57
+ got: boolean;
58
+ }>;
59
+ }
60
+ /** Run the pre-filter canary over the known samples. */
61
+ export declare function runPreFilterCanary(): CanaryResult;
62
+ export type EnqueueFn = (lane: 'interactive' | 'background', fn: (signal: AbortSignal) => Promise<string>, costCents?: number) => Promise<string>;
63
+ /** Fast-tier per-turn cost estimate (cents) for the daily-cap accounting. */
64
+ export declare const TOPIC_INTENT_CAPTURE_COST_CENTS = 0.2;
65
+ /**
66
+ * Wrap an IntelligenceProvider so every call is admitted through the shared
67
+ * LlmQueue (background lane: capture is never user-interactive, and must yield
68
+ * to interactive work). The TRANSPORT stays the injected `intelligence` — which
69
+ * production resolves to the subscription / REPL-pool provider — so this never
70
+ * touches the raw Messages API (`[[feedback_anthropic_path_constraints]]`,
71
+ * acceptance #6). On daily-cap breach the queue THROWS; createLlmExtractFn
72
+ * catches it and degrades to a counter tick.
73
+ */
74
+ export declare function createQueuedIntelligence(intelligence: IntelligenceProvider, enqueue: EnqueueFn, costCents?: number): IntelligenceProvider;
75
+ export interface CaptureTurnEntry {
76
+ /** Server-assigned, non-user-forgeable message id (keys per-message dedup). */
77
+ messageId: string | number;
78
+ topicId?: number;
79
+ text?: string;
80
+ fromUser: boolean;
81
+ /** ISO8601 string or epoch ms. */
82
+ timestamp?: string | number;
83
+ }
84
+ /** Minimal rolling-summary surface (satisfied by TopicMemory). */
85
+ export interface RollingSummaryProvider {
86
+ getTopicSummary(topicId: number): {
87
+ summary: string;
88
+ } | null;
89
+ }
90
+ export interface CaptureLoopDeps {
91
+ extractor: TopicIntentExtractor;
92
+ store: TopicIntentStore;
93
+ /** Source of the rolling summary fed to the extractor (broader context). */
94
+ topicMemory?: RollingSummaryProvider | null;
95
+ /** Skip capture under quota pressure (QuotaTracker load-shedding). */
96
+ shouldShed?: () => boolean;
97
+ /** Per-topic extraction rate ceiling (defense beyond the pre-filter). */
98
+ rateCeiling?: {
99
+ maxPerWindow: number;
100
+ windowMs: number;
101
+ };
102
+ now?: () => number;
103
+ }
104
+ export type CaptureStatus = 'captured' | 'skipped-prefilter' | 'skipped-shed' | 'skipped-rate' | 'no-topic' | 'degraded';
105
+ export interface CaptureOutcome {
106
+ status: CaptureStatus;
107
+ emitted?: number;
108
+ createdRefs?: number;
109
+ }
110
+ /**
111
+ * Capture one conversation turn. Pre-filter → (shed/rate gates) → build broader
112
+ * context → extractor.ingest. Never throws; on any unexpected failure it ticks
113
+ * `degraded_cap_or_error` and returns { status: 'degraded' }.
114
+ *
115
+ * `rateState` (topicId → recent attempt timestamps) is owned by the caller
116
+ * (see createCaptureLoop) so the rate ceiling persists across turns.
117
+ */
118
+ export declare function captureTurn(deps: CaptureLoopDeps, entry: CaptureTurnEntry, rateState?: Map<number, number[]>): Promise<CaptureOutcome>;
119
+ /**
120
+ * Build a stateful capture closure. The returned function holds the per-topic
121
+ * rate-limit state across turns; wire it onto the inbound message callback.
122
+ */
123
+ export declare function createCaptureLoop(deps: CaptureLoopDeps): (entry: CaptureTurnEntry) => Promise<CaptureOutcome>;
124
+ //# sourceMappingURL=TopicIntentCapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopicIntentCapture.d.ts","sourceRoot":"","sources":["../../src/core/TopicIntentCapture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * TopicIntentCapture — the adapter-agnostic capture step that fills the
3
+ * topic-intent store from live conversation (rung 0 of the Continuous Working
4
+ * Awareness north star). Spec: docs/specs/topic-intent-capture-loop.md.
5
+ *
6
+ * This is the "clerk" that was missing: the store, briefing, and ArcCheck all
7
+ * shipped, but nothing ever invoked `ingest()` on a real turn, so the cabinet
8
+ * stayed empty (the textbook "shipped but asleep" bug). This module is the
9
+ * single seam that watches each turn and files what matters.
10
+ *
11
+ * Design invariants (carried from the human-as-detector build + spec):
12
+ * - Best-effort, NEVER throws into the message/delivery path (acceptance #4).
13
+ * - Fire-and-forget: extraction runs off the delivery path; capture latency
14
+ * can never slow a message reaching the user.
15
+ * - Degrade-safe: no provider, cap breach, or provider error → a counter tick
16
+ * and a silent no-op, never an error.
17
+ * - Framework-agnostic: Telegram is merely the first wiring; the helper takes
18
+ * a generic entry, not a Telegram type.
19
+ *
20
+ * The pre-filter (`isSubstantiveTurn`) is a STATE-DETECTOR per
21
+ * `[[feedback_state_detection_robustness]]`: deterministic + fail-open, shipped
22
+ * with a canary (`runPreFilterCanary`) and registered in
23
+ * docs/specs/06-state-detector-registry.md. Its silent failure mode is
24
+ * sentinel-format drift → over-skip → real captures dropped → the original
25
+ * "no record for the topic" bug recurs.
26
+ */
27
+ // ── Pre-filter (deterministic state-detector, fail-open) ──────────────────
28
+ /**
29
+ * Whole-message acknowledgement patterns. Anchored (^…$) so "ok but actually
30
+ * I think we should switch to X" is NOT treated as a bare ack — only messages
31
+ * that are ENTIRELY an ack are skipped. Fail-open: when unsure, let it through.
32
+ */
33
+ const BARE_ACK_RE = /^(ok(ay)?|kk?|y(es|ep|eah|up)?|n(o|ope)?|thx|thanks?|thank you|ty|got it|sounds good|gotcha|great|cool|nice|perfect|done|sure|np|👍|🙏|✅|🎉|👌)[.!…\s]*$/i;
34
+ /**
35
+ * Agent sentinel / heartbeat / proxy lines. These are machine-emitted status
36
+ * messages, never conversational substance. Matched only on AGENT turns (a
37
+ * user could legitimately type any of these phrases). Conservative — extend
38
+ * deliberately, and keep the canary in lockstep.
39
+ */
40
+ const AGENT_SENTINEL_RE = new RegExp([
41
+ '^[🔭⏳🌙📍🛰️]', // status/beacon emoji prefixes
42
+ 'is actively (working|implementing)', // "🔭 Echo is actively working…"
43
+ 'your message has been delivered to the session', // proxy delivery sentinel
44
+ '^(standby|heartbeat)\\b', // standby/heartbeat headers
45
+ 'resumed \\d+ (watcher|of)', // PromiseBeacon resume acks
46
+ ].join('|'), 'i');
47
+ /** Minimum length below which a single-token message is treated as trivial. */
48
+ const TRIVIAL_MAX_CHARS = 16;
49
+ /**
50
+ * Decide whether a turn is worth sending to the extractor. Deterministic and
51
+ * FAIL-OPEN: returns true (capture) unless the turn is high-confidence trivial.
52
+ *
53
+ * Skips: empty / whitespace-only; agent sentinel/heartbeat/proxy lines; short
54
+ * bare acknowledgements. Everything else passes to the LLM, which makes the
55
+ * real significance call with broader context.
56
+ */
57
+ export function isSubstantiveTurn(text, fromUser) {
58
+ if (typeof text !== 'string')
59
+ return false;
60
+ const t = text.trim();
61
+ if (t.length === 0)
62
+ return false;
63
+ // Agent-emitted status lines are never substance.
64
+ if (!fromUser && AGENT_SENTINEL_RE.test(t))
65
+ return false;
66
+ // Short, whole-message acks (either side) — "ok", "thanks!", "👍".
67
+ if (t.length <= TRIVIAL_MAX_CHARS && BARE_ACK_RE.test(t))
68
+ return false;
69
+ return true; // fail-open
70
+ }
71
+ /**
72
+ * Known-good samples the pre-filter MUST classify correctly. If a code change
73
+ * (or sentinel-format drift) breaks one of these, the canary fails loudly so we
74
+ * notice BEFORE real captures are silently dropped.
75
+ */
76
+ export const PRE_FILTER_CANARY_SAMPLES = [
77
+ // Must SKIP (trivial / sentinel)
78
+ { text: 'ok', fromUser: true, expectSubstantive: false, label: 'bare ack "ok"' },
79
+ { text: 'thanks!', fromUser: true, expectSubstantive: false, label: 'bare ack "thanks!"' },
80
+ { text: '👍', fromUser: true, expectSubstantive: false, label: 'emoji ack' },
81
+ { text: ' ', fromUser: true, expectSubstantive: false, label: 'whitespace-only' },
82
+ {
83
+ text: '🔭 echo is actively working on something. Your message has been delivered to the session.',
84
+ fromUser: false, expectSubstantive: false, label: 'agent status sentinel',
85
+ },
86
+ { text: '⏳ resumed 2 watchers on this topic.', fromUser: false, expectSubstantive: false, label: 'beacon resume ack' },
87
+ // Must PASS (substantive)
88
+ {
89
+ text: 'Let\'s use Postgres for the user store, not SQLite — we need concurrent writes.',
90
+ fromUser: true, expectSubstantive: true, label: 'user decision',
91
+ },
92
+ {
93
+ text: 'ok but actually I think we should switch the extractor to read the rolling summary too',
94
+ fromUser: true, expectSubstantive: true, label: 'ack-prefixed substantive turn',
95
+ },
96
+ {
97
+ text: 'I built the capture helper and wired it onto onMessageLogged; tests are green.',
98
+ fromUser: false, expectSubstantive: true, label: 'substantive agent turn (no sentinel)',
99
+ },
100
+ ];
101
+ /** Run the pre-filter canary over the known samples. */
102
+ export function runPreFilterCanary() {
103
+ const failures = [];
104
+ for (const s of PRE_FILTER_CANARY_SAMPLES) {
105
+ const got = isSubstantiveTurn(s.text, s.fromUser);
106
+ if (got !== s.expectSubstantive) {
107
+ failures.push({ label: s.label, expected: s.expectSubstantive, got });
108
+ }
109
+ }
110
+ return { ok: failures.length === 0, failures };
111
+ }
112
+ /** Fast-tier per-turn cost estimate (cents) for the daily-cap accounting. */
113
+ export const TOPIC_INTENT_CAPTURE_COST_CENTS = 0.2;
114
+ /**
115
+ * Wrap an IntelligenceProvider so every call is admitted through the shared
116
+ * LlmQueue (background lane: capture is never user-interactive, and must yield
117
+ * to interactive work). The TRANSPORT stays the injected `intelligence` — which
118
+ * production resolves to the subscription / REPL-pool provider — so this never
119
+ * touches the raw Messages API (`[[feedback_anthropic_path_constraints]]`,
120
+ * acceptance #6). On daily-cap breach the queue THROWS; createLlmExtractFn
121
+ * catches it and degrades to a counter tick.
122
+ */
123
+ export function createQueuedIntelligence(intelligence, enqueue, costCents = TOPIC_INTENT_CAPTURE_COST_CENTS) {
124
+ return {
125
+ evaluate: (prompt, options) => enqueue('background', () => intelligence.evaluate(prompt, options), costCents),
126
+ };
127
+ }
128
+ function toIso(timestamp, now) {
129
+ if (typeof timestamp === 'string' && timestamp)
130
+ return timestamp;
131
+ if (typeof timestamp === 'number' && Number.isFinite(timestamp))
132
+ return new Date(timestamp).toISOString();
133
+ return new Date(now()).toISOString();
134
+ }
135
+ /** Map a store ref (with projection) to the EstablishedRef the extractor anchors against. */
136
+ function toEstablishedRef(r) {
137
+ return r;
138
+ }
139
+ /**
140
+ * Capture one conversation turn. Pre-filter → (shed/rate gates) → build broader
141
+ * context → extractor.ingest. Never throws; on any unexpected failure it ticks
142
+ * `degraded_cap_or_error` and returns { status: 'degraded' }.
143
+ *
144
+ * `rateState` (topicId → recent attempt timestamps) is owned by the caller
145
+ * (see createCaptureLoop) so the rate ceiling persists across turns.
146
+ */
147
+ export async function captureTurn(deps, entry, rateState) {
148
+ const now = deps.now ?? (() => Date.now());
149
+ let topicId;
150
+ try {
151
+ topicId = typeof entry.topicId === 'number' ? entry.topicId : undefined;
152
+ if (topicId === undefined)
153
+ return { status: 'no-topic' };
154
+ // Pre-filter — deterministic, fail-open.
155
+ if (!isSubstantiveTurn(entry.text, entry.fromUser)) {
156
+ deps.store.bumpCaptureCounters(topicId, { turns_seen: 1, prefilter_skipped: 1 });
157
+ return { status: 'skipped-prefilter' };
158
+ }
159
+ // Load-shedding under quota pressure.
160
+ if (deps.shouldShed?.()) {
161
+ deps.store.bumpCaptureCounters(topicId, { turns_seen: 1, degraded_shed: 1 });
162
+ return { status: 'skipped-shed' };
163
+ }
164
+ // Per-topic rate ceiling (runaway guard beyond the pre-filter).
165
+ if (deps.rateCeiling && rateState) {
166
+ const { maxPerWindow, windowMs } = deps.rateCeiling;
167
+ const tNow = now();
168
+ const recent = (rateState.get(topicId) ?? []).filter(ts => tNow - ts < windowMs);
169
+ if (recent.length >= maxPerWindow) {
170
+ rateState.set(topicId, recent);
171
+ deps.store.bumpCaptureCounters(topicId, { turns_seen: 1, rate_limited: 1 });
172
+ return { status: 'skipped-rate' };
173
+ }
174
+ recent.push(tNow);
175
+ rateState.set(topicId, recent);
176
+ }
177
+ // Build broader context: the topic's established refs + rolling summary.
178
+ const at = toIso(entry.timestamp, now);
179
+ const turn = entry.fromUser
180
+ ? deps.store.bumpTurn(topicId)
181
+ : (deps.store.read(topicId).turn ?? 0);
182
+ const existingRefs = deps.store
183
+ .getRefsAtOrAbove(topicId, 'observation')
184
+ .map(toEstablishedRef);
185
+ let rollingSummary;
186
+ try {
187
+ rollingSummary = deps.topicMemory?.getTopicSummary(topicId)?.summary;
188
+ }
189
+ catch { /* summary is best-effort context, never block capture */ }
190
+ const input = {
191
+ topicId,
192
+ arcId: deps.store.arcIdFor(topicId),
193
+ message: {
194
+ id: String(entry.messageId),
195
+ text: entry.text ?? '',
196
+ fromUser: entry.fromUser,
197
+ turn,
198
+ at,
199
+ },
200
+ existingRefs,
201
+ rollingSummary,
202
+ };
203
+ const result = await deps.extractor.ingest(input);
204
+ deps.store.bumpCaptureCounters(topicId, {
205
+ turns_seen: 1,
206
+ extractions_attempted: 1,
207
+ extractions_emitted: result.emitted.length > 0 ? 1 : 0,
208
+ refs_created: result.createdRefs.length,
209
+ }, at);
210
+ return { status: 'captured', emitted: result.emitted.length, createdRefs: result.createdRefs.length };
211
+ }
212
+ catch (err) {
213
+ // Best-effort: a capture failure must NEVER surface on the message path.
214
+ console.error(`[TopicIntentCapture] captureTurn failed (topic ${topicId ?? '?'}): ${err}`);
215
+ try {
216
+ if (topicId !== undefined) {
217
+ deps.store.bumpCaptureCounters(topicId, { turns_seen: 1, degraded_cap_or_error: 1 });
218
+ }
219
+ }
220
+ catch { /* metering best-effort */ }
221
+ return { status: 'degraded' };
222
+ }
223
+ }
224
+ /**
225
+ * Build a stateful capture closure. The returned function holds the per-topic
226
+ * rate-limit state across turns; wire it onto the inbound message callback.
227
+ */
228
+ export function createCaptureLoop(deps) {
229
+ const rateState = new Map();
230
+ return (entry) => captureTurn(deps, entry, rateState);
231
+ }
232
+ //# sourceMappingURL=TopicIntentCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopicIntentCapture.js","sourceRoot":"","sources":["../../src/core/TopicIntentCapture.ts"],"names":[],"mappings":"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"}