@cerefox/memory 1.17.4 → 1.18.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/README.md +1 -1
- package/dist/bin/cerefox.js +699 -469
- package/dist/frontend/assets/{index-D1kdLLr8.js → index-CxMT7hjH.js} +10 -10
- package/dist/frontend/assets/{index-D1kdLLr8.js.map → index-CxMT7hjH.js.map} +1 -1
- package/dist/frontend/index.html +1 -1
- package/dist/server-assets/_shared/ef-meta/index.ts +2 -2
- package/dist/server-assets/db/migrations/0012_content_format.sql +1 -1
- package/dist/server-assets/db/migrations/0014_document_relations.sql +1 -1
- package/dist/server-assets/db/migrations/0020_ingest_preserves_source.sql +1 -1
- package/dist/server-assets/db/migrations/0022_rls_on_document_relations.sql +1 -1
- package/dist/server-assets/db/migrations/0032_derive_grants.sql +1 -1
- package/dist/server-assets/db/migrations/0034_drop_vector_indexes.sql +22 -0
- package/dist/server-assets/db/rpcs.sql +9 -6
- package/dist/server-assets/db/schema.sql +9 -15
- package/docs/api/openapi.json +16 -2
- package/docs/guides/access-paths.md +7 -3
- package/docs/guides/api.md +1 -1
- package/docs/guides/cli.md +2 -2
- package/docs/guides/configuration.md +22 -1
- package/docs/guides/connect-agents.md +42 -18
- package/docs/guides/quickstart.md +7 -3
- package/docs/guides/setup-supabase.md +5 -0
- package/docs/guides/upgrading.md +2 -1
- package/package.json +2 -2
package/dist/frontend/index.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
href="https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&display=swap"
|
|
16
16
|
/>
|
|
17
17
|
<title>Cerefox</title>
|
|
18
|
-
<script type="module" crossorigin src="/app/assets/index-
|
|
18
|
+
<script type="module" crossorigin src="/app/assets/index-CxMT7hjH.js"></script>
|
|
19
19
|
<link rel="stylesheet" crossorigin href="/app/assets/index-B0H_N4if.css">
|
|
20
20
|
</head>
|
|
21
21
|
<body>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* doesn't touch `supabase/functions/` leaves it alone).
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
export const EF_VERSION = "1.
|
|
21
|
+
export const EF_VERSION = "1.18.0";
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* The Cerefox RELEASE version — what `cerefox --version` reports and what npm
|
|
@@ -36,7 +36,7 @@ export const EF_VERSION = "1.17.4";
|
|
|
36
36
|
* is imported by the Deno Edge Functions, which cannot reach into the npm
|
|
37
37
|
* package.
|
|
38
38
|
*/
|
|
39
|
-
export const CEREFOX_VERSION = "1.
|
|
39
|
+
export const CEREFOX_VERSION = "1.18.0";
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
* The most recent version whose EF-side SOURCE actually changed (#127).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
--
|
|
3
3
|
-- Records how each chunk's content reconstructs into full document text:
|
|
4
4
|
-- 1 = legacy — chunk contents were trimmed sections; reconstruction re-joins
|
|
5
|
-
-- them with E'\n\n' (the pre-28D
|
|
5
|
+
-- them with E'\n\n' (the pre-28D behavior). All existing chunks.
|
|
6
6
|
-- 2 = blind-stitch — chunk contents are an exact, gapless partition of the
|
|
7
7
|
-- document; reconstruction is a plain concatenation (no separator
|
|
8
8
|
-- synthesized on read). Written by the exact-partition chunker.
|
|
@@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS cerefox_document_relations (
|
|
|
12
12
|
source_id UUID NOT NULL REFERENCES cerefox_documents(id) ON DELETE CASCADE,
|
|
13
13
|
target_id UUID NOT NULL REFERENCES cerefox_documents(id) ON DELETE CASCADE,
|
|
14
14
|
-- Free-text by design: agents define new types without a migration. The
|
|
15
|
-
-- type dictionary (in the RPCs) gives known types
|
|
15
|
+
-- type dictionary (in the RPCs) gives known types behavior; unknown types
|
|
16
16
|
-- are stored and returned, just without special handling.
|
|
17
17
|
rel_type TEXT NOT NULL,
|
|
18
18
|
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
@@ -55,5 +55,5 @@ BEGIN
|
|
|
55
55
|
'Migration 0020: cerefox_ingest_document now preserves a document''s '
|
|
56
56
|
'source when p_source is omitted. Before this, any content update '
|
|
57
57
|
'without an explicit source silently rewrote provenance to ''agent'', '
|
|
58
|
-
'and migrate-format
|
|
58
|
+
'and migrate-format relabeled every document it converted (#191).';
|
|
59
59
|
END $$;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
ALTER TABLE cerefox_document_relations ENABLE ROW LEVEL SECURITY;
|
|
28
28
|
|
|
29
|
-
--
|
|
29
|
+
-- Defense in depth: revoke the legacy blanket grants so the table is denied by
|
|
30
30
|
-- privilege as well as by RLS. Harmless where the grants were never made.
|
|
31
31
|
REVOKE ALL ON TABLE cerefox_document_relations FROM anon;
|
|
32
32
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- 0034_drop_vector_indexes.sql — drop the unused HNSW vector indexes (schema
|
|
2
|
+
-- 0.19.0, release 1.18.0).
|
|
3
|
+
--
|
|
4
|
+
-- Since 0.18.1 the hybrid search RPCs rank vector candidates by an exact scan
|
|
5
|
+
-- (`ORDER BY vec_score DESC`, see cerefox_hybrid_search in rpcs.sql), because
|
|
6
|
+
-- the HNSW index answered the bare-distance ordering with at most
|
|
7
|
+
-- `hnsw.ef_search` (40) rows, and on a store with heavy version churn those
|
|
8
|
+
-- were mostly not the nearest ones. The two indexes have served no query since,
|
|
9
|
+
-- while every chunk write still paid to maintain them and their quality kept
|
|
10
|
+
-- degrading.
|
|
11
|
+
--
|
|
12
|
+
-- The exact scan is fast at knowledge-base scale: measured on a 1-CPU / 1 GB
|
|
13
|
+
-- Postgres with 768-dim vectors, top-500 candidates took 2 ms at 2k chunks,
|
|
14
|
+
-- 56 ms at 50k and 181 ms at 100k. A default-configured HNSW index was slower
|
|
15
|
+
-- than that from 50k chunks and recalled 27% of the true top-250 at 100k.
|
|
16
|
+
-- `cerefox doctor` reports the current chunk count and warns past 100k; a
|
|
17
|
+
-- tuned index path for stores that large is tracked separately.
|
|
18
|
+
--
|
|
19
|
+
-- Idempotent: safe to re-run.
|
|
20
|
+
|
|
21
|
+
DROP INDEX IF EXISTS idx_cerefox_chunks_emb_primary;
|
|
22
|
+
DROP INDEX IF EXISTS idx_cerefox_chunks_emb_upgrade;
|
|
@@ -236,7 +236,7 @@ BEGIN
|
|
|
236
236
|
fts_results AS (
|
|
237
237
|
SELECT
|
|
238
238
|
c.id,
|
|
239
|
-
-- 0.18.0:
|
|
239
|
+
-- 0.18.0: normalization 32 bounds the keyword score to
|
|
240
240
|
-- rank/(rank+1), in [0, 1) like the cosine it is fused with.
|
|
241
241
|
-- Unbounded (up to ~4 when every term matches), one keyword
|
|
242
242
|
-- hit outweighed any semantic evidence, and the same document
|
|
@@ -305,7 +305,8 @@ BEGIN
|
|
|
305
305
|
-- hnsw.ef_search (40) rows: on a store with heavy version churn it
|
|
306
306
|
-- returned far fewer candidates than asked for, mostly not the
|
|
307
307
|
-- nearest ones. An exact scan is also faster at knowledge-base
|
|
308
|
-
-- scale (thousands of chunks).
|
|
308
|
+
-- scale (thousands of chunks). 0.19.0 dropped the HNSW indexes
|
|
309
|
+
-- altogether (migration 0034).
|
|
309
310
|
ORDER BY vec_score DESC
|
|
310
311
|
LIMIT candidate_count
|
|
311
312
|
),
|
|
@@ -2005,7 +2006,7 @@ AS $$
|
|
|
2005
2006
|
-- would share a timestamp and the order of operations inside the batch
|
|
2006
2007
|
-- would be unrecoverable from the trail (iter-33). clock_timestamp()
|
|
2007
2008
|
-- advances within a transaction, so entries stay orderable. Outside a
|
|
2008
|
-
-- batch this is indistinguishable from the old
|
|
2009
|
+
-- batch this is indistinguishable from the old behavior.
|
|
2009
2010
|
clock_timestamp()
|
|
2010
2011
|
)
|
|
2011
2012
|
RETURNING id AS audit_id, cerefox_audit_log.created_at;
|
|
@@ -2516,7 +2517,7 @@ $$;
|
|
|
2516
2517
|
-- docs/research/document-relations-and-semantic-graph.md
|
|
2517
2518
|
--
|
|
2518
2519
|
-- Type dictionary: rel_type is free text (any string is accepted and returned),
|
|
2519
|
-
-- but a few KNOWN types carry
|
|
2520
|
+
-- but a few KNOWN types carry behavior. Keeping the dictionary in one place
|
|
2520
2521
|
-- here — rather than scattered CASE expressions — is what lets the set/delete
|
|
2521
2522
|
-- RPCs stay symmetric with each other.
|
|
2522
2523
|
-- symmetric both directions are written/removed together
|
|
@@ -3235,6 +3236,8 @@ SET search_path = public, pg_catalog
|
|
|
3235
3236
|
AS $$
|
|
3236
3237
|
-- Keep in lockstep with the `@version:` marker in schema.sql (cut_release.ts
|
|
3237
3238
|
-- enforces it). Bump whenever schema.sql OR rpcs.sql changes.
|
|
3239
|
+
-- 0.19.0: migration 0034 drops the unused HNSW vector indexes (search has
|
|
3240
|
+
-- scanned exactly since 0.18.1). No RPC behavior change.
|
|
3238
3241
|
-- 0.18.2: min_term_coverage built-in default 0.66 (two of three terms).
|
|
3239
3242
|
-- 0.18.0's 0.67 required all three for a three-term query. RPC-only.
|
|
3240
3243
|
-- 0.18.1: exact vector candidates. Hybrid and semantic search ordered by
|
|
@@ -3243,7 +3246,7 @@ AS $$
|
|
|
3243
3246
|
-- they now order by the computed similarity (exact scan). Keyword matches
|
|
3244
3247
|
-- carry their exact cosine into fusion. RPC-only.
|
|
3245
3248
|
-- 0.18.0 (iteration 48): search calibration, RPC-only. Bounded keyword
|
|
3246
|
-
-- score in hybrid fusion (ts_rank_cd
|
|
3249
|
+
-- score in hybrid fusion (ts_rank_cd normalization 32); min_term_coverage
|
|
3247
3250
|
-- default 0.67; built-in min_search_score follows the store's embedder
|
|
3248
3251
|
-- (new cerefox_default_min_search_score). docs/specs/search-calibration.md.
|
|
3249
3252
|
-- 0.17.0 (#251): trash auto-purge. New cerefox_purge_expired_trash, called
|
|
@@ -3287,7 +3290,7 @@ AS $$
|
|
|
3287
3290
|
-- 0.11.0 supersedes 0.10.6 (v1.2.1, #191): this branch carries that fix plus
|
|
3288
3291
|
-- the partial-edit surface, and both migrations (0019, 0020) are in the
|
|
3289
3292
|
-- sequence, so a store deploying this gets everything from both lines.
|
|
3290
|
-
SELECT '0.
|
|
3293
|
+
SELECT '0.19.0'::TEXT;
|
|
3291
3294
|
$$;
|
|
3292
3295
|
|
|
3293
3296
|
-- ── cerefox_find_dead_links ──────────────────────────────────────────────────
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
-- Requires extensions: vector (pgvector), uuid-ossp
|
|
6
6
|
-- These are enabled at the top of db_deploy.py before this file is applied.
|
|
7
7
|
--
|
|
8
|
-
-- @version: 0.
|
|
8
|
+
-- @version: 0.19.0
|
|
9
9
|
-- The `@version` marker above is read by the schema-version-mismatch banner
|
|
10
10
|
-- (see /api/v1/schema-version). Bump it whenever schema.sql OR rpcs.sql
|
|
11
11
|
-- changes in a way that requires `cerefox server deploy` to be re-run —
|
|
@@ -166,7 +166,7 @@ CREATE TABLE IF NOT EXISTS cerefox_document_projects (
|
|
|
166
166
|
-- ── Document relations (iteration 29) ─────────────────────────────────────────
|
|
167
167
|
-- Typed, directed edges between documents. rel_type is free text by design so
|
|
168
168
|
-- agents can define new types without a migration; the type dictionary lives in
|
|
169
|
-
-- the RPCs and gives KNOWN types
|
|
169
|
+
-- the RPCs and gives KNOWN types behavior (symmetry, lifecycle side effects).
|
|
170
170
|
-- Design: docs/research/document-relations-and-semantic-graph.md §2.2.
|
|
171
171
|
|
|
172
172
|
CREATE TABLE IF NOT EXISTS cerefox_document_relations (
|
|
@@ -267,17 +267,11 @@ CREATE INDEX IF NOT EXISTS idx_cerefox_chunks_fts
|
|
|
267
267
|
ON cerefox_chunks USING GIN(fts)
|
|
268
268
|
WHERE version_id IS NULL;
|
|
269
269
|
|
|
270
|
-
-- Vector similarity
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
-- Vector similarity — upgrade embedding, current chunks only
|
|
277
|
-
CREATE INDEX IF NOT EXISTS idx_cerefox_chunks_emb_upgrade
|
|
278
|
-
ON cerefox_chunks USING hnsw (embedding_upgrade vector_cosine_ops)
|
|
279
|
-
WITH (m = 16, ef_construction = 64)
|
|
280
|
-
WHERE version_id IS NULL;
|
|
270
|
+
-- Vector similarity: deliberately NO index (0.19.0, migration 0034). Search
|
|
271
|
+
-- ranks vector candidates by an exact scan, which is both correct and fast at
|
|
272
|
+
-- knowledge-base scale; the HNSW indexes it replaced returned too few, mostly
|
|
273
|
+
-- wrong candidates on stores with version churn. Do not add one back without
|
|
274
|
+
-- the measurements in docs/specs/search-calibration.md (scale section).
|
|
281
275
|
|
|
282
276
|
-- Partial unique index: enforces (document_id, chunk_index) uniqueness for
|
|
283
277
|
-- current chunks. Archived chunks are excluded and may share chunk_index values
|
|
@@ -408,7 +402,7 @@ ON CONFLICT (key) DO NOTHING;
|
|
|
408
402
|
-- The review workflow (agent writes land pending_review, a person approves)
|
|
409
403
|
-- is OFF on a fresh install (#241): most stores have no reviewer, and a queue
|
|
410
404
|
-- nobody drains is noise. Migration 0031 seeds TRUE on stores that predate the
|
|
411
|
-
-- flag, so an upgrade never changes
|
|
405
|
+
-- flag, so an upgrade never changes behavior. Only this seed and that
|
|
412
406
|
-- migration ever write the value; the toggle itself is `cerefox config set`.
|
|
413
407
|
INSERT INTO cerefox_config (key, value)
|
|
414
408
|
VALUES ('review_workflow_enabled', 'false')
|
|
@@ -491,7 +485,7 @@ ALTER TABLE cerefox_document_relations ENABLE ROW LEVEL SECURITY;
|
|
|
491
485
|
-- Guarded: on the local (World B) stack this file deploys BEFORE roles.sql
|
|
492
486
|
-- creates service_role, so missing-role must be a no-op (roles.sql re-runs the
|
|
493
487
|
-- grants implicitly via its own PostgREST wiring; the next deploy picks them up).
|
|
494
|
-
-- DERIVED from the
|
|
488
|
+
-- DERIVED from the catalog, never listed. The list used to be a hand-written
|
|
495
489
|
-- ARRAY and it drifted: cerefox_document_relations was added above and never
|
|
496
490
|
-- added to the array, so a FRESH cloud deploy left that table with no Data API
|
|
497
491
|
-- grant. Upgrades hid it (migration 0014 grants it inline) and the self-hosted
|
package/docs/api/openapi.json
CHANGED
|
@@ -5731,7 +5731,7 @@
|
|
|
5731
5731
|
},
|
|
5732
5732
|
"/api/v1/version": {
|
|
5733
5733
|
"get": {
|
|
5734
|
-
"summary": "Server version and
|
|
5734
|
+
"summary": "Server version, environment label, and the newest release on npm as the server last checked it (`latest`, plus `update_command` when it is newer).",
|
|
5735
5735
|
"operationId": "get_version",
|
|
5736
5736
|
"responses": {
|
|
5737
5737
|
"200": {
|
|
@@ -5761,13 +5761,27 @@
|
|
|
5761
5761
|
"string",
|
|
5762
5762
|
"null"
|
|
5763
5763
|
]
|
|
5764
|
+
},
|
|
5765
|
+
"latest": {
|
|
5766
|
+
"type": [
|
|
5767
|
+
"string",
|
|
5768
|
+
"null"
|
|
5769
|
+
]
|
|
5770
|
+
},
|
|
5771
|
+
"update_command": {
|
|
5772
|
+
"type": [
|
|
5773
|
+
"string",
|
|
5774
|
+
"null"
|
|
5775
|
+
]
|
|
5764
5776
|
}
|
|
5765
5777
|
},
|
|
5766
5778
|
"required": [
|
|
5767
5779
|
"version",
|
|
5768
5780
|
"git_commit_short",
|
|
5769
5781
|
"build_date",
|
|
5770
|
-
"env_label"
|
|
5782
|
+
"env_label",
|
|
5783
|
+
"latest",
|
|
5784
|
+
"update_command"
|
|
5771
5785
|
],
|
|
5772
5786
|
"additionalProperties": false
|
|
5773
5787
|
}
|
|
@@ -60,8 +60,12 @@ Postgres RPCs
|
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
**ChatGPT Custom GPT Actions** call the eight primitive Edge Functions directly over HTTPS
|
|
63
|
-
using an OpenAPI schema. `cerefox-mcp` is not involved
|
|
64
|
-
|
|
63
|
+
using an OpenAPI schema. `cerefox-mcp` is not involved. OpenAI retires Custom GPTs on **December 11, 2026**, and custom actions do not carry over to its plugins, so this path ends
|
|
64
|
+
then. ChatGPT now supports remote MCP connectors (OAuth or no auth, no static bearer
|
|
65
|
+
token), so its replacement is expected to be a connector to `cerefox-mcp` over OAuth,
|
|
66
|
+
like cloud Claude; see
|
|
67
|
+
[`chatgpt-after-custom-gpts.md`](../research/chatgpt-after-custom-gpts.md) and
|
|
68
|
+
[#326](https://github.com/fstamatelopoulos/cerefox/issues/326).
|
|
65
69
|
|
|
66
70
|
**curl / scripts / custom HTTP clients** can also call the primitives directly using the
|
|
67
71
|
same Cerefox token as a Bearer token.
|
|
@@ -213,7 +217,7 @@ single container with an internally-held token.
|
|
|
213
217
|
| Claude Code / Cursor | HTTPS → `cerefox-mcp` | Cerefox access token (`cfx_pat_…`) | Advanced/fallback; prefer local MCP for daily use |
|
|
214
218
|
| Claude Desktop | HTTPS → `cerefox-mcp` (via `supergateway`) | Cerefox access token (`cfx_pat_…`) | Advanced/fallback; prefer local MCP for daily use |
|
|
215
219
|
| **Cloud Claude (claude.ai web + mobile)** | HTTPS → `cerefox-mcp` over **OAuth 2.1** | Owner-pinned OAuth access token (JWKS-verified) | Optional; memory in the browser + on the phone |
|
|
216
|
-
| ChatGPT Custom GPT | HTTPS → primitive Edge Functions | Cerefox access token (`cfx_pat_…`) | AI assistant via GPT Actions |
|
|
220
|
+
| ChatGPT Custom GPT | HTTPS → primitive Edge Functions | Cerefox access token (`cfx_pat_…`) | AI assistant via GPT Actions; **ends 2026-12-11** (Custom GPTs retire) |
|
|
217
221
|
| curl / HTTP scripts | HTTPS → primitive Edge Functions | Cerefox access token (`cfx_pat_…`) | Ad-hoc queries, automation |
|
|
218
222
|
| Web UI (`cerefox web`) | Supabase REST API | Secret key (or legacy service_role) | Web UI backend (TS Hono) |
|
|
219
223
|
| **HTTP client → `/api/v1`** | Plain HTTP to `cerefox web` / Cerefox Local | **None from loopback; API key otherwise** (v1.12.0) — `cerefox api-key generate` / `cerefox-local api-key` | A local program or bot harness that wants HTTP rather than MCP. Names itself with `X-Cerefox-Author` / `X-Cerefox-Requestor` (v1.11.0): a declared label for attribution, not a verified identity. See [`api.md`](api.md) |
|
package/docs/guides/api.md
CHANGED
|
@@ -179,7 +179,7 @@ default; Cerefox Local picks its own port and `cerefox-local status` prints it).
|
|
|
179
179
|
|
|
180
180
|
| Method + path | Purpose |
|
|
181
181
|
|---|---|
|
|
182
|
-
| `GET /version` | Server version and
|
|
182
|
+
| `GET /version` | Server version, environment label, and the newest release on npm as the server last checked it (`latest`, plus `update_command` when it is newer). |
|
|
183
183
|
| `GET /schema-version` | Deployed schema version. |
|
|
184
184
|
| `GET /openapi.json` | This API's OpenAPI 3.1 description, served by the version you are talking to. Every `/api/v1` response points at it with `Link: </api/v1/openapi.json>; rel="service-desc"` (RFC 8631). |
|
|
185
185
|
| `GET /search?q=…` | Hybrid search (FTS + semantic). `&review_status=approved\|pending_review` filters server-side; `400` while the review workflow is off. The response's `embedder` (`openai` or `local`) says which scale the scores are on. |
|
package/docs/guides/cli.md
CHANGED
|
@@ -773,11 +773,11 @@ These flat commands handle install, configuration, and health. Run any with `--h
|
|
|
773
773
|
| Command | Purpose |
|
|
774
774
|
|---|---|
|
|
775
775
|
| `cerefox init` | Interactive first-run setup; writes `~/.cerefox/.env`, offers `server deploy` + self-docs ingest. |
|
|
776
|
-
| `cerefox doctor` | Diagnose the install (credentials, DB reachability, schema version, whether the review workflow is on). |
|
|
776
|
+
| `cerefox doctor` | Diagnose the install (credentials, DB reachability, schema version, whether the review workflow is on, whether a newer release is out). |
|
|
777
777
|
| `cerefox status` | Show connection + schema status. |
|
|
778
778
|
| `cerefox configure-agent --tool <client>` | Write MCP client config (`claude-code`, `claude-desktop`, `cursor`, `codex`, `gemini`). |
|
|
779
779
|
| `cerefox token generate` / `rotate` / `list` | Manage the Cerefox access token (`cfx_pat_…`) — the Edge Function Bearer credential (remote MCP, GPT Actions, curl). See the [`cerefox token`](#cerefox-token-generate--cerefox-token-rotate--cerefox-token-list) section above. |
|
|
780
|
-
| `cerefox self-update` | Update the installed `@cerefox/memory` package. |
|
|
780
|
+
| `cerefox self-update` | Update the installed `@cerefox/memory` package. Other commands print a one-line notice when a newer release is out; see [configuration.md → Update check](configuration.md#update-check) to turn it off. |
|
|
781
781
|
| `cerefox completion` | Emit a shell completion script. |
|
|
782
782
|
| `cerefox backup create` / `cerefox backup restore` | File-system backup / restore of the knowledge base (see [`ops-scripts.md`](ops-scripts.md)). |
|
|
783
783
|
|
|
@@ -344,6 +344,27 @@ there matters.
|
|
|
344
344
|
|
|
345
345
|
---
|
|
346
346
|
|
|
347
|
+
## Update check
|
|
348
|
+
|
|
349
|
+
Cerefox tells you when a newer release is on npm (v1.18.0, #323): one line after
|
|
350
|
+
a CLI command (at most once a day, only at a terminal), an `updates` row in
|
|
351
|
+
`cerefox doctor`, and a note in the web UI footer. Inside the Cerefox Local
|
|
352
|
+
container it points at `cerefox-local upgrade` instead of `cerefox self-update`.
|
|
353
|
+
|
|
354
|
+
The only network call is a GET of the `latest` release from the npm registry
|
|
355
|
+
(`registry.npmjs.org`), the same request `cerefox self-update` makes. It is made
|
|
356
|
+
by `cerefox web` (at startup, then daily), `cerefox mcp` (at startup, when the
|
|
357
|
+
last answer is over a day old), `cerefox doctor` and `cerefox self-update`.
|
|
358
|
+
Every other command only reads the saved answer, `update-check.json` in
|
|
359
|
+
`~/.cerefox` (or in `CEREFOX_CONFIG_DIR`, when set), so it never adds latency.
|
|
360
|
+
Offline, the check stays quiet.
|
|
361
|
+
|
|
362
|
+
| Variable | Default | Description |
|
|
363
|
+
|----------|---------|-------------|
|
|
364
|
+
| `CEREFOX_NO_UPDATE_CHECK` | _(unset)_ | Set to `1` to turn the check off entirely: no request to npm, and no notice anywhere. `NO_UPDATE_NOTIFIER` (the convention other CLIs use) and `CI` do the same. |
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
347
368
|
## Logging
|
|
348
369
|
|
|
349
370
|
| Variable | Default | Description |
|
|
@@ -422,7 +443,7 @@ cerefox server deploy --functions-only
|
|
|
422
443
|
|
|
423
444
|
Contributors with a repo clone can instead redeploy individual functions with `npx supabase functions deploy cerefox-search` (and `cerefox-ingest`), or through the Supabase Dashboard → Edge Functions → Deploy.
|
|
424
445
|
|
|
425
|
-
> **If you only use the local MCP server** (Claude
|
|
446
|
+
> **If you only use the local MCP server** (Claude Code, Claude Desktop, Codex, Cursor), Step 3 is
|
|
426
447
|
> optional — the Edge Functions are only used for GPT Actions and direct HTTP access.
|
|
427
448
|
|
|
428
449
|
> **Future improvement**: the Edge Functions will be updated to read model config from Supabase
|
|
@@ -24,7 +24,7 @@ client; you can also run both in parallel.
|
|
|
24
24
|
Three top-level paths plus a few special cases:
|
|
25
25
|
|
|
26
26
|
- **Path A** — MCP server (local subprocess or remote Edge Function). Best for purpose-built agent clients like Claude Desktop, Cursor, and Claude Code's MCP integration.
|
|
27
|
-
- **Path B** — direct Edge Function HTTP.
|
|
27
|
+
- **Path B** — direct Edge Function HTTP. For any HTTP caller (curl, scripts), and for ChatGPT Custom GPTs until OpenAI retires them on December 11, 2026.
|
|
28
28
|
- **Path C** — local shell CLI invoked by a coding agent's Bash tool. Best for Claude Code, Codex CLI, opencode, OpenClaw, Hermes, and similar local-agent CLIs **when the user prefers not to configure MCP** but still wants the agent to read and write Cerefox.
|
|
29
29
|
|
|
30
30
|
| Client | Path | Search | Requirements / caveats |
|
|
@@ -33,7 +33,8 @@ Three top-level paths plus a few special cases:
|
|
|
33
33
|
| Claude Code (remote) | Path A-Remote — `cerefox-mcp` Edge Function | Hybrid | URL + Cerefox token only; no local install. Advanced/fallback — prefer Path A-Local |
|
|
34
34
|
| Cursor (remote) | Path A-Remote — `cerefox-mcp` Edge Function | Hybrid | URL + Cerefox token only; no local install. Advanced/fallback — prefer Path A-Local |
|
|
35
35
|
| OpenAI Codex CLI (remote) | Path A-Remote — `cerefox-mcp` Edge Function | Hybrid | URL + Cerefox token env var; TOML config. Advanced/fallback — prefer Path A-Local |
|
|
36
|
-
| ChatGPT (chatgpt.com or desktop) | Path B — Custom GPT → Edge Functions | Hybrid | ChatGPT Plus required |
|
|
36
|
+
| ChatGPT (chatgpt.com or desktop) | Path B — Custom GPT → Edge Functions | Hybrid | ChatGPT Plus required. **Ends 2026-12-11** when Custom GPTs retire; see [ChatGPT Custom GPT](#chatgpt-custom-gpt-cloud--chatgptcom) |
|
|
37
|
+
| OpenAI Codex (CLI, and Codex threads in the ChatGPT desktop app) (local) | Path A-Local — `cerefox configure-agent --tool codex` | Hybrid | Writes `~/.codex/config.toml`; all 15 tools; zero Edge Function invocations. **Recommended for Codex** |
|
|
37
38
|
| Claude Desktop (local) | Path A-Local — `@cerefox/memory` via `npx` | Hybrid | Local alternative; Node.js; zero Edge Function invocations |
|
|
38
39
|
| Claude Code (local) | Path A-Local — `@cerefox/memory` via `npx` | Hybrid | Local alternative; zero Edge Function invocations |
|
|
39
40
|
| Cursor (local) | Path A-Local — `@cerefox/memory` via `npx` | Hybrid | Local alternative; zero Edge Function invocations |
|
|
@@ -50,7 +51,8 @@ Three top-level paths plus a few special cases:
|
|
|
50
51
|
> over the standard tool surface — no Cloud Run needed. Setup:
|
|
51
52
|
> [setup-supabase Step 7](setup-supabase.md#step-7--oauth-for-cloud-agents-claudeai--mobile-optional)
|
|
52
53
|
> + [Cloud Claude](#cloud-claude-claudeai-web--mobile-oauth) below. (An OAuth connector for
|
|
53
|
-
> ChatGPT
|
|
54
|
+
> ChatGPT is expected to replace the Custom GPT path when Custom GPTs retire; it is being
|
|
55
|
+
> validated in [#326](https://github.com/fstamatelopoulos/cerefox/issues/326).)
|
|
54
56
|
|
|
55
57
|
> **Perplexity** supports stdio-only MCP on macOS Desktop (via Helper App). Remote MCP is
|
|
56
58
|
> "coming soon." Perplexity's CTO has signaled a strategic shift away from MCP (March 2026),
|
|
@@ -265,15 +267,26 @@ For the manual JSON (for the curious, or to debug if the CLI can't write your co
|
|
|
265
267
|
|
|
266
268
|
---
|
|
267
269
|
|
|
268
|
-
### ChatGPT Desktop
|
|
270
|
+
### ChatGPT Desktop and Codex
|
|
269
271
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
272
|
+
The ChatGPT desktop app hosts two different things, and they connect differently:
|
|
273
|
+
|
|
274
|
+
- **Codex threads** (and the Codex CLI) run local stdio MCP servers. Set them up with
|
|
275
|
+
`cerefox configure-agent --tool codex`, which writes the `cerefox` entry into
|
|
276
|
+
`~/.codex/config.toml`; the app's **Plugins → MCPs** screen edits the same entry. Start
|
|
277
|
+
a new Codex session after changing it (it reads the config at session start), then ask
|
|
278
|
+
it to call `cerefox_get_help`: the reply begins with the server version. All 15 tools
|
|
279
|
+
are available.
|
|
280
|
+
- **Regular ChatGPT chats** do not get local MCP servers, in the desktop app or anywhere
|
|
281
|
+
else. ChatGPT only connects to **remote** MCP servers (OAuth or no auth). Today ChatGPT
|
|
282
|
+
chats reach Cerefox through the [Custom GPT](#chatgpt-custom-gpt-cloud--chatgptcom)
|
|
283
|
+
path, which ends on December 11, 2026; see the notice there.
|
|
284
|
+
|
|
285
|
+
> **Tip**: `configure-agent` writes the `npx` form, which runs whatever version npx has
|
|
286
|
+
> cached. To keep Codex on the same version as your installed CLI (and start faster),
|
|
287
|
+
> point the entry at the binary instead: `command = "<path to cerefox>"`, `args = ["mcp"]`
|
|
288
|
+
> (`which cerefox` prints the path; use the full path, since GUI apps may not see your
|
|
289
|
+
> shell's `PATH`).
|
|
277
290
|
|
|
278
291
|
---
|
|
279
292
|
|
|
@@ -593,6 +606,8 @@ You have access to a personal knowledge base via the searchKnowledgeBase action.
|
|
|
593
606
|
When the user asks a question, always search the knowledge base first using a
|
|
594
607
|
relevant query. Present results by document title, citing the source for every claim.
|
|
595
608
|
Use ingestNote to save any new information the user asks you to remember.
|
|
609
|
+
Pass author: "ChatGPT" on every action call, so your reads and writes are
|
|
610
|
+
attributed in the audit and usage logs.
|
|
596
611
|
When UPDATING an existing document, first call getDocument and note its
|
|
597
612
|
content_hash, then pass it as expected_content_hash on ingestNote. If you get a
|
|
598
613
|
409 conflict, the document changed underneath you: call getDocument again, merge
|
|
@@ -620,6 +635,14 @@ Expected: JSON response with `results` array containing documents.
|
|
|
620
635
|
|
|
621
636
|
### ChatGPT Custom GPT (cloud — chatgpt.com)
|
|
622
637
|
|
|
638
|
+
> **Retiring on December 11, 2026.** OpenAI is retiring Custom GPTs in favor of plugins,
|
|
639
|
+
> and **custom actions do not carry over**: they have to be rebuilt as a connector or a
|
|
640
|
+
> custom MCP server. This section works until then, but do not build a new setup on it.
|
|
641
|
+
> ChatGPT will need a new connection, an MCP connector to `cerefox-mcp` over OAuth (the
|
|
642
|
+
> way [cloud Claude](#cloud-claude-claudeai-web--mobile-oauth) connects), which is being
|
|
643
|
+
> validated in [#326](https://github.com/fstamatelopoulos/cerefox/issues/326). Background and plan: [`chatgpt-after-custom-gpts.md`](../research/chatgpt-after-custom-gpts.md).
|
|
644
|
+
> For **Codex**, use the local MCP instead (see [ChatGPT Desktop and Codex](#chatgpt-desktop-and-codex)).
|
|
645
|
+
|
|
623
646
|
A Custom GPT with Actions pointing at the Edge Functions gives ChatGPT full hybrid search from
|
|
624
647
|
any browser — no local install, no MCP client, works free with ChatGPT Plus.
|
|
625
648
|
|
|
@@ -1084,15 +1107,16 @@ paths:
|
|
|
1084
1107
|
In the action's **Authentication** settings:
|
|
1085
1108
|
- Type: **API Key**
|
|
1086
1109
|
- Auth type: **Bearer**
|
|
1087
|
-
- API key: your **Cerefox access token** (`cfx_pat_…`).
|
|
1088
|
-
`cerefox token
|
|
1110
|
+
- API key: your **Cerefox access token** (`cfx_pat_…`). If you already have one
|
|
1111
|
+
(`cerefox token list` shows it; the value is `CEREFOX_ACCESS_TOKEN` in your `.env`),
|
|
1112
|
+
reuse it. Only on a first setup run `cerefox token generate`: it **replaces** the
|
|
1113
|
+
server's token, which breaks every client still using the old one. To add a second
|
|
1114
|
+
token alongside the first, use `cerefox token rotate`.
|
|
1089
1115
|
The legacy Supabase anon key is no longer accepted (iter-28E).
|
|
1090
1116
|
|
|
1091
|
-
> **Important:** ChatGPT
|
|
1092
|
-
> schema.
|
|
1093
|
-
>
|
|
1094
|
-
> authentication settings. (That reset is expected here: it's what swaps you off
|
|
1095
|
-
> the old anon key.)
|
|
1117
|
+
> **Important:** ChatGPT clears the stored API key whenever you save a changed action
|
|
1118
|
+
> schema. After pasting a new schema version, re-enter your **Cerefox access token** in
|
|
1119
|
+
> the authentication settings.
|
|
1096
1120
|
|
|
1097
1121
|
**Step 4 — Save and test**
|
|
1098
1122
|
|
|
@@ -83,7 +83,8 @@ in place, so re-run it after upgrading. Detailed walkthrough:
|
|
|
83
83
|
## 3b. Generate the Edge Function access token
|
|
84
84
|
|
|
85
85
|
The Edge Functions authenticate callers with a **Cerefox access token**. You need it
|
|
86
|
-
if you'll connect a **Custom GPT** (GPT Actions
|
|
86
|
+
if you'll connect a **Custom GPT** (GPT Actions, until OpenAI retires Custom GPTs on
|
|
87
|
+
December 11, 2026) or a **remote HTTP MCP** client, and
|
|
87
88
|
for a fully-green `cerefox doctor`. The **local MCP** (local agents), **cloud Claude**
|
|
88
89
|
(OAuth), and the CLI/web reach Supabase over the Data API and don't use it — so this
|
|
89
90
|
step is optional if that's your whole setup, but it's quick and harmless to run:
|
|
@@ -147,8 +148,11 @@ clone the repo, run `bun install`, and use the contributor scripts
|
|
|
147
148
|
- **Search from the CLI**: `cerefox search "your query"`
|
|
148
149
|
- **Discover all commands**: `cerefox --help`
|
|
149
150
|
- **Run the web UI**: `cerefox web` (TypeScript — Hono backend + React SPA); see [`cli.md`](cli.md)
|
|
150
|
-
- **Connect more AI clients** (Cursor, Codex,
|
|
151
|
-
[`connect-agents.md`](connect-agents.md)
|
|
151
|
+
- **Connect more AI clients** (Cursor, Codex, Gemini, cloud Claude, etc.):
|
|
152
|
+
[`connect-agents.md`](connect-agents.md). Codex works with the local MCP
|
|
153
|
+
(`cerefox configure-agent --tool codex`). ChatGPT's Custom GPT path ends on
|
|
154
|
+
December 11, 2026; see
|
|
155
|
+
[`chatgpt-after-custom-gpts.md`](../research/chatgpt-after-custom-gpts.md)
|
|
152
156
|
- **Configuration reference**: [`configuration.md`](configuration.md)
|
|
153
157
|
- **Backup + restore**: [`ops-scripts.md`](ops-scripts.md)
|
|
154
158
|
|
|
@@ -220,6 +220,11 @@ FTS-only `mcp.supabase.com` path). This needs a one-time OAuth setup — see
|
|
|
220
220
|
[Step 7](#step-7--oauth-for-cloud-agents-claudeai--mobile-optional) below.
|
|
221
221
|
|
|
222
222
|
**For cloud ChatGPT** — create a Custom GPT with GPT Actions pointing at the Edge Functions.
|
|
223
|
+
This works until **December 11, 2026**, when OpenAI retires Custom GPTs (custom actions do
|
|
224
|
+
not carry over to its plugins). ChatGPT's replacement connection, an MCP connector over
|
|
225
|
+
OAuth like the cloud Claude one, is being validated in
|
|
226
|
+
[#326](https://github.com/fstamatelopoulos/cerefox/issues/326). **For Codex**, use the local
|
|
227
|
+
MCP: `cerefox configure-agent --tool codex`.
|
|
223
228
|
|
|
224
229
|
See `docs/guides/connect-agents.md` for the complete guide including system prompts,
|
|
225
230
|
architecture explanation, and ChatGPT GPT Actions setup.
|
package/docs/guides/upgrading.md
CHANGED
|
@@ -223,7 +223,8 @@ MCP path needs no reconfiguration; for the local stdio server, restart the
|
|
|
223
223
|
client. `cerefox configure-agent --tool <client>` (re)writes a client's config
|
|
224
224
|
if you need it.
|
|
225
225
|
|
|
226
|
-
**ChatGPT Custom GPT (GPT Actions
|
|
226
|
+
**ChatGPT Custom GPT (GPT Actions, until December 11, 2026, when OpenAI retires
|
|
227
|
+
Custom GPTs):** after an upgrade, check the OpenAPI schema
|
|
227
228
|
version in [`connect-agents.md`](connect-agents.md); if it changed, paste the new
|
|
228
229
|
schema into the Custom GPT editor and **re-enter your Cerefox access token**
|
|
229
230
|
(`cfx_pat_…`, from `cerefox token generate`) as the Bearer token. (The editor
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cerefox/memory",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"description": "Cerefox \u2014 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",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@hono/node-server": "^2.1.1",
|
|
43
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
44
44
|
"@supabase/supabase-js": "^2.117.2",
|
|
45
45
|
"cli-progress": "^3.12.0",
|
|
46
46
|
"commander": "^15.0.0",
|