ai-memory-layer 2.0.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 (245) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +765 -0
  4. package/bin/memory-server.mjs +157 -0
  5. package/dist/adapters/memory/embeddings.d.ts +4 -0
  6. package/dist/adapters/memory/embeddings.d.ts.map +1 -0
  7. package/dist/adapters/memory/embeddings.js +53 -0
  8. package/dist/adapters/memory/embeddings.js.map +1 -0
  9. package/dist/adapters/memory/index.d.ts +7 -0
  10. package/dist/adapters/memory/index.d.ts.map +1 -0
  11. package/dist/adapters/memory/index.js +650 -0
  12. package/dist/adapters/memory/index.js.map +1 -0
  13. package/dist/adapters/postgres/index.d.ts +38 -0
  14. package/dist/adapters/postgres/index.d.ts.map +1 -0
  15. package/dist/adapters/postgres/index.js +982 -0
  16. package/dist/adapters/postgres/index.js.map +1 -0
  17. package/dist/adapters/sqlite/embeddings.d.ts +5 -0
  18. package/dist/adapters/sqlite/embeddings.d.ts.map +1 -0
  19. package/dist/adapters/sqlite/embeddings.js +122 -0
  20. package/dist/adapters/sqlite/embeddings.js.map +1 -0
  21. package/dist/adapters/sqlite/index.d.ts +8 -0
  22. package/dist/adapters/sqlite/index.d.ts.map +1 -0
  23. package/dist/adapters/sqlite/index.js +839 -0
  24. package/dist/adapters/sqlite/index.js.map +1 -0
  25. package/dist/adapters/sqlite/mappers.d.ts +40 -0
  26. package/dist/adapters/sqlite/mappers.d.ts.map +1 -0
  27. package/dist/adapters/sqlite/mappers.js +95 -0
  28. package/dist/adapters/sqlite/mappers.js.map +1 -0
  29. package/dist/adapters/sqlite/schema.d.ts +4 -0
  30. package/dist/adapters/sqlite/schema.d.ts.map +1 -0
  31. package/dist/adapters/sqlite/schema.js +394 -0
  32. package/dist/adapters/sqlite/schema.js.map +1 -0
  33. package/dist/adapters/sync-to-async.d.ts +15 -0
  34. package/dist/adapters/sync-to-async.d.ts.map +1 -0
  35. package/dist/adapters/sync-to-async.js +95 -0
  36. package/dist/adapters/sync-to-async.js.map +1 -0
  37. package/dist/cli/inspect.d.ts +34 -0
  38. package/dist/cli/inspect.d.ts.map +1 -0
  39. package/dist/cli/inspect.js +190 -0
  40. package/dist/cli/inspect.js.map +1 -0
  41. package/dist/contracts/async-storage.d.ts +86 -0
  42. package/dist/contracts/async-storage.d.ts.map +1 -0
  43. package/dist/contracts/async-storage.js +2 -0
  44. package/dist/contracts/async-storage.js.map +1 -0
  45. package/dist/contracts/embedding.d.ts +22 -0
  46. package/dist/contracts/embedding.d.ts.map +1 -0
  47. package/dist/contracts/embedding.js +2 -0
  48. package/dist/contracts/embedding.js.map +1 -0
  49. package/dist/contracts/identity.d.ts +29 -0
  50. package/dist/contracts/identity.d.ts.map +1 -0
  51. package/dist/contracts/identity.js +34 -0
  52. package/dist/contracts/identity.js.map +1 -0
  53. package/dist/contracts/observability.d.ts +18 -0
  54. package/dist/contracts/observability.d.ts.map +1 -0
  55. package/dist/contracts/observability.js +7 -0
  56. package/dist/contracts/observability.js.map +1 -0
  57. package/dist/contracts/policy.d.ts +108 -0
  58. package/dist/contracts/policy.d.ts.map +1 -0
  59. package/dist/contracts/policy.js +107 -0
  60. package/dist/contracts/policy.js.map +1 -0
  61. package/dist/contracts/storage.d.ts +78 -0
  62. package/dist/contracts/storage.d.ts.map +1 -0
  63. package/dist/contracts/storage.js +2 -0
  64. package/dist/contracts/storage.js.map +1 -0
  65. package/dist/contracts/types.d.ts +381 -0
  66. package/dist/contracts/types.d.ts.map +1 -0
  67. package/dist/contracts/types.js +94 -0
  68. package/dist/contracts/types.js.map +1 -0
  69. package/dist/core/circuit-breaker.d.ts +11 -0
  70. package/dist/core/circuit-breaker.d.ts.map +1 -0
  71. package/dist/core/circuit-breaker.js +38 -0
  72. package/dist/core/circuit-breaker.js.map +1 -0
  73. package/dist/core/context.d.ts +56 -0
  74. package/dist/core/context.d.ts.map +1 -0
  75. package/dist/core/context.js +345 -0
  76. package/dist/core/context.js.map +1 -0
  77. package/dist/core/events.d.ts +8 -0
  78. package/dist/core/events.d.ts.map +1 -0
  79. package/dist/core/events.js +25 -0
  80. package/dist/core/events.js.map +1 -0
  81. package/dist/core/extractor.d.ts +37 -0
  82. package/dist/core/extractor.d.ts.map +1 -0
  83. package/dist/core/extractor.js +448 -0
  84. package/dist/core/extractor.js.map +1 -0
  85. package/dist/core/formatter.d.ts +25 -0
  86. package/dist/core/formatter.d.ts.map +1 -0
  87. package/dist/core/formatter.js +97 -0
  88. package/dist/core/formatter.js.map +1 -0
  89. package/dist/core/knowledge-lifecycle.d.ts +15 -0
  90. package/dist/core/knowledge-lifecycle.d.ts.map +1 -0
  91. package/dist/core/knowledge-lifecycle.js +103 -0
  92. package/dist/core/knowledge-lifecycle.js.map +1 -0
  93. package/dist/core/maintenance.d.ts +13 -0
  94. package/dist/core/maintenance.d.ts.map +1 -0
  95. package/dist/core/maintenance.js +102 -0
  96. package/dist/core/maintenance.js.map +1 -0
  97. package/dist/core/manager.d.ts +110 -0
  98. package/dist/core/manager.d.ts.map +1 -0
  99. package/dist/core/manager.js +640 -0
  100. package/dist/core/manager.js.map +1 -0
  101. package/dist/core/monitor.d.ts +73 -0
  102. package/dist/core/monitor.d.ts.map +1 -0
  103. package/dist/core/monitor.js +395 -0
  104. package/dist/core/monitor.js.map +1 -0
  105. package/dist/core/orchestrator.d.ts +64 -0
  106. package/dist/core/orchestrator.d.ts.map +1 -0
  107. package/dist/core/orchestrator.js +916 -0
  108. package/dist/core/orchestrator.js.map +1 -0
  109. package/dist/core/presets.d.ts +15 -0
  110. package/dist/core/presets.d.ts.map +1 -0
  111. package/dist/core/presets.js +99 -0
  112. package/dist/core/presets.js.map +1 -0
  113. package/dist/core/provider-managers.d.ts +47 -0
  114. package/dist/core/provider-managers.d.ts.map +1 -0
  115. package/dist/core/provider-managers.js +112 -0
  116. package/dist/core/provider-managers.js.map +1 -0
  117. package/dist/core/quick.d.ts +62 -0
  118. package/dist/core/quick.d.ts.map +1 -0
  119. package/dist/core/quick.js +300 -0
  120. package/dist/core/quick.js.map +1 -0
  121. package/dist/core/retrieval.d.ts +29 -0
  122. package/dist/core/retrieval.d.ts.map +1 -0
  123. package/dist/core/retrieval.js +150 -0
  124. package/dist/core/retrieval.js.map +1 -0
  125. package/dist/core/runtime.d.ts +67 -0
  126. package/dist/core/runtime.d.ts.map +1 -0
  127. package/dist/core/runtime.js +84 -0
  128. package/dist/core/runtime.js.map +1 -0
  129. package/dist/core/streaming.d.ts +37 -0
  130. package/dist/core/streaming.d.ts.map +1 -0
  131. package/dist/core/streaming.js +51 -0
  132. package/dist/core/streaming.js.map +1 -0
  133. package/dist/core/sync.d.ts +13 -0
  134. package/dist/core/sync.d.ts.map +1 -0
  135. package/dist/core/sync.js +46 -0
  136. package/dist/core/sync.js.map +1 -0
  137. package/dist/core/telemetry.d.ts +8 -0
  138. package/dist/core/telemetry.d.ts.map +1 -0
  139. package/dist/core/telemetry.js +14 -0
  140. package/dist/core/telemetry.js.map +1 -0
  141. package/dist/core/tokens.d.ts +8 -0
  142. package/dist/core/tokens.d.ts.map +1 -0
  143. package/dist/core/tokens.js +59 -0
  144. package/dist/core/tokens.js.map +1 -0
  145. package/dist/core/trust.d.ts +23 -0
  146. package/dist/core/trust.d.ts.map +1 -0
  147. package/dist/core/trust.js +164 -0
  148. package/dist/core/trust.js.map +1 -0
  149. package/dist/core/validation.d.ts +36 -0
  150. package/dist/core/validation.d.ts.map +1 -0
  151. package/dist/core/validation.js +185 -0
  152. package/dist/core/validation.js.map +1 -0
  153. package/dist/embeddings/local.d.ts +5 -0
  154. package/dist/embeddings/local.d.ts.map +1 -0
  155. package/dist/embeddings/local.js +128 -0
  156. package/dist/embeddings/local.js.map +1 -0
  157. package/dist/embeddings/openai.d.ts +26 -0
  158. package/dist/embeddings/openai.d.ts.map +1 -0
  159. package/dist/embeddings/openai.js +48 -0
  160. package/dist/embeddings/openai.js.map +1 -0
  161. package/dist/embeddings/resilience.d.ts +5 -0
  162. package/dist/embeddings/resilience.d.ts.map +1 -0
  163. package/dist/embeddings/resilience.js +53 -0
  164. package/dist/embeddings/resilience.js.map +1 -0
  165. package/dist/embeddings/voyage.d.ts +30 -0
  166. package/dist/embeddings/voyage.d.ts.map +1 -0
  167. package/dist/embeddings/voyage.js +53 -0
  168. package/dist/embeddings/voyage.js.map +1 -0
  169. package/dist/index.d.ts +72 -0
  170. package/dist/index.d.ts.map +1 -0
  171. package/dist/index.js +40 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/integrations/claude-agent.d.ts +21 -0
  174. package/dist/integrations/claude-agent.d.ts.map +1 -0
  175. package/dist/integrations/claude-agent.js +44 -0
  176. package/dist/integrations/claude-agent.js.map +1 -0
  177. package/dist/integrations/claude-tools.d.ts +18 -0
  178. package/dist/integrations/claude-tools.d.ts.map +1 -0
  179. package/dist/integrations/claude-tools.js +60 -0
  180. package/dist/integrations/claude-tools.js.map +1 -0
  181. package/dist/integrations/langchain.d.ts +24 -0
  182. package/dist/integrations/langchain.d.ts.map +1 -0
  183. package/dist/integrations/langchain.js +48 -0
  184. package/dist/integrations/langchain.js.map +1 -0
  185. package/dist/integrations/mcp.d.ts +23 -0
  186. package/dist/integrations/mcp.d.ts.map +1 -0
  187. package/dist/integrations/mcp.js +60 -0
  188. package/dist/integrations/mcp.js.map +1 -0
  189. package/dist/integrations/middleware.d.ts +15 -0
  190. package/dist/integrations/middleware.d.ts.map +1 -0
  191. package/dist/integrations/middleware.js +27 -0
  192. package/dist/integrations/middleware.js.map +1 -0
  193. package/dist/integrations/openai-tools.d.ts +21 -0
  194. package/dist/integrations/openai-tools.d.ts.map +1 -0
  195. package/dist/integrations/openai-tools.js +69 -0
  196. package/dist/integrations/openai-tools.js.map +1 -0
  197. package/dist/integrations/vercel-ai.d.ts +19 -0
  198. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  199. package/dist/integrations/vercel-ai.js +41 -0
  200. package/dist/integrations/vercel-ai.js.map +1 -0
  201. package/dist/server/http-server.d.ts +61 -0
  202. package/dist/server/http-server.d.ts.map +1 -0
  203. package/dist/server/http-server.js +684 -0
  204. package/dist/server/http-server.js.map +1 -0
  205. package/dist/server/index.d.ts +5 -0
  206. package/dist/server/index.d.ts.map +1 -0
  207. package/dist/server/index.js +3 -0
  208. package/dist/server/index.js.map +1 -0
  209. package/dist/server/mcp-server.d.ts +61 -0
  210. package/dist/server/mcp-server.d.ts.map +1 -0
  211. package/dist/server/mcp-server.js +465 -0
  212. package/dist/server/mcp-server.js.map +1 -0
  213. package/dist/summarizers/claude.d.ts +11 -0
  214. package/dist/summarizers/claude.d.ts.map +1 -0
  215. package/dist/summarizers/claude.js +39 -0
  216. package/dist/summarizers/claude.js.map +1 -0
  217. package/dist/summarizers/client.d.ts +23 -0
  218. package/dist/summarizers/client.d.ts.map +1 -0
  219. package/dist/summarizers/client.js +24 -0
  220. package/dist/summarizers/client.js.map +1 -0
  221. package/dist/summarizers/extractive.d.ts +6 -0
  222. package/dist/summarizers/extractive.d.ts.map +1 -0
  223. package/dist/summarizers/extractive.js +204 -0
  224. package/dist/summarizers/extractive.js.map +1 -0
  225. package/dist/summarizers/extractor.d.ts +12 -0
  226. package/dist/summarizers/extractor.d.ts.map +1 -0
  227. package/dist/summarizers/extractor.js +75 -0
  228. package/dist/summarizers/extractor.js.map +1 -0
  229. package/dist/summarizers/openai.d.ts +11 -0
  230. package/dist/summarizers/openai.d.ts.map +1 -0
  231. package/dist/summarizers/openai.js +41 -0
  232. package/dist/summarizers/openai.js.map +1 -0
  233. package/dist/summarizers/prompts.d.ts +11 -0
  234. package/dist/summarizers/prompts.d.ts.map +1 -0
  235. package/dist/summarizers/prompts.js +104 -0
  236. package/dist/summarizers/prompts.js.map +1 -0
  237. package/docs/DEPLOYMENT.md +84 -0
  238. package/docs/INTEGRATIONS.md +64 -0
  239. package/docs/MEMORY_QUALITY_BASELINE.md +55 -0
  240. package/docs/MEMORY_QUALITY_RELEASE_GATE.md +63 -0
  241. package/docs/MEMORY_QUALITY_RUBRIC.md +249 -0
  242. package/docs/OPERATIONS.md +49 -0
  243. package/docs/SECURITY.md +25 -0
  244. package/openapi.yaml +843 -0
  245. package/package.json +157 -0
@@ -0,0 +1,448 @@
1
+ const STOP_WORDS = new Set([
2
+ 'a',
3
+ 'an',
4
+ 'and',
5
+ 'be',
6
+ 'for',
7
+ 'is',
8
+ 'of',
9
+ 'the',
10
+ 'this',
11
+ 'that',
12
+ 'to',
13
+ 'with',
14
+ ]);
15
+ const DOMAIN_GROUPS = {
16
+ theme: ['dark', 'light'],
17
+ editor: ['vim', 'neovim', 'emacs', 'vscode', 'cursor'],
18
+ language: ['typescript', 'javascript', 'python', 'rust', 'go', 'java'],
19
+ database: ['sqlite', 'postgres', 'postgresql', 'mysql', 'mongodb', 'redis', 'dynamodb'],
20
+ deployment: ['local', 'cloud', 'hosted', 'onprem', 'on-prem', 'staging', 'production', 'deploy'],
21
+ framework: ['react', 'nextjs', 'next', 'vue', 'svelte', 'express', 'fastify', 'django', 'flask'],
22
+ testing: ['vitest', 'jest', 'pytest', 'playwright', 'cypress'],
23
+ packaging: ['npm', 'pnpm', 'yarn', 'docker', 'container'],
24
+ style: ['tailwind', 'eslint', 'prettier', 'biome'],
25
+ version_control: ['git', 'github', 'gitlab'],
26
+ os: ['linux', 'macos', 'windows', 'ubuntu'],
27
+ };
28
+ function uniqFacts(facts) {
29
+ const seen = new Set();
30
+ const results = [];
31
+ for (const fact of facts) {
32
+ const normalized = normalizeFactText(fact.fact);
33
+ const key = `${fact.factType}:${normalized}`;
34
+ if (normalized.length === 0 || seen.has(key))
35
+ continue;
36
+ seen.add(key);
37
+ results.push({
38
+ ...fact,
39
+ fact: fact.fact.trim(),
40
+ });
41
+ }
42
+ return results;
43
+ }
44
+ export function normalizeFactText(fact) {
45
+ return fact
46
+ .trim()
47
+ .replace(/[.?!;:,]+$/g, '')
48
+ .toLowerCase()
49
+ .replace(/\s+/g, ' ');
50
+ }
51
+ export function normalizeFactValue(value) {
52
+ return normalizeFactText(value).replace(/^(?:the|a|an)\s+/g, '');
53
+ }
54
+ function mergeDomainGroups(customGroups) {
55
+ if (!customGroups)
56
+ return DOMAIN_GROUPS;
57
+ const merged = { ...DOMAIN_GROUPS };
58
+ for (const [group, values] of Object.entries(customGroups)) {
59
+ merged[group] = [...new Set([...(merged[group] ?? []), ...values])];
60
+ }
61
+ return merged;
62
+ }
63
+ export function extractDomainToken(value, domainGroups = DOMAIN_GROUPS) {
64
+ const normalized = normalizeFactValue(value);
65
+ const tokens = normalized
66
+ .split(/[^a-z0-9]+/g)
67
+ .filter((token) => token.length > 0 && !STOP_WORDS.has(token));
68
+ for (const [group, candidates] of Object.entries(domainGroups)) {
69
+ if (tokens.some((token) => candidates.includes(token))) {
70
+ return group;
71
+ }
72
+ }
73
+ return tokens.slice(0, 2).join('_') || normalized || 'general';
74
+ }
75
+ function inferSubject(text) {
76
+ const normalized = normalizeFactText(text);
77
+ if (normalized.startsWith('the user ') || normalized.startsWith('user '))
78
+ return 'user';
79
+ if (normalized.startsWith('the system ') || normalized.startsWith('system '))
80
+ return 'system';
81
+ if (normalized.startsWith('the project ') || normalized.startsWith('project '))
82
+ return 'project';
83
+ if (normalized.startsWith('the workspace ') || normalized.startsWith('workspace '))
84
+ return 'workspace';
85
+ return 'user';
86
+ }
87
+ function inferStructuredFields(factType, fact, domainGroups = DOMAIN_GROUPS) {
88
+ const normalized = normalizeFactText(fact);
89
+ const subject = inferSubject(normalized);
90
+ if (factType === 'entity') {
91
+ const value = normalizeFactValue(fact);
92
+ return {
93
+ subject: 'entity',
94
+ attribute: 'entity_name',
95
+ value,
96
+ slotKey: `entity:${extractDomainToken(value, domainGroups)}`,
97
+ isNegated: false,
98
+ };
99
+ }
100
+ const preferenceMatch = normalized.match(/^(?:the user )?(prefers?|likes?|wants?|uses?|avoids?|doesn't like|does not like)\s+(.+)$/);
101
+ if (factType === 'preference' && preferenceMatch) {
102
+ const predicate = preferenceMatch[1];
103
+ const value = normalizeFactValue(preferenceMatch[2]);
104
+ return {
105
+ subject: subject ?? 'user',
106
+ attribute: predicate.includes('avoid') || predicate.includes("doesn't")
107
+ ? 'preference_avoid'
108
+ : 'preference',
109
+ value,
110
+ slotKey: `${subject ?? 'user'}:preference:${extractDomainToken(value, domainGroups)}`,
111
+ isNegated: predicate.includes('avoid') || predicate.includes("doesn't"),
112
+ };
113
+ }
114
+ const decisionMatch = normalized.match(/^(?:the user |we )?(?:decided|chose|selected)\s+(.+)$/);
115
+ if (factType === 'decision' && decisionMatch) {
116
+ const value = normalizeFactValue(decisionMatch[1]);
117
+ return {
118
+ subject: subject ?? 'user',
119
+ attribute: 'decision',
120
+ value,
121
+ slotKey: `${subject ?? 'user'}:decision:${extractDomainToken(value, domainGroups)}`,
122
+ isNegated: false,
123
+ };
124
+ }
125
+ const constraintMatch = normalized.match(/^(?:the user |the system |the project |we )?(must not|should not|cannot|can't|must|requires?|never|avoid)\s+(.+)$/);
126
+ if (factType === 'constraint' && constraintMatch) {
127
+ const predicate = constraintMatch[1];
128
+ const value = normalizeFactValue(constraintMatch[2]);
129
+ return {
130
+ subject: subject ?? 'system',
131
+ attribute: 'constraint',
132
+ value,
133
+ slotKey: `${subject ?? 'system'}:constraint:${extractDomainToken(value, domainGroups)}`,
134
+ isNegated: predicate.includes('not') || predicate.includes("can't") || predicate.includes('cannot'),
135
+ };
136
+ }
137
+ const referenceMatch = normalized.match(/^(?:the (?:system|project) )?(?:is|are|using|running|built with|named|called)\s+(.+)$/);
138
+ if (factType === 'reference' && referenceMatch) {
139
+ const value = normalizeFactValue(referenceMatch[1]);
140
+ return {
141
+ subject: subject ?? 'system',
142
+ attribute: 'reference',
143
+ value,
144
+ slotKey: `${subject ?? 'system'}:reference:${extractDomainToken(value, domainGroups)}`,
145
+ isNegated: false,
146
+ };
147
+ }
148
+ const fallbackValue = normalizeFactValue(fact);
149
+ return {
150
+ subject,
151
+ attribute: factType,
152
+ value: fallbackValue || null,
153
+ slotKey: `${subject ?? 'general'}:${factType}:${extractDomainToken(fallbackValue, domainGroups)}`,
154
+ isNegated: /\b(?:not|never|cannot|can't|must not|should not)\b/.test(normalized),
155
+ };
156
+ }
157
+ export function normalizeExtractedFact(fact) {
158
+ const normalizedFact = normalizeFactText(fact.fact);
159
+ const structured = inferStructuredFields(fact.factType, fact.fact, mergeDomainGroups(fact.domainGroups));
160
+ return {
161
+ ...fact,
162
+ sourceText: fact.sourceText ?? fact.fact,
163
+ subject: structured.subject,
164
+ attribute: structured.attribute,
165
+ value: structured.value,
166
+ normalizedFact,
167
+ slotKey: structured.slotKey,
168
+ isNegated: structured.isNegated,
169
+ };
170
+ }
171
+ export function normalizeKnowledgeMemory(memory) {
172
+ const fallback = normalizeExtractedFact({
173
+ fact: memory.fact,
174
+ factType: memory.fact_type,
175
+ confidence: memory.confidence,
176
+ sourceText: memory.fact,
177
+ });
178
+ return {
179
+ fact: memory.fact,
180
+ factType: memory.fact_type,
181
+ confidence: memory.confidence,
182
+ sourceText: memory.fact,
183
+ subject: memory.fact_subject ?? fallback.subject,
184
+ attribute: memory.fact_attribute ?? fallback.attribute,
185
+ value: memory.fact_value ?? fallback.value,
186
+ normalizedFact: memory.normalized_fact ?? fallback.normalizedFact,
187
+ slotKey: memory.slot_key ?? fallback.slotKey,
188
+ isNegated: memory.is_negated,
189
+ };
190
+ }
191
+ export function classifyFactRelation(existing, candidate) {
192
+ if (existing.normalizedFact === candidate.normalizedFact) {
193
+ return 'duplicate';
194
+ }
195
+ if (existing.slotKey &&
196
+ candidate.slotKey &&
197
+ existing.slotKey === candidate.slotKey &&
198
+ existing.subject === candidate.subject &&
199
+ existing.attribute === candidate.attribute) {
200
+ if (existing.value === candidate.value && existing.isNegated === candidate.isNegated) {
201
+ return 'duplicate';
202
+ }
203
+ if (existing.isNegated !== candidate.isNegated) {
204
+ return 'conflict';
205
+ }
206
+ if (candidate.factType === 'constraint') {
207
+ return 'conflict';
208
+ }
209
+ return 'update';
210
+ }
211
+ return 'compatible';
212
+ }
213
+ export function getContradictionKey(factType, fact) {
214
+ return normalizeExtractedFact({
215
+ fact,
216
+ factType,
217
+ confidence: 'medium',
218
+ }).slotKey;
219
+ }
220
+ function extractMatches(source, pattern, factType, confidence) {
221
+ const matches = [];
222
+ for (const match of source.matchAll(pattern)) {
223
+ const fact = match[0].trim();
224
+ if (fact.length === 0)
225
+ continue;
226
+ matches.push({ fact, factType, confidence, sourceText: fact });
227
+ }
228
+ return matches;
229
+ }
230
+ function countDomainMatches(source, domainGroups) {
231
+ const tokens = normalizeFactText(source)
232
+ .split(/[^a-z0-9]+/g)
233
+ .filter((token) => token.length > 0 && !STOP_WORDS.has(token));
234
+ const counts = new Map();
235
+ tokens.forEach((token) => {
236
+ counts.set(token, (counts.get(token) ?? 0) + 1);
237
+ });
238
+ const matches = [];
239
+ for (const [group, terms] of Object.entries(domainGroups)) {
240
+ for (const term of terms) {
241
+ const count = counts.get(term);
242
+ if (count) {
243
+ matches.push({ group, term, count });
244
+ }
245
+ }
246
+ }
247
+ return matches;
248
+ }
249
+ function extractImplicitPreferenceFacts(source, domainGroups) {
250
+ const patterns = [
251
+ /\b(?:we|the team|the project|the system)\s+(?:went with|ended up using|settled on)\s+([^.?!;]+)/gi,
252
+ /\b([a-z0-9_-]+)\s+is better than\s+([a-z0-9_-]+)(?:\s+for\s+([^.?!;]+))?/gi,
253
+ ];
254
+ const facts = [];
255
+ for (const match of source.matchAll(patterns[0])) {
256
+ const value = normalizeFactValue(match[1]);
257
+ if (!value)
258
+ continue;
259
+ facts.push({
260
+ fact: `The system prefers ${value}`,
261
+ factType: 'preference',
262
+ confidence: 'medium',
263
+ sourceText: match[0],
264
+ domainGroups,
265
+ });
266
+ }
267
+ for (const match of source.matchAll(patterns[1])) {
268
+ const preferred = normalizeFactValue(match[1]);
269
+ const compared = normalizeFactValue(match[2]);
270
+ if (!preferred || !compared)
271
+ continue;
272
+ const context = match[3] ? ` for ${normalizeFactValue(match[3])}` : '';
273
+ facts.push({
274
+ fact: `The system prefers ${preferred} over ${compared}${context}`,
275
+ factType: 'preference',
276
+ confidence: 'medium',
277
+ sourceText: match[0],
278
+ domainGroups,
279
+ });
280
+ }
281
+ return facts;
282
+ }
283
+ function extractDomainFrequencyFacts(source, domainGroups) {
284
+ const facts = [];
285
+ const seen = new Set();
286
+ for (const match of countDomainMatches(source, domainGroups)) {
287
+ if (match.count < 3)
288
+ continue;
289
+ const key = `${match.group}:${match.term}`;
290
+ if (seen.has(key))
291
+ continue;
292
+ seen.add(key);
293
+ facts.push({
294
+ fact: `The system uses ${match.term}`,
295
+ factType: 'entity',
296
+ confidence: 'medium',
297
+ sourceText: match.term,
298
+ domainGroups,
299
+ });
300
+ }
301
+ return facts;
302
+ }
303
+ function extractHeuristicFacts(source, domainGroups) {
304
+ const patterns = [
305
+ {
306
+ pattern: /\b(?:the system|the project|the workspace|we)\s+(?:relies on|depends on|is backed by|is powered by|integrates with)\s+([^.?!;]+)/gi,
307
+ build: (match) => {
308
+ const value = normalizeFactValue(match[1]);
309
+ if (!value)
310
+ return null;
311
+ return {
312
+ fact: `The system uses ${value}`,
313
+ factType: 'reference',
314
+ confidence: 'high',
315
+ sourceText: match[0],
316
+ domainGroups,
317
+ };
318
+ },
319
+ },
320
+ {
321
+ pattern: /\b(?:we|the team|the project)\s+(?:migrated from|moved from|replaced)\s+([a-z0-9_.-]+)\s+(?:to|with)\s+([a-z0-9_.-]+)\b/gi,
322
+ build: (match) => {
323
+ const fromValue = normalizeFactValue(match[1]);
324
+ const toValue = normalizeFactValue(match[2]);
325
+ if (!fromValue || !toValue)
326
+ return null;
327
+ return {
328
+ fact: `The system prefers ${toValue} over ${fromValue}`,
329
+ factType: 'decision',
330
+ confidence: 'high',
331
+ sourceText: match[0],
332
+ domainGroups,
333
+ };
334
+ },
335
+ },
336
+ {
337
+ pattern: /\b(?:keep|stay|remain)\s+([a-z0-9_-]+(?:\s+[a-z0-9_-]+){0,3})\b/gi,
338
+ build: (match) => {
339
+ const value = normalizeFactValue(match[1]);
340
+ if (!value || value.length < 4)
341
+ return null;
342
+ return {
343
+ fact: `The system must remain ${value}`,
344
+ factType: 'constraint',
345
+ confidence: 'medium',
346
+ sourceText: match[0],
347
+ domainGroups,
348
+ };
349
+ },
350
+ },
351
+ {
352
+ pattern: /\b([a-z0-9_.-]+)\s+(?:gives us|gives the system|delivers|provides)\s+(?:better|faster|safer|more reliable)\s+([^.?!;]+)/gi,
353
+ build: (match) => {
354
+ const value = normalizeFactValue(match[1]);
355
+ const context = normalizeFactValue(match[2]);
356
+ if (!value)
357
+ return null;
358
+ return {
359
+ fact: `The system prefers ${value}${context ? ` for ${context}` : ''}`,
360
+ factType: 'preference',
361
+ confidence: 'medium',
362
+ sourceText: match[0],
363
+ domainGroups,
364
+ };
365
+ },
366
+ },
367
+ ];
368
+ const facts = [];
369
+ for (const { pattern, build } of patterns) {
370
+ for (const match of source.matchAll(pattern)) {
371
+ const fact = build(match);
372
+ if (fact) {
373
+ facts.push(fact);
374
+ }
375
+ }
376
+ }
377
+ return facts;
378
+ }
379
+ export function createCompositeExtractor(primary, fallback) {
380
+ return async (summary, keyEntities, topicTags) => {
381
+ const [primaryFacts, fallbackFacts] = await Promise.all([
382
+ primary(summary, keyEntities, topicTags),
383
+ fallback(summary, keyEntities, topicTags),
384
+ ]);
385
+ return uniqFacts([...primaryFacts, ...fallbackFacts]);
386
+ };
387
+ }
388
+ function createBaseRegexExtractor(mergedDomainGroups) {
389
+ return async (summary, keyEntities, topicTags) => {
390
+ const combined = [summary, ...topicTags].join(' ').replace(/\n+/g, ' ');
391
+ const facts = [
392
+ ...extractMatches(combined, /\b(?:the user )?(?:prefers?|likes?|wants?|uses?|avoids?|doesn't like|does not like)\s+[^.?!;]+/gi, 'preference', 'medium'),
393
+ ...extractMatches(combined, /\b(?:the user |we )?(?:decided|chose|selected|switched from [^.?!;]+ to|after trying)\s+[^.?!;]+/gi, 'decision', 'high'),
394
+ ...extractMatches(combined, /\b(?:the user |the system |the project |we )?(?:must not|should not|cannot|can't|must|requires?|avoid|never|failed when|broke with|didn't work)\s+[^.?!;]+/gi, 'constraint', 'high'),
395
+ ...extractMatches(combined, /\b(?:the (?:system|project) )?(?:is|are|using|running|built with|set [^.?!;]+ to|configured [^.?!;]+ as)\s+[^.?!;]+/gi, 'reference', 'medium'),
396
+ ...extractMatches(combined, /\b(?:the (?:system|project|workspace) )?(?:named|called)\s+[^.?!;]+/gi, 'entity', 'medium'),
397
+ ...keyEntities.map((entity) => ({
398
+ fact: entity,
399
+ factType: 'entity',
400
+ confidence: 'medium',
401
+ sourceText: entity,
402
+ domainGroups: mergedDomainGroups,
403
+ })),
404
+ ];
405
+ return uniqFacts(facts).map((fact) => ({
406
+ ...fact,
407
+ domainGroups: fact.domainGroups ?? mergedDomainGroups,
408
+ }));
409
+ };
410
+ }
411
+ export function createEnhancedRegexExtractor(options) {
412
+ const mergedDomainGroups = mergeDomainGroups(options?.domainGroups);
413
+ const baseExtractor = createBaseRegexExtractor(mergedDomainGroups);
414
+ return async (summary, keyEntities, topicTags) => {
415
+ const baseFacts = await baseExtractor(summary, keyEntities, topicTags);
416
+ const combined = [summary, ...topicTags].join(' ').replace(/\n+/g, ' ');
417
+ const enhancedFacts = [
418
+ ...extractHeuristicFacts(combined, mergedDomainGroups),
419
+ ...extractImplicitPreferenceFacts(combined, mergedDomainGroups),
420
+ ...extractDomainFrequencyFacts(combined, mergedDomainGroups),
421
+ ];
422
+ return uniqFacts([...baseFacts, ...enhancedFacts]).map((fact) => ({
423
+ ...fact,
424
+ domainGroups: fact.domainGroups ?? mergedDomainGroups,
425
+ }));
426
+ };
427
+ }
428
+ export function createHeuristicExtractor(options) {
429
+ const mergedDomainGroups = mergeDomainGroups(options?.domainGroups);
430
+ return async (summary, keyEntities, topicTags) => {
431
+ const combined = [summary, ...topicTags, ...keyEntities].join(' ').replace(/\n+/g, ' ');
432
+ return uniqFacts([
433
+ ...extractHeuristicFacts(combined, mergedDomainGroups),
434
+ ...extractImplicitPreferenceFacts(combined, mergedDomainGroups),
435
+ ...extractDomainFrequencyFacts(combined, mergedDomainGroups),
436
+ ]).map((fact) => ({
437
+ ...fact,
438
+ domainGroups: fact.domainGroups ?? mergedDomainGroups,
439
+ }));
440
+ };
441
+ }
442
+ export function createRegexExtractor(options) {
443
+ const mergedDomainGroups = mergeDomainGroups(options?.domainGroups);
444
+ return options?.legacy
445
+ ? createBaseRegexExtractor(mergedDomainGroups)
446
+ : createEnhancedRegexExtractor({ domainGroups: mergedDomainGroups });
447
+ }
448
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { KnowledgeMemory, WorkItem, WorkingMemory } from '../contracts/types.js';
2
+ import type { MemoryContext } from './context.js';
3
+ export interface SessionBootstrap {
4
+ currentObjective: string | null;
5
+ workingMemory: WorkingMemory | null;
6
+ relevantKnowledge: KnowledgeMemory[];
7
+ recentSummaries: WorkingMemory[];
8
+ activeObjectives: WorkItem[];
9
+ unresolvedWork: string[];
10
+ }
11
+ export interface FormatOptions {
12
+ includeCitations?: boolean;
13
+ includeTrustMetadata?: boolean;
14
+ includeProvisionalKnowledge?: boolean;
15
+ includeDisputedKnowledge?: boolean;
16
+ includeEvidenceMarkers?: boolean;
17
+ headingLevel?: 'markdown' | 'plain';
18
+ }
19
+ export declare function formatContextForPrompt(context: MemoryContext, options?: FormatOptions): string;
20
+ export declare function formatBootstrapForPrompt(bootstrap: SessionBootstrap, options?: FormatOptions): string;
21
+ export declare function formatContextAsMessages(context: MemoryContext, options?: FormatOptions): Array<{
22
+ role: 'system';
23
+ content: string;
24
+ }>;
25
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/core/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;CACrC;AA0BD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CA0DR;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAuBR;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,aAAa,GACtB,KAAK,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAO5C"}
@@ -0,0 +1,97 @@
1
+ function formatHeading(label, options) {
2
+ return options?.headingLevel === 'markdown' ? `## ${label}` : `${label}:`;
3
+ }
4
+ function formatKnowledgeLine(knowledge, options) {
5
+ const suffix = [];
6
+ if (options?.includeTrustMetadata) {
7
+ suffix.push(`confidence=${knowledge.confidence}`, `score=${knowledge.confidence_score.toFixed(2)}`, `status=${knowledge.verification_status}`, `state=${knowledge.knowledge_state}`, `trust=${knowledge.trust_score.toFixed(2)}`);
8
+ }
9
+ if (options?.includeEvidenceMarkers && knowledge.evidence_count > 0) {
10
+ suffix.push(`evidence=${knowledge.evidence_count}`);
11
+ }
12
+ if (options?.includeCitations) {
13
+ suffix.push(`memory:${knowledge.id}`);
14
+ }
15
+ return suffix.length > 0 ? `- ${knowledge.fact} [${suffix.join(', ')}]` : `- ${knowledge.fact}`;
16
+ }
17
+ export function formatContextForPrompt(context, options) {
18
+ const sections = [
19
+ formatHeading('Mode', options),
20
+ context.mode,
21
+ '',
22
+ formatHeading('Current Objective', options),
23
+ context.currentObjective ?? 'None',
24
+ '',
25
+ formatHeading('Active State', options),
26
+ ...(context.activeState.length > 0 ? context.activeState.map((item) => `- ${item}`) : ['- None']),
27
+ '',
28
+ formatHeading('Active Objectives', options),
29
+ ...(context.activeObjectives.length > 0
30
+ ? context.activeObjectives.map((item) => `- ${item.title} (${item.status})`)
31
+ : ['- None']),
32
+ '',
33
+ formatHeading('Trusted Core Memory', options),
34
+ ...(context.trustedCoreMemory.length > 0
35
+ ? context.trustedCoreMemory.map((item) => formatKnowledgeLine(item, options))
36
+ : ['- None']),
37
+ '',
38
+ formatHeading('Task Relevant Knowledge', options),
39
+ ...(context.taskRelevantKnowledge.length > 0
40
+ ? context.taskRelevantKnowledge.map((item) => formatKnowledgeLine(item, options))
41
+ : ['- None']),
42
+ '',
43
+ formatHeading('Unresolved Work', options),
44
+ ...(context.unresolvedWork.length > 0
45
+ ? context.unresolvedWork.map((item) => `- ${item}`)
46
+ : ['- None']),
47
+ '',
48
+ formatHeading('Recent Summaries', options),
49
+ ...(context.recentSummaries.length > 0
50
+ ? context.recentSummaries.map((item) => `- ${item.summary}`)
51
+ : ['- None']),
52
+ ];
53
+ if (options?.includeProvisionalKnowledge) {
54
+ sections.push('', formatHeading('Provisional Knowledge', options), ...(context.provisionalKnowledge.length > 0
55
+ ? context.provisionalKnowledge.map((item) => formatKnowledgeLine(item, options))
56
+ : ['- None']));
57
+ }
58
+ if (options?.includeDisputedKnowledge) {
59
+ sections.push('', formatHeading('Disputed Knowledge', options), ...(context.disputedKnowledge.length > 0
60
+ ? context.disputedKnowledge.map((item) => formatKnowledgeLine(item, options))
61
+ : ['- None']));
62
+ }
63
+ return sections.join('\n');
64
+ }
65
+ export function formatBootstrapForPrompt(bootstrap, options) {
66
+ return [
67
+ formatHeading('Bootstrap Objective', options),
68
+ bootstrap.currentObjective ?? 'None',
69
+ '',
70
+ formatHeading('Bootstrap Working Memory', options),
71
+ bootstrap.workingMemory?.summary ?? 'None',
72
+ '',
73
+ formatHeading('Bootstrap Objectives', options),
74
+ ...(bootstrap.activeObjectives.length > 0
75
+ ? bootstrap.activeObjectives.map((item) => `- ${item.title} (${item.status})`)
76
+ : ['- None']),
77
+ '',
78
+ formatHeading('Bootstrap Knowledge', options),
79
+ ...(bootstrap.relevantKnowledge.length > 0
80
+ ? bootstrap.relevantKnowledge.map((item) => formatKnowledgeLine(item, options))
81
+ : ['- None']),
82
+ '',
83
+ formatHeading('Bootstrap Unresolved Work', options),
84
+ ...(bootstrap.unresolvedWork.length > 0
85
+ ? bootstrap.unresolvedWork.map((item) => `- ${item}`)
86
+ : ['- None']),
87
+ ].join('\n');
88
+ }
89
+ export function formatContextAsMessages(context, options) {
90
+ return [
91
+ {
92
+ role: 'system',
93
+ content: formatContextForPrompt(context, options),
94
+ },
95
+ ];
96
+ }
97
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/core/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { MaintenancePolicy } from '../contracts/policy.js';
2
+ import type { KnowledgeMemory } from '../contracts/types.js';
3
+ export interface LifecycleDecision {
4
+ retire: boolean;
5
+ demote: boolean;
6
+ nextReverificationAt: number | null;
7
+ }
8
+ export declare function resolveMaintenancePolicy(policy?: MaintenancePolicy): Required<MaintenancePolicy>;
9
+ export declare function isTrustedCoreKnowledge(knowledge: KnowledgeMemory): boolean;
10
+ export declare function getKnowledgeRetentionDays(knowledge: KnowledgeMemory, policy: Required<MaintenancePolicy>): number;
11
+ export declare function getLifecycleReferenceTime(knowledge: KnowledgeMemory): number;
12
+ export declare function computeNextReverificationAt(knowledge: KnowledgeMemory, policy: Required<MaintenancePolicy>): number | null;
13
+ export declare function evaluateKnowledgeLifecycle(knowledge: KnowledgeMemory, policy: Required<MaintenancePolicy>, now: number): LifecycleDecision;
14
+ export declare function getDueReverificationKnowledge(knowledge: KnowledgeMemory[], policy: Required<MaintenancePolicy>, now: number): KnowledgeMemory[];
15
+ //# sourceMappingURL=knowledge-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/knowledge-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAShG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAK1E;AAeD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,MAAM,CAiBR;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAO5E;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,MAAM,GAAG,IAAI,CAYf;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,GAAG,EAAE,MAAM,GACV,iBAAiB,CAuCnB;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,eAAe,EAAE,EAC5B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,GAAG,EAAE,MAAM,GACV,eAAe,EAAE,CAYnB"}