@jcmrs/opencode-vmem 1.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 (140) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +172 -0
  4. package/dist/capture/classification.d.ts +37 -0
  5. package/dist/capture/classification.d.ts.map +1 -0
  6. package/dist/capture/classification.js +181 -0
  7. package/dist/capture/classification.js.map +1 -0
  8. package/dist/capture/filtering.d.ts +63 -0
  9. package/dist/capture/filtering.d.ts.map +1 -0
  10. package/dist/capture/filtering.js +195 -0
  11. package/dist/capture/filtering.js.map +1 -0
  12. package/dist/capture/observation.d.ts +28 -0
  13. package/dist/capture/observation.d.ts.map +1 -0
  14. package/dist/capture/observation.js +188 -0
  15. package/dist/capture/observation.js.map +1 -0
  16. package/dist/commands/index.d.ts +38 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +375 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/config.d.ts +5 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +41 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context/builder.d.ts +19 -0
  25. package/dist/context/builder.d.ts.map +1 -0
  26. package/dist/context/builder.js +209 -0
  27. package/dist/context/builder.js.map +1 -0
  28. package/dist/context/format.d.ts +32 -0
  29. package/dist/context/format.d.ts.map +1 -0
  30. package/dist/context/format.js +211 -0
  31. package/dist/context/format.js.map +1 -0
  32. package/dist/embedding/index.d.ts +3 -0
  33. package/dist/embedding/index.d.ts.map +1 -0
  34. package/dist/embedding/index.js +3 -0
  35. package/dist/embedding/index.js.map +1 -0
  36. package/dist/embedding/provider.d.ts +15 -0
  37. package/dist/embedding/provider.d.ts.map +1 -0
  38. package/dist/embedding/provider.js +19 -0
  39. package/dist/embedding/provider.js.map +1 -0
  40. package/dist/embedding/transformers.d.ts +14 -0
  41. package/dist/embedding/transformers.d.ts.map +1 -0
  42. package/dist/embedding/transformers.js +55 -0
  43. package/dist/embedding/transformers.js.map +1 -0
  44. package/dist/extract/confidence.d.ts +48 -0
  45. package/dist/extract/confidence.d.ts.map +1 -0
  46. package/dist/extract/confidence.js +230 -0
  47. package/dist/extract/confidence.js.map +1 -0
  48. package/dist/extract/llm-extractor.d.ts +35 -0
  49. package/dist/extract/llm-extractor.d.ts.map +1 -0
  50. package/dist/extract/llm-extractor.js +204 -0
  51. package/dist/extract/llm-extractor.js.map +1 -0
  52. package/dist/extract/pipeline.d.ts +44 -0
  53. package/dist/extract/pipeline.d.ts.map +1 -0
  54. package/dist/extract/pipeline.js +171 -0
  55. package/dist/extract/pipeline.js.map +1 -0
  56. package/dist/extract/rules-engine.d.ts +14 -0
  57. package/dist/extract/rules-engine.d.ts.map +1 -0
  58. package/dist/extract/rules-engine.js +314 -0
  59. package/dist/extract/rules-engine.js.map +1 -0
  60. package/dist/extract/summarizer.d.ts +27 -0
  61. package/dist/extract/summarizer.d.ts.map +1 -0
  62. package/dist/extract/summarizer.js +148 -0
  63. package/dist/extract/summarizer.js.map +1 -0
  64. package/dist/hooks/session-idle.d.ts +38 -0
  65. package/dist/hooks/session-idle.d.ts.map +1 -0
  66. package/dist/hooks/session-idle.js +142 -0
  67. package/dist/hooks/session-idle.js.map +1 -0
  68. package/dist/hooks/system-transform.d.ts +41 -0
  69. package/dist/hooks/system-transform.d.ts.map +1 -0
  70. package/dist/hooks/system-transform.js +98 -0
  71. package/dist/hooks/system-transform.js.map +1 -0
  72. package/dist/hooks/tool-after.d.ts +66 -0
  73. package/dist/hooks/tool-after.d.ts.map +1 -0
  74. package/dist/hooks/tool-after.js +155 -0
  75. package/dist/hooks/tool-after.js.map +1 -0
  76. package/dist/index.d.ts +10 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +10 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mind.d.ts +69 -0
  81. package/dist/mind.d.ts.map +1 -0
  82. package/dist/mind.js +368 -0
  83. package/dist/mind.js.map +1 -0
  84. package/dist/procedural/index.d.ts +4 -0
  85. package/dist/procedural/index.d.ts.map +1 -0
  86. package/dist/procedural/index.js +4 -0
  87. package/dist/procedural/index.js.map +1 -0
  88. package/dist/procedural/induction.d.ts +23 -0
  89. package/dist/procedural/induction.d.ts.map +1 -0
  90. package/dist/procedural/induction.js +104 -0
  91. package/dist/procedural/induction.js.map +1 -0
  92. package/dist/procedural/miner.d.ts +45 -0
  93. package/dist/procedural/miner.d.ts.map +1 -0
  94. package/dist/procedural/miner.js +171 -0
  95. package/dist/procedural/miner.js.map +1 -0
  96. package/dist/procedural/suggester.d.ts +20 -0
  97. package/dist/procedural/suggester.d.ts.map +1 -0
  98. package/dist/procedural/suggester.js +69 -0
  99. package/dist/procedural/suggester.js.map +1 -0
  100. package/dist/store/archive.d.ts +31 -0
  101. package/dist/store/archive.d.ts.map +1 -0
  102. package/dist/store/archive.js +137 -0
  103. package/dist/store/archive.js.map +1 -0
  104. package/dist/store/backup.d.ts +36 -0
  105. package/dist/store/backup.d.ts.map +1 -0
  106. package/dist/store/backup.js +163 -0
  107. package/dist/store/backup.js.map +1 -0
  108. package/dist/store/memorycards.d.ts +31 -0
  109. package/dist/store/memorycards.d.ts.map +1 -0
  110. package/dist/store/memorycards.js +161 -0
  111. package/dist/store/memorycards.js.map +1 -0
  112. package/dist/store/mv2-adapter.d.ts +29 -0
  113. package/dist/store/mv2-adapter.d.ts.map +1 -0
  114. package/dist/store/mv2-adapter.js +359 -0
  115. package/dist/store/mv2-adapter.js.map +1 -0
  116. package/dist/store/procedures.d.ts +79 -0
  117. package/dist/store/procedures.d.ts.map +1 -0
  118. package/dist/store/procedures.js +183 -0
  119. package/dist/store/procedures.js.map +1 -0
  120. package/dist/store/tombstone.d.ts +27 -0
  121. package/dist/store/tombstone.d.ts.map +1 -0
  122. package/dist/store/tombstone.js +136 -0
  123. package/dist/store/tombstone.js.map +1 -0
  124. package/dist/tools/index.d.ts +36 -0
  125. package/dist/tools/index.d.ts.map +1 -0
  126. package/dist/tools/index.js +236 -0
  127. package/dist/tools/index.js.map +1 -0
  128. package/dist/types.d.ts +301 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +69 -0
  131. package/dist/types.js.map +1 -0
  132. package/dist/utils/error.d.ts +57 -0
  133. package/dist/utils/error.d.ts.map +1 -0
  134. package/dist/utils/error.js +143 -0
  135. package/dist/utils/error.js.map +1 -0
  136. package/dist/utils/uuid.d.ts +2 -0
  137. package/dist/utils/uuid.d.ts.map +1 -0
  138. package/dist/utils/uuid.js +5 -0
  139. package/dist/utils/uuid.js.map +1 -0
  140. package/package.json +67 -0
@@ -0,0 +1,375 @@
1
+ export function defineCommand(config) {
2
+ return config;
3
+ }
4
+ export const mindStatsCommand = defineCommand({
5
+ name: 'mind:stats',
6
+ description: 'Display memory system statistics.',
7
+ usage: '/mind:stats',
8
+ handler: async (ctx) => {
9
+ try {
10
+ const state = await ctx.mind.getState();
11
+ const cards = await ctx.mind.getMemoryCards();
12
+ const byEntity = {};
13
+ const byKind = {};
14
+ for (const card of cards) {
15
+ byEntity[card.entity] = (byEntity[card.entity] || 0) + 1;
16
+ byKind[card.kind] = (byKind[card.kind] || 0) + 1;
17
+ }
18
+ let output = `## Memory Statistics\n\n`;
19
+ output += `**Frame Count:** ${state.frameCount}\n`;
20
+ output += `**Active Frames:** ${state.activeFrameCount}\n`;
21
+ output += `**Memory Cards:** ${cards.length}\n\n`;
22
+ if (Object.keys(byEntity).length > 0) {
23
+ output += `### By Entity\n`;
24
+ for (const [entity, count] of Object.entries(byEntity)) {
25
+ output += `- ${entity}: ${count}\n`;
26
+ }
27
+ output += `\n`;
28
+ }
29
+ if (Object.keys(byKind).length > 0) {
30
+ output += `### By Kind\n`;
31
+ for (const [kind, count] of Object.entries(byKind)) {
32
+ output += `- ${kind}: ${count}\n`;
33
+ }
34
+ }
35
+ return { success: true, output };
36
+ }
37
+ catch (error) {
38
+ return {
39
+ success: false,
40
+ output: `Error: ${error instanceof Error ? error.message : String(error)}`
41
+ };
42
+ }
43
+ }
44
+ });
45
+ export const mindSearchCommand = defineCommand({
46
+ name: 'mind:search',
47
+ description: 'Search memories by query.',
48
+ usage: '/mind:search <query>',
49
+ handler: async (ctx) => {
50
+ const query = ctx.args['_'] || '';
51
+ if (!query || query.length < 3) {
52
+ return {
53
+ success: false,
54
+ output: 'Usage: /mind:search <query> (min 3 characters)'
55
+ };
56
+ }
57
+ try {
58
+ const results = await ctx.mind.search(query, 20);
59
+ if (results.length === 0) {
60
+ return {
61
+ success: true,
62
+ output: `No memories found matching "${query}"`
63
+ };
64
+ }
65
+ let output = `## Search Results: "${query}"\n\n`;
66
+ output += `Found ${results.length} results\n\n`;
67
+ for (const obs of results.slice(0, 10)) {
68
+ const date = new Date(obs.timestamp).toLocaleDateString();
69
+ output += `**[${date}] [${obs.type}]**\n`;
70
+ output += `${obs.content.slice(0, 200)}\n\n`;
71
+ }
72
+ if (results.length > 10) {
73
+ output += `*...and ${results.length - 10} more*\n`;
74
+ }
75
+ return { success: true, output };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ success: false,
80
+ output: `Search failed: ${error instanceof Error ? error.message : String(error)}`
81
+ };
82
+ }
83
+ }
84
+ });
85
+ export const mindContextCommand = defineCommand({
86
+ name: 'mind:context',
87
+ description: 'Display current memory context.',
88
+ usage: '/mind:context [--tokens N]',
89
+ handler: async (ctx) => {
90
+ const maxTokens = ctx.args['tokens'] || 3000;
91
+ try {
92
+ const block = await ctx.mind.buildContext({ maxTokens });
93
+ let output = `## Memory Context (${block.tokenCount} tokens)\n\n`;
94
+ output += block.content;
95
+ output += `\n\n---\n`;
96
+ output += `**Included:** ${block.included.observations} observations, ${block.included.memoryCards} cards\n`;
97
+ if (block.excluded.observations > 0) {
98
+ output += `**Excluded:** ${block.excluded.observations} observations\n`;
99
+ }
100
+ return { success: true, output };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ success: false,
105
+ output: `Failed: ${error instanceof Error ? error.message : String(error)}`
106
+ };
107
+ }
108
+ }
109
+ });
110
+ export const mindForgetCommand = defineCommand({
111
+ name: 'mind:forget',
112
+ description: 'Mark a memory for deletion.',
113
+ usage: '/mind:forget <frameId> [reason]',
114
+ handler: async (ctx) => {
115
+ const frameId = ctx.args['_'];
116
+ const reason = ctx.args['reason'] || 'user_request';
117
+ if (!frameId) {
118
+ return {
119
+ success: false,
120
+ output: 'Usage: /mind:forget <frameId> [reason]'
121
+ };
122
+ }
123
+ try {
124
+ await ctx.mind.tombstone(frameId, reason, 'user');
125
+ return {
126
+ success: true,
127
+ output: `Memory ${frameId} has been marked for deletion (${reason}).`
128
+ };
129
+ }
130
+ catch (error) {
131
+ return {
132
+ success: false,
133
+ output: `Failed: ${error instanceof Error ? error.message : String(error)}`
134
+ };
135
+ }
136
+ }
137
+ });
138
+ export const mindAddCommand = defineCommand({
139
+ name: 'mind:add',
140
+ description: 'Add a memory card manually.',
141
+ usage: '/mind:add <entity> <slot> <value> [--kind profile|fact|preference|goal]',
142
+ handler: async (ctx) => {
143
+ const args = (ctx.args['_'] || '').split(' ');
144
+ const entity = args[0];
145
+ const slot = args[1];
146
+ const value = args.slice(2).join(' ');
147
+ const kind = ctx.args['kind'] || 'fact';
148
+ if (!entity || !slot || !value) {
149
+ return {
150
+ success: false,
151
+ output: 'Usage: /mind:add <entity> <slot> <value> [--kind profile|fact|preference|goal]'
152
+ };
153
+ }
154
+ try {
155
+ const id = await ctx.mind.addMemoryCard({
156
+ entity,
157
+ slot,
158
+ value,
159
+ kind: kind,
160
+ confidence: 1.0
161
+ });
162
+ return {
163
+ success: true,
164
+ output: `Memory card added: ${entity}.${slot} = "${value}" (id: ${id.slice(0, 8)}...)`
165
+ };
166
+ }
167
+ catch (error) {
168
+ return {
169
+ success: false,
170
+ output: `Failed: ${error instanceof Error ? error.message : String(error)}`
171
+ };
172
+ }
173
+ }
174
+ });
175
+ export const mindCardsCommand = defineCommand({
176
+ name: 'mind:cards',
177
+ description: 'List all memory cards.',
178
+ usage: '/mind:cards [--entity <entity>] [--kind <kind>]',
179
+ handler: async (ctx) => {
180
+ const entity = ctx.args['entity'];
181
+ const kind = ctx.args['kind'];
182
+ try {
183
+ let cards = await ctx.mind.getMemoryCards();
184
+ if (entity) {
185
+ cards = cards.filter(c => c.entity === entity);
186
+ }
187
+ if (kind) {
188
+ cards = cards.filter(c => c.kind === kind);
189
+ }
190
+ if (cards.length === 0) {
191
+ return {
192
+ success: true,
193
+ output: 'No memory cards found.'
194
+ };
195
+ }
196
+ let output = `## Memory Cards (${cards.length})\n\n`;
197
+ const byEntity = groupBy(cards, 'entity');
198
+ for (const [ent, entityCards] of Object.entries(byEntity)) {
199
+ output += `### ${capitalize(ent)}\n`;
200
+ for (const card of entityCards) {
201
+ const confidence = (card.confidence * 100).toFixed(0);
202
+ output += `- **${formatSlot(card.slot)}:** ${card.value} _(${confidence}%)_\n`;
203
+ }
204
+ output += `\n`;
205
+ }
206
+ return { success: true, output };
207
+ }
208
+ catch (error) {
209
+ return {
210
+ success: false,
211
+ output: `Failed: ${error instanceof Error ? error.message : String(error)}`
212
+ };
213
+ }
214
+ }
215
+ });
216
+ export const mindHelpCommand = defineCommand({
217
+ name: 'mind:help',
218
+ description: 'Show available commands.',
219
+ usage: '/mind:help',
220
+ handler: async (_ctx) => {
221
+ let output = `## Mind Commands\n\n`;
222
+ output += `| Command | Description |\n`;
223
+ output += `|---------|-------------|\n`;
224
+ output += `| /mind:stats | Display memory statistics |\n`;
225
+ output += `| /mind:search <query> | Search memories |\n`;
226
+ output += `| /mind:context | Show current context |\n`;
227
+ output += `| /mind:forget <id> | Mark memory for deletion |\n`;
228
+ output += `| /mind:add <entity> <slot> <value> | Add memory card |\n`;
229
+ output += `| /mind:cards | List memory cards |\n`;
230
+ output += `| /mind:export | Export memory (json/md/plain) |\n`;
231
+ output += `| /mind:archive | Archive memory |`;
232
+ output += `| /mind:help | Show this help |\n`;
233
+ return { success: true, output };
234
+ }
235
+ });
236
+ export const mindExportCommand = defineCommand({
237
+ name: 'mind:export',
238
+ description: 'Export memory to JSON, Markdown, or plain text.',
239
+ usage: '/mind:export [--format json|markdown|plain]',
240
+ handler: async (ctx) => {
241
+ const format = ctx.args['format'] || 'json';
242
+ if (!['json', 'markdown', 'plain'].includes(format)) {
243
+ return {
244
+ success: false,
245
+ output: `Invalid format: ${format}. Use json, markdown, or plain.`
246
+ };
247
+ }
248
+ try {
249
+ const exported = await ctx.mind.exportMemory(format);
250
+ let output = `## Memory Export (${format.toUpperCase()})\n\n`;
251
+ if (format === 'json') {
252
+ const lines = exported.split('\n');
253
+ if (lines.length > 50) {
254
+ output += `\`\`\`json\n${lines.slice(0, 50).join('\n')}\n... (${lines.length - 50} more lines)\n\`\`\``;
255
+ }
256
+ else {
257
+ output += `\`\`\`json\n${exported}\n\`\`\``;
258
+ }
259
+ }
260
+ else {
261
+ output += exported;
262
+ }
263
+ return { success: true, output };
264
+ }
265
+ catch (error) {
266
+ return {
267
+ success: false,
268
+ output: `Export failed: ${error instanceof Error ? error.message : String(error)}`
269
+ };
270
+ }
271
+ }
272
+ });
273
+ export const mindArchiveCommand = defineCommand({
274
+ name: 'mind:archive',
275
+ description: 'Archive current memory to preserve it.',
276
+ usage: '/mind:archive [--reason <reason>] [--list] [--prune <count>]',
277
+ handler: async (ctx) => {
278
+ const listOnly = ctx.args['list'] === true;
279
+ const pruneCount = ctx.args['prune'];
280
+ if (listOnly) {
281
+ try {
282
+ const archives = await ctx.mind.listArchives();
283
+ if (archives.length === 0) {
284
+ return { success: true, output: 'No archives found.' };
285
+ }
286
+ let output = `## Archives (${archives.length})\n\n`;
287
+ for (const archive of archives) {
288
+ const date = new Date(archive.createdAt).toLocaleString();
289
+ const size = (archive.size / 1024 / 1024).toFixed(2);
290
+ output += `- **${date}** (${archive.frameCount} frames, ${size} MB)\n`;
291
+ output += ` Reason: ${archive.reason}\n`;
292
+ }
293
+ return { success: true, output };
294
+ }
295
+ catch (error) {
296
+ return {
297
+ success: false,
298
+ output: `Failed to list archives: ${error instanceof Error ? error.message : String(error)}`
299
+ };
300
+ }
301
+ }
302
+ if (pruneCount !== undefined) {
303
+ try {
304
+ const deleted = await ctx.mind.pruneArchives(pruneCount);
305
+ return {
306
+ success: true,
307
+ output: `Pruned ${deleted} archive(s).`
308
+ };
309
+ }
310
+ catch (error) {
311
+ return {
312
+ success: false,
313
+ output: `Failed to prune archives: ${error instanceof Error ? error.message : String(error)}`
314
+ };
315
+ }
316
+ }
317
+ const reason = ctx.args['reason'] || 'user_request';
318
+ try {
319
+ const archivePath = await ctx.mind.archive(reason);
320
+ if (!archivePath) {
321
+ return {
322
+ success: false,
323
+ output: 'Failed to create archive. Memory may be empty.'
324
+ };
325
+ }
326
+ const stats = await ctx.mind.getArchiveStats();
327
+ let output = `## Archive Created\n\n`;
328
+ output += `**Path:** ${archivePath}\n`;
329
+ output += `**Reason:** ${reason}\n\n`;
330
+ output += `**Total Archives:** ${stats.totalArchives}\n`;
331
+ output += `**Total Size:** ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB\n`;
332
+ return { success: true, output };
333
+ }
334
+ catch (error) {
335
+ return {
336
+ success: false,
337
+ output: `Archive failed: ${error instanceof Error ? error.message : String(error)}`
338
+ };
339
+ }
340
+ }
341
+ });
342
+ export const allCommands = [
343
+ mindStatsCommand,
344
+ mindSearchCommand,
345
+ mindContextCommand,
346
+ mindForgetCommand,
347
+ mindAddCommand,
348
+ mindCardsCommand,
349
+ mindExportCommand,
350
+ mindArchiveCommand,
351
+ mindHelpCommand
352
+ ];
353
+ export function getCommand(name) {
354
+ return allCommands.find(c => c.name === name);
355
+ }
356
+ export function getCommandList() {
357
+ return allCommands.map(c => ({ name: c.name, description: c.description }));
358
+ }
359
+ function groupBy(items, key) {
360
+ const result = {};
361
+ for (const item of items) {
362
+ const k = String(item[key]);
363
+ if (!result[k])
364
+ result[k] = [];
365
+ result[k].push(item);
366
+ }
367
+ return result;
368
+ }
369
+ function capitalize(str) {
370
+ return str.charAt(0).toUpperCase() + str.slice(1);
371
+ }
372
+ function formatSlot(slot) {
373
+ return slot.split('_').map(w => capitalize(w)).join(' ');
374
+ }
375
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { VmemConfig, defaultConfig } from './types.js';
2
+ export type { VmemConfig } from './types.js';
3
+ export declare function loadConfig(projectDir: string): Promise<VmemConfig>;
4
+ export { defaultConfig };
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BxE;AAcD,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,41 @@
1
+ import { readFile, access } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { defaultConfig } from './types.js';
4
+ export async function loadConfig(projectDir) {
5
+ const configPath = join(projectDir, '.opencode', 'vmem.json');
6
+ let config;
7
+ try {
8
+ await access(configPath);
9
+ const raw = await readFile(configPath, 'utf-8');
10
+ const userConfig = JSON.parse(raw, (key, value) => {
11
+ if (key === 'skipPatterns' && Array.isArray(value)) {
12
+ return value.map((p) => new RegExp(p));
13
+ }
14
+ return value;
15
+ });
16
+ config = mergeConfig(defaultConfig, userConfig);
17
+ }
18
+ catch {
19
+ config = { ...defaultConfig };
20
+ }
21
+ if (!config.memoryPath.startsWith('/') && !config.memoryPath.match(/^[A-Za-z]:/)) {
22
+ config.memoryPath = join(projectDir, config.memoryPath);
23
+ }
24
+ if (config.embedding.cacheDir && !config.embedding.cacheDir.startsWith('/') && !config.embedding.cacheDir.match(/^[A-Za-z]:/)) {
25
+ config.embedding.cacheDir = join(projectDir, config.embedding.cacheDir);
26
+ }
27
+ return config;
28
+ }
29
+ function mergeConfig(defaults, user) {
30
+ return {
31
+ ...defaults,
32
+ ...user,
33
+ capture: { ...defaults.capture, ...user.capture },
34
+ extraction: { ...defaults.extraction, ...user.extraction },
35
+ confidence: { ...defaults.confidence, ...user.confidence },
36
+ context: { ...defaults.context, ...user.context },
37
+ optimization: { ...defaults.optimization, ...user.optimization }
38
+ };
39
+ }
40
+ export { defaultConfig };
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAc,aAAa,EAAE,MAAM,YAAY,CAAC;AAIvD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAE9D,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAChD,IAAI,GAAG,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACjF,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9H,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAAoB,EAAE,IAAyB;IAClE,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,IAAI;QACP,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACjD,UAAU,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;QAC1D,UAAU,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;QAC1D,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACjD,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;KACjE,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Observation, MemoryCard, ContextBlock, ContextOptions } from '../types.js';
2
+ export declare class ContextBuilder {
3
+ private options;
4
+ constructor(options?: Partial<ContextOptions>);
5
+ build(observations: Observation[], memoryCards: MemoryCard[], state: {
6
+ frameCount: number;
7
+ activeFrameCount: number;
8
+ }, options?: Partial<ContextOptions>): ContextBlock;
9
+ private formatHeader;
10
+ private formatUserProfile;
11
+ private formatProjectContext;
12
+ private formatRecentWork;
13
+ private formatLabel;
14
+ private groupBy;
15
+ private getLatest;
16
+ estimateTokens(text: string): number;
17
+ truncate(block: ContextBlock, maxTokens: number): ContextBlock;
18
+ }
19
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEpF,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM;IAajD,KAAK,CACH,YAAY,EAAE,WAAW,EAAE,EAC3B,WAAW,EAAE,UAAU,EAAE,EACzB,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EACvD,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,YAAY;IAiEf,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;IAQjB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY;CAmC/D"}