nexus-agents 2.92.4 → 2.93.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-WUHKXBWX.js → child-mcp-config-WNISXFYD.js} +2 -2
- package/dist/{chunk-Y7E5ZWRQ.js → chunk-2IBJC2EP.js} +2 -2
- package/dist/chunk-2IBJC2EP.js.map +1 -0
- package/dist/{chunk-2SMTCNXP.js → chunk-2T4NV6QT.js} +2 -2
- package/dist/{chunk-3HTUYAKS.js → chunk-4A4WPM75.js} +10 -126
- package/dist/chunk-4A4WPM75.js.map +1 -0
- package/dist/{chunk-6Q33PBXC.js → chunk-57OH2O2U.js} +2 -2
- package/dist/{chunk-VUVCSWMC.js → chunk-5BTRDVWC.js} +5 -5
- package/dist/{chunk-TWAH7VM2.js → chunk-AZP66FIA.js} +3 -3
- package/dist/{chunk-X5BQF6HM.js → chunk-BHA6V7GK.js} +4 -4
- package/dist/{chunk-E6W4Z6GN.js → chunk-BNHBZRU7.js} +3 -3
- package/dist/{chunk-EFHZHCF2.js → chunk-CPH6LKXO.js} +2 -2
- package/dist/{chunk-27CNQPQ4.js → chunk-DTFMYM3V.js} +2 -2
- package/dist/{chunk-AQTHLUCP.js → chunk-E3QWWP67.js} +2 -2
- package/dist/{chunk-7QXEK3O6.js → chunk-FTCU55O6.js} +4 -4
- package/dist/{chunk-IHPYT6WU.js → chunk-G5IDRWWI.js} +15 -6
- package/dist/chunk-G5IDRWWI.js.map +1 -0
- package/dist/{chunk-W5I6L4UT.js → chunk-HKISF2E7.js} +191 -11
- package/dist/chunk-HKISF2E7.js.map +1 -0
- package/dist/{chunk-4LEUIAYB.js → chunk-IJ2AZZVH.js} +66 -48
- package/dist/chunk-IJ2AZZVH.js.map +1 -0
- package/dist/{chunk-YEQE7WLP.js → chunk-JCETWDU7.js} +2 -2
- package/dist/{chunk-3FVSYMHK.js → chunk-JEBWSHSU.js} +2 -2
- package/dist/{chunk-4GOT42ZA.js → chunk-K7VGX37L.js} +3 -3
- package/dist/{chunk-JCYCITBK.js → chunk-LJMO5P6O.js} +38 -128
- package/dist/chunk-LJMO5P6O.js.map +1 -0
- package/dist/chunk-NESW2TTD.js +134 -0
- package/dist/chunk-NESW2TTD.js.map +1 -0
- package/dist/{chunk-JYIKPBXW.js → chunk-RTUZSR4R.js} +2 -2
- package/dist/{chunk-MZFWRU6E.js → chunk-SHSKW5ML.js} +7 -7
- package/dist/{chunk-SFZESA5O.js → chunk-SMGH2B3A.js} +2 -2
- package/dist/{chunk-PRGNJRID.js → chunk-SORBJPRA.js} +2 -2
- package/dist/{chunk-3LKW4IEW.js → chunk-T73G67GT.js} +3 -3
- package/dist/{chunk-57HMLBYN.js → chunk-ULBKFMVO.js} +2 -2
- package/dist/{chunk-VYNNVUY6.js → chunk-VSG6RSE6.js} +3 -3
- package/dist/{chunk-EAT4GTMT.js → chunk-WU3SUA35.js} +2 -2
- package/dist/{chunk-S6FXRXYE.js → chunk-XVY3I7JT.js} +7 -7
- package/dist/{chunk-CGSVTROC.js → chunk-ZOAU7RE4.js} +6 -4
- package/dist/chunk-ZOAU7RE4.js.map +1 -0
- package/dist/{chunk-52ACUN6T.js → chunk-ZYHHDPFW.js} +4 -4
- package/dist/{cli-circuit-breaker-4SWB6DEB.js → cli-circuit-breaker-6E4E2IU7.js} +4 -4
- package/dist/cli.js +109 -38
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-NLVKSTA2.js → composite-router-MQOPXLVV.js} +2 -2
- package/dist/{consensus-vote-4RIUUEZQ.js → consensus-vote-ZRADOLXH.js} +13 -12
- package/dist/{context-retriever-C4CNVKR5.js → context-retriever-TZGIETJO.js} +6 -6
- package/dist/{doctor-deep-QSVGAHAO.js → doctor-deep-OU2WC55V.js} +3 -3
- package/dist/{expert-bridge-VIWFPPGZ.js → expert-bridge-WP5ZWXFY.js} +4 -4
- package/dist/{factory-NNSXCD25.js → factory-2TN2VZTR.js} +5 -5
- package/dist/{factory-T3SEZUGW.js → factory-RJTRVII5.js} +5 -5
- package/dist/index.d.ts +54 -9
- package/dist/index.js +199 -55
- package/dist/index.js.map +1 -1
- package/dist/{init-opencode-WEKHD7YE.js → init-opencode-AYMNMWU7.js} +5 -5
- package/dist/{issue-triage-VB5CVE43.js → issue-triage-QIVZN3PJ.js} +5 -5
- package/dist/{pr-reviewer-helpers-CI72F4XM.js → pr-reviewer-helpers-P24OBKVM.js} +4 -4
- package/dist/{registry-command-VNFULRTL.js → registry-command-KWWOKJ5C.js} +2 -2
- package/dist/{repo-security-plan-5MFY7GGQ.js → repo-security-plan-KZNEXDCI.js} +3 -3
- package/dist/{research-helpers-synthesize-CNZ4C3FN.js → research-helpers-synthesize-DH5PPX7A.js} +4 -3
- package/dist/{routing-memory-PYO46COZ.js → routing-memory-AGHJQTRH.js} +2 -2
- package/dist/{session-memory-HGCDSZ5R.js → session-memory-O24IVZAW.js} +3 -3
- package/dist/{setup-command-E35O56BN.js → setup-command-NBXZ4NGV.js} +12 -11
- package/dist/{setup-config-QPS4K5QU.js → setup-config-Y4JA5QWO.js} +3 -3
- package/dist/{setup-custom-api-SP2ZAVGC.js → setup-custom-api-UNX4OJEX.js} +5 -4
- package/dist/{setup-custom-api-SP2ZAVGC.js.map → setup-custom-api-UNX4OJEX.js.map} +1 -1
- package/dist/{tool-memory-SDPIAV2S.js → tool-memory-UEQNXIGC.js} +5 -5
- package/dist/{weather-report-RWAMQHBL.js → weather-report-S5YXRY7G.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-3HTUYAKS.js.map +0 -1
- package/dist/chunk-4LEUIAYB.js.map +0 -1
- package/dist/chunk-CGSVTROC.js.map +0 -1
- package/dist/chunk-IHPYT6WU.js.map +0 -1
- package/dist/chunk-JCYCITBK.js.map +0 -1
- package/dist/chunk-W5I6L4UT.js.map +0 -1
- package/dist/chunk-Y7E5ZWRQ.js.map +0 -1
- /package/dist/{child-mcp-config-WUHKXBWX.js.map → child-mcp-config-WNISXFYD.js.map} +0 -0
- /package/dist/{chunk-2SMTCNXP.js.map → chunk-2T4NV6QT.js.map} +0 -0
- /package/dist/{chunk-6Q33PBXC.js.map → chunk-57OH2O2U.js.map} +0 -0
- /package/dist/{chunk-VUVCSWMC.js.map → chunk-5BTRDVWC.js.map} +0 -0
- /package/dist/{chunk-TWAH7VM2.js.map → chunk-AZP66FIA.js.map} +0 -0
- /package/dist/{chunk-X5BQF6HM.js.map → chunk-BHA6V7GK.js.map} +0 -0
- /package/dist/{chunk-E6W4Z6GN.js.map → chunk-BNHBZRU7.js.map} +0 -0
- /package/dist/{chunk-EFHZHCF2.js.map → chunk-CPH6LKXO.js.map} +0 -0
- /package/dist/{chunk-27CNQPQ4.js.map → chunk-DTFMYM3V.js.map} +0 -0
- /package/dist/{chunk-AQTHLUCP.js.map → chunk-E3QWWP67.js.map} +0 -0
- /package/dist/{chunk-7QXEK3O6.js.map → chunk-FTCU55O6.js.map} +0 -0
- /package/dist/{chunk-YEQE7WLP.js.map → chunk-JCETWDU7.js.map} +0 -0
- /package/dist/{chunk-3FVSYMHK.js.map → chunk-JEBWSHSU.js.map} +0 -0
- /package/dist/{chunk-4GOT42ZA.js.map → chunk-K7VGX37L.js.map} +0 -0
- /package/dist/{chunk-JYIKPBXW.js.map → chunk-RTUZSR4R.js.map} +0 -0
- /package/dist/{chunk-MZFWRU6E.js.map → chunk-SHSKW5ML.js.map} +0 -0
- /package/dist/{chunk-SFZESA5O.js.map → chunk-SMGH2B3A.js.map} +0 -0
- /package/dist/{chunk-PRGNJRID.js.map → chunk-SORBJPRA.js.map} +0 -0
- /package/dist/{chunk-3LKW4IEW.js.map → chunk-T73G67GT.js.map} +0 -0
- /package/dist/{chunk-57HMLBYN.js.map → chunk-ULBKFMVO.js.map} +0 -0
- /package/dist/{chunk-VYNNVUY6.js.map → chunk-VSG6RSE6.js.map} +0 -0
- /package/dist/{chunk-EAT4GTMT.js.map → chunk-WU3SUA35.js.map} +0 -0
- /package/dist/{chunk-S6FXRXYE.js.map → chunk-XVY3I7JT.js.map} +0 -0
- /package/dist/{chunk-52ACUN6T.js.map → chunk-ZYHHDPFW.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-4SWB6DEB.js.map → cli-circuit-breaker-6E4E2IU7.js.map} +0 -0
- /package/dist/{composite-router-NLVKSTA2.js.map → composite-router-MQOPXLVV.js.map} +0 -0
- /package/dist/{consensus-vote-4RIUUEZQ.js.map → consensus-vote-ZRADOLXH.js.map} +0 -0
- /package/dist/{context-retriever-C4CNVKR5.js.map → context-retriever-TZGIETJO.js.map} +0 -0
- /package/dist/{doctor-deep-QSVGAHAO.js.map → doctor-deep-OU2WC55V.js.map} +0 -0
- /package/dist/{expert-bridge-VIWFPPGZ.js.map → expert-bridge-WP5ZWXFY.js.map} +0 -0
- /package/dist/{factory-NNSXCD25.js.map → factory-2TN2VZTR.js.map} +0 -0
- /package/dist/{factory-T3SEZUGW.js.map → factory-RJTRVII5.js.map} +0 -0
- /package/dist/{init-opencode-WEKHD7YE.js.map → init-opencode-AYMNMWU7.js.map} +0 -0
- /package/dist/{issue-triage-VB5CVE43.js.map → issue-triage-QIVZN3PJ.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-CI72F4XM.js.map → pr-reviewer-helpers-P24OBKVM.js.map} +0 -0
- /package/dist/{registry-command-VNFULRTL.js.map → registry-command-KWWOKJ5C.js.map} +0 -0
- /package/dist/{repo-security-plan-5MFY7GGQ.js.map → repo-security-plan-KZNEXDCI.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-CNZ4C3FN.js.map → research-helpers-synthesize-DH5PPX7A.js.map} +0 -0
- /package/dist/{routing-memory-PYO46COZ.js.map → routing-memory-AGHJQTRH.js.map} +0 -0
- /package/dist/{session-memory-HGCDSZ5R.js.map → session-memory-O24IVZAW.js.map} +0 -0
- /package/dist/{setup-command-E35O56BN.js.map → setup-command-NBXZ4NGV.js.map} +0 -0
- /package/dist/{setup-config-QPS4K5QU.js.map → setup-config-Y4JA5QWO.js.map} +0 -0
- /package/dist/{tool-memory-SDPIAV2S.js.map → tool-memory-UEQNXIGC.js.map} +0 -0
- /package/dist/{weather-report-RWAMQHBL.js.map → weather-report-S5YXRY7G.js.map} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
discoverModels,
|
|
3
3
|
readOpencodeGateway
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-AZP66FIA.js";
|
|
5
|
+
import "./chunk-BNHBZRU7.js";
|
|
6
|
+
import "./chunk-JEBWSHSU.js";
|
|
7
7
|
import {
|
|
8
8
|
createLogger
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HKISF2E7.js";
|
|
10
10
|
import "./chunk-CH7QIDHQ.js";
|
|
11
11
|
import "./chunk-PR4QN5HX.js";
|
|
12
12
|
|
|
@@ -174,4 +174,4 @@ export {
|
|
|
174
174
|
runInitOpencode,
|
|
175
175
|
runOpencodeValidate
|
|
176
176
|
};
|
|
177
|
-
//# sourceMappingURL=init-opencode-
|
|
177
|
+
//# sourceMappingURL=init-opencode-AYMNMWU7.js.map
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
IssueTriage,
|
|
3
3
|
createIssueTriage,
|
|
4
4
|
formatTriageComment
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-G5IDRWWI.js";
|
|
6
|
+
import "./chunk-CPH6LKXO.js";
|
|
7
|
+
import "./chunk-DTFMYM3V.js";
|
|
8
|
+
import "./chunk-HKISF2E7.js";
|
|
9
9
|
import "./chunk-CH7QIDHQ.js";
|
|
10
10
|
import "./chunk-PR4QN5HX.js";
|
|
11
11
|
export {
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
createIssueTriage,
|
|
14
14
|
formatTriageComment
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=issue-triage-
|
|
16
|
+
//# sourceMappingURL=issue-triage-QIVZN3PJ.js.map
|
|
@@ -17,10 +17,10 @@ import {
|
|
|
17
17
|
parseFindings,
|
|
18
18
|
parseSeverity,
|
|
19
19
|
sumFindings
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-VSG6RSE6.js";
|
|
21
21
|
import "./chunk-OK6U5N5Y.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-DTFMYM3V.js";
|
|
23
|
+
import "./chunk-HKISF2E7.js";
|
|
24
24
|
import "./chunk-CH7QIDHQ.js";
|
|
25
25
|
import "./chunk-PR4QN5HX.js";
|
|
26
26
|
export {
|
|
@@ -43,4 +43,4 @@ export {
|
|
|
43
43
|
parseSeverity,
|
|
44
44
|
sumFindings
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=pr-reviewer-helpers-
|
|
46
|
+
//# sourceMappingURL=pr-reviewer-helpers-P24OBKVM.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
ModelCapabilitySchema,
|
|
3
3
|
createLogger,
|
|
4
4
|
getInTreeCapabilitiesMatrix
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HKISF2E7.js";
|
|
6
6
|
import {
|
|
7
7
|
nexusDataPath
|
|
8
8
|
} from "./chunk-CH7QIDHQ.js";
|
|
@@ -575,4 +575,4 @@ export {
|
|
|
575
575
|
isValidRegistrySubcommand,
|
|
576
576
|
registryCommand
|
|
577
577
|
};
|
|
578
|
-
//# sourceMappingURL=registry-command-
|
|
578
|
+
//# sourceMappingURL=registry-command-KWWOKJ5C.js.map
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
buildPlanFromAnalysis,
|
|
4
4
|
generateSecurityPlan,
|
|
5
5
|
resolveScannerData
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ULBKFMVO.js";
|
|
7
7
|
import "./chunk-HFOQKCD2.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-HKISF2E7.js";
|
|
9
9
|
import "./chunk-CH7QIDHQ.js";
|
|
10
10
|
import "./chunk-PR4QN5HX.js";
|
|
11
11
|
export {
|
|
@@ -14,4 +14,4 @@ export {
|
|
|
14
14
|
generateSecurityPlan,
|
|
15
15
|
resolveScannerData
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=repo-security-plan-
|
|
17
|
+
//# sourceMappingURL=repo-security-plan-KZNEXDCI.js.map
|
package/dist/{research-helpers-synthesize-CNZ4C3FN.js → research-helpers-synthesize-DH5PPX7A.js}
RENAMED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AttributedInsightSchema,
|
|
3
3
|
synthesizeResearch
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZOAU7RE4.js";
|
|
5
5
|
import "./chunk-NUBSJGQZ.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-NESW2TTD.js";
|
|
7
|
+
import "./chunk-HKISF2E7.js";
|
|
7
8
|
import "./chunk-CH7QIDHQ.js";
|
|
8
9
|
import "./chunk-PR4QN5HX.js";
|
|
9
10
|
export {
|
|
10
11
|
AttributedInsightSchema,
|
|
11
12
|
synthesizeResearch
|
|
12
13
|
};
|
|
13
|
-
//# sourceMappingURL=research-helpers-synthesize-
|
|
14
|
+
//# sourceMappingURL=research-helpers-synthesize-DH5PPX7A.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
DEFAULT_ROUTING_MEMORY_CONFIG,
|
|
3
3
|
RoutingMemory,
|
|
4
4
|
createRoutingMemory
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HKISF2E7.js";
|
|
6
6
|
import "./chunk-CH7QIDHQ.js";
|
|
7
7
|
import "./chunk-PR4QN5HX.js";
|
|
8
8
|
export {
|
|
@@ -10,4 +10,4 @@ export {
|
|
|
10
10
|
RoutingMemory,
|
|
11
11
|
createRoutingMemory
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=routing-memory-
|
|
13
|
+
//# sourceMappingURL=routing-memory-AGHJQTRH.js.map
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
SessionMemory,
|
|
7
7
|
SessionMemoryError,
|
|
8
8
|
createSessionMemory
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-JCETWDU7.js";
|
|
10
|
+
import "./chunk-HKISF2E7.js";
|
|
11
11
|
import "./chunk-CH7QIDHQ.js";
|
|
12
12
|
import "./chunk-PR4QN5HX.js";
|
|
13
13
|
export {
|
|
@@ -19,4 +19,4 @@ export {
|
|
|
19
19
|
SessionMemoryError,
|
|
20
20
|
createSessionMemory
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=session-memory-
|
|
22
|
+
//# sourceMappingURL=session-memory-O24IVZAW.js.map
|
|
@@ -8,19 +8,20 @@ import {
|
|
|
8
8
|
runWizard,
|
|
9
9
|
setupCommand,
|
|
10
10
|
setupCommandAsync
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-5BTRDVWC.js";
|
|
12
|
+
import "./chunk-2T4NV6QT.js";
|
|
13
|
+
import "./chunk-SHSKW5ML.js";
|
|
14
|
+
import "./chunk-SMGH2B3A.js";
|
|
15
|
+
import "./chunk-57OH2O2U.js";
|
|
16
|
+
import "./chunk-4A4WPM75.js";
|
|
17
17
|
import "./chunk-NUBSJGQZ.js";
|
|
18
|
+
import "./chunk-NESW2TTD.js";
|
|
18
19
|
import "./chunk-6T3EPABN.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-BHA6V7GK.js";
|
|
21
|
+
import "./chunk-RTUZSR4R.js";
|
|
22
|
+
import "./chunk-SORBJPRA.js";
|
|
22
23
|
import "./chunk-ZM4O442V.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-HKISF2E7.js";
|
|
24
25
|
import "./chunk-CH7QIDHQ.js";
|
|
25
26
|
import "./chunk-PR4QN5HX.js";
|
|
26
27
|
export {
|
|
@@ -34,4 +35,4 @@ export {
|
|
|
34
35
|
setupCommand,
|
|
35
36
|
setupCommandAsync
|
|
36
37
|
};
|
|
37
|
-
//# sourceMappingURL=setup-command-
|
|
38
|
+
//# sourceMappingURL=setup-command-NBXZ4NGV.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runConfigInitSync
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-2T4NV6QT.js";
|
|
4
|
+
import "./chunk-HKISF2E7.js";
|
|
5
5
|
import "./chunk-CH7QIDHQ.js";
|
|
6
6
|
import "./chunk-PR4QN5HX.js";
|
|
7
7
|
export {
|
|
8
8
|
runConfigInitSync
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=setup-config-
|
|
10
|
+
//# sourceMappingURL=setup-config-Y4JA5QWO.js.map
|
|
@@ -2,14 +2,15 @@ import {
|
|
|
2
2
|
CUSTOM_API_ALLOW_PRIVATE_ENV,
|
|
3
3
|
CUSTOM_API_BASE_URL_ENV,
|
|
4
4
|
validateCustomApiBaseUrl
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2IBJC2EP.js";
|
|
6
6
|
import {
|
|
7
7
|
CUSTOM_API_DEFAULT_MODEL
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4A4WPM75.js";
|
|
9
|
+
import "./chunk-NESW2TTD.js";
|
|
9
10
|
import {
|
|
10
11
|
err,
|
|
11
12
|
ok
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-HKISF2E7.js";
|
|
13
14
|
import "./chunk-CH7QIDHQ.js";
|
|
14
15
|
import "./chunk-PR4QN5HX.js";
|
|
15
16
|
|
|
@@ -106,4 +107,4 @@ function buildShellFragment(params) {
|
|
|
106
107
|
export {
|
|
107
108
|
configureCustomApi
|
|
108
109
|
};
|
|
109
|
-
//# sourceMappingURL=setup-custom-api-
|
|
110
|
+
//# sourceMappingURL=setup-custom-api-UNX4OJEX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/setup-custom-api.ts"],"sourcesContent":["/**\n * Interactive setup for a custom OpenAI-compatible gateway (#2124).\n *\n * Closes the last child of epic #2119. The runtime adapter (#2125) is\n * already live — this module is the ergonomics layer: a single command\n * that validates the URL, probes connectivity, and tells the user\n * exactly what env vars to set for their shell.\n *\n * Writes nothing by default (dry-run is the safe behavior for a CLI\n * that touches shell state). Prints the shell fragment; user copies\n * it into ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish. Rationale:\n * harness-neutral — we don't know which shell the user runs or where\n * their nexus-agents.yaml lives.\n *\n * @module cli/setup-custom-api\n */\n\nimport { createInterface } from 'node:readline';\nimport { validateCustomApiBaseUrl } from '../adapters/sdk/custom-api-validation.js';\nimport { CUSTOM_API_BASE_URL_ENV, CUSTOM_API_ALLOW_PRIVATE_ENV } from '../adapters/sdk/types.js';\nimport { CUSTOM_API_DEFAULT_MODEL as DEFAULT_MODEL } from '../config/defaults.js';\nimport { ok, err, type Result } from '../core/index.js';\n\n/** Inputs to `configureCustomApi`. */\nexport interface CustomApiSetupInput {\n /** Gateway base URL (required). SSRF guard from adapters/sdk is applied. */\n readonly baseUrl: string;\n /** API key. If absent, `configureCustomApi` will prompt (or fail non-interactively). */\n readonly apiKey?: string;\n /** Model id to default to. Omitted → documented fallback \"gpt-4o\". */\n readonly model?: string;\n /** Skip the TTY prompt for the API key — useful for CI and scripting. */\n readonly nonInteractive?: boolean;\n /** Omit HTTP probe — useful for dry-run / offline verify. */\n readonly skipProbe?: boolean;\n /** Allow private / loopback base URLs (overrides the SSRF guard). */\n readonly allowPrivate?: boolean;\n /** Stream for prompts/output. Defaults to process.stdout / stdin. */\n readonly stream?: { readonly output: NodeJS.WritableStream };\n /**\n * Pluggable HTTP fetcher for tests. Defaults to global fetch.\n * Called as `fetch(url, { headers })`; should return `{ status, body }`.\n */\n readonly fetcher?: HttpFetcher;\n}\n\n/** Minimal HTTP fetcher shape — lets tests inject a mock without network. */\nexport type HttpFetcher = (\n url: string,\n init: { readonly headers: Readonly<Record<string, string>> }\n) => Promise<{ readonly status: number; readonly body: string }>;\n\n/** Outcome of `configureCustomApi`. */\nexport interface CustomApiSetupResult {\n /** Validated base URL (may differ trivially from input — e.g. canonical form). */\n readonly baseUrl: string;\n /** Resolved model id. */\n readonly model: string;\n /** Whether the /v1/models probe succeeded (always true unless skipped). */\n readonly probeSucceeded: boolean;\n /**\n * Shell fragment the user should add to their shell rc so nexus-agents\n * picks up the gateway on subsequent invocations. Already-set env\n * equivalents of these lines are all that's needed at runtime.\n */\n readonly shellFragment: string;\n}\n\n/**\n * Configures a custom OpenAI-compatible gateway.\n *\n * Steps:\n * 1. Validate base URL via the SSRF guard (same as the runtime adapter).\n * 2. Resolve the API key (from input, env, or TTY prompt).\n * 3. Probe `GET {baseUrl}/models` with Bearer auth to confirm connectivity.\n * 4. Emit the shell-fragment the user adds to their shell rc.\n *\n * Returns an `ok` Result on success, or a `ConfigError`-bearing `err`\n * Result on any failure (invalid URL, missing API key in non-interactive,\n * probe failure). Never throws.\n */\nexport async function configureCustomApi(\n input: CustomApiSetupInput\n): Promise<Result<CustomApiSetupResult, Error>> {\n const urlValidation = validateCustomApiBaseUrl(input.baseUrl, {\n ...(input.allowPrivate === true ? { allowPrivate: true } : {}),\n });\n if (!urlValidation.ok) return err(urlValidation.error);\n const baseUrl = urlValidation.value.toString();\n\n const apiKeyResult = await resolveApiKey(input);\n if (!apiKeyResult.ok) return err(apiKeyResult.error);\n const apiKey = apiKeyResult.value;\n\n const probeSucceeded = input.skipProbe === true ? false : await runProbe(baseUrl, apiKey, input);\n if (input.skipProbe !== true && !probeSucceeded) {\n return err(\n new Error(\n `Gateway probe failed: GET ${stripTrailingSlash(baseUrl)}/models did not return 2xx. ` +\n `Check that the URL is the chat-completions base (typically ends with /v1) and the API key has /models read scope.`\n )\n );\n }\n\n const model = input.model ?? DEFAULT_MODEL;\n return ok({\n baseUrl,\n model,\n probeSucceeded,\n shellFragment: buildShellFragment({ baseUrl, apiKey, model, allowPrivate: input.allowPrivate }),\n });\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith('/') ? s.slice(0, -1) : s;\n}\n\n/**\n * Performs the /v1/models probe. Returns true on any 2xx response.\n * Swallows errors into `false` — the caller reports the failure.\n */\nasync function runProbe(\n baseUrl: string,\n apiKey: string,\n input: CustomApiSetupInput\n): Promise<boolean> {\n const url = `${stripTrailingSlash(baseUrl)}/models`;\n const fetcher = input.fetcher ?? defaultFetcher;\n try {\n const res = await fetcher(url, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n return res.status >= 200 && res.status < 300;\n } catch {\n return false;\n }\n}\n\nconst defaultFetcher: HttpFetcher = async (url, init) => {\n const res = await fetch(url, { headers: init.headers });\n const body = await res.text();\n return { status: res.status, body };\n};\n\n/**\n * Resolves the API key in priority order: input → env var → TTY prompt\n * (unless non-interactive, in which case the absence is a fail).\n */\nasync function resolveApiKey(input: CustomApiSetupInput): Promise<Result<string, Error>> {\n if (input.apiKey !== undefined && input.apiKey !== '') return ok(input.apiKey);\n const envKey = process.env['NEXUS_CUSTOM_API_KEY'];\n if (envKey !== undefined && envKey !== '') return ok(envKey);\n if (input.nonInteractive === true) {\n return err(\n new Error(\n 'Custom API key required but not provided. Pass --custom-api-key or set NEXUS_CUSTOM_API_KEY.'\n )\n );\n }\n const prompted = await promptForApiKey(input.stream?.output ?? process.stdout);\n if (prompted === '') {\n return err(new Error('No API key entered; aborting.'));\n }\n return ok(prompted);\n}\n\nasync function promptForApiKey(out: NodeJS.WritableStream): Promise<string> {\n out.write('Enter the API key for your custom gateway: ');\n const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n try {\n return await new Promise<string>((resolve) => {\n rl.question('', (answer) => {\n resolve(answer.trim());\n });\n });\n } finally {\n rl.close();\n }\n}\n\n/**\n * Formats the shell fragment the user should paste into their shell rc.\n * Designed to be POSIX-portable; fish users can adapt `export` to `set -gx`.\n */\nfunction buildShellFragment(params: {\n readonly baseUrl: string;\n readonly apiKey: string;\n readonly model: string;\n readonly allowPrivate: boolean | undefined;\n}): string {\n const { baseUrl, apiKey, model, allowPrivate } = params;\n const lines: string[] = [\n '# nexus-agents custom-openai gateway (nexus-agents setup --custom-api)',\n `export ${CUSTOM_API_BASE_URL_ENV}=\"${baseUrl}\"`,\n `export NEXUS_CUSTOM_API_KEY=\"${apiKey}\"`,\n `export NEXUS_CUSTOM_MODEL=\"${model}\"`,\n ];\n if (allowPrivate === true) {\n lines.push(`export ${CUSTOM_API_ALLOW_PRIVATE_ENV}=1 # SSRF-guard bypass`);\n }\n return lines.join('\\n') + '\\n';\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,SAAS,uBAAuB;AAgEhC,eAAsB,mBACpB,OAC8C;AAC9C,QAAM,gBAAgB,yBAAyB,MAAM,SAAS;AAAA,IAC5D,GAAI,MAAM,iBAAiB,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAAA,EAC9D,CAAC;AACD,MAAI,CAAC,cAAc,GAAI,QAAO,IAAI,cAAc,KAAK;AACrD,QAAM,UAAU,cAAc,MAAM,SAAS;AAE7C,QAAM,eAAe,MAAM,cAAc,KAAK;AAC9C,MAAI,CAAC,aAAa,GAAI,QAAO,IAAI,aAAa,KAAK;AACnD,QAAM,SAAS,aAAa;AAE5B,QAAM,iBAAiB,MAAM,cAAc,OAAO,QAAQ,MAAM,SAAS,SAAS,QAAQ,KAAK;AAC/F,MAAI,MAAM,cAAc,QAAQ,CAAC,gBAAgB;AAC/C,WAAO;AAAA,MACL,IAAI;AAAA,QACF,6BAA6B,mBAAmB,OAAO,CAAC;AAAA,MAE1D;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,SAAS;AAC7B,SAAO,GAAG;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,mBAAmB,EAAE,SAAS,QAAQ,OAAO,cAAc,MAAM,aAAa,CAAC;AAAA,EAChG,CAAC;AACH;AAEA,SAAS,mBAAmB,GAAmB;AAC7C,SAAO,EAAE,SAAS,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI;AAC5C;AAMA,eAAe,SACb,SACA,QACA,OACkB;AAClB,QAAM,MAAM,GAAG,mBAAmB,OAAO,CAAC;AAC1C,QAAM,UAAU,MAAM,WAAW;AACjC,MAAI;AACF,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,SAAS,EAAE,eAAe,UAAU,MAAM,IAAI,QAAQ,mBAAmB;AAAA,IAC3E,CAAC;AACD,WAAO,IAAI,UAAU,OAAO,IAAI,SAAS;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,iBAA8B,OAAO,KAAK,SAAS;AACvD,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC;AACtD,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,SAAO,EAAE,QAAQ,IAAI,QAAQ,KAAK;AACpC;AAMA,eAAe,cAAc,OAA4D;AACvF,MAAI,MAAM,WAAW,UAAa,MAAM,WAAW,GAAI,QAAO,GAAG,MAAM,MAAM;AAC7E,QAAM,SAAS,QAAQ,IAAI,sBAAsB;AACjD,MAAI,WAAW,UAAa,WAAW,GAAI,QAAO,GAAG,MAAM;AAC3D,MAAI,MAAM,mBAAmB,MAAM;AACjC,WAAO;AAAA,MACL,IAAI;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,MAAM,gBAAgB,MAAM,QAAQ,UAAU,QAAQ,MAAM;AAC7E,MAAI,aAAa,IAAI;AACnB,WAAO,IAAI,IAAI,MAAM,+BAA+B,CAAC;AAAA,EACvD;AACA,SAAO,GAAG,QAAQ;AACpB;AAEA,eAAe,gBAAgB,KAA6C;AAC1E,MAAI,MAAM,6CAA6C;AACvD,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,UAAU,KAAK,CAAC;AAC3F,MAAI;AACF,WAAO,MAAM,IAAI,QAAgB,CAAC,YAAY;AAC5C,SAAG,SAAS,IAAI,CAAC,WAAW;AAC1B,gBAAQ,OAAO,KAAK,CAAC;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;AAMA,SAAS,mBAAmB,QAKjB;AACT,QAAM,EAAE,SAAS,QAAQ,OAAO,aAAa,IAAI;AACjD,QAAM,QAAkB;AAAA,IACtB;AAAA,IACA,UAAU,uBAAuB,KAAK,OAAO;AAAA,IAC7C,gCAAgC,MAAM;AAAA,IACtC,8BAA8B,KAAK;AAAA,EACrC;AACA,MAAI,iBAAiB,MAAM;AACzB,UAAM,KAAK,UAAU,4BAA4B,0BAA0B;AAAA,EAC7E;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/setup-custom-api.ts"],"sourcesContent":["/**\n * Interactive setup for a custom OpenAI-compatible gateway (#2124).\n *\n * Closes the last child of epic #2119. The runtime adapter (#2125) is\n * already live — this module is the ergonomics layer: a single command\n * that validates the URL, probes connectivity, and tells the user\n * exactly what env vars to set for their shell.\n *\n * Writes nothing by default (dry-run is the safe behavior for a CLI\n * that touches shell state). Prints the shell fragment; user copies\n * it into ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish. Rationale:\n * harness-neutral — we don't know which shell the user runs or where\n * their nexus-agents.yaml lives.\n *\n * @module cli/setup-custom-api\n */\n\nimport { createInterface } from 'node:readline';\nimport { validateCustomApiBaseUrl } from '../adapters/sdk/custom-api-validation.js';\nimport { CUSTOM_API_BASE_URL_ENV, CUSTOM_API_ALLOW_PRIVATE_ENV } from '../adapters/sdk/types.js';\nimport { CUSTOM_API_DEFAULT_MODEL as DEFAULT_MODEL } from '../config/defaults.js';\nimport { ok, err, type Result } from '../core/index.js';\n\n/** Inputs to `configureCustomApi`. */\nexport interface CustomApiSetupInput {\n /** Gateway base URL (required). SSRF guard from adapters/sdk is applied. */\n readonly baseUrl: string;\n /** API key. If absent, `configureCustomApi` will prompt (or fail non-interactively). */\n readonly apiKey?: string;\n /** Model id to default to. Omitted → documented fallback \"gpt-4o\". */\n readonly model?: string;\n /** Skip the TTY prompt for the API key — useful for CI and scripting. */\n readonly nonInteractive?: boolean;\n /** Omit HTTP probe — useful for dry-run / offline verify. */\n readonly skipProbe?: boolean;\n /** Allow private / loopback base URLs (overrides the SSRF guard). */\n readonly allowPrivate?: boolean;\n /** Stream for prompts/output. Defaults to process.stdout / stdin. */\n readonly stream?: { readonly output: NodeJS.WritableStream };\n /**\n * Pluggable HTTP fetcher for tests. Defaults to global fetch.\n * Called as `fetch(url, { headers })`; should return `{ status, body }`.\n */\n readonly fetcher?: HttpFetcher;\n}\n\n/** Minimal HTTP fetcher shape — lets tests inject a mock without network. */\nexport type HttpFetcher = (\n url: string,\n init: { readonly headers: Readonly<Record<string, string>> }\n) => Promise<{ readonly status: number; readonly body: string }>;\n\n/** Outcome of `configureCustomApi`. */\nexport interface CustomApiSetupResult {\n /** Validated base URL (may differ trivially from input — e.g. canonical form). */\n readonly baseUrl: string;\n /** Resolved model id. */\n readonly model: string;\n /** Whether the /v1/models probe succeeded (always true unless skipped). */\n readonly probeSucceeded: boolean;\n /**\n * Shell fragment the user should add to their shell rc so nexus-agents\n * picks up the gateway on subsequent invocations. Already-set env\n * equivalents of these lines are all that's needed at runtime.\n */\n readonly shellFragment: string;\n}\n\n/**\n * Configures a custom OpenAI-compatible gateway.\n *\n * Steps:\n * 1. Validate base URL via the SSRF guard (same as the runtime adapter).\n * 2. Resolve the API key (from input, env, or TTY prompt).\n * 3. Probe `GET {baseUrl}/models` with Bearer auth to confirm connectivity.\n * 4. Emit the shell-fragment the user adds to their shell rc.\n *\n * Returns an `ok` Result on success, or a `ConfigError`-bearing `err`\n * Result on any failure (invalid URL, missing API key in non-interactive,\n * probe failure). Never throws.\n */\nexport async function configureCustomApi(\n input: CustomApiSetupInput\n): Promise<Result<CustomApiSetupResult, Error>> {\n const urlValidation = validateCustomApiBaseUrl(input.baseUrl, {\n ...(input.allowPrivate === true ? { allowPrivate: true } : {}),\n });\n if (!urlValidation.ok) return err(urlValidation.error);\n const baseUrl = urlValidation.value.toString();\n\n const apiKeyResult = await resolveApiKey(input);\n if (!apiKeyResult.ok) return err(apiKeyResult.error);\n const apiKey = apiKeyResult.value;\n\n const probeSucceeded = input.skipProbe === true ? false : await runProbe(baseUrl, apiKey, input);\n if (input.skipProbe !== true && !probeSucceeded) {\n return err(\n new Error(\n `Gateway probe failed: GET ${stripTrailingSlash(baseUrl)}/models did not return 2xx. ` +\n `Check that the URL is the chat-completions base (typically ends with /v1) and the API key has /models read scope.`\n )\n );\n }\n\n const model = input.model ?? DEFAULT_MODEL;\n return ok({\n baseUrl,\n model,\n probeSucceeded,\n shellFragment: buildShellFragment({ baseUrl, apiKey, model, allowPrivate: input.allowPrivate }),\n });\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith('/') ? s.slice(0, -1) : s;\n}\n\n/**\n * Performs the /v1/models probe. Returns true on any 2xx response.\n * Swallows errors into `false` — the caller reports the failure.\n */\nasync function runProbe(\n baseUrl: string,\n apiKey: string,\n input: CustomApiSetupInput\n): Promise<boolean> {\n const url = `${stripTrailingSlash(baseUrl)}/models`;\n const fetcher = input.fetcher ?? defaultFetcher;\n try {\n const res = await fetcher(url, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n return res.status >= 200 && res.status < 300;\n } catch {\n return false;\n }\n}\n\nconst defaultFetcher: HttpFetcher = async (url, init) => {\n const res = await fetch(url, { headers: init.headers });\n const body = await res.text();\n return { status: res.status, body };\n};\n\n/**\n * Resolves the API key in priority order: input → env var → TTY prompt\n * (unless non-interactive, in which case the absence is a fail).\n */\nasync function resolveApiKey(input: CustomApiSetupInput): Promise<Result<string, Error>> {\n if (input.apiKey !== undefined && input.apiKey !== '') return ok(input.apiKey);\n const envKey = process.env['NEXUS_CUSTOM_API_KEY'];\n if (envKey !== undefined && envKey !== '') return ok(envKey);\n if (input.nonInteractive === true) {\n return err(\n new Error(\n 'Custom API key required but not provided. Pass --custom-api-key or set NEXUS_CUSTOM_API_KEY.'\n )\n );\n }\n const prompted = await promptForApiKey(input.stream?.output ?? process.stdout);\n if (prompted === '') {\n return err(new Error('No API key entered; aborting.'));\n }\n return ok(prompted);\n}\n\nasync function promptForApiKey(out: NodeJS.WritableStream): Promise<string> {\n out.write('Enter the API key for your custom gateway: ');\n const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n try {\n return await new Promise<string>((resolve) => {\n rl.question('', (answer) => {\n resolve(answer.trim());\n });\n });\n } finally {\n rl.close();\n }\n}\n\n/**\n * Formats the shell fragment the user should paste into their shell rc.\n * Designed to be POSIX-portable; fish users can adapt `export` to `set -gx`.\n */\nfunction buildShellFragment(params: {\n readonly baseUrl: string;\n readonly apiKey: string;\n readonly model: string;\n readonly allowPrivate: boolean | undefined;\n}): string {\n const { baseUrl, apiKey, model, allowPrivate } = params;\n const lines: string[] = [\n '# nexus-agents custom-openai gateway (nexus-agents setup --custom-api)',\n `export ${CUSTOM_API_BASE_URL_ENV}=\"${baseUrl}\"`,\n `export NEXUS_CUSTOM_API_KEY=\"${apiKey}\"`,\n `export NEXUS_CUSTOM_MODEL=\"${model}\"`,\n ];\n if (allowPrivate === true) {\n lines.push(`export ${CUSTOM_API_ALLOW_PRIVATE_ENV}=1 # SSRF-guard bypass`);\n }\n return lines.join('\\n') + '\\n';\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
getToolMemory,
|
|
4
4
|
reinitializeMemoryBackends,
|
|
5
5
|
shutdownToolMemory
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-FTCU55O6.js";
|
|
7
7
|
import "./chunk-6T3EPABN.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-SORBJPRA.js";
|
|
9
9
|
import "./chunk-PQHVC4BD.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-JCETWDU7.js";
|
|
11
|
+
import "./chunk-HKISF2E7.js";
|
|
12
12
|
import "./chunk-CH7QIDHQ.js";
|
|
13
13
|
import "./chunk-PR4QN5HX.js";
|
|
14
14
|
export {
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
reinitializeMemoryBackends,
|
|
18
18
|
shutdownToolMemory
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=tool-memory-
|
|
20
|
+
//# sourceMappingURL=tool-memory-UEQNXIGC.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
getAdaptiveBonus,
|
|
4
4
|
queryWithLookback,
|
|
5
5
|
shouldExplore
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HKISF2E7.js";
|
|
7
7
|
import "./chunk-CH7QIDHQ.js";
|
|
8
8
|
import "./chunk-PR4QN5HX.js";
|
|
9
9
|
export {
|
|
@@ -12,4 +12,4 @@ export {
|
|
|
12
12
|
queryWithLookback,
|
|
13
13
|
shouldExplore
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=weather-report-
|
|
15
|
+
//# sourceMappingURL=weather-report-S5YXRY7G.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexus-agents",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.93.0",
|
|
4
4
|
"description": "Intelligent orchestration platform for AI coding tools — routes tasks to the best model, learns from outcomes, and enforces quality through multi-model consensus",
|
|
5
5
|
"mcpName": "io.github.nexus-substrate/nexus-agents",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/defaults-env.ts","../src/config/defaults.ts"],"sourcesContent":["/**\n * Environment Variable Override Helpers\n *\n * Provides utilities for reading configuration from environment variables\n * with type-safe fallbacks to defaults.\n *\n * @module config/defaults-env\n */\n\nimport type {\n CircuitBreakerDefaults,\n RateLimitDefaults,\n RetryDefaults,\n ToolRateLimitConfig,\n} from './defaults-types.js';\n\n// ============================================================================\n// Environment Variable Parsers\n// ============================================================================\n\n/**\n * Parses an integer from an environment variable with fallback.\n */\nexport function parseIntEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseInt(envValue, 10);\n return isNaN(parsed) || parsed <= 0 ? fallback : parsed;\n}\n\n/**\n * Parses a float from an environment variable with fallback.\n */\nexport function parseFloatEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseFloat(envValue);\n return isNaN(parsed) || !isFinite(parsed) ? fallback : parsed;\n}\n\n/**\n * Parses a boolean from an environment variable with fallback.\n * Only 'true'/'1' are truthy, 'false'/'0' are falsy.\n * Any other value returns the fallback.\n */\nexport function parseBoolEnv(envKey: string, fallback: boolean): boolean {\n const envValue = process.env[envKey]?.toLowerCase();\n if (envValue === undefined) {\n return fallback;\n }\n if (envValue === 'true' || envValue === '1') return true;\n if (envValue === 'false' || envValue === '0') return false;\n return fallback;\n}\n\n// ============================================================================\n// Config Getter Types (for lazy initialization)\n// ============================================================================\n\n/** Timeout defaults type from DEFAULTS object */\nexport interface TimeoutDefaultsConst {\n readonly cliMs: number;\n readonly cliSimpleMs: number;\n readonly cliComplexMs: number;\n readonly apiMs: number;\n readonly apiMaxMs: number;\n readonly workflowMs: number;\n readonly workflowMaxMs: number;\n readonly stepMs: number;\n readonly mcpMs: number;\n readonly mcpMaxMs: number;\n readonly healthCheckMs: number;\n readonly testGlobalMs: number;\n readonly testTaskMs: number;\n readonly circuitBreakerResetMs: number;\n}\n\n/** Tool rate limits type from DEFAULTS object */\nexport interface ToolRateLimitsConst {\n readonly orchestrate: ToolRateLimitConfig;\n readonly delegate: ToolRateLimitConfig;\n readonly workflow: ToolRateLimitConfig;\n readonly expert: ToolRateLimitConfig;\n}\n\n/** Rate limit defaults type from DEFAULTS object */\ninterface RateLimitDefaultsConst {\n readonly requestsPerMinute: number;\n readonly enabled: boolean;\n readonly maxConcurrent: number;\n readonly capacity: number;\n readonly refillRate: number;\n readonly refillIntervalMs: number;\n}\n\n/** Retry defaults type from DEFAULTS object */\ninterface RetryDefaultsConst {\n readonly maxRetries: number;\n readonly baseDelayMs: number;\n readonly maxDelayMs: number;\n readonly jitterFactor: number;\n}\n\n/** Circuit breaker defaults type from DEFAULTS object */\ninterface CircuitBreakerDefaultsConst {\n readonly failureThreshold: number;\n readonly resetTimeoutMs: number;\n readonly halfOpenSuccessThreshold: number;\n readonly countTimeoutsAsFailures: boolean;\n readonly countAuthFailuresAsFailures: boolean;\n readonly countRateLimitsAsFailures: boolean;\n readonly halfOpenMaxRequests: number;\n}\n\n// ============================================================================\n// Config Getter Factory Functions\n// ============================================================================\n\n/**\n * Creates a timeout getter function bound to the DEFAULTS object.\n */\nexport function createGetTimeout(\n timeoutDefaults: TimeoutDefaultsConst\n): (key: keyof TimeoutDefaultsConst) => number {\n return (key: keyof TimeoutDefaultsConst): number => {\n const envKey = `NEXUS_TIMEOUT_${key.replace(/Ms$/, '').toUpperCase()}`;\n return parseIntEnv(envKey, timeoutDefaults[key]);\n };\n}\n\n/**\n * Creates a retry config getter function bound to the DEFAULTS object.\n */\nexport function createGetRetryConfig(retryDefaults: RetryDefaultsConst): () => RetryDefaults {\n return (): RetryDefaults => {\n return {\n maxRetries: parseIntEnv('NEXUS_RETRY_MAX_RETRIES', retryDefaults.maxRetries),\n baseDelayMs: parseIntEnv('NEXUS_RETRY_BASE_DELAY', retryDefaults.baseDelayMs),\n maxDelayMs: parseIntEnv('NEXUS_RETRY_MAX_DELAY', retryDefaults.maxDelayMs),\n jitterFactor: parseFloatEnv('NEXUS_RETRY_JITTER', retryDefaults.jitterFactor),\n };\n };\n}\n\n/**\n * Creates a rate limit config getter function bound to the DEFAULTS object.\n */\nexport function createGetRateLimitConfig(\n rateLimitDefaults: RateLimitDefaultsConst\n): () => RateLimitDefaults {\n return (): RateLimitDefaults => {\n return {\n requestsPerMinute: parseIntEnv('NEXUS_RATE_LIMIT_RPM', rateLimitDefaults.requestsPerMinute),\n enabled: parseBoolEnv('NEXUS_RATE_LIMIT_ENABLED', rateLimitDefaults.enabled),\n maxConcurrent: parseIntEnv(\n 'NEXUS_RATE_LIMIT_MAX_CONCURRENT',\n rateLimitDefaults.maxConcurrent\n ),\n capacity: parseIntEnv('NEXUS_RATE_LIMIT_CAPACITY', rateLimitDefaults.capacity),\n refillRate: parseIntEnv('NEXUS_RATE_LIMIT_REFILL_RATE', rateLimitDefaults.refillRate),\n refillIntervalMs: parseIntEnv(\n 'NEXUS_RATE_LIMIT_REFILL_INTERVAL',\n rateLimitDefaults.refillIntervalMs\n ),\n };\n };\n}\n\n// createGetWorkerConfig removed in #2977 — see comment in config/defaults.ts.\n\n/**\n * Creates a circuit breaker config getter function bound to the DEFAULTS object.\n */\nexport function createGetCircuitBreakerConfig(\n cbDefaults: CircuitBreakerDefaultsConst\n): () => CircuitBreakerDefaults {\n return (): CircuitBreakerDefaults => {\n return {\n failureThreshold: parseIntEnv('NEXUS_CIRCUIT_BREAKER_THRESHOLD', cbDefaults.failureThreshold),\n resetTimeoutMs: parseIntEnv('NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT', cbDefaults.resetTimeoutMs),\n halfOpenSuccessThreshold: cbDefaults.halfOpenSuccessThreshold,\n countTimeoutsAsFailures: cbDefaults.countTimeoutsAsFailures,\n countAuthFailuresAsFailures: cbDefaults.countAuthFailuresAsFailures,\n countRateLimitsAsFailures: cbDefaults.countRateLimitsAsFailures,\n halfOpenMaxRequests: cbDefaults.halfOpenMaxRequests,\n };\n };\n}\n\n/**\n * Creates a tool rate limit getter function bound to the DEFAULTS object.\n */\nexport function createGetToolRateLimit(\n toolRateLimits: ToolRateLimitsConst\n): (tool: keyof ToolRateLimitsConst) => ToolRateLimitConfig {\n return (tool: keyof ToolRateLimitsConst): ToolRateLimitConfig => {\n return toolRateLimits[tool];\n };\n}\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/** DEFAULTS structure for documentation generation */\ninterface DefaultsForDocs {\n readonly TIMEOUT_DEFAULTS: TimeoutDefaultsConst;\n readonly RATE_LIMIT_DEFAULTS: RateLimitDefaultsConst;\n readonly RETRY_DEFAULTS: RetryDefaultsConst;\n readonly CIRCUIT_BREAKER_DEFAULTS: CircuitBreakerDefaultsConst;\n}\n\n/**\n * Creates a documentation generator function bound to the DEFAULTS object.\n *\n * @param defaults - The DEFAULTS object\n * @returns Function that generates environment variable documentation\n */\nexport function createGetEnvVarDocumentation(defaults: DefaultsForDocs): () => string {\n return (): string => {\n const t = defaults.TIMEOUT_DEFAULTS;\n const r = defaults.RATE_LIMIT_DEFAULTS;\n const rt = defaults.RETRY_DEFAULTS;\n const cb = defaults.CIRCUIT_BREAKER_DEFAULTS;\n\n return `# Environment Variable Overrides\n\nAll defaults can be overridden via environment variables using the NEXUS_ prefix.\n\n## Timeouts\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_TIMEOUT_CLI | ${String(t.cliMs)} | CLI execution timeout (ms) |\n| NEXUS_TIMEOUT_API | ${String(t.apiMs)} | API request timeout (ms) |\n| NEXUS_TIMEOUT_WORKFLOW | ${String(t.workflowMs)} | Workflow timeout (ms) |\n| NEXUS_TIMEOUT_MCP | ${String(t.mcpMs)} | MCP operation timeout (ms) |\n\n## Rate Limits\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RATE_LIMIT_RPM | ${String(r.requestsPerMinute)} | Requests per minute |\n| NEXUS_RATE_LIMIT_ENABLED | ${String(r.enabled)} | Enable rate limiting |\n| NEXUS_RATE_LIMIT_CAPACITY | ${String(r.capacity)} | Token bucket capacity |\n\n## Retries\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RETRY_MAX_RETRIES | ${String(rt.maxRetries)} | Maximum retry attempts |\n| NEXUS_RETRY_BASE_DELAY | ${String(rt.baseDelayMs)} | Base delay (ms) |\n| NEXUS_RETRY_MAX_DELAY | ${String(rt.maxDelayMs)} | Maximum delay (ms) |\n| NEXUS_RETRY_JITTER | ${String(rt.jitterFactor)} | Jitter factor (0-1) |\n\n## Circuit Breaker\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_CIRCUIT_BREAKER_THRESHOLD | ${String(cb.failureThreshold)} | Failure threshold |\n| NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT | ${String(cb.resetTimeoutMs)} | Reset timeout (ms) |\n`;\n };\n}\n","/**\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` is widely supported across OpenAI-compatible gateways (vLLM,\n * LiteLLM, Together AI, etc.) — a pragmatic baseline rather than the\n * cheapest or most capable. Operators are expected to override.\n */\nexport const CUSTOM_API_DEFAULT_MODEL = 'gpt-4o';\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 /** Simple CLI task timeout (single function, quick query). */\n cliSimpleMs: _CLI.default.simple,\n /** Complex CLI task timeout (codebase-wide, deep analysis). */\n cliComplexMs: _CLI.default.complex,\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":";;;;;;;;;;AAuBO,SAAS,YAAY,QAAgB,UAA0B;AACpE,QAAM,WAAW,QAAQ,IAAI,MAAM;AACnC,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AACA,QAAM,SAAS,SAAS,UAAU,EAAE;AACpC,SAAO,MAAM,MAAM,KAAK,UAAU,IAAI,WAAW;AACnD;AAKO,SAAS,cAAc,QAAgB,UAA0B;AACtE,QAAM,WAAW,QAAQ,IAAI,MAAM;AACnC,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AACA,QAAM,SAAS,WAAW,QAAQ;AAClC,SAAO,MAAM,MAAM,KAAK,CAAC,SAAS,MAAM,IAAI,WAAW;AACzD;AAOO,SAAS,aAAa,QAAgB,UAA4B;AACvE,QAAM,WAAW,QAAQ,IAAI,MAAM,GAAG,YAAY;AAClD,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AACA,MAAI,aAAa,UAAU,aAAa,IAAK,QAAO;AACpD,MAAI,aAAa,WAAW,aAAa,IAAK,QAAO;AACrD,SAAO;AACT;AAoEO,SAAS,iBACd,iBAC6C;AAC7C,SAAO,CAAC,QAA4C;AAClD,UAAM,SAAS,iBAAiB,IAAI,QAAQ,OAAO,EAAE,EAAE,YAAY,CAAC;AACpE,WAAO,YAAY,QAAQ,gBAAgB,GAAG,CAAC;AAAA,EACjD;AACF;AAKO,SAAS,qBAAqB,eAAwD;AAC3F,SAAO,MAAqB;AAC1B,WAAO;AAAA,MACL,YAAY,YAAY,2BAA2B,cAAc,UAAU;AAAA,MAC3E,aAAa,YAAY,0BAA0B,cAAc,WAAW;AAAA,MAC5E,YAAY,YAAY,yBAAyB,cAAc,UAAU;AAAA,MACzE,cAAc,cAAc,sBAAsB,cAAc,YAAY;AAAA,IAC9E;AAAA,EACF;AACF;AAKO,SAAS,yBACd,mBACyB;AACzB,SAAO,MAAyB;AAC9B,WAAO;AAAA,MACL,mBAAmB,YAAY,wBAAwB,kBAAkB,iBAAiB;AAAA,MAC1F,SAAS,aAAa,4BAA4B,kBAAkB,OAAO;AAAA,MAC3E,eAAe;AAAA,QACb;AAAA,QACA,kBAAkB;AAAA,MACpB;AAAA,MACA,UAAU,YAAY,6BAA6B,kBAAkB,QAAQ;AAAA,MAC7E,YAAY,YAAY,gCAAgC,kBAAkB,UAAU;AAAA,MACpF,kBAAkB;AAAA,QAChB;AAAA,QACA,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,8BACd,YAC8B;AAC9B,SAAO,MAA8B;AACnC,WAAO;AAAA,MACL,kBAAkB,YAAY,mCAAmC,WAAW,gBAAgB;AAAA,MAC5F,gBAAgB,YAAY,uCAAuC,WAAW,cAAc;AAAA,MAC5F,0BAA0B,WAAW;AAAA,MACrC,yBAAyB,WAAW;AAAA,MACpC,6BAA6B,WAAW;AAAA,MACxC,2BAA2B,WAAW;AAAA,MACtC,qBAAqB,WAAW;AAAA,IAClC;AAAA,EACF;AACF;AAKO,SAAS,uBACd,gBAC0D;AAC1D,SAAO,CAAC,SAAyD;AAC/D,WAAO,eAAe,IAAI;AAAA,EAC5B;AACF;AAoBO,SAAS,6BAA6B,UAAyC;AACpF,SAAO,MAAc;AACnB,UAAM,IAAI,SAAS;AACnB,UAAM,IAAI,SAAS;AACnB,UAAM,KAAK,SAAS;AACpB,UAAM,KAAK,SAAS;AAEpB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQa,OAAO,EAAE,KAAK,CAAC;AAAA,wBACf,OAAO,EAAE,KAAK,CAAC;AAAA,6BACV,OAAO,EAAE,UAAU,CAAC;AAAA,wBACzB,OAAO,EAAE,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMZ,OAAO,EAAE,iBAAiB,CAAC;AAAA,+BACvB,OAAO,EAAE,OAAO,CAAC;AAAA,gCAChB,OAAO,EAAE,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMpB,OAAO,GAAG,UAAU,CAAC;AAAA,6BACtB,OAAO,GAAG,WAAW,CAAC;AAAA,4BACvB,OAAO,GAAG,UAAU,CAAC;AAAA,yBACxB,OAAO,GAAG,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMV,OAAO,GAAG,gBAAgB,CAAC;AAAA,0CACvB,OAAO,GAAG,cAAc,CAAC;AAAA;AAAA,EAEjE;AACF;;;AC5KO,IAAM,2BAA2B;AASjC,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,kBAAkB;AAAA;AAAA,IAEhB,OAAO,aAAK,QAAQ;AAAA;AAAA,IAEpB,aAAa,aAAK,QAAQ;AAAA;AAAA,IAE1B,cAAc,aAAK,QAAQ;AAAA;AAAA,IAE3B,OAAO,aAAK;AAAA;AAAA,IAEZ,UAAU,aAAK;AAAA;AAAA,IAEf,YAAY,kBAAI;AAAA;AAAA,IAEhB,eAAe,kBAAI;AAAA;AAAA,IAEnB,QAAQ,kBAAK;AAAA;AAAA,IAEb,OAAO,aAAK;AAAA;AAAA,IAEZ,UAAU,aAAK;AAAA;AAAA,IAEf,eAAe,kBAAK;AAAA;AAAA,IAEpB,cAAc,cAAM;AAAA;AAAA,IAEpB,YAAY,cAAM;AAAA;AAAA,IAElB,uBAAuB,kBAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AAAA;AAAA,IAEnB,mBAAmB;AAAA;AAAA,IAEnB,SAAS;AAAA;AAAA,IAET,eAAe;AAAA;AAAA,IAEf,UAAU;AAAA;AAAA,IAEV,YAAY;AAAA;AAAA,IAEZ,kBAAkB;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB;AAAA,IAChB,aAAa,EAAE,UAAU,IAAI,YAAY,IAAI,kBAAkB,IAAO;AAAA,IACtE,UAAU,EAAE,UAAU,IAAI,YAAY,IAAI,kBAAkB,IAAO;AAAA,IACnE,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,kBAAkB,IAAO;AAAA,IACjE,QAAQ,EAAE,UAAU,IAAI,YAAY,IAAI,kBAAkB,IAAO;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AAAA;AAAA,IAEd,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,YAAY;AAAA;AAAA,IAEZ,cAAc;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB;AAAA;AAAA,IAEvB,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,YAAY;AAAA;AAAA,IAEZ,cAAc;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAAA;AAAA,IAElB,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,YAAY;AAAA;AAAA,IAEZ,cAAc;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AAAA;AAAA,IAEnB,YAAY;AAAA;AAAA,IAEZ,kBAAkB;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AAAA;AAAA,IAEf,WAAW;AAAA;AAAA,IAEX,WAAW;AAAA;AAAA,IAEX,UAAU;AAAA;AAAA,IAEV,gBAAgB,KAAK,OAAO;AAAA;AAAA,IAE5B,oBAAoB;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,0BAA0B;AAAA;AAAA,IAExB,kBAAkB;AAAA;AAAA,IAElB,gBAAgB;AAAA;AAAA,IAEhB,0BAA0B;AAAA;AAAA,IAE1B,yBAAyB;AAAA;AAAA,IAEzB,6BAA6B;AAAA;AAAA,IAE7B,2BAA2B;AAAA;AAAA,IAE3B,qBAAqB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AAAA;AAAA,IAEhB,WAAW;AAAA;AAAA,IAEX,kBAAkB;AAAA;AAAA,IAElB,mBAAmB;AAAA;AAAA,IAEnB,mBAAmB;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AAAA;AAAA,IAEjB,SAAS;AAAA;AAAA,IAET,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,oBAAoB;AAAA;AAAA,IAEpB,gBAAgB;AAAA;AAAA,IAEhB,gBAAgB;AAAA;AAAA,IAEhB,aAAa;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AAAA;AAAA,IAEjB,uBAAuB;AAAA;AAAA,IAEvB,mBAAmB;AAAA;AAAA,IAEnB,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,yBAAyB;AAAA;AAAA,IAEzB,uBAAuB;AAAA,EACzB;AACF;AA2CO,IAAM,aAAa,iBAAiB,SAAS,gBAAgB;AAO7D,IAAM,iBAAiB,qBAAqB,SAAS,cAAc;AAOnE,IAAM,qBAAqB,yBAAyB,SAAS,mBAAmB;AAOhF,IAAM,0BAA0B;AAAA,EACrC,SAAS;AACX;AAQO,IAAM,mBAAmB,uBAAuB,SAAS,gBAAgB;AAWzE,IAAM,yBAAyB,6BAA6B,QAAQ;","names":[]}
|