gnosys 5.5.0 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/dist/cli.js +204 -18
- package/dist/cli.js.map +1 -1
- package/dist/lib/chat/choose.d.ts +75 -0
- package/dist/lib/chat/choose.d.ts.map +1 -0
- package/dist/lib/chat/choose.js +146 -0
- package/dist/lib/chat/choose.js.map +1 -0
- package/dist/lib/chat/commands.d.ts +96 -0
- package/dist/lib/chat/commands.d.ts.map +1 -0
- package/dist/lib/chat/commands.js +367 -0
- package/dist/lib/chat/commands.js.map +1 -0
- package/dist/lib/chat/focus.d.ts +70 -0
- package/dist/lib/chat/focus.d.ts.map +1 -0
- package/dist/lib/chat/focus.js +120 -0
- package/dist/lib/chat/focus.js.map +1 -0
- package/dist/lib/chat/index.d.ts +32 -0
- package/dist/lib/chat/index.d.ts.map +1 -0
- package/dist/lib/chat/index.js +151 -0
- package/dist/lib/chat/index.js.map +1 -0
- package/dist/lib/chat/intent.d.ts +100 -0
- package/dist/lib/chat/intent.d.ts.map +1 -0
- package/dist/lib/chat/intent.js +192 -0
- package/dist/lib/chat/intent.js.map +1 -0
- package/dist/lib/chat/llmTurn.d.ts +37 -0
- package/dist/lib/chat/llmTurn.d.ts.map +1 -0
- package/dist/lib/chat/llmTurn.js +61 -0
- package/dist/lib/chat/llmTurn.js.map +1 -0
- package/dist/lib/chat/recall.d.ts +58 -0
- package/dist/lib/chat/recall.d.ts.map +1 -0
- package/dist/lib/chat/recall.js +109 -0
- package/dist/lib/chat/recall.js.map +1 -0
- package/dist/lib/chat/render.d.ts +30 -0
- package/dist/lib/chat/render.d.ts.map +1 -0
- package/dist/lib/chat/render.js +737 -0
- package/dist/lib/chat/render.js.map +1 -0
- package/dist/lib/chat/session.d.ts +121 -0
- package/dist/lib/chat/session.d.ts.map +1 -0
- package/dist/lib/chat/session.js +148 -0
- package/dist/lib/chat/session.js.map +1 -0
- package/dist/lib/chat/types.d.ts +42 -0
- package/dist/lib/chat/types.d.ts.map +1 -0
- package/dist/lib/chat/types.js +6 -0
- package/dist/lib/chat/types.js.map +1 -0
- package/dist/lib/chat/write.d.ts +66 -0
- package/dist/lib/chat/write.d.ts.map +1 -0
- package/dist/lib/chat/write.js +203 -0
- package/dist/lib/chat/write.js.map +1 -0
- package/dist/lib/db.d.ts +3 -1
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +18 -2
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/exportProject.d.ts +51 -0
- package/dist/lib/exportProject.d.ts.map +1 -0
- package/dist/lib/exportProject.js +72 -0
- package/dist/lib/exportProject.js.map +1 -0
- package/dist/lib/importProject.d.ts +35 -0
- package/dist/lib/importProject.d.ts.map +1 -0
- package/dist/lib/importProject.js +135 -0
- package/dist/lib/importProject.js.map +1 -0
- package/package.json +7 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-project bundle import — restores a .json.gz bundle produced by
|
|
3
|
+
* exportProject.ts into the central DB. Three conflict strategies for
|
|
4
|
+
* existing project IDs / memory IDs.
|
|
5
|
+
*/
|
|
6
|
+
import { gunzipSync } from "zlib";
|
|
7
|
+
import { readFileSync } from "fs";
|
|
8
|
+
import { BUNDLE_FORMAT, BUNDLE_VERSION, } from "./exportProject.js";
|
|
9
|
+
/** Read and validate a bundle file. Throws on malformed or unsupported version. */
|
|
10
|
+
export function readBundle(bundlePath) {
|
|
11
|
+
const compressed = readFileSync(bundlePath);
|
|
12
|
+
const json = gunzipSync(compressed).toString("utf-8");
|
|
13
|
+
const bundle = JSON.parse(json);
|
|
14
|
+
if (bundle?.manifest?.format !== BUNDLE_FORMAT) {
|
|
15
|
+
throw new Error(`Not a Gnosys project bundle: format = ${bundle?.manifest?.format ?? "<missing>"}`);
|
|
16
|
+
}
|
|
17
|
+
if (bundle.manifest.version !== BUNDLE_VERSION) {
|
|
18
|
+
throw new Error(`Unsupported bundle version ${bundle.manifest.version} (expected ${BUNDLE_VERSION})`);
|
|
19
|
+
}
|
|
20
|
+
return bundle;
|
|
21
|
+
}
|
|
22
|
+
function portableToDbMemory(p) {
|
|
23
|
+
const { embedding_b64, ...rest } = p;
|
|
24
|
+
return {
|
|
25
|
+
...rest,
|
|
26
|
+
embedding: embedding_b64 ? Buffer.from(embedding_b64, "base64") : null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Restore a bundle into the central DB. Returns counts and the final project ID. */
|
|
30
|
+
export function importProject(db, opts) {
|
|
31
|
+
const strategy = opts.strategy ?? "merge";
|
|
32
|
+
const bundle = readBundle(opts.bundlePath);
|
|
33
|
+
let project = bundle.project;
|
|
34
|
+
if (opts.workingDirectoryOverride) {
|
|
35
|
+
project = { ...project, working_directory: opts.workingDirectoryOverride };
|
|
36
|
+
}
|
|
37
|
+
const existing = db.getProject(project.id);
|
|
38
|
+
let projectId = project.id;
|
|
39
|
+
let memoryIdRewrites = new Map();
|
|
40
|
+
let memoriesReplaced = 0;
|
|
41
|
+
if (existing) {
|
|
42
|
+
if (strategy === "replace") {
|
|
43
|
+
// Delete all of the existing project's memories before re-inserting
|
|
44
|
+
const existingMems = db.getMemoriesByProject(project.id, true);
|
|
45
|
+
for (const mem of existingMems) {
|
|
46
|
+
db.deleteMemory(mem.id);
|
|
47
|
+
memoriesReplaced++;
|
|
48
|
+
}
|
|
49
|
+
db.insertProject(project);
|
|
50
|
+
}
|
|
51
|
+
else if (strategy === "new-id") {
|
|
52
|
+
// Generate a fresh project id; remap memory project_ids during insert
|
|
53
|
+
projectId = `${project.id}-imported-${Date.now().toString(36)}`;
|
|
54
|
+
db.insertProject({ ...project, id: projectId });
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// merge — keep existing project row; bundle memories get inserted under it
|
|
58
|
+
// (no project upsert)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
db.insertProject({ ...project, id: projectId });
|
|
63
|
+
}
|
|
64
|
+
let memoriesInserted = 0;
|
|
65
|
+
let memoriesSkipped = 0;
|
|
66
|
+
for (const portable of bundle.memories) {
|
|
67
|
+
const candidate = portableToDbMemory(portable);
|
|
68
|
+
let id = candidate.id;
|
|
69
|
+
if (strategy === "new-id" && projectId !== bundle.project.id) {
|
|
70
|
+
id = `${candidate.id}-imp${Date.now().toString(36).slice(-4)}`;
|
|
71
|
+
memoryIdRewrites.set(candidate.id, id);
|
|
72
|
+
}
|
|
73
|
+
const existingMem = db.getMemory(id);
|
|
74
|
+
if (existingMem) {
|
|
75
|
+
if (strategy === "merge") {
|
|
76
|
+
memoriesSkipped++;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (strategy === "replace") {
|
|
80
|
+
db.deleteMemory(id);
|
|
81
|
+
memoriesReplaced++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const toInsert = {
|
|
85
|
+
...candidate,
|
|
86
|
+
id,
|
|
87
|
+
project_id: projectId,
|
|
88
|
+
};
|
|
89
|
+
db.insertMemory(toInsert);
|
|
90
|
+
memoriesInserted++;
|
|
91
|
+
}
|
|
92
|
+
// Relationships — apply the same id rewrites if any
|
|
93
|
+
let relationshipsInserted = 0;
|
|
94
|
+
for (const rel of bundle.relationships) {
|
|
95
|
+
const sourceId = memoryIdRewrites.get(rel.source_id) ?? rel.source_id;
|
|
96
|
+
const targetId = memoryIdRewrites.get(rel.target_id) ?? rel.target_id;
|
|
97
|
+
try {
|
|
98
|
+
db.insertRelationship({
|
|
99
|
+
...rel,
|
|
100
|
+
source_id: sourceId,
|
|
101
|
+
target_id: targetId,
|
|
102
|
+
});
|
|
103
|
+
relationshipsInserted++;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Duplicate primary key (source, target, type) — skip silently in merge mode
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Audit log — append-only restoration; no rewrites needed since audit
|
|
110
|
+
// is keyed by autoincrement id which the DB regenerates.
|
|
111
|
+
let auditEntriesInserted = 0;
|
|
112
|
+
for (const entry of bundle.audit_log) {
|
|
113
|
+
const memoryId = entry.memory_id ? (memoryIdRewrites.get(entry.memory_id) ?? entry.memory_id) : null;
|
|
114
|
+
db.logAudit({
|
|
115
|
+
timestamp: entry.timestamp,
|
|
116
|
+
operation: entry.operation,
|
|
117
|
+
memory_id: memoryId,
|
|
118
|
+
details: entry.details,
|
|
119
|
+
duration_ms: entry.duration_ms,
|
|
120
|
+
trace_id: entry.trace_id,
|
|
121
|
+
});
|
|
122
|
+
auditEntriesInserted++;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
projectId,
|
|
126
|
+
projectName: project.name,
|
|
127
|
+
strategy,
|
|
128
|
+
memoriesInserted,
|
|
129
|
+
memoriesSkipped,
|
|
130
|
+
memoriesReplaced,
|
|
131
|
+
relationshipsInserted,
|
|
132
|
+
auditEntriesInserted,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=importProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importProject.js","sourceRoot":"","sources":["../../src/lib/importProject.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gnosys",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"description": "Gnosys — Persistent Memory for AI Agents. Sandbox-first runtime, central SQLite brain, federated search, Dream Mode, Web Knowledge Base, Obsidian export.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,8 +37,13 @@
|
|
|
37
37
|
"dotenv": "^17.3.1",
|
|
38
38
|
"glob": "^13.0.6",
|
|
39
39
|
"gray-matter": "^4.0.3",
|
|
40
|
+
"ink": "^7.0.1",
|
|
41
|
+
"ink-select-input": "^6.2.0",
|
|
42
|
+
"ink-spinner": "^5.0.0",
|
|
43
|
+
"ink-text-input": "^6.0.0",
|
|
40
44
|
"mammoth": "^1.12.0",
|
|
41
45
|
"pdf-parse": "^2.4.5",
|
|
46
|
+
"react": "^19.2.5",
|
|
42
47
|
"turndown": "^7.2.2",
|
|
43
48
|
"ulidx": "^2.4.1",
|
|
44
49
|
"zod": "^4.3.6"
|
|
@@ -46,6 +51,7 @@
|
|
|
46
51
|
"devDependencies": {
|
|
47
52
|
"@types/better-sqlite3": "^7.6.12",
|
|
48
53
|
"@types/node": "^22.10.0",
|
|
54
|
+
"@types/react": "^19.2.14",
|
|
49
55
|
"@types/turndown": "^5.0.6",
|
|
50
56
|
"@vitest/coverage-v8": "^4.1.0",
|
|
51
57
|
"tsx": "^4.19.0",
|