gnosys 4.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 (188) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1387 -0
  3. package/dist/cli.d.ts +7 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +3753 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +2267 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/archive.d.ts +95 -0
  12. package/dist/lib/archive.d.ts.map +1 -0
  13. package/dist/lib/archive.js +311 -0
  14. package/dist/lib/archive.js.map +1 -0
  15. package/dist/lib/ask.d.ts +77 -0
  16. package/dist/lib/ask.d.ts.map +1 -0
  17. package/dist/lib/ask.js +316 -0
  18. package/dist/lib/ask.js.map +1 -0
  19. package/dist/lib/audit.d.ts +47 -0
  20. package/dist/lib/audit.d.ts.map +1 -0
  21. package/dist/lib/audit.js +136 -0
  22. package/dist/lib/audit.js.map +1 -0
  23. package/dist/lib/bootstrap.d.ts +56 -0
  24. package/dist/lib/bootstrap.d.ts.map +1 -0
  25. package/dist/lib/bootstrap.js +163 -0
  26. package/dist/lib/bootstrap.js.map +1 -0
  27. package/dist/lib/config.d.ts +239 -0
  28. package/dist/lib/config.d.ts.map +1 -0
  29. package/dist/lib/config.js +371 -0
  30. package/dist/lib/config.js.map +1 -0
  31. package/dist/lib/dashboard.d.ts +81 -0
  32. package/dist/lib/dashboard.d.ts.map +1 -0
  33. package/dist/lib/dashboard.js +314 -0
  34. package/dist/lib/dashboard.js.map +1 -0
  35. package/dist/lib/db.d.ts +182 -0
  36. package/dist/lib/db.d.ts.map +1 -0
  37. package/dist/lib/db.js +620 -0
  38. package/dist/lib/db.js.map +1 -0
  39. package/dist/lib/dbSearch.d.ts +65 -0
  40. package/dist/lib/dbSearch.d.ts.map +1 -0
  41. package/dist/lib/dbSearch.js +239 -0
  42. package/dist/lib/dbSearch.js.map +1 -0
  43. package/dist/lib/dbWrite.d.ts +56 -0
  44. package/dist/lib/dbWrite.d.ts.map +1 -0
  45. package/dist/lib/dbWrite.js +171 -0
  46. package/dist/lib/dbWrite.js.map +1 -0
  47. package/dist/lib/dream.d.ts +170 -0
  48. package/dist/lib/dream.d.ts.map +1 -0
  49. package/dist/lib/dream.js +706 -0
  50. package/dist/lib/dream.js.map +1 -0
  51. package/dist/lib/embeddings.d.ts +84 -0
  52. package/dist/lib/embeddings.d.ts.map +1 -0
  53. package/dist/lib/embeddings.js +226 -0
  54. package/dist/lib/embeddings.js.map +1 -0
  55. package/dist/lib/export.d.ts +92 -0
  56. package/dist/lib/export.d.ts.map +1 -0
  57. package/dist/lib/export.js +362 -0
  58. package/dist/lib/export.js.map +1 -0
  59. package/dist/lib/federated.d.ts +113 -0
  60. package/dist/lib/federated.d.ts.map +1 -0
  61. package/dist/lib/federated.js +346 -0
  62. package/dist/lib/federated.js.map +1 -0
  63. package/dist/lib/graph.d.ts +50 -0
  64. package/dist/lib/graph.d.ts.map +1 -0
  65. package/dist/lib/graph.js +118 -0
  66. package/dist/lib/graph.js.map +1 -0
  67. package/dist/lib/history.d.ts +39 -0
  68. package/dist/lib/history.d.ts.map +1 -0
  69. package/dist/lib/history.js +112 -0
  70. package/dist/lib/history.js.map +1 -0
  71. package/dist/lib/hybridSearch.d.ts +80 -0
  72. package/dist/lib/hybridSearch.d.ts.map +1 -0
  73. package/dist/lib/hybridSearch.js +296 -0
  74. package/dist/lib/hybridSearch.js.map +1 -0
  75. package/dist/lib/import.d.ts +52 -0
  76. package/dist/lib/import.d.ts.map +1 -0
  77. package/dist/lib/import.js +365 -0
  78. package/dist/lib/import.js.map +1 -0
  79. package/dist/lib/ingest.d.ts +51 -0
  80. package/dist/lib/ingest.d.ts.map +1 -0
  81. package/dist/lib/ingest.js +144 -0
  82. package/dist/lib/ingest.js.map +1 -0
  83. package/dist/lib/lensing.d.ts +35 -0
  84. package/dist/lib/lensing.d.ts.map +1 -0
  85. package/dist/lib/lensing.js +85 -0
  86. package/dist/lib/lensing.js.map +1 -0
  87. package/dist/lib/llm.d.ts +84 -0
  88. package/dist/lib/llm.d.ts.map +1 -0
  89. package/dist/lib/llm.js +386 -0
  90. package/dist/lib/llm.js.map +1 -0
  91. package/dist/lib/lock.d.ts +28 -0
  92. package/dist/lib/lock.d.ts.map +1 -0
  93. package/dist/lib/lock.js +145 -0
  94. package/dist/lib/lock.js.map +1 -0
  95. package/dist/lib/maintenance.d.ts +124 -0
  96. package/dist/lib/maintenance.d.ts.map +1 -0
  97. package/dist/lib/maintenance.js +587 -0
  98. package/dist/lib/maintenance.js.map +1 -0
  99. package/dist/lib/migrate.d.ts +19 -0
  100. package/dist/lib/migrate.d.ts.map +1 -0
  101. package/dist/lib/migrate.js +260 -0
  102. package/dist/lib/migrate.js.map +1 -0
  103. package/dist/lib/preferences.d.ts +49 -0
  104. package/dist/lib/preferences.d.ts.map +1 -0
  105. package/dist/lib/preferences.js +149 -0
  106. package/dist/lib/preferences.js.map +1 -0
  107. package/dist/lib/projectIdentity.d.ts +66 -0
  108. package/dist/lib/projectIdentity.d.ts.map +1 -0
  109. package/dist/lib/projectIdentity.js +148 -0
  110. package/dist/lib/projectIdentity.js.map +1 -0
  111. package/dist/lib/recall.d.ts +82 -0
  112. package/dist/lib/recall.d.ts.map +1 -0
  113. package/dist/lib/recall.js +289 -0
  114. package/dist/lib/recall.js.map +1 -0
  115. package/dist/lib/resolver.d.ts +116 -0
  116. package/dist/lib/resolver.d.ts.map +1 -0
  117. package/dist/lib/resolver.js +372 -0
  118. package/dist/lib/resolver.js.map +1 -0
  119. package/dist/lib/retry.d.ts +24 -0
  120. package/dist/lib/retry.d.ts.map +1 -0
  121. package/dist/lib/retry.js +60 -0
  122. package/dist/lib/retry.js.map +1 -0
  123. package/dist/lib/rulesGen.d.ts +51 -0
  124. package/dist/lib/rulesGen.d.ts.map +1 -0
  125. package/dist/lib/rulesGen.js +167 -0
  126. package/dist/lib/rulesGen.js.map +1 -0
  127. package/dist/lib/search.d.ts +51 -0
  128. package/dist/lib/search.d.ts.map +1 -0
  129. package/dist/lib/search.js +190 -0
  130. package/dist/lib/search.js.map +1 -0
  131. package/dist/lib/staticSearch.d.ts +70 -0
  132. package/dist/lib/staticSearch.d.ts.map +1 -0
  133. package/dist/lib/staticSearch.js +162 -0
  134. package/dist/lib/staticSearch.js.map +1 -0
  135. package/dist/lib/store.d.ts +79 -0
  136. package/dist/lib/store.d.ts.map +1 -0
  137. package/dist/lib/store.js +227 -0
  138. package/dist/lib/store.js.map +1 -0
  139. package/dist/lib/structuredIngest.d.ts +37 -0
  140. package/dist/lib/structuredIngest.d.ts.map +1 -0
  141. package/dist/lib/structuredIngest.js +208 -0
  142. package/dist/lib/structuredIngest.js.map +1 -0
  143. package/dist/lib/tags.d.ts +26 -0
  144. package/dist/lib/tags.d.ts.map +1 -0
  145. package/dist/lib/tags.js +109 -0
  146. package/dist/lib/tags.js.map +1 -0
  147. package/dist/lib/timeline.d.ts +34 -0
  148. package/dist/lib/timeline.d.ts.map +1 -0
  149. package/dist/lib/timeline.js +116 -0
  150. package/dist/lib/timeline.js.map +1 -0
  151. package/dist/lib/trace.d.ts +42 -0
  152. package/dist/lib/trace.d.ts.map +1 -0
  153. package/dist/lib/trace.js +338 -0
  154. package/dist/lib/trace.js.map +1 -0
  155. package/dist/lib/webIndex.d.ts +28 -0
  156. package/dist/lib/webIndex.d.ts.map +1 -0
  157. package/dist/lib/webIndex.js +208 -0
  158. package/dist/lib/webIndex.js.map +1 -0
  159. package/dist/lib/webIngest.d.ts +51 -0
  160. package/dist/lib/webIngest.d.ts.map +1 -0
  161. package/dist/lib/webIngest.js +533 -0
  162. package/dist/lib/webIngest.js.map +1 -0
  163. package/dist/lib/wikilinks.d.ts +63 -0
  164. package/dist/lib/wikilinks.d.ts.map +1 -0
  165. package/dist/lib/wikilinks.js +146 -0
  166. package/dist/lib/wikilinks.js.map +1 -0
  167. package/dist/sandbox/client.d.ts +82 -0
  168. package/dist/sandbox/client.d.ts.map +1 -0
  169. package/dist/sandbox/client.js +128 -0
  170. package/dist/sandbox/client.js.map +1 -0
  171. package/dist/sandbox/helper-template.d.ts +14 -0
  172. package/dist/sandbox/helper-template.d.ts.map +1 -0
  173. package/dist/sandbox/helper-template.js +285 -0
  174. package/dist/sandbox/helper-template.js.map +1 -0
  175. package/dist/sandbox/index.d.ts +10 -0
  176. package/dist/sandbox/index.d.ts.map +1 -0
  177. package/dist/sandbox/index.js +10 -0
  178. package/dist/sandbox/index.js.map +1 -0
  179. package/dist/sandbox/manager.d.ts +40 -0
  180. package/dist/sandbox/manager.d.ts.map +1 -0
  181. package/dist/sandbox/manager.js +220 -0
  182. package/dist/sandbox/manager.js.map +1 -0
  183. package/dist/sandbox/server.d.ts +44 -0
  184. package/dist/sandbox/server.d.ts.map +1 -0
  185. package/dist/sandbox/server.js +661 -0
  186. package/dist/sandbox/server.js.map +1 -0
  187. package/package.json +103 -0
  188. package/prompts/synthesize.md +21 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Gnosys DB Search Adapter — bridges GnosysDB to existing search interfaces.
3
+ *
4
+ * When gnosys.db is migrated and available, this adapter replaces:
5
+ * - GnosysSearch (FTS5 keyword search)
6
+ * - GnosysEmbeddings (vector cosine similarity)
7
+ * - GnosysArchive (search in archived memories)
8
+ *
9
+ * Implements the same result types so consumers (recall, hybridSearch, ask)
10
+ * work without modification.
11
+ */
12
+ import { GnosysDB, DbMemory } from "./db.js";
13
+ import { SearchResult, DiscoverResult } from "./search.js";
14
+ import { HybridSearchResult, SearchMode } from "./hybridSearch.js";
15
+ export declare class GnosysDbSearch {
16
+ private db;
17
+ constructor(db: GnosysDB);
18
+ /**
19
+ * FTS5 search — compatible with GnosysSearch.search()
20
+ */
21
+ search(query: string, limit?: number): SearchResult[];
22
+ /**
23
+ * FTS5 discover — compatible with GnosysSearch.discover()
24
+ */
25
+ discover(query: string, limit?: number): DiscoverResult[];
26
+ /**
27
+ * Hybrid search — all-in-one: FTS5 + optional semantic + archive tier.
28
+ * Replaces GnosysHybridSearch.hybridSearch() when db is available.
29
+ */
30
+ hybridSearch(query: string, limit?: number, mode?: SearchMode, embedQuery?: (text: string) => Promise<Float32Array>): Promise<HybridSearchResult[]>;
31
+ /**
32
+ * FTS5 keyword search → HybridSearchResult
33
+ */
34
+ private keywordSearch;
35
+ /**
36
+ * Semantic search using inline embeddings
37
+ */
38
+ private semanticSearch;
39
+ /**
40
+ * Search archive tier (memories with tier='archive')
41
+ */
42
+ private searchArchiveTier;
43
+ /**
44
+ * RRF fusion of keyword + semantic results
45
+ */
46
+ private rrfFusion;
47
+ /**
48
+ * Load full content for search results (used by Ask engine).
49
+ * In DB mode, we read directly from the memories table.
50
+ */
51
+ loadContent(results: HybridSearchResult[]): HybridSearchResult[];
52
+ /**
53
+ * Get a memory by ID (replaces resolver.readMemory for db mode)
54
+ */
55
+ getMemory(id: string): DbMemory | null;
56
+ /**
57
+ * Check if embeddings exist in the db
58
+ */
59
+ hasEmbeddings(): boolean;
60
+ /**
61
+ * Get embedding count
62
+ */
63
+ embeddingCount(): number;
64
+ }
65
+ //# sourceMappingURL=dbSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbSearch.d.ts","sourceRoot":"","sources":["../../src/lib/dbSearch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqBnE,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAUzD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAU7D;;;OAGG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,UAAqB,EAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,GACnD,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqChC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;YACW,cAAc;IAoC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,SAAS;IA+CjB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;IAYhE;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAItC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Gnosys DB Search Adapter — bridges GnosysDB to existing search interfaces.
3
+ *
4
+ * When gnosys.db is migrated and available, this adapter replaces:
5
+ * - GnosysSearch (FTS5 keyword search)
6
+ * - GnosysEmbeddings (vector cosine similarity)
7
+ * - GnosysArchive (search in archived memories)
8
+ *
9
+ * Implements the same result types so consumers (recall, hybridSearch, ask)
10
+ * work without modification.
11
+ */
12
+ // ─── Cosine similarity for inline embeddings ────────────────────────────
13
+ function cosineSimilarity(a, b) {
14
+ let dot = 0, normA = 0, normB = 0;
15
+ for (let i = 0; i < a.length; i++) {
16
+ dot += a[i] * b[i];
17
+ normA += a[i] * a[i];
18
+ normB += b[i] * b[i];
19
+ }
20
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
21
+ return denom === 0 ? 0 : dot / denom;
22
+ }
23
+ function bufferToFloat32(buf) {
24
+ return new Float32Array(buf.buffer, buf.byteOffset, buf.byteLength / 4);
25
+ }
26
+ // ─── DB Search Adapter ──────────────────────────────────────────────────
27
+ export class GnosysDbSearch {
28
+ db;
29
+ constructor(db) {
30
+ this.db = db;
31
+ }
32
+ /**
33
+ * FTS5 search — compatible with GnosysSearch.search()
34
+ */
35
+ search(query, limit = 20) {
36
+ const results = this.db.searchFts(query, limit);
37
+ return results.map((r) => ({
38
+ relative_path: r.id, // In db mode, we use memory ID as the key
39
+ title: r.title,
40
+ snippet: r.snippet,
41
+ rank: r.rank,
42
+ }));
43
+ }
44
+ /**
45
+ * FTS5 discover — compatible with GnosysSearch.discover()
46
+ */
47
+ discover(query, limit = 20) {
48
+ const results = this.db.discoverFts(query, limit);
49
+ return results.map((r) => ({
50
+ relative_path: r.id, // In db mode, we use memory ID as the key
51
+ title: r.title,
52
+ relevance: r.relevance,
53
+ rank: r.rank,
54
+ }));
55
+ }
56
+ /**
57
+ * Hybrid search — all-in-one: FTS5 + optional semantic + archive tier.
58
+ * Replaces GnosysHybridSearch.hybridSearch() when db is available.
59
+ */
60
+ async hybridSearch(query, limit = 15, mode = "hybrid", embedQuery) {
61
+ const RRF_K = 60;
62
+ // Check if we have embeddings for semantic/hybrid
63
+ const hasEmbeddings = this.db.getEmbeddingCount() > 0;
64
+ if ((mode === "hybrid" || mode === "semantic") && !hasEmbeddings) {
65
+ if (mode === "semantic")
66
+ return [];
67
+ mode = "keyword";
68
+ }
69
+ let results;
70
+ if (mode === "keyword") {
71
+ results = this.keywordSearch(query, limit);
72
+ }
73
+ else if (mode === "semantic" && embedQuery) {
74
+ results = await this.semanticSearch(query, limit, embedQuery);
75
+ }
76
+ else if (mode === "hybrid" && embedQuery) {
77
+ const [kw, sem] = await Promise.all([
78
+ this.keywordSearch(query, limit * 2),
79
+ this.semanticSearch(query, limit * 2, embedQuery),
80
+ ]);
81
+ results = this.rrfFusion(kw, sem, limit);
82
+ }
83
+ else {
84
+ results = this.keywordSearch(query, limit);
85
+ }
86
+ // Fill in from archive tier if active results are thin
87
+ if (results.length < limit) {
88
+ const archiveResults = this.searchArchiveTier(query, limit - results.length);
89
+ const existingIds = new Set(results.map((r) => r.relativePath));
90
+ const newResults = archiveResults.filter((r) => !existingIds.has(r.relativePath));
91
+ results = [...results, ...newResults];
92
+ }
93
+ return results.slice(0, limit);
94
+ }
95
+ /**
96
+ * FTS5 keyword search → HybridSearchResult
97
+ */
98
+ keywordSearch(query, limit) {
99
+ const results = this.db.searchFts(query, limit);
100
+ return results.map((r, i) => ({
101
+ relativePath: r.id,
102
+ title: r.title,
103
+ snippet: r.snippet,
104
+ score: 1 / (60 + i + 1),
105
+ sources: ["keyword"],
106
+ memoryId: r.id,
107
+ fromArchive: false,
108
+ }));
109
+ }
110
+ /**
111
+ * Semantic search using inline embeddings
112
+ */
113
+ async semanticSearch(query, limit, embedQuery) {
114
+ const queryVec = await embedQuery(query);
115
+ const allEmbeddings = this.db.getAllEmbeddings();
116
+ const scored = [];
117
+ for (const entry of allEmbeddings) {
118
+ const vec = bufferToFloat32(entry.embedding);
119
+ const sim = cosineSimilarity(queryVec, vec);
120
+ scored.push({ id: entry.id, similarity: sim });
121
+ }
122
+ scored.sort((a, b) => b.similarity - a.similarity);
123
+ const topN = scored.slice(0, limit);
124
+ const results = [];
125
+ for (const item of topN) {
126
+ const mem = this.db.getMemory(item.id);
127
+ if (mem) {
128
+ results.push({
129
+ relativePath: mem.id,
130
+ title: mem.title,
131
+ snippet: mem.content.substring(0, 200),
132
+ score: item.similarity,
133
+ sources: ["semantic"],
134
+ memoryId: mem.id,
135
+ fromArchive: mem.tier === "archive",
136
+ });
137
+ }
138
+ }
139
+ return results;
140
+ }
141
+ /**
142
+ * Search archive tier (memories with tier='archive')
143
+ */
144
+ searchArchiveTier(query, limit) {
145
+ // Use FTS5 but filter to archive tier after
146
+ const results = this.db.searchFts(query, limit * 2);
147
+ const archiveResults = [];
148
+ for (const r of results) {
149
+ const mem = this.db.getMemory(r.id);
150
+ if (mem && mem.tier === "archive") {
151
+ archiveResults.push({
152
+ relativePath: mem.id,
153
+ title: mem.title,
154
+ snippet: r.snippet,
155
+ score: 0.001,
156
+ sources: ["archive"],
157
+ memoryId: mem.id,
158
+ fromArchive: true,
159
+ });
160
+ if (archiveResults.length >= limit)
161
+ break;
162
+ }
163
+ }
164
+ return archiveResults;
165
+ }
166
+ /**
167
+ * RRF fusion of keyword + semantic results
168
+ */
169
+ rrfFusion(keywordResults, semanticResults, limit) {
170
+ const RRF_K = 60;
171
+ const scoreMap = new Map();
172
+ for (let i = 0; i < keywordResults.length; i++) {
173
+ const r = keywordResults[i];
174
+ scoreMap.set(r.relativePath, {
175
+ score: 1 / (RRF_K + i + 1),
176
+ result: r,
177
+ sources: new Set(["keyword"]),
178
+ });
179
+ }
180
+ for (let i = 0; i < semanticResults.length; i++) {
181
+ const r = semanticResults[i];
182
+ const rrfScore = 1 / (RRF_K + i + 1);
183
+ const existing = scoreMap.get(r.relativePath);
184
+ if (existing) {
185
+ existing.score += rrfScore;
186
+ existing.sources.add("semantic");
187
+ }
188
+ else {
189
+ scoreMap.set(r.relativePath, {
190
+ score: rrfScore,
191
+ result: r,
192
+ sources: new Set(["semantic"]),
193
+ });
194
+ }
195
+ }
196
+ return Array.from(scoreMap.values())
197
+ .sort((a, b) => b.score - a.score)
198
+ .slice(0, limit)
199
+ .map((entry) => ({
200
+ ...entry.result,
201
+ score: entry.score,
202
+ sources: Array.from(entry.sources),
203
+ }));
204
+ }
205
+ /**
206
+ * Load full content for search results (used by Ask engine).
207
+ * In DB mode, we read directly from the memories table.
208
+ */
209
+ loadContent(results) {
210
+ return results.map((r) => {
211
+ if (r.memoryId) {
212
+ const mem = this.db.getMemory(r.memoryId);
213
+ if (mem) {
214
+ return { ...r, fullContent: mem.content, memoryId: mem.id };
215
+ }
216
+ }
217
+ return r;
218
+ });
219
+ }
220
+ /**
221
+ * Get a memory by ID (replaces resolver.readMemory for db mode)
222
+ */
223
+ getMemory(id) {
224
+ return this.db.getMemory(id);
225
+ }
226
+ /**
227
+ * Check if embeddings exist in the db
228
+ */
229
+ hasEmbeddings() {
230
+ return this.db.getEmbeddingCount() > 0;
231
+ }
232
+ /**
233
+ * Get embedding count
234
+ */
235
+ embeddingCount() {
236
+ return this.db.getEmbeddingCount();
237
+ }
238
+ }
239
+ //# sourceMappingURL=dbSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbSearch.js","sourceRoot":"","sources":["../../src/lib/dbSearch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,2EAA2E;AAE3E,SAAS,gBAAgB,CAAC,CAAe,EAAE,CAAe;IACxD,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,2EAA2E;AAE3E,MAAM,OAAO,cAAc;IACjB,EAAE,CAAW;IAErB,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAO,0CAA0C;YACpE,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAO,0CAA0C;YACpE,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,QAAgB,EAAE,EAClB,OAAmB,QAAQ,EAC3B,UAAoD;QAEpD,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,kDAAkD;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjE,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,EAAE,CAAC;YACnC,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,OAA6B,CAAC;QAElC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,KAAK,UAAU,IAAI,UAAU,EAAE,CAAC;YAC7C,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,UAAU,EAAE,CAAC;YAC3C,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC;aAClD,CAAC,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,uDAAuD;QACvD,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAClF,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa,EAAE,KAAa;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,YAAY,EAAE,CAAC,CAAC,EAAE;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,SAAS,CAA2C;YAC9D,QAAQ,EAAE,CAAC,CAAC,EAAE;YACd,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,KAAa,EACb,KAAa,EACb,UAAmD;QAEnD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEjD,MAAM,MAAM,GAA8C,EAAE,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEpC,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC;oBACX,YAAY,EAAE,GAAG,CAAC,EAAE;oBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;oBACtC,KAAK,EAAE,IAAI,CAAC,UAAU;oBACtB,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,QAAQ,EAAE,GAAG,CAAC,EAAE;oBAChB,WAAW,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAa,EAAE,KAAa;QACpD,4CAA4C;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,cAAc,GAAyB,EAAE,CAAC;QAEhD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,cAAc,CAAC,IAAI,CAAC;oBAClB,YAAY,EAAE,GAAG,CAAC,EAAE;oBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,QAAQ,EAAE,GAAG,CAAC,EAAE;oBAChB,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;gBACH,IAAI,cAAc,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,SAAS,CACf,cAAoC,EACpC,eAAqC,EACrC,KAAa;QAEb,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAIpB,CAAC;QAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE;gBAC3B,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC;gBAC3B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE;oBAC3B,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,KAAK,CAAC,MAAM;YACf,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SACnC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAA6B;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Gnosys DB Write — Dual-write layer for v2.0 migration.
3
+ *
4
+ * When gnosys.db is available, all write operations go to BOTH:
5
+ * 1. .md files (via GnosysStore) — safety net + Obsidian compatibility
6
+ * 2. gnosys.db (via GnosysDB) — primary store for agent reads
7
+ *
8
+ * This module provides helper functions that MCP tools and maintenance
9
+ * call after writing to the .md store. It also handles syncing writes
10
+ * that bypass the .md layer (e.g., maintenance operations on archived
11
+ * memories).
12
+ *
13
+ * Once the Obsidian Export Bridge (Phase 7e) is complete, .md writes
14
+ * become optional — controlled by config.
15
+ */
16
+ import { GnosysDB } from "./db.js";
17
+ import { MemoryFrontmatter } from "./store.js";
18
+ /**
19
+ * Sync a memory write to gnosys.db after it's been written to .md.
20
+ * Call this after GnosysStore.writeMemory() or updateMemory().
21
+ *
22
+ * v3.0: Accepts optional projectId and scope for centralized brain.
23
+ */
24
+ export declare function syncMemoryToDb(db: GnosysDB, frontmatter: MemoryFrontmatter, content: string, sourcePath?: string, projectId?: string | null, scope?: string): void;
25
+ /**
26
+ * Sync a memory update to gnosys.db after it's been updated in .md.
27
+ */
28
+ export declare function syncUpdateToDb(db: GnosysDB, id: string, updates: Partial<MemoryFrontmatter>, newContent?: string): void;
29
+ /**
30
+ * Sync an archive operation to gnosys.db.
31
+ * Sets tier='archive' on the memory.
32
+ */
33
+ export declare function syncArchiveToDb(db: GnosysDB, memoryId: string): void;
34
+ /**
35
+ * Sync a dearchive operation to gnosys.db.
36
+ * Sets tier='active' on the memory.
37
+ */
38
+ export declare function syncDearchiveToDb(db: GnosysDB, memoryId: string): void;
39
+ /**
40
+ * Sync a delete operation to gnosys.db.
41
+ */
42
+ export declare function syncDeleteToDb(db: GnosysDB, memoryId: string): void;
43
+ /**
44
+ * Sync a reinforcement to gnosys.db.
45
+ */
46
+ export declare function syncReinforcementToDb(db: GnosysDB, memoryId: string, newCount: number): void;
47
+ /**
48
+ * Sync a confidence update to gnosys.db (e.g., from decay).
49
+ */
50
+ export declare function syncConfidenceToDb(db: GnosysDB, memoryId: string, newConfidence: number): void;
51
+ /**
52
+ * Log an audit entry to gnosys.db's audit_log table.
53
+ * This supplements (and eventually replaces) the JSONL audit log.
54
+ */
55
+ export declare function auditToDb(db: GnosysDB, operation: string, memoryId?: string, details?: Record<string, unknown>, durationMs?: number, traceId?: string): void;
56
+ //# sourceMappingURL=dbWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbWrite.d.ts","sourceRoot":"","sources":["../../src/lib/dbWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAY,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAU,MAAM,YAAY,CAAC;AAGvD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CA+BN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAiCN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOpE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAUN"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Gnosys DB Write — Dual-write layer for v2.0 migration.
3
+ *
4
+ * When gnosys.db is available, all write operations go to BOTH:
5
+ * 1. .md files (via GnosysStore) — safety net + Obsidian compatibility
6
+ * 2. gnosys.db (via GnosysDB) — primary store for agent reads
7
+ *
8
+ * This module provides helper functions that MCP tools and maintenance
9
+ * call after writing to the .md store. It also handles syncing writes
10
+ * that bypass the .md layer (e.g., maintenance operations on archived
11
+ * memories).
12
+ *
13
+ * Once the Obsidian Export Bridge (Phase 7e) is complete, .md writes
14
+ * become optional — controlled by config.
15
+ */
16
+ import { fnv1a } from "./db.js";
17
+ /**
18
+ * Sync a memory write to gnosys.db after it's been written to .md.
19
+ * Call this after GnosysStore.writeMemory() or updateMemory().
20
+ *
21
+ * v3.0: Accepts optional projectId and scope for centralized brain.
22
+ */
23
+ export function syncMemoryToDb(db, frontmatter, content, sourcePath, projectId, scope) {
24
+ if (!db.isAvailable())
25
+ return;
26
+ const tags = Array.isArray(frontmatter.tags)
27
+ ? JSON.stringify(frontmatter.tags)
28
+ : JSON.stringify(Object.values(frontmatter.tags).flat());
29
+ db.insertMemory({
30
+ id: frontmatter.id,
31
+ title: frontmatter.title,
32
+ category: frontmatter.category,
33
+ content,
34
+ summary: null,
35
+ tags,
36
+ relevance: frontmatter.relevance || "",
37
+ author: frontmatter.author || "ai",
38
+ authority: frontmatter.authority || "imported",
39
+ confidence: frontmatter.confidence ?? 0.8,
40
+ reinforcement_count: frontmatter.reinforcement_count ?? 0,
41
+ content_hash: fnv1a(content),
42
+ status: frontmatter.status || "active",
43
+ tier: frontmatter.status === "archived" ? "archive" : "active",
44
+ supersedes: frontmatter.supersedes || null,
45
+ superseded_by: frontmatter.superseded_by || null,
46
+ last_reinforced: frontmatter.last_reinforced || null,
47
+ created: frontmatter.created || new Date().toISOString().split("T")[0],
48
+ modified: frontmatter.modified || new Date().toISOString().split("T")[0],
49
+ source_path: sourcePath || null,
50
+ project_id: projectId || null,
51
+ scope: scope || "project",
52
+ });
53
+ }
54
+ /**
55
+ * Sync a memory update to gnosys.db after it's been updated in .md.
56
+ */
57
+ export function syncUpdateToDb(db, id, updates, newContent) {
58
+ if (!db.isAvailable())
59
+ return;
60
+ const dbUpdates = {};
61
+ if (updates.title !== undefined)
62
+ dbUpdates.title = updates.title;
63
+ if (updates.category !== undefined)
64
+ dbUpdates.category = updates.category;
65
+ if (updates.status !== undefined) {
66
+ dbUpdates.status = updates.status;
67
+ if (updates.status === "archived")
68
+ dbUpdates.tier = "archive";
69
+ }
70
+ if (updates.confidence !== undefined)
71
+ dbUpdates.confidence = updates.confidence;
72
+ if (updates.relevance !== undefined)
73
+ dbUpdates.relevance = updates.relevance;
74
+ if (updates.supersedes !== undefined)
75
+ dbUpdates.supersedes = updates.supersedes || null;
76
+ if (updates.superseded_by !== undefined)
77
+ dbUpdates.superseded_by = updates.superseded_by || null;
78
+ if (updates.reinforcement_count !== undefined)
79
+ dbUpdates.reinforcement_count = updates.reinforcement_count;
80
+ if (updates.last_reinforced !== undefined)
81
+ dbUpdates.last_reinforced = updates.last_reinforced || null;
82
+ if (updates.tags !== undefined) {
83
+ dbUpdates.tags = Array.isArray(updates.tags)
84
+ ? JSON.stringify(updates.tags)
85
+ : JSON.stringify(Object.values(updates.tags).flat());
86
+ }
87
+ if (updates.author !== undefined)
88
+ dbUpdates.author = updates.author;
89
+ if (updates.authority !== undefined)
90
+ dbUpdates.authority = updates.authority;
91
+ if (newContent !== undefined) {
92
+ dbUpdates.content = newContent;
93
+ dbUpdates.content_hash = fnv1a(newContent);
94
+ }
95
+ dbUpdates.modified = new Date().toISOString().split("T")[0];
96
+ db.updateMemory(id, dbUpdates);
97
+ }
98
+ /**
99
+ * Sync an archive operation to gnosys.db.
100
+ * Sets tier='archive' on the memory.
101
+ */
102
+ export function syncArchiveToDb(db, memoryId) {
103
+ if (!db.isAvailable())
104
+ return;
105
+ db.updateMemory(memoryId, {
106
+ tier: "archive",
107
+ status: "archived",
108
+ modified: new Date().toISOString().split("T")[0],
109
+ });
110
+ }
111
+ /**
112
+ * Sync a dearchive operation to gnosys.db.
113
+ * Sets tier='active' on the memory.
114
+ */
115
+ export function syncDearchiveToDb(db, memoryId) {
116
+ if (!db.isAvailable())
117
+ return;
118
+ db.updateMemory(memoryId, {
119
+ tier: "active",
120
+ status: "active",
121
+ modified: new Date().toISOString().split("T")[0],
122
+ });
123
+ }
124
+ /**
125
+ * Sync a delete operation to gnosys.db.
126
+ */
127
+ export function syncDeleteToDb(db, memoryId) {
128
+ if (!db.isAvailable())
129
+ return;
130
+ db.deleteMemory(memoryId);
131
+ }
132
+ /**
133
+ * Sync a reinforcement to gnosys.db.
134
+ */
135
+ export function syncReinforcementToDb(db, memoryId, newCount) {
136
+ if (!db.isAvailable())
137
+ return;
138
+ db.updateMemory(memoryId, {
139
+ reinforcement_count: newCount,
140
+ last_reinforced: new Date().toISOString().split("T")[0],
141
+ modified: new Date().toISOString().split("T")[0],
142
+ });
143
+ }
144
+ /**
145
+ * Sync a confidence update to gnosys.db (e.g., from decay).
146
+ */
147
+ export function syncConfidenceToDb(db, memoryId, newConfidence) {
148
+ if (!db.isAvailable())
149
+ return;
150
+ db.updateMemory(memoryId, {
151
+ confidence: newConfidence,
152
+ modified: new Date().toISOString().split("T")[0],
153
+ });
154
+ }
155
+ /**
156
+ * Log an audit entry to gnosys.db's audit_log table.
157
+ * This supplements (and eventually replaces) the JSONL audit log.
158
+ */
159
+ export function auditToDb(db, operation, memoryId, details, durationMs, traceId) {
160
+ if (!db.isAvailable())
161
+ return;
162
+ db.logAudit({
163
+ timestamp: new Date().toISOString(),
164
+ operation,
165
+ memory_id: memoryId || null,
166
+ details: details ? JSON.stringify(details) : null,
167
+ duration_ms: durationMs ? Math.round(durationMs) : null,
168
+ trace_id: traceId || null,
169
+ });
170
+ }
171
+ //# sourceMappingURL=dbWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbWrite.js","sourceRoot":"","sources":["../../src/lib/dbWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAY,EACZ,WAA8B,EAC9B,OAAe,EACf,UAAmB,EACnB,SAAyB,EACzB,KAAc;IAEd,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAE9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3D,EAAE,CAAC,YAAY,CAAC;QACd,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,OAAO;QACP,OAAO,EAAE,IAAI;QACb,IAAI;QACJ,SAAS,EAAG,WAAW,CAAC,SAAoB,IAAI,EAAE;QAClD,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,IAAI;QAClC,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,UAAU;QAC9C,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,GAAG;QACzC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,IAAI,CAAC;QACzD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;QAC5B,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,QAAQ;QACtC,IAAI,EAAE,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC9D,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI;QAC1C,aAAa,EAAE,WAAW,CAAC,aAAa,IAAI,IAAI;QAChD,eAAe,EAAE,WAAW,CAAC,eAAe,IAAI,IAAI;QACpD,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,WAAW,EAAE,UAAU,IAAI,IAAI;QAC/B,UAAU,EAAE,SAAS,IAAI,IAAI;QAC7B,KAAK,EAAE,KAAK,IAAI,SAAS;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAY,EACZ,EAAU,EACV,OAAmC,EACnC,UAAmB;IAEnB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAE9B,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;YAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;QAAE,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAChF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAmB,CAAC;IACvF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;QAAE,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IACxF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QAAE,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACjG,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS;QAAE,SAAS,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAC3G,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;QAAE,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;IACvG,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAE7E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC;QAC/B,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAY,EAAE,QAAgB;IAC5D,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE;QACxB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAY,EAAE,QAAgB;IAC9D,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE;QACxB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAY,EAAE,QAAgB;IAC3D,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAY,EACZ,QAAgB,EAChB,QAAgB;IAEhB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE;QACxB,mBAAmB,EAAE,QAAQ;QAC7B,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAY,EACZ,QAAgB,EAChB,aAAqB;IAErB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE;QACxB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,EAAY,EACZ,SAAiB,EACjB,QAAiB,EACjB,OAAiC,EACjC,UAAmB,EACnB,OAAgB;IAEhB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO;IAC9B,EAAE,CAAC,QAAQ,CAAC;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS;QACT,SAAS,EAAE,QAAQ,IAAI,IAAI;QAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;QACjD,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QACvD,QAAQ,EAAE,OAAO,IAAI,IAAI;KAC1B,CAAC,CAAC;AACL,CAAC"}