stellar-memory 0.8.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/api/routes/memories.js +5 -4
  2. package/dist/api/routes/memories.js.map +1 -1
  3. package/dist/api/websocket.d.ts +0 -6
  4. package/dist/api/websocket.js +1 -1
  5. package/dist/api/websocket.js.map +1 -1
  6. package/dist/engine/analytics.js +4 -33
  7. package/dist/engine/analytics.js.map +1 -1
  8. package/dist/engine/conflict.js +2 -4
  9. package/dist/engine/conflict.js.map +1 -1
  10. package/dist/engine/consolidation.js +3 -21
  11. package/dist/engine/consolidation.js.map +1 -1
  12. package/dist/engine/constellation.js +6 -14
  13. package/dist/engine/constellation.js.map +1 -1
  14. package/dist/engine/corona.js +3 -1
  15. package/dist/engine/corona.js.map +1 -1
  16. package/dist/engine/multiproject.js +6 -73
  17. package/dist/engine/multiproject.js.map +1 -1
  18. package/dist/engine/observation.d.ts +1 -42
  19. package/dist/engine/observation.js +4 -23
  20. package/dist/engine/observation.js.map +1 -1
  21. package/dist/engine/orbit.js +50 -11
  22. package/dist/engine/orbit.js.map +1 -1
  23. package/dist/engine/planet.d.ts +3 -0
  24. package/dist/engine/planet.js +16 -11
  25. package/dist/engine/planet.js.map +1 -1
  26. package/dist/engine/procedural.d.ts +0 -13
  27. package/dist/engine/procedural.js +2 -47
  28. package/dist/engine/procedural.js.map +1 -1
  29. package/dist/engine/services/commit-service.d.ts +29 -0
  30. package/dist/engine/services/commit-service.js +35 -0
  31. package/dist/engine/services/commit-service.js.map +1 -0
  32. package/dist/engine/services/index.d.ts +4 -0
  33. package/dist/engine/services/index.js +4 -0
  34. package/dist/engine/services/index.js.map +1 -0
  35. package/dist/engine/services/memory-service.d.ts +48 -0
  36. package/dist/engine/services/memory-service.js +85 -0
  37. package/dist/engine/services/memory-service.js.map +1 -0
  38. package/dist/engine/services/recall-service.d.ts +31 -0
  39. package/dist/engine/services/recall-service.js +35 -0
  40. package/dist/engine/services/recall-service.js.map +1 -0
  41. package/dist/engine/session-policy.d.ts +15 -0
  42. package/dist/engine/session-policy.js +103 -0
  43. package/dist/engine/session-policy.js.map +1 -0
  44. package/dist/engine/sun.d.ts +9 -5
  45. package/dist/engine/sun.js +128 -23
  46. package/dist/engine/sun.js.map +1 -1
  47. package/dist/engine/temporal.js +8 -67
  48. package/dist/engine/temporal.js.map +1 -1
  49. package/dist/engine/types.d.ts +0 -15
  50. package/dist/engine/types.js +0 -7
  51. package/dist/engine/types.js.map +1 -1
  52. package/dist/index.js +2 -2
  53. package/dist/index.js.map +1 -1
  54. package/dist/mcp/server.js +88 -123
  55. package/dist/mcp/server.js.map +1 -1
  56. package/dist/mcp/tools/analytics-handlers.d.ts +20 -0
  57. package/dist/mcp/tools/analytics-handlers.js +292 -0
  58. package/dist/mcp/tools/analytics-handlers.js.map +1 -0
  59. package/dist/mcp/tools/graph-handlers.d.ts +20 -0
  60. package/dist/mcp/tools/graph-handlers.js +126 -0
  61. package/dist/mcp/tools/graph-handlers.js.map +1 -0
  62. package/dist/mcp/tools/memory-handlers.d.ts +27 -0
  63. package/dist/mcp/tools/memory-handlers.js +177 -0
  64. package/dist/mcp/tools/memory-handlers.js.map +1 -0
  65. package/dist/mcp/tools/memory-tools.d.ts +19 -117
  66. package/dist/mcp/tools/memory-tools.js +19 -1032
  67. package/dist/mcp/tools/memory-tools.js.map +1 -1
  68. package/dist/mcp/tools/observation-handlers.d.ts +15 -0
  69. package/dist/mcp/tools/observation-handlers.js +74 -0
  70. package/dist/mcp/tools/observation-handlers.js.map +1 -0
  71. package/dist/mcp/tools/shared.d.ts +36 -0
  72. package/dist/mcp/tools/shared.js +71 -0
  73. package/dist/mcp/tools/shared.js.map +1 -0
  74. package/dist/mcp/tools/sun-handler.d.ts +12 -0
  75. package/dist/mcp/tools/sun-handler.js +35 -0
  76. package/dist/mcp/tools/sun-handler.js.map +1 -0
  77. package/dist/mcp/tools/system-handlers.d.ts +27 -0
  78. package/dist/mcp/tools/system-handlers.js +259 -0
  79. package/dist/mcp/tools/system-handlers.js.map +1 -0
  80. package/dist/mcp/tools/temporal-handlers.d.ts +15 -0
  81. package/dist/mcp/tools/temporal-handlers.js +82 -0
  82. package/dist/mcp/tools/temporal-handlers.js.map +1 -0
  83. package/dist/scanner/local/filesystem.d.ts +0 -2
  84. package/dist/scanner/local/filesystem.js +1 -5
  85. package/dist/scanner/local/filesystem.js.map +1 -1
  86. package/dist/scanner/local/git.d.ts +0 -5
  87. package/dist/scanner/local/git.js +1 -1
  88. package/dist/scanner/local/git.js.map +1 -1
  89. package/dist/scanner/metadata-scanner.d.ts +3 -14
  90. package/dist/scanner/metadata-scanner.js +10 -10
  91. package/dist/scanner/metadata-scanner.js.map +1 -1
  92. package/dist/service/scheduler.js +32 -13
  93. package/dist/service/scheduler.js.map +1 -1
  94. package/dist/storage/database.js +81 -2
  95. package/dist/storage/database.js.map +1 -1
  96. package/dist/storage/queries/analytics-queries.d.ts +59 -0
  97. package/dist/storage/queries/analytics-queries.js +265 -0
  98. package/dist/storage/queries/analytics-queries.js.map +1 -0
  99. package/dist/storage/queries/conflict-queries.d.ts +16 -0
  100. package/dist/storage/queries/conflict-queries.js +56 -0
  101. package/dist/storage/queries/conflict-queries.js.map +1 -0
  102. package/dist/storage/queries/constellation-queries.d.ts +18 -0
  103. package/dist/storage/queries/constellation-queries.js +101 -0
  104. package/dist/storage/queries/constellation-queries.js.map +1 -0
  105. package/dist/storage/queries/datasource-queries.d.ts +9 -0
  106. package/dist/storage/queries/datasource-queries.js +53 -0
  107. package/dist/storage/queries/datasource-queries.js.map +1 -0
  108. package/dist/storage/queries/memory-queries.d.ts +53 -0
  109. package/dist/storage/queries/memory-queries.js +415 -0
  110. package/dist/storage/queries/memory-queries.js.map +1 -0
  111. package/dist/storage/queries/observation-queries.d.ts +7 -0
  112. package/dist/storage/queries/observation-queries.js +23 -0
  113. package/dist/storage/queries/observation-queries.js.map +1 -0
  114. package/dist/storage/queries/orbit-queries.d.ts +7 -0
  115. package/dist/storage/queries/orbit-queries.js +23 -0
  116. package/dist/storage/queries/orbit-queries.js.map +1 -0
  117. package/dist/storage/queries/shared.d.ts +106 -0
  118. package/dist/storage/queries/shared.js +120 -0
  119. package/dist/storage/queries/shared.js.map +1 -0
  120. package/dist/storage/queries/sun-queries.d.ts +9 -0
  121. package/dist/storage/queries/sun-queries.js +43 -0
  122. package/dist/storage/queries/sun-queries.js.map +1 -0
  123. package/dist/storage/queries/temporal-queries.d.ts +32 -0
  124. package/dist/storage/queries/temporal-queries.js +112 -0
  125. package/dist/storage/queries/temporal-queries.js.map +1 -0
  126. package/dist/storage/queries.d.ts +15 -84
  127. package/dist/storage/queries.js +15 -896
  128. package/dist/storage/queries.js.map +1 -1
  129. package/dist/storage/vec.d.ts +5 -1
  130. package/dist/storage/vec.js +48 -24
  131. package/dist/storage/vec.js.map +1 -1
  132. package/dist/utils/config.d.ts +0 -1
  133. package/dist/utils/config.js +1 -1
  134. package/dist/utils/config.js.map +1 -1
  135. package/dist/utils/logger.d.ts +0 -2
  136. package/dist/utils/logger.js +0 -2
  137. package/dist/utils/logger.js.map +1 -1
  138. package/dist/utils/stopwords.d.ts +6 -0
  139. package/dist/utils/stopwords.js +22 -0
  140. package/dist/utils/stopwords.js.map +1 -0
  141. package/dist/utils/tokenizer.d.ts +2 -1
  142. package/dist/utils/tokenizer.js +7 -5
  143. package/dist/utils/tokenizer.js.map +1 -1
  144. package/package.json +78 -78
@@ -0,0 +1,120 @@
1
+ /**
2
+ * storage/queries/shared.ts — Raw DB row shapes, cast helpers, and deserializers
3
+ *
4
+ * These are internal to the queries layer. Nothing outside storage/ should
5
+ * import from this file directly.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ const log = createLogger('queries');
9
+ // ---------------------------------------------------------------------------
10
+ // Cast helpers — node:sqlite returns Record<string, SQLOutputValue> from .get()/.all().
11
+ // We cast through unknown because we know the schema guarantees the shape.
12
+ // ---------------------------------------------------------------------------
13
+ export function asRawMemory(row) {
14
+ return row;
15
+ }
16
+ export function asRawSunState(row) {
17
+ return row;
18
+ }
19
+ export function asRawDataSource(row) {
20
+ return row;
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // Deserializers — parse JSON fields coming out of SQLite
24
+ // ---------------------------------------------------------------------------
25
+ export function deserializeMemory(row) {
26
+ return {
27
+ ...row,
28
+ type: row.type,
29
+ tags: parseJsonArray(row.tags),
30
+ metadata: parseJsonObject(row.metadata),
31
+ source: row.source ?? 'manual',
32
+ source_path: row.source_path ?? null,
33
+ source_hash: row.source_hash ?? null,
34
+ content_hash: row.content_hash ?? null,
35
+ valid_from: row.valid_from ?? undefined,
36
+ valid_until: row.valid_until ?? undefined,
37
+ superseded_by: row.superseded_by ?? undefined,
38
+ consolidated_into: row.consolidated_into ?? undefined,
39
+ quality_score: row.quality_score ?? undefined,
40
+ is_universal: row.is_universal ? Boolean(row.is_universal) : undefined,
41
+ };
42
+ }
43
+ export function deserializeConstellationEdge(row) {
44
+ return {
45
+ ...row,
46
+ relation: row.relation,
47
+ metadata: parseJsonObject(row.metadata),
48
+ };
49
+ }
50
+ export function deserializeConflict(row) {
51
+ return {
52
+ ...row,
53
+ severity: row.severity,
54
+ status: row.status,
55
+ resolution: row.resolution ?? undefined,
56
+ resolved_at: row.resolved_at ?? undefined,
57
+ };
58
+ }
59
+ export function deserializeObservation(row) {
60
+ return {
61
+ ...row,
62
+ extracted_memories: parseJsonArray(row.extracted_memories),
63
+ source: row.source,
64
+ };
65
+ }
66
+ export function deserializeDataSource(row) {
67
+ return {
68
+ ...row,
69
+ type: row.type,
70
+ status: row.status,
71
+ config: parseJsonObject(row.config),
72
+ };
73
+ }
74
+ export function deserializeSunState(row) {
75
+ return {
76
+ ...row,
77
+ recent_decisions: parseJsonArray(row.recent_decisions),
78
+ next_steps: parseJsonArray(row.next_steps),
79
+ active_errors: parseJsonArray(row.active_errors),
80
+ };
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // JSON helpers
84
+ // ---------------------------------------------------------------------------
85
+ export function parseJsonArray(value) {
86
+ if (typeof value !== 'string' || value === '')
87
+ return [];
88
+ try {
89
+ const parsed = JSON.parse(value);
90
+ return Array.isArray(parsed) ? parsed : [];
91
+ }
92
+ catch {
93
+ log.warn('JSON array parse failed', { raw: String(value).slice(0, 100) });
94
+ return [];
95
+ }
96
+ }
97
+ export function parseJsonObject(value) {
98
+ if (typeof value !== 'string' || value === '')
99
+ return {};
100
+ try {
101
+ const parsed = JSON.parse(value);
102
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
103
+ ? parsed
104
+ : {};
105
+ }
106
+ catch {
107
+ log.warn('JSON object parse failed', { raw: String(value).slice(0, 100) });
108
+ return {};
109
+ }
110
+ }
111
+ /**
112
+ * Escape a user-supplied string for use in an FTS5 MATCH clause.
113
+ */
114
+ export function escapeFtsQuery(query) {
115
+ const words = query.trim().split(/\s+/).filter(w => w.length > 0);
116
+ if (words.length === 0)
117
+ return '""';
118
+ return words.map(w => '"' + w.replace(/"/g, '""') + '"').join(' ');
119
+ }
120
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/storage/queries/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * storage/queries/sun-queries.ts — Sun state operations
3
+ */
4
+ import type { SunState } from '../../engine/types.js';
5
+ export declare function getSunState(project: string): SunState | null;
6
+ export declare function upsertSunState(state: Partial<SunState> & {
7
+ project: string;
8
+ }): void;
9
+ //# sourceMappingURL=sun-queries.d.ts.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * storage/queries/sun-queries.ts — Sun state operations
3
+ */
4
+ import { getDatabase } from '../database.js';
5
+ import { asRawSunState, deserializeSunState } from './shared.js';
6
+ export function getSunState(project) {
7
+ const db = getDatabase();
8
+ const row = db.prepare(`
9
+ SELECT * FROM sun_state WHERE project = ?
10
+ `).get(project);
11
+ return row ? deserializeSunState(asRawSunState(row)) : null;
12
+ }
13
+ export function upsertSunState(state) {
14
+ const db = getDatabase();
15
+ const now = new Date().toISOString();
16
+ const existing = getSunState(state.project);
17
+ const content = state.content ?? existing?.content ?? '';
18
+ const current_work = state.current_work ?? existing?.current_work ?? '';
19
+ const recent_decisions = JSON.stringify(state.recent_decisions ?? existing?.recent_decisions ?? []);
20
+ const next_steps = JSON.stringify(state.next_steps ?? existing?.next_steps ?? []);
21
+ const active_errors = JSON.stringify(state.active_errors ?? existing?.active_errors ?? []);
22
+ const project_context = state.project_context ?? existing?.project_context ?? '';
23
+ const token_count = state.token_count ?? existing?.token_count ?? 0;
24
+ const last_commit_at = state.last_commit_at ?? existing?.last_commit_at ?? null;
25
+ db.prepare(`
26
+ INSERT INTO sun_state (
27
+ project, content, current_work,
28
+ recent_decisions, next_steps, active_errors,
29
+ project_context, token_count, last_commit_at, updated_at
30
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
31
+ ON CONFLICT(project) DO UPDATE SET
32
+ content = excluded.content,
33
+ current_work = excluded.current_work,
34
+ recent_decisions = excluded.recent_decisions,
35
+ next_steps = excluded.next_steps,
36
+ active_errors = excluded.active_errors,
37
+ project_context = excluded.project_context,
38
+ token_count = excluded.token_count,
39
+ last_commit_at = excluded.last_commit_at,
40
+ updated_at = excluded.updated_at
41
+ `).run(state.project, content, current_work, recent_decisions, next_steps, active_errors, project_context, token_count, last_commit_at, now);
42
+ }
43
+ //# sourceMappingURL=sun-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sun-queries.js","sourceRoot":"","sources":["../../../src/storage/queries/sun-queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;GAEtB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhB,OAAO,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAA8C;IAE9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;IACzD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;IACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CACrC,KAAK,CAAC,gBAAgB,IAAI,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAC3D,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,KAAK,CAAC,UAAU,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE,CAC/C,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAClC,KAAK,CAAC,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,EAAE,CACrD,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,QAAQ,EAAE,eAAe,IAAI,EAAE,CAAC;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,QAAQ,EAAE,cAAc,IAAI,IAAI,CAAC;IAEhF,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;GAgBV,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EACpC,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAC3C,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,CAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * storage/queries/temporal-queries.ts — Time-based memory operations
3
+ */
4
+ import type { Memory } from '../../engine/types.js';
5
+ export declare function getMemoriesAtTime(project: string, timestamp: string): Memory[];
6
+ export declare function supersedMemory(memoryId: string, newMemoryId: string): void;
7
+ export declare function getSupersessionChain(memoryId: string): Memory[];
8
+ /**
9
+ * Set temporal validity bounds on a memory.
10
+ * Moved from temporal.ts — raw SQL belongs in the storage layer.
11
+ */
12
+ export declare function setTemporalBoundsQuery(memoryId: string, validFrom?: string, validUntil?: string): void;
13
+ /**
14
+ * Walk backward to find the oldest ancestor in the supersession chain.
15
+ * A memory is a root if no other non-deleted memory has superseded_by = its id.
16
+ */
17
+ export declare function findSupersessionChainRoot(memoryId: string): string;
18
+ /**
19
+ * Get active/superseded counts and recent supersession events for a project.
20
+ * Returns raw data; formatting is the engine's responsibility.
21
+ */
22
+ export declare function getTemporalStats(project: string): {
23
+ activeCount: number;
24
+ supersededCount: number;
25
+ recentSupersessions: Array<{
26
+ id: string;
27
+ summary: string;
28
+ superseded_by: string;
29
+ updated_at: string;
30
+ }>;
31
+ };
32
+ //# sourceMappingURL=temporal-queries.d.ts.map
@@ -0,0 +1,112 @@
1
+ /**
2
+ * storage/queries/temporal-queries.ts — Time-based memory operations
3
+ */
4
+ import { getDatabase } from '../database.js';
5
+ import { asRawMemory, deserializeMemory } from './shared.js';
6
+ export function getMemoriesAtTime(project, timestamp) {
7
+ const db = getDatabase();
8
+ const rows = db.prepare(`
9
+ SELECT * FROM memories
10
+ WHERE project = ?
11
+ AND deleted_at IS NULL
12
+ AND (valid_from IS NULL OR valid_from <= ?)
13
+ AND (valid_until IS NULL OR valid_until > ?)
14
+ ORDER BY distance ASC
15
+ `).all(project, timestamp, timestamp);
16
+ return rows.map((r) => deserializeMemory(asRawMemory(r)));
17
+ }
18
+ export function supersedMemory(memoryId, newMemoryId) {
19
+ const db = getDatabase();
20
+ const now = new Date().toISOString();
21
+ db.prepare(`
22
+ UPDATE memories
23
+ SET superseded_by = ?, valid_until = ?, updated_at = ?
24
+ WHERE id = ?
25
+ `).run(newMemoryId, now, now, memoryId);
26
+ }
27
+ export function getSupersessionChain(memoryId) {
28
+ const db = getDatabase();
29
+ const chain = [];
30
+ let currentId = memoryId;
31
+ while (currentId) {
32
+ const row = db.prepare(`SELECT * FROM memories WHERE id = ?`).get(currentId);
33
+ if (!row)
34
+ break;
35
+ const mem = deserializeMemory(asRawMemory(row));
36
+ chain.push(mem);
37
+ currentId = mem.superseded_by ?? null;
38
+ }
39
+ return chain;
40
+ }
41
+ /**
42
+ * Set temporal validity bounds on a memory.
43
+ * Moved from temporal.ts — raw SQL belongs in the storage layer.
44
+ */
45
+ export function setTemporalBoundsQuery(memoryId, validFrom, validUntil) {
46
+ const db = getDatabase();
47
+ const now = new Date().toISOString();
48
+ const sets = ['updated_at = ?'];
49
+ const values = [now];
50
+ if (validFrom !== undefined) {
51
+ sets.push('valid_from = ?');
52
+ values.push(validFrom);
53
+ }
54
+ if (validUntil !== undefined) {
55
+ sets.push('valid_until = ?');
56
+ values.push(validUntil);
57
+ }
58
+ values.push(memoryId);
59
+ db.prepare(`UPDATE memories SET ${sets.join(', ')} WHERE id = ?`).run(...values);
60
+ }
61
+ /**
62
+ * Walk backward to find the oldest ancestor in the supersession chain.
63
+ * A memory is a root if no other non-deleted memory has superseded_by = its id.
64
+ */
65
+ export function findSupersessionChainRoot(memoryId) {
66
+ const db = getDatabase();
67
+ let currentId = memoryId;
68
+ for (let depth = 0; depth < 50; depth++) {
69
+ const row = db.prepare(`
70
+ SELECT id FROM memories
71
+ WHERE superseded_by = ? AND deleted_at IS NULL
72
+ LIMIT 1
73
+ `).get(currentId);
74
+ if (!row)
75
+ break;
76
+ currentId = row.id;
77
+ }
78
+ return currentId;
79
+ }
80
+ /**
81
+ * Get active/superseded counts and recent supersession events for a project.
82
+ * Returns raw data; formatting is the engine's responsibility.
83
+ */
84
+ export function getTemporalStats(project) {
85
+ const db = getDatabase();
86
+ const now = new Date().toISOString();
87
+ const activeRow = db.prepare(`
88
+ SELECT COUNT(*) as count FROM memories
89
+ WHERE project = ?
90
+ AND deleted_at IS NULL
91
+ AND (valid_from IS NULL OR valid_from <= ?)
92
+ AND (valid_until IS NULL OR valid_until > ?)
93
+ `).get(project, now, now);
94
+ const supersededRow = db.prepare(`
95
+ SELECT COUNT(*) as count FROM memories
96
+ WHERE project = ? AND deleted_at IS NULL AND superseded_by IS NOT NULL
97
+ `).get(project);
98
+ const recentRows = db.prepare(`
99
+ SELECT id, summary, superseded_by, updated_at FROM memories
100
+ WHERE project = ?
101
+ AND deleted_at IS NULL
102
+ AND superseded_by IS NOT NULL
103
+ ORDER BY updated_at DESC
104
+ LIMIT 5
105
+ `).all(project);
106
+ return {
107
+ activeCount: activeRow.count,
108
+ supersededCount: supersededRow.count,
109
+ recentSupersessions: recentRows,
110
+ };
111
+ }
112
+ //# sourceMappingURL=temporal-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-queries.js","sourceRoot":"","sources":["../../../src/storage/queries/temporal-queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,SAAiB;IAClE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOvB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAc,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,WAAmB;IAClE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAkB,QAAQ,CAAC;IAExC,OAAO,SAAS,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG;YAAE,MAAM;QAChB,MAAM,GAAG,GAAG,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,SAAS,GAAG,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,SAAkB,EAClB,UAAmB;IAEnB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,IAAI,GAAa,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAsB,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,EAAE,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;KAItB,CAAC,CAAC,GAAG,CAAC,SAAS,CAA+B,CAAC;QAEhD,IAAI,CAAC,GAAG;YAAE,MAAM;QAChB,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAK9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAM5B,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAsB,CAAC;IAE/C,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGhC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAsB,CAAC;IAErC,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;GAO7B,CAAC,CAAC,GAAG,CAAC,OAAO,CAKZ,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,SAAS,CAAC,KAAK;QAC5B,eAAe,EAAE,aAAa,CAAC,KAAK;QACpC,mBAAmB,EAAE,UAAU;KAChC,CAAC;AACJ,CAAC"}
@@ -1,87 +1,18 @@
1
- import type { Memory, OrbitZone, OrbitChange, SunState, ConstellationEdge, MemoryConflict, MemoryAnalytics, ObservationEntry } from '../engine/types.js';
2
- import type { DataSource } from '../scanner/types.js';
3
- export declare function insertMemory(memory: Partial<Memory>): Memory;
4
- export declare function getMemoryById(id: string): Memory | null;
5
- export declare function getMemoryByIds(ids: string[]): Memory[];
6
- export declare function getMemoriesByProject(project: string, includeDeleted?: boolean): Memory[];
7
1
  /**
8
- * Get memories created within the last `hoursAgo` hours for a project.
9
- * Used by auto-commit on shutdown to summarize the current session.
2
+ * storage/queries.ts Barrel re-export for backward compatibility.
3
+ *
4
+ * The entire codebase imports from '../storage/queries.js'.
5
+ * This file re-exports everything from the domain files under queries/
6
+ * so no existing import paths need to change.
10
7
  */
11
- export declare function getRecentMemories(project: string, hoursAgo?: number): Memory[];
12
- export declare function getMemoriesInZone(project: string, zone: OrbitZone): Memory[];
13
- export declare function updateMemoryOrbit(id: string, distance: number, importance: number, velocity: number): void;
14
- export declare function updateMemoryAccess(id: string): void;
15
- export declare function softDeleteMemory(id: string): void;
16
- export declare function searchMemories(project: string, query: string, limit?: number): Memory[];
17
- export declare function searchMemoriesInRange(project: string, query: string, minDistance: number, maxDistance: number, limit: number): Memory[];
18
- export declare function getNearestMemories(project: string, limit: number): Memory[];
19
- export declare function getSunState(project: string): SunState | null;
20
- export declare function upsertSunState(state: Partial<SunState> & {
21
- project: string;
22
- }): void;
23
- export declare function insertOrbitLog(change: OrbitChange): void;
24
- export declare function cleanupOrbitLog(retentionDays?: number): number;
25
- /**
26
- * Check whether a memory already exists for the given source_path + source_hash.
27
- * Returns true if an identical (path, hash) pair is already stored and not deleted.
28
- */
29
- export declare function memoryExistsForSource(sourcePath: string, sourceHash: string): boolean;
30
- /**
31
- * Find a memory by source_path (regardless of hash). Used to update stale entries.
32
- */
33
- export declare function getMemoryBySourcePath(sourcePath: string): Memory | null;
34
- /**
35
- * Find a non-deleted memory in the given project that has the same content hash.
36
- * Used by createMemory() for content-level deduplication.
37
- */
38
- export declare function getMemoryByContentHash(project: string, contentHash: string): Memory | null;
39
- export declare function insertDataSource(ds: Omit<DataSource, 'created_at' | 'updated_at'>): DataSource;
40
- export declare function updateDataSource(id: string, patch: Partial<Pick<DataSource, 'status' | 'last_scanned_at' | 'file_count' | 'total_size' | 'config'>>): void;
41
- export declare function getAllDataSources(): DataSource[];
42
- export declare function getDataSourceByPath(path: string): DataSource | null;
43
- export declare function createEdge(edge: ConstellationEdge): void;
44
- export declare function getEdges(memoryId: string, project: string): ConstellationEdge[];
45
- export declare function getConstellation(memoryId: string, project: string, depth?: number): {
46
- nodes: Memory[];
47
- edges: ConstellationEdge[];
48
- };
49
- /**
50
- * Get all constellation neighbors for a batch of memory IDs.
51
- * Returns a map from memory ID ??set of neighbor IDs.
52
- */
53
- export declare function getEdgesForBatch(memoryIds: string[], project: string): Map<string, Set<string>>;
54
- export declare function deleteEdge(id: string): void;
55
- export declare function getEdgeCountForMemory(memoryId: string): number;
56
- export declare function createConflict(conflict: MemoryConflict): void;
57
- export declare function getConflicts(project: string, status?: string): MemoryConflict[];
58
- export declare function getConflictsForMemory(memoryId: string): MemoryConflict[];
59
- export declare function resolveConflict(id: string, resolution: string): void;
60
- export declare function createObservation(entry: ObservationEntry): void;
61
- export declare function getObservations(project: string, limit?: number): ObservationEntry[];
62
- export declare function getMemoriesAtTime(project: string, timestamp: string): Memory[];
63
- export declare function supersedMemory(memoryId: string, newMemoryId: string): void;
64
- export declare function getSupersessionChain(memoryId: string): Memory[];
65
- export declare function consolidateMemories(sourceIds: string[], targetId: string): void;
66
- export declare function getConsolidationHistory(memoryId: string): Memory[];
67
- export declare function getUniversalMemories(limit?: number): Memory[];
68
- export declare function setUniversal(memoryId: string, isUniversal: boolean): void;
69
- export declare function listProjects(): Array<{
70
- project: string;
71
- count: number;
72
- }>;
73
- export declare function updateMemoryContent(id: string, content: string): void;
74
- export declare function updateQualityScore(memoryId: string, score: number): void;
75
- export declare function getMemoriesByQuality(project: string, minScore?: number, maxScore?: number): Memory[];
76
- export declare function getTopTags(project: string, limit?: number): Array<{
77
- tag: string;
78
- count: number;
79
- }>;
80
- export declare function getActivityTimeline(project: string, days?: number): Array<{
81
- date: string;
82
- created: number;
83
- accessed: number;
84
- }>;
85
- export declare function getRecallSuccessRate(project: string): number;
86
- export declare function getAnalytics(project: string): MemoryAnalytics;
8
+ export * from './queries/shared.js';
9
+ export * from './queries/memory-queries.js';
10
+ export * from './queries/sun-queries.js';
11
+ export * from './queries/orbit-queries.js';
12
+ export * from './queries/constellation-queries.js';
13
+ export * from './queries/conflict-queries.js';
14
+ export * from './queries/temporal-queries.js';
15
+ export * from './queries/analytics-queries.js';
16
+ export * from './queries/observation-queries.js';
17
+ export * from './queries/datasource-queries.js';
87
18
  //# sourceMappingURL=queries.d.ts.map