nexus-agents 8.44.0 → 8.44.2
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/{ast-rule-runner-EPU4KNXJ.js → ast-rule-runner-WVDAA42T.js} +3 -3
- package/dist/{child-mcp-config-MQYS7D6P.js → child-mcp-config-7QA75U75.js} +2 -2
- package/dist/{chunk-M7TQR4UU.js → chunk-2XVGARRY.js} +4 -4
- package/dist/{chunk-6HMACBA3.js → chunk-4R7UX4LH.js} +2 -2
- package/dist/{chunk-WPBF2POG.js → chunk-4XSUIYEJ.js} +4 -4
- package/dist/{chunk-ZSMK7RFK.js → chunk-76RVBWFJ.js} +2 -2
- package/dist/{chunk-LVOXPW3M.js → chunk-7LC7IAC6.js} +2 -2
- package/dist/{chunk-AP3KIHPG.js → chunk-CFD2JBFF.js} +2 -2
- package/dist/{chunk-H77DZWRG.js → chunk-E7GG4QM4.js} +2 -2
- package/dist/{chunk-AMCNB2TJ.js → chunk-G6BYL67S.js} +5 -5
- package/dist/{chunk-5CO7TEYR.js → chunk-GNXA7QYJ.js} +2 -2
- package/dist/{chunk-Z4SCHKLH.js → chunk-HT2X7CTV.js} +2 -2
- package/dist/{chunk-2U2CTX4Q.js → chunk-II5QSTMF.js} +54 -45
- package/dist/{chunk-2U2CTX4Q.js.map → chunk-II5QSTMF.js.map} +1 -1
- package/dist/{chunk-OO73573G.js → chunk-K5AOFWUZ.js} +2 -2
- package/dist/{chunk-GCLLRAST.js → chunk-KWBL4YBO.js} +3 -3
- package/dist/{chunk-NJDB4LVF.js → chunk-L4M72UC3.js} +8 -8
- package/dist/{chunk-U7JRUYB3.js → chunk-LQQVESK4.js} +2 -2
- package/dist/{chunk-64GMIUM5.js → chunk-M7DUOIAK.js} +15 -2
- package/dist/chunk-M7DUOIAK.js.map +1 -0
- package/dist/{chunk-LHIOFRJX.js → chunk-N5TB4D4Y.js} +6 -6
- package/dist/{chunk-P6DGZEWY.js → chunk-NAQZUL6T.js} +4 -4
- package/dist/{chunk-B5R7KEZR.js → chunk-OJQGBWSN.js} +7 -7
- package/dist/{chunk-IOV4B5R5.js → chunk-OWFSWV2B.js} +2 -2
- package/dist/{chunk-K2A6LRLL.js → chunk-Q4YQUVFY.js} +7 -7
- package/dist/{chunk-X2MX53O3.js → chunk-RTXOSQQ5.js} +2 -2
- package/dist/{chunk-JSH5GCZK.js → chunk-S4RQTNOJ.js} +3 -3
- package/dist/{chunk-4H44CQIZ.js → chunk-SSZ3UI5I.js} +2 -2
- package/dist/{chunk-VOEKVO4Z.js → chunk-TCAOGMSJ.js} +3 -3
- package/dist/{chunk-NJ2EUCSY.js → chunk-UVWWUCTU.js} +2 -2
- package/dist/{chunk-LZL23U7Z.js → chunk-VMUMZQRK.js} +2 -2
- package/dist/{chunk-UDZBMHCX.js → chunk-W4FTZ6NQ.js} +9 -9
- package/dist/{chunk-BTWPTJF3.js → chunk-WG57CLZX.js} +3 -3
- package/dist/{chunk-QHBW7AS7.js → chunk-WINAQRIP.js} +4 -4
- package/dist/{chunk-3QP3NJ4E.js → chunk-WTJARWUI.js} +2 -2
- package/dist/{chunk-OEKALQ2G.js → chunk-Y5SMWBMT.js} +2 -2
- package/dist/{chunk-RL6F6IUQ.js → chunk-YO44KBCM.js} +2 -2
- package/dist/{chunk-MLG2PR6E.js → chunk-ZAQ7TGE5.js} +2 -2
- package/dist/{chunk-S4QNCIZF.js → chunk-ZYBVRWCQ.js} +19 -9
- package/dist/chunk-ZYBVRWCQ.js.map +1 -0
- package/dist/{cli-circuit-breaker-LAOVTGFP.js → cli-circuit-breaker-YNMILNBW.js} +3 -3
- package/dist/cli.js +44 -44
- package/dist/{codebase-search-3D4TW3KR.js → codebase-search-XDAFN6XP.js} +2 -2
- package/dist/{composite-router-CN2SV6PX.js → composite-router-IMTJSNSW.js} +2 -2
- package/dist/{consensus-vote-GFIIMQW4.js → consensus-vote-M4LH7MXD.js} +17 -17
- package/dist/{context-retriever-3XRHW4EG.js → context-retriever-TJD4G7VT.js} +8 -8
- package/dist/{doctor-deep-5CSAHVEP.js → doctor-deep-A6KISK57.js} +3 -3
- package/dist/{doctor-live-5NRILDTR.js → doctor-live-PRGQCROP.js} +9 -9
- package/dist/{expert-bridge-ZNNMHOQH.js → expert-bridge-6C6RR6WF.js} +4 -4
- package/dist/{factory-UYBTTLHZ.js → factory-YJQI6VWJ.js} +5 -5
- package/dist/{factory-TE7DQKRW.js → factory-YLPR5WLO.js} +9 -9
- package/dist/{improvement-review-5RWJT2SO.js → improvement-review-E6GLPXUP.js} +6 -6
- package/dist/index.js +32 -32
- package/dist/{init-opencode-WKKW7V7A.js → init-opencode-KPMC65FE.js} +6 -6
- package/dist/issue-triage-PV46T7GR.js +17 -0
- package/dist/{pr-reviewer-helpers-BR6YMKMR.js → pr-reviewer-helpers-HOIPAC4C.js} +4 -4
- package/dist/{registry-command-TWZXTXWB.js → registry-command-QTVLH3SG.js} +2 -2
- package/dist/{repo-security-plan-3E3FSPD5.js → repo-security-plan-VSFW6JNC.js} +3 -3
- package/dist/{research-helpers-synthesize-NIDQS4XT.js → research-helpers-synthesize-FEL4P5AM.js} +4 -4
- package/dist/{routing-memory-PGYUB4UJ.js → routing-memory-3QEB367H.js} +2 -2
- package/dist/{session-memory-D2IK4PC2.js → session-memory-MXNCBWWR.js} +3 -3
- package/dist/{setup-config-QELDNFFB.js → setup-config-3EJ37UHP.js} +3 -3
- package/dist/{setup-custom-api-57TCCU7N.js → setup-custom-api-KZL36DTQ.js} +4 -4
- package/dist/setup-data-dir-EKNO344K.js +29 -0
- package/dist/{tool-memory-3B44V6CP.js → tool-memory-K5XBNYLH.js} +5 -5
- package/dist/{unified-registry-AIHYR7FG.js → unified-registry-5Y5JXIT2.js} +10 -10
- package/dist/{weather-report-2Q6RXC2D.js → weather-report-K5JQJERB.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-64GMIUM5.js.map +0 -1
- package/dist/chunk-S4QNCIZF.js.map +0 -1
- package/dist/issue-triage-FRPETYSK.js +0 -17
- package/dist/setup-data-dir-5WWOT3M7.js +0 -29
- /package/dist/{ast-rule-runner-EPU4KNXJ.js.map → ast-rule-runner-WVDAA42T.js.map} +0 -0
- /package/dist/{child-mcp-config-MQYS7D6P.js.map → child-mcp-config-7QA75U75.js.map} +0 -0
- /package/dist/{chunk-M7TQR4UU.js.map → chunk-2XVGARRY.js.map} +0 -0
- /package/dist/{chunk-6HMACBA3.js.map → chunk-4R7UX4LH.js.map} +0 -0
- /package/dist/{chunk-WPBF2POG.js.map → chunk-4XSUIYEJ.js.map} +0 -0
- /package/dist/{chunk-ZSMK7RFK.js.map → chunk-76RVBWFJ.js.map} +0 -0
- /package/dist/{chunk-LVOXPW3M.js.map → chunk-7LC7IAC6.js.map} +0 -0
- /package/dist/{chunk-AP3KIHPG.js.map → chunk-CFD2JBFF.js.map} +0 -0
- /package/dist/{chunk-H77DZWRG.js.map → chunk-E7GG4QM4.js.map} +0 -0
- /package/dist/{chunk-AMCNB2TJ.js.map → chunk-G6BYL67S.js.map} +0 -0
- /package/dist/{chunk-5CO7TEYR.js.map → chunk-GNXA7QYJ.js.map} +0 -0
- /package/dist/{chunk-Z4SCHKLH.js.map → chunk-HT2X7CTV.js.map} +0 -0
- /package/dist/{chunk-OO73573G.js.map → chunk-K5AOFWUZ.js.map} +0 -0
- /package/dist/{chunk-GCLLRAST.js.map → chunk-KWBL4YBO.js.map} +0 -0
- /package/dist/{chunk-NJDB4LVF.js.map → chunk-L4M72UC3.js.map} +0 -0
- /package/dist/{chunk-U7JRUYB3.js.map → chunk-LQQVESK4.js.map} +0 -0
- /package/dist/{chunk-LHIOFRJX.js.map → chunk-N5TB4D4Y.js.map} +0 -0
- /package/dist/{chunk-P6DGZEWY.js.map → chunk-NAQZUL6T.js.map} +0 -0
- /package/dist/{chunk-B5R7KEZR.js.map → chunk-OJQGBWSN.js.map} +0 -0
- /package/dist/{chunk-IOV4B5R5.js.map → chunk-OWFSWV2B.js.map} +0 -0
- /package/dist/{chunk-K2A6LRLL.js.map → chunk-Q4YQUVFY.js.map} +0 -0
- /package/dist/{chunk-X2MX53O3.js.map → chunk-RTXOSQQ5.js.map} +0 -0
- /package/dist/{chunk-JSH5GCZK.js.map → chunk-S4RQTNOJ.js.map} +0 -0
- /package/dist/{chunk-4H44CQIZ.js.map → chunk-SSZ3UI5I.js.map} +0 -0
- /package/dist/{chunk-VOEKVO4Z.js.map → chunk-TCAOGMSJ.js.map} +0 -0
- /package/dist/{chunk-NJ2EUCSY.js.map → chunk-UVWWUCTU.js.map} +0 -0
- /package/dist/{chunk-LZL23U7Z.js.map → chunk-VMUMZQRK.js.map} +0 -0
- /package/dist/{chunk-UDZBMHCX.js.map → chunk-W4FTZ6NQ.js.map} +0 -0
- /package/dist/{chunk-BTWPTJF3.js.map → chunk-WG57CLZX.js.map} +0 -0
- /package/dist/{chunk-QHBW7AS7.js.map → chunk-WINAQRIP.js.map} +0 -0
- /package/dist/{chunk-3QP3NJ4E.js.map → chunk-WTJARWUI.js.map} +0 -0
- /package/dist/{chunk-OEKALQ2G.js.map → chunk-Y5SMWBMT.js.map} +0 -0
- /package/dist/{chunk-RL6F6IUQ.js.map → chunk-YO44KBCM.js.map} +0 -0
- /package/dist/{chunk-MLG2PR6E.js.map → chunk-ZAQ7TGE5.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-LAOVTGFP.js.map → cli-circuit-breaker-YNMILNBW.js.map} +0 -0
- /package/dist/{codebase-search-3D4TW3KR.js.map → codebase-search-XDAFN6XP.js.map} +0 -0
- /package/dist/{composite-router-CN2SV6PX.js.map → composite-router-IMTJSNSW.js.map} +0 -0
- /package/dist/{consensus-vote-GFIIMQW4.js.map → consensus-vote-M4LH7MXD.js.map} +0 -0
- /package/dist/{context-retriever-3XRHW4EG.js.map → context-retriever-TJD4G7VT.js.map} +0 -0
- /package/dist/{doctor-deep-5CSAHVEP.js.map → doctor-deep-A6KISK57.js.map} +0 -0
- /package/dist/{doctor-live-5NRILDTR.js.map → doctor-live-PRGQCROP.js.map} +0 -0
- /package/dist/{expert-bridge-ZNNMHOQH.js.map → expert-bridge-6C6RR6WF.js.map} +0 -0
- /package/dist/{factory-TE7DQKRW.js.map → factory-YJQI6VWJ.js.map} +0 -0
- /package/dist/{factory-UYBTTLHZ.js.map → factory-YLPR5WLO.js.map} +0 -0
- /package/dist/{improvement-review-5RWJT2SO.js.map → improvement-review-E6GLPXUP.js.map} +0 -0
- /package/dist/{init-opencode-WKKW7V7A.js.map → init-opencode-KPMC65FE.js.map} +0 -0
- /package/dist/{issue-triage-FRPETYSK.js.map → issue-triage-PV46T7GR.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-BR6YMKMR.js.map → pr-reviewer-helpers-HOIPAC4C.js.map} +0 -0
- /package/dist/{registry-command-TWZXTXWB.js.map → registry-command-QTVLH3SG.js.map} +0 -0
- /package/dist/{repo-security-plan-3E3FSPD5.js.map → repo-security-plan-VSFW6JNC.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-NIDQS4XT.js.map → research-helpers-synthesize-FEL4P5AM.js.map} +0 -0
- /package/dist/{routing-memory-PGYUB4UJ.js.map → routing-memory-3QEB367H.js.map} +0 -0
- /package/dist/{session-memory-D2IK4PC2.js.map → session-memory-MXNCBWWR.js.map} +0 -0
- /package/dist/{setup-config-QELDNFFB.js.map → setup-config-3EJ37UHP.js.map} +0 -0
- /package/dist/{setup-custom-api-57TCCU7N.js.map → setup-custom-api-KZL36DTQ.js.map} +0 -0
- /package/dist/{setup-data-dir-5WWOT3M7.js.map → setup-data-dir-EKNO344K.js.map} +0 -0
- /package/dist/{tool-memory-3B44V6CP.js.map → tool-memory-K5XBNYLH.js.map} +0 -0
- /package/dist/{unified-registry-AIHYR7FG.js.map → unified-registry-5Y5JXIT2.js.map} +0 -0
- /package/dist/{weather-report-2Q6RXC2D.js.map → weather-report-K5JQJERB.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createGitHubProvider,
|
|
3
3
|
createScmProvider
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2XVGARRY.js";
|
|
5
5
|
import {
|
|
6
6
|
ALLOWED_COMMANDS,
|
|
7
7
|
ARTIFACT_TYPES,
|
|
@@ -552,7 +552,7 @@ import {
|
|
|
552
552
|
withLogging,
|
|
553
553
|
withRetry,
|
|
554
554
|
withRetryWrapper
|
|
555
|
-
} from "./chunk-
|
|
555
|
+
} from "./chunk-II5QSTMF.js";
|
|
556
556
|
import {
|
|
557
557
|
FALLBACK_SCANNER_DATA,
|
|
558
558
|
buildPlanFromAnalysis,
|
|
@@ -560,13 +560,13 @@ import {
|
|
|
560
560
|
generateSecurityPlan,
|
|
561
561
|
getRegistryManifest,
|
|
562
562
|
resolveScannerData
|
|
563
|
-
} from "./chunk-
|
|
563
|
+
} from "./chunk-SSZ3UI5I.js";
|
|
564
564
|
import {
|
|
565
565
|
analyzeGitHubRepo,
|
|
566
566
|
analyzeRepo,
|
|
567
567
|
normalizeRepoId
|
|
568
568
|
} from "./chunk-DGWT7DXX.js";
|
|
569
|
-
import "./chunk-
|
|
569
|
+
import "./chunk-M7DUOIAK.js";
|
|
570
570
|
import {
|
|
571
571
|
AST_RULE_LANGUAGES,
|
|
572
572
|
AST_RULE_SEVERITIES,
|
|
@@ -578,23 +578,23 @@ import {
|
|
|
578
578
|
getBuiltInAstRulesPath,
|
|
579
579
|
loadRules,
|
|
580
580
|
runAstQaRules
|
|
581
|
-
} from "./chunk-
|
|
581
|
+
} from "./chunk-HT2X7CTV.js";
|
|
582
582
|
import "./chunk-3KDQKVCJ.js";
|
|
583
583
|
import {
|
|
584
584
|
closeServer,
|
|
585
585
|
connectTransport,
|
|
586
586
|
createServer,
|
|
587
587
|
startStdioServer
|
|
588
|
-
} from "./chunk-
|
|
588
|
+
} from "./chunk-Q4YQUVFY.js";
|
|
589
589
|
import {
|
|
590
590
|
OPENAI_MODELS,
|
|
591
591
|
OPENAI_MODEL_ALIASES,
|
|
592
592
|
OpenAIAdapter,
|
|
593
593
|
createOpenAIAdapter
|
|
594
|
-
} from "./chunk-
|
|
594
|
+
} from "./chunk-G6BYL67S.js";
|
|
595
595
|
import {
|
|
596
596
|
executeExpert
|
|
597
|
-
} from "./chunk-
|
|
597
|
+
} from "./chunk-OJQGBWSN.js";
|
|
598
598
|
import {
|
|
599
599
|
AgentFindingSchema,
|
|
600
600
|
ConsensusEngine,
|
|
@@ -643,12 +643,12 @@ import {
|
|
|
643
643
|
generateProposalId,
|
|
644
644
|
parseAgentPairKey,
|
|
645
645
|
registerConsensusVoteTool
|
|
646
|
-
} from "./chunk-
|
|
647
|
-
import "./chunk-
|
|
646
|
+
} from "./chunk-W4FTZ6NQ.js";
|
|
647
|
+
import "./chunk-K5AOFWUZ.js";
|
|
648
648
|
import {
|
|
649
649
|
allOf
|
|
650
650
|
} from "./chunk-OQB3XC5O.js";
|
|
651
|
-
import "./chunk-
|
|
651
|
+
import "./chunk-KWBL4YBO.js";
|
|
652
652
|
import {
|
|
653
653
|
AgentActionSchema,
|
|
654
654
|
DEFAULT_FIREWALL_POLICY_MODE,
|
|
@@ -678,11 +678,11 @@ import {
|
|
|
678
678
|
resolveFirewallPolicyMode,
|
|
679
679
|
validateAgentAction,
|
|
680
680
|
validateCorroboration
|
|
681
|
-
} from "./chunk-
|
|
681
|
+
} from "./chunk-N5TB4D4Y.js";
|
|
682
682
|
import {
|
|
683
683
|
GitHubProvider,
|
|
684
684
|
ScmError
|
|
685
|
-
} from "./chunk-
|
|
685
|
+
} from "./chunk-WTJARWUI.js";
|
|
686
686
|
import {
|
|
687
687
|
GitHubUserRoleSchema,
|
|
688
688
|
InjectionFlagSchema,
|
|
@@ -697,11 +697,11 @@ import {
|
|
|
697
697
|
assessReputation,
|
|
698
698
|
resolveReputationGatingMode,
|
|
699
699
|
sanitizeInput
|
|
700
|
-
} from "./chunk-
|
|
700
|
+
} from "./chunk-76RVBWFJ.js";
|
|
701
701
|
import {
|
|
702
702
|
ImprovementReviewInputSchema,
|
|
703
703
|
registerImprovementReviewTool
|
|
704
|
-
} from "./chunk-
|
|
704
|
+
} from "./chunk-TCAOGMSJ.js";
|
|
705
705
|
import {
|
|
706
706
|
AgentPerformanceSchema,
|
|
707
707
|
ConsensusAlgorithmSchema,
|
|
@@ -737,10 +737,10 @@ import {
|
|
|
737
737
|
toolSuccess,
|
|
738
738
|
toolSuccessStructured,
|
|
739
739
|
validateToolInput
|
|
740
|
-
} from "./chunk-
|
|
740
|
+
} from "./chunk-WINAQRIP.js";
|
|
741
741
|
import {
|
|
742
742
|
VERSION
|
|
743
|
-
} from "./chunk-
|
|
743
|
+
} from "./chunk-UVWWUCTU.js";
|
|
744
744
|
import {
|
|
745
745
|
AuditTrail,
|
|
746
746
|
createAuditTrail,
|
|
@@ -751,13 +751,13 @@ import {
|
|
|
751
751
|
emitReputationEvent,
|
|
752
752
|
emitSanitizationEvent,
|
|
753
753
|
emitTrustEvent
|
|
754
|
-
} from "./chunk-
|
|
754
|
+
} from "./chunk-ZAQ7TGE5.js";
|
|
755
755
|
import {
|
|
756
756
|
UnifiedAdapterRegistry,
|
|
757
757
|
createUnifiedRegistry,
|
|
758
758
|
getGlobalRegistry,
|
|
759
759
|
resetGlobalRegistry
|
|
760
|
-
} from "./chunk-
|
|
760
|
+
} from "./chunk-4XSUIYEJ.js";
|
|
761
761
|
import {
|
|
762
762
|
PersistentStrategyDistiller,
|
|
763
763
|
RulesSnapshotSchema,
|
|
@@ -765,18 +765,18 @@ import {
|
|
|
765
765
|
TokenCounter,
|
|
766
766
|
TokenCounterProvider,
|
|
767
767
|
createTokenCounter
|
|
768
|
-
} from "./chunk-
|
|
769
|
-
import "./chunk-
|
|
768
|
+
} from "./chunk-ZYBVRWCQ.js";
|
|
769
|
+
import "./chunk-YO44KBCM.js";
|
|
770
770
|
import {
|
|
771
771
|
getTokenEnvVars,
|
|
772
772
|
hasToken,
|
|
773
773
|
resolveToken
|
|
774
|
-
} from "./chunk-
|
|
774
|
+
} from "./chunk-7LC7IAC6.js";
|
|
775
775
|
import {
|
|
776
776
|
MemoryError
|
|
777
|
-
} from "./chunk-
|
|
777
|
+
} from "./chunk-NAQZUL6T.js";
|
|
778
778
|
import "./chunk-7LP6VJRP.js";
|
|
779
|
-
import "./chunk-
|
|
779
|
+
import "./chunk-E7GG4QM4.js";
|
|
780
780
|
import {
|
|
781
781
|
BUILT_IN_EXPERTS,
|
|
782
782
|
BuiltInExpertTypeSchema,
|
|
@@ -821,7 +821,7 @@ import {
|
|
|
821
821
|
isCliAvailable,
|
|
822
822
|
isRetryableError,
|
|
823
823
|
sleep
|
|
824
|
-
} from "./chunk-
|
|
824
|
+
} from "./chunk-L4M72UC3.js";
|
|
825
825
|
import {
|
|
826
826
|
AdapterModelError,
|
|
827
827
|
BaseAdapter,
|
|
@@ -843,11 +843,11 @@ import {
|
|
|
843
843
|
tapStream,
|
|
844
844
|
transformStream,
|
|
845
845
|
withTimeout
|
|
846
|
-
} from "./chunk-
|
|
847
|
-
import "./chunk-
|
|
846
|
+
} from "./chunk-VMUMZQRK.js";
|
|
847
|
+
import "./chunk-Y5SMWBMT.js";
|
|
848
848
|
import {
|
|
849
849
|
PROVIDER_ENV_KEYS
|
|
850
|
-
} from "./chunk-
|
|
850
|
+
} from "./chunk-LQQVESK4.js";
|
|
851
851
|
import "./chunk-T5GVEXSA.js";
|
|
852
852
|
import {
|
|
853
853
|
AvailabilityCache,
|
|
@@ -857,13 +857,13 @@ import {
|
|
|
857
857
|
getFallbackChain,
|
|
858
858
|
resetAvailabilityCache,
|
|
859
859
|
resolveFallback
|
|
860
|
-
} from "./chunk-
|
|
860
|
+
} from "./chunk-CFD2JBFF.js";
|
|
861
861
|
import "./chunk-QZUG667L.js";
|
|
862
|
-
import "./chunk-
|
|
862
|
+
import "./chunk-GNXA7QYJ.js";
|
|
863
863
|
import {
|
|
864
864
|
CliCircuitBreakerIntegration,
|
|
865
865
|
createCliCircuitBreakerIntegration
|
|
866
|
-
} from "./chunk-
|
|
866
|
+
} from "./chunk-OWFSWV2B.js";
|
|
867
867
|
import {
|
|
868
868
|
AgentCapability,
|
|
869
869
|
AgentError,
|
|
@@ -942,7 +942,7 @@ import {
|
|
|
942
942
|
toError,
|
|
943
943
|
unwrap,
|
|
944
944
|
unwrapOr
|
|
945
|
-
} from "./chunk-
|
|
945
|
+
} from "./chunk-WG57CLZX.js";
|
|
946
946
|
import "./chunk-3HELETAQ.js";
|
|
947
947
|
import "./chunk-JVNJJ2VL.js";
|
|
948
948
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
discoverModels,
|
|
3
3
|
readOpencodeGateway
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-G6BYL67S.js";
|
|
5
|
+
import "./chunk-K5AOFWUZ.js";
|
|
6
|
+
import "./chunk-VMUMZQRK.js";
|
|
7
|
+
import "./chunk-LQQVESK4.js";
|
|
8
8
|
import {
|
|
9
9
|
createLogger
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WG57CLZX.js";
|
|
11
11
|
import "./chunk-3HELETAQ.js";
|
|
12
12
|
import "./chunk-JVNJJ2VL.js";
|
|
13
13
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -176,4 +176,4 @@ export {
|
|
|
176
176
|
runInitOpencode,
|
|
177
177
|
runOpencodeValidate
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=init-opencode-
|
|
179
|
+
//# sourceMappingURL=init-opencode-KPMC65FE.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IssueTriage,
|
|
3
|
+
createIssueTriage
|
|
4
|
+
} from "./chunk-N5TB4D4Y.js";
|
|
5
|
+
import "./chunk-WTJARWUI.js";
|
|
6
|
+
import "./chunk-76RVBWFJ.js";
|
|
7
|
+
import "./chunk-ZAQ7TGE5.js";
|
|
8
|
+
import "./chunk-7LC7IAC6.js";
|
|
9
|
+
import "./chunk-WG57CLZX.js";
|
|
10
|
+
import "./chunk-3HELETAQ.js";
|
|
11
|
+
import "./chunk-JVNJJ2VL.js";
|
|
12
|
+
import "./chunk-ZPWHCABL.js";
|
|
13
|
+
export {
|
|
14
|
+
IssueTriage,
|
|
15
|
+
createIssueTriage
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=issue-triage-PV46T7GR.js.map
|
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
parseSeverity,
|
|
21
21
|
reviewPostingBlock,
|
|
22
22
|
sumFindings
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-S4RQTNOJ.js";
|
|
24
24
|
import "./chunk-3KDQKVCJ.js";
|
|
25
25
|
import "./chunk-OQB3XC5O.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-76RVBWFJ.js";
|
|
27
|
+
import "./chunk-WG57CLZX.js";
|
|
28
28
|
import "./chunk-3HELETAQ.js";
|
|
29
29
|
import "./chunk-JVNJJ2VL.js";
|
|
30
30
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -51,4 +51,4 @@ export {
|
|
|
51
51
|
reviewPostingBlock,
|
|
52
52
|
sumFindings
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=pr-reviewer-helpers-
|
|
54
|
+
//# sourceMappingURL=pr-reviewer-helpers-HOIPAC4C.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
loadGeneratedRegistryEntries,
|
|
8
8
|
loadUserManifestOverlay,
|
|
9
9
|
reloadDefaultRegistry
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WG57CLZX.js";
|
|
11
11
|
import "./chunk-3HELETAQ.js";
|
|
12
12
|
import {
|
|
13
13
|
nexusDataPath
|
|
@@ -249,4 +249,4 @@ export {
|
|
|
249
249
|
isValidRegistrySubcommand,
|
|
250
250
|
registryCommand
|
|
251
251
|
};
|
|
252
|
-
//# sourceMappingURL=registry-command-
|
|
252
|
+
//# sourceMappingURL=registry-command-QTVLH3SG.js.map
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
buildPlanFromAnalysis,
|
|
4
4
|
generateSecurityPlan,
|
|
5
5
|
resolveScannerData
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SSZ3UI5I.js";
|
|
7
7
|
import "./chunk-DGWT7DXX.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-WG57CLZX.js";
|
|
9
9
|
import "./chunk-3HELETAQ.js";
|
|
10
10
|
import "./chunk-JVNJJ2VL.js";
|
|
11
11
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -15,4 +15,4 @@ export {
|
|
|
15
15
|
generateSecurityPlan,
|
|
16
16
|
resolveScannerData
|
|
17
17
|
};
|
|
18
|
-
//# sourceMappingURL=repo-security-plan-
|
|
18
|
+
//# sourceMappingURL=repo-security-plan-VSFW6JNC.js.map
|
package/dist/{research-helpers-synthesize-NIDQS4XT.js → research-helpers-synthesize-FEL4P5AM.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AttributedInsightSchema,
|
|
3
3
|
synthesizeResearch
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-KWBL4YBO.js";
|
|
5
|
+
import "./chunk-YO44KBCM.js";
|
|
6
|
+
import "./chunk-WG57CLZX.js";
|
|
7
7
|
import "./chunk-3HELETAQ.js";
|
|
8
8
|
import "./chunk-JVNJJ2VL.js";
|
|
9
9
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
AttributedInsightSchema,
|
|
12
12
|
synthesizeResearch
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=research-helpers-synthesize-
|
|
14
|
+
//# sourceMappingURL=research-helpers-synthesize-FEL4P5AM.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-WG57CLZX.js";
|
|
6
6
|
import "./chunk-3HELETAQ.js";
|
|
7
7
|
import "./chunk-JVNJJ2VL.js";
|
|
8
8
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
RoutingMemory,
|
|
12
12
|
createRoutingMemory
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=routing-memory-
|
|
14
|
+
//# sourceMappingURL=routing-memory-3QEB367H.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-E7GG4QM4.js";
|
|
10
|
+
import "./chunk-WG57CLZX.js";
|
|
11
11
|
import "./chunk-3HELETAQ.js";
|
|
12
12
|
import "./chunk-JVNJJ2VL.js";
|
|
13
13
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -20,4 +20,4 @@ export {
|
|
|
20
20
|
SessionMemoryError,
|
|
21
21
|
createSessionMemory
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=session-memory-
|
|
23
|
+
//# sourceMappingURL=session-memory-MXNCBWWR.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runConfigInitSync
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-4R7UX4LH.js";
|
|
4
|
+
import "./chunk-WG57CLZX.js";
|
|
5
5
|
import "./chunk-3HELETAQ.js";
|
|
6
6
|
import "./chunk-JVNJJ2VL.js";
|
|
7
7
|
import "./chunk-ZPWHCABL.js";
|
|
8
8
|
export {
|
|
9
9
|
runConfigInitSync
|
|
10
10
|
};
|
|
11
|
-
//# sourceMappingURL=setup-config-
|
|
11
|
+
//# sourceMappingURL=setup-config-3EJ37UHP.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CUSTOM_API_DEFAULT_MODEL
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Y5SMWBMT.js";
|
|
4
4
|
import {
|
|
5
5
|
CUSTOM_API_ALLOW_PRIVATE_ENV,
|
|
6
6
|
CUSTOM_API_BASE_URL_ENV,
|
|
7
7
|
validateCustomApiBaseUrl
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LQQVESK4.js";
|
|
9
9
|
import {
|
|
10
10
|
err,
|
|
11
11
|
ok
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WG57CLZX.js";
|
|
13
13
|
import "./chunk-3HELETAQ.js";
|
|
14
14
|
import "./chunk-JVNJJ2VL.js";
|
|
15
15
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -107,4 +107,4 @@ function buildShellFragment(params) {
|
|
|
107
107
|
export {
|
|
108
108
|
configureCustomApi
|
|
109
109
|
};
|
|
110
|
-
//# sourceMappingURL=setup-custom-api-
|
|
110
|
+
//# sourceMappingURL=setup-custom-api-KZL36DTQ.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NEXUS_DATA_DIR,
|
|
3
|
+
describeDataDirFix,
|
|
4
|
+
initDataDirectories
|
|
5
|
+
} from "./chunk-Q4YQUVFY.js";
|
|
6
|
+
import "./chunk-G6BYL67S.js";
|
|
7
|
+
import "./chunk-K5AOFWUZ.js";
|
|
8
|
+
import "./chunk-OQB3XC5O.js";
|
|
9
|
+
import "./chunk-UVWWUCTU.js";
|
|
10
|
+
import "./chunk-7LP6VJRP.js";
|
|
11
|
+
import "./chunk-L4M72UC3.js";
|
|
12
|
+
import "./chunk-VMUMZQRK.js";
|
|
13
|
+
import "./chunk-Y5SMWBMT.js";
|
|
14
|
+
import "./chunk-LQQVESK4.js";
|
|
15
|
+
import "./chunk-T5GVEXSA.js";
|
|
16
|
+
import "./chunk-CFD2JBFF.js";
|
|
17
|
+
import "./chunk-QZUG667L.js";
|
|
18
|
+
import "./chunk-GNXA7QYJ.js";
|
|
19
|
+
import "./chunk-OWFSWV2B.js";
|
|
20
|
+
import "./chunk-WG57CLZX.js";
|
|
21
|
+
import "./chunk-3HELETAQ.js";
|
|
22
|
+
import "./chunk-JVNJJ2VL.js";
|
|
23
|
+
import "./chunk-ZPWHCABL.js";
|
|
24
|
+
export {
|
|
25
|
+
NEXUS_DATA_DIR,
|
|
26
|
+
describeDataDirFix,
|
|
27
|
+
initDataDirectories
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=setup-data-dir-EKNO344K.js.map
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
getToolMemory,
|
|
5
5
|
reinitializeMemoryBackends,
|
|
6
6
|
shutdownToolMemory
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NAQZUL6T.js";
|
|
8
8
|
import "./chunk-7LP6VJRP.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-E7GG4QM4.js";
|
|
10
10
|
import "./chunk-7PPGN5C5.js";
|
|
11
11
|
import "./chunk-YYJFZ7TO.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-GNXA7QYJ.js";
|
|
13
|
+
import "./chunk-WG57CLZX.js";
|
|
14
14
|
import "./chunk-3HELETAQ.js";
|
|
15
15
|
import "./chunk-JVNJJ2VL.js";
|
|
16
16
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -21,4 +21,4 @@ export {
|
|
|
21
21
|
reinitializeMemoryBackends,
|
|
22
22
|
shutdownToolMemory
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=tool-memory-
|
|
24
|
+
//# sourceMappingURL=tool-memory-K5XBNYLH.js.map
|
|
@@ -3,17 +3,17 @@ import {
|
|
|
3
3
|
createUnifiedRegistry,
|
|
4
4
|
getGlobalRegistry,
|
|
5
5
|
resetGlobalRegistry
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-4XSUIYEJ.js";
|
|
7
|
+
import "./chunk-L4M72UC3.js";
|
|
8
|
+
import "./chunk-VMUMZQRK.js";
|
|
9
|
+
import "./chunk-Y5SMWBMT.js";
|
|
10
|
+
import "./chunk-LQQVESK4.js";
|
|
11
11
|
import "./chunk-T5GVEXSA.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CFD2JBFF.js";
|
|
13
13
|
import "./chunk-QZUG667L.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-GNXA7QYJ.js";
|
|
15
|
+
import "./chunk-OWFSWV2B.js";
|
|
16
|
+
import "./chunk-WG57CLZX.js";
|
|
17
17
|
import "./chunk-3HELETAQ.js";
|
|
18
18
|
import "./chunk-JVNJJ2VL.js";
|
|
19
19
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -23,4 +23,4 @@ export {
|
|
|
23
23
|
getGlobalRegistry,
|
|
24
24
|
resetGlobalRegistry
|
|
25
25
|
};
|
|
26
|
-
//# sourceMappingURL=unified-registry-
|
|
26
|
+
//# sourceMappingURL=unified-registry-5Y5JXIT2.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
getModelWeatherSummary,
|
|
6
6
|
queryWithLookback,
|
|
7
7
|
shouldExplore
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WG57CLZX.js";
|
|
9
9
|
import "./chunk-3HELETAQ.js";
|
|
10
10
|
import "./chunk-JVNJJ2VL.js";
|
|
11
11
|
import "./chunk-ZPWHCABL.js";
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
queryWithLookback,
|
|
18
18
|
shouldExplore
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=weather-report-
|
|
20
|
+
//# sourceMappingURL=weather-report-K5JQJERB.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexus-agents",
|
|
3
|
-
"version": "8.44.
|
|
3
|
+
"version": "8.44.2",
|
|
4
4
|
"description": "Governance substrate for AI coding agents — adversarial PR review, drift-detected rules, tamper-evident audit, and closed-loop outcome routing for Claude, Codex, Gemini, and OpenCode",
|
|
5
5
|
"mcpName": "io.github.nexus-substrate/nexus-agents",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
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 SUPPORTED_EXTENSIONS,\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 // #4640: take the list from the extractor rather than keeping a copy. The\n // two sat on opposite sides of the same decision — `extract_symbols` reaches\n // the extension gate at symbol-extractor.ts:162, while this sweep filters\n // *before* it — so a language added to SUPPORTED_EXTENSIONS was parsed by\n // one tool and silently never indexed by the other.\n SUPPORTED_EXTENSIONS.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/**\n * Extensions the TypeScript compiler API path can parse (#4517).\n *\n * Exported so the tool layer can name them in its error message instead of\n * asserting a file \"may not be TypeScript/JavaScript\" without saying what\n * would count.\n */\nexport const SUPPORTED_EXTENSIONS: readonly string[] = ['.ts', '.tsx', '.js', '.jsx'];\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 * Whether the file was actually parsed (#4517).\n *\n * `false` means the extension is not supported, so `symbols: []` reports\n * that nothing was READ — not that nothing is there. An unsupported file and\n * a genuinely symbol-free file previously returned identical results, and\n * the tool guessed between them wrongly: a valid TypeScript barrel of 20\n * re-exports was reported as possibly-not-TypeScript.\n */\n parsed: boolean;\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 (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n filePath,\n symbols: [],\n totalLines: 0,\n totalChars: 0,\n symbolChars: 0,\n savingsPercent: 0,\n parsed: false,\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 parsed: true,\n };\n}\n\n/**\n * Why {@link extractSymbolIndex} produced no index (#4517).\n *\n * `unsupported` and `no-declarations` are different facts about the world:\n * the first says the file was never read, the second says it was read and\n * genuinely declares nothing locally — a re-export barrel, typically. Callers\n * that collapse them tell the user to check a file type that was never the\n * problem.\n */\nexport type EmptyIndexReason = 'unsupported' | 'no-declarations';\n\n/** A symbol index, or the reason there is none. */\nexport type SymbolIndexResult =\n | { readonly kind: 'index'; readonly index: string }\n | { readonly kind: 'empty'; readonly reason: EmptyIndexReason };\n\n/**\n * Extract a compact symbol index, reporting why when there is nothing to show.\n *\n * Names + locations only, no source text — the minimal representation for LLM\n * context (~95%+ token savings). Replaced the earlier `extractSymbolIndex`,\n * which returned a bare `''` for both \"could not read\" and \"read, found\n * nothing\" and so could not tell a caller which had happened.\n */\nexport async function extractSymbolIndexResult(filePath: string): Promise<SymbolIndexResult> {\n const result = await extractSymbols(filePath);\n if (!result.parsed) return { kind: 'empty', reason: 'unsupported' };\n if (result.symbols.length === 0) return { kind: 'empty', reason: 'no-declarations' };\n return { kind: 'index', index: renderIndex(filePath, result) };\n}\n\nfunction renderIndex(filePath: string, result: SymbolExtractionResult): string {\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 return `// ${filePath} — ${String(result.symbols.length)} symbols\\n${lines.join('\\n')}`;\n}\n"],"mappings":"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","names":["extname","extname"]}
|