@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.
@@ -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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"}
@@ -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;AAE5D,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,CAyCxB"}
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 (best-effort; CLI/PM2 may also manage this).
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
  };
@@ -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;AAsB9D,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IAC9D,kFAAkF;IAClF,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW,CAAC;IACxE,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,kBAAkB,CAAC;YACjB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC,CAAC;IAEL,MAAM,GAAG,GAAG,SAAS,CAAC;QACpB,YAAY;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC,CAAC;IAEF,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,gDAAgD;AAChD,MAAM,MAAM,GACV,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;IACnC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,IAAI,MAAM,EAAE,CAAC;IACX,WAAW,EAAE,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE;QACJ,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;QACN,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,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.4",
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.4",
38
- "@brainpilot/runtime": "^0.0.4",
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
  }