nexus-agents 2.48.0 → 2.52.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.
@@ -5,6 +5,7 @@ import {
5
5
  import {
6
6
  ClaudeAdapter,
7
7
  DEFAULT_RELEVANCE_CONFIG,
8
+ EventTopics,
8
9
  NOOP_NOTIFIER,
9
10
  RateLimiter,
10
11
  createDefaultRateLimiter,
@@ -26,7 +27,7 @@ import {
26
27
  withAccessPolicy,
27
28
  withProgressHeartbeat,
28
29
  wrapToolWithTimeout
29
- } from "./chunk-KC3NUWZT.js";
30
+ } from "./chunk-CYTWXE7N.js";
30
31
  import {
31
32
  REGISTRY_PATH,
32
33
  getProjectRoot,
@@ -40,7 +41,7 @@ import {
40
41
  import {
41
42
  IssueTriage,
42
43
  sanitizeInput
43
- } from "./chunk-E24JT23A.js";
44
+ } from "./chunk-O6GZH7GZ.js";
44
45
  import {
45
46
  generateSecurityPlan
46
47
  } from "./chunk-YRPOXUXI.js";
@@ -66,7 +67,7 @@ import {
66
67
  import {
67
68
  DEFAULT_TASK_TTL_MS,
68
69
  clampTaskTtl
69
- } from "./chunk-M53BBBCB.js";
70
+ } from "./chunk-QGM2CANY.js";
70
71
  import {
71
72
  createSessionMemory
72
73
  } from "./chunk-ULDKSIS7.js";
@@ -823,16 +824,16 @@ function classifyEnvKeys(nexusKeys, env) {
823
824
  }
824
825
  return { knownRecord, unknownVars };
825
826
  }
826
- function logValidationWarnings(logger54, unknownVars, invalidVars) {
827
+ function logValidationWarnings(logger55, unknownVars, invalidVars) {
827
828
  for (const u of unknownVars) {
828
829
  const hint = u.suggestion !== null ? ` (did you mean ${u.suggestion}?)` : "";
829
- logger54.warn(`Unknown environment variable: ${u.name}${hint}`);
830
+ logger55.warn(`Unknown environment variable: ${u.name}${hint}`);
830
831
  }
831
832
  for (const inv of invalidVars) {
832
- logger54.warn(`Invalid environment variable ${inv.name}="${inv.value}": ${inv.error}`);
833
+ logger55.warn(`Invalid environment variable ${inv.name}="${inv.value}": ${inv.error}`);
833
834
  }
834
835
  }
835
- function validateNexusEnv(logger54) {
836
+ function validateNexusEnv(logger55) {
836
837
  const nexusKeys = Object.keys(process.env).filter((k) => k.startsWith("NEXUS_"));
837
838
  const { knownRecord, unknownVars } = classifyEnvKeys(nexusKeys, process.env);
838
839
  const invalidVars = [];
@@ -847,8 +848,8 @@ function validateNexusEnv(logger54) {
847
848
  });
848
849
  }
849
850
  }
850
- if (logger54 !== void 0) {
851
- logValidationWarnings(logger54, unknownVars, invalidVars);
851
+ if (logger55 !== void 0) {
852
+ logValidationWarnings(logger55, unknownVars, invalidVars);
852
853
  }
853
854
  return { unknownVars, invalidVars };
854
855
  }
@@ -871,7 +872,7 @@ var AvailabilityCache = class {
871
872
  get(modelId) {
872
873
  const entry = this.cache.get(modelId);
873
874
  if (entry === void 0) return void 0;
874
- if (Date.now() - entry.checkedAt > this.ttlMs) {
875
+ if (getTimeProvider().now() - entry.checkedAt > this.ttlMs) {
875
876
  this.cache.delete(modelId);
876
877
  return void 0;
877
878
  }
@@ -893,7 +894,7 @@ var AvailabilityCache = class {
893
894
  modelId,
894
895
  available: false,
895
896
  latencyMs: 0,
896
- checkedAt: Date.now(),
897
+ checkedAt: getTimeProvider().now(),
897
898
  error
898
899
  });
899
900
  }
@@ -903,7 +904,7 @@ var AvailabilityCache = class {
903
904
  modelId,
904
905
  available: true,
905
906
  latencyMs,
906
- checkedAt: Date.now()
907
+ checkedAt: getTimeProvider().now()
907
908
  });
908
909
  }
909
910
  /** Check if a model is known-unavailable (cached and not expired). */
@@ -1724,8 +1725,8 @@ function deepMerge(target, source) {
1724
1725
  }
1725
1726
  return result;
1726
1727
  }
1727
- function loadDefaultConfig(logger54) {
1728
- logger54.debug("No config file found, using defaults");
1728
+ function loadDefaultConfig(logger55) {
1729
+ logger55.debug("No config file found, using defaults");
1729
1730
  const validated = AppConfigSchema.safeParse(defaultConfig);
1730
1731
  if (!validated.success) {
1731
1732
  return err(
@@ -1741,7 +1742,7 @@ function loadDefaultConfig(logger54) {
1741
1742
  warnings: ["No config file found, using default configuration"]
1742
1743
  });
1743
1744
  }
1744
- function readAndParseConfig(configPath, mergeDefaults, logger54) {
1745
+ function readAndParseConfig(configPath, mergeDefaults, logger55) {
1745
1746
  let content;
1746
1747
  try {
1747
1748
  content = readFileSync(configPath, "utf-8");
@@ -1758,7 +1759,7 @@ function readAndParseConfig(configPath, mergeDefaults, logger54) {
1758
1759
  const parseResult2 = parseYaml(content);
1759
1760
  if (!parseResult2.ok) return err(parseResult2.error);
1760
1761
  if (mergeDefaults && typeof parseResult2.value === "object" && parseResult2.value !== null) {
1761
- logger54.debug("Merged config with defaults");
1762
+ logger55.debug("Merged config with defaults");
1762
1763
  return ok(
1763
1764
  deepMerge(
1764
1765
  defaultConfig,
@@ -1768,7 +1769,7 @@ function readAndParseConfig(configPath, mergeDefaults, logger54) {
1768
1769
  }
1769
1770
  return ok(parseResult2.value);
1770
1771
  }
1771
- function validateConfig(configData, configPath, logger54) {
1772
+ function validateConfig(configData, configPath, logger55) {
1772
1773
  const validation = AppConfigSchema.safeParse(configData);
1773
1774
  if (!validation.success) {
1774
1775
  const issues = formatZodIssuesAsArray(validation.error);
@@ -1777,12 +1778,12 @@ function validateConfig(configData, configPath, logger54) {
1777
1778
  ${issues.join("\n")}`, "VALIDATION_ERROR")
1778
1779
  );
1779
1780
  }
1780
- logger54.info("Configuration loaded successfully", { configPath });
1781
+ logger55.info("Configuration loaded successfully", { configPath });
1781
1782
  return ok({ config: validation.data, configPath, usingDefaults: false, warnings: [] });
1782
1783
  }
1783
1784
  function loadConfig(options = {}) {
1784
1785
  const { configPath: explicitPath, cwd = process.cwd(), mergeDefaults = true } = options;
1785
- const logger54 = options.logger ?? createLogger({ component: "ConfigLoader" });
1786
+ const logger55 = options.logger ?? createLogger({ component: "ConfigLoader" });
1786
1787
  let configPath;
1787
1788
  if (explicitPath !== void 0) {
1788
1789
  const validation = validatePath(explicitPath, cwd);
@@ -1791,10 +1792,10 @@ function loadConfig(options = {}) {
1791
1792
  } else {
1792
1793
  configPath = findConfigPath(cwd);
1793
1794
  }
1794
- if (configPath === void 0) return loadDefaultConfig(logger54);
1795
- const parseResult2 = readAndParseConfig(configPath, mergeDefaults, logger54);
1795
+ if (configPath === void 0) return loadDefaultConfig(logger55);
1796
+ const parseResult2 = readAndParseConfig(configPath, mergeDefaults, logger55);
1796
1797
  if (!parseResult2.ok) return err(parseResult2.error);
1797
- return validateConfig(parseResult2.value, configPath, logger54);
1798
+ return validateConfig(parseResult2.value, configPath, logger55);
1798
1799
  }
1799
1800
  var loadedConfig;
1800
1801
  function getConfig(options) {
@@ -2726,12 +2727,12 @@ function removeItemsDirectly(items, targetTokens, manager) {
2726
2727
  };
2727
2728
  }
2728
2729
  async function summarizeAndRemoveItems(options) {
2729
- const { items, targetTokens, manager, adapter, logger: logger54, customPrompt } = options;
2730
+ const { items, targetTokens, manager, adapter, logger: logger55, customPrompt } = options;
2730
2731
  const content = items.map((item) => item.content).join("\n\n---\n\n");
2731
2732
  const prompt = customPrompt ?? SLIDING_WINDOW_PROMPT;
2732
2733
  const summaryResult = await generateSummary(content, prompt, adapter);
2733
2734
  if (!summaryResult.ok) {
2734
- logger54.warn("Summarization failed, removing items without summary");
2735
+ logger55.warn("Summarization failed, removing items without summary");
2735
2736
  return removeItemsDirectly(items, targetTokens, manager);
2736
2737
  }
2737
2738
  let tokensFreed = 0;
@@ -2744,7 +2745,7 @@ async function summarizeAndRemoveItems(options) {
2744
2745
  if (summaryAddResult.item !== void 0) {
2745
2746
  tokensFreed -= summaryAddResult.tokenCount;
2746
2747
  }
2747
- logger54.info("Summarization pruning completed", {
2748
+ logger55.info("Summarization pruning completed", {
2748
2749
  summarizedItems: items.length,
2749
2750
  tokensFreed,
2750
2751
  targetReached: tokensFreed >= targetTokens
@@ -2802,7 +2803,7 @@ function scoreByPriorityWeightedAge(candidates) {
2802
2803
  return scores.map((s) => s.item);
2803
2804
  }
2804
2805
  function removeItemsToTarget(options) {
2805
- const { sortedItems, targetTokens, categories, manager, minItemsPerCategory, logger: logger54 } = options;
2806
+ const { sortedItems, targetTokens, categories, manager, minItemsPerCategory, logger: logger55 } = options;
2806
2807
  const categoryRemaining = /* @__PURE__ */ new Map();
2807
2808
  for (const category of categories) {
2808
2809
  categoryRemaining.set(category, manager.getByCategory(category).length);
@@ -2819,7 +2820,7 @@ function removeItemsToTarget(options) {
2819
2820
  categoryRemaining.set(item.category, remaining - 1);
2820
2821
  }
2821
2822
  const targetReached = tokensFreed >= targetTokens;
2822
- logger54.info("Pruning completed", {
2823
+ logger55.info("Pruning completed", {
2823
2824
  itemsRemoved: removedItems.length,
2824
2825
  tokensFreed,
2825
2826
  targetTokens,
@@ -3284,7 +3285,7 @@ function generateBudgetWarning(utilizationPercent, tokensUsed, budgetLimit, scop
3284
3285
  scope
3285
3286
  };
3286
3287
  }
3287
- function logBudgetWarning(warning, logger54) {
3288
+ function logBudgetWarning(warning, logger55) {
3288
3289
  const context = {
3289
3290
  scope: warning.scope,
3290
3291
  usagePercent: Math.round(warning.usagePercent),
@@ -3293,13 +3294,13 @@ function logBudgetWarning(warning, logger54) {
3293
3294
  };
3294
3295
  switch (warning.level) {
3295
3296
  case "critical":
3296
- logger54.warn(warning.message, context);
3297
+ logger55.warn(warning.message, context);
3297
3298
  break;
3298
3299
  case "warning":
3299
- logger54.warn(warning.message, context);
3300
+ logger55.warn(warning.message, context);
3300
3301
  break;
3301
3302
  case "info":
3302
- logger54.info(warning.message, context);
3303
+ logger55.info(warning.message, context);
3303
3304
  break;
3304
3305
  }
3305
3306
  }
@@ -3355,8 +3356,8 @@ function createHardModeResult(params) {
3355
3356
  )
3356
3357
  };
3357
3358
  }
3358
- function logWarnModeExceeded(params, logger54) {
3359
- logger54.warn("Token budget would be exceeded (warn mode - continuing)", {
3359
+ function logWarnModeExceeded(params, logger55) {
3360
+ logger55.warn("Token budget would be exceeded (warn mode - continuing)", {
3360
3361
  exceedsSession: params.exceedsSession,
3361
3362
  exceedsTask: params.exceedsTask,
3362
3363
  estimatedTokens: params.estimatedTokens,
@@ -3385,9 +3386,9 @@ var TokenBudgetTracker = class {
3385
3386
  * @param config - Token budget configuration
3386
3387
  * @param logger - Optional logger instance
3387
3388
  */
3388
- constructor(config = {}, logger54) {
3389
+ constructor(config = {}, logger55) {
3389
3390
  this.config = { ...DEFAULT_TOKEN_BUDGET_CONFIG, ...config };
3390
- this.logger = logger54 ?? createLogger({ component: "token-budget-tracker" });
3391
+ this.logger = logger55 ?? createLogger({ component: "token-budget-tracker" });
3391
3392
  }
3392
3393
  /**
3393
3394
  * Check if an operation is within budget.
@@ -3540,7 +3541,7 @@ var TokenBudgetTracker = class {
3540
3541
 
3541
3542
  // src/agents/base-agent-state-helpers.ts
3542
3543
  function performLegacyStateTransition(params) {
3543
- const { stateMachine, logger: logger54, newState } = params;
3544
+ const { stateMachine, logger: logger55, newState } = params;
3544
3545
  const currentState = stateMachine.state;
3545
3546
  if (newState === "error") {
3546
3547
  stateMachine.forceError({ reason: "setState called with error" });
@@ -3550,7 +3551,7 @@ function performLegacyStateTransition(params) {
3550
3551
  if (event !== void 0 && stateMachine.canTransition(event)) {
3551
3552
  const result = stateMachine.transition(event);
3552
3553
  if (!result.ok) {
3553
- logger54.warn("State transition failed", {
3554
+ logger55.warn("State transition failed", {
3554
3555
  from: currentState,
3555
3556
  to: newState,
3556
3557
  event,
@@ -3558,7 +3559,7 @@ function performLegacyStateTransition(params) {
3558
3559
  });
3559
3560
  }
3560
3561
  } else if (currentState !== newState) {
3561
- logger54.debug("Unmapped state change (legacy)", { from: currentState, to: newState });
3562
+ logger55.debug("Unmapped state change (legacy)", { from: currentState, to: newState });
3562
3563
  }
3563
3564
  }
3564
3565
 
@@ -3714,7 +3715,7 @@ function getAgentStateKey(agentId) {
3714
3715
  }
3715
3716
 
3716
3717
  // src/agents/memory-operations.ts
3717
- async function persistMemoryState(backend, state, logger54) {
3718
+ async function persistMemoryState(backend, state, logger55) {
3718
3719
  const key = getAgentStateKey(state.agentId);
3719
3720
  const metadata = {
3720
3721
  importance: MemoryImportance.HIGH,
@@ -3726,12 +3727,12 @@ async function persistMemoryState(backend, state, logger54) {
3726
3727
  };
3727
3728
  const result = await backend.store(key, updatedState, metadata);
3728
3729
  if (!result.ok) {
3729
- logger54.error("Failed to persist agent memory state", result.error, { agentId: state.agentId });
3730
+ logger55.error("Failed to persist agent memory state", result.error, { agentId: state.agentId });
3730
3731
  return err(
3731
3732
  new AgentMemoryError("Failed to persist memory state", { error: result.error.message })
3732
3733
  );
3733
3734
  }
3734
- logger54.debug("Persisted agent memory state", {
3735
+ logger55.debug("Persisted agent memory state", {
3735
3736
  agentId: state.agentId,
3736
3737
  learningsCount: state.taskLearnings.length,
3737
3738
  patternsCount: state.executionPatterns.length,
@@ -3739,16 +3740,16 @@ async function persistMemoryState(backend, state, logger54) {
3739
3740
  });
3740
3741
  return ok(void 0);
3741
3742
  }
3742
- async function loadMemoryState(backend, agentId, role, logger54) {
3743
+ async function loadMemoryState(backend, agentId, role, logger55) {
3743
3744
  const key = getAgentStateKey(agentId);
3744
3745
  const result = await backend.retrieve(key);
3745
3746
  if (!result.ok) {
3746
- logger54.debug("No existing memory state found, creating fresh state", { agentId });
3747
+ logger55.debug("No existing memory state found, creating fresh state", { agentId });
3747
3748
  return ok(createInitialMemoryState(agentId, role));
3748
3749
  }
3749
3750
  const loaded = result.value;
3750
3751
  if (loaded === null || typeof loaded !== "object") {
3751
- logger54.warn("Invalid memory state format, creating fresh state", { agentId });
3752
+ logger55.warn("Invalid memory state format, creating fresh state", { agentId });
3752
3753
  return ok(createInitialMemoryState(agentId, role));
3753
3754
  }
3754
3755
  const state = {
@@ -3759,7 +3760,7 @@ async function loadMemoryState(backend, agentId, role, logger54) {
3759
3760
  executionPatterns: Array.isArray(loaded.executionPatterns) ? loaded.executionPatterns : [],
3760
3761
  errorResolutions: Array.isArray(loaded.errorResolutions) ? loaded.errorResolutions : []
3761
3762
  };
3762
- logger54.debug("Loaded agent memory state", {
3763
+ logger55.debug("Loaded agent memory state", {
3763
3764
  agentId,
3764
3765
  learningsCount: state.taskLearnings.length,
3765
3766
  patternsCount: state.executionPatterns.length,
@@ -3767,13 +3768,13 @@ async function loadMemoryState(backend, agentId, role, logger54) {
3767
3768
  });
3768
3769
  return ok(state);
3769
3770
  }
3770
- async function loadRelevantTypedMemories(typedMemory, role, limit, logger54) {
3771
+ async function loadRelevantTypedMemories(typedMemory, role, limit, logger55) {
3771
3772
  const result = await typedMemory.filterByRelevance(role, limit);
3772
3773
  if (!result.ok) {
3773
- logger54.warn("Failed to load relevant typed memories", { role, error: result.error.message });
3774
+ logger55.warn("Failed to load relevant typed memories", { role, error: result.error.message });
3774
3775
  return result;
3775
3776
  }
3776
- logger54.debug("Loaded relevant typed memories", {
3777
+ logger55.debug("Loaded relevant typed memories", {
3777
3778
  role,
3778
3779
  count: result.value.length,
3779
3780
  types: [...new Set(result.value.map((e) => e.type))]
@@ -3887,10 +3888,10 @@ function initializeMemoryInfrastructure(options) {
3887
3888
 
3888
3889
  // src/agents/base-agent-constructor-helpers.ts
3889
3890
  function setupStateMachine(params) {
3890
- const { agentId, logger: logger54, eventBus, options } = params;
3891
+ const { agentId, logger: logger55, eventBus, options } = params;
3891
3892
  const stateMachine = new AgentStateMachine(options);
3892
3893
  stateMachine.onStateChange((transition) => {
3893
- logger54.debug("State transition", {
3894
+ logger55.debug("State transition", {
3894
3895
  from: transition.from,
3895
3896
  to: transition.to,
3896
3897
  event: transition.event
@@ -3904,9 +3905,9 @@ function setupStateMachine(params) {
3904
3905
  return stateMachine;
3905
3906
  }
3906
3907
  function initializeInfrastructure(params) {
3907
- const { agentId, role, logger: logger54, adapter, pruningConfig, memoryConfig } = params;
3908
+ const { agentId, role, logger: logger55, adapter, pruningConfig, memoryConfig } = params;
3908
3909
  const pruningOpts = {
3909
- logger: logger54,
3910
+ logger: logger55,
3910
3911
  ...pruningConfig !== void 0 ? { config: pruningConfig } : {},
3911
3912
  ...adapter !== void 0 ? { adapter } : {}
3912
3913
  };
@@ -3914,7 +3915,7 @@ function initializeInfrastructure(params) {
3914
3915
  const memoryOpts = {
3915
3916
  agentId,
3916
3917
  role,
3917
- logger: logger54,
3918
+ logger: logger55,
3918
3919
  ...memoryConfig !== void 0 ? { config: memoryConfig } : {}
3919
3920
  };
3920
3921
  const memory = initializeMemoryInfrastructure(memoryOpts);
@@ -4146,14 +4147,14 @@ function transformTaskError(error, agentId, taskId) {
4146
4147
  return new AgentError(`Task execution failed: ${message}`, opts);
4147
4148
  }
4148
4149
  function finalizeTaskSuccess(params) {
4149
- const { task, result, startTime, stateMachine, budgetTracker, logger: logger54 } = params;
4150
+ const { task, result, startTime, stateMachine, budgetTracker, logger: logger55 } = params;
4150
4151
  const durationMs = getTimeProvider().now() - startTime;
4151
4152
  if (stateMachine.state === "thinking") {
4152
4153
  stateMachine.transition("plan_completed", { taskId: task.id });
4153
4154
  }
4154
4155
  stateMachine.transition("task_completed", { taskId: task.id, durationMs });
4155
4156
  const budgetStats = budgetTracker.endTask();
4156
- logger54.info("Task completed", {
4157
+ logger55.info("Task completed", {
4157
4158
  taskId: task.id,
4158
4159
  durationMs,
4159
4160
  tokensUsed: result.metadata.tokensUsed,
@@ -4181,7 +4182,7 @@ function recordFailedTaskError(params) {
4181
4182
  });
4182
4183
  }
4183
4184
  async function persistMemoryAfterTask(params) {
4184
- const { memoryEnabled, memoryBackend, memoryState, persistenceMode, task, startTime, logger: logger54 } = params;
4185
+ const { memoryEnabled, memoryBackend, memoryState, persistenceMode, task, startTime, logger: logger55 } = params;
4185
4186
  if (!memoryEnabled || memoryState === null) {
4186
4187
  return memoryState;
4187
4188
  }
@@ -4196,9 +4197,9 @@ async function persistMemoryAfterTask(params) {
4196
4197
  successRate
4197
4198
  });
4198
4199
  if (memoryBackend !== void 0) {
4199
- await persistMemoryState(memoryBackend, updatedState, logger54);
4200
+ await persistMemoryState(memoryBackend, updatedState, logger55);
4200
4201
  }
4201
- logger54.debug("Memory persisted after task completion", {
4202
+ logger55.debug("Memory persisted after task completion", {
4202
4203
  taskId: task.id,
4203
4204
  durationMs
4204
4205
  });
@@ -4209,15 +4210,15 @@ function categorizeTaskType(description) {
4209
4210
  return categorizeTaskByKeywords(desc);
4210
4211
  }
4211
4212
  async function persistMemoryOnCleanup(params) {
4212
- const { memoryEnabled, memoryBackend, memoryState, persistenceMode, logger: logger54 } = params;
4213
+ const { memoryEnabled, memoryBackend, memoryState, persistenceMode, logger: logger55 } = params;
4213
4214
  if (!memoryEnabled || memoryBackend === void 0 || memoryState === null) {
4214
4215
  return;
4215
4216
  }
4216
4217
  if (persistenceMode === "none") {
4217
4218
  return;
4218
4219
  }
4219
- await persistMemoryState(memoryBackend, memoryState, logger54);
4220
- logger54.debug("Memory state persisted during cleanup");
4220
+ await persistMemoryState(memoryBackend, memoryState, logger55);
4221
+ logger55.debug("Memory state persisted during cleanup");
4221
4222
  }
4222
4223
 
4223
4224
  // src/agents/base-agent-execute-flow.ts
@@ -4343,14 +4344,14 @@ function createInitialPruningMetrics() {
4343
4344
 
4344
4345
  // src/agents/base-agent-memory-ops.ts
4345
4346
  async function flushMemoryState(params) {
4346
- const { memoryEnabled, memoryBackend, memoryState, logger: logger54 } = params;
4347
+ const { memoryEnabled, memoryBackend, memoryState, logger: logger55 } = params;
4347
4348
  if (!memoryEnabled) {
4348
4349
  return ok(void 0);
4349
4350
  }
4350
4351
  if (memoryBackend === void 0 || memoryState === null) {
4351
4352
  return ok(void 0);
4352
4353
  }
4353
- return persistMemoryState(memoryBackend, memoryState, logger54);
4354
+ return persistMemoryState(memoryBackend, memoryState, logger55);
4354
4355
  }
4355
4356
  function recordLearningToState(params) {
4356
4357
  const { memoryEnabled, memoryState, learning } = params;
@@ -5605,13 +5606,13 @@ function shouldFinalize(pattern, participants, results, votes, reviews) {
5605
5606
 
5606
5607
  // src/agents/collaboration/collaboration-session-helpers.ts
5607
5608
  var MAX_EVENT_LISTENERS = 50;
5608
- function emitEventToListeners(listeners, event, logger54) {
5609
+ function emitEventToListeners(listeners, event, logger55) {
5609
5610
  for (const listener of listeners) {
5610
5611
  try {
5611
5612
  listener(event);
5612
5613
  } catch (e) {
5613
5614
  const errorObj = e instanceof Error ? e : new Error(String(e));
5614
- logger54.error("Event listener error", errorObj, { eventType: event.type });
5615
+ logger55.error("Event listener error", errorObj, { eventType: event.type });
5615
5616
  }
5616
5617
  }
5617
5618
  }
@@ -9284,9 +9285,9 @@ var DEFAULT_WAVE_CONFIG = {
9284
9285
  var WaveScheduler = class {
9285
9286
  config;
9286
9287
  logger;
9287
- constructor(config = {}, logger54) {
9288
+ constructor(config = {}, logger55) {
9288
9289
  this.config = { ...DEFAULT_WAVE_CONFIG, ...config };
9289
- this.logger = logger54 ?? createLogger({ component: "wave-scheduler" });
9290
+ this.logger = logger55 ?? createLogger({ component: "wave-scheduler" });
9290
9291
  }
9291
9292
  /**
9292
9293
  * Execute tasks in waves respecting dependencies and concurrency limits.
@@ -9520,8 +9521,8 @@ function chunkByDirectory(files, basePath) {
9520
9521
  items
9521
9522
  }));
9522
9523
  }
9523
- function createWaveScheduler(config = {}, logger54) {
9524
- return new WaveScheduler(config, logger54);
9524
+ function createWaveScheduler(config = {}, logger55) {
9525
+ return new WaveScheduler(config, logger55);
9525
9526
  }
9526
9527
 
9527
9528
  // src/agents/experts/expert-types.ts
@@ -14335,57 +14336,6 @@ var logger4 = createLogger({ component: "self-debug-protocol" });
14335
14336
  // src/agents/collaboration/ast-fixer.ts
14336
14337
  import { Project, SyntaxKind, Node } from "ts-morph";
14337
14338
 
14338
- // src/agents/collaboration/event-bus-topics.ts
14339
- var EventTopics = {
14340
- // Session events
14341
- SESSION_CREATED: "session.created",
14342
- SESSION_STATUS_CHANGED: "session.status_changed",
14343
- SESSION_PARTICIPANT_JOINED: "session.participant_joined",
14344
- SESSION_RESULT_SUBMITTED: "session.result_submitted",
14345
- SESSION_FINALIZED: "session.finalized",
14346
- SESSION_ALL: "session.*",
14347
- // Message events
14348
- MESSAGE_SENT: "message.sent",
14349
- MESSAGE_RECEIVED: "message.received",
14350
- MESSAGE_ALL: "message.*",
14351
- // Agent events
14352
- AGENT_TASK_DELEGATED: "agent.task_delegated",
14353
- AGENT_RESULT_BROADCAST: "agent.result_broadcast",
14354
- AGENT_ALL: "agent.*",
14355
- // Consensus events
14356
- CONSENSUS_VOTE_REQUESTED: "consensus.vote_requested",
14357
- CONSENSUS_VOTE_CAST: "consensus.vote_cast",
14358
- CONSENSUS_REACHED: "consensus.reached",
14359
- CONSENSUS_ALL: "consensus.*",
14360
- // Protocol events
14361
- PROTOCOL_STARTED: "protocol.started",
14362
- PROTOCOL_ITERATION: "protocol.iteration",
14363
- PROTOCOL_COMPLETED: "protocol.completed",
14364
- PROTOCOL_ALL: "protocol.*",
14365
- // Aegean phase events (Issue #216)
14366
- AEGEAN_ROUND_STARTED: "protocol.aegean.round_started",
14367
- AEGEAN_VOTE_COLLECTED: "protocol.aegean.vote_collected",
14368
- AEGEAN_QUORUM_DETECTED: "protocol.aegean.quorum_detected",
14369
- AEGEAN_ALL: "protocol.aegean.*",
14370
- // Reflexion phase events (Issue #216)
14371
- REFLEXION_CRITIQUE_STARTED: "protocol.reflexion.critique_started",
14372
- REFLEXION_CRITIQUE_COMPLETED: "protocol.reflexion.critique_completed",
14373
- REFLEXION_SYNTHESIS: "protocol.reflexion.synthesis",
14374
- REFLEXION_ALL: "protocol.reflexion.*",
14375
- // Trinity phase events (Issue #216)
14376
- TRINITY_PHASE_STARTED: "protocol.trinity.phase_started",
14377
- TRINITY_PHASE_COMPLETED: "protocol.trinity.phase_completed",
14378
- TRINITY_ALL: "protocol.trinity.*",
14379
- // Byzantine detection events (Issue #218)
14380
- BYZANTINE_WEIGHT_UPDATED: "byzantine.weight_updated",
14381
- BYZANTINE_PATTERN_DETECTED: "byzantine.pattern_detected",
14382
- BYZANTINE_AGENT_FLAGGED: "byzantine.agent_flagged",
14383
- BYZANTINE_COLLUSION_SUSPECTED: "byzantine.collusion_suspected",
14384
- BYZANTINE_ALL: "byzantine.*",
14385
- // Wildcard
14386
- ALL: "*"
14387
- };
14388
-
14389
14339
  // src/agents/collaboration/agent-message-router-types.ts
14390
14340
  var DEFAULT_ROUTER_CONFIG = {
14391
14341
  timeoutMs: AGENT_ROUTER_TIMEOUTS.defaultMs,
@@ -14863,9 +14813,9 @@ var SkillLibrary = class {
14863
14813
  config;
14864
14814
  logger;
14865
14815
  store;
14866
- constructor(config = {}, logger54) {
14816
+ constructor(config = {}, logger55) {
14867
14817
  this.config = { ...DEFAULT_SKILL_LIBRARY_CONFIG2, ...config };
14868
- this.logger = logger54 ?? createLogger({ component: "SkillLibrary" });
14818
+ this.logger = logger55 ?? createLogger({ component: "SkillLibrary" });
14869
14819
  this.store = {
14870
14820
  skills: /* @__PURE__ */ new Map(),
14871
14821
  executions: /* @__PURE__ */ new Map(),
@@ -15140,8 +15090,8 @@ var SkillLibrary = class {
15140
15090
  return scored.sort((a, b) => b.score - a.score).map((s) => s.skill);
15141
15091
  }
15142
15092
  };
15143
- function createSkillLibrary(config, logger54) {
15144
- return new SkillLibrary(config, logger54);
15093
+ function createSkillLibrary(config, logger55) {
15094
+ return new SkillLibrary(config, logger55);
15145
15095
  }
15146
15096
 
15147
15097
  // src/agents/skills/skill-composer.ts
@@ -15156,10 +15106,10 @@ var SkillComposer = class {
15156
15106
  config;
15157
15107
  logger;
15158
15108
  library;
15159
- constructor(library, config = {}, logger54) {
15109
+ constructor(library, config = {}, logger55) {
15160
15110
  this.library = library;
15161
15111
  this.config = { ...DEFAULT_COMPOSER_CONFIG, ...config };
15162
- this.logger = logger54 ?? createLogger({ component: "SkillComposer" });
15112
+ this.logger = logger55 ?? createLogger({ component: "SkillComposer" });
15163
15113
  }
15164
15114
  /**
15165
15115
  * Creates a composition plan for a task.
@@ -15389,8 +15339,8 @@ var SkillComposer = class {
15389
15339
  return errors;
15390
15340
  }
15391
15341
  };
15392
- function createSkillComposer(library, config, logger54) {
15393
- return new SkillComposer(library, config, logger54);
15342
+ function createSkillComposer(library, config, logger55) {
15343
+ return new SkillComposer(library, config, logger55);
15394
15344
  }
15395
15345
 
15396
15346
  // src/agents/skills/skill-dependency-graph-helpers.ts
@@ -16085,10 +16035,10 @@ var SkillLoader = class {
16085
16035
  library;
16086
16036
  logger;
16087
16037
  mappingIndex;
16088
- constructor(library, config, logger54) {
16038
+ constructor(library, config, logger55) {
16089
16039
  this.library = library;
16090
16040
  this.config = { ...DEFAULT_SKILL_LOADER_CONFIG, ...config };
16091
- this.logger = logger54 ?? createLogger({ component: "SkillLoader" });
16041
+ this.logger = logger55 ?? createLogger({ component: "SkillLoader" });
16092
16042
  this.mappingIndex = /* @__PURE__ */ new Map();
16093
16043
  for (const mapping of this.config.mappings) {
16094
16044
  this.mappingIndex.set(mapping.role, mapping);
@@ -16311,8 +16261,8 @@ var SkillLoader = class {
16311
16261
  return ok(orderResult.value);
16312
16262
  }
16313
16263
  };
16314
- function createSkillLoader(library, config, logger54) {
16315
- return new SkillLoader(library, config, logger54);
16264
+ function createSkillLoader(library, config, logger55) {
16265
+ return new SkillLoader(library, config, logger55);
16316
16266
  }
16317
16267
 
16318
16268
  // src/agents/skills/external-pack-loader.ts
@@ -16374,13 +16324,13 @@ function validateManifest(raw, packName, source) {
16374
16324
  }
16375
16325
  return ok(parseResult2.data);
16376
16326
  }
16377
- async function loadExternalPack(packSource, logger54) {
16327
+ async function loadExternalPack(packSource, logger55) {
16378
16328
  const { name, source, enabled } = packSource;
16379
16329
  if (!enabled) {
16380
- logger54.debug("Skipping disabled external pack", { name, source });
16330
+ logger55.debug("Skipping disabled external pack", { name, source });
16381
16331
  return ok({ packName: name, skillCount: 0, skills: [] });
16382
16332
  }
16383
- logger54.info("Loading external skill pack", { name, source });
16333
+ logger55.info("Loading external skill pack", { name, source });
16384
16334
  try {
16385
16335
  const importPath = await resolveImportPath(source);
16386
16336
  const module = await import(importPath);
@@ -16390,7 +16340,7 @@ async function loadExternalPack(packSource, logger54) {
16390
16340
  return validationResult;
16391
16341
  }
16392
16342
  const manifest = validationResult.value;
16393
- logger54.info("External pack loaded successfully", {
16343
+ logger55.info("External pack loaded successfully", {
16394
16344
  name: manifest.name,
16395
16345
  version: manifest.version,
16396
16346
  skillCount: manifest.skills.length
@@ -16411,22 +16361,22 @@ async function loadExternalPack(packSource, logger54) {
16411
16361
  );
16412
16362
  }
16413
16363
  }
16414
- async function loadAllExternalPacks(packs, logger54) {
16364
+ async function loadAllExternalPacks(packs, logger55) {
16415
16365
  const loaded = [];
16416
16366
  const errors = [];
16417
16367
  for (const pack of packs) {
16418
- const result = await loadExternalPack(pack, logger54);
16368
+ const result = await loadExternalPack(pack, logger55);
16419
16369
  if (result.ok) {
16420
16370
  loaded.push(result.value);
16421
16371
  } else {
16422
16372
  errors.push(result.error);
16423
- logger54.warn("Failed to load external pack", {
16373
+ logger55.warn("Failed to load external pack", {
16424
16374
  name: pack.name,
16425
16375
  error: result.error.message
16426
16376
  });
16427
16377
  }
16428
16378
  }
16429
- logger54.info("External pack loading complete", {
16379
+ logger55.info("External pack loading complete", {
16430
16380
  loaded: loaded.length,
16431
16381
  errors: errors.length,
16432
16382
  totalSkills: loaded.reduce((sum, r) => sum + r.skillCount, 0)
@@ -16888,9 +16838,9 @@ var SicaVersionManager = class {
16888
16838
  versions;
16889
16839
  events;
16890
16840
  activeVersionId;
16891
- constructor(config = {}, logger54) {
16841
+ constructor(config = {}, logger55) {
16892
16842
  this.config = { ...DEFAULT_SICA_CONFIG2, ...config };
16893
- this.logger = logger54 ?? createLogger({ component: "SicaVersionManager" });
16843
+ this.logger = logger55 ?? createLogger({ component: "SicaVersionManager" });
16894
16844
  this.versions = /* @__PURE__ */ new Map();
16895
16845
  this.events = [];
16896
16846
  this.activeVersionId = null;
@@ -21310,9 +21260,9 @@ var TemplateRegistry = class {
21310
21260
  await this.ensureInitialized();
21311
21261
  const { templates, errors } = await loadTemplatesFromDirectory(directoryPath);
21312
21262
  if (errors.length > 0) {
21313
- const logger54 = createLogger({ component: "TemplateRegistry" });
21263
+ const logger55 = createLogger({ component: "TemplateRegistry" });
21314
21264
  for (const error of errors) {
21315
- logger54.warn("Template loading warning", { error: error.message });
21265
+ logger55.warn("Template loading warning", { error: error.message });
21316
21266
  }
21317
21267
  }
21318
21268
  let loadedCount = 0;
@@ -21324,8 +21274,8 @@ var TemplateRegistry = class {
21324
21274
  loadedCount++;
21325
21275
  }
21326
21276
  } catch (regError) {
21327
- const logger54 = createLogger({ component: "TemplateRegistry" });
21328
- logger54.warn("Template registration failed", {
21277
+ const logger55 = createLogger({ component: "TemplateRegistry" });
21278
+ logger55.warn("Template registration failed", {
21329
21279
  template: definition.name,
21330
21280
  error: regError instanceof Error ? regError.message : String(regError)
21331
21281
  });
@@ -22174,11 +22124,11 @@ var BudgetCircuitError = class extends NexusError {
22174
22124
 
22175
22125
  // src/workflows/budget-circuit-breaker.ts
22176
22126
  var BudgetCircuitBreaker = class {
22177
- constructor(maxTokens, config, logger54) {
22127
+ constructor(maxTokens, config, logger55) {
22178
22128
  this.maxTokens = maxTokens;
22179
22129
  this.config = { ...DEFAULT_BUDGET_CIRCUIT_CONFIG, ...config };
22180
22130
  this.lastStateChange = getTimeProvider().now();
22181
- this.logger = logger54 ?? createLogger({ component: "budget-circuit-breaker" });
22131
+ this.logger = logger55 ?? createLogger({ component: "budget-circuit-breaker" });
22182
22132
  }
22183
22133
  state = "closed";
22184
22134
  lastStateChange;
@@ -22488,10 +22438,10 @@ function createSkippedResult() {
22488
22438
  circuitState: "closed"
22489
22439
  };
22490
22440
  }
22491
- function logEnforcementResult(logger54, stepId, result, currentUsagePercent) {
22441
+ function logEnforcementResult(logger55, stepId, result, currentUsagePercent) {
22492
22442
  const usagePercent = Math.round(currentUsagePercent * 100);
22493
22443
  if (!result.allowed) {
22494
- logger54.warn("Budget enforcement blocked step", {
22444
+ logger55.warn("Budget enforcement blocked step", {
22495
22445
  stepId,
22496
22446
  reason: result.reason,
22497
22447
  circuitState: result.circuitState,
@@ -22501,14 +22451,14 @@ function logEnforcementResult(logger54, stepId, result, currentUsagePercent) {
22501
22451
  return;
22502
22452
  }
22503
22453
  if (result.warning !== void 0) {
22504
- logger54.warn("Budget enforcement warning", {
22454
+ logger55.warn("Budget enforcement warning", {
22505
22455
  stepId,
22506
22456
  warning: result.warning,
22507
22457
  currentUsage: usagePercent
22508
22458
  });
22509
22459
  return;
22510
22460
  }
22511
- logger54.debug("Budget enforcement passed for step", {
22461
+ logger55.debug("Budget enforcement passed for step", {
22512
22462
  stepId,
22513
22463
  currentUsage: usagePercent,
22514
22464
  allocatedTokens: result.allocatedTokens
@@ -22544,15 +22494,15 @@ function buildFinalOutput(stepResults) {
22544
22494
  }
22545
22495
 
22546
22496
  // src/workflows/workflow-engine-execution.ts
22547
- function createContextManagerForWorkflow(config, workflow, logger54) {
22497
+ function createContextManagerForWorkflow(config, workflow, logger55) {
22548
22498
  if (config.contextManagerConfig === void 0) return void 0;
22549
22499
  const budget = workflow.defaultBudget ?? config.defaultBudget;
22550
- return new ContextManager({ ...config.contextManagerConfig, budget, logger: logger54 });
22500
+ return new ContextManager({ ...config.contextManagerConfig, budget, logger: logger55 });
22551
22501
  }
22552
- function createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger54) {
22502
+ function createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger55) {
22553
22503
  const budgetConfig = {
22554
22504
  engineDefaultBudget: config.defaultBudget,
22555
- logger: logger54
22505
+ logger: logger55
22556
22506
  };
22557
22507
  if (workflow.defaultBudget !== void 0) {
22558
22508
  budgetConfig.workflowDefaultBudget = workflow.defaultBudget;
@@ -22587,12 +22537,12 @@ function applyInputDefaults(workflow, inputs) {
22587
22537
  return merged;
22588
22538
  }
22589
22539
  function initializeExecution(params) {
22590
- const { workflow, inputs, config, logger: logger54 } = params;
22540
+ const { workflow, inputs, config, logger: logger55 } = params;
22591
22541
  const executionId = generateUUID();
22592
22542
  const startTime = getTimeProvider().now();
22593
22543
  const resolvedInputs = applyInputDefaults(workflow, inputs);
22594
- const contextManager = createContextManagerForWorkflow(config, workflow, logger54);
22595
- const budgetCircuitBreaker = config.enableBudgetEnforcement ? createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger54) : void 0;
22544
+ const contextManager = createContextManagerForWorkflow(config, workflow, logger55);
22545
+ const budgetCircuitBreaker = config.enableBudgetEnforcement ? createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger55) : void 0;
22596
22546
  const context = {
22597
22547
  workflowId: workflow.name,
22598
22548
  executionId,
@@ -22612,7 +22562,7 @@ function initializeExecution(params) {
22612
22562
  startTime
22613
22563
  };
22614
22564
  if (contextManager !== void 0) {
22615
- logger54.debug("Context manager initialized for workflow execution", {
22565
+ logger55.debug("Context manager initialized for workflow execution", {
22616
22566
  executionId,
22617
22567
  workflowName: workflow.name,
22618
22568
  budget: workflow.defaultBudget ?? config.defaultBudget
@@ -22621,10 +22571,10 @@ function initializeExecution(params) {
22621
22571
  return { executionId, context, startTime, execution };
22622
22572
  }
22623
22573
  function enforceStepBudgets(options) {
22624
- const { steps, context, workflow, totalSteps, config, logger: logger54 } = options;
22574
+ const { steps, context, workflow, totalSteps, config, logger: logger55 } = options;
22625
22575
  const budgetConfig = {
22626
22576
  engineDefaultBudget: config.defaultBudget,
22627
- logger: logger54
22577
+ logger: logger55
22628
22578
  };
22629
22579
  if (workflow.defaultBudget !== void 0) {
22630
22580
  budgetConfig.workflowDefaultBudget = workflow.defaultBudget;
@@ -22909,29 +22859,29 @@ function createExpertFactoryWithAdapter(adapter) {
22909
22859
  };
22910
22860
  return new ExpertFactoryAdapter(factoryWrapper);
22911
22861
  }
22912
- function adaptLoggerForStepExecutor(logger54) {
22862
+ function adaptLoggerForStepExecutor(logger55) {
22913
22863
  return {
22914
22864
  debug: (message, data) => {
22915
- logger54.debug(message, data);
22865
+ logger55.debug(message, data);
22916
22866
  },
22917
22867
  info: (message, data) => {
22918
- logger54.info(message, data);
22868
+ logger55.info(message, data);
22919
22869
  },
22920
22870
  warn: (message, data) => {
22921
- logger54.warn(message, data);
22871
+ logger55.warn(message, data);
22922
22872
  },
22923
22873
  error: (message, data) => {
22924
22874
  if (data !== void 0) {
22925
22875
  const errorContext = { ...data };
22926
- logger54.error(message, void 0, errorContext);
22876
+ logger55.error(message, void 0, errorContext);
22927
22877
  } else {
22928
- logger54.error(message);
22878
+ logger55.error(message);
22929
22879
  }
22930
22880
  }
22931
22881
  };
22932
22882
  }
22933
- function createRealStepExecutorCallback(expertFactory, logger54, workflowId) {
22934
- const adaptedLogger = adaptLoggerForStepExecutor(logger54);
22883
+ function createRealStepExecutorCallback(expertFactory, logger55, workflowId) {
22884
+ const adaptedLogger = adaptLoggerForStepExecutor(logger55);
22935
22885
  const executor = createStepExecutor({ expertFactory, logger: adaptedLogger });
22936
22886
  return async (step, ctx) => {
22937
22887
  const startTime = getTimeProvider().now();
@@ -22947,7 +22897,7 @@ function createRealStepExecutorCallback(expertFactory, logger54, workflowId) {
22947
22897
  }
22948
22898
  const result = await executor.execute(step, workflowCtx);
22949
22899
  if (!result.ok) {
22950
- logger54.warn("Step execution failed", {
22900
+ logger55.warn("Step execution failed", {
22951
22901
  stepId: step.id,
22952
22902
  error: result.error.message
22953
22903
  });
@@ -23007,10 +22957,10 @@ function adaptExecutionPlan(plannerPlan) {
23007
22957
  }));
23008
22958
  return { phases };
23009
22959
  }
23010
- function createMockStepExecutor(logger54) {
22960
+ function createMockStepExecutor(logger55) {
23011
22961
  return (step, _ctx) => {
23012
22962
  const startTime = getTimeProvider().now();
23013
- logger54.debug("Executing step (mock)", {
22963
+ logger55.debug("Executing step (mock)", {
23014
22964
  stepId: step.id,
23015
22965
  agent: step.agent,
23016
22966
  action: step.action
@@ -23019,16 +22969,16 @@ function createMockStepExecutor(logger54) {
23019
22969
  };
23020
22970
  }
23021
22971
  function resolveStepExecutor(options) {
23022
- const { logger: logger54, expertFactory, workflowId, useMockExecutor } = options;
22972
+ const { logger: logger55, expertFactory, workflowId, useMockExecutor } = options;
23023
22973
  if (useMockExecutor === true) {
23024
- logger54.warn(
22974
+ logger55.warn(
23025
22975
  "useMockExecutor enabled; workflow steps will return mock results (NOT RECOMMENDED)"
23026
22976
  );
23027
- return createMockStepExecutor(logger54);
22977
+ return createMockStepExecutor(logger55);
23028
22978
  }
23029
22979
  if (expertFactory !== void 0 && workflowId !== void 0) {
23030
- logger54.info("Using real StepExecutor with ExpertFactory", { workflowId });
23031
- return createRealStepExecutorCallback(expertFactory, logger54, workflowId);
22980
+ logger55.info("Using real StepExecutor with ExpertFactory", { workflowId });
22981
+ return createRealStepExecutorCallback(expertFactory, logger55, workflowId);
23032
22982
  }
23033
22983
  if (expertFactory !== void 0 && workflowId === void 0) {
23034
22984
  throw new WorkflowExecutionUnavailableError("expertFactory provided but workflowId missing");
@@ -23039,9 +22989,9 @@ function resolveStepExecutor(options) {
23039
22989
  }
23040
22990
  function createExecutePhase(options) {
23041
22991
  const stepExecutor = resolveStepExecutor(options);
23042
- const { logger: logger54 } = options;
22992
+ const { logger: logger55 } = options;
23043
22993
  return async (steps, context, executionOptions) => {
23044
- logger54.debug("Executing phase", {
22994
+ logger55.debug("Executing phase", {
23045
22995
  stepCount: steps.length,
23046
22996
  executionId: context.executionId,
23047
22997
  maxConcurrency: executionOptions.maxConcurrency
@@ -23092,26 +23042,26 @@ function createAdaptedExecutionPlan() {
23092
23042
  return ok(adaptExecutionPlan(planResult.value));
23093
23043
  };
23094
23044
  }
23095
- function resolveExpertFactory(config, logger54) {
23045
+ function resolveExpertFactory(config, logger55) {
23096
23046
  if (config?.expertFactory !== void 0) {
23097
23047
  return config.expertFactory;
23098
23048
  }
23099
23049
  if (config?.modelAdapter !== void 0) {
23100
- logger54.info("Created ExpertFactory with provided model adapter");
23050
+ logger55.info("Created ExpertFactory with provided model adapter");
23101
23051
  return createExpertFactoryWithAdapter(config.modelAdapter);
23102
23052
  }
23103
23053
  return void 0;
23104
23054
  }
23105
23055
  function createWorkflowEngineDeps(config) {
23106
- const logger54 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
23056
+ const logger55 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
23107
23057
  const builtInTemplates = config?.builtInTemplates ?? cachedBuiltInTemplates ?? /* @__PURE__ */ new Map();
23108
- const expertFactory = resolveExpertFactory(config, logger54);
23058
+ const expertFactory = resolveExpertFactory(config, logger55);
23109
23059
  return {
23110
23060
  parseWorkflow: createParseWorkflow(),
23111
23061
  loadWorkflowFile: createLoadWorkflowFile(),
23112
23062
  createExecutionPlan: createAdaptedExecutionPlan(),
23113
23063
  executePhase: createExecutePhase({
23114
- logger: logger54,
23064
+ logger: logger55,
23115
23065
  expertFactory,
23116
23066
  workflowId: "default",
23117
23067
  useMockExecutor: config?.useMockExecutor
@@ -23142,32 +23092,32 @@ async function createInitializedWorkflowEngine(config) {
23142
23092
  function shouldSkipAdapterDetection(config) {
23143
23093
  return config?.modelAdapter !== void 0 || config?.expertFactory !== void 0 || config?.useMockExecutor === true;
23144
23094
  }
23145
- function tryAutoDetectAdapter(logger54) {
23095
+ function tryAutoDetectAdapter(logger55) {
23146
23096
  try {
23147
- logger54.info("Auto-detecting model adapter for workflow execution");
23148
- const registry = getGlobalRegistry({ logger: logger54 });
23097
+ logger55.info("Auto-detecting model adapter for workflow execution");
23098
+ const registry = getGlobalRegistry({ logger: logger55 });
23149
23099
  const adapter = registry.getDefault();
23150
- logger54.info("Using unified registry default adapter");
23100
+ logger55.info("Using unified registry default adapter");
23151
23101
  return adapter;
23152
23102
  } catch (error) {
23153
23103
  const message = getErrorMessage(error);
23154
- logger54.warn("No model adapter available, using mock executor", { error: message });
23104
+ logger55.warn("No model adapter available, using mock executor", { error: message });
23155
23105
  return void 0;
23156
23106
  }
23157
23107
  }
23158
23108
  function createWorkflowEngineDepsAsync(config) {
23159
- const logger54 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
23109
+ const logger55 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
23160
23110
  if (shouldSkipAdapterDetection(config)) {
23161
- logger54.debug("Skipping adapter detection - using provided config");
23111
+ logger55.debug("Skipping adapter detection - using provided config");
23162
23112
  return Promise.resolve(createWorkflowEngineDeps(config));
23163
23113
  }
23164
- const adapter = tryAutoDetectAdapter(logger54);
23114
+ const adapter = tryAutoDetectAdapter(logger55);
23165
23115
  if (adapter !== void 0) {
23166
- return Promise.resolve(createWorkflowEngineDeps({ ...config, modelAdapter: adapter, logger: logger54 }));
23116
+ return Promise.resolve(createWorkflowEngineDeps({ ...config, modelAdapter: adapter, logger: logger55 }));
23167
23117
  }
23168
23118
  if (config?.useMockExecutor === true) {
23169
- logger54.warn("Using mock executor as explicitly configured (no real adapter available)");
23170
- return Promise.resolve(createWorkflowEngineDeps({ ...config, useMockExecutor: true, logger: logger54 }));
23119
+ logger55.warn("Using mock executor as explicitly configured (no real adapter available)");
23120
+ return Promise.resolve(createWorkflowEngineDeps({ ...config, useMockExecutor: true, logger: logger55 }));
23171
23121
  }
23172
23122
  return Promise.reject(
23173
23123
  new WorkflowExecutionUnavailableError(
@@ -23249,23 +23199,23 @@ function createToolLogger(parentLogger, toolName, requestId) {
23249
23199
  }
23250
23200
  return parentLogger.child(context);
23251
23201
  }
23252
- function logToolStart(logger54, toolName, args) {
23253
- logger54.info("Tool execution started", {
23202
+ function logToolStart(logger55, toolName, args) {
23203
+ logger55.info("Tool execution started", {
23254
23204
  tool: toolName,
23255
23205
  hasArgs: args !== void 0,
23256
23206
  argKeys: args !== void 0 ? Object.keys(args) : []
23257
23207
  });
23258
23208
  }
23259
- function logToolSuccess(logger54, toolName, durationMs, resultInfo) {
23260
- logger54.info("Tool execution completed", {
23209
+ function logToolSuccess(logger55, toolName, durationMs, resultInfo) {
23210
+ logger55.info("Tool execution completed", {
23261
23211
  tool: toolName,
23262
23212
  durationMs,
23263
23213
  success: true,
23264
23214
  ...resultInfo
23265
23215
  });
23266
23216
  }
23267
- function logToolError(logger54, toolName, error, durationMs) {
23268
- logger54.error("Tool execution failed", error, {
23217
+ function logToolError(logger55, toolName, error, durationMs) {
23218
+ logger55.error("Tool execution failed", error, {
23269
23219
  tool: toolName,
23270
23220
  durationMs,
23271
23221
  success: false,
@@ -23278,8 +23228,8 @@ function createTimer() {
23278
23228
  elapsed: () => getTimeProvider().now() - startTime
23279
23229
  };
23280
23230
  }
23281
- function withLogging(toolName, handler2, logger54) {
23282
- const toolLogger = createToolLogger(logger54, toolName);
23231
+ function withLogging(toolName, handler2, logger55) {
23232
+ const toolLogger = createToolLogger(logger55, toolName);
23283
23233
  return async (args) => {
23284
23234
  const timer = createTimer();
23285
23235
  logToolStart(toolLogger, toolName, args);
@@ -23365,9 +23315,9 @@ var AuthHandler = class {
23365
23315
  config;
23366
23316
  logger;
23367
23317
  storedToken;
23368
- constructor(config, logger54) {
23318
+ constructor(config, logger55) {
23369
23319
  this.config = resolveAuthConfig(config);
23370
- this.logger = logger54 ?? createLogger({ component: "AuthHandler" });
23320
+ this.logger = logger55 ?? createLogger({ component: "AuthHandler" });
23371
23321
  if (this.config.enabled) this.loadToken();
23372
23322
  }
23373
23323
  /**
@@ -23466,22 +23416,22 @@ var AuthHandler = class {
23466
23416
  };
23467
23417
 
23468
23418
  // src/mcp/middleware/tool-error-handler.ts
23469
- function toolErrorResponse(prefix, error, logger54) {
23419
+ function toolErrorResponse(prefix, error, logger55) {
23470
23420
  const message = getErrorMessage(error);
23471
- if (logger54 !== void 0) {
23421
+ if (logger55 !== void 0) {
23472
23422
  const errorObj = error instanceof Error ? error : new Error(message);
23473
- logger54.error(prefix, errorObj);
23423
+ logger55.error(prefix, errorObj);
23474
23424
  }
23475
23425
  return {
23476
23426
  isError: true,
23477
23427
  content: [{ type: "text", text: `${prefix}: ${message}` }]
23478
23428
  };
23479
23429
  }
23480
- async function withToolError(prefix, logger54, fn) {
23430
+ async function withToolError(prefix, logger55, fn) {
23481
23431
  try {
23482
23432
  return await fn();
23483
23433
  } catch (error) {
23484
- return toolErrorResponse(prefix, error, logger54);
23434
+ return toolErrorResponse(prefix, error, logger55);
23485
23435
  }
23486
23436
  }
23487
23437
 
@@ -25961,47 +25911,47 @@ function createSubscriptions(eventBus, subs, handler2) {
25961
25911
  }
25962
25912
  return subscriptions;
25963
25913
  }
25964
- function createCleanupFunction(subscriptions, eventBus, logger54) {
25914
+ function createCleanupFunction(subscriptions, eventBus, logger55) {
25965
25915
  return () => {
25966
- logger54.debug("Cleaning up EventBus bridge subscriptions");
25916
+ logger55.debug("Cleaning up EventBus bridge subscriptions");
25967
25917
  for (const sub of subscriptions) {
25968
25918
  sub.unsubscribe();
25969
25919
  }
25970
- logger54.info("EventBus bridge cleanup complete", {
25920
+ logger55.info("EventBus bridge cleanup complete", {
25971
25921
  unsubscribedCount: subscriptions.length,
25972
25922
  finalStats: eventBus.getStats()
25973
25923
  });
25974
25924
  };
25975
25925
  }
25976
- function initializeEventBusBridge(observer, logger54, config) {
25926
+ function initializeEventBusBridge(observer, logger55, config) {
25977
25927
  const mergedConfig = mergeConfig2(config);
25978
25928
  if (!mergedConfig.enabled) {
25979
- logger54.debug("EventBus bridge disabled by configuration");
25929
+ logger55.debug("EventBus bridge disabled by configuration");
25980
25930
  return { initialized: false, subscriptionCount: 0, cleanup: () => {
25981
25931
  } };
25982
25932
  }
25983
25933
  const eventBus = getGlobalEventBus({ maxHistorySize: mergedConfig.maxHistorySize });
25984
25934
  const logConfig = mergedConfig.logging;
25985
- logger54.info("Initializing EventBus bridge for MCP server", {
25935
+ logger55.info("Initializing EventBus bridge for MCP server", {
25986
25936
  maxHistorySize: mergedConfig.maxHistorySize,
25987
25937
  subscriptions: mergedConfig.subscriptions
25988
25938
  });
25989
25939
  const handler2 = (event) => {
25990
- handleEvent(event, observer, logger54, logConfig);
25940
+ handleEvent(event, observer, logger55, logConfig);
25991
25941
  };
25992
25942
  const subscriptions = createSubscriptions(eventBus, mergedConfig.subscriptions, handler2);
25993
- logger54.info("EventBus bridge initialized", {
25943
+ logger55.info("EventBus bridge initialized", {
25994
25944
  subscriptionCount: subscriptions.length,
25995
25945
  eventBusStats: eventBus.getStats()
25996
25946
  });
25997
- const cleanup = createCleanupFunction(subscriptions, eventBus, logger54);
25947
+ const cleanup = createCleanupFunction(subscriptions, eventBus, logger55);
25998
25948
  return {
25999
25949
  initialized: true,
26000
25950
  subscriptionCount: subscriptions.length,
26001
25951
  cleanup
26002
25952
  };
26003
25953
  }
26004
- function handleEvent(event, observer, logger54, logConfig) {
25954
+ function handleEvent(event, observer, logger55, logConfig) {
26005
25955
  const isImportant = IMPORTANT_TOPICS.has(event.topic);
26006
25956
  const logLevel = isImportant ? logConfig.importantEventLevel : logConfig.frequentEventLevel;
26007
25957
  const logContext = {
@@ -26012,9 +25962,9 @@ function handleEvent(event, observer, logger54, logConfig) {
26012
25962
  timestamp: event.timestamp
26013
25963
  };
26014
25964
  if (logLevel === "info") {
26015
- logger54.info(`EventBus: ${event.topic}`, logContext);
25965
+ logger55.info(`EventBus: ${event.topic}`, logContext);
26016
25966
  } else {
26017
- logger54.debug(`EventBus: ${event.topic}`, logContext);
25967
+ logger55.debug(`EventBus: ${event.topic}`, logContext);
26018
25968
  }
26019
25969
  recordEventToObserver(event, observer);
26020
25970
  }
@@ -26192,19 +26142,19 @@ var PROMPT_DEFINITIONS = [
26192
26142
  ];
26193
26143
 
26194
26144
  // src/mcp/prompts/index.ts
26195
- function registerPrompts(server, logger54) {
26145
+ function registerPrompts(server, logger55) {
26196
26146
  const registered = [];
26197
26147
  for (const definition of PROMPT_DEFINITIONS) {
26198
- registerSinglePrompt(server, definition, logger54);
26148
+ registerSinglePrompt(server, definition, logger55);
26199
26149
  registered.push(definition.name);
26200
26150
  }
26201
- logger54.info("Prompt templates registered", {
26151
+ logger55.info("Prompt templates registered", {
26202
26152
  count: registered.length,
26203
26153
  prompts: registered
26204
26154
  });
26205
26155
  return { prompts: registered };
26206
26156
  }
26207
- function registerSinglePrompt(server, definition, logger54) {
26157
+ function registerSinglePrompt(server, definition, logger55) {
26208
26158
  server.registerPrompt(
26209
26159
  definition.name,
26210
26160
  {
@@ -26212,7 +26162,7 @@ function registerSinglePrompt(server, definition, logger54) {
26212
26162
  argsSchema: definition.argsSchema
26213
26163
  },
26214
26164
  (args) => {
26215
- logger54.debug("Prompt requested", { prompt: definition.name });
26165
+ logger55.debug("Prompt requested", { prompt: definition.name });
26216
26166
  const messages = definition.buildMessages(args);
26217
26167
  return {
26218
26168
  description: definition.description,
@@ -26252,7 +26202,7 @@ function buildModelsPayload() {
26252
26202
  }))
26253
26203
  };
26254
26204
  }
26255
- function registerModelsResource(server, logger54) {
26205
+ function registerModelsResource(server, logger55) {
26256
26206
  server.registerResource(
26257
26207
  MODELS_RESOURCE_NAME,
26258
26208
  MODELS_RESOURCE_URI,
@@ -26261,7 +26211,7 @@ function registerModelsResource(server, logger54) {
26261
26211
  mimeType: "application/json"
26262
26212
  },
26263
26213
  () => {
26264
- logger54.debug("Reading models resource");
26214
+ logger55.debug("Reading models resource");
26265
26215
  const payload = buildModelsPayload();
26266
26216
  return {
26267
26217
  contents: [
@@ -26274,7 +26224,7 @@ function registerModelsResource(server, logger54) {
26274
26224
  };
26275
26225
  }
26276
26226
  );
26277
- logger54.info("Registered models resource", { uri: MODELS_RESOURCE_URI });
26227
+ logger55.info("Registered models resource", { uri: MODELS_RESOURCE_URI });
26278
26228
  }
26279
26229
 
26280
26230
  // src/indexer/research-index/research-index-base-types.ts
@@ -27065,10 +27015,10 @@ ${topicLines}
27065
27015
  // src/mcp/resources/research-resource.ts
27066
27016
  var RESEARCH_RESOURCE_URI = "nexus://research/papers";
27067
27017
  var RESEARCH_RESOURCE_NAME = "research-papers";
27068
- function buildResearchPayload(logger54) {
27018
+ function buildResearchPayload(logger55) {
27069
27019
  const result = parseRegistry();
27070
27020
  if (!result.ok) {
27071
- logger54.debug("Research registry not available", {
27021
+ logger55.debug("Research registry not available", {
27072
27022
  error: result.error.message
27073
27023
  });
27074
27024
  return {
@@ -27102,7 +27052,7 @@ function buildResearchPayload(logger54) {
27102
27052
  stats: index.stats
27103
27053
  };
27104
27054
  }
27105
- function registerResearchResource(server, logger54) {
27055
+ function registerResearchResource(server, logger55) {
27106
27056
  server.registerResource(
27107
27057
  RESEARCH_RESOURCE_NAME,
27108
27058
  RESEARCH_RESOURCE_URI,
@@ -27111,9 +27061,9 @@ function registerResearchResource(server, logger54) {
27111
27061
  mimeType: "application/json"
27112
27062
  },
27113
27063
  () => {
27114
- logger54.debug("Reading research resource");
27064
+ logger55.debug("Reading research resource");
27115
27065
  try {
27116
- const payload = buildResearchPayload(logger54);
27066
+ const payload = buildResearchPayload(logger55);
27117
27067
  return {
27118
27068
  contents: [
27119
27069
  {
@@ -27124,7 +27074,7 @@ function registerResearchResource(server, logger54) {
27124
27074
  ]
27125
27075
  };
27126
27076
  } catch (error) {
27127
- logger54.warn("Failed to build research payload", {
27077
+ logger55.warn("Failed to build research payload", {
27128
27078
  error: getErrorMessage(error)
27129
27079
  });
27130
27080
  return {
@@ -27139,7 +27089,7 @@ function registerResearchResource(server, logger54) {
27139
27089
  }
27140
27090
  }
27141
27091
  );
27142
- logger54.info("Registered research resource", { uri: RESEARCH_RESOURCE_URI });
27092
+ logger55.info("Registered research resource", { uri: RESEARCH_RESOURCE_URI });
27143
27093
  }
27144
27094
 
27145
27095
  // src/mcp/tools/create-expert.ts
@@ -27240,29 +27190,29 @@ var ROLE_TO_TASK_CATEGORY = {
27240
27190
  pm_expert: "planning",
27241
27191
  ux_expert: "planning"
27242
27192
  };
27243
- function resolveAdapterForModelPreference(modelPreference, fallbackAdapter, logger54) {
27244
- const registry = getGlobalRegistry({ logger: logger54 });
27193
+ function resolveAdapterForModelPreference(modelPreference, fallbackAdapter, logger55) {
27194
+ const registry = getGlobalRegistry({ logger: logger55 });
27245
27195
  const adapter = registry.getAdapterForModel(modelPreference);
27246
27196
  if (adapter === registry.getDefault() && fallbackAdapter !== void 0) {
27247
- logger54.debug("Model preference not in registry, using fallback adapter", { modelPreference });
27197
+ logger55.debug("Model preference not in registry, using fallback adapter", { modelPreference });
27248
27198
  return fallbackAdapter;
27249
27199
  }
27250
- logger54.info("Routing expert to CLI for model preference", { modelPreference });
27200
+ logger55.info("Routing expert to CLI for model preference", { modelPreference });
27251
27201
  return adapter;
27252
27202
  }
27253
- function resolveAdapterForRole(role, fallbackAdapter, logger54) {
27203
+ function resolveAdapterForRole(role, fallbackAdapter, logger55) {
27254
27204
  const category = ROLE_TO_TASK_CATEGORY[role];
27255
27205
  if (category === void 0) return fallbackAdapter;
27256
- const registry = getGlobalRegistry({ logger: logger54 });
27206
+ const registry = getGlobalRegistry({ logger: logger55 });
27257
27207
  const adapter = registry.getAdapter(category);
27258
- logger54.info("Auto-routing expert to specialized CLI", {
27208
+ logger55.info("Auto-routing expert to specialized CLI", {
27259
27209
  role,
27260
27210
  category,
27261
27211
  preferredCli: registry.getRouting(category)?.primaryCli
27262
27212
  });
27263
27213
  return adapter;
27264
27214
  }
27265
- function getExpertFallbackChain(role, excludeCli, logger54) {
27215
+ function getExpertFallbackChain(role, excludeCli, logger55) {
27266
27216
  const category = ROLE_TO_TASK_CATEGORY[role];
27267
27217
  if (category === void 0) return [];
27268
27218
  const bucketType = CATEGORY_TO_FALLBACK_TYPE[category];
@@ -27271,7 +27221,7 @@ function getExpertFallbackChain(role, excludeCli, logger54) {
27271
27221
  bucketType
27272
27222
  );
27273
27223
  const filtered = chain.filter((cli) => cli !== excludeCli);
27274
- logger54.debug("Expert fallback chain resolved", { role, category, excludeCli, chain: filtered });
27224
+ logger55.debug("Expert fallback chain resolved", { role, category, excludeCli, chain: filtered });
27275
27225
  return [...filtered];
27276
27226
  }
27277
27227
 
@@ -27315,7 +27265,7 @@ function recordExpertOutcome(role, success, durationMs, error) {
27315
27265
  const store = getOutcomeStore();
27316
27266
  const errorMsg = error ?? "expert creation failed";
27317
27267
  store.append({
27318
- id: `expert-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
27268
+ id: `expert-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
27319
27269
  cli: DEFAULT_CLI,
27320
27270
  category: resolveCategory(role),
27321
27271
  model: "expert",
@@ -27377,16 +27327,16 @@ function buildResponse(expert) {
27377
27327
  };
27378
27328
  }
27379
27329
  function createExpertFromFactory(deps, expertType, modelPreference, role) {
27380
- const logger54 = deps.logger ?? createLogger({ tool: "create_expert" });
27330
+ const logger55 = deps.logger ?? createLogger({ tool: "create_expert" });
27381
27331
  const options = {};
27382
27332
  if (modelPreference !== void 0) {
27383
27333
  options.modelOverrides = { modelId: modelPreference };
27384
27334
  }
27385
27335
  let adapter;
27386
27336
  if (modelPreference !== void 0) {
27387
- adapter = resolveAdapterForModelPreference(modelPreference, deps.modelAdapter, logger54);
27337
+ adapter = resolveAdapterForModelPreference(modelPreference, deps.modelAdapter, logger55);
27388
27338
  } else if (role !== void 0) {
27389
- adapter = resolveAdapterForRole(role, deps.modelAdapter, logger54);
27339
+ adapter = resolveAdapterForRole(role, deps.modelAdapter, logger55);
27390
27340
  } else {
27391
27341
  adapter = deps.modelAdapter;
27392
27342
  }
@@ -27457,7 +27407,7 @@ function createCreateExpertHandler(deps) {
27457
27407
  };
27458
27408
  }
27459
27409
  function registerCreateExpertTool(server, deps) {
27460
- const logger54 = deps.logger ?? createLogger({ tool: "create_expert" });
27410
+ const logger55 = deps.logger ?? createLogger({ tool: "create_expert" });
27461
27411
  const toolSchema = {
27462
27412
  role: z56.enum([
27463
27413
  "code_expert",
@@ -27477,23 +27427,23 @@ function registerCreateExpertTool(server, deps) {
27477
27427
  const secureHandler = createSecureHandler(createCreateExpertHandler(deps), {
27478
27428
  toolName: "create_expert",
27479
27429
  rateLimiter: deps.rateLimiter,
27480
- logger: logger54
27430
+ logger: logger55
27481
27431
  });
27482
27432
  const timeoutMs = getToolTimeout("create_expert", deps.security);
27483
- const wrappedHandler = wrapToolWithTimeout("create_expert", secureHandler, { timeoutMs, logger: logger54 });
27433
+ const wrappedHandler = wrapToolWithTimeout("create_expert", secureHandler, { timeoutMs, logger: logger55 });
27484
27434
  server.registerTool(
27485
27435
  "create_expert",
27486
27436
  { description, inputSchema: toolSchema },
27487
27437
  toSdkCallback(wrappedHandler)
27488
27438
  );
27489
- logger54.info("Registered create_expert tool with secure handler and timeout protection");
27439
+ logger55.info("Registered create_expert tool with secure handler and timeout protection");
27490
27440
  }
27491
- function createDefaultDeps(rateLimiter, logger54) {
27441
+ function createDefaultDeps(rateLimiter, logger55) {
27492
27442
  return {
27493
27443
  expertFactory: ExpertFactory,
27494
27444
  expertRegistry: /* @__PURE__ */ new Map(),
27495
27445
  rateLimiter,
27496
- ...logger54 !== void 0 ? { logger: logger54 } : {}
27446
+ ...logger55 !== void 0 ? { logger: logger55 } : {}
27497
27447
  };
27498
27448
  }
27499
27449
  function getAvailableRoles() {
@@ -27528,7 +27478,7 @@ function buildExpertsPayload() {
27528
27478
  experts
27529
27479
  };
27530
27480
  }
27531
- function registerExpertsResource(server, logger54) {
27481
+ function registerExpertsResource(server, logger55) {
27532
27482
  server.registerResource(
27533
27483
  EXPERTS_RESOURCE_NAME,
27534
27484
  EXPERTS_RESOURCE_URI,
@@ -27537,7 +27487,7 @@ function registerExpertsResource(server, logger54) {
27537
27487
  mimeType: "application/json"
27538
27488
  },
27539
27489
  () => {
27540
- logger54.debug("Reading experts resource");
27490
+ logger55.debug("Reading experts resource");
27541
27491
  const payload = buildExpertsPayload();
27542
27492
  return {
27543
27493
  contents: [
@@ -27550,12 +27500,12 @@ function registerExpertsResource(server, logger54) {
27550
27500
  };
27551
27501
  }
27552
27502
  );
27553
- logger54.info("Registered experts resource", { uri: EXPERTS_RESOURCE_URI });
27503
+ logger55.info("Registered experts resource", { uri: EXPERTS_RESOURCE_URI });
27554
27504
  }
27555
27505
 
27556
27506
  // src/mcp/resources/index.ts
27557
- function registerResources(server, logger54) {
27558
- const log3 = logger54 ?? createLogger({ component: "mcp-resources" });
27507
+ function registerResources(server, logger55) {
27508
+ const log3 = logger55 ?? createLogger({ component: "mcp-resources" });
27559
27509
  log3.info("Registering MCP resources");
27560
27510
  registerModelsResource(server, log3);
27561
27511
  registerResearchResource(server, log3);
@@ -27669,11 +27619,11 @@ function validateWorkflowInputs(workflow, inputs) {
27669
27619
  };
27670
27620
  }
27671
27621
  async function loadWorkflowFromPath(deps, filePath) {
27672
- const { workflowEngine, logger: logger54 } = deps;
27622
+ const { workflowEngine, logger: logger55 } = deps;
27673
27623
  const allowedDirs = getAllowedWorkflowDirs(deps);
27674
27624
  const pathValidation = validateWorkflowPath(filePath, allowedDirs);
27675
27625
  if (!pathValidation.ok) {
27676
- logger54?.warn("Workflow path validation failed", {
27626
+ logger55?.warn("Workflow path validation failed", {
27677
27627
  path: filePath,
27678
27628
  error: pathValidation.error.message
27679
27629
  });
@@ -27692,8 +27642,8 @@ async function loadWorkflowFromPath(deps, filePath) {
27692
27642
  return result;
27693
27643
  }
27694
27644
  async function loadWorkflowFromName(deps, name) {
27695
- const { workflowEngine, logger: logger54 } = deps;
27696
- logger54?.debug("Looking up built-in template", { name });
27645
+ const { workflowEngine, logger: logger55 } = deps;
27646
+ logger55?.debug("Looking up built-in template", { name });
27697
27647
  const templates = await workflowEngine.listTemplates();
27698
27648
  const found = templates.find((t) => t.name === name);
27699
27649
  if (found === void 0) {
@@ -27717,9 +27667,9 @@ async function loadWorkflowFromName(deps, name) {
27717
27667
  return { ok: true, value: definition };
27718
27668
  }
27719
27669
  async function loadWorkflow(deps, template) {
27720
- const { logger: logger54 } = deps;
27670
+ const { logger: logger55 } = deps;
27721
27671
  if (isFilePath(template)) {
27722
- logger54?.debug("Loading workflow from file", { path: template });
27672
+ logger55?.debug("Loading workflow from file", { path: template });
27723
27673
  return loadWorkflowFromPath(deps, template);
27724
27674
  }
27725
27675
  return loadWorkflowFromName(deps, template);
@@ -27766,15 +27716,15 @@ function formatValidationErrors(validation) {
27766
27716
 
27767
27717
  // src/mcp/tools/run-workflow.ts
27768
27718
  async function executeWorkflow(deps, workflow, inputs) {
27769
- const { workflowEngine, logger: logger54 } = deps;
27770
- logger54?.info("Executing workflow", {
27719
+ const { workflowEngine, logger: logger55 } = deps;
27720
+ logger55?.info("Executing workflow", {
27771
27721
  workflowName: workflow.name,
27772
27722
  inputCount: Object.keys(inputs).length
27773
27723
  });
27774
27724
  const startTime = getTimeProvider().now();
27775
27725
  const result = await workflowEngine.execute(workflow, inputs);
27776
27726
  if (!result.ok) {
27777
- logger54?.error("Workflow execution failed", result.error, {
27727
+ logger55?.error("Workflow execution failed", result.error, {
27778
27728
  workflowName: workflow.name
27779
27729
  });
27780
27730
  return {
@@ -27783,7 +27733,7 @@ async function executeWorkflow(deps, workflow, inputs) {
27783
27733
  };
27784
27734
  }
27785
27735
  const workflowResult = result.value;
27786
- logger54?.info("Workflow completed", {
27736
+ logger55?.info("Workflow completed", {
27787
27737
  workflowName: workflow.name,
27788
27738
  durationMs: getTimeProvider().now() - startTime,
27789
27739
  stepCount: workflowResult.stepResults.length
@@ -27896,16 +27846,16 @@ function createRunWorkflowHandler(deps) {
27896
27846
  };
27897
27847
  }
27898
27848
  function registerRunWorkflowTool(server, deps) {
27899
- const logger54 = deps.logger ?? createLogger({ tool: "run_workflow" });
27849
+ const logger55 = deps.logger ?? createLogger({ tool: "run_workflow" });
27900
27850
  const notifier = deps.notifier ?? createMcpNotifier(server);
27901
27851
  const depsWithNotifier = { ...deps, notifier };
27902
27852
  const secureHandler = createSecureHandler(createRunWorkflowHandler(depsWithNotifier), {
27903
27853
  toolName: "run_workflow",
27904
27854
  rateLimiter: deps.rateLimiter,
27905
- logger: logger54
27855
+ logger: logger55
27906
27856
  });
27907
27857
  const timeoutMs = getToolTimeout("run_workflow", deps.security);
27908
- const wrappedHandler = wrapToolWithTimeout("run_workflow", secureHandler, { timeoutMs, logger: logger54 });
27858
+ const wrappedHandler = wrapToolWithTimeout("run_workflow", secureHandler, { timeoutMs, logger: logger55 });
27909
27859
  server.registerTool(
27910
27860
  "run_workflow",
27911
27861
  {
@@ -27914,7 +27864,7 @@ function registerRunWorkflowTool(server, deps) {
27914
27864
  },
27915
27865
  toSdkCallback(wrappedHandler)
27916
27866
  );
27917
- logger54.info("Registered run_workflow tool with secure handler and timeout protection");
27867
+ logger55.info("Registered run_workflow tool with secure handler and timeout protection");
27918
27868
  }
27919
27869
 
27920
27870
  // src/orchestration/graph/graph-types.ts
@@ -30078,8 +30028,8 @@ var OrchestratorAdapter = class {
30078
30028
  history = [];
30079
30029
  logger;
30080
30030
  agent = null;
30081
- constructor(logger54) {
30082
- this.logger = logger54 ?? createLogger({ component: "OrchestratorAdapter" });
30031
+ constructor(logger55) {
30032
+ this.logger = logger55 ?? createLogger({ component: "OrchestratorAdapter" });
30083
30033
  }
30084
30034
  setOrchestrator(agent) {
30085
30035
  this.agent = agent;
@@ -30219,10 +30169,10 @@ var WorkflowOrchestratorAdapter = class {
30219
30169
  logger;
30220
30170
  executions = /* @__PURE__ */ new Map();
30221
30171
  history = [];
30222
- constructor(engine, logger54) {
30172
+ constructor(engine, logger55) {
30223
30173
  this.id = `workflow-${randomUUID10().slice(0, 8)}`;
30224
30174
  this.engine = engine;
30225
- this.logger = logger54 ?? createLogger({ component: "WorkflowOrchestratorAdapter" });
30175
+ this.logger = logger55 ?? createLogger({ component: "WorkflowOrchestratorAdapter" });
30226
30176
  }
30227
30177
  async execute(definition, inputs, _options) {
30228
30178
  if (definition.type !== "workflow") {
@@ -30414,22 +30364,22 @@ var OrchestratorFactory = class {
30414
30364
  }
30415
30365
  };
30416
30366
  async function createOrchestratorFactory(config) {
30417
- const logger54 = config?.logger ?? createLogger({ component: "OrchestratorFactory" });
30418
- logger54.info("Initializing OrchestratorFactory");
30367
+ const logger55 = config?.logger ?? createLogger({ component: "OrchestratorFactory" });
30368
+ logger55.info("Initializing OrchestratorFactory");
30419
30369
  let workflowEngine;
30420
30370
  try {
30421
30371
  const workflowConfig = {
30422
30372
  ...config?.workflowConfig,
30423
- logger: logger54
30373
+ logger: logger55
30424
30374
  };
30425
30375
  if (config?.modelAdapter !== void 0) {
30426
30376
  workflowConfig.modelAdapter = config.modelAdapter;
30427
30377
  }
30428
30378
  workflowEngine = await createProductionWorkflowEngine(workflowConfig);
30429
- logger54.info("WorkflowEngine initialized");
30379
+ logger55.info("WorkflowEngine initialized");
30430
30380
  } catch (error) {
30431
30381
  const message = getErrorMessage(error);
30432
- logger54.warn("WorkflowEngine initialization failed, workflow orchestration unavailable", {
30382
+ logger55.warn("WorkflowEngine initialization failed, workflow orchestration unavailable", {
30433
30383
  error: message
30434
30384
  });
30435
30385
  }
@@ -30440,12 +30390,12 @@ async function createOrchestratorFactory(config) {
30440
30390
  var MAX_OUTCOMES2 = 200;
30441
30391
  var AMBIGUITY_THRESHOLD = 0.7;
30442
30392
  function createWorkflowRouter(options) {
30443
- const logger54 = options?.logger ?? createLogger({ component: "WorkflowRouter" });
30444
- const analyzer = options?.analyzer ?? createSharedTaskAnalyzer({ logger: logger54 });
30393
+ const logger55 = options?.logger ?? createLogger({ component: "WorkflowRouter" });
30394
+ const analyzer = options?.analyzer ?? createSharedTaskAnalyzer({ logger: logger55 });
30445
30395
  const outcomes = [];
30446
30396
  return {
30447
30397
  route(signals, routerOpts) {
30448
- return routeTask(signals, analyzer, logger54, routerOpts);
30398
+ return routeTask(signals, analyzer, logger55, routerOpts);
30449
30399
  },
30450
30400
  recordOutcome(outcome) {
30451
30401
  recordPatternOutcome(outcomes, outcome);
@@ -30487,7 +30437,7 @@ function buildDecision(input) {
30487
30437
  }
30488
30438
  return base;
30489
30439
  }
30490
- function routeTask(signals, analyzer, logger54, _opts) {
30440
+ function routeTask(signals, analyzer, logger55, _opts) {
30491
30441
  const analysis = analyzer.analyze(signals.description);
30492
30442
  const enriched = enrichSignals(signals, analysis);
30493
30443
  const matchedRules = [];
@@ -30497,7 +30447,7 @@ function routeTask(signals, analyzer, logger54, _opts) {
30497
30447
  if (result !== void 0) {
30498
30448
  matchedRules.push(rule.name);
30499
30449
  collectAlternatives(alternatives, result.pattern);
30500
- logger54.info("Workflow pattern selected", {
30450
+ logger55.info("Workflow pattern selected", {
30501
30451
  pattern: result.pattern,
30502
30452
  rule: rule.name,
30503
30453
  confidence: result.confidence,
@@ -30507,7 +30457,7 @@ function routeTask(signals, analyzer, logger54, _opts) {
30507
30457
  return buildDecision({ result, matchedRules, alternatives, analysis });
30508
30458
  }
30509
30459
  }
30510
- logger54.info("Using fallback pattern", { pattern: "graph", taskType: analysis.taskType });
30460
+ logger55.info("Using fallback pattern", { pattern: "graph", taskType: analysis.taskType });
30511
30461
  const fallback = {
30512
30462
  pattern: "graph",
30513
30463
  reasoning: "No specific rule matched \u2014 using Graph DAG as the most general pattern",
@@ -30794,11 +30744,11 @@ function createMockTechLead() {
30794
30744
  var globalSicaConfig;
30795
30745
  var sicaEnabled = false;
30796
30746
  function initializeSica(options) {
30797
- const { sicaConfig, logger: logger54 } = options;
30747
+ const { sicaConfig, logger: logger55 } = options;
30798
30748
  if (sicaConfig?.enabled !== true) {
30799
30749
  sicaEnabled = false;
30800
30750
  globalSicaConfig = void 0;
30801
- logger54.info("SICA self-improvement disabled by configuration");
30751
+ logger55.info("SICA self-improvement disabled by configuration");
30802
30752
  return {
30803
30753
  enabled: false,
30804
30754
  reason: sicaConfig?.enabled === false ? "disabled in config" : "not enabled (opt-in feature)"
@@ -30806,7 +30756,7 @@ function initializeSica(options) {
30806
30756
  }
30807
30757
  sicaEnabled = true;
30808
30758
  globalSicaConfig = sicaConfig;
30809
- logger54.info("SICA self-improvement enabled", {
30759
+ logger55.info("SICA self-improvement enabled", {
30810
30760
  improvementThreshold: sicaConfig.improvementThreshold,
30811
30761
  maxActiveVersions: sicaConfig.maxActiveVersions,
30812
30762
  cooldownMs: sicaConfig.improvementCooldownMs
@@ -30824,18 +30774,18 @@ function getSicaConfig() {
30824
30774
  }
30825
30775
 
30826
30776
  // src/mcp/tools/orchestrate-sica.ts
30827
- function createOrchestratorWithSica(logger54, adapter) {
30828
- const orchestrator = new Orchestrator({ logger: logger54, ...adapter !== void 0 ? { adapter } : {} });
30777
+ function createOrchestratorWithSica(logger55, adapter) {
30778
+ const orchestrator = new Orchestrator({ logger: logger55, ...adapter !== void 0 ? { adapter } : {} });
30829
30779
  if (!isSicaEnabled()) {
30830
- logger54.debug("SICA not enabled, using plain orchestrator");
30780
+ logger55.debug("SICA not enabled, using plain orchestrator");
30831
30781
  return orchestrator;
30832
30782
  }
30833
30783
  const sicaConfig = getSicaConfig();
30834
30784
  if (sicaConfig === void 0) {
30835
- logger54.debug("SICA config unavailable, using plain orchestrator");
30785
+ logger55.debug("SICA config unavailable, using plain orchestrator");
30836
30786
  return orchestrator;
30837
30787
  }
30838
- logger54.info("Creating SICA-wrapped orchestrator", {
30788
+ logger55.info("Creating SICA-wrapped orchestrator", {
30839
30789
  improvementThreshold: sicaConfig.improvementThreshold,
30840
30790
  maxActiveVersions: sicaConfig.maxActiveVersions
30841
30791
  });
@@ -30855,9 +30805,9 @@ function createOrchestratorWithSica(logger54, adapter) {
30855
30805
  improvementCooldownMs: sicaConfig.improvementCooldownMs,
30856
30806
  enableObservability: sicaConfig.enableObservability
30857
30807
  },
30858
- logger: logger54
30808
+ logger: logger55
30859
30809
  });
30860
- return createSicaOrchestratorAdapter(sicaAgent, logger54);
30810
+ return createSicaOrchestratorAdapter(sicaAgent, logger55);
30861
30811
  }
30862
30812
  function createSicaOrchestratorAdapter(sicaAgent, _logger) {
30863
30813
  return {
@@ -30913,7 +30863,7 @@ var PersistedCatalogSchema = z62.object({
30913
30863
  function getCatalogPath() {
30914
30864
  return path4.join(os2.homedir(), CATALOG_DIR, CATALOG_FILE);
30915
30865
  }
30916
- function loadPersistedCatalog(logger54) {
30866
+ function loadPersistedCatalog(logger55) {
30917
30867
  const filePath = getCatalogPath();
30918
30868
  try {
30919
30869
  if (!fs4.existsSync(filePath)) return [];
@@ -30921,21 +30871,21 @@ function loadPersistedCatalog(logger54) {
30921
30871
  const parsed = JSON.parse(content);
30922
30872
  const result = PersistedCatalogSchema.safeParse(parsed);
30923
30873
  if (!result.success) {
30924
- logger54.warn("Invalid pending catalog file, starting fresh", {
30874
+ logger55.warn("Invalid pending catalog file, starting fresh", {
30925
30875
  errors: result.error.issues.map((i) => i.message)
30926
30876
  });
30927
30877
  return [];
30928
30878
  }
30929
30879
  return result.data.references;
30930
30880
  } catch (error) {
30931
- logger54.debug("Could not load pending catalog, starting fresh", {
30881
+ logger55.debug("Could not load pending catalog, starting fresh", {
30932
30882
  error: getErrorMessage(error),
30933
30883
  filePath
30934
30884
  });
30935
30885
  return [];
30936
30886
  }
30937
30887
  }
30938
- function savePersistedCatalog(references, logger54) {
30888
+ function savePersistedCatalog(references, logger55) {
30939
30889
  const dirPath = path4.join(os2.homedir(), CATALOG_DIR);
30940
30890
  const filePath = getCatalogPath();
30941
30891
  const tempPath = `${filePath}.tmp.${String(process.pid)}`;
@@ -30957,7 +30907,7 @@ function savePersistedCatalog(references, logger54) {
30957
30907
  } catch {
30958
30908
  }
30959
30909
  const message = getErrorMessage(error);
30960
- logger54.warn("Failed to persist pending catalog", { error: message });
30910
+ logger55.warn("Failed to persist pending catalog", { error: message });
30961
30911
  }
30962
30912
  }
30963
30913
  var ARXIV_PATTERN = /\b(\d{4}\.\d{4,5})\b/g;
@@ -30967,8 +30917,8 @@ var ResearchAutoCatalog = class _ResearchAutoCatalog {
30967
30917
  pendingReferences = [];
30968
30918
  /** Maximum pending references to hold in memory. */
30969
30919
  static MAX_PENDING = 100;
30970
- constructor(logger54) {
30971
- this.logger = logger54 ?? createLogger({ component: "research-auto-catalog" });
30920
+ constructor(logger55) {
30921
+ this.logger = logger55 ?? createLogger({ component: "research-auto-catalog" });
30972
30922
  const persisted = loadPersistedCatalog(this.logger);
30973
30923
  if (persisted.length > 0) {
30974
30924
  this.pendingReferences.push(...persisted.slice(0, _ResearchAutoCatalog.MAX_PENDING));
@@ -31123,8 +31073,8 @@ var ResearchAutoCatalog = class _ResearchAutoCatalog {
31123
31073
  }
31124
31074
  };
31125
31075
  var autoCatalogInstance;
31126
- function getAutoCatalog(logger54) {
31127
- autoCatalogInstance ??= new ResearchAutoCatalog(logger54);
31076
+ function getAutoCatalog(logger55) {
31077
+ autoCatalogInstance ??= new ResearchAutoCatalog(logger55);
31128
31078
  return autoCatalogInstance;
31129
31079
  }
31130
31080
 
@@ -31314,10 +31264,15 @@ function assignDependencyAwareWaves(entries) {
31314
31264
  }
31315
31265
  }
31316
31266
  }
31317
- return entries.map((entry) => ({
31318
- ...entry,
31319
- wave: roleToWave.get(entry.role) ?? entry.wave
31320
- }));
31267
+ return entries.map((entry) => {
31268
+ const deps = EXPERT_DEPENDENCIES[entry.role];
31269
+ const presentDeps = deps?.filter((d) => roleToWave.has(d)) ?? [];
31270
+ return {
31271
+ ...entry,
31272
+ wave: roleToWave.get(entry.role) ?? entry.wave,
31273
+ ...presentDeps.length > 0 ? { dependsOn: presentDeps } : {}
31274
+ };
31275
+ });
31321
31276
  }
31322
31277
  function mapHintToRole(hint) {
31323
31278
  const lower = hint.toLowerCase();
@@ -32896,12 +32851,12 @@ function computeExpertReliability() {
32896
32851
  }
32897
32852
  return reliability;
32898
32853
  }
32899
- function computeAgentPlan(task, logger54) {
32854
+ function computeAgentPlan(task, logger55) {
32900
32855
  try {
32901
32856
  const analyzer = new SharedTaskAnalyzer();
32902
32857
  const analysis = analyzer.analyze(task);
32903
32858
  if (analysis.complexity === "simple") {
32904
- logger54.debug("Skipping AOrchestra planning for simple task", {
32859
+ logger55.debug("Skipping AOrchestra planning for simple task", {
32905
32860
  taskType: analysis.taskType
32906
32861
  });
32907
32862
  return void 0;
@@ -32913,9 +32868,9 @@ function computeAgentPlan(task, logger54) {
32913
32868
  if (rate < 0.5) excludedExperts.push({ role, rate: Math.round(rate * 100) / 100 });
32914
32869
  }
32915
32870
  if (excludedExperts.length > 0) {
32916
- logger54.warn("Experts excluded by reliability filter", { excludedExperts });
32871
+ logger55.warn("Experts excluded by reliability filter", { excludedExperts });
32917
32872
  }
32918
- logger54.info("AOrchestra plan", {
32873
+ logger55.info("AOrchestra plan", {
32919
32874
  experts: plan.totalExperts,
32920
32875
  taskType: plan.taskType,
32921
32876
  complexity: plan.complexity,
@@ -32923,7 +32878,7 @@ function computeAgentPlan(task, logger54) {
32923
32878
  });
32924
32879
  return plan;
32925
32880
  } catch (planError) {
32926
- logger54.warn("AOrchestra planning failed", {
32881
+ logger55.warn("AOrchestra planning failed", {
32927
32882
  error: getErrorMessage(planError)
32928
32883
  });
32929
32884
  return void 0;
@@ -32993,7 +32948,7 @@ async function executeOnAdapter(opts) {
32993
32948
  }
32994
32949
  }
32995
32950
  function createWorkerExecutor(config) {
32996
- const { taskDescription, modelAdapter, logger: logger54, learnings, perWorkerRouting } = config;
32951
+ const { taskDescription, modelAdapter, logger: logger55, learnings, perWorkerRouting } = config;
32997
32952
  const effectiveFallbackCli = modelAdapter.providerId;
32998
32953
  return async (entry, priorWaveResults) => {
32999
32954
  const workerStartMs = getTimeProvider().now();
@@ -33002,7 +32957,7 @@ function createWorkerExecutor(config) {
33002
32957
  modelAdapter,
33003
32958
  effectiveFallbackCli,
33004
32959
  perWorkerRouting === true,
33005
- logger54
32960
+ logger55
33006
32961
  );
33007
32962
  return executeOnAdapter({
33008
32963
  entry,
@@ -33176,15 +33131,15 @@ function prepareBudgetedEntries(plan, maxCalls, log3) {
33176
33131
  return entries;
33177
33132
  }
33178
33133
  async function executeWorkerDispatch(options) {
33179
- const { agentPlan, taskDescription, modelAdapter, logger: logger54, maxConcurrency } = options;
33134
+ const { agentPlan, taskDescription, modelAdapter, logger: logger55, maxConcurrency } = options;
33180
33135
  const maxCalls = resolveMaxWorkerCalls(options.maxWorkerCalls);
33181
33136
  const startMs = getTimeProvider().now();
33182
- const entries = prepareBudgetedEntries(agentPlan, maxCalls, logger54);
33137
+ const entries = prepareBudgetedEntries(agentPlan, maxCalls, logger55);
33183
33138
  const qualityGate = options.qualityGate === false ? void 0 : options.qualityGate;
33184
33139
  const executorConfig = {
33185
33140
  taskDescription,
33186
33141
  modelAdapter,
33187
- logger: logger54,
33142
+ logger: logger55,
33188
33143
  ...options.learnings !== void 0 ? { learnings: options.learnings } : {},
33189
33144
  ...options.perWorkerRouting !== void 0 ? { perWorkerRouting: options.perWorkerRouting } : {}
33190
33145
  };
@@ -33205,8 +33160,8 @@ async function executeWorkerDispatch(options) {
33205
33160
  };
33206
33161
  await runSynthesisPhase(state, options, maxCalls);
33207
33162
  const refined = await runRefinementPhase(state, entries, options, maxCalls);
33208
- const base = buildDispatchResult(state.results, startMs, logger54, state.totalModelCalls);
33209
- logDispatchInsights(state.results, logger54);
33163
+ const base = buildDispatchResult(state.results, startMs, logger55, state.totalModelCalls);
33164
+ logDispatchInsights(state.results, logger55);
33210
33165
  return {
33211
33166
  ...base,
33212
33167
  ...refined ? { refined: true } : {},
@@ -33247,7 +33202,7 @@ function recordWorkerOutcomes(results, taskDescription) {
33247
33202
  const success = r.status === "success";
33248
33203
  const cli = r.resolvedCli ?? fallbackCli;
33249
33204
  store.append({
33250
- id: `worker-${r.role}-${String(Date.now())}-${Math.random().toString(36).slice(2, 6)}`,
33205
+ id: `worker-${r.role}-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 6)}`,
33251
33206
  cli,
33252
33207
  category,
33253
33208
  model: `worker-${r.role}`,
@@ -33264,18 +33219,18 @@ function recordWorkerOutcomes(results, taskDescription) {
33264
33219
  });
33265
33220
  }
33266
33221
  }
33267
- function buildDispatchResult(results, startMs, logger54, totalModelCalls) {
33222
+ function buildDispatchResult(results, startMs, logger55, totalModelCalls) {
33268
33223
  const successCount = results.filter((r) => r.status === "success").length;
33269
33224
  const errorCount = results.filter((r) => r.status === "error").length;
33270
33225
  const conflicts = detectConflicts(results);
33271
33226
  if (conflicts.length > 0) {
33272
- logger54.warn("Worker output conflicts detected \u2014 human review recommended", {
33227
+ logger55.warn("Worker output conflicts detected \u2014 human review recommended", {
33273
33228
  conflictCount: conflicts.length,
33274
33229
  files: conflicts.map((c) => c.filePath)
33275
33230
  });
33276
33231
  }
33277
33232
  const durationMs = getTimeProvider().now() - startMs;
33278
- logger54.info("Worker dispatch complete", {
33233
+ logger55.info("Worker dispatch complete", {
33279
33234
  totalWorkers: results.length,
33280
33235
  successCount,
33281
33236
  errorCount,
@@ -33334,7 +33289,7 @@ var ReflectionCache = class {
33334
33289
  const key = this.normalize(query);
33335
33290
  const entry = this.entries.get(key);
33336
33291
  if (entry === void 0) return void 0;
33337
- if (Date.now() - entry.timestamp > this.ttlMs) {
33292
+ if (getTimeProvider().now() - entry.timestamp > this.ttlMs) {
33338
33293
  this.entries.delete(key);
33339
33294
  return void 0;
33340
33295
  }
@@ -33349,7 +33304,7 @@ var ReflectionCache = class {
33349
33304
  const oldest = this.entries.keys().next();
33350
33305
  if (oldest.done !== true) this.entries.delete(oldest.value);
33351
33306
  }
33352
- this.entries.set(key, { criteria, timestamp: Date.now() });
33307
+ this.entries.set(key, { criteria, timestamp: getTimeProvider().now() });
33353
33308
  }
33354
33309
  get size() {
33355
33310
  return this.entries.size;
@@ -33665,11 +33620,12 @@ var TaskAccessPolicySchema = z64.object({
33665
33620
  });
33666
33621
 
33667
33622
  // src/security/access-constraint-deriver/config.ts
33623
+ var DEFAULT_ACCESS_POLICY_MODE = "audit";
33668
33624
  function resolveAccessPolicyMode(env = process.env) {
33669
33625
  const raw = env["NEXUS_ACCESS_POLICY_MODE"];
33670
- if (typeof raw !== "string" || raw.length === 0) return "off";
33626
+ if (typeof raw !== "string" || raw.length === 0) return DEFAULT_ACCESS_POLICY_MODE;
33671
33627
  const parsed = AccessPolicyModeSchema.safeParse(raw.toLowerCase());
33672
- return parsed.success ? parsed.data : "off";
33628
+ return parsed.success ? parsed.data : DEFAULT_ACCESS_POLICY_MODE;
33673
33629
  }
33674
33630
 
33675
33631
  // src/security/access-constraint-deriver/deriver.ts
@@ -34343,11 +34299,11 @@ function buildOutputFromOrchestratorResult(taskId, orchResult, durationMs, routi
34343
34299
  }
34344
34300
  };
34345
34301
  }
34346
- function createOrchestratorFromDeps(deps, logger54, orchestratorType) {
34302
+ function createOrchestratorFromDeps(deps, logger55, orchestratorType) {
34347
34303
  if (deps.orchestrator !== void 0) return deps.orchestrator;
34348
- const techLead = deps.techLead ?? createOrchestratorWithSica(logger54, deps.modelAdapter);
34304
+ const techLead = deps.techLead ?? createOrchestratorWithSica(logger55, deps.modelAdapter);
34349
34305
  const factory = new OrchestratorFactory({
34350
- logger: logger54,
34306
+ logger: logger55,
34351
34307
  techLead
34352
34308
  });
34353
34309
  return factory.create(orchestratorType ?? "tech_lead");
@@ -34381,7 +34337,7 @@ function recordToOutcomeStore(taskDescription, success, durationMs, opts) {
34381
34337
  const cli = opts?.actualCli ?? match?.primaryCli ?? DEFAULT_CLI;
34382
34338
  const category = match?.category ?? "exploration";
34383
34339
  getOutcomeStore().append({
34384
- id: `orch-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
34340
+ id: `orch-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
34385
34341
  cli,
34386
34342
  category,
34387
34343
  model: "orchestrator",
@@ -34461,16 +34417,16 @@ function recordOrchestrationError(errorMessage, taskDescription, durationMs) {
34461
34417
  }
34462
34418
  }
34463
34419
  function routeAndPrepare(input, deps, router) {
34464
- const logger54 = deps.logger ?? createLogger({ tool: "orchestrate" });
34465
- const workflowRouter = router ?? createWorkflowRouter({ logger: logger54 });
34420
+ const logger55 = deps.logger ?? createLogger({ tool: "orchestrate" });
34421
+ const workflowRouter = router ?? createWorkflowRouter({ logger: logger55 });
34466
34422
  const decision = workflowRouter.route({ description: input.task });
34467
34423
  const orchType = mapPatternToOrchestratorType(decision.pattern);
34468
- logger54.info("Workflow pattern selected", {
34424
+ logger55.info("Workflow pattern selected", {
34469
34425
  pattern: decision.pattern,
34470
34426
  orchestratorType: orchType
34471
34427
  });
34472
- const orchestrator = createOrchestratorFromDeps(deps, logger54, orchType);
34473
- return { workflowRouter, decision, orchestrator, logger: logger54 };
34428
+ const orchestrator = createOrchestratorFromDeps(deps, logger55, orchType);
34429
+ return { workflowRouter, decision, orchestrator, logger: logger55 };
34474
34430
  }
34475
34431
  function buildRoutingInfo(decision) {
34476
34432
  return {
@@ -34489,10 +34445,10 @@ function recordRouterOutcome(workflowRouter, decision, success, durationMs) {
34489
34445
  timestamp: getTimeProvider().now()
34490
34446
  });
34491
34447
  }
34492
- function handleOrchestrationException(error, taskId, task, logger54) {
34448
+ function handleOrchestrationException(error, taskId, task, logger55) {
34493
34449
  const message = error instanceof Error ? error.message : "Unknown error";
34494
34450
  const cause = error instanceof Error ? error : void 0;
34495
- logger54.error("Orchestration exception", cause, { taskId });
34451
+ logger55.error("Orchestration exception", cause, { taskId });
34496
34452
  recordOrchestrationError(message, task);
34497
34453
  return err(
34498
34454
  new OrchestrationError(
@@ -34501,13 +34457,13 @@ function handleOrchestrationException(error, taskId, task, logger54) {
34501
34457
  )
34502
34458
  );
34503
34459
  }
34504
- function startHeartbeatTracking(label, logger54) {
34460
+ function startHeartbeatTracking(label, logger55) {
34505
34461
  const monitor = getHeartbeatMonitor();
34506
34462
  const sessionId = monitor.startSession(label);
34507
34463
  const timer = setInterval(() => {
34508
34464
  monitor.heartbeat(sessionId);
34509
34465
  if (monitor.isStalled(sessionId)) {
34510
- logger54.warn("Orchestration session stalled", { label, sessionId });
34466
+ logger55.warn("Orchestration session stalled", { label, sessionId });
34511
34467
  }
34512
34468
  }, HEARTBEAT_TIMEOUTS.heartbeatIntervalMs);
34513
34469
  return {
@@ -34579,7 +34535,7 @@ function handleOrchestratorSuccess(ctx) {
34579
34535
  return ok(output2);
34580
34536
  }
34581
34537
  async function executeOrchestration(input, deps, router) {
34582
- const { workflowRouter, decision, orchestrator, logger: logger54 } = routeAndPrepare(input, deps, router);
34538
+ const { workflowRouter, decision, orchestrator, logger: logger55 } = routeAndPrepare(input, deps, router);
34583
34539
  const taskId = generateTaskId();
34584
34540
  const startTime = getTimeProvider().now();
34585
34541
  const fastResult = trySimpleTaskFastPath({
@@ -34588,15 +34544,15 @@ async function executeOrchestration(input, deps, router) {
34588
34544
  decision,
34589
34545
  workflowRouter,
34590
34546
  startTime,
34591
- logger: logger54
34547
+ logger: logger55
34592
34548
  });
34593
34549
  if (fastResult !== void 0) return fastResult;
34594
- logger54.info("Starting orchestration", { taskId, taskLength: input.task.length });
34595
- recordTaskStateInit(taskId, input.task, logger54);
34550
+ logger55.info("Starting orchestration", { taskId, taskLength: input.task.length });
34551
+ recordTaskStateInit(taskId, input.task, logger55);
34596
34552
  const task = await createTaskFromInput(input, taskId);
34597
34553
  const definition = { type: "task", task };
34598
- const hb = startHeartbeatTracking(`orchestrate-${taskId}`, logger54);
34599
- const policy = await deriveOrchestratePolicy(input.task, deps, logger54);
34554
+ const hb = startHeartbeatTracking(`orchestrate-${taskId}`, logger55);
34555
+ const policy = await deriveOrchestratePolicy(input.task, deps, logger55);
34600
34556
  try {
34601
34557
  return await runOrchestratorWithStateTracking({
34602
34558
  taskId,
@@ -34607,23 +34563,23 @@ async function executeOrchestration(input, deps, router) {
34607
34563
  decision,
34608
34564
  workflowRouter,
34609
34565
  startTime,
34610
- logger: logger54
34566
+ logger: logger55
34611
34567
  });
34612
34568
  } catch (error) {
34613
- recordTaskStateBlocker(taskId, error instanceof Error ? error.message : String(error), logger54);
34614
- recordTaskStateStage(taskId, "blocked", logger54);
34615
- return handleOrchestrationException(error, taskId, input.task, logger54);
34569
+ recordTaskStateBlocker(taskId, error instanceof Error ? error.message : String(error), logger55);
34570
+ recordTaskStateStage(taskId, "blocked", logger55);
34571
+ return handleOrchestrationException(error, taskId, input.task, logger55);
34616
34572
  } finally {
34617
34573
  hb.cleanup();
34618
34574
  }
34619
34575
  }
34620
34576
  async function runOrchestratorWithStateTracking(params) {
34621
- const { taskId, taskInput, definition, orchestrator, policy, logger: logger54 } = params;
34622
- recordTaskStateStage(taskId, "executing", logger54);
34577
+ const { taskId, taskInput, definition, orchestrator, policy, logger: logger55 } = params;
34578
+ recordTaskStateStage(taskId, "executing", logger55);
34623
34579
  const result = await withAccessPolicy(policy, () => orchestrator.execute(definition, {}));
34624
34580
  if (!result.ok) {
34625
- recordTaskStateBlocker(taskId, result.error.message, logger54);
34626
- recordTaskStateStage(taskId, "blocked", logger54);
34581
+ recordTaskStateBlocker(taskId, result.error.message, logger55);
34582
+ recordTaskStateStage(taskId, "blocked", logger55);
34627
34583
  return handleOrchestratorFailure({
34628
34584
  error: result.error,
34629
34585
  taskId,
@@ -34631,10 +34587,10 @@ async function runOrchestratorWithStateTracking(params) {
34631
34587
  decision: params.decision,
34632
34588
  workflowRouter: params.workflowRouter,
34633
34589
  startTime: params.startTime,
34634
- logger: logger54
34590
+ logger: logger55
34635
34591
  });
34636
34592
  }
34637
- recordTaskStateStage(taskId, "complete", logger54);
34593
+ recordTaskStateStage(taskId, "complete", logger55);
34638
34594
  return handleOrchestratorSuccess({
34639
34595
  orchResult: result.value,
34640
34596
  taskId,
@@ -34642,15 +34598,18 @@ async function runOrchestratorWithStateTracking(params) {
34642
34598
  decision: params.decision,
34643
34599
  workflowRouter: params.workflowRouter,
34644
34600
  startTime: params.startTime,
34645
- logger: logger54
34601
+ logger: logger55
34646
34602
  });
34647
34603
  }
34648
34604
  function isTaskStateEnabled() {
34649
- return process.env["NEXUS_TASK_STATE_ENABLED"] === "1";
34605
+ const raw = process.env["NEXUS_TASK_STATE_ENABLED"];
34606
+ if (raw === void 0 || raw === "") return true;
34607
+ const normalized = raw.toLowerCase();
34608
+ return normalized !== "0" && normalized !== "false";
34650
34609
  }
34651
- function recordTaskStateInit(taskId, taskText, logger54) {
34610
+ function recordTaskStateInit(taskId, taskText, logger55) {
34652
34611
  if (!isTaskStateEnabled()) return;
34653
- const now = (/* @__PURE__ */ new Date()).toISOString();
34612
+ const now = getTimeProvider().nowIso();
34654
34613
  const initial = {
34655
34614
  taskId,
34656
34615
  stage: "planning",
@@ -34661,36 +34620,36 @@ function recordTaskStateInit(taskId, taskText, logger54) {
34661
34620
  };
34662
34621
  const result = initTaskState(initial);
34663
34622
  if (!result.ok) {
34664
- logger54.warn("task-state: init failed, continuing", {
34623
+ logger55.warn("task-state: init failed, continuing", {
34665
34624
  taskId,
34666
34625
  error: result.error.message,
34667
34626
  taskLength: taskText.length
34668
34627
  });
34669
34628
  }
34670
34629
  }
34671
- function recordTaskStateStage(taskId, stage, logger54) {
34630
+ function recordTaskStateStage(taskId, stage, logger55) {
34672
34631
  if (!isTaskStateEnabled()) return;
34673
- const result = updateStage(taskId, stage, (/* @__PURE__ */ new Date()).toISOString());
34632
+ const result = updateStage(taskId, stage, getTimeProvider().nowIso());
34674
34633
  if (!result.ok) {
34675
- logger54.warn("task-state: stage update failed", {
34634
+ logger55.warn("task-state: stage update failed", {
34676
34635
  taskId,
34677
34636
  stage,
34678
34637
  error: result.error.message
34679
34638
  });
34680
34639
  }
34681
34640
  }
34682
- function recordTaskStateBlocker(taskId, blocker, logger54) {
34641
+ function recordTaskStateBlocker(taskId, blocker, logger55) {
34683
34642
  if (!isTaskStateEnabled()) return;
34684
- const ts = (/* @__PURE__ */ new Date()).toISOString();
34643
+ const ts = getTimeProvider().nowIso();
34685
34644
  const result = appendBlocker(taskId, { ts, blocker });
34686
34645
  if (!result.ok) {
34687
- logger54.warn("task-state: blocker record failed", {
34646
+ logger55.warn("task-state: blocker record failed", {
34688
34647
  taskId,
34689
34648
  error: result.error.message
34690
34649
  });
34691
34650
  }
34692
34651
  }
34693
- async function deriveOrchestratePolicy(taskText, deps, logger54) {
34652
+ async function deriveOrchestratePolicy(taskText, deps, logger55) {
34694
34653
  const mode = resolveAccessPolicyMode();
34695
34654
  try {
34696
34655
  const opts = {
@@ -34700,7 +34659,7 @@ async function deriveOrchestratePolicy(taskText, deps, logger54) {
34700
34659
  };
34701
34660
  const policy = await deriveAccessPolicy(taskText, opts);
34702
34661
  if (mode !== "off") {
34703
- logger54.info("access-policy: derived", {
34662
+ logger55.info("access-policy: derived", {
34704
34663
  mode,
34705
34664
  source: policy.source,
34706
34665
  allowedToolsWildcard: policy.allowedTools === "*"
@@ -34708,7 +34667,7 @@ async function deriveOrchestratePolicy(taskText, deps, logger54) {
34708
34667
  }
34709
34668
  return policy;
34710
34669
  } catch (error) {
34711
- logger54.warn("access-policy: derivation failed, falling back to off", {
34670
+ logger55.warn("access-policy: derivation failed, falling back to off", {
34712
34671
  error: getErrorMessage(error)
34713
34672
  });
34714
34673
  return {
@@ -34716,21 +34675,21 @@ async function deriveOrchestratePolicy(taskText, deps, logger54) {
34716
34675
  allowedPathPatterns: [],
34717
34676
  allowedOperations: "*",
34718
34677
  objectiveHash: "derivation-failed",
34719
- derivedAt: (/* @__PURE__ */ new Date()).toISOString(),
34678
+ derivedAt: getTimeProvider().nowIso(),
34720
34679
  source: "bypass",
34721
34680
  mode: "off"
34722
34681
  };
34723
34682
  }
34724
34683
  }
34725
- function instrumentV2Orchestrate(input, logger54) {
34684
+ function instrumentV2Orchestrate(input, logger55) {
34726
34685
  const tc = orchestrateInputToTaskContract(input);
34727
34686
  void executeOrchestratePipeline(tc).then((m) => {
34728
- logger54.info("V2 orchestrate pipeline", { ...m });
34687
+ logger55.info("V2 orchestrate pipeline", { ...m });
34729
34688
  }).catch((error) => {
34730
- logger54.debug("V2 orchestrate pipeline failed", { error: getErrorMessage(error) });
34689
+ logger55.debug("V2 orchestrate pipeline failed", { error: getErrorMessage(error) });
34731
34690
  });
34732
34691
  }
34733
- async function tryWorkerDispatch(agentPlan, task, deps, logger54, notifier) {
34692
+ async function tryWorkerDispatch(agentPlan, task, deps, logger55, notifier) {
34734
34693
  const adapter = deps.modelAdapter;
34735
34694
  if (agentPlan === void 0 || !isWorkerDispatchEnabled() || adapter === void 0) {
34736
34695
  return void 0;
@@ -34743,14 +34702,14 @@ async function tryWorkerDispatch(agentPlan, task, deps, logger54, notifier) {
34743
34702
  agentPlan,
34744
34703
  taskDescription: task,
34745
34704
  modelAdapter: adapter,
34746
- logger: logger54,
34705
+ logger: logger55,
34747
34706
  synthesize: true,
34748
34707
  refine: true,
34749
34708
  perWorkerRouting: true
34750
34709
  })
34751
34710
  );
34752
34711
  } catch (dispatchError) {
34753
- logger54.warn("Worker dispatch failed, continuing with standard orchestration", {
34712
+ logger55.warn("Worker dispatch failed, continuing with standard orchestration", {
34754
34713
  error: dispatchError instanceof Error ? dispatchError.message : String(dispatchError)
34755
34714
  });
34756
34715
  return void 0;
@@ -34823,7 +34782,7 @@ function createOrchestrateHandler(deps) {
34823
34782
  };
34824
34783
  }
34825
34784
  function registerOrchestrateTool(server, deps) {
34826
- const logger54 = deps.logger ?? createLogger({ tool: "orchestrate" });
34785
+ const logger55 = deps.logger ?? createLogger({ tool: "orchestrate" });
34827
34786
  const notifier = deps.notifier ?? createMcpNotifier(server);
34828
34787
  const depsWithNotifier = { ...deps, notifier };
34829
34788
  const description = "Orchestrate a task by analyzing it, breaking it into subtasks if needed, and coordinating expert agents";
@@ -34831,18 +34790,18 @@ function registerOrchestrateTool(server, deps) {
34831
34790
  toolName: "orchestrate",
34832
34791
  securityTier: "user-facing",
34833
34792
  rateLimiter: deps.rateLimiter,
34834
- logger: logger54
34793
+ logger: logger55
34835
34794
  });
34836
34795
  const wrappedHandler = wrapToolWithTimeout("orchestrate", secureHandler, {
34837
34796
  timeoutMs: MCP_TIMEOUTS.perTool["orchestrate"] ?? MCP_TIMEOUTS.defaultMs,
34838
- logger: logger54
34797
+ logger: logger55
34839
34798
  });
34840
34799
  server.registerTool(
34841
34800
  "orchestrate",
34842
34801
  { description, inputSchema: ORCHESTRATE_TOOL_SCHEMA },
34843
34802
  toSdkCallback(wrappedHandler)
34844
34803
  );
34845
- logger54.info("Registered orchestrate tool with secure handler and timeout protection");
34804
+ logger55.info("Registered orchestrate tool with secure handler and timeout protection");
34846
34805
  }
34847
34806
 
34848
34807
  // src/mcp/tools/delegate-to-model-types.ts
@@ -35185,21 +35144,21 @@ function mapCompositeDecisionToOutput(decision, estimatedTokens) {
35185
35144
  }))
35186
35145
  };
35187
35146
  }
35188
- async function routeViaCompositeRouter(task, router, feedbackIntegration, logger54) {
35147
+ async function routeViaCompositeRouter(task, router, feedbackIntegration, logger55) {
35189
35148
  const result = await router.route({ content: task });
35190
35149
  if (!result.ok) {
35191
- logger54.warn("CompositeRouter routing failed", { error: result.error.message });
35150
+ logger55.warn("CompositeRouter routing failed", { error: result.error.message });
35192
35151
  return null;
35193
35152
  }
35194
35153
  const decision = result.value;
35195
35154
  let routingId;
35196
35155
  if (feedbackIntegration) {
35197
35156
  routingId = feedbackIntegration.recordRoutingDecision(decision);
35198
- logger54.debug("Recorded routing decision", { routingId, cliName: decision.cliName });
35157
+ logger55.debug("Recorded routing decision", { routingId, cliName: decision.cliName });
35199
35158
  }
35200
35159
  return { decision, routingId, feedbackIntegration };
35201
35160
  }
35202
- function recordRoutingOutcome(result, durationMs, logger54) {
35161
+ function recordRoutingOutcome(result, durationMs, logger55) {
35203
35162
  if (result.routingId === void 0 || result.feedbackIntegration === void 0) return;
35204
35163
  try {
35205
35164
  const topsisScore = result.decision.topsisScore ?? 0;
@@ -35212,13 +35171,13 @@ function recordRoutingOutcome(result, durationMs, logger54) {
35212
35171
  tokenUsage: 0
35213
35172
  // delegate-to-model is a recommendation, not execution
35214
35173
  });
35215
- logger54.debug("Recorded routing outcome", {
35174
+ logger55.debug("Recorded routing outcome", {
35216
35175
  routingId: result.routingId,
35217
35176
  topsisScore,
35218
35177
  success: topsisScore >= TOPSIS_CONFIDENCE_THRESHOLD
35219
35178
  });
35220
35179
  } catch (error) {
35221
- logger54.warn("Failed to record routing outcome", { error: getErrorMessage(error) });
35180
+ logger55.warn("Failed to record routing outcome", { error: getErrorMessage(error) });
35222
35181
  }
35223
35182
  }
35224
35183
 
@@ -35239,9 +35198,9 @@ function classifyWithGovernance(toolName, params, overrides) {
35239
35198
  const promotionReason = promoted ? buildPromotionReason(domain, params) : null;
35240
35199
  return { tier, promoted, domain, votingThreshold, promotionReason };
35241
35200
  }
35242
- function auditGovernancePromotion(classification, toolName, logger54) {
35201
+ function auditGovernancePromotion(classification, toolName, logger55) {
35243
35202
  if (!classification.promoted) return;
35244
- const log3 = logger54 ?? createLogger({ component: "governance" });
35203
+ const log3 = logger55 ?? createLogger({ component: "governance" });
35245
35204
  log3.warn("Governance promotion", {
35246
35205
  tool: toolName,
35247
35206
  domain: classification.domain,
@@ -35323,7 +35282,7 @@ function recordToOutcomeStore2(task, model, startMs, governance) {
35323
35282
  qualitySignals.push(`governance:${governance.domain}`);
35324
35283
  }
35325
35284
  getOutcomeStore().append({
35326
- id: `del-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
35285
+ id: `del-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
35327
35286
  cli,
35328
35287
  category: match?.category ?? "exploration",
35329
35288
  model,
@@ -35340,9 +35299,9 @@ function recordToOutcomeStore2(task, model, startMs, governance) {
35340
35299
  });
35341
35300
  }
35342
35301
  }
35343
- function classifyDelegateGovernance(input, logger54) {
35302
+ function classifyDelegateGovernance(input, logger55) {
35344
35303
  const classification = classifyWithGovernance("delegate_to_model", { task: input.task });
35345
- auditGovernancePromotion(classification, "delegate_to_model", logger54);
35304
+ auditGovernancePromotion(classification, "delegate_to_model", logger55);
35346
35305
  return classification;
35347
35306
  }
35348
35307
  function enrichWithGovernance(output2, governance) {
@@ -35356,10 +35315,10 @@ function enrichWithGovernance(output2, governance) {
35356
35315
  }
35357
35316
  };
35358
35317
  }
35359
- function instrumentV2Pipeline(input, logger54) {
35318
+ function instrumentV2Pipeline(input, logger55) {
35360
35319
  const tc = delegateInputToTaskContract(input);
35361
35320
  void executeDelegatePipeline(tc).then((m) => {
35362
- logger54.info("V2 delegate pipeline", { ...m });
35321
+ logger55.info("V2 delegate pipeline", { ...m });
35363
35322
  });
35364
35323
  }
35365
35324
  function notifyAndRecord(opts) {
@@ -35433,18 +35392,18 @@ function createDelegateHandler(deps) {
35433
35392
  };
35434
35393
  }
35435
35394
  function registerDelegateToModelTool(server, deps) {
35436
- const logger54 = deps.logger ?? createLogger({ tool: "delegate_to_model" });
35395
+ const logger55 = deps.logger ?? createLogger({ tool: "delegate_to_model" });
35437
35396
  const notifier = deps.notifier ?? createMcpNotifier(server);
35438
35397
  const depsWithNotifier = { ...deps, notifier };
35439
35398
  const secureHandler = createSecureHandler(createDelegateHandler(depsWithNotifier), {
35440
35399
  toolName: "delegate_to_model",
35441
35400
  rateLimiter: deps.rateLimiter,
35442
- logger: logger54
35401
+ logger: logger55
35443
35402
  });
35444
35403
  const timeoutMs = getToolTimeout("delegate_to_model", deps.security);
35445
35404
  const wrappedHandler = wrapToolWithTimeout("delegate_to_model", secureHandler, {
35446
35405
  timeoutMs,
35447
- logger: logger54
35406
+ logger: logger55
35448
35407
  });
35449
35408
  server.registerTool(
35450
35409
  "delegate_to_model",
@@ -35455,7 +35414,7 @@ function registerDelegateToModelTool(server, deps) {
35455
35414
  },
35456
35415
  toSdkCallback(wrappedHandler)
35457
35416
  );
35458
- logger54.info("Registered delegate_to_model tool with secure handler and timeout protection");
35417
+ logger55.info("Registered delegate_to_model tool with secure handler and timeout protection");
35459
35418
  }
35460
35419
 
35461
35420
  // src/mcp/tools/run-graph-workflow-multicli-templates.ts
@@ -36394,7 +36353,7 @@ function listExpertsHandler(args, ctx) {
36394
36353
  return Promise.resolve(toolSuccessStructured(data));
36395
36354
  }
36396
36355
  function registerListExpertsTool(server, deps) {
36397
- const logger54 = deps.logger ?? createLogger({ tool: "list_experts" });
36356
+ const logger55 = deps.logger ?? createLogger({ tool: "list_experts" });
36398
36357
  const toolSchema = {
36399
36358
  format: z68.enum(["full", "names"]).optional().describe("Output format: full (with details) or names (just role names)")
36400
36359
  };
@@ -36402,10 +36361,10 @@ function registerListExpertsTool(server, deps) {
36402
36361
  const secureHandler = createSecureHandler(listExpertsHandler, {
36403
36362
  toolName: "list_experts",
36404
36363
  rateLimiter: deps.rateLimiter,
36405
- logger: logger54
36364
+ logger: logger55
36406
36365
  });
36407
36366
  const timeoutMs = getToolTimeout("list_experts", deps.security);
36408
- const wrappedHandler = wrapToolWithTimeout("list_experts", secureHandler, { timeoutMs, logger: logger54 });
36367
+ const wrappedHandler = wrapToolWithTimeout("list_experts", secureHandler, { timeoutMs, logger: logger55 });
36409
36368
  const outputSchema = {
36410
36369
  experts: z68.array(
36411
36370
  z68.object({
@@ -36422,7 +36381,7 @@ function registerListExpertsTool(server, deps) {
36422
36381
  { description, inputSchema: toolSchema, outputSchema },
36423
36382
  toSdkCallback(wrappedHandler)
36424
36383
  );
36425
- logger54.info("Registered list_experts tool with secure handler and timeout protection");
36384
+ logger55.info("Registered list_experts tool with secure handler and timeout protection");
36426
36385
  }
36427
36386
 
36428
36387
  // src/mcp/tools/list-workflows.ts
@@ -36478,7 +36437,7 @@ function createListWorkflowsHandler(workflowEngine) {
36478
36437
  };
36479
36438
  }
36480
36439
  function registerListWorkflowsTool(server, deps) {
36481
- const logger54 = deps.logger ?? createLogger({ tool: "list_workflows" });
36440
+ const logger55 = deps.logger ?? createLogger({ tool: "list_workflows" });
36482
36441
  const toolSchema = {
36483
36442
  category: z69.string().optional().describe("Filter by category (e.g., development, security)"),
36484
36443
  format: z69.enum(["full", "names"]).optional().describe("Output format: full (with details) or names (just template names)")
@@ -36487,13 +36446,13 @@ function registerListWorkflowsTool(server, deps) {
36487
36446
  const secureHandler = createSecureHandler(createListWorkflowsHandler(deps.workflowEngine), {
36488
36447
  toolName: "list_workflows",
36489
36448
  rateLimiter: deps.rateLimiter,
36490
- logger: logger54
36449
+ logger: logger55
36491
36450
  });
36492
36451
  const timeoutMs = deps.security?.timeout?.defaultTimeoutMs;
36493
36452
  const wrappedHandler = wrapToolWithTimeout(
36494
36453
  "list_workflows",
36495
36454
  secureHandler,
36496
- timeoutMs !== void 0 ? { timeoutMs, logger: logger54 } : { logger: logger54 }
36455
+ timeoutMs !== void 0 ? { timeoutMs, logger: logger55 } : { logger: logger55 }
36497
36456
  );
36498
36457
  const outputSchema = {
36499
36458
  workflows: z69.array(
@@ -36512,7 +36471,7 @@ function registerListWorkflowsTool(server, deps) {
36512
36471
  { description, inputSchema: toolSchema, outputSchema },
36513
36472
  toSdkCallback(wrappedHandler)
36514
36473
  );
36515
- logger54.info("Registered list_workflows tool with secure handler and timeout protection");
36474
+ logger55.info("Registered list_workflows tool with secure handler and timeout protection");
36516
36475
  }
36517
36476
 
36518
36477
  // src/mcp/tools/execute-expert.ts
@@ -36540,7 +36499,7 @@ function recordExpertOutcome2(opts) {
36540
36499
  try {
36541
36500
  const match = detectTaskCategory(opts.task);
36542
36501
  getOutcomeStore().append({
36543
- id: `exp-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
36502
+ id: `exp-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
36544
36503
  cli: match?.primaryCli ?? DEFAULT_CLI,
36545
36504
  category: resolveExpertCategory(opts),
36546
36505
  model: opts.model ?? "expert",
@@ -36596,12 +36555,12 @@ function recordExpertError2(expertId, role, errorMessage) {
36596
36555
  });
36597
36556
  }
36598
36557
  }
36599
- function autoCatalogScan(output2, expertId, logger54) {
36558
+ function autoCatalogScan(output2, expertId, logger55) {
36600
36559
  try {
36601
36560
  const catalog = getAutoCatalog();
36602
36561
  catalog.scanAndRecord(output2, "execute_expert");
36603
36562
  } catch (error) {
36604
- logger54?.debug("Best-effort auto-catalog scan failed", {
36563
+ logger55?.debug("Best-effort auto-catalog scan failed", {
36605
36564
  error: getErrorMessage(error),
36606
36565
  expertId
36607
36566
  });
@@ -36659,11 +36618,11 @@ function computeExpertContextUtilization(observation, threshold = DEFAULT_CONTEX
36659
36618
  threshold
36660
36619
  };
36661
36620
  }
36662
- function observeExpertContext(observation, logger54, threshold = resolveContextWarnThreshold()) {
36621
+ function observeExpertContext(observation, logger55, threshold = resolveContextWarnThreshold()) {
36663
36622
  try {
36664
36623
  const util = computeExpertContextUtilization(observation, threshold);
36665
36624
  if (util.warned) {
36666
- logger54?.warn("context_warning", {
36625
+ logger55?.warn("context_warning", {
36667
36626
  event: "context_warning",
36668
36627
  expertId: observation.expertId,
36669
36628
  role: observation.role,
@@ -36676,7 +36635,7 @@ function observeExpertContext(observation, logger54, threshold = resolveContextW
36676
36635
  taskLength: observation.taskDescription.length
36677
36636
  });
36678
36637
  } else {
36679
- logger54?.debug("context_utilization", {
36638
+ logger55?.debug("context_utilization", {
36680
36639
  event: "context_utilization",
36681
36640
  expertId: observation.expertId,
36682
36641
  role: observation.role,
@@ -36764,7 +36723,7 @@ function buildSuccessResponse(params) {
36764
36723
  }
36765
36724
  return response;
36766
36725
  }
36767
- function observeExpertContextIfOk(result, expert, task, durationMs, logger54) {
36726
+ function observeExpertContextIfOk(result, expert, task, durationMs, logger55) {
36768
36727
  if (!result.ok) return;
36769
36728
  const expertModelId = expert.expertConfig.modelPreference?.modelId;
36770
36729
  const observation = {
@@ -36775,9 +36734,9 @@ function observeExpertContextIfOk(result, expert, task, durationMs, logger54) {
36775
36734
  taskDescription: task.description,
36776
36735
  durationMs
36777
36736
  };
36778
- observeExpertContext(observation, logger54);
36737
+ observeExpertContext(observation, logger55);
36779
36738
  }
36780
- async function deriveExpertAccessPolicy(task, logger54) {
36739
+ async function deriveExpertAccessPolicy(task, logger55) {
36781
36740
  const mode = resolveAccessPolicyMode();
36782
36741
  try {
36783
36742
  const policy = await deriveAccessPolicy(task.description, {
@@ -36785,14 +36744,14 @@ async function deriveExpertAccessPolicy(task, logger54) {
36785
36744
  trustTier: "1"
36786
36745
  });
36787
36746
  if (mode !== "off") {
36788
- logger54?.info("access-policy: derived (expert)", {
36747
+ logger55?.info("access-policy: derived (expert)", {
36789
36748
  mode,
36790
36749
  source: policy.source
36791
36750
  });
36792
36751
  }
36793
36752
  return policy;
36794
36753
  } catch (error) {
36795
- logger54?.warn("access-policy: derivation failed, falling back to off (expert)", {
36754
+ logger55?.warn("access-policy: derivation failed, falling back to off (expert)", {
36796
36755
  error: getErrorMessage(error)
36797
36756
  });
36798
36757
  return {
@@ -36800,7 +36759,7 @@ async function deriveExpertAccessPolicy(task, logger54) {
36800
36759
  allowedPathPatterns: [],
36801
36760
  allowedOperations: "*",
36802
36761
  objectiveHash: "derivation-failed",
36803
- derivedAt: (/* @__PURE__ */ new Date()).toISOString(),
36762
+ derivedAt: getTimeProvider().nowIso(),
36804
36763
  source: "bypass",
36805
36764
  mode: "off"
36806
36765
  };
@@ -36838,11 +36797,11 @@ function isExpertDegraded(role) {
36838
36797
  }
36839
36798
  return consecutive >= DEGRADATION_CONSECUTIVE_THRESHOLD;
36840
36799
  }
36841
- async function tryExpertFallback(expert, task, logger54) {
36800
+ async function tryExpertFallback(expert, task, logger55) {
36842
36801
  const roleKey = `${expert.role}_expert`;
36843
36802
  const category = ROLE_TO_TASK_CATEGORY[roleKey];
36844
36803
  if (category === void 0) return void 0;
36845
- const effectiveLogger = logger54 ?? createLogger({ tool: "execute_expert" });
36804
+ const effectiveLogger = logger55 ?? createLogger({ tool: "execute_expert" });
36846
36805
  const registry = getGlobalRegistry({ logger: effectiveLogger });
36847
36806
  const routing = registry.getRouting(category);
36848
36807
  const primaryCli = routing?.primaryCli ?? "unknown";
@@ -36851,7 +36810,7 @@ async function tryExpertFallback(expert, task, logger54) {
36851
36810
  const fallbackCli = chain[0];
36852
36811
  if (fallbackCli === void 0) return void 0;
36853
36812
  const fallbackAdapter = registry.getAdapterForCli(fallbackCli);
36854
- logger54?.info("Retrying expert with fallback CLI", { role: expert.role, fallbackCli });
36813
+ logger55?.info("Retrying expert with fallback CLI", { role: expert.role, fallbackCli });
36855
36814
  const fallbackResult = createExpert(expert.expertConfig, { adapter: fallbackAdapter });
36856
36815
  if (!fallbackResult.ok) return void 0;
36857
36816
  const result = await fallbackResult.value.execute(task);
@@ -36869,7 +36828,7 @@ async function tryExpertFallback(expert, task, logger54) {
36869
36828
  };
36870
36829
  }
36871
36830
  async function classifyExpertResult(opts) {
36872
- const { result, expert, task, args, durationMs, logger: logger54 } = opts;
36831
+ const { result, expert, task, args, durationMs, logger: logger55 } = opts;
36873
36832
  const modelId = expert.expertConfig.modelPreference?.modelId;
36874
36833
  const info = {
36875
36834
  expertId: args.expertId,
@@ -36878,19 +36837,19 @@ async function classifyExpertResult(opts) {
36878
36837
  };
36879
36838
  if (!result.ok) {
36880
36839
  if (isRateLimitFailure(result.error.message)) {
36881
- const fallback = await tryExpertFallback(expert, task, logger54);
36840
+ const fallback = await tryExpertFallback(expert, task, logger55);
36882
36841
  if (fallback !== void 0) return fallback;
36883
36842
  }
36884
- logger54?.warn("Expert execution failed", {
36843
+ logger55?.warn("Expert execution failed", {
36885
36844
  expertId: args.expertId,
36886
36845
  error: result.error.message
36887
36846
  });
36888
36847
  return handleExpertFailure(args.task, info, result.error.message, durationMs);
36889
36848
  }
36890
- logger54?.info("Expert execution completed", { expertId: args.expertId, durationMs });
36849
+ logger55?.info("Expert execution completed", { expertId: args.expertId, durationMs });
36891
36850
  handleExpertSuccess(args.task, info, durationMs);
36892
36851
  if (typeof result.value.output === "string") {
36893
- autoCatalogScan(result.value.output, args.expertId, logger54);
36852
+ autoCatalogScan(result.value.output, args.expertId, logger55);
36894
36853
  }
36895
36854
  return {
36896
36855
  ok: true,
@@ -36978,7 +36937,7 @@ var EXECUTE_EXPERT_TOOL_SCHEMA = {
36978
36937
  context: z70.record(z70.string(), z70.unknown()).optional().describe("Additional context metadata for the task"),
36979
36938
  timeoutMs: z70.number().int().min(EXPERT_TIMEOUT_FLOOR_MS).max(9e5).optional().describe("Optional timeout in ms (120s-900s). Overrides auto-detected timeout.")
36980
36939
  };
36981
- function createTaskHandler(deps, logger54) {
36940
+ function createTaskHandler(deps, logger55) {
36982
36941
  const notifier = deps.notifier ?? NOOP_NOTIFIER;
36983
36942
  return {
36984
36943
  createTask: (args, extra) => {
@@ -36990,7 +36949,7 @@ function createTaskHandler(deps, logger54) {
36990
36949
  const { taskStore } = extra;
36991
36950
  const ttl = clampTaskTtl(DEFAULT_TASK_TTL_MS);
36992
36951
  const taskPromise = taskStore.createTask({ ttl, pollInterval: 5e3 }).then((task) => {
36993
- logger54.info("Task created for execute_expert", {
36952
+ logger55.info("Task created for execute_expert", {
36994
36953
  taskId: task.taskId,
36995
36954
  expertId: validatedArgs.expertId
36996
36955
  });
@@ -37015,7 +36974,7 @@ function createTaskHandler(deps, logger54) {
37015
36974
  }
37016
36975
  async function runBackgroundExpertTask(opts) {
37017
36976
  const { deps, args, taskId, taskStore, notifier } = opts;
37018
- const logger54 = deps.logger ?? createLogger({ tool: "execute_expert" });
36977
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_expert" });
37019
36978
  try {
37020
36979
  notifier.info("execute_expert", {
37021
36980
  event: "expert_start",
@@ -37045,13 +37004,13 @@ async function runBackgroundExpertTask(opts) {
37045
37004
  });
37046
37005
  } catch (error) {
37047
37006
  const message = getErrorMessage(error);
37048
- logger54.warn("Background expert task failed", { taskId, error: message });
37007
+ logger55.warn("Background expert task failed", { taskId, error: message });
37049
37008
  try {
37050
37009
  await taskStore.storeTaskResult(taskId, "failed", {
37051
37010
  ...toolError(`Expert execution error: ${message}`)
37052
37011
  });
37053
37012
  } catch (storeError) {
37054
- logger54.warn("Failed to store task failure result", {
37013
+ logger55.warn("Failed to store task failure result", {
37055
37014
  taskId,
37056
37015
  error: getErrorMessage(storeError)
37057
37016
  });
@@ -37059,7 +37018,7 @@ async function runBackgroundExpertTask(opts) {
37059
37018
  }
37060
37019
  }
37061
37020
  function registerExecuteExpertTool(server, deps) {
37062
- const logger54 = deps.logger ?? createLogger({ tool: "execute_expert" });
37021
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_expert" });
37063
37022
  const notifier = deps.notifier ?? createMcpNotifier(server);
37064
37023
  const depsWithNotifier = { ...deps, notifier };
37065
37024
  const description = "Execute a task using a previously created expert agent. Returns the expert analysis including output, confidence, and token usage.";
@@ -37070,9 +37029,9 @@ function registerExecuteExpertTool(server, deps) {
37070
37029
  inputSchema: EXECUTE_EXPERT_TOOL_SCHEMA,
37071
37030
  execution: { taskSupport: "optional" }
37072
37031
  },
37073
- createTaskHandler(depsWithNotifier, logger54)
37032
+ createTaskHandler(depsWithNotifier, logger55)
37074
37033
  );
37075
- logger54.info("Registered execute_expert tool with MCP Tasks support (taskSupport: optional)");
37034
+ logger55.info("Registered execute_expert tool with MCP Tasks support (taskSupport: optional)");
37076
37035
  }
37077
37036
 
37078
37037
  // src/mcp/tools/research-query.ts
@@ -38416,15 +38375,15 @@ function createResearchQueryHandler(deps) {
38416
38375
  return toolError(`Validation error: ${formatZodError(validationResult.error)}`);
38417
38376
  }
38418
38377
  ctx.logger.debug("Executing research query", { action: validationResult.data.action });
38419
- const logger54 = deps.logger ?? createLogger({ tool: "research_query" });
38420
- return withToolError("Research query failed", logger54, async () => {
38378
+ const logger55 = deps.logger ?? createLogger({ tool: "research_query" });
38379
+ return withToolError("Research query failed", logger55, async () => {
38421
38380
  const result = await executeQuery(validationResult.data);
38422
38381
  return toolSuccess(JSON.stringify(result, null, 2));
38423
38382
  });
38424
38383
  };
38425
38384
  }
38426
38385
  function registerResearchQueryTool(server, deps) {
38427
- const logger54 = deps.logger ?? createLogger({ tool: "research_query" });
38386
+ const logger55 = deps.logger ?? createLogger({ tool: "research_query" });
38428
38387
  const toolSchema = {
38429
38388
  action: z73.enum(["status", "overlap", "stats", "search"]).describe("Query action: status, overlap, stats, or search"),
38430
38389
  techniqueId: z73.string().optional().describe("Technique ID for status/overlap queries"),
@@ -38436,19 +38395,19 @@ function registerResearchQueryTool(server, deps) {
38436
38395
  const secureHandler = createSecureHandler(createResearchQueryHandler(deps), {
38437
38396
  toolName: "research_query",
38438
38397
  rateLimiter: deps.rateLimiter,
38439
- logger: logger54
38398
+ logger: logger55
38440
38399
  });
38441
38400
  const timeoutMs = getToolTimeout("research_query", deps.security);
38442
38401
  const wrappedHandler = wrapToolWithTimeout("research_query", secureHandler, {
38443
38402
  timeoutMs,
38444
- logger: logger54
38403
+ logger: logger55
38445
38404
  });
38446
38405
  server.registerTool(
38447
38406
  "research_query",
38448
38407
  { description, inputSchema: toolSchema },
38449
38408
  toSdkCallback(wrappedHandler)
38450
38409
  );
38451
- logger54.info("Registered research_query tool with secure handler and timeout protection");
38410
+ logger55.info("Registered research_query tool with secure handler and timeout protection");
38452
38411
  }
38453
38412
 
38454
38413
  // src/mcp/tools/research-add.ts
@@ -38459,7 +38418,7 @@ var ResearchAddInputSchema = z74.object({
38459
38418
  priority: z74.enum(["P1", "P2", "P3", "P4"]).optional().describe("Priority level for the paper"),
38460
38419
  dryRun: z74.boolean().optional().default(false).describe("Preview what would be added without persisting")
38461
38420
  });
38462
- async function executeResearchAdd(input, logger54) {
38421
+ async function executeResearchAdd(input, logger55) {
38463
38422
  const exists = await paperExists(input.arxivId);
38464
38423
  if (exists) {
38465
38424
  return {
@@ -38478,7 +38437,7 @@ async function executeResearchAdd(input, logger54) {
38478
38437
  });
38479
38438
  if (result.success && !input.dryRun) {
38480
38439
  try {
38481
- const memory = getToolMemory(logger54);
38440
+ const memory = getToolMemory(logger55);
38482
38441
  memory.recordLearning({
38483
38442
  pattern: `Added paper: ${result.title} (${result.paperId})`,
38484
38443
  context: `topic=${input.topic ?? "general"}, priority=${input.priority ?? "unset"}`,
@@ -38486,7 +38445,7 @@ async function executeResearchAdd(input, logger54) {
38486
38445
  source: "research_add"
38487
38446
  });
38488
38447
  } catch {
38489
- logger54.debug("Failed to record learning in session memory");
38448
+ logger55.debug("Failed to record learning in session memory");
38490
38449
  }
38491
38450
  }
38492
38451
  const qualityNote = result.success && !input.dryRun ? " [evidence_tier=low \u2014 arXiv preprint, no citation data yet. Run backfill-research-quality.ts to enrich.]" : "";
@@ -38505,9 +38464,9 @@ function createResearchAddHandler(deps) {
38505
38464
  return toolError(`Validation error: ${formatZodError(validationResult.error)}`);
38506
38465
  }
38507
38466
  ctx.logger.debug("Adding research paper", { arxivId: validationResult.data.arxivId });
38508
- const logger54 = deps.logger ?? createLogger({ tool: "research_add" });
38509
- return withToolError("Failed to add paper", logger54, async () => {
38510
- const result = await executeResearchAdd(validationResult.data, logger54);
38467
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add" });
38468
+ return withToolError("Failed to add paper", logger55, async () => {
38469
+ const result = await executeResearchAdd(validationResult.data, logger55);
38511
38470
  if (!result.success) {
38512
38471
  return toolError(result.message);
38513
38472
  }
@@ -38516,7 +38475,7 @@ function createResearchAddHandler(deps) {
38516
38475
  };
38517
38476
  }
38518
38477
  function registerResearchAddTool(server, deps) {
38519
- const logger54 = deps.logger ?? createLogger({ tool: "research_add" });
38478
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add" });
38520
38479
  const toolSchema = {
38521
38480
  arxivId: z74.string().regex(/^\d{4}\.\d{4,5}$/).describe('arXiv paper ID (e.g., "2401.12345")'),
38522
38481
  topic: z74.string().optional().describe("Research topic to categorize the paper under"),
@@ -38527,19 +38486,19 @@ function registerResearchAddTool(server, deps) {
38527
38486
  const secureHandler = createSecureHandler(createResearchAddHandler(deps), {
38528
38487
  toolName: "research_add",
38529
38488
  rateLimiter: deps.rateLimiter,
38530
- logger: logger54
38489
+ logger: logger55
38531
38490
  });
38532
38491
  const timeoutMs = getToolTimeout("research_add", deps.security);
38533
38492
  const wrappedHandler = wrapToolWithTimeout("research_add", secureHandler, {
38534
38493
  timeoutMs,
38535
- logger: logger54
38494
+ logger: logger55
38536
38495
  });
38537
38496
  server.registerTool(
38538
38497
  "research_add",
38539
38498
  { description, inputSchema: toolSchema },
38540
38499
  toSdkCallback(wrappedHandler)
38541
38500
  );
38542
- logger54.info("Registered research_add tool with secure handler and timeout protection");
38501
+ logger55.info("Registered research_add tool with secure handler and timeout protection");
38543
38502
  }
38544
38503
 
38545
38504
  // src/mcp/tools/research-add-source.ts
@@ -38616,9 +38575,9 @@ function buildResponse2(params) {
38616
38575
  dryRun: params.dryRun
38617
38576
  };
38618
38577
  }
38619
- function recordAddSourceLearning(logger54, name, sourceId, type, qualityScore) {
38578
+ function recordAddSourceLearning(logger55, name, sourceId, type, qualityScore) {
38620
38579
  try {
38621
- const memory = getToolMemory(logger54);
38580
+ const memory = getToolMemory(logger55);
38622
38581
  memory.recordLearning({
38623
38582
  pattern: `Added source: ${name} (${sourceId})`,
38624
38583
  context: `type=${type}, quality=${String(qualityScore)}`,
@@ -38626,7 +38585,7 @@ function recordAddSourceLearning(logger54, name, sourceId, type, qualityScore) {
38626
38585
  source: "research_add_source"
38627
38586
  });
38628
38587
  } catch {
38629
- logger54.debug("Failed to record learning in session memory");
38588
+ logger55.debug("Failed to record learning in session memory");
38630
38589
  }
38631
38590
  }
38632
38591
  function prepareSource(input) {
@@ -38634,7 +38593,7 @@ function prepareSource(input) {
38634
38593
  const score = computeSourceQualityScore(entry);
38635
38594
  return { entry, score };
38636
38595
  }
38637
- async function executeResearchAddSource(input, logger54) {
38596
+ async function executeResearchAddSource(input, logger55) {
38638
38597
  const sourceId = generateSourceId(input.url);
38639
38598
  const exists = await sourceExistsInRegistry(input.url);
38640
38599
  if (exists) {
@@ -38669,8 +38628,8 @@ async function executeResearchAddSource(input, logger54) {
38669
38628
  dryRun: false
38670
38629
  });
38671
38630
  }
38672
- recordAddSourceLearning(logger54, input.name, sourceId, input.type, score);
38673
- logger54.info("Added research source", { sourceId, name: input.name, qualityScore: score });
38631
+ recordAddSourceLearning(logger55, input.name, sourceId, input.type, score);
38632
+ logger55.info("Added research source", { sourceId, name: input.name, qualityScore: score });
38674
38633
  return buildResponse2({
38675
38634
  success: true,
38676
38635
  sourceId,
@@ -38687,9 +38646,9 @@ function createResearchAddSourceHandler(deps) {
38687
38646
  return toolError(`Validation error: ${formatZodError(validationResult.error)}`);
38688
38647
  }
38689
38648
  ctx.logger.debug("Adding research source", { url: validationResult.data.url });
38690
- const logger54 = deps.logger ?? createLogger({ tool: "research_add_source" });
38691
- return withToolError("Failed to add source", logger54, async () => {
38692
- const result = await executeResearchAddSource(validationResult.data, logger54);
38649
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add_source" });
38650
+ return withToolError("Failed to add source", logger55, async () => {
38651
+ const result = await executeResearchAddSource(validationResult.data, logger55);
38693
38652
  if (!result.success) {
38694
38653
  return toolError(result.message);
38695
38654
  }
@@ -38698,7 +38657,7 @@ function createResearchAddSourceHandler(deps) {
38698
38657
  };
38699
38658
  }
38700
38659
  function registerResearchAddSourceTool(server, deps) {
38701
- const logger54 = deps.logger ?? createLogger({ tool: "research_add_source" });
38660
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add_source" });
38702
38661
  const toolSchema = {
38703
38662
  url: z75.string().min(1).describe("Source URL"),
38704
38663
  name: z75.string().min(1).describe("Display name"),
@@ -38723,12 +38682,12 @@ function registerResearchAddSourceTool(server, deps) {
38723
38682
  toolName: "research_add_source",
38724
38683
  securityTier: "external",
38725
38684
  rateLimiter: deps.rateLimiter,
38726
- logger: logger54
38685
+ logger: logger55
38727
38686
  });
38728
38687
  const timeoutMs = getToolTimeout("research_add_source", deps.security);
38729
38688
  const wrappedHandler = wrapToolWithTimeout("research_add_source", secureHandler, {
38730
38689
  timeoutMs,
38731
- logger: logger54
38690
+ logger: logger55
38732
38691
  });
38733
38692
  server.registerTool(
38734
38693
  "research_add_source",
@@ -38781,7 +38740,7 @@ function toDiscoveredItems(sources) {
38781
38740
  discoveredAt: s.discoveredAt
38782
38741
  }));
38783
38742
  }
38784
- async function discoverFromExtendedSource(source, topic, maxResults, logger54, sinceDate) {
38743
+ async function discoverFromExtendedSource(source, topic, maxResults, logger55, sinceDate) {
38785
38744
  let result;
38786
38745
  switch (source) {
38787
38746
  case "google_ai":
@@ -38809,7 +38768,7 @@ async function discoverFromExtendedSource(source, topic, maxResults, logger54, s
38809
38768
  return { items: [], failed: true };
38810
38769
  }
38811
38770
  if (!result.ok) {
38812
- logger54.warn(`${source} discovery failed`, {
38771
+ logger55.warn(`${source} discovery failed`, {
38813
38772
  source,
38814
38773
  errorCode: result.error.code,
38815
38774
  error: result.error.message
@@ -38849,24 +38808,24 @@ function markExistingItems(items, existingIds) {
38849
38808
  }
38850
38809
  var ARXIV_ORG_SOURCES = /* @__PURE__ */ new Set(["google_ai", "meta_fair", "microsoft", "deepmind"]);
38851
38810
  var INDEPENDENT_SOURCES = ["semantic_scholar", "papers_with_code", "openalex"];
38852
- async function queryExtendedSource(src, input, logger54, acc) {
38811
+ async function queryExtendedSource(src, input, logger55, acc) {
38853
38812
  acc.sources.push(src);
38854
38813
  try {
38855
38814
  const result = await discoverFromExtendedSource(
38856
38815
  src,
38857
38816
  input.topic,
38858
38817
  input.maxResults,
38859
- logger54,
38818
+ logger55,
38860
38819
  input.sinceDate
38861
38820
  );
38862
38821
  if (result.failed) acc.failedSources.push(src);
38863
38822
  acc.items = acc.items.concat(result.items);
38864
38823
  } catch (error) {
38865
38824
  acc.failedSources.push(src);
38866
- logger54.warn("Source discovery failed", { source: src, error: getErrorMessage(error) });
38825
+ logger55.warn("Source discovery failed", { source: src, error: getErrorMessage(error) });
38867
38826
  }
38868
38827
  }
38869
- async function queryAllSources(input, logger54) {
38828
+ async function queryAllSources(input, logger55) {
38870
38829
  const acc = { sources: [], failedSources: [], items: [] };
38871
38830
  const isAll = input.source === "all";
38872
38831
  const shouldQuery = (src) => isAll || input.source === src;
@@ -38876,11 +38835,11 @@ async function queryAllSources(input, logger54) {
38876
38835
  if (r.ok) acc.items = acc.items.concat(toDiscoveredItems(r.value));
38877
38836
  else {
38878
38837
  acc.failedSources.push("arxiv");
38879
- logger54.warn("arxiv discovery failed", { error: r.error.message });
38838
+ logger55.warn("arxiv discovery failed", { error: r.error.message });
38880
38839
  }
38881
38840
  }
38882
38841
  for (const src of ARXIV_ORG_SOURCES) {
38883
- if (!isAll && input.source === src) await queryExtendedSource(src, input, logger54, acc);
38842
+ if (!isAll && input.source === src) await queryExtendedSource(src, input, logger55, acc);
38884
38843
  }
38885
38844
  if (shouldQuery("github")) {
38886
38845
  acc.sources.push("github");
@@ -38888,15 +38847,15 @@ async function queryAllSources(input, logger54) {
38888
38847
  if (r.ok) acc.items = acc.items.concat(toDiscoveredItems(r.value));
38889
38848
  else {
38890
38849
  acc.failedSources.push("github");
38891
- logger54.warn("github discovery failed", { error: r.error.message });
38850
+ logger55.warn("github discovery failed", { error: r.error.message });
38892
38851
  }
38893
38852
  }
38894
38853
  for (const src of INDEPENDENT_SOURCES) {
38895
- if (shouldQuery(src)) await queryExtendedSource(src, input, logger54, acc);
38854
+ if (shouldQuery(src)) await queryExtendedSource(src, input, logger55, acc);
38896
38855
  }
38897
38856
  return acc;
38898
38857
  }
38899
- async function executeDiscovery(rawInput, logger54) {
38858
+ async function executeDiscovery(rawInput, logger55) {
38900
38859
  const input = {
38901
38860
  ...rawInput,
38902
38861
  topic: normalizeTopicToCanonical(rawInput.topic)
@@ -38906,7 +38865,7 @@ async function executeDiscovery(rawInput, logger54) {
38906
38865
  sources: sourcesToQuery,
38907
38866
  failedSources,
38908
38867
  items: allItems
38909
- } = await queryAllSources(input, logger54);
38868
+ } = await queryAllSources(input, logger55);
38910
38869
  markExistingItems(allItems, existingIds);
38911
38870
  const totalFound = allItems.length;
38912
38871
  const inRegistry = allItems.filter((i) => i.alreadyInRegistry).length;
@@ -38918,7 +38877,7 @@ async function executeDiscovery(rawInput, logger54) {
38918
38877
  ).slice(0, input.maxResults);
38919
38878
  const filteredOut = totalFound - inRegistry - relevantItems.length;
38920
38879
  if (filteredOut > 0) {
38921
- logger54.debug("Filtered out irrelevant results", {
38880
+ logger55.debug("Filtered out irrelevant results", {
38922
38881
  threshold,
38923
38882
  filteredOut,
38924
38883
  remaining: relevantItems.length
@@ -38966,7 +38925,7 @@ function recordDiscoveryOutcome(success, durationMs, errorMsg) {
38966
38925
  }
38967
38926
  const store = getOutcomeStore();
38968
38927
  store.append({
38969
- id: `research-discover-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
38928
+ id: `research-discover-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
38970
38929
  cli: DEFAULT_CLI,
38971
38930
  category: "research",
38972
38931
  model: "research-discover",
@@ -38998,10 +38957,10 @@ function createResearchDiscoverHandler(deps) {
38998
38957
  topic: validationResult.data.topic,
38999
38958
  source: validationResult.data.source
39000
38959
  });
39001
- const logger54 = deps.logger ?? createLogger({ tool: "research_discover" });
38960
+ const logger55 = deps.logger ?? createLogger({ tool: "research_discover" });
39002
38961
  const startMs = Date.now();
39003
- const response = await withToolError("Discovery failed", logger54, async () => {
39004
- const result = await executeDiscovery(validationResult.data, logger54);
38962
+ const response = await withToolError("Discovery failed", logger55, async () => {
38963
+ const result = await executeDiscovery(validationResult.data, logger55);
39005
38964
  recordDiscoverySuccess(result.topic, result.newItems, result.sourcesQueried);
39006
38965
  return toolSuccess(JSON.stringify(result, null, 2));
39007
38966
  });
@@ -39016,7 +38975,7 @@ function createResearchDiscoverHandler(deps) {
39016
38975
  };
39017
38976
  }
39018
38977
  function registerResearchDiscoverTool(server, deps) {
39019
- const logger54 = deps.logger ?? createLogger({ tool: "research_discover" });
38978
+ const logger55 = deps.logger ?? createLogger({ tool: "research_discover" });
39020
38979
  const toolSchema = {
39021
38980
  topic: z76.string().min(1).max(200).describe("Research topic to search for"),
39022
38981
  source: z76.enum([
@@ -39039,19 +38998,19 @@ function registerResearchDiscoverTool(server, deps) {
39039
38998
  const secureHandler = createSecureHandler(createResearchDiscoverHandler(deps), {
39040
38999
  toolName: "research_discover",
39041
39000
  rateLimiter: deps.rateLimiter,
39042
- logger: logger54
39001
+ logger: logger55
39043
39002
  });
39044
39003
  const timeoutMs = getToolTimeout("research_discover", deps.security);
39045
39004
  const wrappedHandler = wrapToolWithTimeout("research_discover", secureHandler, {
39046
39005
  timeoutMs,
39047
- logger: logger54
39006
+ logger: logger55
39048
39007
  });
39049
39008
  server.registerTool(
39050
39009
  "research_discover",
39051
39010
  { description, inputSchema: toolSchema },
39052
39011
  toSdkCallback(wrappedHandler)
39053
39012
  );
39054
- logger54.info("Registered research_discover tool with secure handler and timeout protection");
39013
+ logger55.info("Registered research_discover tool with secure handler and timeout protection");
39055
39014
  }
39056
39015
 
39057
39016
  // src/mcp/tools/research-analyze.ts
@@ -39292,15 +39251,15 @@ function createResearchAnalyzeHandler(deps) {
39292
39251
  ctx.logger.debug("Analyzing research registry", {
39293
39252
  focus: validationResult.data.focus
39294
39253
  });
39295
- const logger54 = deps.logger ?? createLogger({ tool: "research_analyze" });
39296
- return withToolError("Analysis failed", logger54, async () => {
39254
+ const logger55 = deps.logger ?? createLogger({ tool: "research_analyze" });
39255
+ return withToolError("Analysis failed", logger55, async () => {
39297
39256
  const result = await executeAnalysis(validationResult.data);
39298
39257
  return toolSuccess(JSON.stringify(result, null, 2));
39299
39258
  });
39300
39259
  };
39301
39260
  }
39302
39261
  function registerResearchAnalyzeTool(server, deps) {
39303
- const logger54 = deps.logger ?? createLogger({ tool: "research_analyze" });
39262
+ const logger55 = deps.logger ?? createLogger({ tool: "research_analyze" });
39304
39263
  const toolSchema = {
39305
39264
  focus: z77.enum(["gaps", "trends", "priorities", "stale", "coverage"]).describe("Analysis focus area"),
39306
39265
  topic: z77.string().optional().describe("Optional topic filter")
@@ -39309,19 +39268,19 @@ function registerResearchAnalyzeTool(server, deps) {
39309
39268
  const secureHandler = createSecureHandler(createResearchAnalyzeHandler(deps), {
39310
39269
  toolName: "research_analyze",
39311
39270
  rateLimiter: deps.rateLimiter,
39312
- logger: logger54
39271
+ logger: logger55
39313
39272
  });
39314
39273
  const timeoutMs = getToolTimeout("research_analyze", deps.security);
39315
39274
  const wrappedHandler = wrapToolWithTimeout("research_analyze", secureHandler, {
39316
39275
  timeoutMs,
39317
- logger: logger54
39276
+ logger: logger55
39318
39277
  });
39319
39278
  server.registerTool(
39320
39279
  "research_analyze",
39321
39280
  { description, inputSchema: toolSchema },
39322
39281
  toSdkCallback(wrappedHandler)
39323
39282
  );
39324
- logger54.info("Registered research_analyze tool with secure handler and timeout protection");
39283
+ logger55.info("Registered research_analyze tool with secure handler and timeout protection");
39325
39284
  }
39326
39285
 
39327
39286
  // src/mcp/tools/research-catalog-review.ts
@@ -39344,7 +39303,7 @@ function handleList() {
39344
39303
  data: { pending, count: pending.length }
39345
39304
  };
39346
39305
  }
39347
- async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
39306
+ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger55) {
39348
39307
  const catalog = getAutoCatalog();
39349
39308
  const exists = await paperExists(identifier);
39350
39309
  if (exists) {
@@ -39356,7 +39315,7 @@ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
39356
39315
  if (!result.success) {
39357
39316
  return { action: "approve", success: false, message: `Failed: ${result.message}` };
39358
39317
  }
39359
- logger54.info("Approved paper", { paperId: result.paperId });
39318
+ logger55.info("Approved paper", { paperId: result.paperId });
39360
39319
  if (shouldCreateIssue) {
39361
39320
  const body = formatResearchIssueBody([
39362
39321
  {
@@ -39380,11 +39339,11 @@ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
39380
39339
  data: { ...result, issueUrl: issueResult.value.url }
39381
39340
  };
39382
39341
  }
39383
- logger54.warn("Issue creation failed after approve", { error: issueResult.error.message });
39342
+ logger55.warn("Issue creation failed after approve", { error: issueResult.error.message });
39384
39343
  }
39385
39344
  return { action: "approve", success: true, message: `Added: ${result.title}`, data: result };
39386
39345
  }
39387
- async function handleApprove(input, logger54) {
39346
+ async function handleApprove(input, logger55) {
39388
39347
  if (input.identifier === void 0 || input.identifier === "") {
39389
39348
  return { action: "approve", success: false, message: "identifier is required" };
39390
39349
  }
@@ -39398,7 +39357,7 @@ async function handleApprove(input, logger54) {
39398
39357
  };
39399
39358
  }
39400
39359
  if (ref.type === "arxiv") {
39401
- return approveArxivRef(ref.identifier, input.topic, input.createIssue, logger54);
39360
+ return approveArxivRef(ref.identifier, input.topic, input.createIssue, logger55);
39402
39361
  }
39403
39362
  catalog.markReviewed(ref.identifier);
39404
39363
  return { action: "approve", success: true, message: `Reviewed: ${ref.identifier}` };
@@ -39429,12 +39388,12 @@ function handleFlush() {
39429
39388
  message: `Flushed ${String(count)} references from catalog`
39430
39389
  };
39431
39390
  }
39432
- async function executeCatalogReview(input, logger54) {
39391
+ async function executeCatalogReview(input, logger55) {
39433
39392
  switch (input.action) {
39434
39393
  case "list":
39435
39394
  return handleList();
39436
39395
  case "approve":
39437
- return handleApprove(input, logger54);
39396
+ return handleApprove(input, logger55);
39438
39397
  case "dismiss":
39439
39398
  return handleDismiss(input);
39440
39399
  case "flush":
@@ -39448,9 +39407,9 @@ function createCatalogReviewHandler(deps) {
39448
39407
  return toolError(`Validation error: ${formatZodError(validationResult.error)}`);
39449
39408
  }
39450
39409
  ctx.logger.debug("Catalog review", { action: validationResult.data.action });
39451
- const logger54 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
39452
- return withToolError("Catalog review failed", logger54, async () => {
39453
- const result = await executeCatalogReview(validationResult.data, logger54);
39410
+ const logger55 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
39411
+ return withToolError("Catalog review failed", logger55, async () => {
39412
+ const result = await executeCatalogReview(validationResult.data, logger55);
39454
39413
  if (!result.success) {
39455
39414
  return toolError(result.message);
39456
39415
  }
@@ -39459,7 +39418,7 @@ function createCatalogReviewHandler(deps) {
39459
39418
  };
39460
39419
  }
39461
39420
  function registerResearchCatalogReviewTool(server, deps) {
39462
- const logger54 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
39421
+ const logger55 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
39463
39422
  const toolSchema = {
39464
39423
  action: z78.enum(["list", "approve", "dismiss", "flush"]).describe("Action to perform on cataloged references"),
39465
39424
  identifier: z78.string().optional().describe("Reference identifier for approve/dismiss"),
@@ -39470,19 +39429,19 @@ function registerResearchCatalogReviewTool(server, deps) {
39470
39429
  const secureHandler = createSecureHandler(createCatalogReviewHandler(deps), {
39471
39430
  toolName: "research_catalog_review",
39472
39431
  rateLimiter: deps.rateLimiter,
39473
- logger: logger54
39432
+ logger: logger55
39474
39433
  });
39475
39434
  const timeoutMs = getToolTimeout("research_catalog_review", deps.security);
39476
39435
  const wrappedHandler = wrapToolWithTimeout("research_catalog_review", secureHandler, {
39477
39436
  timeoutMs,
39478
- logger: logger54
39437
+ logger: logger55
39479
39438
  });
39480
39439
  server.registerTool(
39481
39440
  "research_catalog_review",
39482
39441
  { description, inputSchema: toolSchema },
39483
39442
  toSdkCallback(wrappedHandler)
39484
39443
  );
39485
- logger54.info("Registered research_catalog_review tool");
39444
+ logger55.info("Registered research_catalog_review tool");
39486
39445
  }
39487
39446
 
39488
39447
  // src/mcp/tools/research-synthesize.ts
@@ -39496,8 +39455,8 @@ function createResearchSynthesizeHandler(deps) {
39496
39455
  if (!validationResult.success) {
39497
39456
  return toolError(`Validation error: ${formatZodError(validationResult.error)}`);
39498
39457
  }
39499
- const logger54 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39500
- return withToolError("Synthesis failed", logger54, async () => {
39458
+ const logger55 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39459
+ return withToolError("Synthesis failed", logger55, async () => {
39501
39460
  const result = await synthesizeResearch(validationResult.data.topic);
39502
39461
  if (!result.ok) {
39503
39462
  return toolError(`Synthesis failed: ${result.error.message}`);
@@ -39507,7 +39466,7 @@ function createResearchSynthesizeHandler(deps) {
39507
39466
  };
39508
39467
  }
39509
39468
  function registerResearchSynthesizeTool(server, deps) {
39510
- const logger54 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39469
+ const logger55 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39511
39470
  const toolSchema = {
39512
39471
  topic: z79.string().optional().describe("Optional topic filter for single-cluster synthesis")
39513
39472
  };
@@ -39515,19 +39474,19 @@ function registerResearchSynthesizeTool(server, deps) {
39515
39474
  const secureHandler = createSecureHandler(createResearchSynthesizeHandler(deps), {
39516
39475
  toolName: "research_synthesize",
39517
39476
  rateLimiter: deps.rateLimiter,
39518
- logger: logger54
39477
+ logger: logger55
39519
39478
  });
39520
39479
  const timeoutMs = getToolTimeout("research_synthesize", deps.security);
39521
39480
  const wrappedHandler = wrapToolWithTimeout("research_synthesize", secureHandler, {
39522
39481
  timeoutMs,
39523
- logger: logger54
39482
+ logger: logger55
39524
39483
  });
39525
39484
  server.registerTool(
39526
39485
  "research_synthesize",
39527
39486
  { description, inputSchema: toolSchema },
39528
39487
  toSdkCallback(wrappedHandler)
39529
39488
  );
39530
- logger54.info("Registered research_synthesize tool");
39489
+ logger55.info("Registered research_synthesize tool");
39531
39490
  }
39532
39491
 
39533
39492
  // src/mcp/tools/issue-triage-tool.ts
@@ -39581,7 +39540,7 @@ function createIssueTriageHandler(_deps) {
39581
39540
  };
39582
39541
  }
39583
39542
  function registerIssueTriageTool(server, deps) {
39584
- const logger54 = deps.logger ?? createLogger({ tool: "issue_triage" });
39543
+ const logger55 = deps.logger ?? createLogger({ tool: "issue_triage" });
39585
39544
  const toolSchema = {
39586
39545
  issueUrl: z80.string().min(1).describe("GitHub issue URL (e.g., https://github.com/owner/repo/issues/123)"),
39587
39546
  dryRun: z80.boolean().optional().default(true).describe("Read-only mode (default: true)")
@@ -39591,19 +39550,19 @@ function registerIssueTriageTool(server, deps) {
39591
39550
  toolName: "issue_triage",
39592
39551
  securityTier: "external",
39593
39552
  rateLimiter: deps.rateLimiter,
39594
- logger: logger54
39553
+ logger: logger55
39595
39554
  });
39596
39555
  const timeoutMs = getToolTimeout("issue_triage", deps.security);
39597
39556
  const wrappedHandler = wrapToolWithTimeout("issue_triage", secureHandler, {
39598
39557
  timeoutMs,
39599
- logger: logger54
39558
+ logger: logger55
39600
39559
  });
39601
39560
  server.registerTool(
39602
39561
  "issue_triage",
39603
39562
  { description, inputSchema: toolSchema },
39604
39563
  toSdkCallback(wrappedHandler)
39605
39564
  );
39606
- logger54.info("Registered issue_triage tool with secure handler and timeout protection");
39565
+ logger55.info("Registered issue_triage tool with secure handler and timeout protection");
39607
39566
  }
39608
39567
  var triageLogger = createLogger({ tool: "issue-triage" });
39609
39568
  function recordTriageSuccess(category, confidence, durationMs) {
@@ -39636,7 +39595,7 @@ function recordTriageOutcome(success, durationMs, errorMsg) {
39636
39595
  }
39637
39596
  const store = getOutcomeStore();
39638
39597
  store.append({
39639
- id: `triage-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
39598
+ id: `triage-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
39640
39599
  cli: DEFAULT_CLI,
39641
39600
  category: "planning",
39642
39601
  model: "issue-triage",
@@ -39840,7 +39799,7 @@ function createEventCollector(events, enableAuditTrail) {
39840
39799
  auditBridge?.(event);
39841
39800
  };
39842
39801
  }
39843
- async function handleRunGraphWorkflow(input, logger54) {
39802
+ async function handleRunGraphWorkflow(input, logger55) {
39844
39803
  const startTime = getTimeProvider().now();
39845
39804
  const resolved = resolveGraph(input.workflow, startTime);
39846
39805
  if (!resolved.ok) return resolved.error;
@@ -39848,7 +39807,7 @@ async function handleRunGraphWorkflow(input, logger54) {
39848
39807
  const checkpointStore = input.enableCheckpointing ? createCheckpointStore() : void 0;
39849
39808
  const onEvent = createEventCollector(events, input.enableAuditTrail);
39850
39809
  const executionId = `graph-${input.workflow}-${String(Date.now())}`;
39851
- logger54.info("Executing graph workflow", {
39810
+ logger55.info("Executing graph workflow", {
39852
39811
  workflow: input.workflow,
39853
39812
  executionId,
39854
39813
  checkpointing: input.enableCheckpointing,
@@ -39891,7 +39850,7 @@ var GRAPH_WORKFLOW_SCHEMA = {
39891
39850
  enableCheckpointing: z81.boolean().optional().describe("Enable checkpoint saving"),
39892
39851
  enableAuditTrail: z81.boolean().optional().describe("Enable audit trail logging")
39893
39852
  };
39894
- function createGraphWorkflowHandler(logger54, notifier) {
39853
+ function createGraphWorkflowHandler(logger55, notifier) {
39895
39854
  return async (args, _ctx) => {
39896
39855
  const parsed = RunGraphWorkflowInputSchema.safeParse(args);
39897
39856
  if (!parsed.success) {
@@ -39904,7 +39863,7 @@ function createGraphWorkflowHandler(logger54, notifier) {
39904
39863
  event: "graph_workflow_start",
39905
39864
  workflow: parsed.data.workflow
39906
39865
  });
39907
- const result = await handleRunGraphWorkflow(parsed.data, logger54);
39866
+ const result = await handleRunGraphWorkflow(parsed.data, logger55);
39908
39867
  const succeeded = result.status === "completed";
39909
39868
  notifier.info("run_graph_workflow", {
39910
39869
  event: succeeded ? "graph_workflow_complete" : "graph_workflow_failed",
@@ -39918,22 +39877,22 @@ function createGraphWorkflowHandler(logger54, notifier) {
39918
39877
  };
39919
39878
  }
39920
39879
  function registerRunGraphWorkflowTool(server, deps) {
39921
- const logger54 = deps.logger ?? createLogger({ tool: "run_graph_workflow" });
39880
+ const logger55 = deps.logger ?? createLogger({ tool: "run_graph_workflow" });
39922
39881
  const notifier = deps.notifier ?? createMcpNotifier(server);
39923
- const handler2 = createGraphWorkflowHandler(logger54, notifier);
39882
+ const handler2 = createGraphWorkflowHandler(logger55, notifier);
39924
39883
  const secureHandler = createSecureHandler(handler2, {
39925
39884
  toolName: "run_graph_workflow",
39926
39885
  rateLimiter: deps.rateLimiter,
39927
- logger: logger54
39886
+ logger: logger55
39928
39887
  });
39929
39888
  const timeoutMs = getToolTimeout("run_graph_workflow", deps.security);
39930
- const wrapped = wrapToolWithTimeout("run_graph_workflow", secureHandler, { timeoutMs, logger: logger54 });
39889
+ const wrapped = wrapToolWithTimeout("run_graph_workflow", secureHandler, { timeoutMs, logger: logger55 });
39931
39890
  server.registerTool(
39932
39891
  "run_graph_workflow",
39933
39892
  { description: GRAPH_WORKFLOW_DESCRIPTION, inputSchema: GRAPH_WORKFLOW_SCHEMA },
39934
39893
  toSdkCallback(wrapped)
39935
39894
  );
39936
- logger54.info("Registered run_graph_workflow tool");
39895
+ logger55.info("Registered run_graph_workflow tool");
39937
39896
  }
39938
39897
  function toEventSummary(event) {
39939
39898
  const hasNodeId = "nodeId" in event;
@@ -40012,7 +39971,7 @@ function recordGraphWorkflowResult(result) {
40012
39971
  try {
40013
39972
  const store = getOutcomeStore();
40014
39973
  store.append({
40015
- id: `graph-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
39974
+ id: `graph-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
40016
39975
  cli: DEFAULT_CLI,
40017
39976
  category: workflowToCategory(result.workflow),
40018
39977
  model: "graph-workflow",
@@ -40485,7 +40444,7 @@ var ExecuteSpecInputSchema = z82.object({
40485
40444
  spec: z82.string().min(1).max(5e4).describe("Markdown specification to execute"),
40486
40445
  dryRun: z82.boolean().optional().default(false).describe("Parse and decompose only")
40487
40446
  });
40488
- function createDryRunResponse(input, logger54) {
40447
+ function createDryRunResponse(input, logger55) {
40489
40448
  const parseResult2 = parseSpec(input.spec);
40490
40449
  if (!parseResult2.ok) {
40491
40450
  return toolError(`Parse error: ${parseResult2.error.message}`);
@@ -40494,14 +40453,14 @@ function createDryRunResponse(input, logger54) {
40494
40453
  if (!dagResult.ok) {
40495
40454
  return toolError(`Decompose error: ${dagResult.error.message}`);
40496
40455
  }
40497
- logger54.info("Dry run completed", {
40456
+ logger55.info("Dry run completed", {
40498
40457
  title: parseResult2.value.title,
40499
40458
  nodes: dagResult.value.nodes.length
40500
40459
  });
40501
40460
  const output2 = { mode: "dry_run", spec: parseResult2.value, dag: dagResult.value };
40502
40461
  return toolSuccess(JSON.stringify(output2, null, 2));
40503
40462
  }
40504
- async function createFullResponse(input, logger54) {
40463
+ async function createFullResponse(input, logger55) {
40505
40464
  const startMs = Date.now();
40506
40465
  const result = await executeSpec(input.spec);
40507
40466
  const durationMs = Date.now() - startMs;
@@ -40511,7 +40470,7 @@ async function createFullResponse(input, logger54) {
40511
40470
  }
40512
40471
  const analysis = analyzeFailures(result.value);
40513
40472
  const satisfaction = result.value.validation.satisfaction;
40514
- logger54.info("Spec execution completed", {
40473
+ logger55.info("Spec execution completed", {
40515
40474
  satisfaction,
40516
40475
  passed: analysis.ok ? analysis.value.passed : false
40517
40476
  });
@@ -40525,24 +40484,24 @@ async function createFullResponse(input, logger54) {
40525
40484
  return toolSuccess(JSON.stringify(output2, null, 2));
40526
40485
  }
40527
40486
  function registerExecuteSpecTool(server, deps) {
40528
- const logger54 = deps.logger ?? createLogger({ tool: "execute_spec" });
40487
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_spec" });
40529
40488
  const handler2 = async (args, _ctx) => {
40530
40489
  const parsed = ExecuteSpecInputSchema.safeParse(args);
40531
40490
  if (!parsed.success) {
40532
40491
  return toolError(`Invalid input: ${formatZodError(parsed.error)}`);
40533
40492
  }
40534
40493
  if (parsed.data.dryRun) {
40535
- return createDryRunResponse(parsed.data, logger54);
40494
+ return createDryRunResponse(parsed.data, logger55);
40536
40495
  }
40537
- return createFullResponse(parsed.data, logger54);
40496
+ return createFullResponse(parsed.data, logger55);
40538
40497
  };
40539
40498
  const secureHandler = createSecureHandler(handler2, {
40540
40499
  toolName: "execute_spec",
40541
40500
  rateLimiter: deps.rateLimiter,
40542
- logger: logger54
40501
+ logger: logger55
40543
40502
  });
40544
40503
  const timeoutMs = getToolTimeout("execute_spec", deps.security);
40545
- const wrapped = wrapToolWithTimeout("execute_spec", secureHandler, { timeoutMs, logger: logger54 });
40504
+ const wrapped = wrapToolWithTimeout("execute_spec", secureHandler, { timeoutMs, logger: logger55 });
40546
40505
  const toolSchema = {
40547
40506
  spec: z82.string().min(1).max(5e4).describe(
40548
40507
  'Markdown specification to execute. Must contain "## Requirements" and "## Acceptance Criteria" sections.'
@@ -40555,7 +40514,7 @@ function registerExecuteSpecTool(server, deps) {
40555
40514
  { description, inputSchema: toolSchema },
40556
40515
  toSdkCallback(wrapped)
40557
40516
  );
40558
- logger54.info("Registered execute_spec tool");
40517
+ logger55.info("Registered execute_spec tool");
40559
40518
  }
40560
40519
  var specLogger = createLogger({ tool: "execute-spec" });
40561
40520
  function recordSpecSuccess(satisfaction, durationMs) {
@@ -40588,7 +40547,7 @@ function recordSpecOutcome(success, durationMs, stage) {
40588
40547
  }
40589
40548
  const store = getOutcomeStore();
40590
40549
  store.append({
40591
- id: `spec-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
40550
+ id: `spec-${String(getTimeProvider().now())}-${getRandomProvider().random().toString(36).slice(2, 8)}`,
40592
40551
  cli: DEFAULT_CLI,
40593
40552
  category: "code_generation",
40594
40553
  model: "spec-executor",
@@ -40617,29 +40576,29 @@ var MemoryQueryInputSchema = z83.object({
40617
40576
  });
40618
40577
  var reflectionCache;
40619
40578
  var reflectionAdapter;
40620
- function getReflectiveRetriever(logger54) {
40579
+ function getReflectiveRetriever(logger55) {
40621
40580
  const enabled = isReflectiveMemoryEnabled();
40622
40581
  const shadow = isReflectiveShadowMode();
40623
40582
  if (!enabled && !shadow) return void 0;
40624
40583
  if (reflectionAdapter === void 0) {
40625
40584
  try {
40626
- const registry = getGlobalRegistry({ logger: logger54 });
40585
+ const registry = getGlobalRegistry({ logger: logger55 });
40627
40586
  reflectionAdapter = registry.getDefault();
40628
40587
  } catch {
40629
- logger54.warn("No adapter for reflection, using keyword retrieval");
40588
+ logger55.warn("No adapter for reflection, using keyword retrieval");
40630
40589
  return void 0;
40631
40590
  }
40632
40591
  }
40633
40592
  reflectionCache ??= new ReflectionCache();
40634
40593
  return new ReflectiveRetriever({
40635
40594
  adapter: reflectionAdapter,
40636
- logger: logger54,
40595
+ logger: logger55,
40637
40596
  shadowMode: shadow,
40638
40597
  cache: reflectionCache
40639
40598
  });
40640
40599
  }
40641
- async function resolveReflection(query, logger54) {
40642
- const retriever = getReflectiveRetriever(logger54);
40600
+ async function resolveReflection(query, logger55) {
40601
+ const retriever = getReflectiveRetriever(logger55);
40643
40602
  if (retriever === void 0) return { effectiveQuery: query };
40644
40603
  const reflection = await retriever.enhance(query);
40645
40604
  const reflected = reflection.reflected;
@@ -40651,14 +40610,14 @@ async function resolveReflection(query, logger54) {
40651
40610
  reflection
40652
40611
  };
40653
40612
  }
40654
- async function executeMemoryQuery(input, logger54) {
40613
+ async function executeMemoryQuery(input, logger55) {
40655
40614
  const toolMemory = getToolMemory();
40656
40615
  const { effectiveQuery, expandedQuery, reflection } = await resolveReflection(
40657
40616
  input.query,
40658
- logger54
40617
+ logger55
40659
40618
  );
40660
40619
  const results = await toolMemory.queryBySource(input.source, effectiveQuery, input.limit);
40661
- logger54.debug("Memory query executed", {
40620
+ logger55.debug("Memory query executed", {
40662
40621
  query: input.query,
40663
40622
  effectiveQuery: effectiveQuery !== input.query ? effectiveQuery : void 0,
40664
40623
  resultCount: results.length,
@@ -40685,7 +40644,7 @@ async function memoryQueryHandler(args, ctx) {
40685
40644
  });
40686
40645
  }
40687
40646
  function registerMemoryQueryTool(server, deps) {
40688
- const logger54 = deps.logger ?? createLogger({ tool: "memory_query" });
40647
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_query" });
40689
40648
  const toolSchema = {
40690
40649
  query: z83.string().min(1).max(500).describe("Search query to match against memory contents"),
40691
40650
  limit: z83.number().int().min(1).max(50).optional().describe("Maximum results to return (default: 10, max: 50)"),
@@ -40695,16 +40654,16 @@ function registerMemoryQueryTool(server, deps) {
40695
40654
  const secureHandler = createSecureHandler(memoryQueryHandler, {
40696
40655
  toolName: "memory_query",
40697
40656
  rateLimiter: deps.rateLimiter,
40698
- logger: logger54
40657
+ logger: logger55
40699
40658
  });
40700
40659
  const timeoutMs = getToolTimeout("memory_query", deps.security);
40701
- const wrappedHandler = wrapToolWithTimeout("memory_query", secureHandler, { timeoutMs, logger: logger54 });
40660
+ const wrappedHandler = wrapToolWithTimeout("memory_query", secureHandler, { timeoutMs, logger: logger55 });
40702
40661
  server.registerTool(
40703
40662
  "memory_query",
40704
40663
  { description, inputSchema: toolSchema },
40705
40664
  toSdkCallback(wrappedHandler)
40706
40665
  );
40707
- logger54.info("Registered memory_query tool");
40666
+ logger55.info("Registered memory_query tool");
40708
40667
  }
40709
40668
 
40710
40669
  // src/mcp/tools/memory-stats.ts
@@ -40712,7 +40671,7 @@ import { z as z84 } from "zod";
40712
40671
  var MemoryStatsInputSchema = z84.object({
40713
40672
  includeDecay: z84.boolean().optional().default(true).describe("Include decay statistics (default: true)")
40714
40673
  });
40715
- async function collectMemoryStats(input, logger54) {
40674
+ async function collectMemoryStats(input, logger55) {
40716
40675
  const toolMemory = getToolMemory();
40717
40676
  const sessionStats = {
40718
40677
  learningsCount: 0,
@@ -40749,7 +40708,7 @@ async function collectMemoryStats(input, logger54) {
40749
40708
  mobimem: toolMemory.isMobiMemAvailable(),
40750
40709
  decay: toolMemory.isDecayManagerAvailable()
40751
40710
  };
40752
- logger54.debug("Memory stats collected", { backends });
40711
+ logger55.debug("Memory stats collected", { backends });
40753
40712
  return {
40754
40713
  backends,
40755
40714
  session: sessionStats,
@@ -40771,7 +40730,7 @@ async function memoryStatsHandler(args, ctx) {
40771
40730
  });
40772
40731
  }
40773
40732
  function registerMemoryStatsTool(server, deps) {
40774
- const logger54 = deps.logger ?? createLogger({ tool: "memory_stats" });
40733
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_stats" });
40775
40734
  const toolSchema = {
40776
40735
  includeDecay: z84.boolean().optional().describe("Include decay statistics (default: true)")
40777
40736
  };
@@ -40779,16 +40738,16 @@ function registerMemoryStatsTool(server, deps) {
40779
40738
  const secureHandler = createSecureHandler(memoryStatsHandler, {
40780
40739
  toolName: "memory_stats",
40781
40740
  rateLimiter: deps.rateLimiter,
40782
- logger: logger54
40741
+ logger: logger55
40783
40742
  });
40784
40743
  const timeoutMs = getToolTimeout("memory_stats", deps.security);
40785
- const wrappedHandler = wrapToolWithTimeout("memory_stats", secureHandler, { timeoutMs, logger: logger54 });
40744
+ const wrappedHandler = wrapToolWithTimeout("memory_stats", secureHandler, { timeoutMs, logger: logger55 });
40786
40745
  server.registerTool(
40787
40746
  "memory_stats",
40788
40747
  { description, inputSchema: toolSchema },
40789
40748
  toSdkCallback(wrappedHandler)
40790
40749
  );
40791
- logger54.info("Registered memory_stats tool");
40750
+ logger55.info("Registered memory_stats tool");
40792
40751
  }
40793
40752
 
40794
40753
  // src/mcp/tools/memory-write.ts
@@ -40877,12 +40836,12 @@ function isDuplicateWrite(key, content) {
40877
40836
  recentWriteKeys.set(cacheKey, (/* @__PURE__ */ new Date()).toISOString());
40878
40837
  return false;
40879
40838
  }
40880
- async function executeMemoryWrite(input, logger54) {
40839
+ async function executeMemoryWrite(input, logger55) {
40881
40840
  if (isDuplicateWrite(input.key, input.content)) {
40882
- logger54.debug("Skipping duplicate memory write", { key: input.key, backend: input.backend });
40841
+ logger55.debug("Skipping duplicate memory write", { key: input.key, backend: input.backend });
40883
40842
  return { success: true, backend: input.backend, key: input.key, deduplicated: true };
40884
40843
  }
40885
- logger54.debug("Writing to memory", {
40844
+ logger55.debug("Writing to memory", {
40886
40845
  backend: input.backend,
40887
40846
  key: input.key,
40888
40847
  contentLength: input.content.length
@@ -40914,7 +40873,7 @@ async function memoryWriteHandler(args, ctx) {
40914
40873
  });
40915
40874
  }
40916
40875
  function registerMemoryWriteTool(server, deps) {
40917
- const logger54 = deps.logger ?? createLogger({ tool: "memory_write" });
40876
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_write" });
40918
40877
  const toolSchema = {
40919
40878
  key: z85.string().min(1).max(200).describe("Memory identifier or subject"),
40920
40879
  content: z85.string().min(1).max(5e3).describe("Memory content to store"),
@@ -40928,16 +40887,16 @@ function registerMemoryWriteTool(server, deps) {
40928
40887
  const secureHandler = createSecureHandler(memoryWriteHandler, {
40929
40888
  toolName: "memory_write",
40930
40889
  rateLimiter: deps.rateLimiter,
40931
- logger: logger54
40890
+ logger: logger55
40932
40891
  });
40933
40892
  const timeoutMs = getToolTimeout("memory_write", deps.security);
40934
- const wrappedHandler = wrapToolWithTimeout("memory_write", secureHandler, { timeoutMs, logger: logger54 });
40893
+ const wrappedHandler = wrapToolWithTimeout("memory_write", secureHandler, { timeoutMs, logger: logger55 });
40935
40894
  server.registerTool(
40936
40895
  "memory_write",
40937
40896
  { description, inputSchema: toolSchema },
40938
40897
  toSdkCallback(wrappedHandler)
40939
40898
  );
40940
- logger54.info("Registered memory_write tool");
40899
+ logger55.info("Registered memory_write tool");
40941
40900
  }
40942
40901
 
40943
40902
  // src/mcp/tools/weather-report-tool.ts
@@ -40982,7 +40941,7 @@ function weatherReportHandler(args, ctx) {
40982
40941
  }
40983
40942
  }
40984
40943
  function registerWeatherReportTool(server, deps) {
40985
- const logger54 = deps.logger ?? createLogger({ tool: "weather_report" });
40944
+ const logger55 = deps.logger ?? createLogger({ tool: "weather_report" });
40986
40945
  const toolSchema = {
40987
40946
  cli: z86.enum(["claude", "gemini", "codex", "opencode"]).optional().describe("Filter by CLI"),
40988
40947
  category: z86.enum([
@@ -41003,19 +40962,19 @@ function registerWeatherReportTool(server, deps) {
41003
40962
  const secureHandler = createSecureHandler(weatherReportHandler, {
41004
40963
  toolName: "weather_report",
41005
40964
  rateLimiter: deps.rateLimiter,
41006
- logger: logger54
40965
+ logger: logger55
41007
40966
  });
41008
40967
  const timeoutMs = getToolTimeout("weather_report", deps.security);
41009
40968
  const wrappedHandler = wrapToolWithTimeout("weather_report", secureHandler, {
41010
40969
  timeoutMs,
41011
- logger: logger54
40970
+ logger: logger55
41012
40971
  });
41013
40972
  server.registerTool(
41014
40973
  "weather_report",
41015
40974
  { description, inputSchema: toolSchema },
41016
40975
  toSdkCallback(wrappedHandler)
41017
40976
  );
41018
- logger54.info("Registered weather_report tool");
40977
+ logger55.info("Registered weather_report tool");
41019
40978
  }
41020
40979
 
41021
40980
  // src/mcp/tools/registry-import-types.ts
@@ -41133,7 +41092,7 @@ function registryImportHandler(args, ctx) {
41133
41092
  }
41134
41093
  }
41135
41094
  function registerRegistryImportTool(server, deps) {
41136
- const logger54 = deps.logger ?? createLogger({ tool: "registry_import" });
41095
+ const logger55 = deps.logger ?? createLogger({ tool: "registry_import" });
41137
41096
  const toolSchema = {
41138
41097
  provider: z88.enum(["anthropic", "google", "openai"]).describe("Model provider (anthropic, google, openai)"),
41139
41098
  modelId: z88.string().min(1).describe("Provider model identifier"),
@@ -41143,19 +41102,19 @@ function registerRegistryImportTool(server, deps) {
41143
41102
  const secureHandler = createSecureHandler(registryImportHandler, {
41144
41103
  toolName: "registry_import",
41145
41104
  rateLimiter: deps.rateLimiter,
41146
- logger: logger54
41105
+ logger: logger55
41147
41106
  });
41148
41107
  const timeoutMs = getToolTimeout("registry_import", deps.security);
41149
41108
  const wrappedHandler = wrapToolWithTimeout("registry_import", secureHandler, {
41150
41109
  timeoutMs,
41151
- logger: logger54
41110
+ logger: logger55
41152
41111
  });
41153
41112
  server.registerTool(
41154
41113
  "registry_import",
41155
41114
  { description, inputSchema: toolSchema },
41156
41115
  toSdkCallback(wrappedHandler)
41157
41116
  );
41158
- logger54.info("Registered registry_import tool");
41117
+ logger55.info("Registered registry_import tool");
41159
41118
  }
41160
41119
 
41161
41120
  // src/mcp/tools/repo-analyze-types.ts
@@ -41185,7 +41144,7 @@ async function repoAnalyzeHandler(args, ctx) {
41185
41144
  }
41186
41145
  }
41187
41146
  function registerRepoAnalyzeTool(server, deps) {
41188
- const logger54 = deps.logger ?? createLogger({ tool: "repo_analyze" });
41147
+ const logger55 = deps.logger ?? createLogger({ tool: "repo_analyze" });
41189
41148
  const toolSchema = {
41190
41149
  repo: z90.string().min(1).describe('GitHub repository in "owner/name" format or full URL'),
41191
41150
  depth: z90.enum(["shallow", "deep"]).optional().describe("Analysis depth: shallow (tree + README) or deep")
@@ -41194,19 +41153,19 @@ function registerRepoAnalyzeTool(server, deps) {
41194
41153
  const secureHandler = createSecureHandler(repoAnalyzeHandler, {
41195
41154
  toolName: "repo_analyze",
41196
41155
  rateLimiter: deps.rateLimiter,
41197
- logger: logger54
41156
+ logger: logger55
41198
41157
  });
41199
41158
  const timeoutMs = getToolTimeout("repo_analyze", deps.security);
41200
41159
  const wrappedHandler = wrapToolWithTimeout("repo_analyze", secureHandler, {
41201
41160
  timeoutMs,
41202
- logger: logger54
41161
+ logger: logger55
41203
41162
  });
41204
41163
  server.registerTool(
41205
41164
  "repo_analyze",
41206
41165
  { description, inputSchema: toolSchema },
41207
41166
  toSdkCallback(wrappedHandler)
41208
41167
  );
41209
- logger54.info("Registered repo_analyze tool");
41168
+ logger55.info("Registered repo_analyze tool");
41210
41169
  }
41211
41170
 
41212
41171
  // src/mcp/tools/repo-security-plan-types.ts
@@ -41235,7 +41194,7 @@ async function handler(args, ctx) {
41235
41194
  }
41236
41195
  }
41237
41196
  function registerRepoSecurityPlanTool(server, deps) {
41238
- const logger54 = deps.logger ?? createLogger({ tool: "repo_security_plan" });
41197
+ const logger55 = deps.logger ?? createLogger({ tool: "repo_security_plan" });
41239
41198
  const toolSchema = {
41240
41199
  repo: z92.string().min(1).describe('GitHub repository in "owner/name" format or full URL'),
41241
41200
  categories: z92.array(z92.string().max(50)).max(10).optional().describe('Filter to specific categories (e.g., ["sast", "sca", "secrets"])'),
@@ -41245,19 +41204,19 @@ function registerRepoSecurityPlanTool(server, deps) {
41245
41204
  const secureHandler = createSecureHandler(handler, {
41246
41205
  toolName: "repo_security_plan",
41247
41206
  rateLimiter: deps.rateLimiter,
41248
- logger: logger54
41207
+ logger: logger55
41249
41208
  });
41250
41209
  const timeoutMs = getToolTimeout("repo_security_plan", deps.security);
41251
41210
  const wrappedHandler = wrapToolWithTimeout("repo_security_plan", secureHandler, {
41252
41211
  timeoutMs,
41253
- logger: logger54
41212
+ logger: logger55
41254
41213
  });
41255
41214
  server.registerTool(
41256
41215
  "repo_security_plan",
41257
41216
  { description, inputSchema: toolSchema },
41258
41217
  toSdkCallback(wrappedHandler)
41259
41218
  );
41260
- logger54.info("Registered repo_security_plan tool");
41219
+ logger55.info("Registered repo_security_plan tool");
41261
41220
  }
41262
41221
 
41263
41222
  // src/mcp/tools/search-codebase-tool.ts
@@ -41338,7 +41297,7 @@ ${output2}`);
41338
41297
  }
41339
41298
  }
41340
41299
  function registerSearchCodebaseTool(server, deps) {
41341
- const logger54 = deps.logger ?? createLogger({ tool: "search_codebase" });
41300
+ const logger55 = deps.logger ?? createLogger({ tool: "search_codebase" });
41342
41301
  const toolSchema = {
41343
41302
  query: z93.string().min(1).max(200).describe("Search query or file path"),
41344
41303
  directory: z93.string().max(500).optional().describe("Directory to index"),
@@ -41349,16 +41308,16 @@ function registerSearchCodebaseTool(server, deps) {
41349
41308
  const secureHandler = createSecureHandler(searchCodebaseHandler, {
41350
41309
  toolName: "search_codebase",
41351
41310
  rateLimiter: deps.rateLimiter,
41352
- logger: logger54
41311
+ logger: logger55
41353
41312
  });
41354
41313
  const timeoutMs = getToolTimeout("search_codebase", deps.security);
41355
- const wrapped = wrapToolWithTimeout("search_codebase", secureHandler, { timeoutMs, logger: logger54 });
41314
+ const wrapped = wrapToolWithTimeout("search_codebase", secureHandler, { timeoutMs, logger: logger55 });
41356
41315
  server.registerTool(
41357
41316
  "search_codebase",
41358
41317
  { description, inputSchema: toolSchema },
41359
41318
  toSdkCallback(wrapped)
41360
41319
  );
41361
- logger54.info("Registered search_codebase tool");
41320
+ logger55.info("Registered search_codebase tool");
41362
41321
  }
41363
41322
 
41364
41323
  // src/mcp/tools/extract-symbols-tool.ts
@@ -41416,7 +41375,7 @@ async function extractSymbolsHandler(args, ctx) {
41416
41375
  }
41417
41376
  }
41418
41377
  function registerExtractSymbolsTool(server, deps) {
41419
- const logger54 = deps.logger ?? createLogger({ tool: "extract_symbols" });
41378
+ const logger55 = deps.logger ?? createLogger({ tool: "extract_symbols" });
41420
41379
  const toolSchema = {
41421
41380
  filePath: z94.string().min(1).max(500).describe("Path to TypeScript/JavaScript file"),
41422
41381
  mode: z94.enum(["index", "full"]).optional().describe("index (default): names+lines. full: includes source text")
@@ -41425,19 +41384,19 @@ function registerExtractSymbolsTool(server, deps) {
41425
41384
  const secureHandler = createSecureHandler(extractSymbolsHandler, {
41426
41385
  toolName: "extract_symbols",
41427
41386
  rateLimiter: deps.rateLimiter,
41428
- logger: logger54
41387
+ logger: logger55
41429
41388
  });
41430
41389
  const timeoutMs = getToolTimeout("extract_symbols", deps.security);
41431
41390
  const wrapped = wrapToolWithTimeout("extract_symbols", secureHandler, {
41432
41391
  timeoutMs,
41433
- logger: logger54
41392
+ logger: logger55
41434
41393
  });
41435
41394
  server.registerTool(
41436
41395
  "extract_symbols",
41437
41396
  { description, inputSchema: toolSchema },
41438
41397
  toSdkCallback(wrapped)
41439
41398
  );
41440
- logger54.info("Registered extract_symbols tool");
41399
+ logger55.info("Registered extract_symbols tool");
41441
41400
  }
41442
41401
 
41443
41402
  // src/mcp/tools/query-trace-tool.ts
@@ -41535,7 +41494,7 @@ function queryTraceHandler(args, ctx) {
41535
41494
  });
41536
41495
  }
41537
41496
  function registerQueryTraceTool(server, deps) {
41538
- const logger54 = deps.logger ?? createLogger({ tool: "query_trace" });
41497
+ const logger55 = deps.logger ?? createLogger({ tool: "query_trace" });
41539
41498
  const toolSchema = {
41540
41499
  runId: z95.string().min(1).max(128).regex(/^[a-zA-Z0-9_-]+$/, "runId must be alphanumeric, hyphens, or underscores").describe("Run ID to query traces for"),
41541
41500
  eventType: z95.string().max(100).regex(/^[a-zA-Z0-9._-]+$/).optional().describe("Filter by event type (e.g., model.called)"),
@@ -41545,16 +41504,16 @@ function registerQueryTraceTool(server, deps) {
41545
41504
  const secureHandler = createSecureHandler(queryTraceHandler, {
41546
41505
  toolName: "query_trace",
41547
41506
  rateLimiter: deps.rateLimiter,
41548
- logger: logger54
41507
+ logger: logger55
41549
41508
  });
41550
41509
  const timeoutMs = getToolTimeout("query_trace", deps.security);
41551
- const wrappedHandler = wrapToolWithTimeout("query_trace", secureHandler, { timeoutMs, logger: logger54 });
41510
+ const wrappedHandler = wrapToolWithTimeout("query_trace", secureHandler, { timeoutMs, logger: logger55 });
41552
41511
  server.registerTool(
41553
41512
  "query_trace",
41554
41513
  { description, inputSchema: toolSchema },
41555
41514
  toSdkCallback(wrappedHandler)
41556
41515
  );
41557
- logger54.info("Registered query_trace tool");
41516
+ logger55.info("Registered query_trace tool");
41558
41517
  }
41559
41518
 
41560
41519
  // src/pipeline/stage-types.ts
@@ -41942,7 +41901,7 @@ async function tryIssueTriage(task) {
41942
41901
  try {
41943
41902
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41944
41903
  if (issueMatch === null) return null;
41945
- const { createIssueTriage } = await import("./issue-triage-VLP2PXR6.js");
41904
+ const { createIssueTriage } = await import("./issue-triage-2YK6NOJD.js");
41946
41905
  const triage = createIssueTriage();
41947
41906
  const owner = issueMatch[1] ?? "";
41948
41907
  const num = issueMatch[2] ?? "";
@@ -42973,7 +42932,7 @@ ${contextBlock}`;
42973
42932
  const strategy = config.votingStrategy ?? "higher_order";
42974
42933
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
42975
42934
  try {
42976
- const { executeVoting } = await import("./consensus-vote-N5RRFYER.js");
42935
+ const { executeVoting } = await import("./consensus-vote-VFTADRFB.js");
42977
42936
  const votingResult = await executeVoting(
42978
42937
  {
42979
42938
  proposal: plan.slice(0, 4e3),
@@ -44017,7 +43976,7 @@ function queryTaskStateHandler(args, ctx) {
44017
43976
  return Promise.resolve(toolSuccess(JSON.stringify(response, null, 2)));
44018
43977
  }
44019
43978
  function registerQueryTaskStateTool(server, deps) {
44020
- const logger54 = deps.logger ?? createLogger({ tool: "query_task_state" });
43979
+ const logger55 = deps.logger ?? createLogger({ tool: "query_task_state" });
44021
43980
  const toolSchema = {
44022
43981
  taskId: z100.string().min(1).max(128).describe("Task ID whose structured state log should be read")
44023
43982
  };
@@ -44025,19 +43984,19 @@ function registerQueryTaskStateTool(server, deps) {
44025
43984
  const secureHandler = createSecureHandler(queryTaskStateHandler, {
44026
43985
  toolName: "query_task_state",
44027
43986
  rateLimiter: deps.rateLimiter,
44028
- logger: logger54
43987
+ logger: logger55
44029
43988
  });
44030
43989
  const timeoutMs = getToolTimeout("query_task_state", deps.security);
44031
43990
  const wrappedHandler = wrapToolWithTimeout("query_task_state", secureHandler, {
44032
43991
  timeoutMs,
44033
- logger: logger54
43992
+ logger: logger55
44034
43993
  });
44035
43994
  server.registerTool(
44036
43995
  "query_task_state",
44037
43996
  { description, inputSchema: toolSchema },
44038
43997
  toSdkCallback(wrappedHandler)
44039
43998
  );
44040
- logger54.info("Registered query_task_state tool");
43999
+ logger55.info("Registered query_task_state tool");
44041
44000
  }
44042
44001
 
44043
44002
  // src/mcp/tools/pipeline-tool.ts
@@ -44521,9 +44480,9 @@ function wrapWithObservability(toolName, cb, eventBus) {
44521
44480
 
44522
44481
  // src/mcp/tools/index.ts
44523
44482
  function registerTools(server, options) {
44524
- const logger54 = options?.logger ?? createMcpLogger({ component: "tools" });
44525
- const rateLimiter = options?.rateLimiter ?? createDefaultRateLimiter("mcp-tools", logger54);
44526
- logger54.info("Tool registration infrastructure initialized");
44483
+ const logger55 = options?.logger ?? createMcpLogger({ component: "tools" });
44484
+ const rateLimiter = options?.rateLimiter ?? createDefaultRateLimiter("mcp-tools", logger55);
44485
+ logger55.info("Tool registration infrastructure initialized");
44527
44486
  void server;
44528
44487
  return {
44529
44488
  tools: [
@@ -44559,7 +44518,7 @@ function registerTools(server, options) {
44559
44518
  "run_dev_pipeline",
44560
44519
  "run_pipeline"
44561
44520
  ],
44562
- logger: logger54,
44521
+ logger: logger55,
44563
44522
  rateLimiter
44564
44523
  };
44565
44524
  }
@@ -44572,32 +44531,32 @@ var TIER_NAMES = {
44572
44531
  };
44573
44532
  function createGateway(config = {}) {
44574
44533
  const enabled = config.enabled !== false;
44575
- const logger54 = config.logger ?? createLogger({ component: "gateway" });
44534
+ const logger55 = config.logger ?? createLogger({ component: "gateway" });
44576
44535
  const overrides = config.tierOverrides;
44577
44536
  return {
44578
44537
  enabled,
44579
44538
  wrapTool(toolName, handler2) {
44580
44539
  if (!enabled) return handler2;
44581
- return createGatewayHandler(toolName, handler2, logger54, overrides);
44540
+ return createGatewayHandler(toolName, handler2, logger55, overrides);
44582
44541
  }
44583
44542
  };
44584
44543
  }
44585
- function createGatewayHandler(toolName, handler2, logger54, overrides) {
44544
+ function createGatewayHandler(toolName, handler2, logger55, overrides) {
44586
44545
  return async (args) => {
44587
44546
  const params = asRecord2(args);
44588
44547
  const tier = classifyRequestTier(toolName, params, overrides);
44589
44548
  const tierName = TIER_NAMES[tier];
44590
44549
  const startMs = getTimeProvider().now();
44591
- logger54.debug("Gateway dispatch", { tool: toolName, tier, tierName });
44550
+ logger55.debug("Gateway dispatch", { tool: toolName, tier, tierName });
44592
44551
  try {
44593
44552
  const result = await handler2(args);
44594
44553
  const durationMs = getTimeProvider().now() - startMs;
44595
44554
  const success = result.isError !== true;
44596
44555
  const entry = { tool: toolName, tier, tierName, durationMs, success };
44597
44556
  if (success) {
44598
- logger54.info("Gateway completed", { ...entry });
44557
+ logger55.info("Gateway completed", { ...entry });
44599
44558
  } else {
44600
- logger54.warn("Gateway completed with error", { ...entry });
44559
+ logger55.warn("Gateway completed with error", { ...entry });
44601
44560
  }
44602
44561
  return result;
44603
44562
  } catch (error) {
@@ -44609,7 +44568,7 @@ function createGatewayHandler(toolName, handler2, logger54, overrides) {
44609
44568
  durationMs,
44610
44569
  success: false
44611
44570
  };
44612
- logger54.error("Gateway handler threw", error instanceof Error ? error : void 0, {
44571
+ logger55.error("Gateway handler threw", error instanceof Error ? error : void 0, {
44613
44572
  ...entry
44614
44573
  });
44615
44574
  throw error;
@@ -47042,7 +47001,7 @@ var FileAuditStorage = class _FileAuditStorage {
47042
47001
  * @param logger - Optional logger instance
47043
47002
  * @returns Result with FileAuditStorage or SecurityError
47044
47003
  */
47045
- static create(config, logger54) {
47004
+ static create(config, logger55) {
47046
47005
  const validation = config.allowedRoot !== void 0 ? validateLogDir(config.logDir, config.allowedRoot) : validateLogDirBasic(config.logDir);
47047
47006
  if (!validation.ok) {
47048
47007
  return { ok: false, error: validation.error };
@@ -47051,7 +47010,7 @@ var FileAuditStorage = class _FileAuditStorage {
47051
47010
  ...config,
47052
47011
  logDir: validation.value
47053
47012
  };
47054
- return { ok: true, value: new _FileAuditStorage(validatedConfig, logger54, true) };
47013
+ return { ok: true, value: new _FileAuditStorage(validatedConfig, logger55, true) };
47055
47014
  }
47056
47015
  /**
47057
47016
  * Constructor for FileAuditStorage.
@@ -47064,8 +47023,8 @@ var FileAuditStorage = class _FileAuditStorage {
47064
47023
  * @param skipValidation - Internal flag, set by create() after validation
47065
47024
  * @throws SecurityError if path validation fails and skipValidation is false
47066
47025
  */
47067
- constructor(config, logger54, skipValidation = false) {
47068
- this.logger = logger54 ?? createLogger({ component: "FileAuditStorage" });
47026
+ constructor(config, logger55, skipValidation = false) {
47027
+ this.logger = logger55 ?? createLogger({ component: "FileAuditStorage" });
47069
47028
  if (!skipValidation) {
47070
47029
  const validation = validateLogDirBasic(config.logDir);
47071
47030
  if (!validation.ok) {
@@ -47246,13 +47205,13 @@ var AuditLogger = class {
47246
47205
  flushTimer = null;
47247
47206
  flushIntervalMs;
47248
47207
  closed = false;
47249
- constructor(config, storage, logger54) {
47208
+ constructor(config, storage, logger55) {
47250
47209
  const validated = AuditLogConfigSchema.safeParse(config);
47251
47210
  if (!validated.success) {
47252
47211
  const issues = validated.error.issues.map((i) => i.path.join(".") + ": " + i.message).join("; ");
47253
47212
  throw new AuditError("Invalid AuditLogConfig: " + issues);
47254
47213
  }
47255
- this.logger = logger54 ?? createLogger({ component: "AuditLogger" });
47214
+ this.logger = logger55 ?? createLogger({ component: "AuditLogger" });
47256
47215
  this.enableHashChain = validated.data.enableHashChain;
47257
47216
  this.minSeverity = validated.data.minSeverity;
47258
47217
  this.categories = validated.data.categories;
@@ -47425,8 +47384,8 @@ var AuditLogger = class {
47425
47384
  this.logger.info("AuditLogger closed");
47426
47385
  }
47427
47386
  };
47428
- function createAuditLogger(config, storage, logger54) {
47429
- return new AuditLogger(config, storage, logger54);
47387
+ function createAuditLogger(config, storage, logger55) {
47388
+ return new AuditLogger(config, storage, logger55);
47430
47389
  }
47431
47390
 
47432
47391
  // src/security/sandbox/sandbox-types.ts
@@ -49824,6 +49783,73 @@ function createMockExecutor(responses) {
49824
49783
  };
49825
49784
  }
49826
49785
 
49786
+ // src/swe-bench/harness-verify-adapter.ts
49787
+ var logger51 = createLogger({ component: "harness-verify-adapter" });
49788
+ function translateEvaluationResult(result) {
49789
+ const stderr = buildStderr(result);
49790
+ const stdout = buildStdout(result);
49791
+ return {
49792
+ passed: result.resolved,
49793
+ stderr,
49794
+ stdout
49795
+ };
49796
+ }
49797
+ function buildStderr(result) {
49798
+ if (!result.patchApplied) {
49799
+ return `patch does not apply: ${result.patchError ?? "unknown error"}`;
49800
+ }
49801
+ if (result.status === "timeout") {
49802
+ return `Test run timed out after ${String(result.durationMs)}ms`;
49803
+ }
49804
+ if (result.status === "error") {
49805
+ return `Runtime error during evaluation: ${result.patchError ?? "unknown"}`;
49806
+ }
49807
+ const failed = result.testResults.filter((t) => t.status === "failed");
49808
+ if (failed.length === 0) return "";
49809
+ const lines = failed.slice(0, 20).map((t) => `FAILED ${t.testName}${t.errorMessage !== void 0 ? `: ${t.errorMessage}` : ""}`);
49810
+ return lines.join("\n");
49811
+ }
49812
+ function buildStdout(result) {
49813
+ const summary = [
49814
+ `Instance: ${result.instanceId}`,
49815
+ `Status: ${result.status}`,
49816
+ `Patch applied: ${String(result.patchApplied)}`,
49817
+ `Tests: ${String(result.testsPassed)}/${String(result.testsTotal)} passed`,
49818
+ `Duration: ${String(result.durationMs)}ms`
49819
+ ];
49820
+ if (result.testsFailed > 0) summary.push(`Failed: ${String(result.testsFailed)}`);
49821
+ return summary.join("\n");
49822
+ }
49823
+ var HarnessVerifyAdapter = class {
49824
+ constructor(harness, modelNameOrPath, evalConfig) {
49825
+ this.harness = harness;
49826
+ this.modelNameOrPath = modelNameOrPath;
49827
+ this.evalConfig = evalConfig;
49828
+ }
49829
+ async verify(instance2, patch, _workDir) {
49830
+ const prediction = {
49831
+ instance_id: instance2.instance_id,
49832
+ model_name_or_path: this.modelNameOrPath,
49833
+ model_patch: patch
49834
+ };
49835
+ try {
49836
+ const result = await this.harness.evaluateInstance(prediction, this.evalConfig);
49837
+ return translateEvaluationResult(result);
49838
+ } catch (cause) {
49839
+ const msg = cause instanceof Error ? cause.message : String(cause);
49840
+ logger51.warn("Harness verify failed, treating as unresolved", {
49841
+ instanceId: instance2.instance_id,
49842
+ error: msg
49843
+ });
49844
+ return {
49845
+ passed: false,
49846
+ stderr: `Harness evaluation failed: ${msg}`,
49847
+ stdout: ""
49848
+ };
49849
+ }
49850
+ }
49851
+ };
49852
+
49827
49853
  // src/swe-bench/nexus-agent-executor.ts
49828
49854
  var EXECUTOR_DEFAULTS = {
49829
49855
  modelId: getCliModelName(getDefaultModelForCli("claude")),
@@ -50841,8 +50867,8 @@ async function safeExec(command, timeoutMs = COMMAND_TIMEOUT_MS) {
50841
50867
  function bytesToGB(bytes) {
50842
50868
  return (bytes / BYTES_PER_GB).toFixed(1);
50843
50869
  }
50844
- async function validatePython(logger54) {
50845
- const log3 = logger54 ?? createLogger({ component: "environment-validator" });
50870
+ async function validatePython(logger55) {
50871
+ const log3 = logger55 ?? createLogger({ component: "environment-validator" });
50846
50872
  const pythonCommands = ["python3", "python3.11", "python3.10", "python"];
50847
50873
  for (const cmd of pythonCommands) {
50848
50874
  const result = await safeExec(`${cmd} --version`);
@@ -50866,8 +50892,8 @@ async function validatePython(logger54) {
50866
50892
  log3.warn("No compatible Python found (need 3.10 or 3.11)");
50867
50893
  return { available: false };
50868
50894
  }
50869
- async function validateSwebench(logger54) {
50870
- const log3 = logger54 ?? createLogger({ component: "environment-validator" });
50895
+ async function validateSwebench(logger55) {
50896
+ const log3 = logger55 ?? createLogger({ component: "environment-validator" });
50871
50897
  const result = await safeExec('python3 -c "import swebench; print(swebench.__version__)"');
50872
50898
  const importVersion = result?.stdout.trim();
50873
50899
  if (importVersion !== void 0 && importVersion !== "") {
@@ -50887,8 +50913,8 @@ async function validateSwebench(logger54) {
50887
50913
  log3.warn("swebench package not found");
50888
50914
  return { installed: false };
50889
50915
  }
50890
- async function validateDocker(logger54) {
50891
- const log3 = logger54 ?? createLogger({ component: "environment-validator" });
50916
+ async function validateDocker(logger55) {
50917
+ const log3 = logger55 ?? createLogger({ component: "environment-validator" });
50892
50918
  const versionResult = await safeExec('docker version --format "{{.Server.Version}}"');
50893
50919
  if (!versionResult) {
50894
50920
  log3.warn("Docker not available or daemon not running");
@@ -50911,8 +50937,8 @@ async function validateDocker(logger54) {
50911
50937
  log3.warn("Docker daemon not running");
50912
50938
  return { running: false };
50913
50939
  }
50914
- async function validateDiskSpace(logger54) {
50915
- const log3 = logger54 ?? createLogger({ component: "environment-validator" });
50940
+ async function validateDiskSpace(logger55) {
50941
+ const log3 = logger55 ?? createLogger({ component: "environment-validator" });
50916
50942
  const result = await safeExec("df -B1 . | tail -1");
50917
50943
  if (!result) {
50918
50944
  log3.warn("Could not determine disk space");
@@ -50963,8 +50989,8 @@ function collectWarnings(diskSpace) {
50963
50989
  }
50964
50990
 
50965
50991
  // src/swe-bench/environment-validator.ts
50966
- async function validateEnvironment(logger54) {
50967
- const log3 = logger54 ?? createLogger({ component: "environment-validator" });
50992
+ async function validateEnvironment(logger55) {
50993
+ const log3 = logger55 ?? createLogger({ component: "environment-validator" });
50968
50994
  log3.info("Validating SWE-bench environment");
50969
50995
  const [python, swebench, docker, diskSpace] = await Promise.all([
50970
50996
  validatePython(log3),
@@ -51092,7 +51118,7 @@ function mapResolutionStatus(raw) {
51092
51118
  import { exec as exec2 } from "child_process";
51093
51119
  import { promisify as promisify6 } from "util";
51094
51120
  var execAsync2 = promisify6(exec2);
51095
- async function getSwebenchVersion(logger54) {
51121
+ async function getSwebenchVersion(logger55) {
51096
51122
  try {
51097
51123
  const result = await execAsync2(
51098
51124
  `${PYTHON_COMMAND} -c "import swebench; print(swebench.__version__)"`,
@@ -51100,15 +51126,15 @@ async function getSwebenchVersion(logger54) {
51100
51126
  );
51101
51127
  const version = result.stdout.trim();
51102
51128
  if (version) {
51103
- logger54?.debug("swebench version detected", { version });
51129
+ logger55?.debug("swebench version detected", { version });
51104
51130
  return version;
51105
51131
  }
51106
51132
  } catch (err2) {
51107
- logger54?.debug("Failed to get swebench version", { error: String(err2) });
51133
+ logger55?.debug("Failed to get swebench version", { error: String(err2) });
51108
51134
  }
51109
51135
  return null;
51110
51136
  }
51111
- async function getPythonVersion(logger54) {
51137
+ async function getPythonVersion(logger55) {
51112
51138
  try {
51113
51139
  const result = await execAsync2(`${PYTHON_COMMAND} --version`, {
51114
51140
  timeout: QUICK_COMMAND_TIMEOUT_MS,
@@ -51116,15 +51142,15 @@ async function getPythonVersion(logger54) {
51116
51142
  });
51117
51143
  const match = result.stdout.trim().match(/Python\s+(\d+\.\d+\.\d+)/);
51118
51144
  if (match?.[1] !== void 0) {
51119
- logger54?.debug("Python version detected", { version: match[1] });
51145
+ logger55?.debug("Python version detected", { version: match[1] });
51120
51146
  return match[1];
51121
51147
  }
51122
51148
  } catch (err2) {
51123
- logger54?.debug("Failed to get Python version", { error: String(err2) });
51149
+ logger55?.debug("Failed to get Python version", { error: String(err2) });
51124
51150
  }
51125
51151
  return null;
51126
51152
  }
51127
- async function getDockerVersion(logger54) {
51153
+ async function getDockerVersion(logger55) {
51128
51154
  try {
51129
51155
  const result = await execAsync2('docker version --format "{{.Server.Version}}"', {
51130
51156
  timeout: QUICK_COMMAND_TIMEOUT_MS,
@@ -51132,27 +51158,27 @@ async function getDockerVersion(logger54) {
51132
51158
  });
51133
51159
  const version = result.stdout.trim();
51134
51160
  if (version) {
51135
- logger54?.debug("Docker version detected", { version });
51161
+ logger55?.debug("Docker version detected", { version });
51136
51162
  return version;
51137
51163
  }
51138
51164
  } catch (err2) {
51139
- logger54?.debug("Failed to get Docker version", { error: String(err2) });
51165
+ logger55?.debug("Failed to get Docker version", { error: String(err2) });
51140
51166
  }
51141
51167
  return null;
51142
51168
  }
51143
51169
 
51144
51170
  // src/swe-bench/harness-output-parsing.ts
51145
51171
  import * as fs12 from "fs/promises";
51146
- function parseHarnessOutput(output2, logger54) {
51172
+ function parseHarnessOutput(output2, logger55) {
51147
51173
  try {
51148
51174
  const parsed = JSON.parse(output2);
51149
51175
  if (!isValidHarnessOutput(parsed)) {
51150
- logger54?.warn("Invalid harness output structure");
51176
+ logger55?.warn("Invalid harness output structure");
51151
51177
  return null;
51152
51178
  }
51153
51179
  return parsed;
51154
51180
  } catch (err2) {
51155
- logger54?.warn("Failed to parse harness output", { error: String(err2) });
51181
+ logger55?.warn("Failed to parse harness output", { error: String(err2) });
51156
51182
  return null;
51157
51183
  }
51158
51184
  }
@@ -51161,12 +51187,12 @@ function isValidHarnessOutput(obj) {
51161
51187
  const o = obj;
51162
51188
  return typeof o.run_id === "string" && typeof o.dataset_name === "string" && typeof o.model_name_or_path === "string" && Array.isArray(o.instance_results);
51163
51189
  }
51164
- async function parseHarnessLogFile(logPath, logger54) {
51190
+ async function parseHarnessLogFile(logPath, logger55) {
51165
51191
  try {
51166
51192
  const content = await fs12.readFile(logPath, "utf-8");
51167
- return parseHarnessOutput(content, logger54);
51193
+ return parseHarnessOutput(content, logger55);
51168
51194
  } catch (err2) {
51169
- logger54?.warn("Failed to read harness log file", { logPath, error: String(err2) });
51195
+ logger55?.warn("Failed to read harness log file", { logPath, error: String(err2) });
51170
51196
  return null;
51171
51197
  }
51172
51198
  }
@@ -51286,7 +51312,7 @@ function countValidPredictions(content) {
51286
51312
  const lines = content.trim().split("\n").filter(Boolean);
51287
51313
  return lines.filter(isValidPredictionLine).length;
51288
51314
  }
51289
- async function validatePredictionsFile(predictionsPath, logger54) {
51315
+ async function validatePredictionsFile(predictionsPath, logger55) {
51290
51316
  try {
51291
51317
  const stat5 = await fs13.stat(predictionsPath);
51292
51318
  if (!stat5.isFile()) {
@@ -51297,19 +51323,19 @@ async function validatePredictionsFile(predictionsPath, logger54) {
51297
51323
  if (validCount === 0) {
51298
51324
  return { valid: false, lineCount: 0, error: "No valid predictions found" };
51299
51325
  }
51300
- logger54?.debug("Predictions file validated", { lineCount: validCount, path: predictionsPath });
51326
+ logger55?.debug("Predictions file validated", { lineCount: validCount, path: predictionsPath });
51301
51327
  return { valid: true, lineCount: validCount };
51302
51328
  } catch (err2) {
51303
51329
  const errorMsg = err2 instanceof Error ? err2.message : String(err2);
51304
51330
  return { valid: false, lineCount: 0, error: errorMsg };
51305
51331
  }
51306
51332
  }
51307
- async function ensureOutputDir(outputDir, logger54) {
51333
+ async function ensureOutputDir(outputDir, logger55) {
51308
51334
  try {
51309
51335
  await fs13.mkdir(outputDir, { recursive: true });
51310
- logger54?.debug("Output directory ensured", { path: outputDir });
51336
+ logger55?.debug("Output directory ensured", { path: outputDir });
51311
51337
  } catch (err2) {
51312
- logger54?.warn("Failed to create output directory", { path: outputDir, error: String(err2) });
51338
+ logger55?.warn("Failed to create output directory", { path: outputDir, error: String(err2) });
51313
51339
  throw new HarnessExecutorError(
51314
51340
  `Failed to create output directory: ${outputDir}`,
51315
51341
  "EXECUTION_FAILED",
@@ -51317,10 +51343,10 @@ async function ensureOutputDir(outputDir, logger54) {
51317
51343
  );
51318
51344
  }
51319
51345
  }
51320
- function spawnHarnessProcess(config, logger54) {
51346
+ function spawnHarnessProcess(config, logger55) {
51321
51347
  const args = [HARNESS_SCRIPT.split(" ")[0] ?? "-m", ...HARNESS_SCRIPT.split(" ").slice(1)];
51322
51348
  args.push(...buildHarnessArgs(config));
51323
- logger54?.info("Spawning harness process", { command: PYTHON_COMMAND, args });
51349
+ logger55?.info("Spawning harness process", { command: PYTHON_COMMAND, args });
51324
51350
  const proc = spawn(PYTHON_COMMAND, args, {
51325
51351
  stdio: ["ignore", "pipe", "pipe"],
51326
51352
  env: { ...process.env }
@@ -51408,20 +51434,20 @@ function handleProcessClose(options) {
51408
51434
  }
51409
51435
  });
51410
51436
  }
51411
- async function handleProcessExitAsync(code, config, stderr, logger54) {
51437
+ async function handleProcessExitAsync(code, config, stderr, logger55) {
51412
51438
  if (code !== 0) {
51413
- logger54.error("Harness process failed", new Error(stderr), { exitCode: code });
51439
+ logger55.error("Harness process failed", new Error(stderr), { exitCode: code });
51414
51440
  throw new HarnessExecutorError(
51415
51441
  `Harness process exited with code ${String(code)}`,
51416
51442
  "EXECUTION_FAILED"
51417
51443
  );
51418
51444
  }
51419
- return parseResultsFile(config, logger54);
51445
+ return parseResultsFile(config, logger55);
51420
51446
  }
51421
- async function parseResultsFile(config, logger54) {
51447
+ async function parseResultsFile(config, logger55) {
51422
51448
  const resultsPath = getResultsFilePath(config);
51423
- logger54.info("Parsing results file", { path: resultsPath });
51424
- const rawOutput = await parseHarnessLogFile(resultsPath, logger54);
51449
+ logger55.info("Parsing results file", { path: resultsPath });
51450
+ const rawOutput = await parseHarnessLogFile(resultsPath, logger55);
51425
51451
  if (rawOutput === null) {
51426
51452
  throw new HarnessExecutorError(`Failed to parse results from: ${resultsPath}`, "PARSE_ERROR");
51427
51453
  }
@@ -51479,8 +51505,8 @@ var HarnessExecutor = class {
51479
51505
  logger;
51480
51506
  currentProcess = null;
51481
51507
  isCancelled = false;
51482
- constructor(logger54) {
51483
- this.logger = logger54 ?? createLogger({ component: "harness-executor" });
51508
+ constructor(logger55) {
51509
+ this.logger = logger55 ?? createLogger({ component: "harness-executor" });
51484
51510
  }
51485
51511
  /**
51486
51512
  * Validates that the environment is ready for harness execution.
@@ -51632,11 +51658,11 @@ var HarnessExecutor = class {
51632
51658
  };
51633
51659
 
51634
51660
  // src/swe-bench/harness-executor-factory.ts
51635
- function createHarnessExecutor(logger54) {
51636
- return new HarnessExecutor(logger54);
51661
+ function createHarnessExecutor(logger55) {
51662
+ return new HarnessExecutor(logger55);
51637
51663
  }
51638
- async function createValidatedExecutor(logger54) {
51639
- const executor = createHarnessExecutor(logger54);
51664
+ async function createValidatedExecutor(logger55) {
51665
+ const executor = createHarnessExecutor(logger55);
51640
51666
  const validation = await executor.validate();
51641
51667
  return { executor, validation };
51642
51668
  }
@@ -51756,8 +51782,8 @@ var EvaluationHarness = class {
51756
51782
  logger;
51757
51783
  executor;
51758
51784
  isCancelled = false;
51759
- constructor(logger54) {
51760
- this.logger = logger54 ?? createLogger({ component: "evaluation-harness" });
51785
+ constructor(logger55) {
51786
+ this.logger = logger55 ?? createLogger({ component: "evaluation-harness" });
51761
51787
  this.executor = createHarnessExecutor(this.logger);
51762
51788
  }
51763
51789
  /**
@@ -51917,11 +51943,11 @@ var EvaluationHarness = class {
51917
51943
  return returnValue;
51918
51944
  }
51919
51945
  };
51920
- function createEvaluationHarness(logger54) {
51921
- return new EvaluationHarness(logger54);
51946
+ function createEvaluationHarness(logger55) {
51947
+ return new EvaluationHarness(logger55);
51922
51948
  }
51923
- async function createValidatedHarness(logger54) {
51924
- const harness = createEvaluationHarness(logger54);
51949
+ async function createValidatedHarness(logger55) {
51950
+ const harness = createEvaluationHarness(logger55);
51925
51951
  const validation = await harness.validate();
51926
51952
  if (!validation.ready) {
51927
51953
  return err(
@@ -52176,9 +52202,9 @@ function handlePatchError(err2, options) {
52176
52202
  backupCreated: options.createBackup && !options.dryRun
52177
52203
  };
52178
52204
  }
52179
- async function executePatch(patchPath, options, reverse, logger54) {
52205
+ async function executePatch(patchPath, options, reverse, logger55) {
52180
52206
  const args = buildPatchArgs(patchPath, options, reverse);
52181
- logger54.debug("Executing patch command", { args, cwd: options.workDir });
52207
+ logger55.debug("Executing patch command", { args, cwd: options.workDir });
52182
52208
  try {
52183
52209
  const { stdout, stderr } = await execFileAsync5("patch", args, {
52184
52210
  cwd: options.workDir,
@@ -52210,8 +52236,8 @@ ${stderr}`.trim();
52210
52236
  // src/swe-bench/patch-applicator.ts
52211
52237
  var PatchApplicator = class {
52212
52238
  logger;
52213
- constructor(logger54) {
52214
- this.logger = logger54 ?? createLogger({ component: "patch-applicator" });
52239
+ constructor(logger55) {
52240
+ this.logger = logger55 ?? createLogger({ component: "patch-applicator" });
52215
52241
  }
52216
52242
  /**
52217
52243
  * Validates a patch without applying it.
@@ -52287,8 +52313,8 @@ var PatchApplicator = class {
52287
52313
  };
52288
52314
  }
52289
52315
  };
52290
- function createPatchApplicator(logger54) {
52291
- return new PatchApplicator(logger54);
52316
+ function createPatchApplicator(logger55) {
52317
+ return new PatchApplicator(logger55);
52292
52318
  }
52293
52319
  function validatePatch(patch) {
52294
52320
  return parsePatch(patch);
@@ -52487,9 +52513,9 @@ function attachOutputCapture(proc, maxOutputBytes) {
52487
52513
  };
52488
52514
  }
52489
52515
  function executeInDocker(options) {
52490
- const { command, config, startTime, state, createCancelledResult: createCancelledResult2, handleTestError, logger: logger54 } = options;
52516
+ const { command, config, startTime, state, createCancelledResult: createCancelledResult2, handleTestError, logger: logger55 } = options;
52491
52517
  const image = config.dockerImage ?? "python:3.11-slim";
52492
- logger54.debug("Executing tests in Docker", { image, command });
52518
+ logger55.debug("Executing tests in Docker", { image, command });
52493
52519
  const dockerArgs = buildDockerArgs(command, config, image);
52494
52520
  return new Promise((resolve18) => {
52495
52521
  const proc = spawn2("docker", dockerArgs, {
@@ -52546,8 +52572,8 @@ var TestRunner = class {
52546
52572
  currentProcess: null,
52547
52573
  isCancelled: false
52548
52574
  };
52549
- constructor(logger54) {
52550
- this.logger = logger54 ?? createLogger({ component: "test-runner" });
52575
+ constructor(logger55) {
52576
+ this.logger = logger55 ?? createLogger({ component: "test-runner" });
52551
52577
  }
52552
52578
  /**
52553
52579
  * Detects the test framework used by the repository.
@@ -52768,8 +52794,8 @@ ${stderr}`.trim();
52768
52794
  };
52769
52795
  }
52770
52796
  };
52771
- function createTestRunner(logger54) {
52772
- return new TestRunner(logger54);
52797
+ function createTestRunner(logger55) {
52798
+ return new TestRunner(logger55);
52773
52799
  }
52774
52800
  async function runTests(workDir, options) {
52775
52801
  const runner = createTestRunner();
@@ -53078,8 +53104,8 @@ function identifyWeaknesses(result, competitors) {
53078
53104
  // src/swe-bench/report-generator.ts
53079
53105
  var ReportGenerator = class {
53080
53106
  logger;
53081
- constructor(logger54) {
53082
- this.logger = logger54 ?? createLogger({ component: "report-generator" });
53107
+ constructor(logger55) {
53108
+ this.logger = logger55 ?? createLogger({ component: "report-generator" });
53083
53109
  }
53084
53110
  /**
53085
53111
  * Generates a full evaluation report.
@@ -53342,8 +53368,8 @@ var ReportGenerator = class {
53342
53368
  };
53343
53369
  }
53344
53370
  };
53345
- function createReportGenerator(logger54) {
53346
- return new ReportGenerator(logger54);
53371
+ function createReportGenerator(logger55) {
53372
+ return new ReportGenerator(logger55);
53347
53373
  }
53348
53374
  async function generateReport(result, config, competitors) {
53349
53375
  const generator = createReportGenerator();
@@ -53490,7 +53516,7 @@ var TraceLogger = class {
53490
53516
  };
53491
53517
 
53492
53518
  // src/pipeline/event-bus-bridge.ts
53493
- var logger51 = createLogger({ component: "EventBusBridge" });
53519
+ var logger52 = createLogger({ component: "EventBusBridge" });
53494
53520
  function toV1Topic(prefix, event) {
53495
53521
  return `${prefix}.${event.type}`;
53496
53522
  }
@@ -53522,10 +53548,10 @@ function createEventBusBridge(options) {
53522
53548
  forwardCount++;
53523
53549
  } catch (error) {
53524
53550
  const msg = getErrorMessage(error);
53525
- logger51.warn("Failed to forward pipeline event", { type: event.type, error: msg });
53551
+ logger52.warn("Failed to forward pipeline event", { type: event.type, error: msg });
53526
53552
  }
53527
53553
  });
53528
- logger51.info("EventBus bridge initialized", { prefix });
53554
+ logger52.info("EventBus bridge initialized", { prefix });
53529
53555
  return {
53530
53556
  forwarded: () => forwardCount,
53531
53557
  dispose: unsub
@@ -53533,7 +53559,7 @@ function createEventBusBridge(options) {
53533
53559
  }
53534
53560
 
53535
53561
  // src/adapters/stdin-lifecycle.ts
53536
- var logger52 = createLogger({ component: "StdinLifecycleMonitor" });
53562
+ var logger53 = createLogger({ component: "StdinLifecycleMonitor" });
53537
53563
  var StdinLifecycleMonitor = class {
53538
53564
  callbacks = /* @__PURE__ */ new Set();
53539
53565
  started = false;
@@ -53558,7 +53584,7 @@ var StdinLifecycleMonitor = class {
53558
53584
  try {
53559
53585
  await cb();
53560
53586
  } catch (error) {
53561
- logger52.warn("Stdin shutdown callback failed", { error: String(error) });
53587
+ logger53.warn("Stdin shutdown callback failed", { error: String(error) });
53562
53588
  }
53563
53589
  }
53564
53590
  }
@@ -53572,7 +53598,7 @@ function getStdinLifecycleMonitor() {
53572
53598
  // src/pipeline/task-tracker.ts
53573
53599
  import * as fs18 from "fs";
53574
53600
  import * as path19 from "path";
53575
- var logger53 = createLogger({ component: "task-tracker" });
53601
+ var logger54 = createLogger({ component: "task-tracker" });
53576
53602
  async function exec4(cmd, args, timeout = 15e3) {
53577
53603
  const { execFile: execFile6 } = await import("child_process");
53578
53604
  const { promisify: promisify9 } = await import("util");
@@ -53598,7 +53624,7 @@ var GitHubTaskTracker = class {
53598
53624
  const result = await provider.createIssue(title, body, this.config.labels);
53599
53625
  if (!result.ok) throw new Error("Failed to create issue");
53600
53626
  const id = String(result.value.number);
53601
- logger53.info("Created GitHub issue via SCM provider", { id });
53627
+ logger54.info("Created GitHub issue via SCM provider", { id });
53602
53628
  return { id, title, status: "open", url: result.value.url };
53603
53629
  }
53604
53630
  async updateStatus(taskId, status) {
@@ -53626,7 +53652,7 @@ var GitLabTaskTracker = class {
53626
53652
  );
53627
53653
  const match = /\/(\d+)$/.exec(url);
53628
53654
  const id = match?.[1] ?? url;
53629
- logger53.info("Created GitLab issue", { id, url });
53655
+ logger54.info("Created GitLab issue", { id, url });
53630
53656
  return { id, title, status: "open", url };
53631
53657
  }
53632
53658
  async updateStatus(taskId, status) {
@@ -54332,6 +54358,8 @@ export {
54332
54358
  AgentRunnerError,
54333
54359
  runAgentOnInstance,
54334
54360
  createMockExecutor,
54361
+ translateEvaluationResult,
54362
+ HarnessVerifyAdapter,
54335
54363
  NexusAgentExecutor,
54336
54364
  createNexusExecutorFromEnv,
54337
54365
  CliAgentExecutor,
@@ -54427,4 +54455,4 @@ export {
54427
54455
  detectBackend,
54428
54456
  createTaskTracker
54429
54457
  };
54430
- //# sourceMappingURL=chunk-UXRR7M6E.js.map
54458
+ //# sourceMappingURL=chunk-B6AFGOS5.js.map