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
@@ -240,7 +240,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
240
240
  function codexAuthFilePath() {
241
241
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
242
242
  }
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.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;
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.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;
244
244
  var init_config = __esm(() => {
245
245
  init_config_helpers();
246
246
  init_logger();
@@ -940,7 +940,7 @@ var init_claude_registry = __esm(() => {
940
940
  });
941
941
 
942
942
  // ../../packages/core/src/version.ts
943
- var NEGOTIUM_VERSION = "0.2.7";
943
+ var NEGOTIUM_VERSION = "0.2.9";
944
944
 
945
945
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
946
946
  import { spawn as spawn2 } from "child_process";
@@ -3131,6 +3131,9 @@ function existingCreatedAt(path) {
3131
3131
  return;
3132
3132
  }
3133
3133
  }
3134
+ function nonEmptyTurnText(text) {
3135
+ return text.trim().length > 0 ? text : BLANK_TURN_PLACEHOLDER;
3136
+ }
3134
3137
  function writeRollout(options) {
3135
3138
  const sessionId = options.reuseSessionId ?? randomUUID4();
3136
3139
  assertUuidLike("sessionId", sessionId);
@@ -3138,8 +3141,8 @@ function writeRollout(options) {
3138
3141
  const path = maestroSessionPath(sessionId);
3139
3142
  mkdirSync7(maestroSessionsDir(), { recursive: true });
3140
3143
  const messages = extractChatPairs(options.entries).flatMap((pair) => [
3141
- { role: "user", content: pair.userText },
3142
- { role: "assistant", content: pair.assistantText }
3144
+ { role: "user", content: nonEmptyTurnText(pair.userText) },
3145
+ { role: "assistant", content: nonEmptyTurnText(pair.assistantText) }
3143
3146
  ]);
3144
3147
  const lines = [
3145
3148
  {
@@ -3159,13 +3162,14 @@ function writeRollout(options) {
3159
3162
  });
3160
3163
  return { sessionId, rolloutPath: path };
3161
3164
  }
3162
- var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, maestroRegistryOperations;
3165
+ var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, BLANK_TURN_PLACEHOLDER = "(no text content in this turn)", maestroRegistryOperations;
3163
3166
  var init_maestro_registry = __esm(() => {
3164
3167
  init_shared();
3165
3168
  init_logger();
3166
3169
  init_types();
3167
3170
  ALIAS_MAP2 = {
3168
3171
  "deepseek-pro": "deepseek-v4-pro",
3172
+ "deepseek-flash": "deepseek-v4-flash",
3169
3173
  kimi: "kimi-k3",
3170
3174
  "kimi-pro": "kimi-k3",
3171
3175
  "kimi-code": "kimi-k2.7-code"
@@ -5073,7 +5077,7 @@ function resolveCompactionExecution(agent, registry) {
5073
5077
  const effort = registry.validateEffort("medium") ? "medium" : registry.defaultEffort;
5074
5078
  return { model, ...effort ? { effort } : {} };
5075
5079
  }
5076
- 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;
5080
+ 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;
5077
5081
  var init_model_catalog = __esm(() => {
5078
5082
  init_config();
5079
5083
  MODEL_OWNER = {
@@ -5180,10 +5184,20 @@ var init_model_catalog = __esm(() => {
5180
5184
  agent: "maestro",
5181
5185
  description: "API-priced Sonnet-level route for cost-efficient everyday work.",
5182
5186
  intelligenceTier: "sonnet",
5183
- routingSummary: "cost-efficient everyday work; pay-per-token and cheapest route",
5187
+ routingSummary: "cost-efficient everyday work; pay-per-token, pricier than DeepSeek Flash",
5184
5188
  accessCost: "DeepSeek V4 Pro pay-as-you-go API; no monthly subscription required",
5185
5189
  marginalTokenCost: "DeepSeek API: $0.435/M uncached input, $0.003625/M cached input, $0.87/M output",
5186
5190
  estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 500 requests."
5191
+ },
5192
+ {
5193
+ model: "deepseek-flash",
5194
+ agent: "maestro",
5195
+ description: "Faster, cheaper DeepSeek V4 variant (DeepSeek-V4-Flash-0731) at similar Sonnet-level quality for high-volume everyday work.",
5196
+ intelligenceTier: "sonnet",
5197
+ routingSummary: "cheapest overall route; pay-per-token, 1M context, 5x Pro's concurrency limit",
5198
+ accessCost: "DeepSeek V4 Flash pay-as-you-go API; no monthly subscription required",
5199
+ marginalTokenCost: "DeepSeek API: $0.14/M uncached input, $0.0028/M cached input, $0.28/M output",
5200
+ estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 2500 requests."
5187
5201
  }
5188
5202
  ];
5189
5203
  SELECTABLE_MODEL_ALIASES = {
@@ -5894,7 +5908,8 @@ var init_vault_broker = __esm(async () => {
5894
5908
  browser_snapshot: { argument: "maxLength", field: "snapshot" },
5895
5909
  browser_api_request: { argument: "maxBytes", field: "body" },
5896
5910
  browser_get_visible_text: { argument: "maxLength", field: "text" },
5897
- browser_get_visible_html: { argument: "maxLength", field: "html" }
5911
+ browser_get_visible_html: { argument: "maxLength", field: "html" },
5912
+ browser_iframe_read: { argument: "maxLength", field: "content" }
5898
5913
  };
5899
5914
  });
5900
5915
 
@@ -8111,7 +8126,11 @@ var init_claude_provider = __esm(async () => {
8111
8126
  "TaskCreate",
8112
8127
  "TaskUpdate",
8113
8128
  "TaskList",
8114
- "TaskGet"
8129
+ "TaskGet",
8130
+ "ScheduleWakeup",
8131
+ "CronCreate",
8132
+ "CronList",
8133
+ "CronDelete"
8115
8134
  ];
8116
8135
  CLAUDE_NATIVE_AGENT_TOOLS = ["Task", "Agent", "TaskOutput", "TaskStop"];
8117
8136
  CLAUDE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
@@ -16201,10 +16220,9 @@ function startAiTurn(params) {
16201
16220
  ].join(`
16202
16221
  `);
16203
16222
  }
16223
+ const turnReminders = [];
16204
16224
  if (params.from === FROM_AUTO_CONTINUE) {
16205
- systemPrompt += `
16206
-
16207
- <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>`;
16225
+ 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>");
16208
16226
  }
16209
16227
  if (!silent && !sessionRetried) {
16210
16228
  const promptsToRecord = userConversationPromptsToRecord(renderedUserPrompts, loggedUserMessageCount, agentPrompt);
@@ -16287,26 +16305,24 @@ function startAiTurn(params) {
16287
16305
  logger.warn({ topicId, err }, "ai: ensureBgBash failed \u2014 proceeding without background bash tools");
16288
16306
  }
16289
16307
  }
16290
- let effectiveSystemPrompt = systemPrompt;
16291
16308
  if (playwrightRequested && !browserProfileOwner) {
16292
- 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>";
16293
- effectiveSystemPrompt = `${effectiveSystemPrompt}
16294
-
16295
- ${ownerOnlyNote}`;
16309
+ 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>");
16296
16310
  }
16297
16311
  if (consumePlaywrightUnavailable(userId, topic.title)) {
16298
- 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>";
16299
- effectiveSystemPrompt = `${effectiveSystemPrompt}
16300
-
16301
- ${playwrightNote}`;
16312
+ 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>");
16302
16313
  }
16314
+ const effectivePrompt = turnReminders.length > 0 ? `${agentPrompt}
16315
+
16316
+ ${turnReminders.join(`
16317
+
16318
+ `)}` : agentPrompt;
16303
16319
  try {
16304
16320
  yield* runAgent({
16305
16321
  agent: agentKind,
16306
- prompt: agentPrompt,
16322
+ prompt: effectivePrompt,
16307
16323
  attachments: promptAttachments,
16308
16324
  cwd: workspaceCwd,
16309
- systemPrompt: effectiveSystemPrompt,
16325
+ systemPrompt,
16310
16326
  sessionId,
16311
16327
  userId,
16312
16328
  vaultUserId,
@@ -19653,4 +19669,4 @@ export {
19653
19669
  createAgentHealthMcpServer
19654
19670
  };
19655
19671
 
19656
- //# debugId=70529255C313CC1964756E2164756E21
19672
+ //# debugId=748AFA809FA3BD1164756E2164756E21