kiokuko 1.0.13 → 1.0.15

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 (226) hide show
  1. package/README.ja.md +35 -0
  2. package/README.ko.md +35 -0
  3. package/README.md +35 -0
  4. package/README.zh-CN.md +35 -0
  5. package/dist/akinator/agent-task.d.ts +10 -0
  6. package/dist/akinator/agent-task.d.ts.map +1 -1
  7. package/dist/akinator/agent-task.js +54 -11
  8. package/dist/akinator/agent-task.js.map +1 -1
  9. package/dist/assurance/codex-hooks.js +1 -1
  10. package/dist/assurance/codex-hooks.js.map +1 -1
  11. package/dist/assurance/contracts.d.ts +8 -1
  12. package/dist/assurance/contracts.d.ts.map +1 -1
  13. package/dist/assurance/contracts.js +2 -1
  14. package/dist/assurance/contracts.js.map +1 -1
  15. package/dist/assurance/refresh.d.ts.map +1 -1
  16. package/dist/assurance/refresh.js +25 -3
  17. package/dist/assurance/refresh.js.map +1 -1
  18. package/dist/assurance/service.d.ts +1 -1
  19. package/dist/chatgpt/memory-policy.d.ts +14 -0
  20. package/dist/chatgpt/memory-policy.d.ts.map +1 -0
  21. package/dist/chatgpt/memory-policy.js +23 -0
  22. package/dist/chatgpt/memory-policy.js.map +1 -0
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +79 -9
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/export.d.ts.map +1 -1
  27. package/dist/commands/export.js +3 -0
  28. package/dist/commands/export.js.map +1 -1
  29. package/dist/commands/import.d.ts.map +1 -1
  30. package/dist/commands/import.js +3 -0
  31. package/dist/commands/import.js.map +1 -1
  32. package/dist/commands/memory-index.d.ts +6 -0
  33. package/dist/commands/memory-index.d.ts.map +1 -0
  34. package/dist/commands/memory-index.js +30 -0
  35. package/dist/commands/memory-index.js.map +1 -0
  36. package/dist/commands/reranker.d.ts +9 -0
  37. package/dist/commands/reranker.d.ts.map +1 -0
  38. package/dist/commands/reranker.js +52 -0
  39. package/dist/commands/reranker.js.map +1 -0
  40. package/dist/config/paths.d.ts +2 -0
  41. package/dist/config/paths.d.ts.map +1 -1
  42. package/dist/config/paths.js +10 -0
  43. package/dist/config/paths.js.map +1 -1
  44. package/dist/context/broker.d.ts +14 -0
  45. package/dist/context/broker.d.ts.map +1 -1
  46. package/dist/context/broker.js +162 -15
  47. package/dist/context/broker.js.map +1 -1
  48. package/dist/context/ranking.d.ts +6 -2
  49. package/dist/context/ranking.d.ts.map +1 -1
  50. package/dist/context/ranking.js +23 -1
  51. package/dist/context/ranking.js.map +1 -1
  52. package/dist/context/scoped-broker.d.ts +20 -0
  53. package/dist/context/scoped-broker.d.ts.map +1 -1
  54. package/dist/context/scoped-broker.js +173 -10
  55. package/dist/context/scoped-broker.js.map +1 -1
  56. package/dist/context/selection-state.d.ts.map +1 -1
  57. package/dist/context/selection-state.js +2 -0
  58. package/dist/context/selection-state.js.map +1 -1
  59. package/dist/db/connection.js +1 -1
  60. package/dist/db/connection.js.map +1 -1
  61. package/dist/embedding/javascript-backend.d.ts.map +1 -1
  62. package/dist/embedding/javascript-backend.js +7 -1
  63. package/dist/embedding/javascript-backend.js.map +1 -1
  64. package/dist/embedding/model-download.d.ts +2 -2
  65. package/dist/embedding/model-download.d.ts.map +1 -1
  66. package/dist/embedding/model-download.js +23 -11
  67. package/dist/embedding/model-download.js.map +1 -1
  68. package/dist/embedding/model-installation.d.ts +3 -1
  69. package/dist/embedding/model-installation.d.ts.map +1 -1
  70. package/dist/embedding/model-installation.js +16 -9
  71. package/dist/embedding/model-installation.js.map +1 -1
  72. package/dist/embedding/model-manifest.d.ts +7 -7
  73. package/dist/embedding/model-manifest.d.ts.map +1 -1
  74. package/dist/embedding/model-manifest.js +28 -17
  75. package/dist/embedding/model-manifest.js.map +1 -1
  76. package/dist/embedding/presets/manifest.d.ts +20 -7
  77. package/dist/embedding/presets/manifest.d.ts.map +1 -1
  78. package/dist/embedding/presets/manifest.js.map +1 -1
  79. package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -1
  80. package/dist/embedding/sqlite-vec-backend.js +7 -1
  81. package/dist/embedding/sqlite-vec-backend.js.map +1 -1
  82. package/dist/embedding/store.d.ts.map +1 -1
  83. package/dist/embedding/store.js +2 -0
  84. package/dist/embedding/store.js.map +1 -1
  85. package/dist/embedding/types.d.ts +2 -0
  86. package/dist/embedding/types.d.ts.map +1 -1
  87. package/dist/ledger/checkpoint-contract.d.ts +6 -6
  88. package/dist/mcp/chatgpt-contract.d.ts +156 -0
  89. package/dist/mcp/chatgpt-contract.d.ts.map +1 -0
  90. package/dist/mcp/chatgpt-contract.js +76 -0
  91. package/dist/mcp/chatgpt-contract.js.map +1 -0
  92. package/dist/mcp/chatgpt-runtime.d.ts +14 -0
  93. package/dist/mcp/chatgpt-runtime.d.ts.map +1 -0
  94. package/dist/mcp/chatgpt-runtime.js +106 -0
  95. package/dist/mcp/chatgpt-runtime.js.map +1 -0
  96. package/dist/mcp/chatgpt-server.d.ts +6 -0
  97. package/dist/mcp/chatgpt-server.d.ts.map +1 -0
  98. package/dist/mcp/chatgpt-server.js +81 -0
  99. package/dist/mcp/chatgpt-server.js.map +1 -0
  100. package/dist/mcp/request-deadline.d.ts +1 -1
  101. package/dist/mcp/request-deadline.d.ts.map +1 -1
  102. package/dist/mcp/request-deadline.js +3 -0
  103. package/dist/mcp/request-deadline.js.map +1 -1
  104. package/dist/mcp/runtime-owner.d.ts.map +1 -1
  105. package/dist/mcp/runtime-owner.js +7 -0
  106. package/dist/mcp/runtime-owner.js.map +1 -1
  107. package/dist/mcp/server.d.ts +1 -0
  108. package/dist/mcp/server.d.ts.map +1 -1
  109. package/dist/mcp/server.js +35 -5
  110. package/dist/mcp/server.js.map +1 -1
  111. package/dist/mcp/stdio-runner.d.ts +6 -0
  112. package/dist/mcp/stdio-runner.d.ts.map +1 -0
  113. package/dist/mcp/stdio-runner.js +41 -0
  114. package/dist/mcp/stdio-runner.js.map +1 -0
  115. package/dist/memory/checkpoint-contract.d.ts +9 -9
  116. package/dist/memory/curator.d.ts.map +1 -1
  117. package/dist/memory/curator.js +2 -0
  118. package/dist/memory/curator.js.map +1 -1
  119. package/dist/memory/entries.d.ts.map +1 -1
  120. package/dist/memory/entries.js +2 -0
  121. package/dist/memory/entries.js.map +1 -1
  122. package/dist/memory/federated-retrieval.d.ts +16 -2
  123. package/dist/memory/federated-retrieval.d.ts.map +1 -1
  124. package/dist/memory/federated-retrieval.js +229 -45
  125. package/dist/memory/federated-retrieval.js.map +1 -1
  126. package/dist/memory/global-conversation-query.d.ts +35 -0
  127. package/dist/memory/global-conversation-query.d.ts.map +1 -0
  128. package/dist/memory/global-conversation-query.js +60 -0
  129. package/dist/memory/global-conversation-query.js.map +1 -0
  130. package/dist/memory/hybrid-retrieval.d.ts +18 -2
  131. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  132. package/dist/memory/hybrid-retrieval.js +180 -9
  133. package/dist/memory/hybrid-retrieval.js.map +1 -1
  134. package/dist/memory/index-service.d.ts +103 -0
  135. package/dist/memory/index-service.d.ts.map +1 -0
  136. package/dist/memory/index-service.js +196 -0
  137. package/dist/memory/index-service.js.map +1 -0
  138. package/dist/memory/index-state.d.ts +56 -0
  139. package/dist/memory/index-state.d.ts.map +1 -0
  140. package/dist/memory/index-state.js +100 -0
  141. package/dist/memory/index-state.js.map +1 -0
  142. package/dist/memory/interaction-capture.d.ts.map +1 -1
  143. package/dist/memory/interaction-capture.js +6 -3
  144. package/dist/memory/interaction-capture.js.map +1 -1
  145. package/dist/memory/interaction-contract.d.ts +30 -0
  146. package/dist/memory/interaction-contract.d.ts.map +1 -1
  147. package/dist/memory/interaction-contract.js +38 -0
  148. package/dist/memory/interaction-contract.js.map +1 -1
  149. package/dist/memory/interaction-recall.d.ts +14 -1
  150. package/dist/memory/interaction-recall.d.ts.map +1 -1
  151. package/dist/memory/interaction-recall.js +48 -42
  152. package/dist/memory/interaction-recall.js.map +1 -1
  153. package/dist/memory/lesson-derivation.d.ts +79 -0
  154. package/dist/memory/lesson-derivation.d.ts.map +1 -0
  155. package/dist/memory/lesson-derivation.js +302 -0
  156. package/dist/memory/lesson-derivation.js.map +1 -0
  157. package/dist/memory/lesson-reinforcement.d.ts.map +1 -1
  158. package/dist/memory/lesson-reinforcement.js +7 -4
  159. package/dist/memory/lesson-reinforcement.js.map +1 -1
  160. package/dist/memory/lifecycle.d.ts.map +1 -1
  161. package/dist/memory/lifecycle.js +4 -0
  162. package/dist/memory/lifecycle.js.map +1 -1
  163. package/dist/memory/retrieval.d.ts +14 -0
  164. package/dist/memory/retrieval.d.ts.map +1 -1
  165. package/dist/memory/retrieval.js +107 -13
  166. package/dist/memory/retrieval.js.map +1 -1
  167. package/dist/memory/scoped-memory.d.ts +5 -0
  168. package/dist/memory/scoped-memory.d.ts.map +1 -1
  169. package/dist/memory/scoped-memory.js +3 -0
  170. package/dist/memory/scoped-memory.js.map +1 -1
  171. package/dist/memory/search-extension-config.d.ts +5 -0
  172. package/dist/memory/search-extension-config.d.ts.map +1 -0
  173. package/dist/memory/search-extension-config.js +20 -0
  174. package/dist/memory/search-extension-config.js.map +1 -0
  175. package/dist/memory/temporal.d.ts +18 -0
  176. package/dist/memory/temporal.d.ts.map +1 -0
  177. package/dist/memory/temporal.js +128 -0
  178. package/dist/memory/temporal.js.map +1 -0
  179. package/dist/reranker/config.d.ts +15 -0
  180. package/dist/reranker/config.d.ts.map +1 -0
  181. package/dist/reranker/config.js +48 -0
  182. package/dist/reranker/config.js.map +1 -0
  183. package/dist/reranker/preset.d.ts +12 -0
  184. package/dist/reranker/preset.d.ts.map +1 -0
  185. package/dist/reranker/preset.js +102 -0
  186. package/dist/reranker/preset.js.map +1 -0
  187. package/dist/reranker/runtime.d.ts +40 -0
  188. package/dist/reranker/runtime.d.ts.map +1 -0
  189. package/dist/reranker/runtime.js +324 -0
  190. package/dist/reranker/runtime.js.map +1 -0
  191. package/dist/reranker/service.d.ts +36 -0
  192. package/dist/reranker/service.d.ts.map +1 -0
  193. package/dist/reranker/service.js +163 -0
  194. package/dist/reranker/service.js.map +1 -0
  195. package/dist/reranker/setup.d.ts +30 -0
  196. package/dist/reranker/setup.d.ts.map +1 -0
  197. package/dist/reranker/setup.js +50 -0
  198. package/dist/reranker/setup.js.map +1 -0
  199. package/dist/reranker/worker.d.ts +2 -0
  200. package/dist/reranker/worker.d.ts.map +1 -0
  201. package/dist/reranker/worker.js +115 -0
  202. package/dist/reranker/worker.js.map +1 -0
  203. package/dist/serialization/validate.d.ts.map +1 -1
  204. package/dist/serialization/validate.js +29 -1
  205. package/dist/serialization/validate.js.map +1 -1
  206. package/dist/server/routes/task-assurance.d.ts.map +1 -1
  207. package/dist/server/routes/task-assurance.js +11 -2
  208. package/dist/server/routes/task-assurance.js.map +1 -1
  209. package/dist/web/server.d.ts.map +1 -1
  210. package/dist/web/server.js +47 -11
  211. package/dist/web/server.js.map +1 -1
  212. package/docs/README.ja.md +3 -0
  213. package/docs/README.md +3 -0
  214. package/docs/chatgpt-validation.md +40 -0
  215. package/docs/chatgpt.ja.md +41 -0
  216. package/docs/chatgpt.md +41 -0
  217. package/docs/cli-contract.md +11 -0
  218. package/docs/client-compatibility.md +9 -0
  219. package/docs/memory-assurance.md +5 -0
  220. package/docs/memory-index-evaluation-2026-09-30.md +50 -0
  221. package/docs/memory-index.md +138 -0
  222. package/migrations/007_revision_bound_lesson_sources.sql +33 -0
  223. package/migrations/008_memory_index.sql +39 -0
  224. package/package.json +3 -2
  225. package/skills/kiokuko-soul/SKILL.md +13 -0
  226. package/templates/chatgpt/memory-policy.json +4 -0
@@ -0,0 +1,302 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { withImmediateTransaction } from '../db/transaction.js';
3
+ import { KiokukoError } from '../errors.js';
4
+ import { LedgerStore } from '../ledger/store.js';
5
+ import { canonicalJson } from '../serialization/validate.js';
6
+ import { readEntry, recordEntryInTransaction } from './entries.js';
7
+ import { memoryDeriveLessonInputSchema } from './interaction-contract.js';
8
+ import { findSecretInValue } from './secrets.js';
9
+ import { resolveProjectWorkspaceReadOnly } from './workspaces.js';
10
+ function conflict(message) {
11
+ throw new KiokukoError('CONFLICT', message);
12
+ }
13
+ function digest(value) {
14
+ return createHash('sha256').update(canonicalJson(value)).digest('hex');
15
+ }
16
+ /** Only lessons with intact, revision-current source receipts may be delivered. */
17
+ export function isDeliverableDerivedLesson(database, entry) {
18
+ if (entry.provenance.type !== 'agent_derived_lesson')
19
+ return true;
20
+ if (entry.status === 'superseded')
21
+ return false;
22
+ const row = database.prepare(`
23
+ SELECT o.operation_id, o.input_hash, o.run_id, o.delivery_id, o.workspace,
24
+ o.output_entry_id, o.output_revision, o.output_content_hash
25
+ FROM lesson_derivation_operations o
26
+ JOIN lesson_derivation_sources s ON s.operation_id = o.operation_id
27
+ WHERE o.output_entry_id = ? AND o.output_revision = ? AND o.workspace = ?
28
+ GROUP BY o.operation_id
29
+ ORDER BY o.operation_id ASC
30
+ `).all(entry.id, entry.revision, entry.workspace);
31
+ return row.some((operation) => operation.output_content_hash === entry.contentHash
32
+ && entry.provenance.runId === operation.run_id
33
+ && entry.provenance.deliveryId === operation.delivery_id
34
+ && currentSourceIsValidForOperation(database, operation));
35
+ }
36
+ export function readDeliverableLessonSourceReferences(database, entry) {
37
+ if (entry.provenance.type !== 'agent_derived_lesson' || entry.status === 'superseded')
38
+ return [];
39
+ const operations = database.prepare(`
40
+ SELECT o.operation_id, o.input_hash, o.run_id, o.delivery_id, o.workspace,
41
+ o.output_entry_id, o.output_revision, o.output_content_hash
42
+ FROM lesson_derivation_operations o
43
+ WHERE o.output_entry_id = ? AND o.output_revision = ? AND o.workspace = ?
44
+ ORDER BY o.operation_id ASC
45
+ `).all(entry.id, entry.revision, entry.workspace);
46
+ for (const operation of operations) {
47
+ if (operation.output_content_hash !== entry.contentHash
48
+ || entry.provenance.runId !== operation.run_id
49
+ || entry.provenance.deliveryId !== operation.delivery_id
50
+ || !currentSourceIsValidForOperation(database, operation))
51
+ continue;
52
+ return database.prepare(`
53
+ SELECT source_workspace AS workspace, source_entry_id AS entryId,
54
+ source_revision AS revision, source_content_hash AS contentHash, source_role AS role
55
+ FROM lesson_derivation_sources
56
+ WHERE operation_id = ?
57
+ ORDER BY source_entry_id, source_revision
58
+ `).all(operation.operation_id);
59
+ }
60
+ return [];
61
+ }
62
+ function sameLessonPayload(left, right) {
63
+ const semanticScope = (entry) => {
64
+ const value = { ...entry.scope };
65
+ delete value.schemaVersion;
66
+ return value;
67
+ };
68
+ return left.workspace === right.workspace && left.kind === right.kind
69
+ && left.title === right.title && left.summary === right.summary && left.body === right.body
70
+ && canonicalJson(left.tags) === canonicalJson(right.tags)
71
+ && canonicalJson(semanticScope(left)) === canonicalJson(semanticScope(right));
72
+ }
73
+ function hasContradictionLink(database, left, right) {
74
+ return database.prepare(`SELECT 1 AS present FROM entry_links
75
+ WHERE relation = 'contradicts'
76
+ AND ((from_entry_id = ? AND to_entry_id = ?) OR (from_entry_id = ? AND to_entry_id = ?))
77
+ LIMIT 1`).get(left, right, right, left) !== undefined;
78
+ }
79
+ /** Suppress only an exact duplicate that is co-deliverable with its revision-verified source. */
80
+ export function deduplicateDeliverableLessonSources(database, candidates, mode) {
81
+ const byRevision = new Map(candidates.map((entry) => [`${entry.workspace}\u0000${entry.id}\u0000${entry.revision}`, entry]));
82
+ const sourceReferences = new Map();
83
+ if (mode !== 'off') {
84
+ for (const entry of candidates) {
85
+ const references = readDeliverableLessonSourceReferences(database, entry);
86
+ if (references.length > 0)
87
+ sourceReferences.set(entry.id, references);
88
+ }
89
+ }
90
+ const suppressed = new Map();
91
+ const trustRank = (entry) => ({ system_verified: 4, source_verified: 3, user_asserted: 2, untrusted: 1 })[entry.trustLevel];
92
+ const statusRank = (entry) => ({ verified: 2, candidate: 1, superseded: 0 })[entry.status];
93
+ let duplicatePairs = 0;
94
+ for (const derived of candidates) {
95
+ const references = sourceReferences.get(derived.id);
96
+ if (references === undefined || references.length !== 1)
97
+ continue;
98
+ const reference = references[0];
99
+ if (reference.role !== 'experience' && reference.role !== 'evidence')
100
+ continue;
101
+ const source = byRevision.get(`${reference.workspace}\u0000${reference.entryId}\u0000${reference.revision}`);
102
+ if (source === undefined || !sameLessonPayload(derived, source)
103
+ || hasContradictionLink(database, derived.id, source.id))
104
+ continue;
105
+ duplicatePairs += 1;
106
+ const keepSource = statusRank(source) > statusRank(derived)
107
+ || statusRank(source) === statusRank(derived) && trustRank(source) > trustRank(derived);
108
+ const removed = keepSource ? derived : source;
109
+ const retained = keepSource ? source : derived;
110
+ suppressed.set(removed.id, { entryId: removed.id, revision: removed.revision,
111
+ retainedEntryId: retained.id, retainedRevision: retained.revision });
112
+ }
113
+ const suppressedItems = [...suppressed.values()];
114
+ return {
115
+ entries: mode === 'active' ? candidates.filter((entry) => !suppressed.has(entry.id)) : [...candidates],
116
+ sourceReferences,
117
+ suppressed: suppressedItems,
118
+ diagnostics: { mode, candidateCount: candidates.length, duplicatePairs, suppressedCount: mode === 'active' ? suppressedItems.length : 0 },
119
+ };
120
+ }
121
+ export function formatLessonSourceReferences(references) {
122
+ if (references.length === 0)
123
+ return '';
124
+ return `\n\nRevision-verified sources:\n${references.map((source) => `- ${source.workspace}/${source.entryId}@${source.revision} sha256:${source.contentHash} (${source.role})`).join('\n')}`;
125
+ }
126
+ function currentSourceIsValidForOperation(database, operation) {
127
+ const sources = database.prepare(`
128
+ SELECT s.source_workspace, s.source_entry_id, s.source_revision, s.source_content_hash,
129
+ e.workspace, e.current_revision, e.status, r.content_hash,
130
+ EXISTS (
131
+ SELECT 1 FROM context_delivery_entries d
132
+ WHERE d.delivery_id = ? AND d.entry_id = s.source_entry_id
133
+ AND d.entry_revision = s.source_revision
134
+ ) AS delivered
135
+ FROM lesson_derivation_sources s
136
+ LEFT JOIN entries e ON e.id = s.source_entry_id
137
+ LEFT JOIN entry_revisions r ON r.entry_id = s.source_entry_id AND r.revision = s.source_revision
138
+ WHERE s.operation_id = ?
139
+ ORDER BY s.source_entry_id, s.source_revision
140
+ `).all(operation.delivery_id, operation.operation_id);
141
+ if (sources.length === 0 || sources.length > 16)
142
+ return false;
143
+ const delivery = database.prepare(`
144
+ SELECT 1 AS present FROM context_deliveries cd
145
+ JOIN ledger_runs lr ON lr.run_id = cd.run_id
146
+ WHERE cd.delivery_id = ? AND cd.run_id = ? AND lr.workspace = ?
147
+ `).get(operation.delivery_id, operation.run_id, operation.workspace);
148
+ return delivery !== undefined && sources.every((source) => source.source_workspace === operation.workspace
149
+ && source.workspace === source.source_workspace
150
+ && source.current_revision === source.source_revision
151
+ && source.status !== 'superseded'
152
+ && source.content_hash === source.source_content_hash
153
+ && source.delivered === 1);
154
+ }
155
+ function replayReceipt(database, operationId, inputHash) {
156
+ const stored = database.prepare(`
157
+ SELECT input_hash, run_id, delivery_id, workspace, output_entry_id, output_revision, output_content_hash
158
+ FROM lesson_derivation_operations WHERE operation_id = ?
159
+ `).get(operationId);
160
+ if (stored === undefined)
161
+ return undefined;
162
+ if (stored.input_hash !== inputHash)
163
+ conflict('Derivation operation ID was reused with different input');
164
+ const state = database.prepare('SELECT current_revision, status FROM entries WHERE id = ? AND workspace = ?')
165
+ .get(stored.output_entry_id, stored.workspace);
166
+ const output = state !== undefined && state.current_revision === stored.output_revision
167
+ ? readEntry(database, { workspace: stored.workspace, entryId: stored.output_entry_id })
168
+ : undefined;
169
+ const valid = output !== undefined && output.contentHash === stored.output_content_hash
170
+ && isDeliverableDerivedLesson(database, output);
171
+ const availability = state === undefined ? 'unavailable'
172
+ : state.status === 'superseded' ? 'superseded'
173
+ : state.current_revision !== stored.output_revision ? 'changed'
174
+ : valid ? 'current' : 'sources_invalid';
175
+ return { operationId, entryId: stored.output_entry_id, revision: stored.output_revision,
176
+ workspace: stored.workspace, outcome: 'replayed', availability };
177
+ }
178
+ function assertWorkspaceStillBound(database, repositoryRoot, workspace, repositoryId) {
179
+ const row = database.prepare(`
180
+ SELECT r.workspace, r.repository_id
181
+ FROM repository_locations l JOIN repositories r ON r.repository_id = l.repository_id
182
+ WHERE l.canonical_root = ?
183
+ `).get(repositoryRoot);
184
+ if (row?.workspace !== workspace || row.repository_id !== repositoryId) {
185
+ conflict('Lesson project binding changed');
186
+ }
187
+ }
188
+ /** Save a connected agent's lesson proposal as an untrusted candidate with atomic source receipts. */
189
+ export async function deriveLessonCandidate(database, raw, options) {
190
+ const parsed = memoryDeriveLessonInputSchema.safeParse(raw);
191
+ if (!parsed.success)
192
+ throw new KiokukoError('VALIDATION_ERROR', 'Lesson derivation input is invalid');
193
+ const input = parsed.data;
194
+ if (findSecretInValue(input))
195
+ throw new KiokukoError('SECURITY_REJECTION', 'Lesson derivation input resembles a secret');
196
+ const mode = options.mode ?? 'off';
197
+ if (mode === 'off')
198
+ return { enabled: false, mode, items: [] };
199
+ const project = await resolveProjectWorkspaceReadOnly(database, input.cwd ?? options.cwd);
200
+ if (project === undefined)
201
+ throw new KiokukoError('NOT_FOUND', 'Lesson derivation requires a registered project workspace');
202
+ const normalized = {
203
+ ...input,
204
+ lesson: { ...input.lesson, title: input.lesson.title.normalize('NFKC'), body: input.lesson.body.normalize('NFKC'),
205
+ ...(input.lesson.summary === undefined ? {} : { summary: input.lesson.summary.normalize('NFKC') }) },
206
+ sources: [...input.sources].sort((a, b) => a.entryId.localeCompare(b.entryId) || a.revision - b.revision),
207
+ };
208
+ const inputHash = digest({ normalized, runId: input.runId, deliveryId: input.deliveryId,
209
+ workspace: project.workspace, repositoryId: project.repositoryId });
210
+ const now = options.now?.() ?? new Date().toISOString();
211
+ return withImmediateTransaction(database, () => {
212
+ const replay = replayReceipt(database, input.operationId, inputHash);
213
+ if (replay !== undefined)
214
+ return replay;
215
+ assertWorkspaceStillBound(database, project.repositoryRoot, project.workspace, project.repositoryId);
216
+ const run = database.prepare(`
217
+ SELECT r.workspace, r.status, r.client_kind, cd.run_id AS delivery_run_id
218
+ FROM ledger_runs r
219
+ JOIN run_intakes i ON i.run_id = r.run_id
220
+ JOIN akinator_sessions s ON s.id = i.session_id
221
+ JOIN context_deliveries cd ON cd.run_id = r.run_id AND cd.delivery_id = ?
222
+ WHERE r.run_id = ? AND s.status IN ('ready', 'exhausted') AND i.finalized_at IS NOT NULL
223
+ `).get(input.deliveryId, input.runId);
224
+ if (run === undefined || run.workspace !== project.workspace || run.delivery_run_id !== input.runId
225
+ || run.status !== 'active' || run.client_kind !== options.clientKind) {
226
+ conflict('Lesson derivation requires the active completed-intake run and its delivery in this project');
227
+ }
228
+ const sourceRecords = input.sources.map((source) => {
229
+ if (source.workspace !== project.workspace)
230
+ conflict('Lesson sources must belong to the active project workspace');
231
+ const current = readEntry(database, { workspace: project.workspace, entryId: source.entryId });
232
+ if (current.status === 'superseded' || current.revision !== source.revision || current.contentHash !== source.contentHash) {
233
+ conflict('Lesson source revision or content hash is stale');
234
+ }
235
+ const delivered = database.prepare(`
236
+ SELECT 1 AS present FROM context_delivery_entries
237
+ WHERE delivery_id = ? AND entry_id = ? AND entry_revision = ?
238
+ `).get(input.deliveryId, source.entryId, source.revision);
239
+ if (delivered === undefined)
240
+ conflict('Lesson source was not present in the active run delivery');
241
+ return { input: source, entry: current };
242
+ });
243
+ const sourceSetHash = digest(sourceRecords.map(({ input: source }) => ({
244
+ workspace: source.workspace, entryId: source.entryId, revision: source.revision,
245
+ contentHash: source.contentHash, role: source.role,
246
+ })).sort((a, b) => a.entryId.localeCompare(b.entryId) || a.revision - b.revision));
247
+ if (mode === 'observe')
248
+ return { enabled: true, mode, outcome: 'would_save',
249
+ sourceCount: sourceRecords.length, sourceSetHash, status: 'candidate', trustLevel: 'untrusted' };
250
+ const entry = recordEntryInTransaction(database, {
251
+ workspace: project.workspace,
252
+ kind: 'lesson', status: 'candidate', trustLevel: 'untrusted', confidence: 0.5,
253
+ title: normalized.lesson.title, body: normalized.lesson.body,
254
+ ...(normalized.lesson.summary === undefined ? {} : { summary: normalized.lesson.summary }),
255
+ ...(normalized.lesson.tags === undefined ? {} : { tags: normalized.lesson.tags }),
256
+ scope: { visibility: 'project', retrievalScope: 'project-only', repositoryId: project.repositoryId },
257
+ provenance: { type: 'agent_derived_lesson', reference: 'context_delivery', runId: input.runId,
258
+ deliveryId: input.deliveryId, evidenceIds: sourceRecords.map(({ entry: source }) => source.id), sourceSetHash },
259
+ createdBy: 'kiokuko-mcp', actor: 'kiokuko-mcp',
260
+ }, { now });
261
+ if (sourceRecords.some(({ entry: source }) => source.id === entry.id)) {
262
+ conflict('Lesson cannot cite itself as a source');
263
+ }
264
+ for (const { entry: source } of sourceRecords) {
265
+ const cyclic = database.prepare(`
266
+ WITH RECURSIVE reachable(id) AS (
267
+ SELECT to_entry_id FROM entry_links WHERE from_entry_id = ? AND relation = 'derived_from'
268
+ UNION
269
+ SELECT link.to_entry_id FROM entry_links link JOIN reachable r ON link.from_entry_id = r.id
270
+ WHERE link.relation = 'derived_from'
271
+ ) SELECT 1 AS present FROM reachable WHERE id = ? LIMIT 1
272
+ `).get(source.id, entry.id);
273
+ if (cyclic !== undefined)
274
+ conflict('Lesson derivation would create a source cycle');
275
+ }
276
+ database.prepare(`
277
+ INSERT INTO lesson_derivation_operations (
278
+ operation_id, input_hash, run_id, delivery_id, workspace,
279
+ output_entry_id, output_revision, output_content_hash, created_at
280
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
281
+ `).run(input.operationId, inputHash, input.runId, input.deliveryId, project.workspace, entry.id, entry.revision, entry.contentHash, now);
282
+ for (const { input: source } of sourceRecords) {
283
+ database.prepare(`
284
+ INSERT INTO lesson_derivation_sources (
285
+ operation_id, output_entry_id, output_revision, source_workspace,
286
+ source_entry_id, source_revision, source_content_hash, source_role
287
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
288
+ `).run(input.operationId, entry.id, entry.revision, source.workspace, source.entryId, source.revision, source.contentHash, source.role);
289
+ database.prepare(`
290
+ INSERT OR IGNORE INTO entry_links (from_entry_id, to_entry_id, relation, created_at, created_by)
291
+ VALUES (?, ?, 'derived_from', ?, 'kiokuko-mcp')
292
+ `).run(entry.id, source.entryId, now);
293
+ }
294
+ new LedgerStore(database).appendBatchInTransaction(input.runId, { events: [{ eventType: 'memory.proposed', actor: 'kiokuko-mcp',
295
+ payload: { entryId: entry.id, revision: entry.revision, scope: project.workspace, outcome: 'derived_candidate',
296
+ deliveryId: input.deliveryId, sourceIds: sourceRecords.map(({ entry: source }) => source.id) } }] });
297
+ return { operationId: input.operationId, entryId: entry.id, revision: entry.revision,
298
+ workspace: entry.workspace, outcome: 'created', availability: 'current',
299
+ status: entry.status, trustLevel: entry.trustLevel, reinforced: false };
300
+ });
301
+ }
302
+ //# sourceMappingURL=lesson-derivation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-derivation.js","sourceRoot":"","sources":["../../src/memory/lesson-derivation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lesson-reinforcement.d.ts","sourceRoot":"","sources":["../../src/memory/lesson-reinforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC;CACnC,CAAC;AAWF,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAMrG;AAED,6FAA6F;AAC7F,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;qBAvBhG,MAAM;cACb,QAAQ,GAAG,YAAY;EA0ClC"}
1
+ {"version":3,"file":"lesson-reinforcement.d.ts","sourceRoot":"","sources":["../../src/memory/lesson-reinforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC;CACnC,CAAC;AAaF,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAMrG;AAED,6FAA6F;AAC7F,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;qBAzBhG,MAAM;cACb,QAAQ,GAAG,YAAY;EA4ClC"}
@@ -1,23 +1,26 @@
1
1
  import { KiokukoError } from '../errors.js';
2
2
  import { canonicalContentHash } from '../serialization/validate.js';
3
+ import { isDeliverableDerivedLesson } from './lesson-derivation.js';
3
4
  /** Titles, subjects and transport provenance do not change the identity of a lesson. */
4
- function lessonFingerprint(entry) {
5
+ function lessonFingerprint(database, entry) {
5
6
  if (entry.kind !== 'lesson' || entry.status === 'superseded'
6
7
  || entry.scope.visibility !== 'project' || entry.workspace === 'global'
7
- || !['interaction_capture', 'agent_checkpoint'].includes(String(entry.provenance.type)))
8
+ || !['interaction_capture', 'agent_checkpoint', 'agent_derived_lesson'].includes(String(entry.provenance.type))
9
+ || (entry.provenance.type === 'agent_derived_lesson'
10
+ && !isDeliverableDerivedLesson(database, entry)))
8
11
  return null;
9
12
  return canonicalContentHash({ version: 1, workspace: entry.workspace,
10
13
  body: entry.body.normalize('NFKC').trim(), applicability: entry.scope.applicability ?? null });
11
14
  }
12
15
  /** Current-revision observations only; repeated reports confer priority, never trust. */
13
16
  export function lessonReinforcement(database, entry) {
14
- const fingerprint = lessonFingerprint(entry);
17
+ const fingerprint = lessonFingerprint(database, entry);
15
18
  const independentRuns = fingerprint === null ? 0 : database.prepare('SELECT COUNT(*) AS count FROM lesson_observations WHERE fingerprint = ?').get(fingerprint).count;
16
19
  return { independentRuns, priority: independentRuns >= 2 ? 'reinforced' : 'normal' };
17
20
  }
18
21
  /** Record one observation per logical root run inside the capture/checkpoint transaction. */
19
22
  export function observeLessonInTransaction(database, entry, runId, now) {
20
- const fingerprint = lessonFingerprint(entry);
23
+ const fingerprint = lessonFingerprint(database, entry);
21
24
  const before = lessonReinforcement(database, entry);
22
25
  if (fingerprint === null)
23
26
  return { ...before, promoted: false };
@@ -1 +1 @@
1
- {"version":3,"file":"lesson-reinforcement.js","sourceRoot":"","sources":["../../src/memory/lesson-reinforcement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lesson-reinforcement.js","sourceRoot":"","sources":["../../src/memory/lesson-reinforcement.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAevF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,WAAW,CAgBxG;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,WAAW,CAE3F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAU5E"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAgBvF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,WAAW,CAkBxG;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,WAAW,CAE3F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAU5E"}
@@ -1,3 +1,4 @@
1
+ import { assertNotIndexArtifact } from './index-state.js';
1
2
  import { withImmediateTransaction } from '../db/transaction.js';
2
3
  import { KiokukoError } from '../errors.js';
3
4
  import { readEntry } from './entries.js';
@@ -13,6 +14,7 @@ export function promoteEntry(database, input) {
13
14
  const actor = input.actor ?? 'kiokuko-cli';
14
15
  return withImmediateTransaction(database, () => {
15
16
  const current = readEntry(database, { workspace: input.workspace, entryId: input.entryId });
17
+ assertNotIndexArtifact(current);
16
18
  const managedExternal = database.prepare('SELECT 1 AS present FROM external_skill_entries WHERE entry_id = ? LIMIT 1').get(input.entryId);
17
19
  if (managedExternal)
18
20
  throw new KiokukoError('CONFLICT', 'Managed external Skill entries cannot be promoted');
@@ -33,7 +35,9 @@ export function supersedeEntryInTransaction(database, input) {
33
35
  const now = input.now ?? new Date().toISOString();
34
36
  const actor = input.actor ?? 'kiokuko-cli';
35
37
  const oldEntry = readEntry(database, { workspace: input.workspace, entryId: input.oldEntryId });
38
+ assertNotIndexArtifact(oldEntry);
36
39
  const replacement = readEntry(database, { workspace: input.workspace, entryId: input.replacementEntryId });
40
+ assertNotIndexArtifact(replacement);
37
41
  const managedExternal = database.prepare('SELECT 1 AS present FROM external_skill_entries WHERE entry_id IN (?, ?) LIMIT 1').get(input.oldEntryId, input.replacementEntryId);
38
42
  if (managedExternal)
39
43
  throw new KiokukoError('CONFLICT', 'Managed external Skill entries cannot be superseded');
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,10 @@ import type { SqliteDatabase } from '../db/adapter.js';
2
2
  import { type EntryRecord } from './entries.js';
3
3
  import { type EntryKind, type EntryStatus } from '../serialization/validate.js';
4
4
  import { type HybridSearchRuntime } from './hybrid-retrieval.js';
5
+ import type { TemporalConstraint } from './temporal.js';
6
+ import type { RelatedSearchMode } from './hybrid-retrieval.js';
7
+ import { type RerankerDiagnostics } from '../reranker/service.js';
8
+ import { type LessonDeduplicationResult } from './lesson-derivation.js';
5
9
  export interface SearchEntriesInput {
6
10
  workspace: string;
7
11
  query: string;
@@ -11,11 +15,16 @@ export interface SearchEntriesInput {
11
15
  tag?: string;
12
16
  includeSuperseded?: boolean;
13
17
  subjects?: readonly string[];
18
+ temporal?: TemporalConstraint;
19
+ relatedMode?: RelatedSearchMode;
20
+ relatedSeedLimit?: number;
21
+ relatedCandidateLimit?: number;
14
22
  }
15
23
  export interface SearchResult {
16
24
  items: EntryRecord[];
17
25
  count: number;
18
26
  truncated: boolean;
27
+ rerankerDiagnostics?: RerankerDiagnostics;
19
28
  }
20
29
  export interface RecallEntriesInput extends SearchEntriesInput {
21
30
  maxChars?: number;
@@ -34,12 +43,15 @@ export interface RecallItem {
34
43
  untrusted: true;
35
44
  instructions: false;
36
45
  };
46
+ selectionReasons?: string[];
37
47
  }
38
48
  export interface RecallResult {
39
49
  items: RecallItem[];
40
50
  count: number;
41
51
  characterCount: number;
42
52
  truncated: boolean;
53
+ rerankerDiagnostics?: RerankerDiagnostics;
54
+ lessonDeduplicationDiagnostics?: LessonDeduplicationResult['diagnostics'];
43
55
  }
44
56
  export interface RankedRecallHit {
45
57
  entryId: string;
@@ -53,5 +65,7 @@ export interface RankedRecallResult {
53
65
  }
54
66
  export declare function rankedEntryHits(database: SqliteDatabase, input: SearchEntriesInput, runtime?: HybridSearchRuntime): RankedRecallResult;
55
67
  export declare function searchEntries(database: SqliteDatabase, input: SearchEntriesInput, runtime?: HybridSearchRuntime): SearchResult;
68
+ export declare function searchEntriesWithReranker(database: SqliteDatabase, input: SearchEntriesInput, runtime?: HybridSearchRuntime, signal?: AbortSignal): Promise<SearchResult>;
56
69
  export declare function recallEntries(database: SqliteDatabase, input: RecallEntriesInput, runtime?: HybridSearchRuntime): RecallResult;
70
+ export declare function recallEntriesWithReranker(database: SqliteDatabase, input: RecallEntriesInput, runtime?: HybridSearchRuntime, signal?: AbortSignal): Promise<RecallResult>;
57
71
  //# sourceMappingURL=retrieval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../src/memory/retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE;QACR,UAAU,EAAE,IAAI,CAAC;QACjB,SAAS,EAAE,IAAI,CAAC;QAChB,YAAY,EAAE,KAAK,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAgCD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAgBpB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,mBAAwB,GAChC,YAAY,CAKd;AAQD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,mBAAwB,GAChC,YAAY,CAsCd"}
1
+ {"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../src/memory/retrieval.ts"],"names":[],"mappings":"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"}