hippo-memory 1.23.0 → 1.24.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.
- package/README.md +16 -5
- package/bin/hippo.js +2 -2
- package/dist/ablation.d.ts +93 -0
- package/dist/ablation.d.ts.map +1 -0
- package/dist/ablation.js +138 -0
- package/dist/ablation.js.map +1 -0
- package/dist/ambient.d.ts.map +1 -1
- package/dist/ambient.js +2 -1
- package/dist/ambient.js.map +1 -1
- package/dist/api.d.ts +37 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +88 -11
- package/dist/api.js.map +1 -1
- package/dist/benchmarks/e1.3/scenarios.json +2587 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +117 -18
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/connectors/github/backfill.js +4 -4
- package/dist/connectors/github/cli-impl.js +6 -6
- package/dist/connectors/github/dlq.js +14 -14
- package/dist/connectors/slack/backfill.js +1 -1
- package/dist/connectors/slack/dlq.js +10 -10
- package/dist/connectors/slack/workspaces.js +4 -4
- package/dist/consolidate.d.ts.map +1 -1
- package/dist/consolidate.js +27 -5
- package/dist/consolidate.js.map +1 -1
- package/dist/dag.js +6 -6
- package/dist/dashboard.js +7 -7
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +55 -4
- package/dist/db.js.map +1 -1
- package/dist/hooks.js +24 -24
- package/dist/importers.d.ts +28 -0
- package/dist/importers.d.ts.map +1 -1
- package/dist/importers.js +412 -1
- package/dist/importers.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +44 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory.d.ts +9 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +29 -6
- package/dist/memory.js.map +1 -1
- package/dist/physics-state.d.ts.map +1 -1
- package/dist/physics-state.js +4 -3
- package/dist/physics-state.js.map +1 -1
- package/dist/physics.d.ts.map +1 -1
- package/dist/physics.js +8 -1
- package/dist/physics.js.map +1 -1
- package/dist/predictions.js +67 -67
- package/dist/project-identity.d.ts +84 -0
- package/dist/project-identity.d.ts.map +1 -0
- package/dist/project-identity.js +184 -0
- package/dist/project-identity.js.map +1 -0
- package/dist/refine-llm.js +13 -13
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +4 -1
- package/dist/replay.js.map +1 -1
- package/dist/search.d.ts +14 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +36 -7
- package/dist/search.js.map +1 -1
- package/dist/secret-detect.d.ts +33 -0
- package/dist/secret-detect.d.ts.map +1 -0
- package/dist/secret-detect.js +70 -0
- package/dist/secret-detect.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -0
- package/dist/server.js.map +1 -1
- package/dist/shared.d.ts +9 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +67 -16
- package/dist/shared.js.map +1 -1
- package/dist/src/ablation.js +138 -0
- package/dist/src/ablation.js.map +1 -0
- package/dist/src/ambient.js +2 -1
- package/dist/src/ambient.js.map +1 -1
- package/dist/src/api.js +88 -11
- package/dist/src/api.js.map +1 -1
- package/dist/src/cli.js +117 -18
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.js +2 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/connectors/github/backfill.js +4 -4
- package/dist/src/connectors/github/cli-impl.js +6 -6
- package/dist/src/connectors/github/dlq.js +14 -14
- package/dist/src/connectors/slack/backfill.js +1 -1
- package/dist/src/connectors/slack/dlq.js +10 -10
- package/dist/src/connectors/slack/workspaces.js +4 -4
- package/dist/src/consolidate.js +27 -5
- package/dist/src/consolidate.js.map +1 -1
- package/dist/src/dag.js +6 -6
- package/dist/src/dashboard.js +7 -7
- package/dist/src/db.js +55 -4
- package/dist/src/db.js.map +1 -1
- package/dist/src/hooks.js +24 -24
- package/dist/src/importers.js +412 -1
- package/dist/src/importers.js.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/server.js +44 -7
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/memory.js +29 -6
- package/dist/src/memory.js.map +1 -1
- package/dist/src/physics-state.js +4 -3
- package/dist/src/physics-state.js.map +1 -1
- package/dist/src/physics.js +8 -1
- package/dist/src/physics.js.map +1 -1
- package/dist/src/predictions.js +67 -67
- package/dist/src/project-identity.js +184 -0
- package/dist/src/project-identity.js.map +1 -0
- package/dist/src/refine-llm.js +13 -13
- package/dist/src/replay.js +4 -1
- package/dist/src/replay.js.map +1 -1
- package/dist/src/search.js +36 -7
- package/dist/src/search.js.map +1 -1
- package/dist/src/secret-detect.js +70 -0
- package/dist/src/secret-detect.js.map +1 -0
- package/dist/src/server.js +11 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/shared.js +67 -16
- package/dist/src/shared.js.map +1 -1
- package/dist/src/store.js +66 -11
- package/dist/src/store.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/working-memory.js +19 -19
- package/dist/store.d.ts +15 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +66 -11
- package/dist/store.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/working-memory.js +19 -19
- package/dist-ui/index.html +12 -12
- package/extensions/openclaw-plugin/index.ts +650 -650
- 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 +3 -1
package/dist/shared.js
CHANGED
|
@@ -6,22 +6,20 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import * as path from 'path';
|
|
9
|
-
import * as os from 'os';
|
|
10
9
|
import { generateId } from './memory.js';
|
|
11
10
|
import { initStore, loadAllEntries, loadIndex, loadSearchEntries, writeEntry, readEntry, } from './store.js';
|
|
12
11
|
import { search, hybridSearch } from './search.js';
|
|
12
|
+
import { evalNow } from './ablation.js';
|
|
13
|
+
import { deriveOriginProject, classifyOriginProject, resolveGlobalRootDir } from './project-identity.js';
|
|
14
|
+
import { detectSecret } from './secret-detect.js';
|
|
13
15
|
/**
|
|
14
16
|
* Returns the path to the global Hippo store.
|
|
15
17
|
* Resolution order: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
|
|
16
18
|
*/
|
|
17
19
|
export function getGlobalRoot() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const xdgData = process.env.XDG_DATA_HOME?.trim();
|
|
22
|
-
if (xdgData)
|
|
23
|
-
return path.join(xdgData, 'hippo');
|
|
24
|
-
return path.join(os.homedir(), '.hippo');
|
|
20
|
+
// Single source of truth lives in project-identity.ts (leaf) so db.ts
|
|
21
|
+
// migrations can resolve the same path without a shared.ts import cycle.
|
|
22
|
+
return resolveGlobalRootDir();
|
|
25
23
|
}
|
|
26
24
|
/**
|
|
27
25
|
* Ensure the global store exists.
|
|
@@ -45,13 +43,23 @@ export function promoteToGlobal(localRoot, id, opts) {
|
|
|
45
43
|
const entry = readEntry(localRoot, id, opts?.tenantId);
|
|
46
44
|
if (!entry)
|
|
47
45
|
throw new Error(`Memory not found: ${id}`);
|
|
46
|
+
// v39 S4 producer veto: promote is a producer path to the global store
|
|
47
|
+
// exactly like shareMemory - same hard rule (codex gating review P2).
|
|
48
|
+
const promoteSecret = detectSecret(entry);
|
|
49
|
+
if (promoteSecret.flagged) {
|
|
50
|
+
throw new Error(`Refusing to promote ${id} to the global store: content matches secret material (${promoteSecret.reason}). ` +
|
|
51
|
+
`Secrets stay in their owning project's store.`);
|
|
52
|
+
}
|
|
48
53
|
initGlobal();
|
|
49
54
|
const globalRoot = getGlobalRoot();
|
|
50
|
-
// Mint a new ID for the global store
|
|
55
|
+
// Mint a new ID for the global store. origin_project rides along from the
|
|
56
|
+
// local entry's write-time stamp via the spread; back-stop it for pre-v39
|
|
57
|
+
// local rows so a promoted copy never lands NULL in the global store.
|
|
51
58
|
const globalEntry = {
|
|
52
59
|
...entry,
|
|
53
60
|
id: generateId('g'),
|
|
54
61
|
source: `promoted:${localRoot}`,
|
|
62
|
+
origin_project: entry.origin_project ?? deriveOriginProject(path.dirname(path.resolve(localRoot))),
|
|
55
63
|
};
|
|
56
64
|
writeEntry(globalRoot, globalEntry, { actor: opts?.actor });
|
|
57
65
|
return globalEntry;
|
|
@@ -62,7 +70,7 @@ export function promoteToGlobal(localRoot, id, opts) {
|
|
|
62
70
|
* Returns results sorted by adjusted score, within combined token budget.
|
|
63
71
|
*/
|
|
64
72
|
export function searchBoth(query, localRoot, globalRoot, options = {}) {
|
|
65
|
-
const { budget = 4000, now =
|
|
73
|
+
const { budget = 4000, now = evalNow(), minResults, tenantId } = options;
|
|
66
74
|
const effectiveMin = minResults ?? 1;
|
|
67
75
|
const localEntries = fs.existsSync(localRoot) ? loadSearchEntries(localRoot, query, undefined, tenantId) : [];
|
|
68
76
|
const globalEntries = fs.existsSync(globalRoot) ? loadSearchEntries(globalRoot, query, undefined, tenantId) : [];
|
|
@@ -111,9 +119,24 @@ export function searchBoth(query, localRoot, globalRoot, options = {}) {
|
|
|
111
119
|
* Async version of searchBoth that calls hybridSearch instead of search.
|
|
112
120
|
*/
|
|
113
121
|
export async function searchBothHybrid(query, localRoot, globalRoot, options = {}) {
|
|
114
|
-
const { budget = 4000, now =
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
const { budget = 4000, now = evalNow(), embeddingWeight, explain, mmr, mmrLambda, localBump = 1.2, minResults, scope, includeSuperseded, asOf, tenantId, summaryDeboost, summaryFreshness, entryFilter } = options;
|
|
123
|
+
// When an admission filter is active, lift the per-store candidate cap
|
|
124
|
+
// (default 200): excluded rows matching the query could otherwise fill the
|
|
125
|
+
// window before any admitted row is even loaded (codex gating round 6).
|
|
126
|
+
// Only ambient-context query mode sets entryFilter, and that path is
|
|
127
|
+
// interactive - never the per-turn pinned-only hook - so ranking the full
|
|
128
|
+
// match set is acceptable.
|
|
129
|
+
// 5000 = 25x the default 200-row window: large enough that exclusion
|
|
130
|
+
// crowding is a non-issue on real stores, bounded so a common query term
|
|
131
|
+
// on a 100k-row store cannot stall an interactive call by ranking every
|
|
132
|
+
// match (post-merge adversarial review, 2026-07-02).
|
|
133
|
+
const searchWindow = entryFilter ? 5000 : undefined;
|
|
134
|
+
let localEntries = fs.existsSync(localRoot) ? loadSearchEntries(localRoot, query, searchWindow, tenantId) : [];
|
|
135
|
+
let globalEntries = fs.existsSync(globalRoot) ? loadSearchEntries(globalRoot, query, searchWindow, tenantId) : [];
|
|
136
|
+
if (entryFilter) {
|
|
137
|
+
localEntries = localEntries.filter(entryFilter);
|
|
138
|
+
globalEntries = globalEntries.filter(entryFilter);
|
|
139
|
+
}
|
|
117
140
|
if (localEntries.length === 0 && globalEntries.length === 0)
|
|
118
141
|
return [];
|
|
119
142
|
const localResults = await hybridSearch(query, localEntries, {
|
|
@@ -208,16 +231,29 @@ export function shareMemory(localRoot, id, options = {}) {
|
|
|
208
231
|
const entry = readEntry(localRoot, id, options.tenantId);
|
|
209
232
|
if (!entry)
|
|
210
233
|
throw new Error(`Memory not found: ${id}`);
|
|
234
|
+
// v39 S4 producer veto: secrets never go to the global store, not even
|
|
235
|
+
// with --force. Explicit and loud - a silent null would read as "low
|
|
236
|
+
// transfer score" and invite retries.
|
|
237
|
+
const secret = detectSecret(entry);
|
|
238
|
+
if (secret.flagged) {
|
|
239
|
+
throw new Error(`Refusing to share ${id} to the global store: content matches secret material (${secret.reason}). ` +
|
|
240
|
+
`Secrets stay in their owning project's store.`);
|
|
241
|
+
}
|
|
211
242
|
const score = transferScore(entry);
|
|
212
243
|
if (score < 0.3 && !options.force)
|
|
213
244
|
return null;
|
|
214
245
|
initGlobal();
|
|
215
246
|
const globalRoot = getGlobalRoot();
|
|
216
|
-
|
|
247
|
+
// v39: canonical origin comes from the entry's own stamp (write-time,
|
|
248
|
+
// store-location-derived); the localRoot parent basename is only a
|
|
249
|
+
// fallback for pre-v39 rows and keeps the legacy source format intact.
|
|
250
|
+
const fallbackName = path.basename(path.resolve(localRoot, '..'));
|
|
251
|
+
const originName = entry.origin_project ?? deriveOriginProject(path.dirname(path.resolve(localRoot)));
|
|
217
252
|
const globalEntry = {
|
|
218
253
|
...entry,
|
|
219
254
|
id: generateId('g'),
|
|
220
|
-
source: `shared:${
|
|
255
|
+
source: `shared:${originName === '' ? fallbackName : originName}:${new Date().toISOString()}`,
|
|
256
|
+
origin_project: originName,
|
|
221
257
|
};
|
|
222
258
|
writeEntry(globalRoot, globalEntry);
|
|
223
259
|
return globalEntry;
|
|
@@ -294,6 +330,11 @@ export function autoShare(localRoot, options = {}) {
|
|
|
294
330
|
// Build set of global content hashes to avoid duplicates
|
|
295
331
|
const globalContentSet = new Set(globalEntries.map((e) => e.content.toLowerCase().trim().slice(0, 200)));
|
|
296
332
|
const candidates = localEntries.filter((entry) => {
|
|
333
|
+
// v39 S4 producer veto: secret rows never auto-share, regardless of
|
|
334
|
+
// transfer score. (shareMemory would throw; filtering here keeps the
|
|
335
|
+
// sleep pipeline fail-safe.)
|
|
336
|
+
if (detectSecret(entry).flagged)
|
|
337
|
+
return false;
|
|
297
338
|
const score = transferScore(entry);
|
|
298
339
|
if (score < minScore)
|
|
299
340
|
return false;
|
|
@@ -318,7 +359,7 @@ export function autoShare(localRoot, options = {}) {
|
|
|
318
359
|
* Skips entries that already exist locally (by ID or by near-identical content).
|
|
319
360
|
* Returns the count of newly copied entries.
|
|
320
361
|
*/
|
|
321
|
-
export function syncGlobalToLocal(localRoot, globalRoot) {
|
|
362
|
+
export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
322
363
|
if (!fs.existsSync(globalRoot))
|
|
323
364
|
return 0;
|
|
324
365
|
// L9: host-wide read. syncGlobalToLocal copies the global union into a
|
|
@@ -326,11 +367,21 @@ export function syncGlobalToLocal(localRoot, globalRoot) {
|
|
|
326
367
|
// the local-root context provides one.
|
|
327
368
|
const globalEntries = loadAllEntries(globalRoot);
|
|
328
369
|
const localIndex = loadIndex(localRoot);
|
|
370
|
+
// v39 (codex P1-4): syncing down must not re-import what ambient context
|
|
371
|
+
// excludes - other-project rows are skipped by default and secret rows
|
|
372
|
+
// are never copied. origin_project is preserved on the copy (writeEntry
|
|
373
|
+
// only stamps when the field is missing).
|
|
374
|
+
const currentName = deriveOriginProject(path.dirname(path.resolve(localRoot)));
|
|
329
375
|
let count = 0;
|
|
330
376
|
for (const entry of globalEntries) {
|
|
331
377
|
// Skip if already present by ID
|
|
332
378
|
if (localIndex.entries[entry.id])
|
|
333
379
|
continue;
|
|
380
|
+
if (detectSecret(entry).flagged)
|
|
381
|
+
continue;
|
|
382
|
+
if (!opts.includeCrossProject &&
|
|
383
|
+
classifyOriginProject(entry.origin_project, currentName) === 'cross-project')
|
|
384
|
+
continue;
|
|
334
385
|
writeEntry(localRoot, entry);
|
|
335
386
|
count++;
|
|
336
387
|
}
|
package/dist/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EVAL-ONLY lifecycle ablation switches.
|
|
3
|
+
*
|
|
4
|
+
* These env flags exist for controlled experiments on hippo's memory-lifecycle
|
|
5
|
+
* mechanisms (the "lifecycle, ablated" paper protocol): each switch neutralizes
|
|
6
|
+
* exactly ONE mechanism so its causal contribution can be measured in isolation.
|
|
7
|
+
*
|
|
8
|
+
* They are NOT a production configuration surface:
|
|
9
|
+
* - no config-file equivalents, deliberately (config implies support);
|
|
10
|
+
* - undocumented in user-facing help;
|
|
11
|
+
* - semantics may change with the experiment design.
|
|
12
|
+
* Production behavior with all flags unset is byte-identical to before this
|
|
13
|
+
* module existed.
|
|
14
|
+
*
|
|
15
|
+
* Flags (set to '1' or 'true'):
|
|
16
|
+
* HIPPO_ABLATE_DECAY time-decay term := 1 in calculateStrength.
|
|
17
|
+
* HIPPO_ABLATE_RECALL_BOOST full recall-strengthening ablation:
|
|
18
|
+
* - markRetrieved returns entries UNMUTATED (no
|
|
19
|
+
* clock reset / count / half-life increment);
|
|
20
|
+
* ids stay available so `hippo outcome`
|
|
21
|
+
* attribution keeps working in this arm;
|
|
22
|
+
* - persisting callers (CLI recall, api context,
|
|
23
|
+
* MCP recall/context, consolidation replay)
|
|
24
|
+
* skip their writeEntry loops (identical-row
|
|
25
|
+
* writes still refresh updated_at / mirrors /
|
|
26
|
+
* DAG dirty flags);
|
|
27
|
+
* - the retrieval-count READ boost := 1;
|
|
28
|
+
* - decay anchors at `created` instead of
|
|
29
|
+
* `last_retrieved` (prior-run clock resets
|
|
30
|
+
* cannot leak in);
|
|
31
|
+
* - physics: computeMass ignores the count, and
|
|
32
|
+
* physicsSearch recomputes loaded masses LIVE
|
|
33
|
+
* under ablated strength rules (persisted
|
|
34
|
+
* masses embed recall history in their frozen
|
|
35
|
+
* strength component);
|
|
36
|
+
* - replay rehearsal is silenced entirely (it IS
|
|
37
|
+
* strengthening; use config replay.count=0 to
|
|
38
|
+
* separate replay in unflagged arms).
|
|
39
|
+
* CAVEAT: half_life increments persisted by
|
|
40
|
+
* prior unflagged runs are NOT reconstructed
|
|
41
|
+
* (consolidation legitimately writes half_life
|
|
42
|
+
* too) - ablation arms run on FRESH stores, as
|
|
43
|
+
* the experiment protocol mandates.
|
|
44
|
+
* HIPPO_ABLATE_OUTCOME both outcome channels := neutral
|
|
45
|
+
* (= _SLOW + _FAST together). The slow side also
|
|
46
|
+
* silences replay's outcome reward bias
|
|
47
|
+
* (replayPriority). NOT gated: the opt-in
|
|
48
|
+
* `recall --value-aware` rerank (an explicit CLI
|
|
49
|
+
* flag that also reads outcome counts) - ablated
|
|
50
|
+
* arms must not pass it.
|
|
51
|
+
* HIPPO_ABLATE_OUTCOME_SLOW rewardFactor := 1 (no half-life modulation).
|
|
52
|
+
* HIPPO_ABLATE_OUTCOME_FAST hybridSearch outcomeBoost := 1.
|
|
53
|
+
* HIPPO_FAKE_NOW timestamp injected as the default `now` for
|
|
54
|
+
* strength computation and retrieval stamping
|
|
55
|
+
* (simulated-time protocols). MUST be the exact
|
|
56
|
+
* Date.toISOString() form
|
|
57
|
+
* (YYYY-MM-DDTHH:mm:ss.sssZ); validated by
|
|
58
|
+
* round-trip, so junk, locale dates, non-UTC
|
|
59
|
+
* offsets, and rolled-over dates (2026-02-31)
|
|
60
|
+
* all fall back to the real clock.
|
|
61
|
+
*
|
|
62
|
+
* Formula notes (load-bearing for the experiments) - ablating decay has TWO
|
|
63
|
+
* intrinsic co-effects, because the unified formula routes other mechanisms
|
|
64
|
+
* THROUGH the decay term. Both are real properties of the architecture, not
|
|
65
|
+
* implementation accidents; experiment analysis must attribute accordingly
|
|
66
|
+
* (the decay-off arm is "decay + its dependents off", see prereg amendment A1):
|
|
67
|
+
* 1. Read-side strengthening flattens: raw = retrievalBoost * emotionalMult
|
|
68
|
+
* >= 1, and the [0,1] clamp caps it at 1.0 - the recall boost can only
|
|
69
|
+
* offset decay, never exceed baseline. (Write-side still runs.)
|
|
70
|
+
* 2. Outcome-slow goes inert: rewardFactor only acts by scaling the
|
|
71
|
+
* effective half-life INSIDE the decay exponent; with decay := 1 there
|
|
72
|
+
* is no exponent for it to modulate. Outcome-slow is decay-rate
|
|
73
|
+
* modulation BY DESIGN, so "no decay" necessarily means "no slow
|
|
74
|
+
* channel" (the fast channel in hybridSearch is unaffected).
|
|
75
|
+
*
|
|
76
|
+
* Env caching follows the house pattern (see getLossAversionRatio in
|
|
77
|
+
* memory.ts): read once per process, with a test-only reset helper. Tests
|
|
78
|
+
* that mutate these env vars MUST call _resetAblationCacheForTests() in BOTH
|
|
79
|
+
* beforeEach AND afterEach.
|
|
80
|
+
*/
|
|
81
|
+
let _cache;
|
|
82
|
+
function isTruthy(value) {
|
|
83
|
+
return value === '1' || value === 'true';
|
|
84
|
+
}
|
|
85
|
+
function readFlags() {
|
|
86
|
+
if (_cache !== undefined)
|
|
87
|
+
return _cache;
|
|
88
|
+
const outcomeBoth = isTruthy(process.env.HIPPO_ABLATE_OUTCOME);
|
|
89
|
+
let fakeNowMs = null;
|
|
90
|
+
const rawNow = process.env.HIPPO_FAKE_NOW;
|
|
91
|
+
if (rawNow !== undefined && rawNow !== '') {
|
|
92
|
+
// STRICT canonical form only: exactly what Date.prototype.toISOString
|
|
93
|
+
// emits (YYYY-MM-DDTHH:mm:ss.sssZ), verified by ROUND-TRIP equality.
|
|
94
|
+
// Two codex P2s drove this: (1) Date.parse accepts junk like '1' or
|
|
95
|
+
// locale-dependent '06/11/2026'; (2) a regex alone still admits
|
|
96
|
+
// rolled-over dates ('2026-02-31T...Z' silently becomes March 3). A
|
|
97
|
+
// value that does not round-trip byte-identical falls back to the real
|
|
98
|
+
// clock, exactly as documented.
|
|
99
|
+
const parsed = Date.parse(rawNow);
|
|
100
|
+
if (Number.isFinite(parsed) && new Date(parsed).toISOString() === rawNow) {
|
|
101
|
+
fakeNowMs = parsed;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
_cache = {
|
|
105
|
+
decay: isTruthy(process.env.HIPPO_ABLATE_DECAY),
|
|
106
|
+
recallBoost: isTruthy(process.env.HIPPO_ABLATE_RECALL_BOOST),
|
|
107
|
+
outcomeSlow: outcomeBoth || isTruthy(process.env.HIPPO_ABLATE_OUTCOME_SLOW),
|
|
108
|
+
outcomeFast: outcomeBoth || isTruthy(process.env.HIPPO_ABLATE_OUTCOME_FAST),
|
|
109
|
+
fakeNowMs,
|
|
110
|
+
};
|
|
111
|
+
return _cache;
|
|
112
|
+
}
|
|
113
|
+
export function isDecayAblated() {
|
|
114
|
+
return readFlags().decay;
|
|
115
|
+
}
|
|
116
|
+
export function isRecallBoostAblated() {
|
|
117
|
+
return readFlags().recallBoost;
|
|
118
|
+
}
|
|
119
|
+
export function isOutcomeSlowAblated() {
|
|
120
|
+
return readFlags().outcomeSlow;
|
|
121
|
+
}
|
|
122
|
+
export function isOutcomeFastAblated() {
|
|
123
|
+
return readFlags().outcomeFast;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and
|
|
127
|
+
* parseable, else the real clock. Callers that already take an explicit `now`
|
|
128
|
+
* parameter are unaffected (explicit always wins).
|
|
129
|
+
*/
|
|
130
|
+
export function evalNow() {
|
|
131
|
+
const ms = readFlags().fakeNowMs;
|
|
132
|
+
return ms === null ? new Date() : new Date(ms);
|
|
133
|
+
}
|
|
134
|
+
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
135
|
+
export function _resetAblationCacheForTests() {
|
|
136
|
+
_cache = undefined;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=ablation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ablation.js","sourceRoot":"","sources":["../../src/ablation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAWH,IAAI,MAAiC,CAAC;AAEtC,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1C,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,gEAAgE;QAChE,oEAAoE;QACpE,uEAAuE;QACvE,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACzE,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,GAAG;QACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC/C,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC5D,WAAW,EAAE,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3E,WAAW,EAAE,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3E,SAAS;KACV,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,SAAS,EAAE,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,SAAS,CAAC;IACjC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,SAAS,CAAC;AACrB,CAAC"}
|
package/dist/src/ambient.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* representation that tells the agent "where it is" in knowledge-space
|
|
7
7
|
* without retrieving specific memories.
|
|
8
8
|
*/
|
|
9
|
+
import { evalNow } from './ablation.js';
|
|
9
10
|
import { Layer } from './memory.js';
|
|
10
11
|
import { calculateStrength } from './memory.js';
|
|
11
12
|
export function computeAmbientState(entries, now) {
|
|
@@ -18,7 +19,7 @@ export function computeAmbientState(entries, now) {
|
|
|
18
19
|
extractionCoverage: 0, dagDepth: 0, totalMemories: 0,
|
|
19
20
|
};
|
|
20
21
|
}
|
|
21
|
-
const currentTime = now ??
|
|
22
|
+
const currentTime = now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
22
23
|
const tagCounts = new Map();
|
|
23
24
|
let strengthSum = 0;
|
|
24
25
|
let freshCount = 0;
|
package/dist/src/ambient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambient.js","sourceRoot":"","sources":["../../src/ambient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"ambient.js","sourceRoot":"","sources":["../../src/ambient.ts"],"names":[],"mappings":"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"}
|
package/dist/src/api.js
CHANGED
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { createHash } from 'node:crypto';
|
|
10
10
|
import { openHippoDb, closeHippoDb } from './db.js';
|
|
11
|
-
import { writeEntry, writeEntryDbOnly, writeEntryMirrors, readEntry, deleteEntry, loadRecallSearchEntries, loadEntriesByIds, loadChildrenOf, loadFreshRawMemories, loadSessionRawMemories, countSessionRawMemories, DEFAULT_SEARCH_CANDIDATE_LIMIT, RECALL_DEFAULT_DENY_SCOPES, removeEntryMirrors, loadActiveTaskSnapshot, loadLatestHandoff, listSessionEvents, loadIndex, saveIndex, loadAllEntries, updateStats, isInitialized, markSummaryDirtyInTx, } from './store.js';
|
|
11
|
+
import { writeEntry, writeEntryDbOnly, stampOriginProject, writeEntryMirrors, readEntry, deleteEntry, loadRecallSearchEntries, loadEntriesByIds, loadChildrenOf, loadFreshRawMemories, loadSessionRawMemories, countSessionRawMemories, DEFAULT_SEARCH_CANDIDATE_LIMIT, RECALL_DEFAULT_DENY_SCOPES, removeEntryMirrors, loadActiveTaskSnapshot, loadLatestHandoff, listSessionEvents, loadIndex, saveIndex, loadAllEntries, updateStats, isInitialized, markSummaryDirtyInTx, } from './store.js';
|
|
12
12
|
import { createMemory, applyOutcome, calculateStrength, Layer, } from './memory.js';
|
|
13
13
|
import { appendAuditEvent, queryAuditEvents, auditMemories, } from './audit.js';
|
|
14
14
|
import { promoteToGlobal, getGlobalRoot, autoShare, searchBothHybrid } from './shared.js';
|
|
15
|
+
import { evalNow, isRecallBoostAblated } from './ablation.js';
|
|
15
16
|
import { archiveRawMemory } from './raw-archive.js';
|
|
16
17
|
import { createApiKey, listApiKeys, revokeApiKey, } from './auth.js';
|
|
17
18
|
import { applyGoalStackBoost } from './goals.js';
|
|
@@ -19,6 +20,8 @@ import { markRetrieved, estimateTokens, hybridSearch, physicsSearch } from './se
|
|
|
19
20
|
import { scopeMatch } from './scope.js';
|
|
20
21
|
import { consolidate } from './consolidate.js';
|
|
21
22
|
import { loadConfig } from './config.js';
|
|
23
|
+
import { resolveProjectIdentity, classifyOriginProject } from './project-identity.js';
|
|
24
|
+
import { detectSecret } from './secret-detect.js';
|
|
22
25
|
import { deduplicateStore } from './dedupe.js';
|
|
23
26
|
import { computeAmbientState } from './ambient.js';
|
|
24
27
|
import { loadPendingExtractionTenants, markPendingProcessedUpTo } from './graph.js';
|
|
@@ -111,6 +114,46 @@ export function passesScopeFilterForRecall(scope, requested) {
|
|
|
111
114
|
export function isPrivateScope(scope) {
|
|
112
115
|
return typeof scope === 'string' && PRIVATE_SCOPE_RE.test(scope);
|
|
113
116
|
}
|
|
117
|
+
// v39: classifyOriginProject lives in project-identity.ts (leaf) so
|
|
118
|
+
// shared.ts can use it without an api.ts import cycle. Re-exported here for
|
|
119
|
+
// callers that already import the api surface.
|
|
120
|
+
export { classifyOriginProject } from './project-identity.js';
|
|
121
|
+
/**
|
|
122
|
+
* v39: the single ambient-injection admission policy, shared by getContext
|
|
123
|
+
* and the CLI-side ambient-state summary so the two cannot drift.
|
|
124
|
+
*
|
|
125
|
+
* - S4 secret veto is UNCONDITIONAL: neither crossProject nor
|
|
126
|
+
* contextProjectIsolation:false re-includes secrets. A flagged row only
|
|
127
|
+
* injects inside its owning project; flagged rows with no project origin
|
|
128
|
+
* (''/null) never ambient-inject at all. Explicit recall is unaffected -
|
|
129
|
+
* recalling a secret is a deliberate act.
|
|
130
|
+
* - S2 envelope parity: private scopes + quarantine buckets never inject.
|
|
131
|
+
* - S3 origin partition: other-project rows are excluded unless
|
|
132
|
+
* `includeCrossProject`.
|
|
133
|
+
*/
|
|
134
|
+
export function ambientAdmitEntry(e, currentProjectName, includeCrossProject) {
|
|
135
|
+
if (!ambientSecretAdmit(e, currentProjectName))
|
|
136
|
+
return false;
|
|
137
|
+
if (!passesScopeFilterForRecall(e.scope ?? null, undefined))
|
|
138
|
+
return false;
|
|
139
|
+
if (includeCrossProject)
|
|
140
|
+
return true;
|
|
141
|
+
return classifyOriginProject(e.origin_project, currentProjectName) !== 'cross-project';
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* v39 S4: the secret half of the ambient policy on its own, for surfaces
|
|
145
|
+
* with their own scope semantics (MCP hippo_context's explicit-scope
|
|
146
|
+
* exact-match). A flagged row is only admitted inside its owning project;
|
|
147
|
+
* flagged rows with no project origin never ambient-inject.
|
|
148
|
+
*/
|
|
149
|
+
export function ambientSecretAdmit(e, currentProjectName) {
|
|
150
|
+
if (!detectSecret(e).flagged)
|
|
151
|
+
return true;
|
|
152
|
+
const origin = e.origin_project;
|
|
153
|
+
if (origin === undefined || origin === null || origin === '')
|
|
154
|
+
return false;
|
|
155
|
+
return origin === currentProjectName;
|
|
156
|
+
}
|
|
114
157
|
export function remember(ctx, opts) {
|
|
115
158
|
const entry = createMemory(opts.content, {
|
|
116
159
|
kind: opts.kind ?? 'distilled',
|
|
@@ -1072,7 +1115,7 @@ export function supersede(ctx, oldId, newContent) {
|
|
|
1072
1115
|
// 2. Write new memory inside same tx via writeEntryDbOnly (DB-only
|
|
1073
1116
|
// path). This emits its OWN 'remember' audit row for the new
|
|
1074
1117
|
// memory inside the SAVEPOINT — atomic with the row INSERT.
|
|
1075
|
-
writeEntryDbOnly(db, newEntry, { actor: ctx.actor.subject });
|
|
1118
|
+
writeEntryDbOnly(db, stampOriginProject(ctx.hippoRoot, newEntry), { actor: ctx.actor.subject });
|
|
1076
1119
|
// 3. User-facing 'supersede' audit row inside the same tx so the
|
|
1077
1120
|
// chain pointer + audit trail commit atomically.
|
|
1078
1121
|
appendAuditEvent(db, {
|
|
@@ -1332,6 +1375,19 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1332
1375
|
// Filter superseded — context never includes superseded rows.
|
|
1333
1376
|
localEntries = localEntries.filter((e) => !e.superseded_by);
|
|
1334
1377
|
globalEntries = globalEntries.filter((e) => !e.superseded_by);
|
|
1378
|
+
// v39 memory scope isolation (docs/plans/2026-07-01-memory-scope-isolation.md).
|
|
1379
|
+
// S2: envelope-filter parity with api.recall for AMBIENT context - private
|
|
1380
|
+
// scopes and quarantine buckets never inject. `requested` is deliberately
|
|
1381
|
+
// undefined: opts.scope is the scope-TAG boost input here, not an
|
|
1382
|
+
// envelope-scope request (api.recall's exact-match semantics don't apply).
|
|
1383
|
+
// S3: origin partition - other-project memories are excluded unless the
|
|
1384
|
+
// caller explicitly asks for them (crossProject) or isolation is disabled.
|
|
1385
|
+
const isolationEnabled = loadConfig(ctx.hippoRoot).contextProjectIsolation !== false;
|
|
1386
|
+
const currentProjectName = opts.currentProject ?? resolveProjectIdentity(process.cwd()).name;
|
|
1387
|
+
const includeCrossProject = opts.crossProject === true || !isolationEnabled;
|
|
1388
|
+
const ambientAdmit = (e) => ambientAdmitEntry(e, currentProjectName, includeCrossProject);
|
|
1389
|
+
localEntries = localEntries.filter(ambientAdmit);
|
|
1390
|
+
globalEntries = globalEntries.filter(ambientAdmit);
|
|
1335
1391
|
const activeSnapshot = hasLocal
|
|
1336
1392
|
? loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId)
|
|
1337
1393
|
: null;
|
|
@@ -1361,7 +1417,7 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1361
1417
|
}
|
|
1362
1418
|
// Effective budget: explicit opts.budget wins over config.
|
|
1363
1419
|
const effBudget = opts.budget !== undefined ? budget : pinnedCfg.pinnedInject.budget;
|
|
1364
|
-
const nowP =
|
|
1420
|
+
const nowP = evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
1365
1421
|
const selectedIds = new Set();
|
|
1366
1422
|
let usedP = 0;
|
|
1367
1423
|
if (includeRecent > 0) {
|
|
@@ -1425,7 +1481,7 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1425
1481
|
}
|
|
1426
1482
|
else if (query === '*') {
|
|
1427
1483
|
// No query: return strongest memories by strength, up to budget.
|
|
1428
|
-
const now =
|
|
1484
|
+
const now = evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
1429
1485
|
const localRanked = localEntries
|
|
1430
1486
|
.map((e) => ({
|
|
1431
1487
|
entry: e,
|
|
@@ -1456,10 +1512,18 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1456
1512
|
// Real query: hybrid search (global + local) or physics+hybrid (local only).
|
|
1457
1513
|
let results;
|
|
1458
1514
|
if (hasGlobal) {
|
|
1515
|
+
// searchBothHybrid loads from the store roots itself, so the ambient
|
|
1516
|
+
// filter above never saw its candidates. Admission runs INSIDE the
|
|
1517
|
+
// search via the opt-in entryFilter, BEFORE ranking, cross-store
|
|
1518
|
+
// content-dedupe, and budgeting - a post-filter instead would let an
|
|
1519
|
+
// excluded row saturate the budget (codex rounds 1+3) or shadow its
|
|
1520
|
+
// admitted duplicate in the dedupe pass (codex round 4). Recall paths
|
|
1521
|
+
// never set entryFilter, so their behavior is unchanged.
|
|
1459
1522
|
const merged = await searchBothHybrid(query, ctx.hippoRoot, globalRoot, {
|
|
1460
1523
|
budget,
|
|
1461
1524
|
scope: activeScope,
|
|
1462
1525
|
tenantId: ctx.tenantId,
|
|
1526
|
+
entryFilter: ambientAdmit,
|
|
1463
1527
|
});
|
|
1464
1528
|
const localIndex = loadIndex(ctx.hippoRoot);
|
|
1465
1529
|
results = merged.map((r) => ({
|
|
@@ -1534,6 +1598,13 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1534
1598
|
selectedItems = selectedItems.slice(0, limit);
|
|
1535
1599
|
totalTokens = selectedItems.reduce((sum, r) => sum + r.tokens, 0);
|
|
1536
1600
|
}
|
|
1601
|
+
// v39: annotate every returned entry with its origin and how it relates to
|
|
1602
|
+
// the active project, so renderers can demarcate cross-project inclusions.
|
|
1603
|
+
selectedItems = selectedItems.map((r) => ({
|
|
1604
|
+
...r,
|
|
1605
|
+
origin: r.entry.origin_project ?? null,
|
|
1606
|
+
category: classifyOriginProject(r.entry.origin_project, currentProjectName),
|
|
1607
|
+
}));
|
|
1537
1608
|
if (selectedItems.length === 0 &&
|
|
1538
1609
|
!activeSnapshot &&
|
|
1539
1610
|
!sessionHandoff &&
|
|
@@ -1547,13 +1618,19 @@ export async function getContext(ctx, opts = {}) {
|
|
|
1547
1618
|
const toUpdate = selectedItems.map((s) => s.entry);
|
|
1548
1619
|
const updatedEntries = markRetrieved(toUpdate);
|
|
1549
1620
|
const localIndex = loadIndex(ctx.hippoRoot);
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1621
|
+
// EVAL-ONLY ablation (see ablation.ts): under the recall flag,
|
|
1622
|
+
// markRetrieved returns unmutated entries (ids preserved for outcome
|
|
1623
|
+
// attribution) and persistence is skipped (identical-row writes still
|
|
1624
|
+
// refresh updated_at / mirrors / DAG dirty flags).
|
|
1625
|
+
if (!isRecallBoostAblated()) {
|
|
1626
|
+
for (const u of updatedEntries) {
|
|
1627
|
+
const targetRoot = localIndex.entries[u.id]
|
|
1628
|
+
? ctx.hippoRoot
|
|
1629
|
+
: hasGlobal
|
|
1630
|
+
? globalRoot
|
|
1631
|
+
: ctx.hippoRoot;
|
|
1632
|
+
writeEntry(targetRoot, u);
|
|
1633
|
+
}
|
|
1557
1634
|
}
|
|
1558
1635
|
localIndex.last_retrieval_ids = updatedEntries.map((u) => u.id);
|
|
1559
1636
|
saveIndex(ctx.hippoRoot, localIndex);
|