agentdb 1.0.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.
- package/LICENSE +38 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +953 -0
- package/bin/agentdb.js +485 -0
- package/bin/plugin-cli-wrapper.mjs +21 -0
- package/dist/cache/query-cache.d.ts +105 -0
- package/dist/cache/query-cache.d.ts.map +1 -0
- package/dist/cache/query-cache.js +224 -0
- package/dist/cache/query-cache.js.map +1 -0
- package/dist/cache/query-cache.mjs +219 -0
- package/dist/cli/cache/query-cache.d.ts +104 -0
- package/dist/cli/cache/query-cache.js +244 -0
- package/dist/cli/cli/db-commands.d.ts +48 -0
- package/dist/cli/cli/db-commands.js +613 -0
- package/dist/cli/commands.d.ts +7 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +113 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/commands.mjs +104 -0
- package/dist/cli/core/backend-interface.d.ts +70 -0
- package/dist/cli/core/backend-interface.js +15 -0
- package/dist/cli/core/native-backend.d.ts +140 -0
- package/dist/cli/core/native-backend.js +432 -0
- package/dist/cli/core/vector-db.d.ts +126 -0
- package/dist/cli/core/vector-db.js +338 -0
- package/dist/cli/core/wasm-backend.d.ts +95 -0
- package/dist/cli/core/wasm-backend.js +418 -0
- package/dist/cli/db-commands.d.ts +49 -0
- package/dist/cli/db-commands.d.ts.map +1 -0
- package/dist/cli/db-commands.js +533 -0
- package/dist/cli/db-commands.js.map +1 -0
- package/dist/cli/db-commands.mjs +522 -0
- package/dist/cli/generator.d.ts +11 -0
- package/dist/cli/generator.d.ts.map +1 -0
- package/dist/cli/generator.js +567 -0
- package/dist/cli/generator.js.map +1 -0
- package/dist/cli/generator.mjs +527 -0
- package/dist/cli/help.d.ts +18 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +676 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/help.mjs +667 -0
- package/dist/cli/index/hnsw.d.ts +164 -0
- package/dist/cli/index/hnsw.js +558 -0
- package/dist/cli/plugin-cli.d.ts +7 -0
- package/dist/cli/plugin-cli.d.ts.map +1 -0
- package/dist/cli/plugin-cli.js +295 -0
- package/dist/cli/plugin-cli.js.map +1 -0
- package/dist/cli/plugin-cli.mjs +289 -0
- package/dist/cli/quantization/product-quantization.d.ts +108 -0
- package/dist/cli/quantization/product-quantization.js +350 -0
- package/dist/cli/query/query-builder.d.ts +322 -0
- package/dist/cli/query/query-builder.js +600 -0
- package/dist/cli/templates.d.ts +14 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +182 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/templates.mjs +176 -0
- package/dist/cli/types/index.d.ts +116 -0
- package/dist/cli/types/index.js +5 -0
- package/dist/cli/types.d.ts +91 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +6 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/types.mjs +4 -0
- package/dist/cli/wizard/index.d.ts +6 -0
- package/dist/cli/wizard/index.d.ts.map +1 -0
- package/dist/cli/wizard/index.js +138 -0
- package/dist/cli/wizard/index.js.map +1 -0
- package/dist/cli/wizard/index.mjs +131 -0
- package/dist/cli/wizard/prompts.d.ts +11 -0
- package/dist/cli/wizard/prompts.d.ts.map +1 -0
- package/dist/cli/wizard/prompts.js +482 -0
- package/dist/cli/wizard/prompts.js.map +1 -0
- package/dist/cli/wizard/prompts.mjs +470 -0
- package/dist/cli/wizard/validator.d.ts +13 -0
- package/dist/cli/wizard/validator.d.ts.map +1 -0
- package/dist/cli/wizard/validator.js +234 -0
- package/dist/cli/wizard/validator.js.map +1 -0
- package/dist/cli/wizard/validator.mjs +224 -0
- package/dist/core/backend-interface.d.ts +71 -0
- package/dist/core/backend-interface.d.ts.map +1 -0
- package/dist/core/backend-interface.js +16 -0
- package/dist/core/backend-interface.js.map +1 -0
- package/dist/core/backend-interface.mjs +12 -0
- package/dist/core/native-backend.d.ts +141 -0
- package/dist/core/native-backend.d.ts.map +1 -0
- package/dist/core/native-backend.js +457 -0
- package/dist/core/native-backend.js.map +1 -0
- package/dist/core/native-backend.mjs +449 -0
- package/dist/core/vector-db.d.ts +127 -0
- package/dist/core/vector-db.d.ts.map +1 -0
- package/dist/core/vector-db.js +266 -0
- package/dist/core/vector-db.js.map +1 -0
- package/dist/core/vector-db.mjs +261 -0
- package/dist/core/wasm-backend.d.ts +96 -0
- package/dist/core/wasm-backend.d.ts.map +1 -0
- package/dist/core/wasm-backend.js +393 -0
- package/dist/core/wasm-backend.js.map +1 -0
- package/dist/core/wasm-backend.mjs +385 -0
- package/dist/index/hnsw-optimized.d.ts +75 -0
- package/dist/index/hnsw-optimized.d.ts.map +1 -0
- package/dist/index/hnsw-optimized.js +412 -0
- package/dist/index/hnsw-optimized.js.map +1 -0
- package/dist/index/hnsw-optimized.mjs +407 -0
- package/dist/index/hnsw.d.ts +165 -0
- package/dist/index/hnsw.d.ts.map +1 -0
- package/dist/index/hnsw.js +521 -0
- package/dist/index/hnsw.js.map +1 -0
- package/dist/index/hnsw.mjs +516 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +63 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +789 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-server.mjs +784 -0
- package/dist/plugins/base-plugin.d.ts +114 -0
- package/dist/plugins/base-plugin.d.ts.map +1 -0
- package/dist/plugins/base-plugin.js +313 -0
- package/dist/plugins/base-plugin.js.map +1 -0
- package/dist/plugins/base-plugin.mjs +275 -0
- package/dist/plugins/implementations/active-learning.d.ts +135 -0
- package/dist/plugins/implementations/active-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/active-learning.js +372 -0
- package/dist/plugins/implementations/active-learning.js.map +1 -0
- package/dist/plugins/implementations/active-learning.mjs +367 -0
- package/dist/plugins/implementations/actor-critic.d.ts +64 -0
- package/dist/plugins/implementations/actor-critic.d.ts.map +1 -0
- package/dist/plugins/implementations/actor-critic.js +363 -0
- package/dist/plugins/implementations/actor-critic.js.map +1 -0
- package/dist/plugins/implementations/actor-critic.mjs +358 -0
- package/dist/plugins/implementations/adversarial-training.d.ts +133 -0
- package/dist/plugins/implementations/adversarial-training.d.ts.map +1 -0
- package/dist/plugins/implementations/adversarial-training.js +409 -0
- package/dist/plugins/implementations/adversarial-training.js.map +1 -0
- package/dist/plugins/implementations/adversarial-training.mjs +404 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts +132 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.js +354 -0
- package/dist/plugins/implementations/curriculum-learning.js.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.mjs +349 -0
- package/dist/plugins/implementations/decision-transformer.d.ts +77 -0
- package/dist/plugins/implementations/decision-transformer.d.ts.map +1 -0
- package/dist/plugins/implementations/decision-transformer.js +422 -0
- package/dist/plugins/implementations/decision-transformer.js.map +1 -0
- package/dist/plugins/implementations/decision-transformer.mjs +417 -0
- package/dist/plugins/implementations/federated-learning.d.ts +126 -0
- package/dist/plugins/implementations/federated-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/federated-learning.js +436 -0
- package/dist/plugins/implementations/federated-learning.js.map +1 -0
- package/dist/plugins/implementations/federated-learning.mjs +431 -0
- package/dist/plugins/implementations/index.d.ts +30 -0
- package/dist/plugins/implementations/index.d.ts.map +1 -0
- package/dist/plugins/implementations/index.js +45 -0
- package/dist/plugins/implementations/index.js.map +1 -0
- package/dist/plugins/implementations/index.mjs +31 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts +115 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.js +369 -0
- package/dist/plugins/implementations/multi-task-learning.js.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.mjs +364 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts +148 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.js +379 -0
- package/dist/plugins/implementations/neural-architecture-search.js.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.mjs +374 -0
- package/dist/plugins/implementations/q-learning.d.ts +98 -0
- package/dist/plugins/implementations/q-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/q-learning.js +435 -0
- package/dist/plugins/implementations/q-learning.js.map +1 -0
- package/dist/plugins/implementations/q-learning.mjs +430 -0
- package/dist/plugins/implementations/sarsa.d.ts +103 -0
- package/dist/plugins/implementations/sarsa.d.ts.map +1 -0
- package/dist/plugins/implementations/sarsa.js +347 -0
- package/dist/plugins/implementations/sarsa.js.map +1 -0
- package/dist/plugins/implementations/sarsa.mjs +342 -0
- package/dist/plugins/index.d.ts +107 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +179 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/index.mjs +168 -0
- package/dist/plugins/interface.d.ts +439 -0
- package/dist/plugins/interface.d.ts.map +1 -0
- package/dist/plugins/interface.js +12 -0
- package/dist/plugins/interface.js.map +1 -0
- package/dist/plugins/interface.mjs +10 -0
- package/dist/plugins/learning-plugin.interface.d.ts +257 -0
- package/dist/plugins/learning-plugin.interface.d.ts.map +1 -0
- package/dist/plugins/learning-plugin.interface.js +7 -0
- package/dist/plugins/learning-plugin.interface.js.map +1 -0
- package/dist/plugins/learning-plugin.interface.mjs +5 -0
- package/dist/plugins/plugin-exports.d.ts +71 -0
- package/dist/plugins/plugin-exports.d.ts.map +1 -0
- package/dist/plugins/plugin-exports.js +78 -0
- package/dist/plugins/plugin-exports.js.map +1 -0
- package/dist/plugins/plugin-exports.mjs +69 -0
- package/dist/plugins/registry.d.ts +206 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +365 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/registry.mjs +356 -0
- package/dist/plugins/validator.d.ts +63 -0
- package/dist/plugins/validator.d.ts.map +1 -0
- package/dist/plugins/validator.js +464 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/plugins/validator.mjs +458 -0
- package/dist/quantization/binary-quantization.d.ts +104 -0
- package/dist/quantization/binary-quantization.d.ts.map +1 -0
- package/dist/quantization/binary-quantization.js +246 -0
- package/dist/quantization/binary-quantization.js.map +1 -0
- package/dist/quantization/binary-quantization.mjs +240 -0
- package/dist/quantization/optimized-pq.d.ts +138 -0
- package/dist/quantization/optimized-pq.d.ts.map +1 -0
- package/dist/quantization/optimized-pq.js +320 -0
- package/dist/quantization/optimized-pq.js.map +1 -0
- package/dist/quantization/optimized-pq.mjs +313 -0
- package/dist/quantization/product-quantization.d.ts +109 -0
- package/dist/quantization/product-quantization.d.ts.map +1 -0
- package/dist/quantization/product-quantization.js +287 -0
- package/dist/quantization/product-quantization.js.map +1 -0
- package/dist/quantization/product-quantization.mjs +282 -0
- package/dist/quantization/scalar-quantization.d.ts +100 -0
- package/dist/quantization/scalar-quantization.d.ts.map +1 -0
- package/dist/quantization/scalar-quantization.js +324 -0
- package/dist/quantization/scalar-quantization.js.map +1 -0
- package/dist/quantization/scalar-quantization.mjs +319 -0
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +9 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/index.mjs +4 -0
- package/dist/query/query-builder.d.ts +323 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +524 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-builder.mjs +519 -0
- package/dist/reasoning/context-synthesizer.d.ts +57 -0
- package/dist/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoning/context-synthesizer.js +224 -0
- package/dist/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoning/context-synthesizer.mjs +219 -0
- package/dist/reasoning/experience-curator.d.ts +66 -0
- package/dist/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoning/experience-curator.js +288 -0
- package/dist/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoning/experience-curator.mjs +283 -0
- package/dist/reasoning/memory-optimizer.d.ts +69 -0
- package/dist/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoning/memory-optimizer.js +331 -0
- package/dist/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoning/memory-optimizer.mjs +326 -0
- package/dist/reasoning/pattern-matcher.d.ts +59 -0
- package/dist/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoning/pattern-matcher.js +229 -0
- package/dist/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoning/pattern-matcher.mjs +224 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +118 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js +477 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js.map +1 -0
- package/dist/reasoningbank/adapter/types.d.ts +113 -0
- package/dist/reasoningbank/adapter/types.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/types.js +9 -0
- package/dist/reasoningbank/adapter/types.js.map +1 -0
- package/dist/reasoningbank/cli/commands.d.ts +16 -0
- package/dist/reasoningbank/cli/commands.d.ts.map +1 -0
- package/dist/reasoningbank/cli/commands.js +272 -0
- package/dist/reasoningbank/cli/commands.js.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts +319 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js +301 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js.map +1 -0
- package/dist/reasoningbank/migration/migrate.d.ts +25 -0
- package/dist/reasoningbank/migration/migrate.d.ts.map +1 -0
- package/dist/reasoningbank/migration/migrate.js +178 -0
- package/dist/reasoningbank/migration/migrate.js.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +37 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js +114 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts +39 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.js +98 -0
- package/dist/reasoningbank/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +44 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js +184 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +40 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js +87 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts +77 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.js +165 -0
- package/dist/reasoningbank/sync/quic-sync.js.map +1 -0
- package/dist/sync/conflict.d.ts +78 -0
- package/dist/sync/conflict.d.ts.map +1 -0
- package/dist/sync/conflict.js +202 -0
- package/dist/sync/conflict.js.map +1 -0
- package/dist/sync/conflict.mjs +196 -0
- package/dist/sync/coordinator.d.ts +111 -0
- package/dist/sync/coordinator.d.ts.map +1 -0
- package/dist/sync/coordinator.js +256 -0
- package/dist/sync/coordinator.js.map +1 -0
- package/dist/sync/coordinator.mjs +250 -0
- package/dist/sync/delta.d.ts +81 -0
- package/dist/sync/delta.d.ts.map +1 -0
- package/dist/sync/delta.js +245 -0
- package/dist/sync/delta.js.map +1 -0
- package/dist/sync/delta.mjs +238 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +22 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +9 -0
- package/dist/sync/quic-sync.d.ts +81 -0
- package/dist/sync/quic-sync.d.ts.map +1 -0
- package/dist/sync/quic-sync.js +329 -0
- package/dist/sync/quic-sync.js.map +1 -0
- package/dist/sync/quic-sync.mjs +323 -0
- package/dist/sync/types.d.ts +168 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +8 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/sync/types.mjs +6 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +4 -0
- package/dist/wasm-loader.d.ts +32 -0
- package/dist/wasm-loader.d.ts.map +1 -0
- package/dist/wasm-loader.js +75 -0
- package/dist/wasm-loader.js.map +1 -0
- package/dist/wasm-loader.mjs +64 -0
- package/examples/adaptive-learning.ts +284 -0
- package/examples/browser/README.md +732 -0
- package/examples/browser/adaptive-recommendations/index.html +427 -0
- package/examples/browser/collaborative-filtering/index.html +310 -0
- package/examples/browser/continual-learning/index.html +736 -0
- package/examples/browser/experience-replay/index.html +616 -0
- package/examples/browser/index.html +369 -0
- package/examples/browser/meta-learning/index.html +789 -0
- package/examples/browser/neuro-symbolic/index.html +692 -0
- package/examples/browser/pattern-learning/index.html +620 -0
- package/examples/browser/quantum-inspired/index.html +728 -0
- package/examples/browser/rag/index.html +624 -0
- package/examples/browser/swarm-intelligence/index.html +811 -0
- package/examples/browser-basic.html +170 -0
- package/examples/hnsw-example.ts +148 -0
- package/examples/node-basic.js +70 -0
- package/examples/quic-sync-example.ts +310 -0
- package/examples/quick-start.js +68 -0
- package/examples/wasm-example.ts +222 -0
- package/package.json +118 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ContextSynthesizer - Combine multiple memory sources into coherent context
|
|
4
|
+
*
|
|
5
|
+
* Synthesizes context from patterns, experiences, and session history
|
|
6
|
+
* to provide comprehensive context for task execution.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ContextSynthesizer = void 0;
|
|
10
|
+
class ContextSynthesizer {
|
|
11
|
+
constructor(db, patternMatcher, experienceCurator) {
|
|
12
|
+
this.sessionTable = 'context_sessions';
|
|
13
|
+
this.db = db;
|
|
14
|
+
this.patternMatcher = patternMatcher;
|
|
15
|
+
this.experienceCurator = experienceCurator;
|
|
16
|
+
this.initializeSessionStorage();
|
|
17
|
+
}
|
|
18
|
+
initializeSessionStorage() {
|
|
19
|
+
const rawDb = this.db.getDatabase();
|
|
20
|
+
rawDb.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS ${this.sessionTable} (
|
|
22
|
+
id TEXT PRIMARY KEY,
|
|
23
|
+
session_id TEXT NOT NULL,
|
|
24
|
+
task_description TEXT NOT NULL,
|
|
25
|
+
context_data TEXT NOT NULL,
|
|
26
|
+
timestamp INTEGER NOT NULL
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_session_id ON ${this.sessionTable}(session_id);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_session_timestamp ON ${this.sessionTable}(timestamp);
|
|
31
|
+
`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Synthesize context from multiple memory sources
|
|
35
|
+
*
|
|
36
|
+
* @param taskEmbedding - Vector embedding of current task
|
|
37
|
+
* @param sources - Memory sources to combine
|
|
38
|
+
* @returns Synthesized context with patterns, experiences, and metadata
|
|
39
|
+
*/
|
|
40
|
+
async synthesizeContext(taskEmbedding, sources = [
|
|
41
|
+
{ type: 'patterns', k: 3 },
|
|
42
|
+
{ type: 'experiences', k: 5 },
|
|
43
|
+
{ type: 'recent', k: 5 }
|
|
44
|
+
]) {
|
|
45
|
+
const startTime = Date.now();
|
|
46
|
+
const patterns = [];
|
|
47
|
+
const experiences = [];
|
|
48
|
+
const sessionHistory = [];
|
|
49
|
+
// Gather data from each source
|
|
50
|
+
for (const source of sources) {
|
|
51
|
+
switch (source.type) {
|
|
52
|
+
case 'patterns':
|
|
53
|
+
const patternResults = await this.patternMatcher.findSimilar(taskEmbedding, source.k || 3, 0.7, source.filters);
|
|
54
|
+
patterns.push(...patternResults);
|
|
55
|
+
break;
|
|
56
|
+
case 'experiences':
|
|
57
|
+
const expResults = await this.experienceCurator.queryExperiences(taskEmbedding, source.k || 5, source.filters);
|
|
58
|
+
experiences.push(...expResults);
|
|
59
|
+
break;
|
|
60
|
+
case 'recent':
|
|
61
|
+
const recentExps = await this.experienceCurator.queryExperiences(taskEmbedding, source.k || 5, { maxAge: 24 * 60 * 60 * 1000 } // Last 24 hours
|
|
62
|
+
);
|
|
63
|
+
experiences.push(...recentExps);
|
|
64
|
+
break;
|
|
65
|
+
case 'session':
|
|
66
|
+
if (source.filters?.sessionId) {
|
|
67
|
+
sessionHistory.push(...this.getSessionHistory(source.filters.sessionId));
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Remove duplicates
|
|
73
|
+
const uniquePatterns = this.deduplicatePatterns(patterns);
|
|
74
|
+
const uniqueExperiences = this.deduplicateExperiences(experiences);
|
|
75
|
+
// Synthesize text context
|
|
76
|
+
const synthesizedContext = this.buildTextContext(uniquePatterns, uniqueExperiences);
|
|
77
|
+
// Calculate confidence based on data quality
|
|
78
|
+
const confidence = this.calculateConfidence(uniquePatterns, uniqueExperiences);
|
|
79
|
+
const duration = Date.now() - startTime;
|
|
80
|
+
console.log(`[ContextSynthesizer] Synthesized context in ${duration}ms (${uniquePatterns.length} patterns, ${uniqueExperiences.length} experiences)`);
|
|
81
|
+
return {
|
|
82
|
+
taskEmbedding,
|
|
83
|
+
patterns: uniquePatterns,
|
|
84
|
+
experiences: uniqueExperiences,
|
|
85
|
+
sessionHistory,
|
|
86
|
+
synthesizedContext,
|
|
87
|
+
confidence
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build human-readable text context from patterns and experiences
|
|
92
|
+
*/
|
|
93
|
+
buildTextContext(patterns, experiences) {
|
|
94
|
+
const sections = [];
|
|
95
|
+
if (patterns.length > 0) {
|
|
96
|
+
sections.push('## Relevant Patterns\n');
|
|
97
|
+
patterns.slice(0, 3).forEach((pattern, i) => {
|
|
98
|
+
sections.push(`${i + 1}. **${pattern.taskType}** (Success: ${(pattern.successRate * 100).toFixed(1)}%)`);
|
|
99
|
+
sections.push(` Approach: ${pattern.approach}`);
|
|
100
|
+
sections.push(` Domain: ${pattern.metadata.domain} | Complexity: ${pattern.metadata.complexity}`);
|
|
101
|
+
sections.push('');
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (experiences.length > 0) {
|
|
105
|
+
const successfulExps = experiences.filter(e => e.success);
|
|
106
|
+
const failedExps = experiences.filter(e => !e.success);
|
|
107
|
+
if (successfulExps.length > 0) {
|
|
108
|
+
sections.push('## Successful Experiences\n');
|
|
109
|
+
successfulExps.slice(0, 3).forEach((exp, i) => {
|
|
110
|
+
sections.push(`${i + 1}. ${exp.taskDescription}`);
|
|
111
|
+
sections.push(` Approach: ${exp.approach}`);
|
|
112
|
+
sections.push(` Quality: ${(exp.quality * 100).toFixed(1)}% | Duration: ${(exp.duration / 1000).toFixed(1)}s`);
|
|
113
|
+
sections.push('');
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (failedExps.length > 0) {
|
|
117
|
+
sections.push('## Lessons from Failures\n');
|
|
118
|
+
failedExps.slice(0, 2).forEach((exp, i) => {
|
|
119
|
+
sections.push(`${i + 1}. ${exp.taskDescription}`);
|
|
120
|
+
sections.push(` What went wrong: ${exp.outcome}`);
|
|
121
|
+
if (exp.metadata.errorType) {
|
|
122
|
+
sections.push(` Error type: ${exp.metadata.errorType}`);
|
|
123
|
+
}
|
|
124
|
+
sections.push('');
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (sections.length === 0) {
|
|
129
|
+
return 'No relevant context found. This is a novel task.';
|
|
130
|
+
}
|
|
131
|
+
return sections.join('\n');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Calculate confidence score for synthesized context
|
|
135
|
+
*/
|
|
136
|
+
calculateConfidence(patterns, experiences) {
|
|
137
|
+
let confidence = 0;
|
|
138
|
+
// Pattern confidence (40% weight)
|
|
139
|
+
if (patterns.length > 0) {
|
|
140
|
+
const avgPatternSuccess = patterns.reduce((sum, p) => sum + p.successRate, 0) / patterns.length;
|
|
141
|
+
const patternConfidence = avgPatternSuccess * Math.min(1, patterns.length / 3);
|
|
142
|
+
confidence += patternConfidence * 0.4;
|
|
143
|
+
}
|
|
144
|
+
// Experience confidence (40% weight)
|
|
145
|
+
if (experiences.length > 0) {
|
|
146
|
+
const successfulExps = experiences.filter(e => e.success).length;
|
|
147
|
+
const expConfidence = (successfulExps / experiences.length) * Math.min(1, experiences.length / 5);
|
|
148
|
+
confidence += expConfidence * 0.4;
|
|
149
|
+
}
|
|
150
|
+
// Recency confidence (20% weight)
|
|
151
|
+
const recentExps = experiences.filter(e => {
|
|
152
|
+
const age = Date.now() - (e.timestamp || 0);
|
|
153
|
+
return age < 7 * 24 * 60 * 60 * 1000; // Within 7 days
|
|
154
|
+
});
|
|
155
|
+
if (experiences.length > 0) {
|
|
156
|
+
const recencyConfidence = recentExps.length / experiences.length;
|
|
157
|
+
confidence += recencyConfidence * 0.2;
|
|
158
|
+
}
|
|
159
|
+
return confidence;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Store context for a task execution
|
|
163
|
+
*/
|
|
164
|
+
async storeContextExecution(sessionId, taskDescription, context) {
|
|
165
|
+
const rawDb = this.db.getDatabase();
|
|
166
|
+
const id = this.generateContextId();
|
|
167
|
+
const stmt = rawDb.prepare(`
|
|
168
|
+
INSERT INTO ${this.sessionTable}
|
|
169
|
+
(id, session_id, task_description, context_data, timestamp)
|
|
170
|
+
VALUES (?, ?, ?, ?, ?)
|
|
171
|
+
`);
|
|
172
|
+
stmt.run(id, sessionId, taskDescription, JSON.stringify({
|
|
173
|
+
patterns: context.patterns.map(p => p.id),
|
|
174
|
+
experiences: context.experiences.map(e => e.id),
|
|
175
|
+
confidence: context.confidence
|
|
176
|
+
}), Date.now());
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get session history
|
|
180
|
+
*/
|
|
181
|
+
getSessionHistory(sessionId) {
|
|
182
|
+
const rawDb = this.db.getDatabase();
|
|
183
|
+
const stmt = rawDb.prepare(`
|
|
184
|
+
SELECT * FROM ${this.sessionTable}
|
|
185
|
+
WHERE session_id = ?
|
|
186
|
+
ORDER BY timestamp DESC
|
|
187
|
+
LIMIT 10
|
|
188
|
+
`);
|
|
189
|
+
return stmt.all(sessionId);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Remove duplicate patterns (keep highest similarity)
|
|
193
|
+
*/
|
|
194
|
+
deduplicatePatterns(patterns) {
|
|
195
|
+
const seen = new Map();
|
|
196
|
+
for (const pattern of patterns) {
|
|
197
|
+
const existing = seen.get(pattern.id);
|
|
198
|
+
if (!existing || pattern.similarity > existing.similarity) {
|
|
199
|
+
seen.set(pattern.id, pattern);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return Array.from(seen.values());
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Remove duplicate experiences (keep highest relevance)
|
|
206
|
+
*/
|
|
207
|
+
deduplicateExperiences(experiences) {
|
|
208
|
+
const seen = new Map();
|
|
209
|
+
for (const exp of experiences) {
|
|
210
|
+
if (!exp.id)
|
|
211
|
+
continue;
|
|
212
|
+
const existing = seen.get(exp.id);
|
|
213
|
+
if (!existing || exp.relevance > existing.relevance) {
|
|
214
|
+
seen.set(exp.id, exp);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return Array.from(seen.values());
|
|
218
|
+
}
|
|
219
|
+
generateContextId() {
|
|
220
|
+
return `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.ContextSynthesizer = ContextSynthesizer;
|
|
224
|
+
//# sourceMappingURL=context-synthesizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-synthesizer.js","sourceRoot":"","sources":["../../src/reasoning/context-synthesizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextSynthesizer - Combine multiple memory sources into coherent context
|
|
3
|
+
*
|
|
4
|
+
* Synthesizes context from patterns, experiences, and session history
|
|
5
|
+
* to provide comprehensive context for task execution.
|
|
6
|
+
*/
|
|
7
|
+
export class ContextSynthesizer {
|
|
8
|
+
constructor(db, patternMatcher, experienceCurator) {
|
|
9
|
+
this.sessionTable = 'context_sessions';
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.patternMatcher = patternMatcher;
|
|
12
|
+
this.experienceCurator = experienceCurator;
|
|
13
|
+
this.initializeSessionStorage();
|
|
14
|
+
}
|
|
15
|
+
initializeSessionStorage() {
|
|
16
|
+
const rawDb = this.db.getDatabase();
|
|
17
|
+
rawDb.exec(`
|
|
18
|
+
CREATE TABLE IF NOT EXISTS ${this.sessionTable} (
|
|
19
|
+
id TEXT PRIMARY KEY,
|
|
20
|
+
session_id TEXT NOT NULL,
|
|
21
|
+
task_description TEXT NOT NULL,
|
|
22
|
+
context_data TEXT NOT NULL,
|
|
23
|
+
timestamp INTEGER NOT NULL
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_session_id ON ${this.sessionTable}(session_id);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_session_timestamp ON ${this.sessionTable}(timestamp);
|
|
28
|
+
`);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Synthesize context from multiple memory sources
|
|
32
|
+
*
|
|
33
|
+
* @param taskEmbedding - Vector embedding of current task
|
|
34
|
+
* @param sources - Memory sources to combine
|
|
35
|
+
* @returns Synthesized context with patterns, experiences, and metadata
|
|
36
|
+
*/
|
|
37
|
+
async synthesizeContext(taskEmbedding, sources = [
|
|
38
|
+
{ type: 'patterns', k: 3 },
|
|
39
|
+
{ type: 'experiences', k: 5 },
|
|
40
|
+
{ type: 'recent', k: 5 }
|
|
41
|
+
]) {
|
|
42
|
+
const startTime = Date.now();
|
|
43
|
+
const patterns = [];
|
|
44
|
+
const experiences = [];
|
|
45
|
+
const sessionHistory = [];
|
|
46
|
+
// Gather data from each source
|
|
47
|
+
for (const source of sources) {
|
|
48
|
+
switch (source.type) {
|
|
49
|
+
case 'patterns':
|
|
50
|
+
const patternResults = await this.patternMatcher.findSimilar(taskEmbedding, source.k || 3, 0.7, source.filters);
|
|
51
|
+
patterns.push(...patternResults);
|
|
52
|
+
break;
|
|
53
|
+
case 'experiences':
|
|
54
|
+
const expResults = await this.experienceCurator.queryExperiences(taskEmbedding, source.k || 5, source.filters);
|
|
55
|
+
experiences.push(...expResults);
|
|
56
|
+
break;
|
|
57
|
+
case 'recent':
|
|
58
|
+
const recentExps = await this.experienceCurator.queryExperiences(taskEmbedding, source.k || 5, { maxAge: 24 * 60 * 60 * 1000 } // Last 24 hours
|
|
59
|
+
);
|
|
60
|
+
experiences.push(...recentExps);
|
|
61
|
+
break;
|
|
62
|
+
case 'session':
|
|
63
|
+
if (source.filters?.sessionId) {
|
|
64
|
+
sessionHistory.push(...this.getSessionHistory(source.filters.sessionId));
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Remove duplicates
|
|
70
|
+
const uniquePatterns = this.deduplicatePatterns(patterns);
|
|
71
|
+
const uniqueExperiences = this.deduplicateExperiences(experiences);
|
|
72
|
+
// Synthesize text context
|
|
73
|
+
const synthesizedContext = this.buildTextContext(uniquePatterns, uniqueExperiences);
|
|
74
|
+
// Calculate confidence based on data quality
|
|
75
|
+
const confidence = this.calculateConfidence(uniquePatterns, uniqueExperiences);
|
|
76
|
+
const duration = Date.now() - startTime;
|
|
77
|
+
console.log(`[ContextSynthesizer] Synthesized context in ${duration}ms (${uniquePatterns.length} patterns, ${uniqueExperiences.length} experiences)`);
|
|
78
|
+
return {
|
|
79
|
+
taskEmbedding,
|
|
80
|
+
patterns: uniquePatterns,
|
|
81
|
+
experiences: uniqueExperiences,
|
|
82
|
+
sessionHistory,
|
|
83
|
+
synthesizedContext,
|
|
84
|
+
confidence
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build human-readable text context from patterns and experiences
|
|
89
|
+
*/
|
|
90
|
+
buildTextContext(patterns, experiences) {
|
|
91
|
+
const sections = [];
|
|
92
|
+
if (patterns.length > 0) {
|
|
93
|
+
sections.push('## Relevant Patterns\n');
|
|
94
|
+
patterns.slice(0, 3).forEach((pattern, i) => {
|
|
95
|
+
sections.push(`${i + 1}. **${pattern.taskType}** (Success: ${(pattern.successRate * 100).toFixed(1)}%)`);
|
|
96
|
+
sections.push(` Approach: ${pattern.approach}`);
|
|
97
|
+
sections.push(` Domain: ${pattern.metadata.domain} | Complexity: ${pattern.metadata.complexity}`);
|
|
98
|
+
sections.push('');
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (experiences.length > 0) {
|
|
102
|
+
const successfulExps = experiences.filter(e => e.success);
|
|
103
|
+
const failedExps = experiences.filter(e => !e.success);
|
|
104
|
+
if (successfulExps.length > 0) {
|
|
105
|
+
sections.push('## Successful Experiences\n');
|
|
106
|
+
successfulExps.slice(0, 3).forEach((exp, i) => {
|
|
107
|
+
sections.push(`${i + 1}. ${exp.taskDescription}`);
|
|
108
|
+
sections.push(` Approach: ${exp.approach}`);
|
|
109
|
+
sections.push(` Quality: ${(exp.quality * 100).toFixed(1)}% | Duration: ${(exp.duration / 1000).toFixed(1)}s`);
|
|
110
|
+
sections.push('');
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (failedExps.length > 0) {
|
|
114
|
+
sections.push('## Lessons from Failures\n');
|
|
115
|
+
failedExps.slice(0, 2).forEach((exp, i) => {
|
|
116
|
+
sections.push(`${i + 1}. ${exp.taskDescription}`);
|
|
117
|
+
sections.push(` What went wrong: ${exp.outcome}`);
|
|
118
|
+
if (exp.metadata.errorType) {
|
|
119
|
+
sections.push(` Error type: ${exp.metadata.errorType}`);
|
|
120
|
+
}
|
|
121
|
+
sections.push('');
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (sections.length === 0) {
|
|
126
|
+
return 'No relevant context found. This is a novel task.';
|
|
127
|
+
}
|
|
128
|
+
return sections.join('\n');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Calculate confidence score for synthesized context
|
|
132
|
+
*/
|
|
133
|
+
calculateConfidence(patterns, experiences) {
|
|
134
|
+
let confidence = 0;
|
|
135
|
+
// Pattern confidence (40% weight)
|
|
136
|
+
if (patterns.length > 0) {
|
|
137
|
+
const avgPatternSuccess = patterns.reduce((sum, p) => sum + p.successRate, 0) / patterns.length;
|
|
138
|
+
const patternConfidence = avgPatternSuccess * Math.min(1, patterns.length / 3);
|
|
139
|
+
confidence += patternConfidence * 0.4;
|
|
140
|
+
}
|
|
141
|
+
// Experience confidence (40% weight)
|
|
142
|
+
if (experiences.length > 0) {
|
|
143
|
+
const successfulExps = experiences.filter(e => e.success).length;
|
|
144
|
+
const expConfidence = (successfulExps / experiences.length) * Math.min(1, experiences.length / 5);
|
|
145
|
+
confidence += expConfidence * 0.4;
|
|
146
|
+
}
|
|
147
|
+
// Recency confidence (20% weight)
|
|
148
|
+
const recentExps = experiences.filter(e => {
|
|
149
|
+
const age = Date.now() - (e.timestamp || 0);
|
|
150
|
+
return age < 7 * 24 * 60 * 60 * 1000; // Within 7 days
|
|
151
|
+
});
|
|
152
|
+
if (experiences.length > 0) {
|
|
153
|
+
const recencyConfidence = recentExps.length / experiences.length;
|
|
154
|
+
confidence += recencyConfidence * 0.2;
|
|
155
|
+
}
|
|
156
|
+
return confidence;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Store context for a task execution
|
|
160
|
+
*/
|
|
161
|
+
async storeContextExecution(sessionId, taskDescription, context) {
|
|
162
|
+
const rawDb = this.db.getDatabase();
|
|
163
|
+
const id = this.generateContextId();
|
|
164
|
+
const stmt = rawDb.prepare(`
|
|
165
|
+
INSERT INTO ${this.sessionTable}
|
|
166
|
+
(id, session_id, task_description, context_data, timestamp)
|
|
167
|
+
VALUES (?, ?, ?, ?, ?)
|
|
168
|
+
`);
|
|
169
|
+
stmt.run(id, sessionId, taskDescription, JSON.stringify({
|
|
170
|
+
patterns: context.patterns.map(p => p.id),
|
|
171
|
+
experiences: context.experiences.map(e => e.id),
|
|
172
|
+
confidence: context.confidence
|
|
173
|
+
}), Date.now());
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get session history
|
|
177
|
+
*/
|
|
178
|
+
getSessionHistory(sessionId) {
|
|
179
|
+
const rawDb = this.db.getDatabase();
|
|
180
|
+
const stmt = rawDb.prepare(`
|
|
181
|
+
SELECT * FROM ${this.sessionTable}
|
|
182
|
+
WHERE session_id = ?
|
|
183
|
+
ORDER BY timestamp DESC
|
|
184
|
+
LIMIT 10
|
|
185
|
+
`);
|
|
186
|
+
return stmt.all(sessionId);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove duplicate patterns (keep highest similarity)
|
|
190
|
+
*/
|
|
191
|
+
deduplicatePatterns(patterns) {
|
|
192
|
+
const seen = new Map();
|
|
193
|
+
for (const pattern of patterns) {
|
|
194
|
+
const existing = seen.get(pattern.id);
|
|
195
|
+
if (!existing || pattern.similarity > existing.similarity) {
|
|
196
|
+
seen.set(pattern.id, pattern);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return Array.from(seen.values());
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Remove duplicate experiences (keep highest relevance)
|
|
203
|
+
*/
|
|
204
|
+
deduplicateExperiences(experiences) {
|
|
205
|
+
const seen = new Map();
|
|
206
|
+
for (const exp of experiences) {
|
|
207
|
+
if (!exp.id)
|
|
208
|
+
continue;
|
|
209
|
+
const existing = seen.get(exp.id);
|
|
210
|
+
if (!existing || exp.relevance > existing.relevance) {
|
|
211
|
+
seen.set(exp.id, exp);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return Array.from(seen.values());
|
|
215
|
+
}
|
|
216
|
+
generateContextId() {
|
|
217
|
+
return `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExperienceCurator - Store and retrieve successful task execution experiences
|
|
3
|
+
*
|
|
4
|
+
* Curates high-quality experiences for learning and adaptation.
|
|
5
|
+
* Scores experiences based on quality metrics and retrieves relevant ones.
|
|
6
|
+
*/
|
|
7
|
+
import { SQLiteVectorDB } from '../core/vector-db';
|
|
8
|
+
import { Experience } from '../types';
|
|
9
|
+
export declare class ExperienceCurator {
|
|
10
|
+
private db;
|
|
11
|
+
private experienceTable;
|
|
12
|
+
constructor(db: SQLiteVectorDB);
|
|
13
|
+
private initializeExperienceStorage;
|
|
14
|
+
/**
|
|
15
|
+
* Store a task execution experience
|
|
16
|
+
*/
|
|
17
|
+
storeExperience(experience: Omit<Experience, 'id' | 'timestamp'>): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Calculate quality score for an experience
|
|
20
|
+
* Factors: success, duration, token efficiency, iteration count
|
|
21
|
+
*/
|
|
22
|
+
private calculateQualityScore;
|
|
23
|
+
/**
|
|
24
|
+
* Query experiences similar to a task
|
|
25
|
+
*
|
|
26
|
+
* @param taskEmbedding - Vector embedding of current task
|
|
27
|
+
* @param k - Number of experiences to return
|
|
28
|
+
* @param filters - Optional filters
|
|
29
|
+
* @returns Array of relevant experiences sorted by relevance
|
|
30
|
+
*/
|
|
31
|
+
queryExperiences(taskEmbedding: number[], k?: number, filters?: {
|
|
32
|
+
successOnly?: boolean;
|
|
33
|
+
domain?: string;
|
|
34
|
+
minQuality?: number;
|
|
35
|
+
maxAge?: number;
|
|
36
|
+
}): Promise<Array<Experience & {
|
|
37
|
+
relevance: number;
|
|
38
|
+
}>>;
|
|
39
|
+
/**
|
|
40
|
+
* Get best experiences for a domain
|
|
41
|
+
*/
|
|
42
|
+
getBestExperiences(domain: string, limit?: number): Promise<Experience[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Get learning statistics
|
|
45
|
+
*/
|
|
46
|
+
getStats(): {
|
|
47
|
+
totalExperiences: number;
|
|
48
|
+
successRate: number;
|
|
49
|
+
avgQuality: number;
|
|
50
|
+
avgDuration: number;
|
|
51
|
+
domainBreakdown: Map<string, {
|
|
52
|
+
count: number;
|
|
53
|
+
successRate: number;
|
|
54
|
+
}>;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Prune low-quality old experiences
|
|
58
|
+
*/
|
|
59
|
+
pruneExperiences(options: {
|
|
60
|
+
minQuality?: number;
|
|
61
|
+
maxAge?: number;
|
|
62
|
+
keepMinimum?: number;
|
|
63
|
+
}): Promise<number>;
|
|
64
|
+
private generateExperienceId;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=experience-curator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experience-curator.d.ts","sourceRoot":"","sources":["../../src/reasoning/experience-curator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAsB,MAAM,UAAU,CAAC;AAE1D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,eAAe,CAA2B;gBAEtC,EAAE,EAAE,cAAc;IAK9B,OAAO,CAAC,2BAA2B;IA4BnC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAkDxF;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;;;;;;OAOG;IACG,gBAAgB,CACpB,aAAa,EAAE,MAAM,EAAE,EACvB,CAAC,GAAE,MAAW,EACd,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA8ErD;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC;IAsCxB;;OAEG;IACH,QAAQ,IAAI;QACV,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE;IAiDD;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE;QAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCnB,OAAO,CAAC,oBAAoB;CAG7B"}
|