@koda-sl/baker-bridge 0.37.4 → 0.38.2-dev.204b3080
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/README.md +25 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/hono/agent.d.ts +5 -2
- package/dist/hono/agent.d.ts.map +1 -1
- package/dist/hono/agent.js +46 -8
- package/dist/hono/agent.js.map +1 -1
- package/dist/hono/callback.js +2 -2
- package/dist/hono/callback.js.map +1 -1
- package/dist/hono/memory.d.ts +12 -0
- package/dist/hono/memory.d.ts.map +1 -0
- package/dist/hono/memory.js +203 -0
- package/dist/hono/memory.js.map +1 -0
- package/dist/hono/memory.test.d.ts +2 -0
- package/dist/hono/memory.test.d.ts.map +1 -0
- package/dist/hono/memory.test.js +235 -0
- package/dist/hono/memory.test.js.map +1 -0
- package/dist/hono/types.d.ts +7 -0
- package/dist/hono/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ Convex action ──POST /message/async──▶ Bridge AgentSession
|
|
|
97
97
|
- All Convex POSTs retry 3× with exponential backoff (1s, 2s, 4s).
|
|
98
98
|
- Persistent failures of `/api/chat/event` and `/api/chat/complete` are
|
|
99
99
|
appended to `~/.baker/relay-errors.jsonl` for post-mortem.
|
|
100
|
-
- The SDK iterator is wrapped in a
|
|
100
|
+
- The SDK iterator is wrapped in a 30 min watchdog: if no event arrives for
|
|
101
101
|
that long, the run is aborted and the thread is marked errored.
|
|
102
102
|
- A 45s heartbeat keeps the Convex thread alive during long tool executions
|
|
103
103
|
when no SDK events are flowing. Without it, the 2 min stale-thread cron
|
|
@@ -189,6 +189,30 @@ cat ~/.baker/relay-errors.jsonl
|
|
|
189
189
|
|
|
190
190
|
If a thread is stuck in `"streaming"`, this file tells you whether the bridge failed to reach Convex (and why — auth, network, HTTP status).
|
|
191
191
|
|
|
192
|
+
## Agent memory
|
|
193
|
+
|
|
194
|
+
The bridge auto-bootstraps a `.memory/` directory in the project cwd on first turn and injects an instruction block plus eager-loaded files into the SDK's `appendSystemPrompt`. The snapshot is **frozen per `(user, UTC date)`** — built once on the first turn and reused byte-identical across subsequent turns within the same day so Anthropic's prefix cache hits. Mid-session writes to `.memory/` persist to disk but only re-inject when the cache invalidates (date rollover or user change).
|
|
195
|
+
|
|
196
|
+
Layout the bridge expects:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
<cwd>/.memory/
|
|
200
|
+
MEMORY.md # eager-loaded each session (≤80 lines)
|
|
201
|
+
sessions/YYYY-MM-DD.md # append-only daily journal; today's preview eager-loaded (≤25 lines)
|
|
202
|
+
project/<topic>.md # curated project-wide facts; lazy-loaded
|
|
203
|
+
people/<user-slug>.md # per-human facts; only the active user's file is eager-loaded
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
When `/message/async` includes `user: { id, email }`, the bridge slugifies the email's local part and eager-loads `people/<slug>.md` alongside `MEMORY.md`. Without `user`, the agent is instructed not to write under `people/`.
|
|
207
|
+
|
|
208
|
+
The agent is taught (via the injected instruction block) to:
|
|
209
|
+
|
|
210
|
+
- **Write fast observations** into `sessions/<today>.md` — low-friction draft layer
|
|
211
|
+
- **Promote durable signal** into `project/` and `people/` via the scaffold's `/memory-promote` skill
|
|
212
|
+
- **Search older or cross-user context** via `qmd search --collection agent-memory <terms>` (the scaffold registers an `agent-memory` qmd collection over `sessions/` + `project/` + `people/`. `MEMORY.md` is deliberately excluded — it's a tiny pointer index, eager-loaded above)
|
|
213
|
+
|
|
214
|
+
Memory is loose narrative recall, distinct from any structured content store the project ships (`src/content/` in scaffolds is schema-validated client intel — a different layer).
|
|
215
|
+
|
|
192
216
|
## Requirements
|
|
193
217
|
|
|
194
218
|
- Node.js 18+
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
declare const args: string[];
|
|
3
3
|
declare const command: string;
|
|
4
|
-
declare const VERSION = "0.
|
|
4
|
+
declare const VERSION = "0.38.2";
|
|
5
5
|
declare function printUsage(): void;
|
|
6
6
|
declare function main(): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.js
CHANGED
package/dist/hono/agent.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { SlashCommand } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
-
import type { ChatAttachment } from "./types.ts";
|
|
2
|
+
import type { ChatAttachment, ChatUser } from "./types.ts";
|
|
3
3
|
declare class AgentSession {
|
|
4
4
|
readonly threadId: string;
|
|
5
5
|
private sessionId;
|
|
6
6
|
private pendingQuestions;
|
|
7
7
|
private handlerCtx;
|
|
8
8
|
private options;
|
|
9
|
+
private memorySnapshot;
|
|
10
|
+
private memoryDirEnsured;
|
|
9
11
|
/** Identity token for the currently-running stream. abort() nulls this; if a
|
|
10
12
|
* later check sees a different value, the run knows it was abandoned. This
|
|
11
13
|
* replaces a global `aborted` flag whose reset-on-entry was racy. */
|
|
@@ -25,7 +27,8 @@ declare class AgentSession {
|
|
|
25
27
|
abort(): void;
|
|
26
28
|
setSessionId(id: string): void;
|
|
27
29
|
resolveQuestion(toolUseId: string, answers: Record<string, string>): boolean;
|
|
28
|
-
|
|
30
|
+
private getMemorySnapshot;
|
|
31
|
+
sendAndStream(content: string, attachments?: ChatAttachment[], user?: ChatUser): Promise<void>;
|
|
29
32
|
private runStream;
|
|
30
33
|
private handleStreamEvent;
|
|
31
34
|
private handleContentBlockStart;
|
package/dist/hono/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAmBxF,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA+C3D,cAAM,YAAY;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,OAAO,CAAU;IAUzB,OAAO,CAAC,cAAc,CAA2D;IACjF,OAAO,CAAC,gBAAgB,CAAS;IAEjC;;0EAEsE;IACtE,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,KAAK,CAAqB;IAClC;oFACgF;IAChF,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,oBAAoB,CAAS;IACrC,UAAU,EAAE,MAAM,CAAc;gBAEpB,QAAQ,EAAE,MAAM;IAM5B,kFAAkF;IAClF,KAAK,IAAI,IAAI;IAgBb,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;YAU9D,iBAAiB;IAgBzB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BtF,SAAS;IA2GvB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,uBAAuB;YAiBjB,aAAa;YAgBb,aAAa;YA8Bb,kBAAkB;YAYlB,iBAAiB;CAehC;AAmGD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAahF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtD;AAWD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAuBhE"}
|
package/dist/hono/agent.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
import { buildAttachmentPromptSuffix, downloadAttachments } from "./attachments.js";
|
|
3
3
|
import { clearStreamBuffer, enqueueStreamingTools, enqueueStreamText, flushStream, markStreamReplace, postEvent, postHeartbeat, postInputRequest, postInputResolved, postRouterSample, signalComplete, } from "./convex.js";
|
|
4
|
+
import { buildMemoryContext, ensureMemoryDir, todaySessionFilename } from "./memory.js";
|
|
4
5
|
import { selectModel } from "./model-router.js";
|
|
5
6
|
import { loadSessionId, saveSessionId } from "./session-store.js";
|
|
6
7
|
// ---------------------------------------------------------------------------
|
|
7
8
|
// Tunables
|
|
8
9
|
// ---------------------------------------------------------------------------
|
|
9
|
-
/** No SDK output for this long → declare the agent stalled and abort.
|
|
10
|
-
|
|
10
|
+
/** No SDK output for this long → declare the agent stalled and abort.
|
|
11
|
+
* Set high (30 min) because agents routinely run long background jobs
|
|
12
|
+
* (research, builds) where the SDK is silent for 10–15 min. */
|
|
13
|
+
const SDK_WATCHDOG_MS = 30 * 60 * 1000;
|
|
11
14
|
/** Max wait for a previous in-flight run to drain when a new chat arrives. */
|
|
12
15
|
const REPLACE_STREAM_TIMEOUT_MS = 30_000;
|
|
13
16
|
/** Drop sessions that haven't been touched for this long (memory bound). */
|
|
@@ -28,6 +31,17 @@ class AgentSession {
|
|
|
28
31
|
pendingQuestions = new Map();
|
|
29
32
|
handlerCtx;
|
|
30
33
|
options;
|
|
34
|
+
// Frozen memory snapshot — built once per (user, UTC date) and reused across
|
|
35
|
+
// turns so `appendSystemPrompt` stays byte-identical and the Anthropic prefix
|
|
36
|
+
// cache hits. Mid-session writes to `.memory/` persist to disk but do not
|
|
37
|
+
// re-inject until the cache invalidates (Hermes pattern).
|
|
38
|
+
//
|
|
39
|
+
// The date component is in the cache key because the snapshot includes a
|
|
40
|
+
// preview of `.memory/sessions/<today>.md` — a long-running thread that
|
|
41
|
+
// spans multiple days would otherwise serve a stale preview pointing at
|
|
42
|
+
// yesterday's filename.
|
|
43
|
+
memorySnapshot = null;
|
|
44
|
+
memoryDirEnsured = false;
|
|
31
45
|
/** Identity token for the currently-running stream. abort() nulls this; if a
|
|
32
46
|
* later check sees a different value, the run knows it was abandoned. This
|
|
33
47
|
* replaces a global `aborted` flag whose reset-on-entry was racy. */
|
|
@@ -76,7 +90,22 @@ class AgentSession {
|
|
|
76
90
|
this.pendingQuestions.delete(toolUseId);
|
|
77
91
|
return true;
|
|
78
92
|
}
|
|
79
|
-
async
|
|
93
|
+
async getMemorySnapshot(user) {
|
|
94
|
+
const userKey = user ? `${user.id}:${user.email ?? ""}` : "_anon";
|
|
95
|
+
const cacheKey = `${userKey}|${todaySessionFilename(new Date(), this.threadId)}`;
|
|
96
|
+
if (this.memorySnapshot?.cacheKey === cacheKey) {
|
|
97
|
+
return this.memorySnapshot.promptAppend;
|
|
98
|
+
}
|
|
99
|
+
const cwd = this.options.cwd ?? process.cwd();
|
|
100
|
+
if (!this.memoryDirEnsured) {
|
|
101
|
+
await ensureMemoryDir(cwd);
|
|
102
|
+
this.memoryDirEnsured = true;
|
|
103
|
+
}
|
|
104
|
+
const ctx = await buildMemoryContext(cwd, user, this.threadId);
|
|
105
|
+
this.memorySnapshot = { cacheKey, promptAppend: ctx.systemPromptAppend };
|
|
106
|
+
return ctx.systemPromptAppend;
|
|
107
|
+
}
|
|
108
|
+
async sendAndStream(content, attachments, user) {
|
|
80
109
|
if (this.streamingPromise) {
|
|
81
110
|
this.replacingStream = true;
|
|
82
111
|
this.abort();
|
|
@@ -94,7 +123,7 @@ class AgentSession {
|
|
|
94
123
|
this.replacingStream = false;
|
|
95
124
|
}
|
|
96
125
|
}
|
|
97
|
-
this.streamingPromise = this.runStream(content, attachments);
|
|
126
|
+
this.streamingPromise = this.runStream(content, attachments, user);
|
|
98
127
|
try {
|
|
99
128
|
await this.streamingPromise;
|
|
100
129
|
}
|
|
@@ -102,7 +131,7 @@ class AgentSession {
|
|
|
102
131
|
this.streamingPromise = null;
|
|
103
132
|
}
|
|
104
133
|
}
|
|
105
|
-
async runStream(content, attachments) {
|
|
134
|
+
async runStream(content, attachments, user) {
|
|
106
135
|
const runToken = Symbol("agent-run");
|
|
107
136
|
this.activeRun = runToken;
|
|
108
137
|
this.lastUsedAt = Date.now();
|
|
@@ -112,7 +141,7 @@ class AgentSession {
|
|
|
112
141
|
let costUsd = 0;
|
|
113
142
|
this.model = undefined;
|
|
114
143
|
try {
|
|
115
|
-
const prepared = await this.preparePrompt(content, attachments, runToken);
|
|
144
|
+
const prepared = await this.preparePrompt(content, attachments, user, runToken);
|
|
116
145
|
if (!prepared) {
|
|
117
146
|
await this.completeWithCancel(0);
|
|
118
147
|
return;
|
|
@@ -124,6 +153,11 @@ class AgentSession {
|
|
|
124
153
|
...this.options,
|
|
125
154
|
model: prepared.model,
|
|
126
155
|
abortController: this.activeAbort,
|
|
156
|
+
systemPrompt: {
|
|
157
|
+
type: "preset",
|
|
158
|
+
preset: "claude_code",
|
|
159
|
+
append: prepared.memoryPromptAppend,
|
|
160
|
+
},
|
|
127
161
|
...(this.sessionId && { resume: this.sessionId }),
|
|
128
162
|
};
|
|
129
163
|
const q = query({ prompt: prepared.prompt, options: opts });
|
|
@@ -237,7 +271,7 @@ class AgentSession {
|
|
|
237
271
|
}
|
|
238
272
|
// system / result messages are not persisted; result.cost_usd is captured above.
|
|
239
273
|
}
|
|
240
|
-
async preparePrompt(content, attachments, runToken) {
|
|
274
|
+
async preparePrompt(content, attachments, user, runToken) {
|
|
241
275
|
let prompt = content;
|
|
242
276
|
if (attachments && attachments.length > 0) {
|
|
243
277
|
const paths = await downloadAttachments(attachments);
|
|
@@ -246,11 +280,15 @@ class AgentSession {
|
|
|
246
280
|
if (this.activeRun !== runToken) {
|
|
247
281
|
return null;
|
|
248
282
|
}
|
|
283
|
+
const memoryPromptAppend = await this.getMemorySnapshot(user);
|
|
284
|
+
if (this.activeRun !== runToken) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
249
287
|
const routerResult = await selectModel(prompt);
|
|
250
288
|
if (this.activeRun !== runToken) {
|
|
251
289
|
return null;
|
|
252
290
|
}
|
|
253
|
-
return { prompt, model: routerResult.model, routerMessages: routerResult.messages };
|
|
291
|
+
return { prompt, model: routerResult.model, routerMessages: routerResult.messages, memoryPromptAppend };
|
|
254
292
|
}
|
|
255
293
|
async completeWithCancel(costUsd) {
|
|
256
294
|
// Don't fire signalComplete if we're being replaced by another stream — the
|
package/dist/hono/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/hono/callback.js
CHANGED
|
@@ -5,8 +5,8 @@ import { getOrCreateSession } from "./agent.js";
|
|
|
5
5
|
* needs to be returned because Convex is the source of truth for the UI.
|
|
6
6
|
*/
|
|
7
7
|
export async function processAsync(request) {
|
|
8
|
-
const { prompt, threadId, attachments } = request;
|
|
8
|
+
const { prompt, threadId, attachments, user } = request;
|
|
9
9
|
const session = await getOrCreateSession(threadId);
|
|
10
|
-
await session.sendAndStream(prompt, attachments);
|
|
10
|
+
await session.sendAndStream(prompt, attachments, user);
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=callback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChatUser } from "./types.ts";
|
|
2
|
+
interface MemoryContext {
|
|
3
|
+
systemPromptAppend: string;
|
|
4
|
+
hasMemory: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function ensureMemoryDir(cwd: string): Promise<string>;
|
|
7
|
+
export declare function slugifyUser(user: ChatUser): string;
|
|
8
|
+
export declare function todayDatePrefix(now?: Date): string;
|
|
9
|
+
export declare function todaySessionFilename(now?: Date, threadId?: string): string;
|
|
10
|
+
export declare function buildMemoryContext(cwd: string, user?: ChatUser, threadId?: string): Promise<MemoryContext>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/hono/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,aAAa;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAyBD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMlD;AASD,wBAAgB,eAAe,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAK9D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,IAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAItF;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyChH"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const MEMORY_DIR_NAME = ".memory";
|
|
4
|
+
const INDEX_FILE = "MEMORY.md";
|
|
5
|
+
const PROJECT_DIR = "project";
|
|
6
|
+
const PEOPLE_DIR = "people";
|
|
7
|
+
const SESSIONS_DIR = "sessions";
|
|
8
|
+
const BUDGET_INDEX = 75;
|
|
9
|
+
const BUDGET_PEOPLE = 40;
|
|
10
|
+
const BUDGET_SESSION = 25;
|
|
11
|
+
const PROMOTE_THRESHOLD_INDEX_LINES = 60;
|
|
12
|
+
const PROMOTE_THRESHOLD_SESSION_COUNT = 8;
|
|
13
|
+
const NEEDS_PROMOTE_FILE = ".needs-promote";
|
|
14
|
+
const SEED_INDEX = `<!-- seed -->
|
|
15
|
+
# Memory
|
|
16
|
+
|
|
17
|
+
This is your brain. Loose, narrative recall — what you remember about this project across sessions.
|
|
18
|
+
|
|
19
|
+
Different from \`src/content/\` (structured client intel). This is the agent's working memory: who the user is, surprises, corrections, ambient context the code doesn't capture.
|
|
20
|
+
|
|
21
|
+
Update as you learn. Keep this file scannable (≤80 lines). Spill detail into \`project/\`, \`people/\`, and \`sessions/\` files when topics outgrow a one-liner.
|
|
22
|
+
`;
|
|
23
|
+
export async function ensureMemoryDir(cwd) {
|
|
24
|
+
const memDir = join(cwd, MEMORY_DIR_NAME);
|
|
25
|
+
await mkdir(join(memDir, PROJECT_DIR), { recursive: true });
|
|
26
|
+
await mkdir(join(memDir, PEOPLE_DIR), { recursive: true });
|
|
27
|
+
await mkdir(join(memDir, SESSIONS_DIR), { recursive: true });
|
|
28
|
+
const indexPath = join(memDir, INDEX_FILE);
|
|
29
|
+
if (!(await fileExists(indexPath))) {
|
|
30
|
+
await writeFile(indexPath, SEED_INDEX, "utf-8");
|
|
31
|
+
}
|
|
32
|
+
return memDir;
|
|
33
|
+
}
|
|
34
|
+
export function slugifyUser(user) {
|
|
35
|
+
const parts = user.email?.split("@") ?? [];
|
|
36
|
+
const local = parts[0] ?? "";
|
|
37
|
+
const domain = parts[1]?.split(".")[0] ?? "";
|
|
38
|
+
const combined = domain ? `${local}-${domain}` : local;
|
|
39
|
+
return slugify(combined) || slugify(user.id) || "unknown";
|
|
40
|
+
}
|
|
41
|
+
function slugify(input) {
|
|
42
|
+
return input
|
|
43
|
+
.toLowerCase()
|
|
44
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
45
|
+
.replace(/^-+|-+$/g, "");
|
|
46
|
+
}
|
|
47
|
+
export function todayDatePrefix(now = new Date()) {
|
|
48
|
+
const y = now.getUTCFullYear();
|
|
49
|
+
const m = String(now.getUTCMonth() + 1).padStart(2, "0");
|
|
50
|
+
const d = String(now.getUTCDate()).padStart(2, "0");
|
|
51
|
+
return `${String(y)}-${m}-${d}`;
|
|
52
|
+
}
|
|
53
|
+
export function todaySessionFilename(now = new Date(), threadId) {
|
|
54
|
+
const prefix = todayDatePrefix(now);
|
|
55
|
+
const suffix = threadId ? `-${threadId.slice(0, 8)}` : "";
|
|
56
|
+
return `${prefix}${suffix}.md`;
|
|
57
|
+
}
|
|
58
|
+
export async function buildMemoryContext(cwd, user, threadId) {
|
|
59
|
+
const memDir = join(cwd, MEMORY_DIR_NAME);
|
|
60
|
+
const indexBody = await readTruncated(join(memDir, INDEX_FILE), BUDGET_INDEX);
|
|
61
|
+
const hasRealContent = indexBody !== null && !isSeedOnly(indexBody);
|
|
62
|
+
const prefix = todayDatePrefix();
|
|
63
|
+
const sessionsDir = join(memDir, SESSIONS_DIR);
|
|
64
|
+
const todayBody = await readTodaySessions(sessionsDir, prefix, BUDGET_SESSION);
|
|
65
|
+
let peopleBody = null;
|
|
66
|
+
let slug;
|
|
67
|
+
if (user) {
|
|
68
|
+
slug = slugifyUser(user);
|
|
69
|
+
peopleBody = await readTruncated(join(memDir, PEOPLE_DIR, `${slug}.md`), BUDGET_PEOPLE);
|
|
70
|
+
}
|
|
71
|
+
if (!hasRealContent && peopleBody === null && todayBody === null) {
|
|
72
|
+
return {
|
|
73
|
+
systemPromptAppend: buildMinimalStub(user, slug),
|
|
74
|
+
hasMemory: false,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const needsPromote = await checkPromoteThresholds(memDir, indexBody);
|
|
78
|
+
const sections = [];
|
|
79
|
+
if (needsPromote) {
|
|
80
|
+
sections.push("**⚠ MEMORY BUDGET EXCEEDED — run /memory-promote before proceeding with the user's task.**");
|
|
81
|
+
}
|
|
82
|
+
sections.push(MEMORY_HEADER);
|
|
83
|
+
sections.push(...buildUserSections(user, slug, peopleBody, threadId));
|
|
84
|
+
if (todayBody !== null) {
|
|
85
|
+
sections.push(`## Today's session journals (preview)\n\n${todayBody}`);
|
|
86
|
+
}
|
|
87
|
+
if (indexBody !== null) {
|
|
88
|
+
sections.push(`## .memory/MEMORY.md (eager-loaded)\n\n${indexBody}`);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
systemPromptAppend: sections.join("\n\n"),
|
|
92
|
+
hasMemory: hasRealContent || peopleBody !== null || todayBody !== null,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function buildUserSections(user, slug, peopleBody, threadId) {
|
|
96
|
+
if (!user || !slug) {
|
|
97
|
+
return [
|
|
98
|
+
"## Current user\n\nUnknown. Do not write to `.memory/people/` this session — only `MEMORY.md`, `.memory/project/`, and `.memory/sessions/`.",
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
const label = user.email || slug;
|
|
102
|
+
const emailLine = user.email ? `- email: ${user.email}\n` : "";
|
|
103
|
+
const sessionFile = todaySessionFilename(new Date(), threadId);
|
|
104
|
+
const result = [
|
|
105
|
+
`## Current user\n\n${emailLine}- slug: ${slug}\n- personal-memory: \`.memory/people/${slug}.md\`\n- session-file: \`.memory/sessions/${sessionFile}\``,
|
|
106
|
+
];
|
|
107
|
+
if (peopleBody !== null) {
|
|
108
|
+
result.push(`## What you remember about ${label}\n\n${appendStalenessWarning(peopleBody)}`);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
function isSeedOnly(body) {
|
|
113
|
+
return body.includes("<!-- seed -->");
|
|
114
|
+
}
|
|
115
|
+
function buildMinimalStub(user, slug) {
|
|
116
|
+
const userLine = user ? `User: ${user.email || slug} (slug: ${slug}).` : "User: unknown — skip `.memory/people/`.";
|
|
117
|
+
return `# Agent memory — \`.memory/\`\n\nEmpty. Write observations to \`sessions/<today>.md\`, durable facts to \`project/\` or \`people/\`. Index in \`MEMORY.md\`.\n${userLine}\nSearch older context: \`qmd search --collection agent-memory <terms>\`.`;
|
|
118
|
+
}
|
|
119
|
+
const MEMORY_HEADER = `# Agent memory — \`.memory/\`
|
|
120
|
+
|
|
121
|
+
Write: sessions/<today>.md. Search older: \`qmd search --collection agent-memory <terms>\`. Consolidate: \`/memory-promote\`.`;
|
|
122
|
+
const STALENESS_THRESHOLD_DAYS = 60;
|
|
123
|
+
function appendStalenessWarning(body) {
|
|
124
|
+
const match = body.match(/^<!--\s*verified:\s*(\d{4}-\d{2}-\d{2})\s*-->/);
|
|
125
|
+
if (!match?.[1])
|
|
126
|
+
return body;
|
|
127
|
+
const verified = new Date(`${match[1]}T00:00:00Z`);
|
|
128
|
+
if (Number.isNaN(verified.getTime()))
|
|
129
|
+
return body;
|
|
130
|
+
const daysSince = Math.floor((Date.now() - verified.getTime()) / (1000 * 60 * 60 * 24));
|
|
131
|
+
if (daysSince > STALENESS_THRESHOLD_DAYS) {
|
|
132
|
+
return `${body}\n\n[stale — last verified ${match[1]}, ${String(daysSince)} days ago]`;
|
|
133
|
+
}
|
|
134
|
+
return body;
|
|
135
|
+
}
|
|
136
|
+
async function readTodaySessions(sessionsDir, prefix, budget) {
|
|
137
|
+
const files = await safeReaddir(sessionsDir);
|
|
138
|
+
const todayFiles = files.filter((f) => f.startsWith(prefix) && f.endsWith(".md")).sort();
|
|
139
|
+
if (todayFiles.length === 0)
|
|
140
|
+
return null;
|
|
141
|
+
const perFile = Math.max(5, Math.floor(budget / todayFiles.length));
|
|
142
|
+
const parts = [];
|
|
143
|
+
for (const f of todayFiles) {
|
|
144
|
+
const body = await readTruncated(join(sessionsDir, f), perFile);
|
|
145
|
+
if (body !== null) {
|
|
146
|
+
parts.push(body);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return parts.length > 0 ? parts.join("\n\n---\n\n") : null;
|
|
150
|
+
}
|
|
151
|
+
async function checkPromoteThresholds(memDir, indexBody) {
|
|
152
|
+
if (await fileExists(join(memDir, NEEDS_PROMOTE_FILE))) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
if (indexBody !== null) {
|
|
156
|
+
const lineCount = indexBody.split("\n").length;
|
|
157
|
+
if (lineCount > PROMOTE_THRESHOLD_INDEX_LINES) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const sessionFiles = await safeReaddir(join(memDir, SESSIONS_DIR));
|
|
162
|
+
const mdCount = sessionFiles.filter((f) => f.endsWith(".md")).length;
|
|
163
|
+
return mdCount >= PROMOTE_THRESHOLD_SESSION_COUNT;
|
|
164
|
+
}
|
|
165
|
+
async function safeReaddir(dir) {
|
|
166
|
+
try {
|
|
167
|
+
return await readdir(dir);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
if (err.code === "ENOENT")
|
|
171
|
+
return [];
|
|
172
|
+
throw err;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function fileExists(path) {
|
|
176
|
+
try {
|
|
177
|
+
await stat(path);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
if (err.code === "ENOENT")
|
|
182
|
+
return false;
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Duplicated in apps/scaffold-template/__tooling__/scripts/memory-context.mjs
|
|
187
|
+
async function readTruncated(path, maxLines) {
|
|
188
|
+
let raw;
|
|
189
|
+
try {
|
|
190
|
+
raw = await readFile(path, "utf-8");
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
if (err.code === "ENOENT")
|
|
194
|
+
return null;
|
|
195
|
+
throw err;
|
|
196
|
+
}
|
|
197
|
+
const lines = raw.split("\n");
|
|
198
|
+
if (lines.length <= maxLines) {
|
|
199
|
+
return raw.trimEnd();
|
|
200
|
+
}
|
|
201
|
+
return `${lines.slice(0, maxLines).join("\n")}\n\n[truncated — file exceeds ${String(maxLines)} lines; consolidate before next session]`;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/hono/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../src/hono/memory.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { buildMemoryContext, ensureMemoryDir, slugifyUser, todayDatePrefix, todaySessionFilename } from "./memory.js";
|
|
6
|
+
let workdir;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
workdir = await mkdtemp(join(tmpdir(), "memory-test-"));
|
|
9
|
+
});
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await rm(workdir, { recursive: true, force: true });
|
|
12
|
+
});
|
|
13
|
+
describe("ensureMemoryDir", () => {
|
|
14
|
+
it("creates .memory/ with project, people, and seeded MEMORY.md", async () => {
|
|
15
|
+
await ensureMemoryDir(workdir);
|
|
16
|
+
const seed = await readFile(join(workdir, ".memory/MEMORY.md"), "utf-8");
|
|
17
|
+
expect(seed).toContain("# Memory");
|
|
18
|
+
expect(seed).toContain("brain");
|
|
19
|
+
});
|
|
20
|
+
it("is idempotent — does not overwrite existing MEMORY.md", async () => {
|
|
21
|
+
await ensureMemoryDir(workdir);
|
|
22
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# custom content\n", "utf-8");
|
|
23
|
+
await ensureMemoryDir(workdir);
|
|
24
|
+
const after = await readFile(join(workdir, ".memory/MEMORY.md"), "utf-8");
|
|
25
|
+
expect(after).toBe("# custom content\n");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe("slugifyUser", () => {
|
|
29
|
+
it("includes domain in the slug", () => {
|
|
30
|
+
expect(slugifyUser({ id: "u1", email: "Jacin@landingbakery.com" })).toBe("jacin-landingbakery");
|
|
31
|
+
});
|
|
32
|
+
it("normalizes punctuation in the email", () => {
|
|
33
|
+
expect(slugifyUser({ id: "u2", email: "alex.smith+work@example.com" })).toBe("alex-smith-work-example");
|
|
34
|
+
});
|
|
35
|
+
it("distinguishes same local part at different domains", () => {
|
|
36
|
+
const a = slugifyUser({ id: "u1", email: "jacin@foo.com" });
|
|
37
|
+
const b = slugifyUser({ id: "u2", email: "jacin@bar.com" });
|
|
38
|
+
expect(a).toBe("jacin-foo");
|
|
39
|
+
expect(b).toBe("jacin-bar");
|
|
40
|
+
expect(a).not.toBe(b);
|
|
41
|
+
});
|
|
42
|
+
it("falls back to id when email yields an empty slug", () => {
|
|
43
|
+
expect(slugifyUser({ id: "user_42" })).toBe("user-42");
|
|
44
|
+
});
|
|
45
|
+
it("is stable for the same user", () => {
|
|
46
|
+
const user = { id: "u3", email: "freelancer@example.com" };
|
|
47
|
+
expect(slugifyUser(user)).toBe(slugifyUser(user));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("buildMemoryContext", () => {
|
|
51
|
+
it("eager-loads MEMORY.md and the active user's people file", async () => {
|
|
52
|
+
await ensureMemoryDir(workdir);
|
|
53
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- jacin: head of growth", "utf-8");
|
|
54
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), "- prefers terse answers\n- never uses purple", "utf-8");
|
|
55
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
56
|
+
expect(ctx.hasMemory).toBe(true);
|
|
57
|
+
expect(ctx.systemPromptAppend).toContain("jacin@landingbakery.com");
|
|
58
|
+
expect(ctx.systemPromptAppend).toContain("prefers terse answers");
|
|
59
|
+
expect(ctx.systemPromptAppend).toContain("- jacin: head of growth");
|
|
60
|
+
expect(ctx.systemPromptAppend).toContain(".memory/people/jacin-landingbakery.md");
|
|
61
|
+
});
|
|
62
|
+
it("does not surface another user's people file", async () => {
|
|
63
|
+
await ensureMemoryDir(workdir);
|
|
64
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), "secret jacin pref", "utf-8");
|
|
65
|
+
const ctx = await buildMemoryContext(workdir, { id: "u2", email: "alex@example.com" });
|
|
66
|
+
expect(ctx.systemPromptAppend).not.toContain("secret jacin pref");
|
|
67
|
+
expect(ctx.systemPromptAppend).toContain("alex@example.com");
|
|
68
|
+
});
|
|
69
|
+
it("degrades gracefully when no user is provided", async () => {
|
|
70
|
+
await ensureMemoryDir(workdir);
|
|
71
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- real content here", "utf-8");
|
|
72
|
+
const ctx = await buildMemoryContext(workdir);
|
|
73
|
+
expect(ctx.systemPromptAppend).toContain("Unknown");
|
|
74
|
+
expect(ctx.systemPromptAppend).toContain("Do not write to `.memory/people/`");
|
|
75
|
+
});
|
|
76
|
+
it("truncates MEMORY.md when it exceeds the index budget", async () => {
|
|
77
|
+
await ensureMemoryDir(workdir);
|
|
78
|
+
const tooLong = Array.from({ length: 250 }, (_, i) => `line ${String(i)}`).join("\n");
|
|
79
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), tooLong, "utf-8");
|
|
80
|
+
const ctx = await buildMemoryContext(workdir);
|
|
81
|
+
expect(ctx.systemPromptAppend).toContain("line 0");
|
|
82
|
+
expect(ctx.systemPromptAppend).toContain("truncated");
|
|
83
|
+
expect(ctx.systemPromptAppend).not.toContain("line 249");
|
|
84
|
+
});
|
|
85
|
+
it("reports hasMemory false when MEMORY.md is missing", async () => {
|
|
86
|
+
const ctx = await buildMemoryContext(workdir);
|
|
87
|
+
expect(ctx.hasMemory).toBe(false);
|
|
88
|
+
expect(ctx.systemPromptAppend).toContain("Agent memory");
|
|
89
|
+
});
|
|
90
|
+
it("returns a minimal stub when memory is seed-only with no content", async () => {
|
|
91
|
+
await ensureMemoryDir(workdir);
|
|
92
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
93
|
+
expect(ctx.hasMemory).toBe(false);
|
|
94
|
+
expect(ctx.systemPromptAppend).toContain("Empty");
|
|
95
|
+
expect(ctx.systemPromptAppend).toContain("jacin@landingbakery.com");
|
|
96
|
+
const lines = ctx.systemPromptAppend.split("\n");
|
|
97
|
+
expect(lines.length).toBeLessThan(10);
|
|
98
|
+
});
|
|
99
|
+
it("caps people file at budget limit", async () => {
|
|
100
|
+
await ensureMemoryDir(workdir);
|
|
101
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- real content", "utf-8");
|
|
102
|
+
const longPeople = Array.from({ length: 80 }, (_, i) => `pref ${String(i)}`).join("\n");
|
|
103
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), longPeople, "utf-8");
|
|
104
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
105
|
+
expect(ctx.systemPromptAppend).toContain("pref 0");
|
|
106
|
+
expect(ctx.systemPromptAppend).toContain("truncated");
|
|
107
|
+
expect(ctx.systemPromptAppend).not.toContain("pref 79");
|
|
108
|
+
});
|
|
109
|
+
it("keeps index within its budget without global truncation", async () => {
|
|
110
|
+
await ensureMemoryDir(workdir);
|
|
111
|
+
const bigIndex = Array.from({ length: 180 }, (_, i) => `- pointer ${String(i)}`).join("\n");
|
|
112
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), bigIndex, "utf-8");
|
|
113
|
+
const ctx = await buildMemoryContext(workdir);
|
|
114
|
+
expect(ctx.systemPromptAppend).toContain("pointer 0");
|
|
115
|
+
expect(ctx.systemPromptAppend).toContain("truncated");
|
|
116
|
+
expect(ctx.systemPromptAppend).not.toContain("pointer 179");
|
|
117
|
+
});
|
|
118
|
+
it("includes today's session journal preview when present, capped at budget", async () => {
|
|
119
|
+
await ensureMemoryDir(workdir);
|
|
120
|
+
const today = todaySessionFilename();
|
|
121
|
+
const longJournal = Array.from({ length: 50 }, (_, i) => `- entry ${String(i)}`).join("\n");
|
|
122
|
+
await writeFile(join(workdir, ".memory/sessions", today), longJournal, "utf-8");
|
|
123
|
+
const ctx = await buildMemoryContext(workdir);
|
|
124
|
+
expect(ctx.systemPromptAppend).toContain(`Today's session journals`);
|
|
125
|
+
expect(ctx.systemPromptAppend).toContain("entry 0");
|
|
126
|
+
expect(ctx.systemPromptAppend).toContain("truncated");
|
|
127
|
+
expect(ctx.systemPromptAppend).not.toContain("entry 49");
|
|
128
|
+
});
|
|
129
|
+
it("does not surface earlier session journals into the eager snapshot", async () => {
|
|
130
|
+
await ensureMemoryDir(workdir);
|
|
131
|
+
await writeFile(join(workdir, ".memory/sessions/2025-01-01.md"), "stale stuff from january", "utf-8");
|
|
132
|
+
const ctx = await buildMemoryContext(workdir);
|
|
133
|
+
expect(ctx.systemPromptAppend).not.toContain("stale stuff from january");
|
|
134
|
+
expect(ctx.systemPromptAppend).not.toContain("2025-01-01");
|
|
135
|
+
});
|
|
136
|
+
it("assembles fresh content before stale index", async () => {
|
|
137
|
+
await ensureMemoryDir(workdir);
|
|
138
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- old pointer", "utf-8");
|
|
139
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), "- prefers brevity", "utf-8");
|
|
140
|
+
const today = todaySessionFilename();
|
|
141
|
+
await writeFile(join(workdir, ".memory/sessions", today), "## 10:00 — fresh observation", "utf-8");
|
|
142
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
143
|
+
const append = ctx.systemPromptAppend;
|
|
144
|
+
const peopleIdx = append.indexOf("prefers brevity");
|
|
145
|
+
const sessionIdx = append.indexOf("fresh observation");
|
|
146
|
+
const indexIdx = append.indexOf("old pointer");
|
|
147
|
+
expect(peopleIdx).toBeLessThan(indexIdx);
|
|
148
|
+
expect(sessionIdx).toBeLessThan(indexIdx);
|
|
149
|
+
});
|
|
150
|
+
it("injects promote instruction when index exceeds threshold", async () => {
|
|
151
|
+
await ensureMemoryDir(workdir);
|
|
152
|
+
const bigIndex = Array.from({ length: 65 }, (_, i) => `- pointer ${String(i)}`).join("\n");
|
|
153
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), bigIndex, "utf-8");
|
|
154
|
+
const ctx = await buildMemoryContext(workdir);
|
|
155
|
+
expect(ctx.systemPromptAppend).toContain("MEMORY BUDGET EXCEEDED");
|
|
156
|
+
expect(ctx.systemPromptAppend).toContain("/memory-promote");
|
|
157
|
+
});
|
|
158
|
+
it("injects promote instruction when .needs-promote marker exists", async () => {
|
|
159
|
+
await ensureMemoryDir(workdir);
|
|
160
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- one pointer", "utf-8");
|
|
161
|
+
await writeFile(join(workdir, ".memory/.needs-promote"), "promote-needed\n", "utf-8");
|
|
162
|
+
const ctx = await buildMemoryContext(workdir);
|
|
163
|
+
expect(ctx.systemPromptAppend).toContain("MEMORY BUDGET EXCEEDED");
|
|
164
|
+
});
|
|
165
|
+
it("injects promote instruction when session count exceeds threshold", async () => {
|
|
166
|
+
await ensureMemoryDir(workdir);
|
|
167
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- one pointer", "utf-8");
|
|
168
|
+
for (let i = 1; i <= 9; i++) {
|
|
169
|
+
await writeFile(join(workdir, `.memory/sessions/2026-04-0${String(i)}.md`), `day ${String(i)}`, "utf-8");
|
|
170
|
+
}
|
|
171
|
+
const ctx = await buildMemoryContext(workdir);
|
|
172
|
+
expect(ctx.systemPromptAppend).toContain("MEMORY BUDGET EXCEEDED");
|
|
173
|
+
});
|
|
174
|
+
it("reports hasMemory true when only people file has content", async () => {
|
|
175
|
+
await ensureMemoryDir(workdir);
|
|
176
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), "- likes dark mode", "utf-8");
|
|
177
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
178
|
+
expect(ctx.hasMemory).toBe(true);
|
|
179
|
+
expect(ctx.systemPromptAppend).toContain("likes dark mode");
|
|
180
|
+
});
|
|
181
|
+
it("reports hasMemory true when only session journal has content", async () => {
|
|
182
|
+
await ensureMemoryDir(workdir);
|
|
183
|
+
const today = todaySessionFilename();
|
|
184
|
+
await writeFile(join(workdir, ".memory/sessions", today), "## 10:00 — observation", "utf-8");
|
|
185
|
+
const ctx = await buildMemoryContext(workdir);
|
|
186
|
+
expect(ctx.hasMemory).toBe(true);
|
|
187
|
+
expect(ctx.systemPromptAppend).toContain("observation");
|
|
188
|
+
});
|
|
189
|
+
it("appends staleness warning to people file when verified date exceeds 60 days", async () => {
|
|
190
|
+
await ensureMemoryDir(workdir);
|
|
191
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- real content", "utf-8");
|
|
192
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), "<!-- verified: 2025-01-01 -->\n- prefers dark mode", "utf-8");
|
|
193
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
194
|
+
expect(ctx.systemPromptAppend).toContain("prefers dark mode");
|
|
195
|
+
expect(ctx.systemPromptAppend).toContain("stale");
|
|
196
|
+
expect(ctx.systemPromptAppend).toContain("2025-01-01");
|
|
197
|
+
});
|
|
198
|
+
it("does not warn when verified date is recent", async () => {
|
|
199
|
+
await ensureMemoryDir(workdir);
|
|
200
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- real content", "utf-8");
|
|
201
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
202
|
+
await writeFile(join(workdir, ".memory/people/jacin-landingbakery.md"), `<!-- verified: ${today} -->\n- prefers dark mode`, "utf-8");
|
|
203
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" });
|
|
204
|
+
expect(ctx.systemPromptAppend).toContain("prefers dark mode");
|
|
205
|
+
expect(ctx.systemPromptAppend).not.toContain("stale");
|
|
206
|
+
});
|
|
207
|
+
it("generates thread-specific session filename with threadId", () => {
|
|
208
|
+
const filename = todaySessionFilename(new Date(), "abcdef1234567890");
|
|
209
|
+
const prefix = todayDatePrefix();
|
|
210
|
+
expect(filename).toBe(`${prefix}-abcdef12.md`);
|
|
211
|
+
});
|
|
212
|
+
it("includes session-file path in user block when threadId provided", async () => {
|
|
213
|
+
await ensureMemoryDir(workdir);
|
|
214
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- content", "utf-8");
|
|
215
|
+
const ctx = await buildMemoryContext(workdir, { id: "u1", email: "jacin@landingbakery.com" }, "thread123456");
|
|
216
|
+
expect(ctx.systemPromptAppend).toContain("session-file");
|
|
217
|
+
expect(ctx.systemPromptAppend).toContain("thread12.md");
|
|
218
|
+
});
|
|
219
|
+
it("globs multiple today session files into preview", async () => {
|
|
220
|
+
await ensureMemoryDir(workdir);
|
|
221
|
+
const prefix = todayDatePrefix();
|
|
222
|
+
await writeFile(join(workdir, `.memory/sessions/${prefix}-aaaaaaaa.md`), "thread A observation", "utf-8");
|
|
223
|
+
await writeFile(join(workdir, `.memory/sessions/${prefix}-bbbbbbbb.md`), "thread B observation", "utf-8");
|
|
224
|
+
const ctx = await buildMemoryContext(workdir);
|
|
225
|
+
expect(ctx.systemPromptAppend).toContain("thread A observation");
|
|
226
|
+
expect(ctx.systemPromptAppend).toContain("thread B observation");
|
|
227
|
+
});
|
|
228
|
+
it("does not inject promote instruction when below thresholds", async () => {
|
|
229
|
+
await ensureMemoryDir(workdir);
|
|
230
|
+
await writeFile(join(workdir, ".memory/MEMORY.md"), "# index\n- one pointer", "utf-8");
|
|
231
|
+
const ctx = await buildMemoryContext(workdir);
|
|
232
|
+
expect(ctx.systemPromptAppend).not.toContain("MEMORY BUDGET EXCEEDED");
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=memory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../src/hono/memory.test.ts"],"names":[],"mappings":"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"}
|
package/dist/hono/types.d.ts
CHANGED
|
@@ -4,10 +4,17 @@ export interface ChatAttachment {
|
|
|
4
4
|
contentType: string;
|
|
5
5
|
filename: string;
|
|
6
6
|
}
|
|
7
|
+
/** Identity of the human author of the current turn. Forwarded from Convex so
|
|
8
|
+
* the agent can scope memory writes per-user (`.memory/people/<slug>.md`). */
|
|
9
|
+
export interface ChatUser {
|
|
10
|
+
id: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
}
|
|
7
13
|
/** Request body for POST /message/async (Convex → bridge dispatch). */
|
|
8
14
|
export interface AsyncMessageRequest {
|
|
9
15
|
prompt: string;
|
|
10
16
|
threadId: string;
|
|
11
17
|
attachments?: ChatAttachment[];
|
|
18
|
+
user?: ChatUser;
|
|
12
19
|
}
|
|
13
20
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/hono/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hono/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hono/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;+EAC+E;AAC/E,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koda-sl/baker-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.2-dev.204b3080",
|
|
4
4
|
"description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|