pmem-ai 0.7.3 → 0.7.4

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 (48) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +29 -27
  3. package/dist/commands/capture.d.ts +8 -0
  4. package/dist/commands/capture.d.ts.map +1 -0
  5. package/dist/commands/capture.js +69 -0
  6. package/dist/commands/capture.js.map +1 -0
  7. package/dist/commands/context.d.ts +5 -0
  8. package/dist/commands/context.d.ts.map +1 -0
  9. package/dist/commands/context.js +109 -0
  10. package/dist/commands/context.js.map +1 -0
  11. package/dist/commands/install.d.ts +5 -0
  12. package/dist/commands/install.d.ts.map +1 -1
  13. package/dist/commands/install.js +54 -35
  14. package/dist/commands/install.js.map +1 -1
  15. package/dist/commands/mcp.d.ts +1 -1
  16. package/dist/commands/mcp.d.ts.map +1 -1
  17. package/dist/commands/mcp.js +2 -2
  18. package/dist/commands/mcp.js.map +1 -1
  19. package/dist/commands/verify.d.ts +1 -0
  20. package/dist/commands/verify.d.ts.map +1 -1
  21. package/dist/commands/verify.js +6 -3
  22. package/dist/commands/verify.js.map +1 -1
  23. package/dist/core/agentRules.d.ts +13 -0
  24. package/dist/core/agentRules.d.ts.map +1 -0
  25. package/dist/core/agentRules.js +131 -0
  26. package/dist/core/agentRules.js.map +1 -0
  27. package/dist/core/capture.d.ts +15 -0
  28. package/dist/core/capture.d.ts.map +1 -0
  29. package/dist/core/capture.js +380 -0
  30. package/dist/core/capture.js.map +1 -0
  31. package/dist/core/query/context.d.ts +3 -0
  32. package/dist/core/query/context.d.ts.map +1 -0
  33. package/dist/core/query/context.js +158 -0
  34. package/dist/core/query/context.js.map +1 -0
  35. package/dist/index.js +46 -4
  36. package/dist/index.js.map +1 -1
  37. package/dist/mcp/security.d.ts +4 -0
  38. package/dist/mcp/security.d.ts.map +1 -1
  39. package/dist/mcp/security.js +35 -0
  40. package/dist/mcp/security.js.map +1 -1
  41. package/dist/mcp/server.d.ts +1 -1
  42. package/dist/mcp/server.d.ts.map +1 -1
  43. package/dist/mcp/server.js +73 -5
  44. package/dist/mcp/server.js.map +1 -1
  45. package/dist/types.d.ts +31 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +5 -2
  48. package/skills/pmem/SKILL.md +11 -19
@@ -0,0 +1,13 @@
1
+ interface InstallRulesOptions {
2
+ claude?: boolean;
3
+ codex?: boolean;
4
+ gemini?: boolean;
5
+ cursor?: boolean;
6
+ cline?: boolean;
7
+ aider?: boolean;
8
+ windsurf?: boolean;
9
+ all?: boolean;
10
+ }
11
+ export declare function writeAgentRules(cwd: string, options: InstallRulesOptions): string[];
12
+ export {};
13
+ //# sourceMappingURL=agentRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentRules.d.ts","sourceRoot":"","sources":["../../src/core/agentRules.ts"],"names":[],"mappings":"AA0BA,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CA4EnF"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.writeAgentRules = writeAgentRules;
37
+ const path = __importStar(require("path"));
38
+ const fs_1 = require("./fs");
39
+ const RULES_CONTENT = `<!-- pmem:rules:start -->
40
+ # pmem Guidelines
41
+
42
+ Before editing files or starting a task, run:
43
+ \`pmem context "<task description>"\`
44
+
45
+ After completing a task or editing files, run:
46
+ \`pmem capture --auto\`
47
+
48
+ Rules:
49
+ - Do not manually edit .pmem core cards (e.g. decisions, modules) unless explicitly requested.
50
+ - Keep capture summaries short and factual.
51
+ - Prefer using \`pmem context\` over ad-hoc repo scanning.
52
+ <!-- pmem:rules:end -->`;
53
+ const CURSOR_MDC_CONTENT = `---
54
+ description: Use pmem project memory during coding tasks
55
+ alwaysApply: true
56
+ ---
57
+
58
+ ${RULES_CONTENT}`;
59
+ function writeAgentRules(cwd, options) {
60
+ const installed = [];
61
+ const targets = [
62
+ { name: 'AGENTS.md', filePath: path.join(cwd, 'AGENTS.md') },
63
+ { name: 'CLAUDE.md', filePath: path.join(cwd, 'CLAUDE.md') },
64
+ { name: 'GEMINI.md', filePath: path.join(cwd, 'GEMINI.md') },
65
+ { name: '.codex/instructions.md', filePath: path.join(cwd, '.codex', 'instructions.md') },
66
+ { name: '.cursor/rules/pmem.mdc', filePath: path.join(cwd, '.cursor/rules/pmem.mdc'), isMdc: true },
67
+ { name: '.clinerules/pmem.md', filePath: path.join(cwd, '.clinerules/pmem.md') },
68
+ // Opt-ins
69
+ { name: 'CONVENTIONS.md (Aider)', filePath: path.join(cwd, 'CONVENTIONS.md'), optIn: true },
70
+ { name: '.windsurfrules', filePath: path.join(cwd, '.windsurfrules'), optIn: true }
71
+ ];
72
+ // Determine which files to write based on flags
73
+ const selectedTargets = targets.filter(t => {
74
+ // AGENTS.md is always written if we are running agentRules
75
+ if (t.name === 'AGENTS.md')
76
+ return true;
77
+ // Aider and Windsurf are strictly opt-in and NEVER written via --all
78
+ if (t.name === 'CONVENTIONS.md (Aider)')
79
+ return !!options.aider;
80
+ if (t.name === '.windsurfrules')
81
+ return !!options.windsurf;
82
+ // For all other targets, they are written if --all is passed or their specific flag is passed
83
+ if (options.all)
84
+ return true;
85
+ if (t.name === 'CLAUDE.md')
86
+ return !!options.claude;
87
+ if (t.name === 'GEMINI.md')
88
+ return !!options.gemini;
89
+ if (t.name === '.codex/instructions.md')
90
+ return !!options.codex;
91
+ if (t.name === '.cursor/rules/pmem.mdc')
92
+ return !!options.cursor;
93
+ if (t.name === '.clinerules/pmem.md')
94
+ return !!options.cline;
95
+ return false;
96
+ });
97
+ for (const target of selectedTargets) {
98
+ try {
99
+ const dir = path.dirname(target.filePath);
100
+ (0, fs_1.ensureDir)(dir);
101
+ const contentToWrite = target.isMdc ? CURSOR_MDC_CONTENT : RULES_CONTENT;
102
+ if ((0, fs_1.fileExists)(target.filePath)) {
103
+ const existing = (0, fs_1.readFile)(target.filePath) || '';
104
+ const startMarker = '<!-- pmem:rules:start -->';
105
+ const endMarker = '<!-- pmem:rules:end -->';
106
+ const startIndex = existing.indexOf(startMarker);
107
+ const endIndex = existing.indexOf(endMarker);
108
+ if (startIndex >= 0 && endIndex >= 0 && endIndex > startIndex) {
109
+ const updated = existing.substring(0, startIndex) +
110
+ contentToWrite +
111
+ existing.substring(endIndex + endMarker.length);
112
+ (0, fs_1.writeFile)(target.filePath, updated);
113
+ }
114
+ else {
115
+ // Append rules at the end
116
+ const spacer = existing.endsWith('\n') ? '' : '\n';
117
+ (0, fs_1.writeFile)(target.filePath, `${existing}${spacer}\n${contentToWrite}\n`);
118
+ }
119
+ }
120
+ else {
121
+ (0, fs_1.writeFile)(target.filePath, contentToWrite + '\n');
122
+ }
123
+ installed.push(target.name);
124
+ }
125
+ catch (err) {
126
+ console.error(`Failed to write agent rules to ${target.name}: ${err.message}`);
127
+ }
128
+ }
129
+ return installed;
130
+ }
131
+ //# sourceMappingURL=agentRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentRules.js","sourceRoot":"","sources":["../../src/core/agentRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface CaptureOptions {
2
+ auto?: boolean;
3
+ summary?: string;
4
+ next?: string;
5
+ full?: boolean;
6
+ force?: boolean;
7
+ }
8
+ export interface CaptureResult {
9
+ success: boolean;
10
+ message: string;
11
+ tracePath?: string;
12
+ skipped?: boolean;
13
+ }
14
+ export declare function captureCore(pmemPath: string, options?: CaptureOptions): CaptureResult;
15
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/core/capture.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CA+WzF"}
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.captureCore = captureCore;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ const crypto = __importStar(require("crypto"));
40
+ const child_process_1 = require("child_process");
41
+ const fs_1 = require("./fs");
42
+ const manifest_1 = require("./manifest");
43
+ const rebuild_1 = require("../commands/rebuild");
44
+ const verify_1 = require("../commands/verify");
45
+ const db_1 = require("./db");
46
+ const status_1 = require("./query/status");
47
+ function captureCore(pmemPath, options = {}) {
48
+ const cwd = process.cwd();
49
+ if (!(0, fs_1.fileExists)(pmemPath)) {
50
+ return {
51
+ success: false,
52
+ message: 'No .pmem directory found. Run pmem init first.'
53
+ };
54
+ }
55
+ // 1. Detect changed files
56
+ let status;
57
+ try {
58
+ status = (0, status_1.statusQuery)(pmemPath);
59
+ }
60
+ catch (err) {
61
+ return {
62
+ success: false,
63
+ message: `Failed to detect changes: ${err.message}`
64
+ };
65
+ }
66
+ const changedFiles = (status.changes || []).filter(f => !f.path.startsWith('.pmem/') && !f.path.startsWith('.pmem\\') && f.path !== '.pmem');
67
+ if (changedFiles.length === 0 && !options.force) {
68
+ return {
69
+ success: true,
70
+ message: 'No changed files detected. Memory is up-to-date.',
71
+ skipped: true
72
+ };
73
+ }
74
+ // 2. Compute git/mtime diff hash for duplicate check
75
+ let diffHash = '';
76
+ try {
77
+ const isGit = (() => {
78
+ try {
79
+ (0, child_process_1.execSync)('git rev-parse --git-dir', { cwd, stdio: 'ignore' });
80
+ return true;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ })();
86
+ if (isGit) {
87
+ const statusOutput = (0, child_process_1.execSync)("git status --porcelain --untracked-files=all -- . ':!.pmem'", { cwd, encoding: 'utf8', timeout: 5000 });
88
+ const diffOutput = (0, child_process_1.execSync)("git diff HEAD -- . ':!.pmem'", { cwd, encoding: 'utf8', timeout: 5000 });
89
+ const untrackedHashes = changedFiles
90
+ .filter(f => f.status.includes('?') || f.status === '??')
91
+ .map(f => {
92
+ const fullPath = path.join(cwd, f.path);
93
+ if (!(0, fs_1.fileExists)(fullPath))
94
+ return `${f.path}:missing`;
95
+ try {
96
+ const content = fs.readFileSync(fullPath);
97
+ return `${f.path}:${crypto.createHash('sha256').update(content).digest('hex')}`;
98
+ }
99
+ catch {
100
+ return `${f.path}:error`;
101
+ }
102
+ })
103
+ .join('\n');
104
+ const combined = [
105
+ statusOutput,
106
+ diffOutput,
107
+ untrackedHashes
108
+ ].join('\n---pmem-diff-boundary---');
109
+ diffHash = crypto.createHash('sha256').update(combined).digest('hex');
110
+ }
111
+ else {
112
+ // Fallback mtime-based hash of changed files and mtimes
113
+ const mtimeList = changedFiles.map(c => {
114
+ const fullPath = path.join(cwd, c.path);
115
+ const mtime = (0, fs_1.fileExists)(fullPath) ? (0, fs_1.getFileMtime)(fullPath) || 0 : 0;
116
+ return `${c.path}:${mtime}:${c.status}`;
117
+ }).join('\n');
118
+ diffHash = crypto.createHash('sha256').update(mtimeList).digest('hex');
119
+ }
120
+ }
121
+ catch (err) {
122
+ // If diff computation fails, we use a fallback hash based on file names only
123
+ const fallbackList = changedFiles.map(c => `${c.path}:${c.status}`).join('\n');
124
+ diffHash = crypto.createHash('sha256').update(fallbackList).digest('hex');
125
+ }
126
+ // 3. Find the latest trace card and check its diff_hash
127
+ const traceDir = path.resolve(pmemPath, 'traces');
128
+ (0, fs_1.ensureDir)(traceDir);
129
+ if (!options.force && diffHash) {
130
+ try {
131
+ const existingTraceFiles = fs.readdirSync(traceDir)
132
+ .filter((f) => f.endsWith('.md'))
133
+ .sort((a, b) => b.localeCompare(a)); // Sort descending to get latest first
134
+ if (existingTraceFiles.length > 0) {
135
+ const latestTracePath = path.join(traceDir, existingTraceFiles[0]);
136
+ const latestTraceContent = (0, fs_1.readFile)(latestTracePath) || '';
137
+ // Match diff_hash: "..." or diff_hash: ...
138
+ const diffHashMatch = latestTraceContent.match(/diff_hash:\s*["']?([a-fA-F0-9]+)["']?/);
139
+ if (diffHashMatch && diffHashMatch[1] === diffHash) {
140
+ return {
141
+ success: true,
142
+ message: 'No new capture created. Existing trace already records this diff.',
143
+ skipped: true
144
+ };
145
+ }
146
+ }
147
+ }
148
+ catch {
149
+ // Ignore directory read/parse errors for safety
150
+ }
151
+ }
152
+ // 4. Resolve summary
153
+ let summary = options.summary;
154
+ if (!summary) {
155
+ // Try to get latest task from session.json
156
+ const sessionPath = path.join(pmemPath, 'session.json');
157
+ if ((0, fs_1.fileExists)(sessionPath)) {
158
+ try {
159
+ const sessionContent = (0, fs_1.readFile)(sessionPath);
160
+ if (sessionContent) {
161
+ const sessionData = JSON.parse(sessionContent);
162
+ if (sessionData.latest_task) {
163
+ summary = `Capture: ${sessionData.latest_task}`;
164
+ }
165
+ }
166
+ }
167
+ catch {
168
+ // Fallback if parsing fails
169
+ }
170
+ }
171
+ }
172
+ if (!summary) {
173
+ // Fallback: list changed files
174
+ const filePaths = changedFiles.map(f => f.path);
175
+ summary = `Automated capture: changed ${filePaths.join(', ')}`;
176
+ }
177
+ // 5. Resolve next
178
+ const next = options.next || 'Continue development.';
179
+ // 6. Create trace card
180
+ const today = new Date().toISOString().split('T')[0];
181
+ let traceFile = '';
182
+ try {
183
+ const existingTraces = fs.readdirSync(traceDir)
184
+ .filter((f) => f.startsWith(today) && f.endsWith('.md'))
185
+ .length;
186
+ const traceNum = String(existingTraces + 1).padStart(3, '0');
187
+ traceFile = path.resolve(traceDir, `${today}-${traceNum}.md`);
188
+ // Strict path traversal validation
189
+ if (!traceFile.startsWith(traceDir)) {
190
+ throw new Error('Security: trace path traversal detected');
191
+ }
192
+ const cardId = `trace.${today}-${traceNum}`;
193
+ const traceContent = `---
194
+ id: ${cardId}
195
+ type: trace
196
+ created: ${new Date().toISOString()}
197
+ diff_hash: ${diffHash}
198
+ ---
199
+
200
+ # Capture: ${summary}
201
+
202
+ ## What changed
203
+
204
+ ${summary}
205
+
206
+ ## Changed files
207
+
208
+ ${changedFiles.map(f => `- ${f.path}`).join('\n')}
209
+
210
+ ## Next
211
+
212
+ - ${next}
213
+ `;
214
+ (0, fs_1.atomicWrite)(traceFile, traceContent);
215
+ }
216
+ catch (err) {
217
+ return {
218
+ success: false,
219
+ message: `Failed to write trace card: ${err.message}`
220
+ };
221
+ }
222
+ // 7. Update .pmem/next.md in managed block
223
+ const nextPath = path.join(pmemPath, 'next.md');
224
+ const managedStart = '<!-- pmem:next:start -->';
225
+ const managedEnd = '<!-- pmem:next:end -->';
226
+ const managedContent = `${managedStart}\n- Recommended next step: ${next}\n${managedEnd}`;
227
+ try {
228
+ if ((0, fs_1.fileExists)(nextPath)) {
229
+ const currentNext = (0, fs_1.readFile)(nextPath) || '';
230
+ const startIndex = currentNext.indexOf(managedStart);
231
+ const endIndex = currentNext.indexOf(managedEnd);
232
+ if (startIndex >= 0 && endIndex >= 0 && endIndex > startIndex) {
233
+ const updatedNext = currentNext.substring(0, startIndex) +
234
+ managedContent +
235
+ currentNext.substring(endIndex + managedEnd.length);
236
+ (0, fs_1.writeFile)(nextPath, updatedNext);
237
+ }
238
+ else {
239
+ // Managed block not found, append it
240
+ const spacer = currentNext.endsWith('\n') ? '' : '\n';
241
+ (0, fs_1.writeFile)(nextPath, `${currentNext}${spacer}\n${managedContent}\n`);
242
+ }
243
+ }
244
+ else {
245
+ // Create new file
246
+ (0, fs_1.writeFile)(nextPath, `# Next Steps\n\n${managedContent}\n`);
247
+ }
248
+ }
249
+ catch (err) {
250
+ return {
251
+ success: false,
252
+ message: `Failed to update next.md: ${err.message}`
253
+ };
254
+ }
255
+ // 8. DB transaction to resolve dirty flags
256
+ const dbPath = path.join(pmemPath, 'pmem.db');
257
+ let db = null;
258
+ let transactionActive = false;
259
+ let backupManifest = null;
260
+ const manifestPath = path.join(pmemPath, 'manifest.yml');
261
+ const dirtyPath = path.join(pmemPath, '.dirty');
262
+ try {
263
+ const manifest = (0, manifest_1.loadManifest)(pmemPath);
264
+ if (manifest) {
265
+ backupManifest = JSON.stringify(manifest);
266
+ }
267
+ if ((0, fs_1.fileExists)(dbPath)) {
268
+ db = (0, db_1.openDatabase)(pmemPath);
269
+ (0, db_1.createSchema)(db);
270
+ // Start transaction
271
+ db.prepare('BEGIN TRANSACTION').run();
272
+ transactionActive = true;
273
+ const activeSession = (0, db_1.getActiveSession)(db);
274
+ // Auto mark changed files dirty first to make sure they are tracked before resolving
275
+ const allPaths = db.prepare("SELECT card_id, path FROM paths").all();
276
+ const dirtyCards = [];
277
+ for (const change of changedFiles) {
278
+ for (const p of allPaths) {
279
+ if (p.card_id && p.path && change.path) {
280
+ // Check if matches
281
+ const isMatch = (() => {
282
+ const p1 = change.path.replace(/\\/g, '/');
283
+ const p2 = p.path.replace(/\\/g, '/');
284
+ return p1 === p2 || p1.endsWith('/' + p2) || p2.endsWith('/' + p1);
285
+ })();
286
+ if (isMatch) {
287
+ if (!dirtyCards.includes(p.card_id)) {
288
+ (0, db_1.insertDirtyFlag)(db, 'card', p.card_id, 'file_changed: ' + change.path, activeSession?.id);
289
+ dirtyCards.push(p.card_id);
290
+ }
291
+ }
292
+ }
293
+ }
294
+ }
295
+ // Resolve affected cards dirty flags
296
+ const affectedCards = status.affected_cards || [];
297
+ const cardsToResolve = Array.from(new Set([
298
+ ...dirtyCards,
299
+ ...affectedCards.map((ac) => ac.card_id)
300
+ ]));
301
+ for (const cardId of cardsToResolve) {
302
+ (0, db_1.resolveDirtyFlags)(db, 'card', cardId);
303
+ }
304
+ // Resolve project level dirty flag
305
+ (0, db_1.resolveDirtyFlags)(db, 'project', '.pmem');
306
+ // Log update to SQLite
307
+ const todayNum = path.basename(traceFile, '.md').split('-').pop() || '001';
308
+ const traceCardId = `trace.${today}-${todayNum}`;
309
+ (0, db_1.insertUpdateLog)(db, 'confirm_update', summary, activeSession?.id, [traceCardId], true);
310
+ // Commit transaction
311
+ db.prepare('COMMIT').run();
312
+ transactionActive = false;
313
+ (0, db_1.closeDatabase)();
314
+ }
315
+ // Clean up dirty state in files
316
+ if ((0, fs_1.fileExists)(dirtyPath)) {
317
+ fs.unlinkSync(dirtyPath);
318
+ }
319
+ if (manifest) {
320
+ manifest.memory_status.dirty = false;
321
+ manifest.memory_status.dirty_reason = null;
322
+ manifest.memory_status.dirty_since = null;
323
+ (0, manifest_1.saveManifest)(pmemPath, manifest);
324
+ }
325
+ }
326
+ catch (err) {
327
+ if (db && transactionActive) {
328
+ try {
329
+ db.prepare('ROLLBACK').run();
330
+ }
331
+ catch { }
332
+ }
333
+ try {
334
+ (0, db_1.closeDatabase)();
335
+ }
336
+ catch { }
337
+ // Rollback manifest
338
+ if (backupManifest && (0, fs_1.fileExists)(manifestPath)) {
339
+ try {
340
+ (0, manifest_1.saveManifest)(pmemPath, JSON.parse(backupManifest));
341
+ }
342
+ catch { }
343
+ }
344
+ // Rollback trace file
345
+ if ((0, fs_1.fileExists)(traceFile)) {
346
+ try {
347
+ fs.unlinkSync(traceFile);
348
+ }
349
+ catch { }
350
+ }
351
+ return {
352
+ success: false,
353
+ message: `Failed SQLite transaction: ${err.message}`
354
+ };
355
+ }
356
+ // 9. Run rebuild (incremental or full)
357
+ try {
358
+ (0, rebuild_1.rebuildCommand)({ full: options.full === true });
359
+ }
360
+ catch (err) {
361
+ return {
362
+ success: false,
363
+ message: `Failed rebuild: ${err.message}`,
364
+ tracePath: traceFile
365
+ };
366
+ }
367
+ // 10. Run lightweight verify
368
+ try {
369
+ (0, verify_1.verifyCommand)({ fix: false, fixLocks: false, fixStale: false, relaxed: true, noExit: true });
370
+ }
371
+ catch (err) {
372
+ // Verification warning only, do not fail capture
373
+ }
374
+ return {
375
+ success: true,
376
+ message: 'Memory sync and update completed successfully.',
377
+ tracePath: traceFile
378
+ };
379
+ }
380
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/core/capture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,kCA+WC;AAlZD,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AACjC,iDAAyC;AACzC,6BAA6F;AAC7F,yCAAwD;AACxD,iDAAqD;AACrD,+CAAmD;AACnD,6BAQc;AACd,2CAA6C;AAkB7C,SAAgB,WAAW,CAAC,QAAgB,EAAE,UAA0B,EAAE;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,gDAAgD;SAC1D,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,6BAA6B,GAAG,CAAC,OAAO,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CACzF,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,YAAY,GAAG,IAAA,wBAAQ,EAC3B,6DAA6D,EAC7D,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CACzC,CAAC;YAEF,MAAM,UAAU,GAAG,IAAA,wBAAQ,EACzB,8BAA8B,EAC9B,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CACzC,CAAC;YAEF,MAAM,eAAe,GAAG,YAAY;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;iBACxD,GAAG,CAAC,CAAC,CAAC,EAAE;gBACP,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;oBAAE,OAAO,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;gBACtD,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC1C,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClF,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,QAAQ,GAAG;gBACf,YAAY;gBACZ,UAAU;gBACV,eAAe;aAChB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAErC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,6EAA6E;QAC7E,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,wDAAwD;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAA,cAAS,EAAC,QAAQ,CAAC,CAAC;IAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,kBAAkB,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;iBAChD,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;YAE7E,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,kBAAkB,GAAG,IAAA,aAAQ,EAAC,eAAe,CAAC,IAAI,EAAE,CAAC;gBAE3D,2CAA2C;gBAC3C,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACxF,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACnD,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,mEAAmE;wBAC5E,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACxD,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,IAAA,aAAQ,EAAC,WAAW,CAAC,CAAC;gBAC7C,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,WAAW,GAAoB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;oBAChE,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;wBAC5B,OAAO,GAAG,YAAY,WAAW,CAAC,WAAW,EAAE,CAAC;oBAClD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,+BAA+B;QAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,GAAG,8BAA8B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,uBAAuB,CAAC;IAErD,uBAAuB;IACvB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC5C,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC/D,MAAM,CAAC;QAEV,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,QAAQ,KAAK,CAAC,CAAC;QAE9D,mCAAmC;QACnC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG;MACnB,MAAM;;WAED,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtB,QAAQ;;;aAGR,OAAO;;;;EAIlB,OAAO;;;;EAIP,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;IAI7C,IAAI;CACP,CAAC;QAEE,IAAA,gBAAW,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,+BAA+B,GAAG,CAAC,OAAO,EAAE;SACtD,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,0BAA0B,CAAC;IAChD,MAAM,UAAU,GAAG,wBAAwB,CAAC;IAC5C,MAAM,cAAc,GAAG,GAAG,YAAY,8BAA8B,IAAI,KAAK,UAAU,EAAE,CAAC;IAE1F,IAAI,CAAC;QACH,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAA,aAAQ,EAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEjD,IAAI,UAAU,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;gBAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC;oBACtD,cAAc;oBACd,WAAW,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAA,cAAS,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,qCAAqC;gBACrC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,IAAA,cAAS,EAAC,QAAQ,EAAE,GAAG,WAAW,GAAG,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAA,cAAS,EAAC,QAAQ,EAAE,mBAAmB,cAAc,IAAI,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,6BAA6B,GAAG,CAAC,OAAO,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,EAAE,GAAQ,IAAI,CAAC;IACnB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;YACvB,EAAE,GAAG,IAAA,iBAAY,EAAC,QAAQ,CAAC,CAAC;YAC5B,IAAA,iBAAY,EAAC,EAAE,CAAC,CAAC;YAEjB,oBAAoB;YACpB,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;YACtC,iBAAiB,GAAG,IAAI,CAAC;YAEzB,MAAM,aAAa,GAAG,IAAA,qBAAgB,EAAC,EAAE,CAAC,CAAC;YAE3C,qFAAqF;YACrF,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,iCAAiC,CAClC,CAAC,GAAG,EAA8C,CAAC;YAEpD,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBACvC,mBAAmB;wBACnB,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;4BACpB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;wBACrE,CAAC,CAAC,EAAE,CAAC;wBAEL,IAAI,OAAO,EAAE,CAAC;4BACZ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gCACpC,IAAA,oBAAe,EAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gCAC1F,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;4BAC7B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBACxC,GAAG,UAAU;gBACb,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;aAC9C,CAAC,CAAC,CAAC;YAEJ,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAA,sBAAiB,EAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,mCAAmC;YACnC,IAAA,sBAAiB,EAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1C,uBAAuB;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;YAC3E,MAAM,WAAW,GAAG,SAAS,KAAK,IAAI,QAAQ,EAAE,CAAC;YACjD,IAAA,oBAAe,EAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;YAEvF,qBAAqB;YACrB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,iBAAiB,GAAG,KAAK,CAAC;YAC1B,IAAA,kBAAa,GAAE,CAAC;QAClB,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YACrC,QAAQ,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3C,QAAQ,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1C,IAAA,uBAAY,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,IAAI,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC;YACH,IAAA,kBAAa,GAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,oBAAoB;QACpB,IAAI,cAAc,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,IAAA,uBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,8BAA8B,GAAG,CAAC,OAAO,EAAE;SACrD,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC;QACH,IAAA,wBAAc,EAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE;YACzC,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC;QACH,IAAA,sBAAa,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,iDAAiD;IACnD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,gDAAgD;QACzD,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ContextQueryResult } from '../../types';
2
+ export declare function contextQuery(pmemPath: string, task: string, budget?: number): ContextQueryResult;
3
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/query/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAEvE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAO,GAAG,kBAAkB,CAkI9F"}