@brainpilot/backend-core 0.0.8 → 0.0.10
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/dist/app.d.ts.map +1 -1
- package/dist/app.js +148 -1
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +54 -2
- package/dist/config.js.map +1 -1
- package/dist/docker-orchestrator.d.ts.map +1 -1
- package/dist/docker-orchestrator.js +19 -1
- package/dist/docker-orchestrator.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/kb-builder.d.ts +89 -0
- package/dist/kb-builder.d.ts.map +1 -0
- package/dist/kb-builder.js +423 -0
- package/dist/kb-builder.js.map +1 -0
- package/dist/local-orchestrator.d.ts.map +1 -1
- package/dist/local-orchestrator.js +8 -1
- package/dist/local-orchestrator.js.map +1 -1
- package/dist/provider-probe.d.ts.map +1 -1
- package/dist/provider-probe.js +9 -2
- package/dist/provider-probe.js.map +1 -1
- package/dist/server.d.ts +26 -6
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +43 -7
- package/dist/server.js.map +1 -1
- package/dist/static-orchestrator.d.ts.map +1 -1
- package/dist/static-orchestrator.js +8 -2
- package/dist/static-orchestrator.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export interface KbBuildOptions {
|
|
2
|
+
/** Per-run override of the KnowledgeBase root. Falls through to env / default. */
|
|
3
|
+
kbRoot?: string;
|
|
4
|
+
/** SiliconFlow API key for OCR; forwarded as --ocr-api-key. */
|
|
5
|
+
ocrApiKey?: string;
|
|
6
|
+
/** Per-PDF concurrency; forwarded as --ocr-concurrency. */
|
|
7
|
+
ocrConcurrency?: number;
|
|
8
|
+
/** Cap on number of PDFs (smoke testing). */
|
|
9
|
+
ocrLimit?: number;
|
|
10
|
+
/** Metadata-extraction LLM credentials (OpenAI-compatible). */
|
|
11
|
+
metaApiKey?: string;
|
|
12
|
+
metaBaseUrl?: string;
|
|
13
|
+
metaModel?: string;
|
|
14
|
+
/** Stages to skip; mutually exclusive with `only`. */
|
|
15
|
+
skip?: Array<"ocr" | "extract" | "chunk" | "vectorize">;
|
|
16
|
+
/** Stages to run (overrides skip). */
|
|
17
|
+
only?: Array<"ocr" | "extract" | "chunk" | "vectorize">;
|
|
18
|
+
}
|
|
19
|
+
export interface KbBuildEvent {
|
|
20
|
+
ts: string;
|
|
21
|
+
stage: string;
|
|
22
|
+
event: string;
|
|
23
|
+
msg: string;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
export type Listener = (ev: KbBuildEvent) => void;
|
|
27
|
+
export interface StartResult {
|
|
28
|
+
ok: boolean;
|
|
29
|
+
message?: string;
|
|
30
|
+
startedAt?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Bootstrap the KnowledgeBase Python venv via ``scripts/setup_env.py``.
|
|
34
|
+
*
|
|
35
|
+
* Shares the same RUN slot as ``startKbBuild`` — at most one Python job is
|
|
36
|
+
* allowed at a time. This is intentional: the build needs the venv to exist
|
|
37
|
+
* first, and the SSE stream is single-channel.
|
|
38
|
+
*
|
|
39
|
+
* The setup script is **pure stdlib Python**, so we deliberately do NOT
|
|
40
|
+
* resolve via the venv (which doesn't exist yet). Priority for the
|
|
41
|
+
* bootstrap interpreter:
|
|
42
|
+
* 1. ``opts.python`` — explicit override from the UI
|
|
43
|
+
* 2. ``BP_KB_PYTHON`` — env var (probably wrong here, but honour it)
|
|
44
|
+
* 3. ``python3`` / ``python`` on PATH
|
|
45
|
+
*/
|
|
46
|
+
export declare function startKbEnvSetup(opts?: {
|
|
47
|
+
python?: string;
|
|
48
|
+
reinstall?: boolean;
|
|
49
|
+
kbRoot?: string;
|
|
50
|
+
}): StartResult;
|
|
51
|
+
export declare function startKbBuild(opts?: KbBuildOptions): StartResult;
|
|
52
|
+
export interface KbBuildStatus {
|
|
53
|
+
active: boolean;
|
|
54
|
+
startedAt: number | null;
|
|
55
|
+
finishedAt: number | null;
|
|
56
|
+
exitCode: number | null | undefined;
|
|
57
|
+
error?: string;
|
|
58
|
+
recentEvents: KbBuildEvent[];
|
|
59
|
+
/** Diagnostic info the UI shows in the panel BEFORE a build starts. */
|
|
60
|
+
environment: KbEnvironment;
|
|
61
|
+
}
|
|
62
|
+
export interface KbEnvironment {
|
|
63
|
+
/** Absolute path to the python the build will use. */
|
|
64
|
+
python: string;
|
|
65
|
+
/** True if the chosen python is the bundled venv (recommended). */
|
|
66
|
+
pythonIsVenv: boolean;
|
|
67
|
+
/** Did setup_env.sh ever finish? */
|
|
68
|
+
venvExists: boolean;
|
|
69
|
+
/** Path to the bundled venv even if it doesn't exist yet (for the UI hint). */
|
|
70
|
+
expectedVenvPath: string;
|
|
71
|
+
/** True iff the four pipeline scripts + the orchestrator are all present. */
|
|
72
|
+
scriptsPresent: boolean;
|
|
73
|
+
/** Resolved KnowledgeBase root the backend will use by default. */
|
|
74
|
+
kbRoot: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function getKbBuildStatus(): KbBuildStatus;
|
|
77
|
+
export interface SubscribeHandle {
|
|
78
|
+
unsubscribe: () => void;
|
|
79
|
+
/** Replay of buffered events for late subscribers. */
|
|
80
|
+
history: KbBuildEvent[];
|
|
81
|
+
/** Resolves when the current run finishes (or immediately if no active run). */
|
|
82
|
+
done: Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
export declare function subscribeKbBuild(listener: Listener): SubscribeHandle;
|
|
85
|
+
export declare function cancelKbBuild(): {
|
|
86
|
+
ok: boolean;
|
|
87
|
+
message?: string;
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=kb-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-builder.d.ts","sourceRoot":"","sources":["../src/kb-builder.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;IACxD,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;AA+HlD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAmFjH;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,cAAmB,GAAG,WAAW,CAyFnE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,uEAAuE;IACvE,WAAW,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;CAChB;AAkCD,wBAAgB,gBAAgB,IAAI,aAAa,CAuBhD;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,sDAAsD;IACtD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,gFAAgF;IAChF,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA2BpE;AAED,wBAAgB,aAAa,IAAI;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAUjE"}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-user knowledge-base build orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Spawns ``KnowledgeBase/scripts/build_kb.py --json`` and exposes:
|
|
5
|
+
* - POST /api/kb/build start a run (returns immediately)
|
|
6
|
+
* - GET /api/kb/status current run state
|
|
7
|
+
* - GET /api/kb/events SSE — live stream of NDJSON events from the child
|
|
8
|
+
* - POST /api/kb/cancel best-effort SIGTERM
|
|
9
|
+
*
|
|
10
|
+
* Only one build is allowed at a time across the whole process. A new POST
|
|
11
|
+
* while a run is active 409s — that's the right behaviour because every run
|
|
12
|
+
* mutates the same on-disk files and a second concurrent run would corrupt
|
|
13
|
+
* the OCRed_pdf.json ledger.
|
|
14
|
+
*
|
|
15
|
+
* The child's stdout is line-buffered and parsed as NDJSON. Anything that
|
|
16
|
+
* doesn't parse is forwarded as a `{event: "log", msg: <line>}` so stray
|
|
17
|
+
* prints from a dependency don't drop on the floor.
|
|
18
|
+
*/
|
|
19
|
+
import { spawn } from "node:child_process";
|
|
20
|
+
import { existsSync } from "node:fs";
|
|
21
|
+
import { resolve, join, dirname } from "node:path";
|
|
22
|
+
import { fileURLToPath } from "node:url";
|
|
23
|
+
const EVENT_BUFFER_CAP = 5_000; // last N events kept for the status panel
|
|
24
|
+
let RUN = null;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the Python interpreter the build pipeline subprocess will run as.
|
|
27
|
+
*
|
|
28
|
+
* Priority (kept in lock-step with packages/runtime/src/tools/kb/python.ts —
|
|
29
|
+
* we duplicate here rather than importing across packages, so backend-core
|
|
30
|
+
* stays free of a runtime dependency):
|
|
31
|
+
*
|
|
32
|
+
* 1. ``BP_KB_PYTHON`` — explicit override
|
|
33
|
+
* 2. ``<kbRoot>/.venv/bin/python`` — venv created by setup_env.sh
|
|
34
|
+
* (``<kbRoot>\.venv\Scripts\python.exe`` on Windows)
|
|
35
|
+
* 3. ``PYTHON`` env var
|
|
36
|
+
* 4. ``python3`` (Unix) / ``python`` (Windows) on PATH
|
|
37
|
+
*
|
|
38
|
+
* If `kbRoot` is undefined we still check `process.cwd()/KnowledgeBase/.venv`
|
|
39
|
+
* which catches the common "ran build_kb.py from the repo root" case.
|
|
40
|
+
*/
|
|
41
|
+
function pythonBin(kbRoot) {
|
|
42
|
+
const override = process.env.BP_KB_PYTHON?.trim();
|
|
43
|
+
if (override)
|
|
44
|
+
return override;
|
|
45
|
+
const rootCandidates = [];
|
|
46
|
+
if (kbRoot)
|
|
47
|
+
rootCandidates.push(kbRoot);
|
|
48
|
+
rootCandidates.push(join(process.cwd(), "KnowledgeBase"));
|
|
49
|
+
for (const root of rootCandidates) {
|
|
50
|
+
const venvPython = process.platform === "win32"
|
|
51
|
+
? join(root, ".venv", "Scripts", "python.exe")
|
|
52
|
+
: join(root, ".venv", "bin", "python");
|
|
53
|
+
if (existsSync(venvPython))
|
|
54
|
+
return venvPython;
|
|
55
|
+
}
|
|
56
|
+
const pyEnv = process.env.PYTHON?.trim();
|
|
57
|
+
if (pyEnv)
|
|
58
|
+
return pyEnv;
|
|
59
|
+
return process.platform === "win32" ? "python" : "python3";
|
|
60
|
+
}
|
|
61
|
+
function defaultBuildScript() {
|
|
62
|
+
if (process.env.BP_KB_BUILD_SCRIPT)
|
|
63
|
+
return process.env.BP_KB_BUILD_SCRIPT;
|
|
64
|
+
return join(findKbRoot(), "scripts", "build_kb.py");
|
|
65
|
+
}
|
|
66
|
+
function buildArgv(opts, script) {
|
|
67
|
+
const argv = [script, "--json"];
|
|
68
|
+
if (opts.kbRoot)
|
|
69
|
+
argv.push("--kb-root", opts.kbRoot);
|
|
70
|
+
if (opts.ocrApiKey)
|
|
71
|
+
argv.push("--ocr-api-key", opts.ocrApiKey);
|
|
72
|
+
if (opts.ocrConcurrency != null)
|
|
73
|
+
argv.push("--ocr-concurrency", String(opts.ocrConcurrency));
|
|
74
|
+
if (opts.ocrLimit != null)
|
|
75
|
+
argv.push("--ocr-limit", String(opts.ocrLimit));
|
|
76
|
+
if (opts.metaApiKey)
|
|
77
|
+
argv.push("--meta-api-key", opts.metaApiKey);
|
|
78
|
+
if (opts.metaBaseUrl)
|
|
79
|
+
argv.push("--meta-base-url", opts.metaBaseUrl);
|
|
80
|
+
if (opts.metaModel)
|
|
81
|
+
argv.push("--meta-model", opts.metaModel);
|
|
82
|
+
if (opts.only && opts.only.length) {
|
|
83
|
+
argv.push("--only", ...opts.only);
|
|
84
|
+
}
|
|
85
|
+
else if (opts.skip && opts.skip.length) {
|
|
86
|
+
for (const s of opts.skip)
|
|
87
|
+
argv.push(`--skip-${s}`);
|
|
88
|
+
}
|
|
89
|
+
return argv;
|
|
90
|
+
}
|
|
91
|
+
function broadcast(ev) {
|
|
92
|
+
if (!RUN)
|
|
93
|
+
return;
|
|
94
|
+
RUN.events.push(ev);
|
|
95
|
+
if (RUN.events.length > EVENT_BUFFER_CAP) {
|
|
96
|
+
RUN.events.splice(0, RUN.events.length - EVENT_BUFFER_CAP);
|
|
97
|
+
}
|
|
98
|
+
for (const l of RUN.listeners) {
|
|
99
|
+
try {
|
|
100
|
+
l(ev);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
/* one bad listener should not block the rest */
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function parseLine(line) {
|
|
108
|
+
const trimmed = line.trim();
|
|
109
|
+
if (!trimmed)
|
|
110
|
+
return null;
|
|
111
|
+
if (trimmed.startsWith("{") && trimmed.endsWith("}")) {
|
|
112
|
+
try {
|
|
113
|
+
const ev = JSON.parse(trimmed);
|
|
114
|
+
if (typeof ev.stage === "string" && typeof ev.event === "string")
|
|
115
|
+
return ev;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
/* fall through to log */
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
ts: new Date().toISOString(),
|
|
123
|
+
stage: "log",
|
|
124
|
+
event: "log",
|
|
125
|
+
msg: trimmed,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function pipeOutput(stream) {
|
|
129
|
+
let buf = "";
|
|
130
|
+
stream.setEncoding("utf8");
|
|
131
|
+
stream.on("data", (chunk) => {
|
|
132
|
+
buf += chunk;
|
|
133
|
+
let idx;
|
|
134
|
+
while ((idx = buf.indexOf("\n")) !== -1) {
|
|
135
|
+
const line = buf.slice(0, idx);
|
|
136
|
+
buf = buf.slice(idx + 1);
|
|
137
|
+
const ev = parseLine(line);
|
|
138
|
+
if (ev)
|
|
139
|
+
broadcast(ev);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
stream.on("end", () => {
|
|
143
|
+
if (buf.trim()) {
|
|
144
|
+
const ev = parseLine(buf);
|
|
145
|
+
if (ev)
|
|
146
|
+
broadcast(ev);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Bootstrap the KnowledgeBase Python venv via ``scripts/setup_env.py``.
|
|
152
|
+
*
|
|
153
|
+
* Shares the same RUN slot as ``startKbBuild`` — at most one Python job is
|
|
154
|
+
* allowed at a time. This is intentional: the build needs the venv to exist
|
|
155
|
+
* first, and the SSE stream is single-channel.
|
|
156
|
+
*
|
|
157
|
+
* The setup script is **pure stdlib Python**, so we deliberately do NOT
|
|
158
|
+
* resolve via the venv (which doesn't exist yet). Priority for the
|
|
159
|
+
* bootstrap interpreter:
|
|
160
|
+
* 1. ``opts.python`` — explicit override from the UI
|
|
161
|
+
* 2. ``BP_KB_PYTHON`` — env var (probably wrong here, but honour it)
|
|
162
|
+
* 3. ``python3`` / ``python`` on PATH
|
|
163
|
+
*/
|
|
164
|
+
export function startKbEnvSetup(opts = {}) {
|
|
165
|
+
if (RUN && RUN.doneAt == null) {
|
|
166
|
+
return { ok: false, message: "another knowledge-base job is already running" };
|
|
167
|
+
}
|
|
168
|
+
const root = opts.kbRoot ? resolve(opts.kbRoot) : findKbRoot();
|
|
169
|
+
const script = join(root, "scripts", "setup_env.py");
|
|
170
|
+
if (!existsSync(script)) {
|
|
171
|
+
return {
|
|
172
|
+
ok: false,
|
|
173
|
+
message: `setup_env.py not found at ${script}; is the KnowledgeBase tree intact?`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const bootstrapPython = opts.python?.trim() ||
|
|
177
|
+
process.env.BP_KB_PYTHON?.trim() ||
|
|
178
|
+
(process.platform === "win32" ? "python" : "python3");
|
|
179
|
+
const argv = [script, "--kb-root", root, "--json"];
|
|
180
|
+
if (opts.reinstall)
|
|
181
|
+
argv.push("--reinstall");
|
|
182
|
+
if (opts.python)
|
|
183
|
+
argv.push("--python", opts.python);
|
|
184
|
+
let proc;
|
|
185
|
+
try {
|
|
186
|
+
proc = spawn(bootstrapPython, argv, {
|
|
187
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
188
|
+
env: { ...process.env, BP_KB_ROOT: root },
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
return {
|
|
193
|
+
ok: false,
|
|
194
|
+
message: `failed to spawn ${bootstrapPython}: ${err.message}`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
RUN = {
|
|
198
|
+
startedAt: Date.now(),
|
|
199
|
+
proc,
|
|
200
|
+
events: [],
|
|
201
|
+
listeners: new Set(),
|
|
202
|
+
};
|
|
203
|
+
broadcast({
|
|
204
|
+
ts: new Date().toISOString(),
|
|
205
|
+
stage: "setup-env",
|
|
206
|
+
event: "info",
|
|
207
|
+
msg: `spawned ${bootstrapPython} ${argv.join(" ")}`,
|
|
208
|
+
});
|
|
209
|
+
pipeOutput(proc.stdout);
|
|
210
|
+
pipeOutput(proc.stderr);
|
|
211
|
+
proc.on("error", (err) => {
|
|
212
|
+
broadcast({
|
|
213
|
+
ts: new Date().toISOString(),
|
|
214
|
+
stage: "setup-env",
|
|
215
|
+
event: "error",
|
|
216
|
+
msg: `failed to spawn: ${err.message}`,
|
|
217
|
+
});
|
|
218
|
+
if (RUN) {
|
|
219
|
+
RUN.doneAt = Date.now();
|
|
220
|
+
RUN.exitCode = null;
|
|
221
|
+
RUN.error = err.message;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
proc.on("exit", (code, signal) => {
|
|
225
|
+
broadcast({
|
|
226
|
+
ts: new Date().toISOString(),
|
|
227
|
+
stage: "setup-env",
|
|
228
|
+
event: code === 0 ? "done" : "error",
|
|
229
|
+
msg: code === 0
|
|
230
|
+
? "venv ready"
|
|
231
|
+
: `setup-env exited code=${code} signal=${signal ?? ""}`,
|
|
232
|
+
exit_code: code,
|
|
233
|
+
signal,
|
|
234
|
+
});
|
|
235
|
+
if (RUN) {
|
|
236
|
+
RUN.doneAt = Date.now();
|
|
237
|
+
RUN.exitCode = code;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return { ok: true, startedAt: RUN.startedAt };
|
|
241
|
+
}
|
|
242
|
+
export function startKbBuild(opts = {}) {
|
|
243
|
+
if (RUN && RUN.doneAt == null) {
|
|
244
|
+
return { ok: false, message: "a knowledge-base build is already running" };
|
|
245
|
+
}
|
|
246
|
+
const script = defaultBuildScript();
|
|
247
|
+
if (!existsSync(script)) {
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
message: `build script not found at ${script}; set BP_KB_BUILD_SCRIPT or ensure KnowledgeBase/ ships with the install.`,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
// If neither BP_KB_PYTHON nor the bundled venv is available, refuse rather
|
|
254
|
+
// than spawning a "python3 not found" failure halfway through. PATH-only
|
|
255
|
+
// python3 can still work, but the user's pip-installed deps then need to
|
|
256
|
+
// be system-wide — almost certainly not what they want.
|
|
257
|
+
const env = describeKbEnvironment(opts.kbRoot);
|
|
258
|
+
if (!process.env.BP_KB_PYTHON && !env.venvExists) {
|
|
259
|
+
return {
|
|
260
|
+
ok: false,
|
|
261
|
+
message: `Python venv not found at ${env.expectedVenvPath}. ` +
|
|
262
|
+
`Run "bash ${join(env.kbRoot, "scripts", "setup_env.sh")}" first ` +
|
|
263
|
+
`(or set BP_KB_PYTHON to point at a Python with the requirements.txt deps installed).`,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
const argv = buildArgv(opts, script);
|
|
267
|
+
const py = pythonBin(opts.kbRoot);
|
|
268
|
+
const proc = spawn(py, argv, {
|
|
269
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
270
|
+
env: {
|
|
271
|
+
...process.env,
|
|
272
|
+
...(opts.kbRoot ? { BP_KB_ROOT: resolve(opts.kbRoot) } : {}),
|
|
273
|
+
// Make sure the build_kb.py orchestrator AND every stage it spawns
|
|
274
|
+
// share the same interpreter — without this, each `subprocess.run`
|
|
275
|
+
// call in build_kb.py would re-resolve via PATH and could land on a
|
|
276
|
+
// different python (e.g. system python3 without our deps installed).
|
|
277
|
+
BP_KB_PYTHON: py,
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
RUN = {
|
|
281
|
+
startedAt: Date.now(),
|
|
282
|
+
proc,
|
|
283
|
+
events: [],
|
|
284
|
+
listeners: new Set(),
|
|
285
|
+
};
|
|
286
|
+
// Banner so the SSE consumer sees something immediately.
|
|
287
|
+
broadcast({
|
|
288
|
+
ts: new Date().toISOString(),
|
|
289
|
+
stage: "build",
|
|
290
|
+
event: "info",
|
|
291
|
+
msg: `spawned ${py} ${argv.join(" ")}`,
|
|
292
|
+
});
|
|
293
|
+
pipeOutput(proc.stdout);
|
|
294
|
+
pipeOutput(proc.stderr);
|
|
295
|
+
proc.on("error", (err) => {
|
|
296
|
+
broadcast({
|
|
297
|
+
ts: new Date().toISOString(),
|
|
298
|
+
stage: "build",
|
|
299
|
+
event: "error",
|
|
300
|
+
msg: `failed to spawn: ${err.message}`,
|
|
301
|
+
});
|
|
302
|
+
if (RUN) {
|
|
303
|
+
RUN.doneAt = Date.now();
|
|
304
|
+
RUN.exitCode = null;
|
|
305
|
+
RUN.error = err.message;
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
proc.on("exit", (code, signal) => {
|
|
309
|
+
broadcast({
|
|
310
|
+
ts: new Date().toISOString(),
|
|
311
|
+
stage: "build",
|
|
312
|
+
event: code === 0 ? "done" : "error",
|
|
313
|
+
msg: code === 0
|
|
314
|
+
? "build finished successfully"
|
|
315
|
+
: `build exited code=${code} signal=${signal ?? ""}`,
|
|
316
|
+
exit_code: code,
|
|
317
|
+
signal,
|
|
318
|
+
});
|
|
319
|
+
if (RUN) {
|
|
320
|
+
RUN.doneAt = Date.now();
|
|
321
|
+
RUN.exitCode = code;
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
return { ok: true, startedAt: RUN.startedAt };
|
|
325
|
+
}
|
|
326
|
+
function describeKbEnvironment(kbRoot) {
|
|
327
|
+
// Mirror defaultBuildScript()'s walk-up to find KnowledgeBase/.
|
|
328
|
+
const root = kbRoot ?? findKbRoot();
|
|
329
|
+
const expectedVenv = process.platform === "win32"
|
|
330
|
+
? join(root, ".venv", "Scripts", "python.exe")
|
|
331
|
+
: join(root, ".venv", "bin", "python");
|
|
332
|
+
const venvExists = existsSync(expectedVenv);
|
|
333
|
+
const python = pythonBin(root);
|
|
334
|
+
return {
|
|
335
|
+
python,
|
|
336
|
+
pythonIsVenv: python === expectedVenv,
|
|
337
|
+
venvExists,
|
|
338
|
+
expectedVenvPath: expectedVenv,
|
|
339
|
+
scriptsPresent: existsSync(join(root, "scripts", "build_kb.py")),
|
|
340
|
+
kbRoot: root,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function findKbRoot() {
|
|
344
|
+
if (process.env.BP_KB_ROOT?.trim())
|
|
345
|
+
return resolve(process.env.BP_KB_ROOT.trim());
|
|
346
|
+
let dir = dirname(fileURLToPath(import.meta.url));
|
|
347
|
+
for (let i = 0; i < 8; i++) {
|
|
348
|
+
const candidate = join(dir, "KnowledgeBase");
|
|
349
|
+
if (existsSync(join(candidate, "scripts", "build_kb.py")))
|
|
350
|
+
return candidate;
|
|
351
|
+
const parent = dirname(dir);
|
|
352
|
+
if (parent === dir)
|
|
353
|
+
break;
|
|
354
|
+
dir = parent;
|
|
355
|
+
}
|
|
356
|
+
return join(process.cwd(), "KnowledgeBase");
|
|
357
|
+
}
|
|
358
|
+
export function getKbBuildStatus() {
|
|
359
|
+
const environment = describeKbEnvironment();
|
|
360
|
+
if (!RUN) {
|
|
361
|
+
return {
|
|
362
|
+
active: false,
|
|
363
|
+
startedAt: null,
|
|
364
|
+
finishedAt: null,
|
|
365
|
+
exitCode: undefined,
|
|
366
|
+
recentEvents: [],
|
|
367
|
+
environment,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
return {
|
|
371
|
+
active: RUN.doneAt == null,
|
|
372
|
+
startedAt: RUN.startedAt,
|
|
373
|
+
finishedAt: RUN.doneAt ?? null,
|
|
374
|
+
exitCode: RUN.exitCode,
|
|
375
|
+
error: RUN.error,
|
|
376
|
+
// Last ~200 events — the SSE stream is the primary surface; this is for
|
|
377
|
+
// a panel that has just been opened and wants context.
|
|
378
|
+
recentEvents: RUN.events.slice(-200),
|
|
379
|
+
environment,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
export function subscribeKbBuild(listener) {
|
|
383
|
+
if (!RUN) {
|
|
384
|
+
return {
|
|
385
|
+
unsubscribe: () => { },
|
|
386
|
+
history: [],
|
|
387
|
+
done: Promise.resolve(),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
RUN.listeners.add(listener);
|
|
391
|
+
const history = [...RUN.events];
|
|
392
|
+
const done = RUN.doneAt != null
|
|
393
|
+
? Promise.resolve()
|
|
394
|
+
: new Promise((resolve) => {
|
|
395
|
+
const check = () => {
|
|
396
|
+
if (!RUN || RUN.doneAt != null) {
|
|
397
|
+
resolve();
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
setTimeout(check, 200);
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
check();
|
|
404
|
+
});
|
|
405
|
+
return {
|
|
406
|
+
unsubscribe: () => RUN?.listeners.delete(listener),
|
|
407
|
+
history,
|
|
408
|
+
done,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
export function cancelKbBuild() {
|
|
412
|
+
if (!RUN || RUN.doneAt != null) {
|
|
413
|
+
return { ok: false, message: "no active build to cancel" };
|
|
414
|
+
}
|
|
415
|
+
try {
|
|
416
|
+
RUN.proc.kill("SIGTERM");
|
|
417
|
+
return { ok: true };
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
return { ok: false, message: err.message };
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=kb-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-builder.js","sourceRoot":"","sources":["../src/kb-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-orchestrator.d.ts","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-orchestrator.d.ts","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ import { spawn } from "node:child_process";
|
|
|
16
16
|
import { createRequire } from "node:module";
|
|
17
17
|
import { openSync, closeSync, writeFileSync, mkdirSync, rmSync } from "node:fs";
|
|
18
18
|
import { dirname } from "node:path";
|
|
19
|
+
import { gracefulSignalsSupported } from "@brainpilot/runtime";
|
|
19
20
|
/** Resolve `@brainpilot/runtime/server` to an absolute path WITHOUT importing it. */
|
|
20
21
|
export function resolveRuntimeServerPath() {
|
|
21
22
|
const require = createRequire(import.meta.url);
|
|
@@ -147,7 +148,13 @@ export class LocalProcessOrchestrator {
|
|
|
147
148
|
this.removePidFile();
|
|
148
149
|
if (child) {
|
|
149
150
|
try {
|
|
150
|
-
child.kill("SIGTERM")
|
|
151
|
+
// Cross-platform (#6): on Windows `child.kill("SIGTERM")` is translated
|
|
152
|
+
// to `TerminateProcess` (a forceful kill the child cannot intercept),
|
|
153
|
+
// so the SIGTERM/SIGKILL distinction is meaningless. We call the
|
|
154
|
+
// platform-appropriate signal explicitly so the intent reads correctly
|
|
155
|
+
// at the call-site and Windows logs don't show a phantom "graceful"
|
|
156
|
+
// shutdown that never actually ran the child's signal handlers.
|
|
157
|
+
child.kill(gracefulSignalsSupported ? "SIGTERM" : "SIGKILL");
|
|
151
158
|
}
|
|
152
159
|
catch {
|
|
153
160
|
/* already gone */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-orchestrator.js","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"local-orchestrator.js","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-probe.d.ts","sourceRoot":"","sources":["../src/provider-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"provider-probe.d.ts","sourceRoot":"","sources":["../src/provider-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAuBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,WAAW,CAAC,CAoDtB"}
|
package/dist/provider-probe.js
CHANGED
|
@@ -16,10 +16,17 @@
|
|
|
16
16
|
* Error messages are redacted (no absolute node_modules paths) consistent with
|
|
17
17
|
* the #45 hardening.
|
|
18
18
|
*/
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Strip absolute node_modules paths from any error text before surfacing it.
|
|
21
|
+
*
|
|
22
|
+
* Cross-platform (#157): accept BOTH `/` and `\` separators, plus an optional
|
|
23
|
+
* Windows drive prefix. A native Windows path like
|
|
24
|
+
* `C:\Users\<user>\…\node_modules\@pkg\file.md` previously slipped through
|
|
25
|
+
* unredacted, leaking the username into the Test-button error toast.
|
|
26
|
+
*/
|
|
20
27
|
function redact(text) {
|
|
21
28
|
return text
|
|
22
|
-
.replace(/(
|
|
29
|
+
.replace(/(?:[A-Za-z]:)?(?:[\\/][^\s:]*)?node_modules[\\/][^\s)]*/g, "<path>")
|
|
23
30
|
.replace(/\s+/g, " ")
|
|
24
31
|
.trim();
|
|
25
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-probe.js","sourceRoot":"","sources":["../src/provider-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH
|
|
1
|
+
{"version":3,"file":"provider-probe.js","sourceRoot":"","sources":["../src/provider-probe.ts"],"names":[],"mappings":"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"}
|