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 @@
|
|
|
1
|
+
{"version":3,"file":"helper-template.js","sourceRoot":"","sources":["../../src/sandbox/helper-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,SAAwB;IACpD,OAAO;;;;;;;;;;;;;;gBAcO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;cAC1B,SAAS,IAAI,uBAAuB;;;;;;;;;;;oCAWd,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4NxE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IACpD,qCAAqC;IACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACtD,SAAS,GAAG,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAE5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Sandbox — Public API
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the client, manager, and server utilities
|
|
5
|
+
* for use by the CLI and helper library.
|
|
6
|
+
*/
|
|
7
|
+
export { SandboxClient } from "./client.js";
|
|
8
|
+
export { startSandbox, stopSandbox, sandboxStatus, ensureSandbox, type SandboxStatus, } from "./manager.js";
|
|
9
|
+
export { getSocketPath, getPidPath, getSandboxDir, handleRequest, startServer, initDreamMode, type SandboxRequest, type SandboxResponse, type DreamState, } from "./server.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Sandbox — Public API
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the client, manager, and server utilities
|
|
5
|
+
* for use by the CLI and helper library.
|
|
6
|
+
*/
|
|
7
|
+
export { SandboxClient } from "./client.js";
|
|
8
|
+
export { startSandbox, stopSandbox, sandboxStatus, ensureSandbox, } from "./manager.js";
|
|
9
|
+
export { getSocketPath, getPidPath, getSandboxDir, handleRequest, startServer, initDreamMode, } from "./server.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,GAEd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,GAId,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Sandbox Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of the background sandbox server process.
|
|
5
|
+
* Handles start, stop, status, and auto-start on helper import.
|
|
6
|
+
*/
|
|
7
|
+
import { SandboxClient } from "./client.js";
|
|
8
|
+
export interface SandboxStatus {
|
|
9
|
+
running: boolean;
|
|
10
|
+
pid?: number;
|
|
11
|
+
socketPath?: string;
|
|
12
|
+
uptime?: string;
|
|
13
|
+
dbPath?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Start the sandbox server as a detached background process.
|
|
17
|
+
* Returns the PID of the spawned process.
|
|
18
|
+
*/
|
|
19
|
+
export declare function startSandbox(opts?: {
|
|
20
|
+
persistent?: boolean;
|
|
21
|
+
dbPath?: string;
|
|
22
|
+
wait?: boolean;
|
|
23
|
+
}): Promise<number>;
|
|
24
|
+
/**
|
|
25
|
+
* Stop the sandbox server gracefully.
|
|
26
|
+
* First tries the shutdown command, then falls back to SIGTERM.
|
|
27
|
+
*/
|
|
28
|
+
export declare function stopSandbox(): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current status of the sandbox.
|
|
31
|
+
*/
|
|
32
|
+
export declare function sandboxStatus(): Promise<SandboxStatus>;
|
|
33
|
+
/**
|
|
34
|
+
* Ensure the sandbox is running (auto-start if needed).
|
|
35
|
+
* Used by the helper library to transparently start the sandbox.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ensureSandbox(opts?: {
|
|
38
|
+
dbPath?: string;
|
|
39
|
+
}): Promise<SandboxClient>;
|
|
40
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sandbox/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4DD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6DlB;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CA0CpD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAyB5D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAUtF"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Sandbox Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of the background sandbox server process.
|
|
5
|
+
* Handles start, stop, status, and auto-start on helper import.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from "child_process";
|
|
8
|
+
import fs from "fs";
|
|
9
|
+
import path from "path";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
import { getSandboxDir, getPidPath, getSocketPath } from "./server.js";
|
|
12
|
+
import { SandboxClient } from "./client.js";
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
/**
|
|
16
|
+
* Get the path to the compiled server entry point.
|
|
17
|
+
* Falls back to ts-node / tsx for development.
|
|
18
|
+
*/
|
|
19
|
+
function getServerScript() {
|
|
20
|
+
// In production (dist/), look for the compiled JS
|
|
21
|
+
const distServer = path.resolve(__dirname, "..", "sandbox", "server.js");
|
|
22
|
+
if (fs.existsSync(distServer))
|
|
23
|
+
return distServer;
|
|
24
|
+
// In development (src/), look for the TS source
|
|
25
|
+
const srcServer = path.resolve(__dirname, "..", "..", "src", "sandbox", "server.ts");
|
|
26
|
+
if (fs.existsSync(srcServer))
|
|
27
|
+
return srcServer;
|
|
28
|
+
// Fallback: relative to this file
|
|
29
|
+
return path.resolve(__dirname, "server.js");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read the PID from the PID file, if it exists.
|
|
33
|
+
*/
|
|
34
|
+
function readPid() {
|
|
35
|
+
const pidPath = getPidPath();
|
|
36
|
+
try {
|
|
37
|
+
const content = fs.readFileSync(pidPath, "utf8").trim();
|
|
38
|
+
const pid = parseInt(content, 10);
|
|
39
|
+
return isNaN(pid) ? null : pid;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if a process with the given PID is alive.
|
|
47
|
+
*/
|
|
48
|
+
function isProcessAlive(pid) {
|
|
49
|
+
try {
|
|
50
|
+
process.kill(pid, 0); // signal 0 = just check existence
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clean up stale PID and socket files when the process is no longer running.
|
|
59
|
+
*/
|
|
60
|
+
function cleanupStale() {
|
|
61
|
+
const pidPath = getPidPath();
|
|
62
|
+
const socketPath = getSocketPath();
|
|
63
|
+
try {
|
|
64
|
+
if (fs.existsSync(pidPath))
|
|
65
|
+
fs.unlinkSync(pidPath);
|
|
66
|
+
}
|
|
67
|
+
catch { /* best effort */ }
|
|
68
|
+
try {
|
|
69
|
+
if (process.platform !== "win32" && fs.existsSync(socketPath)) {
|
|
70
|
+
fs.unlinkSync(socketPath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch { /* best effort */ }
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Start the sandbox server as a detached background process.
|
|
77
|
+
* Returns the PID of the spawned process.
|
|
78
|
+
*/
|
|
79
|
+
export async function startSandbox(opts) {
|
|
80
|
+
// Check if already running
|
|
81
|
+
const client = new SandboxClient();
|
|
82
|
+
if (await client.isRunning()) {
|
|
83
|
+
const status = await client.ping();
|
|
84
|
+
return status.pid;
|
|
85
|
+
}
|
|
86
|
+
// Clean up stale files
|
|
87
|
+
cleanupStale();
|
|
88
|
+
const serverScript = getServerScript();
|
|
89
|
+
const args = [serverScript];
|
|
90
|
+
if (opts?.dbPath)
|
|
91
|
+
args.push(`--db-path=${opts.dbPath}`);
|
|
92
|
+
// Determine how to run the script
|
|
93
|
+
let command;
|
|
94
|
+
let spawnArgs;
|
|
95
|
+
if (serverScript.endsWith(".ts")) {
|
|
96
|
+
// Development mode — use tsx or ts-node
|
|
97
|
+
command = "npx";
|
|
98
|
+
spawnArgs = ["tsx", ...args];
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
command = process.execPath; // node
|
|
102
|
+
spawnArgs = args;
|
|
103
|
+
}
|
|
104
|
+
const logPath = path.join(getSandboxDir(), "sandbox.log");
|
|
105
|
+
const logFd = fs.openSync(logPath, "a");
|
|
106
|
+
const child = spawn(command, spawnArgs, {
|
|
107
|
+
detached: true,
|
|
108
|
+
stdio: ["ignore", logFd, logFd],
|
|
109
|
+
env: { ...process.env },
|
|
110
|
+
});
|
|
111
|
+
child.unref();
|
|
112
|
+
fs.closeSync(logFd);
|
|
113
|
+
if (!child.pid) {
|
|
114
|
+
throw new Error("Failed to spawn sandbox process");
|
|
115
|
+
}
|
|
116
|
+
// Wait for the socket to become available (up to 5 seconds)
|
|
117
|
+
if (opts?.wait !== false) {
|
|
118
|
+
const start = Date.now();
|
|
119
|
+
while (Date.now() - start < 5000) {
|
|
120
|
+
if (await client.isRunning()) {
|
|
121
|
+
return child.pid;
|
|
122
|
+
}
|
|
123
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
124
|
+
}
|
|
125
|
+
// Even if we timeout, the process may still be starting
|
|
126
|
+
// Check the PID file as fallback
|
|
127
|
+
const pid = readPid();
|
|
128
|
+
if (pid && isProcessAlive(pid))
|
|
129
|
+
return pid;
|
|
130
|
+
throw new Error("Sandbox started but failed to respond within 5 seconds. Check ~/.gnosys/sandbox/sandbox.log");
|
|
131
|
+
}
|
|
132
|
+
return child.pid;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Stop the sandbox server gracefully.
|
|
136
|
+
* First tries the shutdown command, then falls back to SIGTERM.
|
|
137
|
+
*/
|
|
138
|
+
export async function stopSandbox() {
|
|
139
|
+
const pid = readPid();
|
|
140
|
+
if (!pid || !isProcessAlive(pid)) {
|
|
141
|
+
cleanupStale();
|
|
142
|
+
return false; // wasn't running
|
|
143
|
+
}
|
|
144
|
+
// Try graceful shutdown via the protocol
|
|
145
|
+
try {
|
|
146
|
+
const client = new SandboxClient();
|
|
147
|
+
await client.shutdown();
|
|
148
|
+
// Give it a moment to clean up
|
|
149
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
150
|
+
if (!isProcessAlive(pid)) {
|
|
151
|
+
cleanupStale();
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Socket may be unavailable — fall back to signal
|
|
157
|
+
}
|
|
158
|
+
// SIGTERM
|
|
159
|
+
try {
|
|
160
|
+
process.kill(pid, "SIGTERM");
|
|
161
|
+
// Wait up to 3 seconds
|
|
162
|
+
const start = Date.now();
|
|
163
|
+
while (Date.now() - start < 3000) {
|
|
164
|
+
if (!isProcessAlive(pid)) {
|
|
165
|
+
cleanupStale();
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
169
|
+
}
|
|
170
|
+
// Force kill
|
|
171
|
+
process.kill(pid, "SIGKILL");
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Process may have already exited
|
|
175
|
+
}
|
|
176
|
+
cleanupStale();
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the current status of the sandbox.
|
|
181
|
+
*/
|
|
182
|
+
export async function sandboxStatus() {
|
|
183
|
+
const pid = readPid();
|
|
184
|
+
const socketPath = getSocketPath();
|
|
185
|
+
if (!pid || !isProcessAlive(pid)) {
|
|
186
|
+
cleanupStale();
|
|
187
|
+
return { running: false };
|
|
188
|
+
}
|
|
189
|
+
// Verify by actually pinging
|
|
190
|
+
const client = new SandboxClient();
|
|
191
|
+
try {
|
|
192
|
+
await client.ping();
|
|
193
|
+
return {
|
|
194
|
+
running: true,
|
|
195
|
+
pid,
|
|
196
|
+
socketPath,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Process exists but socket is unresponsive
|
|
201
|
+
return {
|
|
202
|
+
running: false,
|
|
203
|
+
pid,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Ensure the sandbox is running (auto-start if needed).
|
|
209
|
+
* Used by the helper library to transparently start the sandbox.
|
|
210
|
+
*/
|
|
211
|
+
export async function ensureSandbox(opts) {
|
|
212
|
+
const client = new SandboxClient();
|
|
213
|
+
if (await client.isRunning()) {
|
|
214
|
+
return client;
|
|
215
|
+
}
|
|
216
|
+
// Auto-start
|
|
217
|
+
await startSandbox({ dbPath: opts?.dbPath, wait: true });
|
|
218
|
+
return client;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/sandbox/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Sandbox Server
|
|
3
|
+
*
|
|
4
|
+
* Lightweight background Node process that holds a GnosysDB connection
|
|
5
|
+
* and processes requests over a Unix domain socket (or named pipe on Windows).
|
|
6
|
+
*
|
|
7
|
+
* Phase 9b: Integrates Dream Mode (idle-triggered), preferences, and sync.
|
|
8
|
+
*
|
|
9
|
+
* No Docker. No external deps. Just Node + better-sqlite3.
|
|
10
|
+
*/
|
|
11
|
+
import net from "net";
|
|
12
|
+
import { GnosysDB } from "../lib/db.js";
|
|
13
|
+
import { DreamScheduler, DreamConfig, DreamReport } from "../lib/dream.js";
|
|
14
|
+
import { GnosysConfig } from "../lib/config.js";
|
|
15
|
+
export declare function getSandboxDir(): string;
|
|
16
|
+
export declare function getSocketPath(): string;
|
|
17
|
+
export declare function getPidPath(): string;
|
|
18
|
+
export interface SandboxRequest {
|
|
19
|
+
id: string;
|
|
20
|
+
method: string;
|
|
21
|
+
params: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface SandboxResponse {
|
|
24
|
+
id: string;
|
|
25
|
+
ok: boolean;
|
|
26
|
+
result?: unknown;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Sandbox-level dream state for status reporting. */
|
|
30
|
+
export interface DreamState {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
idleMinutes: number;
|
|
33
|
+
lastDreamReport: DreamReport | null;
|
|
34
|
+
dreamsCompleted: number;
|
|
35
|
+
isDreaming: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Initialize Dream Mode in the sandbox.
|
|
39
|
+
* Called once during server startup.
|
|
40
|
+
*/
|
|
41
|
+
export declare function initDreamMode(db: GnosysDB, config: GnosysConfig, dreamConfig?: Partial<DreamConfig>): DreamScheduler | null;
|
|
42
|
+
export declare function handleRequest(db: GnosysDB, req: SandboxRequest): SandboxResponse;
|
|
43
|
+
export declare function startServer(dbPath?: string): net.Server;
|
|
44
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/sandbox/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,OAAO,EAAE,QAAQ,EAAY,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAqB,cAAc,EAAE,WAAW,EAAE,WAAW,EAAwB,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhE,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAYD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,cAAc,GAAG,IAAI,CAqCvB;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,GAAG,eAAe,CAohBhF;AAID,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAyHvD"}
|