agent-nuvira 1.14.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 +21 -0
- package/README.md +891 -0
- package/dist/agent-sdk/src/agent.d.ts +118 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -0
- package/dist/agent-sdk/src/agent.js +88 -0
- package/dist/agent-sdk/src/agent.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +33 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -0
- package/dist/agent-sdk/src/index.js +32 -0
- package/dist/agent-sdk/src/index.js.map +1 -0
- package/dist/agent-sdk/src/register.d.ts +70 -0
- package/dist/agent-sdk/src/register.d.ts.map +1 -0
- package/dist/agent-sdk/src/register.js +181 -0
- package/dist/agent-sdk/src/register.js.map +1 -0
- package/dist/agent-sdk/src/scaffold.d.ts +50 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -0
- package/dist/agent-sdk/src/scaffold.js +291 -0
- package/dist/agent-sdk/src/scaffold.js.map +1 -0
- package/dist/agent-sdk/src/testing.d.ts +187 -0
- package/dist/agent-sdk/src/testing.d.ts.map +1 -0
- package/dist/agent-sdk/src/testing.js +243 -0
- package/dist/agent-sdk/src/testing.js.map +1 -0
- package/dist/agent-sdk/src/types.d.ts +202 -0
- package/dist/agent-sdk/src/types.d.ts.map +1 -0
- package/dist/agent-sdk/src/types.js +11 -0
- package/dist/agent-sdk/src/types.js.map +1 -0
- package/dist/agents/agent.d.ts +132 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +19 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/agents/context-gatherer.d.ts +42 -0
- package/dist/agents/agents/context-gatherer.d.ts.map +1 -0
- package/dist/agents/agents/context-gatherer.js +366 -0
- package/dist/agents/agents/context-gatherer.js.map +1 -0
- package/dist/agents/agents/debugger.d.ts +58 -0
- package/dist/agents/agents/debugger.d.ts.map +1 -0
- package/dist/agents/agents/debugger.js +257 -0
- package/dist/agents/agents/debugger.js.map +1 -0
- package/dist/agents/agents/git-agent.d.ts +34 -0
- package/dist/agents/agents/git-agent.d.ts.map +1 -0
- package/dist/agents/agents/git-agent.js +200 -0
- package/dist/agents/agents/git-agent.js.map +1 -0
- package/dist/agents/agents/github-release-agent.d.ts +65 -0
- package/dist/agents/agents/github-release-agent.d.ts.map +1 -0
- package/dist/agents/agents/github-release-agent.js +439 -0
- package/dist/agents/agents/github-release-agent.js.map +1 -0
- package/dist/agents/agents/package-agent.d.ts +33 -0
- package/dist/agents/agents/package-agent.d.ts.map +1 -0
- package/dist/agents/agents/package-agent.js +233 -0
- package/dist/agents/agents/package-agent.js.map +1 -0
- package/dist/agents/agents/planner.d.ts +26 -0
- package/dist/agents/agents/planner.d.ts.map +1 -0
- package/dist/agents/agents/planner.js +222 -0
- package/dist/agents/agents/planner.js.map +1 -0
- package/dist/agents/agents/reviewer.d.ts +34 -0
- package/dist/agents/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/agents/reviewer.js +159 -0
- package/dist/agents/agents/reviewer.js.map +1 -0
- package/dist/agents/agents/runner.d.ts +73 -0
- package/dist/agents/agents/runner.d.ts.map +1 -0
- package/dist/agents/agents/runner.js +299 -0
- package/dist/agents/agents/runner.js.map +1 -0
- package/dist/agents/agents/security-agent.d.ts +33 -0
- package/dist/agents/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/agents/security-agent.js +184 -0
- package/dist/agents/agents/security-agent.js.map +1 -0
- package/dist/agents/agents/tester.d.ts +96 -0
- package/dist/agents/agents/tester.d.ts.map +1 -0
- package/dist/agents/agents/tester.js +410 -0
- package/dist/agents/agents/tester.js.map +1 -0
- package/dist/agents/agents/writer.d.ts +51 -0
- package/dist/agents/agents/writer.d.ts.map +1 -0
- package/dist/agents/agents/writer.js +384 -0
- package/dist/agents/agents/writer.js.map +1 -0
- package/dist/agents/context-vault.d.ts +49 -0
- package/dist/agents/context-vault.d.ts.map +1 -0
- package/dist/agents/context-vault.js +134 -0
- package/dist/agents/context-vault.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +97 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +696 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/utils/file-tree.d.ts +28 -0
- package/dist/agents/utils/file-tree.d.ts.map +1 -0
- package/dist/agents/utils/file-tree.js +93 -0
- package/dist/agents/utils/file-tree.js.map +1 -0
- package/dist/cli/agent.d.ts +25 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +374 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/benchmark.d.ts +24 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +235 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/cache.d.ts +12 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +58 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/chat.d.ts +37 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +393 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/commands.d.ts +24 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +18 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/config.d.ts +19 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +162 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dashboard.d.ts +34 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +126 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/doctor.d.ts +68 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +585 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/edit.d.ts +11 -0
- package/dist/cli/edit.d.ts.map +1 -0
- package/dist/cli/edit.js +86 -0
- package/dist/cli/edit.js.map +1 -0
- package/dist/cli/execute.d.ts +25 -0
- package/dist/cli/execute.d.ts.map +1 -0
- package/dist/cli/execute.js +186 -0
- package/dist/cli/execute.js.map +1 -0
- package/dist/cli/federation.d.ts +31 -0
- package/dist/cli/federation.d.ts.map +1 -0
- package/dist/cli/federation.js +387 -0
- package/dist/cli/federation.js.map +1 -0
- package/dist/cli/history.d.ts +22 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +140 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/init.d.ts +49 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +423 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/learn.d.ts +31 -0
- package/dist/cli/learn.d.ts.map +1 -0
- package/dist/cli/learn.js +320 -0
- package/dist/cli/learn.js.map +1 -0
- package/dist/cli/memory.d.ts +38 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +295 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model-picker.d.ts +18 -0
- package/dist/cli/model-picker.d.ts.map +1 -0
- package/dist/cli/model-picker.js +225 -0
- package/dist/cli/model-picker.js.map +1 -0
- package/dist/cli/models.d.ts +11 -0
- package/dist/cli/models.d.ts.map +1 -0
- package/dist/cli/models.js +132 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/plan.d.ts +11 -0
- package/dist/cli/plan.d.ts.map +1 -0
- package/dist/cli/plan.js +94 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/plugins.d.ts +15 -0
- package/dist/cli/plugins.d.ts.map +1 -0
- package/dist/cli/plugins.js +123 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/router.d.ts +20 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +142 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/run.d.ts +22 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +110 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/sandbox.d.ts +27 -0
- package/dist/cli/sandbox.d.ts.map +1 -0
- package/dist/cli/sandbox.js +264 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/sdk.d.ts +27 -0
- package/dist/cli/sdk.d.ts.map +1 -0
- package/dist/cli/sdk.js +204 -0
- package/dist/cli/sdk.js.map +1 -0
- package/dist/cli/stats.d.ts +18 -0
- package/dist/cli/stats.d.ts.map +1 -0
- package/dist/cli/stats.js +78 -0
- package/dist/cli/stats.js.map +1 -0
- package/dist/cli/team.d.ts +42 -0
- package/dist/cli/team.d.ts.map +1 -0
- package/dist/cli/team.js +473 -0
- package/dist/cli/team.js.map +1 -0
- package/dist/cli/workflow.d.ts +27 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +347 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/config/manager.d.ts +37 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +147 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/types.d.ts +53 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/context/cache.d.ts +27 -0
- package/dist/context/cache.d.ts.map +1 -0
- package/dist/context/cache.js +116 -0
- package/dist/context/cache.js.map +1 -0
- package/dist/context/history.d.ts +87 -0
- package/dist/context/history.d.ts.map +1 -0
- package/dist/context/history.js +249 -0
- package/dist/context/history.js.map +1 -0
- package/dist/context/parser.d.ts +61 -0
- package/dist/context/parser.d.ts.map +1 -0
- package/dist/context/parser.js +194 -0
- package/dist/context/parser.js.map +1 -0
- package/dist/federation/client.d.ts +49 -0
- package/dist/federation/client.d.ts.map +1 -0
- package/dist/federation/client.js +239 -0
- package/dist/federation/client.js.map +1 -0
- package/dist/federation/protocol.d.ts +155 -0
- package/dist/federation/protocol.d.ts.map +1 -0
- package/dist/federation/protocol.js +57 -0
- package/dist/federation/protocol.js.map +1 -0
- package/dist/federation/server.d.ts +25 -0
- package/dist/federation/server.d.ts.map +1 -0
- package/dist/federation/server.js +401 -0
- package/dist/federation/server.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/factory.d.ts +20 -0
- package/dist/inference/factory.d.ts.map +1 -0
- package/dist/inference/factory.js +46 -0
- package/dist/inference/factory.js.map +1 -0
- package/dist/inference/gemini-adapter.d.ts +17 -0
- package/dist/inference/gemini-adapter.d.ts.map +1 -0
- package/dist/inference/gemini-adapter.js +176 -0
- package/dist/inference/gemini-adapter.js.map +1 -0
- package/dist/inference/groq-adapter.d.ts +17 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -0
- package/dist/inference/groq-adapter.js +103 -0
- package/dist/inference/groq-adapter.js.map +1 -0
- package/dist/inference/interface.d.ts +49 -0
- package/dist/inference/interface.d.ts.map +1 -0
- package/dist/inference/interface.js +2 -0
- package/dist/inference/interface.js.map +1 -0
- package/dist/inference/local-adapter.d.ts +35 -0
- package/dist/inference/local-adapter.d.ts.map +1 -0
- package/dist/inference/local-adapter.js +311 -0
- package/dist/inference/local-adapter.js.map +1 -0
- package/dist/inference/model-catalog.d.ts +53 -0
- package/dist/inference/model-catalog.d.ts.map +1 -0
- package/dist/inference/model-catalog.js +306 -0
- package/dist/inference/model-catalog.js.map +1 -0
- package/dist/inference/nim-adapter.d.ts +17 -0
- package/dist/inference/nim-adapter.d.ts.map +1 -0
- package/dist/inference/nim-adapter.js +103 -0
- package/dist/inference/nim-adapter.js.map +1 -0
- package/dist/inference/openrouter-adapter.d.ts +17 -0
- package/dist/inference/openrouter-adapter.d.ts.map +1 -0
- package/dist/inference/openrouter-adapter.js +105 -0
- package/dist/inference/openrouter-adapter.js.map +1 -0
- package/dist/inference/sse.d.ts +20 -0
- package/dist/inference/sse.d.ts.map +1 -0
- package/dist/inference/sse.js +91 -0
- package/dist/inference/sse.js.map +1 -0
- package/dist/learning/agent-stats.d.ts +109 -0
- package/dist/learning/agent-stats.d.ts.map +1 -0
- package/dist/learning/agent-stats.js +240 -0
- package/dist/learning/agent-stats.js.map +1 -0
- package/dist/learning/benchmark.d.ts +161 -0
- package/dist/learning/benchmark.d.ts.map +1 -0
- package/dist/learning/benchmark.js +589 -0
- package/dist/learning/benchmark.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts +101 -0
- package/dist/learning/cost-tracker.d.ts.map +1 -0
- package/dist/learning/cost-tracker.js +224 -0
- package/dist/learning/cost-tracker.js.map +1 -0
- package/dist/learning/feedback.d.ts +88 -0
- package/dist/learning/feedback.d.ts.map +1 -0
- package/dist/learning/feedback.js +169 -0
- package/dist/learning/feedback.js.map +1 -0
- package/dist/learning/hybrid-router.d.ts +201 -0
- package/dist/learning/hybrid-router.d.ts.map +1 -0
- package/dist/learning/hybrid-router.js +450 -0
- package/dist/learning/hybrid-router.js.map +1 -0
- package/dist/learning/model-compare.d.ts +76 -0
- package/dist/learning/model-compare.d.ts.map +1 -0
- package/dist/learning/model-compare.js +252 -0
- package/dist/learning/model-compare.js.map +1 -0
- package/dist/learning/model-router.d.ts +68 -0
- package/dist/learning/model-router.d.ts.map +1 -0
- package/dist/learning/model-router.js +140 -0
- package/dist/learning/model-router.js.map +1 -0
- package/dist/learning/pattern-extractor.d.ts +99 -0
- package/dist/learning/pattern-extractor.d.ts.map +1 -0
- package/dist/learning/pattern-extractor.js +310 -0
- package/dist/learning/pattern-extractor.js.map +1 -0
- package/dist/learning/scorer.d.ts +51 -0
- package/dist/learning/scorer.d.ts.map +1 -0
- package/dist/learning/scorer.js +64 -0
- package/dist/learning/scorer.js.map +1 -0
- package/dist/learning/self-improver.d.ts +48 -0
- package/dist/learning/self-improver.d.ts.map +1 -0
- package/dist/learning/self-improver.js +161 -0
- package/dist/learning/self-improver.js.map +1 -0
- package/dist/memory/embedder.d.ts +65 -0
- package/dist/memory/embedder.d.ts.map +1 -0
- package/dist/memory/embedder.js +424 -0
- package/dist/memory/embedder.js.map +1 -0
- package/dist/memory/memory-integration.d.ts +56 -0
- package/dist/memory/memory-integration.d.ts.map +1 -0
- package/dist/memory/memory-integration.js +95 -0
- package/dist/memory/memory-integration.js.map +1 -0
- package/dist/memory/trajectory-store.d.ts +149 -0
- package/dist/memory/trajectory-store.d.ts.map +1 -0
- package/dist/memory/trajectory-store.js +476 -0
- package/dist/memory/trajectory-store.js.map +1 -0
- package/dist/memory/vector-store.d.ts +78 -0
- package/dist/memory/vector-store.d.ts.map +1 -0
- package/dist/memory/vector-store.js +186 -0
- package/dist/memory/vector-store.js.map +1 -0
- package/dist/plugins/agent-plugin.d.ts +73 -0
- package/dist/plugins/agent-plugin.d.ts.map +1 -0
- package/dist/plugins/agent-plugin.js +199 -0
- package/dist/plugins/agent-plugin.js.map +1 -0
- package/dist/plugins/registry.d.ts +61 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +67 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/sandbox/images.d.ts +31 -0
- package/dist/sandbox/images.d.ts.map +1 -0
- package/dist/sandbox/images.js +129 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/manager.d.ts +134 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +470 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/types.d.ts +113 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +107 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/security/scanner.d.ts +53 -0
- package/dist/security/scanner.d.ts.map +1 -0
- package/dist/security/scanner.js +271 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/team/config.d.ts +50 -0
- package/dist/team/config.d.ts.map +1 -0
- package/dist/team/config.js +108 -0
- package/dist/team/config.js.map +1 -0
- package/dist/team/memory.d.ts +63 -0
- package/dist/team/memory.d.ts.map +1 -0
- package/dist/team/memory.js +282 -0
- package/dist/team/memory.js.map +1 -0
- package/dist/team/review.d.ts +123 -0
- package/dist/team/review.d.ts.map +1 -0
- package/dist/team/review.js +293 -0
- package/dist/team/review.js.map +1 -0
- package/dist/utils/env.d.ts +19 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +250 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +45 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/web-dashboard/server.d.ts +59 -0
- package/dist/web-dashboard/server.d.ts.map +1 -0
- package/dist/web-dashboard/server.js +418 -0
- package/dist/web-dashboard/server.js.map +1 -0
- package/dist/workflow/registry.d.ts +127 -0
- package/dist/workflow/registry.d.ts.map +1 -0
- package/dist/workflow/registry.js +482 -0
- package/dist/workflow/registry.js.map +1 -0
- package/dist/workflow/templates.d.ts +93 -0
- package/dist/workflow/templates.d.ts.map +1 -0
- package/dist/workflow/templates.js +481 -0
- package/dist/workflow/templates.js.map +1 -0
- package/package.json +78 -0
- package/src/web-dashboard/public/assets/index-B08nDkSB.css +1 -0
- package/src/web-dashboard/public/assets/index-BKL8YOFD.js +135 -0
- package/src/web-dashboard/public/assets/index-BKL8YOFD.js.map +1 -0
- package/src/web-dashboard/public/index.html +13 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrajectoryStore — Stores and retrieves successful agent execution trajectories.
|
|
3
|
+
*
|
|
4
|
+
* A trajectory captures a full agent session: the goal, the plan,
|
|
5
|
+
* what files were touched, what changes were made, and the outcome.
|
|
6
|
+
* This data is stored in a JSON file and indexed via the VectorStore
|
|
7
|
+
* for semantic similarity search.
|
|
8
|
+
*
|
|
9
|
+
* When a new goal arrives, the Orchestrator queries past trajectories
|
|
10
|
+
* and injects similar ones as few-shot examples into agent prompts.
|
|
11
|
+
*
|
|
12
|
+
* File location: ~/.buff/memory/trajectories.json
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { getVectorStore } from './vector-store.js';
|
|
18
|
+
import { embed, EMBEDDING_DIM } from './embedder.js';
|
|
19
|
+
import { logger } from '../utils/logger.js';
|
|
20
|
+
import { scoreTrajectory } from '../learning/scorer.js';
|
|
21
|
+
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
22
|
+
const MEMORY_DIR = join(homedir(), '.buff', 'memory');
|
|
23
|
+
const TRAJECTORIES_PATH = join(MEMORY_DIR, 'trajectories.json');
|
|
24
|
+
const CURRENT_VERSION = 1;
|
|
25
|
+
const MAX_TRAJECTORIES = 500;
|
|
26
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
27
|
+
function ensureDir() {
|
|
28
|
+
if (!existsSync(MEMORY_DIR)) {
|
|
29
|
+
mkdirSync(MEMORY_DIR, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function readTrajectories() {
|
|
33
|
+
try {
|
|
34
|
+
ensureDir();
|
|
35
|
+
if (!existsSync(TRAJECTORIES_PATH)) {
|
|
36
|
+
return { trajectories: {}, version: CURRENT_VERSION };
|
|
37
|
+
}
|
|
38
|
+
const raw = readFileSync(TRAJECTORIES_PATH, 'utf-8');
|
|
39
|
+
return JSON.parse(raw);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return { trajectories: {}, version: CURRENT_VERSION };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function writeTrajectories(data) {
|
|
46
|
+
ensureDir();
|
|
47
|
+
writeFileSync(TRAJECTORIES_PATH, JSON.stringify(data, null, 2), 'utf-8');
|
|
48
|
+
}
|
|
49
|
+
/** Generate a unique trajectory ID */
|
|
50
|
+
function generateId() {
|
|
51
|
+
return `traj-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
52
|
+
}
|
|
53
|
+
/** Simple heuristic to guess a project fingerprint from file changes */
|
|
54
|
+
function guessProjectFingerprint(fileChanges) {
|
|
55
|
+
const paths = fileChanges.map((c) => c.path);
|
|
56
|
+
const allExtensions = paths
|
|
57
|
+
.map((p) => p.slice(p.lastIndexOf('.')))
|
|
58
|
+
.filter(Boolean);
|
|
59
|
+
const extSet = new Set(allExtensions);
|
|
60
|
+
const tags = [];
|
|
61
|
+
if (extSet.has('.ts') || extSet.has('.tsx'))
|
|
62
|
+
tags.push('typescript');
|
|
63
|
+
if (extSet.has('.js') || extSet.has('.jsx'))
|
|
64
|
+
tags.push('javascript');
|
|
65
|
+
if (extSet.has('.py'))
|
|
66
|
+
tags.push('python');
|
|
67
|
+
if (extSet.has('.go'))
|
|
68
|
+
tags.push('go');
|
|
69
|
+
if (extSet.has('.rs'))
|
|
70
|
+
tags.push('rust');
|
|
71
|
+
if (extSet.has('.json'))
|
|
72
|
+
tags.push('json');
|
|
73
|
+
if (paths.some((p) => p.includes('package.json')))
|
|
74
|
+
tags.push('node');
|
|
75
|
+
if (paths.some((p) => p.includes('Dockerfile')))
|
|
76
|
+
tags.push('docker');
|
|
77
|
+
return tags.length > 0 ? tags.join(', ') : 'unknown';
|
|
78
|
+
}
|
|
79
|
+
// ─── TrajectoryStore ────────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Manages the storage and retrieval of agent execution trajectories.
|
|
82
|
+
*/
|
|
83
|
+
export class TrajectoryStore {
|
|
84
|
+
/**
|
|
85
|
+
* Save a successful orchestration result as a trajectory.
|
|
86
|
+
* Also indexes it in the VectorStore for semantic search.
|
|
87
|
+
*
|
|
88
|
+
* @param result The orchestration result to save
|
|
89
|
+
* @param callLLM LLM function for generating the embedding vector
|
|
90
|
+
* @param taskPlan The original task plan steps
|
|
91
|
+
* @returns The trajectory ID
|
|
92
|
+
*/
|
|
93
|
+
async save(result, callLLM, taskPlan, contextFiles) {
|
|
94
|
+
// Only save successful trajectories
|
|
95
|
+
if (!result.success)
|
|
96
|
+
return '';
|
|
97
|
+
const data = readTrajectories();
|
|
98
|
+
// Prune old trajectories if we're at the limit
|
|
99
|
+
this.pruneIfNeeded(data);
|
|
100
|
+
const id = generateId();
|
|
101
|
+
const trajectory = {
|
|
102
|
+
id,
|
|
103
|
+
goal: result.goal,
|
|
104
|
+
projectFingerprint: '', // Will be set below after parsing file changes
|
|
105
|
+
taskPlan: taskPlan.map((s) => ({
|
|
106
|
+
id: s.id,
|
|
107
|
+
description: s.description,
|
|
108
|
+
agentType: s.agentType,
|
|
109
|
+
})),
|
|
110
|
+
contextFiles,
|
|
111
|
+
fileChanges: result.fileChanges
|
|
112
|
+
.split('\n')
|
|
113
|
+
.filter((l) => l.includes('📄') || l.includes('✏️') || l.includes('🗑️'))
|
|
114
|
+
.map((l) => {
|
|
115
|
+
const match = l.match(/[✏️📄🗑️]\s+(.+?)\s+\((.*?)\)/);
|
|
116
|
+
return match
|
|
117
|
+
? { path: match[1], status: match[2] }
|
|
118
|
+
: { path: l.trim(), status: 'modified' };
|
|
119
|
+
}),
|
|
120
|
+
tasksCompleted: result.tasksCompleted,
|
|
121
|
+
tasksTotal: result.tasksTotal,
|
|
122
|
+
// Use the heuristic scorer for a more nuanced quality score
|
|
123
|
+
score: scoreTrajectory({
|
|
124
|
+
tasksCompleted: result.tasksCompleted,
|
|
125
|
+
tasksTotal: result.tasksTotal,
|
|
126
|
+
reviewPassed: result.success && !result.error,
|
|
127
|
+
totalSteps: taskPlan.length,
|
|
128
|
+
}).total,
|
|
129
|
+
timestamp: Date.now(),
|
|
130
|
+
};
|
|
131
|
+
// Compute the project fingerprint from real file changes
|
|
132
|
+
trajectory.projectFingerprint = guessProjectFingerprint(trajectory.fileChanges.map((fc) => ({
|
|
133
|
+
path: fc.path,
|
|
134
|
+
status: fc.status,
|
|
135
|
+
})));
|
|
136
|
+
// Store the trajectory
|
|
137
|
+
data.trajectories[id] = trajectory;
|
|
138
|
+
writeTrajectories(data);
|
|
139
|
+
// Generate embedding and index in VectorStore
|
|
140
|
+
// Uses native embeddings (Tier 1/Xenova) if available, falls back to LLM
|
|
141
|
+
try {
|
|
142
|
+
const embeddingText = this.buildEmbeddingText(trajectory);
|
|
143
|
+
const vector = await embed(embeddingText, callLLM);
|
|
144
|
+
// Check if embedding succeeded (non-zero vector)
|
|
145
|
+
if (vector.some((v) => v !== 0)) {
|
|
146
|
+
const vs = getVectorStore();
|
|
147
|
+
await vs.insert(id, vector, {
|
|
148
|
+
goal: trajectory.goal,
|
|
149
|
+
projectFingerprint: trajectory.projectFingerprint,
|
|
150
|
+
score: trajectory.score,
|
|
151
|
+
timestamp: trajectory.timestamp,
|
|
152
|
+
});
|
|
153
|
+
logger.debug(`Indexed trajectory ${id} in vector store (${EMBEDDING_DIM} dim)`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
logger.debug(`Skipping vector index for ${id}: zero vector (embedding failed)`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
// Non-fatal: trajectory is stored but not indexed for search
|
|
161
|
+
logger.debug(`Failed to index trajectory ${id}: ${err}`);
|
|
162
|
+
}
|
|
163
|
+
return id;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieve a single trajectory by ID.
|
|
167
|
+
*/
|
|
168
|
+
async get(id) {
|
|
169
|
+
const data = readTrajectories();
|
|
170
|
+
return data.trajectories[id] || null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Search for trajectories similar to a goal.
|
|
174
|
+
*
|
|
175
|
+
* @param goal The goal text to search by
|
|
176
|
+
* @param callLLM LLM function for generating the query embedding
|
|
177
|
+
* @param k Maximum number of results
|
|
178
|
+
* @returns Array of trajectories sorted by relevance
|
|
179
|
+
*/
|
|
180
|
+
async searchByGoal(goal, callLLM, k = 3) {
|
|
181
|
+
try {
|
|
182
|
+
// Generate embedding for the query
|
|
183
|
+
const queryPrompt = `Search query for past agent trajectories: ${goal}`;
|
|
184
|
+
const queryVector = await embed(queryPrompt, callLLM);
|
|
185
|
+
// Skip search if we got a zero vector (embedding failed)
|
|
186
|
+
if (queryVector.every((v) => v === 0))
|
|
187
|
+
return [];
|
|
188
|
+
// Search the vector index
|
|
189
|
+
const vs = getVectorStore();
|
|
190
|
+
const results = await vs.search(queryVector, k, (entry) => {
|
|
191
|
+
const score = entry.metadata.score || 0;
|
|
192
|
+
return score >= 0.5; // Only retrieve quality trajectories
|
|
193
|
+
});
|
|
194
|
+
// Load full trajectories from the store
|
|
195
|
+
const trajectories = [];
|
|
196
|
+
const data = readTrajectories();
|
|
197
|
+
for (const { entry, similarity } of results) {
|
|
198
|
+
const traj = data.trajectories[entry.id];
|
|
199
|
+
if (traj && similarity > 0.3) {
|
|
200
|
+
trajectories.push(traj);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return trajectories;
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
logger.debug(`Trajectory search failed: ${err}`);
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Format trajectories as few-shot examples for agent prompts.
|
|
212
|
+
* Truncates plans to the first 5 steps to save token budget.
|
|
213
|
+
* Returns a string that can be injected into the PlannerAgent's prompt.
|
|
214
|
+
*/
|
|
215
|
+
formatAsFewShot(trajectories) {
|
|
216
|
+
if (trajectories.length === 0)
|
|
217
|
+
return '';
|
|
218
|
+
const MAX_STEPS_PER_TRAJECTORY = 5;
|
|
219
|
+
const parts = trajectories.map((t, i) => {
|
|
220
|
+
// Truncate long plans to save tokens in the prompt
|
|
221
|
+
const truncatedPlan = t.taskPlan.slice(0, MAX_STEPS_PER_TRAJECTORY);
|
|
222
|
+
const stepsJson = JSON.stringify(truncatedPlan, null, 2);
|
|
223
|
+
const truncatedNote = t.taskPlan.length > MAX_STEPS_PER_TRAJECTORY
|
|
224
|
+
? `\n (... and ${t.taskPlan.length - MAX_STEPS_PER_TRAJECTORY} more steps)`
|
|
225
|
+
: '';
|
|
226
|
+
return `## Similar Past Task ${i + 1}\nGoal: ${t.goal}\nProject: ${t.projectFingerprint}\nPlan:\n${stepsJson}${truncatedNote}\nFiles changed: ${t.fileChanges.map((fc) => fc.path).join(', ')}\n`;
|
|
227
|
+
});
|
|
228
|
+
return `\n---\nHere are examples of how similar goals were decomposed into execution plans in the past. Use them as reference for creating the plan for the current goal.\n\n${parts.join('\n')}\n---\n`;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get statistics about stored trajectories.
|
|
232
|
+
*/
|
|
233
|
+
async stats() {
|
|
234
|
+
const data = readTrajectories();
|
|
235
|
+
const trajectories = Object.values(data.trajectories);
|
|
236
|
+
const avgScore = trajectories.length > 0
|
|
237
|
+
? trajectories.reduce((sum, t) => sum + t.score, 0) / trajectories.length
|
|
238
|
+
: 0;
|
|
239
|
+
const byProjectFingerprint = {};
|
|
240
|
+
for (const t of trajectories) {
|
|
241
|
+
const fp = t.projectFingerprint || 'unknown';
|
|
242
|
+
byProjectFingerprint[fp] = (byProjectFingerprint[fp] || 0) + 1;
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
total: trajectories.length,
|
|
246
|
+
avgScore: Math.round(avgScore * 100) / 100,
|
|
247
|
+
byProjectFingerprint,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get all stored trajectories.
|
|
252
|
+
*/
|
|
253
|
+
getAll() {
|
|
254
|
+
const data = readTrajectories();
|
|
255
|
+
return Object.values(data.trajectories);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Clear all trajectories.
|
|
259
|
+
*/
|
|
260
|
+
async clear() {
|
|
261
|
+
writeTrajectories({ trajectories: {}, version: CURRENT_VERSION });
|
|
262
|
+
const vs = getVectorStore();
|
|
263
|
+
await vs.clear();
|
|
264
|
+
}
|
|
265
|
+
// ─── Private Helpers ────────────────────────────────────────────────────
|
|
266
|
+
/**
|
|
267
|
+
* Build text to generate an embedding for a trajectory.
|
|
268
|
+
*/
|
|
269
|
+
buildEmbeddingText(trajectory) {
|
|
270
|
+
return [
|
|
271
|
+
`Goal: ${trajectory.goal}`,
|
|
272
|
+
`Project: ${trajectory.projectFingerprint}`,
|
|
273
|
+
`Steps: ${trajectory.taskPlan.map((s) => `${s.agentType}: ${s.description}`).join('; ')}`,
|
|
274
|
+
`Files: ${trajectory.fileChanges.map((fc) => fc.path).join(', ')}`,
|
|
275
|
+
].join('\n');
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Remove oldest trajectories when the store exceeds MAX_TRAJECTORIES.
|
|
279
|
+
*/
|
|
280
|
+
pruneIfNeeded(data) {
|
|
281
|
+
const entries = Object.entries(data.trajectories);
|
|
282
|
+
if (entries.length < MAX_TRAJECTORIES)
|
|
283
|
+
return;
|
|
284
|
+
// Sort by timestamp (oldest first), remove excess
|
|
285
|
+
const sorted = entries.sort(([, a], [, b]) => a.timestamp - b.timestamp);
|
|
286
|
+
const toRemove = sorted.slice(0, entries.length - MAX_TRAJECTORIES + 10);
|
|
287
|
+
// Remove from trajectory store AND vector index to avoid orphaned entries
|
|
288
|
+
for (const [id] of toRemove) {
|
|
289
|
+
delete data.trajectories[id];
|
|
290
|
+
// Async cleanup — fire and forget (non-critical)
|
|
291
|
+
getVectorStore().delete(id).catch(() => { });
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// ────────────────────────────────────────────────────────────────────
|
|
295
|
+
// Phase 2.6: Memory Compression & Pruning
|
|
296
|
+
// ────────────────────────────────────────────────────────────────────
|
|
297
|
+
/**
|
|
298
|
+
* Summarize old trajectories by merging multiple low-scoring or old
|
|
299
|
+
* trajectories into a single compact representation.
|
|
300
|
+
*
|
|
301
|
+
* Summarization replaces a group of similar old trajectories with a
|
|
302
|
+
* single aggregated entry that retains the most important information
|
|
303
|
+
* (goal, file patterns, common steps) while discarding individual details.
|
|
304
|
+
*
|
|
305
|
+
* @param retentionDays Keep original trajectories newer than this (default: 7)
|
|
306
|
+
* @param verbose Log summarization details
|
|
307
|
+
* @returns Number of trajectories summarized/removed
|
|
308
|
+
*/
|
|
309
|
+
async summarize(retentionDays = 7, verbose = false) {
|
|
310
|
+
const data = readTrajectories();
|
|
311
|
+
const cutoff = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
|
|
312
|
+
// Get trajectories older than retention period, grouped by project fingerprint
|
|
313
|
+
const oldTrajectories = Object.entries(data.trajectories)
|
|
314
|
+
.filter(([, t]) => t.timestamp < cutoff)
|
|
315
|
+
.sort(([, a], [, b]) => b.score - a.score); // Higher scores first
|
|
316
|
+
if (oldTrajectories.length < 3) {
|
|
317
|
+
if (verbose)
|
|
318
|
+
logger.info(`Only ${oldTrajectories.length} old trajectories — skipping summarization (need 3+)`);
|
|
319
|
+
return { summarized: 0, merged: 0 };
|
|
320
|
+
}
|
|
321
|
+
// Group by project fingerprint for merging
|
|
322
|
+
const groups = new Map();
|
|
323
|
+
for (const [id, traj] of oldTrajectories) {
|
|
324
|
+
const key = traj.projectFingerprint || 'unknown';
|
|
325
|
+
if (!groups.has(key))
|
|
326
|
+
groups.set(key, []);
|
|
327
|
+
groups.get(key).push([id, traj]);
|
|
328
|
+
}
|
|
329
|
+
let summarized = 0;
|
|
330
|
+
let merged = 0;
|
|
331
|
+
// For each group, keep the highest-scoring trajectory and summarize the rest
|
|
332
|
+
for (const [fingerprint, group] of groups) {
|
|
333
|
+
if (group.length < 2)
|
|
334
|
+
continue;
|
|
335
|
+
// Keep the highest-scoring trajectory as the representative
|
|
336
|
+
const [bestId, bestTraj] = group[0];
|
|
337
|
+
const rest = group.slice(1);
|
|
338
|
+
// Update the best trajectory to encompass the group
|
|
339
|
+
bestTraj.goal = `[Summarized] ${bestTraj.goal} (+${rest.length} similar tasks)`;
|
|
340
|
+
bestTraj.taskPlan = bestTraj.taskPlan.slice(0, 3); // Keep only first 3 steps
|
|
341
|
+
bestTraj.fileChanges = this.mergeFileChanges(bestTraj.fileChanges, rest.map(([, t]) => t.fileChanges).flat());
|
|
342
|
+
bestTraj.contextFiles = [
|
|
343
|
+
...new Set([...bestTraj.contextFiles, ...rest.map(([, t]) => t.contextFiles).flat()]),
|
|
344
|
+
];
|
|
345
|
+
bestTraj.score = Math.min(1.0, bestTraj.score + 0.05); // Small bonus for being representative
|
|
346
|
+
bestTraj.tasksCompleted = bestTraj.tasksCompleted + rest.reduce((s, [, t]) => s + t.tasksCompleted, 0);
|
|
347
|
+
bestTraj.tasksTotal = bestTraj.tasksTotal + rest.reduce((s, [, t]) => s + t.tasksTotal, 0);
|
|
348
|
+
// Remove the rest
|
|
349
|
+
for (const [id] of rest) {
|
|
350
|
+
delete data.trajectories[id];
|
|
351
|
+
getVectorStore().delete(id).catch(() => { });
|
|
352
|
+
merged++;
|
|
353
|
+
}
|
|
354
|
+
summarized++;
|
|
355
|
+
if (verbose) {
|
|
356
|
+
logger.info(`Summarized ${rest.length + 1} '${fingerprint}' trajectories into 1 (kept: ${bestId.slice(0, 16)}...)`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
writeTrajectories(data);
|
|
360
|
+
return { summarized, merged };
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Merge file changes from multiple trajectories into a unique set,
|
|
364
|
+
* preferring 'modified' status over 'read' etc.
|
|
365
|
+
*/
|
|
366
|
+
mergeFileChanges(primary, secondary) {
|
|
367
|
+
const seen = new Map();
|
|
368
|
+
// Status priority: modified > created > deleted > read
|
|
369
|
+
const statusPriority = {
|
|
370
|
+
modified: 3,
|
|
371
|
+
created: 2,
|
|
372
|
+
deleted: 1,
|
|
373
|
+
read: 0,
|
|
374
|
+
};
|
|
375
|
+
for (const fc of [...primary, ...secondary]) {
|
|
376
|
+
const existing = seen.get(fc.path);
|
|
377
|
+
const existingPrio = existing ? (statusPriority[existing] ?? 0) : -1;
|
|
378
|
+
const newPrio = statusPriority[fc.status] ?? 0;
|
|
379
|
+
if (newPrio > existingPrio) {
|
|
380
|
+
seen.set(fc.path, fc.status);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return Array.from(seen.entries()).map(([path, status]) => ({ path, status }));
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Prune trajectories based on configurable retention policy.
|
|
387
|
+
*
|
|
388
|
+
* @param maxAgeDays Remove trajectories older than this (default: 90)
|
|
389
|
+
* @param minScore Remove trajectories with score below this (default: 0.1)
|
|
390
|
+
* @param maxTrajectories Maximum number to keep (default: 500)
|
|
391
|
+
* @param verbose Log pruning details
|
|
392
|
+
* @returns Number of trajectories removed
|
|
393
|
+
*/
|
|
394
|
+
pruneByPolicy(maxAgeDays = 90, minScore = 0.1, maxTrajectories = 500, verbose = false) {
|
|
395
|
+
const data = readTrajectories();
|
|
396
|
+
const before = Object.keys(data.trajectories).length;
|
|
397
|
+
const now = Date.now();
|
|
398
|
+
const ageCutoff = now - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
399
|
+
let removed = 0;
|
|
400
|
+
// Remove by age
|
|
401
|
+
for (const [id, traj] of Object.entries(data.trajectories)) {
|
|
402
|
+
if (traj.timestamp < ageCutoff) {
|
|
403
|
+
delete data.trajectories[id];
|
|
404
|
+
getVectorStore().delete(id).catch(() => { });
|
|
405
|
+
removed++;
|
|
406
|
+
if (verbose) {
|
|
407
|
+
logger.debug(`Removed old trajectory ${id.slice(0, 16)}... (age exceeds ${maxAgeDays}d)`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// Remove by score
|
|
412
|
+
for (const [id, traj] of Object.entries(data.trajectories)) {
|
|
413
|
+
if (traj.score < minScore) {
|
|
414
|
+
delete data.trajectories[id];
|
|
415
|
+
getVectorStore().delete(id).catch(() => { });
|
|
416
|
+
removed++;
|
|
417
|
+
if (verbose) {
|
|
418
|
+
logger.debug(`Removed low-quality trajectory ${id.slice(0, 16)}... (score: ${traj.score.toFixed(2)})`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// Enforce max count
|
|
423
|
+
const entries = Object.entries(data.trajectories);
|
|
424
|
+
if (entries.length > maxTrajectories) {
|
|
425
|
+
const sorted = entries.sort(([, a], [, b]) => a.score - b.score);
|
|
426
|
+
const toRemove = sorted.slice(0, entries.length - maxTrajectories);
|
|
427
|
+
for (const [id] of toRemove) {
|
|
428
|
+
delete data.trajectories[id];
|
|
429
|
+
getVectorStore().delete(id).catch(() => { });
|
|
430
|
+
removed++;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
if (removed > 0) {
|
|
434
|
+
writeTrajectories(data);
|
|
435
|
+
}
|
|
436
|
+
return removed;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Get compression statistics showing memory usage and optimization potential.
|
|
440
|
+
*/
|
|
441
|
+
getCompressionStats() {
|
|
442
|
+
const data = readTrajectories();
|
|
443
|
+
const trajs = Object.values(data.trajectories);
|
|
444
|
+
const now = Date.now();
|
|
445
|
+
const thirtyDaysAgo = now - 30 * 24 * 60 * 60 * 1000;
|
|
446
|
+
const oldTrajectories = trajs.filter((t) => t.timestamp < thirtyDaysAgo).length;
|
|
447
|
+
const lowScoreTrajectories = trajs.filter((t) => t.score < 0.3).length;
|
|
448
|
+
// Count mergeable groups (2+ trajectories with same fingerprint)
|
|
449
|
+
const fingerprintCounts = new Map();
|
|
450
|
+
for (const t of trajs) {
|
|
451
|
+
const key = t.projectFingerprint || 'unknown';
|
|
452
|
+
fingerprintCounts.set(key, (fingerprintCounts.get(key) || 0) + 1);
|
|
453
|
+
}
|
|
454
|
+
const mergeableGroups = Array.from(fingerprintCounts.values()).filter((c) => c >= 2).length;
|
|
455
|
+
// Estimate size (rough: ~2KB per trajectory)
|
|
456
|
+
const totalSizeBytes = trajs.length * 2048;
|
|
457
|
+
const reductionEstimate = Math.min(100, Math.round(((oldTrajectories + lowScoreTrajectories * 0.5) / Math.max(1, trajs.length)) * 100));
|
|
458
|
+
return {
|
|
459
|
+
totalTrajectories: trajs.length,
|
|
460
|
+
totalSizeBytes,
|
|
461
|
+
oldTrajectories,
|
|
462
|
+
lowScoreTrajectories,
|
|
463
|
+
mergeableGroups,
|
|
464
|
+
estimatedOptimization: `~${reductionEstimate}% reduction possible`,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// Singleton instance
|
|
469
|
+
let storeInstance = null;
|
|
470
|
+
export function getTrajectoryStore() {
|
|
471
|
+
if (!storeInstance) {
|
|
472
|
+
storeInstance = new TrajectoryStore();
|
|
473
|
+
}
|
|
474
|
+
return storeInstance;
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=trajectory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory-store.js","sourceRoot":"","sources":["../../src/memory/trajectory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VectorStore — A lightweight, JSON-based vector index with cosine similarity search.
|
|
3
|
+
*
|
|
4
|
+
* Stores embeddings as `{ id, vector, metadata }` entries in a single JSON file.
|
|
5
|
+
* No external dependencies — uses only Node.js built-in fs and crypto.
|
|
6
|
+
*
|
|
7
|
+
* File location: ~/.buff/memory/vectors.json
|
|
8
|
+
*/
|
|
9
|
+
/** A single entry in the vector index */
|
|
10
|
+
export interface VectorEntry {
|
|
11
|
+
/** Unique identifier for this entry */
|
|
12
|
+
id: string;
|
|
13
|
+
/** The embedding vector (array of numbers) */
|
|
14
|
+
vector: number[];
|
|
15
|
+
/** Arbitrary metadata for filtering/display */
|
|
16
|
+
metadata: Record<string, unknown>;
|
|
17
|
+
/** Timestamp when this entry was created */
|
|
18
|
+
createdAt: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Compute cosine similarity between two vectors.
|
|
22
|
+
* Returns a value between -1 and 1 (higher = more similar).
|
|
23
|
+
*/
|
|
24
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
25
|
+
/**
|
|
26
|
+
* Lightweight vector store for semantic search.
|
|
27
|
+
*
|
|
28
|
+
* Usage:
|
|
29
|
+
* ```ts
|
|
30
|
+
* const store = new VectorStore();
|
|
31
|
+
* await store.insert("traj-001", [0.1, 0.2, ...], { goal: "add auth" });
|
|
32
|
+
* const results = await store.search([0.15, 0.25, ...], 3);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class VectorStore {
|
|
36
|
+
/**
|
|
37
|
+
* Insert a vector entry into the index.
|
|
38
|
+
* If an entry with the same `id` already exists, it is overwritten.
|
|
39
|
+
*/
|
|
40
|
+
insert(id: string, vector: number[], metadata?: Record<string, unknown>): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Retrieve a single entry by ID.
|
|
43
|
+
*/
|
|
44
|
+
get(id: string): Promise<VectorEntry | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Remove an entry from the index.
|
|
47
|
+
*/
|
|
48
|
+
delete(id: string): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Search for the top-k most similar entries to the query vector.
|
|
51
|
+
* Returns results sorted by similarity (highest first).
|
|
52
|
+
*/
|
|
53
|
+
search(queryVector: number[], k?: number, filterFn?: (entry: VectorEntry) => boolean): Promise<Array<{
|
|
54
|
+
entry: VectorEntry;
|
|
55
|
+
similarity: number;
|
|
56
|
+
}>>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the total number of stored entries.
|
|
59
|
+
*/
|
|
60
|
+
count(): Promise<number>;
|
|
61
|
+
/**
|
|
62
|
+
* Clear all entries from the index.
|
|
63
|
+
*/
|
|
64
|
+
clear(): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get all entries (for iteration/export).
|
|
67
|
+
*/
|
|
68
|
+
getAll(): Promise<VectorEntry[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Get vector store statistics.
|
|
71
|
+
*/
|
|
72
|
+
stats(): {
|
|
73
|
+
totalEntries: number;
|
|
74
|
+
dimensions: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export declare function getVectorStore(): VectorStore;
|
|
78
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/memory/vector-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AA2ED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAOjE;AAID;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjG;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKlD;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1C;;;OAGG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EAAE,EACrB,CAAC,GAAE,MAAU,EACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,GACzC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiB7D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKtC;;OAEG;IACH,KAAK,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAStD;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
|