audrey 0.17.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +129 -374
  2. package/dist/mcp-server/config.d.ts +20 -0
  3. package/dist/mcp-server/config.d.ts.map +1 -0
  4. package/dist/mcp-server/config.js +125 -0
  5. package/dist/mcp-server/config.js.map +1 -0
  6. package/dist/mcp-server/index.d.ts +100 -0
  7. package/dist/mcp-server/index.d.ts.map +1 -0
  8. package/dist/mcp-server/index.js +1113 -0
  9. package/dist/mcp-server/index.js.map +1 -0
  10. package/dist/src/adaptive.d.ts +7 -0
  11. package/dist/src/adaptive.d.ts.map +1 -0
  12. package/dist/src/adaptive.js +49 -0
  13. package/dist/src/adaptive.js.map +1 -0
  14. package/dist/src/affect.d.ts +19 -0
  15. package/dist/src/affect.d.ts.map +1 -0
  16. package/dist/src/affect.js +72 -0
  17. package/dist/src/affect.js.map +1 -0
  18. package/dist/src/audrey.d.ts +140 -0
  19. package/dist/src/audrey.d.ts.map +1 -0
  20. package/dist/src/audrey.js +564 -0
  21. package/dist/src/audrey.js.map +1 -0
  22. package/dist/src/capsule.d.ts +68 -0
  23. package/dist/src/capsule.d.ts.map +1 -0
  24. package/dist/src/capsule.js +311 -0
  25. package/dist/src/capsule.js.map +1 -0
  26. package/dist/src/causal.d.ts +28 -0
  27. package/dist/src/causal.d.ts.map +1 -0
  28. package/dist/src/causal.js +65 -0
  29. package/dist/src/causal.js.map +1 -0
  30. package/dist/src/confidence.d.ts +12 -0
  31. package/dist/src/confidence.d.ts.map +1 -0
  32. package/dist/src/confidence.js +63 -0
  33. package/dist/src/confidence.js.map +1 -0
  34. package/dist/src/consolidate.d.ts +8 -0
  35. package/dist/src/consolidate.d.ts.map +1 -0
  36. package/dist/src/consolidate.js +218 -0
  37. package/dist/src/consolidate.js.map +1 -0
  38. package/dist/src/context.d.ts +3 -0
  39. package/dist/src/context.d.ts.map +1 -0
  40. package/dist/src/context.js +19 -0
  41. package/dist/src/context.js.map +1 -0
  42. package/dist/src/db.d.ts +12 -0
  43. package/dist/src/db.d.ts.map +1 -0
  44. package/dist/src/db.js +380 -0
  45. package/dist/src/db.js.map +1 -0
  46. package/dist/src/decay.d.ts +7 -0
  47. package/dist/src/decay.d.ts.map +1 -0
  48. package/dist/src/decay.js +68 -0
  49. package/dist/src/decay.js.map +1 -0
  50. package/dist/src/embedding.d.ts +57 -0
  51. package/dist/src/embedding.d.ts.map +1 -0
  52. package/dist/src/embedding.js +254 -0
  53. package/dist/src/embedding.js.map +1 -0
  54. package/dist/src/encode.d.ts +15 -0
  55. package/dist/src/encode.d.ts.map +1 -0
  56. package/dist/src/encode.js +36 -0
  57. package/dist/src/encode.js.map +1 -0
  58. package/dist/src/events.d.ts +69 -0
  59. package/dist/src/events.d.ts.map +1 -0
  60. package/dist/src/events.js +149 -0
  61. package/dist/src/events.js.map +1 -0
  62. package/dist/src/export.d.ts +3 -0
  63. package/dist/src/export.d.ts.map +1 -0
  64. package/dist/src/export.js +46 -0
  65. package/dist/src/export.js.map +1 -0
  66. package/dist/src/forget.d.ts +11 -0
  67. package/dist/src/forget.d.ts.map +1 -0
  68. package/dist/src/forget.js +105 -0
  69. package/dist/src/forget.js.map +1 -0
  70. package/dist/src/fts.d.ts +34 -0
  71. package/dist/src/fts.d.ts.map +1 -0
  72. package/dist/src/fts.js +117 -0
  73. package/dist/src/fts.js.map +1 -0
  74. package/dist/src/hybrid-recall.d.ts +37 -0
  75. package/dist/src/hybrid-recall.d.ts.map +1 -0
  76. package/dist/src/hybrid-recall.js +213 -0
  77. package/dist/src/hybrid-recall.js.map +1 -0
  78. package/dist/src/import.d.ts +4 -0
  79. package/dist/src/import.d.ts.map +1 -0
  80. package/dist/src/import.js +127 -0
  81. package/dist/src/import.js.map +1 -0
  82. package/dist/src/index.d.ts +22 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/{src → dist/src}/index.js +5 -13
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/interference.d.ts +13 -0
  87. package/dist/src/interference.d.ts.map +1 -0
  88. package/dist/src/interference.js +45 -0
  89. package/dist/src/interference.js.map +1 -0
  90. package/dist/src/introspect.d.ts +4 -0
  91. package/dist/src/introspect.d.ts.map +1 -0
  92. package/dist/src/introspect.js +40 -0
  93. package/dist/src/introspect.js.map +1 -0
  94. package/dist/src/llm.d.ts +38 -0
  95. package/dist/src/llm.d.ts.map +1 -0
  96. package/dist/src/llm.js +167 -0
  97. package/dist/src/llm.js.map +1 -0
  98. package/dist/src/migrate.d.ts +6 -0
  99. package/dist/src/migrate.d.ts.map +1 -0
  100. package/dist/src/migrate.js +51 -0
  101. package/dist/src/migrate.js.map +1 -0
  102. package/dist/src/promote.d.ts +40 -0
  103. package/dist/src/promote.d.ts.map +1 -0
  104. package/dist/src/promote.js +200 -0
  105. package/dist/src/promote.js.map +1 -0
  106. package/dist/src/prompts.d.ts +16 -0
  107. package/dist/src/prompts.d.ts.map +1 -0
  108. package/{src → dist/src}/prompts.js +172 -203
  109. package/dist/src/prompts.js.map +1 -0
  110. package/dist/src/recall.d.ts +9 -0
  111. package/dist/src/recall.d.ts.map +1 -0
  112. package/dist/src/recall.js +432 -0
  113. package/dist/src/recall.js.map +1 -0
  114. package/dist/src/redact.d.ts +27 -0
  115. package/dist/src/redact.d.ts.map +1 -0
  116. package/dist/src/redact.js +228 -0
  117. package/dist/src/redact.js.map +1 -0
  118. package/dist/src/rollback.d.ts +8 -0
  119. package/dist/src/rollback.d.ts.map +1 -0
  120. package/dist/src/rollback.js +33 -0
  121. package/dist/src/rollback.js.map +1 -0
  122. package/dist/src/routes.d.ts +7 -0
  123. package/dist/src/routes.d.ts.map +1 -0
  124. package/dist/src/routes.js +226 -0
  125. package/dist/src/routes.js.map +1 -0
  126. package/dist/src/rules-compiler.d.ts +20 -0
  127. package/dist/src/rules-compiler.d.ts.map +1 -0
  128. package/dist/src/rules-compiler.js +143 -0
  129. package/dist/src/rules-compiler.js.map +1 -0
  130. package/dist/src/server.d.ts +12 -0
  131. package/dist/src/server.d.ts.map +1 -0
  132. package/dist/src/server.js +22 -0
  133. package/dist/src/server.js.map +1 -0
  134. package/dist/src/tool-trace.d.ts +37 -0
  135. package/dist/src/tool-trace.d.ts.map +1 -0
  136. package/dist/src/tool-trace.js +142 -0
  137. package/dist/src/tool-trace.js.map +1 -0
  138. package/dist/src/types.d.ts +446 -0
  139. package/dist/src/types.d.ts.map +1 -0
  140. package/dist/src/types.js +6 -0
  141. package/dist/src/types.js.map +1 -0
  142. package/dist/src/ulid.d.ts +3 -0
  143. package/dist/src/ulid.d.ts.map +1 -0
  144. package/dist/src/ulid.js +11 -0
  145. package/dist/src/ulid.js.map +1 -0
  146. package/dist/src/utils.d.ts +10 -0
  147. package/dist/src/utils.d.ts.map +1 -0
  148. package/dist/src/utils.js +41 -0
  149. package/dist/src/utils.js.map +1 -0
  150. package/dist/src/validate.d.ts +22 -0
  151. package/dist/src/validate.d.ts.map +1 -0
  152. package/dist/src/validate.js +109 -0
  153. package/dist/src/validate.js.map +1 -0
  154. package/docs/production-readiness.md +28 -0
  155. package/examples/fintech-ops-demo.js +1 -1
  156. package/examples/healthcare-ops-demo.js +1 -1
  157. package/examples/stripe-demo.js +1 -1
  158. package/package.json +34 -13
  159. package/benchmarks/baselines.js +0 -169
  160. package/benchmarks/cases.js +0 -421
  161. package/benchmarks/reference-results.js +0 -70
  162. package/benchmarks/report.js +0 -255
  163. package/benchmarks/run.js +0 -514
  164. package/mcp-server/config.js +0 -133
  165. package/mcp-server/index.js +0 -1265
  166. package/mcp-server/serve.js +0 -482
  167. package/src/adaptive.js +0 -53
  168. package/src/affect.js +0 -64
  169. package/src/audrey.js +0 -642
  170. package/src/causal.js +0 -95
  171. package/src/confidence.js +0 -120
  172. package/src/consolidate.js +0 -281
  173. package/src/context.js +0 -15
  174. package/src/db.js +0 -391
  175. package/src/decay.js +0 -84
  176. package/src/embedding.js +0 -260
  177. package/src/encode.js +0 -69
  178. package/src/export.js +0 -67
  179. package/src/forget.js +0 -111
  180. package/src/fts.js +0 -134
  181. package/src/import.js +0 -273
  182. package/src/interference.js +0 -51
  183. package/src/introspect.js +0 -48
  184. package/src/llm.js +0 -249
  185. package/src/migrate.js +0 -58
  186. package/src/recall.js +0 -573
  187. package/src/rollback.js +0 -42
  188. package/src/ulid.js +0 -18
  189. package/src/utils.js +0 -63
  190. package/src/validate.js +0 -172
  191. package/types/index.d.ts +0 -434
@@ -0,0 +1,167 @@
1
+ import { describeHttpError, requireApiKey } from './utils.js';
2
+ function extractJSON(text) {
3
+ const fenced = text.match(/```(?:json)?\s*\n?([\s\S]*?)```/);
4
+ return fenced ? fenced[1].trim() : text.trim();
5
+ }
6
+ const PROMPT_TYPE_KEYS = [
7
+ 'principleExtraction',
8
+ 'contradictionDetection',
9
+ 'causalArticulation',
10
+ 'contextResolution',
11
+ ];
12
+ export class MockLLMProvider {
13
+ responses;
14
+ modelName;
15
+ modelVersion;
16
+ constructor({ responses = {} } = {}) {
17
+ this.responses = (responses ?? {});
18
+ this.modelName = 'mock-llm';
19
+ this.modelVersion = '1.0.0';
20
+ }
21
+ _matchPromptType(messages) {
22
+ const systemMsg = messages.find(m => m.role === 'system')?.content || '';
23
+ for (const key of PROMPT_TYPE_KEYS) {
24
+ if (systemMsg.includes(key))
25
+ return key;
26
+ }
27
+ return null;
28
+ }
29
+ async complete(messages) {
30
+ const promptType = this._matchPromptType(messages);
31
+ const cannedResponse = promptType ? this.responses[promptType] : undefined;
32
+ return { content: cannedResponse !== undefined ? JSON.stringify(cannedResponse) : '{}' };
33
+ }
34
+ async json(messages) {
35
+ const promptType = this._matchPromptType(messages);
36
+ const cannedResponse = promptType ? this.responses[promptType] : undefined;
37
+ return cannedResponse !== undefined ? cannedResponse : {};
38
+ }
39
+ }
40
+ export class AnthropicLLMProvider {
41
+ apiKey;
42
+ model;
43
+ maxTokens;
44
+ timeout;
45
+ modelName;
46
+ modelVersion;
47
+ constructor({ apiKey, model = 'claude-sonnet-4-6', maxTokens = 1024, timeout = 30000 } = {}) {
48
+ this.apiKey = apiKey || process.env.ANTHROPIC_API_KEY;
49
+ this.model = model ?? 'claude-sonnet-4-6';
50
+ this.maxTokens = maxTokens ?? 1024;
51
+ this.timeout = timeout ?? 30000;
52
+ this.modelName = this.model;
53
+ this.modelVersion = 'latest';
54
+ }
55
+ async complete(messages, options = {}) {
56
+ requireApiKey(this.apiKey, 'Anthropic LLM', 'ANTHROPIC_API_KEY');
57
+ const systemMsg = messages.find(m => m.role === 'system')?.content;
58
+ const nonSystemMsgs = messages.filter(m => m.role !== 'system');
59
+ const body = {
60
+ model: this.model,
61
+ max_tokens: options.maxTokens || this.maxTokens,
62
+ messages: nonSystemMsgs,
63
+ };
64
+ if (systemMsg)
65
+ body.system = systemMsg;
66
+ const controller = new AbortController();
67
+ const timer = setTimeout(() => controller.abort(), this.timeout);
68
+ try {
69
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
70
+ method: 'POST',
71
+ headers: {
72
+ 'x-api-key': this.apiKey,
73
+ 'anthropic-version': '2023-06-01',
74
+ 'content-type': 'application/json',
75
+ },
76
+ body: JSON.stringify(body),
77
+ signal: controller.signal,
78
+ });
79
+ if (!response.ok) {
80
+ throw new Error(`Anthropic API error: ${await describeHttpError(response)}`);
81
+ }
82
+ const data = await response.json();
83
+ const text = data.content?.[0]?.text || '';
84
+ return { content: text };
85
+ }
86
+ finally {
87
+ clearTimeout(timer);
88
+ }
89
+ }
90
+ async json(messages, options = {}) {
91
+ const result = await this.complete(messages, options);
92
+ try {
93
+ return JSON.parse(extractJSON(result.content));
94
+ }
95
+ catch {
96
+ throw new Error(`Failed to parse LLM response as JSON: ${result.content.slice(0, 200)}`);
97
+ }
98
+ }
99
+ }
100
+ export class OpenAILLMProvider {
101
+ apiKey;
102
+ model;
103
+ maxTokens;
104
+ timeout;
105
+ modelName;
106
+ modelVersion;
107
+ constructor({ apiKey, model = 'gpt-4o', maxTokens = 1024, timeout = 30000 } = {}) {
108
+ this.apiKey = apiKey || process.env.OPENAI_API_KEY;
109
+ this.model = model ?? 'gpt-4o';
110
+ this.maxTokens = maxTokens ?? 1024;
111
+ this.timeout = timeout ?? 30000;
112
+ this.modelName = this.model;
113
+ this.modelVersion = 'latest';
114
+ }
115
+ async complete(messages, options = {}) {
116
+ requireApiKey(this.apiKey, 'OpenAI LLM', 'OPENAI_API_KEY');
117
+ const body = {
118
+ model: this.model,
119
+ max_tokens: options.maxTokens || this.maxTokens,
120
+ messages,
121
+ };
122
+ const controller = new AbortController();
123
+ const timer = setTimeout(() => controller.abort(), this.timeout);
124
+ try {
125
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
126
+ method: 'POST',
127
+ headers: {
128
+ 'Authorization': `Bearer ${this.apiKey}`,
129
+ 'Content-Type': 'application/json',
130
+ },
131
+ body: JSON.stringify(body),
132
+ signal: controller.signal,
133
+ });
134
+ if (!response.ok) {
135
+ throw new Error(`OpenAI API error: ${await describeHttpError(response)}`);
136
+ }
137
+ const data = await response.json();
138
+ const text = data.choices?.[0]?.message?.content || '';
139
+ return { content: text };
140
+ }
141
+ finally {
142
+ clearTimeout(timer);
143
+ }
144
+ }
145
+ async json(messages, options = {}) {
146
+ const result = await this.complete(messages, options);
147
+ try {
148
+ return JSON.parse(extractJSON(result.content));
149
+ }
150
+ catch {
151
+ throw new Error(`Failed to parse LLM response as JSON: ${result.content.slice(0, 200)}`);
152
+ }
153
+ }
154
+ }
155
+ export function createLLMProvider(config) {
156
+ switch (config.provider) {
157
+ case 'mock':
158
+ return new MockLLMProvider(config);
159
+ case 'anthropic':
160
+ return new AnthropicLLMProvider(config);
161
+ case 'openai':
162
+ return new OpenAILLMProvider(config);
163
+ default:
164
+ throw new Error(`Unknown LLM provider: ${config.provider}. Valid: mock, anthropic, openai`);
165
+ }
166
+ }
167
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import Database from 'better-sqlite3';
2
+ import type { EmbeddingProvider, ReembedCounts } from './types.js';
3
+ export declare function reembedAll(db: Database.Database, embeddingProvider: EmbeddingProvider, { dropAndRecreate }?: {
4
+ dropAndRecreate?: boolean;
5
+ }): Promise<ReembedCounts>;
6
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsBnE,wBAAsB,UAAU,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,iBAAiB,EAAE,iBAAiB,EACpC,EAAE,eAAuB,EAAE,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,OAAO,CAAC,aAAa,CAAC,CAuDxB"}
@@ -0,0 +1,51 @@
1
+ import { dropVec0Tables, createVec0Tables } from './db.js';
2
+ export async function reembedAll(db, embeddingProvider, { dropAndRecreate = false } = {}) {
3
+ if (dropAndRecreate) {
4
+ dropVec0Tables(db);
5
+ createVec0Tables(db, embeddingProvider.dimensions);
6
+ }
7
+ const episodes = db.prepare('SELECT id, content, source, consolidated FROM episodes').all();
8
+ const semantics = db.prepare('SELECT id, content, state FROM semantics').all();
9
+ const procedures = db.prepare('SELECT id, content, state FROM procedures').all();
10
+ const episodeVectors = episodes.length > 0
11
+ ? await embeddingProvider.embedBatch(episodes.map(ep => ep.content))
12
+ : [];
13
+ const semanticVectors = semantics.length > 0
14
+ ? await embeddingProvider.embedBatch(semantics.map(s => s.content))
15
+ : [];
16
+ const procedureVectors = procedures.length > 0
17
+ ? await embeddingProvider.embedBatch(procedures.map(p => p.content))
18
+ : [];
19
+ const updateEpLegacy = db.prepare('UPDATE episodes SET embedding = ? WHERE id = ?');
20
+ const deleteVecEp = db.prepare('DELETE FROM vec_episodes WHERE id = ?');
21
+ const insertVecEp = db.prepare('INSERT INTO vec_episodes(id, embedding, source, consolidated) VALUES (?, ?, ?, ?)');
22
+ const updateSemLegacy = db.prepare('UPDATE semantics SET embedding = ? WHERE id = ?');
23
+ const deleteVecSem = db.prepare('DELETE FROM vec_semantics WHERE id = ?');
24
+ const insertVecSem = db.prepare('INSERT INTO vec_semantics(id, embedding, state) VALUES (?, ?, ?)');
25
+ const updateProcLegacy = db.prepare('UPDATE procedures SET embedding = ? WHERE id = ?');
26
+ const deleteVecProc = db.prepare('DELETE FROM vec_procedures WHERE id = ?');
27
+ const insertVecProc = db.prepare('INSERT INTO vec_procedures(id, embedding, state) VALUES (?, ?, ?)');
28
+ const writeTx = db.transaction(() => {
29
+ for (let i = 0; i < episodes.length; i++) {
30
+ const buf = embeddingProvider.vectorToBuffer(episodeVectors[i]);
31
+ updateEpLegacy.run(buf, episodes[i].id);
32
+ deleteVecEp.run(episodes[i].id);
33
+ insertVecEp.run(episodes[i].id, buf, episodes[i].source, BigInt(episodes[i].consolidated ?? 0));
34
+ }
35
+ for (let i = 0; i < semantics.length; i++) {
36
+ const buf = embeddingProvider.vectorToBuffer(semanticVectors[i]);
37
+ updateSemLegacy.run(buf, semantics[i].id);
38
+ deleteVecSem.run(semantics[i].id);
39
+ insertVecSem.run(semantics[i].id, buf, semantics[i].state);
40
+ }
41
+ for (let i = 0; i < procedures.length; i++) {
42
+ const buf = embeddingProvider.vectorToBuffer(procedureVectors[i]);
43
+ updateProcLegacy.run(buf, procedures[i].id);
44
+ deleteVecProc.run(procedures[i].id);
45
+ insertVecProc.run(procedures[i].id, buf, procedures[i].state);
46
+ }
47
+ });
48
+ writeTx();
49
+ return { episodes: episodes.length, semantics: semantics.length, procedures: procedures.length };
50
+ }
51
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Memory-to-Behavior promotion — candidate scoring.
3
+ *
4
+ * A "candidate" is a memory (usually procedural, sometimes high-confidence
5
+ * semantic) that has earned the right to become an enforced project rule:
6
+ * - repeated occurrence (multiple supporting episodes)
7
+ * - low contradiction (active state, not disputed)
8
+ * - durable (not recently superseded)
9
+ * - not already promoted to this target
10
+ *
11
+ * Tool-failure context also boosts candidates: if the Bash tool has failed
12
+ * 3 times this week with errors mentioning "sqlite extension", a procedural
13
+ * memory about "initialize sqlite extension before tests" gets a
14
+ * failure_prevented score, which bubbles it up in the ranked list.
15
+ */
16
+ import type Database from 'better-sqlite3';
17
+ export type PromotionTarget = 'claude-rules' | 'agents-md' | 'playbook' | 'hook' | 'checklist';
18
+ export interface PromotionCandidate {
19
+ candidate_id: string;
20
+ memory_id: string;
21
+ memory_type: 'semantic' | 'procedural';
22
+ content: string;
23
+ scope?: string;
24
+ confidence: number;
25
+ evidence_count: number;
26
+ usage_count: number;
27
+ failure_prevented: number;
28
+ tags: string[];
29
+ score: number;
30
+ reason: string;
31
+ }
32
+ export interface FindCandidatesOptions {
33
+ minConfidence?: number;
34
+ minEvidence?: number;
35
+ limit?: number;
36
+ target?: PromotionTarget;
37
+ since?: string;
38
+ }
39
+ export declare function findPromotionCandidates(db: Database.Database, options?: FindCandidatesOptions): PromotionCandidate[];
40
+ //# sourceMappingURL=promote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/F,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2GD,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,qBAA0B,GAClC,kBAAkB,EAAE,CA+HtB"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Memory-to-Behavior promotion — candidate scoring.
3
+ *
4
+ * A "candidate" is a memory (usually procedural, sometimes high-confidence
5
+ * semantic) that has earned the right to become an enforced project rule:
6
+ * - repeated occurrence (multiple supporting episodes)
7
+ * - low contradiction (active state, not disputed)
8
+ * - durable (not recently superseded)
9
+ * - not already promoted to this target
10
+ *
11
+ * Tool-failure context also boosts candidates: if the Bash tool has failed
12
+ * 3 times this week with errors mentioning "sqlite extension", a procedural
13
+ * memory about "initialize sqlite extension before tests" gets a
14
+ * failure_prevented score, which bubbles it up in the ranked list.
15
+ */
16
+ import { recentFailures } from './events.js';
17
+ function loadPromotedMemoryIds(db, target) {
18
+ const rows = db.prepare(`SELECT metadata FROM memory_events
19
+ WHERE event_type = 'Promotion' AND tool_name = ?`).all(target);
20
+ const ids = new Set();
21
+ for (const row of rows) {
22
+ if (!row.metadata)
23
+ continue;
24
+ try {
25
+ const parsed = JSON.parse(row.metadata);
26
+ const memoryIds = parsed.memory_ids;
27
+ if (Array.isArray(memoryIds)) {
28
+ for (const id of memoryIds)
29
+ ids.add(String(id));
30
+ }
31
+ }
32
+ catch {
33
+ // skip malformed metadata
34
+ }
35
+ }
36
+ return ids;
37
+ }
38
+ function matchesFailure(memoryContent, failure) {
39
+ if (!failure.last_error_summary)
40
+ return 0;
41
+ const lower = memoryContent.toLowerCase();
42
+ const errLower = failure.last_error_summary.toLowerCase();
43
+ const toolLower = (failure.tool_name || '').toLowerCase();
44
+ const errWords = errLower.split(/[^a-z0-9]+/).filter(w => w.length >= 4);
45
+ const memWords = new Set(lower.split(/[^a-z0-9]+/).filter(Boolean));
46
+ let overlap = 0;
47
+ for (const w of errWords) {
48
+ if (memWords.has(w))
49
+ overlap++;
50
+ }
51
+ const toolBonus = toolLower && lower.includes(toolLower) ? 1 : 0;
52
+ return overlap + toolBonus;
53
+ }
54
+ function scoreCandidate(params) {
55
+ const confidenceScore = params.confidence * 40;
56
+ const evidenceScore = Math.min(params.evidence, 10) * 3;
57
+ const retrievalScore = Math.min(params.retrieval, 20) * 1.5;
58
+ const usageScore = Math.min(params.usage, 10) * 2;
59
+ const failureScore = Math.min(params.failurePrevented, 5) * 8;
60
+ // Slight penalty for very young memories so one flaky session can't promote itself.
61
+ const agePenalty = params.ageHours < 6 ? 10 : 0;
62
+ return confidenceScore + evidenceScore + retrievalScore + usageScore + failureScore - agePenalty;
63
+ }
64
+ function hoursSince(iso) {
65
+ const t = Date.parse(iso);
66
+ if (!Number.isFinite(t))
67
+ return 0;
68
+ return (Date.now() - t) / (60 * 60 * 1000);
69
+ }
70
+ function parseTags(raw) {
71
+ if (!raw)
72
+ return [];
73
+ try {
74
+ const parsed = JSON.parse(raw);
75
+ if (Array.isArray(parsed))
76
+ return parsed.map(String);
77
+ }
78
+ catch {
79
+ // fall through
80
+ }
81
+ return String(raw).split(',').map(t => t.trim()).filter(Boolean);
82
+ }
83
+ export function findPromotionCandidates(db, options = {}) {
84
+ const minConfidence = options.minConfidence ?? 0.7;
85
+ const minEvidence = options.minEvidence ?? 2;
86
+ const limit = options.limit ?? 20;
87
+ const target = options.target ?? 'claude-rules';
88
+ const alreadyPromoted = loadPromotedMemoryIds(db, target);
89
+ const failures = recentFailures(db, {
90
+ since: options.since ?? new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
91
+ limit: 20,
92
+ });
93
+ const candidates = [];
94
+ // Procedural memories: primary promotion stream
95
+ const procedurals = db.prepare(`SELECT id, content, state, success_count, failure_count, retrieval_count,
96
+ usage_count, salience, created_at, last_reinforced_at
97
+ FROM procedures
98
+ WHERE state = 'active'`).all();
99
+ for (const row of procedurals) {
100
+ if (alreadyPromoted.has(row.id))
101
+ continue;
102
+ const successes = row.success_count ?? 0;
103
+ const failures_count = row.failure_count ?? 0;
104
+ const evidenceTotal = successes + failures_count;
105
+ if (evidenceTotal < minEvidence)
106
+ continue;
107
+ const confidence = evidenceTotal === 0 ? 0 : successes / evidenceTotal;
108
+ if (confidence < minConfidence)
109
+ continue;
110
+ const tagsRow = db.prepare(`SELECT trigger_conditions FROM procedures WHERE id = ?`).get(row.id);
111
+ const tags = parseTags(tagsRow?.trigger_conditions);
112
+ let failurePrevented = 0;
113
+ for (const f of failures) {
114
+ if (matchesFailure(row.content, f) >= 2)
115
+ failurePrevented += 1;
116
+ }
117
+ const score = scoreCandidate({
118
+ confidence,
119
+ evidence: evidenceTotal,
120
+ retrieval: row.retrieval_count ?? 0,
121
+ usage: row.usage_count ?? 0,
122
+ failurePrevented,
123
+ ageHours: hoursSince(row.last_reinforced_at ?? row.created_at),
124
+ });
125
+ const reasonParts = [
126
+ `procedural memory with ${successes}/${evidenceTotal} successful applications`,
127
+ ];
128
+ if (failurePrevented > 0)
129
+ reasonParts.push(`would have prevented ${failurePrevented} recent tool failure${failurePrevented === 1 ? '' : 's'}`);
130
+ if ((row.usage_count ?? 0) > 0)
131
+ reasonParts.push(`used ${row.usage_count} time${row.usage_count === 1 ? '' : 's'}`);
132
+ candidates.push({
133
+ candidate_id: `proc:${row.id}`,
134
+ memory_id: row.id,
135
+ memory_type: 'procedural',
136
+ content: row.content,
137
+ confidence,
138
+ evidence_count: evidenceTotal,
139
+ usage_count: row.usage_count ?? 0,
140
+ failure_prevented: failurePrevented,
141
+ tags,
142
+ score,
143
+ reason: reasonParts.join('; '),
144
+ });
145
+ }
146
+ // Semantic memories: only high-confidence, high-evidence, heavily reinforced ones.
147
+ // The bar is higher because semantic memories are "facts," not "procedures" — we
148
+ // do not want to promote every shared fact as a rule.
149
+ const semantics = db.prepare(`SELECT id, content, state, evidence_count, supporting_count, contradicting_count,
150
+ retrieval_count, usage_count, salience, created_at, last_reinforced_at
151
+ FROM semantics
152
+ WHERE state = 'active'`).all();
153
+ for (const row of semantics) {
154
+ if (alreadyPromoted.has(row.id))
155
+ continue;
156
+ const evidence = row.evidence_count ?? 0;
157
+ if (evidence < Math.max(minEvidence, 3))
158
+ continue;
159
+ if ((row.contradicting_count ?? 0) > 0)
160
+ continue;
161
+ const supporting = row.supporting_count ?? evidence;
162
+ const confidence = supporting === 0 ? 0 : Math.min(1, supporting / Math.max(evidence, 1));
163
+ if (confidence < Math.max(minConfidence, 0.8))
164
+ continue;
165
+ let failurePrevented = 0;
166
+ for (const f of failures) {
167
+ if (matchesFailure(row.content, f) >= 2)
168
+ failurePrevented += 1;
169
+ }
170
+ const score = scoreCandidate({
171
+ confidence,
172
+ evidence,
173
+ retrieval: row.retrieval_count ?? 0,
174
+ usage: row.usage_count ?? 0,
175
+ failurePrevented,
176
+ ageHours: hoursSince(row.last_reinforced_at ?? row.created_at),
177
+ });
178
+ const reasonParts = [
179
+ `semantic principle with ${supporting}/${evidence} supporting episodes`,
180
+ ];
181
+ if (failurePrevented > 0)
182
+ reasonParts.push(`matches ${failurePrevented} recent tool failure${failurePrevented === 1 ? '' : 's'}`);
183
+ candidates.push({
184
+ candidate_id: `sem:${row.id}`,
185
+ memory_id: row.id,
186
+ memory_type: 'semantic',
187
+ content: row.content,
188
+ confidence,
189
+ evidence_count: evidence,
190
+ usage_count: row.usage_count ?? 0,
191
+ failure_prevented: failurePrevented,
192
+ tags: [],
193
+ score,
194
+ reason: reasonParts.join('; '),
195
+ });
196
+ }
197
+ candidates.sort((a, b) => b.score - a.score);
198
+ return candidates.slice(0, limit);
199
+ }
200
+ //# sourceMappingURL=promote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/promote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ChatMessage, EpisodeRow } from './types.js';
2
+ export declare function buildPrincipleExtractionPrompt(episodes: EpisodeRow[]): ChatMessage[];
3
+ export declare function buildContradictionDetectionPrompt(newContent: string, existingContent: string): ChatMessage[];
4
+ export declare function buildCausalArticulationPrompt(cause: {
5
+ content: string;
6
+ source: string;
7
+ }, effect: {
8
+ content: string;
9
+ source: string;
10
+ }): ChatMessage[];
11
+ export declare function buildContextResolutionPrompt(claimA: string, claimB: string, context?: string): ChatMessage[];
12
+ export declare function buildReflectionPrompt(turns: {
13
+ role: string;
14
+ content: string;
15
+ }[]): ChatMessage[];
16
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG1D,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CA6CpF;AAED,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,WAAW,EAAE,CA6B5G;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C,WAAW,EAAE,CA+Bf;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CA+B5G;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,WAAW,EAAE,CAoD/F"}