@mnemonik/shared 7.177.0 → 7.178.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.
@@ -1,16 +1,57 @@
1
1
  export declare const AMBIENT_ID_PREFIX_LENGTH = 8;
2
2
  /**
3
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.
4
+ * it (RETRIEVAL_LAYER §2.0.3): how many, and a glimpse of the closest one,
5
+ * the same kind every recall line gives of its own memory: how long after the
6
+ * recalled memory it was learned, its opening, and its id. It follows the
7
+ * line's own `memory_get <id>` pointer.
8
+ *
9
+ * The glimpse is what lets an agent decide whether the later memory is worth
10
+ * recalling whole; a bare id gave it nothing to decide by (11 Nov 2026: 6 of
11
+ * 1,771 were opened). `{which}` is "closest", or "next closest" when the
12
+ * closest is already in the same reply. `{gap}` and `{glimpse}` are left out
13
+ * when they are not known, which leaves the marker as it was before the
14
+ * glimpse existed.
15
+ *
16
+ * The one place the wording lives: the renderer and the pattern that finds
17
+ * (and sheds) the marker are both built from these. A hook runtime built
18
+ * before a form existed cannot parse it, so the server writes the glimpse
19
+ * only to a runtime that says it reads it (hookTimeouts.ts HOOK_READS_HEADER).
20
+ * Agent-facing wording; it changes only with the owner's approval.
21
+ */
22
+ export declare const RECALL_LATER_MARKER = " \u00B7 you learned {count} related {memories} later; {which}{gap}: {glimpse}memory_get {laterId}";
23
+ /** `{which}`: the later memory named is the closest one. */
24
+ export declare const RECALL_LATER_CLOSEST = "closest";
25
+ /** `{which}`: the closest one is in the same reply, so the next closest is named. */
26
+ export declare const RECALL_LATER_NEXT_CLOSEST = "next closest";
27
+ /** `{gap}`: how long after the recalled memory the later one was learned. */
28
+ export declare const RECALL_LATER_GAP = ", {elapsed} later";
29
+ /** `{glimpse}`: the later memory's opening. */
30
+ export declare const RECALL_LATER_GLIMPSE = "\u201C{what}\u201D ";
31
+ /**
32
+ * How long after, in words: a plain duration, so no zone and no calendar
33
+ * words. Null when the later memory was not memorized after the recalled one.
34
+ */
35
+ export declare function renderLaterElapsed(learnedAfterMs: number | null | undefined): string | null;
36
+ /** What a marker says of the later memory beyond its id. */
37
+ export interface RecallLaterGlimpse {
38
+ /** The later memory's opening, on one line. */
39
+ what?: string | null;
40
+ /** How long after the recalled memory it was memorized, in milliseconds. */
41
+ learnedAfterMs?: number | null;
42
+ /** The closest later memory is in the same reply; this is the next closest. */
43
+ passedOver?: boolean;
44
+ }
45
+ /**
46
+ * The marker for one recalled memory: `laterCount` later related memories,
47
+ * `laterId` the one named, with what is known of it.
48
+ */
49
+ export declare function renderRecallLaterMarker(laterCount: number, laterId: string, glimpse?: RecallLaterGlimpse): string;
50
+ /**
51
+ * Pattern source of one marker, derived from {@link RECALL_LATER_MARKER} and
52
+ * its parts; no capture groups. It finds every form the renderer writes,
53
+ * the one without a gap or a glimpse included.
9
54
  */
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
55
  export declare const RECALL_LATER_MARKER_SOURCE: string;
15
56
  /** The text without any later-memory marker: what the line was before one was added. */
16
57
  export declare function stripRecallLaterMarkers(text: string): string;
@@ -21,4 +62,14 @@ export declare function stripRecallLaterMarkers(text: string): string;
21
62
  */
22
63
  export declare const AMBIENT_ITEM_POINTER_SOURCE: string;
23
64
  export declare function ambientItemPointerRegex(flags?: string): RegExp;
65
+ /**
66
+ * The same texts without any later-memory marker that names a memory one of
67
+ * them carries. A hook assembles one block from several server replies
68
+ * (ambient recall beside the other recall lines), and only the hook sees the
69
+ * whole block: a marker pointing at a memory a few lines away tells the agent
70
+ * nothing, so it goes. A memory is carried by the line whose own pointer names
71
+ * it, by a JIT line headed with its id, or by being named in `alsoCarried`.
72
+ * A text with no such marker is returned as the same string.
73
+ */
74
+ export declare function withoutMarkersNamingCarried(texts: readonly string[], alsoCarried?: readonly string[]): string[];
24
75
  //# 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;;;;;;;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"}
1
+ {"version":3,"file":"ambientPointer.d.ts","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAY1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,sGACqE,CAAC;AAEtG,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAa1D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAgB3F;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAYR;AAMD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAewC,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;AAMD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,MAAM,EAAE,CA4BV"}
@@ -9,26 +9,101 @@ const LEGACY_MEMORY_ID_SOURCE = `[0-9A-Za-z_-]{${AMBIENT_ID_PREFIX_LENGTH}}`;
9
9
  const FIRST_PERSON_POINTER_LEAD_SOURCE = '(?:to recall it in full:\\s*)?';
10
10
  /**
11
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.
12
+ * it (RETRIEVAL_LAYER §2.0.3): how many, and a glimpse of the closest one,
13
+ * the same kind every recall line gives of its own memory: how long after the
14
+ * recalled memory it was learned, its opening, and its id. It follows the
15
+ * line's own `memory_get <id>` pointer.
16
+ *
17
+ * The glimpse is what lets an agent decide whether the later memory is worth
18
+ * recalling whole; a bare id gave it nothing to decide by (11 Nov 2026: 6 of
19
+ * 1,771 were opened). `{which}` is "closest", or "next closest" when the
20
+ * closest is already in the same reply. `{gap}` and `{glimpse}` are left out
21
+ * when they are not known, which leaves the marker as it was before the
22
+ * glimpse existed.
23
+ *
24
+ * The one place the wording lives: the renderer and the pattern that finds
25
+ * (and sheds) the marker are both built from these. A hook runtime built
26
+ * before a form existed cannot parse it, so the server writes the glimpse
27
+ * only to a runtime that says it reads it (hookTimeouts.ts HOOK_READS_HEADER).
28
+ * Agent-facing wording; it changes only with the owner's approval.
17
29
  */
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))
30
+ export const RECALL_LATER_MARKER = ' \u00b7 you learned {count} related {memories} later; {which}{gap}: {glimpse}memory_get {laterId}';
31
+ /** `{which}`: the later memory named is the closest one. */
32
+ export const RECALL_LATER_CLOSEST = 'closest';
33
+ /** `{which}`: the closest one is in the same reply, so the next closest is named. */
34
+ export const RECALL_LATER_NEXT_CLOSEST = 'next closest';
35
+ /** `{gap}`: how long after the recalled memory the later one was learned. */
36
+ export const RECALL_LATER_GAP = ', {elapsed} later';
37
+ /** `{glimpse}`: the later memory's opening. */
38
+ export const RECALL_LATER_GLIMPSE = '\u201c{what}\u201d ';
39
+ const GLIMPSE_CLOSE = '\u201d';
40
+ const SECOND_MS = 1_000;
41
+ const MINUTE_MS = 60 * SECOND_MS;
42
+ const HOUR_MS = 60 * MINUTE_MS;
43
+ const DAY_MS = 24 * HOUR_MS;
44
+ function elapsedUnits(count, unit) {
45
+ return `${count} ${unit}${count === 1 ? '' : 's'}`;
46
+ }
47
+ /**
48
+ * How long after, in words: a plain duration, so no zone and no calendar
49
+ * words. Null when the later memory was not memorized after the recalled one.
50
+ */
51
+ export function renderLaterElapsed(learnedAfterMs) {
52
+ if (typeof learnedAfterMs !== 'number' || !Number.isFinite(learnedAfterMs))
53
+ return null;
54
+ if (learnedAfterMs <= 0)
55
+ return null;
56
+ if (learnedAfterMs < 90 * SECOND_MS)
57
+ return 'moments';
58
+ if (learnedAfterMs < HOUR_MS)
59
+ return elapsedUnits(Math.round(learnedAfterMs / MINUTE_MS), 'minute');
60
+ if (learnedAfterMs < 2 * DAY_MS)
61
+ return elapsedUnits(Math.round(learnedAfterMs / HOUR_MS), 'hour');
62
+ if (learnedAfterMs < 14 * DAY_MS)
63
+ return elapsedUnits(Math.round(learnedAfterMs / DAY_MS), 'day');
64
+ if (learnedAfterMs < 56 * DAY_MS) {
65
+ return elapsedUnits(Math.round(learnedAfterMs / (7 * DAY_MS)), 'week');
66
+ }
67
+ if (learnedAfterMs < 730 * DAY_MS) {
68
+ return elapsedUnits(Math.round(learnedAfterMs / (30.44 * DAY_MS)), 'month');
69
+ }
70
+ return elapsedUnits(Math.round(learnedAfterMs / (365.25 * DAY_MS)), 'year');
71
+ }
72
+ /** The opening as the marker can carry it: one line, and never its own closing quote. */
73
+ function glimpseText(what) {
74
+ if (typeof what !== 'string')
75
+ return '';
76
+ return what.replace(/\s+/gu, ' ').replaceAll(GLIMPSE_CLOSE, '"').trim();
77
+ }
78
+ /**
79
+ * The marker for one recalled memory: `laterCount` later related memories,
80
+ * `laterId` the one named, with what is known of it.
81
+ */
82
+ export function renderRecallLaterMarker(laterCount, laterId, glimpse = {}) {
83
+ const elapsed = renderLaterElapsed(glimpse.learnedAfterMs);
84
+ const what = glimpseText(glimpse.what);
85
+ return (RECALL_LATER_MARKER.replace('{count}', String(laterCount))
22
86
  .replace('{memories}', laterCount === 1 ? 'memory' : 'memories')
23
- .replace('{laterId}', laterId);
87
+ .replace('{which}', glimpse.passedOver ? RECALL_LATER_NEXT_CLOSEST : RECALL_LATER_CLOSEST)
88
+ .replace('{laterId}', laterId)
89
+ .replace('{gap}', () => (elapsed ? RECALL_LATER_GAP.replace('{elapsed}', elapsed) : ''))
90
+ // Last, so nothing in the opening is read as a placeholder.
91
+ .replace('{glimpse}', () => (what ? RECALL_LATER_GLIMPSE.replace('{what}', () => what) : '')));
24
92
  }
25
93
  function escapeRegExp(text) {
26
94
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
27
95
  }
28
- /** Pattern source of one marker, derived from {@link RECALL_LATER_MARKER}; no capture groups. */
96
+ /**
97
+ * Pattern source of one marker, derived from {@link RECALL_LATER_MARKER} and
98
+ * its parts; no capture groups. It finds every form the renderer writes,
99
+ * the one without a gap or a glimpse included.
100
+ */
29
101
  export const RECALL_LATER_MARKER_SOURCE = escapeRegExp(RECALL_LATER_MARKER)
30
102
  .replace(escapeRegExp('{count}'), '\\d+')
31
103
  .replace(escapeRegExp('{memories}'), 'memor(?:y|ies)')
104
+ .replace(escapeRegExp('{which}'), `(?:${escapeRegExp(RECALL_LATER_NEXT_CLOSEST)}|${escapeRegExp(RECALL_LATER_CLOSEST)})`)
105
+ .replace(escapeRegExp('{gap}'), `(?:${escapeRegExp(RECALL_LATER_GAP).replace(escapeRegExp('{elapsed}'), '[a-z0-9 ]{1,24}')})?`)
106
+ .replace(escapeRegExp('{glimpse}'), `(?:${escapeRegExp(RECALL_LATER_GLIMPSE).replace(escapeRegExp('{what}'), `[^${GLIMPSE_CLOSE}\\n]*`)})?`)
32
107
  .replace(escapeRegExp('{laterId}'), `${MEMORY_UUID_SOURCE}(?![0-9A-Za-z_-])`);
33
108
  /** The text without any later-memory marker: what the line was before one was added. */
34
109
  export function stripRecallLaterMarkers(text) {
@@ -44,4 +119,49 @@ export const AMBIENT_ITEM_POINTER_SOURCE = `\\u2014\\s*${FIRST_PERSON_POINTER_LE
44
119
  export function ambientItemPointerRegex(flags = 'g') {
45
120
  return new RegExp(AMBIENT_ITEM_POINTER_SOURCE, flags);
46
121
  }
122
+ const LATER_ID_AT_END = new RegExp(`(${MEMORY_UUID_SOURCE})$`);
123
+ /** A JIT line without a pointer names its memory by the first eight characters of its id. */
124
+ const ID_HEAD_LINE = new RegExp(`^\\[([0-9A-Fa-f]{${AMBIENT_ID_PREFIX_LENGTH}})\\] `, 'gm');
125
+ /**
126
+ * The same texts without any later-memory marker that names a memory one of
127
+ * them carries. A hook assembles one block from several server replies
128
+ * (ambient recall beside the other recall lines), and only the hook sees the
129
+ * whole block: a marker pointing at a memory a few lines away tells the agent
130
+ * nothing, so it goes. A memory is carried by the line whose own pointer names
131
+ * it, by a JIT line headed with its id, or by being named in `alsoCarried`.
132
+ * A text with no such marker is returned as the same string.
133
+ */
134
+ export function withoutMarkersNamingCarried(texts, alsoCarried = []) {
135
+ const marker = new RegExp(RECALL_LATER_MARKER_SOURCE, 'g');
136
+ if (!texts.some((text) => new RegExp(RECALL_LATER_MARKER_SOURCE).test(text)))
137
+ return [...texts];
138
+ const carried = new Set();
139
+ const heads = new Set();
140
+ const note = (id) => {
141
+ const lower = id.toLowerCase();
142
+ if (lower.length <= AMBIENT_ID_PREFIX_LENGTH)
143
+ heads.add(lower);
144
+ else
145
+ carried.add(lower);
146
+ };
147
+ alsoCarried.forEach(note);
148
+ for (const text of texts) {
149
+ // Without its markers, so a later memory's own id is not taken for a line's pointer.
150
+ const plain = stripRecallLaterMarkers(text);
151
+ for (const match of plain.matchAll(ambientItemPointerRegex('g'))) {
152
+ if (match[1])
153
+ note(match[1]);
154
+ }
155
+ for (const match of plain.matchAll(ID_HEAD_LINE)) {
156
+ if (match[1])
157
+ heads.add(match[1].toLowerCase());
158
+ }
159
+ }
160
+ return texts.map((text) => text.replace(marker, (found) => {
161
+ const later = LATER_ID_AT_END.exec(found)?.[1]?.toLowerCase();
162
+ if (!later)
163
+ return found;
164
+ return carried.has(later) || heads.has(later.slice(0, AMBIENT_ID_PREFIX_LENGTH)) ? '' : found;
165
+ }));
166
+ }
47
167
  //# sourceMappingURL=ambientPointer.js.map
@@ -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;;;;;;;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"}
1
+ {"version":3,"file":"ambientPointer.js","sourceRoot":"","sources":["../src/ambientPointer.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,12 @@ export interface BudgetedContextFit {
30
30
  }
31
31
  /** Measure rendered context in the host's native budget unit. */
32
32
  export declare function measureContext(text: string, units?: ContextBudgetUnits): number;
33
+ /**
34
+ * The items as one block reads them: no later-memory marker names a memory
35
+ * another item of the same block carries (ambientPointer.ts
36
+ * withoutMarkersNamingCarried). Items it leaves alone are the same objects.
37
+ */
38
+ export declare function withoutCarriedMarkers(items: readonly ContextBudgetItem[], alongside?: readonly ContextBudgetItem[]): ContextBudgetItem[];
33
39
  /**
34
40
  * Compose ordered items within a fixed budget. Full items are emitted exactly;
35
41
  * the first item that does not fit and every later item are shed. The first
@@ -37,6 +43,9 @@ export declare function measureContext(text: string, units?: ContextBudgetUnits)
37
43
  * share one trailing marker containing only their explicit retrieval routes.
38
44
  * Items without a route leave no agent-visible stub.
39
45
  *
46
+ * First, a later-memory marker that names a memory another item carries is
47
+ * dropped ({@link withoutCarriedMarkers}): the block is where that can be seen.
48
+ *
40
49
  * Before anything is shed, the later-memory markers go (ambientPointer.ts
41
50
  * RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
42
51
  * its place or any of its text.
@@ -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;;;;;;;;;;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"}
1
+ {"version":3,"file":"contextBudget.d.ts","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"AAMA,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;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,SAAS,GAAE,SAAS,iBAAiB,EAAO,GAC3C,iBAAiB,EAAE,CASrB;AAED;;;;;;;;;;;;;GAaG;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"}
@@ -1,4 +1,4 @@
1
- import { AMBIENT_ITEM_POINTER_SOURCE, stripRecallLaterMarkers } from './ambientPointer.js';
1
+ import { AMBIENT_ITEM_POINTER_SOURCE, stripRecallLaterMarkers, withoutMarkersNamingCarried, } 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,
@@ -53,6 +53,18 @@ function contextHead(text, budget, units) {
53
53
  export function measureContext(text, units = 'characters') {
54
54
  return units === 'utf8-bytes' ? Buffer.byteLength(text, 'utf8') : text.length;
55
55
  }
56
+ /**
57
+ * The items as one block reads them: no later-memory marker names a memory
58
+ * another item of the same block carries (ambientPointer.ts
59
+ * withoutMarkersNamingCarried). Items it leaves alone are the same objects.
60
+ */
61
+ export function withoutCarriedMarkers(items, alongside = []) {
62
+ const texts = withoutMarkersNamingCarried(items.map((item) => item.text), [...items, ...alongside].flatMap((item) => [...itemMemoryIds(item)]));
63
+ return items.map((item, index) => {
64
+ const text = texts[index] ?? item.text;
65
+ return text === item.text ? item : { ...item, text };
66
+ });
67
+ }
56
68
  /**
57
69
  * Compose ordered items within a fixed budget. Full items are emitted exactly;
58
70
  * the first item that does not fit and every later item are shed. The first
@@ -60,6 +72,9 @@ export function measureContext(text, units = 'characters') {
60
72
  * share one trailing marker containing only their explicit retrieval routes.
61
73
  * Items without a route leave no agent-visible stub.
62
74
  *
75
+ * First, a later-memory marker that names a memory another item carries is
76
+ * dropped ({@link withoutCarriedMarkers}): the block is where that can be seen.
77
+ *
63
78
  * Before anything is shed, the later-memory markers go (ambientPointer.ts
64
79
  * RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
65
80
  * its place or any of its text.
@@ -68,7 +83,7 @@ export function fitContextItems(givenItems, opts) {
68
83
  const units = opts.units ?? 'characters';
69
84
  const suffix = opts.reservedSuffix ?? [];
70
85
  const valueOf = (entries) => [...entries, ...suffix].map((item) => item.text).join(JOINER);
71
- const items = [...givenItems];
86
+ const items = withoutCarriedMarkers(givenItems, suffix);
72
87
  for (let index = items.length;; index -= 1) {
73
88
  const value = valueOf(items);
74
89
  if (measureContext(value, units) <= opts.budget) {
@@ -1 +1 @@
1
- {"version":3,"file":"contextBudget.js","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contextBudget.js","sourceRoot":"","sources":["../src/contextBudget.ts"],"names":[],"mappings":"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"}
@@ -157,7 +157,26 @@ export declare const HOOK_BUDGET_HEADER = "x-mnemonik-hook-budget-ms";
157
157
  * old runtime failing open and recall stopping silently.
158
158
  */
159
159
  export declare const HOOK_VERSION_HEADER = "x-mnemonik-hook-version";
160
- /** `init` with the hook-version header added; the caller's headers are kept. */
160
+ /**
161
+ * What this hook runtime can read of the server's replies, beyond what every
162
+ * runtime could when the header was introduced. The server writes a newer
163
+ * form only to a runtime that names it here; a runtime that does not send the
164
+ * header, or does not name the form, is sent what it was always sent. So a
165
+ * server may deploy ahead of the hooks that read its newest wording, which is
166
+ * the order every release ships in.
167
+ *
168
+ * - `later-glimpse`: the later-memory marker with the time between and the
169
+ * later memory's opening (ambientPointer.ts RECALL_LATER_MARKER).
170
+ */
171
+ export declare const HOOK_READS_HEADER = "x-mnemonik-hook-reads";
172
+ export declare const HOOK_READS_LATER_GLIMPSE = "later-glimpse";
173
+ export declare const HOOK_READS: readonly string[];
174
+ /** Whether a request's headers say its hook runtime reads `form`. */
175
+ export declare function hookReads(headers: Record<string, unknown> | undefined, form: string): boolean;
176
+ /**
177
+ * `init` with the hook-version header added, and what the runtime reads
178
+ * ({@link HOOK_READS_HEADER}); the caller's headers are kept.
179
+ */
161
180
  export declare function withHookVersion<T extends {
162
181
  headers?: unknown;
163
182
  }>(init: T, runtime: string, version: string): T;
@@ -1 +1 @@
1
- {"version":3,"file":"hookTimeouts.d.ts","sourceRoot":"","sources":["../src/hookTimeouts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hookTimeouts.d.ts","sourceRoot":"","sources":["../src/hookTimeouts.ts"],"names":[],"mappings":"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"}
@@ -160,7 +160,35 @@ export const HOOK_BUDGET_HEADER = 'x-mnemonik-hook-budget-ms';
160
160
  * old runtime failing open and recall stopping silently.
161
161
  */
162
162
  export const HOOK_VERSION_HEADER = 'x-mnemonik-hook-version';
163
- /** `init` with the hook-version header added; the caller's headers are kept. */
163
+ /**
164
+ * What this hook runtime can read of the server's replies, beyond what every
165
+ * runtime could when the header was introduced. The server writes a newer
166
+ * form only to a runtime that names it here; a runtime that does not send the
167
+ * header, or does not name the form, is sent what it was always sent. So a
168
+ * server may deploy ahead of the hooks that read its newest wording, which is
169
+ * the order every release ships in.
170
+ *
171
+ * - `later-glimpse`: the later-memory marker with the time between and the
172
+ * later memory's opening (ambientPointer.ts RECALL_LATER_MARKER).
173
+ */
174
+ export const HOOK_READS_HEADER = 'x-mnemonik-hook-reads';
175
+ export const HOOK_READS_LATER_GLIMPSE = 'later-glimpse';
176
+ export const HOOK_READS = [HOOK_READS_LATER_GLIMPSE];
177
+ /** Whether a request's headers say its hook runtime reads `form`. */
178
+ export function hookReads(headers, form) {
179
+ const raw = headers?.[HOOK_READS_HEADER];
180
+ const value = Array.isArray(raw) ? raw.join(',') : raw;
181
+ if (typeof value !== 'string')
182
+ return false;
183
+ return value
184
+ .split(',')
185
+ .map((part) => part.trim().toLowerCase())
186
+ .includes(form);
187
+ }
188
+ /**
189
+ * `init` with the hook-version header added, and what the runtime reads
190
+ * ({@link HOOK_READS_HEADER}); the caller's headers are kept.
191
+ */
164
192
  export function withHookVersion(init, runtime, version) {
165
193
  const raw = init.headers;
166
194
  if (raw && typeof raw === 'object' && !(raw instanceof Headers) && !Array.isArray(raw)) {
@@ -172,11 +200,17 @@ export function withHookVersion(init, runtime, version) {
172
200
  if (name.toLowerCase() === HOOK_VERSION_HEADER)
173
201
  delete headers[name];
174
202
  }
203
+ for (const name of Object.keys(headers)) {
204
+ if (name.toLowerCase() === HOOK_READS_HEADER)
205
+ delete headers[name];
206
+ }
175
207
  headers[HOOK_VERSION_HEADER] = `${runtime}/${version}`;
208
+ headers[HOOK_READS_HEADER] = HOOK_READS.join(',');
176
209
  return { ...init, headers };
177
210
  }
178
211
  const headers = new Headers(raw);
179
212
  headers.set(HOOK_VERSION_HEADER, `${runtime}/${version}`);
213
+ headers.set(HOOK_READS_HEADER, HOOK_READS.join(','));
180
214
  return { ...init, headers: Object.fromEntries(headers.entries()) };
181
215
  }
182
216
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hookTimeouts.js","sourceRoot":"","sources":["../src/hookTimeouts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hookTimeouts.js","sourceRoot":"","sources":["../src/hookTimeouts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonik/shared",
3
- "version": "7.177.0",
3
+ "version": "7.178.0",
4
4
  "description": "Shared constants and utilities for Mnemonik packages",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,30 +12,134 @@ const FIRST_PERSON_POINTER_LEAD_SOURCE = '(?:to recall it in full:\\s*)?';
12
12
 
13
13
  /**
14
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.
15
+ * it (RETRIEVAL_LAYER §2.0.3): how many, and a glimpse of the closest one,
16
+ * the same kind every recall line gives of its own memory: how long after the
17
+ * recalled memory it was learned, its opening, and its id. It follows the
18
+ * line's own `memory_get <id>` pointer.
19
+ *
20
+ * The glimpse is what lets an agent decide whether the later memory is worth
21
+ * recalling whole; a bare id gave it nothing to decide by (11 Nov 2026: 6 of
22
+ * 1,771 were opened). `{which}` is "closest", or "next closest" when the
23
+ * closest is already in the same reply. `{gap}` and `{glimpse}` are left out
24
+ * when they are not known, which leaves the marker as it was before the
25
+ * glimpse existed.
26
+ *
27
+ * The one place the wording lives: the renderer and the pattern that finds
28
+ * (and sheds) the marker are both built from these. A hook runtime built
29
+ * before a form existed cannot parse it, so the server writes the glimpse
30
+ * only to a runtime that says it reads it (hookTimeouts.ts HOOK_READS_HEADER).
31
+ * Agent-facing wording; it changes only with the owner's approval.
20
32
  */
21
33
  export const RECALL_LATER_MARKER =
22
- ' \u00b7 you learned {count} related {memories} later; closest: memory_get {laterId}';
34
+ ' \u00b7 you learned {count} related {memories} later; {which}{gap}: {glimpse}memory_get {laterId}';
23
35
 
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);
36
+ /** `{which}`: the later memory named is the closest one. */
37
+ export const RECALL_LATER_CLOSEST = 'closest';
38
+
39
+ /** `{which}`: the closest one is in the same reply, so the next closest is named. */
40
+ export const RECALL_LATER_NEXT_CLOSEST = 'next closest';
41
+
42
+ /** `{gap}`: how long after the recalled memory the later one was learned. */
43
+ export const RECALL_LATER_GAP = ', {elapsed} later';
44
+
45
+ /** `{glimpse}`: the later memory's opening. */
46
+ export const RECALL_LATER_GLIMPSE = '\u201c{what}\u201d ';
47
+
48
+ const GLIMPSE_CLOSE = '\u201d';
49
+
50
+ const SECOND_MS = 1_000;
51
+ const MINUTE_MS = 60 * SECOND_MS;
52
+ const HOUR_MS = 60 * MINUTE_MS;
53
+ const DAY_MS = 24 * HOUR_MS;
54
+
55
+ function elapsedUnits(count: number, unit: string): string {
56
+ return `${count} ${unit}${count === 1 ? '' : 's'}`;
57
+ }
58
+
59
+ /**
60
+ * How long after, in words: a plain duration, so no zone and no calendar
61
+ * words. Null when the later memory was not memorized after the recalled one.
62
+ */
63
+ export function renderLaterElapsed(learnedAfterMs: number | null | undefined): string | null {
64
+ if (typeof learnedAfterMs !== 'number' || !Number.isFinite(learnedAfterMs)) return null;
65
+ if (learnedAfterMs <= 0) return null;
66
+ if (learnedAfterMs < 90 * SECOND_MS) return 'moments';
67
+ if (learnedAfterMs < HOUR_MS)
68
+ return elapsedUnits(Math.round(learnedAfterMs / MINUTE_MS), 'minute');
69
+ if (learnedAfterMs < 2 * DAY_MS)
70
+ return elapsedUnits(Math.round(learnedAfterMs / HOUR_MS), 'hour');
71
+ if (learnedAfterMs < 14 * DAY_MS) return elapsedUnits(Math.round(learnedAfterMs / DAY_MS), 'day');
72
+ if (learnedAfterMs < 56 * DAY_MS) {
73
+ return elapsedUnits(Math.round(learnedAfterMs / (7 * DAY_MS)), 'week');
74
+ }
75
+ if (learnedAfterMs < 730 * DAY_MS) {
76
+ return elapsedUnits(Math.round(learnedAfterMs / (30.44 * DAY_MS)), 'month');
77
+ }
78
+ return elapsedUnits(Math.round(learnedAfterMs / (365.25 * DAY_MS)), 'year');
79
+ }
80
+
81
+ /** What a marker says of the later memory beyond its id. */
82
+ export interface RecallLaterGlimpse {
83
+ /** The later memory's opening, on one line. */
84
+ what?: string | null;
85
+ /** How long after the recalled memory it was memorized, in milliseconds. */
86
+ learnedAfterMs?: number | null;
87
+ /** The closest later memory is in the same reply; this is the next closest. */
88
+ passedOver?: boolean;
89
+ }
90
+
91
+ /** The opening as the marker can carry it: one line, and never its own closing quote. */
92
+ function glimpseText(what: string | null | undefined): string {
93
+ if (typeof what !== 'string') return '';
94
+ return what.replace(/\s+/gu, ' ').replaceAll(GLIMPSE_CLOSE, '"').trim();
95
+ }
96
+
97
+ /**
98
+ * The marker for one recalled memory: `laterCount` later related memories,
99
+ * `laterId` the one named, with what is known of it.
100
+ */
101
+ export function renderRecallLaterMarker(
102
+ laterCount: number,
103
+ laterId: string,
104
+ glimpse: RecallLaterGlimpse = {}
105
+ ): string {
106
+ const elapsed = renderLaterElapsed(glimpse.learnedAfterMs);
107
+ const what = glimpseText(glimpse.what);
108
+ return (
109
+ RECALL_LATER_MARKER.replace('{count}', String(laterCount))
110
+ .replace('{memories}', laterCount === 1 ? 'memory' : 'memories')
111
+ .replace('{which}', glimpse.passedOver ? RECALL_LATER_NEXT_CLOSEST : RECALL_LATER_CLOSEST)
112
+ .replace('{laterId}', laterId)
113
+ .replace('{gap}', () => (elapsed ? RECALL_LATER_GAP.replace('{elapsed}', elapsed) : ''))
114
+ // Last, so nothing in the opening is read as a placeholder.
115
+ .replace('{glimpse}', () => (what ? RECALL_LATER_GLIMPSE.replace('{what}', () => what) : ''))
116
+ );
29
117
  }
30
118
 
31
119
  function escapeRegExp(text: string): string {
32
120
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
33
121
  }
34
122
 
35
- /** Pattern source of one marker, derived from {@link RECALL_LATER_MARKER}; no capture groups. */
123
+ /**
124
+ * Pattern source of one marker, derived from {@link RECALL_LATER_MARKER} and
125
+ * its parts; no capture groups. It finds every form the renderer writes,
126
+ * the one without a gap or a glimpse included.
127
+ */
36
128
  export const RECALL_LATER_MARKER_SOURCE = escapeRegExp(RECALL_LATER_MARKER)
37
129
  .replace(escapeRegExp('{count}'), '\\d+')
38
130
  .replace(escapeRegExp('{memories}'), 'memor(?:y|ies)')
131
+ .replace(
132
+ escapeRegExp('{which}'),
133
+ `(?:${escapeRegExp(RECALL_LATER_NEXT_CLOSEST)}|${escapeRegExp(RECALL_LATER_CLOSEST)})`
134
+ )
135
+ .replace(
136
+ escapeRegExp('{gap}'),
137
+ `(?:${escapeRegExp(RECALL_LATER_GAP).replace(escapeRegExp('{elapsed}'), '[a-z0-9 ]{1,24}')})?`
138
+ )
139
+ .replace(
140
+ escapeRegExp('{glimpse}'),
141
+ `(?:${escapeRegExp(RECALL_LATER_GLIMPSE).replace(escapeRegExp('{what}'), `[^${GLIMPSE_CLOSE}\\n]*`)})?`
142
+ )
39
143
  .replace(escapeRegExp('{laterId}'), `${MEMORY_UUID_SOURCE}(?![0-9A-Za-z_-])`);
40
144
 
41
145
  /** The text without any later-memory marker: what the line was before one was added. */
@@ -55,3 +159,49 @@ export const AMBIENT_ITEM_POINTER_SOURCE =
55
159
  export function ambientItemPointerRegex(flags = 'g'): RegExp {
56
160
  return new RegExp(AMBIENT_ITEM_POINTER_SOURCE, flags);
57
161
  }
162
+
163
+ const LATER_ID_AT_END = new RegExp(`(${MEMORY_UUID_SOURCE})$`);
164
+ /** A JIT line without a pointer names its memory by the first eight characters of its id. */
165
+ const ID_HEAD_LINE = new RegExp(`^\\[([0-9A-Fa-f]{${AMBIENT_ID_PREFIX_LENGTH}})\\] `, 'gm');
166
+
167
+ /**
168
+ * The same texts without any later-memory marker that names a memory one of
169
+ * them carries. A hook assembles one block from several server replies
170
+ * (ambient recall beside the other recall lines), and only the hook sees the
171
+ * whole block: a marker pointing at a memory a few lines away tells the agent
172
+ * nothing, so it goes. A memory is carried by the line whose own pointer names
173
+ * it, by a JIT line headed with its id, or by being named in `alsoCarried`.
174
+ * A text with no such marker is returned as the same string.
175
+ */
176
+ export function withoutMarkersNamingCarried(
177
+ texts: readonly string[],
178
+ alsoCarried: readonly string[] = []
179
+ ): string[] {
180
+ const marker = new RegExp(RECALL_LATER_MARKER_SOURCE, 'g');
181
+ if (!texts.some((text) => new RegExp(RECALL_LATER_MARKER_SOURCE).test(text))) return [...texts];
182
+ const carried = new Set<string>();
183
+ const heads = new Set<string>();
184
+ const note = (id: string): void => {
185
+ const lower = id.toLowerCase();
186
+ if (lower.length <= AMBIENT_ID_PREFIX_LENGTH) heads.add(lower);
187
+ else carried.add(lower);
188
+ };
189
+ alsoCarried.forEach(note);
190
+ for (const text of texts) {
191
+ // Without its markers, so a later memory's own id is not taken for a line's pointer.
192
+ const plain = stripRecallLaterMarkers(text);
193
+ for (const match of plain.matchAll(ambientItemPointerRegex('g'))) {
194
+ if (match[1]) note(match[1]);
195
+ }
196
+ for (const match of plain.matchAll(ID_HEAD_LINE)) {
197
+ if (match[1]) heads.add(match[1].toLowerCase());
198
+ }
199
+ }
200
+ return texts.map((text) =>
201
+ text.replace(marker, (found: string) => {
202
+ const later = LATER_ID_AT_END.exec(found)?.[1]?.toLowerCase();
203
+ if (!later) return found;
204
+ return carried.has(later) || heads.has(later.slice(0, AMBIENT_ID_PREFIX_LENGTH)) ? '' : found;
205
+ })
206
+ );
207
+ }
@@ -1,4 +1,8 @@
1
- import { AMBIENT_ITEM_POINTER_SOURCE, stripRecallLaterMarkers } from './ambientPointer.js';
1
+ import {
2
+ AMBIENT_ITEM_POINTER_SOURCE,
3
+ stripRecallLaterMarkers,
4
+ withoutMarkersNamingCarried,
5
+ } from './ambientPointer.js';
2
6
 
3
7
  export { AMBIENT_ITEM_POINTER_SOURCE } from './ambientPointer.js';
4
8
 
@@ -85,6 +89,25 @@ export function measureContext(text: string, units: ContextBudgetUnits = 'charac
85
89
  return units === 'utf8-bytes' ? Buffer.byteLength(text, 'utf8') : text.length;
86
90
  }
87
91
 
92
+ /**
93
+ * The items as one block reads them: no later-memory marker names a memory
94
+ * another item of the same block carries (ambientPointer.ts
95
+ * withoutMarkersNamingCarried). Items it leaves alone are the same objects.
96
+ */
97
+ export function withoutCarriedMarkers(
98
+ items: readonly ContextBudgetItem[],
99
+ alongside: readonly ContextBudgetItem[] = []
100
+ ): ContextBudgetItem[] {
101
+ const texts = withoutMarkersNamingCarried(
102
+ items.map((item) => item.text),
103
+ [...items, ...alongside].flatMap((item) => [...itemMemoryIds(item)])
104
+ );
105
+ return items.map((item, index) => {
106
+ const text = texts[index] ?? item.text;
107
+ return text === item.text ? item : { ...item, text };
108
+ });
109
+ }
110
+
88
111
  /**
89
112
  * Compose ordered items within a fixed budget. Full items are emitted exactly;
90
113
  * the first item that does not fit and every later item are shed. The first
@@ -92,6 +115,9 @@ export function measureContext(text: string, units: ContextBudgetUnits = 'charac
92
115
  * share one trailing marker containing only their explicit retrieval routes.
93
116
  * Items without a route leave no agent-visible stub.
94
117
  *
118
+ * First, a later-memory marker that names a memory another item carries is
119
+ * dropped ({@link withoutCarriedMarkers}): the block is where that can be seen.
120
+ *
95
121
  * Before anything is shed, the later-memory markers go (ambientPointer.ts
96
122
  * RECALL_LATER_MARKER), the last item's first: a marker never costs a memory
97
123
  * its place or any of its text.
@@ -108,7 +134,7 @@ export function fitContextItems(
108
134
  const suffix = opts.reservedSuffix ?? [];
109
135
  const valueOf = (entries: readonly ContextBudgetItem[]): string =>
110
136
  [...entries, ...suffix].map((item) => item.text).join(JOINER);
111
- const items = [...givenItems];
137
+ const items = withoutCarriedMarkers(givenItems, suffix);
112
138
  for (let index = items.length; ; index -= 1) {
113
139
  const value = valueOf(items);
114
140
  if (measureContext(value, units) <= opts.budget) {
@@ -179,7 +179,36 @@ export const HOOK_BUDGET_HEADER = 'x-mnemonik-hook-budget-ms';
179
179
  */
180
180
  export const HOOK_VERSION_HEADER = 'x-mnemonik-hook-version';
181
181
 
182
- /** `init` with the hook-version header added; the caller's headers are kept. */
182
+ /**
183
+ * What this hook runtime can read of the server's replies, beyond what every
184
+ * runtime could when the header was introduced. The server writes a newer
185
+ * form only to a runtime that names it here; a runtime that does not send the
186
+ * header, or does not name the form, is sent what it was always sent. So a
187
+ * server may deploy ahead of the hooks that read its newest wording, which is
188
+ * the order every release ships in.
189
+ *
190
+ * - `later-glimpse`: the later-memory marker with the time between and the
191
+ * later memory's opening (ambientPointer.ts RECALL_LATER_MARKER).
192
+ */
193
+ export const HOOK_READS_HEADER = 'x-mnemonik-hook-reads';
194
+ export const HOOK_READS_LATER_GLIMPSE = 'later-glimpse';
195
+ export const HOOK_READS: readonly string[] = [HOOK_READS_LATER_GLIMPSE];
196
+
197
+ /** Whether a request's headers say its hook runtime reads `form`. */
198
+ export function hookReads(headers: Record<string, unknown> | undefined, form: string): boolean {
199
+ const raw = headers?.[HOOK_READS_HEADER];
200
+ const value = Array.isArray(raw) ? raw.join(',') : raw;
201
+ if (typeof value !== 'string') return false;
202
+ return value
203
+ .split(',')
204
+ .map((part) => part.trim().toLowerCase())
205
+ .includes(form);
206
+ }
207
+
208
+ /**
209
+ * `init` with the hook-version header added, and what the runtime reads
210
+ * ({@link HOOK_READS_HEADER}); the caller's headers are kept.
211
+ */
183
212
  export function withHookVersion<T extends { headers?: unknown }>(
184
213
  init: T,
185
214
  runtime: string,
@@ -197,11 +226,16 @@ export function withHookVersion<T extends { headers?: unknown }>(
197
226
  for (const name of Object.keys(headers)) {
198
227
  if (name.toLowerCase() === HOOK_VERSION_HEADER) delete headers[name];
199
228
  }
229
+ for (const name of Object.keys(headers)) {
230
+ if (name.toLowerCase() === HOOK_READS_HEADER) delete headers[name];
231
+ }
200
232
  headers[HOOK_VERSION_HEADER] = `${runtime}/${version}`;
233
+ headers[HOOK_READS_HEADER] = HOOK_READS.join(',');
201
234
  return { ...init, headers };
202
235
  }
203
236
  const headers = new Headers(raw as ConstructorParameters<typeof Headers>[0]);
204
237
  headers.set(HOOK_VERSION_HEADER, `${runtime}/${version}`);
238
+ headers.set(HOOK_READS_HEADER, HOOK_READS.join(','));
205
239
  return { ...init, headers: Object.fromEntries(headers.entries()) };
206
240
  }
207
241