robrain 2.4.2 → 2.4.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoCA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqMnD"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoCA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkNnD"}
@@ -8,7 +8,7 @@ import { homedir } from 'os';
8
8
  import { join } from 'path';
9
9
  import { cwd } from 'process';
10
10
  import { readConfig, isAuthenticated } from '../lib/config.js';
11
- import { sensingBundleReady, resolveInstalledSensingMcpDir } from '../lib/mcp-bundle.js';
11
+ import { controlBundleReady, sensingBundleReady, resolveInstalledSensingMcpDir } from '../lib/mcp-bundle.js';
12
12
  import { detectEditors, resolveOpenAiBaseUrlFromEnv, usingLocalOpenAi } from '../lib/editor.js';
13
13
  import { gatherProjectInfo } from '../lib/project.js';
14
14
  const ROBRAIN_MCP_DIR = join(homedir(), '.robrain', 'mcp');
@@ -70,6 +70,18 @@ export async function doctorCommand() {
70
70
  hint: 'Reinstall: npm install -g robrain@latest (or npx robrain@latest mcp from a built clone)',
71
71
  });
72
72
  }
73
+ // 2b — Control MCP bundle (cloud installs only: `robrain install` downloads
74
+ // it from the Rory Plans API; OSS self-hosted has no Control by design).
75
+ if (config.thin) {
76
+ checks.push(controlBundleReady(ROBRAIN_MCP_DIR)
77
+ ? { level: 'pass', label: 'Control MCP bundle', detail: join(ROBRAIN_MCP_DIR, 'control') }
78
+ : {
79
+ level: 'warn',
80
+ label: 'Control MCP bundle',
81
+ detail: `no bundle under ${join(ROBRAIN_MCP_DIR, 'control')} — automatic injection disabled`,
82
+ hint: 'Re-run: npx robrain install (downloads Control from roryplans.ai)',
83
+ });
84
+ }
73
85
  // 3 — editor wiring (all editor config formats mention the server by name)
74
86
  const editors = detectEditors();
75
87
  const wired = editors.filter(e => {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,wDAAwD;AACxD,uEAAuE;AACvE,sDAAsD;AAEtD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;AAC1D,MAAM,iBAAiB,GAAG,KAAK,CAAA;AAW/B,SAAS,UAAU,CAAC,CAAQ;IAC1B,MAAM,IAAI,GACR,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnF,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAE3B,2BAA2B;IAC3B,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAG,MAAM;YACd,KAAK,EAAG,gBAAgB;YACxB,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,mBAAmB;SACvF,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,8CAA8C;YACtD,IAAI,EAAG,mGAAmG;SAC3G,CAAC,CAAA;IACJ,CAAC;IAED,wEAAwE;IACxE,MAAM,cAAc,GAAG,6BAA6B,EAAE,CAAA;IACtD,IAAI,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;IACvG,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,4BAA4B,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;YACtE,IAAI,EAAG,6GAA6G;SACrH,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAG,MAAM;YACd,KAAK,EAAG,qBAAqB;YAC7B,MAAM,EAAE,0EAA0E;SACnF,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,sDAAsD;YAC9D,IAAI,EAAG,yFAAyF;SACjG,CAAC,CAAA;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QACnG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAG,MAAM;YACd,KAAK,EAAG,eAAe;YACvB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3C,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC;gBACvF,CAAC,CAAC,8BAA8B;YAClC,IAAI,EAAG,8FAA8F;SACtG,CAAC,CAAA;IACJ,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,6DAA6D,EAAE,CAAC,CAAA;QACjI,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC,CAAA;IAC3H,CAAC;SAAM,CAAC;QACN,uEAAuE;QACvE,2DAA2D;QAC3D,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAA;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,QAAQ;YAClD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;YAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,MAAM;YAChB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,EAAE;YAC/I,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,WAAW;gBACtD,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,kDAAkD,2BAA2B,EAAE,GAAG,EAAE;gBAC3I,CAAC,CAAC;oBACE,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,mBAAmB;oBAC1B,MAAM,EAAE,2EAA2E;oBACnF,IAAI,EAAG,kFAAkF;iBAC1F,CAAC,CAAA;QACN,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;YAClD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACjG,MAAM,CAAC,IAAI,CAAC,eAAe;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;YACzF,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,CAAC,KAAK,QAAQ,IAAI,WAAW;gBACpE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,kDAAkD,2BAA2B,EAAE,GAAG,EAAE;gBACvI,CAAC,CAAC;oBACE,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,eAAe;oBACtB,MAAM,EAAE,4EAA4E;oBACpF,IAAI,EAAG,wFAAwF;iBAChG,CAAC,CAAA;IACR,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,0CAA0C;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAC5E,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,oEAAoE;YAC5E,IAAI,EAAG,wFAAwF;SAChG,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,SAAS,EAAE;gBACjD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;aAC/C,CAAC,CAAA;YACF,YAAY,GAAG,GAAG,CAAC,EAAE,CAAA;YACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,aAAa,UAAU,EAAE;gBAChF,CAAC,CAAC;oBACE,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,gBAAgB;oBACvB,MAAM,EAAE,GAAG,aAAa,kBAAkB,GAAG,CAAC,MAAM,EAAE;oBACtD,IAAI,EAAG,sGAAsG;iBAC9G,CAAC,CAAA;QACR,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,GAAG,aAAa,kFAAkF;gBAC1G,IAAI,EAAG,4FAA4F;aACpG,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;YAClE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,WAAW,EAAE;gBACnD,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;gBACtD,MAAM,EAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;aAChD,CAAC,CAAA;YACF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0C,CAAA;gBACrE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;gBACtE,MAAM,CAAC,IAAI,CAAC,UAAU;oBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;oBACjE,CAAC,CAAC;wBACE,KAAK,EAAE,MAAM;wBACb,KAAK,EAAE,oBAAoB;wBAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,qEAAqE;wBACvF,IAAI,EAAG,iDAAiD;qBACzD,CAAC,CAAA;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,iCAAiC,GAAG,CAAC,MAAM,GAAG;oBACtD,IAAI,EAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,6FAA6F,CAAC,CAAC,CAAC,SAAS;iBACtI,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAA;QAChG,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpH,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;SAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,QAAQ,aAAa,CAAC,CAAC,CAAA;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export async function explainCommand(filePath, opts) {
21
21
  console.log();
22
22
  const config = readConfig();
23
23
  const info = gatherProjectInfo(cwd());
24
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
24
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
25
25
  const percKey = config.perceptionKey ?? '';
26
26
  // Normalise the file path — strip leading ./ if present
27
27
  const normalisedPath = filePath.replace(/^\.\//, '');
@@ -58,7 +58,7 @@ export async function exportInterchangeCommand(opts) {
58
58
  const info = opts.projectId
59
59
  ? { ...baseInfo, id: opts.projectId }
60
60
  : baseInfo;
61
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
61
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
62
62
  const percKey = config.perceptionKey ?? '';
63
63
  const decisions = [];
64
64
  try {
@@ -59,7 +59,7 @@ export async function exportMemoryCommand(opts) {
59
59
  const info = opts.projectId
60
60
  ? { ...baseInfo, id: opts.projectId }
61
61
  : baseInfo;
62
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
62
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
63
63
  const percKey = config.perceptionKey ?? '';
64
64
  const memoryDir = opts.to
65
65
  ? confineMemoryDir(opts.to, projectRoot)
@@ -20,7 +20,7 @@ export async function injectCommand(opts) {
20
20
  const config = readConfig();
21
21
  const info = gatherProjectInfo(cwd());
22
22
  // Determine perception URL — local self-hosted or Rory Plans
23
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
23
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
24
24
  const percKey = config.perceptionKey ?? '';
25
25
  // ── Build query ────────────────────────────────────────────
26
26
  // If no query provided, use recent decisions
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAC9F,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAqBzB,UAAU,cAAc;IACtB,KAAK,CAAC,EAAU,MAAM,CAAA;IACtB,MAAM,CAAC,EAAS,MAAM,CAAA;IACtB,UAAU,CAAC,EAAK,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kGAAkG;IAClG,QAAQ,CAAC,EAAO,MAAM,CAAA;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAyED,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8HxE;AAED;;;;qEAIqE;AACrE,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D,eAAe,CAejB"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAC9F,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAsBzB,UAAU,cAAc;IACtB,KAAK,CAAC,EAAU,MAAM,CAAA;IACtB,MAAM,CAAC,EAAS,MAAM,CAAA;IACtB,UAAU,CAAC,EAAK,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kGAAkG;IAClG,QAAQ,CAAC,EAAO,MAAM,CAAA;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAyED,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJxE;AAED;;;;qEAIqE;AACrE,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D,eAAe,CAejB"}
@@ -17,6 +17,7 @@ import { validateToken, fetchProvisionedConfig } from '../lib/auth.js';
17
17
  import { resolveEditorsForInstall, resolveLlmProviderFromEnv, resolveOpenAiBaseUrlFromEnv, usingLocalOpenAi, writeMcpConfig, } from '../lib/editor.js';
18
18
  import { ensureSensingMcpBundle, ensureSensingMcpBundleFromPackage, controlBundleReady, sensingBundleReady, McpBundleError, } from '../lib/mcp-bundle.js';
19
19
  import { installCodexHooks } from '../lib/codex-hooks.js';
20
+ import { downloadControlBundle } from '../lib/control-bundle.js';
20
21
  import { initProjectCommand } from './init-project.js';
21
22
  import { inferLocalRobrainMonorepoRoot, inferRobrainMonorepoRootFromCwd, loadCliEnv, readDotenvKey, } from '../lib/load-env.js';
22
23
  import { join } from 'path';
@@ -128,6 +129,30 @@ export async function installCommand(opts) {
128
129
  process.exit(1);
129
130
  }
130
131
  spinner.succeed('API endpoints configured');
132
+ // ── Step 3b: Control MCP bundle (cloud-only, fail-soft) ────
133
+ // The Control server ships from the cloud API, not the OSS repo. Download
134
+ // it before the includeControl check below so a fresh install registers
135
+ // robrain-control in the same pass. Bearer: planningKey — the same key the
136
+ // control env wiring writes (PLANNING_API_KEY); the login token works too
137
+ // (both auth planes hit the same middleware), so fall back to it.
138
+ // Re-running install refreshes the bundle when the server sha differs.
139
+ // ANY failure warns and continues: controlBundleReady() stays false and
140
+ // the install completes Sensing-only.
141
+ spinner.start('Downloading Control MCP bundle...');
142
+ const controlDownload = await downloadControlBundle({
143
+ baseUrl: provisioned.planningUrl,
144
+ token: provisioned.planningKey || token,
145
+ robrainMcpDir: ROBRAIN_MCP_DIR,
146
+ });
147
+ if (controlDownload.ok) {
148
+ spinner.succeed(controlDownload.updated
149
+ ? `Control MCP bundle installed (v${controlDownload.meta.version})`
150
+ : `Control MCP bundle up to date (v${controlDownload.meta.version})`);
151
+ }
152
+ else {
153
+ spinner.warn('Control MCP unavailable — continuing without automatic injection');
154
+ console.log(chalk.dim(` (${controlDownload.reason})`));
155
+ }
131
156
  // ── Step 4: Embedding provider — none needed (cloud thin client) ─
132
157
  // Cloud Sensing runs as a thin client: raw turns ship to Perception with
133
158
  // needs_classification=true and server-side calibrated re-extraction
@@ -177,7 +202,7 @@ export async function installCommand(opts) {
177
202
  // Display only (status) — the thin client never embeds locally.
178
203
  ...(provisioned.embeddingProvider ? { embeddingProvider: provisioned.embeddingProvider } : {}),
179
204
  installedAt: new Date().toISOString(),
180
- version: '2.4.2',
205
+ version: '2.4.3',
181
206
  });
182
207
  spinner.succeed('MCP servers configured');
183
208
  // ── Done ───────────────────────────────────────────────────
@@ -220,7 +245,7 @@ async function installSelfHosted(opts) {
220
245
  inferLocalRobrainMonorepoRoot() ??
221
246
  inferRobrainMonorepoRootFromCwd();
222
247
  loadCliEnv(cloneRootForEnv);
223
- const perceptionUrl = opts.perceptionUrl ?? 'http://localhost:3001';
248
+ const perceptionUrl = opts.perceptionUrl ?? 'http://127.0.0.1:3001';
224
249
  console.log(chalk.bold(' Self-hosted mode\n'));
225
250
  console.log(chalk.dim(' Sensing MCP will connect to: ') + chalk.cyan(perceptionUrl));
226
251
  console.log(chalk.dim(' Make sure Perception is running: ') + chalk.cyan('pnpm docker:up\n'));
@@ -352,7 +377,7 @@ async function installSelfHosted(opts) {
352
377
  ...(perceptionKey ? { perceptionKey } : {}),
353
378
  embeddingProvider: provider,
354
379
  installedAt: new Date().toISOString(),
355
- version: '2.4.2',
380
+ version: '2.4.3',
356
381
  selfHosted: true,
357
382
  });
358
383
  spinner.succeed('MCP servers configured for self-hosted mode');
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -102,7 +102,7 @@ export async function outcomesScanCommand(opts) {
102
102
  }
103
103
  const config = readConfig();
104
104
  const info = gatherProjectInfo(cwd());
105
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
105
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
106
106
  const percKey = config.perceptionKey ?? '';
107
107
  const since = opts.since ?? '30 days ago';
108
108
  // ── 1. Revert commits from git history ─────────────────────
@@ -229,7 +229,7 @@ export async function outcomesRecordCommand(decisionId, opts) {
229
229
  }
230
230
  const config = readConfig();
231
231
  const info = gatherProjectInfo(cwd());
232
- const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
232
+ const percUrl = config.perceptionUrl ?? 'http://127.0.0.1:3001';
233
233
  const percKey = config.perceptionKey ?? '';
234
234
  const spinner = ora(`Recording ${opts.outcome} outcome...`).start();
235
235
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAmBA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CzD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtF"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AA2BA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CzD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtF"}
@@ -4,21 +4,27 @@
4
4
  // (recover from phantom project_ids after cwd moves / typos).
5
5
  // ─────────────────────────────────────────────────────────────
6
6
  import chalk from 'chalk';
7
- import { readConfig } from '../lib/config.js';
7
+ import { normalizeLoopbackUrl, readConfig } from '../lib/config.js';
8
8
  function perceptionEndpoint() {
9
9
  const config = readConfig();
10
- const url = config.perceptionUrl ??
10
+ const url = normalizeLoopbackUrl(config.perceptionUrl ??
11
11
  process.env.PERCEPTION_URL ??
12
- 'http://localhost:3001';
12
+ 'http://127.0.0.1:3001');
13
13
  const key = config.perceptionKey ?? process.env.PERCEPTION_API_KEY ?? '';
14
14
  return { url, key };
15
15
  }
16
+ function exitUnreachable(url, err) {
17
+ console.log(chalk.red(' ✗ Perception is unreachable'));
18
+ console.log(chalk.dim(` ${url} — ${err instanceof Error ? err.message : String(err)}`));
19
+ console.log(chalk.dim(' Start it with ') + chalk.cyan('npx robrain up') + chalk.dim(' (or pnpm docker:up from a clone).\n'));
20
+ process.exit(1);
21
+ }
16
22
  export async function projectsListCommand() {
17
23
  console.log();
18
24
  const { url, key } = perceptionEndpoint();
19
25
  const res = await fetch(`${url}/projects`, {
20
26
  headers: key ? { Authorization: `Bearer ${key}` } : {},
21
- });
27
+ }).catch((err) => exitUnreachable(url, err));
22
28
  if (!res.ok) {
23
29
  const t = await res.text().catch(() => '');
24
30
  console.log(chalk.red(` ✗ Could not list projects (${res.status})`));
@@ -55,7 +61,7 @@ export async function projectsMergeCommand(fromId, toId) {
55
61
  ...(key ? { Authorization: `Bearer ${key}` } : {}),
56
62
  },
57
63
  body: JSON.stringify({ from: fromId, to: toId }),
58
- });
64
+ }).catch((err) => exitUnreachable(url, err));
59
65
  const raw = await res.text();
60
66
  if (!res.ok) {
61
67
  console.log(chalk.red(` ✗ Merge failed (${res.status})`));
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ import { projectsListCommand, projectsMergeCommand } from './commands/projects.j
29
29
  import { upCommand, downCommand, DEFAULT_IMAGE_REPO } from './commands/up.js';
30
30
  import { mcpCommand } from './commands/mcp.js';
31
31
  import { installHermesPlugin, resolveHermesHome } from './lib/hermes-plugin.js';
32
- const VERSION = '2.4.2';
32
+ const VERSION = '2.4.3';
33
33
  program
34
34
  .name('robrain')
35
35
  .description('Institutional memory for AI coding agents — by Rory Plans')
@@ -160,7 +160,7 @@ program
160
160
  .option('-e, --editor <editor>', 'Target editor: claude-code | cursor | copilot | codex')
161
161
  .option('--self-hosted', 'Self-hosted mode — skip Rory Plans auth')
162
162
  .option('--hermes', 'Install the Hermes memory-provider plugin into $HERMES_HOME/plugins')
163
- .option('--perception-url <url>', 'Perception URL for self-hosted mode (default: http://localhost:3001)')
163
+ .option('--perception-url <url>', 'Perception URL for self-hosted mode (default: http://127.0.0.1:3001)')
164
164
  .option('--repo-root <path>', 'Path to your robrain git clone (links built sensing-mcp into ~/.robrain/mcp). Or set ROBRAIN_REPO.')
165
165
  .option('--skip-init-project', 'Do not run init-project in the current directory after install')
166
166
  .action(async (opts) => {
@@ -14,6 +14,12 @@ export interface RoMemoryConfig {
14
14
  installedAt?: string;
15
15
  version?: string;
16
16
  }
17
+ /**
18
+ * Rewrites a `localhost` host to `127.0.0.1`. Node 17+ resolves localhost
19
+ * IPv6-first (::1) on many systems, but the Docker stack only binds
20
+ * 127.0.0.1 — fetch then dies with ECONNREFUSED ::1 while curl works.
21
+ */
22
+ export declare function normalizeLoopbackUrl(url: string): string;
17
23
  export declare function readConfig(): RoMemoryConfig;
18
24
  export declare function writeConfig(config: RoMemoryConfig): void;
19
25
  export declare function mergeConfig(updates: Partial<RoMemoryConfig>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAM,OAAO,CAAA;IACxB,2FAA2F;IAC3F,IAAI,CAAC,EAAY,OAAO,CAAA;IACxB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAI,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,OAAO,CAAC,EAAS,MAAM,CAAA;CACxB;AAED,wBAAgB,UAAU,IAAI,cAAc,CAO3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKxD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAGlE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,IAAI,OAAO,CAWzC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAGD,eAAO,MAAM,aAAa,QAA0D,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,KAAK,CAAC,EAAW,MAAM,CAAA;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAM,OAAO,CAAA;IACxB,2FAA2F;IAC3F,IAAI,CAAC,EAAY,OAAO,CAAA;IACxB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAG,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAI,MAAM,CAAA;IACvB,WAAW,CAAC,EAAK,MAAM,CAAA;IACvB,OAAO,CAAC,EAAS,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,UAAU,IAAI,cAAc,CAS3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKxD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAGlE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,IAAI,OAAO,CAWzC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAGD,eAAO,MAAM,aAAa,QAA0D,CAAA"}
@@ -8,11 +8,32 @@ import { homedir } from 'os';
8
8
  import { join } from 'path';
9
9
  const CONFIG_DIR = join(homedir(), '.robrain');
10
10
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
11
+ /**
12
+ * Rewrites a `localhost` host to `127.0.0.1`. Node 17+ resolves localhost
13
+ * IPv6-first (::1) on many systems, but the Docker stack only binds
14
+ * 127.0.0.1 — fetch then dies with ECONNREFUSED ::1 while curl works.
15
+ */
16
+ export function normalizeLoopbackUrl(url) {
17
+ try {
18
+ const u = new URL(url);
19
+ if (u.hostname === 'localhost') {
20
+ u.hostname = '127.0.0.1';
21
+ return u.toString().replace(/\/$/, '');
22
+ }
23
+ }
24
+ catch {
25
+ // not a parseable URL — leave as-is
26
+ }
27
+ return url;
28
+ }
11
29
  export function readConfig() {
12
30
  if (!existsSync(CONFIG_FILE))
13
31
  return {};
14
32
  try {
15
- return JSON.parse(readFileSync(CONFIG_FILE, 'utf8'));
33
+ const config = JSON.parse(readFileSync(CONFIG_FILE, 'utf8'));
34
+ if (config.perceptionUrl)
35
+ config.perceptionUrl = normalizeLoopbackUrl(config.perceptionUrl);
36
+ return config;
16
37
  }
17
38
  catch {
18
39
  return {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,gEAAgE;AAChE,gEAAgE;AAChE,sEAAsE;AACtE,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,UAAU,GAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAmBnD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAmB,CAAA;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAsB;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgC;IAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAC7C,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAClC,2FAA2F;IAC3F,OAAO,OAAO,CACZ,MAAM,CAAC,aAAa;QAClB,MAAM,CAAC,WAAW;QAClB,CAAC,MAAM,CAAC,KAAK;QACb,CAAC,MAAM,CAAC,KAAK,CAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,EAAE,CAAC,KAAK,CAAA;AAC3B,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,gEAAgE;AAChE,gEAAgE;AAChE,sEAAsE;AACtE,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,UAAU,GAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAmBnD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAA;YACxB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAmB,CAAA;QAC9E,IAAI,MAAM,CAAC,aAAa;YAAE,MAAM,CAAC,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAC3F,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAsB;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgC;IAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAC7C,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAClC,2FAA2F;IAC3F,OAAO,OAAO,CACZ,MAAM,CAAC,aAAa;QAClB,MAAM,CAAC,WAAW;QAClB,CAAC,MAAM,CAAC,KAAK;QACb,CAAC,MAAM,CAAC,KAAK,CAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,EAAE,CAAC,KAAK,CAAA;AAC3B,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAA"}
@@ -0,0 +1,33 @@
1
+ export interface ControlBundleMeta {
2
+ sha256: string;
3
+ bytes: number;
4
+ version: string;
5
+ }
6
+ export type ControlBundleDownloadResult = {
7
+ ok: true;
8
+ updated: boolean;
9
+ meta: ControlBundleMeta;
10
+ } | {
11
+ ok: false;
12
+ reason: string;
13
+ };
14
+ /** One timeout per request (meta, then bundle) — an install must never hang on Control. */
15
+ export declare const CONTROL_DOWNLOAD_TIMEOUT_MS = 30000;
16
+ /**
17
+ * Fetch GET {baseUrl}/control-bundle/meta then GET {baseUrl}/control-bundle
18
+ * (Authorization: Bearer token), verify the sha256, and write:
19
+ * <robrainMcpDir>/control/dist/index.js — the self-contained server
20
+ * <robrainMcpDir>/control/package.json — minimal ESM marker (same
21
+ * pattern as the Sensing bundle)
22
+ * <robrainMcpDir>/control/meta.json — {sha256, bytes, version} for
23
+ * future update checks
24
+ * Re-running skips the download when the on-disk bundle already hashes to
25
+ * the advertised sha256, and refreshes it when the sha differs.
26
+ */
27
+ export declare function downloadControlBundle(opts: {
28
+ baseUrl: string;
29
+ token: string;
30
+ robrainMcpDir: string;
31
+ timeoutMs?: number;
32
+ }): Promise<ControlBundleDownloadResult>;
33
+ //# sourceMappingURL=control-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/control-bundle.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAG,MAAM,CAAA;IACf,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjC,2FAA2F;AAC3F,eAAO,MAAM,2BAA2B,QAAS,CAAA;AAiBjD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,OAAO,EAAQ,MAAM,CAAA;IACrB,KAAK,EAAU,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAK,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CA4DvC"}
@@ -0,0 +1,91 @@
1
+ // src/lib/control-bundle.ts
2
+ // ─────────────────────────────────────────────────────────────
3
+ // Download the Control MCP bundle from the Rory Plans cloud API
4
+ // during a cloud install and materialize it under
5
+ // ~/.robrain/mcp/control (the layout controlBundleReady expects).
6
+ //
7
+ // Strictly fail-soft by contract: every failure returns
8
+ // { ok: false, reason } — install.ts warns and continues with
9
+ // includeControl=false; nothing else about the install breaks.
10
+ // ─────────────────────────────────────────────────────────────
11
+ import { createHash } from 'crypto';
12
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
13
+ import { join } from 'path';
14
+ /** One timeout per request (meta, then bundle) — an install must never hang on Control. */
15
+ export const CONTROL_DOWNLOAD_TIMEOUT_MS = 30_000;
16
+ function sha256Hex(data) {
17
+ return createHash('sha256').update(data).digest('hex');
18
+ }
19
+ /** sha256 of the bundle already on disk, or undefined when absent/unreadable. */
20
+ function installedBundleSha(controlDir) {
21
+ const entry = join(controlDir, 'dist', 'index.js');
22
+ if (!existsSync(entry))
23
+ return undefined;
24
+ try {
25
+ return sha256Hex(readFileSync(entry));
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ /**
32
+ * Fetch GET {baseUrl}/control-bundle/meta then GET {baseUrl}/control-bundle
33
+ * (Authorization: Bearer token), verify the sha256, and write:
34
+ * <robrainMcpDir>/control/dist/index.js — the self-contained server
35
+ * <robrainMcpDir>/control/package.json — minimal ESM marker (same
36
+ * pattern as the Sensing bundle)
37
+ * <robrainMcpDir>/control/meta.json — {sha256, bytes, version} for
38
+ * future update checks
39
+ * Re-running skips the download when the on-disk bundle already hashes to
40
+ * the advertised sha256, and refreshes it when the sha differs.
41
+ */
42
+ export async function downloadControlBundle(opts) {
43
+ const base = opts.baseUrl.replace(/\/+$/, '');
44
+ const timeout = opts.timeoutMs ?? CONTROL_DOWNLOAD_TIMEOUT_MS;
45
+ const headers = { Authorization: `Bearer ${opts.token}` };
46
+ const dest = join(opts.robrainMcpDir, 'control');
47
+ try {
48
+ const metaRes = await fetch(`${base}/control-bundle/meta`, {
49
+ headers,
50
+ signal: AbortSignal.timeout(timeout),
51
+ });
52
+ if (!metaRes.ok)
53
+ return { ok: false, reason: `meta fetch failed (HTTP ${metaRes.status})` };
54
+ const rawMeta = await metaRes.json();
55
+ if (typeof rawMeta.sha256 !== 'string' || !rawMeta.sha256) {
56
+ return { ok: false, reason: 'meta response missing sha256' };
57
+ }
58
+ const meta = {
59
+ sha256: rawMeta.sha256,
60
+ bytes: typeof rawMeta.bytes === 'number' ? rawMeta.bytes : 0,
61
+ version: typeof rawMeta.version === 'string' && rawMeta.version ? rawMeta.version : 'unknown',
62
+ };
63
+ // Already installed at this exact sha (hash the real file, not a marker) —
64
+ // nothing to download.
65
+ if (installedBundleSha(dest) === meta.sha256) {
66
+ return { ok: true, updated: false, meta };
67
+ }
68
+ const bundleRes = await fetch(`${base}/control-bundle`, {
69
+ headers,
70
+ signal: AbortSignal.timeout(timeout),
71
+ });
72
+ if (!bundleRes.ok)
73
+ return { ok: false, reason: `bundle fetch failed (HTTP ${bundleRes.status})` };
74
+ const body = Buffer.from(await bundleRes.arrayBuffer());
75
+ const sha = sha256Hex(body);
76
+ if (sha !== meta.sha256) {
77
+ return { ok: false, reason: `sha256 mismatch (expected ${meta.sha256}, got ${sha}) — refusing to install` };
78
+ }
79
+ mkdirSync(join(dest, 'dist'), { recursive: true });
80
+ writeFileSync(join(dest, 'dist', 'index.js'), body);
81
+ // Minimal package.json: Node needs "type": "module" to run the bundled ESM
82
+ // entrypoint — mirror of the Sensing bundle materialization in mcp-bundle.ts.
83
+ writeFileSync(join(dest, 'package.json'), JSON.stringify({ name: 'robrain-control-mcp', private: true, type: 'module', main: './dist/index.js' }, null, 2) + '\n');
84
+ writeFileSync(join(dest, 'meta.json'), JSON.stringify({ sha256: sha, bytes: body.byteLength, version: meta.version }, null, 2) + '\n');
85
+ return { ok: true, updated: true, meta };
86
+ }
87
+ catch (err) {
88
+ return { ok: false, reason: err instanceof Error ? err.message : String(err) };
89
+ }
90
+ }
91
+ //# sourceMappingURL=control-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-bundle.js","sourceRoot":"","sources":["../../src/lib/control-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=control-bundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-bundle.test.d.ts","sourceRoot":"","sources":["../../src/lib/control-bundle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
3
+ import { createServer } from 'node:http';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { after, beforeEach, describe, it } from 'node:test';
7
+ import assert from 'node:assert/strict';
8
+ import { downloadControlBundle } from './control-bundle.js';
9
+ import { controlBundleReady } from './mcp-bundle.js';
10
+ // Stubbed cloud API: /control-bundle/meta + /control-bundle, mutable between
11
+ // tests so each case controls the served bytes/hash/status.
12
+ const BUNDLE_V1 = '// control bundle v1\nexport {}\n';
13
+ const sha = (s) => createHash('sha256').update(s).digest('hex');
14
+ const serve = {
15
+ body: BUNDLE_V1,
16
+ metaSha: sha(BUNDLE_V1), // advertised sha (can be forced wrong)
17
+ version: '0.1.0',
18
+ metaStatus: 200,
19
+ bundleStatus: 200,
20
+ authSeen: [],
21
+ };
22
+ const stub = createServer((req, res) => {
23
+ serve.authSeen.push(req.headers.authorization);
24
+ if (req.url === '/control-bundle/meta') {
25
+ res.statusCode = serve.metaStatus;
26
+ res.setHeader('content-type', 'application/json');
27
+ res.end(JSON.stringify({ sha256: serve.metaSha, bytes: Buffer.byteLength(serve.body), version: serve.version }));
28
+ return;
29
+ }
30
+ if (req.url === '/control-bundle') {
31
+ res.statusCode = serve.bundleStatus;
32
+ res.setHeader('content-type', 'application/javascript');
33
+ res.setHeader('x-bundle-sha256', serve.metaSha);
34
+ res.end(serve.body);
35
+ return;
36
+ }
37
+ res.statusCode = 404;
38
+ res.end('{}');
39
+ });
40
+ await new Promise(resolve => stub.listen(0, '127.0.0.1', resolve));
41
+ stub.unref();
42
+ const address = stub.address();
43
+ assert.ok(address && typeof address === 'object');
44
+ const baseUrl = `http://127.0.0.1:${address.port}`;
45
+ const mcpDir = mkdtempSync(join(tmpdir(), 'robrain-control-dl-'));
46
+ after(async () => {
47
+ stub.closeAllConnections();
48
+ await new Promise(resolve => stub.close(() => resolve()));
49
+ rmSync(mcpDir, { recursive: true, force: true });
50
+ });
51
+ beforeEach(() => {
52
+ serve.body = BUNDLE_V1;
53
+ serve.metaSha = sha(BUNDLE_V1);
54
+ serve.version = '0.1.0';
55
+ serve.metaStatus = 200;
56
+ serve.bundleStatus = 200;
57
+ serve.authSeen = [];
58
+ rmSync(join(mcpDir, 'control'), { recursive: true, force: true });
59
+ });
60
+ describe('downloadControlBundle', () => {
61
+ it('downloads, verifies sha256, and materializes the controlBundleReady layout', async () => {
62
+ const result = await downloadControlBundle({ baseUrl, token: 'rp_live_test', robrainMcpDir: mcpDir });
63
+ assert.deepEqual(result, {
64
+ ok: true,
65
+ updated: true,
66
+ meta: { sha256: sha(BUNDLE_V1), bytes: Buffer.byteLength(BUNDLE_V1), version: '0.1.0' },
67
+ });
68
+ assert.equal(controlBundleReady(mcpDir), true);
69
+ assert.equal(readFileSync(join(mcpDir, 'control', 'dist', 'index.js'), 'utf8'), BUNDLE_V1);
70
+ // Minimal ESM package.json — same shape as the Sensing bundle marker.
71
+ const pkg = JSON.parse(readFileSync(join(mcpDir, 'control', 'package.json'), 'utf8'));
72
+ assert.deepEqual(pkg, { name: 'robrain-control-mcp', private: true, type: 'module', main: './dist/index.js' });
73
+ // Meta manifest for future update checks.
74
+ const meta = JSON.parse(readFileSync(join(mcpDir, 'control', 'meta.json'), 'utf8'));
75
+ assert.deepEqual(meta, { sha256: sha(BUNDLE_V1), bytes: Buffer.byteLength(BUNDLE_V1), version: '0.1.0' });
76
+ // Both requests carried the bearer token.
77
+ assert.deepEqual(serve.authSeen, ['Bearer rp_live_test', 'Bearer rp_live_test']);
78
+ });
79
+ it('skips the download when the on-disk bundle already matches the advertised sha', async () => {
80
+ await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
81
+ serve.authSeen = [];
82
+ const again = await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
83
+ assert.ok(again.ok);
84
+ assert.equal(again.updated, false);
85
+ // Only /control-bundle/meta was hit — no second bundle transfer.
86
+ assert.equal(serve.authSeen.length, 1);
87
+ });
88
+ it('refreshes the bundle when the server sha differs (re-run install = update)', async () => {
89
+ await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
90
+ const v2 = '// control bundle v2\nexport {}\n';
91
+ serve.body = v2;
92
+ serve.metaSha = sha(v2);
93
+ serve.version = '0.2.0';
94
+ const result = await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
95
+ assert.ok(result.ok);
96
+ assert.equal(result.updated, true);
97
+ assert.equal(readFileSync(join(mcpDir, 'control', 'dist', 'index.js'), 'utf8'), v2);
98
+ const meta = JSON.parse(readFileSync(join(mcpDir, 'control', 'meta.json'), 'utf8'));
99
+ assert.equal(meta.version, '0.2.0');
100
+ });
101
+ it('fails soft on a sha256 mismatch and writes nothing', async () => {
102
+ serve.metaSha = sha('something else entirely');
103
+ const result = await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
104
+ assert.equal(result.ok, false);
105
+ assert.match(result.reason, /sha256 mismatch/);
106
+ assert.equal(controlBundleReady(mcpDir), false);
107
+ assert.equal(existsSync(join(mcpDir, 'control')), false);
108
+ });
109
+ it('fails soft when the API answers 404 (bundle not deployed)', async () => {
110
+ serve.metaStatus = 404;
111
+ const result = await downloadControlBundle({ baseUrl, token: 't', robrainMcpDir: mcpDir });
112
+ assert.equal(result.ok, false);
113
+ assert.match(result.reason, /HTTP 404/);
114
+ assert.equal(controlBundleReady(mcpDir), false);
115
+ });
116
+ it('fails soft when the server is unreachable (no throw, no hang)', async () => {
117
+ const result = await downloadControlBundle({
118
+ baseUrl: 'http://127.0.0.1:9', // discard port — connection refused
119
+ token: 't',
120
+ robrainMcpDir: mcpDir,
121
+ timeoutMs: 2_000,
122
+ });
123
+ assert.equal(result.ok, false);
124
+ assert.equal(controlBundleReady(mcpDir), false);
125
+ });
126
+ });
127
+ //# sourceMappingURL=control-bundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-bundle.test.js","sourceRoot":"","sources":["../../src/lib/control-bundle.test.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.2",
3
+ "version": "2.4.3",
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/release-guard.test.js dist/lib/mcp-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",
60
+ "test": "pnpm build && node --test dist/lib/editor.codex.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",
61
61
  "pack:verify": "node scripts/verify-publish-tarball.mjs",
62
62
  "postinstall": "node scripts/chmod-bin.cjs"
63
63
  }
@@ -32,9 +32,26 @@ export function parseHookInput(raw) {
32
32
  }
33
33
  }
34
34
 
35
+ /**
36
+ * localhost → 127.0.0.1: Node 17+ resolves localhost IPv6-first (::1) but the
37
+ * Docker stack only binds 127.0.0.1; old configs may still carry localhost.
38
+ */
39
+ function normalizeLoopbackUrl(url) {
40
+ try {
41
+ const u = new URL(url)
42
+ if (u.hostname === 'localhost') {
43
+ u.hostname = '127.0.0.1'
44
+ return u.toString().replace(/\/$/, '')
45
+ }
46
+ } catch {
47
+ // not a parseable URL — leave as-is
48
+ }
49
+ return url
50
+ }
51
+
35
52
  /**
36
53
  * Perception connection: env wins, then ~/.robrain/config.json (written by
37
- * `robrain up` / `robrain install`), then localhost default.
54
+ * `robrain up` / `robrain install`), then loopback default.
38
55
  */
39
56
  export function loadPerception() {
40
57
  let url = process.env.PERCEPTION_URL?.trim() || ''
@@ -48,7 +65,7 @@ export function loadPerception() {
48
65
  // no config yet — fall through to defaults
49
66
  }
50
67
  }
51
- return { url: url || 'http://localhost:3001', key }
68
+ return { url: normalizeLoopbackUrl(url || 'http://127.0.0.1:3001'), key }
52
69
  }
53
70
 
54
71
  /**
@@ -6328,6 +6328,7 @@ var require_load_env = __commonJS({
6328
6328
  "use strict";
6329
6329
  Object.defineProperty(exports, "__esModule", { value: true });
6330
6330
  exports.loadCliEnv = void 0;
6331
+ exports.normalizeLoopbackUrl = normalizeLoopbackUrl2;
6331
6332
  exports.loadEnv = loadEnv2;
6332
6333
  var node_fs_1 = __require("node:fs");
6333
6334
  var node_path_1 = __require("node:path");
@@ -6349,6 +6350,17 @@ var require_load_env = __commonJS({
6349
6350
  }
6350
6351
  return out;
6351
6352
  }
6353
+ function normalizeLoopbackUrl2(url) {
6354
+ try {
6355
+ const u = new URL(url);
6356
+ if (u.hostname === "localhost") {
6357
+ u.hostname = "127.0.0.1";
6358
+ return u.toString().replace(/\/$/, "");
6359
+ }
6360
+ } catch {
6361
+ }
6362
+ return url;
6363
+ }
6352
6364
  function findRepoRootUpward(start) {
6353
6365
  let dir = start;
6354
6366
  while (true) {
@@ -6413,6 +6425,7 @@ var require_llm = __commonJS({
6413
6425
  exports.resolveOpenAiBaseUrl = resolveOpenAiBaseUrl2;
6414
6426
  exports.openaiChat = openaiChat;
6415
6427
  exports.anthropicChat = anthropicChat;
6428
+ var load_env_js_1 = require_load_env();
6416
6429
  exports.DEFAULT_ANTHROPIC_LLM_MODEL = "claude-haiku-4-5-20251001";
6417
6430
  exports.DEFAULT_OPENAI_LLM_MODEL = "gpt-4o";
6418
6431
  function resolveLlmProvider2(env = process.env) {
@@ -6423,7 +6436,7 @@ var require_llm = __commonJS({
6423
6436
  const raw = env.OPENAI_BASE_URL?.trim();
6424
6437
  if (!raw)
6425
6438
  return exports.DEFAULT_OPENAI_BASE_URL;
6426
- return raw.replace(/\/+$/, "");
6439
+ return (0, load_env_js_1.normalizeLoopbackUrl)(raw.replace(/\/+$/, ""));
6427
6440
  }
6428
6441
  var OPENAI_MAX_ATTEMPTS = 4;
6429
6442
  var OPENAI_BASE_DELAY_MS = 400;
@@ -6569,14 +6582,15 @@ var require_embeddings = __commonJS({
6569
6582
  return padToLength(vec, exports.EMBEDDING_TARGET_DIMS);
6570
6583
  }
6571
6584
  async function embedOpenAI(text, config3, signal) {
6572
- if (!config3.openaiApiKey) {
6573
- throw new EmbeddingProviderError("openai", "OPENAI_API_KEY is required when EMBEDDING_PROVIDER=openai");
6585
+ const baseUrl = config3.openaiBaseUrl.replace(/\/+$/, "");
6586
+ if (!config3.openaiApiKey && baseUrl === llm_js_1.DEFAULT_OPENAI_BASE_URL) {
6587
+ throw new EmbeddingProviderError("openai", "OPENAI_API_KEY is required when EMBEDDING_PROVIDER=openai (unless OPENAI_BASE_URL points at a local server)");
6574
6588
  }
6575
- const res = await fetchEmbedding(`${config3.openaiBaseUrl}/embeddings`, {
6589
+ const res = await fetchEmbedding(`${baseUrl}/embeddings`, {
6576
6590
  method: "POST",
6577
6591
  headers: {
6578
- "Authorization": `Bearer ${config3.openaiApiKey}`,
6579
- "Content-Type": "application/json"
6592
+ "Content-Type": "application/json",
6593
+ ...config3.openaiApiKey ? { "Authorization": `Bearer ${config3.openaiApiKey}` } : {}
6580
6594
  },
6581
6595
  body: JSON.stringify({
6582
6596
  model: config3.openaiModel,
@@ -22746,7 +22760,7 @@ var init_config = __esm({
22746
22760
  // ── Perception API (required — where signals get sent) ──────
22747
22761
  // Set after you deploy the Perception API to Railway / Fly.io.
22748
22762
  // Leave as placeholder during local Sensing-only testing.
22749
- perceptionApiUrl: process.env.PERCEPTION_API_URL ?? "http://localhost:3001",
22763
+ perceptionApiUrl: (0, import_shared.normalizeLoopbackUrl)(process.env.PERCEPTION_API_URL ?? "http://127.0.0.1:3001"),
22750
22764
  perceptionApiKey: process.env.PERCEPTION_API_KEY ?? "",
22751
22765
  // ── Classifier thresholds (optional — tune after instrumenting) ─
22752
22766
  decisionConfidenceMin: Number(process.env.DECISION_CONFIDENCE_MIN ?? 0.6),
@@ -23282,7 +23296,7 @@ function resolveSessionId(raw) {
23282
23296
  function buildServer() {
23283
23297
  const server = new McpServer({
23284
23298
  name: "sensing-mcp",
23285
- version: "2.4.2"
23299
+ version: "2.4.3"
23286
23300
  });
23287
23301
  server.tool(
23288
23302
  "sensing_start_session",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robrain/sensing-mcp",
3
- "version": "2.4.2",
3
+ "version": "2.4.3",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js"