@schlessera/brain-ui-server 0.16.0 → 0.17.0
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/README.md +1 -0
- package/dist/agent/backend.d.ts +31 -10
- package/dist/agent/backend.d.ts.map +1 -1
- package/dist/agent/backend.js +86 -26
- package/dist/agent/backend.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +47 -16
- package/dist/app.js.map +1 -1
- package/dist/config/env-core.d.ts +73 -0
- package/dist/config/env-core.d.ts.map +1 -0
- package/dist/config/env-core.js +62 -0
- package/dist/config/env-core.js.map +1 -0
- package/dist/config/env.d.ts +19 -5
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +43 -11
- package/dist/config/env.js.map +1 -1
- package/dist/cron/scheduler.d.ts +17 -0
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/scheduler.js +33 -6
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/db/settings.d.ts +1 -1
- package/dist/db/settings.d.ts.map +1 -1
- package/dist/db/settings.js +2 -2
- package/dist/db/settings.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +5 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +46 -1
- package/dist/middleware/auth.js.map +1 -1
- package/dist/routes/health.d.ts +4 -14
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +22 -6
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/share.d.ts.map +1 -1
- package/dist/routes/share.js +2 -2
- package/dist/routes/share.js.map +1 -1
- package/dist/voice/keyterm-builder.js +2 -2
- package/dist/voice/keyterm-builder.js.map +1 -1
- package/dist/ws/bridge.d.ts.map +1 -1
- package/dist/ws/bridge.js +17 -2
- package/dist/ws/bridge.js.map +1 -1
- package/dist/ws/clients.d.ts +10 -3
- package/dist/ws/clients.d.ts.map +1 -1
- package/dist/ws/clients.js +16 -4
- package/dist/ws/clients.js.map +1 -1
- package/dist/ws/connection.d.ts +1 -1
- package/dist/ws/connection.d.ts.map +1 -1
- package/dist/ws/connection.js +11 -2
- package/dist/ws/connection.js.map +1 -1
- package/dist/ws/dispatch.d.ts.map +1 -1
- package/dist/ws/dispatch.js +3 -1
- package/dist/ws/dispatch.js.map +1 -1
- package/dist/ws/host.d.ts +36 -0
- package/dist/ws/host.d.ts.map +1 -1
- package/dist/ws/host.js +93 -4
- package/dist/ws/host.js.map +1 -1
- package/dist/ws/run-session.d.ts.map +1 -1
- package/dist/ws/run-session.js +27 -5
- package/dist/ws/run-session.js.map +1 -1
- package/dist/ws/session-catalog.d.ts +2 -1
- package/dist/ws/session-catalog.d.ts.map +1 -1
- package/dist/ws/session-catalog.js +20 -3
- package/dist/ws/session-catalog.js.map +1 -1
- package/dist/ws/turns.d.ts +8 -0
- package/dist/ws/turns.d.ts.map +1 -1
- package/dist/ws/turns.js.map +1 -1
- package/package.json +7 -6
- package/src/agent/backend.ts +123 -29
- package/src/app.ts +55 -16
- package/src/config/env-core.ts +93 -0
- package/src/config/env.ts +61 -17
- package/src/cron/scheduler.ts +48 -14
- package/src/db/settings.ts +2 -2
- package/src/index.ts +6 -0
- package/src/middleware/auth.ts +50 -1
- package/src/routes/health.ts +22 -6
- package/src/routes/share.ts +11 -7
- package/src/voice/keyterm-builder.ts +2 -2
- package/src/ws/bridge.ts +17 -5
- package/src/ws/clients.ts +24 -6
- package/src/ws/connection.ts +11 -2
- package/src/ws/dispatch.ts +3 -1
- package/src/ws/host.ts +115 -6
- package/src/ws/run-session.ts +32 -8
- package/src/ws/session-catalog.ts +21 -3
- package/src/ws/turns.ts +8 -0
package/README.md
CHANGED
|
@@ -77,6 +77,7 @@ Every variable this package reads, and what happens when it is unset.
|
|
|
77
77
|
| `BRAIN_UI_ALLOW_PASSWORD` | Set "1" to keep password login enabled after a passkey exists for the RP (break-glass recovery). | 0 |
|
|
78
78
|
| `BRAIN_UI_CLAUDE_DEFAULT_MODEL` | Model the built-in default Claude profile is pinned to. | claude-sonnet-4-6 |
|
|
79
79
|
| `BRAIN_UI_CLAUDE_PROFILES` | JSON array of extra Anthropic-compatible inference profiles ({id,label,model?,baseUrl?,authTokenEnv?,apiKeyEnv?,modelAliases?}). | (none) |
|
|
80
|
+
| `BRAIN_UI_CONFIRM_BASH` | JSON array of regex sources; a Bash command matching any of them raises a confirmation card before it runs. Unset uses the shipped defaults (brain archive, rm -r, git push --force, git reset --hard, git clean -f, git checkout -- ). An empty array [] disables the confirmation. Not a security boundary — an agent with Bash can reach the same effect another way; it stops a destructive command you did not intend, not one that is trying to get past you. | the shipped pattern set |
|
|
80
81
|
| `BRAIN_UI_DANGEROUSLY_DISABLE_AUTH` | Set "1" to allow AUTH_MODE=none on a non-loopback host. Every network peer gets full agent access. | 0 |
|
|
81
82
|
| `BRAIN_UI_LOG_LEVEL` | Minimum severity the console log consumer emits: TRACE, DEBUG, INFO, WARN, ERROR or FATAL. Case-insensitive; an unrecognised value falls back to the default rather than silencing the server. | INFO |
|
|
82
83
|
| `BRAIN_UI_MODEL_DISCOVERY` | Model discovery against the Anthropic Models API; "0"/"off"/"false" disables. Defaults ON, except under a test runner (NODE_ENV=test) where it defaults OFF. | on (off under NODE_ENV=test) |
|
package/dist/agent/backend.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Logger } from "@opentelemetry/api-logs";
|
|
1
2
|
import type { AgentConfig } from "../config/env.js";
|
|
2
3
|
import type { ProviderInfo } from "@schlessera/brain-ui-sdk";
|
|
3
4
|
import type { AgentBackend, BackendCapabilities } from "@schlessera/brain-ui-sdk/server";
|
|
@@ -8,7 +9,7 @@ import type { AgentBackend, BackendCapabilities } from "@schlessera/brain-ui-sdk
|
|
|
8
9
|
* tests install fakes by constructing a registry, not by mutating a module.
|
|
9
10
|
*
|
|
10
11
|
* BOTH backend packages are optional peers loaded lazily (the same
|
|
11
|
-
*
|
|
12
|
+
* dynamic-import path): a deployment installs the one its AGENT_BACKEND
|
|
12
13
|
* names, and the other never has to be present — at runtime AND at
|
|
13
14
|
* type-check time (see the structural mirrors below).
|
|
14
15
|
*
|
|
@@ -17,6 +18,12 @@ import type { AgentBackend, BackendCapabilities } from "@schlessera/brain-ui-sdk
|
|
|
17
18
|
* endpoints are declared via the BRAIN_UI_CLAUDE_PROFILES env var (documented in
|
|
18
19
|
* .env.example) rather than in code.
|
|
19
20
|
*/
|
|
21
|
+
/**
|
|
22
|
+
* Mirror of the backends' `BackendLogFn` — the minimal log seam a backend
|
|
23
|
+
* accepts. A callback rather than a Logger so the backend packages carry no
|
|
24
|
+
* telemetry dependency; {@link toBackendLog} adapts the registry's Logger.
|
|
25
|
+
*/
|
|
26
|
+
export type BackendLogFn = (level: "debug" | "info" | "warn" | "error", message: string, attrs?: Record<string, string | number | boolean>) => void;
|
|
20
27
|
/** Mirror of the Claude package's `InferenceProfileInput` (declarative shape). */
|
|
21
28
|
export interface ClaudeProfileInput {
|
|
22
29
|
id: string;
|
|
@@ -62,6 +69,8 @@ export interface ClaudeBackendModule {
|
|
|
62
69
|
brainPath: string;
|
|
63
70
|
claudeCodePath?: string;
|
|
64
71
|
profiles?: ClaudeProfile[] | (() => ClaudeProfile[]);
|
|
72
|
+
confirmBashPatterns?: readonly string[];
|
|
73
|
+
log?: BackendLogFn;
|
|
65
74
|
}) => AgentBackend;
|
|
66
75
|
createModelSource: (options: {
|
|
67
76
|
brainPath: string;
|
|
@@ -109,6 +118,12 @@ export interface BackendRegistryOptions {
|
|
|
109
118
|
* sessions pinned to it. Defaults to "nothing hidden".
|
|
110
119
|
*/
|
|
111
120
|
getHiddenModelIds?: () => string[];
|
|
121
|
+
/**
|
|
122
|
+
* Where the registry and its backends report. Adapted to the backends'
|
|
123
|
+
* minimal callback ({@link BackendLogFn}) before crossing the package
|
|
124
|
+
* boundary. Absent means silence.
|
|
125
|
+
*/
|
|
126
|
+
log?: Logger;
|
|
112
127
|
}
|
|
113
128
|
export interface BackendRegistry {
|
|
114
129
|
/** All configured backends, with the default backend first. */
|
|
@@ -145,18 +160,23 @@ export interface BackendRegistry {
|
|
|
145
160
|
invalidateProfiles(): void;
|
|
146
161
|
}
|
|
147
162
|
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
163
|
+
* Load an optional backend package, mapping ONLY "the backend package itself
|
|
164
|
+
* is not installed" to the actionable install hint. Everything else — the
|
|
165
|
+
* backend missing one of its OWN transitive deps, a syntax error, a throwing
|
|
166
|
+
* top-level — is a different failure whose original error IS the diagnostic,
|
|
167
|
+
* so it is rethrown untouched. The distinction rides on ERR_MODULE_NOT_FOUND
|
|
168
|
+
* naming the specifier it failed on: a transitive miss names the transitive
|
|
169
|
+
* dep, not the backend, and must not read as "backend not installed".
|
|
154
170
|
*
|
|
155
|
-
*
|
|
171
|
+
* `await import()` rather than `createRequire()(...)`: the backend packages
|
|
172
|
+
* are ESM, and a CJS require of them under plain Node dies with
|
|
173
|
+
* ERR_REQUIRE_ESM — which the old blanket catch then reported as "not
|
|
174
|
+
* installed" on a machine where the package was sitting right there.
|
|
156
175
|
*
|
|
157
|
-
* The `
|
|
158
|
-
* production callers pass nothing.
|
|
176
|
+
* The `importer` parameter exists for tests (simulating absent or broken
|
|
177
|
+
* packages); production callers pass nothing.
|
|
159
178
|
*/
|
|
179
|
+
export declare function loadBackendModule(key: "claude" | "pi", importer?: (specifier: string) => Promise<unknown>): Promise<unknown>;
|
|
160
180
|
export declare function assertBackendResolvable(agent: AgentConfig, resolve?: (specifier: string) => void): void;
|
|
161
181
|
export declare function createBackendRegistry(options: BackendRegistryOptions): BackendRegistry;
|
|
162
182
|
/**
|
|
@@ -167,5 +187,6 @@ export declare function createBackendRegistry(options: BackendRegistryOptions):
|
|
|
167
187
|
*/
|
|
168
188
|
export declare function createStaticBackendRegistry(backends: AgentBackend[], defaultBackendId?: string, options?: {
|
|
169
189
|
getHiddenModelIds?: () => string[];
|
|
190
|
+
log?: Logger;
|
|
170
191
|
}): BackendRegistry;
|
|
171
192
|
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/agent/backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/agent/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/backend.js
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { createRequire } from "module";
|
|
2
|
+
const LEVEL_SEVERITY = {
|
|
3
|
+
debug: "DEBUG",
|
|
4
|
+
info: "INFO",
|
|
5
|
+
warn: "WARN",
|
|
6
|
+
error: "ERROR",
|
|
7
|
+
};
|
|
8
|
+
function toBackendLog(log) {
|
|
9
|
+
return (level, message, attrs) => log.emit({
|
|
10
|
+
severityText: LEVEL_SEVERITY[level],
|
|
11
|
+
body: message,
|
|
12
|
+
...(attrs ? { attributes: attrs } : {}),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
2
15
|
const PROFILE_MEMO_MS = 5_000;
|
|
3
16
|
function buildSnapshot(backends, defaultBackendId) {
|
|
4
17
|
if (backends.length === 0) {
|
|
@@ -43,6 +56,57 @@ function missingBackendError(primary) {
|
|
|
43
56
|
* The `resolve` parameter exists for tests (simulating an absent package);
|
|
44
57
|
* production callers pass nothing.
|
|
45
58
|
*/
|
|
59
|
+
/** The specifier an ERR_MODULE_NOT_FOUND failed on, or null for any other error. */
|
|
60
|
+
function moduleNotFoundSpecifier(error) {
|
|
61
|
+
if (typeof error !== "object" || error === null)
|
|
62
|
+
return null;
|
|
63
|
+
const { code, specifier, message } = error;
|
|
64
|
+
if (code !== "ERR_MODULE_NOT_FOUND" && code !== "MODULE_NOT_FOUND")
|
|
65
|
+
return null;
|
|
66
|
+
// Bun's ResolveMessage (not an Error instance) carries the failing
|
|
67
|
+
// specifier as a property; Node quotes it in the message instead.
|
|
68
|
+
if (typeof specifier === "string")
|
|
69
|
+
return specifier;
|
|
70
|
+
if (typeof message === "string") {
|
|
71
|
+
const quoted = /Cannot find (?:package|module) '([^']+)'/.exec(message);
|
|
72
|
+
if (quoted)
|
|
73
|
+
return quoted[1];
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Load an optional backend package, mapping ONLY "the backend package itself
|
|
79
|
+
* is not installed" to the actionable install hint. Everything else — the
|
|
80
|
+
* backend missing one of its OWN transitive deps, a syntax error, a throwing
|
|
81
|
+
* top-level — is a different failure whose original error IS the diagnostic,
|
|
82
|
+
* so it is rethrown untouched. The distinction rides on ERR_MODULE_NOT_FOUND
|
|
83
|
+
* naming the specifier it failed on: a transitive miss names the transitive
|
|
84
|
+
* dep, not the backend, and must not read as "backend not installed".
|
|
85
|
+
*
|
|
86
|
+
* `await import()` rather than `createRequire()(...)`: the backend packages
|
|
87
|
+
* are ESM, and a CJS require of them under plain Node dies with
|
|
88
|
+
* ERR_REQUIRE_ESM — which the old blanket catch then reported as "not
|
|
89
|
+
* installed" on a machine where the package was sitting right there.
|
|
90
|
+
*
|
|
91
|
+
* The `importer` parameter exists for tests (simulating absent or broken
|
|
92
|
+
* packages); production callers pass nothing.
|
|
93
|
+
*/
|
|
94
|
+
export async function loadBackendModule(
|
|
95
|
+
// "claude" | "pi" spelled out, NOT keyof typeof BACKEND_SPECIFIERS: the
|
|
96
|
+
// keyof form drags the table's literal string types — the backend
|
|
97
|
+
// specifiers — into the emitted .d.ts, which the declaration-surface gate
|
|
98
|
+
// rightly refuses.
|
|
99
|
+
key, importer = (specifier) => import(specifier)) {
|
|
100
|
+
const specifier = BACKEND_SPECIFIERS[key];
|
|
101
|
+
try {
|
|
102
|
+
return await importer(specifier);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (moduleNotFoundSpecifier(error) === specifier)
|
|
106
|
+
throw missingBackendError(key);
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
46
110
|
export function assertBackendResolvable(agent, resolve = (specifier) => {
|
|
47
111
|
createRequire(import.meta.url).resolve(specifier);
|
|
48
112
|
}) {
|
|
@@ -60,6 +124,7 @@ export function assertBackendResolvable(agent, resolve = (specifier) => {
|
|
|
60
124
|
export function createBackendRegistry(options) {
|
|
61
125
|
const { brainPath, agent } = options;
|
|
62
126
|
const getHidden = options.getHiddenModelIds ?? (() => []);
|
|
127
|
+
const backendLog = options.log ? toBackendLog(options.log) : undefined;
|
|
63
128
|
let cachedRegistry = null;
|
|
64
129
|
let modelSource = null;
|
|
65
130
|
/**
|
|
@@ -147,19 +212,12 @@ export function createBackendRegistry(options) {
|
|
|
147
212
|
/**
|
|
148
213
|
* NEITHER backend package is a hard dependency — a deployment installs the
|
|
149
214
|
* one its AGENT_BACKEND names (both, if it switches). Loaded lazily through
|
|
150
|
-
*
|
|
151
|
-
* one;
|
|
152
|
-
*
|
|
215
|
+
* {@link loadBackendModule} so the server still boots without the unused
|
|
216
|
+
* one; only "the package is absent" maps to the actionable install hint,
|
|
217
|
+
* any other load failure surfaces as itself.
|
|
153
218
|
*/
|
|
154
|
-
function buildClaudeBackend() {
|
|
155
|
-
const
|
|
156
|
-
let claude;
|
|
157
|
-
try {
|
|
158
|
-
claude = require("@schlessera/brain-backend-claude");
|
|
159
|
-
}
|
|
160
|
-
catch {
|
|
161
|
-
throw missingBackendError("claude");
|
|
162
|
-
}
|
|
219
|
+
async function buildClaudeBackend() {
|
|
220
|
+
const claude = (await loadBackendModule("claude"));
|
|
163
221
|
if (typeof claude.createClaudeBackend !== "function") {
|
|
164
222
|
throw new Error('"@schlessera/brain-backend-claude" does not export createClaudeBackend.');
|
|
165
223
|
}
|
|
@@ -174,32 +232,34 @@ export function createBackendRegistry(options) {
|
|
|
174
232
|
return claude.createClaudeBackend({
|
|
175
233
|
brainPath,
|
|
176
234
|
claudeCodePath: agent.claudeCodePath,
|
|
235
|
+
...(backendLog ? { log: backendLog } : {}),
|
|
236
|
+
// Omitted entirely when unconfigured, so the backend's own defaults
|
|
237
|
+
// apply; an explicit [] passes through and disables confirmation.
|
|
238
|
+
...(agent.confirmBashPatterns !== null
|
|
239
|
+
? { confirmBashPatterns: agent.confirmBashPatterns }
|
|
240
|
+
: {}),
|
|
177
241
|
// A function, not an array: discovery refreshes in the background and the
|
|
178
242
|
// new roster has to be visible without restarting the process.
|
|
179
243
|
profiles: () => mergeDiscovered(claude, declared, modelSource?.list() ?? []),
|
|
180
244
|
});
|
|
181
245
|
}
|
|
182
|
-
function buildPiBackend() {
|
|
183
|
-
const
|
|
184
|
-
let mod;
|
|
185
|
-
try {
|
|
186
|
-
mod = require("@schlessera/brain-backend-pi");
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
throw missingBackendError("pi");
|
|
190
|
-
}
|
|
246
|
+
async function buildPiBackend() {
|
|
247
|
+
const mod = (await loadBackendModule("pi"));
|
|
191
248
|
if (typeof mod.createPiBackend !== "function") {
|
|
192
249
|
throw new Error('"@schlessera/brain-backend-pi" does not export createPiBackend.');
|
|
193
250
|
}
|
|
194
|
-
return mod.createPiBackend({
|
|
251
|
+
return mod.createPiBackend({
|
|
252
|
+
brainPath,
|
|
253
|
+
...(backendLog ? { log: backendLog } : {}),
|
|
254
|
+
});
|
|
195
255
|
}
|
|
196
256
|
async function buildRegistry() {
|
|
197
257
|
const primary = agent.backend || "claude";
|
|
198
258
|
if (primary === "pi") {
|
|
199
|
-
const pi = buildPiBackend();
|
|
259
|
+
const pi = await buildPiBackend();
|
|
200
260
|
return buildSnapshot([pi], pi.id);
|
|
201
261
|
}
|
|
202
|
-
const backends = [buildClaudeBackend()];
|
|
262
|
+
const backends = [await buildClaudeBackend()];
|
|
203
263
|
// AGENT_BACKEND must name a configured backend. The in-process options are
|
|
204
264
|
// "claude" (default) and "pi" (handled above). An unrecognized value is a
|
|
205
265
|
// misconfiguration — fail loudly instead of silently coercing to claude and
|
|
@@ -217,7 +277,7 @@ export function createBackendRegistry(options) {
|
|
|
217
277
|
return makeRegistry(getRegistry, getHidden, async () => {
|
|
218
278
|
await getRegistry();
|
|
219
279
|
return modelSource;
|
|
220
|
-
});
|
|
280
|
+
}, options.log);
|
|
221
281
|
}
|
|
222
282
|
/**
|
|
223
283
|
* A registry over an explicit backend list — the seam tests (and embedders
|
|
@@ -227,7 +287,7 @@ export function createBackendRegistry(options) {
|
|
|
227
287
|
*/
|
|
228
288
|
export function createStaticBackendRegistry(backends, defaultBackendId = backends[0]?.id ?? "", options = {}) {
|
|
229
289
|
const snapshot = buildSnapshot(backends, defaultBackendId);
|
|
230
|
-
return makeRegistry(async () => snapshot, options.getHiddenModelIds ?? (() => []), async () => null);
|
|
290
|
+
return makeRegistry(async () => snapshot, options.getHiddenModelIds ?? (() => []), async () => null, options.log);
|
|
231
291
|
}
|
|
232
292
|
/** The accessor surface, shared by the config-driven and static registries. */
|
|
233
293
|
function makeRegistry(getRegistry, getHidden, getModelSource, log) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/agent/backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/agent/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOzE,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,EAML,KAAK,QAAQ,EAEd,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAmB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEnF,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,sEAAsE;IACtE,MAAM,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,CAAC;IACnB,kEAAkE;IAClE,EAAE,EAAE,QAAQ,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,aAAa,EAAE,aAAa,CAAC;IAC7B,iDAAiD;IACjD,YAAY,IAAI,OAAO,CAAC;IACxB,6EAA6E;IAC7E,iBAAiB,IAAI,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,KAAK,IAAI,IAAI,CAAC;CACf;AAqBD,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,UAAU,CAuOpE"}
|
package/dist/app.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
|
-
import { logger } from "hono/logger";
|
|
3
2
|
import { cors } from "hono/cors";
|
|
4
3
|
import { serveStatic } from "hono/bun";
|
|
5
4
|
import { join } from "path";
|
|
6
5
|
import { resolveServerConfig } from "./config/env.js";
|
|
7
|
-
import {
|
|
6
|
+
import { createHealthRoutes, createStatusRoutes } from "./routes/health.js";
|
|
8
7
|
import { createBrainRoutes } from "./routes/brain.js";
|
|
9
8
|
import { createSessionRoutes } from "./routes/sessions.js";
|
|
10
9
|
import { createVoiceRoutes } from "./routes/voice.js";
|
|
@@ -76,42 +75,68 @@ export function createApp(options = {}) {
|
|
|
76
75
|
// Per-instance state: the app's own database, the brain CLI wrapper, the
|
|
77
76
|
// backend registry, and the WebSocket host. No module-level singletons —
|
|
78
77
|
// two apps with different configuration coexist in one process.
|
|
79
|
-
const
|
|
78
|
+
const dbLog = observability.logger("db");
|
|
79
|
+
const db = createUiDb(config.dbPath, { log: dbLog });
|
|
80
80
|
const brain = createBrainClient({ brainPath: config.brainPath });
|
|
81
81
|
const cron = createCronScheduler({ db, brain, log: observability.logger("cron") });
|
|
82
82
|
const registry = options.registry ??
|
|
83
83
|
createBackendRegistry({
|
|
84
84
|
brainPath: config.brainPath,
|
|
85
85
|
agent: config.agent,
|
|
86
|
-
getHiddenModelIds: () => getHiddenModelIds(db),
|
|
86
|
+
getHiddenModelIds: () => getHiddenModelIds(db, dbLog),
|
|
87
|
+
log: observability.logger("agent"),
|
|
87
88
|
});
|
|
88
89
|
const host = new WsHost({
|
|
89
90
|
registry,
|
|
90
91
|
observability,
|
|
91
|
-
catalog: createSessionCatalog(() => db),
|
|
92
|
+
catalog: createSessionCatalog(() => db, dbLog),
|
|
92
93
|
...(options.appName ? { appName: options.appName } : {}),
|
|
93
94
|
...(options.turnTimeoutMs ? { turnTimeoutMs: options.turnTimeoutMs } : {}),
|
|
94
95
|
maxConcurrentSessions: () => config.maxConcurrentSessions,
|
|
95
96
|
wsRate: config.wsRate,
|
|
96
97
|
});
|
|
97
98
|
const wsUpgrade = createWsUpgrade(host);
|
|
99
|
+
// One instrument for every way a login can fail — passkey ceremonies and
|
|
100
|
+
// password logins land in the same series, split by attributes.
|
|
101
|
+
const authFailures = observability.meter("auth").createCounter("auth.failures", {
|
|
102
|
+
description: "Failed authentication ceremonies, by reason",
|
|
103
|
+
});
|
|
98
104
|
const passkeyCtx = {
|
|
99
105
|
db,
|
|
100
106
|
webauthn: config.webauthn,
|
|
101
107
|
auth,
|
|
102
108
|
allowedOrigins: config.allowedOrigins,
|
|
103
109
|
log: observability.logger("passkeys"),
|
|
104
|
-
failures:
|
|
105
|
-
description: "Failed authentication ceremonies, by reason",
|
|
106
|
-
}),
|
|
110
|
+
failures: authFailures,
|
|
107
111
|
};
|
|
108
112
|
const keyterms = {
|
|
109
113
|
brainPath: config.brainPath,
|
|
110
114
|
cacheDir: config.voice.cacheDir,
|
|
111
115
|
limit: config.voice.keytermLimit,
|
|
116
|
+
log: observability.logger("voice"),
|
|
112
117
|
};
|
|
113
|
-
//
|
|
114
|
-
|
|
118
|
+
// Request logging through the observability layer, so BRAIN_UI_LOG_LEVEL
|
|
119
|
+
// governs it like every other emission (hono's logger() wrote raw console
|
|
120
|
+
// lines no threshold or consumer swap could touch). Path only — never the
|
|
121
|
+
// query string or body. /api/health is skipped: the Docker healthcheck
|
|
122
|
+
// polls it and would drown everything else out.
|
|
123
|
+
const httpLog = observability.logger("http");
|
|
124
|
+
app.use("*", async (c, next) => {
|
|
125
|
+
if (c.req.path === "/api/health")
|
|
126
|
+
return next();
|
|
127
|
+
const startedAt = Date.now();
|
|
128
|
+
await next();
|
|
129
|
+
httpLog.emit({
|
|
130
|
+
severityText: "INFO",
|
|
131
|
+
body: "request",
|
|
132
|
+
attributes: {
|
|
133
|
+
method: c.req.method,
|
|
134
|
+
path: c.req.path,
|
|
135
|
+
status: c.res.status,
|
|
136
|
+
"duration.ms": Date.now() - startedAt,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
});
|
|
115
140
|
// CORS is only needed for a SPLIT topology where the client is served from a
|
|
116
141
|
// different origin than the API. ALLOWED_ORIGINS is a comma-separated
|
|
117
142
|
// allowlist; empty/unset means same-origin (the default), so the CORS
|
|
@@ -129,12 +154,14 @@ export function createApp(options = {}) {
|
|
|
129
154
|
// probe and the login/logout routes are reachable without a session.
|
|
130
155
|
// /api/status is intentionally NOT here — it leaks the git SHA, cron errors,
|
|
131
156
|
// and a session oracle, so it lives behind the guard below.
|
|
132
|
-
app.route("/api",
|
|
157
|
+
app.route("/api", createHealthRoutes({ db }));
|
|
133
158
|
// Not under /api, and not behind the guard: this is where a system share
|
|
134
159
|
// lands when no service worker was around to intercept it. See the route.
|
|
135
160
|
app.route("/", shareTargetFallbackRoutes);
|
|
136
161
|
app.route("/api", authRoutes(authMode, auth, {
|
|
137
162
|
passwordDisabled: (c) => passwordLoginDisabled(c, passkeyCtx),
|
|
163
|
+
log: authLog,
|
|
164
|
+
failures: authFailures,
|
|
138
165
|
}));
|
|
139
166
|
app.route("/api", passkeyPublicRoutes(authMode, passkeyCtx));
|
|
140
167
|
// Auth guard for every other /api/* route. The probe below is intentionally
|
|
@@ -156,12 +183,16 @@ export function createApp(options = {}) {
|
|
|
156
183
|
app.route("/api", createBrainRoutes({ brain, brainPath: config.brainPath, keyterms }));
|
|
157
184
|
app.route("/api", createSessionRoutes({ registry, db }));
|
|
158
185
|
app.route("/api", createVoiceRoutes({ voice: config.voice, keyterms }));
|
|
159
|
-
app.route("/api", createFilesRoutes({ brainRoot: config.brainPath }));
|
|
160
|
-
app.route("/api", createShareRoutes({
|
|
161
|
-
|
|
186
|
+
app.route("/api", createFilesRoutes({ brainRoot: config.brainPath, log: observability.logger("files") }));
|
|
187
|
+
app.route("/api", createShareRoutes({
|
|
188
|
+
brainRoot: config.brainPath,
|
|
189
|
+
allowedOrigins,
|
|
190
|
+
log: observability.logger("share"),
|
|
191
|
+
}));
|
|
192
|
+
app.route("/api", createRenderRoutes(options.renderer, observability.logger("render")));
|
|
162
193
|
app.route("/api", createProviderRoutes({ registry }));
|
|
163
|
-
app.route("/api", createModelRoutes({ registry, db }));
|
|
164
|
-
app.route("/api", createGraphRoutes({ brainRoot: config.brainPath }));
|
|
194
|
+
app.route("/api", createModelRoutes({ registry, db, log: observability.logger("models") }));
|
|
195
|
+
app.route("/api", createGraphRoutes({ brainRoot: config.brainPath, log: observability.logger("graph") }));
|
|
165
196
|
// WebSocket endpoint. Browsers can't set headers on the WS handshake, so the
|
|
166
197
|
// upgrade authenticates via the session cookie (or IP/proxy header) INSIDE
|
|
167
198
|
// the handler — no header-modifying middleware may sit on this route.
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared core of every package's environment chokepoint — a SYNC-ENFORCED
|
|
3
|
+
* COPY, not a package.
|
|
4
|
+
*
|
|
5
|
+
* This file exists byte-identically as `src/config/env-core.ts` in every
|
|
6
|
+
* package that has an env chokepoint (`src/config/env.ts`), and the root test
|
|
7
|
+
* `tests/env-core-sync.test.ts` fails the build when any copy differs. To
|
|
8
|
+
* change it: edit ONE copy, copy the file verbatim into every package that
|
|
9
|
+
* has one (each `src/config/env-core.ts`), and rerun the sync test.
|
|
10
|
+
*
|
|
11
|
+
* Why a copy and not a `@schlessera/brain-env` package: the repo adds a seam
|
|
12
|
+
* only where a second implementation is plausible (docs/extending/README.md),
|
|
13
|
+
* and a new package for four fields and three small functions would churn the
|
|
14
|
+
* release manifest and every dependent's dependency list. Byte-equality
|
|
15
|
+
* enforced by a test gives the same single-source-of-truth guarantee without
|
|
16
|
+
* the edge. (`scripts/env-docs.ts` imports the canonical copy in
|
|
17
|
+
* `packages/core` directly — it is a root script, not published code.)
|
|
18
|
+
*
|
|
19
|
+
* What belongs here: the descriptor contract the env-docs generator and the
|
|
20
|
+
* env-parity gate consume, the dynamic-read escape hatch, and the boolean
|
|
21
|
+
* parsing helpers. What does NOT belong here: `resolveEnv` — each package's
|
|
22
|
+
* resolver reads its own variables into its own shape and stays in that
|
|
23
|
+
* package's `env.ts`.
|
|
24
|
+
*/
|
|
25
|
+
/** One environment variable a package reads. */
|
|
26
|
+
export interface EnvVarSpec {
|
|
27
|
+
/** Variable name as it appears in the environment. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** What it controls. */
|
|
30
|
+
description: string;
|
|
31
|
+
/**
|
|
32
|
+
* Behaviour when the variable is unset. Omitted or null when there is no
|
|
33
|
+
* meaningful default to state.
|
|
34
|
+
*/
|
|
35
|
+
default?: string | null;
|
|
36
|
+
/**
|
|
37
|
+
* `true` when the package cannot do its job at all without it, `false`
|
|
38
|
+
* when optional; a string states the CONDITION under which it becomes
|
|
39
|
+
* required (e.g. "AUTH_MODE=password") — flattening that to a boolean
|
|
40
|
+
* would lose the only part a reader needs.
|
|
41
|
+
*/
|
|
42
|
+
required: boolean | string;
|
|
43
|
+
}
|
|
44
|
+
/** A family of reads whose variable NAME is data, not code. */
|
|
45
|
+
export interface DynamicEnvReadSpec {
|
|
46
|
+
/** Where the variable name comes from. */
|
|
47
|
+
source: string;
|
|
48
|
+
/** What the value is used for. */
|
|
49
|
+
description: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Call-time read of a single variable whose name is data (see the package's
|
|
53
|
+
* `DYNAMIC_ENV_READS`) or whose presence gates a feature. Never cache the
|
|
54
|
+
* result at module scope.
|
|
55
|
+
*/
|
|
56
|
+
export declare function readEnvVar(name: string, env?: NodeJS.ProcessEnv): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* The one way a token-valued boolean environment variable is parsed.
|
|
59
|
+
*
|
|
60
|
+
* Truthy: 1 / true / on / yes. Falsy: 0 / false / off / no. Matching is
|
|
61
|
+
* case-insensitive after trimming. Unset, empty, or any unrecognised token
|
|
62
|
+
* returns `defaultValue` — a typo in a flag must never silently flip a
|
|
63
|
+
* behaviour; it falls back to the documented default instead.
|
|
64
|
+
*/
|
|
65
|
+
export declare function envFlag(value: string | undefined, defaultValue: boolean): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Presence-based boolean: set to ANY non-empty value means on. This is the
|
|
68
|
+
* `NO_COLOR` convention (https://no-color.org) — `NO_COLOR=0` still disables
|
|
69
|
+
* color — so it must NOT go through `envFlag`. Use only for variables whose
|
|
70
|
+
* documented contract is presence, not a token.
|
|
71
|
+
*/
|
|
72
|
+
export declare function envPresent(value: string | undefined): boolean;
|
|
73
|
+
//# sourceMappingURL=env-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-core.d.ts","sourceRoot":"","sources":["../../src/config/env-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B;AAED,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAEpB;AAKD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAMjF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7D"}
|