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
@@ -254,6 +254,16 @@ function resolveBrowserRsBin(envValue) {
254
254
  return;
255
255
  }
256
256
  }
257
+ function resolveBashRsBin(envValue) {
258
+ const override = envValue?.trim();
259
+ const candidate = override ? resolve2(override) : resolve2(BINARIES_DIR, "bash-rs", BASH_RS_VERSION, "bash-rs");
260
+ try {
261
+ accessSync(candidate, constants.X_OK);
262
+ return candidate;
263
+ } catch {
264
+ return;
265
+ }
266
+ }
257
267
  function resolveBrowserMcpBin(envValue) {
258
268
  const override = envValue?.trim();
259
269
  if (override)
@@ -331,7 +341,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
331
341
  function codexAuthFilePath() {
332
342
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
333
343
  }
334
- 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;
344
+ 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;
335
345
  var init_config = __esm(() => {
336
346
  init_config_helpers();
337
347
  init_logger();
@@ -354,6 +364,7 @@ var init_config = __esm(() => {
354
364
  CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve2(CLAUDE_EXECUTABLE_ENV) : undefined;
355
365
  SNIPPETS_API_URL = (envText("NEGOTIUM_SNIPPETS_API_URL") ?? envText("SNIPPETS_API_URL") ?? "").replace(/\/+$/, "");
356
366
  BROWSER_RS_BIN = resolveBrowserRsBin(envText("NEGOTIUM_BROWSER_RS_BIN"));
367
+ BASH_RS_BIN = resolveBashRsBin(envText("NEGOTIUM_BASH_RS_BIN"));
357
368
  PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
358
369
  TSX_BIN = resolveDependencyBin("tsx");
359
370
  TSX_LOADER = createRequire(import.meta.url).resolve("tsx");
@@ -367,7 +378,6 @@ var init_config = __esm(() => {
367
378
  COMPACTION_LOG_SERVER = resolve2(PROJECT_ROOT, "src/mcp/compaction-log-server.ts");
368
379
  SYSTEM_HEALTH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/system-health-server.ts");
369
380
  AGENT_HEALTH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/agent-health-server.ts");
370
- BACKGROUND_BASH_SERVER = resolve2(PROJECT_ROOT, "src/mcp/background-bash-server.ts");
371
381
  VAULT_SERVER = resolve2(PROJECT_ROOT, "src/mcp/vault-server.ts");
372
382
  BG_BASH_BASE_PORT = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
373
383
  BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
@@ -390,6 +400,7 @@ var init_config = __esm(() => {
390
400
  DM_RESP_DIR = resolve2(RUN_DIR, "dm-responses");
391
401
  SESSION_INBOX_DIR = resolve2(RUN_DIR, "session-inbox");
392
402
  SESSION_ASKS_DIR = resolve2(RUN_DIR, "session-asks");
403
+ BASHRS_SPILL_ROOT = resolve2(RUN_DIR, "bashrs");
393
404
  PLAYWRIGHT_BASE_PORT = parsePortEnv(process.env.PLAYWRIGHT_BASE_PORT, 9100);
394
405
  PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
395
406
  PLAYWRIGHT_PORTS_DIR = resolve2(RUN_DIR, "playwright-ports");
@@ -565,7 +576,7 @@ function createBackgroundBashManager(options = {}) {
565
576
  const knownContexts = new Map;
566
577
  const runtimeCapability = options.capability ?? randomBytes2(32).toString("hex");
567
578
  const runtimeServerId = options.serverId ?? randomBytes2(16).toString("hex");
568
- const serverFile = options.serverFile ?? BACKGROUND_BASH_SERVER;
579
+ const bashRsBin = options.bashRsBin ?? BASH_RS_BIN;
569
580
  const basePort = options.basePort ?? BG_BASH_BASE_PORT;
570
581
  const maxPort = options.maxPort ?? BG_BASH_MAX_PORT;
571
582
  const fetchImpl = options.fetch ?? globalThis.fetch;
@@ -597,7 +608,15 @@ function createBackgroundBashManager(options = {}) {
597
608
  const response = await fetchImpl(`http://127.0.0.1:${port}/health`, {
598
609
  signal: AbortSignal.timeout(2000)
599
610
  });
600
- return response.ok && await response.text() === runtimeServerId;
611
+ if (!response.ok)
612
+ return false;
613
+ const body = await response.text();
614
+ try {
615
+ const parsed = JSON.parse(body);
616
+ return Boolean(parsed) && typeof parsed === "object" && parsed.instance_id === runtimeServerId;
617
+ } catch {
618
+ return false;
619
+ }
601
620
  } catch {
602
621
  return false;
603
622
  }
@@ -615,14 +634,20 @@ function createBackgroundBashManager(options = {}) {
615
634
  logger.info({ key, port: instance.port }, "background-bash server killed");
616
635
  }
617
636
  async function spawnServer(key, reservedPort, excludedPorts = new Set) {
637
+ if (!bashRsBin) {
638
+ throw new Error(`background-bash requires the bash-rs ${BASH_RS_VERSION} binary; run install-bash-rs.mjs (or set NEGOTIUM_BASH_RS_BIN)`);
639
+ }
618
640
  const port = reservedPort ?? await allocatePort(excludedPorts);
619
- const process2 = spawnImpl("bun", ["run", serverFile, `--port=${port}`], {
641
+ const process2 = spawnImpl(bashRsBin, [String(port)], {
620
642
  stdio: "ignore",
621
643
  detached: false,
622
644
  env: {
623
645
  ...options.env ?? globalThis.process.env,
624
646
  NEGOTIUM_BG_BASH_CAPABILITY: runtimeCapability,
625
- NEGOTIUM_BG_BASH_SERVER_ID: runtimeServerId
647
+ NEGOTIUM_BG_BASH_SERVER_ID: runtimeServerId,
648
+ BASHRS_HTTP_CAPABILITY: runtimeCapability,
649
+ BASHRS_INSTANCE_ID: runtimeServerId,
650
+ BASHRS_SPILL_ROOT
626
651
  }
627
652
  });
628
653
  process2.once("error", (error) => {
@@ -2148,7 +2173,7 @@ var init_claude_registry = __esm(() => {
2148
2173
  });
2149
2174
 
2150
2175
  // ../../packages/core/src/version.ts
2151
- var NEGOTIUM_VERSION = "0.2.12";
2176
+ var NEGOTIUM_VERSION = "0.2.14";
2152
2177
 
2153
2178
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
2154
2179
  import { spawn as spawn2 } from "child_process";
@@ -16318,6 +16343,7 @@ function startAiTurn(params) {
16318
16343
  bgBashPort = await ensureBgBash(userId, topic.id);
16319
16344
  } catch (err2) {
16320
16345
  logger.warn({ topicId, err: err2 }, "ai: ensureBgBash failed \u2014 proceeding without background bash tools");
16346
+ 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>");
16321
16347
  }
16322
16348
  }
16323
16349
  if (playwrightRequested && !browserProfileOwner) {
@@ -18553,4 +18579,4 @@ export {
18553
18579
  DEFAULT_SELF_CONFIG_PRODUCT
18554
18580
  };
18555
18581
 
18556
- //# debugId=A750A8503E5A9A9064756E2164756E21
18582
+ //# debugId=1F2C27A2871EECB564756E2164756E21