context-vault 3.18.0 → 3.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.
Files changed (80) hide show
  1. package/bin/cli.js +673 -4
  2. package/dist/register-tools.d.ts.map +1 -1
  3. package/dist/register-tools.js +0 -2
  4. package/dist/register-tools.js.map +1 -1
  5. package/dist/server.js +78 -1
  6. package/dist/server.js.map +1 -1
  7. package/dist/tools/recall.d.ts +1 -1
  8. package/dist/tools/recall.d.ts.map +1 -1
  9. package/dist/tools/recall.js +50 -100
  10. package/dist/tools/recall.js.map +1 -1
  11. package/node_modules/@context-vault/core/dist/assemble.d.ts +22 -0
  12. package/node_modules/@context-vault/core/dist/assemble.d.ts.map +1 -0
  13. package/node_modules/@context-vault/core/dist/assemble.js +143 -0
  14. package/node_modules/@context-vault/core/dist/assemble.js.map +1 -0
  15. package/node_modules/@context-vault/core/dist/capture.d.ts.map +1 -1
  16. package/node_modules/@context-vault/core/dist/capture.js +10 -5
  17. package/node_modules/@context-vault/core/dist/capture.js.map +1 -1
  18. package/node_modules/@context-vault/core/dist/consolidation.d.ts +40 -0
  19. package/node_modules/@context-vault/core/dist/consolidation.d.ts.map +1 -0
  20. package/node_modules/@context-vault/core/dist/consolidation.js +229 -0
  21. package/node_modules/@context-vault/core/dist/consolidation.js.map +1 -0
  22. package/node_modules/@context-vault/core/dist/db.d.ts +25 -1
  23. package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
  24. package/node_modules/@context-vault/core/dist/db.js +92 -4
  25. package/node_modules/@context-vault/core/dist/db.js.map +1 -1
  26. package/node_modules/@context-vault/core/dist/frontmatter.d.ts.map +1 -1
  27. package/node_modules/@context-vault/core/dist/frontmatter.js +26 -3
  28. package/node_modules/@context-vault/core/dist/frontmatter.js.map +1 -1
  29. package/node_modules/@context-vault/core/dist/index.d.ts.map +1 -1
  30. package/node_modules/@context-vault/core/dist/index.js +225 -184
  31. package/node_modules/@context-vault/core/dist/index.js.map +1 -1
  32. package/node_modules/@context-vault/core/dist/main.d.ts +3 -0
  33. package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
  34. package/node_modules/@context-vault/core/dist/main.js +4 -0
  35. package/node_modules/@context-vault/core/dist/main.js.map +1 -1
  36. package/node_modules/@context-vault/core/dist/search.d.ts +6 -0
  37. package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
  38. package/node_modules/@context-vault/core/dist/search.js +106 -5
  39. package/node_modules/@context-vault/core/dist/search.js.map +1 -1
  40. package/node_modules/@context-vault/core/dist/search.test.d.ts +2 -0
  41. package/node_modules/@context-vault/core/dist/search.test.d.ts.map +1 -0
  42. package/node_modules/@context-vault/core/dist/search.test.js +49 -0
  43. package/node_modules/@context-vault/core/dist/search.test.js.map +1 -0
  44. package/node_modules/@context-vault/core/dist/summarize.d.ts +5 -0
  45. package/node_modules/@context-vault/core/dist/summarize.d.ts.map +1 -0
  46. package/node_modules/@context-vault/core/dist/summarize.js +146 -0
  47. package/node_modules/@context-vault/core/dist/summarize.js.map +1 -0
  48. package/node_modules/@context-vault/core/dist/types.d.ts +2 -0
  49. package/node_modules/@context-vault/core/dist/types.d.ts.map +1 -1
  50. package/node_modules/@context-vault/core/package.json +13 -1
  51. package/node_modules/@context-vault/core/src/assemble.ts +187 -0
  52. package/node_modules/@context-vault/core/src/capture.ts +10 -5
  53. package/node_modules/@context-vault/core/src/consolidation.ts +356 -0
  54. package/node_modules/@context-vault/core/src/db.ts +95 -4
  55. package/node_modules/@context-vault/core/src/frontmatter.ts +25 -4
  56. package/node_modules/@context-vault/core/src/index.ts +127 -88
  57. package/node_modules/@context-vault/core/src/main.ts +7 -0
  58. package/node_modules/@context-vault/core/src/search.test.ts +59 -0
  59. package/node_modules/@context-vault/core/src/search.ts +112 -5
  60. package/node_modules/@context-vault/core/src/summarize.ts +157 -0
  61. package/node_modules/@context-vault/core/src/types.ts +2 -0
  62. package/package.json +2 -2
  63. package/scripts/validate-epipe-shutdown.mjs +183 -0
  64. package/scripts/validate-sqlite-busy-retry.mjs +243 -0
  65. package/src/register-tools.ts +0 -2
  66. package/src/server.ts +76 -1
  67. package/src/tools/recall.ts +51 -110
  68. package/.claude-plugin/README.md +0 -219
  69. package/.claude-plugin/plugin.json +0 -11
  70. package/commands/vault-cleanup.md +0 -43
  71. package/commands/vault-snapshot.md +0 -43
  72. package/commands/vault-status.md +0 -35
  73. package/dist/tools/session-start.d.ts +0 -25
  74. package/dist/tools/session-start.d.ts.map +0 -1
  75. package/dist/tools/session-start.js +0 -469
  76. package/dist/tools/session-start.js.map +0 -1
  77. package/skills/context-assembly/SKILL.md +0 -308
  78. package/skills/knowledge-capture/SKILL.md +0 -303
  79. package/skills/memory-management/SKILL.md +0 -237
  80. package/src/tools/session-start.ts +0 -527
@@ -0,0 +1,143 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { hybridSearch } from './search.js';
4
+ const TOKEN_TO_CHAR_RATIO = 4; // approximate conversion
5
+ const CONDENSED_SUFFIX = '\n... [truncated for context budget]';
6
+ const CONDENSED_BODY_CHARS = 400;
7
+ const DEFAULT_ROLE_PROFILES = {
8
+ worker: {
9
+ rules: ['coding', 'patterns', 'standards', 'error-handling', 'debugging'],
10
+ skills: ['git', 'compile', 'test', 'local'],
11
+ memory: ['feedback', 'user', 'project', 'reference']
12
+ },
13
+ pm: {
14
+ rules: ['orchestration', 'planning', 'spec-writing', 'review', 'debugging-escalation'],
15
+ skills: ['dispatch', 'review', 'triage', 'report'],
16
+ memory: ['project', 'team', 'feedback']
17
+ },
18
+ ceo: {
19
+ rules: ['strategy', 'epistemic-honesty', 'decision-making', 'business-logic'],
20
+ skills: ['triage', 'delegate', 'report'],
21
+ memory: ['north-star', 'project', 'user']
22
+ },
23
+ steer: {
24
+ rules: ['steer', 'strategy', 'feedback-loops', 'analysis'],
25
+ skills: ['triage', 'report', 'analyze'],
26
+ memory: ['north-star', 'feedback']
27
+ }
28
+ };
29
+ function loadRoleProfiles(dataDir) {
30
+ const rolesPath = join(dataDir, 'roles.json');
31
+ if (existsSync(rolesPath)) {
32
+ try {
33
+ const raw = readFileSync(rolesPath, 'utf-8');
34
+ const parsed = JSON.parse(raw);
35
+ if (parsed && typeof parsed === 'object') {
36
+ return parsed;
37
+ }
38
+ }
39
+ catch {
40
+ // fall through to defaults
41
+ }
42
+ }
43
+ else {
44
+ // Seed roles.json with defaults so the user can edit it later
45
+ try {
46
+ writeFileSync(rolesPath, JSON.stringify(DEFAULT_ROLE_PROFILES, null, 2) + '\n');
47
+ }
48
+ catch {
49
+ // non-fatal: writable failure just means we use in-memory defaults
50
+ }
51
+ }
52
+ return DEFAULT_ROLE_PROFILES;
53
+ }
54
+ export async function assembleContext(db, config, options) {
55
+ const { role, task, budget } = options;
56
+ // 1. Load role profiles (dynamic — falls back to defaults)
57
+ const ROLE_PROFILES = loadRoleProfiles(config.dataDir);
58
+ const profile = ROLE_PROFILES[role] || ROLE_PROFILES.worker || DEFAULT_ROLE_PROFILES.worker;
59
+ const charsBudget = budget * TOKEN_TO_CHAR_RATIO;
60
+ // Allocate slots
61
+ const rulesChars = Math.floor(charsBudget * 0.2); // 20% for rules
62
+ const skillsChars = Math.floor(charsBudget * 0.1); // 10% for skills
63
+ const taskChars = Math.floor(charsBudget * 0.2); // 20% for task
64
+ const vaultChars = Math.floor(charsBudget * 0.3); // 30% for dynamically retrieved vault context
65
+ // reserve 20%
66
+ let markdown = `# Assembled Context: ${role.toUpperCase()}\n\n`;
67
+ let totalCharsUsed = markdown.length;
68
+ // 2. Add Task Spec
69
+ const taskSection = `## Active Task\n\n${task}\n\n`;
70
+ markdown += taskSection;
71
+ totalCharsUsed += taskSection.length;
72
+ // 3. Dynamic Vault Retrieval based on task
73
+ let entriesIncluded = 0;
74
+ const includedEntries = [];
75
+ const totalBudgetChars = vaultChars + taskChars + rulesChars + skillsChars;
76
+ if (vaultChars > 0 && task.trim().length > 0) {
77
+ try {
78
+ // Over-retrieve candidates
79
+ const searchResults = await hybridSearch({
80
+ db,
81
+ config,
82
+ stmts: {},
83
+ insertVec: () => { },
84
+ deleteVec: () => { },
85
+ embed: async () => new Float32Array(384),
86
+ insertCtxVec: () => { },
87
+ deleteCtxVec: () => { }
88
+ }, task, { limit: 20 });
89
+ if (searchResults && searchResults.length > 0) {
90
+ markdown += `## Retrieved Context\n\n`;
91
+ const retrievedHeaderLen = `## Retrieved Context\n\n`.length;
92
+ totalCharsUsed += retrievedHeaderLen;
93
+ for (const item of searchResults) {
94
+ const entry = 'entry' in item ? item.entry : item;
95
+ const fullBody = entry.body || '';
96
+ const titleText = entry.title ? `### ${entry.title}\n` : '';
97
+ const entryTitle = entry.title || '(untitled)';
98
+ const fullEntryMarkdown = `${titleText}${fullBody}\n\n`;
99
+ if (totalCharsUsed + fullEntryMarkdown.length <= totalBudgetChars) {
100
+ // Full entry fits
101
+ markdown += fullEntryMarkdown;
102
+ totalCharsUsed += fullEntryMarkdown.length;
103
+ entriesIncluded++;
104
+ includedEntries.push({ title: entryTitle, status: 'full' });
105
+ }
106
+ else {
107
+ // Try condensed version
108
+ const condensedBody = fullBody.slice(0, CONDENSED_BODY_CHARS) + CONDENSED_SUFFIX;
109
+ const condensedEntryMarkdown = `${titleText}${condensedBody}\n\n`;
110
+ if (totalCharsUsed + condensedEntryMarkdown.length <= totalBudgetChars) {
111
+ markdown += condensedEntryMarkdown;
112
+ totalCharsUsed += condensedEntryMarkdown.length;
113
+ entriesIncluded++;
114
+ includedEntries.push({ title: entryTitle, status: 'condensed' });
115
+ }
116
+ else {
117
+ // Neither fits — stop adding vault entries
118
+ break;
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ catch (e) {
125
+ console.error("Vault retrieval error during assembly:", e);
126
+ }
127
+ }
128
+ // 4. Construct System Prompts/Rules/Skills
129
+ const rulesSection = `## Role Directives\n\n### Rules\n${profile.rules.join(', ')}\n\n### Skills\n${profile.skills.join(', ')}\n\n`;
130
+ markdown = rulesSection + markdown; // U-Curve: Rules at the top
131
+ totalCharsUsed += rulesSection.length;
132
+ return {
133
+ markdown,
134
+ metadata: {
135
+ tokens_used: Math.ceil(totalCharsUsed / TOKEN_TO_CHAR_RATIO),
136
+ budget,
137
+ entries_included: entriesIncluded,
138
+ role,
139
+ included_entries: includedEntries
140
+ }
141
+ };
142
+ }
143
+ //# sourceMappingURL=assemble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+FxF,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,aAAa,CA+E1E;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;CAC7D,GACA,eAAe,GAAG;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9B,CAiFA;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,YAAY,EAClB,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,GACzC,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgGxF,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,aAAa,CA+E1E;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;CAC7D,GACA,eAAe,GAAG;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9B,CAiFA;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,YAAY,EAClB,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,GACzC,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
@@ -5,6 +5,7 @@ import { categoryFor } from './categories.js';
5
5
  import { parseFrontmatter, formatFrontmatter } from './frontmatter.js';
6
6
  import { formatBody } from './formatters.js';
7
7
  import { indexEntry } from './index.js';
8
+ import { withBusyRetry } from './db.js';
8
9
  function safeFolderPath(vaultDir, kind, folder) {
9
10
  const base = resolve(vaultDir, kindToPath(kind));
10
11
  if (!folder)
@@ -254,14 +255,18 @@ export async function captureAndIndex(ctx, data, precomputedEmbedding) {
254
255
  try {
255
256
  await indexEntry(ctx, entry, precomputedEmbedding);
256
257
  if (entry.supersedes?.length && ctx.stmts.updateSupersededBy) {
257
- for (const supersededId of entry.supersedes) {
258
- if (typeof supersededId === 'string' && supersededId.trim()) {
259
- ctx.stmts.updateSupersededBy.run(entry.id, supersededId.trim());
258
+ await withBusyRetry(() => {
259
+ for (const supersededId of entry.supersedes) {
260
+ if (typeof supersededId === 'string' && supersededId.trim()) {
261
+ ctx.stmts.updateSupersededBy.run(entry.id, supersededId.trim());
262
+ }
260
263
  }
261
- }
264
+ });
262
265
  }
263
266
  if (entry.related_to?.length && ctx.stmts.updateRelatedTo) {
264
- ctx.stmts.updateRelatedTo.run(JSON.stringify(entry.related_to), entry.id);
267
+ await withBusyRetry(() => {
268
+ ctx.stmts.updateRelatedTo.run(JSON.stringify(entry.related_to), entry.id);
269
+ });
265
270
  }
266
271
  return entry;
267
272
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { BaseCtx } from './types.js';
2
+ export interface DuplicateGroup {
3
+ canonical_id: string;
4
+ duplicate_ids: string[];
5
+ similarity: number;
6
+ importance_signal: number;
7
+ canonical_title: string;
8
+ sample_titles: string[];
9
+ }
10
+ export interface MergeResult {
11
+ canonical_id: string;
12
+ merged_count: number;
13
+ new_recall_count: number;
14
+ removed_ids: string[];
15
+ }
16
+ export interface DecayScore {
17
+ id: string;
18
+ title: string;
19
+ kind: string;
20
+ score: number;
21
+ days_since_recall: number;
22
+ recall_count: number;
23
+ recommendation: 'keep' | 'compact' | 'archive';
24
+ }
25
+ export declare function findDuplicates(ctx: BaseCtx, opts?: {
26
+ threshold?: number;
27
+ limit?: number;
28
+ kind?: string;
29
+ dryRun?: boolean;
30
+ }): Promise<DuplicateGroup[]>;
31
+ export declare function mergeEntries(ctx: BaseCtx, opts: {
32
+ canonical_id: string;
33
+ duplicate_ids: string[];
34
+ dryRun?: boolean;
35
+ }): MergeResult;
36
+ export declare function computeDecayScores(ctx: BaseCtx, opts?: {
37
+ limit?: number;
38
+ minAgeDays?: number;
39
+ }): DecayScore[];
40
+ //# sourceMappingURL=consolidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CAChD;AA2BD,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GACA,OAAO,CAAC,cAAc,EAAE,CAAC,CA2H3B;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GACA,WAAW,CA+Eb;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,IAAI,CAAC,EAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,UAAU,EAAE,CA0Ed"}
@@ -0,0 +1,229 @@
1
+ import { dotProduct } from './search.js';
2
+ const KIND_WEIGHTS = {
3
+ insight: 10,
4
+ decision: 8,
5
+ pattern: 7,
6
+ reference: 5,
7
+ event: 2,
8
+ };
9
+ export async function findDuplicates(ctx, opts) {
10
+ const threshold = opts?.threshold ?? 0.85;
11
+ const limit = opts?.limit ?? 50;
12
+ const kind = opts?.kind ?? null;
13
+ const whereParts = [
14
+ 'indexed = 1',
15
+ 'superseded_by IS NULL',
16
+ "(expires_at IS NULL OR expires_at > datetime('now'))",
17
+ ];
18
+ const params = [];
19
+ if (kind) {
20
+ whereParts.push('kind = ?');
21
+ params.push(kind);
22
+ }
23
+ const entries = ctx.db
24
+ .prepare(`SELECT rowid, id, title, kind, recall_count, recall_sessions, last_recalled_at, updated_at, created_at
25
+ FROM vault WHERE ${whereParts.join(' AND ')} ORDER BY recall_count DESC`)
26
+ .all(...params);
27
+ if (entries.length === 0)
28
+ return [];
29
+ const entryMap = new Map();
30
+ const rowidToId = new Map();
31
+ for (const e of entries) {
32
+ entryMap.set(e.id, e);
33
+ rowidToId.set(e.rowid, e.id);
34
+ }
35
+ // Load embeddings for all eligible entries via vault_vec KNN
36
+ const embeddingMap = new Map();
37
+ const rowids = entries.map((e) => e.rowid);
38
+ if (rowids.length > 0) {
39
+ const batchSize = 500;
40
+ for (let i = 0; i < rowids.length; i += batchSize) {
41
+ const batch = rowids.slice(i, i + batchSize);
42
+ const placeholders = batch.map(() => '?').join(',');
43
+ const vecRows = ctx.db
44
+ .prepare(`SELECT rowid, embedding FROM vault_vec WHERE rowid IN (${placeholders})`)
45
+ .all(...batch);
46
+ for (const row of vecRows) {
47
+ const id = rowidToId.get(Number(row.rowid));
48
+ if (id && row.embedding) {
49
+ embeddingMap.set(id, new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 4));
50
+ }
51
+ }
52
+ }
53
+ }
54
+ if (embeddingMap.size === 0)
55
+ return [];
56
+ // Find duplicate groups using pairwise similarity
57
+ const merged = new Set();
58
+ const groups = [];
59
+ // For each entry with an embedding, use KNN to find neighbors
60
+ const entriesWithVec = entries.filter((e) => embeddingMap.has(e.id));
61
+ for (const entry of entriesWithVec) {
62
+ if (merged.has(entry.id))
63
+ continue;
64
+ const entryVec = embeddingMap.get(entry.id);
65
+ const neighbors = [];
66
+ // Compare against all other entries with embeddings
67
+ for (const other of entriesWithVec) {
68
+ if (other.id === entry.id || merged.has(other.id))
69
+ continue;
70
+ const otherVec = embeddingMap.get(other.id);
71
+ if (!otherVec)
72
+ continue;
73
+ const sim = dotProduct(entryVec, otherVec);
74
+ if (sim >= threshold) {
75
+ neighbors.push({ id: other.id, sim });
76
+ }
77
+ }
78
+ if (neighbors.length === 0)
79
+ continue;
80
+ // Build the group: canonical is the one with highest recall_count
81
+ const allIds = [entry.id, ...neighbors.map((n) => n.id)];
82
+ let canonicalId = entry.id;
83
+ let maxRecall = entry.recall_count;
84
+ for (const nId of neighbors.map((n) => n.id)) {
85
+ const nEntry = entryMap.get(nId);
86
+ if (nEntry && nEntry.recall_count > maxRecall) {
87
+ maxRecall = nEntry.recall_count;
88
+ canonicalId = nId;
89
+ }
90
+ }
91
+ const duplicateIds = allIds.filter((id) => id !== canonicalId);
92
+ const avgSim = neighbors.reduce((sum, n) => sum + n.sim, 0) / neighbors.length;
93
+ const canonical = entryMap.get(canonicalId);
94
+ const sampleTitles = duplicateIds
95
+ .map((id) => entryMap.get(id)?.title)
96
+ .filter((t) => t != null)
97
+ .slice(0, 5);
98
+ groups.push({
99
+ canonical_id: canonicalId,
100
+ duplicate_ids: duplicateIds,
101
+ similarity: Math.round(avgSim * 1000) / 1000,
102
+ importance_signal: allIds.length,
103
+ canonical_title: canonical.title ?? '(untitled)',
104
+ sample_titles: sampleTitles,
105
+ });
106
+ for (const id of allIds)
107
+ merged.add(id);
108
+ if (groups.length >= limit)
109
+ break;
110
+ }
111
+ // Sort by importance (more duplicates = more important)
112
+ groups.sort((a, b) => b.importance_signal - a.importance_signal);
113
+ return groups.slice(0, limit);
114
+ }
115
+ export function mergeEntries(ctx, opts) {
116
+ const dryRun = opts.dryRun ?? true;
117
+ const { canonical_id, duplicate_ids } = opts;
118
+ if (duplicate_ids.length === 0) {
119
+ const canonical = ctx.db
120
+ .prepare('SELECT recall_count FROM vault WHERE id = ?')
121
+ .get(canonical_id);
122
+ return {
123
+ canonical_id,
124
+ merged_count: 0,
125
+ new_recall_count: canonical?.recall_count ?? 0,
126
+ removed_ids: [],
127
+ };
128
+ }
129
+ // Gather recall stats from all entries
130
+ const allIds = [canonical_id, ...duplicate_ids];
131
+ const placeholders = allIds.map(() => '?').join(',');
132
+ const rows = ctx.db
133
+ .prepare(`SELECT id, recall_count, recall_sessions FROM vault WHERE id IN (${placeholders})`)
134
+ .all(...allIds);
135
+ let totalRecallCount = 0;
136
+ let totalRecallSessions = 0;
137
+ for (const row of rows) {
138
+ totalRecallCount += row.recall_count ?? 0;
139
+ totalRecallSessions += row.recall_sessions ?? 0;
140
+ }
141
+ if (dryRun) {
142
+ return {
143
+ canonical_id,
144
+ merged_count: duplicate_ids.length,
145
+ new_recall_count: totalRecallCount,
146
+ removed_ids: duplicate_ids,
147
+ };
148
+ }
149
+ const now = new Date().toISOString();
150
+ const dateStr = now.slice(0, 10);
151
+ // Update canonical: sum recall counts, append consolidation note
152
+ ctx.db
153
+ .prepare(`UPDATE vault SET
154
+ recall_count = ?,
155
+ recall_sessions = ?,
156
+ updated_at = ?,
157
+ body = body || ?
158
+ WHERE id = ?`)
159
+ .run(totalRecallCount, totalRecallSessions, now, `\n\n[Consolidated from ${duplicate_ids.length + 1} entries on ${dateStr}]`, canonical_id);
160
+ // Mark duplicates as superseded
161
+ for (const dupId of duplicate_ids) {
162
+ ctx.db
163
+ .prepare('UPDATE vault SET superseded_by = ?, updated_at = ? WHERE id = ?')
164
+ .run(canonical_id, now, dupId);
165
+ }
166
+ return {
167
+ canonical_id,
168
+ merged_count: duplicate_ids.length,
169
+ new_recall_count: totalRecallCount,
170
+ removed_ids: duplicate_ids,
171
+ };
172
+ }
173
+ export function computeDecayScores(ctx, opts) {
174
+ const limit = opts?.limit ?? 100;
175
+ const minAgeDays = opts?.minAgeDays ?? 0;
176
+ const now = Date.now();
177
+ const cutoffDate = minAgeDays > 0
178
+ ? new Date(now - minAgeDays * 86400000).toISOString()
179
+ : null;
180
+ const whereParts = [
181
+ 'indexed = 1',
182
+ 'superseded_by IS NULL',
183
+ "(expires_at IS NULL OR expires_at > datetime('now'))",
184
+ ];
185
+ const params = [];
186
+ if (cutoffDate) {
187
+ whereParts.push('created_at <= ?');
188
+ params.push(cutoffDate);
189
+ }
190
+ const rows = ctx.db
191
+ .prepare(`SELECT id, title, kind, recall_count, last_recalled_at, updated_at, created_at
192
+ FROM vault WHERE ${whereParts.join(' AND ')}
193
+ ORDER BY updated_at ASC`)
194
+ .all(...params);
195
+ const scores = [];
196
+ for (const row of rows) {
197
+ const lastActivity = row.last_recalled_at ?? row.updated_at ?? row.created_at;
198
+ const daysSinceRecall = (now - new Date(lastActivity).getTime()) / 86400000;
199
+ const baseValue = KIND_WEIGHTS[row.kind] ?? 5;
200
+ const timeDecay = Math.exp(-0.02 * daysSinceRecall);
201
+ const recallBoost = 1 + Math.log((row.recall_count ?? 0) + 1);
202
+ const rawScore = baseValue * timeDecay * recallBoost;
203
+ // Normalize to 0-100 scale (max possible: ~10 * 1.0 * ~5 = 50 for heavily recalled insight)
204
+ const score = Math.max(0, Math.min(100, Math.round(rawScore * 10)));
205
+ let recommendation;
206
+ if (score >= 30) {
207
+ recommendation = 'keep';
208
+ }
209
+ else if (score >= 10) {
210
+ recommendation = 'compact';
211
+ }
212
+ else {
213
+ recommendation = 'archive';
214
+ }
215
+ scores.push({
216
+ id: row.id,
217
+ title: row.title ?? '(untitled)',
218
+ kind: row.kind,
219
+ score,
220
+ days_since_recall: Math.round(daysSinceRecall),
221
+ recall_count: row.recall_count ?? 0,
222
+ recommendation,
223
+ });
224
+ }
225
+ // Sort by score ascending (most decayed first)
226
+ scores.sort((a, b) => a.score - b.score);
227
+ return scores.slice(0, limit);
228
+ }
229
+ //# sourceMappingURL=consolidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.js","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,31 @@ export declare class NativeModuleError extends Error {
4
4
  originalError: Error;
5
5
  constructor(originalError: Error);
6
6
  }
7
- export declare const SCHEMA_DDL = "\n CREATE TABLE IF NOT EXISTS vault (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n category TEXT NOT NULL DEFAULT 'knowledge',\n title TEXT,\n body TEXT NOT NULL,\n meta TEXT,\n tags TEXT,\n source TEXT,\n file_path TEXT UNIQUE,\n identity_key TEXT,\n expires_at TEXT,\n superseded_by TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT,\n hit_count INTEGER DEFAULT 0,\n last_accessed_at TEXT,\n source_files TEXT,\n tier TEXT DEFAULT 'working' CHECK(tier IN ('ephemeral', 'working', 'durable')),\n related_to TEXT,\n indexed INTEGER DEFAULT 1,\n recall_count INTEGER DEFAULT 0,\n recall_sessions INTEGER DEFAULT 0,\n last_recalled_at TEXT,\n heat_tier TEXT CHECK(heat_tier IN ('hot', 'warm', 'cold'))\n );\n\n CREATE INDEX IF NOT EXISTS idx_vault_kind ON vault(kind);\n CREATE INDEX IF NOT EXISTS idx_vault_category ON vault(category);\n CREATE INDEX IF NOT EXISTS idx_vault_category_created ON vault(category, created_at DESC);\n CREATE INDEX IF NOT EXISTS idx_vault_updated ON vault(updated_at DESC);\n CREATE UNIQUE INDEX IF NOT EXISTS idx_vault_identity ON vault(kind, identity_key) WHERE identity_key IS NOT NULL AND category = 'entity';\n CREATE INDEX IF NOT EXISTS idx_vault_superseded ON vault(superseded_by) WHERE superseded_by IS NOT NULL;\n CREATE INDEX IF NOT EXISTS idx_vault_tier ON vault(tier);\n CREATE INDEX IF NOT EXISTS idx_vault_indexed ON vault(indexed);\n CREATE INDEX IF NOT EXISTS idx_vault_heat_tier ON vault(heat_tier) WHERE heat_tier IS NOT NULL;\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_fts USING fts5(\n title, body, tags, kind,\n content='vault', content_rowid='rowid'\n );\n\n CREATE TRIGGER IF NOT EXISTS vault_ai AFTER INSERT ON vault WHEN new.indexed = 1 BEGIN\n INSERT INTO vault_fts(rowid, title, body, tags, kind)\n VALUES (new.rowid, new.title, new.body, new.tags, new.kind);\n END;\n CREATE TRIGGER IF NOT EXISTS vault_ad AFTER DELETE ON vault WHEN old.indexed = 1 BEGIN\n INSERT INTO vault_fts(vault_fts, rowid, title, body, tags, kind)\n VALUES ('delete', old.rowid, old.title, old.body, old.tags, old.kind);\n END;\n CREATE TRIGGER IF NOT EXISTS vault_au AFTER UPDATE ON vault WHEN old.indexed = 1 OR new.indexed = 1 BEGIN\n INSERT INTO vault_fts(vault_fts, rowid, title, body, tags, kind)\n VALUES ('delete', old.rowid, old.title, old.body, old.tags, old.kind);\n INSERT INTO vault_fts(rowid, title, body, tags, kind)\n SELECT new.rowid, new.title, new.body, new.tags, new.kind WHERE new.indexed = 1;\n END;\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_vec USING vec0(embedding float[384]);\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_ctx_vec USING vec0(embedding float[384]);\n\n CREATE TABLE IF NOT EXISTS co_retrievals (\n entry_a TEXT NOT NULL,\n entry_b TEXT NOT NULL,\n count INTEGER DEFAULT 1,\n last_at TEXT NOT NULL,\n PRIMARY KEY (entry_a, entry_b)\n );\n\n CREATE TABLE IF NOT EXISTS access_log (\n id INTEGER PRIMARY KEY,\n entry_id TEXT NOT NULL,\n query TEXT,\n session_id TEXT,\n session_goal TEXT,\n accessed_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n CREATE INDEX IF NOT EXISTS idx_access_log_entry_at ON access_log(entry_id, accessed_at);\n CREATE INDEX IF NOT EXISTS idx_access_log_goal ON access_log(session_goal) WHERE session_goal IS NOT NULL;\n";
7
+ export declare function isBusyError(err: unknown): boolean;
8
+ /**
9
+ * Execute `fn` and retry on transient SQLITE_BUSY errors.
10
+ *
11
+ * WAL + busy_timeout=5000ms already handles most single-statement contention.
12
+ * This helper guards transactions / multi-statement paths where a single
13
+ * statement can still exceed the busy grace under N-parallel-daemon load,
14
+ * surfacing SQLITE_BUSY to callers.
15
+ *
16
+ * Delays follow the pattern 50ms / 150ms / 500ms with small jitter.
17
+ * On final failure, the original SQLITE_BUSY error is propagated as-is.
18
+ */
19
+ export declare function withBusyRetry<T>(fn: () => T | Promise<T>, opts?: {
20
+ attempts?: number;
21
+ baseDelayMs?: number;
22
+ }): Promise<T>;
23
+ /**
24
+ * Synchronous variant. Uses Atomics.wait for backoff so it can run inside
25
+ * non-async hot paths (watcher, CLI init, migration).
26
+ */
27
+ export declare function withBusyRetrySync<T>(fn: () => T, opts?: {
28
+ attempts?: number;
29
+ baseDelayMs?: number;
30
+ }): T;
31
+ export declare const SCHEMA_DDL = "\n CREATE TABLE IF NOT EXISTS vault (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n category TEXT NOT NULL DEFAULT 'knowledge',\n title TEXT,\n body TEXT NOT NULL,\n meta TEXT,\n tags TEXT,\n source TEXT,\n file_path TEXT UNIQUE,\n identity_key TEXT,\n expires_at TEXT,\n superseded_by TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT,\n hit_count INTEGER DEFAULT 0,\n last_accessed_at TEXT,\n source_files TEXT,\n tier TEXT DEFAULT 'working' CHECK(tier IN ('ephemeral', 'working', 'durable')),\n related_to TEXT,\n indexed INTEGER DEFAULT 1,\n recall_count INTEGER DEFAULT 0,\n recall_sessions INTEGER DEFAULT 0,\n last_recalled_at TEXT,\n heat_tier TEXT CHECK(heat_tier IN ('hot', 'warm', 'cold')),\n summary_condensed TEXT,\n summary_keypoint TEXT\n );\n\n CREATE INDEX IF NOT EXISTS idx_vault_kind ON vault(kind);\n CREATE INDEX IF NOT EXISTS idx_vault_category ON vault(category);\n CREATE INDEX IF NOT EXISTS idx_vault_category_created ON vault(category, created_at DESC);\n CREATE INDEX IF NOT EXISTS idx_vault_updated ON vault(updated_at DESC);\n CREATE UNIQUE INDEX IF NOT EXISTS idx_vault_identity ON vault(kind, identity_key) WHERE identity_key IS NOT NULL AND category = 'entity';\n CREATE INDEX IF NOT EXISTS idx_vault_superseded ON vault(superseded_by) WHERE superseded_by IS NOT NULL;\n CREATE INDEX IF NOT EXISTS idx_vault_tier ON vault(tier);\n CREATE INDEX IF NOT EXISTS idx_vault_indexed ON vault(indexed);\n CREATE INDEX IF NOT EXISTS idx_vault_heat_tier ON vault(heat_tier) WHERE heat_tier IS NOT NULL;\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_fts USING fts5(\n title, body, tags, kind,\n content='vault', content_rowid='rowid'\n );\n\n CREATE TRIGGER IF NOT EXISTS vault_ai AFTER INSERT ON vault WHEN new.indexed = 1 BEGIN\n INSERT INTO vault_fts(rowid, title, body, tags, kind)\n VALUES (new.rowid, new.title, new.body, new.tags, new.kind);\n END;\n CREATE TRIGGER IF NOT EXISTS vault_ad AFTER DELETE ON vault WHEN old.indexed = 1 BEGIN\n INSERT INTO vault_fts(vault_fts, rowid, title, body, tags, kind)\n VALUES ('delete', old.rowid, old.title, old.body, old.tags, old.kind);\n END;\n CREATE TRIGGER IF NOT EXISTS vault_au AFTER UPDATE ON vault WHEN old.indexed = 1 OR new.indexed = 1 BEGIN\n INSERT INTO vault_fts(vault_fts, rowid, title, body, tags, kind)\n VALUES ('delete', old.rowid, old.title, old.body, old.tags, old.kind);\n INSERT INTO vault_fts(rowid, title, body, tags, kind)\n SELECT new.rowid, new.title, new.body, new.tags, new.kind WHERE new.indexed = 1;\n END;\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_vec USING vec0(embedding float[384]);\n\n CREATE VIRTUAL TABLE IF NOT EXISTS vault_ctx_vec USING vec0(embedding float[384]);\n\n CREATE TABLE IF NOT EXISTS co_retrievals (\n entry_a TEXT NOT NULL,\n entry_b TEXT NOT NULL,\n count INTEGER DEFAULT 1,\n last_at TEXT NOT NULL,\n PRIMARY KEY (entry_a, entry_b)\n );\n\n CREATE TABLE IF NOT EXISTS access_log (\n id INTEGER PRIMARY KEY,\n entry_id TEXT NOT NULL,\n query TEXT,\n session_id TEXT,\n session_goal TEXT,\n accessed_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n CREATE INDEX IF NOT EXISTS idx_access_log_entry_at ON access_log(entry_id, accessed_at);\n CREATE INDEX IF NOT EXISTS idx_access_log_goal ON access_log(session_goal) WHERE session_goal IS NOT NULL;\n";
8
32
  export declare function initDatabase(dbPath: string): Promise<DatabaseSync>;
9
33
  export declare function prepareStatements(db: DatabaseSync): PreparedStatements;
10
34
  export declare function insertVec(stmts: PreparedStatements, rowid: number, embedding: Float32Array): void;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiDrD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,aAAa,EAAE,KAAK,CAAC;gBACT,aAAa,EAAE,KAAK;CAMjC;AAiED,eAAO,MAAM,UAAU,mgHAgFtB,CAAC;AAIF,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8JxE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,kBAAkB,CAmCtE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAIjG;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAIpG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAOxD"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiDrD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,aAAa,EAAE,KAAK,CAAC;gBACT,aAAa,EAAE,KAAK;CAMjC;AAiED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQjD;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,OAAO,CAAC,CAAC,CAAC,CAmBZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,EAAE,EAAE,MAAM,CAAC,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,CAAC,CAoBH;AAED,eAAO,MAAM,UAAU,6jHAkFtB,CAAC;AAIF,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA2KxE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,kBAAkB,CAmCtE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAIjG;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAIpG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAOxD"}