@remnic/core 9.69.74 → 9.69.75
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/access-admin-ops-surface.js +21 -21
- package/dist/access-authorization-probe.js +22 -22
- package/dist/access-boundary.js +21 -21
- package/dist/access-cli.js +71 -70
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +21 -21
- package/dist/access-http-briefing.js +22 -22
- package/dist/access-http-query.js +23 -23
- package/dist/access-http.js +40 -40
- package/dist/access-identity-continuity-surface.js +21 -21
- package/dist/access-lcm-surface.js +21 -21
- package/dist/access-mcp.js +31 -31
- package/dist/access-namespace-preflight.js +21 -21
- package/dist/access-observe-write-category.js +5 -5
- package/dist/access-observe-write-surface.js +21 -21
- package/dist/access-operations-batch.js +23 -23
- package/dist/access-operations.js +30 -30
- package/dist/access-recall-concurrency.js +21 -21
- package/dist/access-recall-response.js +21 -21
- package/dist/access-recall-surface.js +21 -21
- package/dist/access-schema.js +4 -4
- package/dist/access-service.js +21 -21
- package/dist/access-surface-catalog.js +23 -23
- package/dist/active-recall.js +6 -6
- package/dist/briefing.js +5 -5
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/causal-consolidation.js +6 -6
- package/dist/{chunk-Y4IQFWGD.js → chunk-25LKLNSJ.js} +2 -2
- package/dist/{chunk-ZMV67JXV.js → chunk-4GPI3GVE.js} +4 -4
- package/dist/{chunk-2IH2WNM6.js → chunk-5HP5F2SQ.js} +3 -3
- package/dist/{chunk-BMTR244T.js → chunk-5KNEOYTF.js} +2 -2
- package/dist/{chunk-ZIJ5FAI4.js → chunk-5LPDXYU3.js} +4 -4
- package/dist/{chunk-BFUYPEJB.js → chunk-62AE2EUZ.js} +2 -2
- package/dist/{chunk-GLX4SU4W.js → chunk-6BFW7SGF.js} +2 -2
- package/dist/{chunk-KSJP3AWY.js → chunk-6BSPRNFF.js} +2 -2
- package/dist/{chunk-4ETSHAIZ.js → chunk-6JA22L5X.js} +8 -8
- package/dist/{chunk-PDY7C73D.js → chunk-6OACG7JV.js} +2 -2
- package/dist/{chunk-QOL6OTIK.js → chunk-7COBZFUF.js} +2 -2
- package/dist/{chunk-GM2UUMWJ.js → chunk-AQJBFLUA.js} +5 -5
- package/dist/{chunk-UHQ5UPAQ.js → chunk-AWEMJYN2.js} +2 -2
- package/dist/{chunk-NVPE6AJ3.js → chunk-B6PY25JB.js} +1 -1
- package/dist/{chunk-RBAG3VUT.js → chunk-BXCZPPRO.js} +15 -15
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-542IROS3.js → chunk-COHJUEBQ.js} +2 -2
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-A7AI3WDN.js → chunk-GFD7TWAZ.js} +2 -2
- package/dist/{chunk-JTGL6UX7.js → chunk-GH5YSAAI.js} +4 -4
- package/dist/{chunk-B2PGHXTP.js → chunk-HPK66ZM5.js} +2 -2
- package/dist/{chunk-ZL3Q4OWJ.js → chunk-HZDOLAZV.js} +2 -2
- package/dist/{chunk-QNUK4SUE.js → chunk-I6Y6QKWF.js} +2 -2
- package/dist/{chunk-SYTPPMCM.js → chunk-IGSVMAPQ.js} +2 -2
- package/dist/{chunk-GXHRNONR.js → chunk-JDES3G7T.js} +2 -2
- package/dist/{chunk-HA5V67N4.js → chunk-JOMGKV72.js} +2 -2
- package/dist/{chunk-FRD5N3CS.js → chunk-KMHE76A2.js} +2 -2
- package/dist/{chunk-47AONXWB.js → chunk-KPSJA45G.js} +2 -2
- package/dist/{chunk-JLNJ7AGH.js → chunk-LBL77UXO.js} +7 -7
- package/dist/{chunk-2JJVJMN6.js → chunk-LDOURFFA.js} +2 -2
- package/dist/{chunk-KK6TS7ED.js → chunk-LH6UP5SR.js} +3 -3
- package/dist/chunk-LJLGH2DE.js +65 -0
- package/dist/chunk-LJLGH2DE.js.map +1 -0
- package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
- package/dist/{chunk-NS2SFWKC.js → chunk-MKNENZCK.js} +3 -3
- package/dist/{chunk-VSBY5HAI.js → chunk-MSRNAAWW.js} +2 -2
- package/dist/{chunk-BRJNNP7R.js → chunk-NF6LF76X.js} +2 -2
- package/dist/{chunk-5TS5QOZS.js → chunk-O4QH33GV.js} +6 -6
- package/dist/{chunk-SIV2ENTD.js → chunk-OB2YI57R.js} +19 -19
- package/dist/{chunk-A5HBAR5Y.js → chunk-ODP62HIA.js} +2 -2
- package/dist/{chunk-NKIK4VFP.js → chunk-OMYCECTS.js} +2 -2
- package/dist/{chunk-ML64HXAN.js → chunk-S5FWSNLI.js} +2 -2
- package/dist/{chunk-VE456O3R.js → chunk-SA2JMMMS.js} +2 -2
- package/dist/{chunk-SUD76OMV.js → chunk-TY5JOP2W.js} +71 -36
- package/dist/{chunk-SUD76OMV.js.map → chunk-TY5JOP2W.js.map} +1 -1
- package/dist/{chunk-RWQXTR35.js → chunk-UFBHEMNR.js} +2 -2
- package/dist/{chunk-IPLYGWQF.js → chunk-VDX2J7OX.js} +6 -6
- package/dist/{chunk-QXDZYPBL.js → chunk-VIRTAUJO.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
- package/dist/{chunk-5W62ZVC6.js → chunk-VXNWOHOR.js} +2 -2
- package/dist/{chunk-NNPJWVGN.js → chunk-WDBKDYK2.js} +29 -29
- package/dist/{chunk-HVWLZ7ZQ.js → chunk-WDP7CJZQ.js} +3 -3
- package/dist/{chunk-T3XDF5RO.js → chunk-WZKKI6S2.js} +2 -2
- package/dist/{chunk-OMU54WOM.js → chunk-X2PBZOYZ.js} +2 -2
- package/dist/{chunk-3SBDUMPW.js → chunk-Y52T5Y6B.js} +2 -2
- package/dist/{chunk-HXRZRYHQ.js → chunk-YCYFXA6P.js} +2 -2
- package/dist/{chunk-V6ULW25E.js → chunk-YMSPN4W4.js} +2 -2
- package/dist/{chunk-FJZUIM5G.js → chunk-YYRMOMX3.js} +2 -2
- package/dist/{chunk-HZZIH5SW.js → chunk-YZENVZWY.js} +2 -2
- package/dist/{chunk-AG5QWIU7.js → chunk-ZPED47SP.js} +2 -2
- package/dist/{chunk-WZGSSLYI.js → chunk-ZVTG7JTG.js} +2 -2
- package/dist/cli.js +57 -57
- package/dist/coding/export-okf-codegraph.js +4 -4
- package/dist/compounding/engine.js +5 -5
- package/dist/config.js +6 -6
- package/dist/connectors/codex-materialize-runner.js +5 -5
- package/dist/connectors/index.js +5 -5
- package/dist/convergence-refresh.js +7 -7
- package/dist/corpus-watermark.js +7 -7
- package/dist/deep-recall-http-glue.js +5 -5
- package/dist/entity-retrieval.js +5 -5
- package/dist/external-wiki-access.js +22 -22
- package/dist/extraction.js +5 -5
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/index.js +76 -75
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.js +8 -8
- package/dist/location/index.js +7 -7
- package/dist/maintenance/memory-governance.js +5 -5
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -5
- package/dist/maintenance/rebuild-memory-projection.js +6 -6
- package/dist/memory-browse-operations.js +22 -22
- package/dist/namespaces/migrate.js +6 -6
- package/dist/namespaces/search.js +3 -3
- package/dist/namespaces/storage.js +5 -5
- package/dist/operator-doctor-corpus.js +8 -8
- package/dist/operator-toolkit.js +15 -15
- package/dist/orchestration/maintenance.js +13 -13
- package/dist/orchestration/recall-entry.d.ts.map +1 -1
- package/dist/orchestrator.js +71 -70
- package/dist/recall-navigation-operations.js +22 -22
- package/dist/recall-navigation.js +21 -21
- package/dist/resume-bundles.js +7 -7
- package/dist/search/factory.js +2 -2
- package/dist/search/index.js +4 -4
- package/dist/semantic-consolidation.js +6 -6
- package/dist/semantic-rule-promotion.js +5 -5
- package/dist/semantic-rule-verifier.js +5 -5
- package/dist/source-agent-qualifier.js +5 -5
- package/dist/standing-memory-recall.d.ts +22 -0
- package/dist/standing-memory-recall.d.ts.map +1 -0
- package/dist/standing-memory-recall.js +16 -0
- package/dist/standing-memory-recall.js.map +1 -0
- package/dist/standup/build.js +5 -5
- package/dist/storage.js +4 -4
- package/dist/support-passport/index.js +24 -24
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +3 -3
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.js +5 -5
- package/dist/verified-recall.js +5 -5
- package/dist/who-knows-cli.js +6 -6
- package/dist/who-knows.js +5 -5
- package/package.json +2 -2
- package/src/orchestration/recall-entry.ts +54 -13
- package/src/standing-memory-block.test.ts +4 -3
- package/src/standing-memory-recall.test.ts +30 -0
- package/src/standing-memory-recall.ts +87 -0
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-Y4IQFWGD.js.map → chunk-25LKLNSJ.js.map} +0 -0
- /package/dist/{chunk-ZMV67JXV.js.map → chunk-4GPI3GVE.js.map} +0 -0
- /package/dist/{chunk-2IH2WNM6.js.map → chunk-5HP5F2SQ.js.map} +0 -0
- /package/dist/{chunk-BMTR244T.js.map → chunk-5KNEOYTF.js.map} +0 -0
- /package/dist/{chunk-ZIJ5FAI4.js.map → chunk-5LPDXYU3.js.map} +0 -0
- /package/dist/{chunk-BFUYPEJB.js.map → chunk-62AE2EUZ.js.map} +0 -0
- /package/dist/{chunk-GLX4SU4W.js.map → chunk-6BFW7SGF.js.map} +0 -0
- /package/dist/{chunk-KSJP3AWY.js.map → chunk-6BSPRNFF.js.map} +0 -0
- /package/dist/{chunk-4ETSHAIZ.js.map → chunk-6JA22L5X.js.map} +0 -0
- /package/dist/{chunk-PDY7C73D.js.map → chunk-6OACG7JV.js.map} +0 -0
- /package/dist/{chunk-QOL6OTIK.js.map → chunk-7COBZFUF.js.map} +0 -0
- /package/dist/{chunk-GM2UUMWJ.js.map → chunk-AQJBFLUA.js.map} +0 -0
- /package/dist/{chunk-UHQ5UPAQ.js.map → chunk-AWEMJYN2.js.map} +0 -0
- /package/dist/{chunk-NVPE6AJ3.js.map → chunk-B6PY25JB.js.map} +0 -0
- /package/dist/{chunk-RBAG3VUT.js.map → chunk-BXCZPPRO.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-542IROS3.js.map → chunk-COHJUEBQ.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-A7AI3WDN.js.map → chunk-GFD7TWAZ.js.map} +0 -0
- /package/dist/{chunk-JTGL6UX7.js.map → chunk-GH5YSAAI.js.map} +0 -0
- /package/dist/{chunk-B2PGHXTP.js.map → chunk-HPK66ZM5.js.map} +0 -0
- /package/dist/{chunk-ZL3Q4OWJ.js.map → chunk-HZDOLAZV.js.map} +0 -0
- /package/dist/{chunk-QNUK4SUE.js.map → chunk-I6Y6QKWF.js.map} +0 -0
- /package/dist/{chunk-SYTPPMCM.js.map → chunk-IGSVMAPQ.js.map} +0 -0
- /package/dist/{chunk-GXHRNONR.js.map → chunk-JDES3G7T.js.map} +0 -0
- /package/dist/{chunk-HA5V67N4.js.map → chunk-JOMGKV72.js.map} +0 -0
- /package/dist/{chunk-FRD5N3CS.js.map → chunk-KMHE76A2.js.map} +0 -0
- /package/dist/{chunk-47AONXWB.js.map → chunk-KPSJA45G.js.map} +0 -0
- /package/dist/{chunk-JLNJ7AGH.js.map → chunk-LBL77UXO.js.map} +0 -0
- /package/dist/{chunk-2JJVJMN6.js.map → chunk-LDOURFFA.js.map} +0 -0
- /package/dist/{chunk-KK6TS7ED.js.map → chunk-LH6UP5SR.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
- /package/dist/{chunk-NS2SFWKC.js.map → chunk-MKNENZCK.js.map} +0 -0
- /package/dist/{chunk-VSBY5HAI.js.map → chunk-MSRNAAWW.js.map} +0 -0
- /package/dist/{chunk-BRJNNP7R.js.map → chunk-NF6LF76X.js.map} +0 -0
- /package/dist/{chunk-5TS5QOZS.js.map → chunk-O4QH33GV.js.map} +0 -0
- /package/dist/{chunk-SIV2ENTD.js.map → chunk-OB2YI57R.js.map} +0 -0
- /package/dist/{chunk-A5HBAR5Y.js.map → chunk-ODP62HIA.js.map} +0 -0
- /package/dist/{chunk-NKIK4VFP.js.map → chunk-OMYCECTS.js.map} +0 -0
- /package/dist/{chunk-ML64HXAN.js.map → chunk-S5FWSNLI.js.map} +0 -0
- /package/dist/{chunk-VE456O3R.js.map → chunk-SA2JMMMS.js.map} +0 -0
- /package/dist/{chunk-RWQXTR35.js.map → chunk-UFBHEMNR.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-QXDZYPBL.js.map → chunk-VIRTAUJO.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-5W62ZVC6.js.map → chunk-VXNWOHOR.js.map} +0 -0
- /package/dist/{chunk-NNPJWVGN.js.map → chunk-WDBKDYK2.js.map} +0 -0
- /package/dist/{chunk-HVWLZ7ZQ.js.map → chunk-WDP7CJZQ.js.map} +0 -0
- /package/dist/{chunk-T3XDF5RO.js.map → chunk-WZKKI6S2.js.map} +0 -0
- /package/dist/{chunk-OMU54WOM.js.map → chunk-X2PBZOYZ.js.map} +0 -0
- /package/dist/{chunk-3SBDUMPW.js.map → chunk-Y52T5Y6B.js.map} +0 -0
- /package/dist/{chunk-HXRZRYHQ.js.map → chunk-YCYFXA6P.js.map} +0 -0
- /package/dist/{chunk-V6ULW25E.js.map → chunk-YMSPN4W4.js.map} +0 -0
- /package/dist/{chunk-FJZUIM5G.js.map → chunk-YYRMOMX3.js.map} +0 -0
- /package/dist/{chunk-HZZIH5SW.js.map → chunk-YZENVZWY.js.map} +0 -0
- /package/dist/{chunk-AG5QWIU7.js.map → chunk-ZPED47SP.js.map} +0 -0
- /package/dist/{chunk-WZGSSLYI.js.map → chunk-ZVTG7JTG.js.map} +0 -0
|
@@ -230,6 +230,7 @@ async function writeFact(memoryDir: string): Promise<void> {
|
|
|
230
230
|
`created: ${now}`,
|
|
231
231
|
`updated: ${now}`,
|
|
232
232
|
"source: extraction",
|
|
233
|
+
"origin: user",
|
|
233
234
|
"confidence: 0.8",
|
|
234
235
|
"confidenceTier: high",
|
|
235
236
|
"tags: []",
|
|
@@ -242,7 +243,7 @@ async function writeFact(memoryDir: string): Promise<void> {
|
|
|
242
243
|
await writeFile(path.join(factsDir, "standing-fact.md"), `${fact.join("\n")}\n`, "utf-8");
|
|
243
244
|
}
|
|
244
245
|
|
|
245
|
-
test("
|
|
246
|
+
test("recall injects the standing memory block when the flag is on", async () => {
|
|
246
247
|
const off = await makeOrchestrator();
|
|
247
248
|
const on = await makeOrchestrator({ recallStandingBlock: true });
|
|
248
249
|
try {
|
|
@@ -250,8 +251,8 @@ test("zero-diff: recall output is byte-identical with the flag off vs on (pre-wi
|
|
|
250
251
|
await writeFact(on.memoryDir);
|
|
251
252
|
const outOff = await off.orchestrator.recall("how do deploys go out", "sess-standing-off");
|
|
252
253
|
const outOn = await on.orchestrator.recall("how do deploys go out", "sess-standing-on");
|
|
253
|
-
assert.
|
|
254
|
-
assert.ok(
|
|
254
|
+
assert.ok(!outOff.includes("## Standing Memory (Remnic)"), "flag off keeps recall unchanged");
|
|
255
|
+
assert.ok(outOn.includes("## Standing Memory (Remnic)"), "flag on injects the standing block");
|
|
255
256
|
assert.ok(outOn.includes("blue pipeline"), "sanity: the fact is recalled");
|
|
256
257
|
} finally {
|
|
257
258
|
await off.orchestrator.destroy();
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { parseConfig } from "./config.js";
|
|
5
|
+
import {
|
|
6
|
+
memoriesToStandingEntries,
|
|
7
|
+
prefixStandingMemoryBlock,
|
|
8
|
+
renderStandingMemoryBlock,
|
|
9
|
+
} from "./standing-memory-recall.js";
|
|
10
|
+
|
|
11
|
+
test("#3089 standing block is omitted when recallStandingBlock is off", () => {
|
|
12
|
+
const off = parseConfig({});
|
|
13
|
+
const on = parseConfig({ recallStandingBlock: true });
|
|
14
|
+
const entries = memoriesToStandingEntries([
|
|
15
|
+
{
|
|
16
|
+
id: "fact-1",
|
|
17
|
+
content: "The blue pipeline is the only deploy path.",
|
|
18
|
+
frontmatter: { id: "fact-1", pinned: true, origin: "user" },
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
const recall = "per-turn recall";
|
|
22
|
+
assert.equal(renderStandingMemoryBlock(off, entries), "");
|
|
23
|
+
assert.equal(prefixStandingMemoryBlock(recall, renderStandingMemoryBlock(off, entries)), recall);
|
|
24
|
+
const standing = renderStandingMemoryBlock(on, entries);
|
|
25
|
+
assert.ok(standing.includes("## Standing Memory (Remnic)"));
|
|
26
|
+
assert.ok(standing.includes("blue pipeline"));
|
|
27
|
+
const prefixed = prefixStandingMemoryBlock(recall, standing);
|
|
28
|
+
assert.ok(prefixed.startsWith(standing));
|
|
29
|
+
assert.ok(prefixed.includes("per-turn recall"));
|
|
30
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_UNTRUSTED_ORIGINS,
|
|
3
|
+
isUntrustedOrigin,
|
|
4
|
+
parseOriginClass,
|
|
5
|
+
} from "./security/origin-authority.js";
|
|
6
|
+
import type { PluginConfig } from "./types.js";
|
|
7
|
+
import {
|
|
8
|
+
buildStandingMemoryBlock,
|
|
9
|
+
lintStandingBlockVolatility,
|
|
10
|
+
type StandingMemoryEntry,
|
|
11
|
+
} from "./standing-memory-block.js";
|
|
12
|
+
|
|
13
|
+
export interface StandingMemorySource {
|
|
14
|
+
id?: string;
|
|
15
|
+
path?: string;
|
|
16
|
+
content: string;
|
|
17
|
+
frontmatter: {
|
|
18
|
+
id?: unknown;
|
|
19
|
+
pinned?: unknown;
|
|
20
|
+
updated?: unknown;
|
|
21
|
+
origin?: unknown;
|
|
22
|
+
status?: unknown;
|
|
23
|
+
toolScoped?: unknown;
|
|
24
|
+
sourceConnector?: unknown;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function memoriesToStandingEntries(
|
|
29
|
+
memories: readonly StandingMemorySource[],
|
|
30
|
+
opts: { requestingConnector?: string } = {},
|
|
31
|
+
): StandingMemoryEntry[] {
|
|
32
|
+
const entries: StandingMemoryEntry[] = [];
|
|
33
|
+
for (const memory of memories) {
|
|
34
|
+
const id = String(memory.frontmatter.id ?? memory.id ?? memory.path ?? "");
|
|
35
|
+
if (!id) continue;
|
|
36
|
+
if (isUntrustedOrigin(parseOriginClass(memory.frontmatter.origin), DEFAULT_UNTRUSTED_ORIGINS)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (typeof memory.frontmatter.status === "string" && memory.frontmatter.status !== "active") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const requestingConnector = opts.requestingConnector?.trim();
|
|
43
|
+
const memoryConnector =
|
|
44
|
+
typeof memory.frontmatter.sourceConnector === "string" ? memory.frontmatter.sourceConnector.trim() : "";
|
|
45
|
+
if (memory.frontmatter.toolScoped === true && memoryConnector && requestingConnector && memoryConnector !== requestingConnector) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const description =
|
|
49
|
+
memory.content
|
|
50
|
+
.split("\n")
|
|
51
|
+
.map((line) => line.trim())
|
|
52
|
+
.find((line) => line.length > 0 && !line.startsWith("#") && !line.startsWith("---")) ?? "";
|
|
53
|
+
if (description.length < 8) continue;
|
|
54
|
+
if (lintStandingBlockVolatility(description).length > 0) continue;
|
|
55
|
+
const pinned = memory.frontmatter.pinned === true;
|
|
56
|
+
const lastChangedAt =
|
|
57
|
+
typeof memory.frontmatter.updated === "string" ? memory.frontmatter.updated : undefined;
|
|
58
|
+
entries.push({ id, description: description.slice(0, 200), pinned, lastChangedAt });
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function renderStandingMemoryBlock(config: PluginConfig, entries: StandingMemoryEntry[]): string {
|
|
64
|
+
if (!config.recallStandingBlock || entries.length === 0) return "";
|
|
65
|
+
try {
|
|
66
|
+
return buildStandingMemoryBlock({
|
|
67
|
+
entries,
|
|
68
|
+
nowMs: Date.now(),
|
|
69
|
+
maxChars: config.standingBlockMaxChars,
|
|
70
|
+
freshDays: config.standingBlockFreshDays,
|
|
71
|
+
}).text;
|
|
72
|
+
} catch {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function prefixStandingMemoryBlock(
|
|
78
|
+
recallResult: string,
|
|
79
|
+
standingText: string,
|
|
80
|
+
budgetChars?: number,
|
|
81
|
+
): string {
|
|
82
|
+
if (standingText.length === 0) return recallResult;
|
|
83
|
+
if (budgetChars === 0) return recallResult;
|
|
84
|
+
const combined = `${standingText}\n\n${recallResult}`;
|
|
85
|
+
if (!budgetChars || combined.length <= budgetChars) return combined;
|
|
86
|
+
return combined.slice(0, budgetChars);
|
|
87
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|