nexus-agents 2.174.1 → 2.175.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.
- package/dist/{child-mcp-config-EYDYXTEN.js → child-mcp-config-XD4ODQJW.js} +9 -7
- package/dist/child-mcp-config-XD4ODQJW.js.map +1 -0
- package/dist/{chunk-AXTD4TFK.js → chunk-2HUC6NZN.js} +2 -2
- package/dist/{chunk-3XTGA2YK.js → chunk-4OZPWLKY.js} +4 -170
- package/dist/chunk-4OZPWLKY.js.map +1 -0
- package/dist/{chunk-WJKHJSU2.js → chunk-5Y4RWZ3M.js} +2 -2
- package/dist/{chunk-LRGCUZZX.js → chunk-67CGSBQW.js} +2 -2
- package/dist/{chunk-OC3ABO5L.js → chunk-67ZQSIGP.js} +2 -2
- package/dist/{chunk-KS4EN2WR.js → chunk-AHJYZNQU.js} +2 -2
- package/dist/{chunk-TWAUWJET.js → chunk-C7TM6GM7.js} +2 -2
- package/dist/{chunk-BS43TZVD.js → chunk-CFZGSZEX.js} +3 -3
- package/dist/{chunk-G456TOMJ.js → chunk-CXF5KR7V.js} +35 -5
- package/dist/{chunk-G456TOMJ.js.map → chunk-CXF5KR7V.js.map} +1 -1
- package/dist/{chunk-KNBV3J5O.js → chunk-D7S4ZZS6.js} +2 -2
- package/dist/{chunk-H2HZSKLO.js → chunk-DALN2VV4.js} +4 -4
- package/dist/{chunk-PINS44XA.js → chunk-DVKS77O5.js} +2 -2
- package/dist/{chunk-WP46LCTZ.js → chunk-EY6CGIGS.js} +3 -3
- package/dist/{chunk-DU2YW5DH.js → chunk-FFVDD6MS.js} +2 -2
- package/dist/{chunk-VIE5QLTI.js → chunk-FSVJJBIK.js} +2 -2
- package/dist/{chunk-VXWN5FFG.js → chunk-G4HDWPDT.js} +2 -2
- package/dist/{chunk-JF4Y6CBM.js → chunk-GL4WGBKE.js} +4 -4
- package/dist/{chunk-YQL4WYSM.js → chunk-HULJ7IYD.js} +4 -4
- package/dist/{chunk-GPWRQY5I.js → chunk-IZS3BWQB.js} +7 -7
- package/dist/{chunk-ZCKKNSKZ.js → chunk-JIJA2RY5.js} +13 -10
- package/dist/chunk-JIJA2RY5.js.map +1 -0
- package/dist/{chunk-LV3UNCC6.js → chunk-JXJAHGX2.js} +6 -6
- package/dist/{chunk-VLSXX6KA.js → chunk-KNIHV2UA.js} +2 -2
- package/dist/chunk-LZ2ATWVV.js +172 -0
- package/dist/chunk-LZ2ATWVV.js.map +1 -0
- package/dist/{chunk-S3HKSR6E.js → chunk-MTVSYN4U.js} +10 -10
- package/dist/{chunk-JJC2FHX5.js → chunk-OM2NE5EZ.js} +2 -2
- package/dist/{chunk-DHVMSIT5.js → chunk-OQLFRJCW.js} +9 -1
- package/dist/chunk-OQLFRJCW.js.map +1 -0
- package/dist/{chunk-TL4CD7XY.js → chunk-PBWM7MFA.js} +5 -5
- package/dist/{chunk-RYGZPL4A.js → chunk-QCWBPQF2.js} +4 -4
- package/dist/{chunk-6RIQEBF5.js → chunk-QDPGKVHH.js} +15 -11
- package/dist/{chunk-6RIQEBF5.js.map → chunk-QDPGKVHH.js.map} +1 -1
- package/dist/{chunk-SBKJMPV4.js → chunk-QDYZCME4.js} +39 -39
- package/dist/{chunk-4TULFLTP.js → chunk-QJ2Z6SMD.js} +2 -2
- package/dist/{chunk-AVMNKTWJ.js → chunk-QY5CJKNS.js} +7 -7
- package/dist/{chunk-MJXTFQH6.js → chunk-TYLCYSUQ.js} +2 -2
- package/dist/chunk-YAF73ZMR.js +38 -0
- package/dist/chunk-YAF73ZMR.js.map +1 -0
- package/dist/{chunk-KPM6FF6T.js → chunk-YAJ4XUD2.js} +412 -386
- package/dist/chunk-YAJ4XUD2.js.map +1 -0
- package/dist/{chunk-QONNR66T.js → chunk-Z4BSY2MW.js} +3 -3
- package/dist/{chunk-GFXS3OAX.js → chunk-ZUOQBQN7.js} +6 -6
- package/dist/{cli-circuit-breaker-MIH22DC4.js → cli-circuit-breaker-UVYGXMC3.js} +5 -5
- package/dist/cli.js +59 -48
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-OU47H54C.js → composite-router-RMZL4257.js} +4 -4
- package/dist/{consensus-vote-RKTBZKDP.js → consensus-vote-REULZA53.js} +20 -18
- package/dist/{context-retriever-QCZYGSM3.js → context-retriever-RZZWVBOR.js} +11 -11
- package/dist/{dist-KUG63MRZ.js → dist-GR7PQU7T.js} +563 -482
- package/dist/dist-GR7PQU7T.js.map +1 -0
- package/dist/doctor-deep-HV4TJTJV.js +13 -0
- package/dist/{expert-bridge-OQDZJ2VV.js → expert-bridge-ET6VC2JL.js} +6 -6
- package/dist/factory-2VRY5UT7.js +15 -0
- package/dist/factory-KQML5DIT.js +25 -0
- package/dist/{improvement-review-ICJL6DFU.js → improvement-review-33RKE6ZV.js} +7 -7
- package/dist/index.d.ts +17 -0
- package/dist/index.js +34 -32
- package/dist/index.js.map +1 -1
- package/dist/{init-opencode-5XGLKLVG.js → init-opencode-H4KHTVI6.js} +8 -7
- package/dist/{init-opencode-5XGLKLVG.js.map → init-opencode-H4KHTVI6.js.map} +1 -1
- package/dist/issue-triage-3WQXLNRD.js +18 -0
- package/dist/{learning-persistence-6D5GGT7D.js → learning-persistence-EGY4VKKO.js} +3 -3
- package/dist/{pr-reviewer-helpers-F65CSRZB.js → pr-reviewer-helpers-NMOXAE4O.js} +6 -6
- package/dist/{registry-command-CHV3DNPI.js → registry-command-ZV7WMEYO.js} +4 -4
- package/dist/{repo-security-plan-EZNBLHIT.js → repo-security-plan-U6SMBTSU.js} +5 -5
- package/dist/research-helpers-synthesize-IUIZIZTV.js +15 -0
- package/dist/{routing-memory-QJ74QYTY.js → routing-memory-7EFOXSIE.js} +4 -4
- package/dist/{session-memory-CTE4IJTZ.js → session-memory-IFVVJ2YP.js} +5 -5
- package/dist/setup-command-K2VBZISN.js +43 -0
- package/dist/setup-config-GA2YVE4R.js +11 -0
- package/dist/{setup-custom-api-T7FR4YI6.js → setup-custom-api-E7V4XEKX.js} +8 -6
- package/dist/{setup-custom-api-T7FR4YI6.js.map → setup-custom-api-E7V4XEKX.js.map} +1 -1
- package/dist/{tool-memory-TJMCWGYC.js → tool-memory-ZJ5WR3DL.js} +8 -8
- package/dist/{tool-memory-registry-adapters-PMMKJQF5.js → tool-memory-registry-adapters-YQLOSV4S.js} +3 -3
- package/dist/unified-registry-56JY5W3B.js +28 -0
- package/dist/{weather-report-ZMA3OJS7.js → weather-report-MMOOGRWG.js} +4 -4
- package/package.json +8 -8
- package/dist/child-mcp-config-EYDYXTEN.js.map +0 -1
- package/dist/chunk-3XTGA2YK.js.map +0 -1
- package/dist/chunk-DHVMSIT5.js.map +0 -1
- package/dist/chunk-KPM6FF6T.js.map +0 -1
- package/dist/chunk-ZCKKNSKZ.js.map +0 -1
- package/dist/dist-KUG63MRZ.js.map +0 -1
- package/dist/doctor-deep-CUXNDGFF.js +0 -13
- package/dist/factory-DYFK43AX.js +0 -23
- package/dist/factory-VX6MAME5.js +0 -15
- package/dist/issue-triage-CGRLM4XU.js +0 -18
- package/dist/research-helpers-synthesize-HHREAHNY.js +0 -15
- package/dist/setup-command-CNLGTJIR.js +0 -41
- package/dist/setup-config-KPKOPIKH.js +0 -11
- package/dist/unified-registry-RICD6FKY.js +0 -26
- /package/dist/{chunk-AXTD4TFK.js.map → chunk-2HUC6NZN.js.map} +0 -0
- /package/dist/{chunk-WJKHJSU2.js.map → chunk-5Y4RWZ3M.js.map} +0 -0
- /package/dist/{chunk-LRGCUZZX.js.map → chunk-67CGSBQW.js.map} +0 -0
- /package/dist/{chunk-OC3ABO5L.js.map → chunk-67ZQSIGP.js.map} +0 -0
- /package/dist/{chunk-KS4EN2WR.js.map → chunk-AHJYZNQU.js.map} +0 -0
- /package/dist/{chunk-TWAUWJET.js.map → chunk-C7TM6GM7.js.map} +0 -0
- /package/dist/{chunk-BS43TZVD.js.map → chunk-CFZGSZEX.js.map} +0 -0
- /package/dist/{chunk-KNBV3J5O.js.map → chunk-D7S4ZZS6.js.map} +0 -0
- /package/dist/{chunk-H2HZSKLO.js.map → chunk-DALN2VV4.js.map} +0 -0
- /package/dist/{chunk-PINS44XA.js.map → chunk-DVKS77O5.js.map} +0 -0
- /package/dist/{chunk-WP46LCTZ.js.map → chunk-EY6CGIGS.js.map} +0 -0
- /package/dist/{chunk-DU2YW5DH.js.map → chunk-FFVDD6MS.js.map} +0 -0
- /package/dist/{chunk-VIE5QLTI.js.map → chunk-FSVJJBIK.js.map} +0 -0
- /package/dist/{chunk-VXWN5FFG.js.map → chunk-G4HDWPDT.js.map} +0 -0
- /package/dist/{chunk-JF4Y6CBM.js.map → chunk-GL4WGBKE.js.map} +0 -0
- /package/dist/{chunk-YQL4WYSM.js.map → chunk-HULJ7IYD.js.map} +0 -0
- /package/dist/{chunk-GPWRQY5I.js.map → chunk-IZS3BWQB.js.map} +0 -0
- /package/dist/{chunk-LV3UNCC6.js.map → chunk-JXJAHGX2.js.map} +0 -0
- /package/dist/{chunk-VLSXX6KA.js.map → chunk-KNIHV2UA.js.map} +0 -0
- /package/dist/{chunk-S3HKSR6E.js.map → chunk-MTVSYN4U.js.map} +0 -0
- /package/dist/{chunk-JJC2FHX5.js.map → chunk-OM2NE5EZ.js.map} +0 -0
- /package/dist/{chunk-TL4CD7XY.js.map → chunk-PBWM7MFA.js.map} +0 -0
- /package/dist/{chunk-RYGZPL4A.js.map → chunk-QCWBPQF2.js.map} +0 -0
- /package/dist/{chunk-SBKJMPV4.js.map → chunk-QDYZCME4.js.map} +0 -0
- /package/dist/{chunk-4TULFLTP.js.map → chunk-QJ2Z6SMD.js.map} +0 -0
- /package/dist/{chunk-AVMNKTWJ.js.map → chunk-QY5CJKNS.js.map} +0 -0
- /package/dist/{chunk-MJXTFQH6.js.map → chunk-TYLCYSUQ.js.map} +0 -0
- /package/dist/{chunk-QONNR66T.js.map → chunk-Z4BSY2MW.js.map} +0 -0
- /package/dist/{chunk-GFXS3OAX.js.map → chunk-ZUOQBQN7.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-MIH22DC4.js.map → cli-circuit-breaker-UVYGXMC3.js.map} +0 -0
- /package/dist/{composite-router-OU47H54C.js.map → composite-router-RMZL4257.js.map} +0 -0
- /package/dist/{consensus-vote-RKTBZKDP.js.map → consensus-vote-REULZA53.js.map} +0 -0
- /package/dist/{context-retriever-QCZYGSM3.js.map → context-retriever-RZZWVBOR.js.map} +0 -0
- /package/dist/{doctor-deep-CUXNDGFF.js.map → doctor-deep-HV4TJTJV.js.map} +0 -0
- /package/dist/{expert-bridge-OQDZJ2VV.js.map → expert-bridge-ET6VC2JL.js.map} +0 -0
- /package/dist/{factory-DYFK43AX.js.map → factory-2VRY5UT7.js.map} +0 -0
- /package/dist/{factory-VX6MAME5.js.map → factory-KQML5DIT.js.map} +0 -0
- /package/dist/{improvement-review-ICJL6DFU.js.map → improvement-review-33RKE6ZV.js.map} +0 -0
- /package/dist/{issue-triage-CGRLM4XU.js.map → issue-triage-3WQXLNRD.js.map} +0 -0
- /package/dist/{learning-persistence-6D5GGT7D.js.map → learning-persistence-EGY4VKKO.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-F65CSRZB.js.map → pr-reviewer-helpers-NMOXAE4O.js.map} +0 -0
- /package/dist/{registry-command-CHV3DNPI.js.map → registry-command-ZV7WMEYO.js.map} +0 -0
- /package/dist/{repo-security-plan-EZNBLHIT.js.map → repo-security-plan-U6SMBTSU.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-HHREAHNY.js.map → research-helpers-synthesize-IUIZIZTV.js.map} +0 -0
- /package/dist/{routing-memory-QJ74QYTY.js.map → routing-memory-7EFOXSIE.js.map} +0 -0
- /package/dist/{session-memory-CTE4IJTZ.js.map → session-memory-IFVVJ2YP.js.map} +0 -0
- /package/dist/{setup-command-CNLGTJIR.js.map → setup-command-K2VBZISN.js.map} +0 -0
- /package/dist/{setup-config-KPKOPIKH.js.map → setup-config-GA2YVE4R.js.map} +0 -0
- /package/dist/{tool-memory-TJMCWGYC.js.map → tool-memory-ZJ5WR3DL.js.map} +0 -0
- /package/dist/{tool-memory-registry-adapters-PMMKJQF5.js.map → tool-memory-registry-adapters-YQLOSV4S.js.map} +0 -0
- /package/dist/{unified-registry-RICD6FKY.js.map → unified-registry-56JY5W3B.js.map} +0 -0
- /package/dist/{weather-report-ZMA3OJS7.js.map → weather-report-MMOOGRWG.js.map} +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
nexusMkdtemp
|
|
3
|
+
} from "./chunk-YAF73ZMR.js";
|
|
1
4
|
import {
|
|
2
5
|
createLogger
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
7
|
+
import "./chunk-2HUC6NZN.js";
|
|
8
|
+
import "./chunk-OQLFRJCW.js";
|
|
6
9
|
import "./chunk-ZPWHCABL.js";
|
|
7
10
|
|
|
8
11
|
// src/cli-adapters/child-mcp-config.ts
|
|
9
|
-
import { writeFile,
|
|
12
|
+
import { writeFile, rm } from "fs/promises";
|
|
10
13
|
import { join } from "path";
|
|
11
|
-
import { tmpdir } from "os";
|
|
12
14
|
var logger = createLogger({ component: "swe-bench-mcp-config" });
|
|
13
15
|
var DEFAULT_ALLOWED_TOOLS = [
|
|
14
16
|
"memory_query",
|
|
@@ -41,7 +43,7 @@ function buildConfig(options) {
|
|
|
41
43
|
async function generateMcpConfig(options) {
|
|
42
44
|
const config = buildConfig(options);
|
|
43
45
|
const tools = options?.allowedTools ?? DEFAULT_ALLOWED_TOOLS;
|
|
44
|
-
const tempDir = await
|
|
46
|
+
const tempDir = await nexusMkdtemp("nexus-mcp-");
|
|
45
47
|
const configPath = join(tempDir, "mcp-config.json");
|
|
46
48
|
await writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
47
49
|
const cleanup = async () => {
|
|
@@ -60,4 +62,4 @@ export {
|
|
|
60
62
|
generateMcpConfig,
|
|
61
63
|
getDefaultAllowedTools
|
|
62
64
|
};
|
|
63
|
-
//# sourceMappingURL=child-mcp-config-
|
|
65
|
+
//# sourceMappingURL=child-mcp-config-XD4ODQJW.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 * @module cli-adapters/child-mcp-config\n */\n\nimport { writeFile, rm } from 'node:fs/promises';\nimport { nexusMkdtemp } 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/**\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 /** Custom allowed tools (default: read-only subset). */\n readonly allowedTools?: readonly string[];\n}\n\n/** Default read-only tools available to SWE-bench child sessions. */\nconst DEFAULT_ALLOWED_TOOLS: readonly string[] = [\n 'memory_query',\n 'memory_stats',\n 'research_query',\n 'research_discover',\n 'weather_report',\n 'delegate_to_model',\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 * Builds the MCP config object for a nexus-agents server.\n */\nfunction buildConfig(options?: McpConfigOptions): McpConfigFile {\n const cliPath = resolveCliPath(options?.cliPath);\n const tools = options?.allowedTools ?? DEFAULT_ALLOWED_TOOLS;\n\n const entry: McpServerEntry = {\n command: 'node',\n args: [cliPath, '--mode=server'],\n ...(options?.env !== undefined ? { env: options.env } : {}),\n };\n\n return {\n mcpServers: {\n 'nexus-agents': entry,\n },\n };\n\n // Note: tool allowlisting is handled by Claude CLI's --allowedTools flag,\n // not in the MCP config itself. The caller should pass tools separately.\n void tools;\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 /** Allowed tools list for --allowedTools flag. */\n readonly allowedTools: readonly string[];\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 const tools = options?.allowedTools ?? DEFAULT_ALLOWED_TOOLS;\n\n const tempDir = await nexusMkdtemp('nexus-mcp-');\n const configPath = join(tempDir, 'mcp-config.json');\n\n await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');\n\n const cleanup = async (): Promise<void> => {\n await rm(tempDir, { recursive: true, force: true }).catch((e: unknown) => {\n logger.debug('Best-effort cleanup failed', {\n error: e instanceof Error ? e.message : String(e),\n });\n });\n };\n\n return { configPath, cleanup, allowedTools: tools };\n}\n\n/**\n * Gets the default allowed tools for SWE-bench MCP sessions.\n */\nexport function getDefaultAllowedTools(): readonly string[] {\n return DEFAULT_ALLOWED_TOOLS;\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAS,WAAW,UAAU;AAE9B,SAAS,YAAY;AAGrB,IAAM,SAAS,aAAa,EAAE,WAAW,uBAAuB,CAAC;AA+BjE,IAAM,wBAA2C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMA,SAAS,eAAe,UAA2B;AACjD,MAAI,aAAa,OAAW,QAAO;AAGnC,QAAM,UAAU,KAAK,WAAW,IAAI;AACpC,SAAO,KAAK,SAAS,QAAQ;AAC/B;AAKA,SAAS,YAAY,SAA2C;AAC9D,QAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,QAAM,QAAQ,SAAS,gBAAgB;AAEvC,QAAM,QAAwB;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,CAAC,SAAS,eAAe;AAAA,IAC/B,GAAI,SAAS,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;AAAA,EAC3D;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,MACV,gBAAgB;AAAA,IAClB;AAAA,EACF;AAIA,OAAK;AACP;AAoBA,eAAsB,kBAAkB,SAAyD;AAC/F,QAAM,SAAS,YAAY,OAAO;AAClC,QAAM,QAAQ,SAAS,gBAAgB;AAEvC,QAAM,UAAU,MAAM,aAAa,YAAY;AAC/C,QAAM,aAAa,KAAK,SAAS,iBAAiB;AAElD,QAAM,UAAU,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AAEpE,QAAM,UAAU,YAA2B;AACzC,UAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC,EAAE,MAAM,CAAC,MAAe;AACxE,aAAO,MAAM,8BAA8B;AAAA,QACzC,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,MAClD,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,YAAY,SAAS,cAAc,MAAM;AACpD;AAKO,SAAS,yBAA4C;AAC1D,SAAO;AACT;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getNexusDataDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OQLFRJCW.js";
|
|
4
4
|
|
|
5
5
|
// src/config/learning-persistence.ts
|
|
6
6
|
import { mkdirSync } from "fs";
|
|
@@ -45,4 +45,4 @@ export {
|
|
|
45
45
|
isPersistenceEnabled,
|
|
46
46
|
ensureLearningDir
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-2HUC6NZN.js.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
API_TIMEOUTS,
|
|
3
3
|
CLI_TIMEOUTS,
|
|
4
|
-
ConfigError,
|
|
5
4
|
INTERNAL_TIMEOUTS,
|
|
6
5
|
MCP_TIMEOUTS,
|
|
7
6
|
TEST_TIMEOUTS,
|
|
@@ -11,171 +10,11 @@ import {
|
|
|
11
10
|
createGetRateLimitConfig,
|
|
12
11
|
createGetRetryConfig,
|
|
13
12
|
createGetTimeout,
|
|
14
|
-
createGetToolRateLimit
|
|
15
|
-
|
|
16
|
-
err,
|
|
17
|
-
ok
|
|
18
|
-
} from "./chunk-KPM6FF6T.js";
|
|
19
|
-
|
|
20
|
-
// src/adapters/sdk/types.ts
|
|
21
|
-
var PROVIDER_ENV_KEYS = {
|
|
22
|
-
anthropic: "ANTHROPIC_API_KEY",
|
|
23
|
-
openai: "OPENAI_API_KEY",
|
|
24
|
-
google: "GOOGLE_AI_API_KEY",
|
|
25
|
-
"custom-openai": "NEXUS_CUSTOM_API_KEY"
|
|
26
|
-
};
|
|
27
|
-
var CUSTOM_API_BASE_URL_ENV = "NEXUS_CUSTOM_API_BASE_URL";
|
|
28
|
-
var CUSTOM_API_ALLOW_PRIVATE_ENV = "NEXUS_CUSTOM_API_ALLOW_PRIVATE";
|
|
29
|
-
|
|
30
|
-
// src/adapters/sdk/custom-api-validation.ts
|
|
31
|
-
import { isIPv4, isIPv6 } from "net";
|
|
32
|
-
import { lookup as dnsLookup } from "dns/promises";
|
|
33
|
-
var logger = createLogger({ module: "custom-api-validation" });
|
|
34
|
-
function validateCustomApiBaseUrl(raw, opts = {}) {
|
|
35
|
-
if (raw === void 0 || raw.trim() === "") {
|
|
36
|
-
return err(
|
|
37
|
-
new ConfigError(
|
|
38
|
-
"Custom API base URL is required but missing. Set NEXUS_CUSTOM_API_BASE_URL or pass `baseUrl` in config."
|
|
39
|
-
)
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
let url;
|
|
43
|
-
try {
|
|
44
|
-
url = new URL(raw);
|
|
45
|
-
} catch {
|
|
46
|
-
return err(new ConfigError(`Custom API base URL is not a valid URL: ${raw}`));
|
|
47
|
-
}
|
|
48
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
49
|
-
return err(
|
|
50
|
-
new ConfigError(`Custom API base URL must use http or https, got "${url.protocol}" in ${raw}`)
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
const allowPrivate = opts.allowPrivate === true || resolveAllowPrivateFromEnv();
|
|
54
|
-
if (!allowPrivate) {
|
|
55
|
-
const rejection = classifyPrivateHost(url.hostname);
|
|
56
|
-
if (rejection !== null) {
|
|
57
|
-
return err(
|
|
58
|
-
new ConfigError(
|
|
59
|
-
`Custom API base URL rejected (SSRF guard, reason="${rejection.reason}"): ${rejection.message}. Set ${CUSTOM_API_ALLOW_PRIVATE_ENV}=1 to bypass if the gateway runs on a trusted internal host.`
|
|
60
|
-
)
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return ok(url);
|
|
65
|
-
}
|
|
66
|
-
function resolveAllowPrivateFromEnv() {
|
|
67
|
-
const v = process.env[CUSTOM_API_ALLOW_PRIVATE_ENV];
|
|
68
|
-
return v === "1" || v === "true";
|
|
69
|
-
}
|
|
70
|
-
function classifyPrivateHost(hostname) {
|
|
71
|
-
const normalized = normalizeHost(hostname);
|
|
72
|
-
const literal = classifyIpAddress(normalized);
|
|
73
|
-
if (literal !== "not_an_ip") {
|
|
74
|
-
return literal;
|
|
75
|
-
}
|
|
76
|
-
if (normalized === "localhost" || normalized.endsWith(".localhost") || normalized.endsWith(".local")) {
|
|
77
|
-
return {
|
|
78
|
-
reason: "loopback",
|
|
79
|
-
message: `hostname "${hostname}" resolves to loopback/mDNS`
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
function normalizeHost(hostname) {
|
|
85
|
-
const stripped = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
86
|
-
return stripped.toLowerCase();
|
|
87
|
-
}
|
|
88
|
-
function classifyIpAddress(normalized) {
|
|
89
|
-
if (isIPv4(normalized)) {
|
|
90
|
-
return classifyIPv4(normalized);
|
|
91
|
-
}
|
|
92
|
-
if (isIPv6(normalized)) {
|
|
93
|
-
return classifyIPv6(normalized);
|
|
94
|
-
}
|
|
95
|
-
return "not_an_ip";
|
|
96
|
-
}
|
|
97
|
-
async function assertCustomApiHostResolvesPublic(hostname, opts = {}) {
|
|
98
|
-
const allowPrivate = opts.allowPrivate === true || resolveAllowPrivateFromEnv();
|
|
99
|
-
if (allowPrivate) {
|
|
100
|
-
return ok(void 0);
|
|
101
|
-
}
|
|
102
|
-
const normalized = normalizeHost(hostname);
|
|
103
|
-
if (isIPv4(normalized) || isIPv6(normalized)) {
|
|
104
|
-
return ok(void 0);
|
|
105
|
-
}
|
|
106
|
-
let addresses;
|
|
107
|
-
try {
|
|
108
|
-
addresses = await dnsLookup(hostname, { all: true });
|
|
109
|
-
} catch (error) {
|
|
110
|
-
logger.debug("custom-api SSRF resolve check: DNS lookup failed, skipping (fail-open)", {
|
|
111
|
-
hostname,
|
|
112
|
-
error: error instanceof Error ? error.message : String(error)
|
|
113
|
-
});
|
|
114
|
-
return ok(void 0);
|
|
115
|
-
}
|
|
116
|
-
const rejection = firstPrivateAddress(addresses);
|
|
117
|
-
if (rejection !== null) {
|
|
118
|
-
return err(
|
|
119
|
-
new ConfigError(
|
|
120
|
-
`Custom API base URL rejected (SSRF resolve guard, reason="${rejection.reason}"): hostname "${hostname}" resolved to ${rejection.message}. Set ${CUSTOM_API_ALLOW_PRIVATE_ENV}=1 to bypass if the gateway runs on a trusted internal host.`
|
|
121
|
-
)
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
return ok(void 0);
|
|
125
|
-
}
|
|
126
|
-
function firstPrivateAddress(addresses) {
|
|
127
|
-
for (const { address } of addresses) {
|
|
128
|
-
const rejection = classifyIpAddress(address.toLowerCase());
|
|
129
|
-
if (rejection !== null && rejection !== "not_an_ip") {
|
|
130
|
-
return rejection;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
var IPV4_RULES = [
|
|
136
|
-
{ match: (a) => a === 127, reason: "loopback", label: "IPv4 loopback" },
|
|
137
|
-
{ match: (a) => a === 10, reason: "private_range", label: "IPv4 private (10/8)" },
|
|
138
|
-
{
|
|
139
|
-
match: (a, b) => a === 172 && b >= 16 && b <= 31,
|
|
140
|
-
reason: "private_range",
|
|
141
|
-
label: "IPv4 private (172.16/12)"
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
match: (a, b) => a === 192 && b === 168,
|
|
145
|
-
reason: "private_range",
|
|
146
|
-
label: "IPv4 private (192.168/16)"
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
match: (a, b) => a === 169 && b === 254,
|
|
150
|
-
reason: "link_local",
|
|
151
|
-
label: "IPv4 link-local (169.254/16 \u2014 AWS IMDS)"
|
|
152
|
-
},
|
|
153
|
-
{ match: (a) => a === 0, reason: "reserved", label: "IPv4 reserved (0/8)" }
|
|
154
|
-
];
|
|
155
|
-
function classifyIPv4(ip) {
|
|
156
|
-
const parts = ip.split(".").map((p) => Number.parseInt(p, 10));
|
|
157
|
-
if (parts.length !== 4 || parts.some((n) => Number.isNaN(n))) return null;
|
|
158
|
-
const [a, b] = parts;
|
|
159
|
-
for (const rule of IPV4_RULES) {
|
|
160
|
-
if (rule.match(a, b)) {
|
|
161
|
-
return { reason: rule.reason, message: `${rule.label} (${ip})` };
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
function classifyIPv6(ip) {
|
|
167
|
-
const lower = ip.toLowerCase();
|
|
168
|
-
if (lower === "::1") return { reason: "loopback", message: `IPv6 loopback (${ip})` };
|
|
169
|
-
if (lower.startsWith("fe80:"))
|
|
170
|
-
return { reason: "link_local", message: `IPv6 link-local (${ip})` };
|
|
171
|
-
if (/^fc|^fd/.test(lower)) {
|
|
172
|
-
return { reason: "private_range", message: `IPv6 unique-local (${ip}, fc00::/7)` };
|
|
173
|
-
}
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
13
|
+
createGetToolRateLimit
|
|
14
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
176
15
|
|
|
177
16
|
// src/config/defaults.ts
|
|
178
|
-
var CUSTOM_API_DEFAULT_MODEL = "gpt-
|
|
17
|
+
var CUSTOM_API_DEFAULT_MODEL = "gpt-5.5";
|
|
179
18
|
var DEFAULTS = {
|
|
180
19
|
/**
|
|
181
20
|
* Default timeout settings in milliseconds.
|
|
@@ -388,12 +227,7 @@ var getToolRateLimit = createGetToolRateLimit(DEFAULTS.TOOL_RATE_LIMITS);
|
|
|
388
227
|
var getEnvVarDocumentation = createGetEnvVarDocumentation(DEFAULTS);
|
|
389
228
|
|
|
390
229
|
export {
|
|
391
|
-
PROVIDER_ENV_KEYS,
|
|
392
|
-
CUSTOM_API_BASE_URL_ENV,
|
|
393
|
-
CUSTOM_API_ALLOW_PRIVATE_ENV,
|
|
394
|
-
validateCustomApiBaseUrl,
|
|
395
|
-
assertCustomApiHostResolvesPublic,
|
|
396
230
|
CUSTOM_API_DEFAULT_MODEL,
|
|
397
231
|
DEFAULTS
|
|
398
232
|
};
|
|
399
|
-
//# sourceMappingURL=chunk-
|
|
233
|
+
//# sourceMappingURL=chunk-4OZPWLKY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts"],"sourcesContent":["/**\n * Central Configuration Defaults\n *\n * Consolidates common default values used across the codebase.\n * This prevents scattered magic numbers and ensures consistency.\n *\n * Usage:\n * import { DEFAULTS, getTimeout, TIMEOUT_PROFILES } from '../config/defaults.js';\n * const timeout = options.timeout ?? DEFAULTS.TIMEOUT_DEFAULTS.cliMs;\n * const cliTimeout = getTimeoutForCli('claude', 'complex');\n *\n * Environment overrides can be added via NEXUS_* environment variables.\n *\n * @module config/defaults\n * (Source: Central config consolidation initiative)\n */\n\n// Re-export types from defaults-types\nexport type {\n TaskComplexity,\n TimeoutProfile,\n KnownCliName,\n TimeoutDefaults,\n RateLimitDefaults,\n ToolRateLimitConfig,\n RetryDefaults,\n CircuitBreakerDefaults,\n} from './defaults-types.js';\n\nexport { isTaskComplexity, isKnownCliName } from './defaults-types.js';\n\n// Re-export timeout profiles (delegates to config/timeouts.ts)\nexport {\n TIMEOUT_PROFILES,\n getTimeoutProfile,\n getTimeoutForCli,\n} from './defaults-timeout-profiles.js';\n\n// Re-export canonical timeout modules (Issue #984)\nexport {\n CLI_TIMEOUTS,\n VOTE_TIMEOUTS,\n MCP_TIMEOUTS,\n WORKFLOW_TIMEOUTS,\n GRAPH_TIMEOUTS,\n PER_CLI_TASK_TIMEOUTS,\n API_TIMEOUTS,\n INTERNAL_TIMEOUTS,\n TEST_TIMEOUTS,\n TIMEOUT_ENV_VARS,\n getCliTimeoutProfile,\n getCliTimeout,\n resolveVoteTimeout,\n resolveEnvTimeout,\n validateTimeout,\n BACKOFF_CONFIG,\n AGENT_ROUTER_TIMEOUTS,\n CODEX_MCP_TIMEOUTS,\n} from './timeouts.js';\n\n// Re-export env helpers (internal use)\nexport { parseIntEnv, parseFloatEnv, parseBoolEnv } from './defaults-env.js';\n\nimport {\n createGetTimeout,\n createGetRetryConfig,\n createGetRateLimitConfig,\n createGetCircuitBreakerConfig,\n createGetToolRateLimit,\n createGetEnvVarDocumentation,\n} from './defaults-env.js';\nimport {\n API_TIMEOUTS as _API,\n WORKFLOW_TIMEOUTS as _WF,\n MCP_TIMEOUTS as _MCP,\n INTERNAL_TIMEOUTS as _INT,\n TEST_TIMEOUTS as _TEST,\n CLI_TIMEOUTS as _CLI,\n} from './timeouts.js';\n\n// ============================================================================\n// Default Model IDs (#2200 Child 4)\n// ============================================================================\n\n/**\n * Default model identifier for the custom OpenAI-compatible API gateway.\n *\n * Used by both `cli/setup-custom-api.ts` (write to nexus-agents.yaml) and\n * `adapters/auto-adapter.ts` (NEXUS_CUSTOM_MODEL env-var fallback). Single\n * source of truth so changes flow through all consumers.\n *\n * `gpt-4o` was the previous value, chosen because it was widely supported across\n * OpenAI-compatible gateways. It is now END-OF-LIFE at OpenAI, so defaulting to\n * it points new operators at a model their gateway may well refuse (#4408).\n *\n * A custom gateway can serve anything, so ANY default here is a guess — the\n * right long-term answer is to discover the model list from the endpoint\n * (`GET /v1/models`, which this repo already implements) rather than assume one.\n * Until that is wired, guess a current model instead of a retired one.\n *\n * Operators are expected to override via `NEXUS_CUSTOM_MODEL`.\n */\nexport const CUSTOM_API_DEFAULT_MODEL = 'gpt-5.5';\n\n// ============================================================================\n// Central Defaults Object\n// ============================================================================\n\n/**\n * Central defaults object containing all configuration categories.\n */\nexport const DEFAULTS = {\n /**\n * Default timeout settings in milliseconds.\n * Values sourced from config/timeouts.ts (Issue #984).\n */\n TIMEOUT_DEFAULTS: {\n /** CLI tool execution timeout in milliseconds. */\n cliMs: _CLI.default.standard,\n // cliSimpleMs / cliComplexMs removed in #4180 — never read by any production\n // code (the matching NEXUS_TIMEOUT_CLISIMPLE/CLICOMPLEX env vars were silent\n // no-ops, #2977 class). Per-complexity CLI timeouts come from\n // getTimeoutForCli/TIMEOUT_PROFILES (CLI_TIMEOUTS in config/timeouts.ts).\n /** API request timeout in milliseconds. */\n apiMs: _API.defaultMs,\n /** Maximum API timeout in milliseconds. */\n apiMaxMs: _API.maxMs,\n /** Workflow-level timeout in milliseconds (5 minutes). */\n workflowMs: _WF.workflowMs,\n /** Maximum workflow timeout in milliseconds (30 minutes). */\n workflowMaxMs: _WF.workflowMaxMs,\n /** Step-level timeout in milliseconds. */\n stepMs: _INT.selfEvalMs,\n /** MCP operation default timeout in milliseconds (generic, not per-tool). */\n mcpMs: _API.defaultMs,\n /** MCP operation maximum timeout in milliseconds. */\n mcpMaxMs: _MCP.maxMs,\n /** Health check timeout in milliseconds. */\n healthCheckMs: _INT.healthCheckMs,\n /** Global test run timeout in milliseconds (10 minutes). */\n testGlobalMs: _TEST.globalMs,\n /** Per-task test timeout in milliseconds. */\n testTaskMs: _TEST.taskMs,\n /** Circuit breaker reset timeout in milliseconds. */\n circuitBreakerResetMs: _INT.circuitBreakerResetMs,\n },\n\n /**\n * Default rate limit settings for outbound operations.\n */\n RATE_LIMIT_DEFAULTS: {\n /** Global requests per minute. */\n requestsPerMinute: 60,\n /** Whether rate limiting is enabled by default. */\n enabled: true,\n /** Maximum number of concurrent requests. */\n maxConcurrent: 4,\n /** Token bucket capacity. */\n capacity: 100,\n /** Token bucket refill rate per second. */\n refillRate: 10,\n /** Refill interval in milliseconds. */\n refillIntervalMs: 100,\n },\n\n /**\n * Per-tool rate limit defaults for MCP tools.\n * (Source: Issue #274 Phase 2 - per-tool rate limits)\n */\n TOOL_RATE_LIMITS: {\n orchestrate: { capacity: 10, refillRate: 10, refillIntervalMs: 60_000 },\n delegate: { capacity: 20, refillRate: 20, refillIntervalMs: 60_000 },\n workflow: { capacity: 5, refillRate: 5, refillIntervalMs: 60_000 },\n expert: { capacity: 30, refillRate: 30, refillIntervalMs: 60_000 },\n },\n\n /**\n * Default retry strategy settings for transient failures.\n */\n RETRY_DEFAULTS: {\n /** Maximum retry attempts before failing. */\n maxRetries: 3,\n /** Base delay between retries in milliseconds. */\n baseDelayMs: 1_000,\n /** Maximum delay between retries in milliseconds. */\n maxDelayMs: 30_000,\n /** Jitter factor (0-1) to randomize retry delays. */\n jitterFactor: 0.1,\n },\n\n /**\n * Workflow-specific retry defaults.\n */\n WORKFLOW_RETRY_DEFAULTS: {\n /** Maximum retry attempts for workflow steps. */\n maxRetries: 2,\n /** Base delay for workflow retries in milliseconds. */\n baseDelayMs: 2_000,\n /** Maximum delay for workflow retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for workflow retries. */\n jitterFactor: 0.15,\n },\n\n /**\n * CLI-specific retry defaults.\n */\n CLI_RETRY_DEFAULTS: {\n /** Maximum retry attempts for CLI operations. */\n maxRetries: 2,\n /** Base delay for CLI retries in milliseconds. */\n baseDelayMs: 5_000,\n /** Maximum delay for CLI retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for CLI retries. */\n jitterFactor: 0.2,\n },\n\n /**\n * Test framework retry defaults.\n */\n TEST_RETRY_DEFAULTS: {\n /** Maximum retries per test task. */\n maxRetries: 2,\n /** Whether to retry failed tasks by default. */\n retryFailedTasks: true,\n },\n\n /**\n * Default buffer sizing for batching and chunked processing.\n */\n BUFFER_DEFAULTS: {\n /** Preferred batch size for bulk operations. */\n batchSize: 100,\n /** Chunk size for streaming or segmented processing. */\n chunkSize: 256,\n /** Maximum items allowed in a buffer. */\n maxItems: 1_000,\n /** Maximum memory size in bytes (10 MB). */\n maxMemoryBytes: 10 * 1024 * 1024,\n /** Log buffer flush interval in milliseconds. */\n logFlushIntervalMs: 5_000,\n },\n\n // WORKER_DEFAULTS removed in #2977 — the eight settings under this category\n // (maxWorkers, poolSize, idleTimeoutMs, workflowMaxParallel, testParallelism,\n // evaluationMaxWorkers, eventBusMaxHistory, swarmObserverMaxEvents) had zero\n // production consumers. `getWorkerConfig()` was never called from anywhere\n // in src/, and the matching NEXUS_WORKERS_* env vars were silent no-ops.\n // Silent config rot is worse than missing knobs; re-add when a concrete\n // consumer exists.\n\n /**\n * Default circuit breaker settings.\n * (Source: Issue #81 - Circuit breaker for CLI failures)\n */\n CIRCUIT_BREAKER_DEFAULTS: {\n /** Failure threshold to open circuit. */\n failureThreshold: 5,\n /** Reset timeout in milliseconds. */\n resetTimeoutMs: 30_000,\n /** Success threshold to close circuit in half-open state. */\n halfOpenSuccessThreshold: 2,\n /** Whether to count timeouts as failures. */\n countTimeoutsAsFailures: true,\n /** Whether to count auth failures as failures. */\n countAuthFailuresAsFailures: false,\n /** Whether to count rate limit errors as failures (#1529). */\n countRateLimitsAsFailures: true,\n /** Maximum requests allowed in half-open state. */\n halfOpenMaxRequests: 3,\n },\n\n /**\n * Default context/memory settings.\n */\n CONTEXT_DEFAULTS: {\n /** Maximum context tokens. */\n maxTokens: 100_000,\n /** Token budget warning threshold (80%). */\n warningThreshold: 0.8,\n /** Token budget critical threshold (95%). */\n criticalThreshold: 0.95,\n /** Maximum history entries to retain. */\n maxHistoryEntries: 1_000,\n },\n\n /**\n * Default provider/model settings.\n */\n PROVIDER_DEFAULTS: {\n /** Default timeout for provider API calls in ms. */\n timeout: 30_000,\n /** Maximum retries for provider requests. */\n maxRetries: 3,\n /** Default model tier. */\n defaultTier: 'balanced' as const,\n /** Default temperature. */\n temperatureDefault: 0.3,\n /** Minimum temperature. */\n temperatureMin: 0,\n /** Maximum temperature. */\n temperatureMax: 1,\n /** Billing mode: 'plan' (monthly subscription) or 'api' (pay-per-token). Env: NEXUS_BILLING_MODE */\n billingMode: 'plan' as const,\n },\n\n /**\n * Security-related defaults.\n */\n SECURITY_DEFAULTS: {\n /** Maximum system prompt length in characters. */\n maxSystemPromptLength: 4_000,\n /** Default policy execution mode. */\n policyDefaultMode: 'read-only' as const,\n /** Default policy mode. */\n policyMode: 'enforce' as const,\n /** Default sandbox mode. */\n sandboxMode: 'policy' as const,\n /** Whether to fall back to policy mode if container unavailable. */\n sandboxFallbackToPolicy: true,\n /** Whether network is enabled in container mode. */\n sandboxNetworkEnabled: false,\n },\n} as const;\n\n// ============================================================================\n// Type Exports for DEFAULTS\n// ============================================================================\n\n/** Type for the DEFAULTS object (readonly/const). */\nexport type DefaultsConfig = typeof DEFAULTS;\n\n/** Type for timeout defaults (readonly/const). */\nexport type TimeoutDefaultsConst = typeof DEFAULTS.TIMEOUT_DEFAULTS;\n\n/** Type for rate limit defaults (readonly/const). */\nexport type RateLimitDefaultsConst = typeof DEFAULTS.RATE_LIMIT_DEFAULTS;\n\n/** Type for retry defaults (readonly/const). */\nexport type RetryDefaultsConst = typeof DEFAULTS.RETRY_DEFAULTS;\n\n/** Type for buffer defaults (readonly/const). */\nexport type BufferDefaults = typeof DEFAULTS.BUFFER_DEFAULTS;\n\n/** Type for circuit breaker defaults (readonly/const). */\nexport type CircuitBreakerDefaultsConst = typeof DEFAULTS.CIRCUIT_BREAKER_DEFAULTS;\n\n/** Type for context defaults (readonly/const). */\nexport type ContextDefaults = typeof DEFAULTS.CONTEXT_DEFAULTS;\n\n/** Type for provider defaults (readonly/const). */\nexport type ProviderDefaults = typeof DEFAULTS.PROVIDER_DEFAULTS;\n\n/** Type for security defaults (readonly/const). */\nexport type SecurityDefaults = typeof DEFAULTS.SECURITY_DEFAULTS;\n\n// ============================================================================\n// Environment Override Functions (bound to DEFAULTS)\n// ============================================================================\n\n/**\n * Get timeout with environment override support.\n *\n * @param key - Timeout key (e.g., 'cliMs', 'apiMs')\n * @returns Timeout value in milliseconds\n */\nexport const getTimeout = createGetTimeout(DEFAULTS.TIMEOUT_DEFAULTS);\n\n/**\n * Get retry config with environment override support.\n *\n * @returns Retry configuration\n */\nexport const getRetryConfig = createGetRetryConfig(DEFAULTS.RETRY_DEFAULTS);\n\n/**\n * Get rate limit config with environment override support.\n *\n * @returns Rate limit configuration\n */\nexport const getRateLimitConfig = createGetRateLimitConfig(DEFAULTS.RATE_LIMIT_DEFAULTS);\n\n/**\n * Gets the circuit breaker configuration.\n *\n * @returns Circuit breaker configuration\n */\nexport const getCircuitBreakerConfig = createGetCircuitBreakerConfig(\n DEFAULTS.CIRCUIT_BREAKER_DEFAULTS\n);\n\n/**\n * Gets the tool rate limit configuration for a specific tool category.\n *\n * @param tool - Tool category (orchestrate, delegate, workflow, expert)\n * @returns Rate limit configuration\n */\nexport const getToolRateLimit = createGetToolRateLimit(DEFAULTS.TOOL_RATE_LIMITS);\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/**\n * Returns documentation for all environment variable overrides.\n *\n * @returns Markdown documentation string\n */\nexport const getEnvVarDocumentation = createGetEnvVarDocumentation(DEFAULTS);\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
MODEL_IDS,
|
|
4
4
|
getTimeProvider,
|
|
5
5
|
resolveModelIdentitySync
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
7
7
|
|
|
8
8
|
// src/config/model-availability.ts
|
|
9
9
|
var DEFAULT_TTL_MS = 6e4;
|
|
@@ -150,4 +150,4 @@ export {
|
|
|
150
150
|
resetAvailabilityCache,
|
|
151
151
|
filterAvailableModels
|
|
152
152
|
};
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-5Y4RWZ3M.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getTimeProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YAJ4XUD2.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-
|
|
208
|
+
//# sourceMappingURL=chunk-67CGSBQW.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
TASK_CATEGORIES,
|
|
3
3
|
getAdaptiveBonus,
|
|
4
4
|
getOutcomeStore
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YAJ4XUD2.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-
|
|
109
|
+
//# sourceMappingURL=chunk-67ZQSIGP.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
getErrorMessage,
|
|
9
9
|
ok,
|
|
10
10
|
parseBoolEnv
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
12
12
|
|
|
13
13
|
// src/cli/research-helpers-io.ts
|
|
14
14
|
import * as fs2 from "fs/promises";
|
|
@@ -146,4 +146,4 @@ export {
|
|
|
146
146
|
loadPapersRegistry,
|
|
147
147
|
savePapersRegistry
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-AHJYZNQU.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getRandomProvider,
|
|
3
3
|
getTimeProvider
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YAJ4XUD2.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-
|
|
27
|
+
//# sourceMappingURL=chunk-C7TM6GM7.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getDefaultRegistry
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
4
4
|
import {
|
|
5
5
|
getNexusDataDir
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OQLFRJCW.js";
|
|
7
7
|
|
|
8
8
|
// src/learning/usage-log.ts
|
|
9
9
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync } from "fs";
|
|
@@ -124,4 +124,4 @@ export {
|
|
|
124
124
|
loadUsageEvents,
|
|
125
125
|
rollupByModel
|
|
126
126
|
};
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-CFZGSZEX.js.map
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
computeCostDetail,
|
|
3
3
|
recordUsageEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CFZGSZEX.js";
|
|
5
5
|
import {
|
|
6
6
|
BaseAdapter,
|
|
7
7
|
createStream,
|
|
8
8
|
planOptionalParams,
|
|
9
9
|
requireApiKey,
|
|
10
10
|
validateApiKeyPresence
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TYLCYSUQ.js";
|
|
12
|
+
import {
|
|
13
|
+
assertCustomApiHostResolvesPublic
|
|
14
|
+
} from "./chunk-LZ2ATWVV.js";
|
|
12
15
|
import {
|
|
13
16
|
ConfigError,
|
|
14
17
|
ModelCapability,
|
|
@@ -19,7 +22,7 @@ import {
|
|
|
19
22
|
getTimeProvider,
|
|
20
23
|
getTokenEstimator,
|
|
21
24
|
ok
|
|
22
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-YAJ4XUD2.js";
|
|
23
26
|
|
|
24
27
|
// src/adapters/openai-types.ts
|
|
25
28
|
var OPENAI_MODELS = {
|
|
@@ -701,10 +704,37 @@ function readGatewayFromOpencode() {
|
|
|
701
704
|
if (fromFile === null) return null;
|
|
702
705
|
return { baseUrl: fromFile.baseURL, apiKey: fromFile.apiKey };
|
|
703
706
|
}
|
|
707
|
+
var MAX_DISCOVERED_MODELS = 256;
|
|
708
|
+
var MODEL_DISCOVERY_TIMEOUT_MS = 1e4;
|
|
709
|
+
function hostnameOf(baseUrl) {
|
|
710
|
+
try {
|
|
711
|
+
return new URL(baseUrl).hostname;
|
|
712
|
+
} catch {
|
|
713
|
+
return baseUrl;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
704
716
|
async function discoverModels(config) {
|
|
717
|
+
const hostCheck = await assertCustomApiHostResolvesPublic(hostnameOf(config.baseUrl));
|
|
718
|
+
if (!hostCheck.ok) {
|
|
719
|
+
return err(new ConfigError(`Gateway URL rejected: ${hostCheck.error.message}`));
|
|
720
|
+
}
|
|
705
721
|
try {
|
|
706
|
-
const client = new OpenAI2({
|
|
722
|
+
const client = new OpenAI2({
|
|
723
|
+
baseURL: config.baseUrl,
|
|
724
|
+
apiKey: config.apiKey,
|
|
725
|
+
// Discovery runs during server bootstrap, so an unresponsive gateway must
|
|
726
|
+
// not stall startup indefinitely. The SDK's own default is far longer.
|
|
727
|
+
timeout: MODEL_DISCOVERY_TIMEOUT_MS,
|
|
728
|
+
maxRetries: 1
|
|
729
|
+
});
|
|
707
730
|
const list = await client.models.list();
|
|
731
|
+
if (list.data.length > MAX_DISCOVERED_MODELS) {
|
|
732
|
+
return err(
|
|
733
|
+
new ConfigError(
|
|
734
|
+
`Gateway ${config.baseUrl} listed ${String(list.data.length)} models, above the ${String(MAX_DISCOVERED_MODELS)} cap. Refusing to build an adapter per model.`
|
|
735
|
+
)
|
|
736
|
+
);
|
|
737
|
+
}
|
|
708
738
|
const models = list.data.map((m) => ({
|
|
709
739
|
id: m.id,
|
|
710
740
|
created: m.created,
|
|
@@ -795,4 +825,4 @@ export {
|
|
|
795
825
|
discoverModels,
|
|
796
826
|
buildOpenAICompatAdapters
|
|
797
827
|
};
|
|
798
|
-
//# sourceMappingURL=chunk-
|
|
828
|
+
//# sourceMappingURL=chunk-CXF5KR7V.js.map
|