@askdkc/kiokuko 0.2.6 → 0.2.8
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.ja.md +18 -0
- package/README.ko.md +17 -0
- package/README.md +23 -0
- package/README.zh-CN.md +16 -0
- package/dist/akinator/agent-task.d.ts +5 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +98 -28
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +46 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/embeddings.d.ts +26 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +190 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +22 -8
- package/dist/commands/use.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +34 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/context/broker.d.ts +3 -1
- package/dist/context/broker.d.ts.map +1 -1
- package/dist/context/broker.js +11 -7
- package/dist/context/broker.js.map +1 -1
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +5 -3
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/ranking.d.ts +1 -1
- package/dist/context/ranking.d.ts.map +1 -1
- package/dist/context/ranking.js +1 -0
- package/dist/context/ranking.js.map +1 -1
- package/dist/context/scoped-broker.d.ts +4 -3
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +45 -7
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/context/selection-state.d.ts +12 -0
- package/dist/context/selection-state.d.ts.map +1 -1
- package/dist/context/selection-state.js +117 -7
- package/dist/context/selection-state.js.map +1 -1
- package/dist/db/capabilities.d.ts +8 -0
- package/dist/db/capabilities.d.ts.map +1 -1
- package/dist/db/capabilities.js +14 -0
- package/dist/db/capabilities.js.map +1 -1
- package/dist/db/connection.d.ts +7 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +56 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +3 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/embedding/backend.d.ts +27 -0
- package/dist/embedding/backend.d.ts.map +1 -0
- package/dist/embedding/backend.js +67 -0
- package/dist/embedding/backend.js.map +1 -0
- package/dist/embedding/config.d.ts +10 -0
- package/dist/embedding/config.d.ts.map +1 -0
- package/dist/embedding/config.js +142 -0
- package/dist/embedding/config.js.map +1 -0
- package/dist/embedding/diagnostics.d.ts +34 -0
- package/dist/embedding/diagnostics.d.ts.map +1 -0
- package/dist/embedding/diagnostics.js +263 -0
- package/dist/embedding/diagnostics.js.map +1 -0
- package/dist/embedding/document.d.ts +20 -0
- package/dist/embedding/document.d.ts.map +1 -0
- package/dist/embedding/document.js +122 -0
- package/dist/embedding/document.js.map +1 -0
- package/dist/embedding/javascript-backend.d.ts +11 -0
- package/dist/embedding/javascript-backend.d.ts.map +1 -0
- package/dist/embedding/javascript-backend.js +164 -0
- package/dist/embedding/javascript-backend.js.map +1 -0
- package/dist/embedding/jobs.d.ts +67 -0
- package/dist/embedding/jobs.d.ts.map +1 -0
- package/dist/embedding/jobs.js +259 -0
- package/dist/embedding/jobs.js.map +1 -0
- package/dist/embedding/local-model-loader.d.ts +24 -0
- package/dist/embedding/local-model-loader.d.ts.map +1 -0
- package/dist/embedding/local-model-loader.js +64 -0
- package/dist/embedding/local-model-loader.js.map +1 -0
- package/dist/embedding/local-transformers-provider.d.ts +17 -0
- package/dist/embedding/local-transformers-provider.d.ts.map +1 -0
- package/dist/embedding/local-transformers-provider.js +54 -0
- package/dist/embedding/local-transformers-provider.js.map +1 -0
- package/dist/embedding/model-download.d.ts +32 -0
- package/dist/embedding/model-download.d.ts.map +1 -0
- package/dist/embedding/model-download.js +41 -0
- package/dist/embedding/model-download.js.map +1 -0
- package/dist/embedding/model-installation.d.ts +17 -0
- package/dist/embedding/model-installation.d.ts.map +1 -0
- package/dist/embedding/model-installation.js +71 -0
- package/dist/embedding/model-installation.js.map +1 -0
- package/dist/embedding/model-manifest.d.ts +18 -0
- package/dist/embedding/model-manifest.d.ts.map +1 -0
- package/dist/embedding/model-manifest.js +86 -0
- package/dist/embedding/model-manifest.js.map +1 -0
- package/dist/embedding/openai-compatible-provider.d.ts +24 -0
- package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
- package/dist/embedding/openai-compatible-provider.js +330 -0
- package/dist/embedding/openai-compatible-provider.js.map +1 -0
- package/dist/embedding/presets/local-small.d.ts +8 -0
- package/dist/embedding/presets/local-small.d.ts.map +1 -0
- package/dist/embedding/presets/local-small.js +67 -0
- package/dist/embedding/presets/local-small.js.map +1 -0
- package/dist/embedding/presets/manifest.d.ts +27 -0
- package/dist/embedding/presets/manifest.d.ts.map +1 -0
- package/dist/embedding/presets/manifest.js +5 -0
- package/dist/embedding/presets/manifest.js.map +1 -0
- package/dist/embedding/profile.d.ts +10 -0
- package/dist/embedding/profile.d.ts.map +1 -0
- package/dist/embedding/profile.js +67 -0
- package/dist/embedding/profile.js.map +1 -0
- package/dist/embedding/provider.d.ts +13 -0
- package/dist/embedding/provider.d.ts.map +1 -0
- package/dist/embedding/provider.js +17 -0
- package/dist/embedding/provider.js.map +1 -0
- package/dist/embedding/query-cache.d.ts +45 -0
- package/dist/embedding/query-cache.d.ts.map +1 -0
- package/dist/embedding/query-cache.js +181 -0
- package/dist/embedding/query-cache.js.map +1 -0
- package/dist/embedding/runtime.d.ts +14 -0
- package/dist/embedding/runtime.d.ts.map +1 -0
- package/dist/embedding/runtime.js +407 -0
- package/dist/embedding/runtime.js.map +1 -0
- package/dist/embedding/settings.d.ts +6 -0
- package/dist/embedding/settings.d.ts.map +1 -0
- package/dist/embedding/settings.js +69 -0
- package/dist/embedding/settings.js.map +1 -0
- package/dist/embedding/setup-lock.d.ts +7 -0
- package/dist/embedding/setup-lock.d.ts.map +1 -0
- package/dist/embedding/setup-lock.js +35 -0
- package/dist/embedding/setup-lock.js.map +1 -0
- package/dist/embedding/setup-service.d.ts +53 -0
- package/dist/embedding/setup-service.d.ts.map +1 -0
- package/dist/embedding/setup-service.js +184 -0
- package/dist/embedding/setup-service.js.map +1 -0
- package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
- package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-backend.js +106 -0
- package/dist/embedding/sqlite-vec-backend.js.map +1 -0
- package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
- package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-loader.js +51 -0
- package/dist/embedding/sqlite-vec-loader.js.map +1 -0
- package/dist/embedding/store.d.ts +66 -0
- package/dist/embedding/store.d.ts.map +1 -0
- package/dist/embedding/store.js +490 -0
- package/dist/embedding/store.js.map +1 -0
- package/dist/embedding/types.d.ts +126 -0
- package/dist/embedding/types.d.ts.map +1 -0
- package/dist/embedding/types.js +2 -0
- package/dist/embedding/types.js.map +1 -0
- package/dist/embedding/vector.d.ts +9 -0
- package/dist/embedding/vector.d.ts.map +1 -0
- package/dist/embedding/vector.js +90 -0
- package/dist/embedding/vector.js.map +1 -0
- package/dist/embedding/worker.d.ts +23 -0
- package/dist/embedding/worker.d.ts.map +1 -0
- package/dist/embedding/worker.js +84 -0
- package/dist/embedding/worker.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +2 -2
- package/dist/ledger/checkpoint-contract.d.ts +2 -2
- package/dist/mcp/bounded-stdio-transport.d.ts +3 -0
- package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -1
- package/dist/mcp/bounded-stdio-transport.js +15 -3
- package/dist/mcp/bounded-stdio-transport.js.map +1 -1
- package/dist/mcp/request-deadline.d.ts +51 -0
- package/dist/mcp/request-deadline.d.ts.map +1 -0
- package/dist/mcp/request-deadline.js +155 -0
- package/dist/mcp/request-deadline.js.map +1 -0
- package/dist/mcp/runtime-owner.d.ts +27 -0
- package/dist/mcp/runtime-owner.d.ts.map +1 -0
- package/dist/mcp/runtime-owner.js +129 -0
- package/dist/mcp/runtime-owner.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +83 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/checkpoint-contract.d.ts +3 -3
- package/dist/memory/entries.d.ts.map +1 -1
- package/dist/memory/entries.js +13 -0
- package/dist/memory/entries.js.map +1 -1
- package/dist/memory/federated-retrieval.d.ts +3 -2
- package/dist/memory/federated-retrieval.d.ts.map +1 -1
- package/dist/memory/federated-retrieval.js +112 -31
- package/dist/memory/federated-retrieval.js.map +1 -1
- package/dist/memory/hybrid-retrieval.d.ts +9 -2
- package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/memory/hybrid-retrieval.js +60 -13
- package/dist/memory/hybrid-retrieval.js.map +1 -1
- package/dist/memory/retrieval.d.ts +4 -3
- package/dist/memory/retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval.js +6 -6
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/scoped-memory.d.ts +3 -2
- package/dist/memory/scoped-memory.d.ts.map +1 -1
- package/dist/memory/scoped-memory.js +7 -3
- package/dist/memory/scoped-memory.js.map +1 -1
- package/dist/server/agent-application.js +1 -1
- package/dist/server/agent-application.js.map +1 -1
- package/dist/server/http.d.ts +17 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +79 -13
- package/dist/server/http.js.map +1 -1
- package/dist/skills/discovery-service.d.ts.map +1 -1
- package/dist/skills/discovery-service.js +10 -8
- package/dist/skills/discovery-service.js.map +1 -1
- package/dist/skills/find.d.ts +1 -0
- package/dist/skills/find.d.ts.map +1 -1
- package/dist/skills/find.js +1 -0
- package/dist/skills/find.js.map +1 -1
- package/dist/skills/materialization-authority.d.ts +1 -1
- package/dist/skills/materialization-authority.d.ts.map +1 -1
- package/dist/skills/materialization-authority.js +2 -2
- package/dist/skills/materialization-authority.js.map +1 -1
- package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-compat.js +4 -2
- package/dist/skills/providers/skills-sh-compat.js.map +1 -1
- package/dist/skills/providers/skills-sh-v1.d.ts +2 -2
- package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-v1.js +22 -4
- package/dist/skills/providers/skills-sh-v1.js.map +1 -1
- package/dist/skills/source/github-fetcher.d.ts.map +1 -1
- package/dist/skills/source/github-fetcher.js +8 -4
- package/dist/skills/source/github-fetcher.js.map +1 -1
- package/dist/skills/types.d.ts +3 -2
- package/dist/skills/types.d.ts.map +1 -1
- package/docs/agent-file.md +72 -0
- package/docs/agent-gateway.md +104 -0
- package/docs/architecture.md +12 -0
- package/docs/cli-contract.md +13 -0
- package/docs/client-compatibility.md +298 -0
- package/docs/database.md +11 -0
- package/docs/execution-ledger.md +89 -0
- package/docs/release-notes-0.1.18.md +103 -0
- package/docs/retrieval-evaluation.md +10 -0
- package/docs/security.md +11 -0
- package/docs/sqlite-driver-adr.md +8 -0
- package/migrations/021_semantic_embeddings.sql +122 -0
- package/migrations/022_embedding_setup_v2.sql +236 -0
- package/migrations/down/021_semantic_embeddings.sql +17 -0
- package/migrations/down/022_embedding_setup_v2.sql +133 -0
- package/package.json +10 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
CREATE TABLE embedding_profiles (
|
|
2
|
+
profile_id TEXT PRIMARY KEY
|
|
3
|
+
CHECK (length(profile_id) = 64 AND profile_id NOT GLOB '*[^0-9a-f]*'),
|
|
4
|
+
provider_kind TEXT NOT NULL
|
|
5
|
+
CHECK (provider_kind IN ('openai-compatible')),
|
|
6
|
+
endpoint_fingerprint TEXT NOT NULL
|
|
7
|
+
CHECK (length(endpoint_fingerprint) = 64
|
|
8
|
+
AND endpoint_fingerprint NOT GLOB '*[^0-9a-f]*'),
|
|
9
|
+
model TEXT NOT NULL,
|
|
10
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
11
|
+
distance_metric TEXT NOT NULL CHECK (distance_metric = 'cosine'),
|
|
12
|
+
distance_ceiling REAL NOT NULL
|
|
13
|
+
CHECK (distance_ceiling > 0.0 AND distance_ceiling < 2.0),
|
|
14
|
+
document_template_version INTEGER NOT NULL
|
|
15
|
+
CHECK (document_template_version > 0),
|
|
16
|
+
query_template_version INTEGER NOT NULL
|
|
17
|
+
CHECK (query_template_version > 0),
|
|
18
|
+
created_at TEXT NOT NULL
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE TRIGGER embedding_profiles_immutable_update
|
|
22
|
+
BEFORE UPDATE ON embedding_profiles
|
|
23
|
+
BEGIN
|
|
24
|
+
SELECT RAISE(ABORT, 'embedding_profiles are immutable');
|
|
25
|
+
END;
|
|
26
|
+
|
|
27
|
+
CREATE TABLE embedding_runtime (
|
|
28
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
29
|
+
active_profile_id TEXT REFERENCES embedding_profiles(profile_id),
|
|
30
|
+
generation INTEGER NOT NULL CHECK (generation > 0),
|
|
31
|
+
activated_at TEXT
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
INSERT INTO embedding_runtime (
|
|
35
|
+
singleton, active_profile_id, generation, activated_at
|
|
36
|
+
) VALUES (1, NULL, 1, NULL);
|
|
37
|
+
|
|
38
|
+
CREATE TABLE entry_embeddings (
|
|
39
|
+
entry_id TEXT NOT NULL,
|
|
40
|
+
profile_id TEXT NOT NULL
|
|
41
|
+
REFERENCES embedding_profiles(profile_id) ON DELETE CASCADE,
|
|
42
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
43
|
+
content_hash TEXT NOT NULL,
|
|
44
|
+
document_hash TEXT NOT NULL
|
|
45
|
+
CHECK (length(document_hash) = 64
|
|
46
|
+
AND document_hash NOT GLOB '*[^0-9a-f]*'),
|
|
47
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
48
|
+
embedding BLOB NOT NULL,
|
|
49
|
+
vector_hash TEXT NOT NULL
|
|
50
|
+
CHECK (length(vector_hash) = 64
|
|
51
|
+
AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
52
|
+
created_at TEXT NOT NULL,
|
|
53
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
54
|
+
FOREIGN KEY (entry_id, revision)
|
|
55
|
+
REFERENCES entry_revisions(entry_id, revision)
|
|
56
|
+
ON DELETE CASCADE,
|
|
57
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
CREATE INDEX idx_entry_embeddings_profile_revision
|
|
61
|
+
ON entry_embeddings(profile_id, entry_id, revision);
|
|
62
|
+
|
|
63
|
+
CREATE TABLE embedding_jobs (
|
|
64
|
+
entry_id TEXT NOT NULL,
|
|
65
|
+
profile_id TEXT NOT NULL
|
|
66
|
+
REFERENCES embedding_profiles(profile_id) ON DELETE CASCADE,
|
|
67
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
68
|
+
content_hash TEXT NOT NULL,
|
|
69
|
+
state TEXT NOT NULL CHECK (
|
|
70
|
+
state IN ('pending', 'leased', 'failed', 'blocked')
|
|
71
|
+
),
|
|
72
|
+
attempts INTEGER NOT NULL DEFAULT 0 CHECK (attempts >= 0),
|
|
73
|
+
available_at TEXT NOT NULL,
|
|
74
|
+
lease_id TEXT,
|
|
75
|
+
lease_expires_at TEXT,
|
|
76
|
+
error_code TEXT CHECK (
|
|
77
|
+
error_code IS NULL OR error_code IN (
|
|
78
|
+
'timeout',
|
|
79
|
+
'rate_limited',
|
|
80
|
+
'provider_unavailable',
|
|
81
|
+
'invalid_response',
|
|
82
|
+
'dimension_mismatch',
|
|
83
|
+
'secret_blocked',
|
|
84
|
+
'profile_changed',
|
|
85
|
+
'entry_changed'
|
|
86
|
+
)
|
|
87
|
+
),
|
|
88
|
+
created_at TEXT NOT NULL,
|
|
89
|
+
updated_at TEXT NOT NULL,
|
|
90
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
91
|
+
FOREIGN KEY (entry_id, revision)
|
|
92
|
+
REFERENCES entry_revisions(entry_id, revision)
|
|
93
|
+
ON DELETE CASCADE,
|
|
94
|
+
CHECK (
|
|
95
|
+
(state = 'leased' AND lease_id IS NOT NULL AND lease_expires_at IS NOT NULL)
|
|
96
|
+
OR
|
|
97
|
+
(state <> 'leased' AND lease_id IS NULL AND lease_expires_at IS NULL)
|
|
98
|
+
)
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
CREATE INDEX idx_embedding_jobs_claim
|
|
102
|
+
ON embedding_jobs(profile_id, state, available_at, entry_id);
|
|
103
|
+
|
|
104
|
+
CREATE TABLE query_embeddings (
|
|
105
|
+
profile_id TEXT NOT NULL
|
|
106
|
+
REFERENCES embedding_profiles(profile_id) ON DELETE CASCADE,
|
|
107
|
+
query_hash TEXT NOT NULL
|
|
108
|
+
CHECK (length(query_hash) = 64
|
|
109
|
+
AND query_hash NOT GLOB '*[^0-9a-f]*'),
|
|
110
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
111
|
+
embedding BLOB NOT NULL,
|
|
112
|
+
vector_hash TEXT NOT NULL
|
|
113
|
+
CHECK (length(vector_hash) = 64
|
|
114
|
+
AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
115
|
+
created_at TEXT NOT NULL,
|
|
116
|
+
last_used_at TEXT NOT NULL,
|
|
117
|
+
PRIMARY KEY (profile_id, query_hash),
|
|
118
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
CREATE INDEX idx_query_embeddings_lru
|
|
122
|
+
ON query_embeddings(profile_id, last_used_at, query_hash);
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
-- Persist local embedding setup state while retaining the immutable v1
|
|
2
|
+
-- semantic projections. This migration performs no model or network I/O.
|
|
3
|
+
|
|
4
|
+
CREATE TABLE embedding_profiles_v2 (
|
|
5
|
+
profile_id TEXT PRIMARY KEY
|
|
6
|
+
CHECK (length(profile_id) = 64 AND profile_id NOT GLOB '*[^0-9a-f]*'),
|
|
7
|
+
schema_version INTEGER NOT NULL DEFAULT 1 CHECK (schema_version IN (1, 2)),
|
|
8
|
+
provider_kind TEXT NOT NULL
|
|
9
|
+
CHECK (provider_kind IN ('openai-compatible', 'local-transformers')),
|
|
10
|
+
endpoint_fingerprint TEXT
|
|
11
|
+
CHECK (endpoint_fingerprint IS NULL OR (length(endpoint_fingerprint) = 64 AND endpoint_fingerprint NOT GLOB '*[^0-9a-f]*')),
|
|
12
|
+
model TEXT NOT NULL,
|
|
13
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
14
|
+
distance_metric TEXT NOT NULL CHECK (distance_metric = 'cosine'),
|
|
15
|
+
distance_ceiling REAL NOT NULL CHECK (distance_ceiling > 0.0 AND distance_ceiling < 2.0),
|
|
16
|
+
document_template_version INTEGER NOT NULL CHECK (document_template_version > 0),
|
|
17
|
+
query_template_version INTEGER NOT NULL CHECK (query_template_version > 0),
|
|
18
|
+
preset_id TEXT,
|
|
19
|
+
source_model TEXT,
|
|
20
|
+
artifact_repository TEXT,
|
|
21
|
+
model_revision TEXT,
|
|
22
|
+
artifact_manifest_hash TEXT
|
|
23
|
+
CHECK (artifact_manifest_hash IS NULL OR (length(artifact_manifest_hash) = 64 AND artifact_manifest_hash NOT GLOB '*[^0-9a-f]*')),
|
|
24
|
+
inference_engine TEXT,
|
|
25
|
+
inference_engine_version TEXT,
|
|
26
|
+
dtype TEXT,
|
|
27
|
+
pooling TEXT,
|
|
28
|
+
normalize INTEGER CHECK (normalize IS NULL OR normalize IN (0, 1)),
|
|
29
|
+
maximum_tokens INTEGER CHECK (maximum_tokens IS NULL OR maximum_tokens > 0),
|
|
30
|
+
input_contract TEXT,
|
|
31
|
+
query_prefix TEXT,
|
|
32
|
+
document_prefix TEXT,
|
|
33
|
+
created_at TEXT NOT NULL,
|
|
34
|
+
CHECK (
|
|
35
|
+
(schema_version = 1 AND provider_kind = 'openai-compatible'
|
|
36
|
+
AND endpoint_fingerprint IS NOT NULL
|
|
37
|
+
AND preset_id IS NULL AND source_model IS NULL AND artifact_repository IS NULL
|
|
38
|
+
AND model_revision IS NULL AND artifact_manifest_hash IS NULL
|
|
39
|
+
AND inference_engine IS NULL AND inference_engine_version IS NULL
|
|
40
|
+
AND dtype IS NULL AND pooling IS NULL AND normalize IS NULL
|
|
41
|
+
AND maximum_tokens IS NULL AND input_contract IS NULL
|
|
42
|
+
AND query_prefix IS NULL AND document_prefix IS NULL)
|
|
43
|
+
OR
|
|
44
|
+
(schema_version = 2 AND provider_kind = 'local-transformers'
|
|
45
|
+
AND endpoint_fingerprint IS NULL
|
|
46
|
+
AND preset_id IS NOT NULL AND source_model IS NOT NULL
|
|
47
|
+
AND artifact_repository IS NOT NULL AND model_revision IS NOT NULL
|
|
48
|
+
AND artifact_manifest_hash IS NOT NULL AND inference_engine IS NOT NULL
|
|
49
|
+
AND inference_engine_version IS NOT NULL AND dtype IS NOT NULL
|
|
50
|
+
AND pooling IS NOT NULL AND normalize IS NOT NULL
|
|
51
|
+
AND maximum_tokens IS NOT NULL AND input_contract IS NOT NULL
|
|
52
|
+
AND query_prefix IS NOT NULL AND document_prefix IS NOT NULL)
|
|
53
|
+
)
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
INSERT INTO embedding_profiles_v2 (
|
|
57
|
+
profile_id, schema_version, provider_kind, endpoint_fingerprint, model,
|
|
58
|
+
dimensions, distance_metric, distance_ceiling, document_template_version,
|
|
59
|
+
query_template_version, created_at
|
|
60
|
+
)
|
|
61
|
+
SELECT profile_id, 1, provider_kind, endpoint_fingerprint, model,
|
|
62
|
+
dimensions, distance_metric, distance_ceiling, document_template_version,
|
|
63
|
+
query_template_version, created_at
|
|
64
|
+
FROM embedding_profiles;
|
|
65
|
+
|
|
66
|
+
CREATE TABLE embedding_runtime_v2 (
|
|
67
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
68
|
+
active_profile_id TEXT REFERENCES embedding_profiles_v2(profile_id),
|
|
69
|
+
generation INTEGER NOT NULL CHECK (generation > 0),
|
|
70
|
+
activated_at TEXT
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
INSERT INTO embedding_runtime_v2 (singleton, active_profile_id, generation, activated_at)
|
|
74
|
+
SELECT singleton, active_profile_id, generation, activated_at
|
|
75
|
+
FROM embedding_runtime;
|
|
76
|
+
|
|
77
|
+
CREATE TABLE entry_embeddings_v2 (
|
|
78
|
+
entry_id TEXT NOT NULL,
|
|
79
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v2(profile_id) ON DELETE CASCADE,
|
|
80
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
81
|
+
content_hash TEXT NOT NULL,
|
|
82
|
+
document_hash TEXT NOT NULL CHECK (length(document_hash) = 64 AND document_hash NOT GLOB '*[^0-9a-f]*'),
|
|
83
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
84
|
+
embedding BLOB NOT NULL,
|
|
85
|
+
vector_hash TEXT NOT NULL CHECK (length(vector_hash) = 64 AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
86
|
+
created_at TEXT NOT NULL,
|
|
87
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
88
|
+
FOREIGN KEY (entry_id, revision) REFERENCES entry_revisions(entry_id, revision) ON DELETE CASCADE,
|
|
89
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
INSERT INTO entry_embeddings_v2 (
|
|
93
|
+
entry_id, profile_id, revision, content_hash, document_hash, dimensions,
|
|
94
|
+
embedding, vector_hash, created_at
|
|
95
|
+
)
|
|
96
|
+
SELECT entry_id, profile_id, revision, content_hash, document_hash, dimensions,
|
|
97
|
+
embedding, vector_hash, created_at
|
|
98
|
+
FROM entry_embeddings;
|
|
99
|
+
|
|
100
|
+
CREATE TABLE embedding_jobs_v2 (
|
|
101
|
+
entry_id TEXT NOT NULL,
|
|
102
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v2(profile_id) ON DELETE CASCADE,
|
|
103
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
104
|
+
content_hash TEXT NOT NULL,
|
|
105
|
+
state TEXT NOT NULL CHECK (state IN ('pending', 'leased', 'failed', 'blocked')),
|
|
106
|
+
attempts INTEGER NOT NULL DEFAULT 0 CHECK (attempts >= 0),
|
|
107
|
+
available_at TEXT NOT NULL,
|
|
108
|
+
lease_id TEXT,
|
|
109
|
+
lease_expires_at TEXT,
|
|
110
|
+
error_code TEXT CHECK (error_code IS NULL OR error_code IN (
|
|
111
|
+
'timeout', 'rate_limited', 'provider_unavailable', 'invalid_response',
|
|
112
|
+
'dimension_mismatch', 'secret_blocked', 'profile_changed', 'entry_changed'
|
|
113
|
+
)),
|
|
114
|
+
created_at TEXT NOT NULL,
|
|
115
|
+
updated_at TEXT NOT NULL,
|
|
116
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
117
|
+
FOREIGN KEY (entry_id, revision) REFERENCES entry_revisions(entry_id, revision) ON DELETE CASCADE,
|
|
118
|
+
CHECK (
|
|
119
|
+
(state = 'leased' AND lease_id IS NOT NULL AND lease_expires_at IS NOT NULL)
|
|
120
|
+
OR (state <> 'leased' AND lease_id IS NULL AND lease_expires_at IS NULL)
|
|
121
|
+
)
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
INSERT INTO embedding_jobs_v2 (
|
|
125
|
+
entry_id, profile_id, revision, content_hash, state, attempts,
|
|
126
|
+
available_at, lease_id, lease_expires_at, error_code, created_at, updated_at
|
|
127
|
+
)
|
|
128
|
+
SELECT entry_id, profile_id, revision, content_hash, state, attempts,
|
|
129
|
+
available_at, lease_id, lease_expires_at, error_code, created_at, updated_at
|
|
130
|
+
FROM embedding_jobs;
|
|
131
|
+
|
|
132
|
+
CREATE TABLE query_embeddings_v2 (
|
|
133
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v2(profile_id) ON DELETE CASCADE,
|
|
134
|
+
query_hash TEXT NOT NULL CHECK (length(query_hash) = 64 AND query_hash NOT GLOB '*[^0-9a-f]*'),
|
|
135
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
136
|
+
embedding BLOB NOT NULL,
|
|
137
|
+
vector_hash TEXT NOT NULL CHECK (length(vector_hash) = 64 AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
138
|
+
created_at TEXT NOT NULL,
|
|
139
|
+
last_used_at TEXT NOT NULL,
|
|
140
|
+
PRIMARY KEY (profile_id, query_hash),
|
|
141
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
INSERT INTO query_embeddings_v2 (
|
|
145
|
+
profile_id, query_hash, dimensions, embedding, vector_hash, created_at, last_used_at
|
|
146
|
+
)
|
|
147
|
+
SELECT profile_id, query_hash, dimensions, embedding, vector_hash, created_at, last_used_at
|
|
148
|
+
FROM query_embeddings;
|
|
149
|
+
|
|
150
|
+
DROP INDEX idx_query_embeddings_lru;
|
|
151
|
+
DROP TABLE query_embeddings;
|
|
152
|
+
DROP INDEX idx_embedding_jobs_claim;
|
|
153
|
+
DROP TABLE embedding_jobs;
|
|
154
|
+
DROP INDEX idx_entry_embeddings_profile_revision;
|
|
155
|
+
DROP TABLE entry_embeddings;
|
|
156
|
+
DROP TABLE embedding_runtime;
|
|
157
|
+
DROP TRIGGER embedding_profiles_immutable_update;
|
|
158
|
+
DROP TABLE embedding_profiles;
|
|
159
|
+
|
|
160
|
+
ALTER TABLE embedding_profiles_v2 RENAME TO embedding_profiles;
|
|
161
|
+
ALTER TABLE embedding_runtime_v2 RENAME TO embedding_runtime;
|
|
162
|
+
ALTER TABLE entry_embeddings_v2 RENAME TO entry_embeddings;
|
|
163
|
+
ALTER TABLE embedding_jobs_v2 RENAME TO embedding_jobs;
|
|
164
|
+
ALTER TABLE query_embeddings_v2 RENAME TO query_embeddings;
|
|
165
|
+
|
|
166
|
+
CREATE TRIGGER embedding_profiles_immutable_update
|
|
167
|
+
BEFORE UPDATE ON embedding_profiles
|
|
168
|
+
BEGIN
|
|
169
|
+
SELECT RAISE(ABORT, 'embedding_profiles are immutable');
|
|
170
|
+
END;
|
|
171
|
+
|
|
172
|
+
CREATE INDEX idx_entry_embeddings_profile_revision
|
|
173
|
+
ON entry_embeddings(profile_id, entry_id, revision);
|
|
174
|
+
CREATE INDEX idx_embedding_jobs_claim
|
|
175
|
+
ON embedding_jobs(profile_id, state, available_at, entry_id);
|
|
176
|
+
CREATE INDEX idx_query_embeddings_lru
|
|
177
|
+
ON query_embeddings(profile_id, last_used_at, query_hash);
|
|
178
|
+
|
|
179
|
+
CREATE TABLE embedding_model_installations (
|
|
180
|
+
installation_id TEXT PRIMARY KEY,
|
|
181
|
+
preset_id TEXT NOT NULL,
|
|
182
|
+
repository_id TEXT NOT NULL,
|
|
183
|
+
revision TEXT NOT NULL,
|
|
184
|
+
artifact_manifest_hash TEXT NOT NULL CHECK (length(artifact_manifest_hash) = 64 AND artifact_manifest_hash NOT GLOB '*[^0-9a-f]*'),
|
|
185
|
+
relative_path TEXT NOT NULL,
|
|
186
|
+
state TEXT NOT NULL CHECK (state IN ('staging', 'verified', 'corrupt', 'missing')),
|
|
187
|
+
total_bytes INTEGER NOT NULL CHECK (total_bytes >= 0),
|
|
188
|
+
installed_at TEXT NOT NULL,
|
|
189
|
+
verified_at TEXT,
|
|
190
|
+
last_checked_at TEXT NOT NULL
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
CREATE TABLE embedding_settings (
|
|
194
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
195
|
+
mode TEXT NOT NULL CHECK (mode IN ('off', 'optional', 'required')),
|
|
196
|
+
provider_kind TEXT CHECK (provider_kind IS NULL OR provider_kind IN ('local-transformers', 'openai-compatible', 'legacy-environment')),
|
|
197
|
+
preset_id TEXT,
|
|
198
|
+
model_installation_id TEXT REFERENCES embedding_model_installations(installation_id),
|
|
199
|
+
vector_backend TEXT NOT NULL CHECK (vector_backend IN ('auto', 'javascript', 'sqlite-vec')),
|
|
200
|
+
batch_size INTEGER NOT NULL CHECK (batch_size BETWEEN 1 AND 64),
|
|
201
|
+
timeout_ms INTEGER NOT NULL CHECK (timeout_ms BETWEEN 100 AND 120000),
|
|
202
|
+
legacy_profile_id TEXT REFERENCES embedding_profiles(profile_id),
|
|
203
|
+
setup_state TEXT NOT NULL CHECK (setup_state IN ('disabled', 'requires_setup', 'installing', 'ready', 'degraded')),
|
|
204
|
+
updated_at TEXT NOT NULL
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
INSERT INTO embedding_settings (
|
|
208
|
+
singleton, mode, provider_kind, preset_id, model_installation_id,
|
|
209
|
+
vector_backend, batch_size, timeout_ms, legacy_profile_id, setup_state, updated_at
|
|
210
|
+
)
|
|
211
|
+
SELECT 1,
|
|
212
|
+
'off',
|
|
213
|
+
CASE WHEN r.active_profile_id IS NULL THEN NULL ELSE 'legacy-environment' END,
|
|
214
|
+
NULL,
|
|
215
|
+
NULL,
|
|
216
|
+
'auto',
|
|
217
|
+
16,
|
|
218
|
+
30000,
|
|
219
|
+
r.active_profile_id,
|
|
220
|
+
CASE WHEN r.active_profile_id IS NULL THEN 'disabled' ELSE 'requires_setup' END,
|
|
221
|
+
COALESCE(r.activated_at, '1970-01-01T00:00:00.000Z')
|
|
222
|
+
FROM embedding_runtime AS r;
|
|
223
|
+
|
|
224
|
+
CREATE TABLE embedding_setup_runs (
|
|
225
|
+
setup_id TEXT PRIMARY KEY,
|
|
226
|
+
preset_id TEXT NOT NULL,
|
|
227
|
+
phase TEXT NOT NULL CHECK (phase IN ('planned', 'downloading', 'verifying', 'probing', 'activating', 'embedding', 'completed', 'failed')),
|
|
228
|
+
model_installation_id TEXT REFERENCES embedding_model_installations(installation_id),
|
|
229
|
+
active_profile_id TEXT REFERENCES embedding_profiles(profile_id),
|
|
230
|
+
initial_entry_count INTEGER NOT NULL CHECK (initial_entry_count >= 0),
|
|
231
|
+
processed_entry_count INTEGER NOT NULL CHECK (processed_entry_count >= 0),
|
|
232
|
+
failure_code TEXT,
|
|
233
|
+
started_at TEXT NOT NULL,
|
|
234
|
+
updated_at TEXT NOT NULL,
|
|
235
|
+
completed_at TEXT
|
|
236
|
+
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- Manual rollback for migration 021. Stop every Kiokuko process and make a
|
|
2
|
+
-- full SQLite backup before running this script.
|
|
3
|
+
BEGIN IMMEDIATE;
|
|
4
|
+
|
|
5
|
+
DROP INDEX idx_query_embeddings_lru;
|
|
6
|
+
DROP TABLE query_embeddings;
|
|
7
|
+
DROP INDEX idx_embedding_jobs_claim;
|
|
8
|
+
DROP TABLE embedding_jobs;
|
|
9
|
+
DROP INDEX idx_entry_embeddings_profile_revision;
|
|
10
|
+
DROP TABLE entry_embeddings;
|
|
11
|
+
DROP TABLE embedding_runtime;
|
|
12
|
+
DROP TRIGGER embedding_profiles_immutable_update;
|
|
13
|
+
DROP TABLE embedding_profiles;
|
|
14
|
+
|
|
15
|
+
DELETE FROM schema_migrations
|
|
16
|
+
WHERE version = 21 AND name = '021_semantic_embeddings.sql';
|
|
17
|
+
COMMIT;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
-- Manual rollback for migration 022. Stop every Kiokuko process and make a
|
|
2
|
+
-- full SQLite backup before running this script. Local v2 profiles are not
|
|
3
|
+
-- silently converted to the v1 representation.
|
|
4
|
+
|
|
5
|
+
BEGIN IMMEDIATE;
|
|
6
|
+
|
|
7
|
+
CREATE TEMP TRIGGER embedding_setup_v2_rollback_guard
|
|
8
|
+
BEFORE DELETE ON schema_migrations
|
|
9
|
+
WHEN EXISTS (SELECT 1 FROM embedding_profiles WHERE schema_version = 2)
|
|
10
|
+
BEGIN
|
|
11
|
+
SELECT RAISE(ABORT, 'migration 022 rollback requires removing local v2 profiles explicitly');
|
|
12
|
+
END;
|
|
13
|
+
|
|
14
|
+
CREATE TABLE embedding_profiles_v1 (
|
|
15
|
+
profile_id TEXT PRIMARY KEY CHECK (length(profile_id) = 64 AND profile_id NOT GLOB '*[^0-9a-f]*'),
|
|
16
|
+
provider_kind TEXT NOT NULL CHECK (provider_kind IN ('openai-compatible')),
|
|
17
|
+
endpoint_fingerprint TEXT NOT NULL CHECK (length(endpoint_fingerprint) = 64 AND endpoint_fingerprint NOT GLOB '*[^0-9a-f]*'),
|
|
18
|
+
model TEXT NOT NULL,
|
|
19
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
20
|
+
distance_metric TEXT NOT NULL CHECK (distance_metric = 'cosine'),
|
|
21
|
+
distance_ceiling REAL NOT NULL CHECK (distance_ceiling > 0.0 AND distance_ceiling < 2.0),
|
|
22
|
+
document_template_version INTEGER NOT NULL CHECK (document_template_version > 0),
|
|
23
|
+
query_template_version INTEGER NOT NULL CHECK (query_template_version > 0),
|
|
24
|
+
created_at TEXT NOT NULL
|
|
25
|
+
);
|
|
26
|
+
INSERT INTO embedding_profiles_v1 (
|
|
27
|
+
profile_id, provider_kind, endpoint_fingerprint, model, dimensions,
|
|
28
|
+
distance_metric, distance_ceiling, document_template_version,
|
|
29
|
+
query_template_version, created_at
|
|
30
|
+
)
|
|
31
|
+
SELECT profile_id, provider_kind, endpoint_fingerprint, model, dimensions,
|
|
32
|
+
distance_metric, distance_ceiling, document_template_version,
|
|
33
|
+
query_template_version, created_at
|
|
34
|
+
FROM embedding_profiles;
|
|
35
|
+
|
|
36
|
+
CREATE TABLE embedding_runtime_v1 (
|
|
37
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
38
|
+
active_profile_id TEXT REFERENCES embedding_profiles_v1(profile_id),
|
|
39
|
+
generation INTEGER NOT NULL CHECK (generation > 0),
|
|
40
|
+
activated_at TEXT
|
|
41
|
+
);
|
|
42
|
+
INSERT INTO embedding_runtime_v1 (singleton, active_profile_id, generation, activated_at)
|
|
43
|
+
SELECT singleton, active_profile_id, generation, activated_at FROM embedding_runtime;
|
|
44
|
+
|
|
45
|
+
CREATE TABLE entry_embeddings_v1 (
|
|
46
|
+
entry_id TEXT NOT NULL,
|
|
47
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v1(profile_id) ON DELETE CASCADE,
|
|
48
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
49
|
+
content_hash TEXT NOT NULL,
|
|
50
|
+
document_hash TEXT NOT NULL CHECK (length(document_hash) = 64 AND document_hash NOT GLOB '*[^0-9a-f]*'),
|
|
51
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
52
|
+
embedding BLOB NOT NULL,
|
|
53
|
+
vector_hash TEXT NOT NULL CHECK (length(vector_hash) = 64 AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
54
|
+
created_at TEXT NOT NULL,
|
|
55
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
56
|
+
FOREIGN KEY (entry_id, revision) REFERENCES entry_revisions(entry_id, revision) ON DELETE CASCADE,
|
|
57
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
58
|
+
);
|
|
59
|
+
INSERT INTO entry_embeddings_v1 SELECT * FROM entry_embeddings;
|
|
60
|
+
|
|
61
|
+
CREATE TABLE embedding_jobs_v1 (
|
|
62
|
+
entry_id TEXT NOT NULL,
|
|
63
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v1(profile_id) ON DELETE CASCADE,
|
|
64
|
+
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
65
|
+
content_hash TEXT NOT NULL,
|
|
66
|
+
state TEXT NOT NULL CHECK (state IN ('pending', 'leased', 'failed', 'blocked')),
|
|
67
|
+
attempts INTEGER NOT NULL DEFAULT 0 CHECK (attempts >= 0),
|
|
68
|
+
available_at TEXT NOT NULL,
|
|
69
|
+
lease_id TEXT,
|
|
70
|
+
lease_expires_at TEXT,
|
|
71
|
+
error_code TEXT CHECK (error_code IS NULL OR error_code IN (
|
|
72
|
+
'timeout', 'rate_limited', 'provider_unavailable', 'invalid_response',
|
|
73
|
+
'dimension_mismatch', 'secret_blocked', 'profile_changed', 'entry_changed'
|
|
74
|
+
)),
|
|
75
|
+
created_at TEXT NOT NULL,
|
|
76
|
+
updated_at TEXT NOT NULL,
|
|
77
|
+
PRIMARY KEY (entry_id, profile_id),
|
|
78
|
+
FOREIGN KEY (entry_id, revision) REFERENCES entry_revisions(entry_id, revision) ON DELETE CASCADE,
|
|
79
|
+
CHECK (
|
|
80
|
+
(state = 'leased' AND lease_id IS NOT NULL AND lease_expires_at IS NOT NULL)
|
|
81
|
+
OR (state <> 'leased' AND lease_id IS NULL AND lease_expires_at IS NULL)
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
INSERT INTO embedding_jobs_v1 SELECT * FROM embedding_jobs;
|
|
85
|
+
|
|
86
|
+
CREATE TABLE query_embeddings_v1 (
|
|
87
|
+
profile_id TEXT NOT NULL REFERENCES embedding_profiles_v1(profile_id) ON DELETE CASCADE,
|
|
88
|
+
query_hash TEXT NOT NULL CHECK (length(query_hash) = 64 AND query_hash NOT GLOB '*[^0-9a-f]*'),
|
|
89
|
+
dimensions INTEGER NOT NULL CHECK (dimensions BETWEEN 2 AND 8192),
|
|
90
|
+
embedding BLOB NOT NULL,
|
|
91
|
+
vector_hash TEXT NOT NULL CHECK (length(vector_hash) = 64 AND vector_hash NOT GLOB '*[^0-9a-f]*'),
|
|
92
|
+
created_at TEXT NOT NULL,
|
|
93
|
+
last_used_at TEXT NOT NULL,
|
|
94
|
+
PRIMARY KEY (profile_id, query_hash),
|
|
95
|
+
CHECK (length(embedding) = dimensions * 4)
|
|
96
|
+
);
|
|
97
|
+
INSERT INTO query_embeddings_v1 SELECT * FROM query_embeddings;
|
|
98
|
+
|
|
99
|
+
DELETE FROM schema_migrations WHERE version = 22 AND name = '022_embedding_setup_v2.sql';
|
|
100
|
+
DROP TRIGGER embedding_setup_v2_rollback_guard;
|
|
101
|
+
|
|
102
|
+
DROP TABLE embedding_setup_runs;
|
|
103
|
+
DROP TABLE embedding_settings;
|
|
104
|
+
DROP TABLE embedding_model_installations;
|
|
105
|
+
DROP INDEX idx_query_embeddings_lru;
|
|
106
|
+
DROP TABLE query_embeddings;
|
|
107
|
+
DROP INDEX idx_embedding_jobs_claim;
|
|
108
|
+
DROP TABLE embedding_jobs;
|
|
109
|
+
DROP INDEX idx_entry_embeddings_profile_revision;
|
|
110
|
+
DROP TABLE entry_embeddings;
|
|
111
|
+
DROP TABLE embedding_runtime;
|
|
112
|
+
DROP TRIGGER embedding_profiles_immutable_update;
|
|
113
|
+
DROP TABLE embedding_profiles;
|
|
114
|
+
|
|
115
|
+
ALTER TABLE embedding_profiles_v1 RENAME TO embedding_profiles;
|
|
116
|
+
ALTER TABLE embedding_runtime_v1 RENAME TO embedding_runtime;
|
|
117
|
+
ALTER TABLE entry_embeddings_v1 RENAME TO entry_embeddings;
|
|
118
|
+
ALTER TABLE embedding_jobs_v1 RENAME TO embedding_jobs;
|
|
119
|
+
ALTER TABLE query_embeddings_v1 RENAME TO query_embeddings;
|
|
120
|
+
|
|
121
|
+
CREATE TRIGGER embedding_profiles_immutable_update
|
|
122
|
+
BEFORE UPDATE ON embedding_profiles
|
|
123
|
+
BEGIN
|
|
124
|
+
SELECT RAISE(ABORT, 'embedding_profiles are immutable');
|
|
125
|
+
END;
|
|
126
|
+
CREATE INDEX idx_entry_embeddings_profile_revision
|
|
127
|
+
ON entry_embeddings(profile_id, entry_id, revision);
|
|
128
|
+
CREATE INDEX idx_embedding_jobs_claim
|
|
129
|
+
ON embedding_jobs(profile_id, state, available_at, entry_id);
|
|
130
|
+
CREATE INDEX idx_query_embeddings_lru
|
|
131
|
+
ON query_embeddings(profile_id, last_used_at, query_hash);
|
|
132
|
+
|
|
133
|
+
COMMIT;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askdkc/kiokuko",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Model-agnostic external memory for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"dist/",
|
|
17
17
|
"migrations/",
|
|
18
18
|
"skills/",
|
|
19
|
+
"docs/",
|
|
19
20
|
"templates/",
|
|
20
21
|
"README.md",
|
|
21
22
|
"README.ja.md",
|
|
@@ -31,6 +32,9 @@
|
|
|
31
32
|
"test": "node scripts/run-tests.mjs tests",
|
|
32
33
|
"test:unit": "node scripts/run-tests.mjs tests/unit",
|
|
33
34
|
"test:integration": "node scripts/run-tests.mjs tests/integration",
|
|
35
|
+
"test:sqlite-vec": "node --import tsx tests/ci/sqlite-vec-package-smoke.ts",
|
|
36
|
+
"test:evaluation": "npm run build && node scripts/run-retrieval-evaluation.mjs",
|
|
37
|
+
"test:benchmark": "npm run build && node scripts/run-retrieval-benchmark.mjs",
|
|
34
38
|
"test:e2e:codex": "npm run build && node scripts/run-enno-agent-e2e.mjs codex",
|
|
35
39
|
"test:e2e:opencode": "npm run build && node scripts/run-enno-agent-e2e.mjs opencode",
|
|
36
40
|
"test:e2e:claude": "npm run build && node scripts/run-enno-agent-e2e.mjs claude",
|
|
@@ -49,6 +53,11 @@
|
|
|
49
53
|
"yaml": "^2.9.0",
|
|
50
54
|
"zod": "^4.4.3"
|
|
51
55
|
},
|
|
56
|
+
"optionalDependencies": {
|
|
57
|
+
"@huggingface/hub": "2.16.1",
|
|
58
|
+
"@huggingface/transformers": "4.2.0",
|
|
59
|
+
"sqlite-vec": "0.1.9"
|
|
60
|
+
},
|
|
52
61
|
"devDependencies": {
|
|
53
62
|
"@types/node": "^24.0.0",
|
|
54
63
|
"@types/semver": "^7.8.0",
|