eklavya 1.91.1 → 1.92.1
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 +7 -5
- package/dist/assets/dashboard.html +151 -3
- package/dist/cli-economy.js +434 -0
- package/dist/cli-economy.js.map +1 -0
- package/dist/cli-memory.js +4 -1
- package/dist/cli-memory.js.map +1 -1
- package/dist/cli.js +46 -5
- package/dist/cli.js.map +1 -1
- package/dist/config-path.js +23 -1
- package/dist/config-path.js.map +1 -1
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -1
- package/dist/cost-report.js +67 -0
- package/dist/cost-report.js.map +1 -0
- package/dist/dashboard.js +79 -1
- package/dist/dashboard.js.map +1 -1
- package/dist/economy/LICENSE +202 -0
- package/dist/economy/envfacts.js +229 -0
- package/dist/economy/envfacts.js.map +1 -0
- package/dist/economy/loopguard.js +169 -0
- package/dist/economy/loopguard.js.map +1 -0
- package/dist/economy/pricing.js +54 -0
- package/dist/economy/pricing.js.map +1 -0
- package/dist/economy/shell-edits.js +238 -0
- package/dist/economy/shell-edits.js.map +1 -0
- package/dist/economy/signals.js +164 -0
- package/dist/economy/signals.js.map +1 -0
- package/dist/economy/toolprune.js +209 -0
- package/dist/economy/toolprune.js.map +1 -0
- package/dist/economy/transcript.js +290 -0
- package/dist/economy/transcript.js.map +1 -0
- package/dist/feedback-review.js +1 -1
- package/dist/feedback-review.js.map +1 -1
- package/dist/feedback.js +3 -0
- package/dist/feedback.js.map +1 -1
- package/dist/guard-note.js +21 -0
- package/dist/guard-note.js.map +1 -0
- package/dist/hooks/capture-tool.js +61 -11
- package/dist/hooks/capture-tool.js.map +1 -1
- package/dist/hooks/economy-lib.js +20 -0
- package/dist/hooks/economy-lib.js.map +1 -0
- package/dist/hooks/file-context.js +1 -1
- package/dist/hooks/file-context.js.map +1 -1
- package/dist/hooks/lib.js.map +1 -1
- package/dist/hooks/memory-lib.js +17 -1
- package/dist/hooks/memory-lib.js.map +1 -1
- package/dist/hooks/prompt-submit-nudge.js +36 -5
- package/dist/hooks/prompt-submit-nudge.js.map +1 -1
- package/dist/hooks/session-end.js +32 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/hooks/session-start.js +34 -0
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop-quiz-check.js +20 -0
- package/dist/hooks/stop-quiz-check.js.map +1 -1
- package/dist/hooks/subagent-start.js +19 -3
- package/dist/hooks/subagent-start.js.map +1 -1
- package/dist/install.js +5 -1
- package/dist/install.js.map +1 -1
- package/dist/ledger-pending.js +85 -0
- package/dist/ledger-pending.js.map +1 -0
- package/dist/ledger.js +144 -0
- package/dist/ledger.js.map +1 -0
- package/dist/loop-guard.js +190 -0
- package/dist/loop-guard.js.map +1 -0
- package/dist/memory/capture.js +2 -2
- package/dist/memory/capture.js.map +1 -1
- package/dist/memory/embed.js +37 -0
- package/dist/memory/embed.js.map +1 -1
- package/dist/memory/pinned.js +175 -0
- package/dist/memory/pinned.js.map +1 -0
- package/dist/memory/provider.js +66 -0
- package/dist/memory/provider.js.map +1 -1
- package/dist/memory/recall.js +177 -36
- package/dist/memory/recall.js.map +1 -1
- package/dist/memory/seam.js +88 -0
- package/dist/memory/seam.js.map +1 -0
- package/dist/memory/search.js +65 -11
- package/dist/memory/search.js.map +1 -1
- package/dist/memory/store.js +74 -15
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/summarize.js.map +1 -1
- package/dist/memory/terms.js +100 -0
- package/dist/memory/terms.js.map +1 -0
- package/dist/memory/tokens.js +28 -7
- package/dist/memory/tokens.js.map +1 -1
- package/dist/memory/use.js +123 -0
- package/dist/memory/use.js.map +1 -0
- package/dist/memory/worker.js +16 -1
- package/dist/memory/worker.js.map +1 -1
- package/dist/migrations/034_memory_keywords.sql +59 -0
- package/dist/migrations/035_econ_ledger.sql +69 -0
- package/dist/migrations/036_econ_turns.sql +52 -0
- package/dist/migrations/037_econ_toolprune.sql +38 -0
- package/dist/migrations/038_pinned_facts.sql +48 -0
- package/dist/migrations/039_memory_use.sql +34 -0
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/hooks/hooks.json +30 -0
- package/dist/plugin/skills/CLAUDE.md +1 -1
- package/dist/plugin/skills/memory/SKILL.md +2 -1
- package/dist/plugin/skills/toolprune/SKILL.md +31 -0
- package/dist/statusline.js +2 -2
- package/dist/statusline.js.map +1 -1
- package/dist/toolprune-store.js +136 -0
- package/dist/toolprune-store.js.map +1 -0
- package/dist/tools/config_tools.js +30 -0
- package/dist/tools/config_tools.js.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory_read_tools.js +8 -0
- package/dist/tools/memory_read_tools.js.map +1 -1
- package/dist/tools/memory_write_tools.js +21 -0
- package/dist/tools/memory_write_tools.js.map +1 -1
- package/dist/user-skill/eklavya/SKILL.md +5 -3
- package/package.json +1 -1
package/dist/memory/provider.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { usageOf } from '../economy/transcript.js';
|
|
1
2
|
import { spawn } from 'node:child_process';
|
|
2
3
|
import os from 'node:os';
|
|
3
4
|
import { z } from 'zod';
|
|
@@ -22,6 +23,8 @@ const LIMIT = {
|
|
|
22
23
|
file: 400,
|
|
23
24
|
tags: 12,
|
|
24
25
|
tag: 40,
|
|
26
|
+
keywords: 12,
|
|
27
|
+
keyword: 60,
|
|
25
28
|
concepts: 8,
|
|
26
29
|
checkpointField: 1200,
|
|
27
30
|
};
|
|
@@ -32,6 +35,7 @@ const DraftSchema = z.object({
|
|
|
32
35
|
facts: z.array(z.string().max(LIMIT.fact)).max(LIMIT.facts),
|
|
33
36
|
files: z.array(z.string().max(LIMIT.file)).max(LIMIT.files),
|
|
34
37
|
tags: z.array(z.string().max(LIMIT.tag)).max(LIMIT.tags),
|
|
38
|
+
keywords: z.array(z.string().max(LIMIT.keyword)).max(LIMIT.keywords).optional(),
|
|
35
39
|
concepts: z
|
|
36
40
|
.array(z.object({ slug: z.string().max(80), name: z.string().max(120), domain: z.string().max(60) }))
|
|
37
41
|
.max(LIMIT.concepts)
|
|
@@ -45,6 +49,9 @@ const CheckpointSchema = z.object({
|
|
|
45
49
|
next_steps: z.string().max(LIMIT.checkpointField),
|
|
46
50
|
});
|
|
47
51
|
const ResultSchema = z.object({ observations: z.array(DraftSchema).max(LIMIT.observations) });
|
|
52
|
+
const PinnedSchema = z
|
|
53
|
+
.array(z.object({ kind: z.enum(['env', 'decision', 'convention']), text: z.string().min(1).max(300) }))
|
|
54
|
+
.max(4);
|
|
48
55
|
/**
|
|
49
56
|
* The model's output cut to the limits, before validation.
|
|
50
57
|
*
|
|
@@ -83,6 +90,7 @@ export function trimToLimits(raw) {
|
|
|
83
90
|
facts: list(d.facts, LIMIT.facts, LIMIT.fact),
|
|
84
91
|
files: list(d.files, LIMIT.files, LIMIT.file),
|
|
85
92
|
tags: list(d.tags, LIMIT.tags, LIMIT.tag),
|
|
93
|
+
keywords: list(d.keywords, LIMIT.keywords, LIMIT.keyword),
|
|
86
94
|
concepts: Array.isArray(d.concepts) ? d.concepts.slice(0, LIMIT.concepts) : d.concepts,
|
|
87
95
|
};
|
|
88
96
|
}),
|
|
@@ -106,6 +114,7 @@ const OUTPUT_SCHEMA = {
|
|
|
106
114
|
facts: { type: 'array', items: { type: 'string' } },
|
|
107
115
|
files: { type: 'array', items: { type: 'string' } },
|
|
108
116
|
tags: { type: 'array', items: { type: 'string' } },
|
|
117
|
+
keywords: { type: 'array', items: { type: 'string' } },
|
|
109
118
|
concepts: {
|
|
110
119
|
type: 'array',
|
|
111
120
|
items: {
|
|
@@ -118,6 +127,15 @@ const OUTPUT_SCHEMA = {
|
|
|
118
127
|
},
|
|
119
128
|
},
|
|
120
129
|
},
|
|
130
|
+
pinned: {
|
|
131
|
+
type: 'array',
|
|
132
|
+
items: {
|
|
133
|
+
type: 'object',
|
|
134
|
+
additionalProperties: false,
|
|
135
|
+
required: ['kind', 'text'],
|
|
136
|
+
properties: { kind: { type: 'string', enum: ['env', 'decision', 'convention'] }, text: { type: 'string' } },
|
|
137
|
+
},
|
|
138
|
+
},
|
|
121
139
|
checkpoint: {
|
|
122
140
|
type: 'object',
|
|
123
141
|
additionalProperties: false,
|
|
@@ -153,8 +171,10 @@ const SYSTEM = [
|
|
|
153
171
|
'Keep durable signal: what the system now does differently, what shipped, root causes, and concrete findings from logs, query results, test output and code paths, with the names, files and values involved.',
|
|
154
172
|
'Skip routine operations: status checks with nothing to report, installs without errors, file listings and searches with no follow-on finding, and anything already recorded in the session so far.',
|
|
155
173
|
`Write one observation per distinct finding, decision or change, at most ${LIMIT.observations}; do not merge unrelated work into one. Each fact is one self-contained statement without pronouns, at most ${LIMIT.facts} facts of under ${LIMIT.fact} characters; the narrative is under ${LIMIT.narrative} characters.`,
|
|
174
|
+
`keywords: up to ${LIMIT.keywords} other words or short phrases a developer might use when asking about this later but that the title and facts do not already use (synonyms, the symptom for a fix, the feature area). They are indexed for search and never shown.`,
|
|
156
175
|
'Tool events end with "→" and what the tool returned: record what it showed, not only that it ran. An assistant event is the agent\'s own conclusion for that turn: keep what it found and decided.',
|
|
157
176
|
'Every fact must be supported by the evidence. Omit rather than guess. If the evidence shows no durable work, return an empty observations array.',
|
|
177
|
+
'pinned (optional, at most 4): durable facts about this project that every later session should know before it starts: env (how to run things here, e.g. "tests run with `python -m pytest`; bare `pytest` is not installed"), decision ("CSV exports use `;` as the separator"), convention. Only facts the evidence shows; never advice about finishing, skipping or verifying work. Usually empty.',
|
|
158
178
|
`If the evidence contains an assistant event, the turn has ended: also return a checkpoint for the whole session so far, using <session_so_far> when given. request: what the developer asked for, in one sentence. investigated, learned, completed: short lists of specifics. next_steps: where the work is heading now, or what the developer still has to do. Each under ${LIMIT.checkpointField} characters. When neither this evidence nor the session so far holds durable work, leave request empty. Without an assistant event, omit checkpoint.`,
|
|
159
179
|
].join('\n');
|
|
160
180
|
/** The tags the prompt fences evidence with, and so the ones evidence may not spell. */
|
|
@@ -183,6 +203,37 @@ const TIMEOUT_MS = 100_000;
|
|
|
183
203
|
/** SIGTERM to SIGKILL, for a tree that ignores the polite ask. */
|
|
184
204
|
const KILL_GRACE_MS = 5_000;
|
|
185
205
|
const MAX_STDOUT = 16 * 1024 * 1024;
|
|
206
|
+
let usageSink = null;
|
|
207
|
+
/**
|
|
208
|
+
* Where `runClaude` reports usage: the process that holds the database sets
|
|
209
|
+
* it once (`meterProviderCalls` in `ledger.ts`). Unset, usage is not recorded.
|
|
210
|
+
*/
|
|
211
|
+
export function setUsageSink(sink) {
|
|
212
|
+
usageSink = sink;
|
|
213
|
+
}
|
|
214
|
+
/** The usage in a `claude -p --output-format json` envelope, or null when there is none. */
|
|
215
|
+
export function usageFromEnvelope(stdout, model, source) {
|
|
216
|
+
let envelope;
|
|
217
|
+
try {
|
|
218
|
+
envelope = JSON.parse(stdout);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
const usage = usageOf(envelope?.usage);
|
|
224
|
+
if (!usage)
|
|
225
|
+
return null;
|
|
226
|
+
// `modelUsage` names the id that actually served the call; the one with the
|
|
227
|
+
// most output is the main one (Claude Code may add a small helper call).
|
|
228
|
+
const byModel = envelope.modelUsage && typeof envelope.modelUsage === 'object' ? envelope.modelUsage : {};
|
|
229
|
+
const served = Object.entries(byModel).sort((a, b) => (b[1]?.outputTokens ?? 0) - (a[1]?.outputTokens ?? 0))[0]?.[0];
|
|
230
|
+
return {
|
|
231
|
+
source,
|
|
232
|
+
model: served ?? model,
|
|
233
|
+
usage,
|
|
234
|
+
costUsd: typeof envelope.total_cost_usd === 'number' ? envelope.total_cost_usd : null,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
186
237
|
/**
|
|
187
238
|
* The flags that make `claude -p` a summariser and nothing else: no tools, no
|
|
188
239
|
* MCP servers, no hooks — this plugin's hooks included, or the summariser's own
|
|
@@ -442,6 +493,16 @@ export function runClaude(model, prompt, opts = {}) {
|
|
|
442
493
|
const why = stderr.trim();
|
|
443
494
|
if (!stdout.trim() && why)
|
|
444
495
|
return reject(new ProviderError(classifyMessage(why, null), `claude -p: ${why}`));
|
|
496
|
+
// A failed run that printed its envelope was still billed: record it too.
|
|
497
|
+
const spent = usageSink ? usageFromEnvelope(stdout, model, opts.spec?.source ?? 'observer') : null;
|
|
498
|
+
if (spent) {
|
|
499
|
+
try {
|
|
500
|
+
usageSink(spent);
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
/* A ledger that cannot write must not fail the call it measured. */
|
|
504
|
+
}
|
|
505
|
+
}
|
|
445
506
|
resolve(stdout);
|
|
446
507
|
});
|
|
447
508
|
});
|
|
@@ -522,6 +583,7 @@ export class ProviderSummarizer {
|
|
|
522
583
|
facts: o.facts,
|
|
523
584
|
files: o.files,
|
|
524
585
|
tags: o.tags,
|
|
586
|
+
...(o.keywords?.length ? { keywords: o.keywords } : {}),
|
|
525
587
|
confidence: 0.8,
|
|
526
588
|
eventIds: input.events.map((e) => e.id),
|
|
527
589
|
concepts: o.concepts,
|
|
@@ -534,6 +596,10 @@ export class ProviderSummarizer {
|
|
|
534
596
|
const cp = parsed.success ? parsed.data : undefined;
|
|
535
597
|
if (cp && cp.request.trim() && endsTurn)
|
|
536
598
|
drafts.checkpoint = cp;
|
|
599
|
+
// Proposals only, validated on their own like the checkpoint.
|
|
600
|
+
const pinned = PinnedSchema.safeParse(raw?.pinned);
|
|
601
|
+
if (pinned.success && pinned.data.length)
|
|
602
|
+
drafts.pinned = pinned.data;
|
|
537
603
|
return drafts;
|
|
538
604
|
}
|
|
539
605
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/memory/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/memory/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsB3C,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE3B;IADX,YACW,UAA8B,EACvC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,eAAU,GAAV,UAAU,CAAoB;QAIvC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,wFAAwF;AACxF,MAAM,KAAK,GAAG;IACZ,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC;IACX,eAAe,EAAE,IAAI;CACb,CAAC;AAEX,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;IAC/E,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACpG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;SACnB,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAE9F,MAAM,YAAY,GAAG,CAAC;KACnB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACtG,GAAG,CAAC,CAAC,CAAC,CAAC;AAEV;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAChD,MAAM,GAAG,GAAI,GAAkC,CAAC,YAAY,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAS,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtH,MAAM,EAAE,GAAI,GAAgC,CAAC,UAAU,CAAC;IACxD,OAAO;QACL,GAAG,GAAG;QACN,GAAG,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,CAAC,CAAC;gBACE,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,EAA6B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAClG;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAA4B,CAAC;YACvC,OAAO;gBACL,GAAG,CAAC;gBACJ,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;gBAChC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC7C,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC7C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;gBACzC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;gBACzD,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;aACvF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;gBAClE,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE;oBACpG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACnD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACnD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAClD,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACtD,QAAQ,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,oBAAoB,EAAE,KAAK;4BAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;4BACpC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;yBAC/F;qBACF;iBACF;aACF;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aAC5G;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC;YAC3E,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;SACF;KACF;CACO,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,EAAW,CAAC;AAE5F;;;;;GAKG;AACH,MAAM,MAAM,GAAG;IACb,0GAA0G;IAC1G,uHAAuH;IACvH,qPAAqP;IACrP,8MAA8M;IAC9M,oMAAoM;IACpM,2EAA2E,KAAK,CAAC,YAAY,+GAA+G,KAAK,CAAC,KAAK,mBAAmB,KAAK,CAAC,IAAI,uCAAuC,KAAK,CAAC,SAAS,cAAc;IACxT,mBAAmB,KAAK,CAAC,QAAQ,oOAAoO;IACrQ,oMAAoM;IACpM,kJAAkJ;IAClJ,sYAAsY;IACtY,+WAA+W,KAAK,CAAC,eAAe,sJAAsJ;CAC3hB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,wFAAwF;AACxF,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,gBAAgB,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,WAAW,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IAC1H,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,kEAAkE;AAClE,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AA6BpC,IAAI,SAAS,GAAwC,IAAI,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAyC;IACpE,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAa,EAAE,MAAc;IAC7E,IAAI,QAAiC,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAQ,CAAC,UAAwD,CAAC,CAAC,CAAC,EAAE,CAAC;IACzJ,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrH,OAAO;QACL,MAAM;QACN,KAAK,EAAE,MAAM,IAAI,KAAK;QACtB,KAAK;QACL,OAAO,EAAE,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;KACtF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;IAClG,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,MAAM;QACzB,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5C,iBAAiB,EAAE,IAAI,CAAC,MAAM;QAC9B,SAAS,EAAE,EAAE;QACb,qBAAqB;QACrB,0BAA0B;QAC1B,4EAA4E;QAC5E,qEAAqE;QACrE,4BAA4B;QAC5B,aAAa;QACb,wFAAwF;QACxF,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,QAAiC,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC;QAClF,MAAM,IAAI,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,QAAQ,CAAC,iBAAiB,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,MAAe;IACvD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAChG,IAAI,MAAM,KAAK,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACpF,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC;IACpE,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC;IACtD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,4EAA4E;AAC5E,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,MAAM,oBAAoB,GAAG;IAC3B,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;IACzB,wBAAwB;CACzB,CAAC;AAEF;;;;GAIG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IACpD,kCAAkC;IAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,EAAE,EAAU,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACjC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;YAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAmB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACzB,qFAAqF;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,SAAS,CACvB,KAAa,EACb,MAAc,EACd,OAOI,EAAE;IAEN,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,oBAAoB;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC;IAE/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,MAAM,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAE3G,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1D,GAAG;YACH,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;YACtC,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,4EAA4E;QAC5E,4EAA4E;QAC5E,4CAA4C;QAC5C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,GAAyB,IAAI,CAAC;QACvC,IAAI,KAAiC,CAAC;QAEtC,MAAM,UAAU,GAAG,CAAC,GAAmB,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,yEAAyE;gBACzE,4EAA4E;gBAC5E,uEAAuE;gBACvE,uEAAuE;gBACvE,IAAI,CAAC,KAAK,CAAC,GAAG;oBAAE,OAAO;gBACvB,kCAAkC;gBAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC,CAAC;QACF,oEAAoE;QACpE,8DAA8D;QAC9D,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7B,MAAM,GAAG,GAAG,CAAC,GAAkB,EAAE,EAAE;YACjC,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,GAAG,CAAC;YACZ,sEAAsE;YACtE,MAAM,GAAG,EAAE,CAAC;YACZ,UAAU,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAW,EAAE;YAC7C,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,+BAA+B,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,EAC7F,SAAS,CACV,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,+CAA+C,CAAC,CAAC,CAAC;QAErH,KAAK,CAAC,MAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,KAAK;gBAAE,OAAO;YAClB,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,+BAA+B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,KAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,UAAU,GAAiC,IAAI,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YACjD,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,2EAA2E;QAC3E,qEAAqE;QACrE,IAAI,OAAO,GAA4B,IAAI,CAAC;QAC5C,IAAI,OAAmC,CAAC;QACxC,IAAI,QAAQ,GAA0B,IAAI,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,QAAQ,GAAG,GAAG,CAAC;YACf,sFAAsF;YACtF,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxF,iFAAiF;YACjF,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEnD,uFAAuF;YACvF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACxF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,OAAO;oBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvC,iEAAiE;gBACjE,IAAI,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAExB,IAAI,UAAU,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,MAAM,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC,CAAC;gBACzF,CAAC;gBACD,IAAI,KAAK;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,UAAU;oBAAE,OAAO,MAAM,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClF,sEAAsE;gBACtE,wEAAwE;gBACxE,IAAI,QAAQ;oBAAE,OAAO,MAAM,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,4BAA4B,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACpG,kFAAkF;gBAClF,qEAAqE;gBACrE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG;oBAAE,OAAO,MAAM,CAAC,IAAI,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7G,0EAA0E;gBAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnG,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC;wBACH,SAAU,CAAC,KAAK,CAAC,CAAC;oBACpB,CAAC;oBAAC,MAAM,CAAC;wBACP,oEAAoE;oBACtE,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,SAAS,GAAG,MAAM;IAC3C,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,oBAAoB;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,CAAwC,EAAE,EAAE;YACxD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACrI,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,CAAC;QAClB,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,MAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;gBAAE,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACzG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACzF,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,kBAAkB;IAKV;IACA;IALV,EAAE,CAAS;IAEpB,6FAA6F;IAC7F,YACmB,MAAsB,EACtB,SAAiB,MAAM;QADvB,WAAM,GAAN,MAAM,CAAgB;QACtB,WAAM,GAAN,MAAM,CAAiB;QAExC,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAqB,EAAE,OAAyB,EAAE;QAChE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,SAAS,CAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,GAAG,KAAK,sBAAsB,KAAK,CAAC,OAAO,cAAc,KAAK,CAAC,SAAS,OAAO,cAAc,CAAC,KAAK,CAAC,eAAe,EACnH,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAC3F,CAAC;QACF,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,0CAA0C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QAED,0EAA0E;QAC1E,+DAA+D;QAC/D,MAAM,MAAM,GAAY,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC,CAAC;QACJ,2EAA2E;QAC3E,6DAA6D;QAC7D,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAE,GAAuC,EAAE,UAAU,CAAC,CAAC;QAChG,MAAM,EAAE,GAA2B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ;YAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QAChE,8DAA8D;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAE,GAAmC,EAAE,MAAM,CAAC,CAAC;QACpF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
package/dist/memory/recall.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { decayedScore, isKnown, isOwed, streakOf } from '../srs.js';
|
|
2
2
|
import { GLOBAL_PROJECT, projectKey } from '../store.js';
|
|
3
|
-
import { ESTIMATOR, RECEIPT_HINT, estimateTokens, pullLine } from './tokens.js';
|
|
4
|
-
import { keywordSearch, search, semanticSearch } from './search.js';
|
|
3
|
+
import { ESTIMATOR, RECEIPT_HINT, SEARCH_RULE, estimateTokens, pullLine, toolSearch } from './tokens.js';
|
|
4
|
+
import { keywordSearch, search, semanticSearch, termRarity } from './search.js';
|
|
5
|
+
import { LOCAL_EMBEDDER, LOCAL_EMBEDDER_V2 } from './embed.js';
|
|
6
|
+
import { informativeTermGroups, informativeTerms } from './terms.js';
|
|
7
|
+
import { entryUse } from './use.js';
|
|
5
8
|
import { entryEvents, markReceiptEmitted, recordReceipt, timeline } from './store.js';
|
|
6
9
|
import { defangFence } from './privacy.js';
|
|
7
10
|
/**
|
|
@@ -61,7 +64,7 @@ function markRecalled(db, sessionId, ids) {
|
|
|
61
64
|
* ponytail: fixed allowances rather than config keys; make them dials if
|
|
62
65
|
* someone needs a wider or narrower timeline.
|
|
63
66
|
*/
|
|
64
|
-
export const INDEX_MAX_ITEMS = 50;
|
|
67
|
+
export const INDEX_MAX_ITEMS = 50; // the default of `retrieval.timeline_items`
|
|
65
68
|
export const INDEX_MAX_TOKENS = 1_100;
|
|
66
69
|
/** Claude Code replaces any hook output longer than this with a stub. */
|
|
67
70
|
export const HOOK_CONTEXT_CHARS = 10_000;
|
|
@@ -123,12 +126,12 @@ function parseList(json) {
|
|
|
123
126
|
* that closes `</eklavya-memory>` would otherwise end the evidence frame early
|
|
124
127
|
* and leave the rest of itself reading as instruction.
|
|
125
128
|
*/
|
|
126
|
-
function renderEntry(entry, index, narrativeChars) {
|
|
129
|
+
function renderEntry(entry, index, narrativeChars, stale) {
|
|
127
130
|
const files = parseList(entry.files).map((f) => defangFence(String(f)));
|
|
128
131
|
const facts = parseList(entry.facts).map((f) => defangFence(String(f)));
|
|
129
132
|
const title = defangFence(entry.title);
|
|
130
133
|
const type = defangFence(entry.type ?? 'change');
|
|
131
|
-
const lines = [`${index}. [#${entry.id}] ${title} — ${type}, ${entry.occurred_at.slice(0, 10)}`];
|
|
134
|
+
const lines = [`${index}. [#${entry.id}] ${title} — ${type}, ${entry.occurred_at.slice(0, 10)}${stale ? ` — may be outdated (${defangFence(stale)})` : ''}`];
|
|
132
135
|
if (entry.narrative) {
|
|
133
136
|
const cut = narrativeChars !== undefined && entry.narrative.length > narrativeChars;
|
|
134
137
|
const text = cut ? `${entry.narrative.slice(0, narrativeChars)}… [excerpt: memory_get #${entry.id} for the rest]` : entry.narrative;
|
|
@@ -197,22 +200,38 @@ export function recall(db, config, opts) {
|
|
|
197
200
|
const ranked = opts.candidates
|
|
198
201
|
? opts.candidates.filter((e) => allowed(e.id) && (!ownSession || e.session_id !== ownSession))
|
|
199
202
|
: hits.map((h) => h.entry);
|
|
203
|
+
const timelineCap = config.retrieval.timeline_items;
|
|
204
|
+
const recentList = () => timeline(db, {
|
|
205
|
+
// `cross_project` widens the seam recall too, not only a search. A dial
|
|
206
|
+
// that only applied when someone typed a query would be off precisely
|
|
207
|
+
// where a developer with two checkouts open would notice it.
|
|
208
|
+
project: config.retrieval.cross_project ? null : opts.project,
|
|
209
|
+
// A corrected entry is history, not memory to act on (issue #83).
|
|
210
|
+
excludeSuperseded: true,
|
|
211
|
+
excludeSessionId: ownSession,
|
|
212
|
+
limit: limit + exclude.size + (opts.index ? timelineCap : 0),
|
|
213
|
+
}).filter((entry) => allowed(entry.id));
|
|
214
|
+
// Newest work, which the timeline is made of; the seam's fallback pool.
|
|
215
|
+
const recent = ranked.length || opts.candidates ? [] : recentList();
|
|
216
|
+
// Entries that were used when sent before rank first among equals (issue #259).
|
|
217
|
+
const utilities = opts.index && opts.seamQuery ? entryUse(db, recent.map((e) => e.id)) : new Map();
|
|
218
|
+
const utility = (id) => utilities.get(id)?.utility ?? 0;
|
|
219
|
+
// The seam query's matches, best first, ties to the more useful, then the newer (issue #258).
|
|
220
|
+
// Session summaries are left to the checkpoint and the timeline.
|
|
221
|
+
const seamRanked = opts.index && opts.seamQuery && recent.length
|
|
222
|
+
? search(db, opts.seamQuery, config.retrieval.mode, { ...filter, embedder: 'v2', limit: limit * 3 + exclude.size })
|
|
223
|
+
.filter((h) => allowed(h.entry.id) && h.entry.kind !== 'session_summary')
|
|
224
|
+
.sort((a, b) => b.score - a.score || utility(b.entry.id) - utility(a.entry.id) || b.entry.occurred_at.localeCompare(a.entry.occurred_at))
|
|
225
|
+
.map((h) => h.entry)
|
|
226
|
+
: [];
|
|
227
|
+
const seamIds = new Set(seamRanked.map((e) => e.id));
|
|
200
228
|
const pool = ranked.length
|
|
201
229
|
? ranked
|
|
202
230
|
: opts.candidates
|
|
203
231
|
// A caller that supplied candidates and had none left after exclusion
|
|
204
232
|
// meant "nothing", not "fall back to whatever is recent".
|
|
205
233
|
? []
|
|
206
|
-
:
|
|
207
|
-
// `cross_project` widens the seam recall too, not only a search. A dial
|
|
208
|
-
// that only applied when someone typed a query would be off precisely
|
|
209
|
-
// where a developer with two checkouts open would notice it.
|
|
210
|
-
project: config.retrieval.cross_project ? null : opts.project,
|
|
211
|
-
// A corrected entry is history, not memory to act on (issue #83).
|
|
212
|
-
excludeSuperseded: true,
|
|
213
|
-
excludeSessionId: ownSession,
|
|
214
|
-
limit: limit + exclude.size + (opts.index ? INDEX_MAX_ITEMS : 0),
|
|
215
|
-
}).filter((entry) => allowed(entry.id));
|
|
234
|
+
: [...seamRanked, ...recent.filter((e) => !seamIds.has(e.id))];
|
|
216
235
|
if (!pool.length)
|
|
217
236
|
return empty;
|
|
218
237
|
// The seam: the newest session summary is the checkpoint and goes first in
|
|
@@ -230,13 +249,17 @@ export function recall(db, config, opts) {
|
|
|
230
249
|
// And only when it is the last work here: a later session with no summary
|
|
231
250
|
// (too short, or its checkpoint still queued) did newer work, which the
|
|
232
251
|
// timeline and the full entries already show.
|
|
233
|
-
const later = pool.find((e) => e.kind !== 'session_summary' && e.project === opts.project && e.session_id !== opts.sessionId);
|
|
252
|
+
const later = (recent.length ? recent : pool).find((e) => e.kind !== 'session_summary' && e.project === opts.project && e.session_id !== opts.sessionId);
|
|
234
253
|
const checkpoint = newest && (!later || later.session_id === newest.session_id || later.occurred_at <= newest.occurred_at)
|
|
235
254
|
? newest
|
|
236
255
|
: undefined;
|
|
256
|
+
// Entries that may be outdated go after the rest (issue #259) and say so.
|
|
257
|
+
const use = config.memory.stale_check ? entryUse(db, pool.map((e) => e.id)) : new Map();
|
|
258
|
+
const staleOf = (e) => use.get(e.id)?.stale_reason ?? null;
|
|
259
|
+
const fresh = (list) => [...list.filter((e) => !staleOf(e)), ...list.filter((e) => staleOf(e))];
|
|
237
260
|
const detailPool = opts.index
|
|
238
|
-
? [...(checkpoint ? [checkpoint] : []), ...pool.filter((e) => e.kind !== 'session_summary')]
|
|
239
|
-
: pool;
|
|
261
|
+
? [...(checkpoint ? [checkpoint] : []), ...fresh(pool.filter((e) => e.kind !== 'session_summary'))]
|
|
262
|
+
: fresh(pool);
|
|
240
263
|
// A checkout path is not ours to trust either: a directory named with a quote
|
|
241
264
|
// or a fence tag must not rewrite the header it is quoted in.
|
|
242
265
|
const projectAttr = defangFence(opts.project).replace(/"/g, '"');
|
|
@@ -245,7 +268,7 @@ export function recall(db, config, opts) {
|
|
|
245
268
|
// The wrapper is charged against the budget before the first entry, not added
|
|
246
269
|
// after the last one. Counting it afterwards means the block the model
|
|
247
270
|
// receives is reliably larger than the budget that was supposed to bound it.
|
|
248
|
-
const wrapperTokens = estimateTokens([`<eklavya-memory project="${projectAttr}" items="00" receipt="000000">`, note, RECEIPT_HINT(0, [1000000, 1000000]), footer].join('\n'));
|
|
271
|
+
const wrapperTokens = estimateTokens([`<eklavya-memory project="${projectAttr}" items="00" receipt="000000">`, note, RECEIPT_HINT(0, [1000000, 1000000]), opts.index ? SEARCH_RULE(config.memory.lookup_hint) : '', footer].join('\n'));
|
|
249
272
|
// Fill to the token budget rather than the item count: six short notes and
|
|
250
273
|
// six long ones are not the same amount of context. An entry that does not
|
|
251
274
|
// fit is skipped, not the end of the block: stopping there let one long
|
|
@@ -259,7 +282,7 @@ export function recall(db, config, opts) {
|
|
|
259
282
|
if (kept.length >= limit)
|
|
260
283
|
break;
|
|
261
284
|
const number = kept.length + (checkpoint ? 0 : 1);
|
|
262
|
-
let text = entry === checkpoint ? renderCheckpoint(entry) : renderEntry(entry, number);
|
|
285
|
+
let text = entry === checkpoint ? renderCheckpoint(entry) : renderEntry(entry, number, undefined, staleOf(entry));
|
|
263
286
|
let cost = estimateTokens(text);
|
|
264
287
|
// A prompt's candidates are ranked, so the best one that does not fit is
|
|
265
288
|
// cut to the room left rather than skipped: skipping it handed that room to
|
|
@@ -270,7 +293,7 @@ export function recall(db, config, opts) {
|
|
|
270
293
|
const room = maxTokens - delivered;
|
|
271
294
|
if (opts.scope === 'prompt' && delivered + cost > maxTokens && entry.narrative && room >= MIN_EXCERPT_TOKENS) {
|
|
272
295
|
const overhead = estimateTokens(renderEntry({ ...entry, narrative: 'x' }, number, 0));
|
|
273
|
-
text = renderEntry(entry, number, Math.max(0, (room - overhead) * 4));
|
|
296
|
+
text = renderEntry(entry, number, Math.max(0, (room - overhead) * 4), staleOf(entry));
|
|
274
297
|
cost = estimateTokens(text);
|
|
275
298
|
}
|
|
276
299
|
// The first entry may overrun at a seam, where one long summary is still the
|
|
@@ -288,11 +311,12 @@ export function recall(db, config, opts) {
|
|
|
288
311
|
// allowance, then put in order and grouped by day. Charged like the wrapper
|
|
289
312
|
// — delivered, never claimed as a saving. `cap` is how many lines it may
|
|
290
313
|
// have; shedding below lowers it.
|
|
291
|
-
const DETAIL_HEADING = 'Latest, in full:';
|
|
314
|
+
const DETAIL_HEADING = seamRanked.length ? 'Closest to the current work, in full:' : 'Latest, in full:';
|
|
315
|
+
const lookup = config.memory.lookup_hint;
|
|
292
316
|
const pickTimeline = (sent, cap) => {
|
|
293
317
|
const chosen = [];
|
|
294
318
|
let spent = 0;
|
|
295
|
-
for (const entry of
|
|
319
|
+
for (const entry of recent) {
|
|
296
320
|
if (chosen.length >= cap)
|
|
297
321
|
break;
|
|
298
322
|
if (sent.has(entry.id))
|
|
@@ -322,7 +346,7 @@ export function recall(db, config, opts) {
|
|
|
322
346
|
}
|
|
323
347
|
// What the full entries cost and how to load the tool that opens one: the
|
|
324
348
|
// titles alone were opened in about 1% of sessions.
|
|
325
|
-
lines.push(pullLine(chosen.reduce((sum, e) => sum + estimateTokens(renderEntry(e, 1)), 0)));
|
|
349
|
+
lines.push(pullLine(chosen.reduce((sum, e) => sum + estimateTokens(renderEntry(e, 1)), 0), lookup));
|
|
326
350
|
return lines;
|
|
327
351
|
};
|
|
328
352
|
const base = baseTokensFor(db, kept);
|
|
@@ -337,9 +361,9 @@ export function recall(db, config, opts) {
|
|
|
337
361
|
const header = `<eklavya-memory project="${projectAttr}" items="${items.length + timelineRows.length}" receipt="${receipt}">`;
|
|
338
362
|
// Only a prompt's candidates are ranked, so only there is the first the best
|
|
339
363
|
// match; a session start's are newest-first and name none.
|
|
340
|
-
const hint = RECEIPT_HINT(Number(receipt), opts.scope === 'prompt' ? items.slice(0, 2).map((x) => x.e.id) : []);
|
|
364
|
+
const hint = RECEIPT_HINT(Number(receipt), opts.scope === 'prompt' ? items.slice(0, 2).map((x) => x.e.id) : [], lookup);
|
|
341
365
|
const block = opts.index
|
|
342
|
-
? [header, note, hint, ...indexLines, ...(detail.length ? [DETAIL_HEADING, ...detail] : []), ...closing, footer].join('\n')
|
|
366
|
+
? [header, note, ...(opts.pinned ?? []), hint, SEARCH_RULE(lookup), ...indexLines, ...(detail.length ? [DETAIL_HEADING, ...detail] : []), ...closing, footer].join('\n')
|
|
343
367
|
: [header, note, hint, ...items.map((x) => x.text), footer].join('\n');
|
|
344
368
|
return { timelineRows, indexLines, detail, block };
|
|
345
369
|
};
|
|
@@ -348,7 +372,7 @@ export function recall(db, config, opts) {
|
|
|
348
372
|
// order they matter least: the checkpoint's detail, then the "in full"
|
|
349
373
|
// entries from the oldest end, then the timeline by halves.
|
|
350
374
|
let items = kept.map((e, i) => ({ e, text: rendered[i] }));
|
|
351
|
-
let cap =
|
|
375
|
+
let cap = timelineCap;
|
|
352
376
|
let view = layout(items, cap, RECEIPT_MEASURE);
|
|
353
377
|
if (opts.index) {
|
|
354
378
|
const over = () => view.block.length > (opts.maxChars ?? HOOK_CONTEXT_CHARS);
|
|
@@ -366,8 +390,10 @@ export function recall(db, config, opts) {
|
|
|
366
390
|
}
|
|
367
391
|
}
|
|
368
392
|
const keptNow = items.map((x) => x.e);
|
|
393
|
+
const pinnedTokens = opts.index && opts.pinned?.length ? estimateTokens(opts.pinned.join('\n')) : 0;
|
|
369
394
|
delivered =
|
|
370
395
|
wrapperTokens +
|
|
396
|
+
pinnedTokens +
|
|
371
397
|
items.reduce((sum, x) => sum + estimateTokens(x.text), 0) +
|
|
372
398
|
(view.indexLines.length ? estimateTokens(view.indexLines.join('\n')) : 0) +
|
|
373
399
|
(opts.index && view.detail.length ? estimateTokens(DETAIL_HEADING) : 0);
|
|
@@ -379,8 +405,10 @@ export function recall(db, config, opts) {
|
|
|
379
405
|
sessionId: opts.sessionId ?? null,
|
|
380
406
|
scope: opts.scope ?? 'session_start',
|
|
381
407
|
method: ESTIMATOR,
|
|
408
|
+
queryTerms: informativeTerms(opts.query ?? opts.seamQuery ?? '').slice(0, 12).join(' ') || null,
|
|
382
409
|
delivery: opts.delivery ?? 'prepared',
|
|
383
410
|
wrapperTokens: wrapperTokens +
|
|
411
|
+
pinnedTokens +
|
|
384
412
|
(view.indexLines.length ? estimateTokens(view.indexLines.join('\n')) : 0) +
|
|
385
413
|
(opts.index && view.detail.length ? estimateTokens(DETAIL_HEADING) : 0),
|
|
386
414
|
items: items.map((x) => ({
|
|
@@ -537,11 +565,116 @@ export function ownWords(prompt) {
|
|
|
537
565
|
.replace(/\s+/g, ' ')
|
|
538
566
|
.trim();
|
|
539
567
|
}
|
|
568
|
+
/**
|
|
569
|
+
* Fewer words of its own than this beside a link or ticket key, and a prompt
|
|
570
|
+
* is about the thing it points at, which recall cannot read.
|
|
571
|
+
*/
|
|
572
|
+
const LINK_PROMPT_TERMS = 6;
|
|
573
|
+
const LINK = /https?:\/\/\S+/g;
|
|
574
|
+
const TICKET = /\b[A-Z][A-Z0-9]{1,9}-\d{2,}\b/g;
|
|
575
|
+
// Standard names shaped like a ticket key: "use SHA-256" is not a ticket.
|
|
576
|
+
const NOT_TICKET = /^(SHA|UTF|ISO|RFC|ES|HTTP|TLS|SSL|AES|RSA|MD|IPV|PEP|ECMA|IEEE|BASE)\d*-/;
|
|
577
|
+
// A number or a key after an issue, pull request or ticket path: `/issues/new` names nothing.
|
|
578
|
+
const LINK_ID = /\/(?:issues|pull|pulls|pullrequest|merge_requests|browse|tickets?)\/(\d+|[A-Z][A-Z0-9]+-\d+)\b/gi;
|
|
579
|
+
// A slash command's name and wrapper, and the host's image placeholder: words
|
|
580
|
+
// the developer did not write about the task.
|
|
581
|
+
const HOST_MARKUP = /<(command-message|command-name)>[\s\S]*?<\/\1>|<\/?command-args>|\[Image #\d+\]/g;
|
|
582
|
+
/**
|
|
583
|
+
* A direct instruction to search memory, for a prompt that is mostly a link,
|
|
584
|
+
* a ticket key or a screenshot (issue #272).
|
|
585
|
+
*
|
|
586
|
+
* Such a prompt gives recall almost nothing to match: the words that matter
|
|
587
|
+
* are behind the link or inside the image. Recall then returns nothing, or a
|
|
588
|
+
* near-miss on a similar number, and the conditional wording of the recall
|
|
589
|
+
* note lets the model skip memory for the whole task. Only this shape is
|
|
590
|
+
* nudged: a prose prompt that recall found nothing for is a real "nothing
|
|
591
|
+
* relevant", and a fallback search there was measured as pure cost
|
|
592
|
+
* (eval/results/2026-10-02-memory-use.md). No per-session limit: each such
|
|
593
|
+
* prompt names a new thing to look up.
|
|
594
|
+
*/
|
|
595
|
+
export function lookupNudge(prompt, style = 'mcp') {
|
|
596
|
+
const text = ownWords(prompt).replace(HOST_MARKUP, ' ');
|
|
597
|
+
const links = text.match(LINK) ?? [];
|
|
598
|
+
const ids = new Set();
|
|
599
|
+
for (const link of links)
|
|
600
|
+
for (const m of link.matchAll(LINK_ID))
|
|
601
|
+
ids.add(m[1]);
|
|
602
|
+
for (const m of text.matchAll(TICKET))
|
|
603
|
+
if (!NOT_TICKET.test(m[0]))
|
|
604
|
+
ids.add(m[0]);
|
|
605
|
+
if (!links.length && !ids.size)
|
|
606
|
+
return null;
|
|
607
|
+
const words = text
|
|
608
|
+
.replace(LINK, ' ')
|
|
609
|
+
.toLowerCase()
|
|
610
|
+
.split(/[^\p{L}\p{N}_-]+/u)
|
|
611
|
+
.filter((w) => w.length > 2 && !FILLER.has(w));
|
|
612
|
+
if (words.length >= LINK_PROMPT_TERMS)
|
|
613
|
+
return null;
|
|
614
|
+
const start = ids.size ? ` Start with ${[...ids].slice(0, 4).join(', ')}, then the subject once you know it.` : '';
|
|
615
|
+
return `[Eklavya] This prompt is mostly a link, ticket key or image, so automatic recall had little to match. Before reading code or querying other systems, search this project's memory for earlier work on it: ${howToSearch(style)}.${start}`;
|
|
616
|
+
}
|
|
617
|
+
const howToSearch = (style) => style === 'bash'
|
|
618
|
+
? 'run `eklavya memory search "<key terms>"` in Bash'
|
|
619
|
+
: `load the tools (${toolSearch('memory_search', 'memory_get')}), then memory_search({query: "<key terms>"})`;
|
|
620
|
+
/**
|
|
621
|
+
* Mid-session, for a task-sized prompt automatic recall found nothing for: the
|
|
622
|
+
* session-start rule is far back by then, and a new subject is exactly where
|
|
623
|
+
* the automatic match is weakest (issue #272).
|
|
624
|
+
*/
|
|
625
|
+
export const searchNudge = (style = 'mcp') => `[Eklavya] Automatic recall found nothing for this prompt. If it starts a task or changes the subject, search this project's memory for its key terms before reading code or querying other systems: ${howToSearch(style)}.`;
|
|
540
626
|
/** Fewer meaningful terms than this and a prompt is matched by words alone. */
|
|
541
627
|
const MIN_TERMS = 3;
|
|
542
628
|
const UNSPACED = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}]/u;
|
|
543
629
|
const FILLER = new Set(['the', 'and', 'for', 'with', 'use', 'using', 'please', 'this', 'that', 'can', 'you', 'now', 'run', 'try']);
|
|
544
|
-
|
|
630
|
+
/**
|
|
631
|
+
* The cosine a prompt's closest entry must reach, per embedder, because each
|
|
632
|
+
* embedder has its own scale.
|
|
633
|
+
*
|
|
634
|
+
* Measured, not chosen. `local-hash-v1`: on the eval corpus an on-topic
|
|
635
|
+
* paraphrase scores around 0.55 and an unrelated prompt around 0.24, and the
|
|
636
|
+
* gate sits at 0.35. `local-hash-v2`, from `eval/retrieval-harness.mjs
|
|
637
|
+
* --prompts` on full-length prompts: the closest unrelated entry scores 0.216
|
|
638
|
+
* at the 90th percentile, and 0.25 keeps every unrelated prompt shut
|
|
639
|
+
* (eval/results/2026-11-04-recall-gate.md).
|
|
640
|
+
*/
|
|
641
|
+
export const MIN_COSINE = { [LOCAL_EMBEDDER]: 0.35, [LOCAL_EMBEDDER_V2]: 0.25 };
|
|
642
|
+
/** Share of the prompt's rarity weight the matched terms must carry to pass on their own. */
|
|
643
|
+
export const TERMS_SHARE = 0.6;
|
|
644
|
+
/**
|
|
645
|
+
* The `terms` prompt gate (issue #258): search on the prompt's informative
|
|
646
|
+
* terms with OR and per-field weights, then keep an entry only when at least
|
|
647
|
+
* two of those terms appear in it, or the ones that do carry `TERMS_SHARE` of
|
|
648
|
+
* the prompt's total rarity (so a one-word identifier nobody else uses can
|
|
649
|
+
* still pass alone, and two common words cannot).
|
|
650
|
+
*/
|
|
651
|
+
export function termsGate(db, query, scope) {
|
|
652
|
+
// One group per word of the prompt: `fetchUser` or a whole path counts as one
|
|
653
|
+
// matched word however many terms it splits into.
|
|
654
|
+
const groups = informativeTermGroups(query);
|
|
655
|
+
const terms = groups.flat();
|
|
656
|
+
if (!terms.length)
|
|
657
|
+
return [];
|
|
658
|
+
const rarity = termRarity(db, terms);
|
|
659
|
+
const weightOf = (group) => Math.max(...group.map((t) => rarity.get(t)));
|
|
660
|
+
const total = groups.reduce((sum, g) => sum + weightOf(g), 0);
|
|
661
|
+
return keywordSearch(db, terms.join(' '), { ...scope, any: true, limit: (scope.limit ?? 12) * 2 })
|
|
662
|
+
.filter((hit) => {
|
|
663
|
+
const e = hit.entry;
|
|
664
|
+
const text = [e.title, e.narrative, e.facts, e.files, e.keywords].filter(Boolean).join(' ');
|
|
665
|
+
// Whole terms only: "log" must not match "catalog".
|
|
666
|
+
const words = new Set(informativeTerms(text));
|
|
667
|
+
// A word counts with its rarest term that the entry actually has.
|
|
668
|
+
const matched = groups.map((g) => g.filter((t) => words.has(t))).filter((g) => g.length);
|
|
669
|
+
const weight = matched.reduce((sum, g) => sum + weightOf(g), 0);
|
|
670
|
+
return matched.length >= 2 || weight >= TERMS_SHARE * total;
|
|
671
|
+
})
|
|
672
|
+
.slice(0, scope.limit ?? 12);
|
|
673
|
+
}
|
|
674
|
+
export function recallForPrompt(db, config, opts,
|
|
675
|
+
// Set when an entry passed the gate, even if it was already handed over and
|
|
676
|
+
// nothing new is sent: "recalled nothing" and "nothing matched" differ.
|
|
677
|
+
match) {
|
|
545
678
|
const query = ownWords(opts.prompt);
|
|
546
679
|
// Too short to be about anything. "yes", "carry on", "fix it" match whatever
|
|
547
680
|
// happens to share a word, and a recall on those is pure cost.
|
|
@@ -566,16 +699,24 @@ export function recallForPrompt(db, config, opts) {
|
|
|
566
699
|
// not. At a seam, offering the project's recent work is right whatever the
|
|
567
700
|
// developer types next. Here the developer has said what they are doing, so
|
|
568
701
|
// an entry that merely ranked highest among few is noise charged to their
|
|
569
|
-
// context. Two ways to pass:
|
|
570
|
-
// cosine high enough to mean the same subject
|
|
571
|
-
//
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
const
|
|
576
|
-
|
|
702
|
+
// context. Two ways to pass: enough of the query in the entry (see
|
|
703
|
+
// `retrieval.prompt_gate`), or a cosine high enough to mean the same subject
|
|
704
|
+
// rather than the same domain.
|
|
705
|
+
const lexical = config.retrieval.prompt_gate === 'terms'
|
|
706
|
+
? termsGate(db, query, scope)
|
|
707
|
+
: keywordSearch(db, sparse ? terms.join(' ') : query, { ...scope, strict: true });
|
|
708
|
+
const semantic = sparse
|
|
709
|
+
? []
|
|
710
|
+
: semanticSearch(db, query, {
|
|
711
|
+
...scope,
|
|
712
|
+
// The second embedder ships with the `terms` gate, so the default changes nothing (issue #258).
|
|
713
|
+
embedder: config.retrieval.prompt_gate === 'terms' ? 'v2' : 'v1',
|
|
714
|
+
minScore: MIN_COSINE,
|
|
715
|
+
});
|
|
577
716
|
if (!lexical.length && !semantic.length)
|
|
578
717
|
return null;
|
|
718
|
+
if (match)
|
|
719
|
+
match.matched = true;
|
|
579
720
|
// Ranked here and handed to `recall` as candidates, rather than letting it
|
|
580
721
|
// search a third and fourth time for rows this function has already found.
|
|
581
722
|
// Lexical first: every word of the prompt present beats a close vector.
|