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.
Files changed (147) hide show
  1. package/README.md +16 -5
  2. package/bin/hippo.js +2 -2
  3. package/dist/ablation.d.ts +93 -0
  4. package/dist/ablation.d.ts.map +1 -0
  5. package/dist/ablation.js +138 -0
  6. package/dist/ablation.js.map +1 -0
  7. package/dist/ambient.d.ts.map +1 -1
  8. package/dist/ambient.js +2 -1
  9. package/dist/ambient.js.map +1 -1
  10. package/dist/api.d.ts +37 -0
  11. package/dist/api.d.ts.map +1 -1
  12. package/dist/api.js +88 -11
  13. package/dist/api.js.map +1 -1
  14. package/dist/benchmarks/e1.3/scenarios.json +2587 -0
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +117 -18
  17. package/dist/cli.js.map +1 -1
  18. package/dist/config.d.ts +8 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +2 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/connectors/github/backfill.js +4 -4
  23. package/dist/connectors/github/cli-impl.js +6 -6
  24. package/dist/connectors/github/dlq.js +14 -14
  25. package/dist/connectors/slack/backfill.js +1 -1
  26. package/dist/connectors/slack/dlq.js +10 -10
  27. package/dist/connectors/slack/workspaces.js +4 -4
  28. package/dist/consolidate.d.ts.map +1 -1
  29. package/dist/consolidate.js +27 -5
  30. package/dist/consolidate.js.map +1 -1
  31. package/dist/dag.js +6 -6
  32. package/dist/dashboard.js +7 -7
  33. package/dist/db.d.ts.map +1 -1
  34. package/dist/db.js +55 -4
  35. package/dist/db.js.map +1 -1
  36. package/dist/hooks.js +24 -24
  37. package/dist/importers.d.ts +28 -0
  38. package/dist/importers.d.ts.map +1 -1
  39. package/dist/importers.js +412 -1
  40. package/dist/importers.js.map +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/mcp/server.d.ts.map +1 -1
  46. package/dist/mcp/server.js +44 -7
  47. package/dist/mcp/server.js.map +1 -1
  48. package/dist/memory.d.ts +9 -0
  49. package/dist/memory.d.ts.map +1 -1
  50. package/dist/memory.js +29 -6
  51. package/dist/memory.js.map +1 -1
  52. package/dist/physics-state.d.ts.map +1 -1
  53. package/dist/physics-state.js +4 -3
  54. package/dist/physics-state.js.map +1 -1
  55. package/dist/physics.d.ts.map +1 -1
  56. package/dist/physics.js +8 -1
  57. package/dist/physics.js.map +1 -1
  58. package/dist/predictions.js +67 -67
  59. package/dist/project-identity.d.ts +84 -0
  60. package/dist/project-identity.d.ts.map +1 -0
  61. package/dist/project-identity.js +184 -0
  62. package/dist/project-identity.js.map +1 -0
  63. package/dist/refine-llm.js +13 -13
  64. package/dist/replay.d.ts.map +1 -1
  65. package/dist/replay.js +4 -1
  66. package/dist/replay.js.map +1 -1
  67. package/dist/search.d.ts +14 -0
  68. package/dist/search.d.ts.map +1 -1
  69. package/dist/search.js +36 -7
  70. package/dist/search.js.map +1 -1
  71. package/dist/secret-detect.d.ts +33 -0
  72. package/dist/secret-detect.d.ts.map +1 -0
  73. package/dist/secret-detect.js +70 -0
  74. package/dist/secret-detect.js.map +1 -0
  75. package/dist/server.d.ts.map +1 -1
  76. package/dist/server.js +11 -0
  77. package/dist/server.js.map +1 -1
  78. package/dist/shared.d.ts +9 -1
  79. package/dist/shared.d.ts.map +1 -1
  80. package/dist/shared.js +67 -16
  81. package/dist/shared.js.map +1 -1
  82. package/dist/src/ablation.js +138 -0
  83. package/dist/src/ablation.js.map +1 -0
  84. package/dist/src/ambient.js +2 -1
  85. package/dist/src/ambient.js.map +1 -1
  86. package/dist/src/api.js +88 -11
  87. package/dist/src/api.js.map +1 -1
  88. package/dist/src/cli.js +117 -18
  89. package/dist/src/cli.js.map +1 -1
  90. package/dist/src/config.js +2 -0
  91. package/dist/src/config.js.map +1 -1
  92. package/dist/src/connectors/github/backfill.js +4 -4
  93. package/dist/src/connectors/github/cli-impl.js +6 -6
  94. package/dist/src/connectors/github/dlq.js +14 -14
  95. package/dist/src/connectors/slack/backfill.js +1 -1
  96. package/dist/src/connectors/slack/dlq.js +10 -10
  97. package/dist/src/connectors/slack/workspaces.js +4 -4
  98. package/dist/src/consolidate.js +27 -5
  99. package/dist/src/consolidate.js.map +1 -1
  100. package/dist/src/dag.js +6 -6
  101. package/dist/src/dashboard.js +7 -7
  102. package/dist/src/db.js +55 -4
  103. package/dist/src/db.js.map +1 -1
  104. package/dist/src/hooks.js +24 -24
  105. package/dist/src/importers.js +412 -1
  106. package/dist/src/importers.js.map +1 -1
  107. package/dist/src/index.js +1 -1
  108. package/dist/src/index.js.map +1 -1
  109. package/dist/src/mcp/server.js +44 -7
  110. package/dist/src/mcp/server.js.map +1 -1
  111. package/dist/src/memory.js +29 -6
  112. package/dist/src/memory.js.map +1 -1
  113. package/dist/src/physics-state.js +4 -3
  114. package/dist/src/physics-state.js.map +1 -1
  115. package/dist/src/physics.js +8 -1
  116. package/dist/src/physics.js.map +1 -1
  117. package/dist/src/predictions.js +67 -67
  118. package/dist/src/project-identity.js +184 -0
  119. package/dist/src/project-identity.js.map +1 -0
  120. package/dist/src/refine-llm.js +13 -13
  121. package/dist/src/replay.js +4 -1
  122. package/dist/src/replay.js.map +1 -1
  123. package/dist/src/search.js +36 -7
  124. package/dist/src/search.js.map +1 -1
  125. package/dist/src/secret-detect.js +70 -0
  126. package/dist/src/secret-detect.js.map +1 -0
  127. package/dist/src/server.js +11 -0
  128. package/dist/src/server.js.map +1 -1
  129. package/dist/src/shared.js +67 -16
  130. package/dist/src/shared.js.map +1 -1
  131. package/dist/src/store.js +66 -11
  132. package/dist/src/store.js.map +1 -1
  133. package/dist/src/version.js +1 -1
  134. package/dist/src/working-memory.js +19 -19
  135. package/dist/store.d.ts +15 -0
  136. package/dist/store.d.ts.map +1 -1
  137. package/dist/store.js +66 -11
  138. package/dist/store.js.map +1 -1
  139. package/dist/version.d.ts +1 -1
  140. package/dist/version.js +1 -1
  141. package/dist/working-memory.js +19 -19
  142. package/dist-ui/index.html +12 -12
  143. package/extensions/openclaw-plugin/index.ts +650 -650
  144. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  145. package/extensions/openclaw-plugin/package.json +1 -1
  146. package/openclaw.plugin.json +1 -1
  147. package/package.json +3 -1
@@ -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
- const hippoHome = process.env.HIPPO_HOME?.trim();
19
- if (hippoHome)
20
- return hippoHome;
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 = new Date(), minResults, tenantId } = options;
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 = new Date(), embeddingWeight, explain, mmr, mmrLambda, localBump = 1.2, minResults, scope, includeSuperseded, asOf, tenantId, summaryDeboost, summaryFreshness } = options;
115
- const localEntries = fs.existsSync(localRoot) ? loadSearchEntries(localRoot, query, undefined, tenantId) : [];
116
- const globalEntries = fs.existsSync(globalRoot) ? loadSearchEntries(globalRoot, query, undefined, tenantId) : [];
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
- const projectName = path.basename(path.resolve(localRoot, '..'));
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:${projectName}:${new Date().toISOString()}`,
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
  }
@@ -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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"}
package/dist/src/store.js CHANGED
@@ -13,6 +13,7 @@ import { rowToSessionHandoff } from './handoff.js';
13
13
  import { tokenize } from './search.js';
14
14
  import { appendAuditEvent } from './audit.js';
15
15
  import { resolveTenantId } from './tenant.js';
16
+ import { deriveOriginProject, originFromSource } from './project-identity.js';
16
17
  /**
17
18
  * Emit an audit event for a mutation against `db`. Wrapped so a broken audit
18
19
  * log can never crash the surrounding mutation — the SQLite store is still the
@@ -34,13 +35,13 @@ function audit(db, op, targetId, metadata, actor = 'cli', tenantId) {
34
35
  }
35
36
  }
36
37
  const INDEX_VERSION = 3;
37
- const MEMORY_SELECT_COLUMNS = `id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at`;
38
+ const MEMORY_SELECT_COLUMNS = `id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, origin_project, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at`;
38
39
  // F1 (v1.7.0): qualified-and-aliased columns for the FTS join in
39
40
  // loadSearchRows. Every column is `m.<col> AS <col>` so rowToEntry's
40
41
  // unqualified field reads keep working unchanged. The trailing
41
42
  // bm25(memories_fts) AS bm25_score adds the FTS rank as a result column.
42
43
  // Only used inside the FTS path; non-FTS paths keep MEMORY_SELECT_COLUMNS.
43
- const MEMORY_SEARCH_COLUMNS = `m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score`;
44
+ const MEMORY_SEARCH_COLUMNS = `m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.origin_project AS origin_project, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score`;
44
45
  /**
45
46
  * Default candidate-pool size for `loadSearchEntries` when called with
46
47
  * `limit === undefined`. Single source of truth; `api.recall` imports
@@ -152,6 +153,11 @@ export function serializeEntry(entry) {
152
153
  if (tenantId !== 'default') {
153
154
  frontmatter['tenant_id'] = tenantId;
154
155
  }
156
+ // v39: origin_project '' (user-global) is meaningful and must round-trip;
157
+ // only undefined/null (legacy/unstamped) is omitted.
158
+ if (entry.origin_project !== undefined && entry.origin_project !== null) {
159
+ frontmatter['origin_project'] = entry.origin_project;
160
+ }
155
161
  const fm = dumpFrontmatter(frontmatter);
156
162
  return `${fm}\n\n${entry.content}\n`;
157
163
  }
@@ -199,6 +205,7 @@ export function deserializeEntry(raw) {
199
205
  owner: data['owner'] === null || data['owner'] === undefined ? null : String(data['owner']),
200
206
  artifact_ref: data['artifact_ref'] === null || data['artifact_ref'] === undefined ? null : String(data['artifact_ref']),
201
207
  tenantId: data['tenant_id'] === null || data['tenant_id'] === undefined ? 'default' : String(data['tenant_id']),
208
+ origin_project: data['origin_project'] === null || data['origin_project'] === undefined ? null : String(data['origin_project']),
202
209
  };
203
210
  }
204
211
  function normalizeStringArray(value) {
@@ -240,6 +247,7 @@ function rowToEntry(row) {
240
247
  owner: row.owner ?? null,
241
248
  artifact_ref: row.artifact_ref ?? null,
242
249
  tenantId: row.tenant_id ?? 'default',
250
+ origin_project: row.origin_project ?? null,
243
251
  descendant_count: Number(row.descendant_count ?? 0),
244
252
  earliest_at: row.earliest_at ?? null,
245
253
  latest_at: row.latest_at ?? null,
@@ -598,7 +606,9 @@ function bootstrapLegacyStore(db, hippoRoot) {
598
606
  db.exec('BEGIN');
599
607
  try {
600
608
  for (const entry of legacyEntries) {
601
- upsertEntryRow(db, entry);
609
+ // v39: legacy markdown carries no origin_project; stamp from the store
610
+ // location so bootstrapped rows stay visible to ambient context.
611
+ upsertEntryRow(db, stampOriginProjectForImport(hippoRoot, entry));
602
612
  }
603
613
  const legacyIndex = loadLegacyIndexFile(hippoRoot);
604
614
  setMeta(db, 'last_retrieval_ids', JSON.stringify(legacyIndex.last_retrieval_ids ?? []));
@@ -686,11 +696,11 @@ function upsertEntryRow(db, entry) {
686
696
  extracted_from,
687
697
  dag_level, dag_parent_id,
688
698
  kind, scope, owner, artifact_ref,
689
- tenant_id,
699
+ tenant_id, origin_project,
690
700
  descendant_count, earliest_at, latest_at,
691
701
  dag_level_3_built_at,
692
702
  updated_at
693
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))
703
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))
694
704
  ON CONFLICT(id) DO UPDATE SET
695
705
  created = excluded.created,
696
706
  last_retrieved = excluded.last_retrieved,
@@ -723,12 +733,13 @@ function upsertEntryRow(db, entry) {
723
733
  owner = excluded.owner,
724
734
  artifact_ref = excluded.artifact_ref,
725
735
  tenant_id = excluded.tenant_id,
736
+ origin_project = excluded.origin_project,
726
737
  descendant_count = excluded.descendant_count,
727
738
  earliest_at = excluded.earliest_at,
728
739
  latest_at = excluded.latest_at,
729
740
  dag_level_3_built_at = excluded.dag_level_3_built_at,
730
741
  updated_at = datetime('now')
731
- `).run(entry.id, entry.created, entry.last_retrieved, entry.retrieval_count, entry.strength, entry.half_life_days, entry.layer, JSON.stringify(entry.tags ?? []), entry.emotional_valence, entry.schema_fit, entry.source, entry.outcome_score, entry.outcome_positive ?? 0, entry.outcome_negative ?? 0, JSON.stringify(entry.conflicts_with ?? []), entry.pinned ? 1 : 0, entry.confidence, entry.content, JSON.stringify(entry.parents ?? []), entry.starred ? 1 : 0, entry.trace_outcome ?? null, entry.source_session_id ?? null, entry.valid_from ?? entry.created, entry.superseded_by ?? null, entry.extracted_from ?? null, entry.dag_level ?? 0, entry.dag_parent_id ?? null, entry.kind ?? 'distilled', entry.scope ?? null, entry.owner ?? null, entry.artifact_ref ?? null, entry.tenantId ?? 'default', entry.descendant_count ?? 0, entry.earliest_at ?? null, entry.latest_at ?? null, entry.dag_level_3_built_at ?? null);
742
+ `).run(entry.id, entry.created, entry.last_retrieved, entry.retrieval_count, entry.strength, entry.half_life_days, entry.layer, JSON.stringify(entry.tags ?? []), entry.emotional_valence, entry.schema_fit, entry.source, entry.outcome_score, entry.outcome_positive ?? 0, entry.outcome_negative ?? 0, JSON.stringify(entry.conflicts_with ?? []), entry.pinned ? 1 : 0, entry.confidence, entry.content, JSON.stringify(entry.parents ?? []), entry.starred ? 1 : 0, entry.trace_outcome ?? null, entry.source_session_id ?? null, entry.valid_from ?? entry.created, entry.superseded_by ?? null, entry.extracted_from ?? null, entry.dag_level ?? 0, entry.dag_parent_id ?? null, entry.kind ?? 'distilled', entry.scope ?? null, entry.owner ?? null, entry.artifact_ref ?? null, entry.tenantId ?? 'default', entry.origin_project ?? null, entry.descendant_count ?? 0, entry.earliest_at ?? null, entry.latest_at ?? null, entry.dag_level_3_built_at ?? null);
732
743
  syncFtsRow(db, entry);
733
744
  }
734
745
  function syncFtsRow(db, entry) {
@@ -847,13 +858,51 @@ export function saveIndex(hippoRoot, index) {
847
858
  * filesystem mirrors / audit emit never run. Used by E1.3+ connectors to
848
859
  * stamp idempotency rows atomically with the memory write.
849
860
  */
861
+ /**
862
+ * Stamp origin_project from the store's own location when the entry has
863
+ * never been stamped (v39 memory scope isolation). The store dir is
864
+ * `<project>/.hippo`, so its parent resolves to the owning project; the
865
+ * home/global store resolves to '' (user-global). Callers that know a better
866
+ * origin (shareMemory, syncGlobalToLocal) set entry.origin_project before
867
+ * writing and this is a no-op. Returns a stamped copy; never mutates.
868
+ *
869
+ * NULL is deliberately PRESERVED, not re-stamped: null means "legacy row the
870
+ * v39 migration found no evidence for" and is deny-by-default in ambient
871
+ * context. A writeback (e.g. markRetrieved on a crossProject-included row)
872
+ * must not launder it into an injectable origin - the migration is the only
873
+ * evidence-based NULL converter (codex gating round 2 P1).
874
+ */
875
+ export function stampOriginProject(hippoRoot, entry) {
876
+ if (entry.origin_project !== undefined)
877
+ return entry;
878
+ return { ...entry, origin_project: deriveOriginProject(path.dirname(hippoRoot)) };
879
+ }
880
+ /**
881
+ * Import-time variant that ALSO stamps null: used only where evidence exists
882
+ * for rows that predate the origin column - the legacy-markdown bootstrap and
883
+ * rebuildIndex import, which are the markdown-store equivalent of the v39 SQL
884
+ * backfill. Same evidence order as the migration: the provenance source
885
+ * (`shared:<project>:` / `promoted:<localRoot>`) wins over the destination
886
+ * store's location, so a shared row imported into the global store keeps its
887
+ * owning project instead of becoming user-global (codex gating round 3 P1).
888
+ */
889
+ function stampOriginProjectForImport(hippoRoot, entry) {
890
+ if (entry.origin_project !== undefined && entry.origin_project !== null)
891
+ return entry;
892
+ const fromSource = originFromSource(entry.source);
893
+ return {
894
+ ...entry,
895
+ origin_project: fromSource ?? deriveOriginProject(path.dirname(hippoRoot)),
896
+ };
897
+ }
850
898
  export function writeEntry(hippoRoot, entry, opts) {
851
899
  initStore(hippoRoot);
900
+ const stamped = stampOriginProject(hippoRoot, entry);
852
901
  const db = openHippoDb(hippoRoot);
853
902
  try {
854
- writeEntryDbOnly(db, entry, opts);
903
+ writeEntryDbOnly(db, stamped, opts);
855
904
  opts?.afterCommit?.();
856
- writeEntryMirrors(hippoRoot, db, entry);
905
+ writeEntryMirrors(hippoRoot, db, stamped);
857
906
  }
858
907
  finally {
859
908
  closeHippoDb(db);
@@ -1176,7 +1225,12 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1176
1225
  }
1177
1226
  }
1178
1227
  }
1179
- for (const entry of toWrite) {
1228
+ // v39: consolidate's new semantic rows (and any other batch writer)
1229
+ // bypass writeEntry, so stamp store-derived origins here too - a NULL
1230
+ // origin would make freshly consolidated memories vanish from ambient
1231
+ // context (codex gating review P1).
1232
+ const stampedWrites = toWrite.map((e) => stampOriginProject(hippoRoot, e));
1233
+ for (const entry of stampedWrites) {
1180
1234
  upsertEntryRow(db, entry);
1181
1235
  // Hook for writes: child upserted under a level-2 summary marks parent dirty.
1182
1236
  if (entry.dag_parent_id) {
@@ -1195,7 +1249,7 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1195
1249
  }
1196
1250
  db.exec('COMMIT');
1197
1251
  // Sync mirrors once after all DB writes
1198
- for (const entry of toWrite) {
1252
+ for (const entry of stampedWrites) {
1199
1253
  writeMarkdownMirror(hippoRoot, entry);
1200
1254
  }
1201
1255
  for (const id of toDeleteIds) {
@@ -1293,7 +1347,8 @@ export function rebuildIndex(hippoRoot) {
1293
1347
  db.exec('BEGIN');
1294
1348
  try {
1295
1349
  for (const entry of legacyEntries) {
1296
- upsertEntryRow(db, entry);
1350
+ // v39: same store-derived origin stamp as bootstrapLegacyStore.
1351
+ upsertEntryRow(db, stampOriginProjectForImport(hippoRoot, entry));
1297
1352
  }
1298
1353
  db.exec('COMMIT');
1299
1354
  }