robrain 2.4.6 → 2.4.8

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 (77) hide show
  1. package/README.md +3 -0
  2. package/dist/commands/check.d.ts.map +1 -1
  3. package/dist/commands/check.js +6 -8
  4. package/dist/commands/check.js.map +1 -1
  5. package/dist/commands/explain.d.ts.map +1 -1
  6. package/dist/commands/explain.js +5 -8
  7. package/dist/commands/explain.js.map +1 -1
  8. package/dist/commands/export-interchange.d.ts.map +1 -1
  9. package/dist/commands/export-interchange.js +4 -9
  10. package/dist/commands/export-interchange.js.map +1 -1
  11. package/dist/commands/export-memory.d.ts.map +1 -1
  12. package/dist/commands/export-memory.js +4 -9
  13. package/dist/commands/export-memory.js.map +1 -1
  14. package/dist/commands/inject.d.ts.map +1 -1
  15. package/dist/commands/inject.js +5 -9
  16. package/dist/commands/inject.js.map +1 -1
  17. package/dist/commands/install.d.ts +7 -1
  18. package/dist/commands/install.d.ts.map +1 -1
  19. package/dist/commands/install.js +40 -3
  20. package/dist/commands/install.js.map +1 -1
  21. package/dist/commands/install.test.js +89 -0
  22. package/dist/commands/install.test.js.map +1 -1
  23. package/dist/commands/outcomes.d.ts.map +1 -1
  24. package/dist/commands/outcomes.js +5 -13
  25. package/dist/commands/outcomes.js.map +1 -1
  26. package/dist/commands/review.d.ts.map +1 -1
  27. package/dist/commands/review.js +4 -5
  28. package/dist/commands/review.js.map +1 -1
  29. package/dist/commands/status.d.ts +20 -0
  30. package/dist/commands/status.d.ts.map +1 -1
  31. package/dist/commands/status.js +87 -29
  32. package/dist/commands/status.js.map +1 -1
  33. package/dist/commands/status.test.d.ts +2 -0
  34. package/dist/commands/status.test.d.ts.map +1 -0
  35. package/dist/commands/status.test.js +201 -0
  36. package/dist/commands/status.test.js.map +1 -0
  37. package/dist/commands/synth.d.ts.map +1 -1
  38. package/dist/commands/synth.js +54 -15
  39. package/dist/commands/synth.js.map +1 -1
  40. package/dist/commands/synth.test.d.ts +2 -0
  41. package/dist/commands/synth.test.d.ts.map +1 -0
  42. package/dist/commands/synth.test.js +161 -0
  43. package/dist/commands/synth.test.js.map +1 -0
  44. package/dist/index.js +1 -1
  45. package/dist/lib/auth.d.ts +30 -2
  46. package/dist/lib/auth.d.ts.map +1 -1
  47. package/dist/lib/auth.js +45 -5
  48. package/dist/lib/auth.js.map +1 -1
  49. package/dist/lib/auth.test.d.ts +2 -0
  50. package/dist/lib/auth.test.d.ts.map +1 -0
  51. package/dist/lib/auth.test.js +46 -0
  52. package/dist/lib/auth.test.js.map +1 -0
  53. package/dist/lib/config.d.ts +7 -0
  54. package/dist/lib/config.d.ts.map +1 -1
  55. package/dist/lib/config.js +12 -0
  56. package/dist/lib/config.js.map +1 -1
  57. package/dist/lib/load-env.d.ts +9 -0
  58. package/dist/lib/load-env.d.ts.map +1 -1
  59. package/dist/lib/load-env.js +13 -2
  60. package/dist/lib/load-env.js.map +1 -1
  61. package/dist/lib/perception-errors.d.ts +33 -0
  62. package/dist/lib/perception-errors.d.ts.map +1 -0
  63. package/dist/lib/perception-errors.js +104 -0
  64. package/dist/lib/perception-errors.js.map +1 -0
  65. package/dist/lib/perception-errors.test.d.ts +2 -0
  66. package/dist/lib/perception-errors.test.d.ts.map +1 -0
  67. package/dist/lib/perception-errors.test.js +64 -0
  68. package/dist/lib/perception-errors.test.js.map +1 -0
  69. package/dist/lib/project.d.ts +9 -0
  70. package/dist/lib/project.d.ts.map +1 -1
  71. package/dist/lib/project.js +17 -9
  72. package/dist/lib/project.js.map +1 -1
  73. package/package.json +2 -2
  74. package/vendor/sensing-mcp/dist/index.js +1 -1
  75. package/vendor/sensing-mcp/package.json +1 -1
  76. package/vendor/synthesis/dist/index.js +10 -1
  77. package/vendor/synthesis/package.json +1 -1
@@ -0,0 +1,104 @@
1
+ // src/lib/perception-errors.ts
2
+ // ─────────────────────────────────────────────────────────────
3
+ // Shared explanations for a failed Perception call.
4
+ //
5
+ // Every consumer used to print
6
+ // "Could not fetch decisions (401). Is Perception running? … pnpm docker:up"
7
+ // which is wrong twice for a cloud user: the store IS running, and there is no
8
+ // local Docker stack to start. 401 and 404 each have one likely cause worth
9
+ // naming — reported by a user who hit both while installing on two machines.
10
+ //
11
+ // Covers both failure shapes: an HTTP status we can read (explainPerceptionFailure)
12
+ // and never reaching the store at all (explainPerceptionUnreachable) — the second
13
+ // is the path users hit most, and it carried the same wrong advice.
14
+ // ─────────────────────────────────────────────────────────────
15
+ import chalk from 'chalk';
16
+ /** Point a self-hosted user at their own stack; never a cloud user. */
17
+ function startStackHints(ctx) {
18
+ return ctx.cloud
19
+ ? [`Store: ${ctx.perceptionUrl}`]
20
+ : [`Expected at: ${ctx.perceptionUrl}`, 'Start it with `npx robrain up` (or `pnpm docker:up` from a clone).'];
21
+ }
22
+ /** Auth-failure hints, or [] when the status is not an auth failure. */
23
+ export function perceptionAuthHints(status, ctx) {
24
+ if (status !== 401 && status !== 403)
25
+ return [];
26
+ return ctx.cloud
27
+ ? [
28
+ // Observed: installing on a second machine left the first one 401ing.
29
+ 'Installing RoBrain on another machine can replace this machine\'s key.',
30
+ 'Re-run `npx robrain install` here to get a working one.',
31
+ ]
32
+ : [
33
+ 'The key in ~/.robrain/config.json must match Perception\'s PERCEPTION_API_KEY.',
34
+ 'Check your .env, then re-run `npx robrain install --self-hosted`.',
35
+ ];
36
+ }
37
+ /**
38
+ * @param action what the caller was doing, for the unclassified fallback
39
+ * (e.g. "fetch decisions", "scan for prior rejections").
40
+ */
41
+ export function explainPerceptionFailure(status, ctx, action = 'fetch decisions') {
42
+ const authHints = perceptionAuthHints(status, ctx);
43
+ if (authHints.length > 0) {
44
+ return { headline: `Memory store rejected this API key (${status})`, hints: authHints };
45
+ }
46
+ if (status === 404) {
47
+ return {
48
+ headline: 'This project is not in your memory space (404)',
49
+ hints: [
50
+ 'Never initialized here? Run `npx robrain init-project` from the project root.',
51
+ ctx.cloud
52
+ // A teammate's project is invisible — not empty — until you are in their team.
53
+ ? 'Created by a teammate? Ask to be added to their team; until then it is not visible to you.'
54
+ : 'Expected it to exist? Check which id this directory maps to with `npx robrain status`.',
55
+ ],
56
+ };
57
+ }
58
+ if (status >= 500) {
59
+ return {
60
+ headline: `Memory store errored (${status})`,
61
+ hints: ctx.cloud
62
+ ? ['Server-side — retry shortly, then contact support@roryplans.ai if it persists.']
63
+ : ['Check Perception\'s logs: docker logs robrain-perception'],
64
+ };
65
+ }
66
+ return { headline: `Could not ${action} (${status})`, hints: startStackHints(ctx) };
67
+ }
68
+ /** The store was never reached — DNS, refused connection, timeout. */
69
+ export function explainPerceptionUnreachable(ctx) {
70
+ return {
71
+ headline: 'Could not reach the memory store',
72
+ hints: ctx.cloud
73
+ ? [
74
+ `Store: ${ctx.perceptionUrl}`,
75
+ 'Check your network connection; if it persists, contact support@roryplans.ai.',
76
+ ]
77
+ : startStackHints(ctx),
78
+ };
79
+ }
80
+ function emit(sink, { headline, hints }) {
81
+ sink.fail(headline);
82
+ for (const hint of hints)
83
+ console.log(chalk.dim(` ${hint}`));
84
+ console.log();
85
+ }
86
+ /**
87
+ * Print a status failure and exit.
88
+ * @param exitCode callers with their own contract override it — `robrain check`
89
+ * reserves 1 for "a rejection matched" and uses 2 for "could not scan".
90
+ */
91
+ export function failPerception(sink, status, ctx, action, exitCode = 1) {
92
+ emit(sink, explainPerceptionFailure(status, ctx, action));
93
+ process.exit(exitCode);
94
+ }
95
+ /** Print an unreachable-store failure and exit. */
96
+ export function failPerceptionUnreachable(sink, ctx, exitCode = 1) {
97
+ emit(sink, explainPerceptionUnreachable(ctx));
98
+ process.exit(exitCode);
99
+ }
100
+ /** Console-based sink for commands that do not use a spinner. */
101
+ export function consoleFailSink() {
102
+ return { fail: (text) => console.error(chalk.red(` ✗ ${text}`)) };
103
+ }
104
+ //# sourceMappingURL=perception-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perception-errors.js","sourceRoot":"","sources":["../../src/lib/perception-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=perception-errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perception-errors.test.d.ts","sourceRoot":"","sources":["../../src/lib/perception-errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { explainPerceptionFailure, explainPerceptionUnreachable, } from './perception-errors.js';
4
+ const CLOUD = { cloud: true, perceptionUrl: 'https://api.roryplans.ai' };
5
+ const LOCAL = { cloud: false, perceptionUrl: 'http://127.0.0.1:3001' };
6
+ describe('explainPerceptionFailure', () => {
7
+ it('names the second-machine cause for a rejected key on cloud', () => {
8
+ // Reported: install on VM2 left VM1 401ing, and vice versa.
9
+ const { headline, hints } = explainPerceptionFailure(401, CLOUD);
10
+ assert.match(headline, /rejected this API key \(401\)/);
11
+ assert.match(hints.join(' '), /another machine/);
12
+ assert.match(hints.join(' '), /npx robrain install/);
13
+ });
14
+ it('points a self-hosted 401 at the key mismatch instead', () => {
15
+ const { hints } = explainPerceptionFailure(401, LOCAL);
16
+ assert.match(hints.join(' '), /PERCEPTION_API_KEY/);
17
+ assert.doesNotMatch(hints.join(' '), /another machine/);
18
+ });
19
+ it('treats 403 like 401', () => {
20
+ assert.match(explainPerceptionFailure(403, CLOUD).headline, /rejected this API key/);
21
+ });
22
+ it('explains a 404 as scope, not emptiness — including the team case', () => {
23
+ // Reported: a new account got 404 until it was added to the owning team.
24
+ const { headline, hints } = explainPerceptionFailure(404, CLOUD);
25
+ assert.match(headline, /not in your memory space/);
26
+ assert.match(hints.join(' '), /init-project/);
27
+ assert.match(hints.join(' '), /team/);
28
+ });
29
+ it('does not blame the team on a self-hosted 404', () => {
30
+ const { hints } = explainPerceptionFailure(404, LOCAL);
31
+ assert.match(hints.join(' '), /init-project/);
32
+ assert.doesNotMatch(hints.join(' '), /team/);
33
+ });
34
+ it('never tells a cloud user to start a local stack', () => {
35
+ // The old message said "Is Perception running? … pnpm docker:up" for every
36
+ // status — wrong twice over when the store is managed.
37
+ for (const status of [401, 403, 404, 500, 502, 418]) {
38
+ const text = JSON.stringify(explainPerceptionFailure(status, CLOUD));
39
+ assert.doesNotMatch(text, /docker:up|robrain up/, `status ${status} suggested starting a local stack`);
40
+ }
41
+ });
42
+ it('does point a self-hosted user at their stack for an unclassified failure', () => {
43
+ const { hints } = explainPerceptionFailure(418, LOCAL);
44
+ assert.match(hints.join(' '), /robrain up|docker:up/);
45
+ });
46
+ it('routes 5xx to the right owner per mode', () => {
47
+ assert.match(explainPerceptionFailure(503, CLOUD).hints.join(' '), /support@roryplans\.ai/);
48
+ assert.match(explainPerceptionFailure(503, LOCAL).hints.join(' '), /docker logs/);
49
+ });
50
+ });
51
+ describe('explainPerceptionUnreachable', () => {
52
+ it('never tells a cloud user to start a local stack on network failure', () => {
53
+ // The path Bug 1/2 hit: catch blocks used to print pnpm docker:up even for
54
+ // managed installs. Unreachable must stay cloud-aware too.
55
+ const text = JSON.stringify(explainPerceptionUnreachable(CLOUD));
56
+ assert.doesNotMatch(text, /docker:up|robrain up/);
57
+ assert.match(text, /network|support@roryplans\.ai/i);
58
+ });
59
+ it('points a self-hosted user at their stack when the store is unreachable', () => {
60
+ const { hints } = explainPerceptionUnreachable(LOCAL);
61
+ assert.match(hints.join(' '), /robrain up|docker:up/);
62
+ });
63
+ });
64
+ //# sourceMappingURL=perception-errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perception-errors.test.js","sourceRoot":"","sources":["../../src/lib/perception-errors.test.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,15 @@ export interface ProjectInfo {
8
8
  }
9
9
  /** Derive a stable project ID from the working directory path */
10
10
  export declare function deriveProjectId(cwd: string): string;
11
+ /**
12
+ * The editor file pinning this directory's project_id, if any — with the file
13
+ * it came from, so callers can name it instead of guessing (init-project
14
+ * writes all three; the Cursor rule is easy to forget it exists).
15
+ */
16
+ export declare function findPinnedProjectId(dir: string): {
17
+ id: string;
18
+ source: string;
19
+ } | null;
11
20
  /** Collect all available context from the project root */
12
21
  export declare function gatherProjectInfo(cwd: string): ProjectInfo;
13
22
  /** Format project info as context string for Haiku warm-start call */
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAW,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAQ,MAAM,EAAE,CAAA;IACrB,MAAM,EAAO,MAAM,CAAA;IACnB,OAAO,EAAM,MAAM,CAAA;CACpB;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAiBD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAgE1D;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAS1D;AAKD,sEAAsE;AACtE,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,WAAW;AACjB,4FAA4F;AAC5F,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAgHpD"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAW,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAQ,MAAM,EAAE,CAAA;IACrB,MAAM,EAAO,MAAM,CAAA;IACnB,OAAO,EAAM,MAAM,CAAA;CACpB;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYtF;AAOD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAgE1D;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAS1D;AAKD,sEAAsE;AACtE,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,WAAW;AACjB,4FAA4F;AAC5F,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAgHpD"}
@@ -12,22 +12,30 @@ import { createHash } from 'crypto';
12
12
  export function deriveProjectId(cwd) {
13
13
  return createHash('sha256').update(cwd).digest('hex').slice(0, 12);
14
14
  }
15
- /** Read the project_id written by init-project from CLAUDE.md / AGENTS.md / Cursor rule */
16
- function readProjectIdFromEditorFiles(dir) {
15
+ /**
16
+ * The editor file pinning this directory's project_id, if any — with the file
17
+ * it came from, so callers can name it instead of guessing (init-project
18
+ * writes all three; the Cursor rule is easy to forget it exists).
19
+ */
20
+ export function findPinnedProjectId(dir) {
17
21
  const candidates = [
18
- join(dir, 'CLAUDE.md'),
19
- join(dir, 'AGENTS.md'),
20
- join(dir, '.cursor', 'rules', 'robrain.mdc'),
22
+ ['CLAUDE.md', join(dir, 'CLAUDE.md')],
23
+ ['AGENTS.md', join(dir, 'AGENTS.md')],
24
+ ['.cursor/rules/robrain.mdc', join(dir, '.cursor', 'rules', 'robrain.mdc')],
21
25
  ];
22
- for (const p of candidates) {
23
- if (!existsSync(p))
26
+ for (const [source, path] of candidates) {
27
+ if (!existsSync(path))
24
28
  continue;
25
- const match = readFileSync(p, 'utf8').match(/project_id="([^"]+)"/);
29
+ const match = readFileSync(path, 'utf8').match(/project_id="([^"]+)"/);
26
30
  if (match?.[1])
27
- return match[1].trim();
31
+ return { id: match[1].trim(), source };
28
32
  }
29
33
  return null;
30
34
  }
35
+ /** Read the project_id written by init-project from CLAUDE.md / AGENTS.md / Cursor rule */
36
+ function readProjectIdFromEditorFiles(dir) {
37
+ return findPinnedProjectId(dir)?.id ?? null;
38
+ }
31
39
  /** Collect all available context from the project root */
32
40
  export function gatherProjectInfo(cwd) {
33
41
  const id = readProjectIdFromEditorFiles(cwd) ?? deriveProjectId(cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robrain",
3
- "version": "2.4.6",
3
+ "version": "2.4.8",
4
4
  "type": "module",
5
5
  "description": "RoBrain CLI for installation, setup, and memory workflows",
6
6
  "author": "Rory Plans, Inc.",
@@ -57,7 +57,7 @@
57
57
  "build": "tsc",
58
58
  "dev": "tsc --watch",
59
59
  "typecheck": "tsc --noEmit",
60
- "test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/editor.stale-block.test.js dist/lib/release-guard.test.js dist/lib/mcp-bundle.test.js dist/lib/control-bundle.test.js dist/lib/claude-plugin.test.js dist/lib/hermes-plugin.test.js dist/lib/codex-hooks.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js dist/commands/mcp.test.js dist/commands/install.test.js dist/lib/synthesis-bundle.test.js",
60
+ "test": "pnpm build && node --test dist/lib/editor.codex.test.js dist/lib/editor.stale-block.test.js dist/lib/release-guard.test.js dist/lib/auth.test.js dist/lib/perception-errors.test.js dist/lib/mcp-bundle.test.js dist/lib/control-bundle.test.js dist/lib/claude-plugin.test.js dist/lib/hermes-plugin.test.js dist/lib/codex-hooks.test.js dist/commands/outcomes.test.js dist/commands/export-interchange.test.js dist/commands/up.test.js dist/commands/mcp.test.js dist/commands/install.test.js dist/commands/synth.test.js dist/commands/status.test.js dist/lib/synthesis-bundle.test.js",
61
61
  "pack:verify": "node scripts/verify-publish-tarball.mjs",
62
62
  "postinstall": "node scripts/chmod-bin.cjs"
63
63
  }
@@ -23297,7 +23297,7 @@ function resolveSessionId(raw) {
23297
23297
  function buildServer() {
23298
23298
  const server = new McpServer({
23299
23299
  name: "sensing-mcp",
23300
- version: "2.4.6"
23300
+ version: "2.4.8"
23301
23301
  });
23302
23302
  server.tool(
23303
23303
  "sensing_start_session",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robrain/sensing-mcp",
3
- "version": "2.4.6",
3
+ "version": "2.4.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js"
@@ -16501,7 +16501,16 @@ var config = {
16501
16501
  };
16502
16502
  function requireEnv(key) {
16503
16503
  const v2 = process.env[key];
16504
- if (!v2) throw new Error(`Missing env var: ${key}`);
16504
+ if (!v2) {
16505
+ const hints = {
16506
+ DATABASE_URL: "Synthesis reads the decision store directly, so it needs a Postgres URL.\n \u2022 Self-hosted: start the stack with `npx robrain up` (writes ~/.robrain/stack/.env),\n or run from a robrain checkout whose .env has DATABASE_URL (or set ROBRAIN_REPO to it).\n \u2022 Rory Plans cloud: there is no local store \u2014 Synthesis runs server-side, and its\n results arrive via the always-on summary and `npx robrain review`."
16507
+ };
16508
+ const hint = hints[key];
16509
+ throw new Error(`Missing env var: ${key}${hint ? `
16510
+
16511
+ ${hint}
16512
+ ` : ""}`);
16513
+ }
16505
16514
  return v2;
16506
16515
  }
16507
16516
  if (config.llmProvider === "anthropic" && !config.anthropicKey) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robrain/synthesis",
3
- "version": "2.4.6",
3
+ "version": "2.4.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js"