gnosys 5.4.3 → 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.
Files changed (70) hide show
  1. package/README.md +52 -8
  2. package/dist/cli.js +246 -27
  3. package/dist/cli.js.map +1 -1
  4. package/dist/lib/audioExtract.d.ts +1 -1
  5. package/dist/lib/audioExtract.js +6 -6
  6. package/dist/lib/audioExtract.js.map +1 -1
  7. package/dist/lib/chat/choose.d.ts +75 -0
  8. package/dist/lib/chat/choose.d.ts.map +1 -0
  9. package/dist/lib/chat/choose.js +146 -0
  10. package/dist/lib/chat/choose.js.map +1 -0
  11. package/dist/lib/chat/commands.d.ts +96 -0
  12. package/dist/lib/chat/commands.d.ts.map +1 -0
  13. package/dist/lib/chat/commands.js +367 -0
  14. package/dist/lib/chat/commands.js.map +1 -0
  15. package/dist/lib/chat/focus.d.ts +70 -0
  16. package/dist/lib/chat/focus.d.ts.map +1 -0
  17. package/dist/lib/chat/focus.js +120 -0
  18. package/dist/lib/chat/focus.js.map +1 -0
  19. package/dist/lib/chat/index.d.ts +32 -0
  20. package/dist/lib/chat/index.d.ts.map +1 -0
  21. package/dist/lib/chat/index.js +151 -0
  22. package/dist/lib/chat/index.js.map +1 -0
  23. package/dist/lib/chat/intent.d.ts +100 -0
  24. package/dist/lib/chat/intent.d.ts.map +1 -0
  25. package/dist/lib/chat/intent.js +192 -0
  26. package/dist/lib/chat/intent.js.map +1 -0
  27. package/dist/lib/chat/llmTurn.d.ts +37 -0
  28. package/dist/lib/chat/llmTurn.d.ts.map +1 -0
  29. package/dist/lib/chat/llmTurn.js +61 -0
  30. package/dist/lib/chat/llmTurn.js.map +1 -0
  31. package/dist/lib/chat/recall.d.ts +58 -0
  32. package/dist/lib/chat/recall.d.ts.map +1 -0
  33. package/dist/lib/chat/recall.js +109 -0
  34. package/dist/lib/chat/recall.js.map +1 -0
  35. package/dist/lib/chat/render.d.ts +30 -0
  36. package/dist/lib/chat/render.d.ts.map +1 -0
  37. package/dist/lib/chat/render.js +737 -0
  38. package/dist/lib/chat/render.js.map +1 -0
  39. package/dist/lib/chat/session.d.ts +121 -0
  40. package/dist/lib/chat/session.d.ts.map +1 -0
  41. package/dist/lib/chat/session.js +148 -0
  42. package/dist/lib/chat/session.js.map +1 -0
  43. package/dist/lib/chat/types.d.ts +42 -0
  44. package/dist/lib/chat/types.d.ts.map +1 -0
  45. package/dist/lib/chat/types.js +6 -0
  46. package/dist/lib/chat/types.js.map +1 -0
  47. package/dist/lib/chat/write.d.ts +66 -0
  48. package/dist/lib/chat/write.d.ts.map +1 -0
  49. package/dist/lib/chat/write.js +203 -0
  50. package/dist/lib/chat/write.js.map +1 -0
  51. package/dist/lib/config.d.ts.map +1 -1
  52. package/dist/lib/config.js +6 -2
  53. package/dist/lib/config.js.map +1 -1
  54. package/dist/lib/db.d.ts +3 -1
  55. package/dist/lib/db.d.ts.map +1 -1
  56. package/dist/lib/db.js +18 -2
  57. package/dist/lib/db.js.map +1 -1
  58. package/dist/lib/embeddings.d.ts +1 -1
  59. package/dist/lib/embeddings.d.ts.map +1 -1
  60. package/dist/lib/embeddings.js +9 -4
  61. package/dist/lib/embeddings.js.map +1 -1
  62. package/dist/lib/exportProject.d.ts +51 -0
  63. package/dist/lib/exportProject.d.ts.map +1 -0
  64. package/dist/lib/exportProject.js +72 -0
  65. package/dist/lib/exportProject.js.map +1 -0
  66. package/dist/lib/importProject.d.ts +35 -0
  67. package/dist/lib/importProject.d.ts.map +1 -0
  68. package/dist/lib/importProject.js +135 -0
  69. package/dist/lib/importProject.js.map +1 -0
  70. package/package.json +8 -2
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Per-project bundle export — packs a single project's memories, relationships,
3
+ * audit log, and metadata into a portable .json.gz file. Lossless round-trip
4
+ * with importProject.ts. Format version 1.
5
+ */
6
+ import { GnosysDB, DbMemory, DbProject, DbRelationship, DbAuditEntry } from "./db.js";
7
+ export declare const BUNDLE_FORMAT = "gnosys-project-bundle";
8
+ export declare const BUNDLE_VERSION = 1;
9
+ export interface BundleManifest {
10
+ format: typeof BUNDLE_FORMAT;
11
+ version: number;
12
+ created: string;
13
+ source_machine: string;
14
+ source_user: string;
15
+ gnosys_version: string;
16
+ }
17
+ /** A memory row with its embedding base64-encoded for JSON transport. */
18
+ export interface PortableMemory extends Omit<DbMemory, "embedding"> {
19
+ embedding_b64: string | null;
20
+ }
21
+ export interface ProjectBundle {
22
+ manifest: BundleManifest;
23
+ project: DbProject;
24
+ memories: PortableMemory[];
25
+ relationships: DbRelationship[];
26
+ audit_log: DbAuditEntry[];
27
+ }
28
+ export interface ExportProjectOptions {
29
+ /** Project ID to export. */
30
+ projectId: string;
31
+ /** Output path for the .json.gz file. */
32
+ outputPath: string;
33
+ /** Include archived/superseded memories too (default: only active). */
34
+ includeArchived?: boolean;
35
+ /** Include audit log entries (default: true). */
36
+ includeAudit?: boolean;
37
+ }
38
+ export interface ExportProjectResult {
39
+ outputPath: string;
40
+ memoryCount: number;
41
+ relationshipCount: number;
42
+ auditEntryCount: number;
43
+ uncompressedBytes: number;
44
+ compressedBytes: number;
45
+ }
46
+ /**
47
+ * Export a single project to a .json.gz bundle.
48
+ * Bundle is fully self-contained — embeddings are base64-encoded inline.
49
+ */
50
+ export declare function exportProject(db: GnosysDB, opts: ExportProjectOptions): ExportProjectResult;
51
+ //# sourceMappingURL=exportProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportProject.d.ts","sourceRoot":"","sources":["../../src/lib/exportProject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKtF,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;IACjE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAYD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,oBAAoB,GACzB,mBAAmB,CAiDrB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Per-project bundle export — packs a single project's memories, relationships,
3
+ * audit log, and metadata into a portable .json.gz file. Lossless round-trip
4
+ * with importProject.ts. Format version 1.
5
+ */
6
+ import { gzipSync } from "zlib";
7
+ import { writeFileSync } from "fs";
8
+ import { hostname, userInfo } from "os";
9
+ import { readFileSync as readPkg } from "fs";
10
+ import { fileURLToPath } from "url";
11
+ import { join, dirname } from "path";
12
+ export const BUNDLE_FORMAT = "gnosys-project-bundle";
13
+ export const BUNDLE_VERSION = 1;
14
+ function getGnosysVersion() {
15
+ try {
16
+ const here = dirname(fileURLToPath(import.meta.url));
17
+ const pkg = JSON.parse(readPkg(join(here, "..", "..", "package.json"), "utf-8"));
18
+ return pkg.version;
19
+ }
20
+ catch {
21
+ return "unknown";
22
+ }
23
+ }
24
+ /**
25
+ * Export a single project to a .json.gz bundle.
26
+ * Bundle is fully self-contained — embeddings are base64-encoded inline.
27
+ */
28
+ export function exportProject(db, opts) {
29
+ const project = db.getProject(opts.projectId);
30
+ if (!project) {
31
+ throw new Error(`Project not found: ${opts.projectId}`);
32
+ }
33
+ const rawMemories = db.getMemoriesByProject(opts.projectId, !!opts.includeArchived);
34
+ const memories = rawMemories.map((m) => {
35
+ const { embedding: _embedding, ...rest } = m;
36
+ return {
37
+ ...rest,
38
+ embedding_b64: m.embedding ? Buffer.from(m.embedding).toString("base64") : null,
39
+ };
40
+ });
41
+ const memoryIds = rawMemories.map((m) => m.id);
42
+ const relationships = db.getRelationshipsForMemoryIds(memoryIds);
43
+ const audit_log = opts.includeAudit !== false
44
+ ? db.getAuditEntriesByProject(opts.projectId)
45
+ : [];
46
+ const bundle = {
47
+ manifest: {
48
+ format: BUNDLE_FORMAT,
49
+ version: BUNDLE_VERSION,
50
+ created: new Date().toISOString(),
51
+ source_machine: hostname(),
52
+ source_user: userInfo().username,
53
+ gnosys_version: getGnosysVersion(),
54
+ },
55
+ project,
56
+ memories,
57
+ relationships,
58
+ audit_log,
59
+ };
60
+ const json = JSON.stringify(bundle);
61
+ const compressed = gzipSync(Buffer.from(json, "utf-8"));
62
+ writeFileSync(opts.outputPath, compressed);
63
+ return {
64
+ outputPath: opts.outputPath,
65
+ memoryCount: memories.length,
66
+ relationshipCount: relationships.length,
67
+ auditEntryCount: audit_log.length,
68
+ uncompressedBytes: Buffer.byteLength(json, "utf-8"),
69
+ compressedBytes: compressed.length,
70
+ };
71
+ }
72
+ //# sourceMappingURL=exportProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportProject.js","sourceRoot":"","sources":["../../src/lib/exportProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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 { GnosysDB } from "./db.js";
7
+ import { ProjectBundle } from "./exportProject.js";
8
+ export type ImportStrategy =
9
+ /** Skip rows that already exist; insert new ones. Safe default. */
10
+ "merge"
11
+ /** Replace existing project + its memories. Destructive — deletes target project's memories first. */
12
+ | "replace"
13
+ /** Generate a fresh project ID; suffix any colliding memory IDs with a short marker. */
14
+ | "new-id";
15
+ export interface ImportProjectOptions {
16
+ bundlePath: string;
17
+ strategy?: ImportStrategy;
18
+ /** Override the imported project's working_directory (e.g. when restoring on a different machine). */
19
+ workingDirectoryOverride?: string;
20
+ }
21
+ export interface ImportProjectResult {
22
+ projectId: string;
23
+ projectName: string;
24
+ strategy: ImportStrategy;
25
+ memoriesInserted: number;
26
+ memoriesSkipped: number;
27
+ memoriesReplaced: number;
28
+ relationshipsInserted: number;
29
+ auditEntriesInserted: number;
30
+ }
31
+ /** Read and validate a bundle file. Throws on malformed or unsupported version. */
32
+ export declare function readBundle(bundlePath: string): ProjectBundle;
33
+ /** Restore a bundle into the central DB. Returns counts and the final project ID. */
34
+ export declare function importProject(db: GnosysDB, opts: ImportProjectOptions): ImportProjectResult;
35
+ //# sourceMappingURL=importProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importProject.d.ts","sourceRoot":"","sources":["../../src/lib/importProject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAC;AACxD,OAAO,EAGL,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,cAAc;AACxB,mEAAmE;AACjE,OAAO;AACT,sGAAsG;GACpG,SAAS;AACX,wFAAwF;GACtF,QAAQ,CAAC;AAEb,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,sGAAsG;IACtG,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAgB5D;AAUD,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,oBAAoB,GACzB,mBAAmB,CA+GrB"}
@@ -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.4.3",
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",
@@ -108,7 +114,7 @@
108
114
  "url": "https://github.com/proticom/gnosys/issues"
109
115
  },
110
116
  "optionalDependencies": {
111
- "@xenova/transformers": "^2.17.2",
117
+ "@huggingface/transformers": "^4.2.0",
112
118
  "better-sqlite3": "^11.7.0"
113
119
  },
114
120
  "overrides": {