nexus-agents 2.149.1 → 2.150.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/{child-mcp-config-YTJSYSDO.js → child-mcp-config-A7CWNREQ.js} +2 -2
  2. package/dist/{chunk-5I4LPOKG.js → chunk-3D3CARMV.js} +2 -2
  3. package/dist/{chunk-367EP2C7.js → chunk-4QRPK34N.js} +2 -2
  4. package/dist/{chunk-IMLHCK4P.js → chunk-5TLLVMP3.js} +5 -5
  5. package/dist/{chunk-K4B5N5QH.js → chunk-7ZMOF54O.js} +3 -3
  6. package/dist/{chunk-FEB4O6BV.js → chunk-AXKMXLOH.js} +2 -2
  7. package/dist/{chunk-UXEARNIP.js → chunk-BNFSOOH2.js} +2 -2
  8. package/dist/{chunk-XYOST7XP.js → chunk-CBFG63WO.js} +5 -5
  9. package/dist/{chunk-7H3Z5Q2X.js → chunk-CD7FU55Z.js} +2 -2
  10. package/dist/{chunk-77GBDHVF.js → chunk-CMAQI2SJ.js} +19 -13
  11. package/dist/chunk-CMAQI2SJ.js.map +1 -0
  12. package/dist/{chunk-XWPTHKA2.js → chunk-D7D24TFI.js} +5 -5
  13. package/dist/{chunk-OJI53VOI.js → chunk-G3MSANLH.js} +2 -2
  14. package/dist/{chunk-6KVJKH7P.js → chunk-GMQH2I4P.js} +3 -3
  15. package/dist/{chunk-OSYZ7FT7.js → chunk-GXZJC4FG.js} +4 -4
  16. package/dist/{chunk-Z7TY67AH.js → chunk-HIVRYAIJ.js} +2 -2
  17. package/dist/{chunk-O7KV4UGP.js → chunk-HQLZ7ORH.js} +2 -2
  18. package/dist/{chunk-PX634ZOU.js → chunk-JYHSZDKL.js} +7 -7
  19. package/dist/{chunk-ZIN26XX5.js → chunk-LIW44IKG.js} +4 -4
  20. package/dist/{chunk-ZHT4TFFA.js → chunk-LXTTRYAT.js} +3 -3
  21. package/dist/{chunk-L3F27J72.js → chunk-M4YN3U3P.js} +2 -2
  22. package/dist/{chunk-ZGY3V7RD.js → chunk-MF7KPK3C.js} +2 -2
  23. package/dist/{chunk-CPCRNL36.js → chunk-MREJKQHH.js} +26 -18
  24. package/dist/chunk-MREJKQHH.js.map +1 -0
  25. package/dist/{chunk-KNTNSBHK.js → chunk-NZNLBIJD.js} +4 -4
  26. package/dist/{chunk-QWEKW6FF.js → chunk-OKDHP4WF.js} +7 -7
  27. package/dist/{chunk-4FT35FDA.js → chunk-SF3AM3SY.js} +8 -8
  28. package/dist/{chunk-MLAD6ZTK.js → chunk-SI2A2U45.js} +34 -34
  29. package/dist/{chunk-HH7IATAZ.js → chunk-T24ADN3G.js} +3 -3
  30. package/dist/{chunk-S75CT7MY.js → chunk-T2SGTVB4.js} +2 -2
  31. package/dist/{chunk-BYMPT7NU.js → chunk-UBWBNKJ2.js} +2 -2
  32. package/dist/{chunk-2UU5ZXTW.js → chunk-XQ5LT7GT.js} +3 -3
  33. package/dist/{chunk-GC3BEJNL.js → chunk-XSA7VZCU.js} +2 -2
  34. package/dist/{chunk-2AJDFDMI.js → chunk-XXBQ2XV4.js} +2 -2
  35. package/dist/{chunk-ZZKZ4UHC.js → chunk-XXSV26SY.js} +4 -4
  36. package/dist/{chunk-3DL4MAGN.js → chunk-YJRZZBRO.js} +12 -3
  37. package/dist/{chunk-3DL4MAGN.js.map → chunk-YJRZZBRO.js.map} +1 -1
  38. package/dist/{chunk-TCI7DNWK.js → chunk-YLSSR3DV.js} +129 -86
  39. package/dist/chunk-YLSSR3DV.js.map +1 -0
  40. package/dist/{cli-circuit-breaker-7XBDSYYS.js → cli-circuit-breaker-JJ3RM63D.js} +4 -4
  41. package/dist/cli.js +41 -41
  42. package/dist/{composite-router-CS6YW7FL.js → composite-router-UAHBWEKB.js} +2 -2
  43. package/dist/{consensus-vote-FQ7DMGQ5.js → consensus-vote-3R7MNO26.js} +15 -15
  44. package/dist/{context-retriever-RJ6D67WW.js → context-retriever-SVEJE3IX.js} +8 -8
  45. package/dist/{doctor-deep-HFJGB7HZ.js → doctor-deep-U6LGEU4O.js} +3 -3
  46. package/dist/{expert-bridge-BSEUAG5B.js → expert-bridge-Z4P6SWIU.js} +4 -4
  47. package/dist/{factory-SJF3GF6T.js → factory-COS3CBV3.js} +8 -8
  48. package/dist/{factory-GXAOB66V.js → factory-P7LP5K4O.js} +5 -5
  49. package/dist/{improvement-review-GCIDNUGA.js → improvement-review-3UXQ24DI.js} +5 -5
  50. package/dist/index.d.ts +34 -0
  51. package/dist/index.js +30 -30
  52. package/dist/{init-opencode-QKPN4FQ6.js → init-opencode-2IPKWKDI.js} +6 -6
  53. package/dist/{issue-triage-VSLGCWHP.js → issue-triage-LMG76MBJ.js} +6 -6
  54. package/dist/{pr-reviewer-helpers-X7MU2OUO.js → pr-reviewer-helpers-BNOJJ2CP.js} +4 -4
  55. package/dist/{registry-command-AQOQHU6R.js → registry-command-KJJG7WH6.js} +2 -2
  56. package/dist/{repo-security-plan-23K6ZLFD.js → repo-security-plan-AT5IYRHN.js} +3 -3
  57. package/dist/{research-helpers-synthesize-OOQHAUON.js → research-helpers-synthesize-OFOJXMLR.js} +4 -4
  58. package/dist/{routing-memory-KNXPI7HA.js → routing-memory-JRCIBKFH.js} +2 -2
  59. package/dist/{session-memory-GVEMAPT3.js → session-memory-IKTVC2GW.js} +3 -3
  60. package/dist/{setup-command-ICXDEARW.js → setup-command-CO5QJ424.js} +11 -11
  61. package/dist/{setup-config-PYE3DHHH.js → setup-config-QXCFHJAE.js} +3 -3
  62. package/dist/{setup-custom-api-Y2MTGAS7.js → setup-custom-api-VRZVWZ4U.js} +3 -3
  63. package/dist/{tool-memory-PE7RNTVL.js → tool-memory-MZZVY7F3.js} +5 -5
  64. package/dist/{unified-registry-PGK7BFEQ.js → unified-registry-XZW6KIY2.js} +9 -9
  65. package/dist/{weather-report-KDNG2TKZ.js → weather-report-64YXR6VN.js} +2 -2
  66. package/package.json +1 -1
  67. package/dist/chunk-77GBDHVF.js.map +0 -1
  68. package/dist/chunk-CPCRNL36.js.map +0 -1
  69. package/dist/chunk-TCI7DNWK.js.map +0 -1
  70. /package/dist/{child-mcp-config-YTJSYSDO.js.map → child-mcp-config-A7CWNREQ.js.map} +0 -0
  71. /package/dist/{chunk-5I4LPOKG.js.map → chunk-3D3CARMV.js.map} +0 -0
  72. /package/dist/{chunk-367EP2C7.js.map → chunk-4QRPK34N.js.map} +0 -0
  73. /package/dist/{chunk-IMLHCK4P.js.map → chunk-5TLLVMP3.js.map} +0 -0
  74. /package/dist/{chunk-K4B5N5QH.js.map → chunk-7ZMOF54O.js.map} +0 -0
  75. /package/dist/{chunk-FEB4O6BV.js.map → chunk-AXKMXLOH.js.map} +0 -0
  76. /package/dist/{chunk-UXEARNIP.js.map → chunk-BNFSOOH2.js.map} +0 -0
  77. /package/dist/{chunk-XYOST7XP.js.map → chunk-CBFG63WO.js.map} +0 -0
  78. /package/dist/{chunk-7H3Z5Q2X.js.map → chunk-CD7FU55Z.js.map} +0 -0
  79. /package/dist/{chunk-XWPTHKA2.js.map → chunk-D7D24TFI.js.map} +0 -0
  80. /package/dist/{chunk-OJI53VOI.js.map → chunk-G3MSANLH.js.map} +0 -0
  81. /package/dist/{chunk-6KVJKH7P.js.map → chunk-GMQH2I4P.js.map} +0 -0
  82. /package/dist/{chunk-OSYZ7FT7.js.map → chunk-GXZJC4FG.js.map} +0 -0
  83. /package/dist/{chunk-Z7TY67AH.js.map → chunk-HIVRYAIJ.js.map} +0 -0
  84. /package/dist/{chunk-O7KV4UGP.js.map → chunk-HQLZ7ORH.js.map} +0 -0
  85. /package/dist/{chunk-PX634ZOU.js.map → chunk-JYHSZDKL.js.map} +0 -0
  86. /package/dist/{chunk-ZIN26XX5.js.map → chunk-LIW44IKG.js.map} +0 -0
  87. /package/dist/{chunk-ZHT4TFFA.js.map → chunk-LXTTRYAT.js.map} +0 -0
  88. /package/dist/{chunk-L3F27J72.js.map → chunk-M4YN3U3P.js.map} +0 -0
  89. /package/dist/{chunk-ZGY3V7RD.js.map → chunk-MF7KPK3C.js.map} +0 -0
  90. /package/dist/{chunk-KNTNSBHK.js.map → chunk-NZNLBIJD.js.map} +0 -0
  91. /package/dist/{chunk-QWEKW6FF.js.map → chunk-OKDHP4WF.js.map} +0 -0
  92. /package/dist/{chunk-4FT35FDA.js.map → chunk-SF3AM3SY.js.map} +0 -0
  93. /package/dist/{chunk-MLAD6ZTK.js.map → chunk-SI2A2U45.js.map} +0 -0
  94. /package/dist/{chunk-HH7IATAZ.js.map → chunk-T24ADN3G.js.map} +0 -0
  95. /package/dist/{chunk-S75CT7MY.js.map → chunk-T2SGTVB4.js.map} +0 -0
  96. /package/dist/{chunk-BYMPT7NU.js.map → chunk-UBWBNKJ2.js.map} +0 -0
  97. /package/dist/{chunk-2UU5ZXTW.js.map → chunk-XQ5LT7GT.js.map} +0 -0
  98. /package/dist/{chunk-GC3BEJNL.js.map → chunk-XSA7VZCU.js.map} +0 -0
  99. /package/dist/{chunk-2AJDFDMI.js.map → chunk-XXBQ2XV4.js.map} +0 -0
  100. /package/dist/{chunk-ZZKZ4UHC.js.map → chunk-XXSV26SY.js.map} +0 -0
  101. /package/dist/{cli-circuit-breaker-7XBDSYYS.js.map → cli-circuit-breaker-JJ3RM63D.js.map} +0 -0
  102. /package/dist/{composite-router-CS6YW7FL.js.map → composite-router-UAHBWEKB.js.map} +0 -0
  103. /package/dist/{consensus-vote-FQ7DMGQ5.js.map → consensus-vote-3R7MNO26.js.map} +0 -0
  104. /package/dist/{context-retriever-RJ6D67WW.js.map → context-retriever-SVEJE3IX.js.map} +0 -0
  105. /package/dist/{doctor-deep-HFJGB7HZ.js.map → doctor-deep-U6LGEU4O.js.map} +0 -0
  106. /package/dist/{expert-bridge-BSEUAG5B.js.map → expert-bridge-Z4P6SWIU.js.map} +0 -0
  107. /package/dist/{factory-GXAOB66V.js.map → factory-COS3CBV3.js.map} +0 -0
  108. /package/dist/{factory-SJF3GF6T.js.map → factory-P7LP5K4O.js.map} +0 -0
  109. /package/dist/{improvement-review-GCIDNUGA.js.map → improvement-review-3UXQ24DI.js.map} +0 -0
  110. /package/dist/{init-opencode-QKPN4FQ6.js.map → init-opencode-2IPKWKDI.js.map} +0 -0
  111. /package/dist/{issue-triage-VSLGCWHP.js.map → issue-triage-LMG76MBJ.js.map} +0 -0
  112. /package/dist/{pr-reviewer-helpers-X7MU2OUO.js.map → pr-reviewer-helpers-BNOJJ2CP.js.map} +0 -0
  113. /package/dist/{registry-command-AQOQHU6R.js.map → registry-command-KJJG7WH6.js.map} +0 -0
  114. /package/dist/{repo-security-plan-23K6ZLFD.js.map → repo-security-plan-AT5IYRHN.js.map} +0 -0
  115. /package/dist/{research-helpers-synthesize-OOQHAUON.js.map → research-helpers-synthesize-OFOJXMLR.js.map} +0 -0
  116. /package/dist/{routing-memory-KNXPI7HA.js.map → routing-memory-JRCIBKFH.js.map} +0 -0
  117. /package/dist/{session-memory-GVEMAPT3.js.map → session-memory-IKTVC2GW.js.map} +0 -0
  118. /package/dist/{setup-command-ICXDEARW.js.map → setup-command-CO5QJ424.js.map} +0 -0
  119. /package/dist/{setup-config-PYE3DHHH.js.map → setup-config-QXCFHJAE.js.map} +0 -0
  120. /package/dist/{setup-custom-api-Y2MTGAS7.js.map → setup-custom-api-VRZVWZ4U.js.map} +0 -0
  121. /package/dist/{tool-memory-PE7RNTVL.js.map → tool-memory-MZZVY7F3.js.map} +0 -0
  122. /package/dist/{unified-registry-PGK7BFEQ.js.map → unified-registry-XZW6KIY2.js.map} +0 -0
  123. /package/dist/{weather-report-KDNG2TKZ.js.map → weather-report-64YXR6VN.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-OSYZ7FT7.js";
4
+ } from "./chunk-GXZJC4FG.js";
5
5
  import {
6
6
  ALLOWED_COMMANDS,
7
7
  ARTIFACT_TYPES,
@@ -520,13 +520,13 @@ import {
520
520
  validateWorkflow,
521
521
  validateWorkflowDependencies,
522
522
  withLogging
523
- } from "./chunk-MLAD6ZTK.js";
523
+ } from "./chunk-SI2A2U45.js";
524
524
  import {
525
525
  OPENAI_MODELS,
526
526
  OPENAI_MODEL_ALIASES,
527
527
  OpenAIAdapter,
528
528
  createOpenAIAdapter
529
- } from "./chunk-77GBDHVF.js";
529
+ } from "./chunk-CMAQI2SJ.js";
530
530
  import {
531
531
  FALLBACK_SCANNER_DATA,
532
532
  buildPlanFromAnalysis,
@@ -534,7 +534,7 @@ import {
534
534
  generateSecurityPlan,
535
535
  getRegistryManifest,
536
536
  resolveScannerData
537
- } from "./chunk-S75CT7MY.js";
537
+ } from "./chunk-T2SGTVB4.js";
538
538
  import {
539
539
  analyzeGitHubRepo,
540
540
  analyzeRepo,
@@ -560,14 +560,14 @@ import {
560
560
  getKnownNexusVarNames,
561
561
  startStdioServer,
562
562
  validateNexusEnv
563
- } from "./chunk-QWEKW6FF.js";
563
+ } from "./chunk-OKDHP4WF.js";
564
564
  import {
565
565
  CliCircuitBreakerIntegration,
566
566
  createCliCircuitBreakerIntegration
567
- } from "./chunk-6KVJKH7P.js";
567
+ } from "./chunk-GMQH2I4P.js";
568
568
  import {
569
569
  executeExpert
570
- } from "./chunk-PX634ZOU.js";
570
+ } from "./chunk-JYHSZDKL.js";
571
571
  import {
572
572
  AgentFindingSchema,
573
573
  ConsensusEngine,
@@ -616,9 +616,9 @@ import {
616
616
  generateProposalId,
617
617
  parseAgentPairKey,
618
618
  registerConsensusVoteTool
619
- } from "./chunk-4FT35FDA.js";
620
- import "./chunk-GC3BEJNL.js";
621
- import "./chunk-K4B5N5QH.js";
619
+ } from "./chunk-SF3AM3SY.js";
620
+ import "./chunk-XSA7VZCU.js";
621
+ import "./chunk-7ZMOF54O.js";
622
622
  import {
623
623
  AgentActionSchema,
624
624
  GitHubReviewer,
@@ -640,11 +640,11 @@ import {
640
640
  requiresCorroboration,
641
641
  validateAgentAction,
642
642
  validateCorroboration
643
- } from "./chunk-XYOST7XP.js";
643
+ } from "./chunk-CBFG63WO.js";
644
644
  import {
645
645
  GitHubProvider,
646
646
  ScmError
647
- } from "./chunk-UXEARNIP.js";
647
+ } from "./chunk-BNFSOOH2.js";
648
648
  import {
649
649
  GitHubUserRoleSchema,
650
650
  InjectionFlagSchema,
@@ -659,11 +659,11 @@ import {
659
659
  assessReputation,
660
660
  reconcileTrustTier,
661
661
  sanitizeInput
662
- } from "./chunk-ZGY3V7RD.js";
662
+ } from "./chunk-MF7KPK3C.js";
663
663
  import {
664
664
  ImprovementReviewInputSchema,
665
665
  registerImprovementReviewTool
666
- } from "./chunk-2UU5ZXTW.js";
666
+ } from "./chunk-XQ5LT7GT.js";
667
667
  import {
668
668
  AgentPerformanceSchema,
669
669
  ConsensusAlgorithmSchema,
@@ -699,7 +699,7 @@ import {
699
699
  toolSuccess,
700
700
  toolSuccessStructured,
701
701
  validateToolInput
702
- } from "./chunk-ZHT4TFFA.js";
702
+ } from "./chunk-LXTTRYAT.js";
703
703
  import {
704
704
  AuditTrail,
705
705
  MAX_STRIPPED_ELEMENTS_PER_EVENT,
@@ -711,23 +711,23 @@ import {
711
711
  emitReputationEvent,
712
712
  emitSanitizationEvent,
713
713
  emitTrustEvent
714
- } from "./chunk-O7KV4UGP.js";
714
+ } from "./chunk-HQLZ7ORH.js";
715
715
  import {
716
716
  PersistentStrategyDistiller,
717
717
  RulesSnapshotSchema
718
- } from "./chunk-XWPTHKA2.js";
718
+ } from "./chunk-D7D24TFI.js";
719
719
  import {
720
720
  getTokenEnvVars,
721
721
  hasToken,
722
722
  resolveToken
723
- } from "./chunk-OJI53VOI.js";
724
- import "./chunk-367EP2C7.js";
723
+ } from "./chunk-G3MSANLH.js";
724
+ import "./chunk-4QRPK34N.js";
725
725
  import "./chunk-NUBSJGQZ.js";
726
726
  import {
727
727
  MemoryError
728
- } from "./chunk-ZZKZ4UHC.js";
728
+ } from "./chunk-XXSV26SY.js";
729
729
  import "./chunk-6T3EPABN.js";
730
- import "./chunk-Z7TY67AH.js";
730
+ import "./chunk-HIVRYAIJ.js";
731
731
  import {
732
732
  BUILT_IN_EXPERTS,
733
733
  BuiltInExpertTypeSchema,
@@ -746,7 +746,7 @@ import {
746
746
  resetGlobalRegistry,
747
747
  withModelNotFoundFallback,
748
748
  wrapResilientWithFallback
749
- } from "./chunk-KNTNSBHK.js";
749
+ } from "./chunk-NZNLBIJD.js";
750
750
  import {
751
751
  BaseCliAdapter,
752
752
  CLAUDE_MODELS,
@@ -784,7 +784,7 @@ import {
784
784
  isRetryableError,
785
785
  messagesToAnthropicFormat,
786
786
  sleep
787
- } from "./chunk-CPCRNL36.js";
787
+ } from "./chunk-MREJKQHH.js";
788
788
  import {
789
789
  AdapterModelError,
790
790
  BaseAdapter,
@@ -808,12 +808,12 @@ import {
808
808
  transformStream,
809
809
  validateApiKeyPresence,
810
810
  withTimeout
811
- } from "./chunk-TCI7DNWK.js";
811
+ } from "./chunk-YLSSR3DV.js";
812
812
  import {
813
813
  DEFAULTS,
814
814
  PROVIDER_ENV_KEYS
815
- } from "./chunk-FEB4O6BV.js";
816
- import "./chunk-BYMPT7NU.js";
815
+ } from "./chunk-AXKMXLOH.js";
816
+ import "./chunk-UBWBNKJ2.js";
817
817
  import {
818
818
  AvailabilityCache,
819
819
  filterAvailableModels,
@@ -822,8 +822,8 @@ import {
822
822
  getFallbackChain,
823
823
  resetAvailabilityCache,
824
824
  resolveFallback
825
- } from "./chunk-2AJDFDMI.js";
826
- import "./chunk-5I4LPOKG.js";
825
+ } from "./chunk-XXBQ2XV4.js";
826
+ import "./chunk-3D3CARMV.js";
827
827
  import {
828
828
  AgentCapability,
829
829
  AgentError,
@@ -901,7 +901,7 @@ import {
901
901
  toError,
902
902
  unwrap,
903
903
  unwrapOr
904
- } from "./chunk-3DL4MAGN.js";
904
+ } from "./chunk-YJRZZBRO.js";
905
905
  import "./chunk-NL7SZQPW.js";
906
906
  import "./chunk-DHVMSIT5.js";
907
907
  import "./chunk-ZPWHCABL.js";
@@ -5955,7 +5955,7 @@ function buildVotingInput(plan, config) {
5955
5955
  }
5956
5956
  async function executeSingleVote(plan, config, log) {
5957
5957
  try {
5958
- const { executeVoting } = await import("./consensus-vote-FQ7DMGQ5.js");
5958
+ const { executeVoting } = await import("./consensus-vote-3R7MNO26.js");
5959
5959
  const input = buildVotingInput(plan, config);
5960
5960
  const result = await executeVoting(input, log);
5961
5961
  return parseVotingResult(result);
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  discoverModels,
3
3
  readOpencodeGateway
4
- } from "./chunk-ZIN26XX5.js";
5
- import "./chunk-77GBDHVF.js";
6
- import "./chunk-GC3BEJNL.js";
7
- import "./chunk-TCI7DNWK.js";
4
+ } from "./chunk-LIW44IKG.js";
5
+ import "./chunk-CMAQI2SJ.js";
6
+ import "./chunk-XSA7VZCU.js";
7
+ import "./chunk-YLSSR3DV.js";
8
8
  import {
9
9
  createLogger
10
- } from "./chunk-3DL4MAGN.js";
10
+ } from "./chunk-YJRZZBRO.js";
11
11
  import "./chunk-NL7SZQPW.js";
12
12
  import "./chunk-DHVMSIT5.js";
13
13
  import "./chunk-ZPWHCABL.js";
@@ -176,4 +176,4 @@ export {
176
176
  runInitOpencode,
177
177
  runOpencodeValidate
178
178
  };
179
- //# sourceMappingURL=init-opencode-QKPN4FQ6.js.map
179
+ //# sourceMappingURL=init-opencode-2IPKWKDI.js.map
@@ -2,11 +2,11 @@ import {
2
2
  IssueTriage,
3
3
  createIssueTriage,
4
4
  formatTriageComment
5
- } from "./chunk-XYOST7XP.js";
6
- import "./chunk-UXEARNIP.js";
7
- import "./chunk-ZGY3V7RD.js";
8
- import "./chunk-O7KV4UGP.js";
9
- import "./chunk-3DL4MAGN.js";
5
+ } from "./chunk-CBFG63WO.js";
6
+ import "./chunk-BNFSOOH2.js";
7
+ import "./chunk-MF7KPK3C.js";
8
+ import "./chunk-HQLZ7ORH.js";
9
+ import "./chunk-YJRZZBRO.js";
10
10
  import "./chunk-NL7SZQPW.js";
11
11
  import "./chunk-DHVMSIT5.js";
12
12
  import "./chunk-ZPWHCABL.js";
@@ -15,4 +15,4 @@ export {
15
15
  createIssueTriage,
16
16
  formatTriageComment
17
17
  };
18
- //# sourceMappingURL=issue-triage-VSLGCWHP.js.map
18
+ //# sourceMappingURL=issue-triage-LMG76MBJ.js.map
@@ -17,10 +17,10 @@ import {
17
17
  parseFindings,
18
18
  parseSeverity,
19
19
  sumFindings
20
- } from "./chunk-HH7IATAZ.js";
20
+ } from "./chunk-T24ADN3G.js";
21
21
  import "./chunk-WAYGXUSM.js";
22
- import "./chunk-ZGY3V7RD.js";
23
- import "./chunk-3DL4MAGN.js";
22
+ import "./chunk-MF7KPK3C.js";
23
+ import "./chunk-YJRZZBRO.js";
24
24
  import "./chunk-NL7SZQPW.js";
25
25
  import "./chunk-DHVMSIT5.js";
26
26
  import "./chunk-ZPWHCABL.js";
@@ -44,4 +44,4 @@ export {
44
44
  parseSeverity,
45
45
  sumFindings
46
46
  };
47
- //# sourceMappingURL=pr-reviewer-helpers-X7MU2OUO.js.map
47
+ //# sourceMappingURL=pr-reviewer-helpers-BNOJJ2CP.js.map
@@ -7,7 +7,7 @@ import {
7
7
  loadGeneratedRegistryEntries,
8
8
  loadUserManifestOverlay,
9
9
  reloadDefaultRegistry
10
- } from "./chunk-3DL4MAGN.js";
10
+ } from "./chunk-YJRZZBRO.js";
11
11
  import "./chunk-NL7SZQPW.js";
12
12
  import {
13
13
  nexusDataPath
@@ -249,4 +249,4 @@ export {
249
249
  isValidRegistrySubcommand,
250
250
  registryCommand
251
251
  };
252
- //# sourceMappingURL=registry-command-AQOQHU6R.js.map
252
+ //# sourceMappingURL=registry-command-KJJG7WH6.js.map
@@ -3,9 +3,9 @@ import {
3
3
  buildPlanFromAnalysis,
4
4
  generateSecurityPlan,
5
5
  resolveScannerData
6
- } from "./chunk-S75CT7MY.js";
6
+ } from "./chunk-T2SGTVB4.js";
7
7
  import "./chunk-HFOQKCD2.js";
8
- import "./chunk-3DL4MAGN.js";
8
+ import "./chunk-YJRZZBRO.js";
9
9
  import "./chunk-NL7SZQPW.js";
10
10
  import "./chunk-DHVMSIT5.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-23K6ZLFD.js.map
18
+ //# sourceMappingURL=repo-security-plan-AT5IYRHN.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  AttributedInsightSchema,
3
3
  synthesizeResearch
4
- } from "./chunk-K4B5N5QH.js";
5
- import "./chunk-367EP2C7.js";
4
+ } from "./chunk-7ZMOF54O.js";
5
+ import "./chunk-4QRPK34N.js";
6
6
  import "./chunk-NUBSJGQZ.js";
7
- import "./chunk-3DL4MAGN.js";
7
+ import "./chunk-YJRZZBRO.js";
8
8
  import "./chunk-NL7SZQPW.js";
9
9
  import "./chunk-DHVMSIT5.js";
10
10
  import "./chunk-ZPWHCABL.js";
@@ -12,4 +12,4 @@ export {
12
12
  AttributedInsightSchema,
13
13
  synthesizeResearch
14
14
  };
15
- //# sourceMappingURL=research-helpers-synthesize-OOQHAUON.js.map
15
+ //# sourceMappingURL=research-helpers-synthesize-OFOJXMLR.js.map
@@ -2,7 +2,7 @@ import {
2
2
  DEFAULT_ROUTING_MEMORY_CONFIG,
3
3
  RoutingMemory,
4
4
  createRoutingMemory
5
- } from "./chunk-3DL4MAGN.js";
5
+ } from "./chunk-YJRZZBRO.js";
6
6
  import "./chunk-NL7SZQPW.js";
7
7
  import "./chunk-DHVMSIT5.js";
8
8
  import "./chunk-ZPWHCABL.js";
@@ -11,4 +11,4 @@ export {
11
11
  RoutingMemory,
12
12
  createRoutingMemory
13
13
  };
14
- //# sourceMappingURL=routing-memory-KNXPI7HA.js.map
14
+ //# sourceMappingURL=routing-memory-JRCIBKFH.js.map
@@ -6,8 +6,8 @@ import {
6
6
  SessionMemory,
7
7
  SessionMemoryError,
8
8
  createSessionMemory
9
- } from "./chunk-Z7TY67AH.js";
10
- import "./chunk-3DL4MAGN.js";
9
+ } from "./chunk-HIVRYAIJ.js";
10
+ import "./chunk-YJRZZBRO.js";
11
11
  import "./chunk-NL7SZQPW.js";
12
12
  import "./chunk-DHVMSIT5.js";
13
13
  import "./chunk-ZPWHCABL.js";
@@ -20,4 +20,4 @@ export {
20
20
  SessionMemoryError,
21
21
  createSessionMemory
22
22
  };
23
- //# sourceMappingURL=session-memory-GVEMAPT3.js.map
23
+ //# sourceMappingURL=session-memory-IKTVC2GW.js.map
@@ -8,19 +8,19 @@ import {
8
8
  runWizard,
9
9
  setupCommand,
10
10
  setupCommandAsync
11
- } from "./chunk-IMLHCK4P.js";
12
- import "./chunk-7H3Z5Q2X.js";
13
- import "./chunk-QWEKW6FF.js";
11
+ } from "./chunk-5TLLVMP3.js";
12
+ import "./chunk-CD7FU55Z.js";
13
+ import "./chunk-OKDHP4WF.js";
14
14
  import "./chunk-NUBSJGQZ.js";
15
15
  import "./chunk-6T3EPABN.js";
16
16
  import "./chunk-ZM4O442V.js";
17
- import "./chunk-CPCRNL36.js";
18
- import "./chunk-TCI7DNWK.js";
19
- import "./chunk-FEB4O6BV.js";
20
- import "./chunk-BYMPT7NU.js";
21
- import "./chunk-2AJDFDMI.js";
22
- import "./chunk-5I4LPOKG.js";
23
- import "./chunk-3DL4MAGN.js";
17
+ import "./chunk-MREJKQHH.js";
18
+ import "./chunk-YLSSR3DV.js";
19
+ import "./chunk-AXKMXLOH.js";
20
+ import "./chunk-UBWBNKJ2.js";
21
+ import "./chunk-XXBQ2XV4.js";
22
+ import "./chunk-3D3CARMV.js";
23
+ import "./chunk-YJRZZBRO.js";
24
24
  import "./chunk-NL7SZQPW.js";
25
25
  import "./chunk-DHVMSIT5.js";
26
26
  import "./chunk-ZPWHCABL.js";
@@ -35,4 +35,4 @@ export {
35
35
  setupCommand,
36
36
  setupCommandAsync
37
37
  };
38
- //# sourceMappingURL=setup-command-ICXDEARW.js.map
38
+ //# sourceMappingURL=setup-command-CO5QJ424.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  runConfigInitSync
3
- } from "./chunk-7H3Z5Q2X.js";
4
- import "./chunk-3DL4MAGN.js";
3
+ } from "./chunk-CD7FU55Z.js";
4
+ import "./chunk-YJRZZBRO.js";
5
5
  import "./chunk-NL7SZQPW.js";
6
6
  import "./chunk-DHVMSIT5.js";
7
7
  import "./chunk-ZPWHCABL.js";
8
8
  export {
9
9
  runConfigInitSync
10
10
  };
11
- //# sourceMappingURL=setup-config-PYE3DHHH.js.map
11
+ //# sourceMappingURL=setup-config-QXCFHJAE.js.map
@@ -3,11 +3,11 @@ import {
3
3
  CUSTOM_API_BASE_URL_ENV,
4
4
  CUSTOM_API_DEFAULT_MODEL,
5
5
  validateCustomApiBaseUrl
6
- } from "./chunk-FEB4O6BV.js";
6
+ } from "./chunk-AXKMXLOH.js";
7
7
  import {
8
8
  err,
9
9
  ok
10
- } from "./chunk-3DL4MAGN.js";
10
+ } from "./chunk-YJRZZBRO.js";
11
11
  import "./chunk-NL7SZQPW.js";
12
12
  import "./chunk-DHVMSIT5.js";
13
13
  import "./chunk-ZPWHCABL.js";
@@ -105,4 +105,4 @@ function buildShellFragment(params) {
105
105
  export {
106
106
  configureCustomApi
107
107
  };
108
- //# sourceMappingURL=setup-custom-api-Y2MTGAS7.js.map
108
+ //# sourceMappingURL=setup-custom-api-VRZVWZ4U.js.map
@@ -3,13 +3,13 @@ import {
3
3
  getToolMemory,
4
4
  reinitializeMemoryBackends,
5
5
  shutdownToolMemory
6
- } from "./chunk-ZZKZ4UHC.js";
6
+ } from "./chunk-XXSV26SY.js";
7
7
  import "./chunk-6T3EPABN.js";
8
- import "./chunk-Z7TY67AH.js";
8
+ import "./chunk-HIVRYAIJ.js";
9
9
  import "./chunk-PINS44XA.js";
10
10
  import "./chunk-KSQSWEFH.js";
11
- import "./chunk-5I4LPOKG.js";
12
- import "./chunk-3DL4MAGN.js";
11
+ import "./chunk-3D3CARMV.js";
12
+ import "./chunk-YJRZZBRO.js";
13
13
  import "./chunk-NL7SZQPW.js";
14
14
  import "./chunk-DHVMSIT5.js";
15
15
  import "./chunk-ZPWHCABL.js";
@@ -19,4 +19,4 @@ export {
19
19
  reinitializeMemoryBackends,
20
20
  shutdownToolMemory
21
21
  };
22
- //# sourceMappingURL=tool-memory-PE7RNTVL.js.map
22
+ //# sourceMappingURL=tool-memory-MZZVY7F3.js.map
@@ -4,14 +4,14 @@ import {
4
4
  getGlobalRegistry,
5
5
  resetGlobalRegistry,
6
6
  withDefaultOnRetirement
7
- } from "./chunk-KNTNSBHK.js";
8
- import "./chunk-CPCRNL36.js";
9
- import "./chunk-TCI7DNWK.js";
10
- import "./chunk-FEB4O6BV.js";
11
- import "./chunk-BYMPT7NU.js";
12
- import "./chunk-2AJDFDMI.js";
13
- import "./chunk-5I4LPOKG.js";
14
- import "./chunk-3DL4MAGN.js";
7
+ } from "./chunk-NZNLBIJD.js";
8
+ import "./chunk-MREJKQHH.js";
9
+ import "./chunk-YLSSR3DV.js";
10
+ import "./chunk-AXKMXLOH.js";
11
+ import "./chunk-UBWBNKJ2.js";
12
+ import "./chunk-XXBQ2XV4.js";
13
+ import "./chunk-3D3CARMV.js";
14
+ import "./chunk-YJRZZBRO.js";
15
15
  import "./chunk-NL7SZQPW.js";
16
16
  import "./chunk-DHVMSIT5.js";
17
17
  import "./chunk-ZPWHCABL.js";
@@ -22,4 +22,4 @@ export {
22
22
  resetGlobalRegistry,
23
23
  withDefaultOnRetirement
24
24
  };
25
- //# sourceMappingURL=unified-registry-PGK7BFEQ.js.map
25
+ //# sourceMappingURL=unified-registry-XZW6KIY2.js.map
@@ -3,7 +3,7 @@ import {
3
3
  getAdaptiveBonus,
4
4
  queryWithLookback,
5
5
  shouldExplore
6
- } from "./chunk-3DL4MAGN.js";
6
+ } from "./chunk-YJRZZBRO.js";
7
7
  import "./chunk-NL7SZQPW.js";
8
8
  import "./chunk-DHVMSIT5.js";
9
9
  import "./chunk-ZPWHCABL.js";
@@ -13,4 +13,4 @@ export {
13
13
  queryWithLookback,
14
14
  shouldExplore
15
15
  };
16
- //# sourceMappingURL=weather-report-KDNG2TKZ.js.map
16
+ //# sourceMappingURL=weather-report-64YXR6VN.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexus-agents",
3
- "version": "2.149.1",
3
+ "version": "2.150.1",
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/adapters/openai-types.ts","../src/adapters/openai-adapter.ts","../src/adapters/openai-mappers.ts"],"sourcesContent":["/**\n * nexus-agents/adapters - OpenAI Type Helpers\n *\n * Type definitions and constants for the OpenAI direct-API SDK adapter.\n *\n * **Architectural boundary (#2200 Child 3):** these constants do NOT live\n * in `config/in-tree-data.ts`. The canonical registry's `cliName`\n * dimension targets CLI tools (`claude` / `gemini` / `codex` / `opencode`)\n * — there is no `openai` CLI binary. Adding `'openai'` to the CLI_NAMES\n * enum would force a fifth case in 4+ exhaustive switches across the\n * codebase, violating the semantic of \"CLI tool name.\"\n *\n * The OpenAI direct adapter is conceptually different from CLI adapters:\n * it talks to the OpenAI HTTPS API directly, not via a subprocess CLI.\n * Its model identifiers are OpenAI's own (`gpt-4o-2024-11-20`,\n * `gpt-3.5-turbo-0125`, etc.) — these are upstream API constants, not\n * versions WE chose. They drift only when OpenAI ships new dated releases.\n *\n * This file is the single source of truth for OpenAI direct-API model\n * identifiers. The model-string drift fitness-guard (#2199) treats it as\n * a documented architectural exception in the allowlist.\n */\n\nimport type { ModelCapability } from '../core/index.js';\nimport { ModelCapability as MC } from '../core/index.js';\nimport { getCliModelName } from '../config/model-config-helpers.js';\n\n/**\n * Supported OpenAI direct-API model identifiers (OpenAI's own dated names).\n *\n * GPT_5_2_CODEX derives from the canonical registry (codex-5.2's cliModelName)\n * because it overlaps with the Codex CLI; the rest are pure-API constants.\n */\nexport const OPENAI_MODELS = {\n GPT_5_2: 'gpt-5.2',\n GPT_5_2_INSTANT: 'gpt-5.2-chat-latest',\n GPT_5_2_PRO: 'gpt-5.2-pro',\n GPT_5_2_CODEX: getCliModelName('codex-5.2'),\n GPT_4O: 'gpt-4o-2024-11-20',\n GPT_4O_MINI: 'gpt-4o-mini-2024-07-18',\n GPT_4_TURBO: 'gpt-4-turbo-2024-04-09',\n GPT_35_TURBO: 'gpt-3.5-turbo-0125',\n} as const;\n\n/**\n * User-friendly OpenAI aliases → dated model identifiers.\n *\n * Identity-only mappings (e.g., `'gpt-5.2-pro' → 'gpt-5.2-pro'`) were\n * removed in #2200 Child 3 — `resolveModelId` already passes unknown ids\n * through unchanged via `?? modelId`. Only entries that translate a\n * shorthand into a dated version remain.\n */\nexport const OPENAI_MODEL_ALIASES: Record<string, string> = {\n 'gpt-5.2-instant': OPENAI_MODELS.GPT_5_2_INSTANT,\n 'gpt-4o': OPENAI_MODELS.GPT_4O,\n 'gpt-4o-mini': OPENAI_MODELS.GPT_4O_MINI,\n 'gpt-4-turbo': OPENAI_MODELS.GPT_4_TURBO,\n 'gpt-3.5-turbo': OPENAI_MODELS.GPT_35_TURBO,\n} as const;\n\n/**\n * Configuration specific to OpenAIAdapter.\n */\nexport interface OpenAIAdapterConfig {\n /** Model ID (e.g., 'gpt-4o' or full model identifier) */\n modelId: string;\n /** API key for OpenAI API (required) */\n apiKey: string;\n /** Base URL for API (optional, defaults to OpenAI's API) */\n baseUrl?: string;\n /** Request timeout in milliseconds (optional) */\n timeout?: number;\n /** Maximum retries for failed requests (optional) */\n maxRetries?: number;\n /** Organization ID (optional) */\n organization?: string;\n}\n\n// Note: Token estimation moved to core/token-estimator.ts (unified TokenEstimator)\n\n/**\n * Default maximum tokens for OpenAI models.\n */\nexport const DEFAULT_MAX_TOKENS = 4096;\n\n/**\n * Tool call type for extracting function info.\n */\nexport interface FunctionToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n/**\n * Type guard for function tool calls.\n * Note: typeof null === 'object' is true, so we need to check tc !== null\n */\nexport function isFunctionToolCall(toolCall: unknown): toolCall is FunctionToolCall {\n if (typeof toolCall !== 'object' || toolCall === null) {\n return false;\n }\n const tc = toolCall as Record<string, unknown>;\n return tc['type'] === 'function' && typeof tc['function'] === 'object' && tc['function'] !== null;\n}\n\n/**\n * Resolves model alias to full model identifier.\n */\nexport function resolveModelId(modelId: string): string {\n return OPENAI_MODEL_ALIASES[modelId] ?? modelId;\n}\n\n/**\n * Determines capabilities based on model ID.\n */\nexport function getModelCapabilities(modelId: string): readonly ModelCapability[] {\n const capabilities: ModelCapability[] = [MC.COMPLETION, MC.STREAMING, MC.TOOL_USE];\n\n const resolvedId = resolveModelId(modelId);\n\n // Vision is available on GPT-4o, GPT-4-turbo, and GPT-5.2 models\n if (\n resolvedId.includes('gpt-4o') ||\n resolvedId.includes('gpt-4-turbo') ||\n resolvedId.includes('gpt-5.2')\n ) {\n capabilities.push(MC.VISION);\n }\n\n // Extended thinking is available on GPT-5.2 models\n if (resolvedId.includes('gpt-5.2')) {\n capabilities.push(MC.EXTENDED_THINKING);\n }\n\n return capabilities;\n}\n","/**\n * nexus-agents/adapters - OpenAI Model Adapter\n *\n * Adapter for OpenAI models (GPT-4o, GPT-4-turbo, GPT-3.5-turbo).\n * Implements the IModelAdapter interface with streaming support, rate limiting,\n * and proper error handling.\n *\n * Verified 2026-01-03: openai@6.15.0 is current stable\n * (Source: npm registry)\n */\n\nimport OpenAI, { APIError } from 'openai';\nimport type { ChatCompletionMessageParam, ChatCompletion } from 'openai/resources/chat/completions';\nimport type {\n Result,\n CompletionRequest,\n CompletionResponse,\n ModelMetadata,\n StreamChunk,\n TokenUsage,\n} from '../core/index.js';\nimport { ok, err, ModelError, ConfigError, getTokenEstimator } from '../core/index.js';\nimport {\n BaseAdapter,\n type BaseAdapterConfig,\n requireApiKey,\n validateApiKeyPresence,\n} from './base-adapter.js';\nimport { createStream } from './streaming.js';\nimport {\n DEFAULT_MAX_TOKENS,\n resolveModelId,\n getModelCapabilities,\n type OpenAIAdapterConfig,\n} from './openai-types.js';\nimport { planOptionalParams } from './optional-params.js';\nimport {\n mapMessage,\n mapTool,\n mapStopReason,\n mapChoiceToContentBlocks,\n mapResponseUsage,\n mapStreamChunk,\n} from './openai-mappers.js';\n\n// Re-export types and constants for public API\nexport { OPENAI_MODELS, OPENAI_MODEL_ALIASES, type OpenAIAdapterConfig } from './openai-types.js';\n\n/**\n * OpenAI model adapter.\n *\n * Provides a unified interface for interacting with OpenAI's GPT models.\n * Supports completion, streaming, tool use, and vision capabilities.\n *\n * @example\n * ```typescript\n * const adapter = new OpenAIAdapter({\n * modelId: 'gpt-4o',\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * const result = await adapter.complete({\n * messages: [{ role: 'user', content: 'Hello!' }],\n * maxTokens: 1024,\n * });\n *\n * if (result.ok) {\n * console.log(result.value.content);\n * }\n * ```\n */\n\n/**\n * Compose a diagnostic string from an OpenAI SDK `APIError`'s real fields\n * (#4047). The SDK's `.message` alone can be as useless as\n * `\"400 status code (no body)\"` for an OpenAI-compatible gateway; this pulls the\n * HTTP status, structured error fields, and the raw body so the actual rejection\n * reason is visible.\n */\n/** Typed structural view of the OpenAI SDK `APIError` fields we read (the SDK's\n * generic `APIError<any,…>` otherwise leaks `any`). */\ninterface ApiErrorView {\n readonly status?: number | null;\n readonly type?: string | null;\n readonly code?: string | null;\n readonly param?: string | null;\n readonly requestID?: string | null;\n readonly error?: unknown;\n readonly message?: string;\n}\n\n/** `key=value` tag, or `''` when the value is absent. */\nfunction kvTag(key: string, val: string | number | null | undefined): string {\n return val === null || val === undefined || val === '' ? '' : `${key}=${String(val)}`;\n}\n\nfunction describeOpenAIApiError(v: ApiErrorView): string {\n const tags = [\n `HTTP ${String(v.status ?? 'unknown')}`,\n kvTag('type', v.type),\n kvTag('code', v.code),\n kvTag('param', v.param),\n kvTag('request_id', v.requestID),\n ].filter((t) => t !== '');\n let body = '';\n if (v.error !== undefined && v.error !== null) {\n try {\n const raw = JSON.stringify(v.error);\n body = ` body=${raw.length > MAX_ERROR_BODY_CHARS ? `${raw.slice(0, MAX_ERROR_BODY_CHARS)}…` : raw}`;\n } catch {\n body = ' body=<unserializable>';\n }\n }\n return `${tags.join(' ')}: ${v.message ?? ''}${body}`;\n}\n\n/** Cap the surfaced gateway error body so a huge response can't bloat logs/messages. */\nconst MAX_ERROR_BODY_CHARS = 600;\n\nexport class OpenAIAdapter extends BaseAdapter {\n private readonly client: OpenAI;\n private readonly resolvedModelId: string;\n\n /**\n * Creates a new OpenAIAdapter instance.\n *\n * @param config - OpenAI adapter configuration\n * @throws {ConfigError} If API key is missing\n */\n constructor(config: OpenAIAdapterConfig) {\n const resolvedModelId = resolveModelId(config.modelId);\n\n // Build baseConfig conditionally to satisfy exactOptionalPropertyTypes\n const baseConfig: BaseAdapterConfig = {\n providerId: 'openai',\n modelId: resolvedModelId,\n capabilities: getModelCapabilities(config.modelId),\n apiKey: config.apiKey,\n };\n\n // Only set optional properties if defined\n if (config.baseUrl !== undefined) {\n baseConfig.baseUrl = config.baseUrl;\n }\n if (config.timeout !== undefined) {\n baseConfig.timeout = config.timeout;\n }\n if (config.maxRetries !== undefined) {\n baseConfig.maxRetries = config.maxRetries;\n }\n\n super(baseConfig);\n\n this.resolvedModelId = resolvedModelId;\n\n // Validate API key presence\n requireApiKey(config.apiKey, 'OpenAI', config.modelId);\n\n this.client = this.createClient(config);\n }\n\n /**\n * Creates the OpenAI client with configuration.\n */\n private createClient(config: OpenAIAdapterConfig): OpenAI {\n const clientOptions: ConstructorParameters<typeof OpenAI>[0] = {\n apiKey: config.apiKey,\n maxRetries: config.maxRetries ?? 2,\n };\n\n if (config.baseUrl !== undefined) {\n clientOptions.baseURL = config.baseUrl;\n }\n if (config.timeout !== undefined) {\n clientOptions.timeout = config.timeout;\n }\n if (config.organization !== undefined) {\n clientOptions.organization = config.organization;\n }\n\n return new OpenAI(clientOptions);\n }\n\n /**\n * Validates adapter configuration.\n * Extends base validation with OpenAI-specific checks.\n */\n override validateConfig(): Result<void, ConfigError> {\n const baseResult = super.validateConfig();\n if (!baseResult.ok) {\n return baseResult;\n }\n\n // Validate API key is present\n const keyResult = validateApiKeyPresence(this.config.apiKey, this.providerId, this.modelId);\n if (!keyResult.ok) return keyResult;\n\n return ok(undefined);\n }\n\n /**\n * Send a completion request to OpenAI.\n *\n * @param request - The completion request\n * @returns Result with response or ModelError\n */\n async complete(request: CompletionRequest): Promise<Result<CompletionResponse, ModelError>> {\n this.logRequest(request);\n\n try {\n const response = await this.executeCompletion(request);\n this.logResponse(response);\n return ok(response);\n } catch (error) {\n return err(this.transformError(error));\n }\n }\n\n /**\n * Surface an OpenAI / OpenAI-compatible gateway's REAL HTTP status + response\n * body in the error (#4047). The OpenAI SDK's default message collapses a\n * gateway rejection to e.g. `\"400 status code (no body)\"`, which hides WHY a\n * litellm-style gateway rejected a request — exactly the wall hit when\n * diagnosing degraded voter panels on a custom gateway. We re-message with the\n * status/type/code/param/request-id/body. Error-code routing is unchanged: we\n * classify on the ORIGINAL signal (`status`/`code`/`message`) via a clean probe\n * error, so the diagnostic `request_id`/`body` can't pollute the message-\n * substring classifier, then re-message the result with the full detail.\n * Applies to direct OpenAI and the compat gateway alike.\n */\n protected override transformError(error: unknown): ModelError {\n if (error instanceof APIError) {\n const v = error as ApiErrorView;\n // Classify on the original SDK message + status/code only.\n const probe: Error & { status?: number | undefined; code?: string | null | undefined } =\n new Error(typeof v.message === 'string' ? v.message : '');\n probe.status = typeof v.status === 'number' ? v.status : undefined;\n probe.code = v.code ?? undefined;\n probe.cause = error;\n const classified = super.transformError(probe);\n // Surface the full diagnostic detail in the final message (code/cause kept).\n classified.message = `${this.providerId}/${this.modelId}: ${describeOpenAIApiError(v)}`;\n return classified;\n }\n return super.transformError(error);\n }\n\n /**\n * Stream a completion request from OpenAI.\n *\n * @param request - The completion request\n * @yields StreamChunk objects as they arrive\n */\n async *stream(request: CompletionRequest): AsyncIterable<StreamChunk> {\n this.logRequest(request);\n\n const [controller, iterable] = createStream<StreamChunk>();\n\n // Start streaming in the background\n this.executeStream(request, controller).catch((error: unknown) => {\n const modelError = this.transformError(error);\n controller.error(modelError);\n });\n\n yield* iterable;\n }\n\n /**\n * Count tokens in text using OpenAI-specific estimation.\n *\n * @param text - Text to count tokens for\n * @returns Approximate token count\n */\n override countTokens(text: string): Promise<number> {\n // Use unified TokenEstimator with OpenAI-specific ratio (~4 chars/token)\n return Promise.resolve(getTokenEstimator().estimateText(text, 'openai'));\n }\n\n /**\n * Executes the completion request against the OpenAI API.\n */\n private async executeCompletion(request: CompletionRequest): Promise<CompletionResponse> {\n const params = this.buildRequestParams(request);\n // #3036: forward AbortSignal into the OpenAI SDK so withWatchdog\n // timeouts cancel the HTTP request instead of leaking it past the\n // Promise.race boundary. Branch on signal presence — vitest 4\n // toHaveBeenCalledWith treats `(params, undefined)` as a distinct\n // call shape from `(params)`.\n const response =\n request.signal !== undefined\n ? await this.client.chat.completions.create(params, { signal: request.signal })\n : await this.client.chat.completions.create(params);\n return this.mapResponse(response);\n }\n\n /**\n * Executes streaming completion and pushes chunks to the controller.\n */\n private async executeStream(\n request: CompletionRequest,\n controller: {\n push: (chunk: StreamChunk) => Result<void, Error>;\n complete: () => void;\n error: (error: Error) => void;\n }\n ): Promise<void> {\n try {\n const params = this.buildRequestParams(request);\n const stream = await this.client.chat.completions.create({ ...params, stream: true });\n\n let contentIndex = 0;\n let hasStarted = false;\n\n for await (const chunk of stream) {\n const mappedChunks = mapStreamChunk(chunk, contentIndex, hasStarted);\n\n for (const mappedChunk of mappedChunks) {\n if (mappedChunk.type === 'message_start') {\n hasStarted = true;\n }\n if (mappedChunk.type === 'content_block_start') {\n contentIndex++;\n }\n controller.push(mappedChunk);\n }\n }\n\n controller.complete();\n } catch (error) {\n const modelError = this.transformError(error);\n controller.error(modelError);\n }\n }\n\n /**\n * Builds OpenAI API request parameters from our CompletionRequest.\n */\n private buildRequestParams(\n request: CompletionRequest\n ): OpenAI.Chat.ChatCompletionCreateParamsNonStreaming {\n const messages = this.buildMessages(request);\n\n const params: OpenAI.Chat.ChatCompletionCreateParamsNonStreaming = {\n model: this.resolvedModelId,\n messages,\n max_completion_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n };\n\n this.addOptionalParams(params, request);\n return params;\n }\n\n /**\n * Builds the messages array for the request.\n */\n private buildMessages(request: CompletionRequest): ChatCompletionMessageParam[] {\n const messages: ChatCompletionMessageParam[] = [];\n\n // Add system prompt if provided explicitly\n if (request.systemPrompt !== undefined && request.systemPrompt !== '') {\n messages.push({ role: 'system', content: request.systemPrompt });\n }\n\n // Map and add all messages (filtering out system if already added via systemPrompt)\n for (const msg of request.messages) {\n if (msg.role === 'system' && request.systemPrompt !== undefined) {\n continue;\n }\n messages.push(mapMessage(msg));\n }\n\n return messages;\n }\n\n /**\n * Adds optional parameters to the request.\n */\n private addOptionalParams(\n params: OpenAI.Chat.ChatCompletionCreateParamsNonStreaming,\n request: CompletionRequest\n ): void {\n // #4068: the temperature drop-decision (#4061: a gateway routing to a Claude\n // model after Opus 4.6, or an OpenAI reasoning model, rejects a non-1.0\n // temperature with a 400; omit it so a gateway-routed voter panel at the\n // default 0.3 does not 400) is centralized in the shared planOptionalParams\n // seam. NOTE: a gateway that injects its OWN default when the field is absent\n // is outside our control — our contract is only to not SEND a rejected value.\n const plan = planOptionalParams(request, this.resolvedModelId);\n if (plan.temperature !== undefined) {\n params.temperature = plan.temperature;\n }\n\n if (request.stop !== undefined && request.stop.length > 0) {\n params.stop = request.stop;\n }\n\n if (request.tools !== undefined && request.tools.length > 0) {\n params.tools = request.tools.map(mapTool);\n }\n\n this.addResponseFormat(params, request);\n }\n\n /**\n * Adds response format to the request if specified.\n */\n private addResponseFormat(\n params: OpenAI.Chat.ChatCompletionCreateParamsNonStreaming,\n request: CompletionRequest\n ): void {\n if (request.responseFormat === undefined) {\n return;\n }\n\n if (request.responseFormat.type === 'json_object') {\n params.response_format = { type: 'json_object' };\n } else if (request.responseFormat.type === 'json_schema') {\n params.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema: request.responseFormat.schema,\n },\n };\n }\n }\n\n /**\n * Maps OpenAI API response to our CompletionResponse format.\n */\n private mapResponse(response: ChatCompletion): CompletionResponse {\n const firstChoice = response.choices[0];\n\n // Handle case where no choices are returned\n if (firstChoice === undefined) {\n return this.createEmptyResponse(response);\n }\n\n const content = mapChoiceToContentBlocks(firstChoice);\n const usage: TokenUsage = mapResponseUsage(response);\n\n return {\n content,\n usage,\n stopReason: mapStopReason(firstChoice.finish_reason),\n model: response.model,\n };\n }\n\n /**\n * Creates an empty response when no choices are returned.\n */\n private createEmptyResponse(response: ChatCompletion): CompletionResponse {\n return {\n content: [{ type: 'text', text: '' }],\n usage: mapResponseUsage(response),\n stopReason: 'end_turn',\n model: response.model,\n };\n }\n\n /**\n * (#2529) List models served by this OpenAI-compatible endpoint.\n *\n * Wraps `GET /v1/models`. Result is cached for `LIST_MODELS_TTL_MS`\n * so identity resolution doesn't round-trip on every adapter.\n * Concurrent callers share the in-flight promise.\n *\n * Throws on non-2xx so the harness-side identity resolver knows to\n * fall back to modelId parsing — silent empty-list returns would be\n * indistinguishable from \"this gateway has no models\", which a\n * misconfigured endpoint shouldn't be allowed to claim.\n */\n async listModels(): Promise<readonly ModelMetadata[]> {\n const now = Date.now();\n if (this.modelsCache !== null && now - this.modelsCache.fetchedAt < LIST_MODELS_TTL_MS) {\n return this.modelsCache.value;\n }\n if (this.modelsInFlight !== null) {\n return this.modelsInFlight;\n }\n const inFlight = this.fetchModels();\n this.modelsInFlight = inFlight;\n try {\n const value = await inFlight;\n this.modelsCache = { value, fetchedAt: Date.now() };\n return value;\n } finally {\n this.modelsInFlight = null;\n }\n }\n\n private modelsCache: { value: readonly ModelMetadata[]; fetchedAt: number } | null = null;\n private modelsInFlight: Promise<readonly ModelMetadata[]> | null = null;\n\n private async fetchModels(): Promise<readonly ModelMetadata[]> {\n const list = await this.client.models.list();\n return list.data.map((m): ModelMetadata => {\n const meta: ModelMetadata = { id: m.id };\n if (typeof m.owned_by === 'string') {\n return { ...meta, ownedBy: m.owned_by, createdAt: m.created };\n }\n if (typeof m.created === 'number') {\n return { ...meta, createdAt: m.created };\n }\n return meta;\n });\n }\n}\n\nconst LIST_MODELS_TTL_MS = 5 * 60 * 1000;\n\n/**\n * Creates an OpenAIAdapter with the specified configuration.\n * Factory function for cleaner API.\n *\n * @param config - OpenAI adapter configuration\n * @returns A configured OpenAIAdapter instance\n *\n * @example\n * ```typescript\n * const adapter = createOpenAIAdapter({\n * modelId: 'gpt-4o',\n * apiKey: process.env.OPENAI_API_KEY!,\n * });\n * ```\n */\nexport function createOpenAIAdapter(config: OpenAIAdapterConfig): OpenAIAdapter {\n return new OpenAIAdapter(config);\n}\n","/**\n * nexus-agents/adapters - OpenAI Message Mappers\n *\n * Functions for mapping between Nexus and OpenAI message formats.\n */\n\nimport type OpenAI from 'openai';\nimport type {\n ChatCompletionMessageParam,\n ChatCompletionTool,\n ChatCompletion,\n ChatCompletionChunk,\n} from 'openai/resources/chat/completions';\nimport type {\n ContentBlock,\n Message,\n ToolDefinition,\n TokenUsage,\n StopReason,\n StreamChunk,\n} from '../core/index.js';\nimport { isFunctionToolCall } from './openai-types.js';\n\n/**\n * Maps OpenAI finish reasons to our StopReason type.\n */\nexport function mapStopReason(openaiReason: string | null | undefined): StopReason {\n switch (openaiReason) {\n case 'stop':\n return 'end_turn';\n case 'length':\n return 'max_tokens';\n case 'tool_calls':\n case 'function_call':\n return 'tool_use';\n case 'content_filter':\n return 'end_turn';\n default:\n return 'end_turn';\n }\n}\n\n/**\n * Maps OpenAI choice to our ContentBlock array.\n */\nexport function mapChoiceToContentBlocks(choice: ChatCompletion.Choice): ContentBlock[] {\n const blocks: ContentBlock[] = [];\n const message = choice.message;\n\n // Add text content if present\n if (message.content !== null && message.content !== '') {\n blocks.push({ type: 'text', text: message.content });\n }\n\n // Add tool calls if present\n if (message.tool_calls !== undefined && message.tool_calls.length > 0) {\n for (const toolCall of message.tool_calls) {\n if (isFunctionToolCall(toolCall)) {\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(toolCall.function.arguments) as unknown;\n } catch {\n parsedInput = { _raw: toolCall.function.arguments };\n }\n blocks.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.function.name,\n input: parsedInput,\n });\n }\n }\n }\n\n // If no content at all, return empty text block\n if (blocks.length === 0) {\n blocks.push({ type: 'text', text: '' });\n }\n\n return blocks;\n}\n\n/**\n * Maps our Message format to OpenAI's ChatCompletionMessageParam format.\n */\nexport function mapMessage(message: Message): ChatCompletionMessageParam {\n // Handle system messages\n if (message.role === 'system') {\n return mapSystemMessage(message);\n }\n\n // Handle user messages\n if (message.role === 'user') {\n return mapUserMessage(message);\n }\n\n // Handle assistant messages\n return mapAssistantMessage(message);\n}\n\n/**\n * Maps a system message.\n */\nfunction mapSystemMessage(message: Message): ChatCompletionMessageParam {\n const content =\n typeof message.content === 'string'\n ? message.content\n : message.content\n .filter((b): b is { type: 'text'; text: string } => b.type === 'text')\n .map((b) => b.text)\n .join('\\n');\n return { role: 'system', content };\n}\n\n/**\n * Maps a user message.\n */\nfunction mapUserMessage(message: Message): ChatCompletionMessageParam {\n if (typeof message.content === 'string') {\n return { role: 'user', content: message.content };\n }\n\n // Check for tool results - these need special handling\n const toolResults = message.content.filter(\n (b): b is { type: 'tool_result'; tool_use_id: string; content: string; is_error?: boolean } =>\n b.type === 'tool_result'\n );\n\n if (toolResults.length > 0) {\n // Return first tool result as a tool message\n const firstResult = toolResults[0];\n if (firstResult !== undefined) {\n return {\n role: 'tool',\n tool_call_id: firstResult.tool_use_id,\n content: firstResult.content,\n };\n }\n }\n\n // Map to user message with content array\n const content = message.content.map((block) => {\n if (block.type === 'text') {\n return { type: 'text' as const, text: block.text };\n }\n if (block.type === 'image') {\n return {\n type: 'image_url' as const,\n image_url: {\n url: `data:${block.source.media_type};base64,${block.source.data}`,\n },\n };\n }\n // Fallback for other types\n return { type: 'text' as const, text: '' };\n });\n\n return { role: 'user', content };\n}\n\n/**\n * Maps an assistant message.\n */\nfunction mapAssistantMessage(message: Message): ChatCompletionMessageParam {\n if (typeof message.content === 'string') {\n return { role: 'assistant', content: message.content };\n }\n\n // Check for tool uses in assistant message\n const toolUses = message.content.filter(\n (b): b is { type: 'tool_use'; id: string; name: string; input: unknown } =>\n b.type === 'tool_use'\n );\n\n const textContent = message.content\n .filter((b): b is { type: 'text'; text: string } => b.type === 'text')\n .map((b) => b.text)\n .join('');\n\n if (toolUses.length > 0) {\n const assistantMessage: ChatCompletionMessageParam = {\n role: 'assistant',\n content: textContent !== '' ? textContent : null,\n tool_calls: toolUses.map((tool) => ({\n id: tool.id,\n type: 'function' as const,\n function: {\n name: tool.name,\n arguments: JSON.stringify(tool.input),\n },\n })),\n };\n return assistantMessage;\n }\n\n return { role: 'assistant', content: textContent };\n}\n\n/**\n * Maps our ToolDefinition to OpenAI's tool format.\n */\nexport function mapTool(tool: ToolDefinition): ChatCompletionTool {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n };\n}\n\n/**\n * Maps OpenAI API response to our CompletionResponse format.\n */\nexport function mapResponseUsage(response: ChatCompletion): TokenUsage {\n return {\n inputTokens: response.usage?.prompt_tokens ?? 0,\n outputTokens: response.usage?.completion_tokens ?? 0,\n totalTokens: response.usage?.total_tokens ?? 0,\n };\n}\n\n/**\n * Maps content delta from stream chunk.\n */\nfunction mapContentDelta(\n delta: OpenAI.Chat.ChatCompletionChunk.Choice.Delta,\n currentIndex: number,\n hasStarted: boolean\n): StreamChunk[] {\n const chunks: StreamChunk[] = [];\n\n if (delta.content !== undefined && delta.content !== null && delta.content !== '') {\n // Start content block if this is the first content\n if (currentIndex === 0 && !hasStarted) {\n chunks.push({\n type: 'content_block_start',\n index: 0,\n contentBlock: { type: 'text', text: '' },\n });\n }\n\n chunks.push({\n type: 'content_block_delta',\n index: currentIndex,\n delta: { type: 'text_delta', text: delta.content },\n });\n }\n\n return chunks;\n}\n\n/**\n * Maps tool calls from stream chunk delta.\n */\nfunction mapToolCallsDelta(delta: OpenAI.Chat.ChatCompletionChunk.Choice.Delta): StreamChunk[] {\n const chunks: StreamChunk[] = [];\n\n if (delta.tool_calls !== undefined && delta.tool_calls.length > 0) {\n for (const toolCall of delta.tool_calls) {\n if (toolCall.function?.name !== undefined) {\n chunks.push({\n type: 'content_block_start',\n index: toolCall.index,\n contentBlock: {\n type: 'tool_use',\n id: toolCall.id ?? '',\n name: toolCall.function.name,\n input: {},\n },\n });\n }\n }\n }\n\n return chunks;\n}\n\n/**\n * Maps finish reason from stream chunk.\n */\nfunction mapFinishChunks(\n choice: ChatCompletionChunk.Choice,\n chunk: ChatCompletionChunk,\n currentIndex: number\n): StreamChunk[] {\n const chunks: StreamChunk[] = [];\n\n if (choice.finish_reason !== null) {\n // End current content block\n chunks.push({\n type: 'content_block_stop',\n index: currentIndex,\n });\n\n // Emit message_delta with stop reason\n chunks.push({\n type: 'message_delta',\n delta: { stop_reason: mapStopReason(choice.finish_reason) },\n usage: {\n inputTokens: 0,\n outputTokens: chunk.usage?.completion_tokens ?? 0,\n totalTokens: chunk.usage?.total_tokens ?? 0,\n },\n });\n\n // Emit message_stop\n chunks.push({ type: 'message_stop' });\n }\n\n return chunks;\n}\n\n/**\n * Maps OpenAI stream chunks to our StreamChunk format.\n */\nexport function mapStreamChunk(\n chunk: ChatCompletionChunk,\n currentIndex: number,\n hasStarted: boolean\n): StreamChunk[] {\n const chunks: StreamChunk[] = [];\n const choice = chunk.choices[0];\n\n // Emit message_start on first chunk\n if (!hasStarted) {\n chunks.push({\n type: 'message_start',\n message: { model: chunk.model },\n });\n }\n\n if (choice === undefined) {\n return chunks;\n }\n\n const delta = choice.delta;\n\n // Map content delta\n chunks.push(...mapContentDelta(delta, currentIndex, hasStarted));\n\n // Map tool calls\n chunks.push(...mapToolCallsDelta(delta));\n\n // Map finish reason\n chunks.push(...mapFinishChunks(choice, chunk, currentIndex));\n\n return chunks;\n}\n"],"mappings":"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","names":[]}