draken 0.1.5 → 0.2.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/ACCEPTANCE.md +31 -0
- package/CHANGELOG.md +33 -0
- package/CONTRIBUTING.md +129 -0
- package/MEMORY.md +98 -0
- package/PERSONA.md +67 -0
- package/README.md +156 -78
- package/SETUP.md +111 -0
- package/SOURCES.md +75 -0
- package/TRAY.md +54 -0
- package/VOICE.md +118 -0
- package/dist/auth/middleware.d.ts +3 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +20 -15
- package/dist/auth/middleware.js.map +1 -1
- package/dist/cli.js +77 -58
- package/dist/cli.js.map +1 -1
- package/dist/db/agent-migration.d.ts +7 -0
- package/dist/db/agent-migration.d.ts.map +1 -0
- package/dist/db/agent-migration.js +36 -0
- package/dist/db/agent-migration.js.map +1 -0
- package/dist/db/evidence.d.ts +37 -0
- package/dist/db/evidence.d.ts.map +1 -0
- package/dist/db/evidence.js +110 -0
- package/dist/db/evidence.js.map +1 -0
- package/dist/db/pointer-migration.d.ts +7 -0
- package/dist/db/pointer-migration.d.ts.map +1 -0
- package/dist/db/pointer-migration.js +117 -0
- package/dist/db/pointer-migration.js.map +1 -0
- package/dist/db/retained-text.d.ts +8 -0
- package/dist/db/retained-text.d.ts.map +1 -0
- package/dist/db/retained-text.js +36 -0
- package/dist/db/retained-text.js.map +1 -0
- package/dist/db/schema.d.ts +1 -5
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +200 -55
- package/dist/db/schema.js.map +1 -1
- package/dist/db/snapshot-pointers.d.ts +5 -0
- package/dist/db/snapshot-pointers.d.ts.map +1 -0
- package/dist/db/snapshot-pointers.js +174 -0
- package/dist/db/snapshot-pointers.js.map +1 -0
- package/dist/memory/automatic.d.ts +38 -0
- package/dist/memory/automatic.d.ts.map +1 -0
- package/dist/memory/automatic.js +155 -0
- package/dist/memory/automatic.js.map +1 -0
- package/dist/memory/context.d.ts +12 -0
- package/dist/memory/context.d.ts.map +1 -0
- package/dist/memory/context.js +59 -0
- package/dist/memory/context.js.map +1 -0
- package/dist/memory/embedding-pool.d.ts +28 -0
- package/dist/memory/embedding-pool.d.ts.map +1 -0
- package/dist/memory/embedding-pool.js +135 -0
- package/dist/memory/embedding-pool.js.map +1 -0
- package/dist/memory/embedding-worker.d.ts +2 -0
- package/dist/memory/embedding-worker.d.ts.map +1 -0
- package/dist/memory/embedding-worker.js +32 -0
- package/dist/memory/embedding-worker.js.map +1 -0
- package/dist/memory/index.d.ts +26 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +283 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/model.d.ts +15 -0
- package/dist/memory/model.d.ts.map +1 -0
- package/dist/memory/model.js +152 -0
- package/dist/memory/model.js.map +1 -0
- package/dist/memory/service.d.ts +8 -0
- package/dist/memory/service.d.ts.map +1 -0
- package/dist/memory/service.js +217 -0
- package/dist/memory/service.js.map +1 -0
- package/dist/memory/sources.d.ts +15 -0
- package/dist/memory/sources.d.ts.map +1 -0
- package/dist/memory/sources.js +87 -0
- package/dist/memory/sources.js.map +1 -0
- package/dist/memory/stamps.d.ts +13 -0
- package/dist/memory/stamps.d.ts.map +1 -0
- package/dist/memory/stamps.js +101 -0
- package/dist/memory/stamps.js.map +1 -0
- package/dist/memory/storage.d.ts +5 -0
- package/dist/memory/storage.d.ts.map +1 -0
- package/dist/memory/storage.js +107 -0
- package/dist/memory/storage.js.map +1 -0
- package/dist/memory/types.d.ts +68 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/worker.d.ts +2 -0
- package/dist/memory/worker.d.ts.map +1 -0
- package/dist/memory/worker.js +82 -0
- package/dist/memory/worker.js.map +1 -0
- package/dist/npm-cli.d.ts +4 -0
- package/dist/npm-cli.d.ts.map +1 -0
- package/dist/npm-cli.js +36 -0
- package/dist/npm-cli.js.map +1 -0
- package/dist/pi/runtime.d.ts +34 -0
- package/dist/pi/runtime.d.ts.map +1 -0
- package/dist/pi/runtime.js +210 -0
- package/dist/pi/runtime.js.map +1 -0
- package/dist/pi/setup.d.ts +5 -0
- package/dist/pi/setup.d.ts.map +1 -0
- package/dist/pi/setup.js +147 -0
- package/dist/pi/setup.js.map +1 -0
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +3 -1
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/live-voice.d.ts +3 -0
- package/dist/routes/live-voice.d.ts.map +1 -0
- package/dist/routes/live-voice.js +49 -0
- package/dist/routes/live-voice.js.map +1 -0
- package/dist/routes/{browse.d.ts → memory.d.ts} +1 -1
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +18 -0
- package/dist/routes/memory.js.map +1 -0
- package/dist/routes/{tasks.d.ts → sync.d.ts} +1 -1
- package/dist/routes/sync.d.ts.map +1 -0
- package/dist/routes/sync.js +127 -0
- package/dist/routes/sync.js.map +1 -0
- package/dist/routes/{projects.d.ts → voice.d.ts} +1 -1
- package/dist/routes/voice.d.ts.map +1 -0
- package/dist/routes/voice.js +35 -0
- package/dist/routes/voice.js.map +1 -0
- package/dist/server-state.d.ts +30 -0
- package/dist/server-state.d.ts.map +1 -0
- package/dist/server-state.js +113 -0
- package/dist/server-state.js.map +1 -0
- package/dist/server-status.d.ts +7 -0
- package/dist/server-status.d.ts.map +1 -0
- package/dist/server-status.js +34 -0
- package/dist/server-status.js.map +1 -0
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +148 -46
- package/dist/server.js.map +1 -1
- package/dist/sources/adapters.d.ts +15 -0
- package/dist/sources/adapters.d.ts.map +1 -0
- package/dist/sources/adapters.js +159 -0
- package/dist/sources/adapters.js.map +1 -0
- package/dist/sources/registry.d.ts +17 -0
- package/dist/sources/registry.d.ts.map +1 -0
- package/dist/sources/registry.js +56 -0
- package/dist/sources/registry.js.map +1 -0
- package/dist/sync/collector.d.ts +3 -0
- package/dist/sync/collector.d.ts.map +1 -0
- package/dist/sync/collector.js +284 -0
- package/dist/sync/collector.js.map +1 -0
- package/dist/sync/cost.d.ts +7 -0
- package/dist/sync/cost.d.ts.map +1 -0
- package/dist/sync/cost.js +31 -0
- package/dist/sync/cost.js.map +1 -0
- package/dist/sync/jsonl.d.ts +34 -0
- package/dist/sync/jsonl.d.ts.map +1 -0
- package/dist/sync/jsonl.js +161 -0
- package/dist/sync/jsonl.js.map +1 -0
- package/dist/sync/manager.d.ts +12 -0
- package/dist/sync/manager.d.ts.map +1 -0
- package/dist/sync/manager.js +211 -0
- package/dist/sync/manager.js.map +1 -0
- package/dist/sync/normalize.d.ts +22 -0
- package/dist/sync/normalize.d.ts.map +1 -0
- package/dist/sync/normalize.js +107 -0
- package/dist/sync/normalize.js.map +1 -0
- package/dist/sync/pi-output.d.ts +33 -0
- package/dist/sync/pi-output.d.ts.map +1 -0
- package/dist/sync/pi-output.js +186 -0
- package/dist/sync/pi-output.js.map +1 -0
- package/dist/sync/pi.d.ts +15 -0
- package/dist/sync/pi.d.ts.map +1 -0
- package/dist/sync/pi.js +149 -0
- package/dist/sync/pi.js.map +1 -0
- package/dist/sync/recap.d.ts +25 -0
- package/dist/sync/recap.d.ts.map +1 -0
- package/dist/sync/recap.js +118 -0
- package/dist/sync/recap.js.map +1 -0
- package/dist/sync/references.d.ts +10 -0
- package/dist/sync/references.d.ts.map +1 -0
- package/dist/sync/references.js +50 -0
- package/dist/sync/references.js.map +1 -0
- package/dist/sync/source-files.d.ts +16 -0
- package/dist/sync/source-files.d.ts.map +1 -0
- package/dist/sync/source-files.js +56 -0
- package/dist/sync/source-files.js.map +1 -0
- package/dist/sync/store.d.ts +36 -0
- package/dist/sync/store.d.ts.map +1 -0
- package/dist/sync/store.js +359 -0
- package/dist/sync/store.js.map +1 -0
- package/dist/sync/summary-budget.d.ts +19 -0
- package/dist/sync/summary-budget.d.ts.map +1 -0
- package/dist/sync/summary-budget.js +39 -0
- package/dist/sync/summary-budget.js.map +1 -0
- package/dist/sync/tree.d.ts +69 -0
- package/dist/sync/tree.d.ts.map +1 -0
- package/dist/sync/tree.js +599 -0
- package/dist/sync/tree.js.map +1 -0
- package/dist/tray/controller.d.ts +51 -0
- package/dist/tray/controller.d.ts.map +1 -0
- package/dist/tray/controller.js +178 -0
- package/dist/tray/controller.js.map +1 -0
- package/dist/tray/launcher.d.ts +3 -0
- package/dist/tray/launcher.d.ts.map +1 -0
- package/dist/tray/launcher.js +47 -0
- package/dist/tray/launcher.js.map +1 -0
- package/dist/tray/native.d.ts +12 -0
- package/dist/tray/native.d.ts.map +1 -0
- package/dist/tray/native.js +93 -0
- package/dist/tray/native.js.map +1 -0
- package/dist/tray/processes.d.ts +5 -0
- package/dist/tray/processes.d.ts.map +1 -0
- package/dist/tray/processes.js +99 -0
- package/dist/tray/processes.js.map +1 -0
- package/dist/tray/worker.d.ts +4 -0
- package/dist/tray/worker.d.ts.map +1 -0
- package/dist/tray/worker.js +150 -0
- package/dist/tray/worker.js.map +1 -0
- package/dist/types.d.ts +212 -20
- package/dist/types.d.ts.map +1 -1
- package/dist/voice/continuation.d.ts +25 -0
- package/dist/voice/continuation.d.ts.map +1 -0
- package/dist/voice/continuation.js +94 -0
- package/dist/voice/continuation.js.map +1 -0
- package/dist/voice/legacy-history.d.ts +5 -0
- package/dist/voice/legacy-history.d.ts.map +1 -0
- package/dist/voice/legacy-history.js +34 -0
- package/dist/voice/legacy-history.js.map +1 -0
- package/dist/voice/live-context.d.ts +14 -0
- package/dist/voice/live-context.d.ts.map +1 -0
- package/dist/voice/live-context.js +137 -0
- package/dist/voice/live-context.js.map +1 -0
- package/dist/voice/live.d.ts +37 -0
- package/dist/voice/live.d.ts.map +1 -0
- package/dist/voice/live.js +448 -0
- package/dist/voice/live.js.map +1 -0
- package/package.json +49 -16
- package/public/assets/index-CYz_kpAp.js +126 -0
- package/public/assets/index-DmRid5xE.css +1 -0
- package/public/assets/index-Ymd62i3g.js +40 -0
- package/public/assets/persona-C_m1CVKe.css +1 -0
- package/public/assets/persona-XbLvCqRT.js +1 -0
- package/public/assets/scene-CBV2oPhA.js +3854 -0
- package/public/index.html +6 -8
- package/public/persona/THREE-LICENSE.txt +21 -0
- package/public/persona/call-poster.webp +0 -0
- package/public/persona/reference.jpg +0 -0
- package/public/persona/sample.wav +0 -0
- package/public/persona.html +7 -0
- package/runtime/pi/package-lock.json +1549 -0
- package/runtime/pi/package.json +12 -0
- package/tests/fixtures/voice-question.wav +0 -0
- package/tray/assets/error.ico +0 -0
- package/tray/assets/error.png +0 -0
- package/tray/assets/running.ico +0 -0
- package/tray/assets/running.png +0 -0
- package/tray/assets/starting.ico +0 -0
- package/tray/assets/starting.png +0 -0
- package/tray/assets/stopped.ico +0 -0
- package/tray/assets/stopped.png +0 -0
- package/tray/assets/stopping.ico +0 -0
- package/tray/assets/stopping.png +0 -0
- package/tray/macos.js +72 -0
- package/tray/windows.ps1 +104 -0
- package/voice/realtime/README.md +84 -0
- package/voice/realtime/backend.mjs +81 -0
- package/voice/realtime/native.mjs +210 -0
- package/voice/realtime/peer.d.mts +15 -0
- package/voice/realtime/peer.mjs +116 -0
- package/voice/realtime/probe-browser.mjs +81 -0
- package/voice/realtime/probe-server.mjs +86 -0
- package/voice/realtime/probe.html +11 -0
- package/voice/realtime/probe.mjs +42 -0
- package/voice/realtime/rpc.mjs +118 -0
- package/voice/realtime/setup.mjs +32 -0
- package/voice/tls.mjs +49 -0
- package/dist/db/queries.d.ts +0 -16
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js +0 -91
- package/dist/db/queries.js.map +0 -1
- package/dist/docker/dockerfile.d.ts +0 -50
- package/dist/docker/dockerfile.d.ts.map +0 -1
- package/dist/docker/dockerfile.js +0 -160
- package/dist/docker/dockerfile.js.map +0 -1
- package/dist/docker/manager.d.ts +0 -42
- package/dist/docker/manager.d.ts.map +0 -1
- package/dist/docker/manager.js +0 -421
- package/dist/docker/manager.js.map +0 -1
- package/dist/git/status.d.ts +0 -76
- package/dist/git/status.d.ts.map +0 -1
- package/dist/git/status.js +0 -332
- package/dist/git/status.js.map +0 -1
- package/dist/routes/browse.d.ts.map +0 -1
- package/dist/routes/browse.js +0 -49
- package/dist/routes/browse.js.map +0 -1
- package/dist/routes/git.d.ts +0 -9
- package/dist/routes/git.d.ts.map +0 -1
- package/dist/routes/git.js +0 -338
- package/dist/routes/git.js.map +0 -1
- package/dist/routes/projects.d.ts.map +0 -1
- package/dist/routes/projects.js +0 -220
- package/dist/routes/projects.js.map +0 -1
- package/dist/routes/tasks.d.ts.map +0 -1
- package/dist/routes/tasks.js +0 -313
- package/dist/routes/tasks.js.map +0 -1
- package/draken.dockerfile.template +0 -18
- package/public/assets/index-3ngsG5kF.css +0 -1
- package/public/assets/index-B3YSD0ee.js +0 -252
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isolatedFlags = exports.PI_PACKAGE = exports.PI_VERSION = void 0;
|
|
7
|
+
exports.piPaths = piPaths;
|
|
8
|
+
exports.managedEnvironment = managedEnvironment;
|
|
9
|
+
exports.privateDirectory = privateDirectory;
|
|
10
|
+
exports.executable = executable;
|
|
11
|
+
exports.selectedPi = selectedPi;
|
|
12
|
+
exports.stopPiChecks = stopPiChecks;
|
|
13
|
+
exports.piSetupStatus = piSetupStatus;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const os_1 = __importDefault(require("os"));
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const child_process_1 = require("child_process");
|
|
18
|
+
const schema_1 = require("../db/schema");
|
|
19
|
+
const store_1 = require("../sync/store");
|
|
20
|
+
exports.PI_VERSION = '1.5.0';
|
|
21
|
+
exports.PI_PACKAGE = '@earendil-works/pi-coding-agent';
|
|
22
|
+
exports.isolatedFlags = ['--no-session', '--no-tools', '--no-extensions', '--no-mcp', '--no-skills', '--no-prompt-templates', '--no-themes', '--no-context-files', '--no-approve', '--offline'];
|
|
23
|
+
function piPaths() {
|
|
24
|
+
const root = path_1.default.join((0, schema_1.getDataDir)(), 'pi');
|
|
25
|
+
return { root, agent: path_1.default.join(root, 'agent'), home: path_1.default.join(root, 'home'), work: path_1.default.join(root, 'workspace'), selected: path_1.default.join(root, 'selected.json') };
|
|
26
|
+
}
|
|
27
|
+
// Managed children must not inherit unrelated provider keys, pi ownership, custom
|
|
28
|
+
// model URLs, preload hooks or the user's global pi configuration. A private HOME
|
|
29
|
+
// also prevents ambient cloud-credential lookup. This is not an OS sandbox.
|
|
30
|
+
function managedEnvironment() {
|
|
31
|
+
const paths = piPaths(), env = {};
|
|
32
|
+
for (const key of ['PATH', 'PATHEXT', 'SYSTEMROOT', 'WINDIR', 'COMSPEC', 'LANG', 'LC_ALL', 'TERM', 'COLORTERM', 'TMPDIR', 'TMP', 'TEMP'])
|
|
33
|
+
if (process.env[key])
|
|
34
|
+
env[key] = process.env[key];
|
|
35
|
+
return { ...env, HOME: paths.home, USERPROFILE: paths.home, APPDATA: path_1.default.join(paths.home, 'AppData', 'Roaming'), LOCALAPPDATA: path_1.default.join(paths.home, 'AppData', 'Local'),
|
|
36
|
+
PI_CODING_AGENT_DIR: paths.agent, PI_OFFLINE: '1', PI_SKIP_VERSION_CHECK: '1', PI_TELEMETRY: '0' };
|
|
37
|
+
}
|
|
38
|
+
/** Refuse symlinked private subdirectories, without creating anything during GET/status. */
|
|
39
|
+
function privateDirectory(directory, create = false) {
|
|
40
|
+
const base = (0, schema_1.getDataDir)(), relative = path_1.default.relative(base, directory);
|
|
41
|
+
if (!relative || relative.startsWith('..') || path_1.default.isAbsolute(relative))
|
|
42
|
+
throw new Error('Invalid private pi directory');
|
|
43
|
+
if (create)
|
|
44
|
+
fs_1.default.mkdirSync(base, { recursive: true, mode: 0o700 });
|
|
45
|
+
let current = base;
|
|
46
|
+
for (const part of relative.split(path_1.default.sep)) {
|
|
47
|
+
current = path_1.default.join(current, part);
|
|
48
|
+
try {
|
|
49
|
+
const stat = fs_1.default.lstatSync(current);
|
|
50
|
+
if (stat.isSymbolicLink() || !stat.isDirectory())
|
|
51
|
+
throw new Error('Private pi directories must not be symlinks or files');
|
|
52
|
+
if (create)
|
|
53
|
+
fs_1.default.chmodSync(current, 0o700);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error.code !== 'ENOENT')
|
|
57
|
+
throw error;
|
|
58
|
+
if (create)
|
|
59
|
+
fs_1.default.mkdirSync(current, { mode: 0o700 });
|
|
60
|
+
else
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function executable(name) {
|
|
66
|
+
const candidates = name.includes('/') || name.includes('\\') ? [path_1.default.resolve(name)]
|
|
67
|
+
: (process.env.PATH || '').split(path_1.default.delimiter).filter(Boolean).flatMap(dir => process.platform === 'win32'
|
|
68
|
+
? ['', '.exe', '.cmd', '.bat'].map(ext => path_1.default.join(dir, name + ext)) : [path_1.default.join(dir, name)]);
|
|
69
|
+
return candidates.find(file => { try {
|
|
70
|
+
fs_1.default.accessSync(file, process.platform === 'win32' ? fs_1.default.constants.F_OK : fs_1.default.constants.X_OK);
|
|
71
|
+
return fs_1.default.statSync(file).isFile();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
} });
|
|
76
|
+
}
|
|
77
|
+
function selectedPi() {
|
|
78
|
+
const paths = piPaths();
|
|
79
|
+
if (!process.env.DRAKEN_PI_BIN && fs_1.default.existsSync(paths.selected)) {
|
|
80
|
+
privateDirectory(paths.root);
|
|
81
|
+
privateDirectory(paths.agent);
|
|
82
|
+
privateDirectory(paths.home);
|
|
83
|
+
privateDirectory(paths.work);
|
|
84
|
+
for (const name of ['auth.json', 'settings.json', 'models.json', 'models-store.json', 'trust.json']) {
|
|
85
|
+
try {
|
|
86
|
+
if (fs_1.default.lstatSync(path_1.default.join(paths.agent, name)).isSymbolicLink())
|
|
87
|
+
throw new Error('Private pi configuration files must not be symlinks');
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (error.code !== 'ENOENT')
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (fs_1.default.lstatSync(paths.selected).isSymbolicLink() || fs_1.default.statSync(paths.selected).size > 1024)
|
|
95
|
+
throw new Error('Invalid private pi selection; run draken setup to repair it.');
|
|
96
|
+
const selected = JSON.parse(fs_1.default.readFileSync(paths.selected, 'utf8'));
|
|
97
|
+
if (selected.version !== 1 || typeof selected.runtime !== 'string' || !/^\d+\.\d+\.\d+-[a-f0-9]{16}$/.test(selected.runtime))
|
|
98
|
+
throw new Error('Invalid private pi selection; run draken setup to repair it.');
|
|
99
|
+
const runtime = path_1.default.join(paths.root, 'runtime', selected.runtime);
|
|
100
|
+
privateDirectory(runtime);
|
|
101
|
+
const cli = path_1.default.join(runtime, 'node_modules', exports.PI_PACKAGE, 'dist', 'cli.js');
|
|
102
|
+
if (!fs_1.default.existsSync(cli))
|
|
103
|
+
throw new Error('Private pi is incomplete. Run draken setup; credentials will be kept.');
|
|
104
|
+
const relative = path_1.default.relative(fs_1.default.realpathSync(runtime), fs_1.default.realpathSync(cli));
|
|
105
|
+
if (relative.startsWith('..') || path_1.default.isAbsolute(relative))
|
|
106
|
+
throw new Error('Private pi executable is outside its runtime');
|
|
107
|
+
return { source: 'managed', binary: process.execPath, prefix: [cli], env: managedEnvironment(), agent: paths.agent };
|
|
108
|
+
}
|
|
109
|
+
const name = process.env.DRAKEN_PI_BIN || 'pi', binary = executable(name) || name;
|
|
110
|
+
const env = { ...process.env };
|
|
111
|
+
delete env.PI_SESSION_ID;
|
|
112
|
+
delete env.PI_SESSION_FILE;
|
|
113
|
+
// npm's Windows command shims cannot be spawned without a shell. Resolve only
|
|
114
|
+
// the known pi package next to the shim; never evaluate .cmd text.
|
|
115
|
+
const candidate = /\.cmd$/i.test(binary) ? path_1.default.join(path_1.default.dirname(binary), 'node_modules', exports.PI_PACKAGE, 'dist', 'cli.js') : '';
|
|
116
|
+
return { source: 'external', binary: candidate && fs_1.default.existsSync(candidate) ? process.execPath : binary,
|
|
117
|
+
prefix: candidate && fs_1.default.existsSync(candidate) ? [candidate] : [], env,
|
|
118
|
+
agent: process.env.PI_CODING_AGENT_DIR || path_1.default.join(os_1.default.homedir(), '.pi', 'agent') };
|
|
119
|
+
}
|
|
120
|
+
const checks = new Set();
|
|
121
|
+
let checksStopping = false;
|
|
122
|
+
async function stopPiChecks() {
|
|
123
|
+
checksStopping = true;
|
|
124
|
+
await Promise.all([...checks].map(child => new Promise(resolve => {
|
|
125
|
+
const timer = setTimeout(() => child.kill('SIGKILL'), 1000);
|
|
126
|
+
timer.unref();
|
|
127
|
+
child.once('close', () => { clearTimeout(timer); resolve(); });
|
|
128
|
+
child.kill('SIGTERM');
|
|
129
|
+
})));
|
|
130
|
+
}
|
|
131
|
+
/** Bounded protocol-only subprocess. Never return raw stderr or credential output. */
|
|
132
|
+
async function inspect(args) {
|
|
133
|
+
if (checksStopping)
|
|
134
|
+
throw new Error('Pi status checks are stopping');
|
|
135
|
+
const pi = selectedPi();
|
|
136
|
+
return new Promise((resolve, reject) => {
|
|
137
|
+
const child = (0, child_process_1.spawn)(pi.binary, [...pi.prefix, ...args], { env: { ...pi.env, PI_OFFLINE: '1', PI_SKIP_VERSION_CHECK: '1' },
|
|
138
|
+
cwd: fs_1.default.existsSync((0, schema_1.getDataDir)()) ? (0, schema_1.getDataDir)() : os_1.default.tmpdir(), shell: false, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
139
|
+
checks.add(child);
|
|
140
|
+
let text = '', failed = false, kill;
|
|
141
|
+
const terminate = () => { failed = true; child.kill('SIGTERM'); kill = setTimeout(() => child.kill('SIGKILL'), 1000); kill.unref(); };
|
|
142
|
+
const timer = setTimeout(terminate, 8000);
|
|
143
|
+
timer.unref();
|
|
144
|
+
child.stdout.setEncoding('utf8');
|
|
145
|
+
child.stdout.on('data', chunk => { if (failed)
|
|
146
|
+
return; if (Buffer.byteLength(text) + Buffer.byteLength(chunk) > 8192)
|
|
147
|
+
terminate();
|
|
148
|
+
else
|
|
149
|
+
text += chunk; });
|
|
150
|
+
child.once('error', error => { clearTimeout(timer); if (kill)
|
|
151
|
+
clearTimeout(kill); reject(error); });
|
|
152
|
+
child.once('close', code => { checks.delete(child); clearTimeout(timer); if (kill)
|
|
153
|
+
clearTimeout(kill); if (failed)
|
|
154
|
+
reject(new Error('Pi status check did not finish safely'));
|
|
155
|
+
else
|
|
156
|
+
resolve({ code, text }); });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async function diagnose() {
|
|
160
|
+
let selected;
|
|
161
|
+
try {
|
|
162
|
+
selected = selectedPi();
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return { source: 'managed', state: 'error', version: null, agent_dir: piPaths().agent, models: [], message: 'Private pi is incomplete or its selection is invalid. Run draken setup to repair it; credentials are retained.' };
|
|
166
|
+
}
|
|
167
|
+
const result = { source: selected.source, state: 'missing', version: null, agent_dir: selected.agent, models: [], message: '' };
|
|
168
|
+
try {
|
|
169
|
+
const version = await inspect(['--version']), match = /^(\d+)\.(\d+)\.(\d+)\s*$/.exec(version.text.trim());
|
|
170
|
+
if (version.code !== 0 || !match || Number(match[1]) < 1 || (Number(match[1]) === 1 && Number(match[2]) < 4)) {
|
|
171
|
+
return { ...result, state: 'incompatible', message: 'Pi 1.4+ is required. Run draken setup for the pinned private runtime, or update your explicit DRAKEN_PI_BIN.' };
|
|
172
|
+
}
|
|
173
|
+
result.version = match[0].trim();
|
|
174
|
+
const models = (0, store_1.defaultModels)();
|
|
175
|
+
for (const model of [...new Set([models.summary, models.final])]) {
|
|
176
|
+
const check = await inspect(['auth', 'check', '--model', model, '--json', '--no-refresh']);
|
|
177
|
+
let state = 'unavailable';
|
|
178
|
+
try {
|
|
179
|
+
const value = JSON.parse(check.text);
|
|
180
|
+
if (check.code === 0 && value.status === 'ready')
|
|
181
|
+
state = 'configured';
|
|
182
|
+
else if (check.code === 1 && value.status === 'not_ready' && value.reason === 'credentials_not_configured')
|
|
183
|
+
state = 'needs_login';
|
|
184
|
+
}
|
|
185
|
+
catch { /* Unsupported model/status protocol, not known-ready. */ }
|
|
186
|
+
result.models.push({ model, state });
|
|
187
|
+
}
|
|
188
|
+
result.state = result.models.every(model => model.state === 'configured') ? 'configured' : result.models.some(model => model.state === 'unavailable') ? 'error' : 'needs_login';
|
|
189
|
+
result.message = result.state === 'configured' ? 'Pi credentials are configured. Model access and billing are not verified by this local check.'
|
|
190
|
+
: result.state === 'needs_login' ? 'Run draken login in a terminal on this server, then use /login in pi. Sign in to the provider used by the configured summary models.'
|
|
191
|
+
: 'Pi could not resolve the configured models or credentials. Run draken doctor and check model configuration; no provider or model was substituted.';
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
result.state = error.code === 'ENOENT' ? 'missing' : 'error';
|
|
195
|
+
result.message = result.state === 'missing' ? 'Summarization needs pi. Run draken setup to install a private copy, then draken login.' : 'Pi status could not be checked. Run draken doctor in a terminal on this server.';
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
let cached;
|
|
200
|
+
function piSetupStatus(fresh = false) {
|
|
201
|
+
const key = JSON.stringify([(0, schema_1.getDataDir)(), process.env.DRAKEN_PI_BIN, process.env.PATH, process.env.PI_CODING_AGENT_DIR, (0, store_1.defaultModels)()]);
|
|
202
|
+
if (cached?.key === key && (cached.pending || !fresh && cached.until > Date.now()))
|
|
203
|
+
return cached.value;
|
|
204
|
+
const value = diagnose();
|
|
205
|
+
const entry = { key, until: Date.now() + 30_000, pending: true, value };
|
|
206
|
+
cached = entry;
|
|
207
|
+
void value.then(() => { entry.pending = false; }, () => { entry.pending = false; });
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/pi/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function installPi(yes: boolean): Promise<void>;
|
|
2
|
+
export declare function loginPi(): Promise<void>;
|
|
3
|
+
export declare function doctor(): Promise<void>;
|
|
4
|
+
export declare function voiceSetup(action: string): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/pi/setup.ts"],"names":[],"mappings":"AAuBA,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3D;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7C;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5C;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
|
package/dist/pi/setup.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.installPi = installPi;
|
|
7
|
+
exports.loginPi = loginPi;
|
|
8
|
+
exports.doctor = doctor;
|
|
9
|
+
exports.voiceSetup = voiceSetup;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const promises_1 = require("readline/promises");
|
|
15
|
+
const schema_1 = require("../db/schema");
|
|
16
|
+
const npm_cli_1 = require("../npm-cli");
|
|
17
|
+
const runtime_1 = require("./runtime");
|
|
18
|
+
/** Explicit terminal operations only. This module has no HTTP installation/login route. */
|
|
19
|
+
function run(binary, args, env, cwd, timeout = 0) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const child = (0, child_process_1.spawn)(binary, args, { env, cwd, shell: false, stdio: 'inherit' });
|
|
22
|
+
let cancelled = false, kill;
|
|
23
|
+
const stop = () => { if (cancelled)
|
|
24
|
+
return; cancelled = true; child.kill('SIGTERM'); kill = setTimeout(() => child.kill('SIGKILL'), 1500); kill.unref(); };
|
|
25
|
+
process.once('SIGINT', stop);
|
|
26
|
+
process.once('SIGTERM', stop);
|
|
27
|
+
const timer = timeout ? setTimeout(stop, timeout) : undefined;
|
|
28
|
+
const cleanup = () => { process.removeListener('SIGINT', stop); process.removeListener('SIGTERM', stop); if (timer)
|
|
29
|
+
clearTimeout(timer); if (kill)
|
|
30
|
+
clearTimeout(kill); };
|
|
31
|
+
child.once('error', () => { cleanup(); reject(new Error('Could not start the requested program. Check Node.js/npm and executable permissions.')); });
|
|
32
|
+
child.once('close', code => { cleanup(); if (cancelled)
|
|
33
|
+
reject(new Error('Operation cancelled or timed out. Existing credentials were retained.'));
|
|
34
|
+
else if (code !== 0)
|
|
35
|
+
reject(new Error(`The requested program exited with status ${code ?? 'signal'}.`));
|
|
36
|
+
else
|
|
37
|
+
resolve(); });
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
async function installPi(yes) {
|
|
41
|
+
if (process.env.DRAKEN_PI_BIN)
|
|
42
|
+
throw new Error('DRAKEN_PI_BIN is explicitly configured. Keep using it, or unset it before selecting Draken’s private pi. No installation was changed.');
|
|
43
|
+
const paths = (0, runtime_1.piPaths)(), bundle = path_1.default.resolve(__dirname, '../../runtime/pi');
|
|
44
|
+
const lock = fs_1.default.readFileSync(path_1.default.join(bundle, 'package-lock.json')), manifest = JSON.parse(fs_1.default.readFileSync(path_1.default.join(bundle, 'package.json'), 'utf8'));
|
|
45
|
+
if (manifest.dependencies?.[runtime_1.PI_PACKAGE] !== runtime_1.PI_VERSION)
|
|
46
|
+
throw new Error('The packaged pi manifest does not match this Draken version. Reinstall Draken.');
|
|
47
|
+
const tag = `${runtime_1.PI_VERSION}-${(0, crypto_1.createHash)('sha256').update(lock).digest('hex').slice(0, 16)}`;
|
|
48
|
+
const runtime = path_1.default.join(paths.root, 'runtime', tag);
|
|
49
|
+
console.log(`Private pi ${runtime_1.PI_VERSION}: ${runtime}\nPi configuration/credentials: ${paths.agent}\nThis downloads pi and its locked dependencies from npm. It does not copy credentials or change global pi.`);
|
|
50
|
+
if (!yes) {
|
|
51
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
52
|
+
throw new Error('Installation needs confirmation. Run draken setup in a terminal, or explicitly use draken setup --yes.');
|
|
53
|
+
const terminal = (0, promises_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
54
|
+
try {
|
|
55
|
+
if (!/^(y|yes)$/i.test((await terminal.question('Install and select this private runtime? [y/N] ')).trim())) {
|
|
56
|
+
console.log('No changes made.');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
terminal.close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const npm = (0, npm_cli_1.npmCli)();
|
|
65
|
+
for (const dir of [paths.root, paths.home, paths.agent, paths.work, path_1.default.dirname(runtime)])
|
|
66
|
+
(0, runtime_1.privateDirectory)(dir, true);
|
|
67
|
+
const lockPath = path_1.default.join(paths.root, 'setup.lock');
|
|
68
|
+
let descriptor;
|
|
69
|
+
try {
|
|
70
|
+
descriptor = fs_1.default.openSync(lockPath, 'wx', 0o600);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
throw new Error(`Setup is already running or was interrupted. Check ${lockPath}; remove that lock only after confirming no setup process is running.`);
|
|
74
|
+
}
|
|
75
|
+
fs_1.default.writeFileSync(descriptor, JSON.stringify({ pid: process.pid, at: new Date().toISOString() }));
|
|
76
|
+
fs_1.default.closeSync(descriptor);
|
|
77
|
+
const stage = path_1.default.join(paths.root, `.install-${(0, crypto_1.randomUUID)()}`), selection = path_1.default.join(paths.root, `.selected-${(0, crypto_1.randomUUID)()}.json`);
|
|
78
|
+
try {
|
|
79
|
+
(0, runtime_1.privateDirectory)(runtime);
|
|
80
|
+
const packageFile = path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'package.json');
|
|
81
|
+
const complete = fs_1.default.existsSync(packageFile) && JSON.parse(fs_1.default.readFileSync(packageFile, 'utf8')).version === runtime_1.PI_VERSION
|
|
82
|
+
&& fs_1.default.existsSync(path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'))
|
|
83
|
+
&& fs_1.default.existsSync(path_1.default.join(runtime, '.qualified-lock')) && fs_1.default.readFileSync(path_1.default.join(runtime, '.qualified-lock'), 'utf8') === (0, crypto_1.createHash)('sha256').update(lock).digest('hex');
|
|
84
|
+
if (!complete) {
|
|
85
|
+
if (fs_1.default.existsSync(runtime))
|
|
86
|
+
throw new Error(`An incomplete runtime exists at ${runtime}. Move that directory aside and retry; do not remove the agent/ credential directory.`);
|
|
87
|
+
(0, runtime_1.privateDirectory)(stage, true);
|
|
88
|
+
fs_1.default.copyFileSync(path_1.default.join(bundle, 'package.json'), path_1.default.join(stage, 'package.json'));
|
|
89
|
+
fs_1.default.writeFileSync(path_1.default.join(stage, 'package-lock.json'), lock);
|
|
90
|
+
for (const name of ['user.npmrc', 'global.npmrc'])
|
|
91
|
+
fs_1.default.writeFileSync(path_1.default.join(stage, name), '', { mode: 0o600 });
|
|
92
|
+
// npm's dependency tree and integrity hashes come from our shipped lockfile,
|
|
93
|
+
// not mutable latest tags. No lifecycle scripts or user npm configuration.
|
|
94
|
+
await run(process.execPath, [npm, 'ci', '--ignore-scripts', '--omit=dev', '--no-audit', '--no-fund', '--registry=https://registry.npmjs.org',
|
|
95
|
+
`--userconfig=${path_1.default.join(stage, 'user.npmrc')}`, `--globalconfig=${path_1.default.join(stage, 'global.npmrc')}`, `--cache=${path_1.default.join(paths.home, '.npm')}`], (0, runtime_1.managedEnvironment)(), stage, 10 * 60_000);
|
|
96
|
+
const installed = JSON.parse(fs_1.default.readFileSync(path_1.default.join(stage, 'node_modules', runtime_1.PI_PACKAGE, 'package.json'), 'utf8'));
|
|
97
|
+
if (installed.name !== runtime_1.PI_PACKAGE || installed.version !== runtime_1.PI_VERSION)
|
|
98
|
+
throw new Error('Installed pi did not match the pinned package. No runtime was selected.');
|
|
99
|
+
await run(process.execPath, [path_1.default.join(stage, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'), '--version'], (0, runtime_1.managedEnvironment)(), paths.work, 15_000);
|
|
100
|
+
fs_1.default.writeFileSync(path_1.default.join(stage, '.qualified-lock'), (0, crypto_1.createHash)('sha256').update(lock).digest('hex'), { mode: 0o600 });
|
|
101
|
+
fs_1.default.renameSync(stage, runtime);
|
|
102
|
+
}
|
|
103
|
+
if (complete)
|
|
104
|
+
await run(process.execPath, [path_1.default.join(runtime, 'node_modules', runtime_1.PI_PACKAGE, 'dist/cli.js'), '--version'], (0, runtime_1.managedEnvironment)(), paths.work, 15_000);
|
|
105
|
+
fs_1.default.writeFileSync(selection, JSON.stringify({ version: 1, runtime: tag }) + '\n', { mode: 0o600 });
|
|
106
|
+
fs_1.default.renameSync(selection, paths.selected);
|
|
107
|
+
console.log('\nPrivate pi selected. Next: draken login\nInside pi, type /login and sign in, then /quit. Draken never copies your global pi credentials.\nUse draken doctor to check configuration. The running server picks up this selection for subsequent requests.');
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
fs_1.default.rmSync(stage, { recursive: true, force: true });
|
|
111
|
+
fs_1.default.rmSync(selection, { force: true });
|
|
112
|
+
fs_1.default.rmSync(lockPath, { force: true });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function loginPi() {
|
|
116
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
117
|
+
throw new Error('Login needs an interactive terminal on the Draken server. Run draken login there as the server’s user, with the same DRAKEN_DATA_DIR and DRAKEN_PI_BIN environment.');
|
|
118
|
+
const pi = (0, runtime_1.selectedPi)();
|
|
119
|
+
if (pi.source === 'managed')
|
|
120
|
+
for (const dir of [(0, runtime_1.piPaths)().agent, (0, runtime_1.piPaths)().home, (0, runtime_1.piPaths)().work])
|
|
121
|
+
(0, runtime_1.privateDirectory)(dir, true);
|
|
122
|
+
else if (!(0, runtime_1.executable)(pi.binary))
|
|
123
|
+
throw new Error('Pi is missing. Run draken setup first.');
|
|
124
|
+
const cwd = path_1.default.join((0, schema_1.getDataDir)(), 'pi', 'workspace');
|
|
125
|
+
(0, runtime_1.privateDirectory)(cwd, true);
|
|
126
|
+
console.log(`Opening ${pi.source === 'managed' ? 'Draken’s private' : 'your existing'} pi login interface.\nCredential directory: ${pi.agent}\nType /login (or /login openai for the default models), follow pi’s prompts, then /quit.\nDo not pass /login as a model prompt. Tools, project resources and session persistence are disabled.\nThis is summarization authentication, not the separate ChatGPT voice login.`);
|
|
127
|
+
await run(pi.binary, [...pi.prefix, ...runtime_1.isolatedFlags], pi.env, cwd);
|
|
128
|
+
await doctor();
|
|
129
|
+
}
|
|
130
|
+
async function doctor() {
|
|
131
|
+
const status = await (0, runtime_1.piSetupStatus)(true);
|
|
132
|
+
console.log(`Summary runtime: ${status.source} · ${status.state}${status.version ? ` · pi ${status.version}` : ''}\nPi credential directory: ${status.agent_dir}\n${status.message}`);
|
|
133
|
+
for (const model of status.models)
|
|
134
|
+
console.log(` ${model.model}: ${model.state}`);
|
|
135
|
+
console.log('Credential checks do not generate text, verify provider access or measure billing.\nVoice is separate: draken voice setup → draken voice login\nHistory sources: Settings → Agents & sessions. Then Sync with Draken.');
|
|
136
|
+
if (status.state !== 'configured')
|
|
137
|
+
process.exitCode = 1;
|
|
138
|
+
}
|
|
139
|
+
async function voiceSetup(action) {
|
|
140
|
+
const flag = { setup: '--install', login: '--login', status: '--check' }[action];
|
|
141
|
+
if (!flag)
|
|
142
|
+
throw new Error('Usage: draken voice setup | login | status');
|
|
143
|
+
if (action === 'login' && !process.stdin.isTTY)
|
|
144
|
+
throw new Error('Run draken voice login in an interactive terminal on the server.');
|
|
145
|
+
await run(process.execPath, [path_1.default.resolve(__dirname, '../../voice/realtime/setup.mjs'), flag], process.env, process.cwd());
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/pi/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA6DxB,eAAe,MAAM,CAAC"}
|
package/dist/routes/auth.js
CHANGED
|
@@ -4,8 +4,10 @@ const express_1 = require("express");
|
|
|
4
4
|
const middleware_1 = require("../auth/middleware");
|
|
5
5
|
const router = (0, express_1.Router)();
|
|
6
6
|
// Check if auth is enabled
|
|
7
|
-
router.get('/status', (
|
|
7
|
+
router.get('/status', (req, res) => {
|
|
8
8
|
res.json({
|
|
9
|
+
application: 'draken',
|
|
10
|
+
instance: req.app.locals.drakenInstance,
|
|
9
11
|
enabled: (0, middleware_1.isAuthEnabled)(),
|
|
10
12
|
});
|
|
11
13
|
});
|
package/dist/routes/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AACpD,mDAO4B;AAE5B,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAOxB,2BAA2B;AAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AACpD,mDAO4B;AAE5B,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAOxB,2BAA2B;AAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,GAAG,CAAC,IAAI,CAAC;QACP,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc;QACvC,OAAO,EAAE,IAAA,0BAAa,GAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAoB,CAAC;IAExD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,IAAA,gCAAmB,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,0BAAa,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC;QACP,KAAK;QACL,SAAS,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;QACtC,QAAQ;KACT,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,2BAAc,EAAE,CAAC,GAAyB,EAAE,GAAa,EAAE,EAAE;IACjF,IAAI,CAAC,IAAA,0BAAa,GAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC;QACP,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ;KAC7B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AACxD,8CAA8C;AAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACtD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-voice.d.ts","sourceRoot":"","sources":["../../src/routes/live-voice.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA0BxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const express_1 = require("express");
|
|
4
|
+
const store_1 = require("../sync/store");
|
|
5
|
+
const live_1 = require("../voice/live");
|
|
6
|
+
const router = (0, express_1.Router)();
|
|
7
|
+
const route = (fn) => (req, res, next) => { Promise.resolve().then(() => fn(req, res)).catch(next); };
|
|
8
|
+
const id = (value) => { if (typeof value !== 'string' || !/^[a-f0-9-]{36}$/.test(value))
|
|
9
|
+
throw new store_1.HttpError(400, 'Invalid call identifier'); return value; };
|
|
10
|
+
const number = (value, min = 0, max = Number.MAX_SAFE_INTEGER) => { const n = Number(value); if (!Number.isSafeInteger(n) || n < min || n > max)
|
|
11
|
+
throw new store_1.HttpError(400, 'Invalid live call resource'); return n; };
|
|
12
|
+
async function connected(res, fn) {
|
|
13
|
+
const controller = new AbortController();
|
|
14
|
+
const close = () => { if (!res.writableEnded)
|
|
15
|
+
controller.abort(); };
|
|
16
|
+
res.on('close', close);
|
|
17
|
+
if (res.destroyed)
|
|
18
|
+
controller.abort();
|
|
19
|
+
try {
|
|
20
|
+
return await fn(controller.signal);
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
res.off('close', close);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
router.post('/calls', route(async (req, res) => {
|
|
27
|
+
if (Object.keys(req.body || {}).some(key => !['syncId', 'requestId'].includes(key)))
|
|
28
|
+
throw new store_1.HttpError(400, 'Unknown call option. Refresh the page.');
|
|
29
|
+
const requestId = req.body?.requestId === undefined ? undefined : id(req.body.requestId);
|
|
30
|
+
const result = await connected(res, signal => (0, live_1.createLiveCall)(number(req.body?.syncId, 1), signal, requestId));
|
|
31
|
+
res.status(201).json(result);
|
|
32
|
+
}));
|
|
33
|
+
router.post('/calls/:id/connect', route(async (req, res) => {
|
|
34
|
+
if (typeof req.body?.sdp !== 'string' || req.body.sdp.length > 28000)
|
|
35
|
+
throw new store_1.HttpError(400, 'Invalid audio offer');
|
|
36
|
+
res.json(await connected(res, signal => (0, live_1.connectLiveCall)(id(req.params.id), req.body.sdp, signal)));
|
|
37
|
+
}));
|
|
38
|
+
router.get('/calls/:id/events', route((req, res) => res.json((0, live_1.liveEvents)(id(req.params.id), number(req.query.after || 0)))));
|
|
39
|
+
router.post('/calls/:id/text', route(async (req, res) => {
|
|
40
|
+
if (typeof req.body?.question !== 'string' || !req.body.question.trim() || req.body.question.length > 2000)
|
|
41
|
+
throw new store_1.HttpError(400, 'Question must be 1 to 2000 characters');
|
|
42
|
+
await (0, live_1.sendLiveText)(id(req.params.id), req.body.question, id(req.body.requestId));
|
|
43
|
+
res.sendStatus(204);
|
|
44
|
+
}));
|
|
45
|
+
router.post('/calls/:id/interrupt', route(async (req, res) => { await (0, live_1.interruptLiveCall)(id(req.params.id)); res.sendStatus(204); }));
|
|
46
|
+
router.post('/calls/:id/observed', route((req, res) => { (0, live_1.observeLiveAudio)(id(req.params.id), number(req.body?.messageId, 1), number(req.body?.milliseconds, 0, 1800000)); res.sendStatus(204); }));
|
|
47
|
+
router.post('/calls/:id/end', route(async (req, res) => { await (0, live_1.endLiveCall)(id(req.params.id)); res.sendStatus(204); }));
|
|
48
|
+
exports.default = router;
|
|
49
|
+
//# sourceMappingURL=live-voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-voice.js","sourceRoot":"","sources":["../../src/routes/live-voice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,4CAAW,CAAC;AASxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const express_1 = require("express");
|
|
4
|
+
const service_1 = require("../memory/service");
|
|
5
|
+
const router = (0, express_1.Router)();
|
|
6
|
+
const route = (handler) => (req, res, next) => {
|
|
7
|
+
const abort = new AbortController();
|
|
8
|
+
const closed = () => { if (!res.writableEnded)
|
|
9
|
+
abort.abort(); };
|
|
10
|
+
res.on('close', closed);
|
|
11
|
+
void Promise.resolve().then(() => handler(req, res, abort.signal)).catch(next).finally(() => res.off('close', closed));
|
|
12
|
+
};
|
|
13
|
+
// Metadata only: never starts a worker, downloads a model or queues behind it.
|
|
14
|
+
router.get('/progress', (_req, res) => res.json((0, service_1.historyProgress)()));
|
|
15
|
+
router.post('/search', route(async (req, res, signal) => res.json(await (0, service_1.searchHistory)((0, service_1.validateHistoryQuery)(req.body), signal))));
|
|
16
|
+
router.get('/records/:ref', route(async (req, res, signal) => res.json(await (0, service_1.readHistory)(String(req.params.ref), req.query.offset === undefined ? 0 : Number(req.query.offset), signal))));
|
|
17
|
+
exports.default = router;
|
|
18
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/routes/memory.ts"],"names":[],"mappings":";;AAAA,qCAAiF;AACjF,+CAAsG;AACtG,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AACxB,MAAM,KAAK,GAAG,CAAC,OAAyF,EAAE,EAAE,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC/J,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAAC,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9H,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACzH,CAAC,CAAC;AACF,+EAA+E;AAC/E,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,yBAAe,GAAE,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAA,8BAAoB,EAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjI,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAA,qBAAW,EAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3L,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAmGxB,eAAe,MAAM,CAAC"}
|