@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/config.js CHANGED
@@ -11,12 +11,14 @@
11
11
  */
12
12
  import { promises as fs } from "node:fs";
13
13
  import path from "node:path";
14
+ import { deriveProviderApi } from "@brainpilot/protocol";
14
15
  export function configPaths(dataDir) {
15
16
  return {
16
17
  dataDir,
17
18
  bpTemplateSettings: path.join(dataDir, "bp_template", "settings.json"),
18
19
  brainpilotConfig: path.join(dataDir, "brainpilot.config.json"),
19
20
  dotenv: path.join(dataDir, ".env"),
21
+ providers: path.join(dataDir, "bp_template", "providers.json"),
20
22
  };
21
23
  }
22
24
  async function readJsonSafe(file) {
@@ -76,6 +78,119 @@ function pickString(obj, ...keys) {
76
78
  }
77
79
  return undefined;
78
80
  }
81
+ export async function readProviders(dataDir) {
82
+ const raw = (await readJsonSafe(configPaths(dataDir).providers));
83
+ const profiles = Array.isArray(raw?.profiles) ? raw.profiles : [];
84
+ const selectedProfileId = typeof raw?.selectedProfileId === "string" ? raw.selectedProfileId : profiles[0]?.id;
85
+ return { profiles, selectedProfileId };
86
+ }
87
+ async function writeProviders(dataDir, file) {
88
+ const target = configPaths(dataDir).providers;
89
+ await fs.mkdir(path.dirname(target), { recursive: true });
90
+ const tmp = `${target}.tmp`;
91
+ await fs.writeFile(tmp, JSON.stringify(file, null, 2), { encoding: "utf8", mode: 0o600 });
92
+ await fs.rename(tmp, target); // atomic
93
+ }
94
+ /** The profile a session should use given an optional explicit id. */
95
+ export async function selectedProfile(dataDir, preferId) {
96
+ const { profiles, selectedProfileId } = await readProviders(dataDir);
97
+ return (profiles.find((p) => p.id === preferId) ??
98
+ profiles.find((p) => p.id === selectedProfileId) ??
99
+ profiles[0]);
100
+ }
101
+ let _counter = 0;
102
+ function newId() {
103
+ // No crypto.randomUUID dependency need; ids are local-only and short-lived.
104
+ _counter += 1;
105
+ return `p${Date.now().toString(36)}${_counter.toString(36)}`;
106
+ }
107
+ export async function createProfile(dataDir, input) {
108
+ const file = await readProviders(dataDir);
109
+ const now = Date.now();
110
+ const profile = {
111
+ id: input.id ?? newId(),
112
+ name: input.name ?? "Provider",
113
+ baseUrl: input.baseUrl ?? "",
114
+ // #75: do not unconditionally default api to anthropic-messages — that
115
+ // short-circuited the runtime's adapter fallback (an `adapter:"openai"`
116
+ // profile got `api:"anthropic-messages"`, a contradictory state). Precedence:
117
+ // explicit api → derived from adapter → default. Persist only an explicit or
118
+ // adapter-derived api; leave it unset otherwise so the runtime resolves it.
119
+ api: input.api ?? deriveProviderApi(input.adapter),
120
+ adapter: input.adapter,
121
+ apiKey: input.apiKey ?? "",
122
+ apiKeyEnv: input.apiKeyEnv,
123
+ models: input.models ?? [],
124
+ icon: input.icon,
125
+ iconColor: input.iconColor,
126
+ notes: input.notes,
127
+ createdAt: now,
128
+ updatedAt: now,
129
+ };
130
+ file.profiles.push(profile);
131
+ if (!file.selectedProfileId)
132
+ file.selectedProfileId = profile.id;
133
+ await writeProviders(dataDir, file);
134
+ return profile;
135
+ }
136
+ export async function updateProfile(dataDir, id, patch) {
137
+ const file = await readProviders(dataDir);
138
+ const profile = file.profiles.find((p) => p.id === id);
139
+ if (!profile)
140
+ return undefined;
141
+ // apiKey omitted in patch → keep existing (UI sends masked key, not the real one).
142
+ const writable = profile;
143
+ for (const k of ["name", "baseUrl", "api", "adapter", "models", "icon", "iconColor", "notes"]) {
144
+ if (patch[k] !== undefined)
145
+ writable[k] = patch[k];
146
+ }
147
+ if (typeof patch.apiKey === "string" && patch.apiKey.length > 0) {
148
+ profile.apiKey = patch.apiKey;
149
+ // #65: the user is now intentionally persisting a key in Settings — drop the
150
+ // env reference so the stored key (not the env var) is the source of truth.
151
+ delete profile.apiKeyEnv;
152
+ }
153
+ profile.updatedAt = Date.now();
154
+ await writeProviders(dataDir, file);
155
+ return profile;
156
+ }
157
+ /**
158
+ * #69: persist the latest connectivity-probe result on a profile. Kept
159
+ * separate from updateProfile (which is for user-edited fields and bumps
160
+ * updatedAt) — a health write must not look like a profile edit. Returns the
161
+ * updated profile, or undefined if the id is unknown.
162
+ */
163
+ export async function setProfileHealth(dataDir, id, health) {
164
+ const file = await readProviders(dataDir);
165
+ const profile = file.profiles.find((p) => p.id === id);
166
+ if (!profile)
167
+ return undefined;
168
+ profile.healthStatus = health.healthStatus;
169
+ profile.healthCheckedAt = health.healthCheckedAt;
170
+ profile.healthMessage = health.healthMessage ?? "";
171
+ profile.healthLatencyMs = health.healthLatencyMs ?? null;
172
+ await writeProviders(dataDir, file);
173
+ return profile;
174
+ }
175
+ export async function deleteProfile(dataDir, id) {
176
+ const file = await readProviders(dataDir);
177
+ const before = file.profiles.length;
178
+ file.profiles = file.profiles.filter((p) => p.id !== id);
179
+ if (file.profiles.length === before)
180
+ return false;
181
+ if (file.selectedProfileId === id)
182
+ file.selectedProfileId = file.profiles[0]?.id;
183
+ await writeProviders(dataDir, file);
184
+ return true;
185
+ }
186
+ export async function setSelectedProfile(dataDir, id) {
187
+ const file = await readProviders(dataDir);
188
+ if (!file.profiles.some((p) => p.id === id))
189
+ return false;
190
+ file.selectedProfileId = id;
191
+ await writeProviders(dataDir, file);
192
+ return true;
193
+ }
79
194
  /**
80
195
  * Resolve the effective provider config by walking the priority chain. The
81
196
  * apiKey's `source` reflects the FIRST layer that supplied it; baseUrl/model
@@ -84,6 +199,18 @@ function pickString(obj, ...keys) {
84
199
  export async function resolveProvider(options) {
85
200
  const env = options.env ?? process.env;
86
201
  const paths = configPaths(options.dataDir);
202
+ // Highest authority: the selected profile in providers.json (SSOT). When set,
203
+ // it wins outright; the legacy env/dotenv chain below is the fallback for
204
+ // deployments that haven't migrated (e.g. Docker injecting ANTHROPIC_API_KEY).
205
+ const profile = await selectedProfile(options.dataDir);
206
+ if (profile?.apiKey) {
207
+ return {
208
+ apiKey: profile.apiKey,
209
+ baseUrl: profile.baseUrl || undefined,
210
+ model: profile.models[0],
211
+ source: "bp_template",
212
+ };
213
+ }
87
214
  const templateSettings = await readJsonSafe(paths.bpTemplateSettings);
88
215
  const config = await readJsonSafe(paths.brainpilotConfig);
89
216
  const dotenv = await parseDotenv(paths.dotenv);
@@ -120,7 +247,9 @@ export async function resolveProvider(options) {
120
247
  const model = pickString(templateSettings, "model") ||
121
248
  pickString(config, "model") ||
122
249
  env.BP_MODEL ||
250
+ env.ANTHROPIC_MODEL ||
123
251
  dotenv.BP_MODEL ||
252
+ dotenv.ANTHROPIC_MODEL ||
124
253
  undefined;
125
254
  return { apiKey, baseUrl, model, source };
126
255
  }
@@ -140,22 +269,171 @@ export async function readLocalSettings(options) {
140
269
  };
141
270
  }
142
271
  /**
143
- * Persist a settings patch to `bp_template/settings.json` (the user-editable
144
- * template layer). Merges with existing content.
272
+ * Persist a simple settings patch into the providers registry (the SSOT). With
273
+ * no profiles yet it creates a default "Local" profile; otherwise it updates the
274
+ * selected profile in place. This keeps the legacy single-field `/api/settings`
275
+ * PUT and `brainpilot init` flowing into providers.json rather than the
276
+ * deprecated settings.json.
145
277
  */
146
278
  export async function writeLocalSettings(dataDir, patch) {
147
- const file = configPaths(dataDir).bpTemplateSettings;
148
- await fs.mkdir(path.dirname(file), { recursive: true });
149
- const existing = (await readJsonSafe(file)) ?? {};
150
- const next = { ...existing };
151
- if (patch.model !== undefined)
152
- next.model = patch.model;
153
- if (patch.apiKey !== undefined)
154
- next.apiKey = patch.apiKey;
155
- if (patch.baseUrl !== undefined)
156
- next.baseUrl = patch.baseUrl;
157
- const tmp = `${file}.tmp`;
158
- await fs.writeFile(tmp, JSON.stringify(next, null, 2), "utf8");
159
- await fs.rename(tmp, file); // atomic write (§16.4 fix)
279
+ const current = await selectedProfile(dataDir);
280
+ const models = patch.model ? [patch.model] : undefined;
281
+ if (!current) {
282
+ await createProfile(dataDir, {
283
+ name: "Local",
284
+ baseUrl: patch.baseUrl ?? "",
285
+ apiKey: patch.apiKey ?? "",
286
+ models: models ?? [],
287
+ });
288
+ return;
289
+ }
290
+ await updateProfile(dataDir, current.id, {
291
+ ...(patch.baseUrl !== undefined ? { baseUrl: patch.baseUrl } : {}),
292
+ ...(patch.apiKey !== undefined ? { apiKey: patch.apiKey } : {}),
293
+ // merge the model into the profile's model list (front of list = default)
294
+ ...(models ? { models: Array.from(new Set([...models, ...current.models])) } : {}),
295
+ });
296
+ }
297
+ /**
298
+ * #51: project env-only provider config into a real, selected provider profile
299
+ * on first launch, so a user who supplies ANTHROPIC_API_KEY (etc.) via the
300
+ * environment — the README's documented quick-start path — sees an active
301
+ * provider in Settings → Providers and an enabled model selector, instead of an
302
+ * empty providers.json and a disabled UI.
303
+ *
304
+ * Bootstrap semantics (intentionally a one-time seed, matching `init --api-key`):
305
+ * - only runs when providers.json has NO profiles yet;
306
+ * - only when the env actually supplies an API key;
307
+ * - writes a selected "Environment" profile from the resolved env key / base
308
+ * URL / model.
309
+ * After this, providers.json is the SSOT — anything the user later edits in
310
+ * Settings wins and is never re-overwritten from the env.
311
+ *
312
+ * Returns the created profile, or null if nothing was bootstrapped.
313
+ */
314
+ export async function bootstrapEnvProvider(dataDir, env = process.env) {
315
+ const { profiles } = await readProviders(dataDir);
316
+ if (profiles.length > 0)
317
+ return null; // already configured — never clobber
318
+ // Reuse the full resolution chain, then only act on env/dotenv-sourced keys
319
+ // (a template/config key would already imply a profile or be handled by init).
320
+ const resolved = await resolveProvider({ dataDir, env });
321
+ if (!resolved.apiKey || (resolved.source !== "env" && resolved.source !== "dotenv")) {
322
+ return null;
323
+ }
324
+ // #65: do NOT copy the plaintext env key into providers.json. Record only the
325
+ // *name* of the env var the key came from; the profile is created with an
326
+ // empty apiKey, so at request time both resolveProvider (backend) and
327
+ // resolveSessionProvider (runtime) skip the empty key and fall back to the
328
+ // env gateway path, which reads the same env var. The profile still exists so
329
+ // the user sees an active "Environment" provider + model in Settings (#51),
330
+ // but the secret stays in the environment, never on disk.
331
+ const keySources = resolved.source === "dotenv"
332
+ ? (await parseDotenv(configPaths(dataDir).dotenv))
333
+ : env;
334
+ const apiKeyEnv = (keySources.ANTHROPIC_API_KEY && "ANTHROPIC_API_KEY") ||
335
+ (keySources.BP_API_KEY && "BP_API_KEY") ||
336
+ (keySources.OPENAI_API_KEY && "OPENAI_API_KEY") ||
337
+ "ANTHROPIC_API_KEY";
338
+ return createProfile(dataDir, {
339
+ name: "Environment",
340
+ baseUrl: resolved.baseUrl ?? "",
341
+ apiKey: "", // #65: never persisted; resolved from apiKeyEnv at request time
342
+ apiKeyEnv,
343
+ models: resolved.model ? [resolved.model] : [],
344
+ notes: `Auto-created from environment variables on first launch. The API key is read from $${apiKeyEnv} at request time and is not stored on disk.`,
345
+ });
346
+ }
347
+ /**
348
+ * Resolve the provider config and reduce it to an onboarding report. Reuses the
349
+ * full priority chain via {@link resolveProvider}; folds apiKey to a boolean so
350
+ * the key never leaves this module in plaintext.
351
+ */
352
+ export async function describeProviderConfig(options) {
353
+ const resolved = await resolveProvider(options);
354
+ const paths = configPaths(options.dataDir);
355
+ return {
356
+ hasKey: Boolean(resolved.apiKey),
357
+ source: resolved.source,
358
+ baseUrl: resolved.baseUrl,
359
+ model: resolved.model,
360
+ settingsPath: paths.providers,
361
+ dotenvPath: paths.dotenv,
362
+ };
363
+ }
364
+ /**
365
+ * Turn a {@link ProviderConfigReport} into human guidance lines (uncolored;
366
+ * callers pick the styling). Shared by `init` and `up` so the onboarding text
367
+ * never drifts between them.
368
+ */
369
+ export function formatProviderGuidance(report) {
370
+ if (report.hasKey) {
371
+ const model = report.model || "(default) claude-sonnet-4-6";
372
+ const baseUrl = report.baseUrl || "(built-in Anthropic endpoint)";
373
+ return [
374
+ `✓ Provider key configured (from ${report.source ?? "unknown"}).`,
375
+ ` model: ${model} baseUrl: ${baseUrl}`,
376
+ ];
377
+ }
378
+ return [
379
+ "No provider API key configured yet. Set one of:",
380
+ " • web Settings UI: launch, open Settings → Providers, add a provider (recommended).",
381
+ ` • providers file: ${report.settingsPath}`,
382
+ ` { "profiles": [ { "id": "local", "name": "Local", "apiKey": "<key>", "baseUrl": "<gateway, optional>", "models": ["<id>"] } ], "selectedProfileId": "local" }`,
383
+ " • env var: export ANTHROPIC_API_KEY=<key> (also ANTHROPIC_BASE_URL / ANTHROPIC_MODEL / BP_MODEL)",
384
+ " • re-run init: brainpilot init --api-key <key> [--base-url <url>] [--model <id>]",
385
+ "No key needed for a test run: BP_MOCK=1 brainpilot up",
386
+ ];
387
+ }
388
+ /* ----------------------- MCP server config CRUD ----------------------- *
389
+ * The runtime reads `mcp_servers.json` from disk (`loadMcpServersConfig` in
390
+ * mcp-bridge.ts); these functions let the Settings → MCP tab persist entries
391
+ * through the same file so the UI and disk stay in sync.
392
+ *
393
+ * Disk format (keyed map): { mcpServers: { name: spec } }
394
+ * HTTP format (flat array): [{ name, ...spec }]
395
+ * -------------------------------------------------------------------------- */
396
+ export function mcpServersPath(dataDir) {
397
+ return path.join(dataDir, "bp_template", "mcp_servers.json");
398
+ }
399
+ async function readMcpServersRaw(dataDir) {
400
+ const raw = await readJsonSafe(mcpServersPath(dataDir));
401
+ if (raw && typeof raw.mcpServers === "object") {
402
+ return raw.mcpServers;
403
+ }
404
+ return {};
405
+ }
406
+ async function writeMcpServersRaw(dataDir, servers) {
407
+ const target = mcpServersPath(dataDir);
408
+ await fs.mkdir(path.dirname(target), { recursive: true });
409
+ const tmp = `${target}.tmp`;
410
+ await fs.writeFile(tmp, JSON.stringify({ mcpServers: servers }, null, 2), { encoding: "utf8", mode: 0o600 });
411
+ await fs.rename(tmp, target);
412
+ }
413
+ export async function readMcpServers(dataDir) {
414
+ const servers = await readMcpServersRaw(dataDir);
415
+ return Object.entries(servers).map(([name, spec]) => ({ name, ...spec }));
416
+ }
417
+ export async function createMcpServer(dataDir, name, spec) {
418
+ const servers = await readMcpServersRaw(dataDir);
419
+ servers[name] = spec;
420
+ await writeMcpServersRaw(dataDir, servers);
421
+ return { name, ...spec };
422
+ }
423
+ export async function updateMcpServer(dataDir, name, spec) {
424
+ const servers = await readMcpServersRaw(dataDir);
425
+ if (!(name in servers))
426
+ return null;
427
+ servers[name] = spec;
428
+ await writeMcpServersRaw(dataDir, servers);
429
+ return { name, ...spec };
430
+ }
431
+ export async function deleteMcpServer(dataDir, name) {
432
+ const servers = await readMcpServersRaw(dataDir);
433
+ if (!(name in servers))
434
+ return false;
435
+ delete servers[name];
436
+ await writeMcpServersRaw(dataDir, servers);
437
+ return true;
160
438
  }
161
439
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,6 +22,6 @@ export { StaticRuntimeOrchestrator } from "./static-orchestrator.js";
22
22
  export type { StaticOrchestratorOptions } from "./static-orchestrator.js";
23
23
  export { RuntimeClient, buildPath } from "./runtime-client.js";
24
24
  export type { RuntimeClientOptions, ForwardOptions } from "./runtime-client.js";
25
- export { resolveProvider, readLocalSettings, writeLocalSettings, parseDotenv, configPaths, } from "./config.js";
26
- export type { ResolvedProvider, LocalSettings, ConfigPaths, ResolveProviderOptions, } from "./config.js";
25
+ export { resolveProvider, readLocalSettings, writeLocalSettings, bootstrapEnvProvider, parseDotenv, configPaths, describeProviderConfig, formatProviderGuidance, } from "./config.js";
26
+ export type { ResolvedProvider, LocalSettings, ConfigPaths, ResolveProviderOptions, ProviderConfigReport, } from "./config.js";
27
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EACL,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,OAAO,EACP,cAAc,GACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EACL,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,OAAO,EACP,cAAc,GACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -13,5 +13,5 @@ export { LocalProcessOrchestrator, resolveRuntimeServerPath, } from "./local-orc
13
13
  export { DockerOrchestrator } from "./docker-orchestrator.js";
14
14
  export { StaticRuntimeOrchestrator } from "./static-orchestrator.js";
15
15
  export { RuntimeClient, buildPath } from "./runtime-client.js";
16
- export { resolveProvider, readLocalSettings, writeLocalSettings, parseDotenv, configPaths, } from "./config.js";
16
+ export { resolveProvider, readLocalSettings, writeLocalSettings, bootstrapEnvProvider, parseDotenv, configPaths, describeProviderConfig, formatProviderGuidance, } from "./config.js";
17
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
@@ -55,6 +55,22 @@ export declare class LocalProcessOrchestrator implements Orchestrator {
55
55
  private stopping;
56
56
  private gaveUp;
57
57
  private lastEnv;
58
+ /**
59
+ * In-flight startup promise (issue #58). ensureRuntime() is single-flight:
60
+ * concurrent first-run callers share this one promise instead of each
61
+ * spawning their own runtime child (which raced for the port and crashed the
62
+ * losers with EADDRINUSE). Null when no startup is in progress.
63
+ */
64
+ private starting;
65
+ /**
66
+ * Set once the runtime has become healthy at least once (issue #58). The
67
+ * crash-restart self-heal (§11A.5) is only meant for a runtime that was
68
+ * healthy and later died — NOT for a first-start spawn that immediately
69
+ * exits (e.g. a duplicate that lost the port race). While this is false, an
70
+ * exiting child does not trigger a restart; ensureRuntime's waitForHealth
71
+ * surfaces the failure instead.
72
+ */
73
+ private everHealthy;
58
74
  constructor(options?: LocalOrchestratorOptions);
59
75
  get baseUrl(): string;
60
76
  /** Build the exact argv used to spawn the runtime. Exposed for testing. */
@@ -1 +1 @@
1
- {"version":3,"file":"local-orchestrator.d.ts","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-orchestrator.d.ts","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,22 @@ export class LocalProcessOrchestrator {
40
40
  stopping = false;
41
41
  gaveUp = false;
42
42
  lastEnv = {};
43
+ /**
44
+ * In-flight startup promise (issue #58). ensureRuntime() is single-flight:
45
+ * concurrent first-run callers share this one promise instead of each
46
+ * spawning their own runtime child (which raced for the port and crashed the
47
+ * losers with EADDRINUSE). Null when no startup is in progress.
48
+ */
49
+ starting = null;
50
+ /**
51
+ * Set once the runtime has become healthy at least once (issue #58). The
52
+ * crash-restart self-heal (§11A.5) is only meant for a runtime that was
53
+ * healthy and later died — NOT for a first-start spawn that immediately
54
+ * exits (e.g. a duplicate that lost the port race). While this is false, an
55
+ * exiting child does not trigger a restart; ensureRuntime's waitForHealth
56
+ * surfaces the failure instead.
57
+ */
58
+ everHealthy = false;
43
59
  constructor(options = {}) {
44
60
  this.opts = {
45
61
  dataDir: options.dataDir ?? process.env.BP_DATA_DIR ?? "./brainpilot",
@@ -93,11 +109,29 @@ export class LocalProcessOrchestrator {
93
109
  if (this.child && this.handle && (await this.health())) {
94
110
  return this.handle;
95
111
  }
96
- this.lastEnv = this.buildEnv(opts?.env);
97
- this.spawnChild(this.lastEnv);
98
- await this.waitForHealth();
99
- this.handle = { baseUrl: this.baseUrl };
100
- return this.handle;
112
+ // Single-flight (issue #58): if a startup is already in progress, every
113
+ // concurrent caller rides the same promise rather than spawning its own
114
+ // runtime child. This is what prevents the cold-start spawn storm where N
115
+ // simultaneous requests each spawned a runtime and N-1 crashed on
116
+ // EADDRINUSE. opts.dataDir/port from a piggybacking caller are ignored on
117
+ // purpose — a given backend/data-dir has exactly one runtime.
118
+ if (this.starting) {
119
+ return this.starting;
120
+ }
121
+ this.starting = (async () => {
122
+ this.lastEnv = this.buildEnv(opts?.env);
123
+ this.spawnChild(this.lastEnv);
124
+ await this.waitForHealth();
125
+ this.handle = { baseUrl: this.baseUrl };
126
+ return this.handle;
127
+ })();
128
+ try {
129
+ return await this.starting;
130
+ }
131
+ finally {
132
+ // Clear so a later call can retry (e.g. if waitForHealth threw).
133
+ this.starting = null;
134
+ }
101
135
  }
102
136
  async health() {
103
137
  if (!this.child)
@@ -106,6 +140,7 @@ export class LocalProcessOrchestrator {
106
140
  }
107
141
  async stopRuntime() {
108
142
  this.stopping = true;
143
+ this.everHealthy = false;
109
144
  const child = this.child;
110
145
  this.child = null;
111
146
  this.handle = null;
@@ -193,6 +228,17 @@ export class LocalProcessOrchestrator {
193
228
  async handleExit(err) {
194
229
  if (this.stopping || this.gaveUp)
195
230
  return;
231
+ // Issue #58: a child that exits before the runtime ever became healthy is a
232
+ // failed *startup*, not a crash of a running service. The restart self-heal
233
+ // (§11A.5) is only for an already-healthy runtime that later died. A
234
+ // first-start exit (e.g. a duplicate spawn that lost the port race and got
235
+ // EADDRINUSE) must NOT enter the restart loop — that loop is what flooded
236
+ // runtime.log and clobbered this.child. Just drop the child and let
237
+ // ensureRuntime's waitForHealth surface the failure.
238
+ if (!this.everHealthy) {
239
+ this.child = null;
240
+ return;
241
+ }
196
242
  const now = Date.now();
197
243
  this.restartTimestamps = this.restartTimestamps.filter((ts) => now - ts < this.opts.restartWindowMs);
198
244
  if (this.restartTimestamps.length >= this.opts.maxRestarts) {
@@ -216,8 +262,12 @@ export class LocalProcessOrchestrator {
216
262
  const deadline = Date.now() + this.opts.healthTimeoutMs;
217
263
  // Poll until healthy or timeout. Spacing is small for local startup.
218
264
  for (;;) {
219
- if (await this.opts.healthProbe(this.baseUrl))
265
+ if (await this.opts.healthProbe(this.baseUrl)) {
266
+ // Mark healthy so a later abnormal exit is eligible for the restart
267
+ // self-heal (issue #58) — first-start exits before this are not.
268
+ this.everHealthy = true;
220
269
  return;
270
+ }
221
271
  if (Date.now() >= deadline) {
222
272
  throw new Error(`runtime did not become healthy at ${this.baseUrl} within ` +
223
273
  `${this.opts.healthTimeoutMs}ms`);
@@ -1 +1 @@
1
- {"version":3,"file":"local-orchestrator.js","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-orchestrator.js","sourceRoot":"","sources":["../src/local-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
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
+ export type ProbeStatus = "healthy" | "unavailable" | "error";
20
+ export interface ProbeResult {
21
+ status: ProbeStatus;
22
+ /** Human-readable detail for the UI; redacted, never leaks internal paths. */
23
+ message?: string;
24
+ latencyMs?: number;
25
+ }
26
+ export interface ProbeInput {
27
+ baseUrl: string;
28
+ apiKey: string;
29
+ }
30
+ /**
31
+ * Probe a provider gateway. `fetchFn`/`timeoutMs` are injectable for tests.
32
+ * Never throws — always resolves to a ProbeResult.
33
+ */
34
+ export declare function probeProvider(input: ProbeInput, opts?: {
35
+ fetchFn?: typeof fetch;
36
+ timeoutMs?: number;
37
+ }): Promise<ProbeResult>;
38
+ //# sourceMappingURL=provider-probe.d.ts.map