audrey 0.16.1 → 0.20.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 -21
- package/README.md +146 -724
- package/dist/mcp-server/config.d.ts +20 -0
- package/dist/mcp-server/config.d.ts.map +1 -0
- package/dist/mcp-server/config.js +125 -0
- package/dist/mcp-server/config.js.map +1 -0
- package/dist/mcp-server/index.d.ts +100 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +1113 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/src/adaptive.d.ts +7 -0
- package/dist/src/adaptive.d.ts.map +1 -0
- package/dist/src/adaptive.js +49 -0
- package/dist/src/adaptive.js.map +1 -0
- package/dist/src/affect.d.ts +19 -0
- package/dist/src/affect.d.ts.map +1 -0
- package/dist/src/affect.js +72 -0
- package/dist/src/affect.js.map +1 -0
- package/dist/src/audrey.d.ts +140 -0
- package/dist/src/audrey.d.ts.map +1 -0
- package/dist/src/audrey.js +564 -0
- package/dist/src/audrey.js.map +1 -0
- package/dist/src/capsule.d.ts +68 -0
- package/dist/src/capsule.d.ts.map +1 -0
- package/dist/src/capsule.js +311 -0
- package/dist/src/capsule.js.map +1 -0
- package/dist/src/causal.d.ts +28 -0
- package/dist/src/causal.d.ts.map +1 -0
- package/dist/src/causal.js +65 -0
- package/dist/src/causal.js.map +1 -0
- package/dist/src/confidence.d.ts +12 -0
- package/dist/src/confidence.d.ts.map +1 -0
- package/dist/src/confidence.js +63 -0
- package/dist/src/confidence.js.map +1 -0
- package/dist/src/consolidate.d.ts +8 -0
- package/dist/src/consolidate.d.ts.map +1 -0
- package/dist/src/consolidate.js +218 -0
- package/dist/src/consolidate.js.map +1 -0
- package/dist/src/context.d.ts +3 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +19 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/db.d.ts +12 -0
- package/dist/src/db.d.ts.map +1 -0
- package/dist/src/db.js +380 -0
- package/dist/src/db.js.map +1 -0
- package/dist/src/decay.d.ts +7 -0
- package/dist/src/decay.d.ts.map +1 -0
- package/dist/src/decay.js +68 -0
- package/dist/src/decay.js.map +1 -0
- package/dist/src/embedding.d.ts +57 -0
- package/dist/src/embedding.d.ts.map +1 -0
- package/dist/src/embedding.js +254 -0
- package/dist/src/embedding.js.map +1 -0
- package/dist/src/encode.d.ts +15 -0
- package/dist/src/encode.d.ts.map +1 -0
- package/dist/src/encode.js +36 -0
- package/dist/src/encode.js.map +1 -0
- package/dist/src/events.d.ts +69 -0
- package/dist/src/events.d.ts.map +1 -0
- package/dist/src/events.js +149 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/export.d.ts +3 -0
- package/dist/src/export.d.ts.map +1 -0
- package/dist/src/export.js +46 -0
- package/dist/src/export.js.map +1 -0
- package/dist/src/forget.d.ts +11 -0
- package/dist/src/forget.d.ts.map +1 -0
- package/dist/src/forget.js +105 -0
- package/dist/src/forget.js.map +1 -0
- package/dist/src/fts.d.ts +34 -0
- package/dist/src/fts.d.ts.map +1 -0
- package/dist/src/fts.js +117 -0
- package/dist/src/fts.js.map +1 -0
- package/dist/src/hybrid-recall.d.ts +37 -0
- package/dist/src/hybrid-recall.d.ts.map +1 -0
- package/dist/src/hybrid-recall.js +213 -0
- package/dist/src/hybrid-recall.js.map +1 -0
- package/dist/src/import.d.ts +4 -0
- package/dist/src/import.d.ts.map +1 -0
- package/dist/src/import.js +127 -0
- package/dist/src/import.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.d.ts.map +1 -0
- package/{src → dist/src}/index.js +5 -13
- package/dist/src/index.js.map +1 -0
- package/dist/src/interference.d.ts +13 -0
- package/dist/src/interference.d.ts.map +1 -0
- package/dist/src/interference.js +45 -0
- package/dist/src/interference.js.map +1 -0
- package/dist/src/introspect.d.ts +4 -0
- package/dist/src/introspect.d.ts.map +1 -0
- package/dist/src/introspect.js +40 -0
- package/dist/src/introspect.js.map +1 -0
- package/dist/src/llm.d.ts +38 -0
- package/dist/src/llm.d.ts.map +1 -0
- package/dist/src/llm.js +167 -0
- package/dist/src/llm.js.map +1 -0
- package/dist/src/migrate.d.ts +6 -0
- package/dist/src/migrate.d.ts.map +1 -0
- package/dist/src/migrate.js +51 -0
- package/dist/src/migrate.js.map +1 -0
- package/dist/src/promote.d.ts +40 -0
- package/dist/src/promote.d.ts.map +1 -0
- package/dist/src/promote.js +200 -0
- package/dist/src/promote.js.map +1 -0
- package/dist/src/prompts.d.ts +16 -0
- package/dist/src/prompts.d.ts.map +1 -0
- package/{src → dist/src}/prompts.js +172 -203
- package/dist/src/prompts.js.map +1 -0
- package/dist/src/recall.d.ts +9 -0
- package/dist/src/recall.d.ts.map +1 -0
- package/dist/src/recall.js +432 -0
- package/dist/src/recall.js.map +1 -0
- package/dist/src/redact.d.ts +27 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +228 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/rollback.d.ts +8 -0
- package/dist/src/rollback.d.ts.map +1 -0
- package/dist/src/rollback.js +33 -0
- package/dist/src/rollback.js.map +1 -0
- package/dist/src/routes.d.ts +7 -0
- package/dist/src/routes.d.ts.map +1 -0
- package/dist/src/routes.js +226 -0
- package/dist/src/routes.js.map +1 -0
- package/dist/src/rules-compiler.d.ts +20 -0
- package/dist/src/rules-compiler.d.ts.map +1 -0
- package/dist/src/rules-compiler.js +143 -0
- package/dist/src/rules-compiler.js.map +1 -0
- package/dist/src/server.d.ts +12 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +22 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tool-trace.d.ts +37 -0
- package/dist/src/tool-trace.d.ts.map +1 -0
- package/dist/src/tool-trace.js +142 -0
- package/dist/src/tool-trace.js.map +1 -0
- package/dist/src/types.d.ts +446 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/ulid.d.ts +3 -0
- package/dist/src/ulid.d.ts.map +1 -0
- package/dist/src/ulid.js +11 -0
- package/dist/src/ulid.js.map +1 -0
- package/dist/src/utils.d.ts +10 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +41 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/validate.d.ts +22 -0
- package/dist/src/validate.d.ts.map +1 -0
- package/dist/src/validate.js +109 -0
- package/dist/src/validate.js.map +1 -0
- package/docs/assets/benchmarks/local-benchmark.svg +45 -0
- package/docs/assets/benchmarks/operations-benchmark.svg +45 -0
- package/docs/assets/benchmarks/published-memory-standards.svg +50 -0
- package/docs/benchmarking.md +151 -0
- package/docs/production-readiness.md +124 -0
- package/examples/fintech-ops-demo.js +67 -0
- package/examples/healthcare-ops-demo.js +67 -0
- package/examples/stripe-demo.js +105 -0
- package/package.json +53 -13
- package/mcp-server/config.js +0 -80
- package/mcp-server/index.js +0 -729
- package/src/adaptive.js +0 -53
- package/src/affect.js +0 -64
- package/src/audrey.js +0 -604
- package/src/causal.js +0 -95
- package/src/confidence.js +0 -120
- package/src/consolidate.js +0 -265
- package/src/context.js +0 -15
- package/src/db.js +0 -370
- package/src/decay.js +0 -84
- package/src/embedding.js +0 -256
- package/src/encode.js +0 -63
- package/src/export.js +0 -67
- package/src/forget.js +0 -111
- package/src/import.js +0 -245
- package/src/interference.js +0 -51
- package/src/introspect.js +0 -48
- package/src/llm.js +0 -246
- package/src/migrate.js +0 -58
- package/src/recall.js +0 -352
- package/src/rollback.js +0 -42
- package/src/ulid.js +0 -18
- package/src/utils.js +0 -38
- package/src/validate.js +0 -172
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Audrey } from '../dist/src/index.js';
|
|
2
|
+
|
|
3
|
+
async function demo() {
|
|
4
|
+
console.log('=== Audrey Demo: Healthcare Operations ===\n');
|
|
5
|
+
|
|
6
|
+
const brain = new Audrey({
|
|
7
|
+
dataDir: './healthcare-demo-data',
|
|
8
|
+
agent: 'care-ops-agent',
|
|
9
|
+
embedding: { provider: 'mock', dimensions: 64 },
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
console.log('--- Encoding care-coordination observations ---');
|
|
13
|
+
await brain.encode({
|
|
14
|
+
content: 'Referral queue delays drop when missing imaging notes are requested before prior-authorization submission.',
|
|
15
|
+
source: 'direct-observation',
|
|
16
|
+
salience: 0.9,
|
|
17
|
+
tags: ['healthcare-ops', 'prior-auth', 'referrals'],
|
|
18
|
+
context: { domain: 'healthcare', workflow: 'prior-auth' },
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
await brain.encode({
|
|
22
|
+
content: 'Scheduling team reports the highest callback completion rate between 4pm and 6pm for discharge follow-up.',
|
|
23
|
+
source: 'tool-result',
|
|
24
|
+
salience: 0.8,
|
|
25
|
+
tags: ['healthcare-ops', 'follow-up', 'scheduling'],
|
|
26
|
+
context: { domain: 'healthcare', workflow: 'discharge-followup' },
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
await brain.encode({
|
|
30
|
+
content: 'Care coordinators want interpreter requirements captured in every handoff note before outreach starts.',
|
|
31
|
+
source: 'told-by-user',
|
|
32
|
+
salience: 0.7,
|
|
33
|
+
tags: ['healthcare-ops', 'handoff', 'interpreter'],
|
|
34
|
+
context: { domain: 'healthcare', workflow: 'care-coordination' },
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
console.log('\n--- Consolidating into a reusable workflow ---');
|
|
38
|
+
await brain.consolidate({
|
|
39
|
+
minClusterSize: 3,
|
|
40
|
+
similarityThreshold: -0.3,
|
|
41
|
+
extractPrinciple: () => ({
|
|
42
|
+
content: 'For care-coordination workflows, collect missing documentation and communication preferences before outreach or prior-auth submission.',
|
|
43
|
+
type: 'procedural',
|
|
44
|
+
conditions: ['prior-auth missing documentation', 'handoff note lacks outreach constraints'],
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
console.log('\n--- Recalling during a care-coordination handoff ---');
|
|
49
|
+
const recalled = await brain.recall('care coordination handoff missing documentation', {
|
|
50
|
+
limit: 5,
|
|
51
|
+
context: { domain: 'healthcare', workflow: 'care-coordination' },
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
for (const memory of recalled) {
|
|
55
|
+
console.log(`[${memory.type}] ${memory.content}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
brain.close();
|
|
59
|
+
|
|
60
|
+
const { rmSync } = await import('node:fs');
|
|
61
|
+
rmSync('./healthcare-demo-data', { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
demo().catch(err => {
|
|
65
|
+
console.error(err);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// examples/stripe-demo.js
|
|
2
|
+
// Proof-of-concept demo showing the full Audrey pipeline:
|
|
3
|
+
// encode episodic memories → consolidate into principles → recall proactively
|
|
4
|
+
//
|
|
5
|
+
// Run: node examples/stripe-demo.js
|
|
6
|
+
// No external dependencies required (uses mock embeddings).
|
|
7
|
+
|
|
8
|
+
import { Audrey } from '../dist/src/index.js';
|
|
9
|
+
|
|
10
|
+
async function demo() {
|
|
11
|
+
console.log('=== Audrey Demo: Stripe Rate Limit Learning ===\n');
|
|
12
|
+
|
|
13
|
+
const brain = new Audrey({
|
|
14
|
+
dataDir: './demo-data',
|
|
15
|
+
agent: 'stripe-agent',
|
|
16
|
+
embedding: { provider: 'mock', dimensions: 64 },
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
brain.on('encode', ({ id, content }) => {
|
|
20
|
+
console.log(` [ENCODE] ${id.slice(0, 8)}... "${content.slice(0, 60)}"`);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
brain.on('consolidation', ({ principlesExtracted, clustersFound }) => {
|
|
24
|
+
console.log(` [CONSOLIDATE] Found ${clustersFound} clusters, extracted ${principlesExtracted} principles`);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
brain.on('reinforcement', ({ episodeId, similarity }) => {
|
|
28
|
+
console.log(` [REINFORCE] Episode ${episodeId.slice(0, 8)}... reinforced existing knowledge (sim: ${similarity?.toFixed(2) || 'N/A'})`);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// --- Scenario: Agent encounters Stripe rate limits ---
|
|
32
|
+
|
|
33
|
+
console.log('--- Episode 1: First rate limit hit ---');
|
|
34
|
+
await brain.encode({
|
|
35
|
+
content: 'Stripe API returned HTTP 429 when batch-processing 150 payments per second',
|
|
36
|
+
source: 'direct-observation',
|
|
37
|
+
salience: 0.9,
|
|
38
|
+
causal: { trigger: 'batch-payment-job', consequence: 'payment-queue-stalled' },
|
|
39
|
+
tags: ['stripe', 'rate-limit', 'production'],
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
console.log('\n--- Episode 2: Second hit from different code path ---');
|
|
43
|
+
await brain.encode({
|
|
44
|
+
content: 'Stripe webhook verification endpoint returned 429 Too Many Requests during high traffic',
|
|
45
|
+
source: 'tool-result',
|
|
46
|
+
salience: 0.7,
|
|
47
|
+
causal: { trigger: 'webhook-flood', consequence: 'missed-webhook-events' },
|
|
48
|
+
tags: ['stripe', 'rate-limit', 'webhooks'],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
console.log('\n--- Episode 3: Third observation from monitoring ---');
|
|
52
|
+
await brain.encode({
|
|
53
|
+
content: 'Stripe API rate limit triggered at approximately 100 requests per second threshold',
|
|
54
|
+
source: 'direct-observation',
|
|
55
|
+
salience: 0.8,
|
|
56
|
+
tags: ['stripe', 'rate-limit', 'monitoring'],
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// --- Consolidation ---
|
|
60
|
+
console.log('\n--- Running consolidation ("sleep" cycle) ---');
|
|
61
|
+
await brain.consolidate({
|
|
62
|
+
minClusterSize: 3,
|
|
63
|
+
// Mock embeddings are hash-based (not semantic), so cosine similarity
|
|
64
|
+
// between related texts is near-random. In production with real embeddings
|
|
65
|
+
// (e.g. OpenAI text-embedding-3-small), a threshold of 0.80+ works well.
|
|
66
|
+
// We drop it here so the demo pipeline runs end-to-end.
|
|
67
|
+
similarityThreshold: -0.3,
|
|
68
|
+
extractPrinciple: (episodes) => ({
|
|
69
|
+
content: `Stripe enforces ~100 req/s rate limit across all endpoints. Exceeding this causes 429 errors that can stall payment queues and cause missed webhooks. Implement request throttling.`,
|
|
70
|
+
type: 'semantic',
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// --- Proactive recall ---
|
|
75
|
+
console.log('\n--- Agent encounters Stripe again, recalls proactively ---');
|
|
76
|
+
const memories = await brain.recall('stripe api request rate', {
|
|
77
|
+
minConfidence: 0.3,
|
|
78
|
+
limit: 5,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
console.log(`\nRecalled ${memories.length} memories:`);
|
|
82
|
+
for (const mem of memories) {
|
|
83
|
+
console.log(` [${mem.type.toUpperCase()}] (conf: ${mem.confidence.toFixed(2)}, score: ${mem.score.toFixed(3)}) ${mem.content.slice(0, 80)}${mem.content.length > 80 ? '...' : ''}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// --- Introspection ---
|
|
87
|
+
console.log('\n--- Brain stats ---');
|
|
88
|
+
const stats = brain.introspect();
|
|
89
|
+
console.log(` Episodic memories: ${stats.episodic}`);
|
|
90
|
+
console.log(` Semantic principles: ${stats.semantic}`);
|
|
91
|
+
console.log(` Procedural workflows: ${stats.procedural}`);
|
|
92
|
+
console.log(` Causal links: ${stats.causalLinks}`);
|
|
93
|
+
console.log(` Consolidation runs: ${stats.totalConsolidationRuns}`);
|
|
94
|
+
console.log(` Dormant memories: ${stats.dormant}`);
|
|
95
|
+
|
|
96
|
+
brain.close();
|
|
97
|
+
|
|
98
|
+
// Cleanup demo data
|
|
99
|
+
const { rmSync } = await import('node:fs');
|
|
100
|
+
rmSync('./demo-data', { recursive: true, force: true });
|
|
101
|
+
|
|
102
|
+
console.log('\n=== Demo complete ===');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
demo().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,26 +1,57 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "audrey",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Biological memory architecture for AI agents
|
|
3
|
+
"version": "0.20.0",
|
|
4
|
+
"description": "Biological memory architecture for AI agents - encode, consolidate, and recall memories with confidence decay, contradiction detection, and causal graphs",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "src/index.js",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
|
-
".":
|
|
9
|
-
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/src/index.d.ts",
|
|
11
|
+
"default": "./dist/src/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./mcp": {
|
|
14
|
+
"types": "./dist/mcp-server/index.d.ts",
|
|
15
|
+
"default": "./dist/mcp-server/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./server": {
|
|
18
|
+
"types": "./dist/src/server.d.ts",
|
|
19
|
+
"default": "./dist/src/server.js"
|
|
20
|
+
}
|
|
10
21
|
},
|
|
11
22
|
"bin": {
|
|
12
|
-
"audrey": "mcp-server/index.js",
|
|
13
|
-
"audrey-mcp": "mcp-server/index.js"
|
|
23
|
+
"audrey": "dist/mcp-server/index.js",
|
|
24
|
+
"audrey-mcp": "dist/mcp-server/index.js"
|
|
14
25
|
},
|
|
15
26
|
"files": [
|
|
16
|
-
"
|
|
17
|
-
"
|
|
27
|
+
"dist/",
|
|
28
|
+
"docs/production-readiness.md",
|
|
29
|
+
"docs/benchmarking.md",
|
|
30
|
+
"docs/assets/benchmarks/",
|
|
31
|
+
"examples/",
|
|
18
32
|
"README.md",
|
|
19
33
|
"LICENSE"
|
|
20
34
|
],
|
|
21
35
|
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"prebuild": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
38
|
+
"pretest": "npm run build",
|
|
22
39
|
"test": "vitest run",
|
|
23
|
-
"test:watch": "vitest"
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"prepack": "npm run build",
|
|
42
|
+
"pack:check": "npm pack --dry-run",
|
|
43
|
+
"bench:memory": "node benchmarks/run.js",
|
|
44
|
+
"bench:memory:retrieval": "node benchmarks/run.js --suite retrieval",
|
|
45
|
+
"bench:memory:operations": "node benchmarks/run.js --suite operations",
|
|
46
|
+
"bench:memory:json": "node benchmarks/run.js --json",
|
|
47
|
+
"bench:memory:check": "node benchmarks/run.js --check",
|
|
48
|
+
"bench:memory:readme-assets": "node benchmarks/run.js --readme-assets-dir docs/assets/benchmarks",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"serve": "node dist/mcp-server/index.js serve",
|
|
51
|
+
"docker:build": "docker build -t audrey:local .",
|
|
52
|
+
"docker:up": "docker compose up -d --build",
|
|
53
|
+
"docker:down": "docker compose down",
|
|
54
|
+
"docker:logs": "docker compose logs -f audrey"
|
|
24
55
|
},
|
|
25
56
|
"keywords": [
|
|
26
57
|
"ai",
|
|
@@ -47,7 +78,11 @@
|
|
|
47
78
|
"persistent-memory",
|
|
48
79
|
"rag",
|
|
49
80
|
"claude",
|
|
50
|
-
"agent-framework"
|
|
81
|
+
"agent-framework",
|
|
82
|
+
"rest-api",
|
|
83
|
+
"http-server",
|
|
84
|
+
"fintech",
|
|
85
|
+
"healthcare"
|
|
51
86
|
],
|
|
52
87
|
"repository": {
|
|
53
88
|
"type": "git",
|
|
@@ -57,20 +92,25 @@
|
|
|
57
92
|
"bugs": {
|
|
58
93
|
"url": "https://github.com/Evilander/Audrey/issues"
|
|
59
94
|
},
|
|
60
|
-
"author": "
|
|
95
|
+
"author": "evilander",
|
|
61
96
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
97
|
+
"node": ">=20"
|
|
63
98
|
},
|
|
64
99
|
"license": "MIT",
|
|
65
100
|
"dependencies": {
|
|
101
|
+
"@hono/node-server": "^1.19.13",
|
|
66
102
|
"@huggingface/transformers": "^3.8.1",
|
|
67
103
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
68
104
|
"better-sqlite3": "^12.6.2",
|
|
105
|
+
"hono": "^4.12.12",
|
|
69
106
|
"sqlite-vec": "^0.1.7-alpha.2",
|
|
70
107
|
"ulid": "^3.0.2",
|
|
71
108
|
"zod": "^4.3.6"
|
|
72
109
|
},
|
|
73
110
|
"devDependencies": {
|
|
111
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
112
|
+
"@types/node": "^25.6.0",
|
|
113
|
+
"typescript": "^6.0.2",
|
|
74
114
|
"vitest": "^4.0.18"
|
|
75
115
|
}
|
|
76
116
|
}
|
package/mcp-server/config.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { homedir } from 'node:os';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
|
|
4
|
-
export const VERSION = '0.16.1';
|
|
5
|
-
export const SERVER_NAME = 'audrey-memory';
|
|
6
|
-
export const DEFAULT_DATA_DIR = join(homedir(), '.audrey', 'data');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Resolves which embedding provider to use.
|
|
10
|
-
* Priority: explicit config -> gemini (if GOOGLE_API_KEY exists) -> local
|
|
11
|
-
* OpenAI is NEVER auto-selected -- must be set explicitly via AUDREY_EMBEDDING_PROVIDER=openai.
|
|
12
|
-
*/
|
|
13
|
-
export function resolveEmbeddingProvider(env, explicit) {
|
|
14
|
-
if (explicit && explicit !== 'auto') {
|
|
15
|
-
const dims = explicit === 'openai' ? 1536 : explicit === 'gemini' ? 3072 : 384;
|
|
16
|
-
const apiKey = explicit === 'gemini'
|
|
17
|
-
? (env.GOOGLE_API_KEY || env.GEMINI_API_KEY)
|
|
18
|
-
: explicit === 'openai'
|
|
19
|
-
? env.OPENAI_API_KEY
|
|
20
|
-
: undefined;
|
|
21
|
-
const result = { provider: explicit, apiKey, dimensions: dims };
|
|
22
|
-
if (explicit === 'local') result.device = env.AUDREY_DEVICE || 'gpu';
|
|
23
|
-
return result;
|
|
24
|
-
}
|
|
25
|
-
if (env.GOOGLE_API_KEY || env.GEMINI_API_KEY) {
|
|
26
|
-
return { provider: 'gemini', apiKey: env.GOOGLE_API_KEY || env.GEMINI_API_KEY, dimensions: 3072 };
|
|
27
|
-
}
|
|
28
|
-
return { provider: 'local', dimensions: 384, device: env.AUDREY_DEVICE || 'gpu' };
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function buildAudreyConfig() {
|
|
32
|
-
const dataDir = process.env.AUDREY_DATA_DIR || DEFAULT_DATA_DIR;
|
|
33
|
-
const agent = process.env.AUDREY_AGENT || 'claude-code';
|
|
34
|
-
const explicitProvider = process.env.AUDREY_EMBEDDING_PROVIDER;
|
|
35
|
-
const llmProvider = process.env.AUDREY_LLM_PROVIDER;
|
|
36
|
-
|
|
37
|
-
const embedding = resolveEmbeddingProvider(process.env, explicitProvider);
|
|
38
|
-
|
|
39
|
-
const config = { dataDir, agent, embedding };
|
|
40
|
-
|
|
41
|
-
if (llmProvider === 'anthropic') {
|
|
42
|
-
config.llm = { provider: 'anthropic', apiKey: process.env.ANTHROPIC_API_KEY };
|
|
43
|
-
} else if (llmProvider === 'openai') {
|
|
44
|
-
config.llm = { provider: 'openai', apiKey: process.env.OPENAI_API_KEY };
|
|
45
|
-
} else if (llmProvider === 'mock') {
|
|
46
|
-
config.llm = { provider: 'mock' };
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return config;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function buildInstallArgs(env = process.env) {
|
|
53
|
-
const envPairs = [`AUDREY_DATA_DIR=${DEFAULT_DATA_DIR}`];
|
|
54
|
-
|
|
55
|
-
const embedding = resolveEmbeddingProvider(env);
|
|
56
|
-
if (embedding.provider === 'gemini') {
|
|
57
|
-
envPairs.push('AUDREY_EMBEDDING_PROVIDER=gemini');
|
|
58
|
-
envPairs.push(`GOOGLE_API_KEY=${embedding.apiKey}`);
|
|
59
|
-
} else if (embedding.provider === 'openai') {
|
|
60
|
-
envPairs.push('AUDREY_EMBEDDING_PROVIDER=openai');
|
|
61
|
-
envPairs.push(`OPENAI_API_KEY=${env.OPENAI_API_KEY}`);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (env.ANTHROPIC_API_KEY) {
|
|
65
|
-
envPairs.push('AUDREY_LLM_PROVIDER=anthropic');
|
|
66
|
-
envPairs.push(`ANTHROPIC_API_KEY=${env.ANTHROPIC_API_KEY}`);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const args = ['mcp', 'add', '-s', 'user', SERVER_NAME];
|
|
70
|
-
for (const pair of envPairs) {
|
|
71
|
-
args.push('-e', pair);
|
|
72
|
-
}
|
|
73
|
-
if (process.platform === 'win32') {
|
|
74
|
-
args.push('--', 'cmd', '/c', 'npx', 'audrey');
|
|
75
|
-
} else {
|
|
76
|
-
args.push('--', 'npx', 'audrey');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return args;
|
|
80
|
-
}
|