@brainpilot/backend-core 0.0.4 → 0.0.6
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 +2 -15
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +211 -47
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +123 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +293 -15
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local-orchestrator.d.ts +16 -0
- package/dist/local-orchestrator.d.ts.map +1 -1
- package/dist/local-orchestrator.js +56 -6
- package/dist/local-orchestrator.js.map +1 -1
- package/dist/provider-probe.d.ts +38 -0
- package/dist/provider-probe.d.ts.map +1 -0
- package/dist/provider-probe.js +89 -0
- package/dist/provider-probe.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -1
- package/dist/server.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +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;AAgBD;;;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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #55: real provider connectivity probe for the Settings → Providers "Test"
|
|
3
|
+
* button. Previously the /test route only echoed the stored profile with
|
|
4
|
+
* health_status:"unknown", so even an unreachable gateway looked "tested".
|
|
5
|
+
*
|
|
6
|
+
* Strategy (kept deliberately generic so it works across OpenAI-compatible and
|
|
7
|
+
* Anthropic-compatible gateways without hardcoding a vendor):
|
|
8
|
+
* - best-effort GET {baseUrl}/models with the API key as a Bearer token;
|
|
9
|
+
* - a 2xx ⇒ healthy (connected + authenticated);
|
|
10
|
+
* - 401/403 ⇒ error (reachable but auth rejected);
|
|
11
|
+
* - other 4xx/5xx ⇒ reachable, so still "healthy" at the connectivity level —
|
|
12
|
+
* many Anthropic-style gateways have no /models endpoint and answer 404, and
|
|
13
|
+
* that does NOT mean the gateway is down;
|
|
14
|
+
* - a network/DNS/timeout failure ⇒ unavailable.
|
|
15
|
+
*
|
|
16
|
+
* Error messages are redacted (no absolute node_modules paths) consistent with
|
|
17
|
+
* the #45 hardening.
|
|
18
|
+
*/
|
|
19
|
+
/** Strip absolute node_modules paths from any error text before surfacing it. */
|
|
20
|
+
function redact(text) {
|
|
21
|
+
return text
|
|
22
|
+
.replace(/(?:\/[^\s:]*)?node_modules\/[^\s)]*/g, "<path>")
|
|
23
|
+
.replace(/\s+/g, " ")
|
|
24
|
+
.trim();
|
|
25
|
+
}
|
|
26
|
+
function joinUrl(base, path) {
|
|
27
|
+
const b = base.replace(/\/+$/, "");
|
|
28
|
+
const p = path.replace(/^\/+/, "");
|
|
29
|
+
return `${b}/${p}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Probe a provider gateway. `fetchFn`/`timeoutMs` are injectable for tests.
|
|
33
|
+
* Never throws — always resolves to a ProbeResult.
|
|
34
|
+
*/
|
|
35
|
+
export async function probeProvider(input, opts = {}) {
|
|
36
|
+
const fetchFn = opts.fetchFn ?? fetch;
|
|
37
|
+
const timeoutMs = opts.timeoutMs ?? 5000;
|
|
38
|
+
const base = (input.baseUrl ?? "").trim();
|
|
39
|
+
if (!base) {
|
|
40
|
+
return { status: "error", message: "No base URL configured for this provider." };
|
|
41
|
+
}
|
|
42
|
+
let url;
|
|
43
|
+
try {
|
|
44
|
+
url = joinUrl(base, "models");
|
|
45
|
+
// validate it parses as a URL
|
|
46
|
+
new URL(url);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { status: "error", message: "Invalid base URL." };
|
|
50
|
+
}
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
53
|
+
const startedAt = Date.now();
|
|
54
|
+
try {
|
|
55
|
+
const headers = { accept: "application/json" };
|
|
56
|
+
if (input.apiKey)
|
|
57
|
+
headers.authorization = `Bearer ${input.apiKey}`;
|
|
58
|
+
const res = await fetchFn(url, { method: "GET", headers, signal: controller.signal });
|
|
59
|
+
const latencyMs = Date.now() - startedAt;
|
|
60
|
+
if (res.ok) {
|
|
61
|
+
return { status: "healthy", latencyMs };
|
|
62
|
+
}
|
|
63
|
+
if (res.status === 401 || res.status === 403) {
|
|
64
|
+
return {
|
|
65
|
+
status: "error",
|
|
66
|
+
message: `Authentication rejected (HTTP ${res.status}). Check the API key.`,
|
|
67
|
+
latencyMs,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Reachable but the endpoint answered non-2xx (e.g. an Anthropic gateway
|
|
71
|
+
// with no /models route). Connectivity is fine, so report healthy.
|
|
72
|
+
return {
|
|
73
|
+
status: "healthy",
|
|
74
|
+
message: `Reached gateway (HTTP ${res.status}); /models probe not supported.`,
|
|
75
|
+
latencyMs,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const latencyMs = Date.now() - startedAt;
|
|
80
|
+
const raw = err?.name === "AbortError"
|
|
81
|
+
? `Timed out after ${timeoutMs}ms.`
|
|
82
|
+
: err?.message ?? String(err);
|
|
83
|
+
return { status: "unavailable", message: redact(raw), latencyMs };
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
clearTimeout(timer);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=provider-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-probe.js","sourceRoot":"","sources":["../src/provider-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IACnE,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAsB,WAAW,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
|
package/dist/server.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { serve } from "@hono/node-server";
|
|
7
7
|
import { createApp } from "./app.js";
|
|
8
8
|
import { createOrchestrator } from "./create-orchestrator.js";
|
|
9
|
+
import { bootstrapEnvProvider } from "./config.js";
|
|
9
10
|
export async function startServer(options = {}) {
|
|
10
11
|
const port = options.port ?? Number(process.env.PORT ?? 9001);
|
|
11
12
|
// 127.0.0.1 is the safe default for local/CLI use; containers set BP_HOST=0.0.0.0
|
|
@@ -23,6 +24,16 @@ export async function startServer(options = {}) {
|
|
|
23
24
|
serveWeb: options.serveWeb,
|
|
24
25
|
env: options.env,
|
|
25
26
|
});
|
|
27
|
+
// #51: seed a provider profile from env on first launch so an env-only
|
|
28
|
+
// quick-start (ANTHROPIC_API_KEY etc.) surfaces an active provider in the Web
|
|
29
|
+
// UI. No-op once providers.json has any profile. Best-effort: a failure here
|
|
30
|
+
// must not block the server from starting.
|
|
31
|
+
try {
|
|
32
|
+
await bootstrapEnvProvider(options.dataDir ?? process.env.BP_DATA_DIR ?? "./brainpilot", options.env);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// ignore — env projection is a convenience, not a startup gate
|
|
36
|
+
}
|
|
26
37
|
if (options.eager) {
|
|
27
38
|
await orchestrator.ensureRuntime();
|
|
28
39
|
}
|
|
@@ -33,7 +44,8 @@ export async function startServer(options = {}) {
|
|
|
33
44
|
});
|
|
34
45
|
await orchestrator.stopRuntime();
|
|
35
46
|
};
|
|
36
|
-
// Graceful shutdown on signals
|
|
47
|
+
// Graceful shutdown on signals. Containers run no PM2 inside; a fatal/OOM
|
|
48
|
+
// cleanly exits and Docker's `restart` policy is the backstop (§R-4 / #20).
|
|
37
49
|
const onSignal = () => {
|
|
38
50
|
void stop().finally(() => process.exit(0));
|
|
39
51
|
};
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAmB,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAyB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainpilot/backend-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
|
+
"engines": {
|
|
5
|
+
"node": ">=22"
|
|
6
|
+
},
|
|
4
7
|
"license": "Apache-2.0",
|
|
5
8
|
"type": "module",
|
|
6
9
|
"description": "BrainPilot Backend — Hono REST+SSE proxy, serve web, Orchestrator abstraction (Docker/Local)",
|
|
@@ -34,11 +37,14 @@
|
|
|
34
37
|
"start": "node ./dist/server.js"
|
|
35
38
|
},
|
|
36
39
|
"dependencies": {
|
|
37
|
-
"@brainpilot/protocol": "^0.0.
|
|
38
|
-
"@brainpilot/runtime": "^0.0.
|
|
40
|
+
"@brainpilot/protocol": "^0.0.6",
|
|
41
|
+
"@brainpilot/runtime": "^0.0.6",
|
|
39
42
|
"@hono/node-server": "^1.13.0",
|
|
40
43
|
"hono": "^4.6.0"
|
|
41
44
|
},
|
|
45
|
+
"optionalDependencies": {
|
|
46
|
+
"dockerode": "^4.0.0"
|
|
47
|
+
},
|
|
42
48
|
"devDependencies": {
|
|
43
49
|
"@types/dockerode": "^3.3.0"
|
|
44
50
|
}
|