nexus-agents 2.168.0 → 2.169.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/README.md +1 -1
- package/dist/{child-mcp-config-FAWSJFMQ.js → child-mcp-config-FJRGAMUU.js} +2 -2
- package/dist/{chunk-IAGLVGHN.js → chunk-3JH3FMEJ.js} +2 -2
- package/dist/{chunk-OLCDGMEO.js → chunk-3ON2P4WL.js} +4 -4
- package/dist/{chunk-GNCUZDQI.js → chunk-4G5W5EPU.js} +7 -7
- package/dist/{chunk-CPS2HN4T.js → chunk-5O4JRXNQ.js} +2 -2
- package/dist/{chunk-3KID7AIF.js → chunk-7S43YASS.js} +3 -3
- package/dist/{chunk-RJHLNI37.js → chunk-BWG54OJS.js} +2 -2
- package/dist/{chunk-6ERIC5NJ.js → chunk-CD2NZFAI.js} +2 -2
- package/dist/{chunk-LNPKBBPG.js → chunk-CHF63T3L.js} +4 -4
- package/dist/{chunk-RQNBJ7AS.js → chunk-DSMSYENI.js} +2 -2
- package/dist/{chunk-CJLMB7MO.js → chunk-EQRN5FRZ.js} +3 -3
- package/dist/{chunk-ELWMGKVP.js → chunk-F6HJJG3E.js} +8 -8
- package/dist/{chunk-5LPPJIZ4.js → chunk-HAVBBSYN.js} +2 -2
- package/dist/{chunk-N56C2MWI.js → chunk-HNNSCTOI.js} +2 -2
- package/dist/{chunk-G7NDNFIE.js → chunk-IQC2K3KY.js} +3 -3
- package/dist/{chunk-VQE3OSUW.js → chunk-JCJHQSAY.js} +2 -2
- package/dist/{chunk-MSBYVBPX.js → chunk-MCT7JJF6.js} +2 -2
- package/dist/{chunk-52T2MJDS.js → chunk-N7FIUFQL.js} +811 -598
- package/dist/chunk-N7FIUFQL.js.map +1 -0
- package/dist/{chunk-7IUVW67T.js → chunk-NT3KCLT6.js} +7 -7
- package/dist/{chunk-2Z4QECP7.js → chunk-OOFPDA3B.js} +2 -2
- package/dist/{chunk-ETFCT2CH.js → chunk-P7MYTCE6.js} +4 -4
- package/dist/{chunk-HZNOSJOO.js → chunk-PZF67XDY.js} +3 -3
- package/dist/{chunk-2ANAH2UU.js → chunk-Q3UMNYV2.js} +4 -4
- package/dist/{chunk-OKAHIWG4.js → chunk-QXSR5KPG.js} +25 -4
- package/dist/chunk-QXSR5KPG.js.map +1 -0
- package/dist/{chunk-TZK7VQAW.js → chunk-R46SBPLH.js} +5 -5
- package/dist/{chunk-F5JDQXHJ.js → chunk-RO23OT47.js} +2 -2
- package/dist/{chunk-P7RBQUAG.js → chunk-ROCNXZBC.js} +8 -8
- package/dist/{chunk-UN7PYUJB.js → chunk-SX4E2W3Z.js} +2 -2
- package/dist/{chunk-UGJRDFMN.js → chunk-T3VD32JY.js} +2 -2
- package/dist/{chunk-TORS5V2C.js → chunk-TB26XNJH.js} +2 -2
- package/dist/{chunk-MX3XD2ML.js → chunk-W76DOL27.js} +2 -2
- package/dist/{chunk-I3LGUSZ3.js → chunk-WB33EPTV.js} +5 -5
- package/dist/{chunk-HJA3Z56H.js → chunk-XGNB7LQB.js} +5 -5
- package/dist/{chunk-AO4X3BMP.js → chunk-YF35FKKD.js} +2 -1
- package/dist/chunk-YF35FKKD.js.map +1 -0
- package/dist/{chunk-EQLJYWLP.js → chunk-ZXFIBDT3.js} +3 -3
- package/dist/{cli-circuit-breaker-JDGZ25MD.js → cli-circuit-breaker-FJQXDC5M.js} +4 -4
- package/dist/cli.js +43 -41
- package/dist/cli.js.map +1 -1
- package/dist/codebase-search-LUF5YJLQ.js +14 -0
- package/dist/{composite-router-EZPPVCMD.js → composite-router-UQTCPADM.js} +2 -2
- package/dist/{consensus-vote-YKKJHLOD.js → consensus-vote-FEDF24T5.js} +15 -15
- package/dist/{context-retriever-EGMARBAC.js → context-retriever-TIJGFLGO.js} +8 -8
- package/dist/{doctor-deep-QTBDR3VV.js → doctor-deep-EULAHWTK.js} +3 -3
- package/dist/{expert-bridge-FZYJ3XAL.js → expert-bridge-7HQ54XYU.js} +4 -4
- package/dist/{factory-SABHBAHC.js → factory-QZZQVDGQ.js} +8 -8
- package/dist/{factory-NDMPXPYE.js → factory-RW2ROEDS.js} +5 -5
- package/dist/{improvement-review-WYFGNEVP.js → improvement-review-DGQPADKS.js} +5 -5
- package/dist/index.d.ts +40 -1
- package/dist/index.js +35 -31
- package/dist/index.js.map +1 -1
- package/dist/{init-opencode-CMGJ3TXZ.js → init-opencode-MK2NUEWH.js} +5 -5
- package/dist/{issue-triage-NHRZGMKC.js → issue-triage-RVDZEM53.js} +6 -6
- package/dist/{pr-reviewer-helpers-HJRFRUZX.js → pr-reviewer-helpers-TKXJBDT6.js} +4 -4
- package/dist/{registry-command-JCOZA7TM.js → registry-command-VXXKVZ3H.js} +2 -2
- package/dist/{repo-security-plan-OMY33VHA.js → repo-security-plan-YCTKRAGA.js} +3 -3
- package/dist/{research-helpers-synthesize-DFINP3KN.js → research-helpers-synthesize-4L6SXYQU.js} +4 -4
- package/dist/{routing-memory-KK4GPB64.js → routing-memory-INY5DC2P.js} +2 -2
- package/dist/{session-memory-QTHGU2XM.js → session-memory-TQMLN67N.js} +3 -3
- package/dist/{setup-command-CURZCHSQ.js → setup-command-FT5LBTSR.js} +13 -13
- package/dist/{setup-config-FX6SJXGQ.js → setup-config-U3WLC5OO.js} +3 -3
- package/dist/{setup-custom-api-MYN4EVT2.js → setup-custom-api-2E4MZ5MF.js} +3 -3
- package/dist/{tool-memory-3W5NXR4P.js → tool-memory-IV5BVIV4.js} +5 -5
- package/dist/{unified-registry-PKPNJ3G7.js → unified-registry-6LFTI4MG.js} +9 -9
- package/dist/{weather-report-46ZY3X2Z.js → weather-report-7NZ6D4C7.js} +2 -2
- package/package.json +2 -1
- package/dist/chunk-52T2MJDS.js.map +0 -1
- package/dist/chunk-AO4X3BMP.js.map +0 -1
- package/dist/chunk-OKAHIWG4.js.map +0 -1
- package/dist/codebase-search-DKLEA4PR.js +0 -12
- /package/dist/{child-mcp-config-FAWSJFMQ.js.map → child-mcp-config-FJRGAMUU.js.map} +0 -0
- /package/dist/{chunk-IAGLVGHN.js.map → chunk-3JH3FMEJ.js.map} +0 -0
- /package/dist/{chunk-OLCDGMEO.js.map → chunk-3ON2P4WL.js.map} +0 -0
- /package/dist/{chunk-GNCUZDQI.js.map → chunk-4G5W5EPU.js.map} +0 -0
- /package/dist/{chunk-CPS2HN4T.js.map → chunk-5O4JRXNQ.js.map} +0 -0
- /package/dist/{chunk-3KID7AIF.js.map → chunk-7S43YASS.js.map} +0 -0
- /package/dist/{chunk-RJHLNI37.js.map → chunk-BWG54OJS.js.map} +0 -0
- /package/dist/{chunk-6ERIC5NJ.js.map → chunk-CD2NZFAI.js.map} +0 -0
- /package/dist/{chunk-LNPKBBPG.js.map → chunk-CHF63T3L.js.map} +0 -0
- /package/dist/{chunk-RQNBJ7AS.js.map → chunk-DSMSYENI.js.map} +0 -0
- /package/dist/{chunk-CJLMB7MO.js.map → chunk-EQRN5FRZ.js.map} +0 -0
- /package/dist/{chunk-ELWMGKVP.js.map → chunk-F6HJJG3E.js.map} +0 -0
- /package/dist/{chunk-5LPPJIZ4.js.map → chunk-HAVBBSYN.js.map} +0 -0
- /package/dist/{chunk-N56C2MWI.js.map → chunk-HNNSCTOI.js.map} +0 -0
- /package/dist/{chunk-G7NDNFIE.js.map → chunk-IQC2K3KY.js.map} +0 -0
- /package/dist/{chunk-VQE3OSUW.js.map → chunk-JCJHQSAY.js.map} +0 -0
- /package/dist/{chunk-MSBYVBPX.js.map → chunk-MCT7JJF6.js.map} +0 -0
- /package/dist/{chunk-7IUVW67T.js.map → chunk-NT3KCLT6.js.map} +0 -0
- /package/dist/{chunk-2Z4QECP7.js.map → chunk-OOFPDA3B.js.map} +0 -0
- /package/dist/{chunk-ETFCT2CH.js.map → chunk-P7MYTCE6.js.map} +0 -0
- /package/dist/{chunk-HZNOSJOO.js.map → chunk-PZF67XDY.js.map} +0 -0
- /package/dist/{chunk-2ANAH2UU.js.map → chunk-Q3UMNYV2.js.map} +0 -0
- /package/dist/{chunk-TZK7VQAW.js.map → chunk-R46SBPLH.js.map} +0 -0
- /package/dist/{chunk-F5JDQXHJ.js.map → chunk-RO23OT47.js.map} +0 -0
- /package/dist/{chunk-P7RBQUAG.js.map → chunk-ROCNXZBC.js.map} +0 -0
- /package/dist/{chunk-UN7PYUJB.js.map → chunk-SX4E2W3Z.js.map} +0 -0
- /package/dist/{chunk-UGJRDFMN.js.map → chunk-T3VD32JY.js.map} +0 -0
- /package/dist/{chunk-TORS5V2C.js.map → chunk-TB26XNJH.js.map} +0 -0
- /package/dist/{chunk-MX3XD2ML.js.map → chunk-W76DOL27.js.map} +0 -0
- /package/dist/{chunk-I3LGUSZ3.js.map → chunk-WB33EPTV.js.map} +0 -0
- /package/dist/{chunk-HJA3Z56H.js.map → chunk-XGNB7LQB.js.map} +0 -0
- /package/dist/{chunk-EQLJYWLP.js.map → chunk-ZXFIBDT3.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-JDGZ25MD.js.map → cli-circuit-breaker-FJQXDC5M.js.map} +0 -0
- /package/dist/{codebase-search-DKLEA4PR.js.map → codebase-search-LUF5YJLQ.js.map} +0 -0
- /package/dist/{composite-router-EZPPVCMD.js.map → composite-router-UQTCPADM.js.map} +0 -0
- /package/dist/{consensus-vote-YKKJHLOD.js.map → consensus-vote-FEDF24T5.js.map} +0 -0
- /package/dist/{context-retriever-EGMARBAC.js.map → context-retriever-TIJGFLGO.js.map} +0 -0
- /package/dist/{doctor-deep-QTBDR3VV.js.map → doctor-deep-EULAHWTK.js.map} +0 -0
- /package/dist/{expert-bridge-FZYJ3XAL.js.map → expert-bridge-7HQ54XYU.js.map} +0 -0
- /package/dist/{factory-NDMPXPYE.js.map → factory-QZZQVDGQ.js.map} +0 -0
- /package/dist/{factory-SABHBAHC.js.map → factory-RW2ROEDS.js.map} +0 -0
- /package/dist/{improvement-review-WYFGNEVP.js.map → improvement-review-DGQPADKS.js.map} +0 -0
- /package/dist/{init-opencode-CMGJ3TXZ.js.map → init-opencode-MK2NUEWH.js.map} +0 -0
- /package/dist/{issue-triage-NHRZGMKC.js.map → issue-triage-RVDZEM53.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-HJRFRUZX.js.map → pr-reviewer-helpers-TKXJBDT6.js.map} +0 -0
- /package/dist/{registry-command-JCOZA7TM.js.map → registry-command-VXXKVZ3H.js.map} +0 -0
- /package/dist/{repo-security-plan-OMY33VHA.js.map → repo-security-plan-YCTKRAGA.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-DFINP3KN.js.map → research-helpers-synthesize-4L6SXYQU.js.map} +0 -0
- /package/dist/{routing-memory-KK4GPB64.js.map → routing-memory-INY5DC2P.js.map} +0 -0
- /package/dist/{session-memory-QTHGU2XM.js.map → session-memory-TQMLN67N.js.map} +0 -0
- /package/dist/{setup-command-CURZCHSQ.js.map → setup-command-FT5LBTSR.js.map} +0 -0
- /package/dist/{setup-config-FX6SJXGQ.js.map → setup-config-U3WLC5OO.js.map} +0 -0
- /package/dist/{setup-custom-api-MYN4EVT2.js.map → setup-custom-api-2E4MZ5MF.js.map} +0 -0
- /package/dist/{tool-memory-3W5NXR4P.js.map → tool-memory-IV5BVIV4.js.map} +0 -0
- /package/dist/{unified-registry-PKPNJ3G7.js.map → unified-registry-6LFTI4MG.js.map} +0 -0
- /package/dist/{weather-report-46ZY3X2Z.js.map → weather-report-7NZ6D4C7.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GitHubProvider,
|
|
3
3
|
ScmError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RO23OT47.js";
|
|
5
5
|
import {
|
|
6
6
|
ROLE_DEFAULT_TRUST,
|
|
7
7
|
ReputationCache,
|
|
@@ -11,17 +11,17 @@ import {
|
|
|
11
11
|
gateWithReputation,
|
|
12
12
|
resolveReputationGatingMode,
|
|
13
13
|
sanitizeInput
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SX4E2W3Z.js";
|
|
15
15
|
import {
|
|
16
16
|
emitPolicyEvent
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-BWG54OJS.js";
|
|
18
18
|
import {
|
|
19
19
|
CLI_SUBPROCESS_TIMEOUTS,
|
|
20
20
|
createLogger,
|
|
21
21
|
err,
|
|
22
22
|
getTimeProvider,
|
|
23
23
|
ok
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-QXSR5KPG.js";
|
|
25
25
|
|
|
26
26
|
// src/security/trust-classifier.ts
|
|
27
27
|
function mapAuthorAssociation(association) {
|
|
@@ -1211,4 +1211,4 @@ export {
|
|
|
1211
1211
|
IssueTriage,
|
|
1212
1212
|
createIssueTriage
|
|
1213
1213
|
};
|
|
1214
|
-
//# sourceMappingURL=chunk-
|
|
1214
|
+
//# sourceMappingURL=chunk-R46SBPLH.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
err,
|
|
5
5
|
getErrorMessage,
|
|
6
6
|
ok
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QXSR5KPG.js";
|
|
8
8
|
|
|
9
9
|
// src/scm/types.ts
|
|
10
10
|
var ScmError = class extends Error {
|
|
@@ -263,4 +263,4 @@ export {
|
|
|
263
263
|
ScmError,
|
|
264
264
|
GitHubProvider
|
|
265
265
|
};
|
|
266
|
-
//# sourceMappingURL=chunk-
|
|
266
|
+
//# sourceMappingURL=chunk-RO23OT47.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readOpenAICompatEnv
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3ON2P4WL.js";
|
|
4
4
|
import {
|
|
5
5
|
resolveInsideRoot
|
|
6
6
|
} from "./chunk-NUBSJGQZ.js";
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
createAllAdapters,
|
|
12
12
|
probeCli
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NT3KCLT6.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULTS
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-JCJHQSAY.js";
|
|
17
17
|
import {
|
|
18
18
|
CliNameSchema,
|
|
19
19
|
DEFAULT_CAPABILITIES,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
ok,
|
|
31
31
|
symbols,
|
|
32
32
|
writeLine
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-QXSR5KPG.js";
|
|
34
34
|
import {
|
|
35
35
|
getLearningDir,
|
|
36
36
|
getOutcomesFile,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
} from "./chunk-DHVMSIT5.js";
|
|
47
47
|
|
|
48
48
|
// src/version.ts
|
|
49
|
-
var VERSION = true ? "2.
|
|
49
|
+
var VERSION = true ? "2.169.0" : "dev";
|
|
50
50
|
|
|
51
51
|
// src/config/schemas-core.ts
|
|
52
52
|
import { z } from "zod";
|
|
@@ -2182,7 +2182,7 @@ async function runDoctorFix(result) {
|
|
|
2182
2182
|
writeLine2("\u2500".repeat(40));
|
|
2183
2183
|
let fixCount = 0;
|
|
2184
2184
|
if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
|
|
2185
|
-
const { runSetup } = await import("./setup-command-
|
|
2185
|
+
const { runSetup } = await import("./setup-command-FT5LBTSR.js");
|
|
2186
2186
|
const setupResult = runSetup({
|
|
2187
2187
|
skipMcp: true,
|
|
2188
2188
|
skipRules: true,
|
|
@@ -2196,7 +2196,7 @@ async function runDoctorFix(result) {
|
|
|
2196
2196
|
}
|
|
2197
2197
|
}
|
|
2198
2198
|
if (!result.configFile.found) {
|
|
2199
|
-
const { runConfigInitSync } = await import("./setup-config-
|
|
2199
|
+
const { runConfigInitSync } = await import("./setup-config-U3WLC5OO.js");
|
|
2200
2200
|
const configResult = runConfigInitSync(process.cwd(), false, false);
|
|
2201
2201
|
if (configResult.success && configResult.created) {
|
|
2202
2202
|
writeLine2(`\u2713 Generated config: ${configResult.path}`);
|
|
@@ -2295,4 +2295,4 @@ export {
|
|
|
2295
2295
|
startStdioServer,
|
|
2296
2296
|
closeServer
|
|
2297
2297
|
};
|
|
2298
|
-
//# sourceMappingURL=chunk-
|
|
2298
|
+
//# sourceMappingURL=chunk-ROCNXZBC.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
CACHE_TIMEOUTS,
|
|
3
3
|
createLogger,
|
|
4
4
|
getTimeProvider
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QXSR5KPG.js";
|
|
6
6
|
|
|
7
7
|
// src/security/trust-types.ts
|
|
8
8
|
import { z } from "zod";
|
|
@@ -560,4 +560,4 @@ export {
|
|
|
560
560
|
resolveReputationGatingMode,
|
|
561
561
|
gateWithReputation
|
|
562
562
|
};
|
|
563
|
-
//# sourceMappingURL=chunk-
|
|
563
|
+
//# sourceMappingURL=chunk-SX4E2W3Z.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
MODEL_IDS,
|
|
4
4
|
getTimeProvider,
|
|
5
5
|
resolveModelIdentitySync
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QXSR5KPG.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-T3VD32JY.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getDefaultRegistry
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QXSR5KPG.js";
|
|
4
4
|
import {
|
|
5
5
|
getNexusDataDir
|
|
6
6
|
} from "./chunk-DHVMSIT5.js";
|
|
@@ -124,4 +124,4 @@ export {
|
|
|
124
124
|
loadUsageEvents,
|
|
125
125
|
rollupByModel
|
|
126
126
|
};
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-TB26XNJH.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getErrorMessage,
|
|
5
5
|
getTimeProvider,
|
|
6
6
|
ok
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QXSR5KPG.js";
|
|
8
8
|
|
|
9
9
|
// src/context/session-memory.ts
|
|
10
10
|
import * as fs from "fs";
|
|
@@ -352,4 +352,4 @@ export {
|
|
|
352
352
|
SessionMemory,
|
|
353
353
|
createSessionMemory
|
|
354
354
|
};
|
|
355
|
-
//# sourceMappingURL=chunk-
|
|
355
|
+
//# sourceMappingURL=chunk-W76DOL27.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runConfigInitSync
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CD2NZFAI.js";
|
|
4
4
|
import {
|
|
5
5
|
VERSION,
|
|
6
6
|
checkApiKeys,
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
checkSqlite,
|
|
9
9
|
defaultConfig,
|
|
10
10
|
initDataDirectories
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ROCNXZBC.js";
|
|
12
12
|
import {
|
|
13
13
|
BUILT_IN_EXPERTS
|
|
14
14
|
} from "./chunk-ZM4O442V.js";
|
|
15
15
|
import {
|
|
16
16
|
probeAllClis
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-NT3KCLT6.js";
|
|
18
18
|
import {
|
|
19
19
|
CLI_SUBPROCESS_TIMEOUTS,
|
|
20
20
|
colors,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
getErrorMessage,
|
|
26
26
|
getTimeProvider,
|
|
27
27
|
symbols
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-QXSR5KPG.js";
|
|
29
29
|
import {
|
|
30
30
|
ensureGitignored,
|
|
31
31
|
findRepoRoot
|
|
@@ -2001,4 +2001,4 @@ export {
|
|
|
2001
2001
|
setupCommand,
|
|
2002
2002
|
setupCommandAsync
|
|
2003
2003
|
};
|
|
2004
|
-
//# sourceMappingURL=chunk-
|
|
2004
|
+
//# sourceMappingURL=chunk-WB33EPTV.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveToken
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3JH3FMEJ.js";
|
|
4
4
|
import {
|
|
5
5
|
REGISTRY_PATH,
|
|
6
6
|
getProjectRoot,
|
|
7
7
|
loadPapersRegistry,
|
|
8
8
|
loadTechniquesRegistry,
|
|
9
9
|
savePapersRegistry
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HAVBBSYN.js";
|
|
11
11
|
import {
|
|
12
12
|
resolveInsideRoot
|
|
13
13
|
} from "./chunk-NUBSJGQZ.js";
|
|
14
14
|
import {
|
|
15
15
|
getToolMemory
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-Q3UMNYV2.js";
|
|
17
17
|
import {
|
|
18
18
|
capitalizeWords,
|
|
19
19
|
truncateSentence
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
getTimeProvider,
|
|
39
39
|
ok,
|
|
40
40
|
registerPersistentDistillerFactory
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-QXSR5KPG.js";
|
|
42
42
|
import {
|
|
43
43
|
ensureLearningDir,
|
|
44
44
|
getRulesFile
|
|
@@ -3819,4 +3819,4 @@ export {
|
|
|
3819
3819
|
DEFAULT_CONTEXT_BUDGET_TOKENS,
|
|
3820
3820
|
getContextPromptPrefix
|
|
3821
3821
|
};
|
|
3822
|
-
//# sourceMappingURL=chunk-
|
|
3822
|
+
//# sourceMappingURL=chunk-XGNB7LQB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/indexer/codebase-search.ts","../src/indexer/symbol-extractor.ts"],"sourcesContent":["/**\n * Codebase search — keyword search across symbol indices.\n *\n * Builds an in-memory symbol index for a directory of TS/JS files,\n * then supports keyword search, file summaries, and symbol lookup.\n *\n * Inspired by Augment Code's Context Engine. Uses the existing\n * extractSymbols() function for AST parsing.\n *\n * @module indexer/codebase-search\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { resolve, extname, relative } from 'node:path';\nimport {\n extractSymbols,\n type CodeSymbol,\n type SymbolExtractionResult,\n} from './symbol-extractor.js';\n\n/** A symbol with its source file path. */\nexport interface IndexedSymbol extends CodeSymbol {\n /** Relative file path from the indexed root. */\n filePath: string;\n}\n\n/** Search result with relevance scoring. */\nexport interface SearchResult {\n symbol: IndexedSymbol;\n /** Relevance score (higher = better match). */\n score: number;\n /** How the query matched (exact, prefix, substring, word). */\n matchType: 'exact' | 'prefix' | 'substring' | 'word';\n}\n\n/** File summary — compact overview of a source file. */\nexport interface FileSummary {\n filePath: string;\n totalLines: number;\n exportedSymbols: number;\n privateSymbols: number;\n kinds: Record<string, number>;\n}\n\n/** Index statistics. */\nexport interface IndexStats {\n totalFiles: number;\n totalSymbols: number;\n indexedAt: string;\n /** Directories not descended into because `maxDepth` was exhausted (#4243). */\n skippedDirs: number;\n}\n\n/** Default recursion depth for `CodebaseIndex.index()` (#4243 — was hardcoded 4). */\nexport const DEFAULT_INDEX_MAX_DEPTH = 24;\n/** Upper clamp for caller-supplied `maxDepth` to bound worst-case tree-walk cost. */\nexport const MAX_INDEX_MAX_DEPTH = 64;\n\n// Score weights for different match types\nconst SCORE_EXACT = 20;\nconst SCORE_PREFIX = 10;\nconst SCORE_WORD = 5;\nconst SCORE_SUBSTRING = 2;\nconst SCORE_EXPORTED_BONUS = 3;\n\nfunction isSourceFile(name: string): boolean {\n const ext = extname(name).toLowerCase();\n return (\n ['.ts', '.tsx', '.js', '.jsx'].includes(ext) &&\n !name.endsWith('.test.ts') &&\n !name.endsWith('.test.tsx') &&\n !name.endsWith('.d.ts')\n );\n}\n\n/** Result of a recursive source-file walk: the files found plus a truncation signal. */\nexport interface FindSourceFilesResult {\n files: string[];\n /** Count of directories that were NOT descended into because maxDepth hit 0. */\n skippedDirs: number;\n}\n\n/**\n * Recursively collect TS/JS source files under `dir`, bounded by `maxDepth`,\n * skipping `node_modules`/`dist` and test/declaration files. Exported so the\n * `search_usages` tool (#4265) reuses the exact same source-file set the symbol\n * index walks — keeping the two tools' scopes apples-to-apples (DRY).\n */\nexport async function findSourceFiles(\n dir: string,\n maxDepth: number\n): Promise<FindSourceFilesResult> {\n if (maxDepth <= 0) return { files: [], skippedDirs: 1 };\n const files: string[] = [];\n let skippedDirs = 0;\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== 'dist') {\n const sub = await findSourceFiles(fullPath, maxDepth - 1);\n files.push(...sub.files);\n skippedDirs += sub.skippedDirs;\n }\n if (entry.isFile() && isSourceFile(entry.name)) {\n files.push(fullPath);\n }\n }\n return { files, skippedDirs };\n}\n\nfunction scoreMatch(symbolName: string, query: string): SearchResult['score'] | null {\n const nameLower = symbolName.toLowerCase();\n const queryLower = query.toLowerCase();\n\n if (nameLower === queryLower) return SCORE_EXACT;\n if (nameLower.startsWith(queryLower)) return SCORE_PREFIX;\n\n // Word boundary match (camelCase splitting)\n const words = symbolName\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .split(/[\\s_-]+/);\n if (words.some((w) => w === queryLower)) return SCORE_WORD;\n\n if (nameLower.includes(queryLower)) return SCORE_SUBSTRING;\n\n return null;\n}\n\nfunction getMatchType(score: number): SearchResult['matchType'] {\n if (score >= SCORE_EXACT) return 'exact';\n if (score >= SCORE_PREFIX) return 'prefix';\n if (score >= SCORE_WORD) return 'word';\n return 'substring';\n}\n\n/** In-memory codebase symbol index. */\nexport class CodebaseIndex {\n private readonly symbols: IndexedSymbol[] = [];\n private readonly fileResults = new Map<string, SymbolExtractionResult>();\n private readonly rootDir: string;\n private skippedDirs = 0;\n\n constructor(rootDir: string) {\n this.rootDir = rootDir;\n }\n\n /**\n * Index all TS/JS source files in the directory.\n *\n * `maxDepth` is clamped to `[1, MAX_INDEX_MAX_DEPTH]` so a caller-supplied\n * value can't force an unbounded tree-walk (#4243).\n */\n async index(maxDepth: number = DEFAULT_INDEX_MAX_DEPTH): Promise<IndexStats> {\n const clampedDepth = Math.min(Math.max(maxDepth, 1), MAX_INDEX_MAX_DEPTH);\n const { files, skippedDirs } = await findSourceFiles(this.rootDir, clampedDepth);\n this.skippedDirs = skippedDirs;\n\n for (const file of files) {\n const result = await extractSymbols(file);\n const relPath = relative(this.rootDir, file);\n this.fileResults.set(relPath, result);\n\n for (const symbol of result.symbols) {\n this.symbols.push({ ...symbol, filePath: relPath });\n }\n }\n\n return {\n totalFiles: files.length,\n totalSymbols: this.symbols.length,\n indexedAt: new Date().toISOString(),\n skippedDirs,\n };\n }\n\n /** Search symbols by keyword. Returns top N results sorted by relevance. */\n search(query: string, limit = 20): SearchResult[] {\n const results: SearchResult[] = [];\n\n for (const symbol of this.symbols) {\n const baseScore = scoreMatch(symbol.name, query);\n if (baseScore === null) continue;\n\n const bonus = symbol.exported ? SCORE_EXPORTED_BONUS : 0;\n results.push({\n symbol,\n score: baseScore + bonus,\n matchType: getMatchType(baseScore),\n });\n }\n\n return results.sort((a, b) => b.score - a.score).slice(0, limit);\n }\n\n /** Get a compact summary of a file's symbols. */\n getFileSummary(filePath: string): FileSummary | undefined {\n const result = this.fileResults.get(filePath);\n if (result === undefined) return undefined;\n\n const kinds: Record<string, number> = {};\n let exported = 0;\n let priv = 0;\n\n for (const s of result.symbols) {\n kinds[s.kind] = (kinds[s.kind] ?? 0) + 1;\n if (s.exported) exported++;\n else priv++;\n }\n\n return {\n filePath,\n totalLines: result.totalLines,\n exportedSymbols: exported,\n privateSymbols: priv,\n kinds,\n };\n }\n\n /** List all indexed files with symbol counts. */\n listFiles(): Array<{ path: string; symbols: number; lines: number }> {\n return [...this.fileResults.entries()].map(([path, result]) => ({\n path,\n symbols: result.symbols.length,\n lines: result.totalLines,\n }));\n }\n\n /** Get index statistics. */\n get stats(): { files: number; symbols: number; skippedDirs: number } {\n return {\n files: this.fileResults.size,\n symbols: this.symbols.length,\n skippedDirs: this.skippedDirs,\n };\n }\n}\n","/**\n * AST symbol extraction for token-efficient code retrieval.\n *\n * Uses TypeScript's compiler API to extract function, class, method,\n * interface, and type definitions from source files.\n *\n * Token savings: ~80-99% vs reading full files.\n * No additional dependencies — uses TypeScript (already a project dep).\n *\n * @module indexer/symbol-extractor\n */\n\nimport { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport ts from 'typescript';\n\n/** A symbol extracted from source code. */\nexport interface CodeSymbol {\n /** Symbol name */\n name: string;\n /** Symbol kind */\n kind: 'function' | 'class' | 'method' | 'interface' | 'type' | 'variable' | 'enum';\n /** Start line (1-based) */\n startLine: number;\n /** End line (1-based) */\n endLine: number;\n /** Full source text of the symbol */\n text: string;\n /** Whether the symbol is exported */\n exported: boolean;\n}\n\n/** Result of extracting symbols from a file. */\nexport interface SymbolExtractionResult {\n filePath: string;\n symbols: CodeSymbol[];\n totalLines: number;\n totalChars: number;\n symbolChars: number;\n savingsPercent: number;\n}\n\nfunction getKind(node: ts.Node): CodeSymbol['kind'] | null {\n if (ts.isFunctionDeclaration(node)) return 'function';\n if (ts.isClassDeclaration(node)) return 'class';\n if (ts.isInterfaceDeclaration(node)) return 'interface';\n if (ts.isTypeAliasDeclaration(node)) return 'type';\n if (ts.isEnumDeclaration(node)) return 'enum';\n if (ts.isMethodDeclaration(node)) return 'method';\n if (ts.isVariableStatement(node)) return 'variable';\n return null;\n}\n\nfunction getName(node: ts.Node): string {\n if (\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isMethodDeclaration(node)\n ) {\n const nameNode = (node as ts.NamedDeclaration).name;\n return nameNode ? nameNode.getText() : '<anonymous>';\n }\n if (ts.isVariableStatement(node)) {\n const decls = node.declarationList.declarations;\n const firstDecl = decls[0];\n if (firstDecl !== undefined) {\n return firstDecl.name.getText();\n }\n }\n return '<anonymous>';\n}\n\nfunction isExported(node: ts.Node): boolean {\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;\n if (modifiers) {\n return modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n }\n return false;\n}\n\nfunction visitNode(node: ts.Node, sourceFile: ts.SourceFile, symbols: CodeSymbol[]): void {\n const kind = getKind(node);\n if (kind !== null) {\n const name = getName(node);\n if (name !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n symbols.push({\n name,\n kind,\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: node.getText(sourceFile),\n exported: isExported(node),\n });\n }\n }\n if (ts.isClassDeclaration(node)) {\n visitClassMembers(node, sourceFile, symbols);\n return;\n }\n ts.forEachChild(node, (child) => {\n visitNode(child, sourceFile, symbols);\n });\n}\n\nfunction visitClassMembers(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n symbols: CodeSymbol[]\n): void {\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member) || ts.isPropertyDeclaration(member)) {\n const memberName = member.name.getText();\n if (memberName !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(member.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(member.getEnd());\n symbols.push({\n name: memberName,\n kind: 'method',\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: member.getText(sourceFile),\n exported: false,\n });\n }\n }\n }\n}\n\nfunction computeSavings(totalChars: number, symbolChars: number): number {\n return totalChars > 0 ? Math.round(100 * (1 - symbolChars / totalChars) * 10) / 10 : 0;\n}\n\n/**\n * Extract symbols from a TypeScript/JavaScript file.\n */\nexport async function extractSymbols(filePath: string): Promise<SymbolExtractionResult> {\n const ext = extname(filePath).toLowerCase();\n if (!['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {\n return {\n filePath,\n symbols: [],\n totalLines: 0,\n totalChars: 0,\n symbolChars: 0,\n savingsPercent: 0,\n };\n }\n\n const source = await readFile(filePath, 'utf-8');\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n const symbols: CodeSymbol[] = [];\n\n ts.forEachChild(sourceFile, (node) => {\n visitNode(node, sourceFile, symbols);\n });\n\n const totalChars = source.length;\n const symbolChars = symbols.reduce((sum, s) => sum + s.text.length, 0);\n\n return {\n filePath,\n symbols,\n totalLines: source.split('\\n').length,\n totalChars,\n symbolChars,\n savingsPercent: computeSavings(totalChars, symbolChars),\n };\n}\n\n/**\n * Extract a compact symbol index (names + locations only, no source text).\n * This is the minimal representation for LLM context — ~95%+ token savings.\n */\nexport async function extractSymbolIndex(filePath: string): Promise<string> {\n const result = await extractSymbols(filePath);\n if (result.symbols.length === 0) return '';\n\n const lines = result.symbols.map((s) => {\n const exp = s.exported ? 'export ' : '';\n return `${exp}${s.kind} ${s.name} (L${String(s.startLine)}-${String(s.endLine)})`;\n });\n\n return `// ${filePath} — ${String(result.symbols.length)} symbols\\n${lines.join('\\n')}`;\n}\n"],"mappings":"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","names":["extname","extname"]}
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
gateWithReputation,
|
|
10
10
|
resolveReputationGatingMode,
|
|
11
11
|
sanitizeInput
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-SX4E2W3Z.js";
|
|
13
13
|
import {
|
|
14
14
|
createLogger,
|
|
15
15
|
getTimeProvider
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-QXSR5KPG.js";
|
|
17
17
|
|
|
18
18
|
// src/dogfooding/pr-reviewer-helpers.ts
|
|
19
19
|
import { randomUUID } from "crypto";
|
|
@@ -288,4 +288,4 @@ export {
|
|
|
288
288
|
formatReviewComment,
|
|
289
289
|
createFailedReview
|
|
290
290
|
};
|
|
291
|
-
//# sourceMappingURL=chunk-
|
|
291
|
+
//# sourceMappingURL=chunk-ZXFIBDT3.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CliCircuitBreakerIntegration,
|
|
3
3
|
createCliCircuitBreakerIntegration
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-PZF67XDY.js";
|
|
5
|
+
import "./chunk-DSMSYENI.js";
|
|
6
|
+
import "./chunk-QXSR5KPG.js";
|
|
7
7
|
import "./chunk-AXTD4TFK.js";
|
|
8
8
|
import "./chunk-DHVMSIT5.js";
|
|
9
9
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
CliCircuitBreakerIntegration,
|
|
12
12
|
createCliCircuitBreakerIntegration
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=cli-circuit-breaker-
|
|
14
|
+
//# sourceMappingURL=cli-circuit-breaker-FJQXDC5M.js.map
|
package/dist/cli.js
CHANGED
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
generateSummary,
|
|
14
14
|
parseFindings,
|
|
15
15
|
sumFindings
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-ZXFIBDT3.js";
|
|
17
|
+
import "./chunk-5O4JRXNQ.js";
|
|
18
18
|
import {
|
|
19
19
|
setupCommandAsync,
|
|
20
20
|
verifyCommand
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-WB33EPTV.js";
|
|
22
|
+
import "./chunk-CD2NZFAI.js";
|
|
23
23
|
import {
|
|
24
24
|
AuthHandler,
|
|
25
25
|
DEFAULT_EXPERTS,
|
|
@@ -119,6 +119,7 @@ import {
|
|
|
119
119
|
registerRunTool,
|
|
120
120
|
registerRunWorkflowTool,
|
|
121
121
|
registerSearchCodebaseTool,
|
|
122
|
+
registerSearchUsagesTool,
|
|
122
123
|
registerSuggestResearchTasksTool,
|
|
123
124
|
registerSupplyChainTradeoffPanelTool,
|
|
124
125
|
registerSurveyOssLandscapeTool,
|
|
@@ -138,10 +139,10 @@ import {
|
|
|
138
139
|
validateCommand,
|
|
139
140
|
validateWorkflow,
|
|
140
141
|
wrapInMarkdownFence
|
|
141
|
-
} from "./chunk-
|
|
142
|
-
import "./chunk-
|
|
142
|
+
} from "./chunk-N7FIUFQL.js";
|
|
143
|
+
import "./chunk-HNNSCTOI.js";
|
|
143
144
|
import "./chunk-HFOQKCD2.js";
|
|
144
|
-
import "./chunk-
|
|
145
|
+
import "./chunk-YF35FKKD.js";
|
|
145
146
|
import {
|
|
146
147
|
CATEGORY_DISPLAY_NAMES,
|
|
147
148
|
DEFAULT_PR_REVIEW_CONFIG
|
|
@@ -165,15 +166,15 @@ import {
|
|
|
165
166
|
loadConfig,
|
|
166
167
|
runDoctor,
|
|
167
168
|
validateNexusEnv
|
|
168
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-ROCNXZBC.js";
|
|
169
170
|
import {
|
|
170
171
|
buildOpenAICompatAdapters,
|
|
171
172
|
readOpenAICompatEnv
|
|
172
|
-
} from "./chunk-
|
|
173
|
-
import "./chunk-
|
|
173
|
+
} from "./chunk-3ON2P4WL.js";
|
|
174
|
+
import "./chunk-PZF67XDY.js";
|
|
174
175
|
import {
|
|
175
176
|
shutdownExpertBridge
|
|
176
|
-
} from "./chunk-
|
|
177
|
+
} from "./chunk-4G5W5EPU.js";
|
|
177
178
|
import {
|
|
178
179
|
ConsensusVoteInputSchema,
|
|
179
180
|
DEFAULT_VOTE_TIMEOUT_MS,
|
|
@@ -183,25 +184,25 @@ import {
|
|
|
183
184
|
executeVoting,
|
|
184
185
|
mapOutcomeToDecision,
|
|
185
186
|
registerConsensusVoteTool
|
|
186
|
-
} from "./chunk-
|
|
187
|
+
} from "./chunk-F6HJJG3E.js";
|
|
187
188
|
import {
|
|
188
189
|
loadUsageEvents,
|
|
189
190
|
rollupByModel
|
|
190
|
-
} from "./chunk-
|
|
191
|
+
} from "./chunk-TB26XNJH.js";
|
|
191
192
|
import {
|
|
192
193
|
synthesizeResearch
|
|
193
|
-
} from "./chunk-
|
|
194
|
+
} from "./chunk-7S43YASS.js";
|
|
194
195
|
import {
|
|
195
196
|
classifyTrust,
|
|
196
197
|
createFullGitHubProvider,
|
|
197
198
|
evaluatePolicy,
|
|
198
199
|
parsePRUrl
|
|
199
|
-
} from "./chunk-
|
|
200
|
-
import "./chunk-
|
|
200
|
+
} from "./chunk-R46SBPLH.js";
|
|
201
|
+
import "./chunk-RO23OT47.js";
|
|
201
202
|
import {
|
|
202
203
|
ReputationCache,
|
|
203
204
|
sanitizeInput
|
|
204
|
-
} from "./chunk-
|
|
205
|
+
} from "./chunk-SX4E2W3Z.js";
|
|
205
206
|
import {
|
|
206
207
|
ImprovementReviewInputSchema,
|
|
207
208
|
calculateFitnessScore,
|
|
@@ -215,11 +216,11 @@ import {
|
|
|
215
216
|
registerImprovementReviewTool,
|
|
216
217
|
runImprovementReview,
|
|
217
218
|
scanForSecrets
|
|
218
|
-
} from "./chunk-
|
|
219
|
+
} from "./chunk-EQRN5FRZ.js";
|
|
219
220
|
import {
|
|
220
221
|
createDefaultPolicyFirewall
|
|
221
|
-
} from "./chunk-
|
|
222
|
-
import "./chunk-
|
|
222
|
+
} from "./chunk-IQC2K3KY.js";
|
|
223
|
+
import "./chunk-BWG54OJS.js";
|
|
223
224
|
import {
|
|
224
225
|
CodebaseIndexSchema,
|
|
225
226
|
PaperStatusSchema,
|
|
@@ -245,31 +246,31 @@ import {
|
|
|
245
246
|
loadSourcesRegistry,
|
|
246
247
|
rankDiscoveredItems,
|
|
247
248
|
saveSourcesRegistry
|
|
248
|
-
} from "./chunk-
|
|
249
|
+
} from "./chunk-XGNB7LQB.js";
|
|
249
250
|
import {
|
|
250
251
|
resolveToken
|
|
251
|
-
} from "./chunk-
|
|
252
|
+
} from "./chunk-3JH3FMEJ.js";
|
|
252
253
|
import {
|
|
253
254
|
loadPapersRegistry,
|
|
254
255
|
loadTechniquesRegistry,
|
|
255
256
|
savePapersRegistry
|
|
256
|
-
} from "./chunk-
|
|
257
|
+
} from "./chunk-HAVBBSYN.js";
|
|
257
258
|
import "./chunk-NUBSJGQZ.js";
|
|
258
259
|
import {
|
|
259
260
|
MemoryError,
|
|
260
261
|
shutdownToolMemory
|
|
261
|
-
} from "./chunk-
|
|
262
|
+
} from "./chunk-Q3UMNYV2.js";
|
|
262
263
|
import {
|
|
263
264
|
capitalize,
|
|
264
265
|
capitalizeKebab
|
|
265
266
|
} from "./chunk-6T3EPABN.js";
|
|
266
|
-
import "./chunk-
|
|
267
|
+
import "./chunk-W76DOL27.js";
|
|
267
268
|
import "./chunk-ZM4O442V.js";
|
|
268
269
|
import "./chunk-PINS44XA.js";
|
|
269
270
|
import "./chunk-KSQSWEFH.js";
|
|
270
271
|
import {
|
|
271
272
|
createUnifiedRegistry
|
|
272
|
-
} from "./chunk-
|
|
273
|
+
} from "./chunk-P7MYTCE6.js";
|
|
273
274
|
import {
|
|
274
275
|
NEXUS_SUBPROCESS_DEPTH_ENV,
|
|
275
276
|
createAllAdapters,
|
|
@@ -277,15 +278,15 @@ import {
|
|
|
277
278
|
isRecord,
|
|
278
279
|
probeAllClis,
|
|
279
280
|
readSubprocessDepth
|
|
280
|
-
} from "./chunk-
|
|
281
|
-
import "./chunk-
|
|
281
|
+
} from "./chunk-NT3KCLT6.js";
|
|
282
|
+
import "./chunk-MCT7JJF6.js";
|
|
282
283
|
import {
|
|
283
284
|
DEFAULTS
|
|
284
|
-
} from "./chunk-
|
|
285
|
-
import "./chunk-
|
|
286
|
-
import "./chunk-
|
|
285
|
+
} from "./chunk-JCJHQSAY.js";
|
|
286
|
+
import "./chunk-DSMSYENI.js";
|
|
287
|
+
import "./chunk-T3VD32JY.js";
|
|
287
288
|
import "./chunk-QZUG667L.js";
|
|
288
|
-
import "./chunk-
|
|
289
|
+
import "./chunk-OOFPDA3B.js";
|
|
289
290
|
import {
|
|
290
291
|
API_TIMEOUTS,
|
|
291
292
|
AgentCapability,
|
|
@@ -359,7 +360,7 @@ import {
|
|
|
359
360
|
validateTimeout,
|
|
360
361
|
writeEmptyLine,
|
|
361
362
|
writeLine
|
|
362
|
-
} from "./chunk-
|
|
363
|
+
} from "./chunk-QXSR5KPG.js";
|
|
363
364
|
import "./chunk-AXTD4TFK.js";
|
|
364
365
|
import {
|
|
365
366
|
applyPortableMode,
|
|
@@ -4037,7 +4038,7 @@ ${file.patch}
|
|
|
4037
4038
|
violations: policyResult.violations
|
|
4038
4039
|
});
|
|
4039
4040
|
}
|
|
4040
|
-
const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-
|
|
4041
|
+
const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-TKXJBDT6.js");
|
|
4041
4042
|
const body = formatReviewComment2(result);
|
|
4042
4043
|
const postResult = await provider.createReview(pr.prNumber, body, result.decision);
|
|
4043
4044
|
if (!postResult.ok) {
|
|
@@ -17385,7 +17386,7 @@ function startImprovementReviewScheduler(options) {
|
|
|
17385
17386
|
let running = false;
|
|
17386
17387
|
const runOnce = async () => {
|
|
17387
17388
|
try {
|
|
17388
|
-
const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-
|
|
17389
|
+
const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-DGQPADKS.js");
|
|
17389
17390
|
const input = ImprovementReviewInputSchema2.parse({ fileIssues });
|
|
17390
17391
|
const result = await runImprovementReview2(input, { logger: logger19 });
|
|
17391
17392
|
logger19.info("Scheduled improvement_review complete", {
|
|
@@ -17962,6 +17963,7 @@ var HANDLER_TABLE = {
|
|
|
17962
17963
|
verify_audit_chain: standardHandler("verify_audit_chain", registerVerifyAuditChainTool),
|
|
17963
17964
|
extract_symbols: standardHandler("extract_symbols", registerExtractSymbolsTool),
|
|
17964
17965
|
search_codebase: standardHandler("search_codebase", registerSearchCodebaseTool),
|
|
17966
|
+
search_usages: standardHandler("search_usages", registerSearchUsagesTool),
|
|
17965
17967
|
run_dev_pipeline: standardHandler("run_dev_pipeline", registerDevPipelineTool),
|
|
17966
17968
|
run_pipeline: standardHandler("run_pipeline", registerPipelineTool),
|
|
17967
17969
|
pr_review: (ctx) => {
|
|
@@ -19438,7 +19440,7 @@ function adaptConfigToLibrary(config) {
|
|
|
19438
19440
|
}
|
|
19439
19441
|
function createBeliefPromoter() {
|
|
19440
19442
|
return async (event) => {
|
|
19441
|
-
const { getToolMemory } = await import("./tool-memory-
|
|
19443
|
+
const { getToolMemory } = await import("./tool-memory-IV5BVIV4.js");
|
|
19442
19444
|
const tm = getToolMemory();
|
|
19443
19445
|
await tm.recordBelief(
|
|
19444
19446
|
`skill:${event.name}`,
|
|
@@ -20614,7 +20616,7 @@ async function handleResearchCommand(args) {
|
|
|
20614
20616
|
}
|
|
20615
20617
|
}
|
|
20616
20618
|
async function handleRegistryCommand(args) {
|
|
20617
|
-
const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-
|
|
20619
|
+
const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-VXXKVZ3H.js");
|
|
20618
20620
|
const subcommand = args.subcommand;
|
|
20619
20621
|
if (!isValidRegistrySubcommand(subcommand)) {
|
|
20620
20622
|
process.stdout.write(`${formatRegistryUsage()}
|
|
@@ -20662,7 +20664,7 @@ async function handleVerifyCommand(args) {
|
|
|
20662
20664
|
async function handleDoctorCommand(args) {
|
|
20663
20665
|
const exitCode = await doctorCommand({ fix: args.options.fix });
|
|
20664
20666
|
if (args.options.deep) {
|
|
20665
|
-
const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-
|
|
20667
|
+
const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-EULAHWTK.js");
|
|
20666
20668
|
const diag = runDeepDiagnostics2();
|
|
20667
20669
|
process.stdout.write(formatDeepDiagnostics2(diag) + "\n");
|
|
20668
20670
|
}
|
|
@@ -20712,7 +20714,7 @@ async function runInitPortableFlow(args) {
|
|
|
20712
20714
|
return cliExit(result.success ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
|
|
20713
20715
|
}
|
|
20714
20716
|
async function runInitOpencodeFlow(args) {
|
|
20715
|
-
const { runInitOpencode } = await import("./init-opencode-
|
|
20717
|
+
const { runInitOpencode } = await import("./init-opencode-MK2NUEWH.js");
|
|
20716
20718
|
const opencodePath = args.options.opencode;
|
|
20717
20719
|
if (opencodePath === void 0 || opencodePath === "") {
|
|
20718
20720
|
process.stderr.write("Error: --opencode requires a path argument.\n");
|
|
@@ -20738,7 +20740,7 @@ async function runInitOpencodeFlow(args) {
|
|
|
20738
20740
|
return cliExit(EXIT_CODES.SUCCESS);
|
|
20739
20741
|
}
|
|
20740
20742
|
async function renderOpencodeValidate(opencodePath) {
|
|
20741
|
-
const { runOpencodeValidate } = await import("./init-opencode-
|
|
20743
|
+
const { runOpencodeValidate } = await import("./init-opencode-MK2NUEWH.js");
|
|
20742
20744
|
const result = await runOpencodeValidate(opencodePath);
|
|
20743
20745
|
if (!result.ok) {
|
|
20744
20746
|
process.stderr.write(`init --opencode --validate: ${result.reason ?? "failed"}
|
|
@@ -20777,7 +20779,7 @@ async function handleSetupCommandAsync(args) {
|
|
|
20777
20779
|
return cliExitFromStatus(exitCode);
|
|
20778
20780
|
}
|
|
20779
20781
|
async function runCustomApiSetup(args) {
|
|
20780
|
-
const { configureCustomApi } = await import("./setup-custom-api-
|
|
20782
|
+
const { configureCustomApi } = await import("./setup-custom-api-2E4MZ5MF.js");
|
|
20781
20783
|
const baseUrl = args.options.customApi;
|
|
20782
20784
|
if (baseUrl === void 0) return EXIT_CODES.SERVER_START_FAILED;
|
|
20783
20785
|
const input = {
|