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.
- package/LICENSE +21 -0
- package/README.md +1387 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3753 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2267 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/archive.d.ts +95 -0
- package/dist/lib/archive.d.ts.map +1 -0
- package/dist/lib/archive.js +311 -0
- package/dist/lib/archive.js.map +1 -0
- package/dist/lib/ask.d.ts +77 -0
- package/dist/lib/ask.d.ts.map +1 -0
- package/dist/lib/ask.js +316 -0
- package/dist/lib/ask.js.map +1 -0
- package/dist/lib/audit.d.ts +47 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +136 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/bootstrap.d.ts +56 -0
- package/dist/lib/bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap.js +163 -0
- package/dist/lib/bootstrap.js.map +1 -0
- package/dist/lib/config.d.ts +239 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +371 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dashboard.d.ts +81 -0
- package/dist/lib/dashboard.d.ts.map +1 -0
- package/dist/lib/dashboard.js +314 -0
- package/dist/lib/dashboard.js.map +1 -0
- package/dist/lib/db.d.ts +182 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +620 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/dbSearch.d.ts +65 -0
- package/dist/lib/dbSearch.d.ts.map +1 -0
- package/dist/lib/dbSearch.js +239 -0
- package/dist/lib/dbSearch.js.map +1 -0
- package/dist/lib/dbWrite.d.ts +56 -0
- package/dist/lib/dbWrite.d.ts.map +1 -0
- package/dist/lib/dbWrite.js +171 -0
- package/dist/lib/dbWrite.js.map +1 -0
- package/dist/lib/dream.d.ts +170 -0
- package/dist/lib/dream.d.ts.map +1 -0
- package/dist/lib/dream.js +706 -0
- package/dist/lib/dream.js.map +1 -0
- package/dist/lib/embeddings.d.ts +84 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +226 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/export.d.ts +92 -0
- package/dist/lib/export.d.ts.map +1 -0
- package/dist/lib/export.js +362 -0
- package/dist/lib/export.js.map +1 -0
- package/dist/lib/federated.d.ts +113 -0
- package/dist/lib/federated.d.ts.map +1 -0
- package/dist/lib/federated.js +346 -0
- package/dist/lib/federated.js.map +1 -0
- package/dist/lib/graph.d.ts +50 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +118 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/history.d.ts +39 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +112 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/hybridSearch.d.ts +80 -0
- package/dist/lib/hybridSearch.d.ts.map +1 -0
- package/dist/lib/hybridSearch.js +296 -0
- package/dist/lib/hybridSearch.js.map +1 -0
- package/dist/lib/import.d.ts +52 -0
- package/dist/lib/import.d.ts.map +1 -0
- package/dist/lib/import.js +365 -0
- package/dist/lib/import.js.map +1 -0
- package/dist/lib/ingest.d.ts +51 -0
- package/dist/lib/ingest.d.ts.map +1 -0
- package/dist/lib/ingest.js +144 -0
- package/dist/lib/ingest.js.map +1 -0
- package/dist/lib/lensing.d.ts +35 -0
- package/dist/lib/lensing.d.ts.map +1 -0
- package/dist/lib/lensing.js +85 -0
- package/dist/lib/lensing.js.map +1 -0
- package/dist/lib/llm.d.ts +84 -0
- package/dist/lib/llm.d.ts.map +1 -0
- package/dist/lib/llm.js +386 -0
- package/dist/lib/llm.js.map +1 -0
- package/dist/lib/lock.d.ts +28 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +145 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/maintenance.d.ts +124 -0
- package/dist/lib/maintenance.d.ts.map +1 -0
- package/dist/lib/maintenance.js +587 -0
- package/dist/lib/maintenance.js.map +1 -0
- package/dist/lib/migrate.d.ts +19 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +260 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/preferences.d.ts +49 -0
- package/dist/lib/preferences.d.ts.map +1 -0
- package/dist/lib/preferences.js +149 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/projectIdentity.d.ts +66 -0
- package/dist/lib/projectIdentity.d.ts.map +1 -0
- package/dist/lib/projectIdentity.js +148 -0
- package/dist/lib/projectIdentity.js.map +1 -0
- package/dist/lib/recall.d.ts +82 -0
- package/dist/lib/recall.d.ts.map +1 -0
- package/dist/lib/recall.js +289 -0
- package/dist/lib/recall.js.map +1 -0
- package/dist/lib/resolver.d.ts +116 -0
- package/dist/lib/resolver.d.ts.map +1 -0
- package/dist/lib/resolver.js +372 -0
- package/dist/lib/resolver.js.map +1 -0
- package/dist/lib/retry.d.ts +24 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +60 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/rulesGen.d.ts +51 -0
- package/dist/lib/rulesGen.d.ts.map +1 -0
- package/dist/lib/rulesGen.js +167 -0
- package/dist/lib/rulesGen.js.map +1 -0
- package/dist/lib/search.d.ts +51 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +190 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/staticSearch.d.ts +70 -0
- package/dist/lib/staticSearch.d.ts.map +1 -0
- package/dist/lib/staticSearch.js +162 -0
- package/dist/lib/staticSearch.js.map +1 -0
- package/dist/lib/store.d.ts +79 -0
- package/dist/lib/store.d.ts.map +1 -0
- package/dist/lib/store.js +227 -0
- package/dist/lib/store.js.map +1 -0
- package/dist/lib/structuredIngest.d.ts +37 -0
- package/dist/lib/structuredIngest.d.ts.map +1 -0
- package/dist/lib/structuredIngest.js +208 -0
- package/dist/lib/structuredIngest.js.map +1 -0
- package/dist/lib/tags.d.ts +26 -0
- package/dist/lib/tags.d.ts.map +1 -0
- package/dist/lib/tags.js +109 -0
- package/dist/lib/tags.js.map +1 -0
- package/dist/lib/timeline.d.ts +34 -0
- package/dist/lib/timeline.d.ts.map +1 -0
- package/dist/lib/timeline.js +116 -0
- package/dist/lib/timeline.js.map +1 -0
- package/dist/lib/trace.d.ts +42 -0
- package/dist/lib/trace.d.ts.map +1 -0
- package/dist/lib/trace.js +338 -0
- package/dist/lib/trace.js.map +1 -0
- package/dist/lib/webIndex.d.ts +28 -0
- package/dist/lib/webIndex.d.ts.map +1 -0
- package/dist/lib/webIndex.js +208 -0
- package/dist/lib/webIndex.js.map +1 -0
- package/dist/lib/webIngest.d.ts +51 -0
- package/dist/lib/webIngest.d.ts.map +1 -0
- package/dist/lib/webIngest.js +533 -0
- package/dist/lib/webIngest.js.map +1 -0
- package/dist/lib/wikilinks.d.ts +63 -0
- package/dist/lib/wikilinks.d.ts.map +1 -0
- package/dist/lib/wikilinks.js +146 -0
- package/dist/lib/wikilinks.js.map +1 -0
- package/dist/sandbox/client.d.ts +82 -0
- package/dist/sandbox/client.d.ts.map +1 -0
- package/dist/sandbox/client.js +128 -0
- package/dist/sandbox/client.js.map +1 -0
- package/dist/sandbox/helper-template.d.ts +14 -0
- package/dist/sandbox/helper-template.d.ts.map +1 -0
- package/dist/sandbox/helper-template.js +285 -0
- package/dist/sandbox/helper-template.js.map +1 -0
- package/dist/sandbox/index.d.ts +10 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +10 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/manager.d.ts +40 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +220 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/server.d.ts +44 -0
- package/dist/sandbox/server.d.ts.map +1 -0
- package/dist/sandbox/server.js +661 -0
- package/dist/sandbox/server.js.map +1 -0
- package/package.json +103 -0
- package/prompts/synthesize.md +21 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Obsidian Export Bridge — One-way export from gnosys.db to Obsidian vault.
|
|
3
|
+
*
|
|
4
|
+
* Converts the agent-native SQLite store into human-friendly atomic Markdown
|
|
5
|
+
* files with YAML frontmatter, [[wikilinks]], and proper folder structure.
|
|
6
|
+
*
|
|
7
|
+
* This is a completely separate module — it reads from gnosys.db and writes
|
|
8
|
+
* to a target directory. It never modifies gnosys.db.
|
|
9
|
+
*
|
|
10
|
+
* Output structure:
|
|
11
|
+
* target/
|
|
12
|
+
* category/
|
|
13
|
+
* memory-title.md (YAML frontmatter + content + wikilinks)
|
|
14
|
+
* _summaries/
|
|
15
|
+
* category.md (category-level summaries from dream mode)
|
|
16
|
+
* _review/
|
|
17
|
+
* suggested-reviews.md (review suggestions from dream mode)
|
|
18
|
+
* _graph/
|
|
19
|
+
* relationships.md (relationship index)
|
|
20
|
+
*/
|
|
21
|
+
import path from "path";
|
|
22
|
+
import fs from "fs/promises";
|
|
23
|
+
// ─── Export Engine ────────────────────────────────────────────────────────
|
|
24
|
+
export class GnosysExporter {
|
|
25
|
+
db;
|
|
26
|
+
constructor(db) {
|
|
27
|
+
this.db = db;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Export gnosys.db contents to an Obsidian-compatible vault structure.
|
|
31
|
+
*/
|
|
32
|
+
async export(options) {
|
|
33
|
+
const { targetDir, activeOnly = true, includeSummaries = true, includeReviews = true, includeGraph = true, overwrite = false, onProgress, } = options;
|
|
34
|
+
const report = {
|
|
35
|
+
memoriesExported: 0,
|
|
36
|
+
memoriesSkipped: 0,
|
|
37
|
+
summariesExported: 0,
|
|
38
|
+
reviewsExported: false,
|
|
39
|
+
graphExported: false,
|
|
40
|
+
targetDir,
|
|
41
|
+
errors: [],
|
|
42
|
+
};
|
|
43
|
+
// Ensure target directory exists
|
|
44
|
+
await fs.mkdir(targetDir, { recursive: true });
|
|
45
|
+
// Get memories to export
|
|
46
|
+
const memories = activeOnly
|
|
47
|
+
? this.db.getActiveMemories()
|
|
48
|
+
: this.db.getAllMemories();
|
|
49
|
+
const total = memories.length;
|
|
50
|
+
// Export each memory as a Markdown file
|
|
51
|
+
for (let i = 0; i < memories.length; i++) {
|
|
52
|
+
const mem = memories[i];
|
|
53
|
+
try {
|
|
54
|
+
const exported = await this.exportMemory(mem, targetDir, overwrite);
|
|
55
|
+
if (exported) {
|
|
56
|
+
report.memoriesExported++;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
report.memoriesSkipped++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
report.errors.push(`${mem.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
64
|
+
}
|
|
65
|
+
onProgress?.(i + 1, total, mem.title);
|
|
66
|
+
}
|
|
67
|
+
// Export summaries
|
|
68
|
+
if (includeSummaries) {
|
|
69
|
+
try {
|
|
70
|
+
report.summariesExported = await this.exportSummaries(targetDir, overwrite);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
report.errors.push(`summaries: ${err instanceof Error ? err.message : String(err)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Export review suggestions
|
|
77
|
+
if (includeReviews) {
|
|
78
|
+
try {
|
|
79
|
+
report.reviewsExported = await this.exportReviews(targetDir, overwrite);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
report.errors.push(`reviews: ${err instanceof Error ? err.message : String(err)}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Export relationship graph
|
|
86
|
+
if (includeGraph) {
|
|
87
|
+
try {
|
|
88
|
+
report.graphExported = await this.exportGraph(targetDir, memories, overwrite);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
report.errors.push(`graph: ${err instanceof Error ? err.message : String(err)}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return report;
|
|
95
|
+
}
|
|
96
|
+
// ─── Memory Export ───────────────────────────────────────────────────
|
|
97
|
+
/**
|
|
98
|
+
* Export a single memory as a Markdown file with YAML frontmatter.
|
|
99
|
+
* Returns true if exported, false if skipped (already exists).
|
|
100
|
+
*/
|
|
101
|
+
async exportMemory(mem, targetDir, overwrite) {
|
|
102
|
+
const categoryDir = path.join(targetDir, mem.category);
|
|
103
|
+
await fs.mkdir(categoryDir, { recursive: true });
|
|
104
|
+
const filename = this.slugify(mem.title) + ".md";
|
|
105
|
+
const filePath = path.join(categoryDir, filename);
|
|
106
|
+
// Check if file exists
|
|
107
|
+
if (!overwrite) {
|
|
108
|
+
try {
|
|
109
|
+
await fs.access(filePath);
|
|
110
|
+
return false; // File exists, skip
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// File doesn't exist, proceed
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Build YAML frontmatter
|
|
117
|
+
const tags = this.parseTags(mem.tags);
|
|
118
|
+
const relationships = this.getMemoryRelationships(mem.id);
|
|
119
|
+
const wikilinks = this.buildWikilinks(relationships);
|
|
120
|
+
const frontmatter = [
|
|
121
|
+
"---",
|
|
122
|
+
`id: ${mem.id}`,
|
|
123
|
+
`title: '${mem.title.replace(/'/g, "''")}'`,
|
|
124
|
+
`category: ${mem.category}`,
|
|
125
|
+
`tags:`,
|
|
126
|
+
...tags.map((t) => `- ${t}`),
|
|
127
|
+
`relevance: ${mem.relevance}`,
|
|
128
|
+
`author: ${mem.author}`,
|
|
129
|
+
`authority: ${mem.authority}`,
|
|
130
|
+
`confidence: ${mem.confidence}`,
|
|
131
|
+
`reinforcement_count: ${mem.reinforcement_count}`,
|
|
132
|
+
`created: '${mem.created}'`,
|
|
133
|
+
`modified: '${mem.modified}'`,
|
|
134
|
+
`status: ${mem.status}`,
|
|
135
|
+
...(mem.supersedes ? [`supersedes: ${mem.supersedes}`] : []),
|
|
136
|
+
...(mem.superseded_by ? [`superseded_by: ${mem.superseded_by}`] : []),
|
|
137
|
+
...(mem.last_reinforced ? [`last_reinforced: '${mem.last_reinforced}'`] : []),
|
|
138
|
+
"---",
|
|
139
|
+
].join("\n");
|
|
140
|
+
// Build content with wikilinks section
|
|
141
|
+
let content = `${frontmatter}\n\n# ${mem.title}\n\n${mem.content}`;
|
|
142
|
+
if (wikilinks.length > 0) {
|
|
143
|
+
content += `\n\n---\n\n## Related\n\n${wikilinks.join("\n")}`;
|
|
144
|
+
}
|
|
145
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
// ─── Summaries Export ────────────────────────────────────────────────
|
|
149
|
+
/**
|
|
150
|
+
* Export category summaries from the summaries table.
|
|
151
|
+
*/
|
|
152
|
+
async exportSummaries(targetDir, overwrite) {
|
|
153
|
+
const summaryDir = path.join(targetDir, "_summaries");
|
|
154
|
+
await fs.mkdir(summaryDir, { recursive: true });
|
|
155
|
+
const summaries = this.db.getAllSummaries();
|
|
156
|
+
let exported = 0;
|
|
157
|
+
for (const summary of summaries) {
|
|
158
|
+
if (summary.scope !== "category")
|
|
159
|
+
continue;
|
|
160
|
+
const filename = `${this.slugify(summary.scope_key)}.md`;
|
|
161
|
+
const filePath = path.join(summaryDir, filename);
|
|
162
|
+
if (!overwrite) {
|
|
163
|
+
try {
|
|
164
|
+
await fs.access(filePath);
|
|
165
|
+
continue; // Skip existing
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Proceed
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const content = [
|
|
172
|
+
"---",
|
|
173
|
+
`scope: ${summary.scope}`,
|
|
174
|
+
`scope_key: ${summary.scope_key}`,
|
|
175
|
+
`created: '${summary.created}'`,
|
|
176
|
+
`modified: '${summary.modified}'`,
|
|
177
|
+
"---",
|
|
178
|
+
"",
|
|
179
|
+
`# ${summary.scope_key} — Summary`,
|
|
180
|
+
"",
|
|
181
|
+
summary.content,
|
|
182
|
+
].join("\n");
|
|
183
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
184
|
+
exported++;
|
|
185
|
+
}
|
|
186
|
+
return exported;
|
|
187
|
+
}
|
|
188
|
+
// ─── Reviews Export ──────────────────────────────────────────────────
|
|
189
|
+
/**
|
|
190
|
+
* Export review suggestions from dream mode.
|
|
191
|
+
*/
|
|
192
|
+
async exportReviews(targetDir, overwrite) {
|
|
193
|
+
const reviewDir = path.join(targetDir, "_review");
|
|
194
|
+
await fs.mkdir(reviewDir, { recursive: true });
|
|
195
|
+
// Find the latest review summary
|
|
196
|
+
const summaries = this.db.getAllSummaries();
|
|
197
|
+
const reviews = summaries
|
|
198
|
+
.filter((s) => s.scope === "dream" && s.scope_key.startsWith("review-"))
|
|
199
|
+
.sort((a, b) => b.modified.localeCompare(a.modified));
|
|
200
|
+
if (reviews.length === 0)
|
|
201
|
+
return false;
|
|
202
|
+
const filePath = path.join(reviewDir, "suggested-reviews.md");
|
|
203
|
+
if (!overwrite) {
|
|
204
|
+
try {
|
|
205
|
+
await fs.access(filePath);
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Proceed
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Parse and format review suggestions
|
|
213
|
+
const lines = ["# Suggested Reviews", "", "Generated by Dream Mode. These memories may need attention.", ""];
|
|
214
|
+
for (const review of reviews) {
|
|
215
|
+
try {
|
|
216
|
+
const suggestions = JSON.parse(review.content);
|
|
217
|
+
if (!Array.isArray(suggestions))
|
|
218
|
+
continue;
|
|
219
|
+
lines.push(`## Review from ${review.scope_key.replace("review-", "")}`, "");
|
|
220
|
+
for (const s of suggestions) {
|
|
221
|
+
lines.push(`### ${s.title}`);
|
|
222
|
+
lines.push(`- **ID**: ${s.memoryId}`);
|
|
223
|
+
lines.push(`- **Action**: ${s.suggestedAction}`);
|
|
224
|
+
lines.push(`- **Confidence**: ${s.currentConfidence}`);
|
|
225
|
+
lines.push(`- **Reason**: ${s.reason}`);
|
|
226
|
+
lines.push("");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Skip malformed reviews
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
await fs.writeFile(filePath, lines.join("\n"), "utf-8");
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
// ─── Graph Export ────────────────────────────────────────────────────
|
|
237
|
+
/**
|
|
238
|
+
* Export the relationship graph as a navigable index with wikilinks.
|
|
239
|
+
*/
|
|
240
|
+
async exportGraph(targetDir, memories, overwrite) {
|
|
241
|
+
const graphDir = path.join(targetDir, "_graph");
|
|
242
|
+
await fs.mkdir(graphDir, { recursive: true });
|
|
243
|
+
const filePath = path.join(graphDir, "relationships.md");
|
|
244
|
+
if (!overwrite) {
|
|
245
|
+
try {
|
|
246
|
+
await fs.access(filePath);
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// Proceed
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Build the relationship index
|
|
254
|
+
const lines = ["# Relationship Graph", "", "Auto-generated from gnosys.db relationships table.", ""];
|
|
255
|
+
// Build a title lookup
|
|
256
|
+
const titleMap = new Map();
|
|
257
|
+
for (const mem of memories) {
|
|
258
|
+
titleMap.set(mem.id, mem.title);
|
|
259
|
+
}
|
|
260
|
+
// Group relationships by source
|
|
261
|
+
const bySource = new Map();
|
|
262
|
+
for (const mem of memories) {
|
|
263
|
+
const rels = this.db.getRelationshipsFrom(mem.id);
|
|
264
|
+
if (rels.length > 0) {
|
|
265
|
+
bySource.set(mem.id, rels);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
for (const [sourceId, rels] of bySource) {
|
|
269
|
+
const sourceTitle = titleMap.get(sourceId) || sourceId;
|
|
270
|
+
lines.push(`## [[${sourceTitle}]]`, "");
|
|
271
|
+
for (const rel of rels) {
|
|
272
|
+
const targetTitle = titleMap.get(rel.target_id) || rel.target_id;
|
|
273
|
+
const label = rel.label ? ` — ${rel.label}` : "";
|
|
274
|
+
lines.push(`- **${rel.rel_type}** → [[${targetTitle}]]${label} (confidence: ${rel.confidence})`);
|
|
275
|
+
}
|
|
276
|
+
lines.push("");
|
|
277
|
+
}
|
|
278
|
+
if (bySource.size === 0) {
|
|
279
|
+
lines.push("No relationships discovered yet. Run `gnosys dream` to discover relationships.");
|
|
280
|
+
}
|
|
281
|
+
await fs.writeFile(filePath, lines.join("\n"), "utf-8");
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
285
|
+
/**
|
|
286
|
+
* Get all relationships for a memory (both directions).
|
|
287
|
+
*/
|
|
288
|
+
getMemoryRelationships(id) {
|
|
289
|
+
const from = this.db.getRelationshipsFrom(id);
|
|
290
|
+
const to = this.db.getRelationshipsTo(id);
|
|
291
|
+
return [...from, ...to];
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Build [[wikilinks]] from relationships.
|
|
295
|
+
*/
|
|
296
|
+
buildWikilinks(relationships) {
|
|
297
|
+
const links = [];
|
|
298
|
+
const seen = new Set();
|
|
299
|
+
for (const rel of relationships) {
|
|
300
|
+
// Look up target memory title
|
|
301
|
+
const targetId = rel.target_id;
|
|
302
|
+
if (seen.has(targetId))
|
|
303
|
+
continue;
|
|
304
|
+
seen.add(targetId);
|
|
305
|
+
const target = this.db.getMemory(targetId);
|
|
306
|
+
if (target) {
|
|
307
|
+
const label = rel.label ? ` — ${rel.label}` : "";
|
|
308
|
+
links.push(`- ${rel.rel_type}: [[${target.title}]]${label}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return links;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Parse tags from JSON string.
|
|
315
|
+
*/
|
|
316
|
+
parseTags(tagsJson) {
|
|
317
|
+
try {
|
|
318
|
+
const parsed = JSON.parse(tagsJson || "[]");
|
|
319
|
+
if (Array.isArray(parsed))
|
|
320
|
+
return parsed;
|
|
321
|
+
return Object.values(parsed).flat();
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Slugify a title for use as a filename.
|
|
329
|
+
*/
|
|
330
|
+
slugify(text) {
|
|
331
|
+
return text
|
|
332
|
+
.toLowerCase()
|
|
333
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
334
|
+
.replace(/^-|-$/g, "")
|
|
335
|
+
.substring(0, 80);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// ─── Format Helper ───────────────────────────────────────────────────────
|
|
339
|
+
/**
|
|
340
|
+
* Format an export report as human-readable text.
|
|
341
|
+
*/
|
|
342
|
+
export function formatExportReport(report) {
|
|
343
|
+
const lines = [];
|
|
344
|
+
lines.push("Gnosys Obsidian Export Report");
|
|
345
|
+
lines.push("=".repeat(40));
|
|
346
|
+
lines.push("");
|
|
347
|
+
lines.push(`Target: ${report.targetDir}`);
|
|
348
|
+
lines.push(`Memories exported: ${report.memoriesExported}`);
|
|
349
|
+
lines.push(`Memories skipped (already exist): ${report.memoriesSkipped}`);
|
|
350
|
+
lines.push(`Summaries exported: ${report.summariesExported}`);
|
|
351
|
+
lines.push(`Reviews exported: ${report.reviewsExported ? "yes" : "no"}`);
|
|
352
|
+
lines.push(`Graph exported: ${report.graphExported ? "yes" : "no"}`);
|
|
353
|
+
if (report.errors.length > 0) {
|
|
354
|
+
lines.push("");
|
|
355
|
+
lines.push(`Errors (${report.errors.length}):`);
|
|
356
|
+
for (const e of report.errors) {
|
|
357
|
+
lines.push(` ! ${e}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return lines.join("\n");
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/lib/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Federated Search — Phase 8d
|
|
3
|
+
*
|
|
4
|
+
* Searches across all scopes (project → user → global) with tier boosting,
|
|
5
|
+
* multi-project ambiguity detection, implicit working set recency boost,
|
|
6
|
+
* and project briefing generation.
|
|
7
|
+
*
|
|
8
|
+
* Tier boosting order: project (1.5x) > user (1.0x) > global (0.7x)
|
|
9
|
+
* Recency boost: memories accessed/modified in the last 24h get a 1.3x boost
|
|
10
|
+
*/
|
|
11
|
+
import { GnosysDB, DbMemory, MemoryScope } from "./db.js";
|
|
12
|
+
export interface FederatedResult {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
category: string;
|
|
16
|
+
snippet: string;
|
|
17
|
+
score: number;
|
|
18
|
+
scope: MemoryScope;
|
|
19
|
+
projectId: string | null;
|
|
20
|
+
projectName: string | null;
|
|
21
|
+
/** Boost factors applied */
|
|
22
|
+
boosts: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface AmbiguityError {
|
|
25
|
+
type: "ambiguous_project";
|
|
26
|
+
message: string;
|
|
27
|
+
candidates: Array<{
|
|
28
|
+
projectId: string;
|
|
29
|
+
projectName: string;
|
|
30
|
+
workingDirectory: string;
|
|
31
|
+
memoryCount: number;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export interface ProjectBriefing {
|
|
35
|
+
projectId: string;
|
|
36
|
+
projectName: string;
|
|
37
|
+
workingDirectory: string;
|
|
38
|
+
totalMemories: number;
|
|
39
|
+
activeMemories: number;
|
|
40
|
+
categories: Record<string, number>;
|
|
41
|
+
recentActivity: Array<{
|
|
42
|
+
id: string;
|
|
43
|
+
title: string;
|
|
44
|
+
modified: string;
|
|
45
|
+
}>;
|
|
46
|
+
topTags: Array<{
|
|
47
|
+
tag: string;
|
|
48
|
+
count: number;
|
|
49
|
+
}>;
|
|
50
|
+
summary: string;
|
|
51
|
+
}
|
|
52
|
+
export interface FederatedSearchOptions {
|
|
53
|
+
/** Limit total results */
|
|
54
|
+
limit?: number;
|
|
55
|
+
/** Current project ID (auto-detected if omitted) */
|
|
56
|
+
projectId?: string | null;
|
|
57
|
+
/** Working directory for project auto-detection */
|
|
58
|
+
workingDir?: string;
|
|
59
|
+
/** Include global scope in results */
|
|
60
|
+
includeGlobal?: boolean;
|
|
61
|
+
/** Recency window in hours (default: 24) */
|
|
62
|
+
recencyWindowHours?: number;
|
|
63
|
+
/** Filter to specific scope(s). If set, only memories in these scopes are returned. */
|
|
64
|
+
scopeFilter?: MemoryScope[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Search across all scopes with tier boosting and recency awareness.
|
|
68
|
+
* Results from the current project rank highest, then user-scoped, then global.
|
|
69
|
+
*/
|
|
70
|
+
export declare function federatedSearch(db: GnosysDB, query: string, opts?: FederatedSearchOptions): FederatedResult[];
|
|
71
|
+
/**
|
|
72
|
+
* Discover across all scopes — lightweight metadata search
|
|
73
|
+
* with the same tier boosting logic.
|
|
74
|
+
*/
|
|
75
|
+
export declare function federatedDiscover(db: GnosysDB, query: string, opts?: FederatedSearchOptions): FederatedResult[];
|
|
76
|
+
/**
|
|
77
|
+
* Detect ambiguity when multiple projects match a query.
|
|
78
|
+
* Used by write operations — if the user doesn't specify a project and
|
|
79
|
+
* multiple projects have matching content, raise an ambiguity error
|
|
80
|
+
* listing all candidates.
|
|
81
|
+
*/
|
|
82
|
+
export declare function detectAmbiguity(db: GnosysDB, query: string, opts?: {
|
|
83
|
+
threshold?: number;
|
|
84
|
+
}): AmbiguityError | null;
|
|
85
|
+
/**
|
|
86
|
+
* Auto-detect the current project from a working directory.
|
|
87
|
+
* Returns the projectId or null.
|
|
88
|
+
*/
|
|
89
|
+
export declare function detectCurrentProject(db: GnosysDB, workingDir?: string): Promise<string | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Generate a project briefing — a pre-computed summary of a project's
|
|
92
|
+
* memory state. Designed for "dream mode" pre-computation or on-demand
|
|
93
|
+
* project status checks.
|
|
94
|
+
*/
|
|
95
|
+
export declare function generateBriefing(db: GnosysDB, projectId: string): ProjectBriefing | null;
|
|
96
|
+
/**
|
|
97
|
+
* Generate briefings for ALL registered projects.
|
|
98
|
+
* Used by dream mode to pre-compute briefings.
|
|
99
|
+
*/
|
|
100
|
+
export declare function generateAllBriefings(db: GnosysDB): ProjectBriefing[];
|
|
101
|
+
/**
|
|
102
|
+
* Get the implicit working set — recently accessed/modified memories
|
|
103
|
+
* for the current project. These get boosted in federated search results.
|
|
104
|
+
*/
|
|
105
|
+
export declare function getWorkingSet(db: GnosysDB, projectId: string, opts?: {
|
|
106
|
+
windowHours?: number;
|
|
107
|
+
limit?: number;
|
|
108
|
+
}): DbMemory[];
|
|
109
|
+
/**
|
|
110
|
+
* Format the working set as a concise context block for agent consumption.
|
|
111
|
+
*/
|
|
112
|
+
export declare function formatWorkingSet(memories: DbMemory[]): string;
|
|
113
|
+
//# sourceMappingURL=federated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federated.d.ts","sourceRoot":"","sources":["../../src/lib/federated.ts"],"names":[],"mappings":"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"}
|