@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
package/dist/app.d.ts
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hono app — the host-side lightweight backend (§10, §11A).
|
|
3
|
-
*
|
|
4
|
-
* Responsibilities:
|
|
5
|
-
* - REST routes the SPA needs → forwarded to the runtime via RuntimeClient
|
|
6
|
-
* (byte passthrough, 修正4: no parsing, no state).
|
|
7
|
-
* - SSE route → byte-pipes the runtime's event stream to the client.
|
|
8
|
-
* - Local config routes (settings/providers) → read/write on-disk config
|
|
9
|
-
* (NOT proxied; backend owns this, §11A.2).
|
|
10
|
-
* - Static serving of the web build (@brainpilot/web dist) with SPA fallback.
|
|
11
|
-
* - Health endpoint.
|
|
12
|
-
*
|
|
13
|
-
* The app is mounted under `/api` for the proxied/local routes (the SPA calls
|
|
14
|
-
* `API_BASE = "/api"`), with static assets served at the root.
|
|
15
|
-
*/
|
|
16
1
|
import { Hono } from "hono";
|
|
17
2
|
import type { Orchestrator } from "./orchestrator.js";
|
|
18
3
|
export interface CreateAppOptions {
|
|
@@ -23,6 +8,8 @@ export interface CreateAppOptions {
|
|
|
23
8
|
webRoot?: string;
|
|
24
9
|
/** Injectable fetch for the runtime client (tests). */
|
|
25
10
|
fetchFn?: typeof fetch;
|
|
11
|
+
/** #55: timeout (ms) for the provider connectivity probe. Default 5000. */
|
|
12
|
+
providerProbeTimeoutMs?: number;
|
|
26
13
|
/** Disable static serving (tests that only exercise the API). */
|
|
27
14
|
serveWeb?: boolean;
|
|
28
15
|
env?: Record<string, string | undefined>;
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAkBtD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,2EAA2E;IAC3E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAoBD,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAwQzD"}
|
package/dist/app.js
CHANGED
|
@@ -13,10 +13,13 @@
|
|
|
13
13
|
* The app is mounted under `/api` for the proxied/local routes (the SPA calls
|
|
14
14
|
* `API_BASE = "/api"`), with static assets served at the root.
|
|
15
15
|
*/
|
|
16
|
+
import { createRequire } from "node:module";
|
|
16
17
|
import { Hono } from "hono";
|
|
17
18
|
import { serveStatic } from "@hono/node-server/serve-static";
|
|
19
|
+
import { McpServerConfigSchema, ProviderProfileCreateSchema, ProviderProfileUpdateSchema, deriveProviderApi, } from "@brainpilot/protocol";
|
|
18
20
|
import { RuntimeClient } from "./runtime-client.js";
|
|
19
|
-
import {
|
|
21
|
+
import { probeProvider } from "./provider-probe.js";
|
|
22
|
+
import { readLocalSettings, writeLocalSettings, readProviders, createProfile, updateProfile, deleteProfile, setSelectedProfile, setProfileHealth, readMcpServers, createMcpServer, updateMcpServer, deleteMcpServer, } from "./config.js";
|
|
20
23
|
/** Headers that must not be copied verbatim onto an SSE passthrough. */
|
|
21
24
|
const HOP_BY_HOP = new Set([
|
|
22
25
|
"connection",
|
|
@@ -25,6 +28,11 @@ const HOP_BY_HOP = new Set([
|
|
|
25
28
|
"content-encoding",
|
|
26
29
|
"content-length",
|
|
27
30
|
]);
|
|
31
|
+
// #46: report the real package version instead of a hardcoded literal. Read at
|
|
32
|
+
// module load from this package's own package.json (one level above dist/) so
|
|
33
|
+
// the value always tracks the published @brainpilot/backend-core version
|
|
34
|
+
// (kept in lockstep with the root version via `npm run version:sync`).
|
|
35
|
+
const pkg = createRequire(import.meta.url)("../package.json");
|
|
28
36
|
export function createApp(options) {
|
|
29
37
|
const dataDir = options.dataDir ?? process.env.BP_DATA_DIR ?? "./brainpilot";
|
|
30
38
|
const webRoot = options.webRoot ?? process.env.BP_WEB_ROOT ?? "packages/web/dist";
|
|
@@ -44,20 +52,42 @@ export function createApp(options) {
|
|
|
44
52
|
const api = new Hono();
|
|
45
53
|
// ---- Health (backend-local; does not require runtime) ----------------
|
|
46
54
|
api.get("/health", (c) => c.json({ status: "ok" }));
|
|
47
|
-
api.get("/version", (c) => c.json({ name:
|
|
55
|
+
api.get("/version", (c) => c.json({ name: pkg.name, version: pkg.version }));
|
|
56
|
+
// ---- Identity (backend-local) ----------------------------------------
|
|
57
|
+
// Trust-front (#21): hosted deployments resolve identity at the upstream
|
|
58
|
+
// gateway, which intercepts /api/auth/me before it reaches us. For
|
|
59
|
+
// self-hosted `bp --up` there is no gateway, so we answer locally with a
|
|
60
|
+
// single default identity. Without this the SPA's auth bootstrap 404s into a
|
|
61
|
+
// hosted-login redirect loop (#38). Shape matches the web `User` contract.
|
|
62
|
+
api.get("/auth/me", (c) => c.json({ id: "local", username: "local", createdAt: new Date(0).toISOString() }));
|
|
48
63
|
// ---- Metrics (proxied to runtime; idle-reclaim source, §15.4 修正2) --
|
|
49
64
|
api.get("/metrics", forward("metrics"));
|
|
50
65
|
// ---- Sessions (proxied to runtime) -----------------------------------
|
|
51
66
|
api.get("/sessions", forward("listSessions"));
|
|
52
67
|
api.post("/sessions", forward("createSession", { withBody: true }));
|
|
53
68
|
api.get("/sessions/:id", forward("getSession", { idParam: "id" }));
|
|
54
|
-
api.put("/sessions/:id",
|
|
69
|
+
api.put("/sessions/:id", forward("updateSession", { idParam: "id", withBody: true }));
|
|
55
70
|
api.delete("/sessions/:id", forward("deleteSession", { idParam: "id" }));
|
|
56
71
|
api.get("/sessions/:id/state", forward("getSessionState", { idParam: "id" }));
|
|
72
|
+
api.get("/sessions/:id/trace", forward("getTrace", { idParam: "id" }));
|
|
73
|
+
// Persisted event tail for chat rehydrate after a restart. SSE replays only
|
|
74
|
+
// the in-memory ring; this endpoint reads events.jsonl on disk. Carries the
|
|
75
|
+
// ?limit query verbatim.
|
|
76
|
+
api.get("/sessions/:id/history", forward("getSessionHistory", { idParam: "id", withQuery: true }));
|
|
57
77
|
api.post("/sessions/:id/messages", forward("sendMessage", { idParam: "id", withBody: true }));
|
|
58
78
|
api.post("/sessions/:id/interrupt", forward("interrupt", { idParam: "id", withBody: true }));
|
|
59
79
|
api.get("/sessions/:id/agents", forward("listAgents", { idParam: "id" }));
|
|
60
80
|
api.post("/sessions/:id/evict", forward("evictSession", { idParam: "id", withBody: true }));
|
|
81
|
+
// ---- Workspace files (proxied to runtime) ----------------------------
|
|
82
|
+
// The SPA addresses files under `/sandbox/:id/*`; in single-user mode the
|
|
83
|
+
// sandbox id IS the session id, so we forward straight to the runtime's
|
|
84
|
+
// `/sessions/:id/files*` routes. `?path=` is carried through verbatim.
|
|
85
|
+
api.get("/sandbox/:id/files", forward("listFiles", { idParam: "id", withQuery: true }));
|
|
86
|
+
api.get("/sandbox/:id/files/content", forward("readFile", { idParam: "id", withQuery: true }));
|
|
87
|
+
api.get("/sandbox/:id/files/raw", forward("readRawFile", { idParam: "id", withQuery: true }));
|
|
88
|
+
api.delete("/sandbox/:id/files", forward("deleteFile", { idParam: "id", withQuery: true }));
|
|
89
|
+
// #47: file upload — POST the base64 body through to the runtime writeFile route.
|
|
90
|
+
api.post("/sandbox/:id/files", forward("writeFile", { idParam: "id", withBody: true }));
|
|
61
91
|
// ---- SSE byte passthrough (修正4) ------------------------------------
|
|
62
92
|
// Canonical protocol path `/sse/:id` (RUNTIME_ROUTES.sessionEvents) plus the
|
|
63
93
|
// SPA's `/sessions/:id/sse` and the `/sessions/:id/events` alias.
|
|
@@ -78,18 +108,133 @@ export function createApp(options) {
|
|
|
78
108
|
});
|
|
79
109
|
return c.json(await readLocalSettings({ dataDir, env }));
|
|
80
110
|
});
|
|
81
|
-
// Provider profiles
|
|
82
|
-
//
|
|
111
|
+
// Provider profiles (SSOT = providers.json). Full CRUD; the active/selected
|
|
112
|
+
// profile is what new sessions default to. Keys are masked on the way out.
|
|
83
113
|
api.get("/provider/profiles", async (c) => {
|
|
84
|
-
const
|
|
85
|
-
return c.json(
|
|
114
|
+
const { profiles, selectedProfileId } = await readProviders(dataDir);
|
|
115
|
+
return c.json(profiles.map((p) => toHttpProfile(p, selectedProfileId)));
|
|
86
116
|
});
|
|
87
117
|
api.get("/provider/profiles/active", async (c) => {
|
|
88
|
-
const
|
|
89
|
-
|
|
118
|
+
const { profiles, selectedProfileId } = await readProviders(dataDir);
|
|
119
|
+
const active = profiles.find((p) => p.id === selectedProfileId) ?? profiles[0];
|
|
120
|
+
return active ? c.json(toHttpProfile(active, selectedProfileId)) : c.body(null, 204);
|
|
121
|
+
});
|
|
122
|
+
api.post("/provider/profiles", async (c) => {
|
|
123
|
+
// #50: validate the create body before persisting — empty name and
|
|
124
|
+
// malformed `models` (e.g. the string "m") must 400, not silently create an
|
|
125
|
+
// unusable profile that becomes the active selection.
|
|
126
|
+
const parsed = ProviderProfileCreateSchema.safeParse(await safeJson(c));
|
|
127
|
+
if (!parsed.success) {
|
|
128
|
+
return c.json({ error: "invalid provider profile", details: parsed.error.issues }, 400);
|
|
129
|
+
}
|
|
130
|
+
const created = await createProfile(dataDir, fromHttpBody(parsed.data));
|
|
131
|
+
const { selectedProfileId } = await readProviders(dataDir);
|
|
132
|
+
return c.json(toHttpProfile(created, selectedProfileId), 201);
|
|
133
|
+
});
|
|
134
|
+
api.put("/provider/profiles/active", async (c) => {
|
|
135
|
+
const body = await safeJson(c);
|
|
136
|
+
const id = typeof body.id === "string" ? body.id : "";
|
|
137
|
+
const ok = await setSelectedProfile(dataDir, id);
|
|
138
|
+
if (!ok)
|
|
139
|
+
return c.json({ error: "not found" }, 404);
|
|
140
|
+
return c.json(await activeHttpProfile(dataDir));
|
|
141
|
+
});
|
|
142
|
+
api.post("/provider/profiles/active", async (c) => {
|
|
143
|
+
const body = await safeJson(c);
|
|
144
|
+
const id = typeof body.id === "string" ? body.id : "";
|
|
145
|
+
const ok = await setSelectedProfile(dataDir, id);
|
|
146
|
+
if (!ok)
|
|
147
|
+
return c.json({ error: "not found" }, 404);
|
|
148
|
+
return c.json(await activeHttpProfile(dataDir));
|
|
149
|
+
});
|
|
150
|
+
api.get("/provider/profiles/health", async (c) => {
|
|
151
|
+
const { profiles, selectedProfileId } = await readProviders(dataDir);
|
|
152
|
+
return c.json(profiles.map((p) => toHttpProfile(p, selectedProfileId)));
|
|
153
|
+
});
|
|
154
|
+
api.put("/provider/profiles/:id", async (c) => {
|
|
155
|
+
// #50: same validation on update (partial patch — fields optional, but a
|
|
156
|
+
// present `name` must be non-empty and `models` a valid string array).
|
|
157
|
+
const parsed = ProviderProfileUpdateSchema.safeParse(await safeJson(c));
|
|
158
|
+
if (!parsed.success) {
|
|
159
|
+
return c.json({ error: "invalid provider profile", details: parsed.error.issues }, 400);
|
|
160
|
+
}
|
|
161
|
+
const updated = await updateProfile(dataDir, c.req.param("id"), fromHttpBody(parsed.data));
|
|
162
|
+
if (!updated)
|
|
163
|
+
return c.json({ error: "not found" }, 404);
|
|
164
|
+
const { selectedProfileId } = await readProviders(dataDir);
|
|
165
|
+
return c.json(toHttpProfile(updated, selectedProfileId));
|
|
166
|
+
});
|
|
167
|
+
api.delete("/provider/profiles/:id", async (c) => {
|
|
168
|
+
const ok = await deleteProfile(dataDir, c.req.param("id"));
|
|
169
|
+
return c.json({ deleted: ok }, ok ? 200 : 404);
|
|
170
|
+
});
|
|
171
|
+
api.post("/provider/profiles/:id/test", async (c) => {
|
|
172
|
+
// #55: actually probe the provider gateway instead of echoing "unknown".
|
|
173
|
+
// A real connectivity/auth check so the UI can report healthy / unavailable
|
|
174
|
+
// / error rather than telling the user an unreachable gateway was "tested".
|
|
175
|
+
const { profiles, selectedProfileId } = await readProviders(dataDir);
|
|
176
|
+
const p = profiles.find((x) => x.id === c.req.param("id"));
|
|
177
|
+
if (!p)
|
|
178
|
+
return c.json({ error: "not found" }, 404);
|
|
179
|
+
const result = await probeProvider({ baseUrl: p.baseUrl, apiKey: p.apiKey }, { fetchFn: options.fetchFn, timeoutMs: options.providerProbeTimeoutMs });
|
|
180
|
+
// #69: persist the probe outcome so a later GET /provider/profiles (card
|
|
181
|
+
// refresh / reopen) keeps the same health instead of reverting to
|
|
182
|
+
// "unknown". model_health stays empty this round (per-model probing is
|
|
183
|
+
// future work). ProbeStatus "error" maps to the HealthStatus "unavailable".
|
|
184
|
+
const healthStatus = result.status === "error" ? "unavailable" : result.status;
|
|
185
|
+
const saved = await setProfileHealth(dataDir, p.id, {
|
|
186
|
+
healthStatus,
|
|
187
|
+
healthCheckedAt: Date.now(),
|
|
188
|
+
healthMessage: result.message ?? "",
|
|
189
|
+
healthLatencyMs: result.latencyMs ?? null,
|
|
190
|
+
});
|
|
191
|
+
return c.json(toHttpProfile(saved ?? p, selectedProfileId));
|
|
192
|
+
});
|
|
193
|
+
// ---- MCP Servers CRUD (disk-backed: bp_template/mcp_servers.json) ----
|
|
194
|
+
api.get("/mcp-servers", async (c) => {
|
|
195
|
+
return c.json(await readMcpServers(dataDir));
|
|
196
|
+
});
|
|
197
|
+
api.post("/mcp-servers", async (c) => {
|
|
198
|
+
const body = await safeJson(c);
|
|
199
|
+
const name = typeof body.name === "string" ? body.name.trim() : "";
|
|
200
|
+
const config = body.config && typeof body.config === "object" ? body.config : null;
|
|
201
|
+
if (!name || !config)
|
|
202
|
+
return c.json({ error: "name and config are required" }, 400);
|
|
203
|
+
// #49: validate the transport config before persisting — invalid type /
|
|
204
|
+
// missing url (http/sse) / missing command (stdio) must 400 and leave the
|
|
205
|
+
// on-disk file untouched, not 201 + write an unusable entry.
|
|
206
|
+
const parsed = McpServerConfigSchema.safeParse(config);
|
|
207
|
+
if (!parsed.success) {
|
|
208
|
+
return c.json({ error: "invalid mcp server config", details: parsed.error.issues }, 400);
|
|
209
|
+
}
|
|
210
|
+
return c.json(await createMcpServer(dataDir, name, parsed.data), 201);
|
|
211
|
+
});
|
|
212
|
+
api.put("/mcp-servers/:name", async (c) => {
|
|
213
|
+
const config = await safeJson(c);
|
|
214
|
+
// #49: same validation on update — a PUT must not be able to write an
|
|
215
|
+
// invalid transport config either.
|
|
216
|
+
const parsed = McpServerConfigSchema.safeParse(config);
|
|
217
|
+
if (!parsed.success) {
|
|
218
|
+
return c.json({ error: "invalid mcp server config", details: parsed.error.issues }, 400);
|
|
219
|
+
}
|
|
220
|
+
const entry = await updateMcpServer(dataDir, c.req.param("name"), parsed.data);
|
|
221
|
+
if (!entry)
|
|
222
|
+
return c.json({ error: "not found" }, 404);
|
|
223
|
+
return c.json(entry);
|
|
224
|
+
});
|
|
225
|
+
api.delete("/mcp-servers/:name", async (c) => {
|
|
226
|
+
const ok = await deleteMcpServer(dataDir, c.req.param("name"));
|
|
227
|
+
if (!ok)
|
|
228
|
+
return c.json({ error: "not found" }, 404);
|
|
229
|
+
return c.body(null, 204);
|
|
90
230
|
});
|
|
91
231
|
// Mount the API under /api (the SPA's API_BASE).
|
|
92
232
|
app.route("/api", api);
|
|
233
|
+
// #30: any unmatched /api/* (any method) returns a JSON 404 — never the SPA
|
|
234
|
+
// index.html. Sits between the API routes and the static fallback, and is
|
|
235
|
+
// unconditional (independent of serveWeb) so an unimplemented route can't fall
|
|
236
|
+
// through to text/html (which the frontend's handleJson chokes on).
|
|
237
|
+
app.all("/api/*", (c) => c.json({ error: "not found" }, 404));
|
|
93
238
|
// ---- Static web serving with SPA fallback ----------------------------
|
|
94
239
|
if (options.serveWeb !== false) {
|
|
95
240
|
app.use("/*", serveStatic({ root: webRoot }));
|
|
@@ -109,29 +254,12 @@ export function createApp(options) {
|
|
|
109
254
|
const ct = c.req.header("content-type");
|
|
110
255
|
if (ct)
|
|
111
256
|
headers["content-type"] = ct;
|
|
257
|
+
const query = opts.withQuery ? new URL(c.req.url).search.replace(/^\?/, "") : undefined;
|
|
112
258
|
const upstream = await rc.forward(route, {
|
|
113
259
|
params,
|
|
114
260
|
body: body && body.length > 0 ? body : undefined,
|
|
115
261
|
headers,
|
|
116
|
-
|
|
117
|
-
return relay(c, upstream);
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
// The SPA's PUT /sessions/:id (rename) has no dedicated runtime route in
|
|
121
|
-
// §15.4; forward it to the runtime's getSession path with PUT semantics via
|
|
122
|
-
// a raw forward so the runtime can handle/ignore it. We reuse sendMessage's
|
|
123
|
-
// session path shape but keep method PUT by hitting getSession's path.
|
|
124
|
-
function forwardRename() {
|
|
125
|
-
return async (c) => {
|
|
126
|
-
const rc = await getClient();
|
|
127
|
-
const id = c.req.param("id") ?? "";
|
|
128
|
-
const body = await c.req.text();
|
|
129
|
-
// getSession route path is `/sessions/:id`; issue a PUT against it.
|
|
130
|
-
const url = rc.urlFor("getSession", { id });
|
|
131
|
-
const upstream = await (options.fetchFn ?? fetch)(url, {
|
|
132
|
-
method: "PUT",
|
|
133
|
-
headers: { "content-type": c.req.header("content-type") ?? "application/json" },
|
|
134
|
-
body: body && body.length > 0 ? body : undefined,
|
|
262
|
+
query: query && query.length > 0 ? query : undefined,
|
|
135
263
|
});
|
|
136
264
|
return relay(c, upstream);
|
|
137
265
|
};
|
|
@@ -173,27 +301,63 @@ async function safeJson(c) {
|
|
|
173
301
|
return {};
|
|
174
302
|
}
|
|
175
303
|
}
|
|
176
|
-
function
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
304
|
+
function maskKey(key) {
|
|
305
|
+
if (!key)
|
|
306
|
+
return "";
|
|
307
|
+
return key.length <= 8 ? "****" : `${key.slice(0, 4)}…${key.slice(-4)}`;
|
|
308
|
+
}
|
|
309
|
+
/** Stored profile → masked HTTP shape the SPA's normalizeProviderProfile reads. */
|
|
310
|
+
function toHttpProfile(p, selectedId) {
|
|
183
311
|
return {
|
|
184
|
-
id:
|
|
185
|
-
name:
|
|
186
|
-
base_url:
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
312
|
+
id: p.id,
|
|
313
|
+
name: p.name,
|
|
314
|
+
base_url: p.baseUrl,
|
|
315
|
+
// #75: echo the effective api — explicit, else derived from adapter, else
|
|
316
|
+
// the default — so the response never shows a value that contradicts the
|
|
317
|
+
// adapter (e.g. adapter:"openai" + api:"anthropic-messages").
|
|
318
|
+
api: p.api ?? deriveProviderApi(p.adapter) ?? "anthropic-messages",
|
|
319
|
+
// #68 (R-10): coarse adapter family + sharing flag. Single-user open-source
|
|
320
|
+
// is never shared, so is_shared is always false here.
|
|
321
|
+
adapter: p.adapter ?? "auto",
|
|
322
|
+
is_shared: false,
|
|
323
|
+
models: p.models,
|
|
324
|
+
icon: p.icon ?? "circle",
|
|
325
|
+
icon_color: p.iconColor ?? "#111111",
|
|
326
|
+
notes: p.notes ?? "",
|
|
327
|
+
is_active: p.id === selectedId,
|
|
328
|
+
// #65: an env-bootstrapped profile stores no key — show its env source
|
|
329
|
+
// instead of an empty mask so the UI doesn't look misconfigured.
|
|
330
|
+
api_key_masked: p.apiKeyEnv ? `env:$${p.apiKeyEnv}` : maskKey(p.apiKey),
|
|
331
|
+
api_key_env: p.apiKeyEnv,
|
|
332
|
+
created_at: p.createdAt,
|
|
333
|
+
updated_at: p.updatedAt,
|
|
334
|
+
// #69: surface the persisted probe result instead of a hardcoded
|
|
335
|
+
// "unknown", so the Settings card reflects the last test across reloads.
|
|
336
|
+
health_status: p.healthStatus ?? "unknown",
|
|
337
|
+
health_checked_at: p.healthCheckedAt,
|
|
338
|
+
health_message: p.healthMessage ?? "",
|
|
339
|
+
health_latency_ms: p.healthLatencyMs ?? null,
|
|
196
340
|
model_health: [],
|
|
197
341
|
};
|
|
198
342
|
}
|
|
343
|
+
/** SPA create/update body (snake_case) → stored-profile patch. */
|
|
344
|
+
function fromHttpBody(body) {
|
|
345
|
+
const str = (v) => (typeof v === "string" ? v : undefined);
|
|
346
|
+
return {
|
|
347
|
+
name: str(body.name),
|
|
348
|
+
baseUrl: str(body.base_url) ?? str(body.baseUrl),
|
|
349
|
+
api: str(body.api),
|
|
350
|
+
adapter: str(body.adapter),
|
|
351
|
+
apiKey: str(body.api_key) ?? str(body.apiKey),
|
|
352
|
+
models: Array.isArray(body.models) ? body.models : undefined,
|
|
353
|
+
icon: str(body.icon),
|
|
354
|
+
iconColor: str(body.icon_color) ?? str(body.iconColor),
|
|
355
|
+
notes: str(body.notes),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
async function activeHttpProfile(dataDir) {
|
|
359
|
+
const { profiles, selectedProfileId } = await readProviders(dataDir);
|
|
360
|
+
const active = profiles.find((p) => p.id === selectedProfileId) ?? profiles[0];
|
|
361
|
+
return active ? toHttpProfile(active, selectedProfileId) : null;
|
|
362
|
+
}
|
|
199
363
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderApi, ProviderAdapter, HealthStatus } from "@brainpilot/protocol";
|
|
1
2
|
export interface ResolvedProvider {
|
|
2
3
|
/** API key, if any layer supplied one. */
|
|
3
4
|
apiKey?: string;
|
|
@@ -13,6 +14,8 @@ export interface ConfigPaths {
|
|
|
13
14
|
bpTemplateSettings: string;
|
|
14
15
|
brainpilotConfig: string;
|
|
15
16
|
dotenv: string;
|
|
17
|
+
/** Multi-provider registry (the SSOT for provider config, §11A.2 rewrite). */
|
|
18
|
+
providers: string;
|
|
16
19
|
}
|
|
17
20
|
export declare function configPaths(dataDir: string): ConfigPaths;
|
|
18
21
|
/** Minimal .env parser (KEY=VALUE per line, `#` comments, optional quotes). */
|
|
@@ -21,6 +24,63 @@ export interface ResolveProviderOptions {
|
|
|
21
24
|
dataDir: string;
|
|
22
25
|
env?: Record<string, string | undefined>;
|
|
23
26
|
}
|
|
27
|
+
/** A stored provider profile (internal — holds the plaintext key). */
|
|
28
|
+
export interface StoredProviderProfile {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
baseUrl: string;
|
|
32
|
+
/** #63: wire protocol. Optional for back-compat with pre-#63 profiles
|
|
33
|
+
* (read as anthropic-messages). createProfile defaults it. */
|
|
34
|
+
api?: ProviderApi;
|
|
35
|
+
/** #68 (R-10): coarse adapter family declared by the UI (auto/openai/
|
|
36
|
+
* anthropic). When set without an explicit `api`, the runtime derives the
|
|
37
|
+
* precise wire value. Optional; absent → treated as "auto". */
|
|
38
|
+
adapter?: ProviderAdapter;
|
|
39
|
+
apiKey: string;
|
|
40
|
+
/** #65: name of an env var the key is read from at request time, instead of
|
|
41
|
+
* persisting the plaintext secret. Set by the env bootstrap so a self-hosted
|
|
42
|
+
* user who supplies ANTHROPIC_API_KEY via the environment never has it copied
|
|
43
|
+
* into providers.json. When set, apiKey is left empty on disk and the runtime
|
|
44
|
+
* falls back to its env gateway path (which reads the same env var). */
|
|
45
|
+
apiKeyEnv?: string;
|
|
46
|
+
models: string[];
|
|
47
|
+
icon?: string;
|
|
48
|
+
iconColor?: string;
|
|
49
|
+
notes?: string;
|
|
50
|
+
/** #69: last connectivity-probe result, persisted so the Settings card
|
|
51
|
+
* reflects the test outcome across reads/reopens instead of "unknown".
|
|
52
|
+
* Written by POST /provider/profiles/:id/test. */
|
|
53
|
+
healthStatus?: HealthStatus;
|
|
54
|
+
healthCheckedAt?: number;
|
|
55
|
+
healthMessage?: string;
|
|
56
|
+
healthLatencyMs?: number | null;
|
|
57
|
+
createdAt: number;
|
|
58
|
+
updatedAt: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ProvidersFile {
|
|
61
|
+
profiles: StoredProviderProfile[];
|
|
62
|
+
/** Id of the profile new sessions default to. */
|
|
63
|
+
selectedProfileId?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function readProviders(dataDir: string): Promise<ProvidersFile>;
|
|
66
|
+
/** The profile a session should use given an optional explicit id. */
|
|
67
|
+
export declare function selectedProfile(dataDir: string, preferId?: string): Promise<StoredProviderProfile | undefined>;
|
|
68
|
+
export declare function createProfile(dataDir: string, input: Partial<StoredProviderProfile>): Promise<StoredProviderProfile>;
|
|
69
|
+
export declare function updateProfile(dataDir: string, id: string, patch: Partial<StoredProviderProfile>): Promise<StoredProviderProfile | undefined>;
|
|
70
|
+
/**
|
|
71
|
+
* #69: persist the latest connectivity-probe result on a profile. Kept
|
|
72
|
+
* separate from updateProfile (which is for user-edited fields and bumps
|
|
73
|
+
* updatedAt) — a health write must not look like a profile edit. Returns the
|
|
74
|
+
* updated profile, or undefined if the id is unknown.
|
|
75
|
+
*/
|
|
76
|
+
export declare function setProfileHealth(dataDir: string, id: string, health: {
|
|
77
|
+
healthStatus: HealthStatus;
|
|
78
|
+
healthCheckedAt: number;
|
|
79
|
+
healthMessage?: string;
|
|
80
|
+
healthLatencyMs?: number | null;
|
|
81
|
+
}): Promise<StoredProviderProfile | undefined>;
|
|
82
|
+
export declare function deleteProfile(dataDir: string, id: string): Promise<boolean>;
|
|
83
|
+
export declare function setSelectedProfile(dataDir: string, id: string): Promise<boolean>;
|
|
24
84
|
/**
|
|
25
85
|
* Resolve the effective provider config by walking the priority chain. The
|
|
26
86
|
* apiKey's `source` reflects the FIRST layer that supplied it; baseUrl/model
|
|
@@ -35,12 +95,73 @@ export interface LocalSettings {
|
|
|
35
95
|
}
|
|
36
96
|
export declare function readLocalSettings(options: ResolveProviderOptions): Promise<LocalSettings>;
|
|
37
97
|
/**
|
|
38
|
-
* Persist a settings patch
|
|
39
|
-
*
|
|
98
|
+
* Persist a simple settings patch into the providers registry (the SSOT). With
|
|
99
|
+
* no profiles yet it creates a default "Local" profile; otherwise it updates the
|
|
100
|
+
* selected profile in place. This keeps the legacy single-field `/api/settings`
|
|
101
|
+
* PUT and `brainpilot init` flowing into providers.json rather than the
|
|
102
|
+
* deprecated settings.json.
|
|
40
103
|
*/
|
|
41
104
|
export declare function writeLocalSettings(dataDir: string, patch: Partial<{
|
|
42
105
|
model: string;
|
|
43
106
|
apiKey: string;
|
|
44
107
|
baseUrl: string;
|
|
45
108
|
}>): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* #51: project env-only provider config into a real, selected provider profile
|
|
111
|
+
* on first launch, so a user who supplies ANTHROPIC_API_KEY (etc.) via the
|
|
112
|
+
* environment — the README's documented quick-start path — sees an active
|
|
113
|
+
* provider in Settings → Providers and an enabled model selector, instead of an
|
|
114
|
+
* empty providers.json and a disabled UI.
|
|
115
|
+
*
|
|
116
|
+
* Bootstrap semantics (intentionally a one-time seed, matching `init --api-key`):
|
|
117
|
+
* - only runs when providers.json has NO profiles yet;
|
|
118
|
+
* - only when the env actually supplies an API key;
|
|
119
|
+
* - writes a selected "Environment" profile from the resolved env key / base
|
|
120
|
+
* URL / model.
|
|
121
|
+
* After this, providers.json is the SSOT — anything the user later edits in
|
|
122
|
+
* Settings wins and is never re-overwritten from the env.
|
|
123
|
+
*
|
|
124
|
+
* Returns the created profile, or null if nothing was bootstrapped.
|
|
125
|
+
*/
|
|
126
|
+
export declare function bootstrapEnvProvider(dataDir: string, env?: Record<string, string | undefined>): Promise<StoredProviderProfile | null>;
|
|
127
|
+
/**
|
|
128
|
+
* Onboarding-facing view of the resolved provider config. A boolean-only key
|
|
129
|
+
* presence (never the plaintext key) plus the two files a user would edit, so
|
|
130
|
+
* `init`/`up` can print accurate, consistent guidance from one source.
|
|
131
|
+
*/
|
|
132
|
+
export interface ProviderConfigReport {
|
|
133
|
+
hasKey: boolean;
|
|
134
|
+
source?: ResolvedProvider["source"];
|
|
135
|
+
baseUrl?: string;
|
|
136
|
+
model?: string;
|
|
137
|
+
/** Absolute path of bp_template/providers.json (the provider registry SSOT). */
|
|
138
|
+
settingsPath: string;
|
|
139
|
+
/** Absolute path of the data dir's .env. */
|
|
140
|
+
dotenvPath: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve the provider config and reduce it to an onboarding report. Reuses the
|
|
144
|
+
* full priority chain via {@link resolveProvider}; folds apiKey to a boolean so
|
|
145
|
+
* the key never leaves this module in plaintext.
|
|
146
|
+
*/
|
|
147
|
+
export declare function describeProviderConfig(options: ResolveProviderOptions): Promise<ProviderConfigReport>;
|
|
148
|
+
/**
|
|
149
|
+
* Turn a {@link ProviderConfigReport} into human guidance lines (uncolored;
|
|
150
|
+
* callers pick the styling). Shared by `init` and `up` so the onboarding text
|
|
151
|
+
* never drifts between them.
|
|
152
|
+
*/
|
|
153
|
+
export declare function formatProviderGuidance(report: ProviderConfigReport): string[];
|
|
154
|
+
export declare function mcpServersPath(dataDir: string): string;
|
|
155
|
+
type McpSpec = Record<string, unknown>;
|
|
156
|
+
export declare function readMcpServers(dataDir: string): Promise<Array<{
|
|
157
|
+
name: string;
|
|
158
|
+
} & McpSpec>>;
|
|
159
|
+
export declare function createMcpServer(dataDir: string, name: string, spec: McpSpec): Promise<{
|
|
160
|
+
name: string;
|
|
161
|
+
} & McpSpec>;
|
|
162
|
+
export declare function updateMcpServer(dataDir: string, name: string, spec: McpSpec): Promise<({
|
|
163
|
+
name: string;
|
|
164
|
+
} & McpSpec) | null>;
|
|
165
|
+
export declare function deleteMcpServer(dataDir: string, name: string): Promise<boolean>;
|
|
166
|
+
export {};
|
|
46
167
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|