negotium 0.2.12 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/agent-helpers.js +34 -8
  2. package/dist/agent-helpers.js.map +6 -6
  3. package/dist/background-bash.js +32 -6
  4. package/dist/background-bash.js.map +4 -4
  5. package/dist/browser-runtime.js +14 -2
  6. package/dist/browser-runtime.js.map +3 -3
  7. package/dist/{chunk-8asy22vc.js → chunk-5g5a63vv.js} +32 -6
  8. package/dist/{chunk-8asy22vc.js.map → chunk-5g5a63vv.js.map} +4 -4
  9. package/dist/hosted-agent.js +33 -7
  10. package/dist/hosted-agent.js.map +5 -5
  11. package/dist/main.js +603 -353
  12. package/dist/main.js.map +12 -11
  13. package/dist/mcp-factories.js +34 -8
  14. package/dist/mcp-factories.js.map +6 -6
  15. package/dist/mcp-servers.js +3 -2
  16. package/dist/mcp-servers.js.map +3 -3
  17. package/dist/prompts.js +14 -2
  18. package/dist/prompts.js.map +3 -3
  19. package/dist/query-runtime.js +14 -2
  20. package/dist/query-runtime.js.map +3 -3
  21. package/dist/registry.js +3 -3
  22. package/dist/registry.js.map +2 -2
  23. package/dist/rollout.js +1 -1
  24. package/dist/runtime/src/index.ts +9 -0
  25. package/dist/runtime/src/node-host.ts +9 -0
  26. package/dist/runtime/src/platform/background-bash/manager.ts +45 -5
  27. package/dist/runtime/src/platform/config.ts +35 -2
  28. package/dist/runtime/src/runtime/bashrs-completions.ts +328 -0
  29. package/dist/runtime/src/runtime/turn-runner.ts +6 -0
  30. package/dist/runtime/src/version.ts +1 -1
  31. package/dist/runtime-helpers.js +14 -2
  32. package/dist/runtime-helpers.js.map +3 -3
  33. package/dist/types/apps/negotium/src/mcp-servers.d.ts +16 -3
  34. package/dist/types/packages/core/src/platform/background-bash/manager.d.ts +6 -1
  35. package/dist/types/packages/core/src/platform/config.d.ts +21 -1
  36. package/dist/types/packages/core/src/version.d.ts +1 -1
  37. package/dist/vault.js +14 -2
  38. package/dist/vault.js.map +3 -3
  39. package/install-bash-rs.mjs +77 -0
  40. package/package.json +3 -2
  41. package/dist/runtime/src/mcp/background-bash-server.ts +0 -756
@@ -163,6 +163,16 @@ function resolveBrowserRsBin(envValue) {
163
163
  return;
164
164
  }
165
165
  }
166
+ function resolveBashRsBin(envValue) {
167
+ const override = envValue?.trim();
168
+ const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "bash-rs", BASH_RS_VERSION, "bash-rs");
169
+ try {
170
+ accessSync(candidate, constants.X_OK);
171
+ return candidate;
172
+ } catch {
173
+ return;
174
+ }
175
+ }
166
176
  function resolveBrowserMcpBin(envValue) {
167
177
  const override = envValue?.trim();
168
178
  if (override)
@@ -240,7 +250,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
240
250
  function codexAuthFilePath() {
241
251
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
242
252
  }
243
- var HOME, PROJECT_ROOT, STATE_DIR_ENV, STATE_DIR, WORKSPACE_DIR, TOPIC_WORKSPACE_DIR, SHARED_WIKI_DIR, CRON_WORKSPACE_DIR, BROWSER_DIR, BROWSER_PROFILES_DIR, BINARIES_DIR, SECRETS_DIR, DM_WORKSPACE_DIR, SESSION_WORKSPACE_DIR, CLAUDE_EXECUTABLE_ENV, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE = "English", BROWSER_RS_VERSION = "v0.1.19", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", SNIPPETS_API_URL, BROWSER_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, BROWSER_MCP_SSE_PROXY_SERVER, CANONICAL_MCP_PROXY_SERVER, WIKI_SERVER, TOKEN_STATS_SERVER, COMPACTION_LOG_SERVER, SYSTEM_HEALTH_SERVER, AGENT_HEALTH_SERVER, BACKGROUND_BASH_SERVER, VAULT_SERVER, BG_BASH_BASE_PORT, BG_BASH_MAX_PORT, RUNTIME_MCP_SECRET, NODE_CONTROL_TOKEN, VAULT_MASTER_KEY, NEGOTIUM_PORT, hostname, DATA_DIR, LOG_DIR, UPLOADS_DIR, VAULT_DIR, SESSIONS_DB, DEBUG_FILE, USERS_LOG_DIR, RUN_DIR, PROGRESS_DIR, DM_CMD_DIR, DM_RESP_DIR, SESSION_INBOX_DIR, SESSION_ASKS_DIR, PLAYWRIGHT_BASE_PORT, PLAYWRIGHT_MAX_PORT, PLAYWRIGHT_PORTS_DIR, ACTIVE_QUERY_STALE_MS, AGENTS_PROMPTS_DIR, RESOURCES_DIR, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5", MODEL_FABLE = "claude-fable-5", FALLBACK_AGENT, SESSION_AGENT, GATEWAY_AGENT, FALLBACK_MODEL, SESSION_MODEL, GATEWAY_MODEL, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, _envMaxTellDepth, MAX_TELL_DEPTH;
253
+ var HOME, PROJECT_ROOT, STATE_DIR_ENV, STATE_DIR, WORKSPACE_DIR, TOPIC_WORKSPACE_DIR, SHARED_WIKI_DIR, CRON_WORKSPACE_DIR, BROWSER_DIR, BROWSER_PROFILES_DIR, BINARIES_DIR, SECRETS_DIR, DM_WORKSPACE_DIR, SESSION_WORKSPACE_DIR, CLAUDE_EXECUTABLE_ENV, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE = "English", BROWSER_RS_VERSION = "v0.1.19", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.5", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, BROWSER_MCP_SSE_PROXY_SERVER, CANONICAL_MCP_PROXY_SERVER, WIKI_SERVER, TOKEN_STATS_SERVER, COMPACTION_LOG_SERVER, SYSTEM_HEALTH_SERVER, AGENT_HEALTH_SERVER, VAULT_SERVER, BG_BASH_BASE_PORT, BG_BASH_MAX_PORT, RUNTIME_MCP_SECRET, NODE_CONTROL_TOKEN, VAULT_MASTER_KEY, NEGOTIUM_PORT, hostname, DATA_DIR, LOG_DIR, UPLOADS_DIR, VAULT_DIR, SESSIONS_DB, DEBUG_FILE, USERS_LOG_DIR, RUN_DIR, PROGRESS_DIR, DM_CMD_DIR, DM_RESP_DIR, SESSION_INBOX_DIR, SESSION_ASKS_DIR, BASHRS_SPILL_ROOT, PLAYWRIGHT_BASE_PORT, PLAYWRIGHT_MAX_PORT, PLAYWRIGHT_PORTS_DIR, ACTIVE_QUERY_STALE_MS, AGENTS_PROMPTS_DIR, RESOURCES_DIR, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5", MODEL_FABLE = "claude-fable-5", FALLBACK_AGENT, SESSION_AGENT, GATEWAY_AGENT, FALLBACK_MODEL, SESSION_MODEL, GATEWAY_MODEL, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, _envMaxTellDepth, MAX_TELL_DEPTH;
244
254
  var init_config = __esm(() => {
245
255
  init_config_helpers();
246
256
  init_logger();
@@ -263,6 +273,7 @@ var init_config = __esm(() => {
263
273
  CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
264
274
  SNIPPETS_API_URL = (envText("NEGOTIUM_SNIPPETS_API_URL") ?? envText("SNIPPETS_API_URL") ?? "").replace(/\/+$/, "");
265
275
  BROWSER_RS_BIN = resolveBrowserRsBin(envText("NEGOTIUM_BROWSER_RS_BIN"));
276
+ BASH_RS_BIN = resolveBashRsBin(envText("NEGOTIUM_BASH_RS_BIN"));
266
277
  PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
267
278
  TSX_BIN = resolveDependencyBin("tsx");
268
279
  TSX_LOADER = createRequire(import.meta.url).resolve("tsx");
@@ -276,7 +287,6 @@ var init_config = __esm(() => {
276
287
  COMPACTION_LOG_SERVER = resolve(PROJECT_ROOT, "src/mcp/compaction-log-server.ts");
277
288
  SYSTEM_HEALTH_SERVER = resolve(PROJECT_ROOT, "src/mcp/system-health-server.ts");
278
289
  AGENT_HEALTH_SERVER = resolve(PROJECT_ROOT, "src/mcp/agent-health-server.ts");
279
- BACKGROUND_BASH_SERVER = resolve(PROJECT_ROOT, "src/mcp/background-bash-server.ts");
280
290
  VAULT_SERVER = resolve(PROJECT_ROOT, "src/mcp/vault-server.ts");
281
291
  BG_BASH_BASE_PORT = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
282
292
  BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
@@ -299,6 +309,7 @@ var init_config = __esm(() => {
299
309
  DM_RESP_DIR = resolve(RUN_DIR, "dm-responses");
300
310
  SESSION_INBOX_DIR = resolve(RUN_DIR, "session-inbox");
301
311
  SESSION_ASKS_DIR = resolve(RUN_DIR, "session-asks");
312
+ BASHRS_SPILL_ROOT = resolve(RUN_DIR, "bashrs");
302
313
  PLAYWRIGHT_BASE_PORT = parsePortEnv(process.env.PLAYWRIGHT_BASE_PORT, 9100);
303
314
  PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
304
315
  PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR, "playwright-ports");
@@ -941,7 +952,7 @@ var init_claude_registry = __esm(() => {
941
952
  });
942
953
 
943
954
  // ../../packages/core/src/version.ts
944
- var NEGOTIUM_VERSION = "0.2.12";
955
+ var NEGOTIUM_VERSION = "0.2.14";
945
956
 
946
957
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
947
958
  import { spawn as spawn2 } from "child_process";
@@ -1383,7 +1394,7 @@ function createBackgroundBashManager(options = {}) {
1383
1394
  const knownContexts = new Map;
1384
1395
  const runtimeCapability = options.capability ?? randomBytes2(32).toString("hex");
1385
1396
  const runtimeServerId = options.serverId ?? randomBytes2(16).toString("hex");
1386
- const serverFile = options.serverFile ?? BACKGROUND_BASH_SERVER;
1397
+ const bashRsBin = options.bashRsBin ?? BASH_RS_BIN;
1387
1398
  const basePort = options.basePort ?? BG_BASH_BASE_PORT;
1388
1399
  const maxPort = options.maxPort ?? BG_BASH_MAX_PORT;
1389
1400
  const fetchImpl = options.fetch ?? globalThis.fetch;
@@ -1415,7 +1426,15 @@ function createBackgroundBashManager(options = {}) {
1415
1426
  const response = await fetchImpl(`http://127.0.0.1:${port}/health`, {
1416
1427
  signal: AbortSignal.timeout(2000)
1417
1428
  });
1418
- return response.ok && await response.text() === runtimeServerId;
1429
+ if (!response.ok)
1430
+ return false;
1431
+ const body = await response.text();
1432
+ try {
1433
+ const parsed = JSON.parse(body);
1434
+ return Boolean(parsed) && typeof parsed === "object" && parsed.instance_id === runtimeServerId;
1435
+ } catch {
1436
+ return false;
1437
+ }
1419
1438
  } catch {
1420
1439
  return false;
1421
1440
  }
@@ -1433,14 +1452,20 @@ function createBackgroundBashManager(options = {}) {
1433
1452
  logger.info({ key, port: instance.port }, "background-bash server killed");
1434
1453
  }
1435
1454
  async function spawnServer(key, reservedPort, excludedPorts = new Set) {
1455
+ if (!bashRsBin) {
1456
+ throw new Error(`background-bash requires the bash-rs ${BASH_RS_VERSION} binary; run install-bash-rs.mjs (or set NEGOTIUM_BASH_RS_BIN)`);
1457
+ }
1436
1458
  const port = reservedPort ?? await allocatePort(excludedPorts);
1437
- const process2 = spawnImpl("bun", ["run", serverFile, `--port=${port}`], {
1459
+ const process2 = spawnImpl(bashRsBin, [String(port)], {
1438
1460
  stdio: "ignore",
1439
1461
  detached: false,
1440
1462
  env: {
1441
1463
  ...options.env ?? globalThis.process.env,
1442
1464
  NEGOTIUM_BG_BASH_CAPABILITY: runtimeCapability,
1443
- NEGOTIUM_BG_BASH_SERVER_ID: runtimeServerId
1465
+ NEGOTIUM_BG_BASH_SERVER_ID: runtimeServerId,
1466
+ BASHRS_HTTP_CAPABILITY: runtimeCapability,
1467
+ BASHRS_INSTANCE_ID: runtimeServerId,
1468
+ BASHRS_SPILL_ROOT
1444
1469
  }
1445
1470
  });
1446
1471
  process2.once("error", (error) => {
@@ -16304,6 +16329,7 @@ function startAiTurn(params) {
16304
16329
  bgBashPort = await ensureBgBash(userId, topic.id);
16305
16330
  } catch (err) {
16306
16331
  logger.warn({ topicId, err }, "ai: ensureBgBash failed \u2014 proceeding without background bash tools");
16332
+ turnReminders.push("<system-reminder>Background bash tools are UNAVAILABLE this turn. The `background_bash_*` tools could not be prepared, most often because the bash-rs binary is not installed on this host. Do not attempt to call them; run short commands in the foreground instead, and tell the user if the work genuinely needs a background job.</system-reminder>");
16307
16333
  }
16308
16334
  }
16309
16335
  if (playwrightRequested && !browserProfileOwner) {
@@ -19670,4 +19696,4 @@ export {
19670
19696
  createAgentHealthMcpServer
19671
19697
  };
19672
19698
 
19673
- //# debugId=68AEE1F03C0C172264756E2164756E21
19699
+ //# debugId=4E9AA09E3DBFE2A464756E2164756E21