cawdex 1.35.76 → 1.35.77

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.
@@ -0,0 +1,611 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { basename, join } from 'node:path';
5
+ import { globSync } from 'glob';
6
+ import { getConfigDir } from './config.js';
7
+ import { deleteSession, generateSessionId } from './sessions.js';
8
+ import * as mempalace from './mempalace/index.js';
9
+ function homePath(homeDir) {
10
+ return homeDir || homedir();
11
+ }
12
+ function importsDir() {
13
+ return join(getConfigDir(), 'imports');
14
+ }
15
+ function ledgerPath() {
16
+ return join(importsDir(), 'ledger.jsonl');
17
+ }
18
+ function runsDir() {
19
+ return join(importsDir(), 'runs');
20
+ }
21
+ function sessionsDir() {
22
+ return join(getConfigDir(), 'sessions');
23
+ }
24
+ function ensureImportDirs() {
25
+ mkdirSync(importsDir(), { recursive: true });
26
+ mkdirSync(runsDir(), { recursive: true });
27
+ }
28
+ function readJsonl(path) {
29
+ const out = [];
30
+ const raw = readFileSync(path, 'utf-8');
31
+ const lines = raw.split(/\r?\n/).filter((line) => line.trim().length > 0);
32
+ for (const line of lines) {
33
+ try {
34
+ out.push(JSON.parse(line));
35
+ }
36
+ catch {
37
+ // skip malformed rows
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ function toIsoDate(input) {
43
+ if (typeof input === 'number' && Number.isFinite(input)) {
44
+ // Some histories store unix milliseconds.
45
+ const ms = input > 2_000_000_000 ? input : input * 1000;
46
+ const d = new Date(ms);
47
+ return Number.isNaN(d.getTime()) ? null : d.toISOString();
48
+ }
49
+ if (typeof input === 'string' && input.trim()) {
50
+ const d = new Date(input);
51
+ return Number.isNaN(d.getTime()) ? null : d.toISOString();
52
+ }
53
+ return null;
54
+ }
55
+ function sha256(text) {
56
+ return createHash('sha256').update(text).digest('hex');
57
+ }
58
+ function flattenText(value) {
59
+ if (typeof value === 'string')
60
+ return value;
61
+ if (value === null || value === undefined)
62
+ return '';
63
+ if (Array.isArray(value))
64
+ return value.map((item) => flattenText(item)).filter(Boolean).join('\n');
65
+ if (typeof value !== 'object')
66
+ return String(value);
67
+ const obj = value;
68
+ if (typeof obj.text === 'string')
69
+ return obj.text;
70
+ if (typeof obj.content === 'string')
71
+ return obj.content;
72
+ if (obj.content !== undefined)
73
+ return flattenText(obj.content);
74
+ return '';
75
+ }
76
+ function normalizeRole(rawRole) {
77
+ const role = String(rawRole || '').toLowerCase();
78
+ if (role === 'user' || role === 'assistant' || role === 'system' || role === 'tool')
79
+ return role;
80
+ if (role === 'developer')
81
+ return 'system';
82
+ return 'system';
83
+ }
84
+ function pushMessage(messages, role, content) {
85
+ const trimmed = content.trim();
86
+ if (!trimmed)
87
+ return;
88
+ messages.push({ role, content: trimmed });
89
+ }
90
+ function parseClaudeThread(path) {
91
+ const warnings = [];
92
+ const raw = readFileSync(path, 'utf-8');
93
+ const rows = readJsonl(path);
94
+ const messages = [];
95
+ let threadId = basename(path, '.jsonl');
96
+ let cwd = process.cwd();
97
+ let model = 'unknown';
98
+ let provider = 'Claude';
99
+ let createdAt = null;
100
+ let updatedAt = null;
101
+ for (const row of rows) {
102
+ if (!row || typeof row !== 'object')
103
+ continue;
104
+ const r = row;
105
+ const ts = toIsoDate(r.timestamp);
106
+ if (ts) {
107
+ if (!createdAt)
108
+ createdAt = ts;
109
+ updatedAt = ts;
110
+ }
111
+ if (typeof r.sessionId === 'string' && r.sessionId.trim())
112
+ threadId = r.sessionId;
113
+ if (typeof r.cwd === 'string' && r.cwd.trim())
114
+ cwd = r.cwd;
115
+ if (r.type === 'user') {
116
+ const msg = r.message;
117
+ pushMessage(messages, 'user', flattenText(msg?.content));
118
+ continue;
119
+ }
120
+ if (r.type === 'assistant') {
121
+ const msg = r.message;
122
+ const m = msg?.model;
123
+ if (typeof m === 'string' && m.trim())
124
+ model = m;
125
+ pushMessage(messages, 'assistant', flattenText(msg?.content));
126
+ continue;
127
+ }
128
+ if (r.type === 'last-prompt') {
129
+ pushMessage(messages, 'user', flattenText(r.lastPrompt));
130
+ continue;
131
+ }
132
+ }
133
+ if (messages.length === 0) {
134
+ warnings.push({ sourcePath: path, warning: 'no importable messages found' });
135
+ return { thread: null, warnings };
136
+ }
137
+ const nowIso = new Date().toISOString();
138
+ const thread = {
139
+ sourcePath: path,
140
+ sourceThreadId: threadId,
141
+ name: `Claude ${threadId}`,
142
+ cwd,
143
+ model,
144
+ provider,
145
+ messages,
146
+ createdAt: createdAt || nowIso,
147
+ updatedAt: updatedAt || createdAt || nowIso,
148
+ contentSha256: sha256(raw),
149
+ };
150
+ return { thread, warnings };
151
+ }
152
+ function parseCodexThread(path) {
153
+ const warnings = [];
154
+ const raw = readFileSync(path, 'utf-8');
155
+ const rows = readJsonl(path);
156
+ const messages = [];
157
+ let threadId = basename(path, '.jsonl');
158
+ let name = `Codex ${threadId}`;
159
+ let cwd = process.cwd();
160
+ let model = 'unknown';
161
+ let provider = 'Codex';
162
+ let createdAt = null;
163
+ let updatedAt = null;
164
+ for (const row of rows) {
165
+ if (!row || typeof row !== 'object')
166
+ continue;
167
+ const r = row;
168
+ const ts = toIsoDate(r.timestamp);
169
+ if (ts) {
170
+ if (!createdAt)
171
+ createdAt = ts;
172
+ updatedAt = ts;
173
+ }
174
+ if (r.type === 'session_meta') {
175
+ const payload = r.payload;
176
+ if (typeof payload?.id === 'string' && payload.id.trim())
177
+ threadId = payload.id;
178
+ if (typeof payload?.cwd === 'string' && payload.cwd.trim())
179
+ cwd = payload.cwd;
180
+ if (typeof payload?.model_provider === 'string' && payload.model_provider.trim())
181
+ provider = payload.model_provider;
182
+ continue;
183
+ }
184
+ if (r.type === 'turn_context') {
185
+ const payload = r.payload;
186
+ if (typeof payload?.model === 'string' && payload.model.trim())
187
+ model = payload.model;
188
+ continue;
189
+ }
190
+ if (r.type !== 'response_item')
191
+ continue;
192
+ const payload = r.payload;
193
+ if (!payload || payload.type !== 'message')
194
+ continue;
195
+ const role = normalizeRole(payload.role);
196
+ const content = flattenText(payload.content);
197
+ pushMessage(messages, role, content);
198
+ }
199
+ if (messages.length === 0) {
200
+ warnings.push({ sourcePath: path, warning: 'no importable messages found' });
201
+ return { thread: null, warnings };
202
+ }
203
+ name = name.slice(0, 120);
204
+ const nowIso = new Date().toISOString();
205
+ const thread = {
206
+ sourcePath: path,
207
+ sourceThreadId: threadId,
208
+ name,
209
+ cwd,
210
+ model,
211
+ provider,
212
+ messages,
213
+ createdAt: createdAt || nowIso,
214
+ updatedAt: updatedAt || createdAt || nowIso,
215
+ contentSha256: sha256(raw),
216
+ };
217
+ return { thread, warnings };
218
+ }
219
+ function parseMempalaceDrawers(homeDir) {
220
+ const warnings = [];
221
+ const roots = [
222
+ join(homeDir, '.mempalace', 'session_notes'),
223
+ join(homeDir, '.mempalace', 'identity.txt'),
224
+ ];
225
+ const mdFiles = existsSync(roots[0])
226
+ ? globSync('**/*.{md,markdown,txt}', { cwd: roots[0], absolute: true, nodir: true })
227
+ : [];
228
+ const files = [...mdFiles];
229
+ if (existsSync(roots[1]))
230
+ files.push(roots[1]);
231
+ const drawers = [];
232
+ for (const file of files) {
233
+ try {
234
+ const content = readFileSync(file, 'utf-8').trim();
235
+ if (!content)
236
+ continue;
237
+ drawers.push({
238
+ sourcePath: file,
239
+ content,
240
+ contentSha256: sha256(content),
241
+ wing: 'imports',
242
+ room: 'mempalace',
243
+ tags: ['import', 'source:mempalace', `file:${basename(file).toLowerCase()}`],
244
+ importance: 0.55,
245
+ });
246
+ }
247
+ catch {
248
+ warnings.push({ sourcePath: file, warning: 'failed to read file' });
249
+ }
250
+ }
251
+ return { drawers, warnings };
252
+ }
253
+ function readLedger() {
254
+ const path = ledgerPath();
255
+ if (!existsSync(path))
256
+ return [];
257
+ const rows = readJsonl(path);
258
+ const out = [];
259
+ for (const row of rows) {
260
+ if (!row || typeof row !== 'object')
261
+ continue;
262
+ const r = row;
263
+ if (!r.runId || !r.source || !r.kind || !r.sourcePath || !r.contentSha256 || !r.importedId || !r.importedAt)
264
+ continue;
265
+ out.push({
266
+ runId: r.runId,
267
+ source: r.source,
268
+ kind: r.kind,
269
+ sourcePath: r.sourcePath,
270
+ contentSha256: r.contentSha256,
271
+ importedId: r.importedId,
272
+ importedAt: r.importedAt,
273
+ messageCount: r.messageCount,
274
+ });
275
+ }
276
+ return out;
277
+ }
278
+ function appendLedger(rows) {
279
+ if (rows.length === 0)
280
+ return;
281
+ ensureImportDirs();
282
+ const payload = rows.map((r) => JSON.stringify(r)).join('\n') + '\n';
283
+ if (!existsSync(ledgerPath())) {
284
+ writeFileSync(ledgerPath(), payload, 'utf-8');
285
+ return;
286
+ }
287
+ const prev = readFileSync(ledgerPath(), 'utf-8');
288
+ writeFileSync(ledgerPath(), prev + payload, 'utf-8');
289
+ }
290
+ function persistedSessionPath(sessionId) {
291
+ return join(sessionsDir(), `${sessionId}.json`);
292
+ }
293
+ function persistImportedSession(thread) {
294
+ const id = generateSessionId();
295
+ mkdirSync(sessionsDir(), { recursive: true });
296
+ const session = {
297
+ id,
298
+ name: thread.name,
299
+ cwd: thread.cwd,
300
+ model: thread.model,
301
+ provider: thread.provider,
302
+ messages: thread.messages,
303
+ createdAt: thread.createdAt,
304
+ updatedAt: thread.updatedAt,
305
+ tokenCount: 0,
306
+ turnCount: thread.messages.filter((m) => m.role === 'user').length,
307
+ mode: 'dev',
308
+ };
309
+ writeFileSync(persistedSessionPath(id), JSON.stringify(session, null, 2), 'utf-8');
310
+ return id;
311
+ }
312
+ function saveRunManifest(manifest) {
313
+ ensureImportDirs();
314
+ writeFileSync(join(runsDir(), `${manifest.runId}.json`), JSON.stringify(manifest, null, 2), 'utf-8');
315
+ }
316
+ function sourceRoots(homeDir) {
317
+ return {
318
+ claude: join(homeDir, '.claude'),
319
+ codex: join(homeDir, '.codex'),
320
+ mempalace: join(homeDir, '.mempalace'),
321
+ };
322
+ }
323
+ function sourceFiles(source, homeDir) {
324
+ const roots = sourceRoots(homeDir);
325
+ if (source === 'claude') {
326
+ const cwd = join(roots.claude, 'projects');
327
+ if (!existsSync(cwd))
328
+ return [];
329
+ return globSync('**/*.jsonl', { cwd, absolute: true, nodir: true });
330
+ }
331
+ if (source === 'codex') {
332
+ const cwd = join(roots.codex, 'sessions');
333
+ if (!existsSync(cwd))
334
+ return [];
335
+ return globSync('**/*.jsonl', { cwd, absolute: true, nodir: true });
336
+ }
337
+ const notes = join(roots.mempalace, 'session_notes');
338
+ const out = [];
339
+ if (existsSync(notes))
340
+ out.push(...globSync('**/*.{md,markdown,txt}', { cwd: notes, absolute: true, nodir: true }));
341
+ const identity = join(roots.mempalace, 'identity.txt');
342
+ if (existsSync(identity))
343
+ out.push(identity);
344
+ return out;
345
+ }
346
+ function parseThreads(source, homeDir) {
347
+ const warnings = [];
348
+ const files = sourceFiles(source, homeDir);
349
+ const threads = [];
350
+ if (source === 'mempalace')
351
+ return { threads, warnings };
352
+ for (const file of files) {
353
+ const parsed = source === 'claude' ? parseClaudeThread(file) : parseCodexThread(file);
354
+ warnings.push(...parsed.warnings);
355
+ if (parsed.thread)
356
+ threads.push(parsed.thread);
357
+ }
358
+ threads.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
359
+ return { threads, warnings };
360
+ }
361
+ function ledgerKey(source, kind, sourcePath, contentSha256) {
362
+ return `${source}:${kind}:${sourcePath}:${contentSha256}`;
363
+ }
364
+ export function scanImportSources(options = {}) {
365
+ const homeDir = homePath(options.homeDir);
366
+ const roots = sourceRoots(homeDir);
367
+ return ['claude', 'codex', 'mempalace'].map((source) => {
368
+ const rootPath = roots[source];
369
+ const detected = existsSync(rootPath);
370
+ const artifactsFound = detected ? sourceFiles(source, homeDir).length : 0;
371
+ let note = '';
372
+ if (detected && artifactsFound === 0)
373
+ note = 'installed but no importable artifacts found';
374
+ if (!detected)
375
+ note = 'not detected';
376
+ return { source, detected, rootPath, artifactsFound, note };
377
+ });
378
+ }
379
+ export function previewImport(source, options = {}) {
380
+ const homeDir = homePath(options.homeDir);
381
+ const limit = Math.max(1, Math.min(options.limit ?? 20, 200));
382
+ const ledger = readLedger();
383
+ const known = new Set(ledger.map((row) => ledgerKey(row.source, row.kind, row.sourcePath, row.contentSha256)));
384
+ if (source === 'mempalace') {
385
+ const parsed = parseMempalaceDrawers(homeDir);
386
+ let already = 0;
387
+ let totalImportable = 0;
388
+ for (const drawer of parsed.drawers) {
389
+ const k = ledgerKey(source, 'drawer', drawer.sourcePath, drawer.contentSha256);
390
+ if (known.has(k))
391
+ already++;
392
+ else
393
+ totalImportable++;
394
+ }
395
+ return {
396
+ source,
397
+ artifactsFound: parsed.drawers.length,
398
+ importableArtifacts: totalImportable,
399
+ alreadyImportedArtifacts: already,
400
+ totalMessages: 0,
401
+ threads: [],
402
+ warnings: parsed.warnings.map((w) => `${w.sourcePath}: ${w.warning}`),
403
+ };
404
+ }
405
+ const parsed = parseThreads(source, homeDir);
406
+ let already = 0;
407
+ let totalImportable = 0;
408
+ let totalMessages = 0;
409
+ const threads = [];
410
+ for (const thread of parsed.threads.slice(0, limit)) {
411
+ const k = ledgerKey(source, 'session', thread.sourcePath, thread.contentSha256);
412
+ if (known.has(k))
413
+ already++;
414
+ else
415
+ totalImportable++;
416
+ totalMessages += thread.messages.length;
417
+ threads.push({
418
+ sourcePath: thread.sourcePath,
419
+ sourceThreadId: thread.sourceThreadId,
420
+ name: thread.name,
421
+ cwd: thread.cwd,
422
+ model: thread.model,
423
+ provider: thread.provider,
424
+ messageCount: thread.messages.length,
425
+ createdAt: thread.createdAt,
426
+ updatedAt: thread.updatedAt,
427
+ });
428
+ }
429
+ return {
430
+ source,
431
+ artifactsFound: parsed.threads.length,
432
+ importableArtifacts: totalImportable,
433
+ alreadyImportedArtifacts: already,
434
+ totalMessages,
435
+ threads,
436
+ warnings: parsed.warnings.map((w) => `${w.sourcePath}: ${w.warning}`),
437
+ };
438
+ }
439
+ export function runImport(source, options = {}) {
440
+ const homeDir = homePath(options.homeDir);
441
+ const cwd = options.cwd || process.cwd();
442
+ const limit = Math.max(1, Math.min(options.limit ?? 1000, 10_000));
443
+ const dryRun = options.dryRun === true;
444
+ const runId = `imp-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
445
+ const startedAt = new Date().toISOString();
446
+ const ledger = readLedger();
447
+ const known = new Set(ledger.map((row) => ledgerKey(row.source, row.kind, row.sourcePath, row.contentSha256)));
448
+ const newLedgerRows = [];
449
+ const warnings = [];
450
+ const createdSessionIds = [];
451
+ const createdDrawerIds = [];
452
+ let importedArtifacts = 0;
453
+ let skippedArtifacts = 0;
454
+ let importedMessages = 0;
455
+ let importedSessions = 0;
456
+ let importedDrawers = 0;
457
+ if (source === 'mempalace') {
458
+ const parsed = parseMempalaceDrawers(homeDir);
459
+ warnings.push(...parsed.warnings.map((w) => `${w.sourcePath}: ${w.warning}`));
460
+ for (const drawer of parsed.drawers.slice(0, limit)) {
461
+ const key = ledgerKey(source, 'drawer', drawer.sourcePath, drawer.contentSha256);
462
+ if (known.has(key)) {
463
+ skippedArtifacts++;
464
+ continue;
465
+ }
466
+ importedArtifacts++;
467
+ if (dryRun)
468
+ continue;
469
+ const saved = mempalace.addDrawer({
470
+ wing: drawer.wing,
471
+ room: drawer.room,
472
+ content: drawer.content,
473
+ tags: drawer.tags,
474
+ importance: drawer.importance,
475
+ scope: 'global',
476
+ cwd,
477
+ sourceSessionId: runId,
478
+ });
479
+ createdDrawerIds.push(saved.id);
480
+ importedDrawers++;
481
+ newLedgerRows.push({
482
+ runId,
483
+ source,
484
+ kind: 'drawer',
485
+ sourcePath: drawer.sourcePath,
486
+ contentSha256: drawer.contentSha256,
487
+ importedId: saved.id,
488
+ importedAt: new Date().toISOString(),
489
+ });
490
+ }
491
+ }
492
+ else {
493
+ const parsed = parseThreads(source, homeDir);
494
+ warnings.push(...parsed.warnings.map((w) => `${w.sourcePath}: ${w.warning}`));
495
+ for (const thread of parsed.threads.slice(0, limit)) {
496
+ const key = ledgerKey(source, 'session', thread.sourcePath, thread.contentSha256);
497
+ if (known.has(key)) {
498
+ skippedArtifacts++;
499
+ continue;
500
+ }
501
+ importedArtifacts++;
502
+ importedMessages += thread.messages.length;
503
+ if (dryRun)
504
+ continue;
505
+ const sessionId = persistImportedSession(thread);
506
+ createdSessionIds.push(sessionId);
507
+ importedSessions++;
508
+ newLedgerRows.push({
509
+ runId,
510
+ source,
511
+ kind: 'session',
512
+ sourcePath: thread.sourcePath,
513
+ contentSha256: thread.contentSha256,
514
+ importedId: sessionId,
515
+ importedAt: new Date().toISOString(),
516
+ messageCount: thread.messages.length,
517
+ });
518
+ }
519
+ }
520
+ if (!dryRun) {
521
+ appendLedger(newLedgerRows);
522
+ saveRunManifest({
523
+ runId,
524
+ source,
525
+ startedAt,
526
+ finishedAt: new Date().toISOString(),
527
+ createdSessionIds,
528
+ createdDrawerIds,
529
+ });
530
+ }
531
+ return {
532
+ runId,
533
+ source,
534
+ importedArtifacts,
535
+ skippedArtifacts,
536
+ importedMessages,
537
+ importedSessions,
538
+ importedDrawers,
539
+ warnings,
540
+ };
541
+ }
542
+ export function rollbackImport(runId, cwd = process.cwd()) {
543
+ const warnings = [];
544
+ const path = join(runsDir(), `${runId}.json`);
545
+ if (!existsSync(path)) {
546
+ return { runId, deletedSessions: 0, deletedDrawers: 0, warnings: ['run id not found'] };
547
+ }
548
+ const raw = readFileSync(path, 'utf-8');
549
+ const parsed = JSON.parse(raw);
550
+ let deletedSessions = 0;
551
+ let deletedDrawers = 0;
552
+ for (const id of parsed.createdSessionIds || []) {
553
+ if (deleteSession(id))
554
+ deletedSessions++;
555
+ }
556
+ for (const id of parsed.createdDrawerIds || []) {
557
+ const removed = mempalace.getGlobalStore().deleteDrawer(id)
558
+ || mempalace.getProjectStore(cwd).deleteDrawer(id);
559
+ if (removed)
560
+ deletedDrawers++;
561
+ }
562
+ // Remove ledger entries for this run.
563
+ const kept = readLedger().filter((row) => row.runId !== runId);
564
+ ensureImportDirs();
565
+ const payload = kept.map((row) => JSON.stringify(row)).join('\n');
566
+ writeFileSync(ledgerPath(), payload ? payload + '\n' : '', 'utf-8');
567
+ try {
568
+ rmSync(path, { force: true });
569
+ }
570
+ catch {
571
+ warnings.push('failed to remove run manifest');
572
+ }
573
+ return { runId, deletedSessions, deletedDrawers, warnings };
574
+ }
575
+ export function importStatus() {
576
+ const rows = readLedger();
577
+ const bySource = {
578
+ claude: { sessions: 0, drawers: 0 },
579
+ codex: { sessions: 0, drawers: 0 },
580
+ mempalace: { sessions: 0, drawers: 0 },
581
+ };
582
+ const runs = new Set();
583
+ let sessionsImported = 0;
584
+ let drawersImported = 0;
585
+ for (const row of rows) {
586
+ runs.add(row.runId);
587
+ if (row.kind === 'session') {
588
+ sessionsImported++;
589
+ bySource[row.source].sessions++;
590
+ }
591
+ else {
592
+ drawersImported++;
593
+ bySource[row.source].drawers++;
594
+ }
595
+ }
596
+ return {
597
+ ledgerEntries: rows.length,
598
+ runs: runs.size,
599
+ sessionsImported,
600
+ drawersImported,
601
+ bySource,
602
+ };
603
+ }
604
+ export const _internal = {
605
+ parseClaudeThread,
606
+ parseCodexThread,
607
+ parseMempalaceDrawers,
608
+ readLedger,
609
+ ledgerKey,
610
+ };
611
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"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"}