@jungjaehoon/mama-os 0.35.0 → 0.36.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 (81) hide show
  1. package/dist/agent/backend-model-policy.d.ts +28 -0
  2. package/dist/agent/backend-model-policy.d.ts.map +1 -1
  3. package/dist/agent/backend-model-policy.js +87 -2
  4. package/dist/agent/backend-model-policy.js.map +1 -1
  5. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  6. package/dist/agent/code-act/host-bridge.js +40 -0
  7. package/dist/agent/code-act/host-bridge.js.map +1 -1
  8. package/dist/agent/gateway-tool-executor.d.ts +3 -1
  9. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  10. package/dist/agent/gateway-tool-executor.js +117 -0
  11. package/dist/agent/gateway-tool-executor.js.map +1 -1
  12. package/dist/agent/gateway-tools.md +5 -0
  13. package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
  14. package/dist/agent/managed-agent-runtime-sync.js +37 -8
  15. package/dist/agent/managed-agent-runtime-sync.js.map +1 -1
  16. package/dist/agent/role-manager.d.ts.map +1 -1
  17. package/dist/agent/role-manager.js +4 -5
  18. package/dist/agent/role-manager.js.map +1 -1
  19. package/dist/agent/tool-registry.d.ts.map +1 -1
  20. package/dist/agent/tool-registry.js +50 -0
  21. package/dist/agent/tool-registry.js.map +1 -1
  22. package/dist/agent/types.d.ts +40 -2
  23. package/dist/agent/types.d.ts.map +1 -1
  24. package/dist/agent/types.js.map +1 -1
  25. package/dist/api/graph-api.d.ts.map +1 -1
  26. package/dist/api/graph-api.js +68 -4
  27. package/dist/api/graph-api.js.map +1 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +10 -9
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/start.d.ts +6 -1
  32. package/dist/cli/commands/start.d.ts.map +1 -1
  33. package/dist/cli/commands/start.js +25 -2
  34. package/dist/cli/commands/start.js.map +1 -1
  35. package/dist/cli/config/config-manager.d.ts.map +1 -1
  36. package/dist/cli/config/config-manager.js +34 -14
  37. package/dist/cli/config/config-manager.js.map +1 -1
  38. package/dist/cli/config/types.d.ts.map +1 -1
  39. package/dist/cli/config/types.js +5 -0
  40. package/dist/cli/config/types.js.map +1 -1
  41. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  42. package/dist/cli/runtime/agent-loop-init.js +0 -8
  43. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  44. package/dist/cli/runtime/gateway-init.d.ts +6 -1
  45. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  46. package/dist/cli/runtime/gateway-init.js +4 -1
  47. package/dist/cli/runtime/gateway-init.js.map +1 -1
  48. package/dist/cli/runtime/owner-backfill.d.ts +24 -0
  49. package/dist/cli/runtime/owner-backfill.d.ts.map +1 -0
  50. package/dist/cli/runtime/owner-backfill.js +24 -0
  51. package/dist/cli/runtime/owner-backfill.js.map +1 -0
  52. package/dist/envelope/reactive-config.js +1 -1
  53. package/dist/envelope/reactive-config.js.map +1 -1
  54. package/dist/gateways/discord.d.ts +8 -0
  55. package/dist/gateways/discord.d.ts.map +1 -1
  56. package/dist/gateways/discord.js +8 -2
  57. package/dist/gateways/discord.js.map +1 -1
  58. package/dist/gateways/member-candidate-store.d.ts +26 -0
  59. package/dist/gateways/member-candidate-store.d.ts.map +1 -0
  60. package/dist/gateways/member-candidate-store.js +90 -0
  61. package/dist/gateways/member-candidate-store.js.map +1 -0
  62. package/dist/gateways/message-router.d.ts.map +1 -1
  63. package/dist/gateways/message-router.js +4 -1
  64. package/dist/gateways/message-router.js.map +1 -1
  65. package/dist/gateways/principal.d.ts +11 -1
  66. package/dist/gateways/principal.d.ts.map +1 -1
  67. package/dist/gateways/principal.js +22 -3
  68. package/dist/gateways/principal.js.map +1 -1
  69. package/dist/gateways/slack.d.ts +8 -0
  70. package/dist/gateways/slack.d.ts.map +1 -1
  71. package/dist/gateways/slack.js +6 -1
  72. package/dist/gateways/slack.js.map +1 -1
  73. package/dist/gateways/telegram.d.ts +7 -0
  74. package/dist/gateways/telegram.d.ts.map +1 -1
  75. package/dist/gateways/telegram.js +20 -1
  76. package/dist/gateways/telegram.js.map +1 -1
  77. package/dist/observability/code-audit.d.ts.map +1 -1
  78. package/dist/observability/code-audit.js +11 -3
  79. package/dist/observability/code-audit.js.map +1 -1
  80. package/package.json +1 -1
  81. package/public/viewer/sw.js +2 -2
@@ -2437,6 +2437,7 @@ async function handleUpdateConfigRequest(req, res, options = {}) {
2437
2437
  }));
2438
2438
  return;
2439
2439
  }
2440
+ const modelPolicyEntries = rescopeModelsForConfigSave(updatedConfig);
2440
2441
  const errors = validateConfigUpdate(updatedConfig);
2441
2442
  if (errors.length > 0) {
2442
2443
  res.writeHead(400, { 'Content-Type': 'application/json' });
@@ -2447,6 +2448,10 @@ async function handleUpdateConfigRequest(req, res, options = {}) {
2447
2448
  }));
2448
2449
  return;
2449
2450
  }
2451
+ (0, backend_model_policy_js_1.emitBackendModelWarnings)([
2452
+ ...modelPolicyEntries.changes,
2453
+ ...modelPolicyEntries.warnings,
2454
+ ]);
2450
2455
  saveMAMAConfig(updatedConfig);
2451
2456
  if (updatedConfig.multi_agent && options.applyMultiAgentConfig) {
2452
2457
  try {
@@ -2473,6 +2478,63 @@ async function handleUpdateConfigRequest(req, res, options = {}) {
2473
2478
  }));
2474
2479
  }
2475
2480
  }
2481
+ function rescopeModelsForConfigSave(config) {
2482
+ if (!isRecord(config.agent) || typeof config.agent.backend !== 'string') {
2483
+ return { changes: [], warnings: [] };
2484
+ }
2485
+ const backend = config.agent.backend.toLowerCase();
2486
+ if (!supportedManagedBackends.includes(backend)) {
2487
+ return { changes: [], warnings: [] };
2488
+ }
2489
+ const roles = isRecord(config.roles) ? config.roles : undefined;
2490
+ const definitions = roles && isRecord(roles.definitions) ? roles.definitions : {};
2491
+ const roleModels = Object.fromEntries(Object.entries(definitions)
2492
+ .filter((entry) => isRecord(entry[1]))
2493
+ .map(([name, definition]) => [
2494
+ name,
2495
+ typeof definition.model === 'string' ? definition.model : undefined,
2496
+ ]));
2497
+ const scopedModels = (0, backend_model_policy_js_1.rescopeConfigModels)({
2498
+ backend: backend,
2499
+ agentModel: typeof config.agent.model === 'string' ? config.agent.model : undefined,
2500
+ roleModels,
2501
+ });
2502
+ config.agent.model = scopedModels.agentModel;
2503
+ for (const [name, model] of Object.entries(scopedModels.roleModels)) {
2504
+ const definition = definitions[name];
2505
+ if (isRecord(definition)) {
2506
+ definition.model = model;
2507
+ }
2508
+ }
2509
+ const changes = [...scopedModels.changes];
2510
+ const warnings = [...(scopedModels.warnings ?? [])];
2511
+ const multiAgent = isRecord(config.multi_agent) ? config.multi_agent : undefined;
2512
+ const managedAgents = multiAgent && isRecord(multiAgent.agents) ? multiAgent.agents : {};
2513
+ for (const [agentId, agentConfig] of Object.entries(managedAgents)) {
2514
+ if (!isRecord(agentConfig)) {
2515
+ continue;
2516
+ }
2517
+ const effectiveBackend = typeof agentConfig.backend === 'string' ? agentConfig.backend.toLowerCase() : backend;
2518
+ if (!supportedManagedBackends.includes(effectiveBackend)) {
2519
+ continue;
2520
+ }
2521
+ const configuredModel = typeof agentConfig.model === 'string' ? agentConfig.model.trim() : undefined;
2522
+ const target = `multi_agent.agents.${agentId}.model`;
2523
+ const resolvedModel = (0, backend_model_policy_js_1.resolveBackendScopedModel)({
2524
+ backend: effectiveBackend,
2525
+ model: configuredModel,
2526
+ inheritedBackend: backend,
2527
+ inheritedModel: scopedModels.agentModel,
2528
+ warningTarget: target,
2529
+ onWarning: (warning) => warnings.push(warning),
2530
+ });
2531
+ agentConfig.model = resolvedModel;
2532
+ if (configuredModel && configuredModel !== resolvedModel) {
2533
+ changes.push({ target, from: configuredModel, to: resolvedModel });
2534
+ }
2535
+ }
2536
+ return { changes, warnings };
2537
+ }
2476
2538
  function maskToken(token) {
2477
2539
  if (!token || token.length < 4) {
2478
2540
  return '***[redacted]***';
@@ -2697,10 +2759,11 @@ function validateConfigUpdate(config) {
2697
2759
  if (config.agent.backend && config.agent.model && typeof config.agent.model === 'string') {
2698
2760
  const backend = String(config.agent.backend).toLowerCase();
2699
2761
  const model = config.agent.model;
2700
- if (backend === 'claude' && !isClaudeModel(model)) {
2762
+ const modelBackend = (0, backend_model_policy_js_1.backendForModel)(model);
2763
+ if (backend === 'claude' && modelBackend !== null && modelBackend !== 'claude') {
2701
2764
  errors.push('agent.model must be a Claude model when agent.backend is "claude"');
2702
2765
  }
2703
- if (isCodexFamilyBackend(backend) && !isCodexModel(model)) {
2766
+ if (isCodexFamilyBackend(backend) && modelBackend !== null && modelBackend !== 'codex') {
2704
2767
  errors.push(`agent.model must be a Codex/OpenAI model when agent.backend is "${backend}"`);
2705
2768
  }
2706
2769
  }
@@ -2730,10 +2793,11 @@ function validateConfigUpdate(config) {
2730
2793
  continue;
2731
2794
  }
2732
2795
  if (typeof modelRaw === 'string' && modelRaw.trim()) {
2733
- if (backend === 'claude' && !isClaudeModel(modelRaw)) {
2796
+ const modelBackend = (0, backend_model_policy_js_1.backendForModel)(modelRaw);
2797
+ if (backend === 'claude' && modelBackend !== null && modelBackend !== 'claude') {
2734
2798
  errors.push(`multi_agent.agents.${agentId}.model must be a Claude model when backend is "claude"`);
2735
2799
  }
2736
- if (isCodexFamilyBackend(backend) && !isCodexModel(modelRaw)) {
2800
+ if (isCodexFamilyBackend(backend) && modelBackend !== null && modelBackend !== 'codex') {
2737
2801
  errors.push(`multi_agent.agents.${agentId}.model must be a Codex/OpenAI model when backend is "${backend}"`);
2738
2802
  }
2739
2803
  }