robrain 2.4.2 → 2.4.4

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":"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"}
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.4',
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.4',
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":"AAAA,0BAA0B;AAC1B,gEAAgE;AAChE,8EAA8E;AAC9E,EAAE;AACF,kCAAkC;AAClC,uCAAuC;AACvC,8CAA8C;AAC9C,2CAA2C;AAC3C,8CAA8C;AAC9C,2CAA2C;AAC3C,gEAAgE;AAEhE,OAAO,KAAK,MAAS,OAAO,CAAA;AAC5B,OAAO,GAAG,MAAW,KAAK,CAAA;AAC1B,OAAO,OAAO,MAAO,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAA0B,MAAM,gBAAgB,CAAA;AAC9F,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,cAAc,GAEf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,sBAAsB,EACtB,iCAAiC,EACjC,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAwC,mBAAmB,CAAA;AACxF,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAuD,MAAM,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAoD,IAAI,CAAA;AAE1E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;AAa1D,wFAAwF;AACxF,SAAS,2BAA2B,CAClC,OAAkC;IAElC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9D,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACtB,oFAAoF;YACpF,qGAAqG,CACtG,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAoB;IACvD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC,CAAA;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAA;QACvI,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAA;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/D,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAA;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACtH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAoB;IAC3C,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAoB;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAEtC,iFAAiF;IACjF,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,sBAAsB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;YACjD,OAAM;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;gBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAM,CAAC,CAAA;QACT,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,4EAA4E;IAC5E,IAAI,iCAAiC,CAAC,eAAe,CAAC;QAAE,OAAM;IAE9D,+EAA+E;IAC/E,wEAAwE;IACxE,IAAI,kBAAkB,CAAC,eAAe,CAAC;QAAE,OAAM;IAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;IAClI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC3J,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACvL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAoB;IACvD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAA;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE7C,6DAA6D;IAC7D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAEvB,6DAA6D;IAC7D,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,KAAK,CAAA;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAA;QAEnG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,CAAC;YACnC,IAAI,EAAK,UAAU;YACnB,IAAI,EAAK,YAAY;YACrB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,KAAK,GAAG,UAAoB,CAAA;IAC9B,CAAC;IAED,8DAA8D;IAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IAEtF,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAA;IAC7C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAEnE,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAEvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAE3C,oEAAoE;IACpE,yEAAyE;IACzE,qEAAqE;IACrE,sEAAsE;IACtE,0DAA0D;IAE1D,6DAA6D;IAC7D,IAAI,eAAe,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAA;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YAC/B,IAAI,EAAK,aAAa;YACtB,IAAI,EAAK,QAAQ;YACjB,OAAO,EAAE,sCAAsC;YAC/C,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;SACzF,CAAC,CAAA;QACF,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,MAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAE7C,MAAM,cAAc,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAA;IAE1D,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE;QAChD,cAAc;QACd,aAAa,EAAE,2BAA2B,CAAC,eAAe,CAAC;KAC5D,CAAC,CAAA;IAEF,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACtB,gGAAgG;YAChG,qGAAqG,CACtG,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAED,8DAA8D;IAC9D,WAAW,CAAC;QACV,KAAK;QACL,KAAK,EAAc,UAAU,CAAC,KAAK;QACnC,IAAI,EAAe,IAAI;QACvB,aAAa,EAAM,WAAW,CAAC,aAAa;QAC5C,aAAa,EAAM,WAAW,CAAC,aAAa;QAC5C,WAAW,EAAQ,WAAW,CAAC,WAAW;QAC1C,WAAW,EAAQ,WAAW,CAAC,WAAW;QAC1C,gEAAgE;QAChE,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,WAAW,EAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAY,OAAO;KAC3B,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAEzC,8DAA8D;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAA;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAA;IAC1G,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC;AAED;;;;qEAIqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,WAA8B,EAC9B,MAA2D;IAE3D,OAAO;QACL,cAAc,EAAK,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QACvE,cAAc,EAAK,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QACvE,YAAY,EAAO,EAAE,EAAuC,uBAAuB;QACnF,aAAa,EAAM,WAAW,CAAC,aAAa;QAC5C,aAAa,EAAM,WAAW,CAAC,aAAa;QAC5C,WAAW,EAAQ,WAAW,CAAC,WAAW;QAC1C,WAAW,EAAQ,WAAW,CAAC,WAAW;QAC1C,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,IAAI,EAAE,EAAM,eAAe;QAC3E,YAAY,EAAO,EAAE;QACrB,IAAI,EAAe,IAAI;QACvB,cAAc,EAAK,MAAM,CAAC,cAAc;QACxC,aAAa,EAAM,MAAM,CAAC,aAAa;KACxC,CAAA;AACH,CAAC;AAED,kEAAkE;AAClE,uDAAuD;AACvD,mDAAmD;AAEnD,KAAK,UAAU,iBAAiB,CAAC,IAAoB;IACnD,mFAAmF;IACnF,qFAAqF;IACrF,8EAA8E;IAC9E,MAAM,eAAe,GACnB,eAAe,CAAC,IAAI,CAAC;QACrB,6BAA6B,EAAE;QAC/B,+BAA+B,EAAE,CAAA;IACnC,UAAU,CAAC,eAAe,CAAC,CAAA;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAA;IAEnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAE9F,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAClD,IAAI,QAAgB,CAAA;IACpB,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACrF,QAAQ,GAAG,WAAW,CAAA;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,QAAQ,GAAG,CAAC,CAAC,CAAA;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAA;IACzF,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACzC,IAAI,EAAK,QAAQ;YACjB,IAAI,EAAK,UAAU;YACnB,OAAO,EAAE,wEAAwE;YACjF,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,QAAQ,EAAG;gBAC7D,EAAE,KAAK,EAAE,uBAAuB,EAAY,KAAK,EAAE,QAAQ,EAAG;gBAC9D,EAAE,KAAK,EAAE,4BAA4B,EAAQ,KAAK,EAAE,QAAQ,EAAG;aAChE;SACF,CAAC,CAAA;QACF,QAAQ,GAAG,MAAgB,CAAA;IAC7B,CAAC;IAED,MAAM,OAAO,GAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAA;IAElI,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpF,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,OAAO,mBAAmB,CAAC,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,aAAa,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,iCAAiC,aAAa,iBAAiB,CAAC,CAAC,CAAA;IACrG,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,CAAA;QAC1F,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAA;IAClC,CAAC;IAED,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAA;IAC/C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAA;IACxE,CAAC;IAED,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAA;IAChD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxC,SAAS,GAAG,MAAM,CAAA;QACpB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAA;QACzE,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAA;QAClG,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,IAAI,EAAK,UAAU;gBACnB,IAAI,EAAK,WAAW;gBACpB,OAAO,EAAE,mDAAmD;aAC7D,CAAC,CAAA;YACF,SAAS,GAAG,MAAM,CAAC,SAAmB,CAAA;QACxC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,EAAE,CAAA;IACrB,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAA;QAClD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,IAAI,EAAK,UAAU;gBACnB,IAAI,EAAK,cAAc;gBACvB,OAAO,EAAE,8CAA8C;aACxD,CAAC,CAAA;YACF,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAA;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,eAAe,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAA;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAA;IAE3D,+EAA+E;IAC/E,+EAA+E;IAC/E,yEAAyE;IACzE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;IACxB,oFAAoF;IACpF,qEAAqE;IACrE,MAAM,qBAAqB,GAAG,eAAe;QAC3C,CAAC,CAAC,aAAa,CAAC,eAAe,EAAE,oBAAoB,CAAC;QACtD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,aAAa,GACjB,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,EAAE,CAAA;IAEJ,MAAM,OAAO,GAAG;QACd,cAAc,EAAK,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QACvE,cAAc,EAAK,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QACvE,YAAY;QACZ,aAAa;QACb,aAAa;QACb,WAAW,EAAQ,EAAE,EAAK,iCAAiC;QAC3D,WAAW,EAAQ,EAAE;QACrB,iBAAiB,EAAE,QAAQ;QAC3B,YAAY,EAAO,MAAM;QACzB,WAAW;QACX,SAAS,EAAU,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACnE,aAAa;QACb,cAAc,EAAK,KAAc;QACjC,aAAa,EAAM,2BAA2B,CAAC,eAAe,CAAC;KAChE,CAAA;IAED,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACtB,kFAAkF;YAClF,mFAAmF;YACnF,qFAAqF;YACrF,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC;YAC3F,sGAAsG,CACvG,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAED,WAAW,CAAC;QACV,aAAa;QACb,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,iBAAiB,EAAE,QAAQ;QAC3B,WAAW,EAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAY,OAAO;QAC1B,UAAU,EAAS,IAAI;KACxB,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;IAE9D,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAC7G,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;IACtI,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;IAClH,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC"}
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.4';
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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"}
@@ -326,7 +326,7 @@ Call Sensing tools exactly as instructed to maintain session memory.
326
326
 
327
327
  ### Session start (mandatory, first thing in every new chat)
328
328
  \`\`\`
329
- sensing_start_session(project_id="${projectId}", working_dir="<cwd>")
329
+ sensing_start_session(project_id="${projectId}")
330
330
  \`\`\`
331
331
  Use the session_id from the tool response (or pass your own unique id per chat). Initialize sequence=1 before your first reply.
332
332
 
@@ -352,7 +352,7 @@ Call these tools as instructed to maintain causal memory of decisions.
352
352
 
353
353
  ### Session start (every session, first thing)
354
354
  \`\`\`
355
- sensing_start_session(project_id="${projectId}", working_dir="<cwd>")
355
+ sensing_start_session(project_id="${projectId}")
356
356
  control_get_session_context(project_id="${projectId}", session_id="<same session_id as sensing_start_session response>")
357
357
  \`\`\`
358
358
  Inject the always_on_summary returned by control_get_session_context into your context.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robrain",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
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.4"
23286
23300
  });
23287
23301
  server.tool(
23288
23302
  "sensing_start_session",
@@ -23291,14 +23305,18 @@ function buildServer() {
23291
23305
  project_id: external_exports.string().describe("Repository name or path hash identifying the project"),
23292
23306
  session_id: external_exports.string().nullish().describe(
23293
23307
  'Unique id for this session. Omit, use null, or "" to let the server generate one (recommended). Otherwise supply a fresh id per chat (e.g. ISO timestamp + 4 hex chars).'
23294
- ),
23295
- working_dir: external_exports.string().describe("Absolute path to the project root directory")
23308
+ )
23309
+ // working_dir was removed 2026-07-23: it was only ever logged locally and
23310
+ // never forwarded, but instructing agents to send an absolute local path
23311
+ // trips editor security policies (Codex flags it as data egress). Old
23312
+ // instruction blocks that still pass it are tolerated — zod strips
23313
+ // unknown keys.
23296
23314
  },
23297
- async ({ project_id, session_id, working_dir }) => {
23315
+ async ({ project_id, session_id }) => {
23298
23316
  const sessionId = resolveSessionId(session_id);
23299
23317
  sessionRegistry.register(sessionId, project_id);
23300
23318
  const summaryResult = await fetchAlwaysOnSummary(project_id);
23301
- console.error(`[Sensing] Session started: ${sessionId} (${project_id}) @ ${working_dir}`);
23319
+ console.error(`[Sensing] Session started: ${sessionId} (${project_id})`);
23302
23320
  return {
23303
23321
  content: [{
23304
23322
  type: "text",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robrain/sensing-mcp",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js"