@synthaer/resonance 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +19 -0
  2. package/dist/cli.d.ts +9 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +40 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config.d.ts +24 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +44 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/contracts.d.ts +4 -0
  11. package/dist/contracts.d.ts.map +1 -0
  12. package/dist/contracts.js +2 -0
  13. package/dist/contracts.js.map +1 -0
  14. package/dist/db/local.d.ts +21 -0
  15. package/dist/db/local.d.ts.map +1 -0
  16. package/dist/db/local.js +158 -0
  17. package/dist/db/local.js.map +1 -0
  18. package/dist/db-types.d.ts +14 -0
  19. package/dist/db-types.d.ts.map +1 -0
  20. package/dist/db-types.js +2 -0
  21. package/dist/db-types.js.map +1 -0
  22. package/dist/dikw-pipeline.d.ts +31 -0
  23. package/dist/dikw-pipeline.d.ts.map +1 -0
  24. package/dist/dikw-pipeline.js +130 -0
  25. package/dist/dikw-pipeline.js.map +1 -0
  26. package/dist/embedding-provider.d.ts +25 -0
  27. package/dist/embedding-provider.d.ts.map +1 -0
  28. package/dist/embedding-provider.js +62 -0
  29. package/dist/embedding-provider.js.map +1 -0
  30. package/dist/embeddings/local.d.ts +31 -0
  31. package/dist/embeddings/local.d.ts.map +1 -0
  32. package/dist/embeddings/local.js +72 -0
  33. package/dist/embeddings/local.js.map +1 -0
  34. package/dist/encryption.d.ts +22 -0
  35. package/dist/encryption.d.ts.map +1 -0
  36. package/dist/encryption.js +39 -0
  37. package/dist/encryption.js.map +1 -0
  38. package/dist/index.d.ts +22 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/mcp-server.d.ts +362 -0
  43. package/dist/mcp-server.d.ts.map +1 -0
  44. package/dist/mcp-server.js +722 -0
  45. package/dist/mcp-server.js.map +1 -0
  46. package/dist/pki.d.ts +160 -0
  47. package/dist/pki.d.ts.map +1 -0
  48. package/dist/pki.js +502 -0
  49. package/dist/pki.js.map +1 -0
  50. package/dist/ratification.d.ts +125 -0
  51. package/dist/ratification.d.ts.map +1 -0
  52. package/dist/ratification.js +315 -0
  53. package/dist/ratification.js.map +1 -0
  54. package/dist/schema.d.ts +4 -0
  55. package/dist/schema.d.ts.map +1 -0
  56. package/dist/schema.js +119 -0
  57. package/dist/schema.js.map +1 -0
  58. package/dist/search.d.ts +33 -0
  59. package/dist/search.d.ts.map +1 -0
  60. package/dist/search.js +132 -0
  61. package/dist/search.js.map +1 -0
  62. package/dist/server.d.ts +11 -0
  63. package/dist/server.d.ts.map +1 -0
  64. package/dist/server.js +297 -0
  65. package/dist/server.js.map +1 -0
  66. package/dist/store.d.ts +77 -0
  67. package/dist/store.d.ts.map +1 -0
  68. package/dist/store.js +572 -0
  69. package/dist/store.js.map +1 -0
  70. package/dist/tools/cloud-gate.d.ts +72 -0
  71. package/dist/tools/cloud-gate.d.ts.map +1 -0
  72. package/dist/tools/cloud-gate.js +79 -0
  73. package/dist/tools/cloud-gate.js.map +1 -0
  74. package/dist/tools/experiences.d.ts +20 -0
  75. package/dist/tools/experiences.d.ts.map +1 -0
  76. package/dist/tools/experiences.js +135 -0
  77. package/dist/tools/experiences.js.map +1 -0
  78. package/dist/tools/knowledge.d.ts +37 -0
  79. package/dist/tools/knowledge.d.ts.map +1 -0
  80. package/dist/tools/knowledge.js +213 -0
  81. package/dist/tools/knowledge.js.map +1 -0
  82. package/dist/tools/sessions.d.ts +11 -0
  83. package/dist/tools/sessions.d.ts.map +1 -0
  84. package/dist/tools/sessions.js +66 -0
  85. package/dist/tools/sessions.js.map +1 -0
  86. package/dist/tools/trust.d.ts +18 -0
  87. package/dist/tools/trust.d.ts.map +1 -0
  88. package/dist/tools/trust.js +42 -0
  89. package/dist/tools/trust.js.map +1 -0
  90. package/dist/types.d.ts +75 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +16 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +50 -0
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Ratification Flow — wires PKI signing into the DIKW pipeline.
3
+ *
4
+ * Flow:
5
+ * 1. Agent writes knowledge/experience locally (stored immediately)
6
+ * 2. Content signed by agent cert + local identity cert (dual signatures)
7
+ * 3. Async message queued to Resonance Cloud with both signatures
8
+ * 4. Cloud verifies the chain (agent -> local -> Synthaer CA -> Root)
9
+ * 5. Cloud system-signs with the appropriate CI signer
10
+ * 6. Cloud stores both signatures on the entry
11
+ * 7. SSE notification sent back with cloud ratification signature
12
+ * 8. Local updates its record — entry is now "ratified"
13
+ */
14
+ import crypto from 'node:crypto';
15
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
16
+ import { join } from 'node:path';
17
+ import { signContent } from './pki.js';
18
+ const OPERATION_SIGNER_MAP = {
19
+ store_knowledge: { signer: 'ingestion', layerCode: '3D' },
20
+ store_experience: { signer: 'ingestion', layerCode: '3D' },
21
+ corroborate: { signer: 'corroboration', layerCode: '3F' },
22
+ endorse: { signer: 'endorsement', layerCode: '3G' },
23
+ challenge: { signer: 'challenge', layerCode: '3H' },
24
+ generate_embedding: { signer: 'embedding', layerCode: '3K' },
25
+ update_trust: { signer: 'trust-graph', layerCode: '3L' },
26
+ event_record: { signer: 'event-audit', layerCode: '3M' },
27
+ memory_checkpoint: { signer: 'session', layerCode: '3N' },
28
+ context_pack_build: { signer: 'context-pack', layerCode: '3O' },
29
+ batch_store_knowledge: { signer: 'ingestion', layerCode: '3D' },
30
+ batch_store_experiences: { signer: 'ingestion', layerCode: '3D' },
31
+ update_knowledge: { signer: 'ingestion', layerCode: '3D' },
32
+ update_experience: { signer: 'ingestion', layerCode: '3D' },
33
+ delete_knowledge: { signer: 'ingestion', layerCode: '3D' },
34
+ delete_experience: { signer: 'ingestion', layerCode: '3D' },
35
+ // Import operations
36
+ import_conversation: { signer: 'import', layerCode: '3E' },
37
+ import_detect_platform: { signer: 'import', layerCode: '3E' },
38
+ // Lifecycle operations
39
+ lifecycle_apply_decay: { signer: 'lifecycle', layerCode: '3J' },
40
+ lifecycle_calculate_strength: { signer: 'lifecycle', layerCode: '3J' },
41
+ // Session operations
42
+ session_resume: { signer: 'session', layerCode: '3N' },
43
+ // Embedding operations
44
+ process_unembedded_knowledge: { signer: 'embedding', layerCode: '3K' },
45
+ // Project governance (ACCORD-001)
46
+ hem_task_create: { signer: 'task-provenance', layerCode: '3R' },
47
+ hem_task_assign: { signer: 'task-provenance', layerCode: '3R' },
48
+ hem_task_transition: { signer: 'task-provenance', layerCode: '3R' },
49
+ hem_task_update: { signer: 'task-provenance', layerCode: '3R' },
50
+ hem_gate_sign_off: { signer: 'governance', layerCode: '3S' },
51
+ hem_accord_create: { signer: 'governance', layerCode: '3S' },
52
+ hem_amendment_create: { signer: 'governance', layerCode: '3S' },
53
+ hem_rejection_create: { signer: 'governance', layerCode: '3S' },
54
+ hem_rejection_resolve: { signer: 'governance', layerCode: '3S' },
55
+ hem_project_advance_foundation: { signer: 'governance', layerCode: '3S' },
56
+ hem_capability_advance_build: { signer: 'governance', layerCode: '3S' },
57
+ hem_capability_release: { signer: 'governance', layerCode: '3S' },
58
+ hem_agent_spawn: { signer: 'agent-lifecycle', layerCode: '3T' },
59
+ hem_agent_status: { signer: 'agent-lifecycle', layerCode: '3T' },
60
+ hem_agent_complete: { signer: 'agent-lifecycle', layerCode: '3T' },
61
+ hem_handoff_create: { signer: 'agent-lifecycle', layerCode: '3T' },
62
+ hem_handoff_accept: { signer: 'agent-lifecycle', layerCode: '3T' },
63
+ // Fleet orchestration
64
+ hem_agent_fleet_health: { signer: 'fleet', layerCode: '3U' },
65
+ // Ingestion-tier governance (no new signer needed)
66
+ hem_project_create: { signer: 'ingestion', layerCode: '3D' },
67
+ hem_project_update_compact: { signer: 'ingestion', layerCode: '3D' },
68
+ hem_capability_create: { signer: 'ingestion', layerCode: '3D' },
69
+ hem_estimate_record: { signer: 'ingestion', layerCode: '3D' },
70
+ hem_estimate_complete: { signer: 'ingestion', layerCode: '3D' },
71
+ hem_measure_record: { signer: 'ingestion', layerCode: '3D' },
72
+ };
73
+ /**
74
+ * Map a Resonance MCP operation name to its designated CI signer.
75
+ * Returns null for operations that do not require ratification.
76
+ */
77
+ export function mapOperationToSigner(operation) {
78
+ return OPERATION_SIGNER_MAP[operation] ?? null;
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Payload builder
82
+ // ---------------------------------------------------------------------------
83
+ /**
84
+ * Build the ratification payload sent to cloud. The content itself is NOT
85
+ * included — only its SHA-256 hash, plus the dual signatures and certs.
86
+ */
87
+ export function buildRatificationPayload(operation, content, agentSignature, localSignature, agentCertificate, localCertificate) {
88
+ const contentHash = crypto.createHash('sha256').update(content, 'utf-8').digest('hex');
89
+ return {
90
+ operation,
91
+ contentHash,
92
+ agentSignature,
93
+ localSignature,
94
+ agentCertificate,
95
+ localCertificate,
96
+ timestamp: new Date().toISOString(),
97
+ nonce: crypto.randomUUID(),
98
+ };
99
+ }
100
+ // ---------------------------------------------------------------------------
101
+ // Queue persistence
102
+ // ---------------------------------------------------------------------------
103
+ const QUEUE_FILENAME = 'ratification-queue.json';
104
+ async function loadQueueFromDisk(dataDir) {
105
+ const filePath = join(dataDir, QUEUE_FILENAME);
106
+ try {
107
+ const raw = await readFile(filePath, 'utf-8');
108
+ return JSON.parse(raw);
109
+ }
110
+ catch {
111
+ return [];
112
+ }
113
+ }
114
+ async function saveQueueToDisk(dataDir, queue) {
115
+ const filePath = join(dataDir, QUEUE_FILENAME);
116
+ await mkdir(dataDir, { recursive: true });
117
+ await writeFile(filePath, JSON.stringify(queue, null, 2), { mode: 0o600 });
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // RatificationManager
121
+ // ---------------------------------------------------------------------------
122
+ export class RatificationManager {
123
+ queue = [];
124
+ loaded = false;
125
+ config;
126
+ localIdentity;
127
+ cloudBaseUrl;
128
+ authToken;
129
+ maxRetries;
130
+ baseRetryDelayMs;
131
+ constructor(options) {
132
+ this.config = options.config;
133
+ this.localIdentity = options.localIdentity;
134
+ this.cloudBaseUrl = options.cloudBaseUrl.replace(/\/+$/, '');
135
+ this.authToken = options.authToken;
136
+ this.maxRetries = options.maxRetries ?? 5;
137
+ this.baseRetryDelayMs = options.baseRetryDelayMs ?? 1000;
138
+ }
139
+ /**
140
+ * Load persisted queue from disk. Safe to call multiple times.
141
+ */
142
+ async loadQueue() {
143
+ if (this.loaded)
144
+ return;
145
+ this.queue = await loadQueueFromDisk(this.config.dataDir);
146
+ this.loaded = true;
147
+ }
148
+ /**
149
+ * Return a snapshot of the current queue.
150
+ */
151
+ getQueue() {
152
+ return this.queue;
153
+ }
154
+ /**
155
+ * Get a single queue entry by ID.
156
+ */
157
+ getEntry(id) {
158
+ return this.queue.find((e) => e.id === id);
159
+ }
160
+ /**
161
+ * Sign content with both agent and local identity certs, build the
162
+ * ratification payload, and add it to the queue for async cloud submission.
163
+ */
164
+ async signAndQueue(operation, content, agentIdentity, recordId, recordTable) {
165
+ await this.loadQueue();
166
+ if (!this.localIdentity.certificate || !this.localIdentity.fingerprint) {
167
+ throw new Error('Local identity must have a signed certificate before ratification');
168
+ }
169
+ const agentSignature = signContent(content, agentIdentity.privateKey, agentIdentity.fingerprint);
170
+ const localSignature = signContent(content, this.localIdentity.privateKey, this.localIdentity.fingerprint);
171
+ const payload = buildRatificationPayload(operation, content, agentSignature, localSignature, agentIdentity.certificate, this.localIdentity.certificate);
172
+ const now = new Date().toISOString();
173
+ const entry = {
174
+ id: crypto.randomUUID(),
175
+ payload,
176
+ status: 'pending',
177
+ recordId,
178
+ recordTable,
179
+ attempts: 0,
180
+ lastAttemptAt: null,
181
+ nextRetryAt: null,
182
+ cloudSignature: null,
183
+ createdAt: now,
184
+ updatedAt: now,
185
+ errorMessage: null,
186
+ };
187
+ this.queue.push(entry);
188
+ await this.persistQueue();
189
+ return entry.id;
190
+ }
191
+ /**
192
+ * Process all pending/retryable queue entries by sending them to cloud.
193
+ * Returns the number of entries that were submitted.
194
+ */
195
+ async processQueue() {
196
+ await this.loadQueue();
197
+ const now = Date.now();
198
+ const results = { submitted: 0, ratified: 0, rejected: 0, errors: 0 };
199
+ for (const entry of this.queue) {
200
+ if (entry.status === 'ratified' || entry.status === 'rejected')
201
+ continue;
202
+ if (entry.attempts >= this.maxRetries)
203
+ continue;
204
+ // Check retry delay
205
+ if (entry.nextRetryAt && new Date(entry.nextRetryAt).getTime() > now)
206
+ continue;
207
+ entry.status = 'submitted';
208
+ entry.attempts += 1;
209
+ entry.lastAttemptAt = new Date().toISOString();
210
+ entry.updatedAt = new Date().toISOString();
211
+ results.submitted += 1;
212
+ try {
213
+ const response = await this.submitToCloud(entry);
214
+ this.applyResponse(entry, response);
215
+ if (response.status === 'ratified') {
216
+ results.ratified += 1;
217
+ }
218
+ else {
219
+ results.rejected += 1;
220
+ }
221
+ }
222
+ catch (err) {
223
+ results.errors += 1;
224
+ entry.errorMessage = err instanceof Error ? err.message : String(err);
225
+ // Revert to pending for retry
226
+ entry.status = 'pending';
227
+ // Exponential backoff: baseDelay * 2^(attempts-1)
228
+ const delay = this.baseRetryDelayMs * Math.pow(2, entry.attempts - 1);
229
+ entry.nextRetryAt = new Date(Date.now() + delay).toISOString();
230
+ entry.updatedAt = new Date().toISOString();
231
+ }
232
+ }
233
+ await this.persistQueue();
234
+ return results;
235
+ }
236
+ /**
237
+ * Handle a ratification response (e.g., from SSE push or manual poll).
238
+ * Updates the queue entry and returns whether the entry was found.
239
+ */
240
+ handleRatificationResponse(response) {
241
+ const entry = this.queue.find((e) => e.id === response.entryId);
242
+ if (!entry)
243
+ return false;
244
+ this.applyResponse(entry, response);
245
+ // Fire-and-forget persist; caller should await persistQueue() if needed
246
+ void this.persistQueue();
247
+ return true;
248
+ }
249
+ /**
250
+ * Persist current queue state to disk.
251
+ */
252
+ async persistQueue() {
253
+ await saveQueueToDisk(this.config.dataDir, this.queue);
254
+ }
255
+ /**
256
+ * Get all entries with a given status.
257
+ */
258
+ getEntriesByStatus(status) {
259
+ return this.queue.filter((e) => e.status === status);
260
+ }
261
+ /**
262
+ * Remove completed (ratified/rejected) entries older than the given age.
263
+ */
264
+ async pruneCompleted(maxAgeMs) {
265
+ const cutoff = Date.now() - maxAgeMs;
266
+ const before = this.queue.length;
267
+ this.queue = this.queue.filter((e) => {
268
+ if (e.status !== 'ratified' && e.status !== 'rejected')
269
+ return true;
270
+ return new Date(e.updatedAt).getTime() > cutoff;
271
+ });
272
+ const removed = before - this.queue.length;
273
+ if (removed > 0)
274
+ await this.persistQueue();
275
+ return removed;
276
+ }
277
+ // -------------------------------------------------------------------------
278
+ // Private helpers
279
+ // -------------------------------------------------------------------------
280
+ applyResponse(entry, response) {
281
+ entry.status = response.status;
282
+ entry.updatedAt = new Date().toISOString();
283
+ if (response.status === 'ratified' && response.cloudSignature) {
284
+ entry.cloudSignature = response.cloudSignature;
285
+ }
286
+ if (response.status === 'rejected' && response.reason) {
287
+ entry.errorMessage = response.reason;
288
+ }
289
+ }
290
+ async submitToCloud(entry) {
291
+ const signer = mapOperationToSigner(entry.payload.operation);
292
+ const body = {
293
+ entryId: entry.id,
294
+ payload: entry.payload,
295
+ recordId: entry.recordId,
296
+ recordTable: entry.recordTable,
297
+ expectedSigner: signer?.signer ?? null,
298
+ expectedLayerCode: signer?.layerCode ?? null,
299
+ };
300
+ const response = await fetch(`${this.cloudBaseUrl}/api/v1/pki/ratify`, {
301
+ method: 'POST',
302
+ headers: {
303
+ 'Content-Type': 'application/json',
304
+ 'Authorization': `Bearer ${this.authToken}`,
305
+ },
306
+ body: JSON.stringify(body),
307
+ });
308
+ if (!response.ok) {
309
+ const errorText = await response.text();
310
+ throw new Error(`Cloud ratification failed (${response.status}): ${errorText}`);
311
+ }
312
+ return response.json();
313
+ }
314
+ }
315
+ //# sourceMappingURL=ratification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratification.js","sourceRoot":"","sources":["../src/ratification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IAsyncDatabase } from './db-types.js';
2
+ export declare function initializeResonanceSchema(db: IAsyncDatabase): Promise<void>;
3
+ export declare function createVectorIndexes(db: IAsyncDatabase): Promise<void>;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAmGpD,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3E"}
package/dist/schema.js ADDED
@@ -0,0 +1,119 @@
1
+ const SCHEMA_SQL = `
2
+ CREATE EXTENSION IF NOT EXISTS vector;
3
+
4
+ CREATE TABLE IF NOT EXISTS knowledge (
5
+ id TEXT PRIMARY KEY,
6
+ content TEXT NOT NULL,
7
+ kind INTEGER NOT NULL,
8
+ dikw_stage TEXT NOT NULL DEFAULT 'nascent',
9
+ strength REAL NOT NULL DEFAULT 0.5,
10
+ tags JSONB NOT NULL DEFAULT '[]'::jsonb,
11
+ source_count INTEGER NOT NULL DEFAULT 1,
12
+ context_count INTEGER NOT NULL DEFAULT 1,
13
+ project_id TEXT,
14
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
15
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
16
+ last_accessed_at TIMESTAMPTZ,
17
+ decay_rate REAL NOT NULL DEFAULT 0.01,
18
+ user_id TEXT NOT NULL DEFAULT 'system',
19
+ local_embedding vector(384),
20
+ cloud_embedding vector(1536)
21
+ );
22
+
23
+ CREATE INDEX IF NOT EXISTS idx_knowledge_dikw_stage ON knowledge(dikw_stage);
24
+ CREATE INDEX IF NOT EXISTS idx_knowledge_project_id ON knowledge(project_id);
25
+ CREATE INDEX IF NOT EXISTS idx_knowledge_kind ON knowledge(kind);
26
+ CREATE INDEX IF NOT EXISTS idx_knowledge_strength ON knowledge(strength);
27
+ CREATE INDEX IF NOT EXISTS idx_knowledge_updated_at ON knowledge(updated_at);
28
+ CREATE INDEX IF NOT EXISTS idx_knowledge_user_id ON knowledge(user_id);
29
+
30
+ CREATE TABLE IF NOT EXISTS experiences (
31
+ id TEXT PRIMARY KEY,
32
+ agent_id TEXT,
33
+ session_id TEXT,
34
+ content TEXT NOT NULL,
35
+ kind INTEGER NOT NULL,
36
+ project_id TEXT,
37
+ related_knowledge_ids JSONB NOT NULL DEFAULT '[]'::jsonb,
38
+ local_signature JSONB,
39
+ signer_type TEXT NOT NULL DEFAULT 'human',
40
+ signer_fingerprint TEXT,
41
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
42
+ user_id TEXT NOT NULL DEFAULT 'system',
43
+ local_embedding vector(384),
44
+ cloud_embedding vector(1536)
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_experiences_project_id ON experiences(project_id);
48
+ CREATE INDEX IF NOT EXISTS idx_experiences_kind ON experiences(kind);
49
+ CREATE INDEX IF NOT EXISTS idx_experiences_session_id ON experiences(session_id);
50
+ CREATE INDEX IF NOT EXISTS idx_experiences_created_at ON experiences(created_at);
51
+ CREATE INDEX IF NOT EXISTS idx_experiences_user_id ON experiences(user_id);
52
+ CREATE INDEX IF NOT EXISTS idx_experiences_signer_type ON experiences(signer_type);
53
+ CREATE INDEX IF NOT EXISTS idx_experiences_signer_fingerprint ON experiences(signer_fingerprint);
54
+
55
+ CREATE TABLE IF NOT EXISTS sessions (
56
+ id TEXT PRIMARY KEY,
57
+ agent_id TEXT,
58
+ project_id TEXT,
59
+ checkpoint JSONB,
60
+ memory JSONB NOT NULL DEFAULT '[]'::jsonb,
61
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
62
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
63
+ user_id TEXT NOT NULL DEFAULT 'system'
64
+ );
65
+
66
+ CREATE INDEX IF NOT EXISTS idx_sessions_agent_project ON sessions(agent_id, project_id);
67
+ CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id);
68
+
69
+ CREATE TABLE IF NOT EXISTS maturation_log (
70
+ id SERIAL PRIMARY KEY,
71
+ knowledge_id TEXT NOT NULL,
72
+ from_stage TEXT NOT NULL,
73
+ to_stage TEXT NOT NULL,
74
+ reason TEXT,
75
+ triggered_by TEXT,
76
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
77
+ user_id TEXT NOT NULL DEFAULT 'system'
78
+ );
79
+
80
+ CREATE INDEX IF NOT EXISTS idx_maturation_log_knowledge_id ON maturation_log(knowledge_id);
81
+ CREATE INDEX IF NOT EXISTS idx_maturation_log_user_id ON maturation_log(user_id);
82
+
83
+ CREATE TABLE IF NOT EXISTS memory_events (
84
+ id SERIAL PRIMARY KEY,
85
+ event_type TEXT NOT NULL,
86
+ source_id TEXT,
87
+ source_type TEXT,
88
+ metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
89
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
90
+ user_id TEXT NOT NULL DEFAULT 'system'
91
+ );
92
+
93
+ CREATE INDEX IF NOT EXISTS idx_memory_events_type ON memory_events(event_type);
94
+ CREATE INDEX IF NOT EXISTS idx_memory_events_created_at ON memory_events(created_at);
95
+ CREATE INDEX IF NOT EXISTS idx_memory_events_user_id ON memory_events(user_id);
96
+ `;
97
+ export async function initializeResonanceSchema(db) {
98
+ await db.exec(SCHEMA_SQL);
99
+ }
100
+ export async function createVectorIndexes(db) {
101
+ await db.exec(`
102
+ CREATE INDEX IF NOT EXISTS idx_knowledge_local_embedding
103
+ ON knowledge USING hnsw (local_embedding vector_cosine_ops)
104
+ WITH (m = 16, ef_construction = 64);
105
+
106
+ CREATE INDEX IF NOT EXISTS idx_knowledge_cloud_embedding
107
+ ON knowledge USING hnsw (cloud_embedding vector_cosine_ops)
108
+ WITH (m = 16, ef_construction = 64);
109
+
110
+ CREATE INDEX IF NOT EXISTS idx_experiences_local_embedding
111
+ ON experiences USING hnsw (local_embedding vector_cosine_ops)
112
+ WITH (m = 16, ef_construction = 64);
113
+
114
+ CREATE INDEX IF NOT EXISTS idx_experiences_cloud_embedding
115
+ ON experiences USING hnsw (cloud_embedding vector_cosine_ops)
116
+ WITH (m = 16, ef_construction = 64);
117
+ `);
118
+ }
119
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FlB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAkB;IAChE,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAkB;IAC1D,MAAM,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;GAgBb,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { IAsyncDatabase } from './db-types.js';
2
+ export interface VectorSearchResult {
3
+ id: string;
4
+ score: number;
5
+ source: 'knowledge' | 'experience';
6
+ }
7
+ export declare class TfIdfSearch {
8
+ protected documents: Map<string, {
9
+ id: string;
10
+ source: 'knowledge' | 'experience';
11
+ terms: string[];
12
+ termFrequency: Map<string, number>;
13
+ }>;
14
+ protected documentFrequency: Map<string, number>;
15
+ protected totalDocuments: number;
16
+ search(query: string, limit?: number): VectorSearchResult[];
17
+ buildIndex(items: Array<{
18
+ id: string;
19
+ content: string;
20
+ source: 'knowledge' | 'experience';
21
+ }>): void;
22
+ addToIndex(id: string, content: string, source: 'knowledge' | 'experience'): void;
23
+ removeFromIndex(id: string): void;
24
+ protected tokenize(text: string): string[];
25
+ }
26
+ export declare class ResonanceSearch extends TfIdfSearch {
27
+ private db;
28
+ setDatabase(db: IAsyncDatabase): void;
29
+ hybridSearch(queryText: string, limit?: number, queryVector?: number[]): Promise<VectorSearchResult[]>;
30
+ private vectorSearch;
31
+ tfidfSearch(query: string, limit?: number): VectorSearchResult[];
32
+ }
33
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAepD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,YAAY,CAAC;CACpC;AAED,qBAAa,WAAW;IACtB,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAa;IACtJ,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC7D,SAAS,CAAC,cAAc,SAAK;IAE7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,kBAAkB,EAAE;IA6BvD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAAA;KAAE,CAAC,GAAG,IAAI;IAUnG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,IAAI;IA0BjF,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkBjC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAM3C;AAED,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,OAAO,CAAC,EAAE,CAA+B;IAEzC,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAI/B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAQ1F,YAAY;IAiC1B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,kBAAkB,EAAE;CAG7D"}
package/dist/search.js ADDED
@@ -0,0 +1,132 @@
1
+ const STOP_WORDS = new Set([
2
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
3
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'shall',
4
+ 'should', 'may', 'might', 'must', 'can', 'could', 'in', 'on', 'at',
5
+ 'to', 'for', 'of', 'with', 'by', 'from', 'as', 'into', 'through',
6
+ 'during', 'before', 'after', 'above', 'below', 'between', 'out', 'off',
7
+ 'over', 'under', 'again', 'further', 'then', 'once', 'here', 'there',
8
+ 'when', 'where', 'why', 'how', 'all', 'both', 'each', 'few', 'more',
9
+ 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own',
10
+ 'same', 'so', 'than', 'too', 'very', 'just', 'because', 'but', 'and',
11
+ 'or', 'if', 'while', 'this', 'that', 'these', 'those', 'it', 'its',
12
+ ]);
13
+ export class TfIdfSearch {
14
+ documents = new Map();
15
+ documentFrequency = new Map();
16
+ totalDocuments = 0;
17
+ search(query, limit = 20) {
18
+ const queryTerms = this.tokenize(query);
19
+ if (queryTerms.length === 0)
20
+ return [];
21
+ const scores = [];
22
+ for (const [, doc] of this.documents) {
23
+ let score = 0;
24
+ for (const term of queryTerms) {
25
+ const tf = doc.termFrequency.get(term) ?? 0;
26
+ if (tf === 0)
27
+ continue;
28
+ const df = this.documentFrequency.get(term) ?? 0;
29
+ if (df === 0)
30
+ continue;
31
+ const idf = Math.log(1 + this.totalDocuments / df);
32
+ score += tf * idf;
33
+ }
34
+ if (score > 0) {
35
+ scores.push({ id: doc.id, score, source: doc.source });
36
+ }
37
+ }
38
+ scores.sort((a, b) => b.score - a.score);
39
+ return scores.slice(0, limit);
40
+ }
41
+ buildIndex(items) {
42
+ this.documents.clear();
43
+ this.documentFrequency.clear();
44
+ this.totalDocuments = 0;
45
+ for (const item of items) {
46
+ this.addToIndex(item.id, item.content, item.source);
47
+ }
48
+ }
49
+ addToIndex(id, content, source) {
50
+ const terms = this.tokenize(content);
51
+ if (terms.length === 0) {
52
+ this.documents.set(id, { id, source, terms: [], termFrequency: new Map() });
53
+ this.totalDocuments++;
54
+ return;
55
+ }
56
+ const termFrequency = new Map();
57
+ for (const term of terms) {
58
+ termFrequency.set(term, (termFrequency.get(term) ?? 0) + 1);
59
+ }
60
+ for (const [term, count] of termFrequency) {
61
+ termFrequency.set(term, count / terms.length);
62
+ }
63
+ const uniqueTerms = new Set(terms);
64
+ for (const term of uniqueTerms) {
65
+ this.documentFrequency.set(term, (this.documentFrequency.get(term) ?? 0) + 1);
66
+ }
67
+ this.documents.set(id, { id, source, terms, termFrequency });
68
+ this.totalDocuments++;
69
+ }
70
+ removeFromIndex(id) {
71
+ const doc = this.documents.get(id);
72
+ if (!doc)
73
+ return;
74
+ const uniqueTerms = new Set(doc.terms);
75
+ for (const term of uniqueTerms) {
76
+ const currentDf = this.documentFrequency.get(term) ?? 0;
77
+ if (currentDf <= 1) {
78
+ this.documentFrequency.delete(term);
79
+ }
80
+ else {
81
+ this.documentFrequency.set(term, currentDf - 1);
82
+ }
83
+ }
84
+ this.documents.delete(id);
85
+ this.totalDocuments--;
86
+ }
87
+ tokenize(text) {
88
+ return text
89
+ .toLowerCase()
90
+ .split(/[^a-z0-9]+/)
91
+ .filter((token) => token.length > 0 && !STOP_WORDS.has(token));
92
+ }
93
+ }
94
+ export class ResonanceSearch extends TfIdfSearch {
95
+ db = null;
96
+ setDatabase(db) {
97
+ this.db = db;
98
+ }
99
+ async hybridSearch(queryText, limit = 20, queryVector) {
100
+ if (queryVector && this.db) {
101
+ return this.vectorSearch(queryVector, limit);
102
+ }
103
+ return this.search(queryText, limit);
104
+ }
105
+ async vectorSearch(queryVector, limit) {
106
+ if (!this.db)
107
+ return [];
108
+ const vectorStr = `[${queryVector.join(',')}]`;
109
+ const [knowledgeResults, experienceResults] = await Promise.all([
110
+ this.db.query(`SELECT id, 1 - (local_embedding <=> $1::vector) as similarity
111
+ FROM knowledge
112
+ WHERE local_embedding IS NOT NULL
113
+ ORDER BY local_embedding <=> $1::vector
114
+ LIMIT $2`, [vectorStr, limit]),
115
+ this.db.query(`SELECT id, 1 - (local_embedding <=> $1::vector) as similarity
116
+ FROM experiences
117
+ WHERE local_embedding IS NOT NULL
118
+ ORDER BY local_embedding <=> $1::vector
119
+ LIMIT $2`, [vectorStr, limit]),
120
+ ]);
121
+ const results = [
122
+ ...knowledgeResults.rows.map((r) => ({ id: r.id, score: r.similarity, source: 'knowledge' })),
123
+ ...experienceResults.rows.map((r) => ({ id: r.id, score: r.similarity, source: 'experience' })),
124
+ ];
125
+ results.sort((a, b) => b.score - a.score);
126
+ return results.slice(0, limit);
127
+ }
128
+ tfidfSearch(query, limit = 20) {
129
+ return this.search(query, limit);
130
+ }
131
+ }
132
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PGlite } from '@electric-sql/pglite';
2
+ import type { EmbeddingProvider } from './embeddings/local.js';
3
+ import type { ResonanceMode } from './config.js';
4
+ export interface ResonanceServerOptions {
5
+ db: PGlite;
6
+ embedder: EmbeddingProvider | null;
7
+ mode: ResonanceMode;
8
+ dataDir: string;
9
+ }
10
+ export declare function startServer(options: ResonanceServerOptions): Promise<void>;
11
+ //# sourceMappingURL=server.d.ts.map