@cerefox/memory 1.3.0-beta.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENT_GUIDE.md CHANGED
@@ -163,6 +163,16 @@ Change parts of a document: **one to many operations applied atomically in a sin
163
163
 
164
164
  **Put changes that belong together in ONE call.** Operations apply in order against the evolving document (op 2 sees op 1's result), and a half-applied state is impossible — so a table row and the running total it feeds cannot end up disagreeing. If any operation fails (bad anchor, ambiguity), nothing at all is written and the error names the failing operation.
165
165
 
166
+ **When NOT to use partial edits.** They are for localized changes. If what you
167
+ are changing recurs across the document — a "last updated" date in the header, a
168
+ heading, and the footer — that is a whole-document change wearing a local
169
+ disguise, and `cerefox_ingest` is the right tool. Section-scoped edits would take
170
+ several calls, each individually valid, with the document briefly inconsistent
171
+ between them. An agent hit exactly this and correctly stopped rather than
172
+ contorting the tools. Related: **a heading's own text cannot be changed** —
173
+ `replace_section` preserves it by design — so a stale date inside a heading needs
174
+ a re-ingest too.
175
+
166
176
  **One sharp edge worth knowing.** A section runs to the next heading of the same
167
177
  or higher level — **or to the end of the document**. So the last section owns
168
178
  everything appended after it: an `end_of_document` insert becomes part of that
@@ -7438,7 +7438,7 @@ var exports_meta = {};
7438
7438
  __export(exports_meta, {
7439
7439
  PKG_VERSION: () => PKG_VERSION
7440
7440
  });
7441
- var PKG_VERSION = "1.3.0-beta.3";
7441
+ var PKG_VERSION = "1.3.0";
7442
7442
  var init_meta = () => {};
7443
7443
 
7444
7444
  // ../../_shared/config/paths.ts
@@ -70216,10 +70216,8 @@ function buildServer() {
70216
70216
  const text = await tool.handler(supabase, args, ctx);
70217
70217
  return { content: [{ type: "text", text }] };
70218
70218
  } catch (err) {
70219
- if (err instanceof McpInvalidParams)
70220
- throw err;
70221
70219
  const message = err instanceof Error ? err.message : String(err);
70222
- throw new Error(message);
70220
+ return { content: [{ type: "text", text: message }], isError: true };
70223
70221
  }
70224
70222
  });
70225
70223
  return {
@@ -76321,8 +76319,8 @@ import { homedir as homedir6 } from "node:os";
76321
76319
  import { join as join9 } from "node:path";
76322
76320
 
76323
76321
  // ../../_shared/ef-meta/index.ts
76324
- var EF_VERSION = "1.3.0-beta.3";
76325
- var EF_LAST_CHANGED = "1.3.0-beta.3";
76322
+ var EF_VERSION = "1.3.0";
76323
+ var EF_LAST_CHANGED = "1.3.0-beta.4";
76326
76324
 
76327
76325
  // src/cli/util/checks.ts
76328
76326
  init_config();
@@ -18,7 +18,7 @@
18
18
  * doesn't touch `supabase/functions/` leaves it alone).
19
19
  */
20
20
 
21
- export const EF_VERSION = "1.3.0-beta.3";
21
+ export const EF_VERSION = "1.3.0";
22
22
 
23
23
  /**
24
24
  * The most recent version whose EF-side SOURCE actually changed (#127).
@@ -28,7 +28,7 @@ export const EF_VERSION = "1.3.0-beta.3";
28
28
  * `cut_release.ts` ONLY when EF source changed since the last tag; doctor
29
29
  * uses it to stay silent on label-only drift.
30
30
  */
31
- export const EF_LAST_CHANGED = "1.3.0-beta.3";
31
+ export const EF_LAST_CHANGED = "1.3.0-beta.4";
32
32
 
33
33
  /**
34
34
  * The 8 peer EFs the cerefox-mcp aggregator probes (excludes cerefox-mcp
@@ -176,9 +176,18 @@ async function handleToolsCall(
176
176
  result: { content: [{ type: "text", text }] },
177
177
  });
178
178
  } catch (err) {
179
+ // Tool failures are RESULTS, not protocol errors — same rule as the local
180
+ // stdio server (packages/memory/src/server.ts), and for the same reason:
181
+ // a client may render a JSON-RPC error however it likes, and at least one
182
+ // major one replaces the body with a generic failure dialog. The message is
183
+ // the actionable part; it has to travel where the model can read it.
184
+ // Protocol errors above this point (unknown tool, bad JSON) are unchanged.
179
185
  const message = err instanceof Error ? err.message : String(err);
180
- const code = err instanceof McpInvalidParams ? -32602 : -32603;
181
- return errorResponse(id, code, message);
186
+ return jsonResponse({
187
+ jsonrpc: "2.0",
188
+ id,
189
+ result: { content: [{ type: "text", text: message }], isError: true },
190
+ });
182
191
  }
183
192
  }
184
193
 
@@ -61,7 +61,9 @@ The migration is **lazy and safe**:
61
61
  - Existing documents keep the legacy format and reconstruct **exactly as before** — nothing
62
62
  re-processes, nothing re-embeds.
63
63
  - A document moves to the new format automatically the next time it is edited/saved. To
64
- convert everything now instead, run `cerefox server reindex`.
64
+ convert everything now instead, run `cerefox server migrate-format` (v1.1.0-beta.4 or
65
+ later). **Not `cerefox server reindex`** — reindex re-embeds chunks in place and never
66
+ re-chunks, so the stored format does not advance (#164).
65
67
  - `cerefox doctor` shows how many documents still use the legacy format.
66
68
 
67
69
  Details: `cerefox guides show content-format` (or [`content-format.md`](content-format.md)).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cerefox/memory",
3
- "version": "1.3.0-beta.3",
3
+ "version": "1.3.0",
4
4
  "description": "Cerefox — user-owned shared memory for AI agents. CLI + stdio MCP server + web UI + ingestion for a knowledge base on your own Supabase project (or fully self-hosted with Cerefox Local).",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/fstamatelopoulos/cerefox",