pi-mega-compact 0.13.0 → 0.13.2
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/dist/extensions/dashboard-server/api-contracts/embedder-health.js +11 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/registry.js +225 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/types.js +1 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints.js +5 -224
- package/dist/extensions/dashboard-server/api-contracts/raptor.js +8 -0
- package/dist/extensions/dashboard-server/api-contracts.test/_helpers.js +32 -0
- package/dist/extensions/dashboard-server/routes-cache.test/_helpers.js +48 -0
- package/dist/extensions/dashboard-server/routes-embedder-health.js +67 -0
- package/dist/extensions/dashboard-server/routes-raptor.js +88 -0
- package/dist/extensions/dashboard-server/routes-setup.js +1 -1
- package/dist/extensions/dashboard-server/routes.js +2 -0
- package/dist/extensions/dashboard-server/server.js +5 -1
- package/dist/extensions/mega-cache-replay.test/_helpers.js +175 -0
- package/dist/extensions/mega-commands/dataCommands.js +151 -0
- package/dist/extensions/mega-commands/helpers.js +61 -0
- package/dist/extensions/mega-commands/historyCommands.js +97 -0
- package/dist/extensions/mega-commands/setupCommand.js +200 -0
- package/dist/extensions/mega-commands.js +14 -499
- package/dist/extensions/mega-compact-s38.test/_helpers.js +194 -0
- package/dist/extensions/mega-compact.js +12 -2
- package/dist/extensions/mega-compact.test/_helpers.js +225 -0
- package/dist/extensions/mega-events/agent-handlers/agentEndHandler.js +211 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.js +49 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.js +33 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.js +387 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/event.js +7 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.js +55 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.js +12 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.js +22 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.js +38 -0
- package/dist/extensions/mega-events/agent-handlers/turnEndHandler.js +36 -0
- package/dist/extensions/mega-events/agent-handlers.js +4 -799
- package/dist/extensions/mega-events/context-handler/afterCompact.js +163 -0
- package/dist/extensions/mega-events/context-handler/messageText.js +12 -0
- package/dist/extensions/mega-events/context-handler/tailResult.js +46 -0
- package/dist/extensions/mega-events/context-handler.js +11 -198
- package/dist/extensions/mega-events/separated-prompt.test/_helpers.js +25 -0
- package/dist/src/config.js +2 -0
- package/dist/src/dedup-engine.test/_helpers.js +55 -0
- package/dist/src/e2e.test/_helpers.js +52 -0
- package/dist/src/embedder.js +1 -0
- package/dist/src/httpEmbedder.js +6 -0
- package/dist/src/hyde.js +146 -0
- package/dist/src/importance.test/_helpers.js +5 -0
- package/dist/src/memoryGraph/sources/checkpoints.js +78 -0
- package/dist/src/memoryGraph/sources/edges.js +17 -0
- package/dist/src/memoryGraph/sources/flags.js +22 -0
- package/dist/src/memoryGraph/sources/helpers.js +14 -0
- package/dist/src/memoryGraph/sources/memories.js +88 -0
- package/dist/src/memoryGraph/sources/raptor.js +26 -0
- package/dist/src/memoryGraph/sources/turns.js +176 -0
- package/dist/src/memoryGraph/sources.js +15 -441
- package/dist/src/memoryGraph-gates.test/_helpers.js +120 -0
- package/dist/src/ratio.bench.test/_helpers.js +198 -0
- package/dist/src/recall/async.js +112 -0
- package/dist/src/recall/format.js +149 -0
- package/dist/src/recall/memory.js +62 -0
- package/dist/src/recall/reformulate.js +82 -0
- package/dist/src/recall/sync.js +169 -0
- package/dist/src/recall/types.js +1 -0
- package/dist/src/recall.js +13 -530
- package/dist/src/store/sqlite/schema/core.js +232 -0
- package/dist/src/store/sqlite/schema/game.js +65 -0
- package/dist/src/store/sqlite/schema/plan-v2.js +107 -0
- package/dist/src/store/sqlite/schema/turns.js +59 -0
- package/dist/src/store/sqlite/schema.js +8 -441
- package/dist/src/store/turns/contract-compliance.test/_helpers.js +21 -0
- package/dist/src/store/turns/sqlite-store/admin.js +171 -0
- package/dist/src/store/turns/sqlite-store/ctx.js +1 -0
- package/dist/src/store/turns/sqlite-store/read.js +111 -0
- package/dist/src/store/turns/sqlite-store/rows.js +42 -0
- package/dist/src/store/turns/sqlite-store/write.js +102 -0
- package/dist/src/store/turns/sqlite-store.js +31 -367
- package/dist/src/vectorStore/class.js +356 -0
- package/dist/src/vectorStore/hash.js +10 -0
- package/dist/src/vectorStore/types.js +2 -0
- package/dist/src/vectorStore.js +8 -359
- package/dist/src/vectorStore.test/_helpers.js +17 -0
- package/extensions/dashboard-client/dist/assets/{CacheTab-BZNnKhh5.js → CacheTab-DPRHjYZ0.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{CacheTab-BZNnKhh5.js.map → CacheTab-DPRHjYZ0.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-CzF5L42U.js → EventsTab-CgwYq-Qf.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-CzF5L42U.js.map → EventsTab-CgwYq-Qf.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{HealthTab-BLpidMrX.js → HealthTab-BgOCjVzR.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{HealthTab-BLpidMrX.js.map → HealthTab-BgOCjVzR.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/MaintenanceTab-Yw1yFpsy.js +2 -0
- package/extensions/dashboard-client/dist/assets/MaintenanceTab-Yw1yFpsy.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-yHUX7Yzi.js +2 -0
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-yHUX7Yzi.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{MetricsTab-B0PCysqs.js → MetricsTab-CcH9fP8P.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-B0PCysqs.js.map → MetricsTab-CcH9fP8P.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{OverviewTab-DsOhqFu4.js → OverviewTab-BOs8ZNev.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{OverviewTab-DsOhqFu4.js.map → OverviewTab-BOs8ZNev.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{ReposTab-B3YKYuOf.js → ReposTab-B-MfSPvg.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ReposTab-B3YKYuOf.js.map → ReposTab-B-MfSPvg.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SessionsTab-B96FWcrC.js → SessionsTab-BmeN649Q.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-B96FWcrC.js.map → SessionsTab-BmeN649Q.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/SetupTab-nOknoph5.js +2 -0
- package/extensions/dashboard-client/dist/assets/SetupTab-nOknoph5.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-BfkUVTvA.js → TimeSavedCard-DnPg0L0z.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-BfkUVTvA.js.map → TimeSavedCard-DnPg0L0z.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TopicsTab-DLRsZmXJ.js → TopicsTab-BODHOg_b.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TopicsTab-DLRsZmXJ.js.map → TopicsTab-BODHOg_b.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DKGU2Bf6.js → TurnsTab-BK0I7hKr.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DKGU2Bf6.js.map → TurnsTab-BK0I7hKr.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{index-D-lPLRWB.js → index-mOlljTFI.js} +10 -10
- package/extensions/dashboard-client/dist/assets/index-mOlljTFI.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{useSSE-ClbbcgIp.js → useSSE-BYOtv1-3.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-ClbbcgIp.js.map → useSSE-BYOtv1-3.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +1 -1
- package/extensions/dashboard-client/src/App.tsx +0 -4
- package/extensions/dashboard-client/src/api/client.ts +16 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab/ActionsCard.tsx +178 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab/DbStatsCard.tsx +140 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab/DebugBundleCard.tsx +109 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab/HealthMitigationCard.tsx +98 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab/SchemaHealthCard.tsx +108 -0
- package/extensions/dashboard-client/src/tabs/MaintenanceTab.tsx +12 -598
- package/extensions/dashboard-client/src/tabs/MemoryMapTab/MemoryMapView.tsx +476 -0
- package/extensions/dashboard-client/src/tabs/MemoryMapTab/RaptorTreeView.tsx +163 -0
- package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +56 -466
- package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderHealthCard.tsx +109 -0
- package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderSetup.tsx +468 -0
- package/extensions/dashboard-client/src/tabs/SetupTab.tsx +23 -484
- package/extensions/dashboard-server/api-contracts/embedder-health.ts +32 -0
- package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +360 -0
- package/extensions/dashboard-server/api-contracts/endpoints/types.ts +350 -0
- package/extensions/dashboard-server/api-contracts/endpoints.ts +27 -648
- package/extensions/dashboard-server/api-contracts/index.ts +6 -0
- package/extensions/dashboard-server/api-contracts/raptor.ts +49 -0
- package/extensions/dashboard-server/api-contracts.test/_helpers.ts +47 -0
- package/extensions/dashboard-server/routes-cache.test/_helpers.ts +94 -0
- package/extensions/dashboard-server/routes-embedder-health.ts +77 -0
- package/extensions/dashboard-server/routes-raptor.ts +128 -0
- package/extensions/dashboard-server/routes-setup.ts +1 -1
- package/extensions/dashboard-server/routes.ts +2 -0
- package/extensions/dashboard-server/server.ts +4 -0
- package/extensions/mega-cache-replay.test/_helpers.ts +188 -0
- package/extensions/mega-commands/dataCommands.ts +169 -0
- package/extensions/mega-commands/helpers.ts +62 -0
- package/extensions/mega-commands/historyCommands.ts +117 -0
- package/extensions/mega-commands/setupCommand.ts +235 -0
- package/extensions/mega-commands.ts +25 -538
- package/extensions/mega-compact-s38.test/_helpers.ts +201 -0
- package/extensions/mega-compact.test/_helpers.ts +237 -0
- package/extensions/mega-compact.ts +12 -2
- package/extensions/mega-events/agent-handlers/agentEndHandler.ts +238 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.ts +74 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.ts +50 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.ts +421 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/event.ts +16 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.ts +73 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.ts +29 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.ts +42 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.ts +61 -0
- package/extensions/mega-events/agent-handlers/turnEndHandler.ts +64 -0
- package/extensions/mega-events/agent-handlers.ts +15 -861
- package/extensions/mega-events/context-handler/afterCompact.ts +213 -0
- package/extensions/mega-events/context-handler/messageText.ts +20 -0
- package/extensions/mega-events/context-handler/tailResult.ts +63 -0
- package/extensions/mega-events/context-handler.ts +17 -235
- package/extensions/mega-events/separated-prompt.test/_helpers.ts +35 -0
- package/package.json +1 -1
- package/src/config.ts +4 -0
- package/src/dedup-engine.test/_helpers.ts +79 -0
- package/src/e2e.test/_helpers.ts +59 -0
- package/src/embedder.ts +4 -0
- package/src/httpEmbedder.ts +7 -0
- package/src/hyde.ts +162 -0
- package/src/importance.test/_helpers.ts +5 -0
- package/src/memoryGraph/sources/checkpoints.ts +99 -0
- package/src/memoryGraph/sources/edges.ts +23 -0
- package/src/memoryGraph/sources/flags.ts +26 -0
- package/src/memoryGraph/sources/helpers.ts +13 -0
- package/src/memoryGraph/sources/memories.ts +108 -0
- package/src/memoryGraph/sources/raptor.ts +37 -0
- package/src/memoryGraph/sources/turns.ts +226 -0
- package/src/memoryGraph/sources.ts +19 -544
- package/src/memoryGraph-gates.test/_helpers.ts +164 -0
- package/src/ratio.bench.test/_helpers.ts +268 -0
- package/src/recall/async.ts +142 -0
- package/src/recall/format.ts +173 -0
- package/src/recall/memory.ts +90 -0
- package/src/recall/reformulate.ts +111 -0
- package/src/recall/sync.ts +196 -0
- package/src/recall/types.ts +63 -0
- package/src/recall.ts +25 -712
- package/src/store/sqlite/schema/core.ts +233 -0
- package/src/store/sqlite/schema/game.ts +66 -0
- package/src/store/sqlite/schema/plan-v2.ts +108 -0
- package/src/store/sqlite/schema/turns.ts +60 -0
- package/src/store/sqlite/schema.ts +13 -441
- package/src/store/turns/contract-compliance.test/_helpers.ts +38 -0
- package/src/store/turns/sqlite-store/admin.ts +249 -0
- package/src/store/turns/sqlite-store/ctx.ts +14 -0
- package/src/store/turns/sqlite-store/read.ts +174 -0
- package/src/store/turns/sqlite-store/rows.ts +55 -0
- package/src/store/turns/sqlite-store/write.ts +193 -0
- package/src/store/turns/sqlite-store.ts +33 -514
- package/src/vectorStore/class.ts +433 -0
- package/src/vectorStore/hash.ts +11 -0
- package/src/vectorStore/types.ts +58 -0
- package/src/vectorStore.test/_helpers.ts +20 -0
- package/src/vectorStore.ts +13 -489
- package/extensions/dashboard-client/dist/assets/ConfigTab-DG0WkuuG.js +0 -2
- package/extensions/dashboard-client/dist/assets/ConfigTab-DG0WkuuG.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/MaintenanceTab-BQF7W7xX.js +0 -2
- package/extensions/dashboard-client/dist/assets/MaintenanceTab-BQF7W7xX.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-CPtHLv0A.js +0 -2
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-CPtHLv0A.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/SetupTab-hbzQ_NZv.js +0 -2
- package/extensions/dashboard-client/dist/assets/SetupTab-hbzQ_NZv.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/index-D-lPLRWB.js.map +0 -1
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* schema.ts — table creation, migrations, `ensureColumn`, PRAGMA setup.
|
|
3
|
+
*
|
|
4
|
+
* Thin pointer: the table DDL is grouped by concern in ./schema/* (core /
|
|
5
|
+
* turns / game / plan-v2) and composed here by initSchema. The schema_version
|
|
6
|
+
* seeding, idempotent column migrations, and achievement seeding stay in this
|
|
7
|
+
* file. Public API (initSchema / ensureColumn) is unchanged for callers.
|
|
3
8
|
*/
|
|
4
9
|
import type { DatabaseSync } from "node:sqlite";
|
|
5
10
|
import { ACHIEVEMENT_DEFS } from "../../game/scoring.js";
|
|
11
|
+
import { CORE_DDL } from "./schema/core.js";
|
|
12
|
+
import { TURNS_DDL } from "./schema/turns.js";
|
|
13
|
+
import { GAME_DDL } from "./schema/game.js";
|
|
14
|
+
import { PLAN_V2_DDL } from "./schema/plan-v2.js";
|
|
6
15
|
|
|
7
16
|
const SCHEMA_VERSION = 5;
|
|
8
17
|
|
|
@@ -27,447 +36,10 @@ export function ensureColumn(
|
|
|
27
36
|
}
|
|
28
37
|
|
|
29
38
|
export function initSchema(db: DatabaseSync): void {
|
|
30
|
-
db.exec(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
region_hash TEXT,
|
|
35
|
-
content_hash TEXT,
|
|
36
|
-
content_hash2 TEXT,
|
|
37
|
-
content_hash_version INTEGER,
|
|
38
|
-
normalized_text TEXT,
|
|
39
|
-
summary TEXT,
|
|
40
|
-
topic_summary TEXT,
|
|
41
|
-
summary_hash TEXT,
|
|
42
|
-
key_decisions TEXT, -- JSON array
|
|
43
|
-
next_steps TEXT, -- JSON array
|
|
44
|
-
files_modified TEXT, -- JSON array
|
|
45
|
-
embedding_blob BLOB, -- float32 vector
|
|
46
|
-
token_estimate INTEGER,
|
|
47
|
-
original_token_estimate INTEGER, -- dropped region size (tokens saved = orig − stored)
|
|
48
|
-
timestamp INTEGER,
|
|
49
|
-
dedup_status TEXT DEFAULT 'active',
|
|
50
|
-
compressed_original BLOB -- optional DR copy
|
|
51
|
-
);
|
|
52
|
-
-- Primary key is (session_id, id): checkpoint ids are unique per session
|
|
53
|
-
-- (chkpt_001 per session), not globally, so a bare id PK would collide
|
|
54
|
-
-- across sessions on the nextCheckpointId sequence.
|
|
55
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_chunks_pk
|
|
56
|
-
ON context_chunks(session_id, id);
|
|
57
|
-
CREATE INDEX IF NOT EXISTS idx_chunks_session ON context_chunks(session_id);
|
|
58
|
-
-- S42D/QA perf: session-scoped timestamp ordering so the S25 RAPTOR
|
|
59
|
-
-- freshness guard's MAX(timestamp) (run on every RAPTOR search) is
|
|
60
|
-
-- index-satisfied rather than a full partition scan as checkpoints grow.
|
|
61
|
-
CREATE INDEX IF NOT EXISTS idx_chunks_session_ts
|
|
62
|
-
ON context_chunks(session_id, timestamp DESC);
|
|
63
|
-
CREATE INDEX IF NOT EXISTS idx_chunks_region ON context_chunks(region_hash);
|
|
64
|
-
CREATE INDEX IF NOT EXISTS idx_chunks_content ON context_chunks(content_hash);
|
|
65
|
-
-- Partial UNIQUE (QA #1): null content_hash rows never violate the constraint;
|
|
66
|
-
-- ON CONFLICT DO NOTHING makes backfill + L0 inserts safe.
|
|
67
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_content_hash
|
|
68
|
-
ON context_chunks(session_id, content_hash) WHERE content_hash IS NOT NULL;
|
|
69
|
-
|
|
70
|
-
-- Sprint 11: MinHash signature + LSH bucket tables for L1 near-dup dedup.
|
|
71
|
-
CREATE TABLE IF NOT EXISTS minhash_signatures (
|
|
72
|
-
chunk_id TEXT NOT NULL,
|
|
73
|
-
session_id TEXT NOT NULL,
|
|
74
|
-
signature_version INTEGER NOT NULL,
|
|
75
|
-
signatures TEXT NOT NULL, -- JSON array of 256 uint32
|
|
76
|
-
PRIMARY KEY (chunk_id, signature_version)
|
|
77
|
-
);
|
|
78
|
-
CREATE INDEX IF NOT EXISTS idx_minhash_session ON minhash_signatures(session_id);
|
|
79
|
-
|
|
80
|
-
CREATE TABLE IF NOT EXISTS dedup_lsh_buckets (
|
|
81
|
-
bucket_key TEXT NOT NULL,
|
|
82
|
-
chunk_id TEXT NOT NULL,
|
|
83
|
-
session_id TEXT NOT NULL,
|
|
84
|
-
signature_version INTEGER NOT NULL,
|
|
85
|
-
PRIMARY KEY (bucket_key, chunk_id)
|
|
86
|
-
);
|
|
87
|
-
CREATE INDEX IF NOT EXISTS idx_lsh_bucket ON dedup_lsh_buckets(bucket_key, session_id);
|
|
88
|
-
|
|
89
|
-
CREATE TABLE IF NOT EXISTS session_state (
|
|
90
|
-
session_id TEXT PRIMARY KEY,
|
|
91
|
-
injected_checkpoint_ids TEXT, -- JSON array
|
|
92
|
-
stored_region_hashes TEXT, -- JSON array
|
|
93
|
-
conversation_id TEXT, -- S43: groups turns across resumes (/clear → new root)
|
|
94
|
-
last_turn_id INTEGER -- S43: most recent turn id (stable fork refs)
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
CREATE TABLE IF NOT EXISTS meta (
|
|
98
|
-
key TEXT PRIMARY KEY,
|
|
99
|
-
value TEXT
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
-- Sprint 13 (RAPTOR): hierarchical summary tree nodes. children are a JSON
|
|
103
|
-
-- array of child node ids (or raw leaf ids at the bottom); embedding_blob
|
|
104
|
-
-- is the node centroid. Additive; retrieval ignores this table until
|
|
105
|
-
-- Sprint 14 promotes RAPTOR out of shadow mode.
|
|
106
|
-
CREATE TABLE IF NOT EXISTS raptor_nodes (
|
|
107
|
-
id TEXT NOT NULL,
|
|
108
|
-
session_id TEXT NOT NULL,
|
|
109
|
-
level INTEGER NOT NULL,
|
|
110
|
-
parent_id TEXT,
|
|
111
|
-
children TEXT, -- JSON array of child ids
|
|
112
|
-
summary TEXT,
|
|
113
|
-
embedding_blob BLOB, -- float32 centroid
|
|
114
|
-
quality_marker TEXT DEFAULT 'low',
|
|
115
|
-
token_estimate INTEGER,
|
|
116
|
-
built_at INTEGER, -- S25: epoch ms when the tree was built (freshness guard)
|
|
117
|
-
PRIMARY KEY (session_id, id)
|
|
118
|
-
);
|
|
119
|
-
CREATE INDEX IF NOT EXISTS idx_raptor_session ON raptor_nodes(session_id);
|
|
120
|
-
CREATE INDEX IF NOT EXISTS idx_raptor_parent ON raptor_nodes(parent_id);
|
|
121
|
-
|
|
122
|
-
-- S42D: structured RAPTOR build history. One row per tree build; the
|
|
123
|
-
-- freshness check (buildHistory.ts) uses completed_at + leaf_count to skip
|
|
124
|
-
-- unnecessary rebuilds when the tree is recent and the chunk count is stable.
|
|
125
|
-
CREATE TABLE IF NOT EXISTS raptor_build_history (
|
|
126
|
-
build_id TEXT PRIMARY KEY,
|
|
127
|
-
session_id TEXT NOT NULL,
|
|
128
|
-
state_dir TEXT NOT NULL,
|
|
129
|
-
started_at INTEGER NOT NULL,
|
|
130
|
-
completed_at INTEGER NOT NULL,
|
|
131
|
-
node_count INTEGER NOT NULL,
|
|
132
|
-
leaf_count INTEGER NOT NULL,
|
|
133
|
-
depth INTEGER NOT NULL,
|
|
134
|
-
config_json TEXT NOT NULL, -- serialized BuildOptions
|
|
135
|
-
coherence_score REAL, -- avg intra-cluster cosine (post-build)
|
|
136
|
-
timed_out INTEGER NOT NULL DEFAULT 0
|
|
137
|
-
);
|
|
138
|
-
CREATE INDEX IF NOT EXISTS idx_raptor_build_session ON raptor_build_history(session_id);
|
|
139
|
-
|
|
140
|
-
-- Foundation for future features (resume sessions, daily log, lessons
|
|
141
|
-
-- learned). Scaffolded now so all store data lives in SQLite from day one;
|
|
142
|
-
-- population is minimal (touchSession / logDaily on compact) and the full
|
|
143
|
-
-- UI/recall for these lands in later sprints.
|
|
144
|
-
|
|
145
|
-
-- Per-session registry (resume + per-repo session history).
|
|
146
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
147
|
-
session_id TEXT PRIMARY KEY,
|
|
148
|
-
repo TEXT,
|
|
149
|
-
started_at INTEGER,
|
|
150
|
-
ended_at INTEGER,
|
|
151
|
-
last_compacted_at INTEGER,
|
|
152
|
-
status TEXT DEFAULT 'active'
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
-- Append-only daily activity log (the "daily log" feature seed).
|
|
156
|
-
CREATE TABLE IF NOT EXISTS daily_log (
|
|
157
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
158
|
-
day TEXT NOT NULL, -- YYYY-MM-DD
|
|
159
|
-
session_id TEXT,
|
|
160
|
-
event TEXT, -- e.g. 'compact'
|
|
161
|
-
detail TEXT,
|
|
162
|
-
tokens_saved INTEGER DEFAULT 0,
|
|
163
|
-
ts INTEGER
|
|
164
|
-
);
|
|
165
|
-
CREATE INDEX IF NOT EXISTS idx_daily_log_day ON daily_log(day);
|
|
166
|
-
|
|
167
|
-
-- Active model/provider for cost estimation + the future multi-repo
|
|
168
|
-
-- dashboard (Phase 5b). One row per (repo, model change); latest wins.
|
|
169
|
-
CREATE TABLE IF NOT EXISTS model_snapshots (
|
|
170
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
171
|
-
repo_root TEXT NOT NULL,
|
|
172
|
-
provider TEXT NOT NULL,
|
|
173
|
-
provider_name TEXT,
|
|
174
|
-
model_id TEXT NOT NULL,
|
|
175
|
-
model_name TEXT,
|
|
176
|
-
input_rate REAL, -- USD per input token (Model.cost.input)
|
|
177
|
-
output_rate REAL, -- USD per output token (Model.cost.output)
|
|
178
|
-
context_window INTEGER,
|
|
179
|
-
max_tokens INTEGER,
|
|
180
|
-
reasoning INTEGER DEFAULT 0,
|
|
181
|
-
captured_at INTEGER
|
|
182
|
-
);
|
|
183
|
-
CREATE INDEX IF NOT EXISTS idx_model_repo ON model_snapshots(repo_root);
|
|
184
|
-
|
|
185
|
-
-- Lessons learned (future recall/browse feature seed).
|
|
186
|
-
CREATE TABLE IF NOT EXISTS lessons (
|
|
187
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
188
|
-
session_id TEXT,
|
|
189
|
-
repo TEXT,
|
|
190
|
-
lesson TEXT,
|
|
191
|
-
ts INTEGER
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
-- Durable "save to memory" store (taken over from memory extensions).
|
|
195
|
-
-- One row per saved memory; scoped by repo so memory travels with the
|
|
196
|
-
-- clone. All params are parameterized (PREVENT-002).
|
|
197
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
198
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
199
|
-
repo TEXT,
|
|
200
|
-
kind TEXT DEFAULT 'note', -- note | fact | decision | preference
|
|
201
|
-
content TEXT NOT NULL,
|
|
202
|
-
tags TEXT, -- JSON array of strings
|
|
203
|
-
created_at INTEGER,
|
|
204
|
-
last_recalled_at INTEGER,
|
|
205
|
-
-- S20 memory-RAG extension (auto-review add/replace/remove ops).
|
|
206
|
-
category TEXT, -- typed bucket, e.g. decision | fact | preference
|
|
207
|
-
target TEXT, -- optional subject/scope this memory targets
|
|
208
|
-
last_referenced INTEGER, -- last time memory was referenced by recall (epoch s)
|
|
209
|
-
source_turn INTEGER -- conversation turn that produced this memory
|
|
210
|
-
);
|
|
211
|
-
CREATE INDEX IF NOT EXISTS idx_memories_repo ON memories(repo);
|
|
212
|
-
|
|
213
|
-
-- FTS5 trigram virtual table (Sprint 9+ pg_trgm-equivalent verification).
|
|
214
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS context_chunks_trgm USING fts5(
|
|
215
|
-
id UNINDEXED,
|
|
216
|
-
normalized_text,
|
|
217
|
-
tokenize='trigram'
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
-- S27: durable raw-transcript mirror (MEGACOMPACT_DB_MIRROR). Appended
|
|
221
|
-
-- RAW message bytes per session so a compacted window can be rehydrated
|
|
222
|
-
-- from the local store instead of the pi runtime transcript (which is
|
|
223
|
-
-- trimmed). PK is (content_hash, session_id) — NOT content_hash alone —
|
|
224
|
-
-- so identical content in different sessions never collides. Additive:
|
|
225
|
-
-- CREATE TABLE IF NOT EXISTS leaves existing DBs untouched on open until
|
|
226
|
-
-- the S27 mirror flag is flipped on. All queries parameterized (PREVENT-002).
|
|
227
|
-
CREATE TABLE IF NOT EXISTS raw_transcript (
|
|
228
|
-
content_hash TEXT NOT NULL,
|
|
229
|
-
session_id TEXT NOT NULL,
|
|
230
|
-
seq INTEGER NOT NULL,
|
|
231
|
-
role TEXT NOT NULL,
|
|
232
|
-
content_bytes TEXT NOT NULL,
|
|
233
|
-
tool_name TEXT,
|
|
234
|
-
message_timestamp INTEGER, -- ORIGINAL msg ts at append, NOT served
|
|
235
|
-
checkpoint_epoch TEXT NOT NULL,
|
|
236
|
-
PRIMARY KEY (content_hash, session_id)
|
|
237
|
-
);
|
|
238
|
-
CREATE INDEX IF NOT EXISTS idx_rt_session_seq ON raw_transcript(session_id, seq);
|
|
239
|
-
CREATE INDEX IF NOT EXISTS idx_rt_epoch ON raw_transcript(checkpoint_epoch);
|
|
240
|
-
|
|
241
|
-
-- S27: checkpoint-epoch registry. One row per compaction epoch; the
|
|
242
|
-
-- summary_message_text is the verbatim system message that replaced the
|
|
243
|
-
-- trimmed prefix. Informational bookkeeping (the raw_transcript rows are
|
|
244
|
-
-- authoritative); refresh-safe via ON CONFLICT(epoch_id) DO UPDATE.
|
|
245
|
-
CREATE TABLE IF NOT EXISTS checkpoint_epochs (
|
|
246
|
-
epoch_id TEXT PRIMARY KEY,
|
|
247
|
-
session_id TEXT NOT NULL,
|
|
248
|
-
started_seq INTEGER NOT NULL,
|
|
249
|
-
committed_seq INTEGER NOT NULL,
|
|
250
|
-
summary_message_text TEXT NOT NULL,
|
|
251
|
-
cut_index INTEGER NOT NULL,
|
|
252
|
-
checkpoint_id TEXT NOT NULL,
|
|
253
|
-
created_at INTEGER NOT NULL
|
|
254
|
-
);
|
|
255
|
-
CREATE INDEX IF NOT EXISTS idx_epoch_session ON checkpoint_epochs(session_id, created_at DESC);
|
|
256
|
-
|
|
257
|
-
-- S43 (per-turn vector tracking): the relational spine for per-turn +
|
|
258
|
-
-- per-conversation memories. One row per turn_end; links turns to the
|
|
259
|
-
-- epoch that compacted them (epoch_id) and to the checkpoints/cluster
|
|
260
|
-
-- summaries that were RECALLED during that turn (turn_recall).
|
|
261
|
-
-- conversation_id groups turns across pi session resumes (/clear starts a
|
|
262
|
-
-- new conversation root; a fork carries parent_conversation_id).
|
|
263
|
-
CREATE TABLE IF NOT EXISTS turns (
|
|
264
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT, -- global turn id
|
|
265
|
-
conversation_id TEXT NOT NULL,
|
|
266
|
-
session_id TEXT NOT NULL,
|
|
267
|
-
turn_index INTEGER NOT NULL, -- per-session turn (event.turnIndex)
|
|
268
|
-
role TEXT, -- 'user' | 'assistant' | 'tool' (turn's last role)
|
|
269
|
-
started_at INTEGER NOT NULL,
|
|
270
|
-
ended_at INTEGER, -- set at turn_end
|
|
271
|
-
ctx_tokens INTEGER, -- runtime.lastCtxTokens snapshot
|
|
272
|
-
ctx_percent REAL, -- runtime.lastCtxPercent
|
|
273
|
-
pressure_band TEXT, -- 'low'|'mid'|'high'|'critical'
|
|
274
|
-
model_id TEXT,
|
|
275
|
-
epoch_id TEXT, -- FK checkpoint_epochs (set when a compact closes this turn's epoch)
|
|
276
|
-
UNIQUE(session_id, turn_index)
|
|
277
|
-
);
|
|
278
|
-
CREATE INDEX IF NOT EXISTS idx_turns_conv ON turns(conversation_id, turn_index);
|
|
279
|
-
CREATE INDEX IF NOT EXISTS idx_turns_session ON turns(session_id, turn_index);
|
|
280
|
-
CREATE INDEX IF NOT EXISTS idx_turns_epoch ON turns(epoch_id) WHERE epoch_id IS NOT NULL;
|
|
281
|
-
|
|
282
|
-
-- S43: recall provenance — which checkpoints/cluster summaries were
|
|
283
|
-
-- injected at which turn, their score, and the path that sourced them.
|
|
284
|
-
-- This is the per-turn vector data that makes memory quality measurable
|
|
285
|
-
-- per turn and enables recall-to-point (replay these checkpoint_ids into a
|
|
286
|
-
-- forked session). source: 'flat' | 'raptor' | 'cross-repo' | 'memory'.
|
|
287
|
-
CREATE TABLE IF NOT EXISTS turn_recall (
|
|
288
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
289
|
-
turn_id INTEGER NOT NULL,
|
|
290
|
-
checkpoint_id TEXT NOT NULL,
|
|
291
|
-
score REAL NOT NULL,
|
|
292
|
-
source TEXT NOT NULL,
|
|
293
|
-
raptor_level INTEGER, -- set for RAPTOR cluster hits
|
|
294
|
-
UNIQUE(turn_id, checkpoint_id)
|
|
295
|
-
);
|
|
296
|
-
CREATE INDEX IF NOT EXISTS idx_turn_recall_turn ON turn_recall(turn_id);
|
|
297
|
-
CREATE INDEX IF NOT EXISTS idx_turn_recall_cp ON turn_recall(checkpoint_id);
|
|
298
|
-
|
|
299
|
-
-- S43: conversation branch/fork registry. A row per fork: the child
|
|
300
|
-
-- conversation inherits the parent's recall state at fork_turn_id as its
|
|
301
|
-
-- starting injected-set. The root conversation has no row here.
|
|
302
|
-
CREATE TABLE IF NOT EXISTS conversation_branches (
|
|
303
|
-
conversation_id TEXT PRIMARY KEY,
|
|
304
|
-
parent_conversation_id TEXT NOT NULL,
|
|
305
|
-
fork_turn_id INTEGER NOT NULL, -- FK turns.id at the branch point
|
|
306
|
-
created_at INTEGER NOT NULL
|
|
307
|
-
);
|
|
308
|
-
CREATE INDEX IF NOT EXISTS idx_conv_branch_parent ON conversation_branches(parent_conversation_id);
|
|
309
|
-
|
|
310
|
-
-- S27 Task 6: dedup_mirror for space-efficient deduplicated storage.
|
|
311
|
-
-- Each unique content_hash stores its bytes ONCE; raw_transcript rows
|
|
312
|
-
-- reference this table via content_ref instead of storing duplicate content_bytes inline.
|
|
313
|
-
CREATE TABLE IF NOT EXISTS dedup_mirror (
|
|
314
|
-
content_hash TEXT PRIMARY KEY,
|
|
315
|
-
content_bytes TEXT NOT NULL,
|
|
316
|
-
ref_count INTEGER NOT NULL DEFAULT 1,
|
|
317
|
-
first_seen_seq INTEGER NOT NULL,
|
|
318
|
-
created_at INTEGER NOT NULL
|
|
319
|
-
);
|
|
320
|
-
|
|
321
|
-
-- S30 game mode: global toggle state (single row, id=1). Holds the
|
|
322
|
-
-- game-mode on/off switch, the active visual-effect theme id, and the TUI
|
|
323
|
-
-- widget display mode. Global across all repos; written by /mega-game and
|
|
324
|
-
-- the dashboard settings strip (S32). Local SQLite (PREVENT-PI-004).
|
|
325
|
-
CREATE TABLE IF NOT EXISTS game_state (
|
|
326
|
-
id INTEGER PRIMARY KEY CHECK(id = 1),
|
|
327
|
-
game_mode_on INTEGER NOT NULL DEFAULT 0,
|
|
328
|
-
theme TEXT NOT NULL DEFAULT 'transparent',
|
|
329
|
-
tui_display_mode TEXT NOT NULL DEFAULT 'full'
|
|
330
|
-
CHECK(tui_display_mode IN ('full','minimal'))
|
|
331
|
-
);
|
|
332
|
-
-- S33 game mode: per-repo leaderboard metrics. One row per recorded event
|
|
333
|
-
-- (turn_end / session_compact); leaderboard() derives rankings. 'repos' is
|
|
334
|
-
-- derived (COUNT DISTINCT, never recorded). Local SQLite (PREVENT-PI-004).
|
|
335
|
-
CREATE TABLE IF NOT EXISTS game_scores (
|
|
336
|
-
repo_root TEXT NOT NULL,
|
|
337
|
-
metric TEXT NOT NULL CHECK(metric IN ('cache','dedupe','turns','repos','mega_cache')),
|
|
338
|
-
ts INTEGER NOT NULL,
|
|
339
|
-
value REAL NOT NULL,
|
|
340
|
-
meta TEXT,
|
|
341
|
-
PRIMARY KEY(repo_root, metric, ts)
|
|
342
|
-
) WITHOUT ROWID;
|
|
343
|
-
CREATE INDEX IF NOT EXISTS idx_game_scores_metric_ts ON game_scores(metric, ts);
|
|
344
|
-
|
|
345
|
-
-- S35 game mode: achievements (9 rows, seeded idempotently on first open).
|
|
346
|
-
-- hidden=1 AND unlocked_at IS NULL => render NOTHING (no teaser). Local SQLite.
|
|
347
|
-
CREATE TABLE IF NOT EXISTS game_achievements (
|
|
348
|
-
id TEXT PRIMARY KEY,
|
|
349
|
-
title TEXT NOT NULL,
|
|
350
|
-
description TEXT NOT NULL,
|
|
351
|
-
hidden INTEGER NOT NULL DEFAULT 0 CHECK(hidden IN (0,1)),
|
|
352
|
-
icon TEXT,
|
|
353
|
-
unlocked_at INTEGER NULL
|
|
354
|
-
) WITHOUT ROWID;
|
|
355
|
-
|
|
356
|
-
-- v0.8.8 Perf dashboard: append-only local instrumentation samples (one row
|
|
357
|
-
-- per turn / provider round-trip / 5s cpu-mem tick / snapshot-recompute).
|
|
358
|
-
-- Drives the dashboard Perf tab. Local SQLite (PREVENT-PI-004); parameterized
|
|
359
|
-
-- accessors in perf-samples.ts (PREVENT-002).
|
|
360
|
-
CREATE TABLE IF NOT EXISTS perf_samples (
|
|
361
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
362
|
-
ts INTEGER NOT NULL,
|
|
363
|
-
kind TEXT NOT NULL,
|
|
364
|
-
value REAL NOT NULL,
|
|
365
|
-
meta TEXT
|
|
366
|
-
);
|
|
367
|
-
CREATE INDEX IF NOT EXISTS idx_perf_samples_ts ON perf_samples(ts);
|
|
368
|
-
CREATE INDEX IF NOT EXISTS idx_perf_samples_kind_ts ON perf_samples(kind, ts);
|
|
369
|
-
|
|
370
|
-
-- A1 PLAN_V2 Phase 2: Message Separation tables (SCHEMA_VERSION 3).
|
|
371
|
-
-- Stable conversation thread: user + assistant turns ONLY. Tool results are
|
|
372
|
-
-- stored in tool_results to keep the conversation thread cache-predictable.
|
|
373
|
-
-- Parameterized queries only (PREVENT-002). CREATE TABLE IF NOT EXISTS is
|
|
374
|
-
-- a no-op on re-open — no migration needed.
|
|
375
|
-
CREATE TABLE IF NOT EXISTS conversation_thread (
|
|
376
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
377
|
-
conversation_id TEXT NOT NULL,
|
|
378
|
-
role TEXT NOT NULL CHECK(role IN ('user','assistant')),
|
|
379
|
-
content TEXT NOT NULL,
|
|
380
|
-
turn_index INTEGER NOT NULL,
|
|
381
|
-
timestamp INTEGER NOT NULL
|
|
382
|
-
);
|
|
383
|
-
CREATE INDEX IF NOT EXISTS idx_conv_thread_conv_turn
|
|
384
|
-
ON conversation_thread(conversation_id, turn_index);
|
|
385
|
-
|
|
386
|
-
-- Volatile tool results: appended at END so they never disrupt the
|
|
387
|
-
-- conversation thread prefix (the prompt-cache-friendly prefix).
|
|
388
|
-
CREATE TABLE IF NOT EXISTS tool_results (
|
|
389
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
390
|
-
conversation_id TEXT NOT NULL,
|
|
391
|
-
tool_call_id TEXT NOT NULL,
|
|
392
|
-
tool_result TEXT NOT NULL,
|
|
393
|
-
turn_index INTEGER NOT NULL,
|
|
394
|
-
timestamp INTEGER NOT NULL
|
|
395
|
-
);
|
|
396
|
-
CREATE INDEX IF NOT EXISTS idx_tool_results_conv_turn
|
|
397
|
-
ON tool_results(conversation_id, turn_index);
|
|
398
|
-
|
|
399
|
-
-- A2 PLAN_V2 Phase 3: Vector-Aware Cache Striping (SCHEMA_VERSION 4).
|
|
400
|
-
-- Cache stripe assignments: maps each context chunk to a cache stability
|
|
401
|
-
-- tier (stripe). Layer 0=permanent, 1=epoch, 2=topic, 3=thread, 4=volatile.
|
|
402
|
-
-- stability is the composite score (0.0-1.0) from computeStabilityScore.
|
|
403
|
-
-- Primary key is (chunk_id, epoch_id) so the same chunk can be reassigned
|
|
404
|
-
-- across epochs without conflict. See cache-stripe.ts for scoring details.
|
|
405
|
-
-- Parameterized queries only (PREVENT-002). IF NOT EXISTS is a no-op on re-open.
|
|
406
|
-
CREATE TABLE IF NOT EXISTS cache_stripes (
|
|
407
|
-
chunk_id TEXT NOT NULL,
|
|
408
|
-
stripe INTEGER NOT NULL,
|
|
409
|
-
stability REAL NOT NULL,
|
|
410
|
-
assigned_at INTEGER NOT NULL,
|
|
411
|
-
epoch_id TEXT,
|
|
412
|
-
PRIMARY KEY (chunk_id, epoch_id)
|
|
413
|
-
);
|
|
414
|
-
CREATE INDEX IF NOT EXISTS idx_cs_stripe_stability
|
|
415
|
-
ON cache_stripes(stripe, stability DESC);
|
|
416
|
-
|
|
417
|
-
-- Embedding computation cache: avoids re-embedding content every time
|
|
418
|
-
-- stability scores are recomputed across epochs. Keyed by content_hash
|
|
419
|
-
-- (SHA-256 64-hex-char string). Embeddings are serialized via
|
|
420
|
-
-- Float64Array-to-Buffer to match the embedding_blob convention.
|
|
421
|
-
CREATE TABLE IF NOT EXISTS embedding_cache (
|
|
422
|
-
content_hash TEXT PRIMARY KEY,
|
|
423
|
-
embedding BLOB NOT NULL,
|
|
424
|
-
computed_at INTEGER NOT NULL
|
|
425
|
-
);
|
|
426
|
-
CREATE INDEX IF NOT EXISTS idx_emb_cache_computed
|
|
427
|
-
ON embedding_cache(computed_at DESC);
|
|
428
|
-
|
|
429
|
-
-- A2 PLAN_V2 Phase 2 (SCHEMA_VERSION 5): Context Health metrics. One row
|
|
430
|
-
-- per turn recorded during compactSession. drift_score / output_quality /
|
|
431
|
-
-- error_score / cache_health / cache_poison / composite are the core signal
|
|
432
|
-
-- columns; repetition_ratio / coherence_score / prefix_hash are optional
|
|
433
|
-
-- enrichment. Parameterized accessors in context-health.ts (PREVENT-002).
|
|
434
|
-
CREATE TABLE IF NOT EXISTS context_health (
|
|
435
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
436
|
-
ts INTEGER NOT NULL,
|
|
437
|
-
turn_index INTEGER NOT NULL,
|
|
438
|
-
session_id TEXT NOT NULL,
|
|
439
|
-
drift_score REAL,
|
|
440
|
-
output_quality REAL,
|
|
441
|
-
error_score REAL,
|
|
442
|
-
cache_health REAL,
|
|
443
|
-
cache_poison REAL,
|
|
444
|
-
composite REAL,
|
|
445
|
-
model_id TEXT,
|
|
446
|
-
repetition_ratio REAL,
|
|
447
|
-
coherence_score REAL,
|
|
448
|
-
prefix_hash TEXT
|
|
449
|
-
);
|
|
450
|
-
CREATE INDEX IF NOT EXISTS idx_ctx_health_ts
|
|
451
|
-
ON context_health(ts);
|
|
452
|
-
CREATE INDEX IF NOT EXISTS idx_ctx_health_session
|
|
453
|
-
ON context_health(session_id, ts);
|
|
454
|
-
|
|
455
|
-
-- A2 PLAN_V2 Phase 2 (SCHEMA_VERSION 5): Cache poison advisory events.
|
|
456
|
-
-- Emitted when cache corruption / inconsistency is detected at a given
|
|
457
|
-
-- layer during compactSession. Drives the R13 advisory channel redesign.
|
|
458
|
-
-- Parameterized accessors in context-health.ts (PREVENT-002).
|
|
459
|
-
CREATE TABLE IF NOT EXISTS cache_poison_events (
|
|
460
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
461
|
-
ts INTEGER NOT NULL,
|
|
462
|
-
turn_index INTEGER NOT NULL,
|
|
463
|
-
session_id TEXT NOT NULL,
|
|
464
|
-
layer INTEGER,
|
|
465
|
-
detail TEXT,
|
|
466
|
-
severity TEXT
|
|
467
|
-
);
|
|
468
|
-
CREATE INDEX IF NOT EXISTS idx_cache_poison_ts
|
|
469
|
-
ON cache_poison_events(ts);
|
|
470
|
-
`);
|
|
39
|
+
db.exec(CORE_DDL);
|
|
40
|
+
db.exec(TURNS_DDL);
|
|
41
|
+
db.exec(GAME_DDL);
|
|
42
|
+
db.exec(PLAN_V2_DDL);
|
|
471
43
|
// Idempotent column migrations. `CREATE TABLE IF NOT EXISTS` is a no-op on a
|
|
472
44
|
// pre-existing table, so new columns added to context_chunks after a store was
|
|
473
45
|
// first created (e.g. original_token_estimate in v0.4.2) must be ALTERed in for
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* _helpers.ts — shared fixtures for the TurnStore compliance suite.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from contract-compliance.test.ts so the suite stays under the
|
|
5
|
+
* 500-line hard limit. Backend test files (sqlite-store.test.ts,
|
|
6
|
+
* memory-store.test.ts) import runComplianceSuite from the parent shell;
|
|
7
|
+
* the sub-suite files import these helpers.
|
|
8
|
+
*/
|
|
9
|
+
import type { TurnEntry, TurnRecallEntry, TurnStore } from "../types.js";
|
|
10
|
+
|
|
11
|
+
/** Factory function — backend test files provide the concrete constructor. */
|
|
12
|
+
export type StoreFactory = (options: import("../types.js").TurnStoreOptions) => TurnStore;
|
|
13
|
+
|
|
14
|
+
/** Helper: create a valid TurnEntry. */
|
|
15
|
+
export function makeTurn(overrides: Partial<TurnEntry> = {}): TurnEntry {
|
|
16
|
+
return {
|
|
17
|
+
conversationId: "conv_test1234",
|
|
18
|
+
sessionId: "sess_abc",
|
|
19
|
+
turnIndex: 0,
|
|
20
|
+
role: "assistant",
|
|
21
|
+
endedAt: Date.now(),
|
|
22
|
+
...overrides,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Helper: create a valid TurnRecallEntry. */
|
|
27
|
+
export function makeRecall(
|
|
28
|
+
turnId: string,
|
|
29
|
+
overrides: Partial<TurnRecallEntry> = {},
|
|
30
|
+
): TurnRecallEntry {
|
|
31
|
+
return {
|
|
32
|
+
turnId,
|
|
33
|
+
checkpointId: "ckpt_001",
|
|
34
|
+
score: 0.85,
|
|
35
|
+
source: "checkpoint",
|
|
36
|
+
...overrides,
|
|
37
|
+
};
|
|
38
|
+
}
|