@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 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":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,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,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAWD,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA+IzD"}
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 { readLocalSettings, writeLocalSettings, resolveProvider, } from "./config.js";
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: "@brainpilot/backend-core", version: "0.1.0" }));
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", forwardRename());
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: single-user open-source mode exposes the resolved
82
- // provider as one active profile (sourced from the §11A.2 priority chain).
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 resolved = await resolveProvider({ dataDir, env });
85
- return c.json(resolved.apiKey ? [providerProfile(resolved)] : []);
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 resolved = await resolveProvider({ dataDir, env });
89
- return c.json(resolved.apiKey ? providerProfile(resolved) : null);
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 providerProfile(resolved) {
177
- const now = Date.now();
178
- const masked = resolved.apiKey
179
- ? resolved.apiKey.length <= 8
180
- ? "****"
181
- : `${resolved.apiKey.slice(0, 4)}…${resolved.apiKey.slice(-4)}`
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: "local",
185
- name: "Local",
186
- base_url: resolved.baseUrl ?? "",
187
- models: resolved.model ? [resolved.model] : [],
188
- icon: "circle",
189
- icon_color: "#111111",
190
- notes: "",
191
- is_active: true,
192
- api_key_masked: masked,
193
- created_at: now,
194
- updated_at: now,
195
- health_status: "unknown",
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":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC;AAerB,wEAAwE;AACxE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,kBAAkB;IAClB,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,cAAc,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAClF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,yEAAyE;IACzE,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,KAAK,UAAU,SAAS;QACtB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,IAAK,MAAgC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7E,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,MAAgC,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpD,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3F,uEAAuE;IACvE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1C,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7F,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5F,uEAAuE;IACvE,6EAA6E;IAC7E,kEAAkE;IAClE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IAE5C,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,kBAAkB,CAAC,OAAO,EAAE;YAChC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9D,MAAM,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACrH,OAAO,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;SAC3H,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,uEAAuE;IACvE,2EAA2E;IAC3E,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,iDAAiD;IACjD,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvB,yEAAyE;IACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9C,sEAAsE;QACtE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,GAAG,CAAC;IAEX,4CAA4C;IAE5C,SAAS,OAAO,CACd,KAAkC,EAClC,OAAiD,EAAE;QAEnD,OAAO,KAAK,EAAE,CAAyB,EAAE,EAAE;YACzC,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YAC7B,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACxC,IAAI,EAAE;gBAAE,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;gBACvC,MAAM;gBACN,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAChD,OAAO;aACR,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,SAAS,aAAa;QACpB,OAAO,KAAK,EAAE,CAAyB,EAAE,EAAE;YACzC,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,oEAAoE;YACpE,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,kBAAkB,EAAE;gBAC/E,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aACjD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,CAAyB;QACjD,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE;YACpC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SAC/F,CAAC,CAAC;QACH,gEAAgE;QAChE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACxC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,KAAK,CAAC,CAAyB,EAAE,QAAkB;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,CAAyB;IAC/C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAIxB;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;QAC5B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;YAC3B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;QAChC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9C,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,MAAM;QACtB,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,SAAS;QACxB,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC"}
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 to `bp_template/settings.json` (the user-editable
39
- * template layer). Merges with existing content.
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACtD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAOxD;AAYD,+EAA+E;AAC/E,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwB/E;AAmBD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiD3B;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}