@schlessera/brain-ui-server 0.32.0 → 0.33.1

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.
Files changed (48) hide show
  1. package/README.md +59 -1
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +2 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/bin/brain-ui-cron.d.ts +4 -0
  6. package/dist/bin/brain-ui-cron.d.ts.map +1 -0
  7. package/dist/bin/brain-ui-cron.js +140 -0
  8. package/dist/bin/brain-ui-cron.js.map +1 -0
  9. package/dist/brain/client.d.ts +9 -0
  10. package/dist/brain/client.d.ts.map +1 -1
  11. package/dist/brain/client.js +81 -4
  12. package/dist/brain/client.js.map +1 -1
  13. package/dist/config/env.d.ts +24 -5
  14. package/dist/config/env.d.ts.map +1 -1
  15. package/dist/config/env.js +44 -9
  16. package/dist/config/env.js.map +1 -1
  17. package/dist/cron/digest.d.ts +19 -0
  18. package/dist/cron/digest.d.ts.map +1 -0
  19. package/dist/cron/digest.js +26 -0
  20. package/dist/cron/digest.js.map +1 -0
  21. package/dist/cron/emit.d.ts +68 -0
  22. package/dist/cron/emit.d.ts.map +1 -0
  23. package/dist/cron/emit.js +171 -0
  24. package/dist/cron/emit.js.map +1 -0
  25. package/dist/cron/run-job.d.ts +48 -0
  26. package/dist/cron/run-job.d.ts.map +1 -0
  27. package/dist/cron/run-job.js +172 -0
  28. package/dist/cron/run-job.js.map +1 -0
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/middleware/origin.d.ts.map +1 -1
  34. package/dist/middleware/origin.js +22 -1
  35. package/dist/middleware/origin.js.map +1 -1
  36. package/dist/routes/brain.js +2 -2
  37. package/dist/routes/brain.js.map +1 -1
  38. package/package.json +6 -3
  39. package/src/app.ts +2 -1
  40. package/src/bin/brain-ui-cron.ts +178 -0
  41. package/src/brain/client.ts +96 -4
  42. package/src/config/env.ts +87 -8
  43. package/src/cron/digest.ts +45 -0
  44. package/src/cron/emit.ts +262 -0
  45. package/src/cron/run-job.ts +254 -0
  46. package/src/index.ts +5 -1
  47. package/src/middleware/origin.ts +21 -1
  48. package/src/routes/brain.ts +2 -2
@@ -15,7 +15,7 @@
15
15
  import { join } from "path";
16
16
  import { SEVERITIES } from "../observability/types.js";
17
17
  import { envFlag } from "./env-core.js";
18
- import { filterSubprocessEnv, WEB_SEARCH_PROVIDERS, } from "@schlessera/brain-ui-sdk/server";
18
+ import { filterSubprocessEnv, parseSubprocessEnvExtra, WEB_SEARCH_PROVIDERS, } from "@schlessera/brain-ui-sdk/server";
19
19
  /**
20
20
  * Every environment variable this package reads. Order groups by concern.
21
21
  * The env-parity gate (G4) asserts this list equals the package's env
@@ -35,6 +35,15 @@ export const ENV_VARS = [
35
35
  default: "/root",
36
36
  required: false,
37
37
  },
38
+ {
39
+ name: "BRAIN_UI_SUBPROCESS_ENV_EXTRA",
40
+ description: "Comma-separated environment variable names to admit to every child " +
41
+ "audience when an operator integration needs a variable outside the " +
42
+ "shipped allowlist. Names are trimmed; malformed entries are ignored; " +
43
+ "the control variable itself is never forwarded.",
44
+ default: "(empty)",
45
+ required: false,
46
+ },
38
47
  {
39
48
  name: "PI_CODING_AGENT_DIR",
40
49
  description: "pi config dir override — where the web-search settings write the " +
@@ -68,8 +77,10 @@ export const ENV_VARS = [
68
77
  },
69
78
  {
70
79
  name: "DB_PATH",
71
- description: "SQLite file for the UI's own database (sessions, passkeys, settings).",
72
- default: "./brain-ui.db",
80
+ description: "SQLite file for the UI's own database (sessions, passkeys, settings). " +
81
+ "The server factory defaults to ./brain-ui.db; brain-ui-cron defaults " +
82
+ "to the container path /data/db/brain-ui.db.",
83
+ default: "./brain-ui.db (server); /data/db/brain-ui.db (brain-ui-cron)",
73
84
  required: false,
74
85
  },
75
86
  {
@@ -489,13 +500,37 @@ export function resolveServerConfig(env = process.env) {
489
500
  };
490
501
  }
491
502
  /**
492
- * The filtered parent environment for spawned subprocesses (brain CLI,
493
- * whatsup), plus explicit overrides. The shared descriptor strips server-only
494
- * material while retaining all known subprocess capabilities and unknown
495
- * variables. This reads `process.env`, so it lives behind this chokepoint.
503
+ * Resolve the standalone cron bin's paths and allowlisted scheduled-job
504
+ * environment. The escape hatch is parsed here, at this package's sole env
505
+ * chokepoint, and its control variable is held back from the child.
506
+ */
507
+ export function resolveCronConfig(env = process.env, admittedNames = []) {
508
+ const subprocessEnvExtraNames = parseSubprocessEnvExtra([env.BRAIN_UI_SUBPROCESS_ENV_EXTRA, ...admittedNames].join(","));
509
+ return {
510
+ brainPath: env.BRAIN_PATH || "/data/brain",
511
+ dbPath: env.DB_PATH || "/data/db/brain-ui.db",
512
+ moduleDiscoveryEnv: filterPackageSubprocessEnv(env, "brainCli", subprocessEnvExtraNames),
513
+ childEnv: filterPackageSubprocessEnv(env, "cron", subprocessEnvExtraNames),
514
+ subprocessEnvExtraNames,
515
+ };
516
+ }
517
+ /**
518
+ * Build a package-owned child environment from an environment value.
519
+ */
520
+ function filterPackageSubprocessEnv(env, audience, extraNames = [], extra = {}) {
521
+ const operatorNames = parseSubprocessEnvExtra(env.BRAIN_UI_SUBPROCESS_ENV_EXTRA);
522
+ return {
523
+ ...filterSubprocessEnv(env, audience, [...operatorNames, ...extraNames]),
524
+ ...extra,
525
+ };
526
+ }
527
+ /**
528
+ * The allowlisted parent environment for a spawned subprocess, plus explicit
529
+ * overrides. The agent default preserves this exported helper's historical
530
+ * no-argument use; every ui-server spawn names its actual audience.
496
531
  */
497
- export function subprocessEnv(extra = {}) {
498
- return { ...filterSubprocessEnv(process.env), ...extra };
532
+ export function subprocessEnv(audience = "agent", extra = {}, extraNames = []) {
533
+ return filterPackageSubprocessEnv(process.env, audience, extraNames, extra);
499
534
  }
500
535
  /**
501
536
  * The pi config directory, resolved with EXACTLY the precedence pi-web-access
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** The standalone daily activity-digest job. Failures are deliberately loud. */
2
+ import { generateActivityDigest } from "../activity/digest.js";
3
+ import { createUiDb } from "../db/client.js";
4
+ interface TextSink {
5
+ write(text: string): unknown;
6
+ }
7
+ export interface DigestOptions {
8
+ dbPath: string;
9
+ stdout?: TextSink;
10
+ stderr?: TextSink;
11
+ }
12
+ export interface DigestDependencies {
13
+ createDb?: typeof createUiDb;
14
+ generateDigest?: typeof generateActivityDigest;
15
+ }
16
+ /** Generate and persist one digest, returning a process-compatible status. */
17
+ export declare function runDigest(options: DigestOptions, dependencies?: DigestDependencies): number;
18
+ export {};
19
+ //# sourceMappingURL=digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/cron/digest.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,UAAU,QAAQ;IAChB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,UAAU,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,sBAAsB,CAAC;CAChD;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,kBAAuB,GACpC,MAAM,CAqBR"}
@@ -0,0 +1,26 @@
1
+ /** The standalone daily activity-digest job. Failures are deliberately loud. */
2
+ import { generateActivityDigest } from "../activity/digest.js";
3
+ import { createUiDb } from "../db/client.js";
4
+ /** Generate and persist one digest, returning a process-compatible status. */
5
+ export function runDigest(options, dependencies = {}) {
6
+ const stdout = options.stdout ?? process.stdout;
7
+ const stderr = options.stderr ?? process.stderr;
8
+ const openDb = dependencies.createDb ?? createUiDb;
9
+ const generate = dependencies.generateDigest ?? generateActivityDigest;
10
+ let db;
11
+ try {
12
+ db = openDb(options.dbPath);
13
+ const digest = generate(db);
14
+ stdout.write(`[brain-digest] generated: ${digest.runs} runs, ${digest.failures} failures, $${digest.costUsd.toFixed(2)}\n`);
15
+ return 0;
16
+ }
17
+ catch (error) {
18
+ const message = error instanceof Error ? error.message : String(error);
19
+ stderr.write(`[brain-digest] failed: ${message}\n`);
20
+ return 1;
21
+ }
22
+ finally {
23
+ db?.close();
24
+ }
25
+ }
26
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/cron/digest.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiB7C,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CACvB,OAAsB,EACtB,eAAmC,EAAE;IAErC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,IAAI,UAAU,CAAC;IACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,IAAI,sBAAsB,CAAC;IACvE,IAAI,EAA6C,CAAC;IAElD,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CACV,6BAA6B,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC9G,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,EAAE,EAAE,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,68 @@
1
+ /** One cron manifest entry in `brain module list --json`. */
2
+ export interface BrainModuleListCronEntry {
3
+ name: string;
4
+ schedule: string;
5
+ command: string;
6
+ }
7
+ /** One enabled module in the core CLI's module-list payload. */
8
+ export interface BrainModuleListEnabledModule {
9
+ name: string;
10
+ key: string;
11
+ description: string | null;
12
+ types: string[];
13
+ commands: string[];
14
+ cron: BrainModuleListCronEntry[];
15
+ }
16
+ /** One disabled-but-available module in the core CLI's module-list payload. */
17
+ export interface BrainModuleListAvailableModule {
18
+ key: string;
19
+ description: string | null;
20
+ enabled: false;
21
+ }
22
+ /** The payload emitted by `brain module list --json`. */
23
+ export interface BrainModuleListPayload {
24
+ enabled: BrainModuleListEnabledModule[];
25
+ available: BrainModuleListAvailableModule[];
26
+ }
27
+ export interface EmitCrontabOptions {
28
+ /** Null means the core CLI was unavailable or did not return JSON. */
29
+ modules: BrainModuleListPayload | null;
30
+ /** Command prefix that records and runs one job. */
31
+ wrapperCommand: string;
32
+ /** Command executed inside the wrapper's `digest` job. */
33
+ digestCommand: string;
34
+ /** Complete `PATH=...` crontab line. */
35
+ pathLine: string;
36
+ /** System crontab user field. */
37
+ user: string;
38
+ /** Whether `scripts/jobs/scrape-all.ts` exists in the brain repository. */
39
+ legacyScraperPresent: boolean;
40
+ /** Valid names carried into each wrapper so the run process re-admits them. */
41
+ subprocessEnvExtraNames?: readonly string[];
42
+ }
43
+ /**
44
+ * Emit `/etc/cron.d/brain-ui` with the same byte layout as the deployment
45
+ * shell's historical `generate_crontab` function.
46
+ */
47
+ export declare function emitCrontab(options: EmitCrontabOptions): string;
48
+ /**
49
+ * NODE_ENV is in the descriptor because Bun uses it to choose `.env.<mode>` in
50
+ * every child spawned by the server. Scheduled jobs take a different path:
51
+ * they historically receive their environment through pam_env without
52
+ * NODE_ENV, and adding it would change which brain-repo env file their Bun
53
+ * commands load. The 0.33.1 allowlist keeps that historical behavior while
54
+ * widening the explicitly approved capability settings below.
55
+ */
56
+ export declare const CRON_ENV_EXCLUSIONS: ReadonlySet<string>;
57
+ /**
58
+ * Names emitted into `/etc/environment`: the SDK's cron audience minus the
59
+ * explicit exclusions, in {@link CRON_ENV_ORDER}.
60
+ *
61
+ * A variable that joins or leaves the cron audience and is not accounted for
62
+ * here throws at module load rather than silently changing what scheduled jobs
63
+ * can see.
64
+ */
65
+ export declare const CRON_ENV_NAMES: readonly string[];
66
+ /** Emit the pam_env input consumed by scheduled jobs. */
67
+ export declare function emitEnvironment(env: Record<string, string | undefined>, extraNames?: readonly string[]): string;
68
+ //# sourceMappingURL=emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/cron/emit.ts"],"names":[],"mappings":"AAMA,6DAA6D;AAC7D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,wBAAwB,EAAE,CAAC;CAClC;AAED,+EAA+E;AAC/E,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,SAAS,EAAE,8BAA8B,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvC,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,oBAAoB,EAAE,OAAO,CAAC;IAC9B,+EAA+E;IAC/E,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAkCD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAuE/D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAsC9E;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,mBAmB1B,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,UAAU,GAAE,SAAS,MAAM,EAAO,GACjC,MAAM,CAoBR"}
@@ -0,0 +1,171 @@
1
+ import { parseSubprocessEnvExtra, SUBPROCESS_ENV, } from "@schlessera/brain-ui-sdk/server";
2
+ const MODULE_NAME = /^[a-z0-9][a-z0-9-]{0,63}$/;
3
+ const CRON_NAME = /^[a-z0-9][a-z0-9-]{0,63}$/;
4
+ const CRON_SCHEDULE = /^[-0-9*,/ ]{1,100}$/;
5
+ const CRON_COMMAND = /^[A-Za-z0-9 _.:=@,/-]{1,200}$/;
6
+ // These use ^...$ without the `m` flag deliberately. In JavaScript `$`
7
+ // matches only at the true end of the string, so these are the correct
8
+ // translation of the bash jq/Oniguruma guards, which needed \A...\z because
9
+ // Oniguruma's `$` can match before a trailing newline.
10
+ function validModuleName(value) {
11
+ return typeof value === "string" && MODULE_NAME.test(value);
12
+ }
13
+ function validCronEntry(value) {
14
+ if (!value || typeof value !== "object")
15
+ return false;
16
+ const entry = value;
17
+ return (typeof entry.name === "string" &&
18
+ CRON_NAME.test(entry.name) &&
19
+ typeof entry.schedule === "string" &&
20
+ CRON_SCHEDULE.test(entry.schedule) &&
21
+ typeof entry.command === "string" &&
22
+ CRON_COMMAND.test(entry.command));
23
+ }
24
+ function assertSingleLine(name, value) {
25
+ if (/[\0\r\n]/.test(value)) {
26
+ throw new Error(`${name} must be a single line`);
27
+ }
28
+ }
29
+ /**
30
+ * Emit `/etc/cron.d/brain-ui` with the same byte layout as the deployment
31
+ * shell's historical `generate_crontab` function.
32
+ */
33
+ export function emitCrontab(options) {
34
+ const { modules, wrapperCommand, digestCommand, pathLine, user, legacyScraperPresent, subprocessEnvExtraNames = [], } = options;
35
+ assertSingleLine("wrapperCommand", wrapperCommand);
36
+ assertSingleLine("digestCommand", digestCommand);
37
+ assertSingleLine("pathLine", pathLine);
38
+ assertSingleLine("user", user);
39
+ const validatedExtraNames = parseSubprocessEnvExtra(subprocessEnvExtraNames.join(","));
40
+ const wrapper = validatedExtraNames.length === 0
41
+ ? wrapperCommand
42
+ : `${wrapperCommand} --subprocess-env-extra ${validatedExtraNames.join(",")}`;
43
+ const lines = [
44
+ "# Generated by entrypoint.sh — regenerated on each container start.",
45
+ pathLine,
46
+ "",
47
+ "# Base jobs",
48
+ `0 2 * * * ${user} cd /data/brain && ${wrapper} sync -- sh -c 'brain sync && brain index' 2>&1 | logger -t brain-sync`,
49
+ `0 3 * * * ${user} cd /data/brain && ${wrapper} validate -- brain validate 2>&1 | logger -t brain-validate`,
50
+ `0 7 * * * ${user} cd /data/brain && ${wrapper} maintain -- brain maintain 2>&1 | logger -t brain-maintain`,
51
+ `30 7 * * * ${user} cd /data/brain && ${wrapper} digest -- ${digestCommand} 2>&1 | logger -t brain-digest`,
52
+ "",
53
+ "# Module jobs (from enabled modules' cron manifests, when exposed)",
54
+ ];
55
+ const enabled = modules && Array.isArray(modules.enabled) ? modules.enabled : [];
56
+ if (modules === null) {
57
+ lines.push("# (brain module list unavailable — module cron skipped)");
58
+ }
59
+ else {
60
+ for (const module of enabled) {
61
+ if (!module || typeof module !== "object" || !validModuleName(module.name))
62
+ continue;
63
+ const entries = Array.isArray(module.cron) ? module.cron : [];
64
+ for (const entry of entries) {
65
+ if (!validCronEntry(entry))
66
+ continue;
67
+ const jobName = `${module.name}-${entry.name}`;
68
+ lines.push(`${entry.schedule} ${user} cd /data/brain && ${wrapper} ${jobName} -- brain ${entry.command} 2>&1 | logger -t brain-${jobName}`);
69
+ }
70
+ }
71
+ }
72
+ const jobsModuleEnabled = enabled.some((module) => module &&
73
+ typeof module === "object" &&
74
+ Array.isArray(module.commands) &&
75
+ module.commands.includes("jobs"));
76
+ // Keep the historical standalone scraper fallback for brain repositories
77
+ // that have not moved their jobs workflow to an enabled module.
78
+ if (!jobsModuleEnabled && legacyScraperPresent) {
79
+ lines.push(`0 4 * * * ${user} cd /data/brain && ${wrapper} jobs -- bun scripts/jobs/scrape-all.ts --api-only 2>&1 | logger -t brain-jobs`);
80
+ }
81
+ lines.push("");
82
+ return `${lines.join("\n")}\n`;
83
+ }
84
+ /**
85
+ * NODE_ENV is in the descriptor because Bun uses it to choose `.env.<mode>` in
86
+ * every child spawned by the server. Scheduled jobs take a different path:
87
+ * they historically receive their environment through pam_env without
88
+ * NODE_ENV, and adding it would change which brain-repo env file their Bun
89
+ * commands load. The 0.33.1 allowlist keeps that historical behavior while
90
+ * widening the explicitly approved capability settings below.
91
+ */
92
+ export const CRON_ENV_EXCLUSIONS = new Set(["NODE_ENV"]);
93
+ /**
94
+ * The order the shell emitted `/etc/environment` in. pam_env does not care,
95
+ * but the historical golden is byte-exact and this is what it is compared
96
+ * against.
97
+ *
98
+ * Order lives HERE, not in the SDK descriptor: the SET is owned by
99
+ * `SUBPROCESS_ENV`'s cron audience (see {@link CRON_ENV_NAMES}, which fails
100
+ * loudly if the two ever disagree), and making an unrelated file's declaration
101
+ * order load-bearing for a cosmetic property would be a trap for whoever next
102
+ * tidies it.
103
+ */
104
+ const CRON_ENV_ORDER = [
105
+ "PATH",
106
+ "BRAIN_PATH",
107
+ "BRAIN_ROOT",
108
+ "TZ",
109
+ "XDG_BIN_HOME",
110
+ "DB_PATH",
111
+ "BRAIN_RERANK_MODE",
112
+ "SCRAPE_CHROME_URL",
113
+ "CHROME_CDP_URL",
114
+ "SCRAPE_CHROME_PATH",
115
+ "SCRAPE_CHROME_NO_SANDBOX",
116
+ "SCRAPE_USER_AGENT",
117
+ "SCRAPE_RESPECT_ROBOTS",
118
+ "GEMINI_API_KEY",
119
+ "GEMINI_BASE_URL",
120
+ "OPENAI_API_KEY",
121
+ "OPENAI_BASE_URL",
122
+ "GITHUB_TOKEN",
123
+ "BRAIN_UI_SYNC_GITHUB_TOKEN",
124
+ "CLAUDE_CODE_OAUTH_TOKEN",
125
+ "BRAIN_UI_PRICING_DISCOVERY",
126
+ "BRAIN_UI_PRICING_TTL_HOURS",
127
+ ];
128
+ /**
129
+ * Names emitted into `/etc/environment`: the SDK's cron audience minus the
130
+ * explicit exclusions, in {@link CRON_ENV_ORDER}.
131
+ *
132
+ * A variable that joins or leaves the cron audience and is not accounted for
133
+ * here throws at module load rather than silently changing what scheduled jobs
134
+ * can see.
135
+ */
136
+ export const CRON_ENV_NAMES = Object.freeze((() => {
137
+ const audience = Object.entries(SUBPROCESS_ENV)
138
+ .filter(([, audiences]) => audiences.includes("cron"))
139
+ .map(([name]) => name)
140
+ .filter((name) => !CRON_ENV_EXCLUSIONS.has(name));
141
+ const ordered = new Set(CRON_ENV_ORDER);
142
+ const missing = audience.filter((name) => !ordered.has(name));
143
+ const extra = CRON_ENV_ORDER.filter((name) => !audience.includes(name));
144
+ if (missing.length > 0 || extra.length > 0) {
145
+ throw new Error("cron environment list drifted from SUBPROCESS_ENV's cron audience: " +
146
+ `unordered=[${missing.join(", ")}] unknown=[${extra.join(", ")}]`);
147
+ }
148
+ return CRON_ENV_ORDER.slice();
149
+ })());
150
+ /** Emit the pam_env input consumed by scheduled jobs. */
151
+ export function emitEnvironment(env, extraNames = []) {
152
+ const lines = [];
153
+ const names = [
154
+ ...CRON_ENV_NAMES,
155
+ ...parseSubprocessEnvExtra(extraNames.join(",")).filter((name) => !CRON_ENV_NAMES.includes(name)),
156
+ ];
157
+ for (const name of names) {
158
+ const value = env[name];
159
+ // Match the shell's `[ -n ]`: both unset and empty values are omitted.
160
+ if (!value)
161
+ continue;
162
+ // /etc/environment has no shell-safe interpolation layer. Reject anything
163
+ // that could terminate/escape the quoted value or create another line.
164
+ if (/[\0"\\\r\n]/.test(value)) {
165
+ throw new Error(`cannot emit unsafe /etc/environment value for ${name}`);
166
+ }
167
+ lines.push(`${name}="${value}"`);
168
+ }
169
+ return lines.length === 0 ? "" : `${lines.join("\n")}\n`;
170
+ }
171
+ //# sourceMappingURL=emit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/cron/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,cAAc,GAEf,MAAM,iCAAiC,CAAC;AAiDzC,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD,uEAAuE;AACvE,uEAAuE;AACvE,4EAA4E;AAC5E,uDAAuD;AACvD,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,KAA0C,CAAC;IACzD,OAAO,CACL,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACnD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,EACJ,OAAO,EACP,cAAc,EACd,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,oBAAoB,EACpB,uBAAuB,GAAG,EAAE,GAC7B,GAAG,OAAO,CAAC;IAEZ,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACnD,gBAAgB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACjD,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE/B,MAAM,mBAAmB,GAAG,uBAAuB,CACjD,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAClC,CAAC;IACF,MAAM,OAAO,GACX,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAC9B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,cAAc,2BAA2B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAElF,MAAM,KAAK,GAAG;QACZ,qEAAqE;QACrE,QAAQ;QACR,EAAE;QACF,aAAa;QACb,aAAa,IAAI,sBAAsB,OAAO,wEAAwE;QACtH,aAAa,IAAI,sBAAsB,OAAO,6DAA6D;QAC3G,aAAa,IAAI,sBAAsB,OAAO,6DAA6D;QAC3G,cAAc,IAAI,sBAAsB,OAAO,cAAc,aAAa,gCAAgC;QAC1G,EAAE;QACF,oEAAoE;KACrE,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACrC,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,sBAAsB,OAAO,IAAI,OAAO,aAAa,KAAK,CAAC,OAAO,2BAA2B,OAAO,EAAE,CAChI,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CACpC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM;QACN,OAAO,MAAM,KAAK,QAAQ;QAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnC,CAAC;IACF,yEAAyE;IACzE,gEAAgE;IAChE,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CACR,aAAa,IAAI,sBAAsB,OAAO,gFAAgF,CAC/H,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,cAAc,GAAsB;IACxC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,IAAI;IACJ,cAAc;IACd,SAAS;IACT,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,0BAA0B;IAC1B,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,4BAA4B;IAC5B,yBAAyB;IACzB,4BAA4B;IAC5B,4BAA4B;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE;IACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;SAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CACvB,SAA8C,CAAC,QAAQ,CAAC,MAAM,CAAC,CACjE;SACA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,qEAAqE;YACnE,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC,CAAC,EAAE,CACL,CAAC;AAEF,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAC7B,GAAuC,EACvC,aAAgC,EAAE;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG;QACZ,GAAG,cAAc;QACjB,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CACrD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC;KACF,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,uEAAuE;QACvE,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,48 @@
1
+ /** Tail of stderr retained for the cron_runs error row. */
2
+ export declare const STDERR_TAIL_CHARS = 2000;
3
+ /** Tail of combined stdout/stderr retained as the job_output activity event. */
4
+ export declare const OUTPUT_TAIL_CHARS = 8000;
5
+ /** Heartbeat cadence, comfortably inside the activity store's stale threshold. */
6
+ export declare const HEARTBEAT_MS = 30000;
7
+ /** Child-visible path where span-sink JSONL may be appended. */
8
+ export declare const SPAN_SINK_ENV = "BRAIN_ACTIVITY_SPAN_SINK";
9
+ interface TextSink {
10
+ write(text: string): unknown;
11
+ }
12
+ interface SpawnedJob {
13
+ stdout: ReadableStream<Uint8Array>;
14
+ stderr: ReadableStream<Uint8Array>;
15
+ exited: Promise<number>;
16
+ signalCode: string | null;
17
+ }
18
+ interface RunRecorder {
19
+ finish(error: string | undefined, output: string, exitCode: number): void;
20
+ close(): void;
21
+ }
22
+ export interface RunJobOptions {
23
+ jobName: string;
24
+ command: string[];
25
+ dbPath: string;
26
+ childEnv: Record<string, string | undefined>;
27
+ stdout?: TextSink;
28
+ stderr?: TextSink;
29
+ }
30
+ export interface RunJobDependencies {
31
+ spawn?: (command: string[], options: {
32
+ stdin: "inherit";
33
+ stdout: "pipe";
34
+ stderr: "pipe";
35
+ env: Record<string, string | undefined>;
36
+ }) => SpawnedJob;
37
+ sinkPath?: string;
38
+ startRecord?: (name: string, sinkPath: string, command: string[], dbPath: string, stderr: TextSink) => Promise<RunRecorder | null>;
39
+ removeSink?: (path: string) => void;
40
+ }
41
+ /** Forward a stream verbatim while exposing decoded chunks for tail capture. */
42
+ export declare function teeStream(stream: ReadableStream<Uint8Array>, sink: TextSink, onText: (text: string) => void): Promise<void>;
43
+ /** Keep the last `cap` characters, never the head. */
44
+ export declare function appendTail(current: string, text: string, cap: number): string;
45
+ /** Run a job as argv (never through a shell) and return its exact exit code. */
46
+ export declare function runJob(options: RunJobOptions, dependencies?: RunJobDependencies): Promise<number>;
47
+ export {};
48
+ //# sourceMappingURL=run-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-job.d.ts","sourceRoot":"","sources":["../../src/cron/run-job.ts"],"names":[],"mappings":"AAYA,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,kFAAkF;AAClF,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,aAAa,6BAA6B,CAAC;AAExD,UAAU,QAAQ;IAChB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1E,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;QACP,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;KACzC,KACE,UAAU,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,KACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAUD,gFAAgF;AAChF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7E;AA0FD,gFAAgF;AAChF,wBAAsB,MAAM,CAC1B,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,MAAM,CAAC,CAmEjB"}