nexus-agents 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/{child-mcp-config-MAEPMEMJ.js → child-mcp-config-6UXFBHW5.js} +2 -2
  2. package/dist/{chunk-6JBCXRWI.js → chunk-2TP7YLBC.js} +2 -2
  3. package/dist/{chunk-KUP3YM2J.js → chunk-47TTP5PC.js} +2 -2
  4. package/dist/{chunk-P7URBNEC.js → chunk-5F36KKHM.js} +45 -8
  5. package/dist/chunk-5F36KKHM.js.map +1 -0
  6. package/dist/{chunk-ZQSBNRKS.js → chunk-5LREI4NO.js} +3 -3
  7. package/dist/{chunk-SJH3ZEKK.js → chunk-5YZF5DUW.js} +8 -8
  8. package/dist/{chunk-CJQRCKR4.js → chunk-64LODBD3.js} +2 -2
  9. package/dist/{chunk-74FMJTGV.js → chunk-D3EQF2BM.js} +7 -7
  10. package/dist/{chunk-U443FR6F.js → chunk-DZQWHHGI.js} +4 -4
  11. package/dist/{chunk-QPGSBGG5.js → chunk-E2TILOO3.js} +5 -5
  12. package/dist/{chunk-VXXA5UN7.js → chunk-EPIRYAU3.js} +2 -2
  13. package/dist/{chunk-TCKBYC7Z.js → chunk-GVRDLRJM.js} +2 -2
  14. package/dist/{chunk-AQOUQIIO.js → chunk-IOGNN2JB.js} +8 -8
  15. package/dist/{chunk-AQOUQIIO.js.map → chunk-IOGNN2JB.js.map} +1 -1
  16. package/dist/chunk-IRRAGZFM.js +7 -0
  17. package/dist/{chunk-FCJN757G.js → chunk-JYTDEFY6.js} +2 -2
  18. package/dist/{chunk-BA6LALHG.js → chunk-KFKI2M4X.js} +2 -2
  19. package/dist/{chunk-MPCVF44P.js → chunk-LM5ZSWYB.js} +4 -4
  20. package/dist/{chunk-5WVP7C3Z.js → chunk-LMAIZ3FD.js} +4 -4
  21. package/dist/{chunk-5WVP7C3Z.js.map → chunk-LMAIZ3FD.js.map} +1 -1
  22. package/dist/{chunk-WZHWX3SA.js → chunk-LX4DUS4M.js} +6 -6
  23. package/dist/{chunk-V36QXMIL.js → chunk-M2TFLYPC.js} +7 -7
  24. package/dist/chunk-M2TFLYPC.js.map +1 -0
  25. package/dist/{chunk-7ANADXHH.js → chunk-MFORQ7FO.js} +2 -2
  26. package/dist/{chunk-SEQIGOAF.js → chunk-PLBMOZKM.js} +3 -3
  27. package/dist/{chunk-NDPUIPKN.js → chunk-QEZ5CS5H.js} +2 -2
  28. package/dist/{chunk-OYMLM23M.js → chunk-QOF5S5Z5.js} +2 -2
  29. package/dist/{chunk-L4BL4UHG.js → chunk-T7NTJNCG.js} +2 -2
  30. package/dist/{chunk-QKAGRX22.js → chunk-UONHQ3Q3.js} +2 -2
  31. package/dist/{chunk-B7DESALP.js → chunk-VE6ZMLCT.js} +2 -2
  32. package/dist/{chunk-WP4ILUPM.js → chunk-VJ3YAU2K.js} +35 -35
  33. package/dist/{chunk-WP4ILUPM.js.map → chunk-VJ3YAU2K.js.map} +1 -1
  34. package/dist/{chunk-HKP47JNU.js → chunk-W3VI2AAJ.js} +3 -3
  35. package/dist/{chunk-JVQU5EDH.js → chunk-XJ76EMQV.js} +5 -5
  36. package/dist/{chunk-LHDMQAYQ.js → chunk-XWKL7QDH.js} +2 -2
  37. package/dist/{chunk-LJEUEU6B.js → chunk-YZDCUGPS.js} +2 -2
  38. package/dist/{chunk-YAT2GTVH.js → chunk-ZCNB6YJ3.js} +4 -4
  39. package/dist/{chunk-OWPBJIWP.js → chunk-ZT6RBA7L.js} +2 -2
  40. package/dist/{cli-circuit-breaker-XUP4B3CR.js → cli-circuit-breaker-U2CTVGQ7.js} +3 -3
  41. package/dist/cli.js +41 -41
  42. package/dist/{composite-router-EY5NIZUY.js → composite-router-GQOZMVH7.js} +2 -2
  43. package/dist/{consensus-vote-TFCCNC67.js → consensus-vote-N35DUGJH.js} +17 -17
  44. package/dist/{context-retriever-3UYUB2VS.js → context-retriever-FHHESJMM.js} +8 -8
  45. package/dist/{doctor-deep-LFUNO5N5.js → doctor-deep-Y65MN57O.js} +3 -3
  46. package/dist/{doctor-live-PT63BVXI.js → doctor-live-SWFNSL5Y.js} +9 -9
  47. package/dist/{expert-bridge-CLYAPS4Q.js → expert-bridge-Y75TQIEO.js} +4 -4
  48. package/dist/{factory-OBIKYM7M.js → factory-7BW4S6PR.js} +5 -5
  49. package/dist/{factory-RKYK7SS3.js → factory-EBM7Z7MP.js} +9 -9
  50. package/dist/{improvement-review-V4AQIMAI.js → improvement-review-EJUFXXIH.js} +6 -6
  51. package/dist/index.d.ts +16 -3
  52. package/dist/index.js +31 -31
  53. package/dist/index.js.map +1 -1
  54. package/dist/{init-opencode-WXD57CGR.js → init-opencode-SSEA3UCA.js} +6 -6
  55. package/dist/issue-triage-HQQ2TR4C.js +17 -0
  56. package/dist/{pr-reviewer-helpers-GNQAEMFV.js → pr-reviewer-helpers-245UWBYB.js} +4 -4
  57. package/dist/{registry-command-ZSMUSV6O.js → registry-command-TPLFFKVI.js} +2 -2
  58. package/dist/{repo-security-plan-O6V4POGE.js → repo-security-plan-C4JE7ZKQ.js} +3 -3
  59. package/dist/{research-helpers-synthesize-AKWLYM53.js → research-helpers-synthesize-ZZRDEX7R.js} +4 -4
  60. package/dist/{routing-memory-6JURKD7X.js → routing-memory-MLMNEIZD.js} +2 -2
  61. package/dist/{session-memory-AOHQ7GFR.js → session-memory-43TLUGSP.js} +3 -3
  62. package/dist/{setup-config-YBPHQKMF.js → setup-config-LZWSAEL7.js} +3 -3
  63. package/dist/{setup-custom-api-F24U4TMD.js → setup-custom-api-UIIB2OYQ.js} +4 -4
  64. package/dist/setup-data-dir-GRIO6YXJ.js +29 -0
  65. package/dist/{tool-memory-QNOIOXGA.js → tool-memory-6HM6HC2C.js} +5 -5
  66. package/dist/{unified-registry-YEKBJ4R4.js → unified-registry-YYHYITVO.js} +10 -10
  67. package/dist/{weather-report-RTKKHFDM.js → weather-report-WCWQRH3K.js} +2 -2
  68. package/package.json +1 -1
  69. package/dist/chunk-P7URBNEC.js.map +0 -1
  70. package/dist/chunk-V36QXMIL.js.map +0 -1
  71. package/dist/chunk-WTS6XM5S.js +0 -7
  72. package/dist/issue-triage-3BMIT32P.js +0 -17
  73. package/dist/setup-data-dir-2D6SXQHE.js +0 -29
  74. /package/dist/{child-mcp-config-MAEPMEMJ.js.map → child-mcp-config-6UXFBHW5.js.map} +0 -0
  75. /package/dist/{chunk-6JBCXRWI.js.map → chunk-2TP7YLBC.js.map} +0 -0
  76. /package/dist/{chunk-KUP3YM2J.js.map → chunk-47TTP5PC.js.map} +0 -0
  77. /package/dist/{chunk-ZQSBNRKS.js.map → chunk-5LREI4NO.js.map} +0 -0
  78. /package/dist/{chunk-SJH3ZEKK.js.map → chunk-5YZF5DUW.js.map} +0 -0
  79. /package/dist/{chunk-CJQRCKR4.js.map → chunk-64LODBD3.js.map} +0 -0
  80. /package/dist/{chunk-74FMJTGV.js.map → chunk-D3EQF2BM.js.map} +0 -0
  81. /package/dist/{chunk-U443FR6F.js.map → chunk-DZQWHHGI.js.map} +0 -0
  82. /package/dist/{chunk-QPGSBGG5.js.map → chunk-E2TILOO3.js.map} +0 -0
  83. /package/dist/{chunk-VXXA5UN7.js.map → chunk-EPIRYAU3.js.map} +0 -0
  84. /package/dist/{chunk-TCKBYC7Z.js.map → chunk-GVRDLRJM.js.map} +0 -0
  85. /package/dist/{chunk-WTS6XM5S.js.map → chunk-IRRAGZFM.js.map} +0 -0
  86. /package/dist/{chunk-FCJN757G.js.map → chunk-JYTDEFY6.js.map} +0 -0
  87. /package/dist/{chunk-BA6LALHG.js.map → chunk-KFKI2M4X.js.map} +0 -0
  88. /package/dist/{chunk-MPCVF44P.js.map → chunk-LM5ZSWYB.js.map} +0 -0
  89. /package/dist/{chunk-WZHWX3SA.js.map → chunk-LX4DUS4M.js.map} +0 -0
  90. /package/dist/{chunk-7ANADXHH.js.map → chunk-MFORQ7FO.js.map} +0 -0
  91. /package/dist/{chunk-SEQIGOAF.js.map → chunk-PLBMOZKM.js.map} +0 -0
  92. /package/dist/{chunk-NDPUIPKN.js.map → chunk-QEZ5CS5H.js.map} +0 -0
  93. /package/dist/{chunk-OYMLM23M.js.map → chunk-QOF5S5Z5.js.map} +0 -0
  94. /package/dist/{chunk-L4BL4UHG.js.map → chunk-T7NTJNCG.js.map} +0 -0
  95. /package/dist/{chunk-QKAGRX22.js.map → chunk-UONHQ3Q3.js.map} +0 -0
  96. /package/dist/{chunk-B7DESALP.js.map → chunk-VE6ZMLCT.js.map} +0 -0
  97. /package/dist/{chunk-HKP47JNU.js.map → chunk-W3VI2AAJ.js.map} +0 -0
  98. /package/dist/{chunk-JVQU5EDH.js.map → chunk-XJ76EMQV.js.map} +0 -0
  99. /package/dist/{chunk-LHDMQAYQ.js.map → chunk-XWKL7QDH.js.map} +0 -0
  100. /package/dist/{chunk-LJEUEU6B.js.map → chunk-YZDCUGPS.js.map} +0 -0
  101. /package/dist/{chunk-YAT2GTVH.js.map → chunk-ZCNB6YJ3.js.map} +0 -0
  102. /package/dist/{chunk-OWPBJIWP.js.map → chunk-ZT6RBA7L.js.map} +0 -0
  103. /package/dist/{cli-circuit-breaker-XUP4B3CR.js.map → cli-circuit-breaker-U2CTVGQ7.js.map} +0 -0
  104. /package/dist/{composite-router-EY5NIZUY.js.map → composite-router-GQOZMVH7.js.map} +0 -0
  105. /package/dist/{consensus-vote-TFCCNC67.js.map → consensus-vote-N35DUGJH.js.map} +0 -0
  106. /package/dist/{context-retriever-3UYUB2VS.js.map → context-retriever-FHHESJMM.js.map} +0 -0
  107. /package/dist/{doctor-deep-LFUNO5N5.js.map → doctor-deep-Y65MN57O.js.map} +0 -0
  108. /package/dist/{doctor-live-PT63BVXI.js.map → doctor-live-SWFNSL5Y.js.map} +0 -0
  109. /package/dist/{expert-bridge-CLYAPS4Q.js.map → expert-bridge-Y75TQIEO.js.map} +0 -0
  110. /package/dist/{factory-OBIKYM7M.js.map → factory-7BW4S6PR.js.map} +0 -0
  111. /package/dist/{factory-RKYK7SS3.js.map → factory-EBM7Z7MP.js.map} +0 -0
  112. /package/dist/{improvement-review-V4AQIMAI.js.map → improvement-review-EJUFXXIH.js.map} +0 -0
  113. /package/dist/{init-opencode-WXD57CGR.js.map → init-opencode-SSEA3UCA.js.map} +0 -0
  114. /package/dist/{issue-triage-3BMIT32P.js.map → issue-triage-HQQ2TR4C.js.map} +0 -0
  115. /package/dist/{pr-reviewer-helpers-GNQAEMFV.js.map → pr-reviewer-helpers-245UWBYB.js.map} +0 -0
  116. /package/dist/{registry-command-ZSMUSV6O.js.map → registry-command-TPLFFKVI.js.map} +0 -0
  117. /package/dist/{repo-security-plan-O6V4POGE.js.map → repo-security-plan-C4JE7ZKQ.js.map} +0 -0
  118. /package/dist/{research-helpers-synthesize-AKWLYM53.js.map → research-helpers-synthesize-ZZRDEX7R.js.map} +0 -0
  119. /package/dist/{routing-memory-6JURKD7X.js.map → routing-memory-MLMNEIZD.js.map} +0 -0
  120. /package/dist/{session-memory-AOHQ7GFR.js.map → session-memory-43TLUGSP.js.map} +0 -0
  121. /package/dist/{setup-config-YBPHQKMF.js.map → setup-config-LZWSAEL7.js.map} +0 -0
  122. /package/dist/{setup-custom-api-F24U4TMD.js.map → setup-custom-api-UIIB2OYQ.js.map} +0 -0
  123. /package/dist/{setup-data-dir-2D6SXQHE.js.map → setup-data-dir-GRIO6YXJ.js.map} +0 -0
  124. /package/dist/{tool-memory-QNOIOXGA.js.map → tool-memory-6HM6HC2C.js.map} +0 -0
  125. /package/dist/{unified-registry-YEKBJ4R4.js.map → unified-registry-YYHYITVO.js.map} +0 -0
  126. /package/dist/{weather-report-RTKKHFDM.js.map → weather-report-WCWQRH3K.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  GitHubProvider,
3
3
  ScmError
4
- } from "./chunk-BA6LALHG.js";
4
+ } from "./chunk-KFKI2M4X.js";
5
5
  import {
6
6
  ROLE_DEFAULT_TRUST,
7
7
  ReputationCache,
@@ -11,20 +11,20 @@ import {
11
11
  gateWithReputation,
12
12
  resolveReputationGatingMode,
13
13
  sanitizeInput
14
- } from "./chunk-FCJN757G.js";
14
+ } from "./chunk-JYTDEFY6.js";
15
15
  import {
16
16
  emitPolicyEvent
17
- } from "./chunk-OYMLM23M.js";
17
+ } from "./chunk-QOF5S5Z5.js";
18
18
  import {
19
19
  hasToken
20
- } from "./chunk-LJEUEU6B.js";
20
+ } from "./chunk-YZDCUGPS.js";
21
21
  import {
22
22
  CLI_SUBPROCESS_TIMEOUTS,
23
23
  createLogger,
24
24
  err,
25
25
  getTimeProvider,
26
26
  ok
27
- } from "./chunk-P7URBNEC.js";
27
+ } from "./chunk-5F36KKHM.js";
28
28
 
29
29
  // src/security/trust-classifier.ts
30
30
  function mapAuthorAssociation(association) {
@@ -1247,4 +1247,4 @@ export {
1247
1247
  IssueTriage,
1248
1248
  createIssueTriage
1249
1249
  };
1250
- //# sourceMappingURL=chunk-WZHWX3SA.js.map
1250
+ //# sourceMappingURL=chunk-LX4DUS4M.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  resolveCliSlot
3
- } from "./chunk-LHDMQAYQ.js";
3
+ } from "./chunk-XWKL7QDH.js";
4
4
  import {
5
5
  createLogger,
6
6
  getTimeProvider,
7
7
  isRateLimitText
8
- } from "./chunk-P7URBNEC.js";
8
+ } from "./chunk-5F36KKHM.js";
9
9
 
10
10
  // src/pipeline/expert-bridge.ts
11
11
  function resolveCliFromModelString(model) {
@@ -21,7 +21,7 @@ async function getMcpConfigPath() {
21
21
  if (cachedMcpConfigPath !== null) return cachedMcpConfigPath;
22
22
  mcpConfigInitPromise ??= (async () => {
23
23
  try {
24
- const { generateMcpConfig } = await import("./child-mcp-config-MAEPMEMJ.js");
24
+ const { generateMcpConfig } = await import("./child-mcp-config-6UXFBHW5.js");
25
25
  const config = await generateMcpConfig();
26
26
  cachedMcpConfigPath = config.configPath;
27
27
  cachedMcpConfigCleanup = config.cleanup;
@@ -93,8 +93,8 @@ var routerInitPromise = null;
93
93
  async function getRouter() {
94
94
  if (cachedRouter !== null) return cachedRouter;
95
95
  routerInitPromise ??= (async () => {
96
- const { createAllAdapters } = await import("./factory-RKYK7SS3.js");
97
- const { createCompositeRouter } = await import("./composite-router-EY5NIZUY.js");
96
+ const { createAllAdapters } = await import("./factory-EBM7Z7MP.js");
97
+ const { createCompositeRouter } = await import("./composite-router-GQOZMVH7.js");
98
98
  const adapters = createAllAdapters();
99
99
  if (adapters.size === 0) {
100
100
  routerInitPromise = null;
@@ -102,7 +102,7 @@ async function getRouter() {
102
102
  }
103
103
  cachedRouter = adaptCompositeRouter(createCompositeRouter(adapters));
104
104
  try {
105
- const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-XUP4B3CR.js");
105
+ const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-U2CTVGQ7.js");
106
106
  cachedCircuitBreaker = createCliCircuitBreakerIntegration([...adapters.values()]);
107
107
  } catch (error) {
108
108
  const msg = error instanceof Error ? error.message : String(error);
@@ -213,4 +213,4 @@ export {
213
213
  tokenSplitFromUsage,
214
214
  executeExpert
215
215
  };
216
- //# sourceMappingURL=chunk-V36QXMIL.js.map
216
+ //# sourceMappingURL=chunk-M2TFLYPC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pipeline/expert-bridge.ts"],"sourcesContent":["/**\n * Expert Bridge — Programmatic access to the execute_expert pipeline (#1693)\n *\n * Provides a clean wrapper for calling experts with the full pipeline:\n * timeout, fallback cascade, degradation detection, heartbeat, outcome recording.\n *\n * DRY: reuses createBuiltInExpert + CompositeRouter instead of reimplementing.\n *\n * @module pipeline/expert-bridge\n */\n\nimport { createLogger, getTimeProvider } from '../core/index.js';\nimport type { BuiltInExpertType } from '../agents/experts/expert-config.js';\nimport { isRateLimitText } from '../adapters/rate-limit-detector.js';\nimport { resolveCliSlot } from '../config/model-availability.js';\nimport type { CliNameLiteral } from '../config/model-capabilities-types.js';\n\n/**\n * Resolves a CLI slot from the model string a (CLI or API) adapter returned.\n * Known models resolve to their exact slot; **unknown** models — new releases\n * or API/openrouter models not in the curated registry — fall back to the\n * vendor-derived slot (#3317 / #3293) so the outcome is recorded against a real\n * slot instead of being dropped with an undefined cli (the api-mode gap).\n * Returns undefined only when no model is present (the bridge failed before\n * dispatch — no execution to attribute).\n */\nfunction resolveCliFromModelString(model: string | undefined): CliNameLiteral | undefined {\n return resolveCliSlot(model);\n}\n\nconst logger = createLogger({ component: 'expert-bridge' });\n\n/** Base delay for rate limit retry backoff (ms). Scales linearly: 3s, 6s, 9s. */\nconst RATE_LIMIT_BASE_DELAY_MS = 3000;\n\n/** Result of an expert execution. */\nexport interface ExpertBridgeResult {\n readonly success: boolean;\n readonly text: string;\n readonly expertType: BuiltInExpertType;\n readonly durationMs: number;\n readonly error?: string;\n /**\n * CLI that actually executed the task, resolved from the underlying\n * `CliResponse.model` via `getCliForModelId`. Undefined when the bridge\n * failed before dispatch (no adapters / circuit-open / rate-limit cap).\n * Callers writing to OutcomeStore should use this rather than hardcoding\n * a cli — see #2823 (#1154 regression).\n */\n readonly cli?: CliNameLiteral;\n /**\n * Total tokens (input + output) the underlying CLI/adapter reported for this\n * call, when available (#3396). Best-effort: `CliResponse.usage` is optional\n * — CLI-subprocess paths whose `extractUsage` returns null leave this\n * undefined. Consumers (budget enforcement #3395, model.called attribution\n * #3387, routing-experience metrics) must tolerate `undefined`.\n */\n readonly tokensUsed?: number;\n /**\n * Concrete model id the underlying adapter reported (`CliResponse.model`),\n * when present (#3387). Distinct from {@link cli} (the slot): one CLI can run\n * several models. Undefined when the adapter didn't report a model or the\n * bridge failed before dispatch. Required to emit a `model.called` event.\n */\n readonly model?: string;\n /**\n * Input/output token split from the adapter's `CliResponse.usage` (#3387),\n * when reported. Best-effort like {@link tokensUsed}; both undefined together\n * when no usage was available. `tokensIn + tokensOut` reconciles with\n * `tokensUsed` (single source of truth — both derive from the same record).\n */\n readonly tokensIn?: number;\n readonly tokensOut?: number;\n}\n\n/** Minimal router interface for the bridge. */\ninterface RouterLike {\n executeTask(task: { content: string; options?: Record<string, unknown> | undefined }): Promise<{\n ok: boolean;\n value: {\n text: string;\n cli?: CliNameLiteral;\n tokensUsed?: number;\n model?: string;\n tokensIn?: number;\n tokensOut?: number;\n };\n error: { message: string };\n }>;\n}\n\n// Cached router — lazily initialized, reused across calls within a session\nlet cachedRouter: RouterLike | null = null;\n\n// Cached MCP config — generated once, reused across expert calls (#1708)\nlet cachedMcpConfigPath: string | null = null;\n// Cached cleanup for the cached config's tempdir (closes #2946). Previously\n// the cleanup returned by `generateMcpConfig` was thrown away, so\n// `/tmp/nexus-mcp-XXXXXX/` accumulated one entry per MCP server lifetime.\n// Stored here + invoked by `shutdownExpertBridge()` from the server's\n// graceful-shutdown path.\nlet cachedMcpConfigCleanup: (() => Promise<void>) | null = null;\n// Coalesces concurrent init under voter fan-out (closes #2969). consensus_vote\n// fans out N=7 callers on cold start; without this each one ran the full init\n// including a mkdtemp() that the loser N-1 instances never cleaned up.\nlet mcpConfigInitPromise: Promise<string | null> | null = null;\n\n/** Get or create cached MCP config path for expert CLI sessions (#1708). */\nasync function getMcpConfigPath(): Promise<string | null> {\n if (cachedMcpConfigPath !== null) return cachedMcpConfigPath;\n mcpConfigInitPromise ??= (async (): Promise<string | null> => {\n try {\n const { generateMcpConfig } = await import('../cli-adapters/child-mcp-config.js');\n const config = await generateMcpConfig();\n cachedMcpConfigPath = config.configPath;\n cachedMcpConfigCleanup = config.cleanup;\n return cachedMcpConfigPath;\n } catch {\n mcpConfigInitPromise = null; // allow retry on next call\n return null; // MCP config not available — experts run without tools\n }\n })();\n return mcpConfigInitPromise;\n}\n\n/**\n * Removes the cached MCP-config tempdir (closes #2946). Invoke from the\n * server's graceful-shutdown path so stale nexus-mcp-* tempdirs (under\n * the OS tmpdir, see child-mcp-config.ts) don't accumulate across daemon\n * restarts. Idempotent; safe to call multiple times. Never throws —\n * cleanup failures are logged and swallowed.\n */\nexport async function shutdownExpertBridge(): Promise<void> {\n const cleanup = cachedMcpConfigCleanup;\n if (cleanup === null) return;\n cachedMcpConfigCleanup = null;\n cachedMcpConfigPath = null;\n mcpConfigInitPromise = null;\n try {\n await cleanup();\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.debug('Expert-bridge MCP-config cleanup failed', { error: msg });\n }\n}\n\n/** Cached circuit breaker for health monitoring (#1766). */\nlet cachedCircuitBreaker: {\n getHealthStatus(): {\n systemHealthy: boolean;\n healthyCount: number;\n clis: ReadonlyArray<{ name: string; healthy: boolean }>;\n };\n} | null = null;\n\n/**\n * Adapt a CompositeRouter to the narrower RouterLike interface used by this\n * bridge. Previously did `as unknown as RouterLike` which hid any structural\n * mismatch between CompositeRouter's `Result<CliResponse, CliError>` and\n * RouterLike's flat `{ ok, value: { text }, error: { message } }` shape.\n * If CliResponse renames `.text` → `.output` (or similar), this adapter\n * breaks at compile time instead of silently returning wrong data (#1921).\n */\n/**\n * Total tokens from a best-effort `CliResponse.usage` record (#3396). Prefers\n * the reported `totalTokens`; falls back to input+output; returns undefined\n * when no usage was reported (so callers can distinguish \"0 tokens\" — which\n * never happens for a real call — from \"unknown\").\n */\nexport function totalTokensFromUsage(\n usage: { totalTokens?: number; inputTokens?: number; outputTokens?: number } | undefined\n): number | undefined {\n if (usage === undefined) return undefined;\n if (typeof usage.totalTokens === 'number') return usage.totalTokens;\n const total = (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);\n return total > 0 ? total : undefined;\n}\n\n/**\n * Per-direction token split from a best-effort `CliResponse.usage` record\n * (#3387). Unlike {@link totalTokensFromUsage} this keeps `tokensIn`/`tokensOut`\n * separate — the granularity `ModelCalledEvent` requires for attribution.\n * Returns undefined when no usage was reported or both directions are zero (no\n * real call), so callers skip emitting a noise event instead of recording\n * zeros. Reconciles with the total: `tokensIn + tokensOut === totalTokensFromUsage`.\n */\nexport function tokenSplitFromUsage(\n usage: { inputTokens?: number; outputTokens?: number; totalTokens?: number } | undefined\n): { tokensIn: number; tokensOut: number } | undefined {\n if (usage === undefined) return undefined;\n const tokensIn = usage.inputTokens ?? 0;\n const tokensOut = usage.outputTokens ?? 0;\n if (tokensIn + tokensOut === 0) return undefined;\n return { tokensIn, tokensOut };\n}\n\nfunction adaptCompositeRouter(\n compositeRouter: import('../cli-adapters/composite-router.js').ICompositeRouter\n): RouterLike {\n return {\n async executeTask(task): Promise<{\n ok: boolean;\n value: {\n text: string;\n cli?: CliNameLiteral;\n tokensUsed?: number;\n model?: string;\n tokensIn?: number;\n tokensOut?: number;\n };\n error: { message: string };\n }> {\n const cliTask: import('../cli-adapters/types.js').CliTask = {\n content: task.content,\n ...(task.options !== undefined ? { options: task.options } : {}),\n };\n const result = await compositeRouter.executeTask(cliTask);\n if (result.ok) {\n // #2823: surface which CLI actually executed so callers writing to\n // OutcomeStore don't have to hardcode 'claude' (the bug #1154 fixed\n // and that regressed into the pipeline/ tree). Derive via the\n // canonical model→cli mapping in the registry — if the underlying\n // adapter didn't set `model` or the model isn't in the registry,\n // cli stays undefined and downstream code can skip the record\n // rather than lie.\n const cli = resolveCliFromModelString(result.value.model);\n // #3396: surface token usage (best-effort) so budget enforcement,\n // attribution, and routing-experience metrics get real numbers instead\n // of zeros. `usage` is optional and `totalTokens` may be absent — fall\n // back to input+output, and leave undefined when no usage was reported.\n const tokensUsed = totalTokensFromUsage(result.value.usage);\n // #3387: also surface the concrete model + per-direction token split so\n // a meaningful `model.called` event can be emitted. Both derive from the\n // same CliResponse, so tokensIn+tokensOut reconciles with tokensUsed.\n const model = result.value.model;\n const split = tokenSplitFromUsage(result.value.usage);\n return {\n ok: true,\n value: {\n text: result.value.text,\n ...(cli !== undefined && { cli }),\n ...(tokensUsed !== undefined && { tokensUsed }),\n ...(model !== undefined && { model }),\n ...(split !== undefined && { tokensIn: split.tokensIn, tokensOut: split.tokensOut }),\n },\n error: { message: '' },\n };\n }\n return { ok: false, value: { text: '' }, error: { message: result.error.message } };\n },\n };\n}\n\n// Coalesces concurrent router init the same way mcpConfigInitPromise does\n// (closes #2969). N=7 voter fan-out previously ran createAllAdapters() N times\n// — N sets of CLI probe subprocesses, all but one discarded.\nlet routerInitPromise: Promise<RouterLike | null> | null = null;\n\n/** Get or create a cached CompositeRouter with circuit breaker monitoring. */\nasync function getRouter(): Promise<RouterLike | null> {\n if (cachedRouter !== null) return cachedRouter;\n routerInitPromise ??= (async (): Promise<RouterLike | null> => {\n // ROUTER CONSTRUCTION, a distinct operation from adapter acquisition\n // (#5191, ratified 5/6). `createCompositeRouter` needs\n // `Map<RoutingArmId, ICliAdapter>`; `getGlobalRegistry()` returns\n // `IResilientAdapter` (extends `IModelAdapter`) one CLI at a time, so the\n // canonical path cannot type-check here.\n //\n // It also should not be used: the router IS the selection/failover layer,\n // so resilient-wrapped arms would nest two failover mechanisms, and the\n // shared circuit breaker would make an arm report unavailable without the\n // router ever testing it. That is the doctor-probe defect (#5209) applied\n // to routing — and this map is the LinUCB arm space, so a coupled arm\n // availability would distort exploration signals.\n //\n // Pinned by `router-operation.test.ts`.\n const { createAllAdapters } = await import('../cli-adapters/factory.js');\n const { createCompositeRouter } = await import('../cli-adapters/composite-router.js');\n const adapters = createAllAdapters();\n if (adapters.size === 0) {\n routerInitPromise = null; // allow retry once adapters become available\n return null;\n }\n cachedRouter = adaptCompositeRouter(createCompositeRouter(adapters));\n\n // Initialize circuit breaker monitoring (#1766)\n try {\n const { createCliCircuitBreakerIntegration } =\n await import('../cli-adapters/cli-circuit-breaker.js');\n cachedCircuitBreaker = createCliCircuitBreakerIntegration([...adapters.values()]);\n } catch (error: unknown) {\n // Circuit breaker not available — continue without it. Log so we can\n // notice if initialization silently stops working (#1913 Class B).\n const msg = error instanceof Error ? error.message : String(error);\n logger.debug('Circuit breaker init failed; continuing without it', { error: msg });\n }\n\n return cachedRouter;\n })();\n return routerInitPromise;\n}\n\n/** Check CLI health before dispatch (#1766). */\nfunction checkCircuitHealth(): { healthy: boolean; message: string } {\n if (cachedCircuitBreaker === null) return { healthy: true, message: '' };\n const status = cachedCircuitBreaker.getHealthStatus();\n if (!status.systemHealthy) {\n return {\n healthy: false,\n message: `All CLI circuits open (${String(status.healthyCount)}/${String(status.clis.length)} healthy)`,\n };\n }\n return { healthy: true, message: '' };\n}\n\n/** Dispatch task to router with rate limit retry (#1802). */\nasync function dispatchWithRateLimitRetry(\n router: RouterLike,\n task: { content: string; options?: Record<string, unknown> | undefined },\n expertType: BuiltInExpertType,\n start: number\n): Promise<ExpertBridgeResult> {\n const maxAttempts = 3;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const result = await router.executeTask(task);\n const durationMs = getTimeProvider().now() - start;\n\n if (result.ok) {\n logger.info('Expert executed successfully', {\n expertType,\n durationMs,\n cli: result.value.cli,\n });\n return {\n success: true,\n text: result.value.text,\n expertType,\n durationMs,\n ...(result.value.cli !== undefined && { cli: result.value.cli }),\n ...(result.value.tokensUsed !== undefined && { tokensUsed: result.value.tokensUsed }),\n ...(result.value.model !== undefined && { model: result.value.model }),\n ...(result.value.tokensIn !== undefined && { tokensIn: result.value.tokensIn }),\n ...(result.value.tokensOut !== undefined && { tokensOut: result.value.tokensOut }),\n };\n }\n\n const isRateLimit = isRateLimitText(result.error.message);\n if (isRateLimit && attempt < maxAttempts - 1) {\n const backoffMs = RATE_LIMIT_BASE_DELAY_MS * (attempt + 1);\n logger.warn('Expert rate limited, retrying', { expertType, attempt: attempt + 1, backoffMs });\n await new Promise((resolve) => setTimeout(resolve, backoffMs));\n continue;\n }\n\n logger.warn('Expert execution failed', { expertType, error: result.error.message });\n return { success: false, text: '', expertType, durationMs, error: result.error.message };\n }\n\n return {\n success: false,\n text: '',\n expertType,\n durationMs: getTimeProvider().now() - start,\n error: 'Max retry attempts exceeded',\n };\n}\n\n/**\n * Execute an expert task with the full nexus-agents expert pipeline.\n *\n * Creates a built-in expert, executes via CompositeRouter (for intelligent\n * CLI routing), and records outcomes. Falls back gracefully on failure.\n *\n * @param expertType - Built-in expert type (code, architecture, security, qa, etc.)\n * @param prompt - Task prompt for the expert\n * @returns Expert result with text output\n */\nexport async function executeExpert(\n expertType: BuiltInExpertType,\n prompt: string\n): Promise<ExpertBridgeResult> {\n const start = getTimeProvider().now();\n try {\n const { BUILT_IN_EXPERTS } = await import('../agents/experts/expert-config.js');\n const config = BUILT_IN_EXPERTS[expertType];\n const fullPrompt = `${config.systemPrompt}\\n\\n${prompt}`;\n\n const router = await getRouter();\n if (router === null) {\n return {\n success: false,\n text: `[No adapters] ${prompt}`,\n expertType,\n durationMs: getTimeProvider().now() - start,\n error: 'No CLI adapters available',\n };\n }\n\n // Check circuit breaker health before dispatch (#1766)\n const health = checkCircuitHealth();\n if (!health.healthy) {\n logger.warn('Circuit breaker: all CLIs unavailable', { expertType, reason: health.message });\n return {\n success: false,\n text: '',\n expertType,\n durationMs: getTimeProvider().now() - start,\n error: health.message,\n };\n }\n\n // Pass MCP config so CLI experts can call nexus-agents tools (#1708)\n const mcpConfigPath = await getMcpConfigPath();\n const task: { content: string; options?: Record<string, unknown> | undefined } = {\n content: fullPrompt,\n };\n if (mcpConfigPath !== null) task.options = { mcpConfigPath };\n\n return await dispatchWithRateLimitRetry(router, task, expertType, start);\n } catch (error) {\n const durationMs = getTimeProvider().now() - start;\n const msg = error instanceof Error ? error.message : String(error);\n logger.warn('Expert bridge error', { expertType, error: msg });\n return { success: false, text: '', expertType, durationMs, error: msg };\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  getErrorMessage,
5
5
  getTimeProvider,
6
6
  ok
7
- } from "./chunk-P7URBNEC.js";
7
+ } from "./chunk-5F36KKHM.js";
8
8
 
9
9
  // src/context/session-memory.ts
10
10
  import * as fs from "fs";
@@ -366,4 +366,4 @@ export {
366
366
  SessionMemory,
367
367
  createSessionMemory
368
368
  };
369
- //# sourceMappingURL=chunk-7ANADXHH.js.map
369
+ //# sourceMappingURL=chunk-MFORQ7FO.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-5WVP7C3Z.js";
10
+ } from "./chunk-LMAIZ3FD.js";
11
11
  import {
12
12
  JsonlStore,
13
13
  SECURITY_KEYWORDS,
@@ -20,7 +20,7 @@ import {
20
20
  getTimeProvider,
21
21
  isDeclaredNeverDeprecate,
22
22
  isRegisteredToolName
23
- } from "./chunk-P7URBNEC.js";
23
+ } from "./chunk-5F36KKHM.js";
24
24
  import {
25
25
  getNexusDataDir,
26
26
  nexusDataPath
@@ -2159,4 +2159,4 @@ export {
2159
2159
  runImprovementReview,
2160
2160
  registerImprovementReviewTool
2161
2161
  };
2162
- //# sourceMappingURL=chunk-SEQIGOAF.js.map
2162
+ //# sourceMappingURL=chunk-PLBMOZKM.js.map
@@ -11,7 +11,7 @@ import {
11
11
  createGetRetryConfig,
12
12
  createGetTimeout,
13
13
  createGetToolRateLimit
14
- } from "./chunk-P7URBNEC.js";
14
+ } from "./chunk-5F36KKHM.js";
15
15
 
16
16
  // src/config/defaults.ts
17
17
  var CUSTOM_API_DEFAULT_MODEL = "gpt-5.5";
@@ -230,4 +230,4 @@ export {
230
230
  CUSTOM_API_DEFAULT_MODEL,
231
231
  DEFAULTS
232
232
  };
233
- //# sourceMappingURL=chunk-NDPUIPKN.js.map
233
+ //# sourceMappingURL=chunk-QEZ5CS5H.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getTimeProvider
3
- } from "./chunk-P7URBNEC.js";
3
+ } from "./chunk-5F36KKHM.js";
4
4
 
5
5
  // src/security/audit-trail.ts
6
6
  var MAX_EVENTS = 1e4;
@@ -205,4 +205,4 @@ export {
205
205
  createGraphAuditBridge,
206
206
  createAuditTrail
207
207
  };
208
- //# sourceMappingURL=chunk-OYMLM23M.js.map
208
+ //# sourceMappingURL=chunk-QOF5S5Z5.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getRandomProvider,
3
3
  getTimeProvider
4
- } from "./chunk-P7URBNEC.js";
4
+ } from "./chunk-5F36KKHM.js";
5
5
 
6
6
  // src/utils/id-utils.ts
7
7
  import { randomUUID } from "crypto";
@@ -24,4 +24,4 @@ export {
24
24
  generateHyphenId,
25
25
  generateUUID
26
26
  };
27
- //# sourceMappingURL=chunk-L4BL4UHG.js.map
27
+ //# sourceMappingURL=chunk-T7NTJNCG.js.map
@@ -13,7 +13,7 @@ import {
13
13
  lookupInTreeCapability,
14
14
  ok,
15
15
  resolveRetryAfterMs
16
- } from "./chunk-P7URBNEC.js";
16
+ } from "./chunk-5F36KKHM.js";
17
17
 
18
18
  // src/config/model-parameter-support.ts
19
19
  function parseClaudeMajorMinor(bareId) {
@@ -834,4 +834,4 @@ export {
834
834
  DEFAULT_COLLECT_STREAM_MAX_CHUNKS,
835
835
  collectStream
836
836
  };
837
- //# sourceMappingURL=chunk-QKAGRX22.js.map
837
+ //# sourceMappingURL=chunk-UONHQ3Q3.js.map
@@ -2,7 +2,7 @@ import {
2
2
  TASK_CATEGORIES,
3
3
  getAdaptiveBonus,
4
4
  getOutcomeStore
5
- } from "./chunk-P7URBNEC.js";
5
+ } from "./chunk-5F36KKHM.js";
6
6
 
7
7
  // src/cli/doctor-deep.ts
8
8
  var CLI_NAMES = ["claude", "gemini", "codex", "opencode"];
@@ -106,4 +106,4 @@ export {
106
106
  runDeepDiagnostics,
107
107
  formatDeepDiagnostics
108
108
  };
109
- //# sourceMappingURL=chunk-B7DESALP.js.map
109
+ //# sourceMappingURL=chunk-VE6ZMLCT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  generateSecurityPlan
3
- } from "./chunk-KUP3YM2J.js";
3
+ } from "./chunk-47TTP5PC.js";
4
4
  import {
5
5
  analyzeGitHubRepo
6
6
  } from "./chunk-HFOQKCD2.js";
@@ -21,10 +21,10 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-74FMJTGV.js";
24
+ } from "./chunk-D3EQF2BM.js";
25
25
  import {
26
26
  executeExpert
27
- } from "./chunk-V36QXMIL.js";
27
+ } from "./chunk-M2TFLYPC.js";
28
28
  import {
29
29
  JobStatusSchema,
30
30
  VOTER_ROLES,
@@ -47,24 +47,24 @@ import {
47
47
  simulationDeniedResult,
48
48
  toJobSummary,
49
49
  writeJobCancelled
50
- } from "./chunk-AQOUQIIO.js";
50
+ } from "./chunk-IOGNN2JB.js";
51
51
  import {
52
52
  allOf
53
53
  } from "./chunk-OQB3XC5O.js";
54
54
  import {
55
55
  normalizeTopicToCanonical,
56
56
  synthesizeResearch
57
- } from "./chunk-ZQSBNRKS.js";
57
+ } from "./chunk-5LREI4NO.js";
58
58
  import {
59
59
  IssueTriage
60
- } from "./chunk-WZHWX3SA.js";
60
+ } from "./chunk-LX4DUS4M.js";
61
61
  import {
62
62
  resolveEnvMode,
63
63
  sanitizeInput
64
- } from "./chunk-FCJN757G.js";
64
+ } from "./chunk-JYTDEFY6.js";
65
65
  import {
66
66
  withPrerequisite
67
- } from "./chunk-SEQIGOAF.js";
67
+ } from "./chunk-PLBMOZKM.js";
68
68
  import {
69
69
  NOOP_NOTIFIER,
70
70
  RateLimiter,
@@ -88,18 +88,18 @@ import {
88
88
  withAuditTrail,
89
89
  withProgressHeartbeat,
90
90
  wrapToolWithTimeout
91
- } from "./chunk-5WVP7C3Z.js";
91
+ } from "./chunk-LMAIZ3FD.js";
92
92
  import {
93
93
  createAuditTrail,
94
94
  createGraphAuditBridge,
95
95
  emitPipelinePolicyEvent
96
- } from "./chunk-OYMLM23M.js";
96
+ } from "./chunk-QOF5S5Z5.js";
97
97
  import {
98
98
  EventTopics,
99
99
  createEvent,
100
100
  getGlobalEventBus,
101
101
  getGlobalRegistry
102
- } from "./chunk-U443FR6F.js";
102
+ } from "./chunk-DZQWHHGI.js";
103
103
  import {
104
104
  IDENTIFIER_RE,
105
105
  LANG_VALUES,
@@ -132,29 +132,29 @@ import {
132
132
  parseRegistry,
133
133
  sourceExistsInRegistry,
134
134
  summarizeContextForPrompt
135
- } from "./chunk-JVQU5EDH.js";
135
+ } from "./chunk-XJ76EMQV.js";
136
136
  import {
137
137
  loadPapersRegistry,
138
138
  loadTechniquesRegistry,
139
139
  resolveInsideRoot
140
- } from "./chunk-6JBCXRWI.js";
140
+ } from "./chunk-2TP7YLBC.js";
141
141
  import {
142
142
  getTokenEnvVars,
143
143
  resolveToken
144
- } from "./chunk-LJEUEU6B.js";
144
+ } from "./chunk-YZDCUGPS.js";
145
145
  import {
146
146
  DEFAULT_RELEVANCE_CONFIG,
147
147
  MemoryImportance,
148
148
  calculateTextJaccardSimilarity,
149
149
  getToolMemory
150
- } from "./chunk-YAT2GTVH.js";
150
+ } from "./chunk-ZCNB6YJ3.js";
151
151
  import {
152
152
  STOPWORDS,
153
153
  truncateWithInfo
154
154
  } from "./chunk-6T3EPABN.js";
155
155
  import {
156
156
  createSessionMemory
157
- } from "./chunk-7ANADXHH.js";
157
+ } from "./chunk-MFORQ7FO.js";
158
158
  import {
159
159
  BUILT_IN_EXPERTS,
160
160
  BuiltInExpertTypeSchema,
@@ -172,25 +172,25 @@ import {
172
172
  getAvailableClis,
173
173
  sleep,
174
174
  withTimeout
175
- } from "./chunk-SJH3ZEKK.js";
175
+ } from "./chunk-5YZF5DUW.js";
176
176
  import {
177
177
  BaseAdapter,
178
178
  createStream,
179
179
  requireApiKey,
180
180
  validateApiKeyPresence
181
- } from "./chunk-QKAGRX22.js";
181
+ } from "./chunk-UONHQ3Q3.js";
182
182
  import {
183
183
  DEFAULTS
184
- } from "./chunk-NDPUIPKN.js";
184
+ } from "./chunk-QEZ5CS5H.js";
185
185
  import {
186
186
  getAvailabilityCache,
187
187
  getCliForModelId,
188
188
  resolveFallback
189
- } from "./chunk-LHDMQAYQ.js";
189
+ } from "./chunk-XWKL7QDH.js";
190
190
  import {
191
191
  generateHyphenId,
192
192
  generateUUID
193
- } from "./chunk-L4BL4UHG.js";
193
+ } from "./chunk-T7NTJNCG.js";
194
194
  import {
195
195
  AGENT_ROUTER_TIMEOUTS,
196
196
  API_TIMEOUTS,
@@ -296,7 +296,7 @@ import {
296
296
  selectStrategyByManifest,
297
297
  toExpertTaskAnalysisResult,
298
298
  withStep
299
- } from "./chunk-P7URBNEC.js";
299
+ } from "./chunk-5F36KKHM.js";
300
300
  import {
301
301
  ensureLearningDir,
302
302
  getMetaOutcomesFile,
@@ -29692,7 +29692,7 @@ function execIdFields(executionId) {
29692
29692
  async function populateUnifiedContextOnState(state, options) {
29693
29693
  const taskCandidate = state["task"];
29694
29694
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
29695
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-3UYUB2VS.js");
29695
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-FHHESJMM.js");
29696
29696
  const category = inferTaskCategory2(taskCandidate);
29697
29697
  const executionId = options?.executionId;
29698
29698
  const execFields = execIdFields(executionId);
@@ -45525,7 +45525,7 @@ async function tryIssueTriage(task) {
45525
45525
  try {
45526
45526
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
45527
45527
  if (issueMatch === null) return null;
45528
- const { createIssueTriage } = await import("./issue-triage-3BMIT32P.js");
45528
+ const { createIssueTriage } = await import("./issue-triage-HQQ2TR4C.js");
45529
45529
  const triage = createIssueTriage();
45530
45530
  const owner = issueMatch[1] ?? "";
45531
45531
  const num = issueMatch[2] ?? "";
@@ -45553,7 +45553,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
45553
45553
  ]);
45554
45554
  async function classifyWithLLM(task) {
45555
45555
  try {
45556
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-CLYAPS4Q.js");
45556
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-Y75TQIEO.js");
45557
45557
  const prompt = [
45558
45558
  "Classify this task into exactly one pipeline template.",
45559
45559
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -47125,7 +47125,7 @@ var memoryInitPromise = null;
47125
47125
  async function initPipelineMemory() {
47126
47126
  if (cachedMemory !== null) return cachedMemory;
47127
47127
  try {
47128
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-AOHQ7GFR.js");
47128
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-43TLUGSP.js");
47129
47129
  const { getLearningDir } = await import("./learning-persistence-7O5QYDM7.js");
47130
47130
  const mem = createSessionMemory2(getLearningDir());
47131
47131
  mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
@@ -47187,7 +47187,7 @@ function recordRoutingExperience(category, success, durationMs, tokensUsed = 0,
47187
47187
  callRecord(routingMemoryCache);
47188
47188
  return;
47189
47189
  }
47190
- routingMemoryInitPromise ??= import("./routing-memory-6JURKD7X.js").then(({ createRoutingMemory }) => {
47190
+ routingMemoryInitPromise ??= import("./routing-memory-MLMNEIZD.js").then(({ createRoutingMemory }) => {
47191
47191
  routingMemoryCache ??= createRoutingMemory();
47192
47192
  return routingMemoryCache;
47193
47193
  }).catch((error) => {
@@ -47221,7 +47221,7 @@ ${text}` : "";
47221
47221
  }
47222
47222
  async function getWeatherContext() {
47223
47223
  try {
47224
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-RTKKHFDM.js");
47224
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-WCWQRH3K.js");
47225
47225
  const report = generateWeatherReport2({ includeAdaptive: true });
47226
47226
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
47227
47227
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -47239,7 +47239,7 @@ ${lines}
47239
47239
  }
47240
47240
  async function getMemoryContext(task) {
47241
47241
  try {
47242
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-AOHQ7GFR.js");
47242
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-43TLUGSP.js");
47243
47243
  const { getLearningDir } = await import("./learning-persistence-7O5QYDM7.js");
47244
47244
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
47245
47245
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -47358,7 +47358,7 @@ ${contextBlock}`;
47358
47358
  const strategy = config.votingStrategy ?? "higher_order";
47359
47359
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47360
47360
  try {
47361
- const { executeVoting } = await import("./consensus-vote-TFCCNC67.js");
47361
+ const { executeVoting } = await import("./consensus-vote-N35DUGJH.js");
47362
47362
  const votingResult = await executeVoting(
47363
47363
  {
47364
47364
  proposal: buildVoteProposal(plan, research),
@@ -47787,7 +47787,7 @@ async function searchCodebaseForTask(task) {
47787
47787
  }
47788
47788
  async function queryResearchRegistry(task) {
47789
47789
  try {
47790
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-AKWLYM53.js");
47790
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-ZZRDEX7R.js");
47791
47791
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
47792
47792
  if (topic === void 0) return null;
47793
47793
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -47858,7 +47858,7 @@ function createScanStageWrapper() {
47858
47858
  try {
47859
47859
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
47860
47860
  if (slug !== void 0) {
47861
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-O6V4POGE.js");
47861
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-C4JE7ZKQ.js");
47862
47862
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
47863
47863
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
47864
47864
  return output(PIPELINE_STATE_KEYS.FINDINGS, recs, getTimeProvider().now() - start, true);
@@ -51002,7 +51002,7 @@ var GitHubTaskTracker = class {
51002
51002
  cachedProvider = null;
51003
51003
  async getProvider() {
51004
51004
  if (this.cachedProvider !== null) return this.cachedProvider;
51005
- const { createScmProvider } = await import("./factory-OBIKYM7M.js");
51005
+ const { createScmProvider } = await import("./factory-7BW4S6PR.js");
51006
51006
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
51007
51007
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
51008
51008
  this.cachedProvider = result.value;
@@ -51917,7 +51917,7 @@ async function probeSource(source, includeModelIds) {
51917
51917
  }
51918
51918
  }
51919
51919
  async function defaultSources(includeOpenRouter) {
51920
- const { createAllAdapters: createAllAdapters2 } = await import("./factory-RKYK7SS3.js");
51920
+ const { createAllAdapters: createAllAdapters2 } = await import("./factory-EBM7Z7MP.js");
51921
51921
  const adapters = createAllAdapters2();
51922
51922
  return buildDefaultModelSources(adapters, { includeOpenRouter });
51923
51923
  }
@@ -55989,4 +55989,4 @@ export {
55989
55989
  shutdownFeedbackSubscriber,
55990
55990
  createEventBusBridge
55991
55991
  };
55992
- //# sourceMappingURL=chunk-WP4ILUPM.js.map
55992
+ //# sourceMappingURL=chunk-VJ3YAU2K.js.map