nexus-agents 2.88.1 → 2.89.1

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.
@@ -42,7 +42,7 @@ import {
42
42
  writeJobComplete,
43
43
  writeJobFailed,
44
44
  writeJobPending
45
- } from "./chunk-QA6YV4YF.js";
45
+ } from "./chunk-7QTWFRHH.js";
46
46
  import {
47
47
  REGISTRY_PATH,
48
48
  getProjectRoot,
@@ -82,7 +82,7 @@ import {
82
82
  DEFAULT_TASK_TTL_MS,
83
83
  DEFAULT_TOOL_RATE_LIMITS,
84
84
  clampTaskTtl
85
- } from "./chunk-VTVZRR5E.js";
85
+ } from "./chunk-MXHJMSYQ.js";
86
86
  import {
87
87
  getAvailabilityCache,
88
88
  resolveFallback
@@ -1116,12 +1116,12 @@ function removeItemsDirectly(items, targetTokens, manager) {
1116
1116
  };
1117
1117
  }
1118
1118
  async function summarizeAndRemoveItems(options) {
1119
- const { items, targetTokens, manager, adapter, logger: logger54, customPrompt } = options;
1119
+ const { items, targetTokens, manager, adapter, logger: logger55, customPrompt } = options;
1120
1120
  const content = items.map((item) => item.content).join("\n\n---\n\n");
1121
1121
  const prompt = customPrompt ?? SLIDING_WINDOW_PROMPT;
1122
1122
  const summaryResult = await generateSummary(content, prompt, adapter);
1123
1123
  if (!summaryResult.ok) {
1124
- logger54.warn("Summarization failed, removing items without summary");
1124
+ logger55.warn("Summarization failed, removing items without summary");
1125
1125
  return removeItemsDirectly(items, targetTokens, manager);
1126
1126
  }
1127
1127
  let tokensFreed = 0;
@@ -1134,7 +1134,7 @@ async function summarizeAndRemoveItems(options) {
1134
1134
  if (summaryAddResult.item !== void 0) {
1135
1135
  tokensFreed -= summaryAddResult.tokenCount;
1136
1136
  }
1137
- logger54.info("Summarization pruning completed", {
1137
+ logger55.info("Summarization pruning completed", {
1138
1138
  summarizedItems: items.length,
1139
1139
  tokensFreed,
1140
1140
  targetReached: tokensFreed >= targetTokens
@@ -1192,7 +1192,7 @@ function scoreByPriorityWeightedAge(candidates) {
1192
1192
  return scores.map((s) => s.item);
1193
1193
  }
1194
1194
  function removeItemsToTarget(options) {
1195
- const { sortedItems, targetTokens, categories, manager, minItemsPerCategory, logger: logger54 } = options;
1195
+ const { sortedItems, targetTokens, categories, manager, minItemsPerCategory, logger: logger55 } = options;
1196
1196
  const categoryRemaining = /* @__PURE__ */ new Map();
1197
1197
  for (const category of categories) {
1198
1198
  categoryRemaining.set(category, manager.getByCategory(category).length);
@@ -1209,7 +1209,7 @@ function removeItemsToTarget(options) {
1209
1209
  categoryRemaining.set(item.category, remaining - 1);
1210
1210
  }
1211
1211
  const targetReached = tokensFreed >= targetTokens;
1212
- logger54.info("Pruning completed", {
1212
+ logger55.info("Pruning completed", {
1213
1213
  itemsRemoved: removedItems.length,
1214
1214
  tokensFreed,
1215
1215
  targetTokens,
@@ -1672,7 +1672,7 @@ function generateBudgetWarning(utilizationPercent, tokensUsed, budgetLimit, scop
1672
1672
  scope
1673
1673
  };
1674
1674
  }
1675
- function logBudgetWarning(warning, logger54) {
1675
+ function logBudgetWarning(warning, logger55) {
1676
1676
  const context = {
1677
1677
  scope: warning.scope,
1678
1678
  usagePercent: Math.round(warning.usagePercent),
@@ -1681,13 +1681,13 @@ function logBudgetWarning(warning, logger54) {
1681
1681
  };
1682
1682
  switch (warning.level) {
1683
1683
  case "critical":
1684
- logger54.warn(warning.message, context);
1684
+ logger55.warn(warning.message, context);
1685
1685
  break;
1686
1686
  case "warning":
1687
- logger54.warn(warning.message, context);
1687
+ logger55.warn(warning.message, context);
1688
1688
  break;
1689
1689
  case "info":
1690
- logger54.info(warning.message, context);
1690
+ logger55.info(warning.message, context);
1691
1691
  break;
1692
1692
  }
1693
1693
  }
@@ -1743,8 +1743,8 @@ function createHardModeResult(params) {
1743
1743
  )
1744
1744
  };
1745
1745
  }
1746
- function logWarnModeExceeded(params, logger54) {
1747
- logger54.warn("Token budget would be exceeded (warn mode - continuing)", {
1746
+ function logWarnModeExceeded(params, logger55) {
1747
+ logger55.warn("Token budget would be exceeded (warn mode - continuing)", {
1748
1748
  exceedsSession: params.exceedsSession,
1749
1749
  exceedsTask: params.exceedsTask,
1750
1750
  estimatedTokens: params.estimatedTokens,
@@ -1773,9 +1773,9 @@ var TokenBudgetTracker = class {
1773
1773
  * @param config - Token budget configuration
1774
1774
  * @param logger - Optional logger instance
1775
1775
  */
1776
- constructor(config = {}, logger54) {
1776
+ constructor(config = {}, logger55) {
1777
1777
  this.config = { ...DEFAULT_TOKEN_BUDGET_CONFIG, ...config };
1778
- this.logger = logger54 ?? createLogger({ component: "token-budget-tracker" });
1778
+ this.logger = logger55 ?? createLogger({ component: "token-budget-tracker" });
1779
1779
  }
1780
1780
  /**
1781
1781
  * Check if an operation is within budget.
@@ -1928,7 +1928,7 @@ var TokenBudgetTracker = class {
1928
1928
 
1929
1929
  // src/agents/base-agent-state-helpers.ts
1930
1930
  function transitionToState(params) {
1931
- const { stateMachine, logger: logger54, newState } = params;
1931
+ const { stateMachine, logger: logger55, newState } = params;
1932
1932
  const currentState = stateMachine.state;
1933
1933
  if (newState === "error") {
1934
1934
  stateMachine.forceError({ reason: "transitionToState called with error" });
@@ -1938,7 +1938,7 @@ function transitionToState(params) {
1938
1938
  if (event !== void 0 && stateMachine.canTransition(event)) {
1939
1939
  const result = stateMachine.transition(event);
1940
1940
  if (!result.ok) {
1941
- logger54.warn("State transition failed", {
1941
+ logger55.warn("State transition failed", {
1942
1942
  from: currentState,
1943
1943
  to: newState,
1944
1944
  event,
@@ -1946,7 +1946,7 @@ function transitionToState(params) {
1946
1946
  });
1947
1947
  }
1948
1948
  } else if (currentState !== newState) {
1949
- logger54.debug("Unmapped state change", { from: currentState, to: newState });
1949
+ logger55.debug("Unmapped state change", { from: currentState, to: newState });
1950
1950
  }
1951
1951
  }
1952
1952
 
@@ -2102,7 +2102,7 @@ function getAgentStateKey(agentId) {
2102
2102
  }
2103
2103
 
2104
2104
  // src/agents/memory-operations.ts
2105
- async function persistMemoryState(backend, state, logger54) {
2105
+ async function persistMemoryState(backend, state, logger55) {
2106
2106
  const key = getAgentStateKey(state.agentId);
2107
2107
  const metadata = {
2108
2108
  importance: MemoryImportance.HIGH,
@@ -2114,12 +2114,12 @@ async function persistMemoryState(backend, state, logger54) {
2114
2114
  };
2115
2115
  const result = await backend.store(key, updatedState, metadata);
2116
2116
  if (!result.ok) {
2117
- logger54.error("Failed to persist agent memory state", result.error, { agentId: state.agentId });
2117
+ logger55.error("Failed to persist agent memory state", result.error, { agentId: state.agentId });
2118
2118
  return err(
2119
2119
  new AgentMemoryError("Failed to persist memory state", { error: result.error.message })
2120
2120
  );
2121
2121
  }
2122
- logger54.debug("Persisted agent memory state", {
2122
+ logger55.debug("Persisted agent memory state", {
2123
2123
  agentId: state.agentId,
2124
2124
  learningsCount: state.taskLearnings.length,
2125
2125
  patternsCount: state.executionPatterns.length,
@@ -2127,16 +2127,16 @@ async function persistMemoryState(backend, state, logger54) {
2127
2127
  });
2128
2128
  return ok(void 0);
2129
2129
  }
2130
- async function loadMemoryState(backend, agentId, role, logger54) {
2130
+ async function loadMemoryState(backend, agentId, role, logger55) {
2131
2131
  const key = getAgentStateKey(agentId);
2132
2132
  const result = await backend.retrieve(key);
2133
2133
  if (!result.ok) {
2134
- logger54.debug("No existing memory state found, creating fresh state", { agentId });
2134
+ logger55.debug("No existing memory state found, creating fresh state", { agentId });
2135
2135
  return ok(createInitialMemoryState(agentId, role));
2136
2136
  }
2137
2137
  const loaded = result.value;
2138
2138
  if (loaded === null || typeof loaded !== "object") {
2139
- logger54.warn("Invalid memory state format, creating fresh state", { agentId });
2139
+ logger55.warn("Invalid memory state format, creating fresh state", { agentId });
2140
2140
  return ok(createInitialMemoryState(agentId, role));
2141
2141
  }
2142
2142
  const state = {
@@ -2147,7 +2147,7 @@ async function loadMemoryState(backend, agentId, role, logger54) {
2147
2147
  executionPatterns: Array.isArray(loaded.executionPatterns) ? loaded.executionPatterns : [],
2148
2148
  errorResolutions: Array.isArray(loaded.errorResolutions) ? loaded.errorResolutions : []
2149
2149
  };
2150
- logger54.debug("Loaded agent memory state", {
2150
+ logger55.debug("Loaded agent memory state", {
2151
2151
  agentId,
2152
2152
  learningsCount: state.taskLearnings.length,
2153
2153
  patternsCount: state.executionPatterns.length,
@@ -2155,13 +2155,13 @@ async function loadMemoryState(backend, agentId, role, logger54) {
2155
2155
  });
2156
2156
  return ok(state);
2157
2157
  }
2158
- async function loadRelevantTypedMemories(typedMemory, role, limit, logger54) {
2158
+ async function loadRelevantTypedMemories(typedMemory, role, limit, logger55) {
2159
2159
  const result = await typedMemory.filterByRelevance(role, limit);
2160
2160
  if (!result.ok) {
2161
- logger54.warn("Failed to load relevant typed memories", { role, error: result.error.message });
2161
+ logger55.warn("Failed to load relevant typed memories", { role, error: result.error.message });
2162
2162
  return result;
2163
2163
  }
2164
- logger54.debug("Loaded relevant typed memories", {
2164
+ logger55.debug("Loaded relevant typed memories", {
2165
2165
  role,
2166
2166
  count: result.value.length,
2167
2167
  types: [...new Set(result.value.map((e) => e.type))]
@@ -2275,10 +2275,10 @@ function initializeMemoryInfrastructure(options) {
2275
2275
 
2276
2276
  // src/agents/base-agent-constructor-helpers.ts
2277
2277
  function setupStateMachine(params) {
2278
- const { agentId, logger: logger54, eventBus, options } = params;
2278
+ const { agentId, logger: logger55, eventBus, options } = params;
2279
2279
  const stateMachine = new AgentStateMachine(options);
2280
2280
  stateMachine.onStateChange((transition) => {
2281
- logger54.debug("State transition", {
2281
+ logger55.debug("State transition", {
2282
2282
  from: transition.from,
2283
2283
  to: transition.to,
2284
2284
  event: transition.event
@@ -2292,9 +2292,9 @@ function setupStateMachine(params) {
2292
2292
  return stateMachine;
2293
2293
  }
2294
2294
  function initializeInfrastructure(params) {
2295
- const { agentId, role, logger: logger54, adapter, pruningConfig, memoryConfig } = params;
2295
+ const { agentId, role, logger: logger55, adapter, pruningConfig, memoryConfig } = params;
2296
2296
  const pruningOpts = {
2297
- logger: logger54,
2297
+ logger: logger55,
2298
2298
  ...pruningConfig !== void 0 ? { config: pruningConfig } : {},
2299
2299
  ...adapter !== void 0 ? { adapter } : {}
2300
2300
  };
@@ -2302,7 +2302,7 @@ function initializeInfrastructure(params) {
2302
2302
  const memoryOpts = {
2303
2303
  agentId,
2304
2304
  role,
2305
- logger: logger54,
2305
+ logger: logger55,
2306
2306
  ...memoryConfig !== void 0 ? { config: memoryConfig } : {}
2307
2307
  };
2308
2308
  const memory = initializeMemoryInfrastructure(memoryOpts);
@@ -2534,14 +2534,14 @@ function transformTaskError(error, agentId, taskId) {
2534
2534
  return new AgentError(`Task execution failed: ${message}`, opts);
2535
2535
  }
2536
2536
  function finalizeTaskSuccess(params) {
2537
- const { task, result, startTime, stateMachine, budgetTracker, logger: logger54 } = params;
2537
+ const { task, result, startTime, stateMachine, budgetTracker, logger: logger55 } = params;
2538
2538
  const durationMs = getTimeProvider().now() - startTime;
2539
2539
  if (stateMachine.state === "thinking") {
2540
2540
  stateMachine.transition("plan_completed", { taskId: task.id });
2541
2541
  }
2542
2542
  stateMachine.transition("task_completed", { taskId: task.id, durationMs });
2543
2543
  const budgetStats = budgetTracker.endTask();
2544
- logger54.info("Task completed", {
2544
+ logger55.info("Task completed", {
2545
2545
  taskId: task.id,
2546
2546
  durationMs,
2547
2547
  tokensUsed: result.metadata.tokensUsed,
@@ -2569,7 +2569,7 @@ function recordFailedTaskError(params) {
2569
2569
  });
2570
2570
  }
2571
2571
  async function persistMemoryAfterTask(params) {
2572
- const { memoryEnabled, memoryBackend, memoryState, persistenceMode, task, startTime, logger: logger54 } = params;
2572
+ const { memoryEnabled, memoryBackend, memoryState, persistenceMode, task, startTime, logger: logger55 } = params;
2573
2573
  if (!memoryEnabled || memoryState === null) {
2574
2574
  return memoryState;
2575
2575
  }
@@ -2584,9 +2584,9 @@ async function persistMemoryAfterTask(params) {
2584
2584
  successRate
2585
2585
  });
2586
2586
  if (memoryBackend !== void 0) {
2587
- await persistMemoryState(memoryBackend, updatedState, logger54);
2587
+ await persistMemoryState(memoryBackend, updatedState, logger55);
2588
2588
  }
2589
- logger54.debug("Memory persisted after task completion", {
2589
+ logger55.debug("Memory persisted after task completion", {
2590
2590
  taskId: task.id,
2591
2591
  durationMs
2592
2592
  });
@@ -2597,15 +2597,15 @@ function categorizeTaskType(description2) {
2597
2597
  return categorizeTaskByKeywords(desc);
2598
2598
  }
2599
2599
  async function persistMemoryOnCleanup(params) {
2600
- const { memoryEnabled, memoryBackend, memoryState, persistenceMode, logger: logger54 } = params;
2600
+ const { memoryEnabled, memoryBackend, memoryState, persistenceMode, logger: logger55 } = params;
2601
2601
  if (!memoryEnabled || memoryBackend === void 0 || memoryState === null) {
2602
2602
  return;
2603
2603
  }
2604
2604
  if (persistenceMode === "none") {
2605
2605
  return;
2606
2606
  }
2607
- await persistMemoryState(memoryBackend, memoryState, logger54);
2608
- logger54.debug("Memory state persisted during cleanup");
2607
+ await persistMemoryState(memoryBackend, memoryState, logger55);
2608
+ logger55.debug("Memory state persisted during cleanup");
2609
2609
  }
2610
2610
 
2611
2611
  // src/agents/base-agent-execute-flow.ts
@@ -2748,14 +2748,14 @@ function createInitialPruningMetrics() {
2748
2748
 
2749
2749
  // src/agents/base-agent-memory-ops.ts
2750
2750
  async function flushMemoryState(params) {
2751
- const { memoryEnabled, memoryBackend, memoryState, logger: logger54 } = params;
2751
+ const { memoryEnabled, memoryBackend, memoryState, logger: logger55 } = params;
2752
2752
  if (!memoryEnabled) {
2753
2753
  return ok(void 0);
2754
2754
  }
2755
2755
  if (memoryBackend === void 0 || memoryState === null) {
2756
2756
  return ok(void 0);
2757
2757
  }
2758
- return persistMemoryState(memoryBackend, memoryState, logger54);
2758
+ return persistMemoryState(memoryBackend, memoryState, logger55);
2759
2759
  }
2760
2760
  function recordLearningToState(params) {
2761
2761
  const { memoryEnabled, memoryState, learning } = params;
@@ -4018,13 +4018,13 @@ function shouldFinalize(pattern, participants, results, votes, reviews) {
4018
4018
 
4019
4019
  // src/agents/collaboration/collaboration-session-helpers.ts
4020
4020
  var MAX_EVENT_LISTENERS = 50;
4021
- function emitEventToListeners(listeners, event, logger54) {
4021
+ function emitEventToListeners(listeners, event, logger55) {
4022
4022
  for (const listener of listeners) {
4023
4023
  try {
4024
4024
  listener(event);
4025
4025
  } catch (e) {
4026
4026
  const errorObj = e instanceof Error ? e : new Error(String(e));
4027
- logger54.error("Event listener error", errorObj, { eventType: event.type });
4027
+ logger55.error("Event listener error", errorObj, { eventType: event.type });
4028
4028
  }
4029
4029
  }
4030
4030
  }
@@ -7699,9 +7699,9 @@ var DEFAULT_WAVE_CONFIG = {
7699
7699
  var WaveScheduler = class {
7700
7700
  config;
7701
7701
  logger;
7702
- constructor(config = {}, logger54) {
7702
+ constructor(config = {}, logger55) {
7703
7703
  this.config = { ...DEFAULT_WAVE_CONFIG, ...config };
7704
- this.logger = logger54 ?? createLogger({ component: "wave-scheduler" });
7704
+ this.logger = logger55 ?? createLogger({ component: "wave-scheduler" });
7705
7705
  }
7706
7706
  /**
7707
7707
  * Execute tasks in waves respecting dependencies and concurrency limits.
@@ -7935,8 +7935,8 @@ function chunkByDirectory(files, basePath) {
7935
7935
  items
7936
7936
  }));
7937
7937
  }
7938
- function createWaveScheduler(config = {}, logger54) {
7939
- return new WaveScheduler(config, logger54);
7938
+ function createWaveScheduler(config = {}, logger55) {
7939
+ return new WaveScheduler(config, logger55);
7940
7940
  }
7941
7941
 
7942
7942
  // src/agents/experts/expert-types.ts
@@ -12797,9 +12797,9 @@ var SkillLibrary = class {
12797
12797
  config;
12798
12798
  logger;
12799
12799
  store;
12800
- constructor(config = {}, logger54) {
12800
+ constructor(config = {}, logger55) {
12801
12801
  this.config = { ...DEFAULT_SKILL_LIBRARY_CONFIG, ...config };
12802
- this.logger = logger54 ?? createLogger({ component: "SkillLibrary" });
12802
+ this.logger = logger55 ?? createLogger({ component: "SkillLibrary" });
12803
12803
  this.store = {
12804
12804
  skills: /* @__PURE__ */ new Map(),
12805
12805
  executions: /* @__PURE__ */ new Map(),
@@ -13117,8 +13117,8 @@ var SkillLibrary = class {
13117
13117
  return scored.sort((a, b) => b.score - a.score).map((s) => s.skill);
13118
13118
  }
13119
13119
  };
13120
- function createSkillLibrary(config, logger54) {
13121
- return new SkillLibrary(config, logger54);
13120
+ function createSkillLibrary(config, logger55) {
13121
+ return new SkillLibrary(config, logger55);
13122
13122
  }
13123
13123
 
13124
13124
  // src/agents/skills/skill-composer.ts
@@ -13133,10 +13133,10 @@ var SkillComposer = class {
13133
13133
  config;
13134
13134
  logger;
13135
13135
  library;
13136
- constructor(library, config = {}, logger54) {
13136
+ constructor(library, config = {}, logger55) {
13137
13137
  this.library = library;
13138
13138
  this.config = { ...DEFAULT_COMPOSER_CONFIG, ...config };
13139
- this.logger = logger54 ?? createLogger({ component: "SkillComposer" });
13139
+ this.logger = logger55 ?? createLogger({ component: "SkillComposer" });
13140
13140
  }
13141
13141
  /**
13142
13142
  * Creates a composition plan for a task.
@@ -13366,8 +13366,8 @@ var SkillComposer = class {
13366
13366
  return errors;
13367
13367
  }
13368
13368
  };
13369
- function createSkillComposer(library, config, logger54) {
13370
- return new SkillComposer(library, config, logger54);
13369
+ function createSkillComposer(library, config, logger55) {
13370
+ return new SkillComposer(library, config, logger55);
13371
13371
  }
13372
13372
 
13373
13373
  // src/agents/skills/skill-dependency-graph-helpers.ts
@@ -14062,10 +14062,10 @@ var SkillLoader = class {
14062
14062
  library;
14063
14063
  logger;
14064
14064
  mappingIndex;
14065
- constructor(library, config, logger54) {
14065
+ constructor(library, config, logger55) {
14066
14066
  this.library = library;
14067
14067
  this.config = { ...DEFAULT_SKILL_LOADER_CONFIG, ...config };
14068
- this.logger = logger54 ?? createLogger({ component: "SkillLoader" });
14068
+ this.logger = logger55 ?? createLogger({ component: "SkillLoader" });
14069
14069
  this.mappingIndex = /* @__PURE__ */ new Map();
14070
14070
  for (const mapping of this.config.mappings) {
14071
14071
  this.mappingIndex.set(mapping.role, mapping);
@@ -14288,8 +14288,8 @@ var SkillLoader = class {
14288
14288
  return ok(orderResult.value);
14289
14289
  }
14290
14290
  };
14291
- function createSkillLoader(library, config, logger54) {
14292
- return new SkillLoader(library, config, logger54);
14291
+ function createSkillLoader(library, config, logger55) {
14292
+ return new SkillLoader(library, config, logger55);
14293
14293
  }
14294
14294
 
14295
14295
  // src/agents/skills/external-pack-loader.ts
@@ -14351,13 +14351,13 @@ function validateManifest(raw, packName, source) {
14351
14351
  }
14352
14352
  return ok(parseResult2.data);
14353
14353
  }
14354
- async function loadExternalPack(packSource, logger54) {
14354
+ async function loadExternalPack(packSource, logger55) {
14355
14355
  const { name, source, enabled } = packSource;
14356
14356
  if (!enabled) {
14357
- logger54.debug("Skipping disabled external pack", { name, source });
14357
+ logger55.debug("Skipping disabled external pack", { name, source });
14358
14358
  return ok({ packName: name, skillCount: 0, skills: [] });
14359
14359
  }
14360
- logger54.info("Loading external skill pack", { name, source });
14360
+ logger55.info("Loading external skill pack", { name, source });
14361
14361
  try {
14362
14362
  const importPath = await resolveImportPath(source);
14363
14363
  const module = await import(importPath);
@@ -14367,7 +14367,7 @@ async function loadExternalPack(packSource, logger54) {
14367
14367
  return validationResult;
14368
14368
  }
14369
14369
  const manifest = validationResult.value;
14370
- logger54.info("External pack loaded successfully", {
14370
+ logger55.info("External pack loaded successfully", {
14371
14371
  name: manifest.name,
14372
14372
  version: manifest.version,
14373
14373
  skillCount: manifest.skills.length
@@ -14388,22 +14388,22 @@ async function loadExternalPack(packSource, logger54) {
14388
14388
  );
14389
14389
  }
14390
14390
  }
14391
- async function loadAllExternalPacks(packs, logger54) {
14391
+ async function loadAllExternalPacks(packs, logger55) {
14392
14392
  const loaded = [];
14393
14393
  const errors = [];
14394
14394
  for (const pack of packs) {
14395
- const result = await loadExternalPack(pack, logger54);
14395
+ const result = await loadExternalPack(pack, logger55);
14396
14396
  if (result.ok) {
14397
14397
  loaded.push(result.value);
14398
14398
  } else {
14399
14399
  errors.push(result.error);
14400
- logger54.warn("Failed to load external pack", {
14400
+ logger55.warn("Failed to load external pack", {
14401
14401
  name: pack.name,
14402
14402
  error: result.error.message
14403
14403
  });
14404
14404
  }
14405
14405
  }
14406
- logger54.info("External pack loading complete", {
14406
+ logger55.info("External pack loading complete", {
14407
14407
  loaded: loaded.length,
14408
14408
  errors: errors.length,
14409
14409
  totalSkills: loaded.reduce((sum, r) => sum + r.skillCount, 0)
@@ -15311,9 +15311,9 @@ var SicaVersionManager = class {
15311
15311
  versions;
15312
15312
  events;
15313
15313
  activeVersionId;
15314
- constructor(config = {}, logger54) {
15314
+ constructor(config = {}, logger55) {
15315
15315
  this.config = { ...DEFAULT_SICA_CONFIG, ...config };
15316
- this.logger = logger54 ?? createLogger({ component: "SicaVersionManager" });
15316
+ this.logger = logger55 ?? createLogger({ component: "SicaVersionManager" });
15317
15317
  this.versions = /* @__PURE__ */ new Map();
15318
15318
  this.events = [];
15319
15319
  this.activeVersionId = null;
@@ -19722,9 +19722,9 @@ var TemplateRegistry = class {
19722
19722
  await this.ensureInitialized();
19723
19723
  const { templates, errors } = await loadTemplatesFromDirectory(directoryPath);
19724
19724
  if (errors.length > 0) {
19725
- const logger54 = createLogger({ component: "TemplateRegistry" });
19725
+ const logger55 = createLogger({ component: "TemplateRegistry" });
19726
19726
  for (const error of errors) {
19727
- logger54.warn("Template loading warning", { error: error.message });
19727
+ logger55.warn("Template loading warning", { error: error.message });
19728
19728
  }
19729
19729
  }
19730
19730
  let loadedCount = 0;
@@ -19736,8 +19736,8 @@ var TemplateRegistry = class {
19736
19736
  loadedCount++;
19737
19737
  }
19738
19738
  } catch (regError) {
19739
- const logger54 = createLogger({ component: "TemplateRegistry" });
19740
- logger54.warn("Template registration failed", {
19739
+ const logger55 = createLogger({ component: "TemplateRegistry" });
19740
+ logger55.warn("Template registration failed", {
19741
19741
  template: definition.name,
19742
19742
  error: regError instanceof Error ? regError.message : String(regError)
19743
19743
  });
@@ -20589,11 +20589,11 @@ var BudgetCircuitError = class extends NexusError {
20589
20589
 
20590
20590
  // src/workflows/budget-circuit-breaker.ts
20591
20591
  var BudgetCircuitBreaker = class {
20592
- constructor(maxTokens, config, logger54) {
20592
+ constructor(maxTokens, config, logger55) {
20593
20593
  this.maxTokens = maxTokens;
20594
20594
  this.config = { ...DEFAULT_BUDGET_CIRCUIT_CONFIG, ...config };
20595
20595
  this.lastStateChange = getTimeProvider().now();
20596
- this.logger = logger54 ?? createLogger({ component: "budget-circuit-breaker" });
20596
+ this.logger = logger55 ?? createLogger({ component: "budget-circuit-breaker" });
20597
20597
  }
20598
20598
  state = "closed";
20599
20599
  lastStateChange;
@@ -20903,10 +20903,10 @@ function createSkippedResult() {
20903
20903
  circuitState: "closed"
20904
20904
  };
20905
20905
  }
20906
- function logEnforcementResult(logger54, stepId, result, currentUsagePercent) {
20906
+ function logEnforcementResult(logger55, stepId, result, currentUsagePercent) {
20907
20907
  const usagePercent = Math.round(currentUsagePercent * 100);
20908
20908
  if (!result.allowed) {
20909
- logger54.warn("Budget enforcement blocked step", {
20909
+ logger55.warn("Budget enforcement blocked step", {
20910
20910
  stepId,
20911
20911
  reason: result.reason,
20912
20912
  circuitState: result.circuitState,
@@ -20916,14 +20916,14 @@ function logEnforcementResult(logger54, stepId, result, currentUsagePercent) {
20916
20916
  return;
20917
20917
  }
20918
20918
  if (result.warning !== void 0) {
20919
- logger54.warn("Budget enforcement warning", {
20919
+ logger55.warn("Budget enforcement warning", {
20920
20920
  stepId,
20921
20921
  warning: result.warning,
20922
20922
  currentUsage: usagePercent
20923
20923
  });
20924
20924
  return;
20925
20925
  }
20926
- logger54.debug("Budget enforcement passed for step", {
20926
+ logger55.debug("Budget enforcement passed for step", {
20927
20927
  stepId,
20928
20928
  currentUsage: usagePercent,
20929
20929
  allocatedTokens: result.allocatedTokens
@@ -20959,15 +20959,15 @@ function buildFinalOutput(stepResults) {
20959
20959
  }
20960
20960
 
20961
20961
  // src/workflows/workflow-engine-execution.ts
20962
- function createContextManagerForWorkflow(config, workflow, logger54) {
20962
+ function createContextManagerForWorkflow(config, workflow, logger55) {
20963
20963
  if (config.contextManagerConfig === void 0) return void 0;
20964
20964
  const budget = workflow.defaultBudget ?? config.defaultBudget;
20965
- return new ContextManager({ ...config.contextManagerConfig, budget, logger: logger54 });
20965
+ return new ContextManager({ ...config.contextManagerConfig, budget, logger: logger55 });
20966
20966
  }
20967
- function createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger54) {
20967
+ function createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger55) {
20968
20968
  const budgetConfig = {
20969
20969
  engineDefaultBudget: config.defaultBudget,
20970
- logger: logger54
20970
+ logger: logger55
20971
20971
  };
20972
20972
  if (workflow.defaultBudget !== void 0) {
20973
20973
  budgetConfig.workflowDefaultBudget = workflow.defaultBudget;
@@ -21002,12 +21002,12 @@ function applyInputDefaults(workflow, inputs) {
21002
21002
  return merged;
21003
21003
  }
21004
21004
  function initializeExecution(params) {
21005
- const { workflow, inputs, config, logger: logger54 } = params;
21005
+ const { workflow, inputs, config, logger: logger55 } = params;
21006
21006
  const executionId = generateUUID();
21007
21007
  const startTime = getTimeProvider().now();
21008
21008
  const resolvedInputs = applyInputDefaults(workflow, inputs);
21009
- const contextManager = createContextManagerForWorkflow(config, workflow, logger54);
21010
- const budgetCircuitBreaker = config.enableBudgetEnforcement ? createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger54) : void 0;
21009
+ const contextManager = createContextManagerForWorkflow(config, workflow, logger55);
21010
+ const budgetCircuitBreaker = config.enableBudgetEnforcement ? createBudgetCircuitBreakerForWorkflow(contextManager, workflow, config, logger55) : void 0;
21011
21011
  const context = {
21012
21012
  workflowId: workflow.name,
21013
21013
  executionId,
@@ -21027,7 +21027,7 @@ function initializeExecution(params) {
21027
21027
  startTime
21028
21028
  };
21029
21029
  if (contextManager !== void 0) {
21030
- logger54.debug("Context manager initialized for workflow execution", {
21030
+ logger55.debug("Context manager initialized for workflow execution", {
21031
21031
  executionId,
21032
21032
  workflowName: workflow.name,
21033
21033
  budget: workflow.defaultBudget ?? config.defaultBudget
@@ -21036,10 +21036,10 @@ function initializeExecution(params) {
21036
21036
  return { executionId, context, startTime, execution };
21037
21037
  }
21038
21038
  function enforceStepBudgets(options) {
21039
- const { steps, context, workflow, totalSteps, config, logger: logger54 } = options;
21039
+ const { steps, context, workflow, totalSteps, config, logger: logger55 } = options;
21040
21040
  const budgetConfig = {
21041
21041
  engineDefaultBudget: config.defaultBudget,
21042
- logger: logger54
21042
+ logger: logger55
21043
21043
  };
21044
21044
  if (workflow.defaultBudget !== void 0) {
21045
21045
  budgetConfig.workflowDefaultBudget = workflow.defaultBudget;
@@ -21339,29 +21339,29 @@ function createExpertFactoryWithAdapter(adapter) {
21339
21339
  };
21340
21340
  return new ExpertFactoryAdapter(factoryWrapper);
21341
21341
  }
21342
- function adaptLoggerForStepExecutor(logger54) {
21342
+ function adaptLoggerForStepExecutor(logger55) {
21343
21343
  return {
21344
21344
  debug: (message, data) => {
21345
- logger54.debug(message, data);
21345
+ logger55.debug(message, data);
21346
21346
  },
21347
21347
  info: (message, data) => {
21348
- logger54.info(message, data);
21348
+ logger55.info(message, data);
21349
21349
  },
21350
21350
  warn: (message, data) => {
21351
- logger54.warn(message, data);
21351
+ logger55.warn(message, data);
21352
21352
  },
21353
21353
  error: (message, data) => {
21354
21354
  if (data !== void 0) {
21355
21355
  const errorContext = { ...data };
21356
- logger54.error(message, void 0, errorContext);
21356
+ logger55.error(message, void 0, errorContext);
21357
21357
  } else {
21358
- logger54.error(message);
21358
+ logger55.error(message);
21359
21359
  }
21360
21360
  }
21361
21361
  };
21362
21362
  }
21363
- function createRealStepExecutorCallback(expertFactory, logger54, workflowId) {
21364
- const adaptedLogger = adaptLoggerForStepExecutor(logger54);
21363
+ function createRealStepExecutorCallback(expertFactory, logger55, workflowId) {
21364
+ const adaptedLogger = adaptLoggerForStepExecutor(logger55);
21365
21365
  const executor = createStepExecutor({ expertFactory, logger: adaptedLogger });
21366
21366
  return async (step, ctx) => {
21367
21367
  const startTime = getTimeProvider().now();
@@ -21377,7 +21377,7 @@ function createRealStepExecutorCallback(expertFactory, logger54, workflowId) {
21377
21377
  }
21378
21378
  const result = await executor.execute(step, workflowCtx);
21379
21379
  if (!result.ok) {
21380
- logger54.warn("Step execution failed", {
21380
+ logger55.warn("Step execution failed", {
21381
21381
  stepId: step.id,
21382
21382
  error: result.error.message
21383
21383
  });
@@ -21437,10 +21437,10 @@ function adaptExecutionPlan(plannerPlan) {
21437
21437
  }));
21438
21438
  return { phases };
21439
21439
  }
21440
- function createMockStepExecutor(logger54) {
21440
+ function createMockStepExecutor(logger55) {
21441
21441
  return (step, _ctx) => {
21442
21442
  const startTime = getTimeProvider().now();
21443
- logger54.debug("Executing step (mock)", {
21443
+ logger55.debug("Executing step (mock)", {
21444
21444
  stepId: step.id,
21445
21445
  agent: step.agent,
21446
21446
  action: step.action
@@ -21449,16 +21449,16 @@ function createMockStepExecutor(logger54) {
21449
21449
  };
21450
21450
  }
21451
21451
  function resolveStepExecutor(options) {
21452
- const { logger: logger54, expertFactory, workflowId, useMockExecutor } = options;
21452
+ const { logger: logger55, expertFactory, workflowId, useMockExecutor } = options;
21453
21453
  if (useMockExecutor === true) {
21454
- logger54.warn(
21454
+ logger55.warn(
21455
21455
  "useMockExecutor enabled; workflow steps will return mock results (NOT RECOMMENDED)"
21456
21456
  );
21457
- return createMockStepExecutor(logger54);
21457
+ return createMockStepExecutor(logger55);
21458
21458
  }
21459
21459
  if (expertFactory !== void 0 && workflowId !== void 0) {
21460
- logger54.info("Using real StepExecutor with ExpertFactory", { workflowId });
21461
- return createRealStepExecutorCallback(expertFactory, logger54, workflowId);
21460
+ logger55.info("Using real StepExecutor with ExpertFactory", { workflowId });
21461
+ return createRealStepExecutorCallback(expertFactory, logger55, workflowId);
21462
21462
  }
21463
21463
  if (expertFactory !== void 0 && workflowId === void 0) {
21464
21464
  throw new WorkflowExecutionUnavailableError("expertFactory provided but workflowId missing");
@@ -21469,9 +21469,9 @@ function resolveStepExecutor(options) {
21469
21469
  }
21470
21470
  function createExecutePhase(options) {
21471
21471
  const stepExecutor = resolveStepExecutor(options);
21472
- const { logger: logger54 } = options;
21472
+ const { logger: logger55 } = options;
21473
21473
  return async (steps, context, executionOptions) => {
21474
- logger54.debug("Executing phase", {
21474
+ logger55.debug("Executing phase", {
21475
21475
  stepCount: steps.length,
21476
21476
  executionId: context.executionId,
21477
21477
  maxConcurrency: executionOptions.maxConcurrency
@@ -21522,26 +21522,26 @@ function createAdaptedExecutionPlan() {
21522
21522
  return ok(adaptExecutionPlan(planResult.value));
21523
21523
  };
21524
21524
  }
21525
- function resolveExpertFactory(config, logger54) {
21525
+ function resolveExpertFactory(config, logger55) {
21526
21526
  if (config?.expertFactory !== void 0) {
21527
21527
  return config.expertFactory;
21528
21528
  }
21529
21529
  if (config?.modelAdapter !== void 0) {
21530
- logger54.info("Created ExpertFactory with provided model adapter");
21530
+ logger55.info("Created ExpertFactory with provided model adapter");
21531
21531
  return createExpertFactoryWithAdapter(config.modelAdapter);
21532
21532
  }
21533
21533
  return void 0;
21534
21534
  }
21535
21535
  function createWorkflowEngineDeps(config) {
21536
- const logger54 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
21536
+ const logger55 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
21537
21537
  const builtInTemplates = config?.builtInTemplates ?? cachedBuiltInTemplates ?? /* @__PURE__ */ new Map();
21538
- const expertFactory = resolveExpertFactory(config, logger54);
21538
+ const expertFactory = resolveExpertFactory(config, logger55);
21539
21539
  return {
21540
21540
  parseWorkflow: createParseWorkflow(),
21541
21541
  loadWorkflowFile: createLoadWorkflowFile(),
21542
21542
  createExecutionPlan: createAdaptedExecutionPlan(),
21543
21543
  executePhase: createExecutePhase({
21544
- logger: logger54,
21544
+ logger: logger55,
21545
21545
  expertFactory,
21546
21546
  workflowId: "default",
21547
21547
  useMockExecutor: config?.useMockExecutor
@@ -21572,32 +21572,32 @@ async function createInitializedWorkflowEngine(config) {
21572
21572
  function shouldSkipAdapterDetection(config) {
21573
21573
  return config?.modelAdapter !== void 0 || config?.expertFactory !== void 0 || config?.useMockExecutor === true;
21574
21574
  }
21575
- function tryAutoDetectAdapter(logger54) {
21575
+ function tryAutoDetectAdapter(logger55) {
21576
21576
  try {
21577
- logger54.info("Auto-detecting model adapter for workflow execution");
21578
- const registry = getGlobalRegistry({ logger: logger54 });
21577
+ logger55.info("Auto-detecting model adapter for workflow execution");
21578
+ const registry = getGlobalRegistry({ logger: logger55 });
21579
21579
  const adapter = registry.getDefault();
21580
- logger54.info("Using unified registry default adapter");
21580
+ logger55.info("Using unified registry default adapter");
21581
21581
  return adapter;
21582
21582
  } catch (error) {
21583
21583
  const message = getErrorMessage(error);
21584
- logger54.warn("No model adapter available, using mock executor", { error: message });
21584
+ logger55.warn("No model adapter available, using mock executor", { error: message });
21585
21585
  return void 0;
21586
21586
  }
21587
21587
  }
21588
21588
  function createWorkflowEngineDepsAsync(config) {
21589
- const logger54 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
21589
+ const logger55 = config?.logger ?? createLogger({ component: "WorkflowEngine" });
21590
21590
  if (shouldSkipAdapterDetection(config)) {
21591
- logger54.debug("Skipping adapter detection - using provided config");
21591
+ logger55.debug("Skipping adapter detection - using provided config");
21592
21592
  return Promise.resolve(createWorkflowEngineDeps(config));
21593
21593
  }
21594
- const adapter = tryAutoDetectAdapter(logger54);
21594
+ const adapter = tryAutoDetectAdapter(logger55);
21595
21595
  if (adapter !== void 0) {
21596
- return Promise.resolve(createWorkflowEngineDeps({ ...config, modelAdapter: adapter, logger: logger54 }));
21596
+ return Promise.resolve(createWorkflowEngineDeps({ ...config, modelAdapter: adapter, logger: logger55 }));
21597
21597
  }
21598
21598
  if (config?.useMockExecutor === true) {
21599
- logger54.warn("Using mock executor as explicitly configured (no real adapter available)");
21600
- return Promise.resolve(createWorkflowEngineDeps({ ...config, useMockExecutor: true, logger: logger54 }));
21599
+ logger55.warn("Using mock executor as explicitly configured (no real adapter available)");
21600
+ return Promise.resolve(createWorkflowEngineDeps({ ...config, useMockExecutor: true, logger: logger55 }));
21601
21601
  }
21602
21602
  return Promise.reject(
21603
21603
  new WorkflowExecutionUnavailableError(
@@ -21679,23 +21679,23 @@ function createToolLogger(parentLogger, toolName, requestId) {
21679
21679
  }
21680
21680
  return parentLogger.child(context);
21681
21681
  }
21682
- function logToolStart(logger54, toolName, args) {
21683
- logger54.info("Tool execution started", {
21682
+ function logToolStart(logger55, toolName, args) {
21683
+ logger55.info("Tool execution started", {
21684
21684
  tool: toolName,
21685
21685
  hasArgs: args !== void 0,
21686
21686
  argKeys: args !== void 0 ? Object.keys(args) : []
21687
21687
  });
21688
21688
  }
21689
- function logToolSuccess(logger54, toolName, durationMs, resultInfo) {
21690
- logger54.info("Tool execution completed", {
21689
+ function logToolSuccess(logger55, toolName, durationMs, resultInfo) {
21690
+ logger55.info("Tool execution completed", {
21691
21691
  tool: toolName,
21692
21692
  durationMs,
21693
21693
  success: true,
21694
21694
  ...resultInfo
21695
21695
  });
21696
21696
  }
21697
- function logToolError(logger54, toolName, error, durationMs) {
21698
- logger54.error("Tool execution failed", error, {
21697
+ function logToolError(logger55, toolName, error, durationMs) {
21698
+ logger55.error("Tool execution failed", error, {
21699
21699
  tool: toolName,
21700
21700
  durationMs,
21701
21701
  success: false,
@@ -21708,8 +21708,8 @@ function createTimer() {
21708
21708
  elapsed: () => getTimeProvider().now() - startTime
21709
21709
  };
21710
21710
  }
21711
- function withLogging(toolName, handler3, logger54) {
21712
- const toolLogger = createToolLogger(logger54, toolName);
21711
+ function withLogging(toolName, handler3, logger55) {
21712
+ const toolLogger = createToolLogger(logger55, toolName);
21713
21713
  return async (args) => {
21714
21714
  const timer = createTimer();
21715
21715
  logToolStart(toolLogger, toolName, args);
@@ -21794,9 +21794,9 @@ var AuthHandler = class {
21794
21794
  config;
21795
21795
  logger;
21796
21796
  storedToken;
21797
- constructor(config, logger54) {
21797
+ constructor(config, logger55) {
21798
21798
  this.config = resolveAuthConfig(config);
21799
- this.logger = logger54 ?? createLogger({ component: "AuthHandler" });
21799
+ this.logger = logger55 ?? createLogger({ component: "AuthHandler" });
21800
21800
  if (this.config.enabled) this.loadToken();
21801
21801
  }
21802
21802
  /**
@@ -21895,19 +21895,19 @@ var AuthHandler = class {
21895
21895
  };
21896
21896
 
21897
21897
  // src/mcp/middleware/tool-error-handler.ts
21898
- function toolErrorResponse(prefix, error, logger54) {
21898
+ function toolErrorResponse(prefix, error, logger55) {
21899
21899
  const message = getErrorMessage(error);
21900
- if (logger54 !== void 0) {
21900
+ if (logger55 !== void 0) {
21901
21901
  const errorObj = error instanceof Error ? error : new Error(message);
21902
- logger54.error(prefix, errorObj);
21902
+ logger55.error(prefix, errorObj);
21903
21903
  }
21904
21904
  return toolStructuredError({ errorCategory: "internal", message: `${prefix}: ${message}` });
21905
21905
  }
21906
- async function withToolError(prefix, logger54, fn) {
21906
+ async function withToolError(prefix, logger55, fn) {
21907
21907
  try {
21908
21908
  return await fn();
21909
21909
  } catch (error) {
21910
- return toolErrorResponse(prefix, error, logger54);
21910
+ return toolErrorResponse(prefix, error, logger55);
21911
21911
  }
21912
21912
  }
21913
21913
 
@@ -24387,47 +24387,47 @@ function createSubscriptions(eventBus, subs, handler3) {
24387
24387
  }
24388
24388
  return subscriptions;
24389
24389
  }
24390
- function createCleanupFunction(subscriptions, eventBus, logger54) {
24390
+ function createCleanupFunction(subscriptions, eventBus, logger55) {
24391
24391
  return () => {
24392
- logger54.debug("Cleaning up EventBus bridge subscriptions");
24392
+ logger55.debug("Cleaning up EventBus bridge subscriptions");
24393
24393
  for (const sub of subscriptions) {
24394
24394
  sub.unsubscribe();
24395
24395
  }
24396
- logger54.info("EventBus bridge cleanup complete", {
24396
+ logger55.info("EventBus bridge cleanup complete", {
24397
24397
  unsubscribedCount: subscriptions.length,
24398
24398
  finalStats: eventBus.getStats()
24399
24399
  });
24400
24400
  };
24401
24401
  }
24402
- function initializeEventBusBridge(observer, logger54, config) {
24402
+ function initializeEventBusBridge(observer, logger55, config) {
24403
24403
  const mergedConfig = mergeConfig2(config);
24404
24404
  if (!mergedConfig.enabled) {
24405
- logger54.debug("EventBus bridge disabled by configuration");
24405
+ logger55.debug("EventBus bridge disabled by configuration");
24406
24406
  return { initialized: false, subscriptionCount: 0, cleanup: () => {
24407
24407
  } };
24408
24408
  }
24409
24409
  const eventBus = getGlobalEventBus({ maxHistorySize: mergedConfig.maxHistorySize });
24410
24410
  const logConfig = mergedConfig.logging;
24411
- logger54.info("Initializing EventBus bridge for MCP server", {
24411
+ logger55.info("Initializing EventBus bridge for MCP server", {
24412
24412
  maxHistorySize: mergedConfig.maxHistorySize,
24413
24413
  subscriptions: mergedConfig.subscriptions
24414
24414
  });
24415
24415
  const handler3 = (event) => {
24416
- handleEvent(event, observer, logger54, logConfig);
24416
+ handleEvent(event, observer, logger55, logConfig);
24417
24417
  };
24418
24418
  const subscriptions = createSubscriptions(eventBus, mergedConfig.subscriptions, handler3);
24419
- logger54.info("EventBus bridge initialized", {
24419
+ logger55.info("EventBus bridge initialized", {
24420
24420
  subscriptionCount: subscriptions.length,
24421
24421
  eventBusStats: eventBus.getStats()
24422
24422
  });
24423
- const cleanup = createCleanupFunction(subscriptions, eventBus, logger54);
24423
+ const cleanup = createCleanupFunction(subscriptions, eventBus, logger55);
24424
24424
  return {
24425
24425
  initialized: true,
24426
24426
  subscriptionCount: subscriptions.length,
24427
24427
  cleanup
24428
24428
  };
24429
24429
  }
24430
- function handleEvent(event, observer, logger54, logConfig) {
24430
+ function handleEvent(event, observer, logger55, logConfig) {
24431
24431
  const isImportant = IMPORTANT_TOPICS.has(event.topic);
24432
24432
  const logLevel = isImportant ? logConfig.importantEventLevel : logConfig.frequentEventLevel;
24433
24433
  const logContext = {
@@ -24438,9 +24438,9 @@ function handleEvent(event, observer, logger54, logConfig) {
24438
24438
  timestamp: event.timestamp
24439
24439
  };
24440
24440
  if (logLevel === "info") {
24441
- logger54.info(`EventBus: ${event.topic}`, logContext);
24441
+ logger55.info(`EventBus: ${event.topic}`, logContext);
24442
24442
  } else {
24443
- logger54.debug(`EventBus: ${event.topic}`, logContext);
24443
+ logger55.debug(`EventBus: ${event.topic}`, logContext);
24444
24444
  }
24445
24445
  recordEventToObserver(event, observer);
24446
24446
  }
@@ -24618,19 +24618,19 @@ var PROMPT_DEFINITIONS = [
24618
24618
  ];
24619
24619
 
24620
24620
  // src/mcp/prompts/index.ts
24621
- function registerPrompts(server, logger54) {
24621
+ function registerPrompts(server, logger55) {
24622
24622
  const registered = [];
24623
24623
  for (const definition of PROMPT_DEFINITIONS) {
24624
- registerSinglePrompt(server, definition, logger54);
24624
+ registerSinglePrompt(server, definition, logger55);
24625
24625
  registered.push(definition.name);
24626
24626
  }
24627
- logger54.info("Prompt templates registered", {
24627
+ logger55.info("Prompt templates registered", {
24628
24628
  count: registered.length,
24629
24629
  prompts: registered
24630
24630
  });
24631
24631
  return { prompts: registered };
24632
24632
  }
24633
- function registerSinglePrompt(server, definition, logger54) {
24633
+ function registerSinglePrompt(server, definition, logger55) {
24634
24634
  server.registerPrompt(
24635
24635
  definition.name,
24636
24636
  {
@@ -24638,7 +24638,7 @@ function registerSinglePrompt(server, definition, logger54) {
24638
24638
  argsSchema: definition.argsSchema
24639
24639
  },
24640
24640
  (args) => {
24641
- logger54.debug("Prompt requested", { prompt: definition.name });
24641
+ logger55.debug("Prompt requested", { prompt: definition.name });
24642
24642
  const messages = definition.buildMessages(args);
24643
24643
  return {
24644
24644
  description: definition.description,
@@ -24678,7 +24678,7 @@ function buildModelsPayload() {
24678
24678
  }))
24679
24679
  };
24680
24680
  }
24681
- function registerModelsResource(server, logger54) {
24681
+ function registerModelsResource(server, logger55) {
24682
24682
  server.registerResource(
24683
24683
  MODELS_RESOURCE_NAME,
24684
24684
  MODELS_RESOURCE_URI,
@@ -24687,7 +24687,7 @@ function registerModelsResource(server, logger54) {
24687
24687
  mimeType: "application/json"
24688
24688
  },
24689
24689
  () => {
24690
- logger54.debug("Reading models resource");
24690
+ logger55.debug("Reading models resource");
24691
24691
  const payload = buildModelsPayload();
24692
24692
  return {
24693
24693
  contents: [
@@ -24700,7 +24700,7 @@ function registerModelsResource(server, logger54) {
24700
24700
  };
24701
24701
  }
24702
24702
  );
24703
- logger54.info("Registered models resource", { uri: MODELS_RESOURCE_URI });
24703
+ logger55.info("Registered models resource", { uri: MODELS_RESOURCE_URI });
24704
24704
  }
24705
24705
 
24706
24706
  // src/indexer/research-index/research-index-base-types.ts
@@ -25511,10 +25511,10 @@ ${topicLines}
25511
25511
  // src/mcp/resources/research-resource.ts
25512
25512
  var RESEARCH_RESOURCE_URI = "nexus://research/papers";
25513
25513
  var RESEARCH_RESOURCE_NAME = "research-papers";
25514
- function buildResearchPayload(logger54) {
25514
+ function buildResearchPayload(logger55) {
25515
25515
  const result = parseRegistry();
25516
25516
  if (!result.ok) {
25517
- logger54.debug("Research registry not available", {
25517
+ logger55.debug("Research registry not available", {
25518
25518
  error: result.error.message
25519
25519
  });
25520
25520
  return {
@@ -25548,7 +25548,7 @@ function buildResearchPayload(logger54) {
25548
25548
  stats: index.stats
25549
25549
  };
25550
25550
  }
25551
- function registerResearchResource(server, logger54) {
25551
+ function registerResearchResource(server, logger55) {
25552
25552
  server.registerResource(
25553
25553
  RESEARCH_RESOURCE_NAME,
25554
25554
  RESEARCH_RESOURCE_URI,
@@ -25557,9 +25557,9 @@ function registerResearchResource(server, logger54) {
25557
25557
  mimeType: "application/json"
25558
25558
  },
25559
25559
  () => {
25560
- logger54.debug("Reading research resource");
25560
+ logger55.debug("Reading research resource");
25561
25561
  try {
25562
- const payload = buildResearchPayload(logger54);
25562
+ const payload = buildResearchPayload(logger55);
25563
25563
  return {
25564
25564
  contents: [
25565
25565
  {
@@ -25570,7 +25570,7 @@ function registerResearchResource(server, logger54) {
25570
25570
  ]
25571
25571
  };
25572
25572
  } catch (error) {
25573
- logger54.warn("Failed to build research payload", {
25573
+ logger55.warn("Failed to build research payload", {
25574
25574
  error: getErrorMessage(error)
25575
25575
  });
25576
25576
  return {
@@ -25585,7 +25585,7 @@ function registerResearchResource(server, logger54) {
25585
25585
  }
25586
25586
  }
25587
25587
  );
25588
- logger54.info("Registered research resource", { uri: RESEARCH_RESOURCE_URI });
25588
+ logger55.info("Registered research resource", { uri: RESEARCH_RESOURCE_URI });
25589
25589
  }
25590
25590
 
25591
25591
  // src/mcp/tools/create-expert.ts
@@ -25686,29 +25686,29 @@ var ROLE_TO_TASK_CATEGORY = {
25686
25686
  pm_expert: "planning",
25687
25687
  ux_expert: "planning"
25688
25688
  };
25689
- function resolveAdapterForModelPreference(modelPreference, fallbackAdapter, logger54) {
25690
- const registry = getGlobalRegistry({ logger: logger54 });
25689
+ function resolveAdapterForModelPreference(modelPreference, fallbackAdapter, logger55) {
25690
+ const registry = getGlobalRegistry({ logger: logger55 });
25691
25691
  const adapter = registry.getAdapterForModel(modelPreference);
25692
25692
  if (adapter === registry.getDefault() && fallbackAdapter !== void 0) {
25693
- logger54.debug("Model preference not in registry, using fallback adapter", { modelPreference });
25693
+ logger55.debug("Model preference not in registry, using fallback adapter", { modelPreference });
25694
25694
  return fallbackAdapter;
25695
25695
  }
25696
- logger54.info("Routing expert to CLI for model preference", { modelPreference });
25696
+ logger55.info("Routing expert to CLI for model preference", { modelPreference });
25697
25697
  return adapter;
25698
25698
  }
25699
- function resolveAdapterForRole(role, fallbackAdapter, logger54) {
25699
+ function resolveAdapterForRole(role, fallbackAdapter, logger55) {
25700
25700
  const category = ROLE_TO_TASK_CATEGORY[role];
25701
25701
  if (category === void 0) return fallbackAdapter;
25702
- const registry = getGlobalRegistry({ logger: logger54 });
25702
+ const registry = getGlobalRegistry({ logger: logger55 });
25703
25703
  const adapter = registry.getAdapter(category);
25704
- logger54.info("Auto-routing expert to specialized CLI", {
25704
+ logger55.info("Auto-routing expert to specialized CLI", {
25705
25705
  role,
25706
25706
  category,
25707
25707
  preferredCli: registry.getRouting(category)?.primaryCli
25708
25708
  });
25709
25709
  return adapter;
25710
25710
  }
25711
- function getExpertFallbackChain(role, excludeCli, logger54) {
25711
+ function getExpertFallbackChain(role, excludeCli, logger55) {
25712
25712
  const category = ROLE_TO_TASK_CATEGORY[role];
25713
25713
  if (category === void 0) return [];
25714
25714
  const bucketType = CATEGORY_TO_FALLBACK_TYPE[category];
@@ -25717,7 +25717,7 @@ function getExpertFallbackChain(role, excludeCli, logger54) {
25717
25717
  bucketType
25718
25718
  );
25719
25719
  const filtered = chain.filter((cli) => cli !== excludeCli);
25720
- logger54.debug("Expert fallback chain resolved", { role, category, excludeCli, chain: filtered });
25720
+ logger55.debug("Expert fallback chain resolved", { role, category, excludeCli, chain: filtered });
25721
25721
  return [...filtered];
25722
25722
  }
25723
25723
 
@@ -25823,16 +25823,16 @@ function buildResponse(expert) {
25823
25823
  };
25824
25824
  }
25825
25825
  function createExpertFromFactory(deps, expertType, modelPreference, role) {
25826
- const logger54 = deps.logger ?? createLogger({ tool: "create_expert" });
25826
+ const logger55 = deps.logger ?? createLogger({ tool: "create_expert" });
25827
25827
  const options = {};
25828
25828
  if (modelPreference !== void 0) {
25829
25829
  options.modelOverrides = { modelId: modelPreference };
25830
25830
  }
25831
25831
  let adapter;
25832
25832
  if (modelPreference !== void 0) {
25833
- adapter = resolveAdapterForModelPreference(modelPreference, deps.modelAdapter, logger54);
25833
+ adapter = resolveAdapterForModelPreference(modelPreference, deps.modelAdapter, logger55);
25834
25834
  } else if (role !== void 0) {
25835
- adapter = resolveAdapterForRole(role, deps.modelAdapter, logger54);
25835
+ adapter = resolveAdapterForRole(role, deps.modelAdapter, logger55);
25836
25836
  } else {
25837
25837
  adapter = deps.modelAdapter;
25838
25838
  }
@@ -25906,7 +25906,7 @@ function createCreateExpertHandler(deps) {
25906
25906
  };
25907
25907
  }
25908
25908
  function registerCreateExpertTool(server, deps) {
25909
- const logger54 = deps.logger ?? createLogger({ tool: "create_expert" });
25909
+ const logger55 = deps.logger ?? createLogger({ tool: "create_expert" });
25910
25910
  const toolSchema = {
25911
25911
  role: z44.enum([
25912
25912
  "code_expert",
@@ -25926,23 +25926,23 @@ function registerCreateExpertTool(server, deps) {
25926
25926
  const secureHandler = createSecureHandler(createCreateExpertHandler(deps), {
25927
25927
  toolName: "create_expert",
25928
25928
  rateLimiter: deps.rateLimiter,
25929
- logger: logger54
25929
+ logger: logger55
25930
25930
  });
25931
25931
  const timeoutMs = getToolTimeout("create_expert", deps.security);
25932
- const wrappedHandler = wrapToolWithTimeout("create_expert", secureHandler, { timeoutMs, logger: logger54 });
25932
+ const wrappedHandler = wrapToolWithTimeout("create_expert", secureHandler, { timeoutMs, logger: logger55 });
25933
25933
  server.registerTool(
25934
25934
  "create_expert",
25935
25935
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("create_expert") },
25936
25936
  toSdkCallback(wrappedHandler)
25937
25937
  );
25938
- logger54.info("Registered create_expert tool with secure handler and timeout protection");
25938
+ logger55.info("Registered create_expert tool with secure handler and timeout protection");
25939
25939
  }
25940
- function createDefaultDeps(rateLimiter, logger54) {
25940
+ function createDefaultDeps(rateLimiter, logger55) {
25941
25941
  return {
25942
25942
  expertFactory: ExpertFactory,
25943
25943
  expertRegistry: /* @__PURE__ */ new Map(),
25944
25944
  rateLimiter,
25945
- ...logger54 !== void 0 ? { logger: logger54 } : {}
25945
+ ...logger55 !== void 0 ? { logger: logger55 } : {}
25946
25946
  };
25947
25947
  }
25948
25948
  function getAvailableRoles() {
@@ -25977,7 +25977,7 @@ function buildExpertsPayload() {
25977
25977
  experts
25978
25978
  };
25979
25979
  }
25980
- function registerExpertsResource(server, logger54) {
25980
+ function registerExpertsResource(server, logger55) {
25981
25981
  server.registerResource(
25982
25982
  EXPERTS_RESOURCE_NAME,
25983
25983
  EXPERTS_RESOURCE_URI,
@@ -25986,7 +25986,7 @@ function registerExpertsResource(server, logger54) {
25986
25986
  mimeType: "application/json"
25987
25987
  },
25988
25988
  () => {
25989
- logger54.debug("Reading experts resource");
25989
+ logger55.debug("Reading experts resource");
25990
25990
  const payload = buildExpertsPayload();
25991
25991
  return {
25992
25992
  contents: [
@@ -25999,12 +25999,12 @@ function registerExpertsResource(server, logger54) {
25999
25999
  };
26000
26000
  }
26001
26001
  );
26002
- logger54.info("Registered experts resource", { uri: EXPERTS_RESOURCE_URI });
26002
+ logger55.info("Registered experts resource", { uri: EXPERTS_RESOURCE_URI });
26003
26003
  }
26004
26004
 
26005
26005
  // src/mcp/resources/index.ts
26006
- function registerResources(server, logger54) {
26007
- const log = logger54 ?? createLogger({ component: "mcp-resources" });
26006
+ function registerResources(server, logger55) {
26007
+ const log = logger55 ?? createLogger({ component: "mcp-resources" });
26008
26008
  log.info("Registering MCP resources");
26009
26009
  registerModelsResource(server, log);
26010
26010
  registerResearchResource(server, log);
@@ -26156,11 +26156,11 @@ function validateWorkflowInputs(workflow, inputs) {
26156
26156
  };
26157
26157
  }
26158
26158
  async function loadWorkflowFromPath(deps, filePath) {
26159
- const { workflowEngine, logger: logger54 } = deps;
26159
+ const { workflowEngine, logger: logger55 } = deps;
26160
26160
  const allowedDirs = getAllowedWorkflowDirs(deps);
26161
26161
  const pathValidation = validateWorkflowPath(filePath, allowedDirs);
26162
26162
  if (!pathValidation.ok) {
26163
- logger54?.warn("Workflow path validation failed", {
26163
+ logger55?.warn("Workflow path validation failed", {
26164
26164
  path: filePath,
26165
26165
  error: pathValidation.error.message
26166
26166
  });
@@ -26179,8 +26179,8 @@ async function loadWorkflowFromPath(deps, filePath) {
26179
26179
  return result;
26180
26180
  }
26181
26181
  async function loadWorkflowFromName(deps, name) {
26182
- const { workflowEngine, logger: logger54 } = deps;
26183
- logger54?.debug("Looking up built-in template", { name });
26182
+ const { workflowEngine, logger: logger55 } = deps;
26183
+ logger55?.debug("Looking up built-in template", { name });
26184
26184
  const templates = await workflowEngine.listTemplates();
26185
26185
  const found = templates.find((t) => t.name === name);
26186
26186
  if (found === void 0) {
@@ -26204,9 +26204,9 @@ async function loadWorkflowFromName(deps, name) {
26204
26204
  return { ok: true, value: definition };
26205
26205
  }
26206
26206
  async function loadWorkflow(deps, template) {
26207
- const { logger: logger54 } = deps;
26207
+ const { logger: logger55 } = deps;
26208
26208
  if (isFilePath(template)) {
26209
- logger54?.debug("Loading workflow from file", { path: template });
26209
+ logger55?.debug("Loading workflow from file", { path: template });
26210
26210
  return loadWorkflowFromPath(deps, template);
26211
26211
  }
26212
26212
  return loadWorkflowFromName(deps, template);
@@ -26257,8 +26257,8 @@ function formatValidationErrors(validation) {
26257
26257
  // src/mcp/tools/run-workflow.ts
26258
26258
  import { randomUUID as randomUUID8 } from "crypto";
26259
26259
  async function executeWorkflow(deps, workflow, inputs, options) {
26260
- const { workflowEngine, logger: logger54 } = deps;
26261
- logger54?.info("Executing workflow", {
26260
+ const { workflowEngine, logger: logger55 } = deps;
26261
+ logger55?.info("Executing workflow", {
26262
26262
  workflowName: workflow.name,
26263
26263
  inputCount: Object.keys(inputs).length,
26264
26264
  ...options?.phaseTimeoutMs !== void 0 ? { phaseTimeoutMs: options.phaseTimeoutMs } : {}
@@ -26266,7 +26266,7 @@ async function executeWorkflow(deps, workflow, inputs, options) {
26266
26266
  const startTime = getTimeProvider().now();
26267
26267
  const result = options?.phaseTimeoutMs !== void 0 ? await workflowEngine.execute(workflow, inputs, { phaseTimeoutMs: options.phaseTimeoutMs }) : await workflowEngine.execute(workflow, inputs);
26268
26268
  if (!result.ok) {
26269
- logger54?.error("Workflow execution failed", result.error, {
26269
+ logger55?.error("Workflow execution failed", result.error, {
26270
26270
  workflowName: workflow.name
26271
26271
  });
26272
26272
  return {
@@ -26275,7 +26275,7 @@ async function executeWorkflow(deps, workflow, inputs, options) {
26275
26275
  };
26276
26276
  }
26277
26277
  const workflowResult = result.value;
26278
- logger54?.info("Workflow completed", {
26278
+ logger55?.info("Workflow completed", {
26279
26279
  workflowName: workflow.name,
26280
26280
  durationMs: getTimeProvider().now() - startTime,
26281
26281
  stepCount: workflowResult.stepResults.length
@@ -26481,16 +26481,16 @@ function createRunWorkflowHandler(deps) {
26481
26481
  };
26482
26482
  }
26483
26483
  function registerRunWorkflowTool(server, deps) {
26484
- const logger54 = deps.logger ?? createLogger({ tool: "run_workflow" });
26484
+ const logger55 = deps.logger ?? createLogger({ tool: "run_workflow" });
26485
26485
  const notifier = deps.notifier ?? createMcpNotifier(server);
26486
26486
  const depsWithNotifier = { ...deps, notifier };
26487
26487
  const secureHandler = createSecureHandler(createRunWorkflowHandler(depsWithNotifier), {
26488
26488
  toolName: "run_workflow",
26489
26489
  rateLimiter: deps.rateLimiter,
26490
- logger: logger54
26490
+ logger: logger55
26491
26491
  });
26492
26492
  const timeoutMs = getToolTimeout("run_workflow", deps.security);
26493
- const wrappedHandler = wrapToolWithTimeout("run_workflow", secureHandler, { timeoutMs, logger: logger54 });
26493
+ const wrappedHandler = wrapToolWithTimeout("run_workflow", secureHandler, { timeoutMs, logger: logger55 });
26494
26494
  server.registerTool(
26495
26495
  "run_workflow",
26496
26496
  {
@@ -26498,9 +26498,9 @@ function registerRunWorkflowTool(server, deps) {
26498
26498
  inputSchema: toolInputSchema,
26499
26499
  annotations: getToolAnnotations("run_workflow")
26500
26500
  },
26501
- toSdkCallbackWithBudgetCheck(wrappedHandler, "run_workflow", timeoutMs, logger54)
26501
+ toSdkCallbackWithBudgetCheck(wrappedHandler, "run_workflow", timeoutMs, logger55)
26502
26502
  );
26503
- logger54.info("Registered run_workflow tool with secure handler and timeout protection");
26503
+ logger55.info("Registered run_workflow tool with secure handler and timeout protection");
26504
26504
  }
26505
26505
 
26506
26506
  // src/orchestration/graph/graph-types.ts
@@ -28818,8 +28818,8 @@ var OrchestratorAdapter = class {
28818
28818
  history = [];
28819
28819
  logger;
28820
28820
  agent = null;
28821
- constructor(logger54) {
28822
- this.logger = logger54 ?? createLogger({ component: "OrchestratorAdapter" });
28821
+ constructor(logger55) {
28822
+ this.logger = logger55 ?? createLogger({ component: "OrchestratorAdapter" });
28823
28823
  }
28824
28824
  setOrchestrator(agent) {
28825
28825
  this.agent = agent;
@@ -28959,10 +28959,10 @@ var WorkflowOrchestratorAdapter = class {
28959
28959
  logger;
28960
28960
  executions = /* @__PURE__ */ new Map();
28961
28961
  history = [];
28962
- constructor(engine, logger54) {
28962
+ constructor(engine, logger55) {
28963
28963
  this.id = `workflow-${randomUUID10().slice(0, 8)}`;
28964
28964
  this.engine = engine;
28965
- this.logger = logger54 ?? createLogger({ component: "WorkflowOrchestratorAdapter" });
28965
+ this.logger = logger55 ?? createLogger({ component: "WorkflowOrchestratorAdapter" });
28966
28966
  }
28967
28967
  async execute(definition, inputs, _options) {
28968
28968
  if (definition.type !== "workflow") {
@@ -29154,22 +29154,22 @@ var OrchestratorFactory = class {
29154
29154
  }
29155
29155
  };
29156
29156
  async function createOrchestratorFactory(config) {
29157
- const logger54 = config?.logger ?? createLogger({ component: "OrchestratorFactory" });
29158
- logger54.info("Initializing OrchestratorFactory");
29157
+ const logger55 = config?.logger ?? createLogger({ component: "OrchestratorFactory" });
29158
+ logger55.info("Initializing OrchestratorFactory");
29159
29159
  let workflowEngine;
29160
29160
  try {
29161
29161
  const workflowConfig = {
29162
29162
  ...config?.workflowConfig,
29163
- logger: logger54
29163
+ logger: logger55
29164
29164
  };
29165
29165
  if (config?.modelAdapter !== void 0) {
29166
29166
  workflowConfig.modelAdapter = config.modelAdapter;
29167
29167
  }
29168
29168
  workflowEngine = await createProductionWorkflowEngine(workflowConfig);
29169
- logger54.info("WorkflowEngine initialized");
29169
+ logger55.info("WorkflowEngine initialized");
29170
29170
  } catch (error) {
29171
29171
  const message = getErrorMessage(error);
29172
- logger54.warn("WorkflowEngine initialization failed, workflow orchestration unavailable", {
29172
+ logger55.warn("WorkflowEngine initialization failed, workflow orchestration unavailable", {
29173
29173
  error: message
29174
29174
  });
29175
29175
  }
@@ -29180,12 +29180,12 @@ async function createOrchestratorFactory(config) {
29180
29180
  var MAX_OUTCOMES2 = 200;
29181
29181
  var AMBIGUITY_THRESHOLD = 0.7;
29182
29182
  function createWorkflowRouter(options) {
29183
- const logger54 = options?.logger ?? createLogger({ component: "WorkflowRouter" });
29184
- const analyzer = options?.analyzer ?? createSharedTaskAnalyzer({ logger: logger54 });
29183
+ const logger55 = options?.logger ?? createLogger({ component: "WorkflowRouter" });
29184
+ const analyzer = options?.analyzer ?? createSharedTaskAnalyzer({ logger: logger55 });
29185
29185
  const outcomes = [];
29186
29186
  return {
29187
29187
  route(signals, routerOpts) {
29188
- return routeTask(signals, analyzer, logger54, routerOpts);
29188
+ return routeTask(signals, analyzer, logger55, routerOpts);
29189
29189
  },
29190
29190
  recordOutcome(outcome) {
29191
29191
  recordPatternOutcome(outcomes, outcome);
@@ -29227,7 +29227,7 @@ function buildDecision(input) {
29227
29227
  }
29228
29228
  return base;
29229
29229
  }
29230
- function routeTask(signals, analyzer, logger54, _opts) {
29230
+ function routeTask(signals, analyzer, logger55, _opts) {
29231
29231
  const analysis = analyzer.analyze(signals.description);
29232
29232
  const enriched = enrichSignals(signals, analysis);
29233
29233
  const matchedRules = [];
@@ -29237,7 +29237,7 @@ function routeTask(signals, analyzer, logger54, _opts) {
29237
29237
  if (result !== void 0) {
29238
29238
  matchedRules.push(rule.name);
29239
29239
  collectAlternatives(alternatives, result.pattern);
29240
- logger54.info("Workflow pattern selected", {
29240
+ logger55.info("Workflow pattern selected", {
29241
29241
  pattern: result.pattern,
29242
29242
  rule: rule.name,
29243
29243
  confidence: result.confidence,
@@ -29247,7 +29247,7 @@ function routeTask(signals, analyzer, logger54, _opts) {
29247
29247
  return buildDecision({ result, matchedRules, alternatives, analysis });
29248
29248
  }
29249
29249
  }
29250
- logger54.info("Using fallback pattern", { pattern: "graph", taskType: analysis.taskType });
29250
+ logger55.info("Using fallback pattern", { pattern: "graph", taskType: analysis.taskType });
29251
29251
  const fallback = {
29252
29252
  pattern: "graph",
29253
29253
  reasoning: "No specific rule matched \u2014 using Graph DAG as the most general pattern",
@@ -29626,11 +29626,11 @@ function setAnalysis(snapshot, analysis) {
29626
29626
  var globalSicaConfig;
29627
29627
  var sicaEnabled = false;
29628
29628
  function initializeSica(options) {
29629
- const { sicaConfig, logger: logger54 } = options;
29629
+ const { sicaConfig, logger: logger55 } = options;
29630
29630
  if (sicaConfig?.enabled !== true) {
29631
29631
  sicaEnabled = false;
29632
29632
  globalSicaConfig = void 0;
29633
- logger54.info("SICA self-improvement disabled by configuration");
29633
+ logger55.info("SICA self-improvement disabled by configuration");
29634
29634
  return {
29635
29635
  enabled: false,
29636
29636
  reason: sicaConfig?.enabled === false ? "disabled in config" : "not enabled (opt-in feature)"
@@ -29638,7 +29638,7 @@ function initializeSica(options) {
29638
29638
  }
29639
29639
  sicaEnabled = true;
29640
29640
  globalSicaConfig = sicaConfig;
29641
- logger54.info("SICA self-improvement enabled", {
29641
+ logger55.info("SICA self-improvement enabled", {
29642
29642
  improvementThreshold: sicaConfig.improvementThreshold,
29643
29643
  maxActiveVersions: sicaConfig.maxActiveVersions,
29644
29644
  cooldownMs: sicaConfig.improvementCooldownMs
@@ -29656,18 +29656,18 @@ function getSicaConfig() {
29656
29656
  }
29657
29657
 
29658
29658
  // src/mcp/tools/orchestrate-sica.ts
29659
- function createOrchestratorWithSica(logger54, adapter) {
29660
- const orchestrator = new Orchestrator({ logger: logger54, ...adapter !== void 0 ? { adapter } : {} });
29659
+ function createOrchestratorWithSica(logger55, adapter) {
29660
+ const orchestrator = new Orchestrator({ logger: logger55, ...adapter !== void 0 ? { adapter } : {} });
29661
29661
  if (!isSicaEnabled()) {
29662
- logger54.debug("SICA not enabled, using plain orchestrator");
29662
+ logger55.debug("SICA not enabled, using plain orchestrator");
29663
29663
  return orchestrator;
29664
29664
  }
29665
29665
  const sicaConfig = getSicaConfig();
29666
29666
  if (sicaConfig === void 0) {
29667
- logger54.debug("SICA config unavailable, using plain orchestrator");
29667
+ logger55.debug("SICA config unavailable, using plain orchestrator");
29668
29668
  return orchestrator;
29669
29669
  }
29670
- logger54.info("Creating SICA-wrapped orchestrator", {
29670
+ logger55.info("Creating SICA-wrapped orchestrator", {
29671
29671
  improvementThreshold: sicaConfig.improvementThreshold,
29672
29672
  maxActiveVersions: sicaConfig.maxActiveVersions
29673
29673
  });
@@ -29687,9 +29687,9 @@ function createOrchestratorWithSica(logger54, adapter) {
29687
29687
  improvementCooldownMs: sicaConfig.improvementCooldownMs,
29688
29688
  enableObservability: sicaConfig.enableObservability
29689
29689
  },
29690
- logger: logger54
29690
+ logger: logger55
29691
29691
  });
29692
- return createSicaOrchestratorAdapter(sicaAgent, logger54);
29692
+ return createSicaOrchestratorAdapter(sicaAgent, logger55);
29693
29693
  }
29694
29694
  function createSicaOrchestratorAdapter(sicaAgent, _logger) {
29695
29695
  return {
@@ -29743,7 +29743,7 @@ var PersistedCatalogSchema = z51.object({
29743
29743
  function getCatalogPath() {
29744
29744
  return nexusDataPath(CATALOG_SUBDIR, CATALOG_FILE);
29745
29745
  }
29746
- function loadPersistedCatalog(logger54) {
29746
+ function loadPersistedCatalog(logger55) {
29747
29747
  const filePath = getCatalogPath();
29748
29748
  try {
29749
29749
  if (!fs4.existsSync(filePath)) return [];
@@ -29751,21 +29751,21 @@ function loadPersistedCatalog(logger54) {
29751
29751
  const parsed = JSON.parse(content);
29752
29752
  const result = PersistedCatalogSchema.safeParse(parsed);
29753
29753
  if (!result.success) {
29754
- logger54.warn("Invalid pending catalog file, starting fresh", {
29754
+ logger55.warn("Invalid pending catalog file, starting fresh", {
29755
29755
  errors: result.error.issues.map((i) => i.message)
29756
29756
  });
29757
29757
  return [];
29758
29758
  }
29759
29759
  return result.data.references;
29760
29760
  } catch (error) {
29761
- logger54.debug("Could not load pending catalog, starting fresh", {
29761
+ logger55.debug("Could not load pending catalog, starting fresh", {
29762
29762
  error: getErrorMessage(error),
29763
29763
  filePath
29764
29764
  });
29765
29765
  return [];
29766
29766
  }
29767
29767
  }
29768
- function savePersistedCatalog(references, logger54) {
29768
+ function savePersistedCatalog(references, logger55) {
29769
29769
  const dirPath = nexusDataPath(CATALOG_SUBDIR);
29770
29770
  const filePath = getCatalogPath();
29771
29771
  const tempPath = `${filePath}.tmp.${String(process.pid)}`;
@@ -29787,7 +29787,7 @@ function savePersistedCatalog(references, logger54) {
29787
29787
  } catch {
29788
29788
  }
29789
29789
  const message = getErrorMessage(error);
29790
- logger54.warn("Failed to persist pending catalog", { error: message });
29790
+ logger55.warn("Failed to persist pending catalog", { error: message });
29791
29791
  }
29792
29792
  }
29793
29793
  var ARXIV_PATTERN = /\b(\d{4}\.\d{4,5})\b/g;
@@ -29797,8 +29797,8 @@ var ResearchAutoCatalog = class _ResearchAutoCatalog {
29797
29797
  pendingReferences = [];
29798
29798
  /** Maximum pending references to hold in memory. */
29799
29799
  static MAX_PENDING = 100;
29800
- constructor(logger54) {
29801
- this.logger = logger54 ?? createLogger({ component: "research-auto-catalog" });
29800
+ constructor(logger55) {
29801
+ this.logger = logger55 ?? createLogger({ component: "research-auto-catalog" });
29802
29802
  const persisted = loadPersistedCatalog(this.logger);
29803
29803
  if (persisted.length > 0) {
29804
29804
  this.pendingReferences.push(...persisted.slice(0, _ResearchAutoCatalog.MAX_PENDING));
@@ -29953,8 +29953,8 @@ var ResearchAutoCatalog = class _ResearchAutoCatalog {
29953
29953
  }
29954
29954
  };
29955
29955
  var autoCatalogInstance;
29956
- function getAutoCatalog(logger54) {
29957
- autoCatalogInstance ??= new ResearchAutoCatalog(logger54);
29956
+ function getAutoCatalog(logger55) {
29957
+ autoCatalogInstance ??= new ResearchAutoCatalog(logger55);
29958
29958
  return autoCatalogInstance;
29959
29959
  }
29960
29960
 
@@ -31761,12 +31761,12 @@ function computeExpertReliability() {
31761
31761
  }
31762
31762
  return reliability;
31763
31763
  }
31764
- function computeAgentPlan(task, logger54) {
31764
+ function computeAgentPlan(task, logger55) {
31765
31765
  try {
31766
31766
  const analyzer = new SharedTaskAnalyzer();
31767
31767
  const analysis = analyzer.analyze(task);
31768
31768
  if (analysis.complexity === "simple") {
31769
- logger54.debug("Skipping AOrchestra planning for simple task", {
31769
+ logger55.debug("Skipping AOrchestra planning for simple task", {
31770
31770
  taskType: analysis.taskType
31771
31771
  });
31772
31772
  return void 0;
@@ -31778,9 +31778,9 @@ function computeAgentPlan(task, logger54) {
31778
31778
  if (rate < 0.5) excludedExperts.push({ role, rate: Math.round(rate * 100) / 100 });
31779
31779
  }
31780
31780
  if (excludedExperts.length > 0) {
31781
- logger54.warn("Experts excluded by reliability filter", { excludedExperts });
31781
+ logger55.warn("Experts excluded by reliability filter", { excludedExperts });
31782
31782
  }
31783
- logger54.info("AOrchestra plan", {
31783
+ logger55.info("AOrchestra plan", {
31784
31784
  experts: plan.totalExperts,
31785
31785
  taskType: plan.taskType,
31786
31786
  complexity: plan.complexity,
@@ -31788,7 +31788,7 @@ function computeAgentPlan(task, logger54) {
31788
31788
  });
31789
31789
  return plan;
31790
31790
  } catch (planError) {
31791
- logger54.warn("AOrchestra planning failed", {
31791
+ logger55.warn("AOrchestra planning failed", {
31792
31792
  error: getErrorMessage(planError)
31793
31793
  });
31794
31794
  return void 0;
@@ -31868,7 +31868,7 @@ async function executeOnAdapter(opts) {
31868
31868
  }
31869
31869
  }
31870
31870
  function createWorkerExecutor(config) {
31871
- const { taskDescription, modelAdapter, logger: logger54, learnings, perWorkerRouting } = config;
31871
+ const { taskDescription, modelAdapter, logger: logger55, learnings, perWorkerRouting } = config;
31872
31872
  const effectiveFallbackCli = modelAdapter.providerId;
31873
31873
  return async (entry, priorWaveResults, signal) => {
31874
31874
  const workerStartMs = getTimeProvider().now();
@@ -31877,7 +31877,7 @@ function createWorkerExecutor(config) {
31877
31877
  modelAdapter,
31878
31878
  effectiveFallbackCli,
31879
31879
  perWorkerRouting === true,
31880
- logger54
31880
+ logger55
31881
31881
  );
31882
31882
  return executeOnAdapter({
31883
31883
  entry,
@@ -32053,15 +32053,15 @@ function prepareBudgetedEntries(plan, maxCalls, log) {
32053
32053
  return entries;
32054
32054
  }
32055
32055
  async function executeWorkerDispatch(options) {
32056
- const { agentPlan, taskDescription, modelAdapter, logger: logger54, maxConcurrency } = options;
32056
+ const { agentPlan, taskDescription, modelAdapter, logger: logger55, maxConcurrency } = options;
32057
32057
  const maxCalls = resolveMaxWorkerCalls(options.maxWorkerCalls);
32058
32058
  const startMs = getTimeProvider().now();
32059
- const entries = prepareBudgetedEntries(agentPlan, maxCalls, logger54);
32059
+ const entries = prepareBudgetedEntries(agentPlan, maxCalls, logger55);
32060
32060
  const qualityGate = options.qualityGate === false ? void 0 : options.qualityGate;
32061
32061
  const executorConfig = {
32062
32062
  taskDescription,
32063
32063
  modelAdapter,
32064
- logger: logger54,
32064
+ logger: logger55,
32065
32065
  ...options.learnings !== void 0 ? { learnings: options.learnings } : {},
32066
32066
  ...options.perWorkerRouting !== void 0 ? { perWorkerRouting: options.perWorkerRouting } : {}
32067
32067
  };
@@ -32082,8 +32082,8 @@ async function executeWorkerDispatch(options) {
32082
32082
  };
32083
32083
  await runSynthesisPhase(state, options, maxCalls);
32084
32084
  const refined = await runRefinementPhase(state, entries, options, maxCalls);
32085
- const base = buildDispatchResult(state.results, startMs, logger54, state.totalModelCalls);
32086
- logDispatchInsights(state.results, logger54);
32085
+ const base = buildDispatchResult(state.results, startMs, logger55, state.totalModelCalls);
32086
+ logDispatchInsights(state.results, logger55);
32087
32087
  return {
32088
32088
  ...base,
32089
32089
  ...refined ? { refined: true } : {},
@@ -32141,18 +32141,18 @@ function recordWorkerOutcomes(results, taskDescription) {
32141
32141
  });
32142
32142
  }
32143
32143
  }
32144
- function buildDispatchResult(results, startMs, logger54, totalModelCalls) {
32144
+ function buildDispatchResult(results, startMs, logger55, totalModelCalls) {
32145
32145
  const successCount = results.filter((r) => r.status === "success").length;
32146
32146
  const errorCount = results.filter((r) => r.status === "error").length;
32147
32147
  const conflicts = detectConflicts(results);
32148
32148
  if (conflicts.length > 0) {
32149
- logger54.warn("Worker output conflicts detected \u2014 human review recommended", {
32149
+ logger55.warn("Worker output conflicts detected \u2014 human review recommended", {
32150
32150
  conflictCount: conflicts.length,
32151
32151
  files: conflicts.map((c) => c.filePath)
32152
32152
  });
32153
32153
  }
32154
32154
  const durationMs = getTimeProvider().now() - startMs;
32155
- logger54.info("Worker dispatch complete", {
32155
+ logger55.info("Worker dispatch complete", {
32156
32156
  totalWorkers: results.length,
32157
32157
  successCount,
32158
32158
  errorCount,
@@ -32947,7 +32947,12 @@ var TaskStageSchema = z55.enum([
32947
32947
  "executing",
32948
32948
  "verifying",
32949
32949
  "complete",
32950
- "blocked"
32950
+ "blocked",
32951
+ // #3091 / epic #2631: terminal failure stage. Distinct from `blocked`
32952
+ // (recoverable, still in-flight) — `failed` is terminal and maps to the
32953
+ // job-result `failed` status. Added so async-mode writers can record a
32954
+ // failed run in StructuredTaskState instead of the Stage-1 sidecar.
32955
+ "failed"
32951
32956
  ]);
32952
32957
  var TaskDecisionSchema = z55.object({
32953
32958
  ts: z55.iso.datetime(),
@@ -32996,6 +33001,7 @@ var TaskCancellationSchema = z55.object({
32996
33001
  /** Optional human-readable note carried back to the caller. */
32997
33002
  reason: z55.string().max(1e3).optional()
32998
33003
  });
33004
+ var TASK_RESULT_MAX_BYTES = 1048576;
32999
33005
  var StructuredTaskStateSchema = z55.object({
33000
33006
  taskId: z55.string().min(1),
33001
33007
  stage: TaskStageSchema,
@@ -33048,6 +33054,15 @@ var StructuredTaskStateSchema = z55.object({
33048
33054
  * second cancellation event).
33049
33055
  */
33050
33056
  cancellation: TaskCancellationSchema.optional(),
33057
+ /**
33058
+ * Creation timestamp (#3090 / epic #2631). Set by the reducer to the
33059
+ * `init` entry's `ts` and never mutated thereafter — `updatedAt` advances
33060
+ * with each write, but `createdAt` is fixed. Job-result readers need the
33061
+ * original creation time; `updatedAt` alone can't supply it once any
33062
+ * transition has been recorded. Optional for backward-compat with
33063
+ * pre-#3090 logs (the reducer backfills it from the init entry).
33064
+ */
33065
+ createdAt: z55.iso.datetime().optional(),
33051
33066
  updatedAt: z55.iso.datetime()
33052
33067
  });
33053
33068
  var StructuredTaskLogEntrySchema = z55.discriminatedUnion("event", [
@@ -33170,6 +33185,31 @@ function appendBlocker(taskId, blocker, customDir) {
33170
33185
  function updateStage(taskId, stage, ts, customDir) {
33171
33186
  return appendLogEntry(taskId, { event: "stage", ts, stage }, customDir);
33172
33187
  }
33188
+ function appendResult(taskId, result, ts, customDir) {
33189
+ let payload = result;
33190
+ let serialized;
33191
+ try {
33192
+ serialized = JSON.stringify(result ?? null);
33193
+ } catch (cause) {
33194
+ const e = cause instanceof Error ? cause : new Error(String(cause));
33195
+ return err(new Error(`Failed to serialize result for task ${taskId}: ${e.message}`));
33196
+ }
33197
+ const bytes = Buffer.byteLength(serialized, "utf-8");
33198
+ if (bytes > TASK_RESULT_MAX_BYTES) {
33199
+ payload = {
33200
+ truncated: true,
33201
+ originalBytes: bytes,
33202
+ maxBytes: TASK_RESULT_MAX_BYTES,
33203
+ note: "Result exceeded TASK_RESULT_MAX_BYTES \u2014 original dropped at write time."
33204
+ };
33205
+ logger30.warn("Task result truncated at write", {
33206
+ taskId,
33207
+ bytes,
33208
+ max: TASK_RESULT_MAX_BYTES
33209
+ });
33210
+ }
33211
+ return appendLogEntry(taskId, { event: "result", ts, result: payload }, customDir);
33212
+ }
33173
33213
  function readTaskState(taskId, customDir) {
33174
33214
  const idCheck = validateTaskId(taskId);
33175
33215
  if (!idCheck.ok) return err(idCheck.error);
@@ -33220,7 +33260,11 @@ function reduceLogEntries(taskId, entries) {
33220
33260
  ...initState,
33221
33261
  decisions: [...initState.decisions],
33222
33262
  blockers: initState.blockers.map((b) => ({ ...b })),
33223
- version: initState.version ?? 0
33263
+ version: initState.version ?? 0,
33264
+ // #3090: createdAt is fixed at the init entry's ts and never advances
33265
+ // (unlike updatedAt). Prefer an explicit createdAt on the init state,
33266
+ // else fall back to the init entry's ts.
33267
+ createdAt: initState.createdAt ?? init.ts
33224
33268
  };
33225
33269
  for (const entry of entries) {
33226
33270
  if (entry === init) continue;
@@ -33319,7 +33363,6 @@ function applyLogEntry(state, entry) {
33319
33363
  }
33320
33364
 
33321
33365
  // src/mcp/tools/orchestrate.ts
33322
- import { randomUUID as randomUUID11 } from "crypto";
33323
33366
  function generateTaskId() {
33324
33367
  const timestamp = getTimeProvider().now().toString(36);
33325
33368
  const random = getRandomProvider().random().toString(36).substring(2, 8);
@@ -33415,10 +33458,10 @@ function buildOutputFromOrchestratorResult(taskId, orchResult, durationMs, routi
33415
33458
  }
33416
33459
  };
33417
33460
  }
33418
- function createOrchestratorFromDeps(deps, logger54, orchestratorType) {
33461
+ function createOrchestratorFromDeps(deps, logger55, orchestratorType) {
33419
33462
  if (deps.orchestrator !== void 0) return deps.orchestrator;
33420
- const techLead = createOrchestratorWithSica(logger54, deps.modelAdapter);
33421
- const factory = new OrchestratorFactory({ logger: logger54, techLead });
33463
+ const techLead = createOrchestratorWithSica(logger55, deps.modelAdapter);
33464
+ const factory = new OrchestratorFactory({ logger: logger55, techLead });
33422
33465
  return factory.create(orchestratorType ?? "orchestrator");
33423
33466
  }
33424
33467
  function createErrorOptions(taskId, cause) {
@@ -33530,16 +33573,16 @@ function recordOrchestrationError(errorMessage, taskDescription, durationMs) {
33530
33573
  }
33531
33574
  }
33532
33575
  function routeAndPrepare(input, deps, router) {
33533
- const logger54 = deps.logger ?? createLogger({ tool: "orchestrate" });
33534
- const workflowRouter = router ?? createWorkflowRouter({ logger: logger54 });
33576
+ const logger55 = deps.logger ?? createLogger({ tool: "orchestrate" });
33577
+ const workflowRouter = router ?? createWorkflowRouter({ logger: logger55 });
33535
33578
  const decision = workflowRouter.route({ description: input.task });
33536
33579
  const orchType = mapPatternToOrchestratorType(decision.pattern);
33537
- logger54.info("Workflow pattern selected", {
33580
+ logger55.info("Workflow pattern selected", {
33538
33581
  pattern: decision.pattern,
33539
33582
  orchestratorType: orchType
33540
33583
  });
33541
- const orchestrator = createOrchestratorFromDeps(deps, logger54, orchType);
33542
- return { workflowRouter, decision, orchestrator, logger: logger54 };
33584
+ const orchestrator = createOrchestratorFromDeps(deps, logger55, orchType);
33585
+ return { workflowRouter, decision, orchestrator, logger: logger55 };
33543
33586
  }
33544
33587
  function buildRoutingInfo(decision) {
33545
33588
  return {
@@ -33558,10 +33601,10 @@ function recordRouterOutcome(workflowRouter, decision, success, durationMs) {
33558
33601
  timestamp: getTimeProvider().now()
33559
33602
  });
33560
33603
  }
33561
- function handleOrchestrationException(error, taskId, task, logger54) {
33604
+ function handleOrchestrationException(error, taskId, task, logger55) {
33562
33605
  const message = error instanceof Error ? error.message : "Unknown error";
33563
33606
  const cause = error instanceof Error ? error : void 0;
33564
- logger54.error("Orchestration exception", cause, { taskId });
33607
+ logger55.error("Orchestration exception", cause, { taskId });
33565
33608
  recordOrchestrationError(message, task);
33566
33609
  return err(
33567
33610
  new OrchestrationError(
@@ -33570,13 +33613,13 @@ function handleOrchestrationException(error, taskId, task, logger54) {
33570
33613
  )
33571
33614
  );
33572
33615
  }
33573
- function startHeartbeatTracking(label, logger54) {
33616
+ function startHeartbeatTracking(label, logger55) {
33574
33617
  const monitor = getHeartbeatMonitor();
33575
33618
  const sessionId = monitor.startSession(label);
33576
33619
  const timer = setInterval(() => {
33577
33620
  monitor.heartbeat(sessionId);
33578
33621
  if (monitor.isStalled(sessionId)) {
33579
- logger54.warn("Orchestration session stalled", { label, sessionId });
33622
+ logger55.warn("Orchestration session stalled", { label, sessionId });
33580
33623
  }
33581
33624
  }, HEARTBEAT_TIMEOUTS.heartbeatIntervalMs);
33582
33625
  return {
@@ -33647,9 +33690,10 @@ function handleOrchestratorSuccess(ctx) {
33647
33690
  });
33648
33691
  return ok(output2);
33649
33692
  }
33650
- async function executeOrchestration(input, deps, router, snapshot, trustTier) {
33651
- const { workflowRouter, decision, orchestrator, logger: logger54 } = routeAndPrepare(input, deps, router);
33652
- const taskId = generateTaskId();
33693
+ async function executeOrchestration(input, deps, opts = {}) {
33694
+ const { router, snapshot, trustTier, taskId: providedTaskId } = opts;
33695
+ const { workflowRouter, decision, orchestrator, logger: logger55 } = routeAndPrepare(input, deps, router);
33696
+ const taskId = providedTaskId ?? generateTaskId();
33653
33697
  const startTime = getTimeProvider().now();
33654
33698
  if (snapshot !== void 0) setRouting(snapshot, buildRoutingInfo(decision));
33655
33699
  const fastResult = trySimpleTaskFastPath({
@@ -33658,18 +33702,18 @@ async function executeOrchestration(input, deps, router, snapshot, trustTier) {
33658
33702
  decision,
33659
33703
  workflowRouter,
33660
33704
  startTime,
33661
- logger: logger54
33705
+ logger: logger55
33662
33706
  });
33663
33707
  if (fastResult !== void 0) {
33664
33708
  if (snapshot !== void 0 && fastResult.ok) setAnalysis(snapshot, fastResult.value.analysis);
33665
33709
  return fastResult;
33666
33710
  }
33667
- logger54.info("Starting orchestration", { taskId, taskLength: input.task.length });
33668
- recordTaskStateInit(taskId, input.task, logger54);
33711
+ logger55.info("Starting orchestration", { taskId, taskLength: input.task.length });
33712
+ recordTaskStateInit(taskId, input.task, logger55);
33669
33713
  const task = await createTaskFromInput(input, taskId);
33670
33714
  const definition = { type: "task", task };
33671
- const hb = startHeartbeatTracking(`orchestrate-${taskId}`, logger54);
33672
- const policy = await deriveOrchestratePolicy(input.task, deps, logger54, trustTier);
33715
+ const hb = startHeartbeatTracking(`orchestrate-${taskId}`, logger55);
33716
+ const policy = await deriveOrchestratePolicy(input.task, deps, logger55, trustTier);
33673
33717
  try {
33674
33718
  return await runOrchestratorWithStateTracking({
33675
33719
  taskId,
@@ -33680,23 +33724,23 @@ async function executeOrchestration(input, deps, router, snapshot, trustTier) {
33680
33724
  decision,
33681
33725
  workflowRouter,
33682
33726
  startTime,
33683
- logger: logger54
33727
+ logger: logger55
33684
33728
  });
33685
33729
  } catch (error) {
33686
- recordTaskStateBlocker(taskId, error instanceof Error ? error.message : String(error), logger54);
33687
- recordTaskStateStage(taskId, "blocked", logger54);
33688
- return handleOrchestrationException(error, taskId, input.task, logger54);
33730
+ recordTaskStateBlocker(taskId, error instanceof Error ? error.message : String(error), logger55);
33731
+ recordTaskStateStage(taskId, "failed", logger55);
33732
+ return handleOrchestrationException(error, taskId, input.task, logger55);
33689
33733
  } finally {
33690
33734
  hb.cleanup();
33691
33735
  }
33692
33736
  }
33693
33737
  async function runOrchestratorWithStateTracking(params) {
33694
- const { taskId, taskInput, definition, orchestrator, policy, logger: logger54 } = params;
33695
- recordTaskStateStage(taskId, "executing", logger54);
33738
+ const { taskId, taskInput, definition, orchestrator, policy, logger: logger55 } = params;
33739
+ recordTaskStateStage(taskId, "executing", logger55);
33696
33740
  const result = await withAccessPolicy(policy, () => orchestrator.execute(definition, {}));
33697
33741
  if (!result.ok) {
33698
- recordTaskStateBlocker(taskId, result.error.message, logger54);
33699
- recordTaskStateStage(taskId, "blocked", logger54);
33742
+ recordTaskStateBlocker(taskId, result.error.message, logger55);
33743
+ recordTaskStateStage(taskId, "failed", logger55);
33700
33744
  return handleOrchestratorFailure({
33701
33745
  error: result.error,
33702
33746
  taskId,
@@ -33704,10 +33748,10 @@ async function runOrchestratorWithStateTracking(params) {
33704
33748
  decision: params.decision,
33705
33749
  workflowRouter: params.workflowRouter,
33706
33750
  startTime: params.startTime,
33707
- logger: logger54
33751
+ logger: logger55
33708
33752
  });
33709
33753
  }
33710
- recordTaskStateStage(taskId, "complete", logger54);
33754
+ recordTaskStateStage(taskId, "complete", logger55);
33711
33755
  return handleOrchestratorSuccess({
33712
33756
  orchResult: result.value,
33713
33757
  taskId,
@@ -33715,7 +33759,7 @@ async function runOrchestratorWithStateTracking(params) {
33715
33759
  decision: params.decision,
33716
33760
  workflowRouter: params.workflowRouter,
33717
33761
  startTime: params.startTime,
33718
- logger: logger54
33762
+ logger: logger55
33719
33763
  });
33720
33764
  }
33721
33765
  function isTaskStateEnabled() {
@@ -33724,7 +33768,7 @@ function isTaskStateEnabled() {
33724
33768
  const normalized = raw.toLowerCase();
33725
33769
  return normalized !== "0" && normalized !== "false";
33726
33770
  }
33727
- function recordTaskStateInit(taskId, taskText, logger54) {
33771
+ function recordTaskStateInit(taskId, taskText, logger55) {
33728
33772
  if (!isTaskStateEnabled()) return;
33729
33773
  const now = getTimeProvider().nowIso();
33730
33774
  const initial = {
@@ -33737,36 +33781,48 @@ function recordTaskStateInit(taskId, taskText, logger54) {
33737
33781
  };
33738
33782
  const result = initTaskState(initial);
33739
33783
  if (!result.ok) {
33740
- logger54.warn("task-state: init failed, continuing", {
33784
+ logger55.warn("task-state: init failed, continuing", {
33741
33785
  taskId,
33742
33786
  error: result.error.message,
33743
33787
  taskLength: taskText.length
33744
33788
  });
33745
33789
  }
33746
33790
  }
33747
- function recordTaskStateStage(taskId, stage, logger54) {
33791
+ function recordTaskStateStage(taskId, stage, logger55) {
33748
33792
  if (!isTaskStateEnabled()) return;
33749
33793
  const result = updateStage(taskId, stage, getTimeProvider().nowIso());
33750
33794
  if (!result.ok) {
33751
- logger54.warn("task-state: stage update failed", {
33795
+ logger55.warn("task-state: stage update failed", {
33752
33796
  taskId,
33753
33797
  stage,
33754
33798
  error: result.error.message
33755
33799
  });
33756
33800
  }
33757
33801
  }
33758
- function recordTaskStateBlocker(taskId, blocker, logger54) {
33802
+ function recordTaskStateBlocker(taskId, blocker, logger55) {
33759
33803
  if (!isTaskStateEnabled()) return;
33760
33804
  const ts = getTimeProvider().nowIso();
33761
33805
  const result = appendBlocker(taskId, { ts, blocker });
33762
33806
  if (!result.ok) {
33763
- logger54.warn("task-state: blocker record failed", {
33807
+ logger55.warn("task-state: blocker record failed", {
33764
33808
  taskId,
33765
33809
  error: result.error.message
33766
33810
  });
33767
33811
  }
33768
33812
  }
33769
- async function deriveOrchestratePolicy(taskText, deps, logger54, trustTier) {
33813
+ function recordTaskStateResult(taskId, result, logger55) {
33814
+ if (!isTaskStateEnabled()) return;
33815
+ const r = appendResult(taskId, result, getTimeProvider().nowIso());
33816
+ if (!r.ok) {
33817
+ logger55.warn("task-state: result record failed", { taskId, error: r.error.message });
33818
+ }
33819
+ }
33820
+ function recordTaskStateFailure(taskId, message, logger55) {
33821
+ if (!isTaskStateEnabled()) return;
33822
+ recordTaskStateBlocker(taskId, message, logger55);
33823
+ recordTaskStateStage(taskId, "failed", logger55);
33824
+ }
33825
+ async function deriveOrchestratePolicy(taskText, deps, logger55, trustTier) {
33770
33826
  const mode = resolveAccessPolicyMode();
33771
33827
  try {
33772
33828
  const opts = {
@@ -33776,7 +33832,7 @@ async function deriveOrchestratePolicy(taskText, deps, logger54, trustTier) {
33776
33832
  };
33777
33833
  const policy = await deriveAccessPolicy(taskText, opts);
33778
33834
  if (mode !== "off") {
33779
- logger54.info("access-policy: derived", {
33835
+ logger55.info("access-policy: derived", {
33780
33836
  mode,
33781
33837
  source: policy.source,
33782
33838
  allowedToolsWildcard: policy.allowedTools === "*"
@@ -33784,7 +33840,7 @@ async function deriveOrchestratePolicy(taskText, deps, logger54, trustTier) {
33784
33840
  }
33785
33841
  return policy;
33786
33842
  } catch (error) {
33787
- logger54.warn("access-policy: derivation failed", {
33843
+ logger55.warn("access-policy: derivation failed", {
33788
33844
  mode,
33789
33845
  error: getErrorMessage(error),
33790
33846
  failClosed: mode === "enforce" || mode === "confirm_risky"
@@ -33811,22 +33867,22 @@ async function deriveOrchestratePolicy(taskText, deps, logger54, trustTier) {
33811
33867
  };
33812
33868
  }
33813
33869
  }
33814
- function instrumentV2Orchestrate(input, logger54, trustTier) {
33870
+ function instrumentV2Orchestrate(input, logger55, trustTier) {
33815
33871
  const tc = orchestrateInputToTaskContract(input, trustTier !== void 0 ? { trustTier } : {});
33816
33872
  void executeOrchestratePipeline(tc).then((m) => {
33817
- logger54.info("V2 orchestrate pipeline", { ...m });
33873
+ logger55.info("V2 orchestrate pipeline", { ...m });
33818
33874
  }).catch((error) => {
33819
- logger54.debug("V2 orchestrate pipeline failed", { error: getErrorMessage(error) });
33875
+ logger55.debug("V2 orchestrate pipeline failed", { error: getErrorMessage(error) });
33820
33876
  });
33821
33877
  }
33822
- async function tryWorkerDispatch(agentPlan, task, deps, logger54, notifier) {
33878
+ async function tryWorkerDispatch(agentPlan, task, deps, logger55, notifier) {
33823
33879
  const adapter = deps.modelAdapter;
33824
33880
  if (agentPlan === void 0 || !isWorkerDispatchEnabled() || adapter === void 0) {
33825
33881
  return void 0;
33826
33882
  }
33827
33883
  const abortSignal = abortSignalStorage.getStore();
33828
33884
  if (abortSignal?.aborted === true) {
33829
- logger54.info("Worker dispatch aborted before start (client cancelled)");
33885
+ logger55.info("Worker dispatch aborted before start (client cancelled)");
33830
33886
  return void 0;
33831
33887
  }
33832
33888
  try {
@@ -33837,14 +33893,14 @@ async function tryWorkerDispatch(agentPlan, task, deps, logger54, notifier) {
33837
33893
  agentPlan,
33838
33894
  taskDescription: task,
33839
33895
  modelAdapter: adapter,
33840
- logger: logger54,
33896
+ logger: logger55,
33841
33897
  synthesize: true,
33842
33898
  refine: true,
33843
33899
  perWorkerRouting: true
33844
33900
  })
33845
33901
  );
33846
33902
  } catch (dispatchError) {
33847
- logger54.warn("Worker dispatch failed, continuing with standard orchestration", {
33903
+ logger55.warn("Worker dispatch failed, continuing with standard orchestration", {
33848
33904
  error: dispatchError instanceof Error ? dispatchError.message : String(dispatchError)
33849
33905
  });
33850
33906
  return void 0;
@@ -33905,22 +33961,26 @@ function buildTimeoutOrchestrationResult(taskId, elapsedMs, reason, snapshot) {
33905
33961
  return ok(output2);
33906
33962
  }
33907
33963
  async function executeOrchestrationWithDeadline(params) {
33908
- const { input, deps, notifier, logger: logger54, trustTier } = params;
33964
+ const { input, deps, notifier, logger: logger55, trustTier, taskId } = params;
33909
33965
  const overallDeadlineMs = getMcpSafeDeadlineMs(
33910
33966
  MCP_TIMEOUTS.perTool["orchestrate"] ?? MCP_TIMEOUTS.defaultMs,
33911
33967
  "orchestrate"
33912
33968
  );
33913
- const timeoutTaskId = generateTaskId();
33969
+ const timeoutTaskId = taskId ?? generateTaskId();
33914
33970
  const snapshot = createOrchestrationStateSnapshot(getTimeProvider().now());
33915
33971
  return raceAgainstDeadline(
33916
33972
  withProgressHeartbeat(
33917
33973
  "orchestrate",
33918
33974
  notifier,
33919
- () => executeOrchestration(input, deps, void 0, snapshot, trustTier)
33975
+ () => executeOrchestration(input, deps, {
33976
+ snapshot,
33977
+ ...trustTier !== void 0 ? { trustTier } : {},
33978
+ ...taskId !== void 0 ? { taskId } : {}
33979
+ })
33920
33980
  ),
33921
33981
  overallDeadlineMs,
33922
33982
  (elapsedMs) => {
33923
- logger54.warn("Orchestration overall deadline reached; returning partial result", {
33983
+ logger55.warn("Orchestration overall deadline reached; returning partial result", {
33924
33984
  overallDeadlineMs,
33925
33985
  elapsedMs,
33926
33986
  stage: snapshot.stage
@@ -33935,19 +33995,19 @@ async function executeOrchestrationWithDeadline(params) {
33935
33995
  );
33936
33996
  }
33937
33997
  async function runOrchestratePipeline(params) {
33938
- const { input, deps, notifier, logger: logger54, trustTier } = params;
33939
- logger54.debug("Starting orchestration", { taskLength: input.task.length });
33998
+ const { input, deps, notifier, logger: logger55, trustTier, taskId } = params;
33999
+ logger55.debug("Starting orchestration", { taskLength: input.task.length });
33940
34000
  notifier.info("orchestrate", { event: "orchestrate_start", taskLength: input.task.length });
33941
34001
  const startMs = getTimeProvider().now();
33942
34002
  const v2Config = resolveV2Config();
33943
- if (v2Config.orchestrateEnabled) instrumentV2Orchestrate(input, logger54, trustTier);
33944
- await injectMemoryContextForOrchestrate(input, logger54);
33945
- const agentPlan = v2Config.aorchestraEnabled ? computeAgentPlan(input.task, logger54) : void 0;
34003
+ if (v2Config.orchestrateEnabled) instrumentV2Orchestrate(input, logger55, trustTier);
34004
+ await injectMemoryContextForOrchestrate(input, logger55);
34005
+ const agentPlan = v2Config.aorchestraEnabled ? computeAgentPlan(input.task, logger55) : void 0;
33946
34006
  const workerDispatchResult = await tryWorkerDispatch(
33947
34007
  agentPlan,
33948
34008
  input.task,
33949
34009
  deps,
33950
- logger54,
34010
+ logger55,
33951
34011
  notifier
33952
34012
  );
33953
34013
  recordAndReflect(workerDispatchResult, input.task, deps);
@@ -33955,8 +34015,9 @@ async function runOrchestratePipeline(params) {
33955
34015
  input,
33956
34016
  deps,
33957
34017
  notifier,
33958
- logger: logger54,
33959
- ...trustTier !== void 0 ? { trustTier } : {}
34018
+ logger: logger55,
34019
+ ...trustTier !== void 0 ? { trustTier } : {},
34020
+ ...taskId !== void 0 ? { taskId } : {}
33960
34021
  });
33961
34022
  if (!result.ok) {
33962
34023
  return toolStructuredError({
@@ -33971,15 +34032,15 @@ async function runOrchestratePipeline(params) {
33971
34032
  });
33972
34033
  return assembleOrchestrateOutput(result.value, agentPlan, workerDispatchResult);
33973
34034
  }
33974
- async function injectMemoryContextForOrchestrate(input, logger54) {
34035
+ async function injectMemoryContextForOrchestrate(input, logger55) {
33975
34036
  try {
33976
34037
  const ctx = await getContextForTask({
33977
34038
  task: input.task,
33978
34039
  category: inferTaskCategory(input.task),
33979
- logger: logger54
34040
+ logger: logger55
33980
34041
  });
33981
34042
  const summary = summarizeContextForPrompt(ctx);
33982
- logger54.debug("orchestrate: unified memory context", {
34043
+ logger55.debug("orchestrate: unified memory context", {
33983
34044
  beliefs: ctx.beliefs.length,
33984
34045
  similarMemories: ctx.similarMemories.length,
33985
34046
  recentLearnings: ctx.recentLearnings.length,
@@ -33992,7 +34053,7 @@ async function injectMemoryContextForOrchestrate(input, logger54) {
33992
34053
  mutable.context = { ...mutable.context ?? {}, priorMemorySummary: summary };
33993
34054
  }
33994
34055
  } catch (error) {
33995
- logger54.debug("orchestrate: context retrieval failed", { error: getErrorMessage(error) });
34056
+ logger55.debug("orchestrate: context retrieval failed", { error: getErrorMessage(error) });
33996
34057
  }
33997
34058
  }
33998
34059
  function createOrchestrateHandler(deps) {
@@ -34055,7 +34116,11 @@ function dispatchAsyncOrchestrate(params) {
34055
34116
  tool: "orchestrate",
34056
34117
  idempotencyKey: params.input.idempotencyKey,
34057
34118
  inputs: params.input,
34058
- freshJobId: () => `job-orch-${randomUUID11()}`,
34119
+ // #3091: jobId === taskId. The async job's id IS the orchestration's
34120
+ // taskId, so get_job_result(jobId) resolves directly from the task-state
34121
+ // log (orch-<ts>-<rand>) under the Stage-2 reader. Replaces the former
34122
+ // opaque `job-orch-<uuid>` id.
34123
+ freshJobId: () => generateTaskId(),
34059
34124
  replayEnvelope: buildReplayEnvelope,
34060
34125
  collisionEnvelope: buildCollisionEnvelope
34061
34126
  });
@@ -34088,6 +34153,7 @@ function recordPendingAndRegister(jobId, key, inputs) {
34088
34153
  }
34089
34154
  }
34090
34155
  async function runOrchestrateInBackground(jobId, params) {
34156
+ const taskId = jobId;
34091
34157
  try {
34092
34158
  const result = await withDepthGuard(
34093
34159
  "orchestrate",
@@ -34096,20 +34162,23 @@ async function runOrchestrateInBackground(jobId, params) {
34096
34162
  deps: params.deps,
34097
34163
  notifier: params.notifier,
34098
34164
  logger: params.logger,
34165
+ taskId,
34099
34166
  ...params.trustTier !== void 0 ? { trustTier: params.trustTier } : {}
34100
34167
  })
34101
34168
  );
34102
34169
  writeJobComplete(jobId, "orchestrate", result);
34170
+ recordTaskStateResult(taskId, result, params.logger);
34103
34171
  } catch (err2) {
34104
34172
  const errObj = err2 instanceof Error ? err2 : new Error(String(err2));
34105
34173
  params.logger.error("Async orchestrate dispatch failed", errObj, { jobId });
34106
34174
  writeJobFailed(jobId, "orchestrate", errObj.message);
34175
+ recordTaskStateFailure(taskId, errObj.message, params.logger);
34107
34176
  } finally {
34108
34177
  release("orchestrate");
34109
34178
  }
34110
34179
  }
34111
34180
  function registerOrchestrateTool(server, deps) {
34112
- const logger54 = deps.logger ?? createLogger({ tool: "orchestrate" });
34181
+ const logger55 = deps.logger ?? createLogger({ tool: "orchestrate" });
34113
34182
  const notifier = deps.notifier ?? createMcpNotifier(server);
34114
34183
  const depsWithNotifier = { ...deps, notifier };
34115
34184
  const description2 = "Orchestrate a task by analyzing it, breaking it into subtasks if needed, and coordinating expert agents";
@@ -34117,12 +34186,12 @@ function registerOrchestrateTool(server, deps) {
34117
34186
  toolName: "orchestrate",
34118
34187
  securityTier: "user-facing",
34119
34188
  rateLimiter: deps.rateLimiter,
34120
- logger: logger54
34189
+ logger: logger55
34121
34190
  });
34122
34191
  const configuredTimeoutMs = MCP_TIMEOUTS.perTool["orchestrate"] ?? MCP_TIMEOUTS.defaultMs;
34123
34192
  const wrappedHandler = wrapToolWithTimeout("orchestrate", secureHandler, {
34124
34193
  timeoutMs: configuredTimeoutMs,
34125
- logger: logger54
34194
+ logger: logger55
34126
34195
  });
34127
34196
  server.registerTool(
34128
34197
  "orchestrate",
@@ -34131,9 +34200,9 @@ function registerOrchestrateTool(server, deps) {
34131
34200
  inputSchema: ORCHESTRATE_TOOL_SCHEMA,
34132
34201
  annotations: getToolAnnotations("orchestrate")
34133
34202
  },
34134
- toSdkCallbackWithBudgetCheck(wrappedHandler, "orchestrate", configuredTimeoutMs, logger54)
34203
+ toSdkCallbackWithBudgetCheck(wrappedHandler, "orchestrate", configuredTimeoutMs, logger55)
34135
34204
  );
34136
- logger54.info("Registered orchestrate tool with secure handler and timeout protection");
34205
+ logger55.info("Registered orchestrate tool with secure handler and timeout protection");
34137
34206
  }
34138
34207
 
34139
34208
  // src/mcp/tools/delegate-to-model-types.ts
@@ -34496,21 +34565,21 @@ function mapCompositeDecisionToOutput(decision, estimatedTokens) {
34496
34565
  }))
34497
34566
  };
34498
34567
  }
34499
- async function routeViaCompositeRouter(task, router, feedbackIntegration, logger54) {
34568
+ async function routeViaCompositeRouter(task, router, feedbackIntegration, logger55) {
34500
34569
  const result = await router.route({ content: task });
34501
34570
  if (!result.ok) {
34502
- logger54.warn("CompositeRouter routing failed", { error: result.error.message });
34571
+ logger55.warn("CompositeRouter routing failed", { error: result.error.message });
34503
34572
  return null;
34504
34573
  }
34505
34574
  const decision = result.value;
34506
34575
  let routingId;
34507
34576
  if (feedbackIntegration) {
34508
34577
  routingId = feedbackIntegration.recordRoutingDecision(decision);
34509
- logger54.debug("Recorded routing decision", { routingId, cliName: decision.cliName });
34578
+ logger55.debug("Recorded routing decision", { routingId, cliName: decision.cliName });
34510
34579
  }
34511
34580
  return { decision, routingId, feedbackIntegration };
34512
34581
  }
34513
- function recordRoutingOutcome(result, durationMs, logger54) {
34582
+ function recordRoutingOutcome(result, durationMs, logger55) {
34514
34583
  if (result.routingId === void 0 || result.feedbackIntegration === void 0) return;
34515
34584
  try {
34516
34585
  const topsisScore = result.decision.topsisScore ?? 0;
@@ -34523,13 +34592,13 @@ function recordRoutingOutcome(result, durationMs, logger54) {
34523
34592
  tokenUsage: 0
34524
34593
  // delegate-to-model is a recommendation, not execution
34525
34594
  });
34526
- logger54.debug("Recorded routing outcome", {
34595
+ logger55.debug("Recorded routing outcome", {
34527
34596
  routingId: result.routingId,
34528
34597
  topsisScore,
34529
34598
  success: topsisScore >= TOPSIS_CONFIDENCE_THRESHOLD
34530
34599
  });
34531
34600
  } catch (error) {
34532
- logger54.warn("Failed to record routing outcome", { error: getErrorMessage(error) });
34601
+ logger55.warn("Failed to record routing outcome", { error: getErrorMessage(error) });
34533
34602
  }
34534
34603
  }
34535
34604
 
@@ -34550,9 +34619,9 @@ function classifyWithGovernance(toolName, params, overrides) {
34550
34619
  const promotionReason = promoted ? buildPromotionReason(domain, params) : null;
34551
34620
  return { tier, promoted, domain, votingThreshold, promotionReason };
34552
34621
  }
34553
- function auditGovernancePromotion(classification, toolName, logger54) {
34622
+ function auditGovernancePromotion(classification, toolName, logger55) {
34554
34623
  if (!classification.promoted) return;
34555
- const log = logger54 ?? createLogger({ component: "governance" });
34624
+ const log = logger55 ?? createLogger({ component: "governance" });
34556
34625
  log.warn("Governance promotion", {
34557
34626
  tool: toolName,
34558
34627
  domain: classification.domain,
@@ -34623,9 +34692,9 @@ function recordToMemory(task, model, usedRouter) {
34623
34692
  });
34624
34693
  }
34625
34694
  }
34626
- function classifyDelegateGovernance(input, logger54) {
34695
+ function classifyDelegateGovernance(input, logger55) {
34627
34696
  const classification = classifyWithGovernance("delegate_to_model", { task: input.task });
34628
- auditGovernancePromotion(classification, "delegate_to_model", logger54);
34697
+ auditGovernancePromotion(classification, "delegate_to_model", logger55);
34629
34698
  return classification;
34630
34699
  }
34631
34700
  function enrichWithGovernance(output2, governance) {
@@ -34639,12 +34708,12 @@ function enrichWithGovernance(output2, governance) {
34639
34708
  }
34640
34709
  };
34641
34710
  }
34642
- function instrumentV2Pipeline(input, logger54, trustTier) {
34711
+ function instrumentV2Pipeline(input, logger55, trustTier) {
34643
34712
  const tc = delegateInputToTaskContract(input, trustTier !== void 0 ? { trustTier } : {});
34644
34713
  void executeDelegatePipeline(tc).then((m) => {
34645
- logger54.info("V2 delegate pipeline", { ...m });
34714
+ logger55.info("V2 delegate pipeline", { ...m });
34646
34715
  }).catch((error) => {
34647
- logger54.warn("V2 delegate instrumentation failed", { error: getErrorMessage(error) });
34716
+ logger55.warn("V2 delegate instrumentation failed", { error: getErrorMessage(error) });
34648
34717
  });
34649
34718
  }
34650
34719
  function notifyAndRecord(opts) {
@@ -34720,18 +34789,18 @@ function createDelegateHandler(deps) {
34720
34789
  };
34721
34790
  }
34722
34791
  function registerDelegateToModelTool(server, deps) {
34723
- const logger54 = deps.logger ?? createLogger({ tool: "delegate_to_model" });
34792
+ const logger55 = deps.logger ?? createLogger({ tool: "delegate_to_model" });
34724
34793
  const notifier = deps.notifier ?? createMcpNotifier(server);
34725
34794
  const depsWithNotifier = { ...deps, notifier };
34726
34795
  const secureHandler = createSecureHandler(createDelegateHandler(depsWithNotifier), {
34727
34796
  toolName: "delegate_to_model",
34728
34797
  rateLimiter: deps.rateLimiter,
34729
- logger: logger54
34798
+ logger: logger55
34730
34799
  });
34731
34800
  const timeoutMs = getToolTimeout("delegate_to_model", deps.security);
34732
34801
  const wrappedHandler = wrapToolWithTimeout("delegate_to_model", secureHandler, {
34733
34802
  timeoutMs,
34734
- logger: logger54
34803
+ logger: logger55
34735
34804
  });
34736
34805
  server.registerTool(
34737
34806
  "delegate_to_model",
@@ -34743,7 +34812,7 @@ function registerDelegateToModelTool(server, deps) {
34743
34812
  },
34744
34813
  toSdkCallback(wrappedHandler)
34745
34814
  );
34746
- logger54.info("Registered delegate_to_model tool with secure handler and timeout protection");
34815
+ logger55.info("Registered delegate_to_model tool with secure handler and timeout protection");
34747
34816
  }
34748
34817
 
34749
34818
  // src/mcp/tools/run-graph-workflow-multicli-templates.ts
@@ -35685,7 +35754,7 @@ function listExpertsHandler(args, ctx) {
35685
35754
  return Promise.resolve(toolSuccessStructured(data));
35686
35755
  }
35687
35756
  function registerListExpertsTool(server, deps) {
35688
- const logger54 = deps.logger ?? createLogger({ tool: "list_experts" });
35757
+ const logger55 = deps.logger ?? createLogger({ tool: "list_experts" });
35689
35758
  const toolSchema = {
35690
35759
  format: z57.enum(["full", "names"]).optional().describe("Output format: full (with details) or names (just role names)")
35691
35760
  };
@@ -35693,10 +35762,10 @@ function registerListExpertsTool(server, deps) {
35693
35762
  const secureHandler = createSecureHandler(listExpertsHandler, {
35694
35763
  toolName: "list_experts",
35695
35764
  rateLimiter: deps.rateLimiter,
35696
- logger: logger54
35765
+ logger: logger55
35697
35766
  });
35698
35767
  const timeoutMs = getToolTimeout("list_experts", deps.security);
35699
- const wrappedHandler = wrapToolWithTimeout("list_experts", secureHandler, { timeoutMs, logger: logger54 });
35768
+ const wrappedHandler = wrapToolWithTimeout("list_experts", secureHandler, { timeoutMs, logger: logger55 });
35700
35769
  const outputSchema = {
35701
35770
  experts: z57.array(
35702
35771
  z57.object({
@@ -35718,7 +35787,7 @@ function registerListExpertsTool(server, deps) {
35718
35787
  },
35719
35788
  toSdkCallback(wrappedHandler)
35720
35789
  );
35721
- logger54.info("Registered list_experts tool with secure handler and timeout protection");
35790
+ logger55.info("Registered list_experts tool with secure handler and timeout protection");
35722
35791
  }
35723
35792
 
35724
35793
  // src/mcp/tools/list-workflows.ts
@@ -35777,7 +35846,7 @@ function createListWorkflowsHandler(workflowEngine) {
35777
35846
  };
35778
35847
  }
35779
35848
  function registerListWorkflowsTool(server, deps) {
35780
- const logger54 = deps.logger ?? createLogger({ tool: "list_workflows" });
35849
+ const logger55 = deps.logger ?? createLogger({ tool: "list_workflows" });
35781
35850
  const toolSchema = {
35782
35851
  category: z58.string().optional().describe("Filter by category (e.g., development, security)"),
35783
35852
  format: z58.enum(["full", "names"]).optional().describe("Output format: full (with details) or names (just template names)")
@@ -35786,13 +35855,13 @@ function registerListWorkflowsTool(server, deps) {
35786
35855
  const secureHandler = createSecureHandler(createListWorkflowsHandler(deps.workflowEngine), {
35787
35856
  toolName: "list_workflows",
35788
35857
  rateLimiter: deps.rateLimiter,
35789
- logger: logger54
35858
+ logger: logger55
35790
35859
  });
35791
35860
  const timeoutMs = deps.security?.timeout?.defaultTimeoutMs;
35792
35861
  const wrappedHandler = wrapToolWithTimeout(
35793
35862
  "list_workflows",
35794
35863
  secureHandler,
35795
- timeoutMs !== void 0 ? { timeoutMs, logger: logger54 } : { logger: logger54 }
35864
+ timeoutMs !== void 0 ? { timeoutMs, logger: logger55 } : { logger: logger55 }
35796
35865
  );
35797
35866
  const outputSchema = {
35798
35867
  workflows: z58.array(
@@ -35816,7 +35885,7 @@ function registerListWorkflowsTool(server, deps) {
35816
35885
  },
35817
35886
  toSdkCallback(wrappedHandler)
35818
35887
  );
35819
- logger54.info("Registered list_workflows tool with secure handler and timeout protection");
35888
+ logger55.info("Registered list_workflows tool with secure handler and timeout protection");
35820
35889
  }
35821
35890
 
35822
35891
  // src/mcp/tools/execute-expert.ts
@@ -35900,12 +35969,12 @@ function recordExpertError2(expertId, role, errorMessage) {
35900
35969
  });
35901
35970
  }
35902
35971
  }
35903
- function autoCatalogScan(output2, expertId, logger54) {
35972
+ function autoCatalogScan(output2, expertId, logger55) {
35904
35973
  try {
35905
35974
  const catalog = getAutoCatalog();
35906
35975
  catalog.scanAndRecord(output2, "execute_expert");
35907
35976
  } catch (error) {
35908
- logger54?.debug("Best-effort auto-catalog scan failed", {
35977
+ logger55?.debug("Best-effort auto-catalog scan failed", {
35909
35978
  error: getErrorMessage(error),
35910
35979
  expertId
35911
35980
  });
@@ -35964,11 +36033,11 @@ function computeExpertContextUtilization(observation, threshold = DEFAULT_CONTEX
35964
36033
  threshold
35965
36034
  };
35966
36035
  }
35967
- function observeExpertContext(observation, logger54, threshold = resolveContextWarnThreshold()) {
36036
+ function observeExpertContext(observation, logger55, threshold = resolveContextWarnThreshold()) {
35968
36037
  try {
35969
36038
  const util = computeExpertContextUtilization(observation, threshold);
35970
36039
  if (util.warned) {
35971
- logger54?.warn("context_warning", {
36040
+ logger55?.warn("context_warning", {
35972
36041
  event: "context_warning",
35973
36042
  expertId: observation.expertId,
35974
36043
  role: observation.role,
@@ -35981,7 +36050,7 @@ function observeExpertContext(observation, logger54, threshold = resolveContextW
35981
36050
  taskLength: observation.taskDescription.length
35982
36051
  });
35983
36052
  } else {
35984
- logger54?.debug("context_utilization", {
36053
+ logger55?.debug("context_utilization", {
35985
36054
  event: "context_utilization",
35986
36055
  expertId: observation.expertId,
35987
36056
  role: observation.role,
@@ -36069,7 +36138,7 @@ function buildSuccessResponse(params) {
36069
36138
  }
36070
36139
  return response;
36071
36140
  }
36072
- function observeExpertContextIfOk(result, expert, task, durationMs, logger54) {
36141
+ function observeExpertContextIfOk(result, expert, task, durationMs, logger55) {
36073
36142
  if (!result.ok) return;
36074
36143
  const expertModelId = expert.expertConfig.modelPreference?.modelId;
36075
36144
  const observation = {
@@ -36080,9 +36149,9 @@ function observeExpertContextIfOk(result, expert, task, durationMs, logger54) {
36080
36149
  taskDescription: task.description,
36081
36150
  durationMs
36082
36151
  };
36083
- observeExpertContext(observation, logger54);
36152
+ observeExpertContext(observation, logger55);
36084
36153
  }
36085
- async function deriveExpertAccessPolicy(task, logger54, trustTier) {
36154
+ async function deriveExpertAccessPolicy(task, logger55, trustTier) {
36086
36155
  const mode = resolveAccessPolicyMode();
36087
36156
  try {
36088
36157
  const policy = await deriveAccessPolicy(task.description, {
@@ -36090,14 +36159,14 @@ async function deriveExpertAccessPolicy(task, logger54, trustTier) {
36090
36159
  trustTier: trustTier ?? "4"
36091
36160
  });
36092
36161
  if (mode !== "off") {
36093
- logger54?.info("access-policy: derived (expert)", {
36162
+ logger55?.info("access-policy: derived (expert)", {
36094
36163
  mode,
36095
36164
  source: policy.source
36096
36165
  });
36097
36166
  }
36098
36167
  return policy;
36099
36168
  } catch (error) {
36100
- logger54?.warn("access-policy: derivation failed (expert)", {
36169
+ logger55?.warn("access-policy: derivation failed (expert)", {
36101
36170
  mode,
36102
36171
  error: getErrorMessage(error),
36103
36172
  failClosed: mode === "enforce" || mode === "confirm_risky"
@@ -36156,11 +36225,11 @@ function isExpertDegraded(role) {
36156
36225
  }
36157
36226
  return consecutive >= DEGRADATION_CONSECUTIVE_THRESHOLD;
36158
36227
  }
36159
- async function tryExpertFallback(expert, task, logger54) {
36228
+ async function tryExpertFallback(expert, task, logger55) {
36160
36229
  const roleKey = `${expert.role}_expert`;
36161
36230
  const category = ROLE_TO_TASK_CATEGORY[roleKey];
36162
36231
  if (category === void 0) return void 0;
36163
- const effectiveLogger = logger54 ?? createLogger({ tool: "execute_expert" });
36232
+ const effectiveLogger = logger55 ?? createLogger({ tool: "execute_expert" });
36164
36233
  const registry = getGlobalRegistry({ logger: effectiveLogger });
36165
36234
  const routing = registry.getRouting(category);
36166
36235
  const primaryCli = routing?.primaryCli ?? "unknown";
@@ -36169,7 +36238,7 @@ async function tryExpertFallback(expert, task, logger54) {
36169
36238
  const fallbackCli = chain[0];
36170
36239
  if (fallbackCli === void 0) return void 0;
36171
36240
  const fallbackAdapter = registry.getAdapterForCli(fallbackCli);
36172
- logger54?.info("Retrying expert with fallback CLI", { role: expert.role, fallbackCli });
36241
+ logger55?.info("Retrying expert with fallback CLI", { role: expert.role, fallbackCli });
36173
36242
  const fallbackResult = createExpert(expert.expertConfig, { adapter: fallbackAdapter });
36174
36243
  if (!fallbackResult.ok) return void 0;
36175
36244
  const fallbackStart = getTimeProvider().now();
@@ -36189,7 +36258,7 @@ async function tryExpertFallback(expert, task, logger54) {
36189
36258
  };
36190
36259
  }
36191
36260
  async function classifyExpertResult(opts) {
36192
- const { result, expert, task, args, durationMs, logger: logger54 } = opts;
36261
+ const { result, expert, task, args, durationMs, logger: logger55 } = opts;
36193
36262
  const modelId = expert.expertConfig.modelPreference?.modelId;
36194
36263
  const info = {
36195
36264
  expertId: args.expertId,
@@ -36198,19 +36267,19 @@ async function classifyExpertResult(opts) {
36198
36267
  };
36199
36268
  if (!result.ok) {
36200
36269
  if (isRateLimitFailure(result.error.message)) {
36201
- const fallback = await tryExpertFallback(expert, task, logger54);
36270
+ const fallback = await tryExpertFallback(expert, task, logger55);
36202
36271
  if (fallback !== void 0) return fallback;
36203
36272
  }
36204
- logger54?.warn("Expert execution failed", {
36273
+ logger55?.warn("Expert execution failed", {
36205
36274
  expertId: args.expertId,
36206
36275
  error: result.error.message
36207
36276
  });
36208
36277
  return handleExpertFailure(args.task, info, result.error.message, durationMs);
36209
36278
  }
36210
- logger54?.info("Expert execution completed", { expertId: args.expertId, durationMs });
36279
+ logger55?.info("Expert execution completed", { expertId: args.expertId, durationMs });
36211
36280
  handleExpertSuccess(args.task, info, durationMs);
36212
36281
  if (typeof result.value.output === "string") {
36213
- autoCatalogScan(result.value.output, args.expertId, logger54);
36282
+ autoCatalogScan(result.value.output, args.expertId, logger55);
36214
36283
  }
36215
36284
  return {
36216
36285
  ok: true,
@@ -36298,7 +36367,7 @@ var EXECUTE_EXPERT_TOOL_SCHEMA = {
36298
36367
  context: z59.record(z59.string(), z59.unknown()).optional().describe("Additional context metadata for the task"),
36299
36368
  timeoutMs: z59.number().int().min(EXPERT_TIMEOUT_FLOOR_MS).max(EXPERT_TIMEOUTS.maxMs).optional().describe("Optional timeout in ms (120s-900s). Overrides auto-detected timeout.")
36300
36369
  };
36301
- function createTaskHandler(deps, logger54) {
36370
+ function createTaskHandler(deps, logger55) {
36302
36371
  const notifier = deps.notifier ?? NOOP_NOTIFIER;
36303
36372
  return {
36304
36373
  createTask: (args, extra) => {
@@ -36310,7 +36379,7 @@ function createTaskHandler(deps, logger54) {
36310
36379
  const { taskStore } = extra;
36311
36380
  const ttl = clampTaskTtl(DEFAULT_TASK_TTL_MS);
36312
36381
  const taskPromise = taskStore.createTask({ ttl, pollInterval: 5e3 }).then((task) => {
36313
- logger54.info("Task created for execute_expert", {
36382
+ logger55.info("Task created for execute_expert", {
36314
36383
  taskId: task.taskId,
36315
36384
  expertId: validatedArgs.expertId
36316
36385
  });
@@ -36335,7 +36404,7 @@ function createTaskHandler(deps, logger54) {
36335
36404
  }
36336
36405
  async function runBackgroundExpertTask(opts) {
36337
36406
  const { deps, args, taskId, taskStore, notifier } = opts;
36338
- const logger54 = deps.logger ?? createLogger({ tool: "execute_expert" });
36407
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_expert" });
36339
36408
  try {
36340
36409
  notifier.info("execute_expert", {
36341
36410
  event: "expert_start",
@@ -36368,7 +36437,7 @@ async function runBackgroundExpertTask(opts) {
36368
36437
  });
36369
36438
  } catch (error) {
36370
36439
  const message = getErrorMessage(error);
36371
- logger54.warn("Background expert task failed", { taskId, error: message });
36440
+ logger55.warn("Background expert task failed", { taskId, error: message });
36372
36441
  try {
36373
36442
  await taskStore.storeTaskResult(taskId, "failed", {
36374
36443
  ...toolStructuredError({
@@ -36377,7 +36446,7 @@ async function runBackgroundExpertTask(opts) {
36377
36446
  })
36378
36447
  });
36379
36448
  } catch (storeError) {
36380
- logger54.warn("Failed to store task failure result", {
36449
+ logger55.warn("Failed to store task failure result", {
36381
36450
  taskId,
36382
36451
  error: getErrorMessage(storeError)
36383
36452
  });
@@ -36385,7 +36454,7 @@ async function runBackgroundExpertTask(opts) {
36385
36454
  }
36386
36455
  }
36387
36456
  function registerExecuteExpertTool(server, deps) {
36388
- const logger54 = deps.logger ?? createLogger({ tool: "execute_expert" });
36457
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_expert" });
36389
36458
  const notifier = deps.notifier ?? createMcpNotifier(server);
36390
36459
  const depsWithNotifier = { ...deps, notifier };
36391
36460
  const description2 = "Run a task through an expert YOU PREVIOUSLY CREATED via `create_expert`. Requires the expertId returned by create_expert; not for ad-hoc execution. Returns the expert analysis including output, confidence, and token usage.";
@@ -36397,9 +36466,9 @@ function registerExecuteExpertTool(server, deps) {
36397
36466
  execution: { taskSupport: "optional" },
36398
36467
  annotations: getToolAnnotations("execute_expert")
36399
36468
  },
36400
- createTaskHandler(depsWithNotifier, logger54)
36469
+ createTaskHandler(depsWithNotifier, logger55)
36401
36470
  );
36402
- logger54.info("Registered execute_expert tool with MCP Tasks support (taskSupport: optional)");
36471
+ logger55.info("Registered execute_expert tool with MCP Tasks support (taskSupport: optional)");
36403
36472
  }
36404
36473
 
36405
36474
  // src/mcp/tools/research-query.ts
@@ -37798,15 +37867,15 @@ function createResearchQueryHandler(deps) {
37798
37867
  });
37799
37868
  }
37800
37869
  ctx.logger.debug("Executing research query", { action: validationResult.data.action });
37801
- const logger54 = deps.logger ?? createLogger({ tool: "research_query" });
37802
- return withToolError("Research query failed", logger54, async () => {
37870
+ const logger55 = deps.logger ?? createLogger({ tool: "research_query" });
37871
+ return withToolError("Research query failed", logger55, async () => {
37803
37872
  const result = await executeQuery(validationResult.data);
37804
37873
  return toolSuccessStructured(result);
37805
37874
  });
37806
37875
  };
37807
37876
  }
37808
37877
  function registerResearchQueryTool(server, deps) {
37809
- const logger54 = deps.logger ?? createLogger({ tool: "research_query" });
37878
+ const logger55 = deps.logger ?? createLogger({ tool: "research_query" });
37810
37879
  const toolSchema = {
37811
37880
  action: z62.enum(["status", "overlap", "stats", "search"]).describe("Query action: status, overlap, stats, or search"),
37812
37881
  techniqueId: z62.string().optional().describe("Technique ID for status/overlap queries"),
@@ -37818,12 +37887,12 @@ function registerResearchQueryTool(server, deps) {
37818
37887
  const secureHandler = createSecureHandler(createResearchQueryHandler(deps), {
37819
37888
  toolName: "research_query",
37820
37889
  rateLimiter: deps.rateLimiter,
37821
- logger: logger54
37890
+ logger: logger55
37822
37891
  });
37823
37892
  const timeoutMs = getToolTimeout("research_query", deps.security);
37824
37893
  const wrappedHandler = wrapToolWithTimeout("research_query", secureHandler, {
37825
37894
  timeoutMs,
37826
- logger: logger54
37895
+ logger: logger55
37827
37896
  });
37828
37897
  const outputSchema = {
37829
37898
  action: z62.string(),
@@ -37840,7 +37909,7 @@ function registerResearchQueryTool(server, deps) {
37840
37909
  },
37841
37910
  toSdkCallback(wrappedHandler)
37842
37911
  );
37843
- logger54.info("Registered research_query tool with secure handler and timeout protection");
37912
+ logger55.info("Registered research_query tool with secure handler and timeout protection");
37844
37913
  }
37845
37914
 
37846
37915
  // src/mcp/tools/research-add.ts
@@ -37851,7 +37920,7 @@ var ResearchAddInputSchema = z63.object({
37851
37920
  priority: z63.enum(["P1", "P2", "P3", "P4"]).optional().describe("Priority level for the paper"),
37852
37921
  dryRun: z63.boolean().optional().default(false).describe("Preview what would be added without persisting")
37853
37922
  });
37854
- async function executeResearchAdd(input, logger54) {
37923
+ async function executeResearchAdd(input, logger55) {
37855
37924
  const exists = await paperExists(input.arxivId);
37856
37925
  if (exists) {
37857
37926
  return {
@@ -37871,7 +37940,7 @@ async function executeResearchAdd(input, logger54) {
37871
37940
  });
37872
37941
  if (result.success && !input.dryRun) {
37873
37942
  try {
37874
- const memory = getToolMemory(logger54);
37943
+ const memory = getToolMemory(logger55);
37875
37944
  memory.recordLearning({
37876
37945
  pattern: `Added paper: ${result.title} (${result.paperId})`,
37877
37946
  context: `topic=${input.topic ?? "general"}, priority=${input.priority ?? "unset"}`,
@@ -37879,7 +37948,7 @@ async function executeResearchAdd(input, logger54) {
37879
37948
  source: "research_add"
37880
37949
  });
37881
37950
  } catch {
37882
- logger54.debug("Failed to record learning in session memory");
37951
+ logger55.debug("Failed to record learning in session memory");
37883
37952
  }
37884
37953
  }
37885
37954
  const qualityNote = result.success && !input.dryRun ? " [evidence_tier=low \u2014 arXiv preprint, no citation data yet. Run backfill-research-quality.ts to enrich.]" : "";
@@ -37901,9 +37970,9 @@ function createResearchAddHandler(deps) {
37901
37970
  });
37902
37971
  }
37903
37972
  ctx.logger.debug("Adding research paper", { arxivId: validationResult.data.arxivId });
37904
- const logger54 = deps.logger ?? createLogger({ tool: "research_add" });
37905
- return withToolError("Failed to add paper", logger54, async () => {
37906
- const result = await executeResearchAdd(validationResult.data, logger54);
37973
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add" });
37974
+ return withToolError("Failed to add paper", logger55, async () => {
37975
+ const result = await executeResearchAdd(validationResult.data, logger55);
37907
37976
  if (!result.success) {
37908
37977
  return toolStructuredError({
37909
37978
  errorCategory: result.errorCategory ?? "internal",
@@ -37915,7 +37984,7 @@ function createResearchAddHandler(deps) {
37915
37984
  };
37916
37985
  }
37917
37986
  function registerResearchAddTool(server, deps) {
37918
- const logger54 = deps.logger ?? createLogger({ tool: "research_add" });
37987
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add" });
37919
37988
  const toolSchema = {
37920
37989
  arxivId: z63.string().regex(/^\d{4}\.\d{4,5}$/).describe('arXiv paper ID (e.g., "2401.12345")'),
37921
37990
  topic: z63.string().optional().describe("Research topic to categorize the paper under"),
@@ -37926,12 +37995,12 @@ function registerResearchAddTool(server, deps) {
37926
37995
  const secureHandler = createSecureHandler(createResearchAddHandler(deps), {
37927
37996
  toolName: "research_add",
37928
37997
  rateLimiter: deps.rateLimiter,
37929
- logger: logger54
37998
+ logger: logger55
37930
37999
  });
37931
38000
  const timeoutMs = getToolTimeout("research_add", deps.security);
37932
38001
  const wrappedHandler = wrapToolWithTimeout("research_add", secureHandler, {
37933
38002
  timeoutMs,
37934
- logger: logger54
38003
+ logger: logger55
37935
38004
  });
37936
38005
  const outputSchema = {
37937
38006
  success: z63.boolean(),
@@ -37950,7 +38019,7 @@ function registerResearchAddTool(server, deps) {
37950
38019
  },
37951
38020
  toSdkCallback(wrappedHandler)
37952
38021
  );
37953
- logger54.info("Registered research_add tool with secure handler and timeout protection");
38022
+ logger55.info("Registered research_add tool with secure handler and timeout protection");
37954
38023
  }
37955
38024
 
37956
38025
  // src/mcp/tools/research-add-source.ts
@@ -38028,9 +38097,9 @@ function buildResponse2(params) {
38028
38097
  ...params.errorCategory !== void 0 ? { errorCategory: params.errorCategory } : {}
38029
38098
  };
38030
38099
  }
38031
- function recordAddSourceLearning(logger54, name, sourceId, type, qualityScore) {
38100
+ function recordAddSourceLearning(logger55, name, sourceId, type, qualityScore) {
38032
38101
  try {
38033
- const memory = getToolMemory(logger54);
38102
+ const memory = getToolMemory(logger55);
38034
38103
  memory.recordLearning({
38035
38104
  pattern: `Added source: ${name} (${sourceId})`,
38036
38105
  context: `type=${type}, quality=${String(qualityScore)}`,
@@ -38038,7 +38107,7 @@ function recordAddSourceLearning(logger54, name, sourceId, type, qualityScore) {
38038
38107
  source: "research_add_source"
38039
38108
  });
38040
38109
  } catch {
38041
- logger54.debug("Failed to record learning in session memory");
38110
+ logger55.debug("Failed to record learning in session memory");
38042
38111
  }
38043
38112
  }
38044
38113
  function prepareSource(input) {
@@ -38046,7 +38115,7 @@ function prepareSource(input) {
38046
38115
  const score = computeSourceQualityScore(entry);
38047
38116
  return { entry, score };
38048
38117
  }
38049
- async function executeResearchAddSource(input, logger54) {
38118
+ async function executeResearchAddSource(input, logger55) {
38050
38119
  const sourceId = generateSourceId(input.url);
38051
38120
  const exists = await sourceExistsInRegistry(input.url);
38052
38121
  if (exists) {
@@ -38083,8 +38152,8 @@ async function executeResearchAddSource(input, logger54) {
38083
38152
  errorCategory: "internal"
38084
38153
  });
38085
38154
  }
38086
- recordAddSourceLearning(logger54, input.name, sourceId, input.type, score);
38087
- logger54.info("Added research source", { sourceId, name: input.name, qualityScore: score });
38155
+ recordAddSourceLearning(logger55, input.name, sourceId, input.type, score);
38156
+ logger55.info("Added research source", { sourceId, name: input.name, qualityScore: score });
38088
38157
  return buildResponse2({
38089
38158
  success: true,
38090
38159
  sourceId,
@@ -38104,9 +38173,9 @@ function createResearchAddSourceHandler(deps) {
38104
38173
  });
38105
38174
  }
38106
38175
  ctx.logger.debug("Adding research source", { url: validationResult.data.url });
38107
- const logger54 = deps.logger ?? createLogger({ tool: "research_add_source" });
38108
- return withToolError("Failed to add source", logger54, async () => {
38109
- const result = await executeResearchAddSource(validationResult.data, logger54);
38176
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add_source" });
38177
+ return withToolError("Failed to add source", logger55, async () => {
38178
+ const result = await executeResearchAddSource(validationResult.data, logger55);
38110
38179
  if (!result.success) {
38111
38180
  return toolStructuredError({
38112
38181
  errorCategory: result.errorCategory ?? "internal",
@@ -38118,7 +38187,7 @@ function createResearchAddSourceHandler(deps) {
38118
38187
  };
38119
38188
  }
38120
38189
  function registerResearchAddSourceTool(server, deps) {
38121
- const logger54 = deps.logger ?? createLogger({ tool: "research_add_source" });
38190
+ const logger55 = deps.logger ?? createLogger({ tool: "research_add_source" });
38122
38191
  const toolSchema = {
38123
38192
  url: z64.string().min(1).describe("Source URL"),
38124
38193
  name: z64.string().min(1).describe("Display name"),
@@ -38143,12 +38212,12 @@ function registerResearchAddSourceTool(server, deps) {
38143
38212
  toolName: "research_add_source",
38144
38213
  securityTier: "external",
38145
38214
  rateLimiter: deps.rateLimiter,
38146
- logger: logger54
38215
+ logger: logger55
38147
38216
  });
38148
38217
  const timeoutMs = getToolTimeout("research_add_source", deps.security);
38149
38218
  const wrappedHandler = wrapToolWithTimeout("research_add_source", secureHandler, {
38150
38219
  timeoutMs,
38151
- logger: logger54
38220
+ logger: logger55
38152
38221
  });
38153
38222
  server.registerTool(
38154
38223
  "research_add_source",
@@ -38215,7 +38284,7 @@ function toDiscoveredItems(sources) {
38215
38284
  discoveredAt: s.discoveredAt
38216
38285
  }));
38217
38286
  }
38218
- async function discoverFromExtendedSource(source, topic, maxResults, logger54, sinceDate) {
38287
+ async function discoverFromExtendedSource(source, topic, maxResults, logger55, sinceDate) {
38219
38288
  let result;
38220
38289
  switch (source) {
38221
38290
  case "google_ai":
@@ -38243,7 +38312,7 @@ async function discoverFromExtendedSource(source, topic, maxResults, logger54, s
38243
38312
  return { items: [], failed: true };
38244
38313
  }
38245
38314
  if (!result.ok) {
38246
- logger54.warn(`${source} discovery failed`, {
38315
+ logger55.warn(`${source} discovery failed`, {
38247
38316
  source,
38248
38317
  errorCode: result.error.code,
38249
38318
  error: result.error.message
@@ -38283,24 +38352,24 @@ function markExistingItems(items, existingIds) {
38283
38352
  }
38284
38353
  var ARXIV_ORG_SOURCES = /* @__PURE__ */ new Set(["google_ai", "meta_fair", "microsoft", "deepmind"]);
38285
38354
  var INDEPENDENT_SOURCES = ["semantic_scholar", "papers_with_code", "openalex"];
38286
- async function queryExtendedSource(src, input, logger54, acc) {
38355
+ async function queryExtendedSource(src, input, logger55, acc) {
38287
38356
  acc.sources.push(src);
38288
38357
  try {
38289
38358
  const result = await discoverFromExtendedSource(
38290
38359
  src,
38291
38360
  input.topic,
38292
38361
  input.maxResults,
38293
- logger54,
38362
+ logger55,
38294
38363
  input.sinceDate
38295
38364
  );
38296
38365
  if (result.failed) acc.failedSources.push(src);
38297
38366
  acc.items = acc.items.concat(result.items);
38298
38367
  } catch (error) {
38299
38368
  acc.failedSources.push(src);
38300
- logger54.warn("Source discovery failed", { source: src, error: getErrorMessage(error) });
38369
+ logger55.warn("Source discovery failed", { source: src, error: getErrorMessage(error) });
38301
38370
  }
38302
38371
  }
38303
- async function queryAllSources(input, logger54) {
38372
+ async function queryAllSources(input, logger55) {
38304
38373
  const acc = { sources: [], failedSources: [], items: [] };
38305
38374
  const isAll = input.source === "all";
38306
38375
  const shouldQuery = (src) => isAll || input.source === src;
@@ -38310,11 +38379,11 @@ async function queryAllSources(input, logger54) {
38310
38379
  if (r.ok) acc.items = acc.items.concat(toDiscoveredItems(r.value));
38311
38380
  else {
38312
38381
  acc.failedSources.push("arxiv");
38313
- logger54.warn("arxiv discovery failed", { error: r.error.message });
38382
+ logger55.warn("arxiv discovery failed", { error: r.error.message });
38314
38383
  }
38315
38384
  }
38316
38385
  for (const src of ARXIV_ORG_SOURCES) {
38317
- if (!isAll && input.source === src) await queryExtendedSource(src, input, logger54, acc);
38386
+ if (!isAll && input.source === src) await queryExtendedSource(src, input, logger55, acc);
38318
38387
  }
38319
38388
  if (shouldQuery("github")) {
38320
38389
  acc.sources.push("github");
@@ -38322,15 +38391,15 @@ async function queryAllSources(input, logger54) {
38322
38391
  if (r.ok) acc.items = acc.items.concat(toDiscoveredItems(r.value));
38323
38392
  else {
38324
38393
  acc.failedSources.push("github");
38325
- logger54.warn("github discovery failed", { error: r.error.message });
38394
+ logger55.warn("github discovery failed", { error: r.error.message });
38326
38395
  }
38327
38396
  }
38328
38397
  for (const src of INDEPENDENT_SOURCES) {
38329
- if (shouldQuery(src)) await queryExtendedSource(src, input, logger54, acc);
38398
+ if (shouldQuery(src)) await queryExtendedSource(src, input, logger55, acc);
38330
38399
  }
38331
38400
  return acc;
38332
38401
  }
38333
- async function executeDiscovery(rawInput, logger54) {
38402
+ async function executeDiscovery(rawInput, logger55) {
38334
38403
  const input = {
38335
38404
  ...rawInput,
38336
38405
  topic: normalizeTopicToCanonical(rawInput.topic)
@@ -38340,7 +38409,7 @@ async function executeDiscovery(rawInput, logger54) {
38340
38409
  sources: sourcesToQuery,
38341
38410
  failedSources,
38342
38411
  items: allItems
38343
- } = await queryAllSources(input, logger54);
38412
+ } = await queryAllSources(input, logger55);
38344
38413
  markExistingItems(allItems, existingIds);
38345
38414
  const totalFound = allItems.length;
38346
38415
  const inRegistry = allItems.filter((i) => i.alreadyInRegistry).length;
@@ -38352,7 +38421,7 @@ async function executeDiscovery(rawInput, logger54) {
38352
38421
  ).slice(0, input.maxResults);
38353
38422
  const filteredOut = totalFound - inRegistry - relevantItems.length;
38354
38423
  if (filteredOut > 0) {
38355
- logger54.debug("Filtered out irrelevant results", {
38424
+ logger55.debug("Filtered out irrelevant results", {
38356
38425
  threshold,
38357
38426
  filteredOut,
38358
38427
  remaining: relevantItems.length
@@ -38437,10 +38506,10 @@ function createResearchDiscoverHandler(deps) {
38437
38506
  topic: validationResult.data.topic,
38438
38507
  source: validationResult.data.source
38439
38508
  });
38440
- const logger54 = deps.logger ?? createLogger({ tool: "research_discover" });
38509
+ const logger55 = deps.logger ?? createLogger({ tool: "research_discover" });
38441
38510
  const startMs = Date.now();
38442
- const response = await withToolError("Discovery failed", logger54, async () => {
38443
- const result = await executeDiscovery(validationResult.data, logger54);
38511
+ const response = await withToolError("Discovery failed", logger55, async () => {
38512
+ const result = await executeDiscovery(validationResult.data, logger55);
38444
38513
  return toolSuccessStructured(result);
38445
38514
  });
38446
38515
  const durationMs = Date.now() - startMs;
@@ -38454,7 +38523,7 @@ function createResearchDiscoverHandler(deps) {
38454
38523
  };
38455
38524
  }
38456
38525
  function registerResearchDiscoverTool(server, deps) {
38457
- const logger54 = deps.logger ?? createLogger({ tool: "research_discover" });
38526
+ const logger55 = deps.logger ?? createLogger({ tool: "research_discover" });
38458
38527
  const toolSchema = {
38459
38528
  topic: z65.string().min(1).max(200).describe("Research topic to search for"),
38460
38529
  source: z65.enum([
@@ -38477,12 +38546,12 @@ function registerResearchDiscoverTool(server, deps) {
38477
38546
  const secureHandler = createSecureHandler(createResearchDiscoverHandler(deps), {
38478
38547
  toolName: "research_discover",
38479
38548
  rateLimiter: deps.rateLimiter,
38480
- logger: logger54
38549
+ logger: logger55
38481
38550
  });
38482
38551
  const timeoutMs = getToolTimeout("research_discover", deps.security);
38483
38552
  const wrappedHandler = wrapToolWithTimeout("research_discover", secureHandler, {
38484
38553
  timeoutMs,
38485
- logger: logger54
38554
+ logger: logger55
38486
38555
  });
38487
38556
  server.registerTool(
38488
38557
  "research_discover",
@@ -38494,7 +38563,7 @@ function registerResearchDiscoverTool(server, deps) {
38494
38563
  },
38495
38564
  toSdkCallback(wrappedHandler)
38496
38565
  );
38497
- logger54.info("Registered research_discover tool with secure handler and timeout protection");
38566
+ logger55.info("Registered research_discover tool with secure handler and timeout protection");
38498
38567
  }
38499
38568
  var RESEARCH_DISCOVER_OUTPUT_SCHEMA = {
38500
38569
  topic: z65.string().optional(),
@@ -38748,15 +38817,15 @@ function createResearchAnalyzeHandler(deps) {
38748
38817
  ctx.logger.debug("Analyzing research registry", {
38749
38818
  focus: validationResult.data.focus
38750
38819
  });
38751
- const logger54 = deps.logger ?? createLogger({ tool: "research_analyze" });
38752
- return withToolError("Analysis failed", logger54, async () => {
38820
+ const logger55 = deps.logger ?? createLogger({ tool: "research_analyze" });
38821
+ return withToolError("Analysis failed", logger55, async () => {
38753
38822
  const result = await executeAnalysis(validationResult.data);
38754
38823
  return toolSuccessStructured(result);
38755
38824
  });
38756
38825
  };
38757
38826
  }
38758
38827
  function registerResearchAnalyzeTool(server, deps) {
38759
- const logger54 = deps.logger ?? createLogger({ tool: "research_analyze" });
38828
+ const logger55 = deps.logger ?? createLogger({ tool: "research_analyze" });
38760
38829
  const toolSchema = {
38761
38830
  focus: z66.enum(["gaps", "trends", "priorities", "stale", "coverage"]).describe("Analysis focus area"),
38762
38831
  topic: z66.string().optional().describe("Optional topic filter")
@@ -38765,12 +38834,12 @@ function registerResearchAnalyzeTool(server, deps) {
38765
38834
  const secureHandler = createSecureHandler(createResearchAnalyzeHandler(deps), {
38766
38835
  toolName: "research_analyze",
38767
38836
  rateLimiter: deps.rateLimiter,
38768
- logger: logger54
38837
+ logger: logger55
38769
38838
  });
38770
38839
  const timeoutMs = getToolTimeout("research_analyze", deps.security);
38771
38840
  const wrappedHandler = wrapToolWithTimeout("research_analyze", secureHandler, {
38772
38841
  timeoutMs,
38773
- logger: logger54
38842
+ logger: logger55
38774
38843
  });
38775
38844
  const outputSchema = {
38776
38845
  focus: z66.string().optional(),
@@ -38788,7 +38857,7 @@ function registerResearchAnalyzeTool(server, deps) {
38788
38857
  },
38789
38858
  toSdkCallback(wrappedHandler)
38790
38859
  );
38791
- logger54.info("Registered research_analyze tool with secure handler and timeout protection");
38860
+ logger55.info("Registered research_analyze tool with secure handler and timeout protection");
38792
38861
  }
38793
38862
 
38794
38863
  // src/mcp/tools/research-catalog-review.ts
@@ -38811,7 +38880,7 @@ function handleList() {
38811
38880
  data: { pending, count: pending.length }
38812
38881
  };
38813
38882
  }
38814
- async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
38883
+ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger55) {
38815
38884
  const catalog = getAutoCatalog();
38816
38885
  const exists = await paperExists(identifier);
38817
38886
  if (exists) {
@@ -38823,7 +38892,7 @@ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
38823
38892
  if (!result.success) {
38824
38893
  return { action: "approve", success: false, message: `Failed: ${result.message}` };
38825
38894
  }
38826
- logger54.info("Approved paper", { paperId: result.paperId });
38895
+ logger55.info("Approved paper", { paperId: result.paperId });
38827
38896
  if (shouldCreateIssue) {
38828
38897
  const body = formatResearchIssueBody([
38829
38898
  {
@@ -38847,11 +38916,11 @@ async function approveArxivRef(identifier, topic, shouldCreateIssue, logger54) {
38847
38916
  data: { ...result, issueUrl: issueResult.value.url }
38848
38917
  };
38849
38918
  }
38850
- logger54.warn("Issue creation failed after approve", { error: issueResult.error.message });
38919
+ logger55.warn("Issue creation failed after approve", { error: issueResult.error.message });
38851
38920
  }
38852
38921
  return { action: "approve", success: true, message: `Added: ${result.title}`, data: result };
38853
38922
  }
38854
- async function handleApprove(input, logger54) {
38923
+ async function handleApprove(input, logger55) {
38855
38924
  if (input.identifier === void 0 || input.identifier === "") {
38856
38925
  return { action: "approve", success: false, message: "identifier is required" };
38857
38926
  }
@@ -38865,7 +38934,7 @@ async function handleApprove(input, logger54) {
38865
38934
  };
38866
38935
  }
38867
38936
  if (ref.type === "arxiv") {
38868
- return approveArxivRef(ref.identifier, input.topic, input.createIssue, logger54);
38937
+ return approveArxivRef(ref.identifier, input.topic, input.createIssue, logger55);
38869
38938
  }
38870
38939
  catalog.markReviewed(ref.identifier);
38871
38940
  return { action: "approve", success: true, message: `Reviewed: ${ref.identifier}` };
@@ -38896,12 +38965,12 @@ function handleFlush() {
38896
38965
  message: `Flushed ${String(count)} references from catalog`
38897
38966
  };
38898
38967
  }
38899
- async function executeCatalogReview(input, logger54) {
38968
+ async function executeCatalogReview(input, logger55) {
38900
38969
  switch (input.action) {
38901
38970
  case "list":
38902
38971
  return handleList();
38903
38972
  case "approve":
38904
- return handleApprove(input, logger54);
38973
+ return handleApprove(input, logger55);
38905
38974
  case "dismiss":
38906
38975
  return handleDismiss(input);
38907
38976
  case "flush":
@@ -38918,9 +38987,9 @@ function createCatalogReviewHandler(deps) {
38918
38987
  });
38919
38988
  }
38920
38989
  ctx.logger.debug("Catalog review", { action: validationResult.data.action });
38921
- const logger54 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
38922
- return withToolError("Catalog review failed", logger54, async () => {
38923
- const result = await executeCatalogReview(validationResult.data, logger54);
38990
+ const logger55 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
38991
+ return withToolError("Catalog review failed", logger55, async () => {
38992
+ const result = await executeCatalogReview(validationResult.data, logger55);
38924
38993
  if (!result.success) {
38925
38994
  return toolStructuredError({ errorCategory: "validation", message: result.message });
38926
38995
  }
@@ -38929,7 +38998,7 @@ function createCatalogReviewHandler(deps) {
38929
38998
  };
38930
38999
  }
38931
39000
  function registerResearchCatalogReviewTool(server, deps) {
38932
- const logger54 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
39001
+ const logger55 = deps.logger ?? createLogger({ tool: "research_catalog_review" });
38933
39002
  const toolSchema = {
38934
39003
  action: z67.enum(["list", "approve", "dismiss", "flush"]).describe("Action to perform on cataloged references"),
38935
39004
  identifier: z67.string().optional().describe("Reference identifier for approve/dismiss"),
@@ -38940,12 +39009,12 @@ function registerResearchCatalogReviewTool(server, deps) {
38940
39009
  const secureHandler = createSecureHandler(createCatalogReviewHandler(deps), {
38941
39010
  toolName: "research_catalog_review",
38942
39011
  rateLimiter: deps.rateLimiter,
38943
- logger: logger54
39012
+ logger: logger55
38944
39013
  });
38945
39014
  const timeoutMs = getToolTimeout("research_catalog_review", deps.security);
38946
39015
  const wrappedHandler = wrapToolWithTimeout("research_catalog_review", secureHandler, {
38947
39016
  timeoutMs,
38948
- logger: logger54
39017
+ logger: logger55
38949
39018
  });
38950
39019
  const outputSchema = {
38951
39020
  action: z67.string().optional(),
@@ -38963,7 +39032,7 @@ function registerResearchCatalogReviewTool(server, deps) {
38963
39032
  },
38964
39033
  toSdkCallback(wrappedHandler)
38965
39034
  );
38966
- logger54.info("Registered research_catalog_review tool");
39035
+ logger55.info("Registered research_catalog_review tool");
38967
39036
  }
38968
39037
 
38969
39038
  // src/mcp/tools/research-synthesize.ts
@@ -38980,8 +39049,8 @@ function createResearchSynthesizeHandler(deps) {
38980
39049
  message: `Validation error: ${formatZodError(validationResult.error)}`
38981
39050
  });
38982
39051
  }
38983
- const logger54 = deps.logger ?? createLogger({ tool: "research_synthesize" });
38984
- return withToolError("Synthesis failed", logger54, async () => {
39052
+ const logger55 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39053
+ return withToolError("Synthesis failed", logger55, async () => {
38985
39054
  const result = await synthesizeResearch(validationResult.data.topic);
38986
39055
  if (!result.ok) {
38987
39056
  return toolStructuredError({
@@ -38994,7 +39063,7 @@ function createResearchSynthesizeHandler(deps) {
38994
39063
  };
38995
39064
  }
38996
39065
  function registerResearchSynthesizeTool(server, deps) {
38997
- const logger54 = deps.logger ?? createLogger({ tool: "research_synthesize" });
39066
+ const logger55 = deps.logger ?? createLogger({ tool: "research_synthesize" });
38998
39067
  const toolSchema = {
38999
39068
  topic: z68.string().optional().describe("Optional topic filter for single-cluster synthesis")
39000
39069
  };
@@ -39002,12 +39071,12 @@ function registerResearchSynthesizeTool(server, deps) {
39002
39071
  const secureHandler = createSecureHandler(createResearchSynthesizeHandler(deps), {
39003
39072
  toolName: "research_synthesize",
39004
39073
  rateLimiter: deps.rateLimiter,
39005
- logger: logger54
39074
+ logger: logger55
39006
39075
  });
39007
39076
  const timeoutMs = getToolTimeout("research_synthesize", deps.security);
39008
39077
  const wrappedHandler = wrapToolWithTimeout("research_synthesize", secureHandler, {
39009
39078
  timeoutMs,
39010
- logger: logger54
39079
+ logger: logger55
39011
39080
  });
39012
39081
  const outputSchema = {
39013
39082
  clusters: z68.array(z68.unknown()).optional(),
@@ -39025,7 +39094,7 @@ function registerResearchSynthesizeTool(server, deps) {
39025
39094
  },
39026
39095
  toSdkCallback(wrappedHandler)
39027
39096
  );
39028
- logger54.info("Registered research_synthesize tool");
39097
+ logger55.info("Registered research_synthesize tool");
39029
39098
  }
39030
39099
 
39031
39100
  // src/mcp/tools/issue-triage-tool.ts
@@ -39085,7 +39154,7 @@ function createIssueTriageHandler(_deps) {
39085
39154
  };
39086
39155
  }
39087
39156
  function registerIssueTriageTool(server, deps) {
39088
- const logger54 = deps.logger ?? createLogger({ tool: "issue_triage" });
39157
+ const logger55 = deps.logger ?? createLogger({ tool: "issue_triage" });
39089
39158
  const toolSchema = {
39090
39159
  issueUrl: z69.string().min(1).describe("GitHub issue URL (e.g., https://github.com/owner/repo/issues/123)"),
39091
39160
  dryRun: z69.boolean().optional().default(true).describe("Read-only mode (default: true)")
@@ -39095,19 +39164,19 @@ function registerIssueTriageTool(server, deps) {
39095
39164
  toolName: "issue_triage",
39096
39165
  securityTier: "external",
39097
39166
  rateLimiter: deps.rateLimiter,
39098
- logger: logger54
39167
+ logger: logger55
39099
39168
  });
39100
39169
  const timeoutMs = getToolTimeout("issue_triage", deps.security);
39101
39170
  const wrappedHandler = wrapToolWithTimeout("issue_triage", secureHandler, {
39102
39171
  timeoutMs,
39103
- logger: logger54
39172
+ logger: logger55
39104
39173
  });
39105
39174
  server.registerTool(
39106
39175
  "issue_triage",
39107
39176
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("issue_triage") },
39108
39177
  toSdkCallback(wrappedHandler)
39109
39178
  );
39110
- logger54.info("Registered issue_triage tool with secure handler and timeout protection");
39179
+ logger55.info("Registered issue_triage tool with secure handler and timeout protection");
39111
39180
  }
39112
39181
  var triageLogger = createLogger({ tool: "issue-triage" });
39113
39182
  function recordTriageSuccess(category, confidence, durationMs) {
@@ -39345,7 +39414,7 @@ function createEventCollector(events, enableAuditTrail) {
39345
39414
  auditBridge?.(event);
39346
39415
  };
39347
39416
  }
39348
- async function handleRunGraphWorkflow(input, logger54) {
39417
+ async function handleRunGraphWorkflow(input, logger55) {
39349
39418
  const startTime = getTimeProvider().now();
39350
39419
  const resolved = resolveGraph(input.workflow, startTime);
39351
39420
  if (!resolved.ok) return resolved.error;
@@ -39353,7 +39422,7 @@ async function handleRunGraphWorkflow(input, logger54) {
39353
39422
  const checkpointStore = input.enableCheckpointing ? createCheckpointStore() : void 0;
39354
39423
  const onEvent = createEventCollector(events, input.enableAuditTrail);
39355
39424
  const executionId = `graph-${input.workflow}-${String(Date.now())}`;
39356
- logger54.info("Executing graph workflow", {
39425
+ logger55.info("Executing graph workflow", {
39357
39426
  workflow: input.workflow,
39358
39427
  executionId,
39359
39428
  checkpointing: input.enableCheckpointing,
@@ -39396,7 +39465,7 @@ var GRAPH_WORKFLOW_SCHEMA = {
39396
39465
  enableCheckpointing: z70.boolean().optional().describe("Enable checkpoint saving"),
39397
39466
  enableAuditTrail: z70.boolean().optional().describe("Enable audit trail logging")
39398
39467
  };
39399
- function createGraphWorkflowHandler(logger54, notifier) {
39468
+ function createGraphWorkflowHandler(logger55, notifier) {
39400
39469
  return async (args, _ctx) => {
39401
39470
  const parsed = RunGraphWorkflowInputSchema.safeParse(args);
39402
39471
  if (!parsed.success) {
@@ -39412,7 +39481,7 @@ function createGraphWorkflowHandler(logger54, notifier) {
39412
39481
  event: "graph_workflow_start",
39413
39482
  workflow: parsed.data.workflow
39414
39483
  });
39415
- const result = await handleRunGraphWorkflow(parsed.data, logger54);
39484
+ const result = await handleRunGraphWorkflow(parsed.data, logger55);
39416
39485
  const succeeded = result.status === "completed";
39417
39486
  notifier.info("run_graph_workflow", {
39418
39487
  event: succeeded ? "graph_workflow_complete" : "graph_workflow_failed",
@@ -39426,16 +39495,16 @@ function createGraphWorkflowHandler(logger54, notifier) {
39426
39495
  };
39427
39496
  }
39428
39497
  function registerRunGraphWorkflowTool(server, deps) {
39429
- const logger54 = deps.logger ?? createLogger({ tool: "run_graph_workflow" });
39498
+ const logger55 = deps.logger ?? createLogger({ tool: "run_graph_workflow" });
39430
39499
  const notifier = deps.notifier ?? createMcpNotifier(server);
39431
- const handler3 = createGraphWorkflowHandler(logger54, notifier);
39500
+ const handler3 = createGraphWorkflowHandler(logger55, notifier);
39432
39501
  const secureHandler = createSecureHandler(handler3, {
39433
39502
  toolName: "run_graph_workflow",
39434
39503
  rateLimiter: deps.rateLimiter,
39435
- logger: logger54
39504
+ logger: logger55
39436
39505
  });
39437
39506
  const timeoutMs = getToolTimeout("run_graph_workflow", deps.security);
39438
- const wrapped = wrapToolWithTimeout("run_graph_workflow", secureHandler, { timeoutMs, logger: logger54 });
39507
+ const wrapped = wrapToolWithTimeout("run_graph_workflow", secureHandler, { timeoutMs, logger: logger55 });
39439
39508
  server.registerTool(
39440
39509
  "run_graph_workflow",
39441
39510
  {
@@ -39445,7 +39514,7 @@ function registerRunGraphWorkflowTool(server, deps) {
39445
39514
  },
39446
39515
  toSdkCallback(wrapped)
39447
39516
  );
39448
- logger54.info("Registered run_graph_workflow tool");
39517
+ logger55.info("Registered run_graph_workflow tool");
39449
39518
  }
39450
39519
  function toEventSummary(event) {
39451
39520
  const hasNodeId = "nodeId" in event;
@@ -39997,7 +40066,7 @@ var ExecuteSpecInputSchema = z71.object({
39997
40066
  spec: z71.string().min(1).max(5e4).describe("Markdown specification to execute"),
39998
40067
  dryRun: z71.boolean().optional().default(false).describe("Parse and decompose only")
39999
40068
  });
40000
- function createDryRunResponse(input, logger54) {
40069
+ function createDryRunResponse(input, logger55) {
40001
40070
  const parseResult2 = parseSpec(input.spec);
40002
40071
  if (!parseResult2.ok) {
40003
40072
  return toolStructuredError({
@@ -40012,14 +40081,14 @@ function createDryRunResponse(input, logger54) {
40012
40081
  message: `Decompose error: ${dagResult.error.message}`
40013
40082
  });
40014
40083
  }
40015
- logger54.info("Dry run completed", {
40084
+ logger55.info("Dry run completed", {
40016
40085
  title: parseResult2.value.title,
40017
40086
  nodes: dagResult.value.nodes.length
40018
40087
  });
40019
40088
  const output2 = { mode: "dry_run", spec: parseResult2.value, dag: dagResult.value };
40020
40089
  return toolSuccess(JSON.stringify(output2, null, 2));
40021
40090
  }
40022
- async function createFullResponse(input, logger54) {
40091
+ async function createFullResponse(input, logger55) {
40023
40092
  const startMs = Date.now();
40024
40093
  const result = await executeSpec(input.spec);
40025
40094
  const durationMs = Date.now() - startMs;
@@ -40032,7 +40101,7 @@ async function createFullResponse(input, logger54) {
40032
40101
  }
40033
40102
  const analysis = analyzeFailures(result.value);
40034
40103
  const satisfaction = result.value.validation.satisfaction;
40035
- logger54.info("Spec execution completed", {
40104
+ logger55.info("Spec execution completed", {
40036
40105
  satisfaction,
40037
40106
  passed: analysis.ok ? analysis.value.passed : false
40038
40107
  });
@@ -40046,7 +40115,7 @@ async function createFullResponse(input, logger54) {
40046
40115
  return toolSuccess(JSON.stringify(output2, null, 2));
40047
40116
  }
40048
40117
  function registerExecuteSpecTool(server, deps) {
40049
- const logger54 = deps.logger ?? createLogger({ tool: "execute_spec" });
40118
+ const logger55 = deps.logger ?? createLogger({ tool: "execute_spec" });
40050
40119
  const handler3 = async (args, _ctx) => {
40051
40120
  const parsed = ExecuteSpecInputSchema.safeParse(args);
40052
40121
  if (!parsed.success) {
@@ -40056,17 +40125,17 @@ function registerExecuteSpecTool(server, deps) {
40056
40125
  });
40057
40126
  }
40058
40127
  if (parsed.data.dryRun) {
40059
- return createDryRunResponse(parsed.data, logger54);
40128
+ return createDryRunResponse(parsed.data, logger55);
40060
40129
  }
40061
- return createFullResponse(parsed.data, logger54);
40130
+ return createFullResponse(parsed.data, logger55);
40062
40131
  };
40063
40132
  const secureHandler = createSecureHandler(handler3, {
40064
40133
  toolName: "execute_spec",
40065
40134
  rateLimiter: deps.rateLimiter,
40066
- logger: logger54
40135
+ logger: logger55
40067
40136
  });
40068
40137
  const timeoutMs = getToolTimeout("execute_spec", deps.security);
40069
- const wrapped = wrapToolWithTimeout("execute_spec", secureHandler, { timeoutMs, logger: logger54 });
40138
+ const wrapped = wrapToolWithTimeout("execute_spec", secureHandler, { timeoutMs, logger: logger55 });
40070
40139
  const toolSchema = {
40071
40140
  spec: z71.string().min(1).max(5e4).describe(
40072
40141
  'Markdown specification to execute. Must contain "## Requirements" and "## Acceptance Criteria" sections.'
@@ -40079,7 +40148,7 @@ function registerExecuteSpecTool(server, deps) {
40079
40148
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("execute_spec") },
40080
40149
  toSdkCallback(wrapped)
40081
40150
  );
40082
- logger54.info("Registered execute_spec tool");
40151
+ logger55.info("Registered execute_spec tool");
40083
40152
  }
40084
40153
  var specLogger = createLogger({ tool: "execute-spec" });
40085
40154
  function recordSpecSuccess(satisfaction, durationMs) {
@@ -40141,29 +40210,29 @@ var MemoryQueryInputSchema = z72.object({
40141
40210
  });
40142
40211
  var reflectionCache;
40143
40212
  var reflectionAdapter;
40144
- function getReflectiveRetriever(logger54) {
40213
+ function getReflectiveRetriever(logger55) {
40145
40214
  const enabled = isReflectiveMemoryEnabled();
40146
40215
  const shadow = isReflectiveShadowMode();
40147
40216
  if (!enabled && !shadow) return void 0;
40148
40217
  if (reflectionAdapter === void 0) {
40149
40218
  try {
40150
- const registry = getGlobalRegistry({ logger: logger54 });
40219
+ const registry = getGlobalRegistry({ logger: logger55 });
40151
40220
  reflectionAdapter = registry.getDefault();
40152
40221
  } catch {
40153
- logger54.warn("No adapter for reflection, using keyword retrieval");
40222
+ logger55.warn("No adapter for reflection, using keyword retrieval");
40154
40223
  return void 0;
40155
40224
  }
40156
40225
  }
40157
40226
  reflectionCache ??= new ReflectionCache();
40158
40227
  return new ReflectiveRetriever({
40159
40228
  adapter: reflectionAdapter,
40160
- logger: logger54,
40229
+ logger: logger55,
40161
40230
  shadowMode: shadow,
40162
40231
  cache: reflectionCache
40163
40232
  });
40164
40233
  }
40165
- async function resolveReflection(query, logger54) {
40166
- const retriever = getReflectiveRetriever(logger54);
40234
+ async function resolveReflection(query, logger55) {
40235
+ const retriever = getReflectiveRetriever(logger55);
40167
40236
  if (retriever === void 0) return { effectiveQuery: query };
40168
40237
  const reflection = await retriever.enhance(query);
40169
40238
  const reflected = reflection.reflected;
@@ -40175,14 +40244,14 @@ async function resolveReflection(query, logger54) {
40175
40244
  reflection
40176
40245
  };
40177
40246
  }
40178
- async function executeMemoryQuery(input, logger54) {
40247
+ async function executeMemoryQuery(input, logger55) {
40179
40248
  const toolMemory = getToolMemory();
40180
40249
  const { effectiveQuery, expandedQuery, reflection } = await resolveReflection(
40181
40250
  input.query,
40182
- logger54
40251
+ logger55
40183
40252
  );
40184
40253
  const results = await toolMemory.queryBySource(input.source, effectiveQuery, input.limit);
40185
- logger54.debug("Memory query executed", {
40254
+ logger55.debug("Memory query executed", {
40186
40255
  query: input.query,
40187
40256
  effectiveQuery: effectiveQuery !== input.query ? effectiveQuery : void 0,
40188
40257
  resultCount: results.length,
@@ -40212,7 +40281,7 @@ async function memoryQueryHandler(args, ctx) {
40212
40281
  });
40213
40282
  }
40214
40283
  function registerMemoryQueryTool(server, deps) {
40215
- const logger54 = deps.logger ?? createLogger({ tool: "memory_query" });
40284
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_query" });
40216
40285
  const toolSchema = {
40217
40286
  query: z72.string().min(1).max(500).describe("Search query to match against memory contents"),
40218
40287
  limit: z72.number().int().min(1).max(50).optional().describe("Maximum results to return (default: 10, max: 50)"),
@@ -40222,10 +40291,10 @@ function registerMemoryQueryTool(server, deps) {
40222
40291
  const secureHandler = createSecureHandler(memoryQueryHandler, {
40223
40292
  toolName: "memory_query",
40224
40293
  rateLimiter: deps.rateLimiter,
40225
- logger: logger54
40294
+ logger: logger55
40226
40295
  });
40227
40296
  const timeoutMs = getToolTimeout("memory_query", deps.security);
40228
- const wrappedHandler = wrapToolWithTimeout("memory_query", secureHandler, { timeoutMs, logger: logger54 });
40297
+ const wrappedHandler = wrapToolWithTimeout("memory_query", secureHandler, { timeoutMs, logger: logger55 });
40229
40298
  const outputSchema = {
40230
40299
  query: z72.string(),
40231
40300
  expandedQuery: z72.string().optional(),
@@ -40243,7 +40312,7 @@ function registerMemoryQueryTool(server, deps) {
40243
40312
  },
40244
40313
  toSdkCallback(wrappedHandler)
40245
40314
  );
40246
- logger54.info("Registered memory_query tool");
40315
+ logger55.info("Registered memory_query tool");
40247
40316
  }
40248
40317
 
40249
40318
  // src/mcp/tools/memory-stats.ts
@@ -40251,7 +40320,7 @@ import { z as z73 } from "zod";
40251
40320
  var MemoryStatsInputSchema = z73.object({
40252
40321
  includeDecay: z73.boolean().optional().default(true).describe("Include decay statistics (default: true)")
40253
40322
  });
40254
- async function collectMemoryStats(input, logger54) {
40323
+ async function collectMemoryStats(input, logger55) {
40255
40324
  const toolMemory = getToolMemory();
40256
40325
  const sessionStats = {
40257
40326
  learningsCount: 0,
@@ -40288,8 +40357,8 @@ async function collectMemoryStats(input, logger54) {
40288
40357
  mobimem: toolMemory.isMobiMemAvailable(),
40289
40358
  decay: toolMemory.isDecayManagerAvailable()
40290
40359
  };
40291
- const registry = await collectRegistryStats(logger54);
40292
- logger54.debug("Memory stats collected", { backends, registryDomains: registry.length });
40360
+ const registry = await collectRegistryStats(logger55);
40361
+ logger55.debug("Memory stats collected", { backends, registryDomains: registry.length });
40293
40362
  return {
40294
40363
  backends,
40295
40364
  session: sessionStats,
@@ -40301,7 +40370,7 @@ async function collectMemoryStats(input, logger54) {
40301
40370
  collectedAt: (/* @__PURE__ */ new Date()).toISOString()
40302
40371
  };
40303
40372
  }
40304
- async function collectRegistryStats(logger54) {
40373
+ async function collectRegistryStats(logger55) {
40305
40374
  const registry = getMemoryRegistry();
40306
40375
  const rows = [];
40307
40376
  for (const domain of registry.domains()) {
@@ -40312,7 +40381,7 @@ async function collectRegistryStats(logger54) {
40312
40381
  rows.push({ domain, count: s.count, error: null });
40313
40382
  } catch (error) {
40314
40383
  const message = error instanceof Error ? error.message : String(error);
40315
- logger54.debug("Registry domain stats failed", { domain, error: message });
40384
+ logger55.debug("Registry domain stats failed", { domain, error: message });
40316
40385
  rows.push({ domain, count: null, error: message });
40317
40386
  }
40318
40387
  }
@@ -40332,7 +40401,7 @@ async function memoryStatsHandler(args, ctx) {
40332
40401
  });
40333
40402
  }
40334
40403
  function registerMemoryStatsTool(server, deps) {
40335
- const logger54 = deps.logger ?? createLogger({ tool: "memory_stats" });
40404
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_stats" });
40336
40405
  const toolSchema = {
40337
40406
  includeDecay: z73.boolean().optional().describe("Include decay statistics (default: true)")
40338
40407
  };
@@ -40340,10 +40409,10 @@ function registerMemoryStatsTool(server, deps) {
40340
40409
  const secureHandler = createSecureHandler(memoryStatsHandler, {
40341
40410
  toolName: "memory_stats",
40342
40411
  rateLimiter: deps.rateLimiter,
40343
- logger: logger54
40412
+ logger: logger55
40344
40413
  });
40345
40414
  const timeoutMs = getToolTimeout("memory_stats", deps.security);
40346
- const wrappedHandler = wrapToolWithTimeout("memory_stats", secureHandler, { timeoutMs, logger: logger54 });
40415
+ const wrappedHandler = wrapToolWithTimeout("memory_stats", secureHandler, { timeoutMs, logger: logger55 });
40347
40416
  const outputSchema = {
40348
40417
  backends: z73.unknown(),
40349
40418
  session: z73.unknown().optional(),
@@ -40364,7 +40433,7 @@ function registerMemoryStatsTool(server, deps) {
40364
40433
  },
40365
40434
  toSdkCallback(wrappedHandler)
40366
40435
  );
40367
- logger54.info("Registered memory_stats tool");
40436
+ logger55.info("Registered memory_stats tool");
40368
40437
  }
40369
40438
 
40370
40439
  // src/mcp/tools/memory-write.ts
@@ -40534,12 +40603,12 @@ function isDuplicateWrite(key, content) {
40534
40603
  recentWriteKeys.set(cacheKey, (/* @__PURE__ */ new Date()).toISOString());
40535
40604
  return false;
40536
40605
  }
40537
- async function executeMemoryWrite(input, logger54) {
40606
+ async function executeMemoryWrite(input, logger55) {
40538
40607
  if (isDuplicateWrite(input.key, input.content)) {
40539
- logger54.debug("Skipping duplicate memory write", { key: input.key, backend: input.backend });
40608
+ logger55.debug("Skipping duplicate memory write", { key: input.key, backend: input.backend });
40540
40609
  return { success: true, backend: input.backend, key: input.key, deduplicated: true };
40541
40610
  }
40542
- logger54.debug("Writing to memory", {
40611
+ logger55.debug("Writing to memory", {
40543
40612
  backend: input.backend,
40544
40613
  key: input.key,
40545
40614
  contentLength: input.content.length
@@ -40577,7 +40646,7 @@ async function memoryWriteHandler(args, ctx) {
40577
40646
  });
40578
40647
  }
40579
40648
  function registerMemoryWriteTool(server, deps) {
40580
- const logger54 = deps.logger ?? createLogger({ tool: "memory_write" });
40649
+ const logger55 = deps.logger ?? createLogger({ tool: "memory_write" });
40581
40650
  const toolSchema = {
40582
40651
  key: z74.string().min(1).max(200).describe("Memory identifier or subject"),
40583
40652
  content: z74.string().min(1).max(5e3).describe("Memory content to store"),
@@ -40591,11 +40660,11 @@ function registerMemoryWriteTool(server, deps) {
40591
40660
  const secureHandler = createSecureHandler(memoryWriteHandler, {
40592
40661
  toolName: "memory_write",
40593
40662
  rateLimiter: deps.rateLimiter,
40594
- logger: logger54
40663
+ logger: logger55
40595
40664
  });
40596
40665
  const guardedHandler = withPrerequisite("memory_write", secureHandler);
40597
40666
  const timeoutMs = getToolTimeout("memory_write", deps.security);
40598
- const wrappedHandler = wrapToolWithTimeout("memory_write", guardedHandler, { timeoutMs, logger: logger54 });
40667
+ const wrappedHandler = wrapToolWithTimeout("memory_write", guardedHandler, { timeoutMs, logger: logger55 });
40599
40668
  const outputSchema = {
40600
40669
  success: z74.boolean(),
40601
40670
  backend: z74.string(),
@@ -40613,7 +40682,7 @@ function registerMemoryWriteTool(server, deps) {
40613
40682
  },
40614
40683
  toSdkCallback(wrappedHandler)
40615
40684
  );
40616
- logger54.info("Registered memory_write tool");
40685
+ logger55.info("Registered memory_write tool");
40617
40686
  }
40618
40687
 
40619
40688
  // src/mcp/tools/weather-report-tool.ts
@@ -40663,7 +40732,7 @@ function weatherReportHandler(args, ctx) {
40663
40732
  }
40664
40733
  }
40665
40734
  function registerWeatherReportTool(server, deps) {
40666
- const logger54 = deps.logger ?? createLogger({ tool: "weather_report" });
40735
+ const logger55 = deps.logger ?? createLogger({ tool: "weather_report" });
40667
40736
  const toolSchema = {
40668
40737
  cli: z75.enum(["claude", "gemini", "codex", "opencode"]).optional().describe("Filter by CLI"),
40669
40738
  category: z75.enum([
@@ -40684,19 +40753,19 @@ function registerWeatherReportTool(server, deps) {
40684
40753
  const secureHandler = createSecureHandler(weatherReportHandler, {
40685
40754
  toolName: "weather_report",
40686
40755
  rateLimiter: deps.rateLimiter,
40687
- logger: logger54
40756
+ logger: logger55
40688
40757
  });
40689
40758
  const timeoutMs = getToolTimeout("weather_report", deps.security);
40690
40759
  const wrappedHandler = wrapToolWithTimeout("weather_report", secureHandler, {
40691
40760
  timeoutMs,
40692
- logger: logger54
40761
+ logger: logger55
40693
40762
  });
40694
40763
  server.registerTool(
40695
40764
  "weather_report",
40696
40765
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("weather_report") },
40697
40766
  toSdkCallback(wrappedHandler)
40698
40767
  );
40699
- logger54.info("Registered weather_report tool");
40768
+ logger55.info("Registered weather_report tool");
40700
40769
  }
40701
40770
 
40702
40771
  // src/mcp/tools/registry-import-types.ts
@@ -40819,7 +40888,7 @@ function registryImportHandler(args, ctx) {
40819
40888
  }
40820
40889
  }
40821
40890
  function registerRegistryImportTool(server, deps) {
40822
- const logger54 = deps.logger ?? createLogger({ tool: "registry_import" });
40891
+ const logger55 = deps.logger ?? createLogger({ tool: "registry_import" });
40823
40892
  const toolSchema = {
40824
40893
  provider: z77.enum(["anthropic", "google", "openai"]).describe("Model provider (anthropic, google, openai)"),
40825
40894
  modelId: z77.string().min(1).describe("Provider model identifier"),
@@ -40829,20 +40898,20 @@ function registerRegistryImportTool(server, deps) {
40829
40898
  const secureHandler = createSecureHandler(registryImportHandler, {
40830
40899
  toolName: "registry_import",
40831
40900
  rateLimiter: deps.rateLimiter,
40832
- logger: logger54
40901
+ logger: logger55
40833
40902
  });
40834
40903
  const guardedHandler = withPrerequisite("registry_import", secureHandler);
40835
40904
  const timeoutMs = getToolTimeout("registry_import", deps.security);
40836
40905
  const wrappedHandler = wrapToolWithTimeout("registry_import", guardedHandler, {
40837
40906
  timeoutMs,
40838
- logger: logger54
40907
+ logger: logger55
40839
40908
  });
40840
40909
  server.registerTool(
40841
40910
  "registry_import",
40842
40911
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("registry_import") },
40843
40912
  toSdkCallback(wrappedHandler)
40844
40913
  );
40845
- logger54.info("Registered registry_import tool");
40914
+ logger55.info("Registered registry_import tool");
40846
40915
  }
40847
40916
 
40848
40917
  // src/mcp/tools/repo-analyze-types.ts
@@ -40875,7 +40944,7 @@ async function repoAnalyzeHandler(args, ctx) {
40875
40944
  }
40876
40945
  }
40877
40946
  function registerRepoAnalyzeTool(server, deps) {
40878
- const logger54 = deps.logger ?? createLogger({ tool: "repo_analyze" });
40947
+ const logger55 = deps.logger ?? createLogger({ tool: "repo_analyze" });
40879
40948
  const toolSchema = {
40880
40949
  repo: z79.string().min(1).describe('GitHub repository in "owner/name" format or full URL'),
40881
40950
  depth: z79.enum(["shallow", "deep"]).optional().describe("Analysis depth: shallow (tree + README) or deep")
@@ -40884,19 +40953,19 @@ function registerRepoAnalyzeTool(server, deps) {
40884
40953
  const secureHandler = createSecureHandler(repoAnalyzeHandler, {
40885
40954
  toolName: "repo_analyze",
40886
40955
  rateLimiter: deps.rateLimiter,
40887
- logger: logger54
40956
+ logger: logger55
40888
40957
  });
40889
40958
  const timeoutMs = getToolTimeout("repo_analyze", deps.security);
40890
40959
  const wrappedHandler = wrapToolWithTimeout("repo_analyze", secureHandler, {
40891
40960
  timeoutMs,
40892
- logger: logger54
40961
+ logger: logger55
40893
40962
  });
40894
40963
  server.registerTool(
40895
40964
  "repo_analyze",
40896
40965
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("repo_analyze") },
40897
40966
  toSdkCallback(wrappedHandler)
40898
40967
  );
40899
- logger54.info("Registered repo_analyze tool");
40968
+ logger55.info("Registered repo_analyze tool");
40900
40969
  }
40901
40970
 
40902
40971
  // src/mcp/tools/repo-security-plan-types.ts
@@ -40928,7 +40997,7 @@ async function handler(args, ctx) {
40928
40997
  }
40929
40998
  }
40930
40999
  function registerRepoSecurityPlanTool(server, deps) {
40931
- const logger54 = deps.logger ?? createLogger({ tool: "repo_security_plan" });
41000
+ const logger55 = deps.logger ?? createLogger({ tool: "repo_security_plan" });
40932
41001
  const toolSchema = {
40933
41002
  repo: z81.string().min(1).describe('GitHub repository in "owner/name" format or full URL'),
40934
41003
  categories: z81.array(z81.string().max(50)).max(10).optional().describe('Filter to specific categories (e.g., ["sast", "sca", "secrets"])'),
@@ -40938,19 +41007,19 @@ function registerRepoSecurityPlanTool(server, deps) {
40938
41007
  const secureHandler = createSecureHandler(handler, {
40939
41008
  toolName: "repo_security_plan",
40940
41009
  rateLimiter: deps.rateLimiter,
40941
- logger: logger54
41010
+ logger: logger55
40942
41011
  });
40943
41012
  const timeoutMs = getToolTimeout("repo_security_plan", deps.security);
40944
41013
  const wrappedHandler = wrapToolWithTimeout("repo_security_plan", secureHandler, {
40945
41014
  timeoutMs,
40946
- logger: logger54
41015
+ logger: logger55
40947
41016
  });
40948
41017
  server.registerTool(
40949
41018
  "repo_security_plan",
40950
41019
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("repo_security_plan") },
40951
41020
  toSdkCallback(wrappedHandler)
40952
41021
  );
40953
- logger54.info("Registered repo_security_plan tool");
41022
+ logger55.info("Registered repo_security_plan tool");
40954
41023
  }
40955
41024
 
40956
41025
  // src/mcp/tools/search-codebase-tool.ts
@@ -41066,7 +41135,7 @@ ${output2}`);
41066
41135
  }
41067
41136
  }
41068
41137
  function registerSearchCodebaseTool(server, deps) {
41069
- const logger54 = deps.logger ?? createLogger({ tool: "search_codebase" });
41138
+ const logger55 = deps.logger ?? createLogger({ tool: "search_codebase" });
41070
41139
  const toolSchema = {
41071
41140
  query: z82.string().min(1).max(200).describe("Search query or file path"),
41072
41141
  directory: z82.string().max(500).optional().describe("Directory to index"),
@@ -41077,16 +41146,16 @@ function registerSearchCodebaseTool(server, deps) {
41077
41146
  const secureHandler = createSecureHandler(searchCodebaseHandler, {
41078
41147
  toolName: "search_codebase",
41079
41148
  rateLimiter: deps.rateLimiter,
41080
- logger: logger54
41149
+ logger: logger55
41081
41150
  });
41082
41151
  const timeoutMs = getToolTimeout("search_codebase", deps.security);
41083
- const wrapped = wrapToolWithTimeout("search_codebase", secureHandler, { timeoutMs, logger: logger54 });
41152
+ const wrapped = wrapToolWithTimeout("search_codebase", secureHandler, { timeoutMs, logger: logger55 });
41084
41153
  server.registerTool(
41085
41154
  "search_codebase",
41086
41155
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("search_codebase") },
41087
41156
  toSdkCallback(wrapped)
41088
41157
  );
41089
- logger54.info("Registered search_codebase tool");
41158
+ logger55.info("Registered search_codebase tool");
41090
41159
  }
41091
41160
 
41092
41161
  // src/mcp/tools/extract-symbols-tool.ts
@@ -41153,7 +41222,7 @@ async function extractSymbolsHandler(args, ctx) {
41153
41222
  }
41154
41223
  }
41155
41224
  function registerExtractSymbolsTool(server, deps) {
41156
- const logger54 = deps.logger ?? createLogger({ tool: "extract_symbols" });
41225
+ const logger55 = deps.logger ?? createLogger({ tool: "extract_symbols" });
41157
41226
  const toolSchema = {
41158
41227
  filePath: z83.string().min(1).max(500).describe("Path to TypeScript/JavaScript file"),
41159
41228
  mode: z83.enum(["index", "full"]).optional().describe("index (default): names+lines. full: includes source text")
@@ -41162,19 +41231,19 @@ function registerExtractSymbolsTool(server, deps) {
41162
41231
  const secureHandler = createSecureHandler(extractSymbolsHandler, {
41163
41232
  toolName: "extract_symbols",
41164
41233
  rateLimiter: deps.rateLimiter,
41165
- logger: logger54
41234
+ logger: logger55
41166
41235
  });
41167
41236
  const timeoutMs = getToolTimeout("extract_symbols", deps.security);
41168
41237
  const wrapped = wrapToolWithTimeout("extract_symbols", secureHandler, {
41169
41238
  timeoutMs,
41170
- logger: logger54
41239
+ logger: logger55
41171
41240
  });
41172
41241
  server.registerTool(
41173
41242
  "extract_symbols",
41174
41243
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("extract_symbols") },
41175
41244
  toSdkCallback(wrapped)
41176
41245
  );
41177
- logger54.info("Registered extract_symbols tool");
41246
+ logger55.info("Registered extract_symbols tool");
41178
41247
  }
41179
41248
 
41180
41249
  // src/mcp/tools/query-trace-tool.ts
@@ -41287,7 +41356,7 @@ function queryTraceHandler(args, ctx) {
41287
41356
  });
41288
41357
  }
41289
41358
  function registerQueryTraceTool(server, deps) {
41290
- const logger54 = deps.logger ?? createLogger({ tool: "query_trace" });
41359
+ const logger55 = deps.logger ?? createLogger({ tool: "query_trace" });
41291
41360
  const toolSchema = {
41292
41361
  runId: z84.string().min(1).max(128).regex(/^[a-zA-Z0-9_-]+$/, "runId must be alphanumeric, hyphens, or underscores").describe("Run ID to query traces for"),
41293
41362
  eventType: z84.string().max(100).regex(/^[a-zA-Z0-9._-]+$/).optional().describe("Filter by event type (e.g., model.called)"),
@@ -41297,16 +41366,16 @@ function registerQueryTraceTool(server, deps) {
41297
41366
  const secureHandler = createSecureHandler(queryTraceHandler, {
41298
41367
  toolName: "query_trace",
41299
41368
  rateLimiter: deps.rateLimiter,
41300
- logger: logger54
41369
+ logger: logger55
41301
41370
  });
41302
41371
  const timeoutMs = getToolTimeout("query_trace", deps.security);
41303
- const wrappedHandler = wrapToolWithTimeout("query_trace", secureHandler, { timeoutMs, logger: logger54 });
41372
+ const wrappedHandler = wrapToolWithTimeout("query_trace", secureHandler, { timeoutMs, logger: logger55 });
41304
41373
  server.registerTool(
41305
41374
  "query_trace",
41306
41375
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("query_trace") },
41307
41376
  toSdkCallback(wrappedHandler)
41308
41377
  );
41309
- logger54.info("Registered query_trace tool");
41378
+ logger55.info("Registered query_trace tool");
41310
41379
  }
41311
41380
 
41312
41381
  // src/audit/audit-types.ts
@@ -41610,7 +41679,7 @@ var FileAuditStorage = class _FileAuditStorage {
41610
41679
  * @param logger - Optional logger instance
41611
41680
  * @returns Result with FileAuditStorage or SecurityError
41612
41681
  */
41613
- static create(config, logger54) {
41682
+ static create(config, logger55) {
41614
41683
  const validation = config.allowedRoot !== void 0 ? validateLogDir(config.logDir, config.allowedRoot) : validateLogDirBasic(config.logDir);
41615
41684
  if (!validation.ok) {
41616
41685
  return { ok: false, error: validation.error };
@@ -41619,7 +41688,7 @@ var FileAuditStorage = class _FileAuditStorage {
41619
41688
  ...config,
41620
41689
  logDir: validation.value
41621
41690
  };
41622
- return { ok: true, value: new _FileAuditStorage(validatedConfig, logger54, true) };
41691
+ return { ok: true, value: new _FileAuditStorage(validatedConfig, logger55, true) };
41623
41692
  }
41624
41693
  /**
41625
41694
  * Constructor for FileAuditStorage.
@@ -41632,8 +41701,8 @@ var FileAuditStorage = class _FileAuditStorage {
41632
41701
  * @param skipValidation - Internal flag, set by create() after validation
41633
41702
  * @throws SecurityError if path validation fails and skipValidation is false
41634
41703
  */
41635
- constructor(config, logger54, skipValidation = false) {
41636
- this.logger = logger54 ?? createLogger({ component: "FileAuditStorage" });
41704
+ constructor(config, logger55, skipValidation = false) {
41705
+ this.logger = logger55 ?? createLogger({ component: "FileAuditStorage" });
41637
41706
  if (!skipValidation) {
41638
41707
  const validation = validateLogDirBasic(config.logDir);
41639
41708
  if (!validation.ok) {
@@ -41862,13 +41931,13 @@ var AuditLogger = class {
41862
41931
  closed = false;
41863
41932
  inFlightFlush = null;
41864
41933
  droppedEventCount = 0;
41865
- constructor(config, storage, logger54) {
41934
+ constructor(config, storage, logger55) {
41866
41935
  const validated = AuditLogConfigSchema.safeParse(config);
41867
41936
  if (!validated.success) {
41868
41937
  const issues = validated.error.issues.map((i) => i.path.join(".") + ": " + i.message).join("; ");
41869
41938
  throw new AuditError("Invalid AuditLogConfig: " + issues);
41870
41939
  }
41871
- this.logger = logger54 ?? createLogger({ component: "AuditLogger" });
41940
+ this.logger = logger55 ?? createLogger({ component: "AuditLogger" });
41872
41941
  this.enableHashChain = validated.data.enableHashChain;
41873
41942
  this.minSeverity = validated.data.minSeverity;
41874
41943
  this.categories = validated.data.categories;
@@ -42069,8 +42138,8 @@ var AuditLogger = class {
42069
42138
  this.logger.info("AuditLogger closed");
42070
42139
  }
42071
42140
  };
42072
- function createAuditLogger(config, storage, logger54) {
42073
- return new AuditLogger(config, storage, logger54);
42141
+ function createAuditLogger(config, storage, logger55) {
42142
+ return new AuditLogger(config, storage, logger55);
42074
42143
  }
42075
42144
 
42076
42145
  // src/pipeline/stage-types.ts
@@ -43477,7 +43546,7 @@ ${contextBlock}`;
43477
43546
  const strategy = config.votingStrategy ?? "higher_order";
43478
43547
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43479
43548
  try {
43480
- const { executeVoting } = await import("./consensus-vote-LB7GCDPG.js");
43549
+ const { executeVoting } = await import("./consensus-vote-5NIBODVH.js");
43481
43550
  const votingResult = await executeVoting(
43482
43551
  {
43483
43552
  proposal: plan.slice(0, 4e3),
@@ -44758,15 +44827,15 @@ async function prReviewHandler(args, ctx) {
44758
44827
  }
44759
44828
  }
44760
44829
  function registerPrReviewTool(server, deps) {
44761
- const logger54 = deps.logger ?? createLogger({ tool: "pr_review" });
44830
+ const logger55 = deps.logger ?? createLogger({ tool: "pr_review" });
44762
44831
  const description2 = "Run multi-voter consensus review on a PR diff (#2233). 5 voters (architect, security, devex, catfish, scope_steward) each emit approve/request_changes/abstain with reasoning and citations. Reuses consensus_vote infra; experimental.";
44763
44832
  const secureHandler = createSecureHandler(prReviewHandler, {
44764
44833
  toolName: "pr_review",
44765
44834
  rateLimiter: deps.rateLimiter,
44766
- logger: logger54
44835
+ logger: logger55
44767
44836
  });
44768
44837
  const timeoutMs = getToolTimeout("pr_review", deps.security);
44769
- const wrappedHandler = wrapToolWithTimeout("pr_review", secureHandler, { timeoutMs, logger: logger54 });
44838
+ const wrappedHandler = wrapToolWithTimeout("pr_review", secureHandler, { timeoutMs, logger: logger55 });
44770
44839
  server.registerTool(
44771
44840
  "pr_review",
44772
44841
  {
@@ -44776,7 +44845,7 @@ function registerPrReviewTool(server, deps) {
44776
44845
  },
44777
44846
  toSdkCallback(wrappedHandler)
44778
44847
  );
44779
- logger54.info("Registered pr_review tool");
44848
+ logger55.info("Registered pr_review tool");
44780
44849
  }
44781
44850
 
44782
44851
  // src/mcp/tools/survey-oss-landscape.ts
@@ -44837,7 +44906,7 @@ function parseCandidates(data) {
44837
44906
  });
44838
44907
  return { totalFound: data.total_count ?? candidates.length, candidates };
44839
44908
  }
44840
- async function fetchGithubCandidates(input, logger54) {
44909
+ async function fetchGithubCandidates(input, logger55) {
44841
44910
  const query = encodeURIComponent(buildGithubQuery(input));
44842
44911
  const perPage = String(input.maxResults);
44843
44912
  const url = `${GITHUB_SEARCH_BASE}?q=${query}&sort=stars&order=desc&per_page=${perPage}`;
@@ -44849,7 +44918,7 @@ async function fetchGithubCandidates(input, logger54) {
44849
44918
  if (tokenResult.ok) {
44850
44919
  headers["Authorization"] = `Bearer ${tokenResult.value.value}`;
44851
44920
  } else {
44852
- logger54.debug("No GitHub token; using unauthenticated rate limit (60/hr)");
44921
+ logger55.debug("No GitHub token; using unauthenticated rate limit (60/hr)");
44853
44922
  }
44854
44923
  const fetchResult = await fetchSource({ url, source: "github", headers });
44855
44924
  if (!fetchResult.ok) return fetchResult;
@@ -44880,12 +44949,12 @@ async function fetchGithubCandidates(input, logger54) {
44880
44949
  }
44881
44950
  return { ok: true, value: parseCandidates(parsed.data) };
44882
44951
  }
44883
- async function executeSurvey(input, logger54) {
44952
+ async function executeSurvey(input, logger55) {
44884
44953
  const sourcesQueried = ["github"];
44885
44954
  const sourcesFailed = [];
44886
- const githubResult = await fetchGithubCandidates(input, logger54);
44955
+ const githubResult = await fetchGithubCandidates(input, logger55);
44887
44956
  if (!githubResult.ok) {
44888
- logger54.warn("GitHub source failed", {
44957
+ logger55.warn("GitHub source failed", {
44889
44958
  code: githubResult.error.code,
44890
44959
  message: githubResult.error.message
44891
44960
  });
@@ -44915,13 +44984,13 @@ function createSurveyHandler(deps) {
44915
44984
  message: `Validation error: ${formatZodError(validation.error)}`
44916
44985
  });
44917
44986
  }
44918
- const logger54 = deps.logger ?? createLogger({ tool: "survey_oss_landscape" });
44987
+ const logger55 = deps.logger ?? createLogger({ tool: "survey_oss_landscape" });
44919
44988
  ctx.logger.debug("Surveying OSS landscape", {
44920
44989
  query: validation.data.query,
44921
44990
  maxResults: validation.data.maxResults
44922
44991
  });
44923
- return withToolError("Survey failed", logger54, async () => {
44924
- const result = await executeSurvey(validation.data, logger54);
44992
+ return withToolError("Survey failed", logger55, async () => {
44993
+ const result = await executeSurvey(validation.data, logger55);
44925
44994
  return toolSuccessStructured(result);
44926
44995
  });
44927
44996
  };
@@ -44935,16 +45004,16 @@ var SURVEY_OUTPUT_SCHEMA = {
44935
45004
  };
44936
45005
  var SURVEY_DESCRIPTION = 'Transient OSS project search. Returns a ranked list of GitHub repositories with license, last-commit, star-count, and one-line description. Does NOT persist to the research registry \u2014 use `research_add_source` for that. Best for one-off engineering decisions like "what tools exist in this space?".';
44937
45006
  function registerSurveyOssLandscapeTool(server, deps) {
44938
- const logger54 = deps.logger ?? createLogger({ tool: "survey_oss_landscape" });
45007
+ const logger55 = deps.logger ?? createLogger({ tool: "survey_oss_landscape" });
44939
45008
  const secureHandler = createSecureHandler(createSurveyHandler(deps), {
44940
45009
  toolName: "survey_oss_landscape",
44941
45010
  rateLimiter: deps.rateLimiter,
44942
- logger: logger54
45011
+ logger: logger55
44943
45012
  });
44944
45013
  const timeoutMs = getToolTimeout("survey_oss_landscape", deps.security);
44945
45014
  const wrappedHandler = wrapToolWithTimeout("survey_oss_landscape", secureHandler, {
44946
45015
  timeoutMs,
44947
- logger: logger54
45016
+ logger: logger55
44948
45017
  });
44949
45018
  server.registerTool(
44950
45019
  "survey_oss_landscape",
@@ -44956,7 +45025,7 @@ function registerSurveyOssLandscapeTool(server, deps) {
44956
45025
  },
44957
45026
  toSdkCallback(wrappedHandler)
44958
45027
  );
44959
- logger54.info("Registered survey_oss_landscape tool");
45028
+ logger55.info("Registered survey_oss_landscape tool");
44960
45029
  }
44961
45030
 
44962
45031
  // src/mcp/tools/vendor-publishing-audit.ts
@@ -45057,9 +45126,9 @@ function createVendorPublishingAuditHandler(deps) {
45057
45126
  message: `Validation error: ${formatZodError(validation.error)}`
45058
45127
  });
45059
45128
  }
45060
- const logger54 = deps.logger ?? createLogger({ tool: "vendor_publishing_audit" });
45129
+ const logger55 = deps.logger ?? createLogger({ tool: "vendor_publishing_audit" });
45061
45130
  ctx.logger.debug("Vendor publishing audit", { vendor: validation.data.vendor });
45062
- return withToolError("Vendor publishing audit failed", logger54, () => {
45131
+ return withToolError("Vendor publishing audit failed", logger55, () => {
45063
45132
  const result = lookupVendor(validation.data.vendor);
45064
45133
  return Promise.resolve(toolSuccessStructured(result));
45065
45134
  });
@@ -45083,16 +45152,16 @@ var VENDOR_PUBLISHING_OUTPUT_SCHEMA = {
45083
45152
  };
45084
45153
  var VENDOR_PUBLISHING_DESCRIPTION = "Look up a vendor's published-artifact signing infrastructure: GPG key fingerprints, SHA256SUMS URL pattern, signature shape (clearsigned / detached / detached-on-iso), release cadence, key rotation notes, and the vendor doc citation. Static lookup against a curated seed dataset; the vendor doc URL is the authoritative source. Returns `{known: false, knownVendors: [...]}` for vendors without a seed entry. v1 covers ubuntu, debian, fedora.";
45085
45154
  function registerVendorPublishingAuditTool(server, deps) {
45086
- const logger54 = deps.logger ?? createLogger({ tool: "vendor_publishing_audit" });
45155
+ const logger55 = deps.logger ?? createLogger({ tool: "vendor_publishing_audit" });
45087
45156
  const secureHandler = createSecureHandler(createVendorPublishingAuditHandler(deps), {
45088
45157
  toolName: "vendor_publishing_audit",
45089
45158
  rateLimiter: deps.rateLimiter,
45090
- logger: logger54
45159
+ logger: logger55
45091
45160
  });
45092
45161
  const timeoutMs = getToolTimeout("vendor_publishing_audit", deps.security);
45093
45162
  const wrappedHandler = wrapToolWithTimeout("vendor_publishing_audit", secureHandler, {
45094
45163
  timeoutMs,
45095
- logger: logger54
45164
+ logger: logger55
45096
45165
  });
45097
45166
  server.registerTool(
45098
45167
  "vendor_publishing_audit",
@@ -45104,7 +45173,7 @@ function registerVendorPublishingAuditTool(server, deps) {
45104
45173
  },
45105
45174
  toSdkCallback(wrappedHandler)
45106
45175
  );
45107
- logger54.info("Registered vendor_publishing_audit tool");
45176
+ logger55.info("Registered vendor_publishing_audit tool");
45108
45177
  }
45109
45178
 
45110
45179
  // src/mcp/tools/compare-data-feeds.ts
@@ -45290,12 +45359,12 @@ function createCompareDataFeedsHandler(deps) {
45290
45359
  message: `Validation error: ${formatZodError(validation.error)}`
45291
45360
  });
45292
45361
  }
45293
- const logger54 = deps.logger ?? createLogger({ tool: "compare_data_feeds" });
45362
+ const logger55 = deps.logger ?? createLogger({ tool: "compare_data_feeds" });
45294
45363
  ctx.logger.debug("Comparing data feeds", {
45295
45364
  feedAPath: validation.data.feedAPath,
45296
45365
  feedBPath: validation.data.feedBPath
45297
45366
  });
45298
- return withToolError("Compare data feeds failed", logger54, () => {
45367
+ return withToolError("Compare data feeds failed", logger55, () => {
45299
45368
  const result = executeCompare(validation.data);
45300
45369
  return Promise.resolve(toolSuccessStructured(result));
45301
45370
  });
@@ -45323,16 +45392,16 @@ var COMPARE_OUTPUT_SCHEMA = {
45323
45392
  };
45324
45393
  var COMPARE_DESCRIPTION = "Diff two upstream data feeds (YAML or JSON files) along coverage and per-field axes. Returns which entries exist in A, B, both, plus optional field-level diffs across matched entries. v1 takes file paths only (no URL fetch \u2014 that needs an SSRF design pass). Both feeds must be a top-level array OR a top-level object with exactly one array field.";
45325
45394
  function registerCompareDataFeedsTool(server, deps) {
45326
- const logger54 = deps.logger ?? createLogger({ tool: "compare_data_feeds" });
45395
+ const logger55 = deps.logger ?? createLogger({ tool: "compare_data_feeds" });
45327
45396
  const secureHandler = createSecureHandler(createCompareDataFeedsHandler(deps), {
45328
45397
  toolName: "compare_data_feeds",
45329
45398
  rateLimiter: deps.rateLimiter,
45330
- logger: logger54
45399
+ logger: logger55
45331
45400
  });
45332
45401
  const timeoutMs = getToolTimeout("compare_data_feeds", deps.security);
45333
45402
  const wrappedHandler = wrapToolWithTimeout("compare_data_feeds", secureHandler, {
45334
45403
  timeoutMs,
45335
- logger: logger54
45404
+ logger: logger55
45336
45405
  });
45337
45406
  server.registerTool(
45338
45407
  "compare_data_feeds",
@@ -45344,7 +45413,7 @@ function registerCompareDataFeedsTool(server, deps) {
45344
45413
  },
45345
45414
  toSdkCallback(wrappedHandler)
45346
45415
  );
45347
- logger54.info("Registered compare_data_feeds tool");
45416
+ logger55.info("Registered compare_data_feeds tool");
45348
45417
  }
45349
45418
 
45350
45419
  // src/mcp/tools/improvement-review.ts
@@ -45422,8 +45491,8 @@ function clamp2(score, max) {
45422
45491
  var FitnessScoreCalculator = class {
45423
45492
  logger;
45424
45493
  checks = [];
45425
- constructor(logger54) {
45426
- this.logger = logger54 ?? createLogger({ component: "FitnessScoreCalculator" });
45494
+ constructor(logger55) {
45495
+ this.logger = logger55 ?? createLogger({ component: "FitnessScoreCalculator" });
45427
45496
  this.registerDefaultChecks();
45428
45497
  }
45429
45498
  /** Register default fitness checks. */
@@ -45917,8 +45986,8 @@ var FitnessScoreCalculator = class {
45917
45986
  return base;
45918
45987
  }
45919
45988
  };
45920
- function createFitnessScoreCalculator(logger54) {
45921
- return new FitnessScoreCalculator(logger54);
45989
+ function createFitnessScoreCalculator(logger55) {
45990
+ return new FitnessScoreCalculator(logger55);
45922
45991
  }
45923
45992
  function calculateFitnessScore(version) {
45924
45993
  const calculator = createFitnessScoreCalculator();
@@ -46166,20 +46235,20 @@ async function fileSignalsAsIssues(signals, ctx) {
46166
46235
  return { issuesFiled, issuesSkipped };
46167
46236
  }
46168
46237
  async function runImprovementReview(input, deps = {}) {
46169
- const logger54 = deps.logger ?? createLogger({ component: "improvement_review" });
46238
+ const logger55 = deps.logger ?? createLogger({ component: "improvement_review" });
46170
46239
  const { lookbackDays, fileIssues, minSampleSize, fitnessFloor } = input;
46171
46240
  const now = Date.now();
46172
46241
  const windowLabel = `${String(lookbackDays)}d`;
46173
46242
  const allOutcomes = getOutcomeStore().query();
46174
46243
  const windowed = filterByLookback(allOutcomes, lookbackDays, now);
46175
- const audit = safeFitnessAudit(now, { logger: logger54 });
46244
+ const audit = safeFitnessAudit(now, { logger: logger55 });
46176
46245
  const signals = [
46177
46246
  ...detectCliPerformanceFloor(windowed, minSampleSize, windowLabel),
46178
46247
  ...detectFailureCategoryConcentration(windowed, windowLabel),
46179
46248
  ...detectFitnessSignals(audit, fitnessFloor)
46180
46249
  ];
46181
46250
  signals.sort((a, b) => SEVERITY_ORDER3[a.severity] - SEVERITY_ORDER3[b.severity]);
46182
- const { issuesFiled, issuesSkipped } = fileIssues ? await fileSignalsAsIssues(signals, { logger: logger54 }) : { issuesFiled: [], issuesSkipped: [] };
46251
+ const { issuesFiled, issuesSkipped } = fileIssues ? await fileSignalsAsIssues(signals, { logger: logger55 }) : { issuesFiled: [], issuesSkipped: [] };
46183
46252
  return {
46184
46253
  window: windowLabel,
46185
46254
  totalOutcomes: windowed.length,
@@ -46209,17 +46278,17 @@ var TOOL_INPUT_SCHEMA = {
46209
46278
  fitnessFloor: z95.number().int().min(0).max(100).optional().describe("Fitness score below this threshold triggers a tech-debt signal (default 90).")
46210
46279
  };
46211
46280
  function registerImprovementReviewTool(server, deps) {
46212
- const logger54 = deps.logger ?? createLogger({ tool: "improvement_review" });
46281
+ const logger55 = deps.logger ?? createLogger({ tool: "improvement_review" });
46213
46282
  const secureHandler = createSecureHandler(reviewHandler, {
46214
46283
  toolName: "improvement_review",
46215
46284
  rateLimiter: deps.rateLimiter,
46216
- logger: logger54
46285
+ logger: logger55
46217
46286
  });
46218
46287
  const guardedHandler = withPrerequisite("improvement_review", secureHandler);
46219
46288
  const timeoutMs = getToolTimeout("improvement_review", deps.security);
46220
46289
  const wrappedHandler = wrapToolWithTimeout("improvement_review", guardedHandler, {
46221
46290
  timeoutMs,
46222
- logger: logger54
46291
+ logger: logger55
46223
46292
  });
46224
46293
  server.registerTool(
46225
46294
  "improvement_review",
@@ -46230,7 +46299,7 @@ function registerImprovementReviewTool(server, deps) {
46230
46299
  },
46231
46300
  toSdkCallback(wrappedHandler)
46232
46301
  );
46233
- logger54.info("Registered improvement_review tool");
46302
+ logger55.info("Registered improvement_review tool");
46234
46303
  }
46235
46304
 
46236
46305
  // src/mcp/tools/query-task-state-tool.ts
@@ -46269,7 +46338,7 @@ function queryTaskStateHandler(args, ctx) {
46269
46338
  return Promise.resolve(toolSuccess(JSON.stringify(response, null, 2)));
46270
46339
  }
46271
46340
  function registerQueryTaskStateTool(server, deps) {
46272
- const logger54 = deps.logger ?? createLogger({ tool: "query_task_state" });
46341
+ const logger55 = deps.logger ?? createLogger({ tool: "query_task_state" });
46273
46342
  const toolSchema = {
46274
46343
  taskId: z96.string().min(1).max(128).describe("Task ID whose structured state log should be read")
46275
46344
  };
@@ -46277,23 +46346,91 @@ function registerQueryTaskStateTool(server, deps) {
46277
46346
  const secureHandler = createSecureHandler(queryTaskStateHandler, {
46278
46347
  toolName: "query_task_state",
46279
46348
  rateLimiter: deps.rateLimiter,
46280
- logger: logger54
46349
+ logger: logger55
46281
46350
  });
46282
46351
  const timeoutMs = getToolTimeout("query_task_state", deps.security);
46283
46352
  const wrappedHandler = wrapToolWithTimeout("query_task_state", secureHandler, {
46284
46353
  timeoutMs,
46285
- logger: logger54
46354
+ logger: logger55
46286
46355
  });
46287
46356
  server.registerTool(
46288
46357
  "query_task_state",
46289
46358
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("query_task_state") },
46290
46359
  toSdkCallback(wrappedHandler)
46291
46360
  );
46292
- logger54.info("Registered query_task_state tool");
46361
+ logger55.info("Registered query_task_state tool");
46293
46362
  }
46294
46363
 
46295
46364
  // src/mcp/tools/get-job-result-tool.ts
46296
46365
  import { z as z97 } from "zod";
46366
+
46367
+ // src/mcp/jobs/task-state-source.ts
46368
+ var logger42 = createLogger({ component: "task-state-source" });
46369
+ var TOOL_NAME_BY_PREFIX = {
46370
+ orch: "orchestrate",
46371
+ rwf: "run_workflow",
46372
+ cv: "consensus_vote"
46373
+ };
46374
+ function toolNameFromJobId(jobId) {
46375
+ const dash = jobId.indexOf("-");
46376
+ const prefix = dash === -1 ? jobId : jobId.slice(0, dash);
46377
+ return TOOL_NAME_BY_PREFIX[prefix] ?? "unknown";
46378
+ }
46379
+ function statusFromState(state) {
46380
+ if (state.cancellation !== void 0) return "cancelled";
46381
+ if (state.stage === "complete") return "complete";
46382
+ if (state.stage === "failed") return "failed";
46383
+ return "pending";
46384
+ }
46385
+ function lastBlockerMessage(state) {
46386
+ const last = state.blockers.at(-1);
46387
+ return last?.blocker;
46388
+ }
46389
+ function jobResultFromTaskState(state, jobId) {
46390
+ const status = statusFromState(state);
46391
+ const isTerminal = status !== "pending";
46392
+ const createdAt = state.createdAt ?? state.updatedAt;
46393
+ const record = {
46394
+ v: 1,
46395
+ jobId,
46396
+ toolName: toolNameFromJobId(jobId),
46397
+ status,
46398
+ createdAt,
46399
+ ...isTerminal ? { completedAt: state.updatedAt } : {}
46400
+ };
46401
+ if (status === "complete") {
46402
+ return { ...record, result: state.result };
46403
+ }
46404
+ if (status === "cancelled") {
46405
+ const reason = state.cancellation?.reason;
46406
+ return reason !== void 0 ? { ...record, error: reason } : record;
46407
+ }
46408
+ if (status === "failed") {
46409
+ const msg = lastBlockerMessage(state);
46410
+ return msg !== void 0 ? { ...record, error: msg } : record;
46411
+ }
46412
+ return record;
46413
+ }
46414
+ function readJobResultFromTaskState(jobId, customDir) {
46415
+ const stateResult = readTaskState(jobId, customDir);
46416
+ if (!stateResult.ok) return null;
46417
+ return jobResultFromTaskState(stateResult.value, jobId);
46418
+ }
46419
+ function isTaskStateJobSource() {
46420
+ return process.env["NEXUS_JOB_RESULT_SOURCE"]?.toLowerCase() === "task_state";
46421
+ }
46422
+ function resolveJobResult(jobId, customDir) {
46423
+ if (isTaskStateJobSource()) {
46424
+ const fromState = readJobResultFromTaskState(jobId, customDir);
46425
+ if (fromState !== null) {
46426
+ logger42.debug("Resolved job result from task-state", { jobId, status: fromState.status });
46427
+ return fromState;
46428
+ }
46429
+ }
46430
+ return readJobResult(jobId);
46431
+ }
46432
+
46433
+ // src/mcp/tools/get-job-result-tool.ts
46297
46434
  var GetJobResultInputSchema = z97.object({
46298
46435
  jobId: z97.string().min(1).max(128).describe('Job ID returned by orchestrate({ mode: "async" })')
46299
46436
  });
@@ -46307,12 +46444,12 @@ function getJobResultHandler(args) {
46307
46444
  })
46308
46445
  );
46309
46446
  }
46310
- const record = readJobResult(parsed.data.jobId);
46447
+ const record = resolveJobResult(parsed.data.jobId);
46311
46448
  if (record === null) {
46312
46449
  const response2 = {
46313
46450
  jobId: parsed.data.jobId,
46314
46451
  found: false,
46315
- errorMessage: "Unknown jobId, or the sidecar file is unreadable (corrupt / future schema). Re-check the jobId returned by the async-mode dispatch."
46452
+ errorMessage: "Unknown jobId, or the result source is unreadable (corrupt / future schema). Re-check the jobId returned by the async-mode dispatch."
46316
46453
  };
46317
46454
  return Promise.resolve(toolSuccess(JSON.stringify(response2, null, 2)));
46318
46455
  }
@@ -46324,7 +46461,7 @@ function getJobResultHandler(args) {
46324
46461
  return Promise.resolve(toolSuccess(JSON.stringify(response, null, 2)));
46325
46462
  }
46326
46463
  function registerGetJobResultTool(server, deps) {
46327
- const logger54 = deps.logger ?? createLogger({ tool: "get_job_result" });
46464
+ const logger55 = deps.logger ?? createLogger({ tool: "get_job_result" });
46328
46465
  const toolSchema = {
46329
46466
  jobId: z97.string().min(1).max(128).describe('Job ID returned by orchestrate({ mode: "async" })')
46330
46467
  };
@@ -46332,19 +46469,19 @@ function registerGetJobResultTool(server, deps) {
46332
46469
  const secureHandler = createSecureHandler(getJobResultHandler, {
46333
46470
  toolName: "get_job_result",
46334
46471
  rateLimiter: deps.rateLimiter,
46335
- logger: logger54
46472
+ logger: logger55
46336
46473
  });
46337
46474
  const timeoutMs = getToolTimeout("get_job_result", deps.security);
46338
46475
  const wrappedHandler = wrapToolWithTimeout("get_job_result", secureHandler, {
46339
46476
  timeoutMs,
46340
- logger: logger54
46477
+ logger: logger55
46341
46478
  });
46342
46479
  server.registerTool(
46343
46480
  "get_job_result",
46344
46481
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("get_job_result") },
46345
46482
  toSdkCallback(wrappedHandler)
46346
46483
  );
46347
- logger54.info("Registered get_job_result tool");
46484
+ logger55.info("Registered get_job_result tool");
46348
46485
  }
46349
46486
 
46350
46487
  // src/mcp/tools/list-jobs-tool.ts
@@ -46397,7 +46534,7 @@ function listJobsHandler(args) {
46397
46534
  return Promise.resolve(toolSuccess(JSON.stringify(response, null, 2)));
46398
46535
  }
46399
46536
  function registerListJobsTool(server, deps) {
46400
- const logger54 = deps.logger ?? createLogger({ tool: "list_jobs" });
46537
+ const logger55 = deps.logger ?? createLogger({ tool: "list_jobs" });
46401
46538
  const toolSchema = {
46402
46539
  toolName: z98.string().min(1).max(128).optional().describe("Filter to one tool (exact match)."),
46403
46540
  status: JobStatusSchema.optional().describe(
@@ -46409,19 +46546,19 @@ function registerListJobsTool(server, deps) {
46409
46546
  const secureHandler = createSecureHandler(listJobsHandler, {
46410
46547
  toolName: "list_jobs",
46411
46548
  rateLimiter: deps.rateLimiter,
46412
- logger: logger54
46549
+ logger: logger55
46413
46550
  });
46414
46551
  const timeoutMs = getToolTimeout("list_jobs", deps.security);
46415
46552
  const wrappedHandler = wrapToolWithTimeout("list_jobs", secureHandler, {
46416
46553
  timeoutMs,
46417
- logger: logger54
46554
+ logger: logger55
46418
46555
  });
46419
46556
  server.registerTool(
46420
46557
  "list_jobs",
46421
46558
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("list_jobs") },
46422
46559
  toSdkCallback(wrappedHandler)
46423
46560
  );
46424
- logger54.info("Registered list_jobs tool");
46561
+ logger55.info("Registered list_jobs tool");
46425
46562
  }
46426
46563
 
46427
46564
  // src/mcp/tools/cancel-job-tool.ts
@@ -46478,7 +46615,7 @@ function cancelJobHandler(args) {
46478
46615
  return Promise.resolve(toolSuccess(JSON.stringify(response, null, 2)));
46479
46616
  }
46480
46617
  function registerCancelJobTool(server, deps) {
46481
- const logger54 = deps.logger ?? createLogger({ tool: "cancel_job" });
46618
+ const logger55 = deps.logger ?? createLogger({ tool: "cancel_job" });
46482
46619
  const toolSchema = {
46483
46620
  jobId: z99.string().min(1).max(128).describe("Job ID returned by orchestrate / run_workflow / consensus_vote in async mode"),
46484
46621
  reason: z99.string().max(1e3).optional().describe('Optional human-readable note (e.g. "user clicked cancel").')
@@ -46487,28 +46624,28 @@ function registerCancelJobTool(server, deps) {
46487
46624
  const secureHandler = createSecureHandler(cancelJobHandler, {
46488
46625
  toolName: "cancel_job",
46489
46626
  rateLimiter: deps.rateLimiter,
46490
- logger: logger54
46627
+ logger: logger55
46491
46628
  });
46492
46629
  const timeoutMs = getToolTimeout("cancel_job", deps.security);
46493
46630
  const wrappedHandler = wrapToolWithTimeout("cancel_job", secureHandler, {
46494
46631
  timeoutMs,
46495
- logger: logger54
46632
+ logger: logger55
46496
46633
  });
46497
46634
  server.registerTool(
46498
46635
  "cancel_job",
46499
46636
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("cancel_job") },
46500
46637
  toSdkCallback(wrappedHandler)
46501
46638
  );
46502
- logger54.info("Registered cancel_job tool");
46639
+ logger55.info("Registered cancel_job tool");
46503
46640
  }
46504
46641
 
46505
46642
  // src/mcp/tools/ci-health-check-tool.ts
46506
46643
  import { z as z101 } from "zod";
46507
46644
 
46508
46645
  // src/mcp/tools/ci-health-log.ts
46509
- import { appendFileSync as appendFileSync4, existsSync as existsSync12, readFileSync as readFileSync10, writeFileSync as writeFileSync3 } from "fs";
46646
+ import { appendFileSync as appendFileSync4, existsSync as existsSync12, readFileSync as readFileSync10, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
46510
46647
  import { z as z100 } from "zod";
46511
- var logger42 = createLogger({ component: "ci-health-log" });
46648
+ var logger43 = createLogger({ component: "ci-health-log" });
46512
46649
  var CiHealthEventSchema = z100.object({
46513
46650
  v: z100.literal(1),
46514
46651
  ts: z100.iso.datetime(),
@@ -46525,6 +46662,49 @@ var CiHealthEventSchema = z100.object({
46525
46662
  function logFilePath() {
46526
46663
  return nexusDataPathEnsure("ci-health", "events.jsonl");
46527
46664
  }
46665
+ var DEFAULT_CI_HEALTH_MAX_BYTES = 2097152;
46666
+ function maxLogBytes() {
46667
+ const raw = process.env["NEXUS_CI_HEALTH_MAX_BYTES"];
46668
+ if (raw === void 0 || raw === "") return DEFAULT_CI_HEALTH_MAX_BYTES;
46669
+ const n = Number.parseInt(raw, 10);
46670
+ return Number.isFinite(n) && n > 0 ? n : DEFAULT_CI_HEALTH_MAX_BYTES;
46671
+ }
46672
+ function capLogSize(path14) {
46673
+ const max = maxLogBytes();
46674
+ let size;
46675
+ try {
46676
+ size = statSync3(path14).size;
46677
+ } catch {
46678
+ return;
46679
+ }
46680
+ if (size <= max) return;
46681
+ try {
46682
+ const lines = readFileSync10(path14, "utf-8").split("\n").filter((l) => l !== "");
46683
+ const kept = [];
46684
+ let bytes = 0;
46685
+ for (let i = lines.length - 1; i >= 0; i--) {
46686
+ const line = lines[i];
46687
+ const lineBytes = Buffer.byteLength(`${line}
46688
+ `, "utf-8");
46689
+ if (kept.length > 0 && bytes + lineBytes > max) break;
46690
+ kept.push(line);
46691
+ bytes += lineBytes;
46692
+ }
46693
+ kept.reverse();
46694
+ writeFileSync3(path14, kept.length > 0 ? `${kept.join("\n")}
46695
+ ` : "");
46696
+ logger43.warn("ci-health log exceeded size cap \u2014 dropped oldest events", {
46697
+ maxBytes: max,
46698
+ previousBytes: size,
46699
+ droppedEvents: lines.length - kept.length,
46700
+ keptEvents: kept.length
46701
+ });
46702
+ } catch (err2) {
46703
+ logger43.warn("Failed to cap ci-health log size", {
46704
+ error: err2 instanceof Error ? err2.message : String(err2)
46705
+ });
46706
+ }
46707
+ }
46528
46708
  function appendCiHealthEvent(event) {
46529
46709
  const record = {
46530
46710
  v: 1,
@@ -46532,10 +46712,12 @@ function appendCiHealthEvent(event) {
46532
46712
  ...event
46533
46713
  };
46534
46714
  try {
46535
- appendFileSync4(logFilePath(), `${JSON.stringify(record)}
46715
+ const path14 = logFilePath();
46716
+ appendFileSync4(path14, `${JSON.stringify(record)}
46536
46717
  `);
46718
+ capLogSize(path14);
46537
46719
  } catch (err2) {
46538
- logger42.warn("Failed to append ci-health event", {
46720
+ logger43.warn("Failed to append ci-health event", {
46539
46721
  error: err2 instanceof Error ? err2.message : String(err2)
46540
46722
  });
46541
46723
  }
@@ -46573,7 +46755,7 @@ function mapStatusPageStatus(raw) {
46573
46755
  if (raw === "partial_outage" || raw === "major_outage") return "outage";
46574
46756
  return "unknown";
46575
46757
  }
46576
- async function checkGithubStatus(logger54) {
46758
+ async function checkGithubStatus(logger55) {
46577
46759
  try {
46578
46760
  const res = await fetch(STATUS_PAGE_URL, {
46579
46761
  // 5s budget — status page is fast, hangs here are themselves a degraded signal.
@@ -46601,7 +46783,7 @@ async function checkGithubStatus(logger54) {
46601
46783
  evidence: `GitHub Actions component reports: ${actions.status}`
46602
46784
  };
46603
46785
  } catch (err2) {
46604
- logger54.warn("Status page fetch failed", {
46786
+ logger55.warn("Status page fetch failed", {
46605
46787
  error: err2 instanceof Error ? err2.message : String(err2)
46606
46788
  });
46607
46789
  return {
@@ -46614,7 +46796,7 @@ async function checkGithubStatus(logger54) {
46614
46796
  function countRecentRuns(runs, sinceMs) {
46615
46797
  return runs.filter((r) => r.created_at !== void 0 && Date.parse(r.created_at) >= sinceMs).length;
46616
46798
  }
46617
- async function checkRepoActivity(repo, windowMinutes, logger54) {
46799
+ async function checkRepoActivity(repo, windowMinutes, logger55) {
46618
46800
  const sinceMs = Date.now() - windowMinutes * 6e4;
46619
46801
  try {
46620
46802
  const res = await fetch(`https://api.github.com/repos/${repo}/actions/runs?per_page=30`, {
@@ -46643,7 +46825,7 @@ async function checkRepoActivity(repo, windowMinutes, logger54) {
46643
46825
  evidence: `${String(recentCount)} workflow run(s) in last ${String(windowMinutes)} min on ${repo}`
46644
46826
  };
46645
46827
  } catch (err2) {
46646
- logger54.warn("Repo activity check failed", {
46828
+ logger55.warn("Repo activity check failed", {
46647
46829
  repo,
46648
46830
  error: err2 instanceof Error ? err2.message : String(err2)
46649
46831
  });
@@ -46669,7 +46851,7 @@ function combineSignals(signals) {
46669
46851
  }
46670
46852
  return worst;
46671
46853
  }
46672
- async function ciHealthCheckHandler(args, logger54) {
46854
+ async function ciHealthCheckHandler(args, logger55) {
46673
46855
  const parsed = CiHealthCheckInputSchema.safeParse(args);
46674
46856
  if (!parsed.success) {
46675
46857
  return toolStructuredError({
@@ -46679,9 +46861,9 @@ async function ciHealthCheckHandler(args, logger54) {
46679
46861
  }
46680
46862
  const { repo, activityWindowMinutes } = parsed.data;
46681
46863
  const signals = [];
46682
- signals.push(await checkGithubStatus(logger54));
46864
+ signals.push(await checkGithubStatus(logger55));
46683
46865
  if (repo !== void 0) {
46684
- signals.push(await checkRepoActivity(repo, activityWindowMinutes, logger54));
46866
+ signals.push(await checkRepoActivity(repo, activityWindowMinutes, logger55));
46685
46867
  }
46686
46868
  const response = {
46687
46869
  status: combineSignals(signals),
@@ -46695,20 +46877,20 @@ async function ciHealthCheckHandler(args, logger54) {
46695
46877
  }
46696
46878
  var DESCRIPTION = "Check CI infrastructure health before triggering / polling runs (#3076). Returns { status: healthy|degraded|outage|unknown, signals } composing GitHub status-page state + the configured repo's recent workflow-runs activity. Use BEFORE a long auto-merge wait to skip the wedge cycle when CI is broken org-wide. Read-only, idempotent, no network state mutated.";
46697
46879
  function registerCiHealthCheckTool(server, deps) {
46698
- const logger54 = deps.logger ?? createLogger({ tool: "ci_health_check" });
46880
+ const logger55 = deps.logger ?? createLogger({ tool: "ci_health_check" });
46699
46881
  const toolSchema = {
46700
46882
  repo: z101.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/, "Must be owner/repo form").optional().describe("GitHub repo (owner/repo) to check for recent CI activity. Optional."),
46701
46883
  activityWindowMinutes: z101.number().int().min(5).max(180).optional().describe("Recent-runs lookback window in minutes (5-180; default 30).")
46702
46884
  };
46703
- const secureHandler = createSecureHandler((args) => ciHealthCheckHandler(args, logger54), {
46885
+ const secureHandler = createSecureHandler((args) => ciHealthCheckHandler(args, logger55), {
46704
46886
  toolName: "ci_health_check",
46705
46887
  rateLimiter: deps.rateLimiter,
46706
- logger: logger54
46888
+ logger: logger55
46707
46889
  });
46708
46890
  const timeoutMs = getToolTimeout("ci_health_check", deps.security);
46709
46891
  const wrappedHandler = wrapToolWithTimeout("ci_health_check", secureHandler, {
46710
46892
  timeoutMs,
46711
- logger: logger54
46893
+ logger: logger55
46712
46894
  });
46713
46895
  server.registerTool(
46714
46896
  "ci_health_check",
@@ -46719,7 +46901,7 @@ function registerCiHealthCheckTool(server, deps) {
46719
46901
  },
46720
46902
  toSdkCallback(wrappedHandler)
46721
46903
  );
46722
- logger54.info("Registered ci_health_check tool");
46904
+ logger55.info("Registered ci_health_check tool");
46723
46905
  }
46724
46906
 
46725
46907
  // src/mcp/tools/verify-audit-chain-tool.ts
@@ -46731,7 +46913,7 @@ var VerifyAuditChainInputSchema = z102.object({
46731
46913
  "Filesystem path to the FileAuditStorage log directory. Tool reads all `audit-*.jsonl` files in lexicographic order and verifies the combined chain."
46732
46914
  )
46733
46915
  });
46734
- async function loadAuditEvents(dir, logger54) {
46916
+ async function loadAuditEvents(dir, logger55) {
46735
46917
  const entries = await fs12.readdir(dir);
46736
46918
  const auditFiles = entries.filter((name) => name.startsWith("audit-") && name.endsWith(".jsonl")).sort();
46737
46919
  const events = [];
@@ -46742,7 +46924,7 @@ async function loadAuditEvents(dir, logger54) {
46742
46924
  content = await fs12.readFile(fullPath, "utf-8");
46743
46925
  } catch (cause) {
46744
46926
  const msg = cause instanceof Error ? cause.message : String(cause);
46745
- logger54.warn("Skipping unreadable audit log file", { filename, error: msg });
46927
+ logger55.warn("Skipping unreadable audit log file", { filename, error: msg });
46746
46928
  continue;
46747
46929
  }
46748
46930
  for (const line of content.split("\n")) {
@@ -46753,14 +46935,14 @@ async function loadAuditEvents(dir, logger54) {
46753
46935
  if (validated.success) {
46754
46936
  events.push(validated.data);
46755
46937
  } else {
46756
- logger54.warn("Skipping malformed audit event", {
46938
+ logger55.warn("Skipping malformed audit event", {
46757
46939
  filename,
46758
46940
  error: validated.error.message
46759
46941
  });
46760
46942
  }
46761
46943
  } catch (cause) {
46762
46944
  const msg = cause instanceof Error ? cause.message : String(cause);
46763
- logger54.warn("Skipping unparseable audit event", { filename, error: msg });
46945
+ logger55.warn("Skipping unparseable audit event", { filename, error: msg });
46764
46946
  }
46765
46947
  }
46766
46948
  }
@@ -46802,7 +46984,7 @@ async function handler2(args, ctx) {
46802
46984
  return toolSuccess(JSON.stringify(response, null, 2));
46803
46985
  }
46804
46986
  function registerVerifyAuditChainTool(server, deps) {
46805
- const logger54 = deps.logger ?? createLogger({ tool: "verify_audit_chain" });
46987
+ const logger55 = deps.logger ?? createLogger({ tool: "verify_audit_chain" });
46806
46988
  const toolSchema = {
46807
46989
  logDir: z102.string().min(1).max(512).describe(
46808
46990
  "Filesystem path to the FileAuditStorage log directory. Tool reads all `audit-*.jsonl` files and verifies the combined hash chain."
@@ -46812,19 +46994,19 @@ function registerVerifyAuditChainTool(server, deps) {
46812
46994
  const secureHandler = createSecureHandler(handler2, {
46813
46995
  toolName: "verify_audit_chain",
46814
46996
  rateLimiter: deps.rateLimiter,
46815
- logger: logger54
46997
+ logger: logger55
46816
46998
  });
46817
46999
  const timeoutMs = getToolTimeout("verify_audit_chain", deps.security);
46818
47000
  const wrappedHandler = wrapToolWithTimeout("verify_audit_chain", secureHandler, {
46819
47001
  timeoutMs,
46820
- logger: logger54
47002
+ logger: logger55
46821
47003
  });
46822
47004
  server.registerTool(
46823
47005
  "verify_audit_chain",
46824
47006
  { description: description2, inputSchema: toolSchema, annotations: getToolAnnotations("verify_audit_chain") },
46825
47007
  toSdkCallback(wrappedHandler)
46826
47008
  );
46827
- logger54.info("Registered verify_audit_chain tool");
47009
+ logger55.info("Registered verify_audit_chain tool");
46828
47010
  }
46829
47011
 
46830
47012
  // src/mcp/tools/pipeline-tool.ts
@@ -46903,7 +47085,7 @@ function selectStageRegistry(template, task, agentStages) {
46903
47085
  return createDevStageRegistry(agentStages);
46904
47086
  }
46905
47087
  var RUN_PIPELINE_DESCRIPTION = `Single unified entry point for all pipeline templates (${listTemplateIds().join("/")}). Auto-detects template from task content or accepts an explicit override.`;
46906
- async function runPipelineHandler(args, logger54) {
47088
+ async function runPipelineHandler(args, logger55) {
46907
47089
  const parsed = PipelineInputSchema.safeParse(args);
46908
47090
  if (!parsed.success) {
46909
47091
  return toolStructuredError({
@@ -46913,7 +47095,7 @@ async function runPipelineHandler(args, logger54) {
46913
47095
  }
46914
47096
  const input = parsed.data;
46915
47097
  if (input.simulateVotes) {
46916
- warnIfSimulatedOutsideTests("run_pipeline", logger54);
47098
+ warnIfSimulatedOutsideTests("run_pipeline", logger55);
46917
47099
  }
46918
47100
  try {
46919
47101
  const task = await resolveTask(input.task, input.specFile);
@@ -46937,14 +47119,14 @@ async function runPipelineHandler(args, logger54) {
46937
47119
  }
46938
47120
  }
46939
47121
  function registerPipelineTool(server, deps) {
46940
- const logger54 = deps.logger ?? createLogger({ tool: "run_pipeline" });
46941
- const secureHandler = createSecureHandler((args) => runPipelineHandler(args, logger54), {
47122
+ const logger55 = deps.logger ?? createLogger({ tool: "run_pipeline" });
47123
+ const secureHandler = createSecureHandler((args) => runPipelineHandler(args, logger55), {
46942
47124
  toolName: "run_pipeline",
46943
47125
  rateLimiter: deps.rateLimiter,
46944
- logger: logger54
47126
+ logger: logger55
46945
47127
  });
46946
47128
  const timeoutMs = getToolTimeout("run_pipeline", deps.security);
46947
- const wrapped = wrapToolWithTimeout("run_pipeline", secureHandler, { timeoutMs, logger: logger54 });
47129
+ const wrapped = wrapToolWithTimeout("run_pipeline", secureHandler, { timeoutMs, logger: logger55 });
46948
47130
  server.registerTool(
46949
47131
  "run_pipeline",
46950
47132
  {
@@ -46954,7 +47136,7 @@ function registerPipelineTool(server, deps) {
46954
47136
  },
46955
47137
  toSdkCallback(wrapped)
46956
47138
  );
46957
- logger54.info("Registered run_pipeline tool");
47139
+ logger55.info("Registered run_pipeline tool");
46958
47140
  }
46959
47141
 
46960
47142
  // src/mcp/tools/supply-chain-tradeoff-panel.ts
@@ -47209,17 +47391,17 @@ async function tradeoffPanelHandler(args, ctx) {
47209
47391
  }
47210
47392
  }
47211
47393
  function registerSupplyChainTradeoffPanelTool(server, deps) {
47212
- const logger54 = deps.logger ?? createLogger({ tool: "supply_chain_tradeoff_panel" });
47394
+ const logger55 = deps.logger ?? createLogger({ tool: "supply_chain_tradeoff_panel" });
47213
47395
  const description2 = "Run a structured per-axis tradeoff vote on an engineering proposal (#2294). Default axes: build_time_determinism / supply_chain_risk / update_cadence. Voters answer EACH axis independently; aggregator surfaces per-axis verdicts so legitimate tradeoffs are not masked by a single approve/reject.";
47214
47396
  const secureHandler = createSecureHandler(tradeoffPanelHandler, {
47215
47397
  toolName: "supply_chain_tradeoff_panel",
47216
47398
  rateLimiter: deps.rateLimiter,
47217
- logger: logger54
47399
+ logger: logger55
47218
47400
  });
47219
47401
  const timeoutMs = getToolTimeout("supply_chain_tradeoff_panel", deps.security);
47220
47402
  const wrappedHandler = wrapToolWithTimeout("supply_chain_tradeoff_panel", secureHandler, {
47221
47403
  timeoutMs,
47222
- logger: logger54
47404
+ logger: logger55
47223
47405
  });
47224
47406
  server.registerTool(
47225
47407
  "supply_chain_tradeoff_panel",
@@ -47230,7 +47412,7 @@ function registerSupplyChainTradeoffPanelTool(server, deps) {
47230
47412
  },
47231
47413
  toSdkCallback(wrappedHandler)
47232
47414
  );
47233
- logger54.info("Registered supply_chain_tradeoff_panel tool");
47415
+ logger55.info("Registered supply_chain_tradeoff_panel tool");
47234
47416
  }
47235
47417
 
47236
47418
  // src/mcp/tools/tool-annotations.ts
@@ -47920,13 +48102,13 @@ var REGISTERED_TOOL_NAMES = [
47920
48102
  "improvement_review"
47921
48103
  ];
47922
48104
  function registerTools(server, options) {
47923
- const logger54 = options?.logger ?? createMcpLogger({ component: "tools" });
47924
- const rateLimiter = options?.rateLimiter ?? createDefaultRateLimiter("mcp-tools", logger54);
47925
- logger54.info("Tool registration infrastructure initialized");
48105
+ const logger55 = options?.logger ?? createMcpLogger({ component: "tools" });
48106
+ const rateLimiter = options?.rateLimiter ?? createDefaultRateLimiter("mcp-tools", logger55);
48107
+ logger55.info("Tool registration infrastructure initialized");
47926
48108
  void server;
47927
48109
  return {
47928
48110
  tools: [...REGISTERED_TOOL_NAMES],
47929
- logger: logger54,
48111
+ logger: logger55,
47930
48112
  rateLimiter
47931
48113
  };
47932
48114
  }
@@ -47939,32 +48121,32 @@ var TIER_NAMES = {
47939
48121
  };
47940
48122
  function createGateway(config = {}) {
47941
48123
  const enabled = config.enabled !== false;
47942
- const logger54 = config.logger ?? createLogger({ component: "gateway" });
48124
+ const logger55 = config.logger ?? createLogger({ component: "gateway" });
47943
48125
  const overrides = config.tierOverrides;
47944
48126
  return {
47945
48127
  enabled,
47946
48128
  wrapTool(toolName, handler3) {
47947
48129
  if (!enabled) return handler3;
47948
- return createGatewayHandler(toolName, handler3, logger54, overrides);
48130
+ return createGatewayHandler(toolName, handler3, logger55, overrides);
47949
48131
  }
47950
48132
  };
47951
48133
  }
47952
- function createGatewayHandler(toolName, handler3, logger54, overrides) {
48134
+ function createGatewayHandler(toolName, handler3, logger55, overrides) {
47953
48135
  return async (args) => {
47954
48136
  const params = asRecord2(args);
47955
48137
  const tier = classifyRequestTier(toolName, params, overrides);
47956
48138
  const tierName = TIER_NAMES[tier];
47957
48139
  const startMs = getTimeProvider().now();
47958
- logger54.debug("Gateway dispatch", { tool: toolName, tier, tierName });
48140
+ logger55.debug("Gateway dispatch", { tool: toolName, tier, tierName });
47959
48141
  try {
47960
48142
  const result = await handler3(args);
47961
48143
  const durationMs = getTimeProvider().now() - startMs;
47962
48144
  const success = result.isError !== true;
47963
48145
  const entry = { tool: toolName, tier, tierName, durationMs, success };
47964
48146
  if (success) {
47965
- logger54.info("Gateway completed", { ...entry });
48147
+ logger55.info("Gateway completed", { ...entry });
47966
48148
  } else {
47967
- logger54.warn("Gateway completed with error", { ...entry });
48149
+ logger55.warn("Gateway completed with error", { ...entry });
47968
48150
  }
47969
48151
  return result;
47970
48152
  } catch (error) {
@@ -47976,7 +48158,7 @@ function createGatewayHandler(toolName, handler3, logger54, overrides) {
47976
48158
  durationMs,
47977
48159
  success: false
47978
48160
  };
47979
- logger54.error("Gateway handler threw", error instanceof Error ? error : void 0, {
48161
+ logger55.error("Gateway handler threw", error instanceof Error ? error : void 0, {
47980
48162
  ...entry
47981
48163
  });
47982
48164
  throw error;
@@ -49111,7 +49293,7 @@ function analyzeTools(tools, config = {}) {
49111
49293
  }
49112
49294
 
49113
49295
  // src/cli-adapters/parsers/gemini-parser.ts
49114
- var logger43 = createLogger({ component: "gemini-parser" });
49296
+ var logger44 = createLogger({ component: "gemini-parser" });
49115
49297
  var GeminiResponseParser = class {
49116
49298
  name = "gemini-parser";
49117
49299
  supportedVersionRange = ">=0.20.0 <1.0.0";
@@ -49126,7 +49308,7 @@ var GeminiResponseParser = class {
49126
49308
  }
49127
49309
  return data;
49128
49310
  } catch {
49129
- logger43.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49311
+ logger44.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49130
49312
  return null;
49131
49313
  }
49132
49314
  }
@@ -49144,7 +49326,7 @@ var GeminiResponseParser = class {
49144
49326
  }
49145
49327
  return null;
49146
49328
  } catch {
49147
- logger43.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49329
+ logger44.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49148
49330
  return null;
49149
49331
  }
49150
49332
  }
@@ -49163,7 +49345,7 @@ var GeminiResponseParser = class {
49163
49345
  if (models === null) return null;
49164
49346
  return this.aggregateModelTokens(models);
49165
49347
  } catch {
49166
- logger43.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49348
+ logger44.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49167
49349
  return null;
49168
49350
  }
49169
49351
  }
@@ -49210,7 +49392,7 @@ var GeminiResponseParser = class {
49210
49392
  }
49211
49393
  return null;
49212
49394
  } catch {
49213
- logger43.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49395
+ logger44.debug("Skipped malformed output line", { snippet: raw.slice(0, 100) });
49214
49396
  return null;
49215
49397
  }
49216
49398
  }
@@ -49241,7 +49423,7 @@ var AgreementCascadeConfigSchema = z107.object({
49241
49423
  });
49242
49424
 
49243
49425
  // src/cli-adapters/agreement-cascade-router.ts
49244
- var logger44 = createLogger({ component: "agreement-cascade-router" });
49426
+ var logger45 = createLogger({ component: "agreement-cascade-router" });
49245
49427
 
49246
49428
  // src/cli-adapters/task-classifier.ts
49247
49429
  import { z as z108 } from "zod";
@@ -49266,7 +49448,7 @@ var ResponseCacheConfigSchema = z109.object({
49266
49448
 
49267
49449
  // src/cli-adapters/response-cache-utils.ts
49268
49450
  import { createHash as createHash4 } from "crypto";
49269
- var logger45 = createLogger({ component: "ResponseCacheUtils" });
49451
+ var logger46 = createLogger({ component: "ResponseCacheUtils" });
49270
49452
 
49271
49453
  // src/cli-adapters/unified-routing-types.ts
49272
49454
  import { z as z110 } from "zod";
@@ -49365,7 +49547,7 @@ var FeedbackCollectorConfigSchema = z111.object({
49365
49547
  });
49366
49548
 
49367
49549
  // src/learning/outcome-feedback-helpers.ts
49368
- import { randomUUID as randomUUID12 } from "crypto";
49550
+ import { randomUUID as randomUUID11 } from "crypto";
49369
49551
  function countOutcomesByClass(outcomes) {
49370
49552
  const counts = {
49371
49553
  success: 0,
@@ -49418,7 +49600,7 @@ function generateRewardExplanation(outcome, reward) {
49418
49600
  }
49419
49601
  function createRoutingDecision(params) {
49420
49602
  return {
49421
- id: randomUUID12(),
49603
+ id: randomUUID11(),
49422
49604
  timestamp: getTimeProvider().nowIso(),
49423
49605
  ...params
49424
49606
  };
@@ -49431,7 +49613,7 @@ function createTaskOutcome(params) {
49431
49613
  }
49432
49614
 
49433
49615
  // src/learning/outcome-feedback.ts
49434
- var logger46 = createLogger({ component: "OutcomeFeedback" });
49616
+ var logger47 = createLogger({ component: "OutcomeFeedback" });
49435
49617
  var OutcomeFeedbackCollector = class {
49436
49618
  config;
49437
49619
  pendingDecisions = /* @__PURE__ */ new Map();
@@ -49446,7 +49628,7 @@ var OutcomeFeedbackCollector = class {
49446
49628
  ...DEFAULT_FEEDBACK_COLLECTOR_CONFIG,
49447
49629
  ...config
49448
49630
  });
49449
- logger46.info("OutcomeFeedbackCollector initialized", {
49631
+ logger47.info("OutcomeFeedbackCollector initialized", {
49450
49632
  maxPendingDecisions: this.config.maxPendingDecisions,
49451
49633
  enableAutoReward: this.config.enableAutoReward
49452
49634
  });
@@ -49456,14 +49638,14 @@ var OutcomeFeedbackCollector = class {
49456
49638
  */
49457
49639
  registerLinUCBBandit(bandit) {
49458
49640
  this.linucbBandit = bandit;
49459
- logger46.debug("LinUCB bandit registered for feedback");
49641
+ logger47.debug("LinUCB bandit registered for feedback");
49460
49642
  }
49461
49643
  /**
49462
49644
  * Register PreferenceRouter for direct feedback.
49463
49645
  */
49464
49646
  registerPreferenceRouter(router) {
49465
49647
  this.preferenceRouter = router;
49466
- logger46.debug("PreferenceRouter registered for feedback");
49648
+ logger47.debug("PreferenceRouter registered for feedback");
49467
49649
  }
49468
49650
  /**
49469
49651
  * Subscribe to outcome processed events.
@@ -49487,7 +49669,7 @@ var OutcomeFeedbackCollector = class {
49487
49669
  this.pendingDecisions.set(decision.traceId, decision);
49488
49670
  this.decisionHistory.push(decision);
49489
49671
  this.trimHistory();
49490
- logger46.debug("Routing decision recorded", {
49672
+ logger47.debug("Routing decision recorded", {
49491
49673
  id: decision.id,
49492
49674
  traceId: decision.traceId,
49493
49675
  routerType: decision.routerType,
@@ -49504,7 +49686,7 @@ var OutcomeFeedbackCollector = class {
49504
49686
  this.feedbackToRouters(decision, outcome, reward);
49505
49687
  this.notifyCallbacks(decision, outcome, reward);
49506
49688
  }
49507
- logger46.debug("Outcome recorded", {
49689
+ logger47.debug("Outcome recorded", {
49508
49690
  routingDecisionId: outcome.routingDecisionId,
49509
49691
  outcomeClass: outcome.outcomeClass,
49510
49692
  qualityScore: outcome.qualityScore
@@ -49513,7 +49695,7 @@ var OutcomeFeedbackCollector = class {
49513
49695
  processOutcome(traceId, partialOutcome) {
49514
49696
  const decision = this.pendingDecisions.get(traceId);
49515
49697
  if (decision === void 0) {
49516
- logger46.warn("No pending decision found for trace", { traceId });
49698
+ logger47.warn("No pending decision found for trace", { traceId });
49517
49699
  return;
49518
49700
  }
49519
49701
  const outcome = {
@@ -49576,7 +49758,7 @@ var OutcomeFeedbackCollector = class {
49576
49758
  if (decisionTime < cutoff) {
49577
49759
  this.pendingDecisions.delete(traceId);
49578
49760
  cleared++;
49579
- logger46.debug("Expired pending decision cleared", {
49761
+ logger47.debug("Expired pending decision cleared", {
49580
49762
  id: decision.id,
49581
49763
  traceId,
49582
49764
  age: now - decisionTime
@@ -49598,7 +49780,7 @@ var OutcomeFeedbackCollector = class {
49598
49780
  this.pendingDecisions.clear();
49599
49781
  this.outcomes.length = 0;
49600
49782
  this.decisionHistory.length = 0;
49601
- logger46.info("OutcomeFeedbackCollector reset");
49783
+ logger47.info("OutcomeFeedbackCollector reset");
49602
49784
  }
49603
49785
  feedbackToRouters(decision, outcome, reward) {
49604
49786
  if (!this.config.enableAutoReward) return;
@@ -49609,7 +49791,7 @@ var OutcomeFeedbackCollector = class {
49609
49791
  if (decision.routerType !== "linucb" || this.linucbBandit === void 0) return;
49610
49792
  if (decision.armIndex === void 0 || decision.banditContext === void 0) return;
49611
49793
  this.linucbBandit.update(decision.armIndex, decision.banditContext, reward.reward);
49612
- logger46.debug("LinUCB bandit updated", {
49794
+ logger47.debug("LinUCB bandit updated", {
49613
49795
  armIndex: decision.armIndex,
49614
49796
  reward: reward.reward
49615
49797
  });
@@ -49623,7 +49805,7 @@ var OutcomeFeedbackCollector = class {
49623
49805
  decision.selectedTier === "strong" ? outcome.qualityScore : void 0,
49624
49806
  decision.selectedTier === "weak" ? outcome.qualityScore : void 0
49625
49807
  );
49626
- logger46.debug("PreferenceRouter updated", {
49808
+ logger47.debug("PreferenceRouter updated", {
49627
49809
  strongModelPreferred,
49628
49810
  qualityScore: outcome.qualityScore
49629
49811
  });
@@ -49634,7 +49816,7 @@ var OutcomeFeedbackCollector = class {
49634
49816
  callback(decision, outcome, reward);
49635
49817
  } catch (err2) {
49636
49818
  const error = err2 instanceof Error ? err2 : new Error(String(err2));
49637
- logger46.error("Callback error", error);
49819
+ logger47.error("Callback error", error);
49638
49820
  }
49639
49821
  }
49640
49822
  }
@@ -49674,7 +49856,7 @@ var DEFAULT_FEEDBACK_INTEGRATION_CONFIG = {
49674
49856
  };
49675
49857
 
49676
49858
  // src/learning/feedback-integration.ts
49677
- import { randomUUID as randomUUID13 } from "crypto";
49859
+ import { randomUUID as randomUUID12 } from "crypto";
49678
49860
  var STEP_QUALITY_SCORING = {
49679
49861
  /** Base score for successful steps. */
49680
49862
  successBase: 0.8,
@@ -49750,8 +49932,8 @@ var FeedbackIntegration = class {
49750
49932
  });
49751
49933
  }
49752
49934
  recordRoutingDecision(decision, traceId) {
49753
- const id = randomUUID13();
49754
- const trace = traceId ?? randomUUID13();
49935
+ const id = randomUUID12();
49936
+ const trace = traceId ?? randomUUID12();
49755
49937
  const now = getTimeProvider().now();
49756
49938
  this.evictStaleEntriesThrottled(now);
49757
49939
  if (this.decisionMap.size >= MAX_DECISION_MAP_SIZE) {
@@ -49824,7 +50006,7 @@ var FeedbackIntegration = class {
49824
50006
  } = params;
49825
50007
  const outcomeClass = this.determineOutcomeClass(success, qualityScore);
49826
50008
  const completionRatio = success ? 1 : qualityScore / this.config.successQualityThreshold;
49827
- const trace = traceId ?? randomUUID13();
50009
+ const trace = traceId ?? randomUUID12();
49828
50010
  const outcome = {
49829
50011
  routingDecisionId,
49830
50012
  timestamp: getTimeProvider().nowIso(),
@@ -50427,7 +50609,7 @@ import { execFile as execFile4 } from "child_process";
50427
50609
  import { promisify as promisify4 } from "util";
50428
50610
  import { resolve as resolve17, normalize as normalize2, sep as sep10 } from "path";
50429
50611
  var execFileAsync4 = promisify4(execFile4);
50430
- var logger47 = createLogger({ component: "sandbox-executor" });
50612
+ var logger48 = createLogger({ component: "sandbox-executor" });
50431
50613
  function parseExecError(error) {
50432
50614
  const execError = error;
50433
50615
  const isTimeout = execError.killed === true;
@@ -50527,7 +50709,7 @@ var PolicySandboxExecutor = class {
50527
50709
  const baseEnv = createMinimalEnv(options.cwd);
50528
50710
  const sanitized = sanitizeEnvironment(process.env, policy.allowedEnvVars, options.env);
50529
50711
  if (sanitized.blocked.length > 0 && this.config.logViolations) {
50530
- logger47.debug("Blocked environment variables", { blocked: sanitized.blocked });
50712
+ logger48.debug("Blocked environment variables", { blocked: sanitized.blocked });
50531
50713
  }
50532
50714
  return { ...baseEnv, ...sanitized.env };
50533
50715
  }
@@ -50549,7 +50731,7 @@ var PolicySandboxExecutor = class {
50549
50731
  * Creates a denied result when policy prevents execution.
50550
50732
  */
50551
50733
  createDeniedResult(command, _args, evaluation, startTime) {
50552
- logger47.warn("Sandbox policy denied execution", {
50734
+ logger48.warn("Sandbox policy denied execution", {
50553
50735
  command,
50554
50736
  policy: evaluation.policyId,
50555
50737
  reason: evaluation.reason
@@ -50570,7 +50752,7 @@ var PolicySandboxExecutor = class {
50570
50752
  */
50571
50753
  createSuccessResult(command, _args, result, evaluation, startTime) {
50572
50754
  const durationMs = getTimeProvider().now() - startTime;
50573
- logger47.debug("Sandbox execution succeeded", { command, durationMs });
50755
+ logger48.debug("Sandbox execution succeeded", { command, durationMs });
50574
50756
  return {
50575
50757
  success: result.exitCode === 0,
50576
50758
  exitCode: result.exitCode,
@@ -50610,9 +50792,9 @@ var PolicySandboxExecutor = class {
50610
50792
  */
50611
50793
  logExecutionError(command, execError, durationMs) {
50612
50794
  if (execError.isTimeout) {
50613
- logger47.warn("Sandbox execution timed out", { command, durationMs });
50795
+ logger48.warn("Sandbox execution timed out", { command, durationMs });
50614
50796
  } else {
50615
- logger47.debug("Sandbox execution failed", {
50797
+ logger48.debug("Sandbox execution failed", {
50616
50798
  command,
50617
50799
  exitCode: execError.exitCode,
50618
50800
  durationMs
@@ -50648,7 +50830,7 @@ var PolicySandboxExecutor = class {
50648
50830
  */
50649
50831
  logViolations(command, evaluation) {
50650
50832
  for (const violation of evaluation.violations) {
50651
- logger47.warn("Sandbox policy violation", {
50833
+ logger48.warn("Sandbox policy violation", {
50652
50834
  command,
50653
50835
  type: violation.type,
50654
50836
  denied: violation.denied,
@@ -50663,7 +50845,7 @@ function createSandboxExecutor(config) {
50663
50845
  }
50664
50846
 
50665
50847
  // src/security/sandbox/sandbox-factory.ts
50666
- var logger48 = createLogger({ component: "sandbox-factory" });
50848
+ var logger49 = createLogger({ component: "sandbox-factory" });
50667
50849
  var DEFAULT_OPTIONS3 = {
50668
50850
  mode: "policy",
50669
50851
  fallbackToPolicy: true
@@ -50685,7 +50867,7 @@ function createSandbox(options) {
50685
50867
  }
50686
50868
  }
50687
50869
  function createNoneMode() {
50688
- logger48.warn('Creating sandbox in "none" mode - NO ISOLATION');
50870
+ logger49.warn('Creating sandbox in "none" mode - NO ISOLATION');
50689
50871
  const executor = new PolicySandboxExecutor({
50690
50872
  defaultPolicy: STANDARD_POLICY,
50691
50873
  enforce: false,
@@ -50699,7 +50881,7 @@ function createNoneMode() {
50699
50881
  };
50700
50882
  }
50701
50883
  function createPolicyMode(config) {
50702
- logger48.info('Creating sandbox in "policy" mode');
50884
+ logger49.info('Creating sandbox in "policy" mode');
50703
50885
  const executor = new PolicySandboxExecutor(config);
50704
50886
  return {
50705
50887
  executor,
@@ -50708,7 +50890,7 @@ function createPolicyMode(config) {
50708
50890
  };
50709
50891
  }
50710
50892
  function createDeprecatedModeFallback(requestedMode, policyConfig) {
50711
- logger48.warn(`Sandbox mode "${requestedMode}" is no longer supported; using "policy" mode`, {
50893
+ logger49.warn(`Sandbox mode "${requestedMode}" is no longer supported; using "policy" mode`, {
50712
50894
  requestedMode,
50713
50895
  actualMode: "policy",
50714
50896
  reason: "In-process Docker/Deno executors were deleted in #2551. Use the OpenCode sandbox bootstrap for real isolation (NEXUS_SANDBOX environment variable, see docs/guides/SANDBOXED-USAGE.md)."
@@ -50723,7 +50905,7 @@ function createDeprecatedModeFallback(requestedMode, policyConfig) {
50723
50905
  }
50724
50906
 
50725
50907
  // src/security/sandbox/sandbox-manager.ts
50726
- var logger49 = createLogger({ component: "sandbox-manager" });
50908
+ var logger50 = createLogger({ component: "sandbox-manager" });
50727
50909
  var DEFAULT_CONFIG5 = {
50728
50910
  mode: "policy",
50729
50911
  fallbackToPolicy: true,
@@ -50735,7 +50917,7 @@ var isInitialized = false;
50735
50917
  var initWarning;
50736
50918
  async function initializeSandbox(config) {
50737
50919
  if (isInitialized && globalSandbox !== null) {
50738
- logger49.debug("Sandbox already initialized, skipping");
50920
+ logger50.debug("Sandbox already initialized, skipping");
50739
50921
  const baseResult = {
50740
50922
  executor: globalSandbox,
50741
50923
  actualMode,
@@ -50747,7 +50929,7 @@ async function initializeSandbox(config) {
50747
50929
  return baseResult;
50748
50930
  }
50749
50931
  const finalConfig = { ...DEFAULT_CONFIG5, ...config };
50750
- logger49.info("Initializing sandbox", {
50932
+ logger50.info("Initializing sandbox", {
50751
50933
  mode: finalConfig.mode,
50752
50934
  fallbackToPolicy: finalConfig.fallbackToPolicy
50753
50935
  });
@@ -50760,13 +50942,13 @@ async function initializeSandbox(config) {
50760
50942
  isInitialized = true;
50761
50943
  initWarning = result.warning;
50762
50944
  if (result.usedFallback) {
50763
- logger49.warn("Sandbox initialized with fallback", {
50945
+ logger50.warn("Sandbox initialized with fallback", {
50764
50946
  requestedMode: finalConfig.mode,
50765
50947
  actualMode: result.actualMode,
50766
50948
  warning: result.warning
50767
50949
  });
50768
50950
  } else {
50769
- logger49.info("Sandbox initialized", {
50951
+ logger50.info("Sandbox initialized", {
50770
50952
  mode: result.actualMode,
50771
50953
  executor: result.executor.name
50772
50954
  });
@@ -50778,7 +50960,7 @@ function getSandboxMode() {
50778
50960
  }
50779
50961
 
50780
50962
  // src/pipeline/feedback-subscriber.ts
50781
- var logger50 = createLogger({ component: "FeedbackSubscriber" });
50963
+ var logger51 = createLogger({ component: "FeedbackSubscriber" });
50782
50964
  var VALID_CLIS = new Set(CLI_NAMES);
50783
50965
  function createFeedbackSubscriber(bus, store) {
50784
50966
  return bus.subscribe({ type: ["model.called", "stage.failed"] }, (event) => {
@@ -50786,7 +50968,7 @@ function createFeedbackSubscriber(bus, store) {
50786
50968
  handleEvent2(event, store);
50787
50969
  } catch (error) {
50788
50970
  const msg = getErrorMessage(error);
50789
- logger50.warn("Feedback subscriber error", { error: msg });
50971
+ logger51.warn("Feedback subscriber error", { error: msg });
50790
50972
  }
50791
50973
  });
50792
50974
  }
@@ -50843,12 +51025,12 @@ function normalizeCli(cli) {
50843
51025
  if (VALID_CLIS.has(cli)) {
50844
51026
  return cli;
50845
51027
  }
50846
- logger50.warn("Unknown CLI in event", { cli });
51028
+ logger51.warn("Unknown CLI in event", { cli });
50847
51029
  return void 0;
50848
51030
  }
50849
51031
 
50850
51032
  // src/pipeline/event-bus-bridge.ts
50851
- var logger51 = createLogger({ component: "EventBusBridge" });
51033
+ var logger52 = createLogger({ component: "EventBusBridge" });
50852
51034
  function toV1Topic(prefix, event) {
50853
51035
  return `${prefix}.${event.type}`;
50854
51036
  }
@@ -50880,10 +51062,10 @@ function createEventBusBridge(options) {
50880
51062
  forwardCount++;
50881
51063
  } catch (error) {
50882
51064
  const msg = getErrorMessage(error);
50883
- logger51.warn("Failed to forward pipeline event", { type: event.type, error: msg });
51065
+ logger52.warn("Failed to forward pipeline event", { type: event.type, error: msg });
50884
51066
  }
50885
51067
  });
50886
- logger51.info("EventBus bridge initialized", { prefix });
51068
+ logger52.info("EventBus bridge initialized", { prefix });
50887
51069
  return {
50888
51070
  forwarded: () => forwardCount,
50889
51071
  dispose: unsub
@@ -50891,7 +51073,7 @@ function createEventBusBridge(options) {
50891
51073
  }
50892
51074
 
50893
51075
  // src/adapters/stdin-lifecycle.ts
50894
- var logger52 = createLogger({ component: "StdinLifecycleMonitor" });
51076
+ var logger53 = createLogger({ component: "StdinLifecycleMonitor" });
50895
51077
  var DEFAULT_PPID_POLL_MS = 3e4;
50896
51078
  var StdinLifecycleMonitor = class {
50897
51079
  callbacks = /* @__PURE__ */ new Set();
@@ -50941,7 +51123,7 @@ var StdinLifecycleMonitor = class {
50941
51123
  clearInterval(this.ppidTimer);
50942
51124
  this.ppidTimer = void 0;
50943
51125
  }
50944
- logger52.warn("Parent process gone \u2014 shutting down MCP server", { reason });
51126
+ logger53.warn("Parent process gone \u2014 shutting down MCP server", { reason });
50945
51127
  await this.fireCallbacks();
50946
51128
  }
50947
51129
  async fireCallbacks() {
@@ -50949,7 +51131,7 @@ var StdinLifecycleMonitor = class {
50949
51131
  try {
50950
51132
  await cb();
50951
51133
  } catch (error) {
50952
- logger52.warn("Stdin shutdown callback failed", { error: String(error) });
51134
+ logger53.warn("Stdin shutdown callback failed", { error: String(error) });
50953
51135
  }
50954
51136
  }
50955
51137
  }
@@ -50963,7 +51145,7 @@ function getStdinLifecycleMonitor() {
50963
51145
  // src/pipeline/task-tracker.ts
50964
51146
  import * as fs14 from "fs";
50965
51147
  import * as path13 from "path";
50966
- var logger53 = createLogger({ component: "task-tracker" });
51148
+ var logger54 = createLogger({ component: "task-tracker" });
50967
51149
  async function exec(cmd, args, timeout = 15e3) {
50968
51150
  const { execFile: execFile5 } = await import("child_process");
50969
51151
  const { promisify: promisify5 } = await import("util");
@@ -50989,7 +51171,7 @@ var GitHubTaskTracker = class {
50989
51171
  const result = await provider.createIssue(title, body, this.config.labels);
50990
51172
  if (!result.ok) throw new Error("Failed to create issue");
50991
51173
  const id = String(result.value.number);
50992
- logger53.info("Created GitHub issue via SCM provider", { id });
51174
+ logger54.info("Created GitHub issue via SCM provider", { id });
50993
51175
  return { id, title, status: "open", url: result.value.url };
50994
51176
  }
50995
51177
  async updateStatus(taskId, status) {
@@ -51017,7 +51199,7 @@ var GitLabTaskTracker = class {
51017
51199
  );
51018
51200
  const match = /\/(\d+)$/.exec(url);
51019
51201
  const id = match?.[1] ?? url;
51020
- logger53.info("Created GitLab issue", { id, url });
51202
+ logger54.info("Created GitLab issue", { id, url });
51021
51203
  return { id, title, status: "open", url };
51022
51204
  }
51023
51205
  async updateStatus(taskId, status) {
@@ -51692,4 +51874,4 @@ export {
51692
51874
  detectBackend,
51693
51875
  createTaskTracker
51694
51876
  };
51695
- //# sourceMappingURL=chunk-K5KMPKKG.js.map
51877
+ //# sourceMappingURL=chunk-RAUA6B2M.js.map