pmem-ai 0.5.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.
- package/CHANGELOG.md +57 -0
- package/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +303 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/distill.d.ts +6 -0
- package/dist/commands/distill.d.ts.map +1 -0
- package/dist/commands/distill.js +425 -0
- package/dist/commands/distill.js.map +1 -0
- package/dist/commands/graph.d.ts +6 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +216 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +566 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integration.d.ts +2 -0
- package/dist/commands/integration.d.ts.map +1 -0
- package/dist/commands/integration.js +216 -0
- package/dist/commands/integration.js.map +1 -0
- package/dist/commands/migrate.d.ts +6 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +379 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rebuild.d.ts +8 -0
- package/dist/commands/rebuild.d.ts.map +1 -0
- package/dist/commands/rebuild.js +299 -0
- package/dist/commands/rebuild.js.map +1 -0
- package/dist/commands/recall.d.ts +3 -0
- package/dist/commands/recall.d.ts.map +1 -0
- package/dist/commands/recall.js +140 -0
- package/dist/commands/recall.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +147 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +275 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +536 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +4 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +296 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/db.d.ts +47 -0
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +326 -0
- package/dist/core/db.js.map +1 -0
- package/dist/core/format.d.ts +3 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +221 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/fs.d.ts +16 -0
- package/dist/core/fs.d.ts.map +1 -0
- package/dist/core/fs.js +175 -0
- package/dist/core/fs.js.map +1 -0
- package/dist/core/git.d.ts +6 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +20 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/hash.d.ts +10 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +25 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/manifest.d.ts +6 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +207 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/yaml.d.ts +11 -0
- package/dist/core/yaml.d.ts.map +1 -0
- package/dist/core/yaml.js +94 -0
- package/dist/core/yaml.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +351 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/docs/Voorlopige projekidee.md +695 -0
- package/docs/handover-v0.3.md +355 -0
- package/docs/handover-v0.4.md +367 -0
- package/docs/prd.md +318 -0
- package/docs/project-roadmap.md +279 -0
- package/docs/release-checklist-v0.5.md +109 -0
- package/docs/v0.2 pre-design.md +182 -0
- package/docs/v0.2 pre-roadmap.md +270 -0
- package/docs/v0.3 pre-design.md +686 -0
- package/docs/v0.4 pre-design.md +417 -0
- package/docs/v0.5 pre-design.md +481 -0
- package/package.json +67 -0
package/dist/core/db.js
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.openDatabase = openDatabase;
|
|
40
|
+
exports.closeDatabase = closeDatabase;
|
|
41
|
+
exports.getDatabase = getDatabase;
|
|
42
|
+
exports.createSchema = createSchema;
|
|
43
|
+
exports.hasFTS5 = hasFTS5;
|
|
44
|
+
exports.createFTS5 = createFTS5;
|
|
45
|
+
exports.getSchemaVersion = getSchemaVersion;
|
|
46
|
+
exports.setSchemaVersion = setSchemaVersion;
|
|
47
|
+
exports.upsertCard = upsertCard;
|
|
48
|
+
exports.deleteCardEdges = deleteCardEdges;
|
|
49
|
+
exports.insertEdge = insertEdge;
|
|
50
|
+
exports.deleteCardAliases = deleteCardAliases;
|
|
51
|
+
exports.insertAlias = insertAlias;
|
|
52
|
+
exports.deleteCardTags = deleteCardTags;
|
|
53
|
+
exports.insertTag = insertTag;
|
|
54
|
+
exports.deleteCardPaths = deleteCardPaths;
|
|
55
|
+
exports.insertPath = insertPath;
|
|
56
|
+
exports.clearAllTables = clearAllTables;
|
|
57
|
+
exports.getCardHash = getCardHash;
|
|
58
|
+
exports.insertDirtyFlag = insertDirtyFlag;
|
|
59
|
+
exports.resolveDirtyFlags = resolveDirtyFlags;
|
|
60
|
+
exports.getUnresolvedDirtyFlags = getUnresolvedDirtyFlags;
|
|
61
|
+
exports.startSession = startSession;
|
|
62
|
+
exports.endSession = endSession;
|
|
63
|
+
exports.getActiveSession = getActiveSession;
|
|
64
|
+
exports.insertUpdateLog = insertUpdateLog;
|
|
65
|
+
exports.getRecentUpdateLogs = getRecentUpdateLogs;
|
|
66
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
67
|
+
const path = __importStar(require("path"));
|
|
68
|
+
const fs_1 = require("./fs");
|
|
69
|
+
let _db = null;
|
|
70
|
+
function openDatabase(pmemPath) {
|
|
71
|
+
if (_db)
|
|
72
|
+
return _db;
|
|
73
|
+
(0, fs_1.ensureDir)(pmemPath);
|
|
74
|
+
const dbPath = path.join(pmemPath, 'pmem.db');
|
|
75
|
+
try {
|
|
76
|
+
_db = new better_sqlite3_1.default(dbPath);
|
|
77
|
+
_db.pragma('journal_mode = WAL');
|
|
78
|
+
_db.pragma('foreign_keys = ON');
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
_db = null;
|
|
82
|
+
if (err?.code === 'SQLITE_NOTADB') {
|
|
83
|
+
const msg = `.pmem/pmem.db exists but is not a valid SQLite database.\n` +
|
|
84
|
+
`Back up the file if needed, then run: pmem rebuild --full`;
|
|
85
|
+
throw new Error(msg);
|
|
86
|
+
}
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
return _db;
|
|
90
|
+
}
|
|
91
|
+
function closeDatabase() {
|
|
92
|
+
if (_db) {
|
|
93
|
+
_db.close();
|
|
94
|
+
_db = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function getDatabase() {
|
|
98
|
+
return _db;
|
|
99
|
+
}
|
|
100
|
+
function createSchema(db) {
|
|
101
|
+
db.exec(`
|
|
102
|
+
CREATE TABLE IF NOT EXISTS schema_meta (
|
|
103
|
+
key TEXT PRIMARY KEY,
|
|
104
|
+
value TEXT NOT NULL
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
CREATE TABLE IF NOT EXISTS cards (
|
|
108
|
+
id TEXT PRIMARY KEY,
|
|
109
|
+
type TEXT NOT NULL,
|
|
110
|
+
title TEXT NOT NULL,
|
|
111
|
+
status TEXT,
|
|
112
|
+
priority TEXT,
|
|
113
|
+
file_path TEXT NOT NULL UNIQUE,
|
|
114
|
+
summary TEXT,
|
|
115
|
+
schema_version TEXT,
|
|
116
|
+
card_version INTEGER DEFAULT 1,
|
|
117
|
+
created_at TEXT,
|
|
118
|
+
updated_at TEXT,
|
|
119
|
+
last_verified_at TEXT,
|
|
120
|
+
file_hash TEXT NOT NULL,
|
|
121
|
+
frontmatter_hash TEXT NOT NULL,
|
|
122
|
+
body_hash TEXT NOT NULL,
|
|
123
|
+
token_count INTEGER DEFAULT 0,
|
|
124
|
+
section_count INTEGER DEFAULT 0,
|
|
125
|
+
is_deleted INTEGER DEFAULT 0,
|
|
126
|
+
is_candidate INTEGER DEFAULT 0
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
CREATE TABLE IF NOT EXISTS edges (
|
|
130
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
131
|
+
from_id TEXT NOT NULL,
|
|
132
|
+
to_id TEXT NOT NULL,
|
|
133
|
+
type TEXT NOT NULL,
|
|
134
|
+
source TEXT NOT NULL DEFAULT 'explicit',
|
|
135
|
+
confidence REAL DEFAULT 1.0,
|
|
136
|
+
created_at TEXT,
|
|
137
|
+
updated_at TEXT,
|
|
138
|
+
UNIQUE(from_id, to_id, type, source)
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
CREATE TABLE IF NOT EXISTS aliases (
|
|
142
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
143
|
+
card_id TEXT NOT NULL,
|
|
144
|
+
alias TEXT NOT NULL,
|
|
145
|
+
normalized_alias TEXT NOT NULL,
|
|
146
|
+
language TEXT,
|
|
147
|
+
UNIQUE(card_id, normalized_alias)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE TABLE IF NOT EXISTS tags (
|
|
151
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
152
|
+
card_id TEXT NOT NULL,
|
|
153
|
+
tag TEXT NOT NULL,
|
|
154
|
+
normalized_tag TEXT NOT NULL,
|
|
155
|
+
UNIQUE(card_id, normalized_tag)
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
CREATE TABLE IF NOT EXISTS paths (
|
|
159
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
160
|
+
card_id TEXT NOT NULL,
|
|
161
|
+
path TEXT NOT NULL,
|
|
162
|
+
relation TEXT NOT NULL,
|
|
163
|
+
UNIQUE(card_id, path, relation)
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
CREATE TABLE IF NOT EXISTS dirty_flags (
|
|
167
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
168
|
+
scope TEXT NOT NULL,
|
|
169
|
+
target TEXT NOT NULL,
|
|
170
|
+
reason TEXT NOT NULL,
|
|
171
|
+
created_at TEXT NOT NULL,
|
|
172
|
+
resolved_at TEXT,
|
|
173
|
+
session_id TEXT
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
177
|
+
id TEXT PRIMARY KEY,
|
|
178
|
+
agent_name TEXT,
|
|
179
|
+
started_at TEXT NOT NULL,
|
|
180
|
+
ended_at TEXT,
|
|
181
|
+
task_summary TEXT,
|
|
182
|
+
base_index_hash TEXT,
|
|
183
|
+
status TEXT,
|
|
184
|
+
dirty INTEGER DEFAULT 0
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
CREATE TABLE IF NOT EXISTS update_log (
|
|
188
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
189
|
+
action TEXT NOT NULL,
|
|
190
|
+
summary TEXT,
|
|
191
|
+
session_id TEXT,
|
|
192
|
+
created_at TEXT NOT NULL,
|
|
193
|
+
affected_cards TEXT,
|
|
194
|
+
affected_paths TEXT,
|
|
195
|
+
success INTEGER NOT NULL,
|
|
196
|
+
error TEXT
|
|
197
|
+
);
|
|
198
|
+
`);
|
|
199
|
+
}
|
|
200
|
+
function hasFTS5(db) {
|
|
201
|
+
try {
|
|
202
|
+
db.exec("CREATE VIRTUAL TABLE IF NOT EXISTS _fts5_test USING fts5(content); DROP TABLE IF EXISTS _fts5_test;");
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function createFTS5(db) {
|
|
210
|
+
if (!hasFTS5(db))
|
|
211
|
+
return;
|
|
212
|
+
db.exec(`
|
|
213
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS card_fts USING fts5(
|
|
214
|
+
card_id UNINDEXED,
|
|
215
|
+
title,
|
|
216
|
+
summary,
|
|
217
|
+
body,
|
|
218
|
+
aliases,
|
|
219
|
+
tags
|
|
220
|
+
);
|
|
221
|
+
`);
|
|
222
|
+
}
|
|
223
|
+
function getSchemaVersion(db) {
|
|
224
|
+
try {
|
|
225
|
+
const row = db.prepare("SELECT value FROM schema_meta WHERE key = 'schema_version'").get();
|
|
226
|
+
return row?.value ?? null;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function setSchemaVersion(db, version) {
|
|
233
|
+
db.prepare("INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', ?)").run(version);
|
|
234
|
+
}
|
|
235
|
+
// Bulk insert helpers using transactions
|
|
236
|
+
function upsertCard(db, card) {
|
|
237
|
+
db.prepare(`
|
|
238
|
+
INSERT OR REPLACE INTO cards (id, type, title, status, priority, file_path, summary,
|
|
239
|
+
schema_version, card_version, created_at, updated_at, last_verified_at,
|
|
240
|
+
file_hash, frontmatter_hash, body_hash, token_count, section_count, is_deleted, is_candidate)
|
|
241
|
+
VALUES (@id, @type, @title, @status, @priority, @file_path, @summary,
|
|
242
|
+
@schema_version, @card_version, @created_at, @updated_at, @last_verified_at,
|
|
243
|
+
@file_hash, @frontmatter_hash, @body_hash, @token_count, @section_count, @is_deleted, @is_candidate)
|
|
244
|
+
`).run(card);
|
|
245
|
+
}
|
|
246
|
+
function deleteCardEdges(db, cardId) {
|
|
247
|
+
db.prepare("DELETE FROM edges WHERE from_id = ?").run(cardId);
|
|
248
|
+
}
|
|
249
|
+
function insertEdge(db, edge) {
|
|
250
|
+
db.prepare(`
|
|
251
|
+
INSERT OR IGNORE INTO edges (from_id, to_id, type, source, confidence, created_at, updated_at)
|
|
252
|
+
VALUES (@from_id, @to_id, @type, @source, @confidence, @created_at, @updated_at)
|
|
253
|
+
`).run(edge);
|
|
254
|
+
}
|
|
255
|
+
function deleteCardAliases(db, cardId) {
|
|
256
|
+
db.prepare("DELETE FROM aliases WHERE card_id = ?").run(cardId);
|
|
257
|
+
}
|
|
258
|
+
function insertAlias(db, cardId, alias, language) {
|
|
259
|
+
const normalized = alias.toLowerCase().trim();
|
|
260
|
+
db.prepare("INSERT OR IGNORE INTO aliases (card_id, alias, normalized_alias, language) VALUES (?, ?, ?, ?)")
|
|
261
|
+
.run(cardId, alias, normalized, language ?? null);
|
|
262
|
+
}
|
|
263
|
+
function deleteCardTags(db, cardId) {
|
|
264
|
+
db.prepare("DELETE FROM tags WHERE card_id = ?").run(cardId);
|
|
265
|
+
}
|
|
266
|
+
function insertTag(db, cardId, tag) {
|
|
267
|
+
const normalized = tag.toLowerCase().trim();
|
|
268
|
+
db.prepare("INSERT OR IGNORE INTO tags (card_id, tag, normalized_tag) VALUES (?, ?, ?)")
|
|
269
|
+
.run(cardId, tag, normalized);
|
|
270
|
+
}
|
|
271
|
+
function deleteCardPaths(db, cardId) {
|
|
272
|
+
db.prepare("DELETE FROM paths WHERE card_id = ?").run(cardId);
|
|
273
|
+
}
|
|
274
|
+
function insertPath(db, cardId, filePath, relation) {
|
|
275
|
+
db.prepare("INSERT OR IGNORE INTO paths (card_id, path, relation) VALUES (?, ?, ?)")
|
|
276
|
+
.run(cardId, filePath, relation);
|
|
277
|
+
}
|
|
278
|
+
function clearAllTables(db) {
|
|
279
|
+
db.exec(`
|
|
280
|
+
DELETE FROM paths;
|
|
281
|
+
DELETE FROM tags;
|
|
282
|
+
DELETE FROM aliases;
|
|
283
|
+
DELETE FROM edges;
|
|
284
|
+
DELETE FROM cards;
|
|
285
|
+
DELETE FROM dirty_flags;
|
|
286
|
+
DELETE FROM update_log;
|
|
287
|
+
DELETE FROM sessions;
|
|
288
|
+
`);
|
|
289
|
+
}
|
|
290
|
+
function getCardHash(db, filePath) {
|
|
291
|
+
const row = db.prepare("SELECT file_hash, frontmatter_hash, body_hash FROM cards WHERE file_path = ?").get(filePath);
|
|
292
|
+
return row ?? null;
|
|
293
|
+
}
|
|
294
|
+
// === P1: dirty_flags helpers ===
|
|
295
|
+
function insertDirtyFlag(db, scope, target, reason, sessionId) {
|
|
296
|
+
db.prepare("INSERT INTO dirty_flags (scope, target, reason, created_at, session_id) VALUES (?, ?, ?, ?, ?)").run(scope, target, reason, new Date().toISOString(), sessionId ?? null);
|
|
297
|
+
}
|
|
298
|
+
function resolveDirtyFlags(db, scope, target) {
|
|
299
|
+
const now = new Date().toISOString();
|
|
300
|
+
if (scope && target) {
|
|
301
|
+
return db.prepare("UPDATE dirty_flags SET resolved_at = ? WHERE scope = ? AND target = ? AND resolved_at IS NULL").run(now, scope, target).changes;
|
|
302
|
+
}
|
|
303
|
+
return db.prepare("UPDATE dirty_flags SET resolved_at = ? WHERE resolved_at IS NULL").run(now).changes;
|
|
304
|
+
}
|
|
305
|
+
function getUnresolvedDirtyFlags(db) {
|
|
306
|
+
return db.prepare("SELECT scope, target, reason, created_at FROM dirty_flags WHERE resolved_at IS NULL ORDER BY created_at DESC").all();
|
|
307
|
+
}
|
|
308
|
+
// === P1: sessions helpers ===
|
|
309
|
+
function startSession(db, id, agentName) {
|
|
310
|
+
db.prepare("INSERT OR REPLACE INTO sessions (id, agent_name, started_at, status, dirty) VALUES (?, ?, ?, 'active', 0)").run(id, agentName ?? null, new Date().toISOString());
|
|
311
|
+
}
|
|
312
|
+
function endSession(db, id, status, taskSummary) {
|
|
313
|
+
db.prepare("UPDATE sessions SET ended_at = ?, status = ?, task_summary = ? WHERE id = ?").run(new Date().toISOString(), status ?? 'completed', taskSummary ?? null, id);
|
|
314
|
+
}
|
|
315
|
+
function getActiveSession(db) {
|
|
316
|
+
const row = db.prepare("SELECT id, agent_name, started_at FROM sessions WHERE ended_at IS NULL ORDER BY started_at DESC LIMIT 1").get();
|
|
317
|
+
return row ?? null;
|
|
318
|
+
}
|
|
319
|
+
// === P1: update_log helpers ===
|
|
320
|
+
function insertUpdateLog(db, action, summary, sessionId, affectedCards, success, error) {
|
|
321
|
+
db.prepare("INSERT INTO update_log (action, summary, session_id, created_at, affected_cards, affected_paths, success, error) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(action, summary ?? null, sessionId ?? null, new Date().toISOString(), affectedCards ? JSON.stringify(affectedCards) : null, null, success !== false ? 1 : 0, error ?? null);
|
|
322
|
+
}
|
|
323
|
+
function getRecentUpdateLogs(db, limit = 10) {
|
|
324
|
+
return db.prepare("SELECT action, summary, created_at, success FROM update_log ORDER BY created_at DESC LIMIT ?").all(limit);
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/core/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,SAAS,EAAE,MAAM,UAAU,CAAC;AAExE,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,MAAa,GAAG,MAAM,CAQ9F"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatOutput = formatOutput;
|
|
4
|
+
function formatOutput(result, format, budget = 1600) {
|
|
5
|
+
switch (format) {
|
|
6
|
+
case 'compact': return formatCompact(result);
|
|
7
|
+
case 'json': return formatJson(result);
|
|
8
|
+
case 'paths': return formatPaths(result);
|
|
9
|
+
case 'pack': return formatPack(result, budget);
|
|
10
|
+
default: return formatCompact(result);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function formatCompact(result) {
|
|
14
|
+
const r = result;
|
|
15
|
+
if (r.query !== undefined) {
|
|
16
|
+
return formatAskCompact(r);
|
|
17
|
+
}
|
|
18
|
+
if (r.project !== undefined) {
|
|
19
|
+
return formatRecallCompact(r);
|
|
20
|
+
}
|
|
21
|
+
if (r.related !== undefined) {
|
|
22
|
+
return formatRelatedCompact(r);
|
|
23
|
+
}
|
|
24
|
+
if (r.trace !== undefined) {
|
|
25
|
+
return formatTraceCompact(r);
|
|
26
|
+
}
|
|
27
|
+
return String(result);
|
|
28
|
+
}
|
|
29
|
+
function formatJson(result) {
|
|
30
|
+
return JSON.stringify(result, null, 2);
|
|
31
|
+
}
|
|
32
|
+
function formatPaths(result) {
|
|
33
|
+
const r = result;
|
|
34
|
+
const paths = [];
|
|
35
|
+
if (Array.isArray(r.recommended_files)) {
|
|
36
|
+
paths.push(...r.recommended_files);
|
|
37
|
+
}
|
|
38
|
+
else if (Array.isArray(r.recommendedRead)) {
|
|
39
|
+
paths.push(...r.recommendedRead);
|
|
40
|
+
}
|
|
41
|
+
else if (Array.isArray(r.mustRead)) {
|
|
42
|
+
paths.push(...r.mustRead);
|
|
43
|
+
}
|
|
44
|
+
if (Array.isArray(r.evidencePaths)) {
|
|
45
|
+
for (const p of r.evidencePaths) {
|
|
46
|
+
if (!paths.includes(p))
|
|
47
|
+
paths.push(p);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (Array.isArray(r.matched)) {
|
|
51
|
+
for (const m of r.matched) {
|
|
52
|
+
if (m.file && !paths.includes(m.file))
|
|
53
|
+
paths.push(m.file);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return paths.join('\n');
|
|
57
|
+
}
|
|
58
|
+
function formatPack(result, budget) {
|
|
59
|
+
const r = result;
|
|
60
|
+
const parts = [];
|
|
61
|
+
let used = 0;
|
|
62
|
+
function add(line, cost) {
|
|
63
|
+
const c = cost ?? Math.ceil(line.length / 4);
|
|
64
|
+
if (used + c > budget)
|
|
65
|
+
return false;
|
|
66
|
+
parts.push(line);
|
|
67
|
+
used += c;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (r.project) {
|
|
71
|
+
if (!add(`PROJECT: ${r.project}`))
|
|
72
|
+
return parts.join('\n');
|
|
73
|
+
}
|
|
74
|
+
if (r.stage) {
|
|
75
|
+
if (!add(`STAGE: ${r.stage}`))
|
|
76
|
+
return parts.join('\n');
|
|
77
|
+
}
|
|
78
|
+
if (r.focus) {
|
|
79
|
+
if (!add(`FOCUS: ${r.focus}`))
|
|
80
|
+
return parts.join('\n');
|
|
81
|
+
}
|
|
82
|
+
if (r.query && add(`\nQUERY: ${r.query}`)) {
|
|
83
|
+
if (Array.isArray(r.matched)) {
|
|
84
|
+
for (const m of r.matched) {
|
|
85
|
+
if (!add(` - ${m.id} (${m.matchType || m.match_type}, score: ${m.score ?? m.confidence ?? '?'})`))
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(r.recommended_files)) {
|
|
91
|
+
if (add('\nRECOMMENDED:')) {
|
|
92
|
+
for (const f of r.recommended_files) {
|
|
93
|
+
if (!add(` ${f}`))
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (Array.isArray(r.recommendedRead)) {
|
|
99
|
+
if (add('\nRECOMMENDED:')) {
|
|
100
|
+
for (const f of r.recommendedRead) {
|
|
101
|
+
if (!add(` ${f}`))
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return parts.join('\n');
|
|
107
|
+
}
|
|
108
|
+
function formatRecallCompact(r) {
|
|
109
|
+
const lines = [];
|
|
110
|
+
lines.push(`PROJECT: ${r.project || 'Unknown'}`);
|
|
111
|
+
if (r.stage)
|
|
112
|
+
lines.push(`STAGE: ${r.stage}`);
|
|
113
|
+
if (r.focus) {
|
|
114
|
+
lines.push('');
|
|
115
|
+
lines.push(`FOCUS: ${r.focus}`);
|
|
116
|
+
}
|
|
117
|
+
if (r.next) {
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push('NEXT:');
|
|
120
|
+
lines.push(`${r.next}`);
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(r.state) && r.state.length > 0) {
|
|
123
|
+
lines.push('');
|
|
124
|
+
lines.push('STATE:');
|
|
125
|
+
for (const s of r.state) {
|
|
126
|
+
lines.push(` ${s}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (Array.isArray(r.mustRead) && r.mustRead.length > 0) {
|
|
130
|
+
lines.push('');
|
|
131
|
+
lines.push('READ_IF_NEEDED:');
|
|
132
|
+
for (const f of r.mustRead) {
|
|
133
|
+
lines.push(` ${f}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return lines.join('\n');
|
|
137
|
+
}
|
|
138
|
+
function formatAskCompact(r) {
|
|
139
|
+
const lines = [];
|
|
140
|
+
lines.push(`Query: ${r.query}`);
|
|
141
|
+
const matched = r.matched;
|
|
142
|
+
if (matched && matched.length > 0) {
|
|
143
|
+
const direct = matched.filter(m => m.matchType !== 'graph_expansion' && m.match_type !== 'graph_expansion');
|
|
144
|
+
const expanded = matched.filter(m => m.matchType === 'graph_expansion' || m.match_type === 'graph_expansion');
|
|
145
|
+
if (direct.length > 0) {
|
|
146
|
+
lines.push('\nMatched:');
|
|
147
|
+
for (const m of direct) {
|
|
148
|
+
lines.push(` - ${m.id} by ${m.matchType || m.match_type}: "${m.title}"`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (expanded.length > 0) {
|
|
152
|
+
lines.push('\nExpanded:');
|
|
153
|
+
for (const m of expanded) {
|
|
154
|
+
lines.push(` - ${m.id} via ${m.edgeType || m.edge_type || 'related'} (d=${m.graphDistance || m.graph_distance || 1})`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
lines.push('\nNo matching memory cards found.');
|
|
160
|
+
}
|
|
161
|
+
const recFiles = Array.isArray(r.recommended_files) ? r.recommended_files : [];
|
|
162
|
+
const recRead = Array.isArray(r.recommendedRead) ? r.recommendedRead : [];
|
|
163
|
+
if (recFiles.length > 0) {
|
|
164
|
+
lines.push('\nRecommended:');
|
|
165
|
+
for (const f of recFiles.slice(0, 6)) {
|
|
166
|
+
lines.push(` ${f}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (recRead.length > 0) {
|
|
170
|
+
lines.push('\nRecommended:');
|
|
171
|
+
for (const f of recRead.slice(0, 6)) {
|
|
172
|
+
lines.push(` ${f}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (!matched || matched.length === 0) {
|
|
176
|
+
lines.push('\nTry:');
|
|
177
|
+
lines.push(' pmem recall — full project context');
|
|
178
|
+
lines.push(' pmem ask "<keyword>" — try a different query');
|
|
179
|
+
lines.push(' Check card aliases and tags — frontmatter alias: / tags:');
|
|
180
|
+
}
|
|
181
|
+
return lines.join('\n');
|
|
182
|
+
}
|
|
183
|
+
function formatRelatedCompact(r) {
|
|
184
|
+
const lines = [];
|
|
185
|
+
lines.push(`${r.id}`);
|
|
186
|
+
lines.push(`Type: ${r.type}`);
|
|
187
|
+
lines.push(`Title: ${r.title}`);
|
|
188
|
+
if (r.status)
|
|
189
|
+
lines.push(`Status: ${r.status}`);
|
|
190
|
+
const related = r.related;
|
|
191
|
+
if (related && related.length > 0) {
|
|
192
|
+
lines.push('\nDirect Relations:');
|
|
193
|
+
for (const rel of related) {
|
|
194
|
+
const prefix = rel.direction === 'in' ? '<-' : '';
|
|
195
|
+
lines.push(` ${prefix}${rel.type}: ${rel.targetId} (${rel.targetTitle})`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return lines.join('\n');
|
|
199
|
+
}
|
|
200
|
+
function formatTraceCompact(r) {
|
|
201
|
+
const lines = [];
|
|
202
|
+
lines.push(`Trace for ${r.id}:`);
|
|
203
|
+
lines.push(`Type: ${r.type}`);
|
|
204
|
+
lines.push(`Title: ${r.title}`);
|
|
205
|
+
if (r.file)
|
|
206
|
+
lines.push(`File: ${r.file}`);
|
|
207
|
+
if (Array.isArray(r.dependsOn) && r.dependsOn.length > 0) {
|
|
208
|
+
lines.push('\nDepends On:');
|
|
209
|
+
for (const d of r.dependsOn) {
|
|
210
|
+
lines.push(` - ${d.id} (${d.title || ''})`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (Array.isArray(r.dependedBy) && r.dependedBy.length > 0) {
|
|
214
|
+
lines.push('\nDepended On By:');
|
|
215
|
+
for (const d of r.dependedBy) {
|
|
216
|
+
lines.push(` - ${d.id} (${d.title || ''})`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return lines.join('\n');
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/core/format.ts"],"names":[],"mappings":";;AAEA,oCAQC;AARD,SAAgB,YAAY,CAAC,MAAe,EAAE,MAAiB,EAAE,SAAiB,IAAI;IACpF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAe;IACpC,MAAM,CAAC,GAAG,MAAiC,CAAC;IAE5C,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,MAAe;IACjC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,iBAA8B,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,eAA4B,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,QAAqB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,aAAyB,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAyC,EAAE,CAAC;YAC5D,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAc,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,MAAe,EAAE,MAAc;IACjD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,SAAS,GAAG,CAAC,IAAY,EAAE,IAAa;QACtC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,GAAG,MAAM;YAAE,OAAO,KAAK,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,IAAI,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAyC,EAAE,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,GAAG,GAAG,CAAC;oBAAE,MAAM;YAC5G,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,iBAA6B,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,MAAM;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,eAA2B,EAAE,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,MAAM;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,CAA0B;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,KAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAiB,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAK,CAAC,CAAC,QAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAoB,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,CAA0B;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAqD,CAAC;IACxE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB,IAAI,CAAC,CAAC,UAAU,KAAK,iBAAiB,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB,IAAI,CAAC,CAAC,UAAU,KAAK,iBAAiB,CAAC,CAAC;QAE9G,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,OAAO,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,iBAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,eAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IAExF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,CAA0B;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAqD,CAAC;IACxE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,CAA0B;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAK,CAAC,CAAC,SAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAA2C,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAK,CAAC,CAAC,UAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAA4C,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function ensureDir(dirPath: string): void;
|
|
2
|
+
export declare function writeFile(filePath: string, content: string): void;
|
|
3
|
+
export declare function atomicWrite(filePath: string, content: string): void;
|
|
4
|
+
export declare function readFile(filePath: string): string | null;
|
|
5
|
+
export declare function listFiles(dirPath: string, pattern: RegExp): string[];
|
|
6
|
+
export declare function fileExists(filePath: string): boolean;
|
|
7
|
+
export declare function removeFile(filePath: string): void;
|
|
8
|
+
export declare function copyFile(src: string, dest: string): void;
|
|
9
|
+
export declare function acquireLock(lockPath: string, timeoutMs?: number): boolean;
|
|
10
|
+
export declare function releaseLock(lockPath: string): void;
|
|
11
|
+
export declare function isLockStale(lockPath: string, staleAfterMs?: number): boolean;
|
|
12
|
+
export declare function breakLock(lockPath: string): void;
|
|
13
|
+
export declare function readJson<T>(filePath: string): T | null;
|
|
14
|
+
export declare function writeJson(filePath: string, data: unknown): void;
|
|
15
|
+
export declare function getFileMtime(filePath: string): number | null;
|
|
16
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQnE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAapE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAGD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMjD;AAGD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGxD;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAc/E;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMlD;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,MAAc,GAAG,OAAO,CAOnF;AAGD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEhD;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAQtD;AAGD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAE/D;AAGD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM5D"}
|