@tznthou/ccrecall 0.4.8 → 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/README.md +27 -51
- package/README_ZH.md +27 -52
- package/dist/api/routes.d.ts +0 -10
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +4 -354
- package/dist/api/routes.js.map +1 -1
- package/dist/api/server.js +3 -3
- package/dist/api/server.js.map +1 -1
- package/dist/core/database.d.ts +14 -49
- package/dist/core/database.d.ts.map +1 -1
- package/dist/core/database.js +104 -225
- package/dist/core/database.js.map +1 -1
- package/dist/core/indexer.d.ts.map +1 -1
- package/dist/core/indexer.js +0 -1
- package/dist/core/indexer.js.map +1 -1
- package/dist/core/maintenance-coordinator.d.ts +3 -9
- package/dist/core/maintenance-coordinator.d.ts.map +1 -1
- package/dist/core/maintenance-coordinator.js +4 -24
- package/dist/core/maintenance-coordinator.js.map +1 -1
- package/dist/core/summarizer.d.ts.map +1 -1
- package/dist/core/summarizer.js +0 -22
- package/dist/core/summarizer.js.map +1 -1
- package/dist/core/types.d.ts +0 -87
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.js +0 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/journal.d.ts +0 -11
- package/dist/cli/journal.d.ts.map +0 -1
- package/dist/cli/journal.js +0 -111
- package/dist/cli/journal.js.map +0 -1
- package/dist/core/lint.d.ts +0 -17
- package/dist/core/lint.d.ts.map +0 -1
- package/dist/core/lint.js +0 -51
- package/dist/core/lint.js.map +0 -1
- package/dist/core/outcome-extractor.d.ts +0 -6
- package/dist/core/outcome-extractor.d.ts.map +0 -1
- package/dist/core/outcome-extractor.js +0 -39
- package/dist/core/outcome-extractor.js.map +0 -1
- package/dist/core/outcome-scorer.d.ts +0 -8
- package/dist/core/outcome-scorer.d.ts.map +0 -1
- package/dist/core/outcome-scorer.js +0 -103
- package/dist/core/outcome-scorer.js.map +0 -1
package/dist/api/routes.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import { URL } from 'node:url';
|
|
2
2
|
import { sendJson, parseJsonBody } from './server.js';
|
|
3
3
|
import { MemoryService } from '../core/memory-service.js';
|
|
4
|
-
import { runLint } from '../core/lint.js';
|
|
5
4
|
import { scrubErrorMessage } from '../core/log-safe.js';
|
|
6
|
-
import { scoreKnowledgeBearing } from '../core/outcome-scorer.js';
|
|
7
5
|
import { applyRowBudget, DEFAULT_MAX_TOKENS, DEFAULT_PER_ROW_CHAR_CAP } from '../core/token-budget.js';
|
|
8
6
|
import { appendRecallTelemetry } from '../core/recall-telemetry.js';
|
|
9
|
-
import { deriveDepth } from '../core/types.js';
|
|
10
|
-
const VALID_MEMORY_TYPES = new Set([
|
|
11
|
-
'decision', 'discovery', 'preference', 'pattern', 'feedback', 'query',
|
|
12
|
-
]);
|
|
13
7
|
const LOOPBACK_HOSTS = new Set(['127.0.0.1', '::1', 'localhost']);
|
|
14
8
|
function isLoopbackOrigin(origin) {
|
|
15
9
|
if (!origin)
|
|
@@ -29,13 +23,6 @@ function memorySource(m) {
|
|
|
29
23
|
return `${m.sessionId}:session`;
|
|
30
24
|
return `memory:${m.id}`;
|
|
31
25
|
}
|
|
32
|
-
function optionalString(value, field) {
|
|
33
|
-
if (value == null)
|
|
34
|
-
return { value: null };
|
|
35
|
-
if (typeof value === 'string')
|
|
36
|
-
return { value };
|
|
37
|
-
return { error: `${field} must be string or null` };
|
|
38
|
-
}
|
|
39
26
|
function validateSessionEndBody(raw) {
|
|
40
27
|
if (!raw || typeof raw !== 'object')
|
|
41
28
|
return { error: 'body must be JSON object' };
|
|
@@ -43,95 +30,7 @@ function validateSessionEndBody(raw) {
|
|
|
43
30
|
if (typeof b.sessionId !== 'string' || b.sessionId.trim() === '') {
|
|
44
31
|
return { error: 'sessionId must be non-empty string' };
|
|
45
32
|
}
|
|
46
|
-
|
|
47
|
-
return { error: 'dryRun must be boolean' };
|
|
48
|
-
}
|
|
49
|
-
return { sessionId: b.sessionId, dryRun: b.dryRun === true };
|
|
50
|
-
}
|
|
51
|
-
export function inferConfidence(outcome) {
|
|
52
|
-
if (outcome === 'committed')
|
|
53
|
-
return 0.9;
|
|
54
|
-
if (outcome === 'tested')
|
|
55
|
-
return 0.8;
|
|
56
|
-
return 0.7;
|
|
57
|
-
}
|
|
58
|
-
/** P1 (#21): hook auto-harvester 改寫 session_journal 不寫 memories;
|
|
59
|
-
* manual recall_save 仍直寫 memories。promote 路徑 (C4) 會把 journal entry
|
|
60
|
-
* 搬到 memories table 並設 confidence。
|
|
61
|
-
*
|
|
62
|
-
* Score 重算: summarizer 已用 scorer 過 noise/process-report hard floor,
|
|
63
|
-
* 但 score + reasons metadata 沒儲在 sessions.harvest_text。重算成本低
|
|
64
|
-
* (regex 對 <2KB 文字),換 schema 不變的代價可接受。 */
|
|
65
|
-
export function buildJournalCandidate(session) {
|
|
66
|
-
const harvestText = session.harvestText?.trim();
|
|
67
|
-
if (!harvestText)
|
|
68
|
-
return null;
|
|
69
|
-
const result = scoreKnowledgeBearing(harvestText);
|
|
70
|
-
// Defense in depth: 單元測試可能直接餵 SessionMeta, hard floor 仍應生效。
|
|
71
|
-
if (result.reasons.includes('noise') || result.reasons.includes('process-report'))
|
|
72
|
-
return null;
|
|
73
|
-
return {
|
|
74
|
-
sessionId: session.id,
|
|
75
|
-
messageId: null,
|
|
76
|
-
content: harvestText,
|
|
77
|
-
score: result.score,
|
|
78
|
-
reasonsJson: JSON.stringify(result.reasons),
|
|
79
|
-
projectId: session.projectId ?? null,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function validateSaveBody(raw) {
|
|
83
|
-
if (!raw || typeof raw !== 'object')
|
|
84
|
-
return { error: 'body must be JSON object' };
|
|
85
|
-
const b = raw;
|
|
86
|
-
if (typeof b.content !== 'string' || b.content.trim() === '') {
|
|
87
|
-
return { error: 'content must be non-empty string' };
|
|
88
|
-
}
|
|
89
|
-
if (typeof b.type !== 'string' || !VALID_MEMORY_TYPES.has(b.type)) {
|
|
90
|
-
return { error: `type must be one of: ${[...VALID_MEMORY_TYPES].join(', ')}` };
|
|
91
|
-
}
|
|
92
|
-
const sessionIdResult = optionalString(b.sessionId, 'sessionId');
|
|
93
|
-
if ('error' in sessionIdResult)
|
|
94
|
-
return sessionIdResult;
|
|
95
|
-
const messageIdResult = optionalString(b.messageId, 'messageId');
|
|
96
|
-
if ('error' in messageIdResult)
|
|
97
|
-
return messageIdResult;
|
|
98
|
-
const projectIdResult = optionalString(b.projectId, 'projectId');
|
|
99
|
-
if ('error' in projectIdResult)
|
|
100
|
-
return projectIdResult;
|
|
101
|
-
let confidence;
|
|
102
|
-
if (b.confidence != null) {
|
|
103
|
-
if (typeof b.confidence !== 'number' || b.confidence < 0 || b.confidence > 1) {
|
|
104
|
-
return { error: 'confidence must be number in [0, 1]' };
|
|
105
|
-
}
|
|
106
|
-
confidence = b.confidence;
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
content: b.content,
|
|
110
|
-
type: b.type,
|
|
111
|
-
sessionId: sessionIdResult.value,
|
|
112
|
-
messageId: messageIdResult.value,
|
|
113
|
-
confidence,
|
|
114
|
-
projectId: projectIdResult.value,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
function topicWithDepth(t) {
|
|
118
|
-
return { ...t, depth: deriveDepth(t.mentionCount) };
|
|
119
|
-
}
|
|
120
|
-
const SNAPSHOT_MAX_BYTES = 64 * 1024;
|
|
121
|
-
function validateCheckpointBody(raw) {
|
|
122
|
-
if (!raw || typeof raw !== 'object')
|
|
123
|
-
return { error: 'body must be JSON object' };
|
|
124
|
-
const b = raw;
|
|
125
|
-
if (typeof b.sessionId !== 'string' || b.sessionId.trim() === '') {
|
|
126
|
-
return { error: 'sessionId must be non-empty string' };
|
|
127
|
-
}
|
|
128
|
-
if (typeof b.snapshot !== 'string' || b.snapshot.trim() === '') {
|
|
129
|
-
return { error: 'snapshot must be non-empty string' };
|
|
130
|
-
}
|
|
131
|
-
if (Buffer.byteLength(b.snapshot, 'utf8') > SNAPSHOT_MAX_BYTES) {
|
|
132
|
-
return { error: `snapshot must be <= ${SNAPSHOT_MAX_BYTES} bytes` };
|
|
133
|
-
}
|
|
134
|
-
return { sessionId: b.sessionId, snapshot: b.snapshot };
|
|
33
|
+
return { sessionId: b.sessionId };
|
|
135
34
|
}
|
|
136
35
|
const startTime = Date.now();
|
|
137
36
|
/** Coalesces concurrent rescue calls onto one underlying run. The SessionEnd
|
|
@@ -162,7 +61,6 @@ export function createRequestHandler(db, opts = {}) {
|
|
|
162
61
|
sessionCount: db.getMainSessionCount(),
|
|
163
62
|
memoryCount: db.getMemoryCount(),
|
|
164
63
|
topicCount: db.getTopicCount(),
|
|
165
|
-
journalPendingCount: db.getJournalPendingCount(),
|
|
166
64
|
uptime: Math.floor((Date.now() - startTime) / 1000),
|
|
167
65
|
lastIntegrityCheckAt: integrity?.at ?? null,
|
|
168
66
|
lastIntegrityCheckOk: integrity?.ok ?? null,
|
|
@@ -326,141 +224,6 @@ export function createRequestHandler(db, opts = {}) {
|
|
|
326
224
|
});
|
|
327
225
|
return;
|
|
328
226
|
}
|
|
329
|
-
// GET /memory/context?session_id=...
|
|
330
|
-
if (req.method === 'GET' && path === '/memory/context') {
|
|
331
|
-
const sessionId = url.searchParams.get('session_id') ?? '';
|
|
332
|
-
// TODO: integrate with session context lookup
|
|
333
|
-
sendJson(res, 200, { summary: null, decisions: [], filesTouched: [], sessionId });
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
// POST /memory/save
|
|
337
|
-
if (req.method === 'POST' && path === '/memory/save') {
|
|
338
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
339
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
const body = await parseJsonBody(req, res);
|
|
343
|
-
if (!body.ok)
|
|
344
|
-
return;
|
|
345
|
-
const v = validateSaveBody(body.parsed);
|
|
346
|
-
if ('error' in v) {
|
|
347
|
-
sendJson(res, 400, v);
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
const id = db.saveMemory(v);
|
|
351
|
-
sendJson(res, 200, { ok: true, id });
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
// POST /journal/promote — manual promote a journal entry to memories (#21 P1)
|
|
355
|
-
if (req.method === 'POST' && path === '/journal/promote') {
|
|
356
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
357
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
const body = await parseJsonBody(req, res);
|
|
361
|
-
if (!body.ok)
|
|
362
|
-
return;
|
|
363
|
-
const b = body.parsed;
|
|
364
|
-
if (typeof b.id !== 'number' || !Number.isInteger(b.id) || b.id <= 0) {
|
|
365
|
-
sendJson(res, 400, { error: 'id must be positive integer' });
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
const type = (typeof b.type === 'string' && VALID_MEMORY_TYPES.has(b.type))
|
|
369
|
-
? b.type
|
|
370
|
-
: 'discovery';
|
|
371
|
-
let confidence = 0.7;
|
|
372
|
-
if (b.confidence != null) {
|
|
373
|
-
if (typeof b.confidence !== 'number' || b.confidence < 0 || b.confidence > 1) {
|
|
374
|
-
sendJson(res, 400, { error: 'confidence must be number in [0, 1]' });
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
confidence = b.confidence;
|
|
378
|
-
}
|
|
379
|
-
const entry = db.getJournalEntry(b.id);
|
|
380
|
-
if (!entry) {
|
|
381
|
-
sendJson(res, 404, { error: 'journal entry not found' });
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
|
-
if (entry.status !== 'pending') {
|
|
385
|
-
sendJson(res, 409, { error: `journal entry status='${entry.status}', expected 'pending'` });
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
let memoryId = 0;
|
|
389
|
-
try {
|
|
390
|
-
db.runTransaction(() => {
|
|
391
|
-
memoryId = db.saveMemory({
|
|
392
|
-
sessionId: entry.sessionId,
|
|
393
|
-
messageId: entry.messageId,
|
|
394
|
-
content: entry.content,
|
|
395
|
-
type,
|
|
396
|
-
confidence,
|
|
397
|
-
projectId: entry.projectId,
|
|
398
|
-
});
|
|
399
|
-
// 繼承 session topics → memory_topics, 重建 knowledge_map (對齊 v0.2.x harvest 行為)
|
|
400
|
-
if (entry.sessionId) {
|
|
401
|
-
const session = db.getSessionById(entry.sessionId);
|
|
402
|
-
if (session) {
|
|
403
|
-
const sessionTopics = db.getSessionTopicKeys(session.id);
|
|
404
|
-
if (sessionTopics.length > 0) {
|
|
405
|
-
db.saveMemoryTopics(memoryId, session.projectId, sessionTopics);
|
|
406
|
-
}
|
|
407
|
-
db.rebuildKnowledgeMap(session.projectId);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
// Race guard: pre-read 後 status 若被改 (multi-daemon, 直接 SQL),
|
|
411
|
-
// promoteJournalEntry 會回 false; throw 觸發 transaction rollback,
|
|
412
|
-
// 避免 memories 多一筆 orphan 而 journal status 沒翻 promoted。
|
|
413
|
-
if (!db.promoteJournalEntry(entry.id, memoryId)) {
|
|
414
|
-
throw new Error('JOURNAL_RACE: status changed during transaction');
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
catch (err) {
|
|
419
|
-
if (err.message?.startsWith('JOURNAL_RACE:')) {
|
|
420
|
-
sendJson(res, 409, { error: 'journal entry status changed during transaction; re-fetch and retry' });
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
423
|
-
throw err;
|
|
424
|
-
}
|
|
425
|
-
sendJson(res, 200, { ok: true, memoryId, journalId: entry.id });
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
// GET /journal/pending?limit=N — list pending journal entries for promote/reject (#21 P1 fix-up)
|
|
429
|
-
if (req.method === 'GET' && path === '/journal/pending') {
|
|
430
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
431
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
const rawLimit = parseInt(url.searchParams.get('limit') ?? '20', 10);
|
|
435
|
-
const limit = Number.isNaN(rawLimit) || rawLimit < 1 ? 20 : Math.min(rawLimit, 100);
|
|
436
|
-
const entries = db.getPendingJournalEntries(limit);
|
|
437
|
-
sendJson(res, 200, { entries, total: entries.length });
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
// POST /journal/reject — mark a journal entry as rejected (decay sweep cleans up)
|
|
441
|
-
if (req.method === 'POST' && path === '/journal/reject') {
|
|
442
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
443
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
const body = await parseJsonBody(req, res);
|
|
447
|
-
if (!body.ok)
|
|
448
|
-
return;
|
|
449
|
-
const b = body.parsed;
|
|
450
|
-
if (typeof b.id !== 'number' || !Number.isInteger(b.id) || b.id <= 0) {
|
|
451
|
-
sendJson(res, 400, { error: 'id must be positive integer' });
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
// Decay TTL: 7 days; sweep cron (C5) cleans up after expires_at
|
|
455
|
-
const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString();
|
|
456
|
-
const ok = db.rejectJournalEntry(b.id, expiresAt);
|
|
457
|
-
if (!ok) {
|
|
458
|
-
sendJson(res, 404, { error: 'journal entry not found or not pending' });
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
sendJson(res, 200, { ok: true, journalId: b.id, expiresAt });
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
227
|
// POST /session/end
|
|
465
228
|
if (req.method === 'POST' && path === '/session/end') {
|
|
466
229
|
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
@@ -479,7 +242,8 @@ export function createRequestHandler(db, opts = {}) {
|
|
|
479
242
|
if (!session && opts.rescueReindex) {
|
|
480
243
|
// Fresh-session race: hook fires before the daemon has indexed the
|
|
481
244
|
// JSONL. Run one reindex and retry — watcher will catch subsequent
|
|
482
|
-
// changes but
|
|
245
|
+
// changes but the extraction wrapper polling /session/last can't wait
|
|
246
|
+
// for the next debounce (#55 fix chain).
|
|
483
247
|
try {
|
|
484
248
|
await opts.rescueReindex();
|
|
485
249
|
}
|
|
@@ -492,121 +256,7 @@ export function createRequestHandler(db, opts = {}) {
|
|
|
492
256
|
sendJson(res, 404, { error: 'session not found' });
|
|
493
257
|
return;
|
|
494
258
|
}
|
|
495
|
-
|
|
496
|
-
if (!candidate) {
|
|
497
|
-
sendJson(res, 200, {
|
|
498
|
-
ok: true,
|
|
499
|
-
sessionId: v.sessionId,
|
|
500
|
-
journalSaved: [],
|
|
501
|
-
dryRun: v.dryRun,
|
|
502
|
-
reason: 'session has no harvest candidate',
|
|
503
|
-
});
|
|
504
|
-
return;
|
|
505
|
-
}
|
|
506
|
-
// P1 (#21): journal 用 content_hash UNIQUE INDEX dedup; saveJournalEntry
|
|
507
|
-
// 在重複 hash 時回 0。不再需要 v0.2.x 的 alreadyHarvested split-brain check;
|
|
508
|
-
// memory_topics / rebuildKnowledgeMap 留給 promote 路徑 (C4) 處理。
|
|
509
|
-
const savedIds = [];
|
|
510
|
-
if (!v.dryRun) {
|
|
511
|
-
const id = db.saveJournalEntry(candidate);
|
|
512
|
-
if (id > 0)
|
|
513
|
-
savedIds.push(id);
|
|
514
|
-
}
|
|
515
|
-
sendJson(res, 200, {
|
|
516
|
-
ok: true,
|
|
517
|
-
sessionId: v.sessionId,
|
|
518
|
-
journalSaved: savedIds,
|
|
519
|
-
dryRun: v.dryRun,
|
|
520
|
-
candidate: v.dryRun ? candidate : undefined,
|
|
521
|
-
});
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
// GET /metacognition/check?projectId=X[&topic=Y][&limit=N]
|
|
525
|
-
if (req.method === 'GET' && path === '/metacognition/check') {
|
|
526
|
-
// detail mode returns memory content; loopback gate matches POST mutation endpoints
|
|
527
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
528
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
529
|
-
return;
|
|
530
|
-
}
|
|
531
|
-
const projectId = url.searchParams.get('projectId');
|
|
532
|
-
if (!projectId) {
|
|
533
|
-
sendJson(res, 400, { error: 'projectId query param required' });
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
const topicParam = url.searchParams.get('topic');
|
|
537
|
-
const rawLimit = parseInt(url.searchParams.get('limit') ?? '10', 10);
|
|
538
|
-
const limit = Number.isNaN(rawLimit) || rawLimit < 1 ? 10 : Math.min(rawLimit, 50);
|
|
539
|
-
if (topicParam) {
|
|
540
|
-
// Detail mode
|
|
541
|
-
const topic = db.getTopic(topicParam, projectId);
|
|
542
|
-
if (!topic) {
|
|
543
|
-
sendJson(res, 404, { error: 'topic not found' });
|
|
544
|
-
return;
|
|
545
|
-
}
|
|
546
|
-
const related = db.getRelatedTopics(topicParam, projectId, 10);
|
|
547
|
-
const memories = db.getMemoriesByTopics(projectId, [topicParam], limit);
|
|
548
|
-
const detail = {
|
|
549
|
-
topicKey: topic.topicKey,
|
|
550
|
-
projectId: topic.projectId,
|
|
551
|
-
mentionCount: topic.mentionCount,
|
|
552
|
-
lastTouched: topic.lastTouched,
|
|
553
|
-
depth: deriveDepth(topic.mentionCount),
|
|
554
|
-
memories,
|
|
555
|
-
relatedTopics: related,
|
|
556
|
-
};
|
|
557
|
-
sendJson(res, 200, detail);
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
|
-
// Summary mode
|
|
561
|
-
const top = db.getKnowledgeMap(projectId, { limit, sortBy: 'mention' }).map(topicWithDepth);
|
|
562
|
-
const recent = db.getKnowledgeMap(projectId, { limit, sortBy: 'recent' }).map(topicWithDepth);
|
|
563
|
-
const stale = db.getKnowledgeMap(projectId, { limit, sortBy: 'stale' }).map(topicWithDepth);
|
|
564
|
-
const counts = db.getKnowledgeMapCounts(projectId);
|
|
565
|
-
const summary = {
|
|
566
|
-
projectId,
|
|
567
|
-
topTopics: top,
|
|
568
|
-
recentTopics: recent,
|
|
569
|
-
staleTopics: stale,
|
|
570
|
-
counts,
|
|
571
|
-
};
|
|
572
|
-
sendJson(res, 200, summary);
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
// POST /session/checkpoint
|
|
576
|
-
if (req.method === 'POST' && path === '/session/checkpoint') {
|
|
577
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
578
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
579
|
-
return;
|
|
580
|
-
}
|
|
581
|
-
const body = await parseJsonBody(req, res);
|
|
582
|
-
if (!body.ok)
|
|
583
|
-
return;
|
|
584
|
-
const v = validateCheckpointBody(body.parsed);
|
|
585
|
-
if ('error' in v) {
|
|
586
|
-
sendJson(res, 400, v);
|
|
587
|
-
return;
|
|
588
|
-
}
|
|
589
|
-
const session = db.getSessionById(v.sessionId);
|
|
590
|
-
if (!session) {
|
|
591
|
-
sendJson(res, 404, { error: 'session not found' });
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
const checkpointId = db.saveCheckpoint(session.id, session.projectId, v.snapshot);
|
|
595
|
-
const result = { ok: true, checkpointId };
|
|
596
|
-
sendJson(res, 200, result);
|
|
597
|
-
return;
|
|
598
|
-
}
|
|
599
|
-
// GET /lint/warnings — orphan / stale memory detection (Phase 4d)
|
|
600
|
-
if (req.method === 'GET' && path === '/lint/warnings') {
|
|
601
|
-
// Reveals memory metadata (ids, session refs, decay numbers) — same
|
|
602
|
-
// loopback gate as other introspection endpoints so a non-loopback
|
|
603
|
-
// origin cannot enumerate recall internals via a browser prefetch.
|
|
604
|
-
if (!isLoopbackOrigin(req.headers.origin)) {
|
|
605
|
-
sendJson(res, 403, { error: 'cross-origin requests forbidden' });
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
const report = runLint(db);
|
|
609
|
-
sendJson(res, 200, report);
|
|
259
|
+
sendJson(res, 200, { ok: true, sessionId: v.sessionId });
|
|
610
260
|
return;
|
|
611
261
|
}
|
|
612
262
|
// 404
|
package/dist/api/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAInE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;AAEjE,SAAS,gBAAgB,CAAC,MAA0B;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAA;QACrC,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAA;IAC1E,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,SAAS,UAAU,CAAA;IAChD,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE,CAAA;AACzB,CAAC;AAMD,SAAS,sBAAsB,CAC7B,GAAY;IAEZ,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAA;IACjF,MAAM,CAAC,GAAG,GAAqB,CAAA;IAC/B,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAA;IACxD,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAE5B;;;;;gCAKgC;AAChC,MAAM,UAAU,cAAc,CAAC,GAAwB;IACrD,IAAI,QAAQ,GAAyB,IAAI,CAAA;IACzC,OAAO,GAAG,EAAE;QACV,QAAQ,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,CAAA;QACrD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;AACH,CAAC;AAqBD,MAAM,UAAU,oBAAoB,CAClC,EAAY,EACZ,OAA8B,EAAE;IAEhC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,UAAU,aAAa,CACjC,GAAyB,EACzB,GAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACjE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAA;QAEzB,cAAc;QACd,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,IAAI,IAAI,CAAA;YAChE,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBACzB,YAAY,EAAE,EAAE,CAAC,mBAAmB,EAAE;gBACtC,WAAW,EAAE,EAAE,CAAC,cAAc,EAAE;gBAChC,UAAU,EAAE,EAAE,CAAC,aAAa,EAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;gBACnD,oBAAoB,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;gBAC3C,oBAAoB,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;aAC5C,CAAA;YACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAC1B,OAAM;QACR,CAAC;QAED,qFAAqF;QACrF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;gBAChE,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAA;gBAC7D,OAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACzC,wEAAwE;YACxE,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,uEAAuE;YACvE,kCAAkC;YAClC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;YAC1E,MAAM,WAAW,GAAG,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAA;YAChF,MAAM,OAAO,GAAG,CAAC,CAA6B,EAAW,EAAE;gBACzD,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;gBACvD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,WAAW,CAAA;YACvD,CAAC,CAAA;YACD,IAAI,IAAI,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACvC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnD,kEAAkE;gBAClE,qEAAqE;gBACrE,+DAA+D;gBAC/D,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;gBAC5B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC/E,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACrC,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAA;gBAC9D,OAAM;YACR,CAAC;YACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,8DAA8D;QAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YACrD,+EAA+E;YAC/E,0EAA0E;YAC1E,oDAAoD;YACpD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;gBAChE,OAAM;YACR,CAAC;YACD,MAAM,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;YACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;YACnE,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACtD,MAAM,SAAS,GAAG,YAAY,KAAK,IAAI;gBACrC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,GAAG,EAAE;oBACJ,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;oBACpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC5C,CAAC,CAAC,EAAE,CAAA;YAER,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC/G,OAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;YAChD,uEAAuE;YACvE,oEAAoE;YACpE,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI;gBACjC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC;gBAC3D,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;YACvE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;gBACvB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC,CAAA;YACH,MAAM,kBAAkB,GAAG,SAAS,KAAK,IAAI;gBAC3C,CAAC,CAAC,QAAQ,CAAC,UAAU;gBACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAEzE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,QAAQ;gBACR,kBAAkB;gBAClB,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,KAAK,EAAE,CAAC;gBACR,KAAK;aACN,CAAC,CAAA;YAEF,qBAAqB,CAAC;gBACpB,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,SAAS,EAAE,OAAO;gBAClB,KAAK;gBACL,SAAS;aACV,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,uEAAuE;QACvE,kEAAkE;QAClE,0EAA0E;QAC1E,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;gBAChE,OAAM;YACR,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAA;gBACpD,OAAM;YACR,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;YACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;YACnE,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACtD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;gBACtB,IAAI,YAAY,KAAK,IAAI;oBAAE,OAAO,kBAAkB,CAAA;gBACpD,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;gBACpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,EAAE,CAAA;YACJ,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAA;YAEvD,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC5D,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAA;YAC1E,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAEpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;gBACvB,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC,CAAC,CAAA;YAEH,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,QAAQ;gBACR,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,cAAc,EAAE,IAAI,CAAC,MAAM;gBAC3B,kBAAkB,EAAE,QAAQ,CAAC,UAAU;gBACvC,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,OAAO;gBACP,KAAK;aACN,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,oBAAoB;QACpB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;gBAChE,OAAM;YACR,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,OAAM;YACpB,MAAM,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;gBACrB,OAAM;YACR,CAAC;YACD,IAAI,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAC5C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,mEAAmE;gBACnE,mEAAmE;gBACnE,sEAAsE;gBACtE,yCAAyC;gBACzC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;gBAC5B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC9E,CAAC;gBACD,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAC1C,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;gBAClD,OAAM;YACR,CAAC;YACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QAED,MAAM;QACN,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAA;AACH,CAAC"}
|
package/dist/api/server.js
CHANGED
|
@@ -9,9 +9,9 @@ export function createServer(db, opts = {}) {
|
|
|
9
9
|
await handleRequest(req, res);
|
|
10
10
|
}
|
|
11
11
|
catch (err) {
|
|
12
|
-
// scrub before logging: SQLite errors can embed user
|
|
13
|
-
//
|
|
14
|
-
//
|
|
12
|
+
// scrub before logging: SQLite errors can embed user content (e.g.
|
|
13
|
+
// memory content via constraint violations) that may carry ANSI / CR
|
|
14
|
+
// control bytes. Pattern matches every other error log site.
|
|
15
15
|
console.error('Unhandled error:', scrubErrorMessage(err));
|
|
16
16
|
sendJson(res, 500, { error: 'Internal server error' });
|
|
17
17
|
}
|
package/dist/api/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,oBAAoB,EAA8B,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,UAAU,YAAY,CAAC,EAAY,EAAE,OAA8B,EAAE;IACzE,MAAM,aAAa,GAAG,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEpD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"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"}
|
package/dist/core/database.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import type { Project, SessionMeta, SearchOptions, SessionSearchPage, SessionFile, OutcomeStatus, FileHistoryEntry, SubagentSession, SessionFileInput, Memory, MemoryType, Topic
|
|
1
|
+
import type { Project, SessionMeta, SearchOptions, SessionSearchPage, SessionFile, OutcomeStatus, FileHistoryEntry, SubagentSession, SessionFileInput, Memory, MemoryType, Topic } from './types.js';
|
|
2
|
+
/** 64-bit signed hash for message_uuids (v24 dual-hash schema). First 8 bytes
|
|
3
|
+
* of SHA-256 read as a signed BigInt — exactly the SQLite INTEGER range, so
|
|
4
|
+
* uuid_hash doubles as the rowid (zero autoindex). Collision odds at ~400k
|
|
5
|
+
* rows ≈ 4e-9; a collision merely makes one replayed message skip indexing.
|
|
6
|
+
*
|
|
7
|
+
* ⚠️ Reading these values back REQUIRES `.safeIntegers(true)` on the statement:
|
|
8
|
+
* better-sqlite3 otherwise returns a lossy JS number for |v| > 2^53 and any
|
|
9
|
+
* Map<bigint, …> reverse lookup silently misses (dedup would silently die). */
|
|
10
|
+
export declare function hash64(s: string): bigint;
|
|
2
11
|
/** 寫入 memories 時使用的參數型別 */
|
|
3
12
|
export interface MemoryInput {
|
|
4
13
|
sessionId: string | null;
|
|
@@ -55,7 +64,6 @@ export interface IndexSessionParams {
|
|
|
55
64
|
tags?: string | null;
|
|
56
65
|
filesTouched?: string | null;
|
|
57
66
|
toolsUsed?: string | null;
|
|
58
|
-
harvestText?: string | null;
|
|
59
67
|
sessionFiles?: SessionFileInput[];
|
|
60
68
|
messages: MessageInput[];
|
|
61
69
|
}
|
|
@@ -167,7 +175,7 @@ export declare class Database {
|
|
|
167
175
|
getSubagentSessions(parentSessionId: string): SubagentSession[];
|
|
168
176
|
/** 刪除指定 parent session 的所有 subagent sessions */
|
|
169
177
|
deleteSubagentSessions(parentSessionId: string): void;
|
|
170
|
-
/** 刪除單一 subagent session
|
|
178
|
+
/** 刪除單一 subagent session。v24: message_uuids 無 FK CASCADE,手動清除。 */
|
|
171
179
|
deleteSubagentSession(subagentId: string): void;
|
|
172
180
|
/** 取得指定 parent session 的所有 subagent ID */
|
|
173
181
|
getSubagentSessionIds(parentSessionId: string): string[];
|
|
@@ -175,7 +183,9 @@ export declare class Database {
|
|
|
175
183
|
runTransaction(fn: () => void): void;
|
|
176
184
|
/** 一次取得所有 subagent sessions 的 file_mtime(增量比對用) */
|
|
177
185
|
getAllSubagentMtimes(): Map<string, string>;
|
|
178
|
-
/** 查詢 DB 中已存在的 uuid(用於跨 session 去重 resumed session replay
|
|
186
|
+
/** 查詢 DB 中已存在的 uuid(用於跨 session 去重 resumed session replay)。
|
|
187
|
+
* v24: message_uuids 只存 64-bit hash,查詢以 hash 比對、以 Map 反查還原
|
|
188
|
+
* 原 uuid — 簽名與回傳不變,indexer 端零改動。 */
|
|
179
189
|
getExistingUuids(uuids: string[], excludeSessionId: string): Set<string>;
|
|
180
190
|
indexSession(params: IndexSessionParams): void;
|
|
181
191
|
static readonly SEARCH_PAGE_SIZE = 30;
|
|
@@ -213,35 +223,6 @@ export declare class Database {
|
|
|
213
223
|
/** 正向查詢:某 session 操作了哪些檔案 */
|
|
214
224
|
getSessionFiles(sessionId: string): SessionFile[];
|
|
215
225
|
saveMemory(input: MemoryInput): number;
|
|
216
|
-
/** 寫入 journal 條目。content_hash 內部以 SHA-256 計算; 同 hash 第二次 INSERT
|
|
217
|
-
* 會被 UNIQUE INDEX 擋下並回傳 0 (idempotency)。
|
|
218
|
-
*
|
|
219
|
-
* 注意: better-sqlite3 的 INSERT OR IGNORE 在 IGNORE'd 時, lastInsertRowid
|
|
220
|
-
* 不會歸零 (保留前次成功 insert 的 rowid)。所以用 info.changes 判 dedup。 */
|
|
221
|
-
saveJournalEntry(input: JournalEntryInput): number;
|
|
222
|
-
/** 給 /health endpoint 用; promotion path manual-only,user 看 pending 數決定是否 invoke。 */
|
|
223
|
-
getJournalPendingCount(): number;
|
|
224
|
-
getJournalEntry(id: number): JournalEntry | null;
|
|
225
|
-
/** 升級 journal entry 為 promoted; caller 已透過 saveMemory 寫入 memories table
|
|
226
|
-
* 並拿到 memoryId,本方法只更新 journal 的 status + 回填 promoted_memory_id。
|
|
227
|
-
* 回 false 表示 entry 不存在或已不在 'pending' 狀態 (idempotent)。 */
|
|
228
|
-
promoteJournalEntry(id: number, memoryId: number): boolean;
|
|
229
|
-
/** List pending journal entries (newest first) with content preview for
|
|
230
|
-
* surfacing on the manual promotion path. content 截 200 chars 避免 response
|
|
231
|
-
* blob 過大; caller 想看完整內容可走 promote 看 memories 或直接 sqlite3。 */
|
|
232
|
-
getPendingJournalEntries(limit: number): JournalEntryPreview[];
|
|
233
|
-
/** 標記 entry 為 rejected, expires_at 設為 now+7d (decay sweep 才真的刪除)。
|
|
234
|
-
* caller 傳 expiresAt ISO string; 回 false 表示 entry 不存在或非 pending。 */
|
|
235
|
-
rejectJournalEntry(id: number, expiresAt: string): boolean;
|
|
236
|
-
/** Decay sweep (P1 step 7):
|
|
237
|
-
* - rejected entries past expires_at → DELETE
|
|
238
|
-
* - pending entries older than 30 days → DELETE
|
|
239
|
-
* promoted entries 留著作 audit trail (有 promoted_memory_id 指 memories.id)。
|
|
240
|
-
* manual memories 在 memories table,本方法完全不碰。 */
|
|
241
|
-
sweepJournal(now?: Date): {
|
|
242
|
-
rejectedDeleted: number;
|
|
243
|
-
pendingDeleted: number;
|
|
244
|
-
};
|
|
245
226
|
queryMemories(query: string, limit: number, projectId?: string | null): Memory[];
|
|
246
227
|
/** Short-token LIKE fallback for queryMemories. Trigram tokenizer cannot
|
|
247
228
|
* match queries shorter than 3 chars; LIKE scans content. EFFECTIVE_CONFIDENCE
|
|
@@ -320,25 +301,9 @@ export declare class Database {
|
|
|
320
301
|
from sessions.project_id (not the denormalized column) so repo renames / reindex won't
|
|
321
302
|
leave stale cross-project associations. */
|
|
322
303
|
rebuildKnowledgeMap(projectId: string): void;
|
|
323
|
-
private static readonly TOPIC_ORDER_BY;
|
|
324
|
-
getKnowledgeMap(projectId: string, opts?: {
|
|
325
|
-
limit?: number;
|
|
326
|
-
sortBy?: 'mention' | 'recent' | 'stale';
|
|
327
|
-
}): Topic[];
|
|
328
304
|
getMemoriesByTopics(projectId: string, topicKeys: string[], limit: number): Memory[];
|
|
329
305
|
getTopicCount(projectId?: string): number;
|
|
330
306
|
getSessionTopicKeys(sessionId: string): string[];
|
|
331
307
|
getTopic(topicKey: string, projectId: string): Topic | null;
|
|
332
|
-
/** 共現 topics(與目標共享 session 或 memory),按共現次數排序。
|
|
333
|
-
project_id 透過 JOIN sessions 決定,避免 memory_topics 過時的 project_id 汙染。 */
|
|
334
|
-
getRelatedTopics(topicKey: string, projectId: string, limit: number): string[];
|
|
335
|
-
getKnowledgeMapCounts(projectId: string): {
|
|
336
|
-
totalTopics: number;
|
|
337
|
-
totalMemories: number;
|
|
338
|
-
totalSessions: number;
|
|
339
|
-
};
|
|
340
|
-
saveCheckpoint(sessionId: string, projectId: string, snapshotText: string): number;
|
|
341
|
-
getCheckpointById(id: number): SessionCheckpoint | null;
|
|
342
|
-
getCheckpointsBySessionId(sessionId: string): SessionCheckpoint[];
|
|
343
308
|
}
|
|
344
309
|
//# sourceMappingURL=database.d.ts.map
|