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
@@ -331,7 +331,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
331
331
  function codexAuthFilePath() {
332
332
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
333
333
  }
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.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;
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.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;
335
335
  var init_config = __esm(() => {
336
336
  init_config_helpers();
337
337
  init_logger();
@@ -2147,7 +2147,7 @@ var init_claude_registry = __esm(() => {
2147
2147
  });
2148
2148
 
2149
2149
  // ../../packages/core/src/version.ts
2150
- var NEGOTIUM_VERSION = "0.2.7";
2150
+ var NEGOTIUM_VERSION = "0.2.9";
2151
2151
 
2152
2152
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
2153
2153
  import { spawn as spawn2 } from "child_process";
@@ -3088,6 +3088,9 @@ function existingCreatedAt(path) {
3088
3088
  return;
3089
3089
  }
3090
3090
  }
3091
+ function nonEmptyTurnText(text) {
3092
+ return text.trim().length > 0 ? text : BLANK_TURN_PLACEHOLDER;
3093
+ }
3091
3094
  function writeRollout(options) {
3092
3095
  const sessionId = options.reuseSessionId ?? randomUUID3();
3093
3096
  assertUuidLike("sessionId", sessionId);
@@ -3095,8 +3098,8 @@ function writeRollout(options) {
3095
3098
  const path = maestroSessionPath(sessionId);
3096
3099
  mkdirSync6(maestroSessionsDir(), { recursive: true });
3097
3100
  const messages = extractChatPairs(options.entries).flatMap((pair) => [
3098
- { role: "user", content: pair.userText },
3099
- { role: "assistant", content: pair.assistantText }
3101
+ { role: "user", content: nonEmptyTurnText(pair.userText) },
3102
+ { role: "assistant", content: nonEmptyTurnText(pair.assistantText) }
3100
3103
  ]);
3101
3104
  const lines = [
3102
3105
  {
@@ -3116,13 +3119,14 @@ function writeRollout(options) {
3116
3119
  });
3117
3120
  return { sessionId, rolloutPath: path };
3118
3121
  }
3119
- var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, maestroRegistryOperations;
3122
+ var ALIAS_MAP2, VALID_MODELS, VALID_EFFORTS3, maestroRegistry, BLANK_TURN_PLACEHOLDER = "(no text content in this turn)", maestroRegistryOperations;
3120
3123
  var init_maestro_registry = __esm(() => {
3121
3124
  init_shared();
3122
3125
  init_logger();
3123
3126
  init_types();
3124
3127
  ALIAS_MAP2 = {
3125
3128
  "deepseek-pro": "deepseek-v4-pro",
3129
+ "deepseek-flash": "deepseek-v4-flash",
3126
3130
  kimi: "kimi-k3",
3127
3131
  "kimi-pro": "kimi-k3",
3128
3132
  "kimi-code": "kimi-k2.7-code"
@@ -4169,7 +4173,11 @@ var init_claude_provider = __esm(async () => {
4169
4173
  "TaskCreate",
4170
4174
  "TaskUpdate",
4171
4175
  "TaskList",
4172
- "TaskGet"
4176
+ "TaskGet",
4177
+ "ScheduleWakeup",
4178
+ "CronCreate",
4179
+ "CronList",
4180
+ "CronDelete"
4173
4181
  ];
4174
4182
  CLAUDE_NATIVE_AGENT_TOOLS = ["Task", "Agent", "TaskOutput", "TaskStop"];
4175
4183
  CLAUDE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
@@ -6162,7 +6170,7 @@ function resolveCompactionExecution(agent, registry) {
6162
6170
  const effort = registry.validateEffort("medium") ? "medium" : registry.defaultEffort;
6163
6171
  return { model, ...effort ? { effort } : {} };
6164
6172
  }
6165
- 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;
6173
+ 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;
6166
6174
  var init_model_catalog = __esm(() => {
6167
6175
  init_config();
6168
6176
  MODEL_OWNER = {
@@ -6269,10 +6277,20 @@ var init_model_catalog = __esm(() => {
6269
6277
  agent: "maestro",
6270
6278
  description: "API-priced Sonnet-level route for cost-efficient everyday work.",
6271
6279
  intelligenceTier: "sonnet",
6272
- routingSummary: "cost-efficient everyday work; pay-per-token and cheapest route",
6280
+ routingSummary: "cost-efficient everyday work; pay-per-token, pricier than DeepSeek Flash",
6273
6281
  accessCost: "DeepSeek V4 Pro pay-as-you-go API; no monthly subscription required",
6274
6282
  marginalTokenCost: "DeepSeek API: $0.435/M uncached input, $0.003625/M cached input, $0.87/M output",
6275
6283
  estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 500 requests."
6284
+ },
6285
+ {
6286
+ model: "deepseek-flash",
6287
+ agent: "maestro",
6288
+ description: "Faster, cheaper DeepSeek V4 variant (DeepSeek-V4-Flash-0731) at similar Sonnet-level quality for high-volume everyday work.",
6289
+ intelligenceTier: "sonnet",
6290
+ routingSummary: "cheapest overall route; pay-per-token, 1M context, 5x Pro's concurrency limit",
6291
+ accessCost: "DeepSeek V4 Flash pay-as-you-go API; no monthly subscription required",
6292
+ marginalTokenCost: "DeepSeek API: $0.14/M uncached input, $0.0028/M cached input, $0.28/M output",
6293
+ estimatedUsage: "No subscription token cap; pay per token. Official account concurrency limit is 2500 requests."
6276
6294
  }
6277
6295
  ];
6278
6296
  SELECTABLE_MODEL_ALIASES = {
@@ -10699,7 +10717,8 @@ var init_vault_broker = __esm(async () => {
10699
10717
  browser_snapshot: { argument: "maxLength", field: "snapshot" },
10700
10718
  browser_api_request: { argument: "maxBytes", field: "body" },
10701
10719
  browser_get_visible_text: { argument: "maxLength", field: "text" },
10702
- browser_get_visible_html: { argument: "maxLength", field: "html" }
10720
+ browser_get_visible_html: { argument: "maxLength", field: "html" },
10721
+ browser_iframe_read: { argument: "maxLength", field: "content" }
10703
10722
  };
10704
10723
  });
10705
10724
 
@@ -16215,10 +16234,9 @@ function startAiTurn(params) {
16215
16234
  ].join(`
16216
16235
  `);
16217
16236
  }
16237
+ const turnReminders = [];
16218
16238
  if (params.from === FROM_AUTO_CONTINUE) {
16219
- systemPrompt += `
16220
-
16221
- <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>`;
16239
+ 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>");
16222
16240
  }
16223
16241
  if (!silent && !sessionRetried) {
16224
16242
  const promptsToRecord = userConversationPromptsToRecord(renderedUserPrompts, loggedUserMessageCount, agentPrompt);
@@ -16301,26 +16319,24 @@ function startAiTurn(params) {
16301
16319
  logger.warn({ topicId, err: err2 }, "ai: ensureBgBash failed \u2014 proceeding without background bash tools");
16302
16320
  }
16303
16321
  }
16304
- let effectiveSystemPrompt = systemPrompt;
16305
16322
  if (playwrightRequested && !browserProfileOwner) {
16306
- 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>";
16307
- effectiveSystemPrompt = `${effectiveSystemPrompt}
16308
-
16309
- ${ownerOnlyNote}`;
16323
+ 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>");
16310
16324
  }
16311
16325
  if (consumePlaywrightUnavailable(userId, topic.title)) {
16312
- 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>";
16313
- effectiveSystemPrompt = `${effectiveSystemPrompt}
16314
-
16315
- ${playwrightNote}`;
16326
+ 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>");
16316
16327
  }
16328
+ const effectivePrompt = turnReminders.length > 0 ? `${agentPrompt}
16329
+
16330
+ ${turnReminders.join(`
16331
+
16332
+ `)}` : agentPrompt;
16317
16333
  try {
16318
16334
  yield* runAgent({
16319
16335
  agent: agentKind,
16320
- prompt: agentPrompt,
16336
+ prompt: effectivePrompt,
16321
16337
  attachments: promptAttachments,
16322
16338
  cwd: workspaceCwd,
16323
- systemPrompt: effectiveSystemPrompt,
16339
+ systemPrompt,
16324
16340
  sessionId,
16325
16341
  userId,
16326
16342
  vaultUserId,
@@ -18293,4 +18309,4 @@ export {
18293
18309
  DEFAULT_SELF_CONFIG_PRODUCT
18294
18310
  };
18295
18311
 
18296
- //# debugId=E488EA566B3CCFC864756E2164756E21
18312
+ //# debugId=8D09CAB15E720F3E64756E2164756E21