@mnemonik/shared 7.170.6 → 7.171.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/dist/ambientPointer.d.ts +20 -1
- package/dist/ambientPointer.d.ts.map +1 -1
- package/dist/ambientPointer.js +33 -2
- package/dist/ambientPointer.js.map +1 -1
- package/dist/contextBudget.d.ts +5 -1
- package/dist/contextBudget.d.ts.map +1 -1
- package/dist/contextBudget.js +24 -10
- package/dist/contextBudget.js.map +1 -1
- package/package.json +1 -1
- package/src/ambientPointer.ts +39 -2
- package/src/contextBudget.ts +23 -10
package/dist/ambientPointer.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
export declare const AMBIENT_ID_PREFIX_LENGTH = 8;
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* What a recalled memory's line carries when memories learned later relate to
|
|
4
|
+
* it (RETRIEVAL_LAYER §2.0.3): how many, and the closest one's id. It follows
|
|
5
|
+
* the line's own `memory_get <id>` pointer and carries no text from the
|
|
6
|
+
* later memory. The one place the wording lives: the renderer and the pattern
|
|
7
|
+
* that finds (and sheds) it are both built from it. Agent-facing wording; it
|
|
8
|
+
* changes only with the owner's approval.
|
|
9
|
+
*/
|
|
10
|
+
export declare const RECALL_LATER_MARKER = " \u00B7 you learned {count} related {memories} later; closest: memory_get {laterId}";
|
|
11
|
+
/** The marker for one recalled memory: `laterCount` later related memories, `laterId` the closest. */
|
|
12
|
+
export declare function renderRecallLaterMarker(laterCount: number, laterId: string): string;
|
|
13
|
+
/** Pattern source of one marker, derived from {@link RECALL_LATER_MARKER}; no capture groups. */
|
|
14
|
+
export declare const RECALL_LATER_MARKER_SOURCE: string;
|
|
15
|
+
/** The text without any later-memory marker: what the line was before one was added. */
|
|
16
|
+
export declare function stripRecallLaterMarkers(text: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Current full UUID pointers plus cached eight-character pointers from older
|
|
19
|
+
* hooks. A later-memory marker right after the pointer belongs to the same
|
|
20
|
+
* item, so an item split on pointers keeps its marker.
|
|
21
|
+
*/
|
|
3
22
|
export declare const AMBIENT_ITEM_POINTER_SOURCE: string;
|
|
4
23
|
export declare function ambientItemPointerRegex(flags?: string): RegExp;
|
|
5
24
|
//# sourceMappingURL=ambientPointer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambientPointer.d.ts","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAY1C,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"ambientPointer.d.ts","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAY1C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,wFACuD,CAAC;AAExF,sGAAsG;AACtG,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAInF;AAMD,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,QAGwC,CAAC;AAEhF,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAEe,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,SAAM,GAAG,MAAM,CAE3D"}
|
package/dist/ambientPointer.js
CHANGED
|
@@ -7,9 +7,40 @@ const LEGACY_MEMORY_ID_SOURCE = `[0-9A-Za-z_-]{${AMBIENT_ID_PREFIX_LENGTH}}`;
|
|
|
7
7
|
* exactly as before.
|
|
8
8
|
*/
|
|
9
9
|
const FIRST_PERSON_POINTER_LEAD_SOURCE = '(?:to recall it in full:\\s*)?';
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* What a recalled memory's line carries when memories learned later relate to
|
|
12
|
+
* it (RETRIEVAL_LAYER §2.0.3): how many, and the closest one's id. It follows
|
|
13
|
+
* the line's own `memory_get <id>` pointer and carries no text from the
|
|
14
|
+
* later memory. The one place the wording lives: the renderer and the pattern
|
|
15
|
+
* that finds (and sheds) it are both built from it. Agent-facing wording; it
|
|
16
|
+
* changes only with the owner's approval.
|
|
17
|
+
*/
|
|
18
|
+
export const RECALL_LATER_MARKER = ' \u00b7 you learned {count} related {memories} later; closest: memory_get {laterId}';
|
|
19
|
+
/** The marker for one recalled memory: `laterCount` later related memories, `laterId` the closest. */
|
|
20
|
+
export function renderRecallLaterMarker(laterCount, laterId) {
|
|
21
|
+
return RECALL_LATER_MARKER.replace('{count}', String(laterCount))
|
|
22
|
+
.replace('{memories}', laterCount === 1 ? 'memory' : 'memories')
|
|
23
|
+
.replace('{laterId}', laterId);
|
|
24
|
+
}
|
|
25
|
+
function escapeRegExp(text) {
|
|
26
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
27
|
+
}
|
|
28
|
+
/** Pattern source of one marker, derived from {@link RECALL_LATER_MARKER}; no capture groups. */
|
|
29
|
+
export const RECALL_LATER_MARKER_SOURCE = escapeRegExp(RECALL_LATER_MARKER)
|
|
30
|
+
.replace(escapeRegExp('{count}'), '\\d+')
|
|
31
|
+
.replace(escapeRegExp('{memories}'), 'memor(?:y|ies)')
|
|
32
|
+
.replace(escapeRegExp('{laterId}'), `${MEMORY_UUID_SOURCE}(?![0-9A-Za-z_-])`);
|
|
33
|
+
/** The text without any later-memory marker: what the line was before one was added. */
|
|
34
|
+
export function stripRecallLaterMarkers(text) {
|
|
35
|
+
return text.replace(new RegExp(RECALL_LATER_MARKER_SOURCE, 'g'), '');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Current full UUID pointers plus cached eight-character pointers from older
|
|
39
|
+
* hooks. A later-memory marker right after the pointer belongs to the same
|
|
40
|
+
* item, so an item split on pointers keeps its marker.
|
|
41
|
+
*/
|
|
11
42
|
export const AMBIENT_ITEM_POINTER_SOURCE = `\\u2014\\s*${FIRST_PERSON_POINTER_LEAD_SOURCE}memory_get\\s+(${MEMORY_UUID_SOURCE}|${LEGACY_MEMORY_ID_SOURCE})` +
|
|
12
|
-
|
|
43
|
+
`(?![0-9A-Za-z_-])(?:${RECALL_LATER_MARKER_SOURCE})?`;
|
|
13
44
|
export function ambientItemPointerRegex(flags = 'g') {
|
|
14
45
|
return new RegExp(AMBIENT_ITEM_POINTER_SOURCE, flags);
|
|
15
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambientPointer.js","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,MAAM,kBAAkB,GAAG,sDAAsD,CAAC;AAClF,MAAM,uBAAuB,GAAG,iBAAiB,wBAAwB,GAAG,CAAC;AAE7E;;;;GAIG;AACH,MAAM,gCAAgC,GAAG,gCAAgC,CAAC;AAE1E,wFAAwF;AACxF,MAAM,CAAC,MAAM,2BAA2B,GACtC,cAAc,gCAAgC,kBAAkB,kBAAkB,IAAI,uBAAuB,GAAG;IAChH,
|
|
1
|
+
{"version":3,"file":"ambientPointer.js","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,MAAM,kBAAkB,GAAG,sDAAsD,CAAC;AAClF,MAAM,uBAAuB,GAAG,iBAAiB,wBAAwB,GAAG,CAAC;AAE7E;;;;GAIG;AACH,MAAM,gCAAgC,GAAG,gCAAgC,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,qFAAqF,CAAC;AAExF,sGAAsG;AACtG,MAAM,UAAU,uBAAuB,CAAC,UAAkB,EAAE,OAAe;IACzE,OAAO,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;SAC9D,OAAO,CAAC,YAAY,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;SAC/D,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,mBAAmB,CAAC;KACxE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KACxC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACrD,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,GAAG,kBAAkB,mBAAmB,CAAC,CAAC;AAEhF,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GACtC,cAAc,gCAAgC,kBAAkB,kBAAkB,IAAI,uBAAuB,GAAG;IAChH,uBAAuB,0BAA0B,IAAI,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,GAAG;IACjD,OAAO,IAAI,MAAM,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/contextBudget.d.ts
CHANGED
|
@@ -36,8 +36,12 @@ export declare function measureContext(text: string, units?: ContextBudgetUnits)
|
|
|
36
36
|
* shed memory keeps a bounded head plus its retrieval marker; later shed items
|
|
37
37
|
* share one trailing marker containing only their explicit retrieval routes.
|
|
38
38
|
* Items without a route leave no agent-visible stub.
|
|
39
|
+
*
|
|
40
|
+
* Before anything is shed, the later-memory markers go (ambientPointer.ts
|
|
41
|
+
* RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
|
|
42
|
+
* its place or any of its text.
|
|
39
43
|
*/
|
|
40
|
-
export declare function fitContextItems(
|
|
44
|
+
export declare function fitContextItems(givenItems: readonly ContextBudgetItem[], opts: {
|
|
41
45
|
budget: number;
|
|
42
46
|
units?: ContextBudgetUnits;
|
|
43
47
|
reservedSuffix?: readonly ContextBudgetItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextBudget.d.ts","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE7D,eAAO,MAAM,wBAAwB;aACnC,WAAW,EAAE,IAAK;aAClB,KAAK,EAAE,IAAK;aACZ,MAAM,EAAE,IAAK;aACb,IAAI,EAAE,IAAK;aACX,MAAM,EAAE,IAAK;CACL,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AA8CD,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,kBAAiC,GAAG,MAAM,CAE7F;AAED
|
|
1
|
+
{"version":3,"file":"contextBudget.d.ts","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE7D,eAAO,MAAM,wBAAwB;aACnC,WAAW,EAAE,IAAK;aAClB,KAAK,EAAE,IAAK;aACZ,MAAM,EAAE,IAAK;aACb,IAAI,EAAE,IAAK;aACX,MAAM,EAAE,IAAK;CACL,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AA8CD,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,kBAAiC,GAAG,MAAM,CAE7F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,cAAc,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C,GACA,kBAAkB,CAsGpB;AA4BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,SAAS,MAAM,EAAO,GAChC,iBAAiB,EAAE,CAMrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAClF,MAAM,CAIR;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD"}
|
package/dist/contextBudget.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AMBIENT_ITEM_POINTER_SOURCE } from './ambientPointer.js';
|
|
1
|
+
import { AMBIENT_ITEM_POINTER_SOURCE, stripRecallLaterMarkers } from './ambientPointer.js';
|
|
2
2
|
export { AMBIENT_ITEM_POINTER_SOURCE } from './ambientPointer.js';
|
|
3
3
|
export const REFLEX_NOTE_BUDGET_BYTES = {
|
|
4
4
|
claude_code: 6_000,
|
|
@@ -59,18 +59,32 @@ export function measureContext(text, units = 'characters') {
|
|
|
59
59
|
* shed memory keeps a bounded head plus its retrieval marker; later shed items
|
|
60
60
|
* share one trailing marker containing only their explicit retrieval routes.
|
|
61
61
|
* Items without a route leave no agent-visible stub.
|
|
62
|
+
*
|
|
63
|
+
* Before anything is shed, the later-memory markers go (ambientPointer.ts
|
|
64
|
+
* RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
|
|
65
|
+
* its place or any of its text.
|
|
62
66
|
*/
|
|
63
|
-
export function fitContextItems(
|
|
67
|
+
export function fitContextItems(givenItems, opts) {
|
|
64
68
|
const units = opts.units ?? 'characters';
|
|
65
69
|
const suffix = opts.reservedSuffix ?? [];
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const valueOf = (entries) => [...entries, ...suffix].map((item) => item.text).join(JOINER);
|
|
71
|
+
const items = [...givenItems];
|
|
72
|
+
for (let index = items.length;; index -= 1) {
|
|
73
|
+
const value = valueOf(items);
|
|
74
|
+
if (measureContext(value, units) <= opts.budget) {
|
|
75
|
+
return {
|
|
76
|
+
value,
|
|
77
|
+
fullyDeliveredItems: items.length,
|
|
78
|
+
partialItemIndex: null,
|
|
79
|
+
partialUnitsDelivered: 0,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const item = items[index - 1];
|
|
83
|
+
if (item === undefined)
|
|
84
|
+
break;
|
|
85
|
+
const text = stripRecallLaterMarkers(item.text);
|
|
86
|
+
if (text !== item.text)
|
|
87
|
+
items[index - 1] = { ...item, text };
|
|
74
88
|
}
|
|
75
89
|
const accepted = [];
|
|
76
90
|
for (let index = 0; index < items.length; index += 1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextBudget.js","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"contextBudget.js","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/ambientPointer.ts
CHANGED
|
@@ -10,10 +10,47 @@ const LEGACY_MEMORY_ID_SOURCE = `[0-9A-Za-z_-]{${AMBIENT_ID_PREFIX_LENGTH}}`;
|
|
|
10
10
|
*/
|
|
11
11
|
const FIRST_PERSON_POINTER_LEAD_SOURCE = '(?:to recall it in full:\\s*)?';
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* What a recalled memory's line carries when memories learned later relate to
|
|
15
|
+
* it (RETRIEVAL_LAYER §2.0.3): how many, and the closest one's id. It follows
|
|
16
|
+
* the line's own `memory_get <id>` pointer and carries no text from the
|
|
17
|
+
* later memory. The one place the wording lives: the renderer and the pattern
|
|
18
|
+
* that finds (and sheds) it are both built from it. Agent-facing wording; it
|
|
19
|
+
* changes only with the owner's approval.
|
|
20
|
+
*/
|
|
21
|
+
export const RECALL_LATER_MARKER =
|
|
22
|
+
' \u00b7 you learned {count} related {memories} later; closest: memory_get {laterId}';
|
|
23
|
+
|
|
24
|
+
/** The marker for one recalled memory: `laterCount` later related memories, `laterId` the closest. */
|
|
25
|
+
export function renderRecallLaterMarker(laterCount: number, laterId: string): string {
|
|
26
|
+
return RECALL_LATER_MARKER.replace('{count}', String(laterCount))
|
|
27
|
+
.replace('{memories}', laterCount === 1 ? 'memory' : 'memories')
|
|
28
|
+
.replace('{laterId}', laterId);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function escapeRegExp(text: string): string {
|
|
32
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Pattern source of one marker, derived from {@link RECALL_LATER_MARKER}; no capture groups. */
|
|
36
|
+
export const RECALL_LATER_MARKER_SOURCE = escapeRegExp(RECALL_LATER_MARKER)
|
|
37
|
+
.replace(escapeRegExp('{count}'), '\\d+')
|
|
38
|
+
.replace(escapeRegExp('{memories}'), 'memor(?:y|ies)')
|
|
39
|
+
.replace(escapeRegExp('{laterId}'), `${MEMORY_UUID_SOURCE}(?![0-9A-Za-z_-])`);
|
|
40
|
+
|
|
41
|
+
/** The text without any later-memory marker: what the line was before one was added. */
|
|
42
|
+
export function stripRecallLaterMarkers(text: string): string {
|
|
43
|
+
return text.replace(new RegExp(RECALL_LATER_MARKER_SOURCE, 'g'), '');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Current full UUID pointers plus cached eight-character pointers from older
|
|
48
|
+
* hooks. A later-memory marker right after the pointer belongs to the same
|
|
49
|
+
* item, so an item split on pointers keeps its marker.
|
|
50
|
+
*/
|
|
14
51
|
export const AMBIENT_ITEM_POINTER_SOURCE =
|
|
15
52
|
`\\u2014\\s*${FIRST_PERSON_POINTER_LEAD_SOURCE}memory_get\\s+(${MEMORY_UUID_SOURCE}|${LEGACY_MEMORY_ID_SOURCE})` +
|
|
16
|
-
|
|
53
|
+
`(?![0-9A-Za-z_-])(?:${RECALL_LATER_MARKER_SOURCE})?`;
|
|
17
54
|
|
|
18
55
|
export function ambientItemPointerRegex(flags = 'g'): RegExp {
|
|
19
56
|
return new RegExp(AMBIENT_ITEM_POINTER_SOURCE, flags);
|
package/src/contextBudget.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AMBIENT_ITEM_POINTER_SOURCE } from './ambientPointer.js';
|
|
1
|
+
import { AMBIENT_ITEM_POINTER_SOURCE, stripRecallLaterMarkers } from './ambientPointer.js';
|
|
2
2
|
|
|
3
3
|
export { AMBIENT_ITEM_POINTER_SOURCE } from './ambientPointer.js';
|
|
4
4
|
|
|
@@ -91,9 +91,13 @@ export function measureContext(text: string, units: ContextBudgetUnits = 'charac
|
|
|
91
91
|
* shed memory keeps a bounded head plus its retrieval marker; later shed items
|
|
92
92
|
* share one trailing marker containing only their explicit retrieval routes.
|
|
93
93
|
* Items without a route leave no agent-visible stub.
|
|
94
|
+
*
|
|
95
|
+
* Before anything is shed, the later-memory markers go (ambientPointer.ts
|
|
96
|
+
* RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
|
|
97
|
+
* its place or any of its text.
|
|
94
98
|
*/
|
|
95
99
|
export function fitContextItems(
|
|
96
|
-
|
|
100
|
+
givenItems: readonly ContextBudgetItem[],
|
|
97
101
|
opts: {
|
|
98
102
|
budget: number;
|
|
99
103
|
units?: ContextBudgetUnits;
|
|
@@ -102,14 +106,23 @@ export function fitContextItems(
|
|
|
102
106
|
): BudgetedContextFit {
|
|
103
107
|
const units = opts.units ?? 'characters';
|
|
104
108
|
const suffix = opts.reservedSuffix ?? [];
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
const valueOf = (entries: readonly ContextBudgetItem[]): string =>
|
|
110
|
+
[...entries, ...suffix].map((item) => item.text).join(JOINER);
|
|
111
|
+
const items = [...givenItems];
|
|
112
|
+
for (let index = items.length; ; index -= 1) {
|
|
113
|
+
const value = valueOf(items);
|
|
114
|
+
if (measureContext(value, units) <= opts.budget) {
|
|
115
|
+
return {
|
|
116
|
+
value,
|
|
117
|
+
fullyDeliveredItems: items.length,
|
|
118
|
+
partialItemIndex: null,
|
|
119
|
+
partialUnitsDelivered: 0,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const item = items[index - 1];
|
|
123
|
+
if (item === undefined) break;
|
|
124
|
+
const text = stripRecallLaterMarkers(item.text);
|
|
125
|
+
if (text !== item.text) items[index - 1] = { ...item, text };
|
|
113
126
|
}
|
|
114
127
|
|
|
115
128
|
const accepted: string[] = [];
|