nexus-agents 9.1.1 → 9.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 (145) hide show
  1. package/dist/{ast-rule-runner-GW3RRDDN.js → ast-rule-runner-YFDXXHJU.js} +3 -3
  2. package/dist/{child-mcp-config-AX5LNK2U.js → child-mcp-config-44M5EAYD.js} +5 -5
  3. package/dist/child-mcp-config-44M5EAYD.js.map +1 -0
  4. package/dist/{chunk-RDZ42Z3Q.js → chunk-4CTDO2Z2.js} +3 -3
  5. package/dist/{chunk-SAK2PAQD.js → chunk-4HUCHMSX.js} +2 -2
  6. package/dist/{chunk-TVUPVQXD.js → chunk-4IJII2WG.js} +57 -17
  7. package/dist/chunk-4IJII2WG.js.map +1 -0
  8. package/dist/{chunk-7TBDUW7E.js → chunk-5O4NXKPR.js} +4 -4
  9. package/dist/{chunk-ZZ63WG24.js → chunk-5T33FILA.js} +3 -3
  10. package/dist/{chunk-3NYZ5HZA.js → chunk-65XXRWUH.js} +4 -4
  11. package/dist/{chunk-KSZAEQAZ.js → chunk-6JLDPMMU.js} +4 -4
  12. package/dist/{chunk-Z5CLWX4M.js → chunk-A34ANV7R.js} +5 -5
  13. package/dist/{chunk-Y2W44LHI.js → chunk-AQ5KQTXW.js} +5 -5
  14. package/dist/{chunk-HK5DNXNV.js → chunk-B3LT4L5R.js} +5 -5
  15. package/dist/{chunk-QXBOILNV.js → chunk-BH6J6WCC.js} +2 -2
  16. package/dist/{chunk-TQJRQ3MR.js → chunk-BO46P4XJ.js} +5 -5
  17. package/dist/{chunk-YK6MGGPV.js → chunk-CUWTKYFP.js} +2 -2
  18. package/dist/{chunk-2OHARKQS.js → chunk-EUKJXKXD.js} +3 -3
  19. package/dist/{chunk-YCDDSJ6L.js → chunk-FDHT3TG7.js} +2 -2
  20. package/dist/{chunk-2JUGZWTJ.js → chunk-FWZVZME3.js} +2 -2
  21. package/dist/{chunk-CYWZ7W2C.js → chunk-GYMILOWC.js} +2 -2
  22. package/dist/{chunk-POI3L46U.js → chunk-HM37AAFX.js} +2 -2
  23. package/dist/{chunk-XA5JF2QZ.js → chunk-IZS66Q5F.js} +2 -2
  24. package/dist/{chunk-Z6LCG3ZM.js → chunk-KQJ2GAER.js} +2 -2
  25. package/dist/{chunk-KSIHEDDG.js → chunk-L54COYAN.js} +2 -2
  26. package/dist/{chunk-XSNFBUX3.js → chunk-LHOB5YF3.js} +250 -92
  27. package/dist/chunk-LHOB5YF3.js.map +1 -0
  28. package/dist/{chunk-3A24GW2T.js → chunk-NM7YEKQM.js} +6 -5
  29. package/dist/{chunk-3A24GW2T.js.map → chunk-NM7YEKQM.js.map} +1 -1
  30. package/dist/{chunk-TMCE755U.js → chunk-OQNKPJPJ.js} +3 -3
  31. package/dist/chunk-OQNKPJPJ.js.map +1 -0
  32. package/dist/{chunk-A2UFTOL3.js → chunk-P2LYE2KA.js} +4 -4
  33. package/dist/{chunk-7TLUEWRK.js → chunk-Q4L5XROB.js} +3 -3
  34. package/dist/{chunk-XMXU7EA7.js → chunk-QCNZMRJ7.js} +2 -2
  35. package/dist/{chunk-6PKIUOWP.js → chunk-QLUGDQUK.js} +13 -13
  36. package/dist/{chunk-FJ35WCE4.js → chunk-R67NA3Q5.js} +7 -7
  37. package/dist/{chunk-JU4YPMVT.js → chunk-RKSJ26NV.js} +485 -337
  38. package/dist/chunk-RKSJ26NV.js.map +1 -0
  39. package/dist/{chunk-N2BSUYFL.js → chunk-RQ3C6QEH.js} +2 -2
  40. package/dist/{chunk-NACIKSZF.js → chunk-TCKP5S3P.js} +5 -5
  41. package/dist/{chunk-IIOXL76E.js → chunk-WJDNQVQF.js} +3 -3
  42. package/dist/{chunk-MW454P5G.js → chunk-Y3OBX752.js} +8 -8
  43. package/dist/{chunk-PQWFZWDL.js → chunk-ZGSQFG4D.js} +2 -2
  44. package/dist/{cli-circuit-breaker-QDMRHG5K.js → cli-circuit-breaker-6V7RJMMF.js} +3 -3
  45. package/dist/{cli-readiness-7YQ7S2AY.js → cli-readiness-XNJQCKIH.js} +7 -7
  46. package/dist/cli.d.ts +1 -1
  47. package/dist/cli.js +44 -44
  48. package/dist/{composite-router-KWVZJE5J.js → composite-router-43L52IUP.js} +2 -2
  49. package/dist/{consensus-vote-YDKECHPF.js → consensus-vote-6HBLVWTW.js} +17 -17
  50. package/dist/{consensus-vote-types-DA_y5jja.d.ts → consensus-vote-types-q8io4acj.d.ts} +5 -0
  51. package/dist/{context-retriever-XOT3JESN.js → context-retriever-WPSI4STY.js} +8 -8
  52. package/dist/{doctor-deep-L5MCQ4RP.js → doctor-deep-6D6FG3SZ.js} +3 -3
  53. package/dist/{doctor-gateway-report-4B6KE7B5.js → doctor-gateway-report-2JOSIARQ.js} +7 -7
  54. package/dist/{doctor-live-77X66SFV.js → doctor-live-BVXUT36N.js} +11 -11
  55. package/dist/{expert-bridge-S4LEWNOQ.js → expert-bridge-E6HHFKGF.js} +4 -4
  56. package/dist/{factory-U35CCT3I.js → factory-WCUQHBSG.js} +5 -5
  57. package/dist/{factory-WHP7VBCY.js → factory-ZPOHG4M7.js} +10 -10
  58. package/dist/{improvement-review-CYK3E2J6.js → improvement-review-33VU5DAX.js} +6 -6
  59. package/dist/index.d.ts +32 -21
  60. package/dist/index.js +32 -32
  61. package/dist/index.js.map +1 -1
  62. package/dist/{init-opencode-OTTNZHKO.js → init-opencode-NQW7NG5Z.js} +6 -6
  63. package/dist/{issue-triage-WRNKM4W7.js → issue-triage-RFV3YR66.js} +6 -6
  64. package/dist/{model-config-helpers-URTK3TDT.js → model-config-helpers-KTLFA734.js} +2 -2
  65. package/dist/{openai-compat-adapter-CCYSADQL.js → openai-compat-adapter-7CITWSBH.js} +6 -6
  66. package/dist/{outcome-store-adapter-GAT6LFFD.js → outcome-store-adapter-WCY3FBQM.js} +2 -2
  67. package/dist/{pr-reviewer-helpers-ECI3O755.js → pr-reviewer-helpers-KJFNRS6R.js} +4 -4
  68. package/dist/{registry-command-ZNS2WFJ5.js → registry-command-OZLB3KYN.js} +2 -2
  69. package/dist/{repo-security-plan-FE7BKQH5.js → repo-security-plan-MOHGBKLA.js} +3 -3
  70. package/dist/{research-helpers-synthesize-ECSX4ZO2.js → research-helpers-synthesize-CKC67RSM.js} +4 -4
  71. package/dist/{routing-memory-5CW56QBY.js → routing-memory-FOMKUKKF.js} +2 -2
  72. package/dist/{session-memory-VQB3KEOW.js → session-memory-KRK2HQUF.js} +3 -3
  73. package/dist/{setup-config-3WWCV7RF.js → setup-config-A7MFKDN7.js} +3 -3
  74. package/dist/{setup-custom-api-6QJS7YUQ.js → setup-custom-api-YJ4DICAK.js} +3 -3
  75. package/dist/setup-data-dir-VNGT3GM4.js +36 -0
  76. package/dist/{tool-memory-J7HO5C7H.js → tool-memory-ZUQSBR3O.js} +5 -5
  77. package/dist/{unified-registry-JIWD7D4S.js → unified-registry-JG3QCJ5O.js} +11 -11
  78. package/dist/{weather-report-GSZVNNE2.js → weather-report-2MBDI7G2.js} +2 -2
  79. package/package.json +3 -2
  80. package/dist/child-mcp-config-AX5LNK2U.js.map +0 -1
  81. package/dist/chunk-JU4YPMVT.js.map +0 -1
  82. package/dist/chunk-TMCE755U.js.map +0 -1
  83. package/dist/chunk-TVUPVQXD.js.map +0 -1
  84. package/dist/chunk-XSNFBUX3.js.map +0 -1
  85. package/dist/setup-data-dir-4J6XKGDH.js +0 -36
  86. /package/dist/{ast-rule-runner-GW3RRDDN.js.map → ast-rule-runner-YFDXXHJU.js.map} +0 -0
  87. /package/dist/{chunk-RDZ42Z3Q.js.map → chunk-4CTDO2Z2.js.map} +0 -0
  88. /package/dist/{chunk-SAK2PAQD.js.map → chunk-4HUCHMSX.js.map} +0 -0
  89. /package/dist/{chunk-7TBDUW7E.js.map → chunk-5O4NXKPR.js.map} +0 -0
  90. /package/dist/{chunk-ZZ63WG24.js.map → chunk-5T33FILA.js.map} +0 -0
  91. /package/dist/{chunk-3NYZ5HZA.js.map → chunk-65XXRWUH.js.map} +0 -0
  92. /package/dist/{chunk-KSZAEQAZ.js.map → chunk-6JLDPMMU.js.map} +0 -0
  93. /package/dist/{chunk-Z5CLWX4M.js.map → chunk-A34ANV7R.js.map} +0 -0
  94. /package/dist/{chunk-Y2W44LHI.js.map → chunk-AQ5KQTXW.js.map} +0 -0
  95. /package/dist/{chunk-HK5DNXNV.js.map → chunk-B3LT4L5R.js.map} +0 -0
  96. /package/dist/{chunk-QXBOILNV.js.map → chunk-BH6J6WCC.js.map} +0 -0
  97. /package/dist/{chunk-TQJRQ3MR.js.map → chunk-BO46P4XJ.js.map} +0 -0
  98. /package/dist/{chunk-YK6MGGPV.js.map → chunk-CUWTKYFP.js.map} +0 -0
  99. /package/dist/{chunk-2OHARKQS.js.map → chunk-EUKJXKXD.js.map} +0 -0
  100. /package/dist/{chunk-YCDDSJ6L.js.map → chunk-FDHT3TG7.js.map} +0 -0
  101. /package/dist/{chunk-2JUGZWTJ.js.map → chunk-FWZVZME3.js.map} +0 -0
  102. /package/dist/{chunk-CYWZ7W2C.js.map → chunk-GYMILOWC.js.map} +0 -0
  103. /package/dist/{chunk-POI3L46U.js.map → chunk-HM37AAFX.js.map} +0 -0
  104. /package/dist/{chunk-XA5JF2QZ.js.map → chunk-IZS66Q5F.js.map} +0 -0
  105. /package/dist/{chunk-Z6LCG3ZM.js.map → chunk-KQJ2GAER.js.map} +0 -0
  106. /package/dist/{chunk-KSIHEDDG.js.map → chunk-L54COYAN.js.map} +0 -0
  107. /package/dist/{chunk-A2UFTOL3.js.map → chunk-P2LYE2KA.js.map} +0 -0
  108. /package/dist/{chunk-7TLUEWRK.js.map → chunk-Q4L5XROB.js.map} +0 -0
  109. /package/dist/{chunk-XMXU7EA7.js.map → chunk-QCNZMRJ7.js.map} +0 -0
  110. /package/dist/{chunk-6PKIUOWP.js.map → chunk-QLUGDQUK.js.map} +0 -0
  111. /package/dist/{chunk-FJ35WCE4.js.map → chunk-R67NA3Q5.js.map} +0 -0
  112. /package/dist/{chunk-N2BSUYFL.js.map → chunk-RQ3C6QEH.js.map} +0 -0
  113. /package/dist/{chunk-NACIKSZF.js.map → chunk-TCKP5S3P.js.map} +0 -0
  114. /package/dist/{chunk-IIOXL76E.js.map → chunk-WJDNQVQF.js.map} +0 -0
  115. /package/dist/{chunk-MW454P5G.js.map → chunk-Y3OBX752.js.map} +0 -0
  116. /package/dist/{chunk-PQWFZWDL.js.map → chunk-ZGSQFG4D.js.map} +0 -0
  117. /package/dist/{cli-circuit-breaker-QDMRHG5K.js.map → cli-circuit-breaker-6V7RJMMF.js.map} +0 -0
  118. /package/dist/{cli-readiness-7YQ7S2AY.js.map → cli-readiness-XNJQCKIH.js.map} +0 -0
  119. /package/dist/{composite-router-KWVZJE5J.js.map → composite-router-43L52IUP.js.map} +0 -0
  120. /package/dist/{consensus-vote-YDKECHPF.js.map → consensus-vote-6HBLVWTW.js.map} +0 -0
  121. /package/dist/{context-retriever-XOT3JESN.js.map → context-retriever-WPSI4STY.js.map} +0 -0
  122. /package/dist/{doctor-deep-L5MCQ4RP.js.map → doctor-deep-6D6FG3SZ.js.map} +0 -0
  123. /package/dist/{doctor-gateway-report-4B6KE7B5.js.map → doctor-gateway-report-2JOSIARQ.js.map} +0 -0
  124. /package/dist/{doctor-live-77X66SFV.js.map → doctor-live-BVXUT36N.js.map} +0 -0
  125. /package/dist/{expert-bridge-S4LEWNOQ.js.map → expert-bridge-E6HHFKGF.js.map} +0 -0
  126. /package/dist/{factory-U35CCT3I.js.map → factory-WCUQHBSG.js.map} +0 -0
  127. /package/dist/{factory-WHP7VBCY.js.map → factory-ZPOHG4M7.js.map} +0 -0
  128. /package/dist/{improvement-review-CYK3E2J6.js.map → improvement-review-33VU5DAX.js.map} +0 -0
  129. /package/dist/{init-opencode-OTTNZHKO.js.map → init-opencode-NQW7NG5Z.js.map} +0 -0
  130. /package/dist/{issue-triage-WRNKM4W7.js.map → issue-triage-RFV3YR66.js.map} +0 -0
  131. /package/dist/{model-config-helpers-URTK3TDT.js.map → model-config-helpers-KTLFA734.js.map} +0 -0
  132. /package/dist/{openai-compat-adapter-CCYSADQL.js.map → openai-compat-adapter-7CITWSBH.js.map} +0 -0
  133. /package/dist/{outcome-store-adapter-GAT6LFFD.js.map → outcome-store-adapter-WCY3FBQM.js.map} +0 -0
  134. /package/dist/{pr-reviewer-helpers-ECI3O755.js.map → pr-reviewer-helpers-KJFNRS6R.js.map} +0 -0
  135. /package/dist/{registry-command-ZNS2WFJ5.js.map → registry-command-OZLB3KYN.js.map} +0 -0
  136. /package/dist/{repo-security-plan-FE7BKQH5.js.map → repo-security-plan-MOHGBKLA.js.map} +0 -0
  137. /package/dist/{research-helpers-synthesize-ECSX4ZO2.js.map → research-helpers-synthesize-CKC67RSM.js.map} +0 -0
  138. /package/dist/{routing-memory-5CW56QBY.js.map → routing-memory-FOMKUKKF.js.map} +0 -0
  139. /package/dist/{session-memory-VQB3KEOW.js.map → session-memory-KRK2HQUF.js.map} +0 -0
  140. /package/dist/{setup-config-3WWCV7RF.js.map → setup-config-A7MFKDN7.js.map} +0 -0
  141. /package/dist/{setup-custom-api-6QJS7YUQ.js.map → setup-custom-api-YJ4DICAK.js.map} +0 -0
  142. /package/dist/{setup-data-dir-4J6XKGDH.js.map → setup-data-dir-VNGT3GM4.js.map} +0 -0
  143. /package/dist/{tool-memory-J7HO5C7H.js.map → tool-memory-ZUQSBR3O.js.map} +0 -0
  144. /package/dist/{unified-registry-JIWD7D4S.js.map → unified-registry-JG3QCJ5O.js.map} +0 -0
  145. /package/dist/{weather-report-GSZVNNE2.js.map → weather-report-2MBDI7G2.js.map} +0 -0
@@ -9,8 +9,8 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-YCDDSJ6L.js";
13
- import "./chunk-TVUPVQXD.js";
12
+ } from "./chunk-FDHT3TG7.js";
13
+ import "./chunk-4IJII2WG.js";
14
14
  import "./chunk-XBEKMUTO.js";
15
15
  import "./chunk-UE7A2XHM.js";
16
16
  import "./chunk-LWOX65CP.js";
@@ -28,4 +28,4 @@ export {
28
28
  loadRules,
29
29
  runAstQaRules
30
30
  };
31
- //# sourceMappingURL=ast-rule-runner-GW3RRDDN.js.map
31
+ //# sourceMappingURL=ast-rule-runner-YFDXXHJU.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-JPFRRNRR.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-TVUPVQXD.js";
6
+ } from "./chunk-4IJII2WG.js";
7
7
  import "./chunk-XBEKMUTO.js";
8
8
  import "./chunk-UE7A2XHM.js";
9
9
  import "./chunk-LWOX65CP.js";
@@ -11,8 +11,8 @@ import "./chunk-4PN3UVZV.js";
11
11
  import "./chunk-PX6F3LHL.js";
12
12
 
13
13
  // src/cli-adapters/child-mcp-config.ts
14
- import { writeFile, rm } from "node:fs/promises";
15
- import { rmSync } from "node:fs";
14
+ import { rm } from "node:fs/promises";
15
+ import { rmSync, writeFileSync } from "node:fs";
16
16
  import { join } from "node:path";
17
17
  var logger = createLogger({ component: "swe-bench-mcp-config" });
18
18
  var activeMcpDirs = /* @__PURE__ */ new Set();
@@ -65,7 +65,7 @@ async function generateMcpConfig(options) {
65
65
  }
66
66
  };
67
67
  try {
68
- await writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
68
+ writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
69
69
  return { configPath, cleanup };
70
70
  } catch (error) {
71
71
  await cleanup();
@@ -75,4 +75,4 @@ async function generateMcpConfig(options) {
75
75
  export {
76
76
  generateMcpConfig
77
77
  };
78
- //# sourceMappingURL=child-mcp-config-AX5LNK2U.js.map
78
+ //# sourceMappingURL=child-mcp-config-44M5EAYD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-adapters/child-mcp-config.ts"],"sourcesContent":["/**\n * nexus-agents/cli-adapters - Child CLI MCP Config Generator\n *\n * Generates MCP server configuration for child Claude CLI sessions so\n * spawned agents can call back into nexus-agents' MCP tools (memory,\n * research, etc.). Used by `pipeline/expert-bridge.ts` to give expert\n * agents tool access. Originally lived under `swe-bench/` (#1413);\n * relocated here in #2515 — the helper is generic CLI-spawn\n * infrastructure, not benchmark-specific.\n *\n * The generated config grants NO tool approvals. It only tells the child\n * where the nexus-agents MCP server is; whether an expert may actually call\n * one of its tools follows the host's Claude permission settings (for\n * example `defaultMode`). Measured 2026-09-24: in auto mode the calls run,\n * in default mode they are refused (#6784). An unused `allowedTools` list\n * that read like a guard but was never passed to the CLI was removed then.\n *\n * @module cli-adapters/child-mcp-config\n */\n\nimport { rm } from 'node:fs/promises';\nimport { rmSync, writeFileSync } from 'node:fs';\nimport { nexusMkdtempSync } from '../config/nexus-tmp-dir.js';\nimport { join } from 'node:path';\nimport { createLogger } from '../core/index.js';\n\nconst logger = createLogger({ component: 'swe-bench-mcp-config' });\n\n// Async finally blocks cannot run after process.exit (#4631). One listener\n// covers concurrent configs; SIGKILL cannot execute any in-process cleanup.\nconst activeMcpDirs = new Set<string>();\n\nfunction cleanupOnExit(): void {\n for (const dir of activeMcpDirs) {\n try {\n rmSync(dir, { recursive: true, force: true });\n } catch (error: unknown) {\n logger.debug('MCP-config exit cleanup failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\n/**\n * MCP server entry in Claude CLI config format.\n */\ninterface McpServerEntry {\n readonly command: string;\n readonly args: readonly string[];\n readonly env?: Readonly<Record<string, string>>;\n}\n\n/**\n * MCP config file format for Claude CLI (--mcp-config).\n */\ninterface McpConfigFile {\n readonly mcpServers: Readonly<Record<string, McpServerEntry>>;\n}\n\n/**\n * Options for generating MCP config.\n */\nexport interface McpConfigOptions {\n /** Path to nexus-agents CLI entry point. */\n readonly cliPath?: string;\n /** Additional environment variables for the MCP server. */\n readonly env?: Readonly<Record<string, string>>;\n}\n\n/**\n * Resolves the nexus-agents CLI path.\n * Uses the built dist/cli.js relative to this package.\n */\nfunction resolveCliPath(override?: string): string {\n if (override !== undefined) return override;\n // Resolve relative to this file: src/swe-bench/ → dist/cli.js\n // At runtime we're in dist/swe-bench/, so go up one level\n const distDir = join(__dirname, '..');\n return join(distDir, 'cli.js');\n}\n\n/**\n * Env marker naming a child server (#6795). The child's stdio caller is an\n * expert CLI driven by a model, not the operator, so the child must not\n * measure it at tier 1; `connectTransport` reads this and records the caller\n * as unmeasured.\n */\nconst MCP_CHILD_ENV = 'NEXUS_MCP_CHILD';\n\n/**\n * Builds the MCP config object for a nexus-agents server.\n */\nfunction buildConfig(options?: McpConfigOptions): McpConfigFile {\n const cliPath = resolveCliPath(options?.cliPath);\n\n const entry: McpServerEntry = {\n command: 'node',\n args: [cliPath, '--mode=server'],\n // The child marker is applied LAST so caller-supplied env cannot unset it.\n env: { ...options?.env, [MCP_CHILD_ENV]: '1' },\n };\n\n return {\n mcpServers: {\n 'nexus-agents': entry,\n },\n };\n}\n\n/**\n * Generated MCP config with path and cleanup function.\n */\nexport interface GeneratedMcpConfig {\n /** Path to the generated config file. */\n readonly configPath: string;\n /** Cleanup function to remove temp files. */\n readonly cleanup: () => Promise<void>;\n}\n\n/**\n * Generates an MCP config file for Claude CLI child sessions.\n *\n * Creates a temporary JSON file that can be passed to `claude --mcp-config`.\n * Returns the file path and a cleanup function.\n */\nexport async function generateMcpConfig(options?: McpConfigOptions): Promise<GeneratedMcpConfig> {\n const config = buildConfig(options);\n\n // Creation and exit registration must occur in one turn: async mkdtemp\n // can finish in its worker before JS can register cleanup (#4631).\n const tempDir = nexusMkdtempSync('nexus-mcp-');\n const configPath = join(tempDir, 'mcp-config.json');\n\n if (activeMcpDirs.size === 0) process.on('exit', cleanupOnExit);\n activeMcpDirs.add(tempDir);\n\n const cleanup = async (): Promise<void> => {\n try {\n await rm(tempDir, { recursive: true, force: true });\n activeMcpDirs.delete(tempDir);\n if (activeMcpDirs.size === 0) process.removeListener('exit', cleanupOnExit);\n } catch (e: unknown) {\n logger.debug('Best-effort cleanup failed', {\n error: e instanceof Error ? e.message : String(e),\n });\n }\n };\n\n try {\n // An async open can create the file after exit cleanup lists an empty\n // directory, making its rmdir fail with ENOTEMPTY (#7121).\n writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');\n return { configPath, cleanup };\n } catch (error: unknown) {\n await cleanup();\n throw error;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,SAAS,UAAU;AACnB,SAAS,QAAQ,qBAAqB;AAEtC,SAAS,YAAY;AAGrB,IAAM,SAAS,aAAa,EAAE,WAAW,uBAAuB,CAAC;AAIjE,IAAM,gBAAgB,oBAAI,IAAY;AAEtC,SAAS,gBAAsB;AAC7B,aAAW,OAAO,eAAe;AAC/B,QAAI;AACF,aAAO,KAAK,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAC9C,SAAS,OAAgB;AACvB,aAAO,MAAM,kCAAkC;AAAA,QAC7C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAgCA,SAAS,eAAe,UAA2B;AACjD,MAAI,aAAa,OAAW,QAAO;AAGnC,QAAM,UAAU,KAAK,WAAW,IAAI;AACpC,SAAO,KAAK,SAAS,QAAQ;AAC/B;AAQA,IAAM,gBAAgB;AAKtB,SAAS,YAAY,SAA2C;AAC9D,QAAM,UAAU,eAAe,SAAS,OAAO;AAE/C,QAAM,QAAwB;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,CAAC,SAAS,eAAe;AAAA;AAAA,IAE/B,KAAK,EAAE,GAAG,SAAS,KAAK,CAAC,aAAa,GAAG,IAAI;AAAA,EAC/C;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,MACV,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;AAkBA,eAAsB,kBAAkB,SAAyD;AAC/F,QAAM,SAAS,YAAY,OAAO;AAIlC,QAAM,UAAU,iBAAiB,YAAY;AAC7C,QAAM,aAAa,KAAK,SAAS,iBAAiB;AAElD,MAAI,cAAc,SAAS,EAAG,SAAQ,GAAG,QAAQ,aAAa;AAC9D,gBAAc,IAAI,OAAO;AAEzB,QAAM,UAAU,YAA2B;AACzC,QAAI;AACF,YAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAClD,oBAAc,OAAO,OAAO;AAC5B,UAAI,cAAc,SAAS,EAAG,SAAQ,eAAe,QAAQ,aAAa;AAAA,IAC5E,SAAS,GAAY;AACnB,aAAO,MAAM,8BAA8B;AAAA,QACzC,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,MAClD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI;AAGF,kBAAc,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AAClE,WAAO,EAAE,YAAY,QAAQ;AAAA,EAC/B,SAAS,OAAgB;AACvB,UAAM,QAAQ;AACd,UAAM;AAAA,EACR;AACF;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  loadPapersRegistry
3
- } from "./chunk-POI3L46U.js";
3
+ } from "./chunk-HM37AAFX.js";
4
4
  import {
5
5
  getErrorMessage
6
- } from "./chunk-TVUPVQXD.js";
6
+ } from "./chunk-4IJII2WG.js";
7
7
 
8
8
  // src/cli/research-helpers-synthesize.ts
9
9
  import { z } from "zod";
@@ -876,4 +876,4 @@ export {
876
876
  AttributedInsightSchema,
877
877
  synthesizeResearch
878
878
  };
879
- //# sourceMappingURL=chunk-RDZ42Z3Q.js.map
879
+ //# sourceMappingURL=chunk-4CTDO2Z2.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactCredentialShapes
3
- } from "./chunk-TVUPVQXD.js";
3
+ } from "./chunk-4IJII2WG.js";
4
4
 
5
5
  // src/security/output-sanitizer.ts
6
6
  var REDACTED_KEY_PLACEHOLDER = "[REDACTED_KEY]";
@@ -54,4 +54,4 @@ export {
54
54
  sanitizeErrorDetails,
55
55
  sanitizeStringLeaves
56
56
  };
57
- //# sourceMappingURL=chunk-SAK2PAQD.js.map
57
+ //# sourceMappingURL=chunk-4HUCHMSX.js.map
@@ -6080,7 +6080,7 @@ function adapterReadiness(adapter, options) {
6080
6080
  const ceiling = resolveClassGuardMs("interactive");
6081
6081
  const requested = options.timeoutMs ?? ceiling;
6082
6082
  const timeoutMs = Number.isFinite(requested) && requested > 0 ? Math.min(requested, ceiling) : ceiling;
6083
- const flight = import("./cli-readiness-7YQ7S2AY.js").then(({ probeServes }) => probeServes(adapter, timeoutMs)).finally(() => readinessFlights.delete(adapter));
6083
+ const flight = import("./cli-readiness-XNJQCKIH.js").then(({ probeServes }) => probeServes(adapter, timeoutMs)).finally(() => readinessFlights.delete(adapter));
6084
6084
  readinessFlights.set(adapter, flight);
6085
6085
  return flight;
6086
6086
  }
@@ -6090,7 +6090,7 @@ async function servesListedModel(adapter, modelId, cli) {
6090
6090
  const models = await adapter.listModels();
6091
6091
  if (models.length === 0) return "unknown";
6092
6092
  const requestedKey = canonicalModelKey(modelId);
6093
- const findCanonicalModel2 = cli === "codex" ? (await import("./model-config-helpers-URTK3TDT.js")).findCanonicalModel : void 0;
6093
+ const findCanonicalModel2 = cli === "codex" ? (await import("./model-config-helpers-KTLFA734.js")).findCanonicalModel : void 0;
6094
6094
  const requestedEntry = requestedKey === null ? findCanonicalModel2?.("codex", modelId) : void 0;
6095
6095
  const listed = models.some((model) => {
6096
6096
  const listedEntry = findCanonicalModel2?.("codex", model.id);
@@ -7314,7 +7314,10 @@ var CircuitBreakerRegistry = class {
7314
7314
  }
7315
7315
  return snapshots;
7316
7316
  }
7317
- /** CLI-slot view of {@link getAllArmSnapshots}: `api:*` arms are filtered out. */
7317
+ /**
7318
+ * CLI-slot view of {@link getAllArmSnapshots}: `api:*` arms are filtered out.
7319
+ * @deprecated Use {@link getAllArmSnapshots}; removed in 10.0, #6291.
7320
+ */
7318
7321
  getAllSnapshots() {
7319
7322
  const snapshots = /* @__PURE__ */ new Map();
7320
7323
  for (const [name, snapshot] of this.getAllArmSnapshots()) {
@@ -7356,7 +7359,10 @@ var CircuitBreakerRegistry = class {
7356
7359
  }
7357
7360
  return healthy;
7358
7361
  }
7359
- /** CLI-slot view of {@link getHealthyArms}: `api:*` arms are filtered out. */
7362
+ /**
7363
+ * CLI-slot view of {@link getHealthyArms}: `api:*` arms are filtered out.
7364
+ * @deprecated Use {@link getHealthyArms}; removed in 10.0, #6291.
7365
+ */
7360
7366
  getHealthyClis() {
7361
7367
  return this.getHealthyArms().filter(isCliName);
7362
7368
  }
@@ -7371,7 +7377,10 @@ var CircuitBreakerRegistry = class {
7371
7377
  }
7372
7378
  return unhealthy;
7373
7379
  }
7374
- /** CLI-slot view of {@link getUnhealthyArms}: `api:*` arms are filtered out. */
7380
+ /**
7381
+ * CLI-slot view of {@link getUnhealthyArms}: `api:*` arms are filtered out.
7382
+ * @deprecated Use {@link getUnhealthyArms}; removed in 10.0, #6291.
7383
+ */
7375
7384
  getUnhealthyClis() {
7376
7385
  return this.getUnhealthyArms().filter(isCliName);
7377
7386
  }
@@ -7540,7 +7549,7 @@ var ModelToCliAdapter = class {
7540
7549
  }
7541
7550
  async execute(task, options) {
7542
7551
  const gatewayArm = this.gatewayArmField().gatewayArm;
7543
- const breaker = gatewayArm !== void 0 && this.modelAdapter.providerId === `cli-${this.name}` ? (await import("./cli-circuit-breaker-QDMRHG5K.js")).getDefaultCliCircuitBreakerRegistry().getArmBreaker(breakerKeys.forArm({ name: this.name, gatewayArm })) : void 0;
7552
+ const breaker = gatewayArm !== void 0 && this.modelAdapter.providerId === `cli-${this.name}` ? (await import("./cli-circuit-breaker-6V7RJMMF.js")).getDefaultCliCircuitBreakerRegistry().getArmBreaker(breakerKeys.forArm({ name: this.name, gatewayArm })) : void 0;
7544
7553
  const result = await this.modelAdapter.complete(this.toCompletionRequest(task, options));
7545
7554
  if (!result.ok) {
7546
7555
  const cliError = this.toCliError(result.error);
@@ -13576,7 +13585,7 @@ function getOutcomeStore() {
13576
13585
  async function attachOutcomeStoreToRegistry(store) {
13577
13586
  try {
13578
13587
  const { getMemoryRegistry } = await import("./dist-RRRU2OKU.js");
13579
- const { OutcomeStoreAdapter } = await import("./outcome-store-adapter-GAT6LFFD.js");
13588
+ const { OutcomeStoreAdapter } = await import("./outcome-store-adapter-WCY3FBQM.js");
13580
13589
  const { ensureSharedMemoryRegistry } = await import("./tool-memory-registry-adapters-FO6JVQSX.js");
13581
13590
  ensureSharedMemoryRegistry();
13582
13591
  getMemoryRegistry().attach("outcomes", new OutcomeStoreAdapter(store));
@@ -15089,7 +15098,15 @@ var VoterAttemptEventSchema = z15.object({
15089
15098
  cli: z15.string().min(1).max(120),
15090
15099
  adapter: z15.string().min(1).max(120),
15091
15100
  model: z15.string().min(1).max(120).optional(),
15092
- attemptKind: z15.enum(["initial", "parse_retry", "error_retry", "role_retry", "cli_fallback", "unknown"]).or(z15.string().transform(() => "unknown")),
15101
+ attemptKind: z15.enum([
15102
+ "initial",
15103
+ "parse_retry",
15104
+ "error_retry",
15105
+ "role_retry",
15106
+ "cli_fallback",
15107
+ "option_reask",
15108
+ "unknown"
15109
+ ]).or(z15.string().transform(() => "unknown")),
15093
15110
  outcome: z15.enum(["parsed", "parse_failed", "superseded", "final", "unknown"]).or(z15.string().transform(() => "unknown")),
15094
15111
  withinRoleRetry: z15.boolean().optional(),
15095
15112
  usage: z15.discriminatedUnion("kind", [
@@ -15852,7 +15869,7 @@ function mintReasoningNonce() {
15852
15869
  function computeReasoningDigest(reasoningNonce, reasoning) {
15853
15870
  return crypto.createHash("sha256").update(reasoningNonce).update(reasoning).digest("hex");
15854
15871
  }
15855
- var REASONING_DIGEST_TIERS = /* @__PURE__ */ new Set(["1.13"]);
15872
+ var REASONING_DIGEST_TIERS = /* @__PURE__ */ new Set(["1.13", "1.14"]);
15856
15873
  function isReasoningDigestTier(version) {
15857
15874
  return REASONING_DIGEST_TIERS.has(version);
15858
15875
  }
@@ -16242,7 +16259,11 @@ var VoterSummarySchema = z20.object({
16242
16259
  * itself was folded. A digest nobody re-opens would be a check that
16243
16260
  * cannot fail.
16244
16261
  */
16245
- reasoningDigest: z20.string().regex(HEX_256_PATTERN).optional()
16262
+ reasoningDigest: z20.string().regex(HEX_256_PATTERN).optional(),
16263
+ /** Declared option selected by this seat (#4495, schema 1.14). */
16264
+ selectedOption: z20.string().min(1).optional(),
16265
+ /** Present only when the approving seat was re-asked once (#4495). */
16266
+ optionReask: z20.object({ resolved: z20.boolean() }).strict().optional()
16246
16267
  }).strict();
16247
16268
  function defineVoterKeys(keys) {
16248
16269
  return keys;
@@ -16278,7 +16299,10 @@ var VOTER_SUMMARY_KEYS = defineVoterKeys([
16278
16299
  "reasoningNonce",
16279
16300
  "reasoningDigest",
16280
16301
  // #6951: appended and present-only, preserving hashes without a served model.
16281
- "servedModel"
16302
+ "servedModel",
16303
+ // 1.14 (#4495): appended, present-only; historical hashes stay unchanged.
16304
+ "selectedOption",
16305
+ "optionReask"
16282
16306
  ]);
16283
16307
  var REASONING_TIER_KEYS = /* @__PURE__ */ new Set([
16284
16308
  "reasoningNonce",
@@ -16317,6 +16341,10 @@ function projectVoterField(v, key, digestTier) {
16317
16341
  if (key === "retriedFrom") {
16318
16342
  return v.retriedFrom === void 0 ? void 0 : projectRetriedFrom(v.retriedFrom);
16319
16343
  }
16344
+ if (key === "optionReask" && v.optionReask !== void 0) {
16345
+ const { resolved, ...rest } = v.optionReask;
16346
+ return { resolved, ...noUnprojectedKeys(rest) };
16347
+ }
16320
16348
  return v[key];
16321
16349
  }
16322
16350
  function projectVoterSummary(v, digestTier) {
@@ -16362,7 +16390,8 @@ var VoteRecordSchema = z20.object({
16362
16390
  * (#6246); '1.13' the per-voter `reasoningNonce` + `reasoningDigest`
16363
16391
  * and — the one tier that changes what an EXISTING key means to the
16364
16392
  * hash — folds those instead of `reasoning` (#6263; the clip marker
16365
- * `reasoningTruncated` stays folded). Every tier is accepted — a 1.1 record
16393
+ * `reasoningTruncated` stays folded). '1.14' adds per-seat selections and
16394
+ * re-ask outcomes (#4495), keeping the digest fold. Every tier is accepted — a 1.1 record
16366
16395
  * (no `ratifies`) verifies unchanged because each optional is folded into
16367
16396
  * the self-hash ONLY when present (see {@link computeVoteRecordHash}).
16368
16397
  * Tiers are labels, not ordered numbers: '1.10' follows '1.9' by
@@ -16381,7 +16410,8 @@ var VoteRecordSchema = z20.object({
16381
16410
  "1.10",
16382
16411
  "1.11",
16383
16412
  "1.12",
16384
- "1.13"
16413
+ "1.13",
16414
+ "1.14"
16385
16415
  ]),
16386
16416
  /** Unique record id (also usable as a `ratificationVoteRef`). */
16387
16417
  id: z20.string().min(1),
@@ -16735,6 +16765,12 @@ function servedModelField(v, logger16) {
16735
16765
  });
16736
16766
  return {};
16737
16767
  }
16768
+ function optionEvidence(v) {
16769
+ return {
16770
+ ...v.vote.decision === "approve" && v.selectedOption !== void 0 ? { selectedOption: v.selectedOption } : {},
16771
+ ...v.optionReask !== void 0 ? { optionReask: { resolved: v.optionReask.resolved } } : {}
16772
+ };
16773
+ }
16738
16774
  function toVoterSummaries(votes, logger16) {
16739
16775
  const summaries = [];
16740
16776
  for (const v of votes) {
@@ -16767,7 +16803,8 @@ function toVoterSummaries(votes, logger16) {
16767
16803
  ...v.retriedFrom !== void 0 ? { retriedFrom: projectRetriedFrom(v.retriedFrom) } : {},
16768
16804
  // #6967: the hash projection (`VOTER_SUMMARY_KEYS`) appends it last, so
16769
16805
  // its position here does not change any hash.
16770
- ...servedModelField(v, logger16)
16806
+ ...servedModelField(v, logger16),
16807
+ ...optionEvidence(v)
16771
16808
  });
16772
16809
  }
16773
16810
  return summaries;
@@ -16795,6 +16832,7 @@ function deriveOptionFields(votes, declaredOptions) {
16795
16832
  }
16796
16833
  function recordVersion(optionTally, optionCoverage, panelCoverage, voters, recordLevel) {
16797
16834
  const voterTier = voterTierOf(voters);
16835
+ if (voterTier === "1.14") return "1.14";
16798
16836
  if (voterTier === "1.13") return "1.13";
16799
16837
  if (voterTier === "1.12") return "1.12";
16800
16838
  if (recordLevel.errorPolicy !== void 0) return "1.11";
@@ -16805,6 +16843,8 @@ function recordVersion(optionTally, optionCoverage, panelCoverage, voters, recor
16805
16843
  return optionTally !== void 0 ? "1.3" : "1.2";
16806
16844
  }
16807
16845
  function voterTierOf(voters) {
16846
+ if (voters.some((v) => v.selectedOption !== void 0 || v.optionReask !== void 0))
16847
+ return "1.14";
16808
16848
  if (voters.some((v) => v.reasoningDigest !== void 0)) return "1.13";
16809
16849
  if (voters.some((v) => v.retriedFrom !== void 0)) return "1.12";
16810
16850
  if (voters.some((v) => v.assignedCli !== void 0 || v.fallback !== void 0)) return "1.9";
@@ -19890,7 +19930,7 @@ var CompositeRouter = class _CompositeRouter {
19890
19930
  */
19891
19931
  async consultUnifiedContext(task) {
19892
19932
  try {
19893
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-XOT3JESN.js");
19933
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-WPSI4STY.js");
19894
19934
  const ctx = await getContextForTask({
19895
19935
  task: task.content,
19896
19936
  category: inferTaskCategory(task.content),
@@ -20972,7 +21012,7 @@ function setDefaultRegistry(registry) {
20972
21012
  }
20973
21013
  async function reloadDefaultRegistry() {
20974
21014
  globalRegistry = buildDefaultRegistry();
20975
- const { resetGlobalRegistry } = await import("./unified-registry-JIWD7D4S.js");
21015
+ const { resetGlobalRegistry } = await import("./unified-registry-JG3QCJ5O.js");
20976
21016
  resetGlobalRegistry();
20977
21017
  return globalRegistry;
20978
21018
  }
@@ -21639,4 +21679,4 @@ export {
21639
21679
  AgentCapability,
21640
21680
  OrchestratorError
21641
21681
  };
21642
- //# sourceMappingURL=chunk-TVUPVQXD.js.map
21682
+ //# sourceMappingURL=chunk-4IJII2WG.js.map