You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(rebase): complete v0.26 resolution — SQL SET comma, dup pi import, two-phase promotion test, config-docs regen
- storage-meta-shared.ts: add missing comma after cached_m0_project_identity
in the persistCachedM0 SET clause (TAKE-BOTH merge dropped the separator).
- inject-compartments-pi.ts: drop duplicate renderExternalMemoryBlock import
(026b856 added it standalone; 2a8cd71 added it to the consolidated block).
- promotion.test.ts: migrate the 3 external-tee tests from the dropped
promoteSessionFactsToMemory to upstream's two-phase
promoteSessionFactsDurable + embedPromotedFacts (tee now lives post-commit).
- configuration.md: regenerate to include memory.external.* rows.
- lint:fix import ordering.
|`memory.git_commit_indexing.enabled`| boolean |`false`| Index HEAD git commits for ctx_search (git_commit source). Graduated from experimental.git_commit_indexing; opt-in, default off. Independent of memory.enabled. |
106
106
|`memory.git_commit_indexing.since_days`| number (7–3650) |`365`| Days of HEAD history to index (min: 7, max: 3650, default: 365) |
107
107
|`memory.git_commit_indexing.max_commits`| number (100–20000) |`2000`| Max commits kept per project; oldest evicted (min: 100, max: 20000, default: 2000) |
|`memory.external.provider`|`"hindsight"`\\|`"off"`|`"off"`| External memory backend. 'hindsight' tees memory creations to a Hindsight service; 'off' disables (default). SECURITY: this whole block only honors USER-level config. |
110
+
|`memory.external.endpoint`| string | — | Backend base URL (e.g. http://10.0.0.1:8889). Required when provider is hindsight. |
111
+
|`memory.external.api_key`| string | — | Bearer token for the backend (optional). |
112
+
|`memory.external.project_bank`| string |`"mc-{name}-{id8}"`| Bank name template for project-scoped items. Placeholders: {name}=project basename, {id8}=first 8 chars of the project identity hash. |
113
+
|`memory.external.main_bank`| string | — | Bank for user- and global-scoped items. Required when provider is hindsight. Assumed to pre-exist; never created or modified. |
114
+
|`memory.external.retain_sources`|`"historian"`\\|`"agent"`\\|`"dreamer"`[]|`["historian","agent","dreamer"]`| Which creation points tee: historian promotion, agent ctx_memory writes, dreamer user-memory promotion. |
115
+
|`memory.external.tags`| string[]|`[]`| Static tags attached to every retained item. |
|`memory.external.recall.enabled`| boolean |`true`| Session-start recall from the external backend, merged into the context injection (default: true). |
118
+
|`memory.external.recall.timeout_ms`| number (500–15000) |`3000`| Max wait for recall at the first render of a session (already cache-cold). Late results ride the m[1] delta. (default: 3000) |
119
+
|`memory.external.recall.max_tokens`| number (256–8192) |`2048`| Token budget per recall slice (project / profile / global each). (default: 2048) |
120
+
|`memory.external.recall.dedup_threshold`| number (0.5–0.99) |`0.85`| Cosine similarity above which a recalled item is dropped as a duplicate of a local memory. Hash-only fallback when embeddings are unavailable. (default: 0.85) |
121
+
|`memory.external.recall.global_tags`| string[]|`[]`| Tag filter for the global (main-bank) recall slice, matched with tags_match 'any' (untagged content INCLUDED). Empty = no filter (full autoRecall replacement). |
122
+
|`memory.external.recall.global_from_prompt`| boolean |`false`| Include an excerpt of the session's FIRST user prompt in the global-slice recall query (the project name is always included). The first prompt is fixed for the session, so the query — and the frozen recall snapshot — stays deterministic. Default false: pure template query. |
123
+
|`memory.external.recall.search`| boolean |`true`| Expose the ctx_search 'external' source (project + main bank). (default: true) |
124
+
|`memory.external.recall.mental_models`| boolean |`true`| Use Hindsight mental models as the fast path for the project/profile recall slices (single GET, server-refreshed), falling back to recall when absent/empty. (default: true) |
125
+
|`memory.external.recall.profile_mental_models`| string[]|`["user-preferences"]`| Main-bank mental-model names (case-insensitive) used for the profile slice. The main bank is never modified by the plugin — create these manually. |
`Queued global memory in ${rawCategory} for the long-term store (origin: this project). It has no local ID; it surfaces via the session-start global recall slice and ctx_search source "external" from the next session onward.`,
439
+
);
440
+
}
441
+
442
+
constexisting=getMemoryByHash(
443
+
deps.db,
444
+
projectIdentity,
445
+
rawCategory,
446
+
computeNormalizedHash(content),
447
+
);
448
+
if(existing){
449
+
updateMemorySeenCount(deps.db,existing.id);
450
+
returnok(
451
+
`Memory already exists [ID: ${existing.id}] in ${rawCategory} (seen count incremented).`,
`Queued global memory in ${rawCategory} for the long-term store (origin: this project). It has no local ID; it surfaces via the session-start global recall slice and ctx_search source "external" from the next session onward.`,
439
-
);
440
-
}
441
486
442
-
constexisting=getMemoryByHash(
443
-
deps.db,
444
-
projectIdentity,
445
-
rawCategory,
446
-
computeNormalizedHash(content),
447
-
);
448
-
if(existing){
449
-
updateMemorySeenCount(deps.db,existing.id);
450
-
returnok(
451
-
`Memory already exists [ID: ${existing.id}] in ${rawCategory} (seen count incremented).`,
452
-
);
487
+
returnok(`Saved memory [ID: ${memory.id}] in ${rawCategory}.`);
0 commit comments