@recallkit/core 0.1.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 (130) hide show
  1. package/README.md +69 -0
  2. package/dist/arkiv/client.d.ts +17 -0
  3. package/dist/arkiv/client.d.ts.map +1 -0
  4. package/dist/arkiv/client.js +29 -0
  5. package/dist/arkiv/client.js.map +1 -0
  6. package/dist/arkiv/entities.d.ts +11 -0
  7. package/dist/arkiv/entities.d.ts.map +1 -0
  8. package/dist/arkiv/entities.js +27 -0
  9. package/dist/arkiv/entities.js.map +1 -0
  10. package/dist/arkiv/index.d.ts +5 -0
  11. package/dist/arkiv/index.d.ts.map +1 -0
  12. package/dist/arkiv/index.js +5 -0
  13. package/dist/arkiv/index.js.map +1 -0
  14. package/dist/arkiv/queries.d.ts +7 -0
  15. package/dist/arkiv/queries.d.ts.map +1 -0
  16. package/dist/arkiv/queries.js +56 -0
  17. package/dist/arkiv/queries.js.map +1 -0
  18. package/dist/arkiv/writes.d.ts +19 -0
  19. package/dist/arkiv/writes.d.ts.map +1 -0
  20. package/dist/arkiv/writes.js +37 -0
  21. package/dist/arkiv/writes.js.map +1 -0
  22. package/dist/constants.d.ts +19 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/constants.js +19 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/crypto/encryption.d.ts +4 -0
  27. package/dist/crypto/encryption.d.ts.map +1 -0
  28. package/dist/crypto/encryption.js +34 -0
  29. package/dist/crypto/encryption.js.map +1 -0
  30. package/dist/crypto/index.d.ts +3 -0
  31. package/dist/crypto/index.d.ts.map +1 -0
  32. package/dist/crypto/index.js +3 -0
  33. package/dist/crypto/index.js.map +1 -0
  34. package/dist/crypto/keys.d.ts +8 -0
  35. package/dist/crypto/keys.d.ts.map +1 -0
  36. package/dist/crypto/keys.js +54 -0
  37. package/dist/crypto/keys.js.map +1 -0
  38. package/dist/index.d.ts +8 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +8 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/memory/compiler.d.ts +7 -0
  43. package/dist/memory/compiler.d.ts.map +1 -0
  44. package/dist/memory/compiler.js +148 -0
  45. package/dist/memory/compiler.js.map +1 -0
  46. package/dist/memory/conflict.d.ts +10 -0
  47. package/dist/memory/conflict.d.ts.map +1 -0
  48. package/dist/memory/conflict.js +38 -0
  49. package/dist/memory/conflict.js.map +1 -0
  50. package/dist/memory/consolidation.d.ts +3 -0
  51. package/dist/memory/consolidation.d.ts.map +1 -0
  52. package/dist/memory/consolidation.js +38 -0
  53. package/dist/memory/consolidation.js.map +1 -0
  54. package/dist/memory/index.d.ts +7 -0
  55. package/dist/memory/index.d.ts.map +1 -0
  56. package/dist/memory/index.js +7 -0
  57. package/dist/memory/index.js.map +1 -0
  58. package/dist/memory/schemas.d.ts +75 -0
  59. package/dist/memory/schemas.d.ts.map +1 -0
  60. package/dist/memory/schemas.js +5 -0
  61. package/dist/memory/schemas.js.map +1 -0
  62. package/dist/memory/scope.d.ts +24 -0
  63. package/dist/memory/scope.d.ts.map +1 -0
  64. package/dist/memory/scope.js +96 -0
  65. package/dist/memory/scope.js.map +1 -0
  66. package/dist/memory/scoring.d.ts +6 -0
  67. package/dist/memory/scoring.d.ts.map +1 -0
  68. package/dist/memory/scoring.js +39 -0
  69. package/dist/memory/scoring.js.map +1 -0
  70. package/dist/retrieval/contextPack.d.ts +21 -0
  71. package/dist/retrieval/contextPack.d.ts.map +1 -0
  72. package/dist/retrieval/contextPack.js +40 -0
  73. package/dist/retrieval/contextPack.js.map +1 -0
  74. package/dist/retrieval/embeddings.d.ts +6 -0
  75. package/dist/retrieval/embeddings.d.ts.map +1 -0
  76. package/dist/retrieval/embeddings.js +23 -0
  77. package/dist/retrieval/embeddings.js.map +1 -0
  78. package/dist/retrieval/hybridRanker.d.ts +7 -0
  79. package/dist/retrieval/hybridRanker.d.ts.map +1 -0
  80. package/dist/retrieval/hybridRanker.js +50 -0
  81. package/dist/retrieval/hybridRanker.js.map +1 -0
  82. package/dist/retrieval/index.d.ts +6 -0
  83. package/dist/retrieval/index.d.ts.map +1 -0
  84. package/dist/retrieval/index.js +6 -0
  85. package/dist/retrieval/index.js.map +1 -0
  86. package/dist/retrieval/indexSearch.d.ts +19 -0
  87. package/dist/retrieval/indexSearch.d.ts.map +1 -0
  88. package/dist/retrieval/indexSearch.js +44 -0
  89. package/dist/retrieval/indexSearch.js.map +1 -0
  90. package/dist/retrieval/queryUnderstanding.d.ts +9 -0
  91. package/dist/retrieval/queryUnderstanding.d.ts.map +1 -0
  92. package/dist/retrieval/queryUnderstanding.js +27 -0
  93. package/dist/retrieval/queryUnderstanding.js.map +1 -0
  94. package/dist/storage/cacheStore.d.ts +3 -0
  95. package/dist/storage/cacheStore.d.ts.map +1 -0
  96. package/dist/storage/cacheStore.js +10 -0
  97. package/dist/storage/cacheStore.js.map +1 -0
  98. package/dist/storage/configStore.d.ts +10 -0
  99. package/dist/storage/configStore.d.ts.map +1 -0
  100. package/dist/storage/configStore.js +40 -0
  101. package/dist/storage/configStore.js.map +1 -0
  102. package/dist/storage/index.d.ts +6 -0
  103. package/dist/storage/index.d.ts.map +1 -0
  104. package/dist/storage/index.js +6 -0
  105. package/dist/storage/index.js.map +1 -0
  106. package/dist/storage/jsonFile.d.ts +5 -0
  107. package/dist/storage/jsonFile.d.ts.map +1 -0
  108. package/dist/storage/jsonFile.js +23 -0
  109. package/dist/storage/jsonFile.js.map +1 -0
  110. package/dist/storage/paths.d.ts +7 -0
  111. package/dist/storage/paths.d.ts.map +1 -0
  112. package/dist/storage/paths.js +21 -0
  113. package/dist/storage/paths.js.map +1 -0
  114. package/dist/storage/pendingMemoryStore.d.ts +9 -0
  115. package/dist/storage/pendingMemoryStore.d.ts.map +1 -0
  116. package/dist/storage/pendingMemoryStore.js +74 -0
  117. package/dist/storage/pendingMemoryStore.js.map +1 -0
  118. package/dist/tests/memory/scope.test.d.ts +2 -0
  119. package/dist/tests/memory/scope.test.d.ts.map +1 -0
  120. package/dist/tests/memory/scope.test.js +46 -0
  121. package/dist/tests/memory/scope.test.js.map +1 -0
  122. package/dist/tests/retrieval/indexSearch.test.d.ts +2 -0
  123. package/dist/tests/retrieval/indexSearch.test.d.ts.map +1 -0
  124. package/dist/tests/retrieval/indexSearch.test.js +76 -0
  125. package/dist/tests/retrieval/indexSearch.test.js.map +1 -0
  126. package/dist/types.d.ts +93 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +29 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +77 -0
@@ -0,0 +1,40 @@
1
+ import { normalizeMemoryScope } from "../memory/scope.js";
2
+ export function buildContextPack(memories, limit = 6) {
3
+ const selected = memories
4
+ .filter((memory) => memory.lifecycle.status === "active")
5
+ .sort((left, right) => right.retrieval.importance * right.evidence.confidence -
6
+ left.retrieval.importance * left.evidence.confidence)
7
+ .slice(0, limit);
8
+ return formatContextPack(selected);
9
+ }
10
+ export function buildRankedContextPack(matches, memories, limit = 6) {
11
+ const memoryById = new Map(memories.map((memory) => [memory.id, memory]));
12
+ const selected = [];
13
+ const seen = new Set();
14
+ for (const match of matches) {
15
+ if (selected.length >= limit || seen.has(match.memoryId))
16
+ continue;
17
+ const memory = memoryById.get(match.memoryId);
18
+ if (!memory || memory.lifecycle.status !== "active")
19
+ continue;
20
+ seen.add(match.memoryId);
21
+ selected.push(memory);
22
+ }
23
+ return formatContextPack(selected);
24
+ }
25
+ function formatContextPack(selected) {
26
+ return {
27
+ answerHint: selected[0]?.summary ?? "No matching RecallKit memories were found.",
28
+ memories: selected.map((memory) => ({
29
+ id: memory.id,
30
+ kind: memory.kind,
31
+ text: memory.naturalText,
32
+ summary: memory.summary,
33
+ confidence: memory.evidence.confidence,
34
+ importance: memory.retrieval.importance,
35
+ source: memory.evidence.source,
36
+ scope: normalizeMemoryScope(memory.scope),
37
+ })),
38
+ };
39
+ }
40
+ //# sourceMappingURL=contextPack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextPack.js","sourceRoot":"","sources":["../../src/retrieval/contextPack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAoB1D,MAAM,UAAU,gBAAgB,CAAC,QAAwB,EAAE,KAAK,GAAG,CAAC;IAClE,MAAM,QAAQ,GAAG,QAAQ;SACtB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC;SACxD,IAAI,CACH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU;QACtD,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CACvD;SACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAoD,EACpD,QAAwB,EACxB,KAAK,GAAG,CAAC;IAET,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,SAAS;QACnE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAwB;IACjD,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,4CAA4C;QAChF,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;YACtC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU;YACvC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAC9B,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;SAC1C,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type MemoryEmbeddingProvider = {
2
+ embedQuery: (query: string) => Promise<number[] | undefined> | number[] | undefined;
3
+ };
4
+ export declare function cosineSimilarity(left: number[] | undefined, right: number[] | undefined): number;
5
+ export declare function normalizeSimilarity(score: number): number;
6
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/retrieval/embeddings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACrF,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAgBhG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD"}
@@ -0,0 +1,23 @@
1
+ export function cosineSimilarity(left, right) {
2
+ if (!left?.length || !right?.length || left.length !== right.length)
3
+ return 0;
4
+ let dot = 0;
5
+ let leftNorm = 0;
6
+ let rightNorm = 0;
7
+ for (let index = 0; index < left.length; index += 1) {
8
+ const leftValue = left[index] ?? 0;
9
+ const rightValue = right[index] ?? 0;
10
+ dot += leftValue * rightValue;
11
+ leftNorm += leftValue * leftValue;
12
+ rightNorm += rightValue * rightValue;
13
+ }
14
+ if (leftNorm === 0 || rightNorm === 0)
15
+ return 0;
16
+ return dot / (Math.sqrt(leftNorm) * Math.sqrt(rightNorm));
17
+ }
18
+ export function normalizeSimilarity(score) {
19
+ if (!Number.isFinite(score))
20
+ return 0;
21
+ return Math.max(0, Math.min(1, (score + 1) / 2));
22
+ }
23
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/retrieval/embeddings.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,gBAAgB,CAAC,IAA0B,EAAE,KAA2B;IACtF,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAE9E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,GAAG,IAAI,SAAS,GAAG,UAAU,CAAC;QAC9B,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;QAClC,SAAS,IAAI,UAAU,GAAG,UAAU,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { MemoryIndexEntry } from "../types.js";
2
+ import type { QueryUnderstanding } from "./queryUnderstanding.js";
3
+ export type RankedMemoryIndexEntry = MemoryIndexEntry & {
4
+ score: number;
5
+ };
6
+ export declare function rankIndexEntries(entries: MemoryIndexEntry[], understanding: QueryUnderstanding): RankedMemoryIndexEntry[];
7
+ //# sourceMappingURL=hybridRanker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybridRanker.d.ts","sourceRoot":"","sources":["../../src/retrieval/hybridRanker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,aAAa,EAAE,kBAAkB,GAChC,sBAAsB,EAAE,CAiC1B"}
@@ -0,0 +1,50 @@
1
+ import { normalizeMemoryScope } from "../memory/scope.js";
2
+ export function rankIndexEntries(entries, understanding) {
3
+ const queryKeywords = new Set(understanding.keywords.map((keyword) => keyword.toLowerCase()));
4
+ const likelyKinds = new Set(understanding.likelyKinds);
5
+ return entries
6
+ .filter((entry) => entry.status === "active")
7
+ .map((entry) => {
8
+ const keywordScore = scoreKeywords(queryKeywords, [
9
+ ...entry.keywords,
10
+ ...entry.topics,
11
+ entry.summary,
12
+ entry.semanticSummary,
13
+ ]);
14
+ const semanticScore = keywordScore;
15
+ const scope = normalizeMemoryScope(entry.scope);
16
+ const scopeScore = !understanding.scopeLevel || scope.level === understanding.scopeLevel ? 1 : 0.45;
17
+ const kindScore = likelyKinds.size === 0 || likelyKinds.has(entry.kind) ? 1 : 0.35;
18
+ const recencyScore = scoreRecency(entry.updatedAt ?? entry.createdAt);
19
+ return {
20
+ ...entry,
21
+ score: semanticScore * 0.3 +
22
+ keywordScore * 0.25 +
23
+ scopeScore * 0.2 +
24
+ kindScore * 0.1 +
25
+ entry.importance * 0.07 +
26
+ entry.confidence * 0.05 +
27
+ recencyScore * 0.03,
28
+ };
29
+ })
30
+ .sort((left, right) => right.score - left.score);
31
+ }
32
+ function scoreKeywords(queryKeywords, fields) {
33
+ if (queryKeywords.size === 0)
34
+ return 0.5;
35
+ const haystack = fields.join(" ").toLowerCase();
36
+ let hits = 0;
37
+ for (const keyword of queryKeywords) {
38
+ if (haystack.includes(keyword))
39
+ hits += 1;
40
+ }
41
+ return hits / queryKeywords.size;
42
+ }
43
+ function scoreRecency(createdAt) {
44
+ const ageMs = Date.now() - new Date(createdAt).getTime();
45
+ if (!Number.isFinite(ageMs) || ageMs < 0)
46
+ return 1;
47
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
48
+ return Math.max(0.15, 1 - ageDays / 365);
49
+ }
50
+ //# sourceMappingURL=hybridRanker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybridRanker.js","sourceRoot":"","sources":["../../src/retrieval/hybridRanker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from "./queryUnderstanding.js";
2
+ export * from "./indexSearch.js";
3
+ export * from "./hybridRanker.js";
4
+ export * from "./contextPack.js";
5
+ export * from "./embeddings.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/retrieval/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./queryUnderstanding.js";
2
+ export * from "./indexSearch.js";
3
+ export * from "./hybridRanker.js";
4
+ export * from "./contextPack.js";
5
+ export * from "./embeddings.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/retrieval/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { MemoryIndexEntry } from "../types.js";
2
+ export type SearchMemoryIndexOptions = {
3
+ entries?: MemoryIndexEntry[];
4
+ limit?: number;
5
+ queryEmbedding?: number[];
6
+ };
7
+ export declare class MemoryIndexSearcher {
8
+ private readonly entries;
9
+ private readonly miniSearch;
10
+ constructor(entries: MemoryIndexEntry[]);
11
+ search(query: string, options?: SearchMemoryIndexOptions): Array<MemoryIndexEntry & {
12
+ score: number;
13
+ }>;
14
+ }
15
+ export declare function createMemoryIndexSearcher(entries: MemoryIndexEntry[]): MemoryIndexSearcher;
16
+ export declare function searchMemoryIndex(entries: MemoryIndexEntry[], query: string, limit?: number): Array<MemoryIndexEntry & {
17
+ score: number;
18
+ }>;
19
+ //# sourceMappingURL=indexSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexSearch.d.ts","sourceRoot":"","sources":["../../src/retrieval/indexSearch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;gBAE9C,OAAO,EAAE,gBAAgB,EAAE;IAUvC,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,wBAA6B,GACrC,KAAK,CAAC,gBAAgB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAwB/C;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,mBAAmB,CAE1F;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,GACR,KAAK,CAAC,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAE7C"}
@@ -0,0 +1,44 @@
1
+ import MiniSearch from "minisearch";
2
+ import { rankIndexEntries } from "./hybridRanker.js";
3
+ import { cosineSimilarity, normalizeSimilarity } from "./embeddings.js";
4
+ import { understandQuery } from "./queryUnderstanding.js";
5
+ export class MemoryIndexSearcher {
6
+ entries;
7
+ miniSearch;
8
+ constructor(entries) {
9
+ this.entries = entries.filter((entry) => entry.status === "active");
10
+ this.miniSearch = new MiniSearch({
11
+ fields: ["summary", "semanticSummary", "keywords", "topics"],
12
+ storeFields: ["memoryId"],
13
+ idField: "memoryId",
14
+ });
15
+ this.miniSearch.addAll(this.entries);
16
+ }
17
+ search(query, options = {}) {
18
+ const limit = options.limit ?? 6;
19
+ const entries = (options.entries ?? this.entries).filter((entry) => entry.status === "active");
20
+ if (entries.length === 0)
21
+ return [];
22
+ const understanding = understandQuery(query);
23
+ const ranked = rankIndexEntries(entries, understanding);
24
+ const lexicalIds = new Set(this.miniSearch.search(query, { prefix: true, fuzzy: 0.2 }).map((hit) => hit.id));
25
+ return ranked
26
+ .map((entry) => ({
27
+ ...entry,
28
+ score: entry.score +
29
+ (lexicalIds.has(entry.memoryId) ? 0.1 : 0) +
30
+ (options.queryEmbedding
31
+ ? normalizeSimilarity(cosineSimilarity(options.queryEmbedding, entry.embedding)) * 0.12
32
+ : 0),
33
+ }))
34
+ .sort((left, right) => right.score - left.score)
35
+ .slice(0, limit);
36
+ }
37
+ }
38
+ export function createMemoryIndexSearcher(entries) {
39
+ return new MemoryIndexSearcher(entries);
40
+ }
41
+ export function searchMemoryIndex(entries, query, limit = 6) {
42
+ return createMemoryIndexSearcher(entries).search(query, { limit });
43
+ }
44
+ //# sourceMappingURL=indexSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexSearch.js","sourceRoot":"","sources":["../../src/retrieval/indexSearch.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQ1D,MAAM,OAAO,mBAAmB;IACb,OAAO,CAAqB;IAC5B,UAAU,CAA+B;IAE1D,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAmB;YACjD,MAAM,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC;YAC5D,WAAW,EAAE,CAAC,UAAU,CAAC;YACzB,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CACJ,KAAa,EACb,UAAoC,EAAE;QAEtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAC/F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CACjF,CAAC;QAEF,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,KAAK;YACR,KAAK,EACH,KAAK,CAAC,KAAK;gBACX,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC,OAAO,CAAC,cAAc;oBACrB,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;oBACvF,CAAC,CAAC,CAAC,CAAC;SACT,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aAC/C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;CACF;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA2B;IACnE,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAA2B,EAC3B,KAAa,EACb,KAAK,GAAG,CAAC;IAET,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MemoryKind, MemoryScopeLevel } from "../memory/schemas.js";
2
+ export type QueryUnderstanding = {
3
+ scopeLevel?: MemoryScopeLevel;
4
+ projectId?: string;
5
+ likelyKinds: MemoryKind[];
6
+ keywords: string[];
7
+ };
8
+ export declare function understandQuery(query: string): QueryUnderstanding;
9
+ //# sourceMappingURL=queryUnderstanding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryUnderstanding.d.ts","sourceRoot":"","sources":["../../src/retrieval/queryUnderstanding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGzE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CA0BjE"}
@@ -0,0 +1,27 @@
1
+ import { extractKeywords } from "../memory/compiler.js";
2
+ export function understandQuery(query) {
3
+ const lower = query.toLowerCase();
4
+ const likelyKinds = new Set();
5
+ let scopeLevel;
6
+ if (/\b(project|architecture|build|repo)\b/.test(lower)) {
7
+ scopeLevel = "project";
8
+ likelyKinds.add("project");
9
+ }
10
+ if (/\b(prefer|like|style)\b/.test(lower)) {
11
+ likelyKinds.add("preference");
12
+ likelyKinds.add("style");
13
+ }
14
+ if (/\b(decide|decision|should|must|never|constraint)\b/.test(lower)) {
15
+ likelyKinds.add("decision");
16
+ likelyKinds.add("constraint");
17
+ }
18
+ if (/\bhow should i talk|how should i write|tone\b/.test(lower)) {
19
+ likelyKinds.add("style");
20
+ }
21
+ return {
22
+ ...(scopeLevel ? { scopeLevel } : {}),
23
+ likelyKinds: [...likelyKinds],
24
+ keywords: extractKeywords(query),
25
+ };
26
+ }
27
+ //# sourceMappingURL=queryUnderstanding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryUnderstanding.js","sourceRoot":"","sources":["../../src/retrieval/queryUnderstanding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAC1C,IAAI,UAAwC,CAAC;IAE7C,IAAI,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,UAAU,GAAG,SAAS,CAAC;QACvB,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC;QAC7B,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function readCacheJson<T>(name: string, baseDir?: string): Promise<T | undefined>;
2
+ export declare function writeCacheJson<T>(name: string, value: T, baseDir?: string): Promise<void>;
3
+ //# sourceMappingURL=cacheStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheStore.d.ts","sourceRoot":"","sources":["../../src/storage/cacheStore.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAEvG;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,EACR,OAAO,SAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,10 @@
1
+ import { cacheFilePath } from "./paths.js";
2
+ import { defaultBaseDir } from "./paths.js";
3
+ import { readJsonFile, writeJsonFile } from "./jsonFile.js";
4
+ export async function readCacheJson(name, baseDir = defaultBaseDir()) {
5
+ return readJsonFile(cacheFilePath(name, baseDir), undefined);
6
+ }
7
+ export async function writeCacheJson(name, value, baseDir = defaultBaseDir()) {
8
+ await writeJsonFile(cacheFilePath(name, baseDir), value);
9
+ }
10
+ //# sourceMappingURL=cacheStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheStore.js","sourceRoot":"","sources":["../../src/storage/cacheStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,IAAY,EAAE,OAAO,GAAG,cAAc,EAAE;IAC7E,OAAO,YAAY,CAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAQ,EACR,OAAO,GAAG,cAAc,EAAE;IAE1B,MAAM,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { WalletStatus } from "../types.js";
2
+ export type RecallKitConfig = {
3
+ ownerWallet?: string;
4
+ approvalAppUrl: string;
5
+ arkivChain: "braga";
6
+ };
7
+ export declare function readConfig(baseDir?: string): Promise<RecallKitConfig>;
8
+ export declare function writeConfig(config: Partial<RecallKitConfig>, baseDir?: string): Promise<RecallKitConfig>;
9
+ export declare function getWalletStatus(baseDir?: string): Promise<WalletStatus>;
10
+ //# sourceMappingURL=configStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configStore.d.ts","sourceRoot":"","sources":["../../src/storage/configStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAOF,wBAAsB,UAAU,CAAC,OAAO,SAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAGrF;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAChC,OAAO,SAAmB,GACzB,OAAO,CAAC,eAAe,CAAC,CAI1B;AAED,wBAAsB,eAAe,CAAC,OAAO,SAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAYvF"}
@@ -0,0 +1,40 @@
1
+ import { DEFAULT_APPROVAL_APP_URL } from "../constants.js";
2
+ import { configFilePath, defaultBaseDir } from "./paths.js";
3
+ import { readJsonFile, writeJsonFile } from "./jsonFile.js";
4
+ const defaultConfig = {
5
+ approvalAppUrl: DEFAULT_APPROVAL_APP_URL,
6
+ arkivChain: "braga",
7
+ };
8
+ export async function readConfig(baseDir = defaultBaseDir()) {
9
+ const config = await readJsonFile(configFilePath(baseDir), {});
10
+ return normalizeConfig(config);
11
+ }
12
+ export async function writeConfig(config, baseDir = defaultBaseDir()) {
13
+ const next = normalizeConfig({ ...(await readConfig(baseDir)), ...config });
14
+ await writeJsonFile(configFilePath(baseDir), next);
15
+ return next;
16
+ }
17
+ export async function getWalletStatus(baseDir = defaultBaseDir()) {
18
+ const config = await readConfig(baseDir);
19
+ return {
20
+ connected: Boolean(config.ownerWallet),
21
+ approvalAppUrl: config.approvalAppUrl,
22
+ ...(config.ownerWallet
23
+ ? {
24
+ ownerWallet: config.ownerWallet,
25
+ network: config.arkivChain,
26
+ }
27
+ : {}),
28
+ };
29
+ }
30
+ function normalizeConfig(config) {
31
+ const normalized = {
32
+ approvalAppUrl: config.approvalAppUrl ?? defaultConfig.approvalAppUrl,
33
+ arkivChain: "braga",
34
+ };
35
+ if (config.ownerWallet) {
36
+ normalized.ownerWallet = config.ownerWallet;
37
+ }
38
+ return normalized;
39
+ }
40
+ //# sourceMappingURL=configStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configStore.js","sourceRoot":"","sources":["../../src/storage/configStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAQ5D,MAAM,aAAa,GAAoB;IACrC,cAAc,EAAE,wBAAwB;IACxC,UAAU,EAAE,OAAO;CACpB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAO,GAAG,cAAc,EAAE;IACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAA2B,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAgC,EAChC,OAAO,GAAG,cAAc,EAAE;IAE1B,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5E,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAO,GAAG,cAAc,EAAE;IAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,GAAG,CAAC,MAAM,CAAC,WAAW;YACpB,CAAC,CAAC;gBACE,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,UAAU;aAC3B;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAgC;IACvD,MAAM,UAAU,GAAoB;QAClC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc;QACrE,UAAU,EAAE,OAAO;KACpB,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./paths.js";
2
+ export * from "./jsonFile.js";
3
+ export * from "./configStore.js";
4
+ export * from "./pendingMemoryStore.js";
5
+ export * from "./cacheStore.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./paths.js";
2
+ export * from "./jsonFile.js";
3
+ export * from "./configStore.js";
4
+ export * from "./pendingMemoryStore.js";
5
+ export * from "./cacheStore.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function ensureDir(dir: string): Promise<void>;
2
+ export declare function readJsonFile<T>(filePath: string, fallback: T): Promise<T>;
3
+ export declare function writeJsonFile<T>(filePath: string, value: T): Promise<void>;
4
+ export declare function isMissingFile(error: unknown): boolean;
5
+ //# sourceMappingURL=jsonFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonFile.d.ts","sourceRoot":"","sources":["../../src/storage/jsonFile.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO/E;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD"}
@@ -0,0 +1,23 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ export async function ensureDir(dir) {
4
+ await fs.mkdir(dir, { recursive: true });
5
+ }
6
+ export async function readJsonFile(filePath, fallback) {
7
+ try {
8
+ return JSON.parse(await fs.readFile(filePath, "utf8"));
9
+ }
10
+ catch (error) {
11
+ if (isMissingFile(error))
12
+ return fallback;
13
+ throw error;
14
+ }
15
+ }
16
+ export async function writeJsonFile(filePath, value) {
17
+ await ensureDir(path.dirname(filePath));
18
+ await fs.writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
19
+ }
20
+ export function isMissingFile(error) {
21
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
22
+ }
23
+ //# sourceMappingURL=jsonFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonFile.js","sourceRoot":"","sources":["../../src/storage/jsonFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,QAAgB,EAAE,QAAW;IACjE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAM,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC1C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,QAAgB,EAAE,KAAQ;IAC/D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function defaultBaseDir(): string;
2
+ export declare function recallKitDir(baseDir?: string): string;
3
+ export declare function pendingFilePath(baseDir?: string): string;
4
+ export declare function configFilePath(baseDir?: string): string;
5
+ export declare function cacheDir(baseDir?: string): string;
6
+ export declare function cacheFilePath(name: string, baseDir?: string): string;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAmB,GAAG,MAAM,CAE/D;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAmB,GAAG,MAAM,CAElE;AAED,wBAAgB,cAAc,CAAC,OAAO,SAAmB,GAAG,MAAM,CAEjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,SAAmB,GAAG,MAAM,CAE3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,21 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_RECALLKIT_DIR } from "../constants.js";
3
+ export function defaultBaseDir() {
4
+ return process.env.RECALLKIT_DATA_DIR ?? process.cwd();
5
+ }
6
+ export function recallKitDir(baseDir = defaultBaseDir()) {
7
+ return path.join(baseDir, DEFAULT_RECALLKIT_DIR);
8
+ }
9
+ export function pendingFilePath(baseDir = defaultBaseDir()) {
10
+ return path.join(recallKitDir(baseDir), "pending.json");
11
+ }
12
+ export function configFilePath(baseDir = defaultBaseDir()) {
13
+ return path.join(recallKitDir(baseDir), "config.json");
14
+ }
15
+ export function cacheDir(baseDir = defaultBaseDir()) {
16
+ return path.join(recallKitDir(baseDir), "cache");
17
+ }
18
+ export function cacheFilePath(name, baseDir = defaultBaseDir()) {
19
+ return path.join(cacheDir(baseDir), name);
20
+ }
21
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,cAAc,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO,GAAG,cAAc,EAAE;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO,GAAG,cAAc,EAAE;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,cAAc,EAAE;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAO,GAAG,cAAc,EAAE;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type PendingMemoryCandidate } from "../memory/schemas.js";
2
+ export declare function ensureRecallKitDir(baseDir?: string): Promise<void>;
3
+ export declare function readPendingMemories(baseDir?: string): Promise<PendingMemoryCandidate[]>;
4
+ export declare function writePendingMemories(pending: PendingMemoryCandidate[], baseDir?: string): Promise<void>;
5
+ export declare function addPendingMemory(candidate: PendingMemoryCandidate, baseDir?: string): Promise<PendingMemoryCandidate>;
6
+ export declare function updatePendingMemory(id: string, update: Partial<PendingMemoryCandidate>, baseDir?: string): Promise<PendingMemoryCandidate | undefined>;
7
+ export declare function deletePendingMemory(id: string, baseDir?: string): Promise<boolean>;
8
+ export declare function clearCommittedPending(ids: string[], baseDir?: string): Promise<void>;
9
+ //# sourceMappingURL=pendingMemoryStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingMemoryStore.d.ts","sourceRoot":"","sources":["../../src/storage/pendingMemoryStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI1F,wBAAsB,kBAAkB,CAAC,OAAO,SAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF;AAED,wBAAsB,mBAAmB,CAAC,OAAO,SAAmB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAGvG;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAAE,EACjC,OAAO,SAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,sBAAsB,EACjC,OAAO,SAAmB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAKjC;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvC,OAAO,SAAmB,GACzB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAW7C;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKlG;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,SAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpG"}
@@ -0,0 +1,74 @@
1
+ import { normalizeMemoryScope, reasonForScope } from "../memory/scope.js";
2
+ import { isPendingMemoryStatus } from "../memory/schemas.js";
3
+ import { writeJsonFile, ensureDir, readJsonFile } from "./jsonFile.js";
4
+ import { defaultBaseDir, pendingFilePath, recallKitDir } from "./paths.js";
5
+ export async function ensureRecallKitDir(baseDir = defaultBaseDir()) {
6
+ await ensureDir(recallKitDir(baseDir));
7
+ }
8
+ export async function readPendingMemories(baseDir = defaultBaseDir()) {
9
+ const parsed = await readJsonFile(pendingFilePath(baseDir), []);
10
+ return Array.isArray(parsed) ? parsed.map(normalizePendingMemoryCandidate).filter(isPendingMemoryCandidate) : [];
11
+ }
12
+ export async function writePendingMemories(pending, baseDir = defaultBaseDir()) {
13
+ await writeJsonFile(pendingFilePath(baseDir), pending);
14
+ }
15
+ export async function addPendingMemory(candidate, baseDir = defaultBaseDir()) {
16
+ const pending = await readPendingMemories(baseDir);
17
+ pending.unshift(candidate);
18
+ await writePendingMemories(pending, baseDir);
19
+ return candidate;
20
+ }
21
+ export async function updatePendingMemory(id, update, baseDir = defaultBaseDir()) {
22
+ const pending = await readPendingMemories(baseDir);
23
+ const index = pending.findIndex((candidate) => candidate.id === id);
24
+ if (index === -1)
25
+ return undefined;
26
+ const existing = pending[index];
27
+ if (!existing)
28
+ return undefined;
29
+ const next = { ...existing, ...update };
30
+ pending[index] = next;
31
+ await writePendingMemories(pending, baseDir);
32
+ return next;
33
+ }
34
+ export async function deletePendingMemory(id, baseDir = defaultBaseDir()) {
35
+ const pending = await readPendingMemories(baseDir);
36
+ const next = pending.filter((candidate) => candidate.id !== id);
37
+ await writePendingMemories(next, baseDir);
38
+ return next.length !== pending.length;
39
+ }
40
+ export async function clearCommittedPending(ids, baseDir = defaultBaseDir()) {
41
+ const selected = new Set(ids);
42
+ const pending = await readPendingMemories(baseDir);
43
+ await writePendingMemories(pending.filter((candidate) => !selected.has(candidate.id)), baseDir);
44
+ }
45
+ function isPendingMemoryCandidate(value) {
46
+ const candidate = value;
47
+ return (typeof candidate === "object" &&
48
+ candidate !== null &&
49
+ typeof candidate.id === "string" &&
50
+ typeof candidate.text === "string" &&
51
+ typeof candidate.kind === "string" &&
52
+ typeof candidate.scope === "object" &&
53
+ candidate.scope !== null &&
54
+ typeof candidate.scopeReason === "string" &&
55
+ Array.isArray(candidate.tags) &&
56
+ typeof candidate.reason === "string" &&
57
+ typeof candidate.createdAt === "string" &&
58
+ typeof candidate.createdByAgent === "string" &&
59
+ typeof candidate.importance === "number" &&
60
+ typeof candidate.confidence === "number" &&
61
+ isPendingMemoryStatus(candidate.status));
62
+ }
63
+ function normalizePendingMemoryCandidate(value) {
64
+ if (typeof value !== "object" || value === null || Array.isArray(value))
65
+ return value;
66
+ const candidate = value;
67
+ const scope = normalizeMemoryScope(candidate.scope);
68
+ return {
69
+ ...candidate,
70
+ scope,
71
+ scopeReason: typeof candidate.scopeReason === "string" ? candidate.scopeReason : reasonForScope(scope),
72
+ };
73
+ }
74
+ //# sourceMappingURL=pendingMemoryStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingMemoryStore.js","sourceRoot":"","sources":["../../src/storage/pendingMemoryStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scope.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.test.d.ts","sourceRoot":"","sources":["../../../src/tests/memory/scope.test.ts"],"names":[],"mappings":""}