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.
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +13 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain.js +1 -1
- package/dist/commands/export-interchange.js +1 -1
- package/dist/commands/export-memory.js +1 -1
- package/dist/commands/inject.js +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +28 -3
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/outcomes.js +2 -2
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +11 -5
- package/dist/commands/projects.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/lib/config.d.ts +6 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +22 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/control-bundle.d.ts +33 -0
- package/dist/lib/control-bundle.d.ts.map +1 -0
- package/dist/lib/control-bundle.js +91 -0
- package/dist/lib/control-bundle.js.map +1 -0
- package/dist/lib/control-bundle.test.d.ts +2 -0
- package/dist/lib/control-bundle.test.d.ts.map +1 -0
- package/dist/lib/control-bundle.test.js +127 -0
- package/dist/lib/control-bundle.test.js.map +1 -0
- package/dist/lib/editor.js +2 -2
- package/package.json +2 -2
- package/vendor/codex-hooks/lib.mjs +19 -2
- package/vendor/sensing-mcp/dist/index.js +30 -12
- package/vendor/sensing-mcp/package.json +1 -1
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoCA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkNnD"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/explain.js
CHANGED
|
@@ -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://
|
|
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://
|
|
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://
|
|
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)
|
package/dist/commands/inject.js
CHANGED
|
@@ -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://
|
|
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;
|
|
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"}
|
package/dist/commands/install.js
CHANGED
|
@@ -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.
|
|
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://
|
|
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.
|
|
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":"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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://
|
|
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://
|
|
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":"
|
|
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://
|
|
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":"AAAA,2BAA2B;AAC3B,gEAAgE;AAChE,iEAAiE;AACjE,8DAA8D;AAC9D,gEAAgE;AAEhE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;
|
|
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.
|
|
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://
|
|
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) => {
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -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;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -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
|
-
|
|
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 {};
|
package/dist/lib/config.js.map
CHANGED
|
@@ -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,
|
|
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 @@
|
|
|
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/dist/lib/editor.js
CHANGED
|
@@ -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}"
|
|
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}"
|
|
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.
|
|
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
|
|
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://
|
|
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
|
-
|
|
6573
|
-
|
|
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(`${
|
|
6589
|
+
const res = await fetchEmbedding(`${baseUrl}/embeddings`, {
|
|
6576
6590
|
method: "POST",
|
|
6577
6591
|
headers: {
|
|
6578
|
-
"
|
|
6579
|
-
"
|
|
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://
|
|
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.
|
|
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:
|
|
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
|
|
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})
|
|
23319
|
+
console.error(`[Sensing] Session started: ${sessionId} (${project_id})`);
|
|
23302
23320
|
return {
|
|
23303
23321
|
content: [{
|
|
23304
23322
|
type: "text",
|