negotium 0.2.7 → 0.2.9

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 (38) hide show
  1. package/dist/agent-helpers.js +40 -24
  2. package/dist/agent-helpers.js.map +9 -9
  3. package/dist/background-bash.js +2 -2
  4. package/dist/background-bash.js.map +2 -2
  5. package/dist/browser-runtime.js +4 -3
  6. package/dist/browser-runtime.js.map +4 -4
  7. package/dist/{chunk-qmbcbhyy.js → chunk-knv045mn.js} +2 -2
  8. package/dist/{chunk-qmbcbhyy.js.map → chunk-knv045mn.js.map} +2 -2
  9. package/dist/hosted-agent.js +8 -4
  10. package/dist/hosted-agent.js.map +5 -5
  11. package/dist/main.js +40 -24
  12. package/dist/main.js.map +9 -9
  13. package/dist/mcp-factories.js +40 -24
  14. package/dist/mcp-factories.js.map +9 -9
  15. package/dist/prompts.js +14 -4
  16. package/dist/prompts.js.map +4 -4
  17. package/dist/query-runtime.js +2 -2
  18. package/dist/query-runtime.js.map +2 -2
  19. package/dist/registry.js +10 -5
  20. package/dist/registry.js.map +4 -4
  21. package/dist/rollout.js +1 -1
  22. package/dist/runtime/src/agents/claude-provider.ts +7 -0
  23. package/dist/runtime/src/agents/maestro-registry.ts +37 -2
  24. package/dist/runtime/src/agents/model-catalog.ts +18 -4
  25. package/dist/runtime/src/mcp/background-bash-server.ts +194 -17
  26. package/dist/runtime/src/platform/config.ts +1 -1
  27. package/dist/runtime/src/platform/playwright/vault-broker.ts +7 -0
  28. package/dist/runtime/src/runtime/turn-runner.ts +34 -11
  29. package/dist/runtime/src/version.ts +1 -1
  30. package/dist/runtime-helpers.js +2 -2
  31. package/dist/runtime-helpers.js.map +2 -2
  32. package/dist/types/packages/core/src/agents/model-catalog.d.ts +4 -3
  33. package/dist/types/packages/core/src/platform/config.d.ts +1 -1
  34. package/dist/types/packages/core/src/version.d.ts +1 -1
  35. package/dist/vault.js +2 -2
  36. package/dist/vault.js.map +2 -2
  37. package/install-browser-rs.mjs +3 -3
  38. package/package.json +2 -2
package/dist/main.js CHANGED
@@ -253,7 +253,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
253
253
  function codexAuthFilePath() {
254
254
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
255
255
  }
256
- 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.16", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", 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;
256
+ 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.17", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", 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;
257
257
  var init_config = __esm(() => {
258
258
  init_config_helpers();
259
259
  init_logger();
@@ -1560,7 +1560,7 @@ var exports_version = {};
1560
1560
  __export(exports_version, {
1561
1561
  NEGOTIUM_VERSION: () => NEGOTIUM_VERSION
1562
1562
  });
1563
- var NEGOTIUM_VERSION = "0.2.7";
1563
+ var NEGOTIUM_VERSION = "0.2.9";
1564
1564
 
1565
1565
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
1566
1566
  import { spawn } from "child_process";
@@ -3633,6 +3633,9 @@ function existingCreatedAt(path) {
3633
3633
  return;
3634
3634
  }
3635
3635
  }
3636
+ function nonEmptyTurnText(text) {
3637
+ return text.trim().length > 0 ? text : BLANK_TURN_PLACEHOLDER;
3638
+ }
3636
3639
  function writeRollout(options) {
3637
3640
  const sessionId = options.reuseSessionId ?? randomUUID3();
3638
3641
  assertUuidLike("sessionId", sessionId);
@@ -3640,8 +3643,8 @@ function writeRollout(options) {
3640
3643
  const path = maestroSessionPath(sessionId);
3641
3644
  mkdirSync6(maestroSessionsDir(), { recursive: true });
3642
3645
  const messages = extractChatPairs(options.entries).flatMap((pair) => [
3643
- { role: "user", content: pair.userText },
3644
- { role: "assistant", content: pair.assistantText }
3646
+ { role: "user", content: nonEmptyTurnText(pair.userText) },
3647
+ { role: "assistant", content: nonEmptyTurnText(pair.assistantText) }
3645
3648
  ]);
3646
3649
  const lines = [
3647
3650
  {
@@ -3661,13 +3664,14 @@ function writeRollout(options) {
3661
3664
  });
3662
3665
  return { sessionId, rolloutPath: path };
3663
3666
  }
3664
- var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, maestroRegistryOperations;
3667
+ var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, BLANK_TURN_PLACEHOLDER = "(no text content in this turn)", maestroRegistryOperations;
3665
3668
  var init_maestro_registry = __esm(() => {
3666
3669
  init_shared();
3667
3670
  init_logger();
3668
3671
  init_types();
3669
3672
  ALIAS_MAP2 = {
3670
3673
  "deepseek-pro": "deepseek-v4-pro",
3674
+ "deepseek-flash": "deepseek-v4-flash",
3671
3675
  kimi: "kimi-k3",
3672
3676
  "kimi-pro": "kimi-k3",
3673
3677
  "kimi-code": "kimi-k2.7-code"
@@ -4988,7 +4992,11 @@ var init_claude_provider = __esm(async () => {
4988
4992
  "TaskCreate",
4989
4993
  "TaskUpdate",
4990
4994
  "TaskList",
4991
- "TaskGet"
4995
+ "TaskGet",
4996
+ "ScheduleWakeup",
4997
+ "CronCreate",
4998
+ "CronList",
4999
+ "CronDelete"
4992
5000
  ];
4993
5001
  CLAUDE_NATIVE_AGENT_TOOLS = ["Task", "Agent", "TaskOutput", "TaskStop"];
4994
5002
  CLAUDE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
@@ -8918,7 +8926,7 @@ function resolveCompactionExecution(agent, registry) {
8918
8926
  const effort = registry.validateEffort("medium") ? "medium" : registry.defaultEffort;
8919
8927
  return { model, ...effort ? { effort } : {} };
8920
8928
  }
8921
- var MODEL_OWNER, MODEL_COST_RESEARCHED_AT = "2026-07-19", MODEL_COST_ROUTING_SUMMARY = "Cost basis (2026-07-19): Codex Pro 20x and Claude Max 20x are each $200/month; Maestro models are pay-per-token. DeepSeek Pro is cheapest.", CODEX_PRO_20X_COST = "ChatGPT Pro 20x subscription: $200/month", CODEX_COMMUNITY_WEEKLY = "Community plan-level observation: roughly 2\u20134B raw/cached tokens per week; fresh-input equivalent is much lower and unstable (low confidence)", CLAUDE_MAX_20X_COST = "Claude Max 20x subscription: $200/month", CLAUDE_COMMUNITY_SESSION = "Community observations vary from roughly 220\u2013250K locally displayed tokens per 5-hour session to billions of cache-heavy raw tokens per week; calibrated reports value a full weekly allowance around $680\u2013$1,900 at API rates. Recent heavy-model reports reach the weekly cap after about 4\u20135 full sessions (low confidence; not a token cap)", SELECTABLE_MODELS, SELECTABLE_MODEL_ALIASES, FALLBACK_ORDER, AGENT_DISPLAY_NAME;
8929
+ var MODEL_OWNER, MODEL_COST_RESEARCHED_AT = "2026-08-04", MODEL_COST_ROUTING_SUMMARY = "Cost basis (2026-08-04): Codex Pro 20x and Claude Max 20x are each $200/month; Maestro models are pay-per-token. DeepSeek Flash is cheapest.", CODEX_PRO_20X_COST = "ChatGPT Pro 20x subscription: $200/month", CODEX_COMMUNITY_WEEKLY = "Community plan-level observation: roughly 2\u20134B raw/cached tokens per week; fresh-input equivalent is much lower and unstable (low confidence)", CLAUDE_MAX_20X_COST = "Claude Max 20x subscription: $200/month", CLAUDE_COMMUNITY_SESSION = "Community observations vary from roughly 220\u2013250K locally displayed tokens per 5-hour session to billions of cache-heavy raw tokens per week; calibrated reports value a full weekly allowance around $680\u2013$1,900 at API rates. Recent heavy-model reports reach the weekly cap after about 4\u20135 full sessions (low confidence; not a token cap)", SELECTABLE_MODELS, SELECTABLE_MODEL_ALIASES, FALLBACK_ORDER, AGENT_DISPLAY_NAME;
8922
8930
  var init_model_catalog = __esm(() => {
8923
8931
  init_config();
8924
8932
  MODEL_OWNER = {
@@ -9025,10 +9033,20 @@ var init_model_catalog = __esm(() => {
9025
9033
  agent: "maestro",
9026
9034
  description: "API-priced Sonnet-level route for cost-efficient everyday work.",
9027
9035
  intelligenceTier: "sonnet",
9028
- routingSummary: "cost-efficient everyday work; pay-per-token and cheapest route",
9036
+ routingSummary: "cost-efficient everyday work; pay-per-token, pricier than DeepSeek Flash",
9029
9037
  accessCost: "DeepSeek V4 Pro pay-as-you-go API; no monthly subscription required",
9030
9038
  marginalTokenCost: "DeepSeek API: $0.435/M uncached input, $0.003625/M cached input, $0.87/M output",
9031
9039
  estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 500 requests."
9040
+ },
9041
+ {
9042
+ model: "deepseek-flash",
9043
+ agent: "maestro",
9044
+ description: "Faster, cheaper DeepSeek V4 variant (DeepSeek-V4-Flash-0731) at similar Sonnet-level quality for high-volume everyday work.",
9045
+ intelligenceTier: "sonnet",
9046
+ routingSummary: "cheapest overall route; pay-per-token, 1M context, 5x Pro's concurrency limit",
9047
+ accessCost: "DeepSeek V4 Flash pay-as-you-go API; no monthly subscription required",
9048
+ marginalTokenCost: "DeepSeek API: $0.14/M uncached input, $0.0028/M cached input, $0.28/M output",
9049
+ estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 2500 requests."
9032
9050
  }
9033
9051
  ];
9034
9052
  SELECTABLE_MODEL_ALIASES = {
@@ -9905,7 +9923,8 @@ var init_vault_broker = __esm(async () => {
9905
9923
  browser_snapshot: { argument: "maxLength", field: "snapshot" },
9906
9924
  browser_api_request: { argument: "maxBytes", field: "body" },
9907
9925
  browser_get_visible_text: { argument: "maxLength", field: "text" },
9908
- browser_get_visible_html: { argument: "maxLength", field: "html" }
9926
+ browser_get_visible_html: { argument: "maxLength", field: "html" },
9927
+ browser_iframe_read: { argument: "maxLength", field: "content" }
9909
9928
  };
9910
9929
  });
9911
9930
 
@@ -18514,10 +18533,9 @@ function startAiTurn(params) {
18514
18533
  ].join(`
18515
18534
  `);
18516
18535
  }
18536
+ const turnReminders = [];
18517
18537
  if (params.from === FROM_AUTO_CONTINUE) {
18518
- systemPrompt += `
18519
-
18520
- <system-reminder>\uC774 \uD134\uC740 \uC124\uC815 \uC790\uB3D9 \uC870\uC815(effort/model/agent) \uD6C4 \uC790\uB3D9 \uC7AC\uAC1C\uB41C \uD134\uC774\uB2E4. effort/model/agent \uB09C\uC774\uB3C4 \uC7AC\uD3C9\uAC00 \uBC0F \uC124\uC815 \uBCC0\uACBD \uC5C6\uC774 \uC989\uC2DC \uC791\uC5C5\uC744 \uC2DC\uC791\uD560 \uAC83.</system-reminder>`;
18538
+ turnReminders.push("<system-reminder>\uC774 \uD134\uC740 \uC124\uC815 \uC790\uB3D9 \uC870\uC815(effort/model/agent) \uD6C4 \uC790\uB3D9 \uC7AC\uAC1C\uB41C \uD134\uC774\uB2E4. effort/model/agent \uB09C\uC774\uB3C4 \uC7AC\uD3C9\uAC00 \uBC0F \uC124\uC815 \uBCC0\uACBD \uC5C6\uC774 \uC989\uC2DC \uC791\uC5C5\uC744 \uC2DC\uC791\uD560 \uAC83.</system-reminder>");
18521
18539
  }
18522
18540
  if (!silent && !sessionRetried) {
18523
18541
  const promptsToRecord = userConversationPromptsToRecord(renderedUserPrompts, loggedUserMessageCount, agentPrompt);
@@ -18600,26 +18618,24 @@ function startAiTurn(params) {
18600
18618
  logger.warn({ topicId, err: err2 }, "ai: ensureBgBash failed \u2014 proceeding without background bash tools");
18601
18619
  }
18602
18620
  }
18603
- let effectiveSystemPrompt = systemPrompt;
18604
18621
  if (playwrightRequested && !browserProfileOwner) {
18605
- const ownerOnlyNote = "<system-reminder>Browser tools are unavailable in this turn because browser profiles are private to the topic owner. Do not attempt browser calls or ask to reuse the owner's login state.</system-reminder>";
18606
- effectiveSystemPrompt = `${effectiveSystemPrompt}
18607
-
18608
- ${ownerOnlyNote}`;
18622
+ turnReminders.push("<system-reminder>Browser tools are unavailable in this turn because browser profiles are private to the topic owner. Do not attempt browser calls or ask to reuse the owner's login state.</system-reminder>");
18609
18623
  }
18610
18624
  if (consumePlaywrightUnavailable(userId, topic.title)) {
18611
- const playwrightNote = "<system-reminder>Playwright browser tools are UNAVAILABLE this turn. The `mcp__playwright__*` tools have been removed from this turn's catalog because the long-lived browser MCP could not be prepared. Do not attempt to call browser tools. If browser interaction is required, ask the user to retry shortly or use a non-browser alternative.</system-reminder>";
18612
- effectiveSystemPrompt = `${effectiveSystemPrompt}
18613
-
18614
- ${playwrightNote}`;
18625
+ turnReminders.push("<system-reminder>Playwright browser tools are UNAVAILABLE this turn. The `mcp__playwright__*` tools have been removed from this turn's catalog because the long-lived browser MCP could not be prepared. Do not attempt to call browser tools. If browser interaction is required, ask the user to retry shortly or use a non-browser alternative.</system-reminder>");
18615
18626
  }
18627
+ const effectivePrompt = turnReminders.length > 0 ? `${agentPrompt}
18628
+
18629
+ ${turnReminders.join(`
18630
+
18631
+ `)}` : agentPrompt;
18616
18632
  try {
18617
18633
  yield* runAgent({
18618
18634
  agent: agentKind,
18619
- prompt: agentPrompt,
18635
+ prompt: effectivePrompt,
18620
18636
  attachments: promptAttachments,
18621
18637
  cwd: workspaceCwd,
18622
- systemPrompt: effectiveSystemPrompt,
18638
+ systemPrompt,
18623
18639
  sessionId,
18624
18640
  userId,
18625
18641
  vaultUserId,
@@ -44792,4 +44808,4 @@ switch (command) {
44792
44808
  }
44793
44809
  }
44794
44810
 
44795
- //# debugId=389021771F2E17C964756E2164756E21
44811
+ //# debugId=CF7213F1AB5755D264756E2164756E21