hippo-memory 1.13.0 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +69 -6
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +64 -1
- package/dist/api.js.map +1 -1
- package/dist/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +133 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -0
- package/dist/client.js.map +1 -1
- package/dist/forward-claim-detector.d.ts +38 -0
- package/dist/forward-claim-detector.d.ts.map +1 -0
- package/dist/forward-claim-detector.js +117 -0
- package/dist/forward-claim-detector.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +121 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/predictions.d.ts +73 -1
- package/dist/predictions.d.ts.map +1 -1
- package/dist/predictions.js +210 -16
- package/dist/predictions.js.map +1 -1
- package/dist/recall-history.d.ts +127 -0
- package/dist/recall-history.d.ts.map +1 -0
- package/dist/recall-history.js +235 -0
- package/dist/recall-history.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +81 -0
- package/dist/server.js.map +1 -1
- package/dist/src/api.js +64 -1
- package/dist/src/api.js.map +1 -1
- package/dist/src/audit.js.map +1 -1
- package/dist/src/cli.js +133 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.js +12 -0
- package/dist/src/client.js.map +1 -1
- package/dist/src/forward-claim-detector.js +117 -0
- package/dist/src/forward-claim-detector.js.map +1 -0
- package/dist/src/mcp/server.js +121 -2
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/predictions.js +210 -16
- package/dist/src/predictions.js.map +1 -1
- package/dist/src/recall-history.js +235 -0
- package/dist/src/recall-history.js.map +1 -0
- package/dist/src/server.js +81 -0
- package/dist/src/server.js.map +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/predictions.d.ts
CHANGED
|
@@ -114,9 +114,81 @@ export interface PredictionBaserate {
|
|
|
114
114
|
* drift risk). Plan-eng-critic round 1 HIGH recommendation: emit inside
|
|
115
115
|
* helper, not at 3 call sites.
|
|
116
116
|
*/
|
|
117
|
-
export declare function computePredictionBaserate(hippoRoot: string, tenantId: string, classTag: string, actor?: string
|
|
117
|
+
export declare function computePredictionBaserate(hippoRoot: string, tenantId: string, classTag: string, actor?: string,
|
|
118
|
+
/** v0.32 / J3.2 — when false, skip the predict_baserate audit emit. The
|
|
119
|
+
* J3.2 orchestrator (computePlanningFallacyHint, below) calls this with
|
|
120
|
+
* emitAudit=false and emits its own `recall_autodebias_hint` audit row
|
|
121
|
+
* instead, so the predict_baserate channel stays scoped to deliberate
|
|
122
|
+
* CLI / HTTP / MCP predict-baserate calls and does NOT pollute on every
|
|
123
|
+
* recall containing a forward-claim phrase. Default true preserves the
|
|
124
|
+
* v1.13.0 J3 audit semantics for the 3 direct callers (cmdPredict
|
|
125
|
+
* baserate, /v1/predictions/stats route, hippo_predict_baserate MCP
|
|
126
|
+
* handler) — none of them pass this argument. */
|
|
127
|
+
emitAudit?: boolean): PredictionBaserate;
|
|
118
128
|
export declare function loadOpenPredictions(hippoRoot: string, tenantId: string, opts?: {
|
|
119
129
|
classTag?: string;
|
|
120
130
|
limit?: number;
|
|
121
131
|
}): Prediction[];
|
|
132
|
+
/**
|
|
133
|
+
* J3.2 surface delivered on `RecallResult.planningFallacyHint` when an
|
|
134
|
+
* agent's recall query carries a forward-prediction phrase AND the closest
|
|
135
|
+
* matching prediction class has closed historical data.
|
|
136
|
+
*
|
|
137
|
+
* The agent sees its track record at the moment of forecasting, anchoring
|
|
138
|
+
* on the outside view (Lovallo-Kahneman 2003) rather than the inside-view
|
|
139
|
+
* inside the planning fallacy.
|
|
140
|
+
*
|
|
141
|
+
* Plan: docs/plans/2026-05-26-j32-auto-injection.md.
|
|
142
|
+
*/
|
|
143
|
+
export interface PlanningFallacyHint {
|
|
144
|
+
classTag: string;
|
|
145
|
+
/** Verbatim PredictionBaserate.summary, e.g.
|
|
146
|
+
* "Last 5 estimates in class migration-effort averaged 2.10x actual (MAE 1.40)." */
|
|
147
|
+
baserateSummary: string;
|
|
148
|
+
/** Discriminator vs hypothetical future manual-override hints. */
|
|
149
|
+
source: 'j3.2-auto';
|
|
150
|
+
/** The regex match snippet that triggered detection. Lets the agent
|
|
151
|
+
* see WHY the hint appeared and self-correct if detection misfires
|
|
152
|
+
* (e.g. "I wasn't predicting; ignore"). */
|
|
153
|
+
detectedPhrase: string;
|
|
154
|
+
nClosed: number;
|
|
155
|
+
/** Null only when every closed-row had estimate_value=0 (ratio undefined). */
|
|
156
|
+
meanRatio: number | null;
|
|
157
|
+
}
|
|
158
|
+
export type AutodebiasMode = 'off' | 'regex';
|
|
159
|
+
export interface ComputePlanningFallacyHintOpts {
|
|
160
|
+
/** Override env. When undefined, reads process.env.HIPPO_AUTODEBIAS at
|
|
161
|
+
* call time (per-call to allow test-time env toggling without module
|
|
162
|
+
* reload). 'off' short-circuits to null BEFORE the regex gate so the
|
|
163
|
+
* AUTODEBIAS=off path pays zero work. */
|
|
164
|
+
mode?: AutodebiasMode;
|
|
165
|
+
/** Actor for any audit emissions. Defaults to 'recall' (caller didn't
|
|
166
|
+
* specify). MUST thread through to the inner computePredictionBaserate
|
|
167
|
+
* call (passed as its `actor` arg) so MCP/HTTP-originated auto-hints
|
|
168
|
+
* carry the right attribution instead of the 'cli' default. */
|
|
169
|
+
actor?: string;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* J3.2 orchestrator. Composes the forward-claim detector + class resolver +
|
|
173
|
+
* baserate compute, with telemetry-grade audit emission at every decision
|
|
174
|
+
* point (success, no-class-match, tiebreak).
|
|
175
|
+
*
|
|
176
|
+
* Returns null on any of:
|
|
177
|
+
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
178
|
+
* - empty queryText
|
|
179
|
+
* - no forward-claim regex match
|
|
180
|
+
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
181
|
+
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
182
|
+
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
183
|
+
*
|
|
184
|
+
* On success: calls computePredictionBaserate(..., emitAudit=false) so the
|
|
185
|
+
* predict_baserate audit channel stays scoped to deliberate predict-
|
|
186
|
+
* baserate calls (the orchestrator's own recall_autodebias_hint audit
|
|
187
|
+
* carries n_closed + mean_ratio in metadata so no telemetry is lost), then
|
|
188
|
+
* emits recall_autodebias_hint audit + returns the hint.
|
|
189
|
+
*
|
|
190
|
+
* Latency budget (plan §Latency): ~50us regex-only on miss; ~750-850us
|
|
191
|
+
* on full match+resolve+baserate path. Well under 50ms target.
|
|
192
|
+
*/
|
|
193
|
+
export declare function computePlanningFallacyHint(hippoRoot: string, tenantId: string, queryText: string, opts?: ComputePlanningFallacyHintOpts): PlanningFallacyHint | null;
|
|
122
194
|
//# sourceMappingURL=predictions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictions.d.ts","sourceRoot":"","sources":["../src/predictions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"predictions.d.ts","sourceRoot":"","sources":["../src/predictions.ts"],"names":[],"mappings":"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"}
|
package/dist/predictions.js
CHANGED
|
@@ -28,6 +28,7 @@ import { openHippoDb, closeHippoDb } from './db.js';
|
|
|
28
28
|
import { writeEntry, assertTenantId } from './store.js';
|
|
29
29
|
import { createMemory, Layer } from './memory.js';
|
|
30
30
|
import { appendAuditEvent } from './audit.js';
|
|
31
|
+
import { detectForwardClaim } from './forward-claim-detector.js';
|
|
31
32
|
export const VALID_CLOSURE_STATES = new Set([
|
|
32
33
|
'open',
|
|
33
34
|
'closed',
|
|
@@ -269,7 +270,17 @@ export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {})
|
|
|
269
270
|
* drift risk). Plan-eng-critic round 1 HIGH recommendation: emit inside
|
|
270
271
|
* helper, not at 3 call sites.
|
|
271
272
|
*/
|
|
272
|
-
export function computePredictionBaserate(hippoRoot, tenantId, classTag, actor = 'cli'
|
|
273
|
+
export function computePredictionBaserate(hippoRoot, tenantId, classTag, actor = 'cli',
|
|
274
|
+
/** v0.32 / J3.2 — when false, skip the predict_baserate audit emit. The
|
|
275
|
+
* J3.2 orchestrator (computePlanningFallacyHint, below) calls this with
|
|
276
|
+
* emitAudit=false and emits its own `recall_autodebias_hint` audit row
|
|
277
|
+
* instead, so the predict_baserate channel stays scoped to deliberate
|
|
278
|
+
* CLI / HTTP / MCP predict-baserate calls and does NOT pollute on every
|
|
279
|
+
* recall containing a forward-claim phrase. Default true preserves the
|
|
280
|
+
* v1.13.0 J3 audit semantics for the 3 direct callers (cmdPredict
|
|
281
|
+
* baserate, /v1/predictions/stats route, hippo_predict_baserate MCP
|
|
282
|
+
* handler) — none of them pass this argument. */
|
|
283
|
+
emitAudit = true) {
|
|
273
284
|
assertTenantId('computePredictionBaserate', tenantId);
|
|
274
285
|
if (!classTag)
|
|
275
286
|
throw new Error('computePredictionBaserate: classTag is required');
|
|
@@ -287,14 +298,18 @@ export function computePredictionBaserate(hippoRoot, tenantId, classTag, actor =
|
|
|
287
298
|
const nClosed = rows.length;
|
|
288
299
|
if (nClosed === 0) {
|
|
289
300
|
// Audit zero-result reads too — agents probing empty classes is
|
|
290
|
-
// a signal worth recording.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
301
|
+
// a signal worth recording. Skipped when emitAudit=false (J3.2
|
|
302
|
+
// orchestrator path; its own recall_autodebias_hint audit fires
|
|
303
|
+
// only when nClosed > 0 anyway, so no signal is lost).
|
|
304
|
+
if (emitAudit) {
|
|
305
|
+
appendAuditEvent(db, {
|
|
306
|
+
tenantId,
|
|
307
|
+
actor,
|
|
308
|
+
op: 'predict_baserate',
|
|
309
|
+
targetId: classTag,
|
|
310
|
+
metadata: { class_tag: classTag, n_closed: 0 },
|
|
311
|
+
});
|
|
312
|
+
}
|
|
298
313
|
return {
|
|
299
314
|
classTag,
|
|
300
315
|
nClosed: 0,
|
|
@@ -326,13 +341,15 @@ export function computePredictionBaserate(hippoRoot, tenantId, classTag, actor =
|
|
|
326
341
|
? `averaged ${meanRatio.toFixed(2)}x actual`
|
|
327
342
|
: 'no ratio-eligible rows (all estimates were 0)';
|
|
328
343
|
const summary = `Last ${nClosed} estimate${nClosed === 1 ? '' : 's'} in class ${classTag} ${ratioPart} (MAE ${mae.toFixed(2)}).`;
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
344
|
+
if (emitAudit) {
|
|
345
|
+
appendAuditEvent(db, {
|
|
346
|
+
tenantId,
|
|
347
|
+
actor,
|
|
348
|
+
op: 'predict_baserate',
|
|
349
|
+
targetId: classTag,
|
|
350
|
+
metadata: { class_tag: classTag, n_closed: nClosed },
|
|
351
|
+
});
|
|
352
|
+
}
|
|
336
353
|
return {
|
|
337
354
|
classTag,
|
|
338
355
|
nClosed,
|
|
@@ -383,4 +400,181 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
|
|
|
383
400
|
closeHippoDb(db);
|
|
384
401
|
}
|
|
385
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* Resolve a query-token set to a unique best-matching class_tag for the
|
|
405
|
+
* tenant. Scores by lower-cased token overlap; requires best score ≥ 1
|
|
406
|
+
* AND strictly greater than the 2nd-best score.
|
|
407
|
+
*
|
|
408
|
+
* Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
|
|
409
|
+
* plus a small DISTINCT scan over the per-tenant class-tag set.
|
|
410
|
+
*
|
|
411
|
+
* Scope behaviour (v1 design choice, independent-review-critic round 1
|
|
412
|
+
* MED): class_tag selection is TENANT-GLOBAL, NOT scope-filtered against
|
|
413
|
+
* the recall's opts.scope. The class_tag is an aggregator label across
|
|
414
|
+
* historical predictions in the class, not a per-memory scope-bound
|
|
415
|
+
* property. A no-scope recall CAN surface a class_tag from a privately-
|
|
416
|
+
* scoped prediction's class in PlanningFallacyHint.classTag — by design,
|
|
417
|
+
* because base-rate reasoning needs the full historical sample.
|
|
418
|
+
* Implications:
|
|
419
|
+
* - The hint payload itself carries no memory content (only the aggregate
|
|
420
|
+
* summary string + numeric stats), so memory bodies do not leak.
|
|
421
|
+
* - The class_tag NAME is the side-channel. If sensitive labels are a
|
|
422
|
+
* concern, callers should either use opaque class names (e.g. hashes
|
|
423
|
+
* or numeric tokens) or set HIPPO_AUTODEBIAS=off.
|
|
424
|
+
* - tests/api-recall-autodebias.test.ts locks this with an explicit
|
|
425
|
+
* test asserting that scope-set predictions surface via no-scope
|
|
426
|
+
* recalls (so future "fix" attempts that scope-filter trip CI).
|
|
427
|
+
*/
|
|
428
|
+
function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
|
|
429
|
+
if (queryTokens.length === 0)
|
|
430
|
+
return { classTag: null, tiebreak: false };
|
|
431
|
+
const db = openHippoDb(hippoRoot);
|
|
432
|
+
try {
|
|
433
|
+
const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
|
|
434
|
+
const querySet = new Set(queryTokens);
|
|
435
|
+
let bestScore = 0;
|
|
436
|
+
let bestClass = null;
|
|
437
|
+
let secondBest = 0;
|
|
438
|
+
for (const { class_tag } of rows) {
|
|
439
|
+
const classTokens = class_tag
|
|
440
|
+
.toLowerCase()
|
|
441
|
+
.split(/[-_\s]+/)
|
|
442
|
+
.filter((t) => t.length >= 3);
|
|
443
|
+
let score = 0;
|
|
444
|
+
for (const t of classTokens)
|
|
445
|
+
if (querySet.has(t))
|
|
446
|
+
score++;
|
|
447
|
+
if (score > bestScore) {
|
|
448
|
+
secondBest = bestScore;
|
|
449
|
+
bestScore = score;
|
|
450
|
+
bestClass = class_tag;
|
|
451
|
+
}
|
|
452
|
+
else if (score === bestScore && score > 0) {
|
|
453
|
+
// Tie at current best — bump secondBest. Do NOT update bestClass
|
|
454
|
+
// (alphabetical tiebreak would pick wrong class on ambiguous query
|
|
455
|
+
// like "migration will take 3 days" between migration-effort vs
|
|
456
|
+
// migration-risk; silent on tie instead).
|
|
457
|
+
secondBest = score;
|
|
458
|
+
}
|
|
459
|
+
else if (score > secondBest) {
|
|
460
|
+
secondBest = score;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
if (bestScore < 1)
|
|
464
|
+
return { classTag: null, tiebreak: false };
|
|
465
|
+
if (bestScore === secondBest)
|
|
466
|
+
return { classTag: null, tiebreak: true };
|
|
467
|
+
return { classTag: bestClass, tiebreak: false };
|
|
468
|
+
}
|
|
469
|
+
finally {
|
|
470
|
+
closeHippoDb(db);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* J3.2 orchestrator. Composes the forward-claim detector + class resolver +
|
|
475
|
+
* baserate compute, with telemetry-grade audit emission at every decision
|
|
476
|
+
* point (success, no-class-match, tiebreak).
|
|
477
|
+
*
|
|
478
|
+
* Returns null on any of:
|
|
479
|
+
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
480
|
+
* - empty queryText
|
|
481
|
+
* - no forward-claim regex match
|
|
482
|
+
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
483
|
+
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
484
|
+
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
485
|
+
*
|
|
486
|
+
* On success: calls computePredictionBaserate(..., emitAudit=false) so the
|
|
487
|
+
* predict_baserate audit channel stays scoped to deliberate predict-
|
|
488
|
+
* baserate calls (the orchestrator's own recall_autodebias_hint audit
|
|
489
|
+
* carries n_closed + mean_ratio in metadata so no telemetry is lost), then
|
|
490
|
+
* emits recall_autodebias_hint audit + returns the hint.
|
|
491
|
+
*
|
|
492
|
+
* Latency budget (plan §Latency): ~50us regex-only on miss; ~750-850us
|
|
493
|
+
* on full match+resolve+baserate path. Well under 50ms target.
|
|
494
|
+
*/
|
|
495
|
+
export function computePlanningFallacyHint(hippoRoot, tenantId, queryText, opts = {}) {
|
|
496
|
+
// Env read FIRST so AUTODEBIAS=off pays zero regex cost. Per-call read
|
|
497
|
+
// (rather than module-load cache) is deliberate: tests env-toggle this
|
|
498
|
+
// via process.env mutation without module reload.
|
|
499
|
+
const mode = opts.mode ?? (process.env.HIPPO_AUTODEBIAS === 'off' ? 'off' : 'regex');
|
|
500
|
+
if (mode === 'off')
|
|
501
|
+
return null;
|
|
502
|
+
if (!queryText)
|
|
503
|
+
return null;
|
|
504
|
+
const match = detectForwardClaim(queryText);
|
|
505
|
+
if (!match)
|
|
506
|
+
return null;
|
|
507
|
+
const actor = opts.actor ?? 'recall';
|
|
508
|
+
const resolution = resolveClassFromTokens(hippoRoot, tenantId, match.classQueryTokens);
|
|
509
|
+
if (resolution.tiebreak) {
|
|
510
|
+
// Telemetry: forward-claim detected, ≥2 classes tied at best overlap.
|
|
511
|
+
// Silent to caller; surfaces in audit only.
|
|
512
|
+
const db = openHippoDb(hippoRoot);
|
|
513
|
+
try {
|
|
514
|
+
appendAuditEvent(db, {
|
|
515
|
+
tenantId,
|
|
516
|
+
actor,
|
|
517
|
+
op: 'recall_autodebias_hint_tiebreak',
|
|
518
|
+
targetId: match.phrase.slice(0, 100),
|
|
519
|
+
metadata: { detected_phrase: match.phrase, token_count: match.classQueryTokens.length },
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
finally {
|
|
523
|
+
closeHippoDb(db);
|
|
524
|
+
}
|
|
525
|
+
return null;
|
|
526
|
+
}
|
|
527
|
+
if (!resolution.classTag) {
|
|
528
|
+
// Telemetry: forward-claim detected, no class scored ≥ 1.
|
|
529
|
+
// This is the channel that drives the embedding-fallback decision
|
|
530
|
+
// for J3.3 — high volume here = regex+token-overlap is missing
|
|
531
|
+
// legitimate forward-claims that have NO obvious class signal.
|
|
532
|
+
const db = openHippoDb(hippoRoot);
|
|
533
|
+
try {
|
|
534
|
+
appendAuditEvent(db, {
|
|
535
|
+
tenantId,
|
|
536
|
+
actor,
|
|
537
|
+
op: 'recall_autodebias_hint_no_class_match',
|
|
538
|
+
targetId: match.phrase.slice(0, 100),
|
|
539
|
+
metadata: { detected_phrase: match.phrase, token_count: match.classQueryTokens.length },
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
finally {
|
|
543
|
+
closeHippoDb(db);
|
|
544
|
+
}
|
|
545
|
+
return null;
|
|
546
|
+
}
|
|
547
|
+
// emitAudit=false: avoid double-write to predict_baserate channel.
|
|
548
|
+
// The recall_autodebias_hint audit below carries n_closed + mean_ratio.
|
|
549
|
+
const baserate = computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, actor,
|
|
550
|
+
/*emitAudit=*/ false);
|
|
551
|
+
if (baserate.nClosed === 0)
|
|
552
|
+
return null; // Silent — wait for closed data.
|
|
553
|
+
const db = openHippoDb(hippoRoot);
|
|
554
|
+
try {
|
|
555
|
+
appendAuditEvent(db, {
|
|
556
|
+
tenantId,
|
|
557
|
+
actor,
|
|
558
|
+
op: 'recall_autodebias_hint',
|
|
559
|
+
targetId: resolution.classTag,
|
|
560
|
+
metadata: {
|
|
561
|
+
class_tag: resolution.classTag,
|
|
562
|
+
detected_phrase: match.phrase,
|
|
563
|
+
n_closed: baserate.nClosed,
|
|
564
|
+
mean_ratio: baserate.meanRatio,
|
|
565
|
+
},
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
finally {
|
|
569
|
+
closeHippoDb(db);
|
|
570
|
+
}
|
|
571
|
+
return {
|
|
572
|
+
classTag: resolution.classTag,
|
|
573
|
+
baserateSummary: baserate.summary,
|
|
574
|
+
source: 'j3.2-auto',
|
|
575
|
+
detectedPhrase: match.phrase,
|
|
576
|
+
nClosed: baserate.nClosed,
|
|
577
|
+
meanRatio: baserate.meanRatio,
|
|
578
|
+
};
|
|
579
|
+
}
|
|
386
580
|
//# sourceMappingURL=predictions.js.map
|
package/dist/predictions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictions.js","sourceRoot":"","sources":["../src/predictions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"predictions.js","sourceRoot":"","sources":["../src/predictions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* J1 anchoring detector (recall-recurrence) — pure module.
|
|
3
|
+
*
|
|
4
|
+
* Implements two detection rules from ROADMAP-RESEARCH.md L546:
|
|
5
|
+
* R1 query_repeat: same queryHash within recentRepeatWindow returned
|
|
6
|
+
* same topMemoryId (caller is re-asking the same question).
|
|
7
|
+
* R2 memory_dominance: same topMemoryId across >= minDominance distinct
|
|
8
|
+
* queryHashes (memory acts as a fixed-point anchor regardless of what
|
|
9
|
+
* the agent asks).
|
|
10
|
+
*
|
|
11
|
+
* Per the plan v3 architectural decision: each pipeline (api.recall via
|
|
12
|
+
* HTTP, cmdRecall, MCP hippo_recall) owns its OWN ring buffer Map keyed
|
|
13
|
+
* by (tenant, session). No cross-pipeline sharing (the typical multi-
|
|
14
|
+
* process deployment makes IPC ring-sharing impractical; per-pipeline
|
|
15
|
+
* is correct because each pipeline has its own top-1 ranking anyway).
|
|
16
|
+
*
|
|
17
|
+
* Plan: docs/plans/2026-05-26-j1-anchoring-detector.md.
|
|
18
|
+
* Composes with J3.2: AnchoringHint + PlanningFallacyHint are independent
|
|
19
|
+
* signals; both can fire on the same recall.
|
|
20
|
+
*/
|
|
21
|
+
export type AnchoringReason = 'query_repeat' | 'memory_dominance';
|
|
22
|
+
export interface AnchoringHint {
|
|
23
|
+
reason: AnchoringReason;
|
|
24
|
+
/** The memory ID that is anchoring the agent's reasoning. */
|
|
25
|
+
memoryId: string;
|
|
26
|
+
/** For 'memory_dominance': how many distinct queries in the recent window
|
|
27
|
+
* had this memory as their top-1 result. Always >= 3 when emitted. */
|
|
28
|
+
queryCount?: number;
|
|
29
|
+
/** Human-readable summary surfaced to the agent. */
|
|
30
|
+
summary: string;
|
|
31
|
+
/** Discriminator for hint origin; reserved for future variants. */
|
|
32
|
+
source: 'j1-recurrence';
|
|
33
|
+
}
|
|
34
|
+
export interface RecallHistoryEntry {
|
|
35
|
+
/** Hash of the queryText that produced this entry (see hashQueryText). */
|
|
36
|
+
queryHash: number;
|
|
37
|
+
/** Top-1 memory id this recall surfaced; null if zero results. */
|
|
38
|
+
topMemoryId: string | null;
|
|
39
|
+
/** ISO-8601 timestamp; advisory, not used by R1/R2 logic. */
|
|
40
|
+
ts: string;
|
|
41
|
+
/** Memory id of the AnchoringHint that fired on this recall, if any.
|
|
42
|
+
* Used by R1/R2 cooldown logic to prevent re-emitting the same hint on
|
|
43
|
+
* consecutive recalls within the dominance window. Caller-written
|
|
44
|
+
* AFTER detectAnchoring returns; reads next time detectAnchoring runs. */
|
|
45
|
+
anchoredOn?: string;
|
|
46
|
+
}
|
|
47
|
+
export type RecallHistorySnapshot = readonly RecallHistoryEntry[];
|
|
48
|
+
export interface DetectAnchoringOpts {
|
|
49
|
+
/** R2 threshold: number of distinct queryHashes that must have returned
|
|
50
|
+
* the same topMemoryId. Default 3. */
|
|
51
|
+
minDominance?: number;
|
|
52
|
+
/** R1 window: how many recent history entries to scan for query repeat.
|
|
53
|
+
* Default 5. */
|
|
54
|
+
recentRepeatWindow?: number;
|
|
55
|
+
/** Cooldown: if the immediately-prior fire (per `anchoredOn`) was for
|
|
56
|
+
* the same topMemoryId within this many history entries, suppress.
|
|
57
|
+
* Default 3. */
|
|
58
|
+
cooldown?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Normalize + hash a query text into a 32-bit integer.
|
|
62
|
+
* Lowercase → strip non-alphanumeric → split → drop empty + short tokens →
|
|
63
|
+
* sort tokens → join → FNV-1a 32-bit.
|
|
64
|
+
*
|
|
65
|
+
* Token sort + dedup means semantically-equivalent queries with reordered
|
|
66
|
+
* words collide intentionally (the roadmap's "semantically-distinct" v1
|
|
67
|
+
* uses textual normalization; embedding-based distinctness is J1-v2).
|
|
68
|
+
*
|
|
69
|
+
* Deterministic across processes; stable across Node + V8 versions.
|
|
70
|
+
*/
|
|
71
|
+
export declare function hashQueryText(query: string): number;
|
|
72
|
+
/**
|
|
73
|
+
* Detect anchoring patterns in the recall history against the current
|
|
74
|
+
* recall's (queryHash, topMemoryId).
|
|
75
|
+
*
|
|
76
|
+
* Rule precedence: R2 (memory_dominance) wins on tie. When both R1 and R2
|
|
77
|
+
* fire on the same recall, return only the R2 hint — R2's signal is the
|
|
78
|
+
* cognitively stronger one (a memory dominating multiple DIFFERENT queries
|
|
79
|
+
* is a fixed-point anchor; R1 alone is just a literal re-ask).
|
|
80
|
+
*
|
|
81
|
+
* Cooldown: if the immediately-prior recall fired a hint on the SAME
|
|
82
|
+
* topMemoryId within `cooldown=3` history entries, suppress. Prevents
|
|
83
|
+
* spam when the agent repeatedly recalls within the dominance window.
|
|
84
|
+
* Cooldown is per-memory, not per-rule: if R2 fired on M (cooldown
|
|
85
|
+
* engaged for M), and the next recall has top=N + repeated query →
|
|
86
|
+
* R1 fires on N (different memory, not in cooldown).
|
|
87
|
+
*
|
|
88
|
+
* @returns AnchoringHint when a pattern fires; null otherwise.
|
|
89
|
+
*/
|
|
90
|
+
export declare function detectAnchoring(history: RecallHistorySnapshot, currentQueryHash: number, currentTopMemoryId: string | null, opts?: DetectAnchoringOpts): AnchoringHint | null;
|
|
91
|
+
/**
|
|
92
|
+
* Bounded FIFO ring of RecallHistoryEntry. Newest entries pushed via
|
|
93
|
+
* append; oldest evicted when the ring is full. The class is intentionally
|
|
94
|
+
* a thin wrapper around an array so snapshotRing returns a readonly view
|
|
95
|
+
* without copying on the hot path.
|
|
96
|
+
*/
|
|
97
|
+
export declare class RingBuffer {
|
|
98
|
+
private entries;
|
|
99
|
+
append(entry: RecallHistoryEntry): void;
|
|
100
|
+
snapshot(): RecallHistorySnapshot;
|
|
101
|
+
size(): number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Build the (tenant, session) key for a per-session ring Map. Uses a NUL
|
|
105
|
+
* (`\x00`) byte as delimiter because tenant ids and session ids are
|
|
106
|
+
* validated elsewhere to reject NUL chars — guarantees collision-free
|
|
107
|
+
* concatenation regardless of what `:` or other delimiters might appear
|
|
108
|
+
* inside either field (notably API-key-derived subjects can contain `:`).
|
|
109
|
+
*/
|
|
110
|
+
export declare function buildSessionKey(tenantId: string, sessionId: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* Get-or-create a RingBuffer for a session key. Caps total tracked keys
|
|
113
|
+
* at `maxSessions` (default 1000) with LRU eviction — when the cap is
|
|
114
|
+
* hit, deletes the oldest-inserted key before inserting the new one.
|
|
115
|
+
* Map iteration order preserves insertion order per ECMA-262 spec, so
|
|
116
|
+
* "oldest" = first key returned by Map.prototype.keys().
|
|
117
|
+
*/
|
|
118
|
+
export declare function getOrCreateRing(map: Map<string, RingBuffer>, key: string, maxSessions?: number): RingBuffer;
|
|
119
|
+
/**
|
|
120
|
+
* Append a recall to a ring. The `anchoredOn` argument carries the
|
|
121
|
+
* memoryId of the AnchoringHint that fired on THIS recall (or undefined
|
|
122
|
+
* if no hint). detectAnchoring reads it next time for cooldown gating.
|
|
123
|
+
*/
|
|
124
|
+
export declare function appendRecall(ring: RingBuffer, queryHash: number, topMemoryId: string | null, anchoredOn?: string): void;
|
|
125
|
+
/** Snapshot a ring as a readonly RecallHistorySnapshot. */
|
|
126
|
+
export declare function snapshotRing(ring: RingBuffer): RecallHistorySnapshot;
|
|
127
|
+
//# sourceMappingURL=recall-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall-history.d.ts","sourceRoot":"","sources":["../src/recall-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;2EACuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX;;;+EAG2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,kBAAkB,EAAE,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC;2CACuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;qBACiB;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;qBAEiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmCnD;AAkBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,IAAI,GAAE,mBAAwB,GAC7B,aAAa,GAAG,IAAI,CAmDtB;AASD;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA4B;IAE3C,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAOvC,QAAQ,IAAI,qBAAqB;IAIjC,IAAI,IAAI,MAAM;CAGf;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA6B,GACzC,UAAU,CAeZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAQN;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,qBAAqB,CAEpE"}
|