audrey 0.17.0 → 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/README.md +129 -374
- 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/production-readiness.md +28 -0
- package/examples/fintech-ops-demo.js +1 -1
- package/examples/healthcare-ops-demo.js +1 -1
- package/examples/stripe-demo.js +1 -1
- package/package.json +34 -13
- package/benchmarks/baselines.js +0 -169
- package/benchmarks/cases.js +0 -421
- package/benchmarks/reference-results.js +0 -70
- package/benchmarks/report.js +0 -255
- package/benchmarks/run.js +0 -514
- package/mcp-server/config.js +0 -133
- package/mcp-server/index.js +0 -1265
- package/mcp-server/serve.js +0 -482
- package/src/adaptive.js +0 -53
- package/src/affect.js +0 -64
- package/src/audrey.js +0 -642
- package/src/causal.js +0 -95
- package/src/confidence.js +0 -120
- package/src/consolidate.js +0 -281
- package/src/context.js +0 -15
- package/src/db.js +0 -391
- package/src/decay.js +0 -84
- package/src/embedding.js +0 -260
- package/src/encode.js +0 -69
- package/src/export.js +0 -67
- package/src/forget.js +0 -111
- package/src/fts.js +0 -134
- package/src/import.js +0 -273
- package/src/interference.js +0 -51
- package/src/introspect.js +0 -48
- package/src/llm.js +0 -249
- package/src/migrate.js +0 -58
- package/src/recall.js +0 -573
- package/src/rollback.js +0 -42
- package/src/ulid.js +0 -18
- package/src/utils.js +0 -63
- package/src/validate.js +0 -172
- package/types/index.d.ts +0 -434
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/capsule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAgB,aAAa,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AAGvF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,YAAY,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAExG,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,WAAW,CAAC;QAClB,0BAA0B,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,QAAQ,EAAE;QACR,WAAW,EAAE,YAAY,EAAE,CAAC;QAC5B,aAAa,EAAE,YAAY,EAAE,CAAC;QAC9B,gBAAgB,EAAE,YAAY,EAAE,CAAC;QACjC,UAAU,EAAE,YAAY,EAAE,CAAC;QAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;QACtB,cAAc,EAAE,YAAY,EAAE,CAAC;QAC/B,cAAc,EAAE,YAAY,EAAE,CAAC;QAC/B,qBAAqB,EAAE,YAAY,EAAE,CAAC;KACvC,CAAC;IACF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA+MD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA4IxB"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Capsule — structured, evidence-backed retrieval packet.
|
|
3
|
+
*
|
|
4
|
+
* Replaces "loose list of relevant memories" with a ranked, categorized,
|
|
5
|
+
* token-budgeted, explainable packet organized into nine sections:
|
|
6
|
+
* must_follow — rules the agent must respect this turn
|
|
7
|
+
* project_facts — stable facts about entities/concepts in the project
|
|
8
|
+
* user_preferences — how this user works (told-by-user or tagged preference)
|
|
9
|
+
* procedures — procedural memories the agent should apply
|
|
10
|
+
* risks — recent failures + memories tagged risk/warning/failure
|
|
11
|
+
* recent_changes — memories created or reinforced in the last N hours
|
|
12
|
+
* contradictions — open contradictions in the memory store
|
|
13
|
+
* uncertain_or_disputed — low-confidence or disputed-state memories
|
|
14
|
+
* evidence — IDs of every memory referenced in the other sections
|
|
15
|
+
*
|
|
16
|
+
* Every entry carries a `reason` explaining why it was included.
|
|
17
|
+
*/
|
|
18
|
+
import { recentFailures } from './events.js';
|
|
19
|
+
const MUST_FOLLOW_TAGS = new Set(['must-follow', 'must', 'required', 'never', 'always', 'policy']);
|
|
20
|
+
const PREFERENCE_TAGS = new Set(['preference', 'prefers', 'user-preference']);
|
|
21
|
+
const RISK_TAGS = new Set(['risk', 'warning', 'failure', 'failure-prevention', 'danger']);
|
|
22
|
+
const PROCEDURE_TAGS = new Set(['procedure', 'playbook', 'howto', 'workflow']);
|
|
23
|
+
const SECTION_PRIORITY = [
|
|
24
|
+
'must_follow',
|
|
25
|
+
'risks',
|
|
26
|
+
'contradictions',
|
|
27
|
+
'procedures',
|
|
28
|
+
'project_facts',
|
|
29
|
+
'user_preferences',
|
|
30
|
+
'recent_changes',
|
|
31
|
+
'uncertain_or_disputed',
|
|
32
|
+
];
|
|
33
|
+
function parseTags(raw) {
|
|
34
|
+
if (!raw)
|
|
35
|
+
return [];
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
if (Array.isArray(parsed))
|
|
39
|
+
return parsed.map(String);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// fall through: some rows may have been stored as comma-separated
|
|
43
|
+
}
|
|
44
|
+
return String(raw).split(',').map(t => t.trim()).filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
function parseEvidence(raw) {
|
|
47
|
+
if (!raw)
|
|
48
|
+
return [];
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
if (Array.isArray(parsed))
|
|
52
|
+
return parsed.map(String);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// ignore
|
|
56
|
+
}
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
function memoryTypeOf(t) {
|
|
60
|
+
if (t === 'episodic')
|
|
61
|
+
return 'episode';
|
|
62
|
+
if (t === 'procedural')
|
|
63
|
+
return 'procedural';
|
|
64
|
+
return 'semantic';
|
|
65
|
+
}
|
|
66
|
+
function withinWindow(createdAt, windowMs) {
|
|
67
|
+
if (!createdAt)
|
|
68
|
+
return false;
|
|
69
|
+
const t = Date.parse(createdAt);
|
|
70
|
+
if (!Number.isFinite(t))
|
|
71
|
+
return false;
|
|
72
|
+
return Date.now() - t <= windowMs;
|
|
73
|
+
}
|
|
74
|
+
function hashMatchesAny(tags, pool) {
|
|
75
|
+
for (const tag of tags) {
|
|
76
|
+
if (pool.has(tag.toLowerCase()))
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
function buildRecallEntry(result, enrichment, reason) {
|
|
82
|
+
return {
|
|
83
|
+
memory_id: result.id,
|
|
84
|
+
memory_type: memoryTypeOf(result.type),
|
|
85
|
+
content: result.content,
|
|
86
|
+
confidence: result.confidence,
|
|
87
|
+
scope: enrichment.scope,
|
|
88
|
+
evidence: enrichment.evidence.length > 0 ? enrichment.evidence : undefined,
|
|
89
|
+
reason,
|
|
90
|
+
source: result.source,
|
|
91
|
+
tags: enrichment.tags.length > 0 ? enrichment.tags : undefined,
|
|
92
|
+
state: result.state,
|
|
93
|
+
created_at: result.createdAt,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function buildFailureEntry(f, reason) {
|
|
97
|
+
const toolLabel = f.tool_name || 'unknown tool';
|
|
98
|
+
const summary = f.last_error_summary
|
|
99
|
+
? `${toolLabel} failed ${f.failure_count}x recently — last error: ${f.last_error_summary}`
|
|
100
|
+
: `${toolLabel} failed ${f.failure_count}x recently`;
|
|
101
|
+
return {
|
|
102
|
+
memory_id: `failure:${f.tool_name}:${f.last_failed_at}`,
|
|
103
|
+
memory_type: 'tool_failure',
|
|
104
|
+
content: summary,
|
|
105
|
+
confidence: Math.min(0.5 + (f.failure_count - 1) * 0.1, 0.95),
|
|
106
|
+
reason,
|
|
107
|
+
created_at: f.last_failed_at,
|
|
108
|
+
recommended_action: `Before re-running ${toolLabel}, check preflight conditions from the last failure.`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function buildContradictionEntry(row, reason) {
|
|
112
|
+
return {
|
|
113
|
+
memory_id: row.id,
|
|
114
|
+
memory_type: 'contradiction',
|
|
115
|
+
content: `Contradiction between ${row.claim_a_type}:${row.claim_a_id} and ${row.claim_b_type}:${row.claim_b_id}`,
|
|
116
|
+
confidence: 0.5,
|
|
117
|
+
reason,
|
|
118
|
+
created_at: row.created_at,
|
|
119
|
+
state: 'disputed',
|
|
120
|
+
evidence: [row.claim_a_id, row.claim_b_id],
|
|
121
|
+
recommended_action: 'Resolve or mark context_dependent before acting on either claim.',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function loadEpisodeEnrichment(db, id) {
|
|
125
|
+
return db.prepare(`SELECT id, tags, source, created_at, private, agent FROM episodes WHERE id = ?`).get(id);
|
|
126
|
+
}
|
|
127
|
+
function loadSemanticEnrichment(db, id) {
|
|
128
|
+
return db.prepare(`SELECT id, state, evidence_episode_ids, created_at, last_reinforced_at FROM semantics WHERE id = ?`).get(id);
|
|
129
|
+
}
|
|
130
|
+
function loadProcedureEnrichment(db, id) {
|
|
131
|
+
return db.prepare(`SELECT id, state, evidence_episode_ids, created_at, last_reinforced_at FROM procedures WHERE id = ?`).get(id);
|
|
132
|
+
}
|
|
133
|
+
function loadOpenContradictions(db, limit) {
|
|
134
|
+
return db.prepare(`SELECT id, claim_a_id, claim_b_id, claim_a_type, claim_b_type, state, created_at
|
|
135
|
+
FROM contradictions
|
|
136
|
+
WHERE state = 'open'
|
|
137
|
+
ORDER BY created_at DESC
|
|
138
|
+
LIMIT ?`).all(limit);
|
|
139
|
+
}
|
|
140
|
+
function categorize(entry, result, tags, recentWindowMs) {
|
|
141
|
+
const sections = new Set();
|
|
142
|
+
const lowerTags = tags.map(t => t.toLowerCase());
|
|
143
|
+
if (hashMatchesAny(lowerTags, MUST_FOLLOW_TAGS)) {
|
|
144
|
+
sections.add('must_follow');
|
|
145
|
+
}
|
|
146
|
+
if (hashMatchesAny(lowerTags, RISK_TAGS)) {
|
|
147
|
+
sections.add('risks');
|
|
148
|
+
}
|
|
149
|
+
if (entry.memory_type === 'procedural' || hashMatchesAny(lowerTags, PROCEDURE_TAGS)) {
|
|
150
|
+
sections.add('procedures');
|
|
151
|
+
}
|
|
152
|
+
if (hashMatchesAny(lowerTags, PREFERENCE_TAGS) || result.source === 'told-by-user') {
|
|
153
|
+
sections.add('user_preferences');
|
|
154
|
+
}
|
|
155
|
+
if (entry.state === 'disputed' || entry.state === 'context_dependent' || result.confidence < 0.55) {
|
|
156
|
+
sections.add('uncertain_or_disputed');
|
|
157
|
+
}
|
|
158
|
+
if (withinWindow(result.createdAt, recentWindowMs)) {
|
|
159
|
+
sections.add('recent_changes');
|
|
160
|
+
}
|
|
161
|
+
if (sections.size === 0) {
|
|
162
|
+
if (entry.memory_type === 'semantic') {
|
|
163
|
+
sections.add('project_facts');
|
|
164
|
+
}
|
|
165
|
+
else if (entry.memory_type === 'episode') {
|
|
166
|
+
sections.add('project_facts');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return [...sections];
|
|
170
|
+
}
|
|
171
|
+
function charsOf(entry) {
|
|
172
|
+
return entry.content.length + (entry.recommended_action?.length ?? 0);
|
|
173
|
+
}
|
|
174
|
+
export async function buildCapsule(audrey, query, options = {}) {
|
|
175
|
+
const mode = options.mode
|
|
176
|
+
?? (process.env['AUDREY_CAPSULE_MODE'] ?? 'balanced');
|
|
177
|
+
const budgetChars = options.budgetChars
|
|
178
|
+
?? Number.parseInt(process.env['AUDREY_CONTEXT_BUDGET_CHARS'] ?? '4000', 10);
|
|
179
|
+
const recentChangeWindowHours = options.recentChangeWindowHours ?? 24;
|
|
180
|
+
const recallLimit = options.limit ?? (mode === 'conservative' ? 8 : mode === 'aggressive' ? 24 : 16);
|
|
181
|
+
const recentWindowMs = recentChangeWindowHours * 60 * 60 * 1000;
|
|
182
|
+
const includeRisks = options.includeRisks ?? true;
|
|
183
|
+
const includeContradictions = options.includeContradictions ?? true;
|
|
184
|
+
const sections = {
|
|
185
|
+
must_follow: [],
|
|
186
|
+
project_facts: [],
|
|
187
|
+
user_preferences: [],
|
|
188
|
+
procedures: [],
|
|
189
|
+
risks: [],
|
|
190
|
+
recent_changes: [],
|
|
191
|
+
contradictions: [],
|
|
192
|
+
uncertain_or_disputed: [],
|
|
193
|
+
};
|
|
194
|
+
const evidenceIds = new Set();
|
|
195
|
+
const seenPerSection = new Map();
|
|
196
|
+
function push(section, entry) {
|
|
197
|
+
let seen = seenPerSection.get(section);
|
|
198
|
+
if (!seen) {
|
|
199
|
+
seen = new Set();
|
|
200
|
+
seenPerSection.set(section, seen);
|
|
201
|
+
}
|
|
202
|
+
if (seen.has(entry.memory_id))
|
|
203
|
+
return;
|
|
204
|
+
seen.add(entry.memory_id);
|
|
205
|
+
sections[section].push(entry);
|
|
206
|
+
evidenceIds.add(entry.memory_id);
|
|
207
|
+
for (const id of entry.evidence ?? [])
|
|
208
|
+
evidenceIds.add(id);
|
|
209
|
+
}
|
|
210
|
+
// 1. Primary recall (vector + confidence scoring)
|
|
211
|
+
const results = await audrey.recall(query, {
|
|
212
|
+
limit: recallLimit,
|
|
213
|
+
...(options.recall ?? {}),
|
|
214
|
+
});
|
|
215
|
+
const db = audrey.db;
|
|
216
|
+
for (const result of results) {
|
|
217
|
+
let tags = [];
|
|
218
|
+
let evidence = [];
|
|
219
|
+
let scope;
|
|
220
|
+
if (result.type === 'episodic') {
|
|
221
|
+
const row = loadEpisodeEnrichment(db, result.id);
|
|
222
|
+
tags = parseTags(row?.tags);
|
|
223
|
+
scope = row?.agent ? `agent:${row.agent}` : undefined;
|
|
224
|
+
}
|
|
225
|
+
else if (result.type === 'semantic') {
|
|
226
|
+
const row = loadSemanticEnrichment(db, result.id);
|
|
227
|
+
evidence = parseEvidence(row?.evidence_episode_ids);
|
|
228
|
+
}
|
|
229
|
+
else if (result.type === 'procedural') {
|
|
230
|
+
const row = loadProcedureEnrichment(db, result.id);
|
|
231
|
+
evidence = parseEvidence(row?.evidence_episode_ids);
|
|
232
|
+
}
|
|
233
|
+
const entry = buildRecallEntry(result, { tags, evidence, scope }, 'Matched query via semantic similarity.');
|
|
234
|
+
const assigned = categorize(entry, result, tags, recentWindowMs);
|
|
235
|
+
for (const section of assigned) {
|
|
236
|
+
const entryForSection = { ...entry };
|
|
237
|
+
if (section === 'recent_changes') {
|
|
238
|
+
entryForSection.reason = 'Created or reinforced inside the recent-change window.';
|
|
239
|
+
}
|
|
240
|
+
else if (section === 'must_follow') {
|
|
241
|
+
entryForSection.reason = 'Tagged as a must-follow rule.';
|
|
242
|
+
}
|
|
243
|
+
else if (section === 'procedures') {
|
|
244
|
+
entryForSection.reason = entry.memory_type === 'procedural' ? 'Procedural memory matching query.' : 'Tagged as a procedure.';
|
|
245
|
+
}
|
|
246
|
+
else if (section === 'user_preferences') {
|
|
247
|
+
entryForSection.reason = result.source === 'told-by-user' ? 'User-stated preference.' : 'Tagged as a user preference.';
|
|
248
|
+
}
|
|
249
|
+
else if (section === 'risks') {
|
|
250
|
+
entryForSection.reason = 'Tagged as a risk or warning.';
|
|
251
|
+
}
|
|
252
|
+
else if (section === 'uncertain_or_disputed') {
|
|
253
|
+
entryForSection.reason = entry.state === 'disputed' ? 'Disputed memory.' : 'Low-confidence memory.';
|
|
254
|
+
}
|
|
255
|
+
push(section, entryForSection);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// 2. Tool-failure risks from memory_events
|
|
259
|
+
if (includeRisks) {
|
|
260
|
+
const failures = recentFailures(db, { since: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(), limit: 5 });
|
|
261
|
+
for (const failure of failures) {
|
|
262
|
+
push('risks', buildFailureEntry(failure, `Tool ${failure.tool_name ?? '(unknown)'} failed recently; treat as preflight warning.`));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// 3. Open contradictions
|
|
266
|
+
if (includeContradictions) {
|
|
267
|
+
const contradictions = loadOpenContradictions(db, 5);
|
|
268
|
+
for (const row of contradictions) {
|
|
269
|
+
push('contradictions', buildContradictionEntry(row, 'Open contradiction — both sides referenced in capsule.'));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// 4. Enforce the token budget. Iterate sections in priority order and trim.
|
|
273
|
+
let usedChars = 0;
|
|
274
|
+
let truncated = false;
|
|
275
|
+
const prunedSections = {
|
|
276
|
+
must_follow: [],
|
|
277
|
+
project_facts: [],
|
|
278
|
+
user_preferences: [],
|
|
279
|
+
procedures: [],
|
|
280
|
+
risks: [],
|
|
281
|
+
recent_changes: [],
|
|
282
|
+
contradictions: [],
|
|
283
|
+
uncertain_or_disputed: [],
|
|
284
|
+
};
|
|
285
|
+
for (const section of SECTION_PRIORITY) {
|
|
286
|
+
const ordered = [...sections[section]].sort((a, b) => b.confidence - a.confidence);
|
|
287
|
+
for (const entry of ordered) {
|
|
288
|
+
const cost = charsOf(entry);
|
|
289
|
+
if (usedChars + cost > budgetChars) {
|
|
290
|
+
truncated = true;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
prunedSections[section].push(entry);
|
|
294
|
+
usedChars += cost;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
query,
|
|
299
|
+
generated_at: new Date().toISOString(),
|
|
300
|
+
budget_chars: budgetChars,
|
|
301
|
+
used_chars: usedChars,
|
|
302
|
+
truncated,
|
|
303
|
+
policy: {
|
|
304
|
+
mode,
|
|
305
|
+
recent_change_window_hours: recentChangeWindowHours,
|
|
306
|
+
},
|
|
307
|
+
sections: prunedSections,
|
|
308
|
+
evidence_ids: [...evidenceIds],
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=capsule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/capsule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import type { CausalLinkRow, LLMProvider } from './types.js';
|
|
3
|
+
export declare function addCausalLink(db: Database.Database, { causeId, effectId, linkType, mechanism, confidence }: {
|
|
4
|
+
causeId: string;
|
|
5
|
+
effectId: string;
|
|
6
|
+
linkType?: string;
|
|
7
|
+
mechanism?: string;
|
|
8
|
+
confidence?: number;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function getCausalChain(db: Database.Database, memoryId: string, options?: {
|
|
11
|
+
depth?: number;
|
|
12
|
+
}): CausalLinkRow[];
|
|
13
|
+
export declare function articulateCausalLink(db: Database.Database, llmProvider: LLMProvider, cause: {
|
|
14
|
+
id: string;
|
|
15
|
+
content: string;
|
|
16
|
+
source: string;
|
|
17
|
+
}, effect: {
|
|
18
|
+
id: string;
|
|
19
|
+
content: string;
|
|
20
|
+
source: string;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
linkId: string | null;
|
|
23
|
+
mechanism: string;
|
|
24
|
+
linkType: string;
|
|
25
|
+
confidence: number;
|
|
26
|
+
spurious: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=causal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causal.d.ts","sourceRoot":"","sources":["../../src/causal.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI7D,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,MAAM,CAUR;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,aAAa,EAAE,CA8BjB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACtD,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAkCD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { generateId } from './ulid.js';
|
|
2
|
+
import { buildCausalArticulationPrompt } from './prompts.js';
|
|
3
|
+
export function addCausalLink(db, { causeId, effectId, linkType = 'causal', mechanism, confidence }) {
|
|
4
|
+
const id = generateId();
|
|
5
|
+
const now = new Date().toISOString();
|
|
6
|
+
db.prepare(`
|
|
7
|
+
INSERT INTO causal_links (id, cause_id, effect_id, link_type, mechanism, confidence, created_at)
|
|
8
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
9
|
+
`).run(id, causeId, effectId, linkType, mechanism, confidence, now);
|
|
10
|
+
return id;
|
|
11
|
+
}
|
|
12
|
+
export function getCausalChain(db, memoryId, options = {}) {
|
|
13
|
+
const { depth = 10 } = options;
|
|
14
|
+
const results = [];
|
|
15
|
+
const visited = new Set();
|
|
16
|
+
const queue = [memoryId];
|
|
17
|
+
let currentDepth = 0;
|
|
18
|
+
while (queue.length > 0 && currentDepth < depth) {
|
|
19
|
+
const nextQueue = [];
|
|
20
|
+
for (const nodeId of queue) {
|
|
21
|
+
if (visited.has(nodeId))
|
|
22
|
+
continue;
|
|
23
|
+
visited.add(nodeId);
|
|
24
|
+
const links = db.prepare('SELECT * FROM causal_links WHERE cause_id = ?').all(nodeId);
|
|
25
|
+
for (const link of links) {
|
|
26
|
+
if (!visited.has(link.effect_id)) {
|
|
27
|
+
results.push(link);
|
|
28
|
+
nextQueue.push(link.effect_id);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
queue.length = 0;
|
|
33
|
+
queue.push(...nextQueue);
|
|
34
|
+
currentDepth++;
|
|
35
|
+
}
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
export async function articulateCausalLink(db, llmProvider, cause, effect) {
|
|
39
|
+
const messages = buildCausalArticulationPrompt(cause, effect);
|
|
40
|
+
const result = await llmProvider.json(messages);
|
|
41
|
+
if (result.spurious) {
|
|
42
|
+
return {
|
|
43
|
+
linkId: null,
|
|
44
|
+
mechanism: result.mechanism,
|
|
45
|
+
linkType: result.linkType,
|
|
46
|
+
confidence: result.confidence,
|
|
47
|
+
spurious: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const linkId = addCausalLink(db, {
|
|
51
|
+
causeId: cause.id,
|
|
52
|
+
effectId: effect.id,
|
|
53
|
+
linkType: result.linkType || 'correlational',
|
|
54
|
+
mechanism: result.mechanism,
|
|
55
|
+
confidence: result.confidence,
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
linkId,
|
|
59
|
+
mechanism: result.mechanism,
|
|
60
|
+
linkType: result.linkType,
|
|
61
|
+
confidence: result.confidence,
|
|
62
|
+
spurious: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=causal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causal.js","sourceRoot":"","sources":["../../src/causal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConfidenceWeights, HalfLives, SourceReliabilityMap, ComputeConfidenceParams } from './types.js';
|
|
2
|
+
export declare const DEFAULT_SOURCE_RELIABILITY: SourceReliabilityMap;
|
|
3
|
+
export declare const DEFAULT_WEIGHTS: ConfidenceWeights;
|
|
4
|
+
export declare const DEFAULT_HALF_LIVES: HalfLives;
|
|
5
|
+
export declare const MODEL_GENERATED_CONFIDENCE_CAP: number;
|
|
6
|
+
export declare function sourceReliability(sourceType: string, customReliability?: SourceReliabilityMap): number;
|
|
7
|
+
export declare function evidenceAgreement(supportingCount: number, contradictingCount: number): number;
|
|
8
|
+
export declare function recencyDecay(ageDays: number, halfLifeDays: number): number;
|
|
9
|
+
export declare function retrievalReinforcement(retrievalCount: number, daysSinceRetrieval: number): number;
|
|
10
|
+
export declare function salienceModifier(salience?: number | null): number;
|
|
11
|
+
export declare function computeConfidence({ sourceType, supportingCount, contradictingCount, ageDays, halfLifeDays, retrievalCount, daysSinceRetrieval, weights, customSourceReliability, }: ComputeConfidenceParams): number;
|
|
12
|
+
//# sourceMappingURL=confidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.d.ts","sourceRoot":"","sources":["../../src/confidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE9G,eAAO,MAAM,0BAA0B,EAAE,oBAMxC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,iBAK7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAY,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAOtG;AAED,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAI7F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAOjG;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGjE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,uBAAuB,GACxB,EAAE,uBAAuB,GAAG,MAAM,CAelC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const DEFAULT_SOURCE_RELIABILITY = {
|
|
2
|
+
'direct-observation': 0.95,
|
|
3
|
+
'told-by-user': 0.90,
|
|
4
|
+
'tool-result': 0.85,
|
|
5
|
+
'inference': 0.60,
|
|
6
|
+
'model-generated': 0.40,
|
|
7
|
+
};
|
|
8
|
+
export const DEFAULT_WEIGHTS = {
|
|
9
|
+
source: 0.30,
|
|
10
|
+
evidence: 0.35,
|
|
11
|
+
recency: 0.20,
|
|
12
|
+
retrieval: 0.15,
|
|
13
|
+
};
|
|
14
|
+
export const DEFAULT_HALF_LIVES = {
|
|
15
|
+
episodic: 7,
|
|
16
|
+
semantic: 30,
|
|
17
|
+
procedural: 90,
|
|
18
|
+
};
|
|
19
|
+
export const MODEL_GENERATED_CONFIDENCE_CAP = 0.6;
|
|
20
|
+
export function sourceReliability(sourceType, customReliability) {
|
|
21
|
+
const table = customReliability || DEFAULT_SOURCE_RELIABILITY;
|
|
22
|
+
const value = table[sourceType];
|
|
23
|
+
if (value === undefined) {
|
|
24
|
+
throw new Error(`Unknown source type: ${sourceType}. Valid types: ${Object.keys(table).join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
export function evidenceAgreement(supportingCount, contradictingCount) {
|
|
29
|
+
const total = supportingCount + contradictingCount;
|
|
30
|
+
if (total === 0)
|
|
31
|
+
return 1.0;
|
|
32
|
+
return supportingCount / total;
|
|
33
|
+
}
|
|
34
|
+
export function recencyDecay(ageDays, halfLifeDays) {
|
|
35
|
+
const lambda = Math.LN2 / halfLifeDays;
|
|
36
|
+
return Math.exp(-lambda * ageDays);
|
|
37
|
+
}
|
|
38
|
+
export function retrievalReinforcement(retrievalCount, daysSinceRetrieval) {
|
|
39
|
+
if (retrievalCount === 0)
|
|
40
|
+
return 0;
|
|
41
|
+
const lambdaRet = Math.LN2 / 14;
|
|
42
|
+
const baseReinforcement = 0.3 * Math.log(1 + retrievalCount);
|
|
43
|
+
const recencyWeight = Math.exp(-lambdaRet * daysSinceRetrieval);
|
|
44
|
+
const spacedBonus = Math.min(0.15, 0.02 * Math.log(1 + daysSinceRetrieval));
|
|
45
|
+
return Math.min(1.0, baseReinforcement * recencyWeight + spacedBonus);
|
|
46
|
+
}
|
|
47
|
+
export function salienceModifier(salience) {
|
|
48
|
+
const s = salience ?? 0.5;
|
|
49
|
+
return 0.5 + s;
|
|
50
|
+
}
|
|
51
|
+
export function computeConfidence({ sourceType, supportingCount, contradictingCount, ageDays, halfLifeDays, retrievalCount, daysSinceRetrieval, weights, customSourceReliability, }) {
|
|
52
|
+
const w = weights || DEFAULT_WEIGHTS;
|
|
53
|
+
const s = sourceReliability(sourceType, customSourceReliability);
|
|
54
|
+
const e = evidenceAgreement(supportingCount, contradictingCount);
|
|
55
|
+
const r = recencyDecay(ageDays, halfLifeDays);
|
|
56
|
+
const ret = retrievalReinforcement(retrievalCount, daysSinceRetrieval);
|
|
57
|
+
let confidence = w.source * s + w.evidence * e + w.recency * r + w.retrieval * ret;
|
|
58
|
+
if (sourceType === 'model-generated') {
|
|
59
|
+
confidence = Math.min(confidence, MODEL_GENERATED_CONFIDENCE_CAP);
|
|
60
|
+
}
|
|
61
|
+
return Math.max(0, Math.min(1, confidence));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=confidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.js","sourceRoot":"","sources":["../../src/confidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import type { ConsolidationOptions, ConsolidationResult, EmbeddingProvider, EpisodeRow } from './types.js';
|
|
3
|
+
export declare function clusterEpisodes(db: Database.Database, embeddingProvider: EmbeddingProvider, options?: {
|
|
4
|
+
similarityThreshold?: number;
|
|
5
|
+
minClusterSize?: number;
|
|
6
|
+
}): EpisodeRow[][];
|
|
7
|
+
export declare function runConsolidation(db: Database.Database, embeddingProvider: EmbeddingProvider, options?: ConsolidationOptions): Promise<ConsolidationResult>;
|
|
8
|
+
//# sourceMappingURL=consolidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../src/consolidate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EAGX,MAAM,YAAY,CAAC;AAqFpB,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACtE,UAAU,EAAE,EAAE,CAahB;AA6BD,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAmL9B"}
|