negotium 0.14.4 → 0.15.0

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 (51) hide show
  1. package/dist/agent-helpers.js +33 -38
  2. package/dist/agent-helpers.js.map +10 -10
  3. package/dist/background-bash.js +2 -9
  4. package/dist/background-bash.js.map +3 -3
  5. package/dist/browser-runtime.js +2 -9
  6. package/dist/browser-runtime.js.map +3 -3
  7. package/dist/{chunk-zcazbmcs.js → chunk-84b5qy2s.js} +3 -3
  8. package/dist/{chunk-zcazbmcs.js.map → chunk-84b5qy2s.js.map} +2 -2
  9. package/dist/{chunk-p7tprsvc.js → chunk-gjtgsggp.js} +1 -1
  10. package/dist/{chunk-er68mpja.js → chunk-j457924j.js} +2 -9
  11. package/dist/{chunk-er68mpja.js.map → chunk-j457924j.js.map} +3 -3
  12. package/dist/hosted-agent.js +3 -10
  13. package/dist/hosted-agent.js.map +4 -4
  14. package/dist/main.js +80 -51
  15. package/dist/main.js.map +16 -16
  16. package/dist/mcp-factories.js +279 -283
  17. package/dist/mcp-factories.js.map +12 -12
  18. package/dist/media.js +2 -9
  19. package/dist/media.js.map +3 -3
  20. package/dist/prompts.js +2 -19
  21. package/dist/prompts.js.map +4 -4
  22. package/dist/query-runtime.js +2 -9
  23. package/dist/query-runtime.js.map +3 -3
  24. package/dist/registry.js +5 -6
  25. package/dist/registry.js.map +3 -3
  26. package/dist/rollout.js +2 -2
  27. package/dist/runtime/cron/store.ts +37 -1
  28. package/dist/runtime/src/agents/archiver.ts +4 -6
  29. package/dist/runtime/src/agents/index.ts +12 -3
  30. package/dist/runtime/src/agents/maestro-registry.ts +0 -1
  31. package/dist/runtime/src/agents/model-catalog.ts +16 -15
  32. package/dist/runtime/src/cron-host.ts +3 -1
  33. package/dist/runtime/src/mcp/factories/agent-health.ts +3 -2
  34. package/dist/runtime/src/node-host.ts +1 -0
  35. package/dist/runtime/src/platform/config.ts +2 -21
  36. package/dist/runtime/src/storage/forum/repository.ts +8 -10
  37. package/dist/runtime/src/storage/token-stats.ts +5 -1
  38. package/dist/runtime/src/topics/personal-general.ts +8 -6
  39. package/dist/runtime/src/version.ts +1 -1
  40. package/dist/runtime-helpers.js +2 -9
  41. package/dist/runtime-helpers.js.map +3 -3
  42. package/dist/storage.js +6 -13
  43. package/dist/storage.js.map +4 -4
  44. package/dist/types/packages/core/src/agents/archiver.d.ts +1 -1
  45. package/dist/types/packages/core/src/agents/model-catalog.d.ts +5 -0
  46. package/dist/types/packages/core/src/platform/config.d.ts +0 -8
  47. package/dist/types/packages/core/src/version.d.ts +1 -1
  48. package/dist/vault.js +2 -9
  49. package/dist/vault.js.map +3 -3
  50. package/package.json +1 -1
  51. /package/dist/{chunk-p7tprsvc.js.map → chunk-gjtgsggp.js.map} +0 -0
@@ -331,19 +331,13 @@ function loadOrCreateLocalSecret(envKey, filename, options = {}) {
331
331
  return stored;
332
332
  }
333
333
  }
334
- function resolveModelEnv(envKey, agentConst) {
335
- return envText(envKey) ?? (agentConst === FALLBACK_AGENT ? FALLBACK_MODEL : undefined);
336
- }
337
- function resolveDefaultModel(agent, registryDefaultModel) {
338
- return agent === SESSION_AGENT && SESSION_MODEL ? SESSION_MODEL : registryDefaultModel;
339
- }
340
334
  function resolveWhisperBackend() {
341
335
  return envText("WHISPER_BACKEND") === "mlx-whisper" ? "mlx-whisper" : "faster-whisper";
342
336
  }
343
337
  function codexAuthFilePath() {
344
338
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
345
339
  }
346
- var HOME, PROJECT_ROOT, 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.4.0", BROWSER_RS_MIN_SECURE_VERSION = "0.2.1", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.7", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, DECISION_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, NODE_ID, 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-1", FALLBACK_AGENT, SESSION_AGENT, GATEWAY_AGENT, FALLBACK_MODEL, SESSION_MODEL, GATEWAY_MODEL, DEFAULT_TOPIC_EFFORT, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, WHISPER_BACKEND, MLX_WHISPER_BIN, WHISPER_MODEL_MLX, _envMaxTellDepth, MAX_TELL_DEPTH;
340
+ var HOME, PROJECT_ROOT, 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.4.0", BROWSER_RS_MIN_SECURE_VERSION = "0.2.1", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.7", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, DECISION_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, NODE_ID, 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-1", FALLBACK_AGENT, FALLBACK_MODEL, DEFAULT_TOPIC_EFFORT, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, WHISPER_BACKEND, MLX_WHISPER_BIN, WHISPER_MODEL_MLX, _envMaxTellDepth, MAX_TELL_DEPTH;
347
341
  var init_config = __esm(() => {
348
342
  init_config_helpers();
349
343
  init_logger();
@@ -431,12 +425,8 @@ var init_config = __esm(() => {
431
425
  AGENTS_PROMPTS_DIR = resolve2(PROJECT_ROOT, "src/prompts/agents");
432
426
  RESOURCES_DIR = resolve2(PROJECT_ROOT, "src/resources");
433
427
  FILE_TAG_REGEX = /\[FILE:(\/[^\]]+)\]/gi;
434
- FALLBACK_AGENT = resolveAgentEnv("FALLBACK_AGENT", "maestro", "DEFAULT_AGENT");
435
- SESSION_AGENT = resolveAgentEnv("SESSION_AGENT", FALLBACK_AGENT);
436
- GATEWAY_AGENT = resolveAgentEnv("GATEWAY_AGENT", FALLBACK_AGENT);
428
+ FALLBACK_AGENT = resolveAgentEnv("FALLBACK_AGENT", "claude", "DEFAULT_AGENT");
437
429
  FALLBACK_MODEL = envText("FALLBACK_MODEL") ?? envText("DEFAULT_MODEL");
438
- SESSION_MODEL = resolveModelEnv("SESSION_MODEL", SESSION_AGENT);
439
- GATEWAY_MODEL = resolveModelEnv("GATEWAY_MODEL", GATEWAY_AGENT);
440
430
  DEFAULT_TOPIC_EFFORT = (() => {
441
431
  const raw = envText("NEGOTIUM_DEFAULT_EFFORT")?.toLowerCase();
442
432
  return raw && EFFORT_VALUES.includes(raw) ? raw : "medium";
@@ -3085,7 +3075,7 @@ var init_codex = __esm(async () => {
3085
3075
  });
3086
3076
 
3087
3077
  // ../../packages/core/src/version.ts
3088
- var NEGOTIUM_VERSION = "0.14.4";
3078
+ var NEGOTIUM_VERSION = "0.15.0";
3089
3079
 
3090
3080
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
3091
3081
  import { spawn as spawn2 } from "child_process";
@@ -3578,8 +3568,7 @@ var init_maestro_registry = __esm(() => {
3578
3568
  "kimi-code": "kimi-k2.7-code",
3579
3569
  glm: "glm-5.3",
3580
3570
  "glm-pro": "glm-5.3",
3581
- "glm-flash": "glm-5.3-flash",
3582
- "glm-5.2": "glm-5.2"
3571
+ "glm-flash": "glm-5.3-flash"
3583
3572
  };
3584
3573
  VALID_MODELS = new Set([...Object.keys(ALIAS_MAP2), ...Object.values(ALIAS_MAP2)]);
3585
3574
  VALID_EFFORTS3 = new Set(MAESTRO_EFFORT_VALUES);
@@ -6325,17 +6314,20 @@ import { join as join14 } from "path";
6325
6314
  async function* dispatchAgent(opts) {
6326
6315
  switch (opts.agent) {
6327
6316
  case "claude": {
6328
- const { claudeProvider: claudeProvider2 } = await init_claude_provider().then(() => exports_claude_provider);
6317
+ claudeProviderImport ??= init_claude_provider().then(() => exports_claude_provider);
6318
+ const { claudeProvider: claudeProvider2 } = await claudeProviderImport;
6329
6319
  yield* claudeProvider2(opts);
6330
6320
  return;
6331
6321
  }
6332
6322
  case "codex": {
6333
- const { codexProvider: codexProvider2 } = await init_codex_provider().then(() => exports_codex_provider);
6323
+ codexProviderImport ??= init_codex_provider().then(() => exports_codex_provider);
6324
+ const { codexProvider: codexProvider2 } = await codexProviderImport;
6334
6325
  yield* codexProvider2(opts);
6335
6326
  return;
6336
6327
  }
6337
6328
  case "maestro": {
6338
- const { maestroProvider: maestroProvider2 } = await init_maestro_provider().then(() => exports_maestro_provider);
6329
+ maestroProviderImport ??= init_maestro_provider().then(() => exports_maestro_provider);
6330
+ const { maestroProvider: maestroProvider2 } = await maestroProviderImport;
6339
6331
  yield* maestroProvider2(opts);
6340
6332
  return;
6341
6333
  }
@@ -6428,6 +6420,7 @@ async function* runAgent(opts) {
6428
6420
  yield event;
6429
6421
  }
6430
6422
  }
6423
+ var claudeProviderImport, codexProviderImport, maestroProviderImport;
6431
6424
  var init_agents = __esm(async () => {
6432
6425
  await init_execution_host();
6433
6426
  await init_registry();
@@ -6711,6 +6704,7 @@ var exports_model_catalog = {};
6711
6704
  __export(exports_model_catalog, {
6712
6705
  selectableModel: () => selectableModel,
6713
6706
  resolveModelForAgent: () => resolveModelForAgent,
6707
+ resolveDefaultModel: () => resolveDefaultModel,
6714
6708
  resolveCompactionExecution: () => resolveCompactionExecution,
6715
6709
  modelOwner: () => modelOwner,
6716
6710
  formatSelectableModel: () => formatSelectableModel,
@@ -6747,8 +6741,18 @@ function modelOwner(model) {
6747
6741
  return "codex";
6748
6742
  return MODEL_OWNER[model];
6749
6743
  }
6744
+ function resolveDefaultModel(agent, registry) {
6745
+ if (agent !== FALLBACK_AGENT || !FALLBACK_MODEL)
6746
+ return registry.defaultModel;
6747
+ const candidate = canonicalModelId(FALLBACK_MODEL);
6748
+ const owner = modelOwner(candidate);
6749
+ if (owner && owner !== agent || !registry.validateModel(candidate)) {
6750
+ return registry.defaultModel;
6751
+ }
6752
+ return candidate;
6753
+ }
6750
6754
  function resolveModelForAgent(agent, requested, registry) {
6751
- const defaultModel = resolveDefaultModel(agent, registry.defaultModel);
6755
+ const defaultModel = resolveDefaultModel(agent, registry);
6752
6756
  if (!requested)
6753
6757
  return defaultModel;
6754
6758
  const candidate = canonicalModelId(requested);
@@ -6788,7 +6792,6 @@ var init_model_catalog = __esm(() => {
6788
6792
  "glm-pro": "maestro",
6789
6793
  "glm-flash": "maestro",
6790
6794
  "glm-5.3": "maestro",
6791
- "glm-5.2": "maestro",
6792
6795
  "glm-5.3-flash": "maestro"
6793
6796
  };
6794
6797
  SELECTABLE_MODELS = [
@@ -6892,16 +6895,6 @@ var init_model_catalog = __esm(() => {
6892
6895
  marginalTokenCost: "Approximate GLM API rate: $1.40/M input, $4.40/M output",
6893
6896
  estimatedUsage: "No subscription token cap; pay per token. Always uses thinking and supports a 1M-token context window; text-only input."
6894
6897
  },
6895
- {
6896
- model: "glm-5.2",
6897
- agent: "maestro",
6898
- description: "Previous-generation GLM flagship for cost-efficient everyday work.",
6899
- intelligenceTier: "sonnet",
6900
- routingSummary: "previous-gen flagship; 1M context; cost-efficient everyday work, cheaper than glm-5.3",
6901
- accessCost: "Zhipu AI pay-as-you-go API; no monthly subscription required",
6902
- marginalTokenCost: "Approximate GLM API rate: $0.95/M input, $3/M output",
6903
- estimatedUsage: "No subscription token cap; pay per token. Always uses thinking and supports a 1M-token context window; text-only input."
6904
- },
6905
6898
  {
6906
6899
  model: "glm-5.3-flash",
6907
6900
  agent: "maestro",
@@ -8503,19 +8496,19 @@ function ensurePersonalGeneral(userId, surface, opts = {}) {
8503
8496
  upsertTopic(existing);
8504
8497
  }
8505
8498
  if (!getApiTopicConfig(existing.id)) {
8506
- setApiTopicConfig(existing.id, { model: "deepseek-pro", modelLocked: true });
8499
+ setApiTopicConfig(existing.id, {});
8507
8500
  }
8508
8501
  return existing;
8509
8502
  }
8510
8503
  const now = new Date().toISOString();
8511
- const registry = getRegistry("maestro");
8504
+ const registry = getRegistry(FALLBACK_AGENT);
8512
8505
  const topic = {
8513
8506
  id: randomUUID5(),
8514
8507
  title: "General",
8515
8508
  description: PERSONAL_GENERAL_DESCRIPTION,
8516
8509
  kind: "manager",
8517
- agent: "maestro",
8518
- defaultModel: resolveDefaultModel("maestro", registry.defaultModel),
8510
+ agent: FALLBACK_AGENT,
8511
+ defaultModel: resolveDefaultModel(FALLBACK_AGENT, registry),
8519
8512
  defaultEffort: registry.defaultEffort ?? "medium",
8520
8513
  aiMode: "always",
8521
8514
  aiMention: false,
@@ -8526,7 +8519,7 @@ function ensurePersonalGeneral(userId, surface, opts = {}) {
8526
8519
  lastMessageAt: now
8527
8520
  };
8528
8521
  upsertTopic(topic);
8529
- setApiTopicConfig(topic.id, { model: "deepseek-pro", modelLocked: true });
8522
+ setApiTopicConfig(topic.id, {});
8530
8523
  return topic;
8531
8524
  }
8532
8525
  function isLegacySharedGeneral(topicId) {
@@ -8534,6 +8527,7 @@ function isLegacySharedGeneral(topicId) {
8534
8527
  }
8535
8528
  var LEGACY_PERSONAL_GENERAL_DESCRIPTION = "\uB098\uB9CC\uC758 \uAC1C\uC778 \uACF5\uAC04\uC774\uC5D0\uC694. \uB300\uD654\uC640 AI \uC791\uC5C5\uC740 \uB2E4\uB978 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACF5\uAC1C\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", PERSONAL_GENERAL_DESCRIPTION = "Your private General. Messages and membership are visible only to you. Workspace memory, wiki, and skills are shared with your workspace.";
8536
8529
  var init_personal_general = __esm(async () => {
8530
+ init_model_catalog();
8537
8531
  await init_registry();
8538
8532
  init_config();
8539
8533
  init_constants();
@@ -8623,7 +8617,7 @@ function createArchiverRuntime(host) {
8623
8617
  }
8624
8618
  const wikiDir = host.storage.getWikiDir();
8625
8619
  const safeTopic = host.config.sanitizeTopicName(topicTitle);
8626
- const agent = params.agent ?? "claude";
8620
+ const agent = params.agent ?? FALLBACK_AGENT;
8627
8621
  const model = params.model;
8628
8622
  const outputLanguage = resolveMemoryLanguage();
8629
8623
  const generalReplyInstruction = `Reply with a short completion message in ${outputLanguage} for display in #General. ` + "Do not include tool-call logs or raw transcripts \u2014 just briefly name the summary / brief / articles you saved.";
@@ -12577,7 +12571,7 @@ var init_token_stats = __esm(async () => {
12577
12571
  "maestro:kimi-k3": { input: 3, cacheRead: 0.3, output: 15 },
12578
12572
  "maestro:kimi-k2.7-code": { input: 0.95, cacheRead: 0.19, output: 4 },
12579
12573
  "maestro:glm-5.3": { input: 1.4, cacheRead: 1.4, output: 4.4 },
12580
- "maestro:glm-5.2": { input: 0.95, cacheRead: 0.95, output: 3 },
12574
+ "maestro:glm-5.2": { input: 1.4, cacheRead: 1.4, output: 4.4 },
12581
12575
  "maestro:glm-5.3-flash": { input: 0.15, cacheRead: 0.15, output: 0.5 },
12582
12576
  "maestro:deepseek-pro": { input: 0.435, cacheRead: 0.003625, output: 0.87 },
12583
12577
  "maestro:deepseek-flash": { input: 0.14, cacheRead: 0.0028, output: 0.28 }
@@ -17185,6 +17179,7 @@ __export(exports_turn_runner, {
17185
17179
  resolveSessionRetry: () => resolveSessionRetry,
17186
17180
  resolveModelForAgent: () => resolveModelForAgent,
17187
17181
  resolveInitialTurnSessionId: () => resolveInitialTurnSessionId,
17182
+ resolveDefaultModel: () => resolveDefaultModel,
17188
17183
  resolveCompactionExecution: () => resolveCompactionExecution,
17189
17184
  renderUserTurnBatch: () => renderUserTurnBatch,
17190
17185
  renderUserPromptBatch: () => renderUserPromptBatch,
@@ -20668,4 +20663,4 @@ export {
20668
20663
  DEFAULT_SELF_CONFIG_PRODUCT
20669
20664
  };
20670
20665
 
20671
- //# debugId=631A95CB99797D8064756E2164756E21
20666
+ //# debugId=AF4C7F4033D476D264756E2164756E21