@koda-sl/baker-bridge 0.37.5 → 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 CHANGED
@@ -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.37.3";
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
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const args = process.argv.slice(2);
4
4
  const command = args[0];
5
- const VERSION = "0.37.3";
5
+ const VERSION = "0.38.2";
6
6
  function printUsage() {
7
7
  console.error("Usage: baker-bridge <command>");
8
8
  console.error("");
@@ -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
- sendAndStream(content: string, attachments?: ChatAttachment[]): Promise<void>;
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;
@@ -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;AAkBxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA+CjD,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;IAEzB;;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;IAUtE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BrE,SAAS;IAsGvB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,uBAAuB;YAiBjB,aAAa;YAgBb,aAAa;YAoBb,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"}
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"}
@@ -1,6 +1,7 @@
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
  // ---------------------------------------------------------------------------
@@ -30,6 +31,17 @@ class AgentSession {
30
31
  pendingQuestions = new Map();
31
32
  handlerCtx;
32
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;
33
45
  /** Identity token for the currently-running stream. abort() nulls this; if a
34
46
  * later check sees a different value, the run knows it was abandoned. This
35
47
  * replaces a global `aborted` flag whose reset-on-entry was racy. */
@@ -78,7 +90,22 @@ class AgentSession {
78
90
  this.pendingQuestions.delete(toolUseId);
79
91
  return true;
80
92
  }
81
- async sendAndStream(content, attachments) {
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) {
82
109
  if (this.streamingPromise) {
83
110
  this.replacingStream = true;
84
111
  this.abort();
@@ -96,7 +123,7 @@ class AgentSession {
96
123
  this.replacingStream = false;
97
124
  }
98
125
  }
99
- this.streamingPromise = this.runStream(content, attachments);
126
+ this.streamingPromise = this.runStream(content, attachments, user);
100
127
  try {
101
128
  await this.streamingPromise;
102
129
  }
@@ -104,7 +131,7 @@ class AgentSession {
104
131
  this.streamingPromise = null;
105
132
  }
106
133
  }
107
- async runStream(content, attachments) {
134
+ async runStream(content, attachments, user) {
108
135
  const runToken = Symbol("agent-run");
109
136
  this.activeRun = runToken;
110
137
  this.lastUsedAt = Date.now();
@@ -114,7 +141,7 @@ class AgentSession {
114
141
  let costUsd = 0;
115
142
  this.model = undefined;
116
143
  try {
117
- const prepared = await this.preparePrompt(content, attachments, runToken);
144
+ const prepared = await this.preparePrompt(content, attachments, user, runToken);
118
145
  if (!prepared) {
119
146
  await this.completeWithCancel(0);
120
147
  return;
@@ -126,6 +153,11 @@ class AgentSession {
126
153
  ...this.options,
127
154
  model: prepared.model,
128
155
  abortController: this.activeAbort,
156
+ systemPrompt: {
157
+ type: "preset",
158
+ preset: "claude_code",
159
+ append: prepared.memoryPromptAppend,
160
+ },
129
161
  ...(this.sessionId && { resume: this.sessionId }),
130
162
  };
131
163
  const q = query({ prompt: prepared.prompt, options: opts });
@@ -239,7 +271,7 @@ class AgentSession {
239
271
  }
240
272
  // system / result messages are not persisted; result.cost_usd is captured above.
241
273
  }
242
- async preparePrompt(content, attachments, runToken) {
274
+ async preparePrompt(content, attachments, user, runToken) {
243
275
  let prompt = content;
244
276
  if (attachments && attachments.length > 0) {
245
277
  const paths = await downloadAttachments(attachments);
@@ -248,11 +280,15 @@ class AgentSession {
248
280
  if (this.activeRun !== runToken) {
249
281
  return null;
250
282
  }
283
+ const memoryPromptAppend = await this.getMemorySnapshot(user);
284
+ if (this.activeRun !== runToken) {
285
+ return null;
286
+ }
251
287
  const routerResult = await selectModel(prompt);
252
288
  if (this.activeRun !== runToken) {
253
289
  return null;
254
290
  }
255
- return { prompt, model: routerResult.model, routerMessages: routerResult.messages };
291
+ return { prompt, model: routerResult.model, routerMessages: routerResult.messages, memoryPromptAppend };
256
292
  }
257
293
  async completeWithCancel(costUsd) {
258
294
  // Don't fire signalComplete if we're being replaced by another stream — the
@@ -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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"}
@@ -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;IAClD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory.test.d.ts.map
@@ -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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"}
@@ -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
@@ -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;CAChC"}
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.37.5",
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",