@askdkc/kiokuko 0.2.6 → 0.2.7

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.
Files changed (167) hide show
  1. package/README.ja.md +31 -0
  2. package/README.ko.md +31 -0
  3. package/README.md +32 -0
  4. package/README.zh-CN.md +29 -0
  5. package/dist/akinator/agent-task.d.ts +3 -0
  6. package/dist/akinator/agent-task.d.ts.map +1 -1
  7. package/dist/akinator/agent-task.js +38 -4
  8. package/dist/akinator/agent-task.js.map +1 -1
  9. package/dist/cli.d.ts +4 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +89 -8
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +4 -0
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +43 -1
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/embeddings.d.ts +19 -0
  18. package/dist/commands/embeddings.d.ts.map +1 -0
  19. package/dist/commands/embeddings.js +159 -0
  20. package/dist/commands/embeddings.js.map +1 -0
  21. package/dist/commands/import.d.ts.map +1 -1
  22. package/dist/commands/import.js +7 -0
  23. package/dist/commands/import.js.map +1 -1
  24. package/dist/commands/use.d.ts.map +1 -1
  25. package/dist/commands/use.js +22 -8
  26. package/dist/commands/use.js.map +1 -1
  27. package/dist/context/broker.d.ts +3 -1
  28. package/dist/context/broker.d.ts.map +1 -1
  29. package/dist/context/broker.js +11 -7
  30. package/dist/context/broker.js.map +1 -1
  31. package/dist/context/delivery.d.ts.map +1 -1
  32. package/dist/context/delivery.js +5 -3
  33. package/dist/context/delivery.js.map +1 -1
  34. package/dist/context/ranking.d.ts +1 -1
  35. package/dist/context/ranking.d.ts.map +1 -1
  36. package/dist/context/ranking.js +1 -0
  37. package/dist/context/ranking.js.map +1 -1
  38. package/dist/context/scoped-broker.d.ts +4 -3
  39. package/dist/context/scoped-broker.d.ts.map +1 -1
  40. package/dist/context/scoped-broker.js +45 -7
  41. package/dist/context/scoped-broker.js.map +1 -1
  42. package/dist/context/selection-state.d.ts +12 -0
  43. package/dist/context/selection-state.d.ts.map +1 -1
  44. package/dist/context/selection-state.js +117 -7
  45. package/dist/context/selection-state.js.map +1 -1
  46. package/dist/db/capabilities.d.ts +8 -0
  47. package/dist/db/capabilities.d.ts.map +1 -1
  48. package/dist/db/capabilities.js +14 -0
  49. package/dist/db/capabilities.js.map +1 -1
  50. package/dist/db/connection.d.ts +7 -0
  51. package/dist/db/connection.d.ts.map +1 -1
  52. package/dist/db/connection.js +56 -0
  53. package/dist/db/connection.js.map +1 -1
  54. package/dist/db/migrate.d.ts.map +1 -1
  55. package/dist/db/migrate.js +3 -0
  56. package/dist/db/migrate.js.map +1 -1
  57. package/dist/embedding/backend.d.ts +27 -0
  58. package/dist/embedding/backend.d.ts.map +1 -0
  59. package/dist/embedding/backend.js +51 -0
  60. package/dist/embedding/backend.js.map +1 -0
  61. package/dist/embedding/config.d.ts +7 -0
  62. package/dist/embedding/config.d.ts.map +1 -0
  63. package/dist/embedding/config.js +125 -0
  64. package/dist/embedding/config.js.map +1 -0
  65. package/dist/embedding/diagnostics.d.ts +34 -0
  66. package/dist/embedding/diagnostics.d.ts.map +1 -0
  67. package/dist/embedding/diagnostics.js +248 -0
  68. package/dist/embedding/diagnostics.js.map +1 -0
  69. package/dist/embedding/document.d.ts +15 -0
  70. package/dist/embedding/document.d.ts.map +1 -0
  71. package/dist/embedding/document.js +102 -0
  72. package/dist/embedding/document.js.map +1 -0
  73. package/dist/embedding/javascript-backend.d.ts +11 -0
  74. package/dist/embedding/javascript-backend.d.ts.map +1 -0
  75. package/dist/embedding/javascript-backend.js +164 -0
  76. package/dist/embedding/javascript-backend.js.map +1 -0
  77. package/dist/embedding/jobs.d.ts +67 -0
  78. package/dist/embedding/jobs.d.ts.map +1 -0
  79. package/dist/embedding/jobs.js +259 -0
  80. package/dist/embedding/jobs.js.map +1 -0
  81. package/dist/embedding/openai-compatible-provider.d.ts +24 -0
  82. package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
  83. package/dist/embedding/openai-compatible-provider.js +330 -0
  84. package/dist/embedding/openai-compatible-provider.js.map +1 -0
  85. package/dist/embedding/profile.d.ts +6 -0
  86. package/dist/embedding/profile.d.ts.map +1 -0
  87. package/dist/embedding/profile.js +31 -0
  88. package/dist/embedding/profile.js.map +1 -0
  89. package/dist/embedding/provider.d.ts +13 -0
  90. package/dist/embedding/provider.d.ts.map +1 -0
  91. package/dist/embedding/provider.js +17 -0
  92. package/dist/embedding/provider.js.map +1 -0
  93. package/dist/embedding/query-cache.d.ts +39 -0
  94. package/dist/embedding/query-cache.d.ts.map +1 -0
  95. package/dist/embedding/query-cache.js +160 -0
  96. package/dist/embedding/query-cache.js.map +1 -0
  97. package/dist/embedding/runtime.d.ts +13 -0
  98. package/dist/embedding/runtime.d.ts.map +1 -0
  99. package/dist/embedding/runtime.js +373 -0
  100. package/dist/embedding/runtime.js.map +1 -0
  101. package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
  102. package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
  103. package/dist/embedding/sqlite-vec-backend.js +106 -0
  104. package/dist/embedding/sqlite-vec-backend.js.map +1 -0
  105. package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
  106. package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
  107. package/dist/embedding/sqlite-vec-loader.js +51 -0
  108. package/dist/embedding/sqlite-vec-loader.js.map +1 -0
  109. package/dist/embedding/store.d.ts +64 -0
  110. package/dist/embedding/store.d.ts.map +1 -0
  111. package/dist/embedding/store.js +377 -0
  112. package/dist/embedding/store.js.map +1 -0
  113. package/dist/embedding/types.d.ts +97 -0
  114. package/dist/embedding/types.d.ts.map +1 -0
  115. package/dist/embedding/types.js +2 -0
  116. package/dist/embedding/types.js.map +1 -0
  117. package/dist/embedding/vector.d.ts +9 -0
  118. package/dist/embedding/vector.d.ts.map +1 -0
  119. package/dist/embedding/vector.js +90 -0
  120. package/dist/embedding/vector.js.map +1 -0
  121. package/dist/embedding/worker.d.ts +23 -0
  122. package/dist/embedding/worker.d.ts.map +1 -0
  123. package/dist/embedding/worker.js +84 -0
  124. package/dist/embedding/worker.js.map +1 -0
  125. package/dist/enno-oduno/schemas.d.ts +2 -2
  126. package/dist/ledger/checkpoint-contract.d.ts +2 -2
  127. package/dist/mcp/bounded-stdio-transport.d.ts +12 -2
  128. package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -1
  129. package/dist/mcp/bounded-stdio-transport.js +103 -4
  130. package/dist/mcp/bounded-stdio-transport.js.map +1 -1
  131. package/dist/mcp/runtime-owner.d.ts +27 -0
  132. package/dist/mcp/runtime-owner.d.ts.map +1 -0
  133. package/dist/mcp/runtime-owner.js +130 -0
  134. package/dist/mcp/runtime-owner.js.map +1 -0
  135. package/dist/mcp/server.d.ts +9 -1
  136. package/dist/mcp/server.d.ts.map +1 -1
  137. package/dist/mcp/server.js +38 -5
  138. package/dist/mcp/server.js.map +1 -1
  139. package/dist/memory/checkpoint-contract.d.ts +3 -3
  140. package/dist/memory/entries.d.ts.map +1 -1
  141. package/dist/memory/entries.js +13 -0
  142. package/dist/memory/entries.js.map +1 -1
  143. package/dist/memory/federated-retrieval.d.ts +3 -2
  144. package/dist/memory/federated-retrieval.d.ts.map +1 -1
  145. package/dist/memory/federated-retrieval.js +112 -31
  146. package/dist/memory/federated-retrieval.js.map +1 -1
  147. package/dist/memory/hybrid-retrieval.d.ts +9 -2
  148. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  149. package/dist/memory/hybrid-retrieval.js +60 -13
  150. package/dist/memory/hybrid-retrieval.js.map +1 -1
  151. package/dist/memory/retrieval.d.ts +4 -3
  152. package/dist/memory/retrieval.d.ts.map +1 -1
  153. package/dist/memory/retrieval.js +6 -6
  154. package/dist/memory/retrieval.js.map +1 -1
  155. package/dist/memory/scoped-memory.d.ts +2 -1
  156. package/dist/memory/scoped-memory.d.ts.map +1 -1
  157. package/dist/memory/scoped-memory.js +2 -2
  158. package/dist/memory/scoped-memory.js.map +1 -1
  159. package/dist/server/agent-application.js +1 -1
  160. package/dist/server/agent-application.js.map +1 -1
  161. package/dist/server/http.d.ts +17 -1
  162. package/dist/server/http.d.ts.map +1 -1
  163. package/dist/server/http.js +76 -13
  164. package/dist/server/http.js.map +1 -1
  165. package/migrations/021_semantic_embeddings.sql +122 -0
  166. package/migrations/down/021_semantic_embeddings.sql +17 -0
  167. package/package.json +7 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache.js","sourceRoot":"","sources":["../../src/embedding/query-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { EmbeddingConfig, EmbeddingProvider, EmbeddingRuntime, VectorSearchBackend } from './types.js';
2
+ import type { SqliteDatabase } from '../db/adapter.js';
3
+ import type { HybridSearchRuntime } from '../memory/hybrid-retrieval.js';
4
+ export interface EmbeddingRuntimeOptions {
5
+ readonly provider?: EmbeddingProvider;
6
+ readonly backend?: VectorSearchBackend;
7
+ readonly now?: () => string;
8
+ readonly enqueueWrite?: <T>(operation: () => T | PromiseLike<T>) => Promise<T>;
9
+ }
10
+ export declare function createEmbeddingRuntime(database: SqliteDatabase, config?: EmbeddingConfig, options?: EmbeddingRuntimeOptions): EmbeddingRuntime;
11
+ /** Convert an owned runtime into the retrieval-only shape consumed by search lanes. */
12
+ export declare function prepareEmbeddingSearchRuntime(runtime: EmbeddingRuntime | undefined, database: SqliteDatabase, text: string): Promise<HybridSearchRuntime>;
13
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/embedding/runtime.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EACV,eAAe,EAIf,iBAAiB,EACjB,gBAAgB,EAGhB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAOzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAChF;AA8VD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,eAAwC,EAChD,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CAGlB;AAED,uFAAuF;AACvF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAK9B"}
@@ -0,0 +1,373 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { KiokukoError } from '../errors.js';
3
+ import { readEntry } from '../memory/entries.js';
4
+ import { buildEmbeddingDocument } from './document.js';
5
+ import { claimEmbeddingJobs, EMBEDDING_JOB_MAX_ATTEMPTS, failEmbeddingJob, finalizeEmbeddingJob, listEmbeddingJobs, } from './jobs.js';
6
+ import { parseEmbeddingConfig, requireEnabledEmbeddingConfig } from './config.js';
7
+ import { createEmbeddingProfile, embeddingProfileId } from './profile.js';
8
+ import { normalizeEmbeddingQuery, queryEmbeddingHash, readQueryEmbedding, writeQueryEmbedding, } from './query-cache.js';
9
+ import { JavaScriptVectorSearchBackend } from './javascript-backend.js';
10
+ import { EmbeddingProviderError } from './provider.js';
11
+ import { OpenAICompatibleEmbeddingProvider } from './openai-compatible-provider.js';
12
+ import { normalizeVector } from './vector.js';
13
+ import { readActiveEmbeddingProfile, readEntryEmbedding } from './store.js';
14
+ const MAX_DRAIN_JOBS = 64;
15
+ const MAX_DRAIN_DEADLINE_MS = 120_000;
16
+ const RETRY_BASE_MS = 1_000;
17
+ const RETRY_MAX_MS = 60_000;
18
+ function invalid(message) {
19
+ throw new KiokukoError('VALIDATION_ERROR', message);
20
+ }
21
+ function unavailable(message = 'Embedding runtime is unavailable') {
22
+ throw new KiokukoError('SERVICE_UNAVAILABLE', message);
23
+ }
24
+ function disabledRuntime(mode) {
25
+ return Object.freeze({
26
+ mode,
27
+ profileId: null,
28
+ backendId: null,
29
+ backend: null,
30
+ prepareQuery: async () => null,
31
+ drain: async () => ({ claimed: 0, completed: 0, failed: 0, blocked: 0, remaining: 0 }),
32
+ close: async () => undefined,
33
+ });
34
+ }
35
+ function profileMatches(provider, profile) {
36
+ try {
37
+ return embeddingProfileId(provider.profile) === profile.profileId;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ function validateDrainOptions(options) {
44
+ if (!Number.isSafeInteger(options.maxJobs) || options.maxJobs < 1 || options.maxJobs > MAX_DRAIN_JOBS)
45
+ invalid('maxJobs is invalid');
46
+ if (!Number.isSafeInteger(options.deadlineMs) || options.deadlineMs < 1 || options.deadlineMs > MAX_DRAIN_DEADLINE_MS)
47
+ invalid('deadlineMs is invalid');
48
+ }
49
+ function retryable(code) {
50
+ return code === 'timeout' || code === 'rate_limited' || code === 'provider_unavailable';
51
+ }
52
+ function retryDelay(job) {
53
+ if (!retryable(job.errorCode ?? 'provider_unavailable') || job.attempts >= EMBEDDING_JOB_MAX_ATTEMPTS)
54
+ return 0;
55
+ const jitterSeed = createHash('sha256')
56
+ .update(`${job.entryId}\u0000${job.profileId}\u0000${job.attempts}`, 'utf8')
57
+ .digest()
58
+ .readUInt16BE(0);
59
+ const exponential = RETRY_BASE_MS * (2 ** Math.min(6, Math.max(0, job.attempts - 1)));
60
+ return Math.min(RETRY_MAX_MS, exponential + (jitterSeed % 251));
61
+ }
62
+ function providerFailureCode(error) {
63
+ if (error instanceof EmbeddingProviderError)
64
+ return error.code;
65
+ if (error instanceof KiokukoError && error.code === 'SECURITY_REJECTION')
66
+ return 'secret_blocked';
67
+ return 'provider_unavailable';
68
+ }
69
+ function permanentFailure(code) {
70
+ return code === 'invalid_response'
71
+ || code === 'dimension_mismatch'
72
+ || code === 'secret_blocked'
73
+ || code === 'profile_changed';
74
+ }
75
+ function preparedQuery(profile, backend, cached) {
76
+ return {
77
+ profileId: profile.profileId,
78
+ dimensions: profile.identity.dimensions,
79
+ vector: new Float32Array(cached.vector),
80
+ vectorHash: cached.vectorHash,
81
+ backendId: backend.id,
82
+ distanceCeiling: profile.identity.distanceCeiling,
83
+ };
84
+ }
85
+ function failureAvailableAt(job, errorCode, now) {
86
+ const delay = errorCode === 'secret_blocked' || permanentFailure(errorCode) ? 0 : retryDelay(job);
87
+ return new Date(Date.parse(now) + delay).toISOString();
88
+ }
89
+ function createEnabledRuntime(database, config, options) {
90
+ const profile = createEmbeddingProfile(config);
91
+ const active = readActiveEmbeddingProfile(database);
92
+ if (active === null || active.profile.profileId !== profile.profileId) {
93
+ if (config.mode === 'required')
94
+ unavailable('Embedding profile is not active');
95
+ return disabledRuntime(config.mode);
96
+ }
97
+ const provider = options.provider ?? new OpenAICompatibleEmbeddingProvider({ config });
98
+ if (!profileMatches(provider, profile))
99
+ throw new KiokukoError('CONFLICT', 'Embedding provider profile does not match the active profile');
100
+ const backend = options.backend ?? (() => {
101
+ if (config.vectorBackend === 'sqlite-vec') {
102
+ if (config.mode === 'optional')
103
+ return null;
104
+ unavailable('sqlite-vec backend is not available');
105
+ }
106
+ return new JavaScriptVectorSearchBackend();
107
+ })();
108
+ if (backend === null)
109
+ return disabledRuntime(config.mode);
110
+ const state = {
111
+ config,
112
+ profile,
113
+ generation: active.generation,
114
+ provider,
115
+ backend,
116
+ now: options.now ?? (() => new Date().toISOString()),
117
+ };
118
+ const inFlight = new Set();
119
+ let closed = false;
120
+ const enqueueWrite = options.enqueueWrite ?? ((operation) => Promise.resolve(operation()));
121
+ const ensureActive = () => {
122
+ const current = readActiveEmbeddingProfile(database);
123
+ if (current === null || current.profile.profileId !== state.profile.profileId || current.generation !== state.generation) {
124
+ unavailable('Embedding profile changed while the runtime was active');
125
+ }
126
+ };
127
+ const failOrFallback = (error) => {
128
+ if (error instanceof KiokukoError && error.code === 'INTEGRITY_ERROR')
129
+ throw error;
130
+ if (state.config.mode === 'optional')
131
+ return null;
132
+ unavailable();
133
+ };
134
+ const prepareQuery = async (databaseForQuery, text) => {
135
+ if (closed)
136
+ unavailable('Embedding runtime is closed');
137
+ ensureActive();
138
+ const normalizedText = normalizeEmbeddingQuery(text);
139
+ const queryHash = queryEmbeddingHash(normalizedText);
140
+ const now = state.now();
141
+ const cached = readQueryEmbedding(databaseForQuery, { profileId: state.profile.profileId, queryHash, now });
142
+ if (cached !== undefined) {
143
+ ensureActive();
144
+ return preparedQuery(state.profile, state.backend, cached);
145
+ }
146
+ const controller = new AbortController();
147
+ inFlight.add(controller);
148
+ let vectors;
149
+ try {
150
+ vectors = await state.provider.embed([normalizedText], { signal: controller.signal });
151
+ }
152
+ catch (error) {
153
+ return failOrFallback(error);
154
+ }
155
+ finally {
156
+ inFlight.delete(controller);
157
+ }
158
+ if (vectors.length !== 1)
159
+ return failOrFallback(new EmbeddingProviderError('invalid_response', false));
160
+ let vector;
161
+ try {
162
+ vector = normalizeVector(vectors[0], state.profile.identity.dimensions);
163
+ }
164
+ catch {
165
+ return failOrFallback(new EmbeddingProviderError('dimension_mismatch', false));
166
+ }
167
+ ensureActive();
168
+ const stored = await enqueueWrite(() => writeQueryEmbedding(databaseForQuery, { profileId: state.profile.profileId, queryHash, vector }, { now: state.now(), expectedGeneration: state.generation }));
169
+ return preparedQuery(state.profile, state.backend, stored);
170
+ };
171
+ const settleFailure = (job, errorCode) => {
172
+ const now = state.now();
173
+ return enqueueWrite(() => failEmbeddingJob(database, {
174
+ entryId: job.entryId,
175
+ profileId: job.profileId,
176
+ generation: job.generation,
177
+ leaseId: job.leaseId,
178
+ errorCode,
179
+ availableAt: failureAvailableAt(job, errorCode, now),
180
+ now,
181
+ permanent: permanentFailure(errorCode),
182
+ }));
183
+ };
184
+ const processPending = async (pending, deadline, controller) => {
185
+ let completed = 0;
186
+ let failed = 0;
187
+ let blocked = 0;
188
+ for (let offset = 0; offset < pending.length; offset += state.config.batchSize) {
189
+ if (Date.now() >= deadline || closed)
190
+ break;
191
+ const batch = pending.slice(offset, offset + state.config.batchSize);
192
+ let vectors;
193
+ try {
194
+ vectors = await state.provider.embed(batch.map((item) => item.text), { signal: controller.signal });
195
+ }
196
+ catch (error) {
197
+ const code = providerFailureCode(error);
198
+ for (const item of batch) {
199
+ if (!(await settleFailure(item.job, code)))
200
+ continue;
201
+ if (code === 'secret_blocked')
202
+ blocked += 1;
203
+ else
204
+ failed += 1;
205
+ }
206
+ continue;
207
+ }
208
+ if (vectors.length !== batch.length) {
209
+ for (const item of batch)
210
+ if (await settleFailure(item.job, 'invalid_response'))
211
+ failed += 1;
212
+ continue;
213
+ }
214
+ for (let index = 0; index < batch.length; index += 1) {
215
+ const item = batch[index];
216
+ let vector;
217
+ try {
218
+ vector = normalizeVector(vectors[index], state.profile.identity.dimensions);
219
+ }
220
+ catch {
221
+ if (await settleFailure(item.job, 'dimension_mismatch'))
222
+ failed += 1;
223
+ continue;
224
+ }
225
+ try {
226
+ await enqueueWrite(() => finalizeEmbeddingJob(database, {
227
+ entryId: item.job.entryId,
228
+ profileId: item.job.profileId,
229
+ generation: item.job.generation,
230
+ leaseId: item.job.leaseId,
231
+ revision: item.job.revision,
232
+ contentHash: item.job.contentHash,
233
+ documentHash: item.documentHash,
234
+ vector,
235
+ now: state.now(),
236
+ }));
237
+ completed += 1;
238
+ }
239
+ catch (error) {
240
+ if (error instanceof KiokukoError && error.code === 'CONFLICT')
241
+ continue;
242
+ throw error;
243
+ }
244
+ }
245
+ }
246
+ return { completed, failed, blocked };
247
+ };
248
+ const drain = async (options) => {
249
+ validateDrainOptions(options);
250
+ if (closed)
251
+ unavailable('Embedding runtime is closed');
252
+ ensureActive();
253
+ const now = state.now();
254
+ const claimed = claimEmbeddingJobs(database, {
255
+ maxJobs: options.maxJobs,
256
+ ...(options.workspace === undefined ? {} : { workspace: options.workspace }),
257
+ now,
258
+ });
259
+ const deadline = Date.now() + options.deadlineMs;
260
+ const controller = new AbortController();
261
+ const deadlineTimer = setTimeout(() => controller.abort(), options.deadlineMs);
262
+ inFlight.add(controller);
263
+ const pending = [];
264
+ let completed = 0;
265
+ let failed = 0;
266
+ let blocked = 0;
267
+ try {
268
+ for (const job of claimed) {
269
+ if (Date.now() >= deadline || closed)
270
+ break;
271
+ try {
272
+ const entry = readEntry(database, { workspace: job.workspace, entryId: job.entryId });
273
+ if (entry.revision !== job.revision || entry.contentHash !== job.contentHash) {
274
+ if (await settleFailure(job, 'entry_changed'))
275
+ failed += 1;
276
+ continue;
277
+ }
278
+ const document = buildEmbeddingDocument({
279
+ kind: entry.kind,
280
+ title: entry.title,
281
+ summary: entry.summary,
282
+ body: entry.body,
283
+ tags: entry.tags,
284
+ scope: entry.scope,
285
+ });
286
+ const previous = readEntryEmbedding(database, { entryId: entry.id, profileId: state.profile.profileId });
287
+ if (previous !== undefined && previous.documentHash === document.documentHash && previous.dimensions === state.profile.identity.dimensions) {
288
+ try {
289
+ await enqueueWrite(() => finalizeEmbeddingJob(database, {
290
+ entryId: job.entryId,
291
+ profileId: job.profileId,
292
+ generation: job.generation,
293
+ leaseId: job.leaseId,
294
+ revision: job.revision,
295
+ contentHash: job.contentHash,
296
+ documentHash: document.documentHash,
297
+ vector: previous.vector,
298
+ now: state.now(),
299
+ }));
300
+ completed += 1;
301
+ }
302
+ catch (error) {
303
+ if (!(error instanceof KiokukoError && error.code === 'CONFLICT'))
304
+ throw error;
305
+ }
306
+ continue;
307
+ }
308
+ pending.push({ job, documentHash: document.documentHash, text: document.text });
309
+ }
310
+ catch (error) {
311
+ const code = error instanceof KiokukoError && error.code === 'SECURITY_REJECTION'
312
+ ? 'secret_blocked'
313
+ : error instanceof KiokukoError && (error.code === 'NOT_FOUND' || error.code === 'CONFLICT')
314
+ ? 'entry_changed'
315
+ : null;
316
+ if (code === null)
317
+ throw error;
318
+ if (!(await settleFailure(job, code)))
319
+ continue;
320
+ if (code === 'secret_blocked')
321
+ blocked += 1;
322
+ else
323
+ failed += 1;
324
+ }
325
+ }
326
+ const processed = await processPending(pending, deadline, controller);
327
+ completed += processed.completed;
328
+ failed += processed.failed;
329
+ blocked += processed.blocked;
330
+ }
331
+ finally {
332
+ clearTimeout(deadlineTimer);
333
+ inFlight.delete(controller);
334
+ }
335
+ const remaining = listEmbeddingJobs(database, {
336
+ profileId: state.profile.profileId,
337
+ ...(options.workspace === undefined ? {} : { workspace: options.workspace }),
338
+ }).length;
339
+ return { claimed: claimed.length, completed, failed, blocked, remaining };
340
+ };
341
+ const close = async () => {
342
+ if (closed)
343
+ return;
344
+ closed = true;
345
+ for (const controller of inFlight)
346
+ controller.abort();
347
+ inFlight.clear();
348
+ };
349
+ return Object.freeze({
350
+ mode: config.mode,
351
+ profileId: profile.profileId,
352
+ backendId: backend.id,
353
+ backend,
354
+ prepareQuery,
355
+ drain,
356
+ close,
357
+ });
358
+ }
359
+ export function createEmbeddingRuntime(database, config = parseEmbeddingConfig(), options = {}) {
360
+ if (config.mode === 'off')
361
+ return disabledRuntime('off');
362
+ return createEnabledRuntime(database, requireEnabledEmbeddingConfig(config), options);
363
+ }
364
+ /** Convert an owned runtime into the retrieval-only shape consumed by search lanes. */
365
+ export async function prepareEmbeddingSearchRuntime(runtime, database, text) {
366
+ if (runtime === undefined || runtime.backend === null)
367
+ return {};
368
+ const query = await runtime.prepareQuery(database, text);
369
+ if (query === null)
370
+ return {};
371
+ return { semantic: { query, backend: runtime.backend } };
372
+ }
373
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/embedding/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { SqliteDatabase } from '../db/adapter.js';
2
+ import type { VectorHit, VectorSearchBackend, VectorSearchInput } from './types.js';
3
+ export declare const SQLITE_VEC_BACKEND_ID: "sqlite-vec";
4
+ export declare class SqliteVecVectorSearchBackend implements VectorSearchBackend {
5
+ readonly id: "sqlite-vec";
6
+ search(database: SqliteDatabase, input: VectorSearchInput): VectorHit[];
7
+ }
8
+ export declare const createSqliteVecVectorSearchBackend: () => VectorSearchBackend;
9
+ //# sourceMappingURL=sqlite-vec-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec-backend.d.ts","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,kBAAkB,CAAC;AAKlE,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpF,eAAO,MAAM,qBAAqB,EAAG,YAAqB,CAAC;AAwD3D,qBAAa,4BAA6B,YAAW,mBAAmB;IACtE,QAAQ,CAAC,EAAE,eAAyB;IAEpC,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE;CAyDxE;AAED,eAAO,MAAM,kCAAkC,QAAO,mBAAyD,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ import { requireWorkspace } from '../serialization/validate.js';
3
+ import { decodeVector, encodeVector, normalizeVector } from './vector.js';
4
+ import { MAX_VECTOR_SEARCH_LIMIT } from './javascript-backend.js';
5
+ export const SQLITE_VEC_BACKEND_ID = 'sqlite-vec';
6
+ function invalid(message) {
7
+ throw new KiokukoError('VALIDATION_ERROR', message);
8
+ }
9
+ function integrity(message) {
10
+ throw new KiokukoError('INTEGRITY_ERROR', message);
11
+ }
12
+ function entryId(value) {
13
+ if (typeof value !== 'string' || value.length === 0 || value.length > 512 || /[\u0000-\u001f\u007f]/u.test(value)) {
14
+ integrity('Stored vector entry ID is invalid');
15
+ }
16
+ return value;
17
+ }
18
+ function searchInput(input) {
19
+ if (typeof input.profileId !== 'string' || !/^[0-9a-f]{64}$/u.test(input.profileId))
20
+ invalid('profileId is invalid');
21
+ if (!Number.isSafeInteger(input.dimensions) || input.dimensions < 2 || input.dimensions > 8192)
22
+ invalid('dimensions is invalid');
23
+ if (!Number.isFinite(input.distanceCeiling) || input.distanceCeiling <= 0 || input.distanceCeiling >= 2)
24
+ invalid('distanceCeiling is invalid');
25
+ if (!Number.isSafeInteger(input.limit) || input.limit < 1 || input.limit > MAX_VECTOR_SEARCH_LIMIT)
26
+ invalid('limit is invalid');
27
+ const queryVector = normalizeVector(input.queryVector, input.dimensions);
28
+ const workspace = input.workspace === undefined ? undefined : requireWorkspace(input.workspace);
29
+ const excludedWorkspaces = input.excludedWorkspaces === undefined
30
+ ? []
31
+ : [...new Set(input.excludedWorkspaces.map((value) => requireWorkspace(value)))];
32
+ return {
33
+ profileId: input.profileId,
34
+ dimensions: input.dimensions,
35
+ queryVector,
36
+ queryBlob: encodeVector(queryVector, input.dimensions),
37
+ distanceCeiling: input.distanceCeiling,
38
+ workspace,
39
+ excludedWorkspaces,
40
+ limit: input.limit,
41
+ };
42
+ }
43
+ export class SqliteVecVectorSearchBackend {
44
+ id = SQLITE_VEC_BACKEND_ID;
45
+ search(database, input) {
46
+ const normalized = searchInput(input);
47
+ const clauses = [
48
+ 'ee.profile_id = ?',
49
+ 'ee.dimensions = ?',
50
+ 'ee.revision = e.current_revision',
51
+ 'ee.content_hash = r.content_hash',
52
+ ];
53
+ const parameters = [normalized.queryBlob, normalized.profileId, normalized.dimensions];
54
+ if (normalized.workspace !== undefined) {
55
+ clauses.push('e.workspace = ?');
56
+ parameters.push(normalized.workspace);
57
+ }
58
+ if (normalized.excludedWorkspaces.length > 0) {
59
+ clauses.push(`e.workspace NOT IN (${normalized.excludedWorkspaces.map(() => '?').join(', ')})`);
60
+ parameters.push(...normalized.excludedWorkspaces);
61
+ }
62
+ parameters.push(normalized.limit);
63
+ let rows;
64
+ try {
65
+ rows = database.prepare(`
66
+ SELECT ee.entry_id, ee.dimensions, ee.embedding, ee.vector_hash,
67
+ vec_distance_cosine(ee.embedding, ?) AS distance
68
+ FROM entry_embeddings AS ee
69
+ JOIN entries AS e
70
+ ON e.id = ee.entry_id
71
+ JOIN entry_revisions AS r
72
+ ON r.entry_id = e.id
73
+ AND r.revision = e.current_revision
74
+ WHERE ${clauses.join(' AND ')}
75
+ ORDER BY distance ASC, ee.entry_id ASC
76
+ LIMIT ?
77
+ `).all(...parameters);
78
+ }
79
+ catch (error) {
80
+ const failure = new KiokukoError('SERVICE_UNAVAILABLE', 'sqlite-vec vector search is unavailable');
81
+ Object.defineProperty(failure, 'cause', { value: error });
82
+ throw failure;
83
+ }
84
+ const hits = [];
85
+ for (const row of rows) {
86
+ const id = entryId(row.entry_id);
87
+ if (typeof row.dimensions !== 'number' || row.dimensions !== normalized.dimensions) {
88
+ integrity('Stored vector dimensions do not match the search profile');
89
+ }
90
+ const vectorHash = typeof row.vector_hash === 'string' ? row.vector_hash : integrity('Stored vector hash is invalid');
91
+ try {
92
+ decodeVector(row.embedding, normalized.dimensions, vectorHash);
93
+ }
94
+ catch {
95
+ integrity('Stored vector is invalid');
96
+ }
97
+ if (typeof row.distance !== 'number' || !Number.isFinite(row.distance))
98
+ integrity('Vector distance is invalid');
99
+ if (row.distance <= normalized.distanceCeiling)
100
+ hits.push({ entryId: id, distance: row.distance });
101
+ }
102
+ return hits;
103
+ }
104
+ }
105
+ export const createSqliteVecVectorSearchBackend = () => new SqliteVecVectorSearchBackend();
106
+ //# sourceMappingURL=sqlite-vec-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec-backend.js","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const SQLITE_VEC_LOADER_ID: "sqlite-vec";
2
+ export declare const SQLITE_VEC_PACKAGE_VERSION: "0.1.9";
3
+ export declare const SQLITE_VEC_EXTENSION_VERSION: "v0.1.9";
4
+ export declare const SQLITE_VEC_VERSION: "0.1.9";
5
+ export interface SqliteVecLoadConnection {
6
+ loadExtension(path: string): void;
7
+ }
8
+ export interface SqliteVecLoader {
9
+ readonly id: typeof SQLITE_VEC_LOADER_ID;
10
+ readonly packageVersion: typeof SQLITE_VEC_PACKAGE_VERSION;
11
+ readonly extensionVersion: typeof SQLITE_VEC_EXTENSION_VERSION;
12
+ load(database: SqliteVecLoadConnection): void;
13
+ }
14
+ export declare function isSqliteVecLoader(value: unknown): value is SqliteVecLoader;
15
+ /** Resolve only the exact, package-owned sqlite-vec loader. */
16
+ export declare function createSqliteVecLoader(): Promise<SqliteVecLoader | null>;
17
+ //# sourceMappingURL=sqlite-vec-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec-loader.d.ts","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-loader.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,EAAG,YAAqB,CAAC;AAC1D,eAAO,MAAM,0BAA0B,EAAG,OAAgB,CAAC;AAC3D,eAAO,MAAM,4BAA4B,EAAG,QAAiB,CAAC;AAC9D,eAAO,MAAM,kBAAkB,SAA6B,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,oBAAoB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,OAAO,0BAA0B,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,4BAA4B,CAAC;IAC/D,IAAI,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC/C;AAkBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,+DAA+D;AAC/D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA6B7E"}
@@ -0,0 +1,51 @@
1
+ import path from 'node:path';
2
+ export const SQLITE_VEC_LOADER_ID = 'sqlite-vec';
3
+ export const SQLITE_VEC_PACKAGE_VERSION = '0.1.9';
4
+ export const SQLITE_VEC_EXTENSION_VERSION = 'v0.1.9';
5
+ export const SQLITE_VEC_VERSION = SQLITE_VEC_PACKAGE_VERSION;
6
+ const knownLoaders = new WeakSet();
7
+ function isRecord(value) {
8
+ return typeof value === 'object' && value !== null;
9
+ }
10
+ function isSqliteVecPackage(value) {
11
+ if (!isRecord(value))
12
+ return false;
13
+ return typeof value.getLoadablePath === 'function' && typeof value.load === 'function';
14
+ }
15
+ export function isSqliteVecLoader(value) {
16
+ return typeof value === 'object' && value !== null && knownLoaders.has(value);
17
+ }
18
+ /** Resolve only the exact, package-owned sqlite-vec loader. */
19
+ export async function createSqliteVecLoader() {
20
+ let candidate;
21
+ try {
22
+ // Keep the package name constant so optional dependency resolution cannot
23
+ // become an extension-path configuration surface.
24
+ const packageName = 'sqlite-vec';
25
+ candidate = await import(packageName);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ if (!isSqliteVecPackage(candidate))
31
+ return null;
32
+ try {
33
+ const loadablePath = candidate.getLoadablePath();
34
+ if (!path.isAbsolute(loadablePath) || /[\u0000-\u001f\u007f]/u.test(loadablePath))
35
+ return null;
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ const loader = Object.freeze({
41
+ id: SQLITE_VEC_LOADER_ID,
42
+ packageVersion: SQLITE_VEC_PACKAGE_VERSION,
43
+ extensionVersion: SQLITE_VEC_EXTENSION_VERSION,
44
+ load(database) {
45
+ candidate.load(database);
46
+ },
47
+ });
48
+ knownLoaders.add(loader);
49
+ return loader;
50
+ }
51
+ //# sourceMappingURL=sqlite-vec-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec-loader.js","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAgB,CAAC;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAiB,CAAC;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAkB7D,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU,CAAC;AAE3C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,WAAW,GAAW,YAAY,CAAC;QACzC,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,oBAAoB;QACxB,cAAc,EAAE,0BAA0B;QAC1C,gBAAgB,EAAE,4BAA4B;QAC9C,IAAI,CAAC,QAAiC;YACpC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC"}