nexus-agents 8.58.4 → 8.58.6

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 (131) hide show
  1. package/dist/{ast-rule-runner-NIX2R2ER.js → ast-rule-runner-DEO7JRWD.js} +3 -3
  2. package/dist/{child-mcp-config-LBCDGXVO.js → child-mcp-config-UKY4JZD2.js} +2 -2
  3. package/dist/{chunk-MH2IGA2C.js → chunk-257NGWEF.js} +2 -2
  4. package/dist/{chunk-XFUWBS6A.js → chunk-2NN3HKP7.js} +2 -2
  5. package/dist/{chunk-KMEGWPIU.js → chunk-47L5YCXT.js} +2 -2
  6. package/dist/{chunk-4FFTWLHX.js → chunk-6WIEJNJE.js} +56 -19
  7. package/dist/chunk-6WIEJNJE.js.map +1 -0
  8. package/dist/{chunk-MTKFVOKA.js → chunk-ANTMT6RY.js} +2 -2
  9. package/dist/{chunk-ARUHRGGB.js → chunk-AXQGIENC.js} +2 -2
  10. package/dist/{chunk-KFOYGHUC.js → chunk-CLCPHSRI.js} +2 -2
  11. package/dist/{chunk-SHH7CZOP.js → chunk-DNJIQBAL.js} +2 -2
  12. package/dist/{chunk-IK5FLVX4.js → chunk-E6ZQEHDR.js} +4 -4
  13. package/dist/{chunk-CDT2CX3J.js → chunk-EDYTEMHV.js} +7 -7
  14. package/dist/{chunk-S7Y4BHTF.js → chunk-ENI5XRRF.js} +2 -2
  15. package/dist/{chunk-GDOEI664.js → chunk-FWW4PXB6.js} +4 -4
  16. package/dist/{chunk-HILSAACO.js → chunk-GBBI2QFJ.js} +3 -3
  17. package/dist/{chunk-QV7WOPZY.js → chunk-GV7RPQ7U.js} +3 -3
  18. package/dist/{chunk-3JJHGGTT.js → chunk-GXCMOXBS.js} +2 -2
  19. package/dist/{chunk-67AADYKZ.js → chunk-HA4PGGHG.js} +2 -2
  20. package/dist/{chunk-GESWDHFD.js → chunk-I73M6A6N.js} +2 -2
  21. package/dist/{chunk-YLBVRBVK.js → chunk-JC7EI7WG.js} +4 -4
  22. package/dist/{chunk-PCGPMJBA.js → chunk-JJK4QPT4.js} +36 -36
  23. package/dist/{chunk-AKC7SODA.js → chunk-KSOAZJM7.js} +2 -2
  24. package/dist/{chunk-J5MWJGDC.js → chunk-LM3FAJ5Y.js} +2 -2
  25. package/dist/{chunk-HGLRQ4N5.js → chunk-LXWPPPY7.js} +4 -4
  26. package/dist/{chunk-VUB6RPPH.js → chunk-PW4BOOFF.js} +2 -2
  27. package/dist/{chunk-AQHLUZ44.js → chunk-QMRMPIMW.js} +2 -2
  28. package/dist/{chunk-PSRLUHF2.js → chunk-QNC7HJPJ.js} +2 -2
  29. package/dist/{chunk-KT26CDSA.js → chunk-RQVYN5U2.js} +9 -9
  30. package/dist/{chunk-3A5BXLPV.js → chunk-SQDFLFMP.js} +63 -34
  31. package/dist/chunk-SQDFLFMP.js.map +1 -0
  32. package/dist/{chunk-6DYJTPER.js → chunk-TWL6LR65.js} +3 -3
  33. package/dist/{chunk-5HAKYKCY.js → chunk-UHS465UI.js} +2 -2
  34. package/dist/{chunk-TZ6FVGJZ.js → chunk-UKAGJ224.js} +2 -2
  35. package/dist/{chunk-HRXWESJB.js → chunk-XW4R6JEN.js} +3 -3
  36. package/dist/{chunk-X7NUFNVJ.js → chunk-XWSLQ5PQ.js} +5 -5
  37. package/dist/{chunk-5RSH7N6W.js → chunk-YJI3TAJD.js} +2 -2
  38. package/dist/{chunk-ZTX7DLWE.js → chunk-Z66FYRAW.js} +6 -6
  39. package/dist/{chunk-YDVOA4I3.js → chunk-ZWT7PLA4.js} +5 -5
  40. package/dist/{cli-circuit-breaker-G7JVCCHA.js → cli-circuit-breaker-BRL7DAYM.js} +3 -3
  41. package/dist/cli.js +44 -44
  42. package/dist/{composite-router-ZBNPUNRE.js → composite-router-MZYI7QXQ.js} +2 -2
  43. package/dist/{consensus-vote-GEVSVYV6.js → consensus-vote-QSQ66LID.js} +17 -17
  44. package/dist/{context-retriever-J34XBWSS.js → context-retriever-QUZLDELM.js} +8 -8
  45. package/dist/{doctor-deep-ITUREQZO.js → doctor-deep-NVOF2ER5.js} +3 -3
  46. package/dist/{doctor-live-UVODP772.js → doctor-live-R34ELQ57.js} +10 -10
  47. package/dist/{expert-bridge-QX2UR2BM.js → expert-bridge-FBCMB6OX.js} +4 -4
  48. package/dist/{factory-WOUE5TFB.js → factory-76EOSZND.js} +9 -9
  49. package/dist/{factory-EYT7ROYW.js → factory-XOH5OJYR.js} +5 -5
  50. package/dist/{improvement-review-25ML3PFG.js → improvement-review-MSK5GJZ2.js} +6 -6
  51. package/dist/index.d.ts +17 -0
  52. package/dist/index.js +32 -32
  53. package/dist/{init-opencode-K7SFAFPP.js → init-opencode-45S2XHGX.js} +6 -6
  54. package/dist/issue-triage-USLZCNEV.js +17 -0
  55. package/dist/models-dev-snapshot.json +200 -8
  56. package/dist/{pr-reviewer-helpers-AS7QF6EZ.js → pr-reviewer-helpers-CZUPG3AA.js} +4 -4
  57. package/dist/{registry-command-TBKBERPQ.js → registry-command-HJF3R4FO.js} +2 -2
  58. package/dist/{repo-security-plan-IL67SCKX.js → repo-security-plan-T6XER6E5.js} +3 -3
  59. package/dist/{research-helpers-synthesize-567ZPTCF.js → research-helpers-synthesize-CBBQDWGS.js} +4 -4
  60. package/dist/{routing-memory-RHDT5HIP.js → routing-memory-TOQKGEWX.js} +2 -2
  61. package/dist/{session-memory-UPX3KPG6.js → session-memory-I5EJA7MT.js} +3 -3
  62. package/dist/{setup-config-HKQKKAIB.js → setup-config-QTGVQ7H2.js} +3 -3
  63. package/dist/{setup-custom-api-OBAFCX4H.js → setup-custom-api-VACESB4N.js} +4 -4
  64. package/dist/setup-data-dir-N5TCUUH4.js +31 -0
  65. package/dist/{tool-memory-NFO4G45N.js → tool-memory-IF22RCZB.js} +5 -5
  66. package/dist/{unified-registry-RQ34NS65.js → unified-registry-A2A3JZGT.js} +10 -10
  67. package/dist/{weather-report-5UHJLCEZ.js → weather-report-VMA3BJV5.js} +2 -2
  68. package/package.json +1 -1
  69. package/dist/chunk-3A5BXLPV.js.map +0 -1
  70. package/dist/chunk-4FFTWLHX.js.map +0 -1
  71. package/dist/issue-triage-ULMBQTMC.js +0 -17
  72. package/dist/setup-data-dir-S2YYGJSS.js +0 -31
  73. /package/dist/{ast-rule-runner-NIX2R2ER.js.map → ast-rule-runner-DEO7JRWD.js.map} +0 -0
  74. /package/dist/{child-mcp-config-LBCDGXVO.js.map → child-mcp-config-UKY4JZD2.js.map} +0 -0
  75. /package/dist/{chunk-MH2IGA2C.js.map → chunk-257NGWEF.js.map} +0 -0
  76. /package/dist/{chunk-XFUWBS6A.js.map → chunk-2NN3HKP7.js.map} +0 -0
  77. /package/dist/{chunk-KMEGWPIU.js.map → chunk-47L5YCXT.js.map} +0 -0
  78. /package/dist/{chunk-MTKFVOKA.js.map → chunk-ANTMT6RY.js.map} +0 -0
  79. /package/dist/{chunk-ARUHRGGB.js.map → chunk-AXQGIENC.js.map} +0 -0
  80. /package/dist/{chunk-KFOYGHUC.js.map → chunk-CLCPHSRI.js.map} +0 -0
  81. /package/dist/{chunk-SHH7CZOP.js.map → chunk-DNJIQBAL.js.map} +0 -0
  82. /package/dist/{chunk-IK5FLVX4.js.map → chunk-E6ZQEHDR.js.map} +0 -0
  83. /package/dist/{chunk-CDT2CX3J.js.map → chunk-EDYTEMHV.js.map} +0 -0
  84. /package/dist/{chunk-S7Y4BHTF.js.map → chunk-ENI5XRRF.js.map} +0 -0
  85. /package/dist/{chunk-GDOEI664.js.map → chunk-FWW4PXB6.js.map} +0 -0
  86. /package/dist/{chunk-HILSAACO.js.map → chunk-GBBI2QFJ.js.map} +0 -0
  87. /package/dist/{chunk-QV7WOPZY.js.map → chunk-GV7RPQ7U.js.map} +0 -0
  88. /package/dist/{chunk-3JJHGGTT.js.map → chunk-GXCMOXBS.js.map} +0 -0
  89. /package/dist/{chunk-67AADYKZ.js.map → chunk-HA4PGGHG.js.map} +0 -0
  90. /package/dist/{chunk-GESWDHFD.js.map → chunk-I73M6A6N.js.map} +0 -0
  91. /package/dist/{chunk-YLBVRBVK.js.map → chunk-JC7EI7WG.js.map} +0 -0
  92. /package/dist/{chunk-PCGPMJBA.js.map → chunk-JJK4QPT4.js.map} +0 -0
  93. /package/dist/{chunk-AKC7SODA.js.map → chunk-KSOAZJM7.js.map} +0 -0
  94. /package/dist/{chunk-J5MWJGDC.js.map → chunk-LM3FAJ5Y.js.map} +0 -0
  95. /package/dist/{chunk-HGLRQ4N5.js.map → chunk-LXWPPPY7.js.map} +0 -0
  96. /package/dist/{chunk-VUB6RPPH.js.map → chunk-PW4BOOFF.js.map} +0 -0
  97. /package/dist/{chunk-AQHLUZ44.js.map → chunk-QMRMPIMW.js.map} +0 -0
  98. /package/dist/{chunk-PSRLUHF2.js.map → chunk-QNC7HJPJ.js.map} +0 -0
  99. /package/dist/{chunk-KT26CDSA.js.map → chunk-RQVYN5U2.js.map} +0 -0
  100. /package/dist/{chunk-6DYJTPER.js.map → chunk-TWL6LR65.js.map} +0 -0
  101. /package/dist/{chunk-5HAKYKCY.js.map → chunk-UHS465UI.js.map} +0 -0
  102. /package/dist/{chunk-TZ6FVGJZ.js.map → chunk-UKAGJ224.js.map} +0 -0
  103. /package/dist/{chunk-HRXWESJB.js.map → chunk-XW4R6JEN.js.map} +0 -0
  104. /package/dist/{chunk-X7NUFNVJ.js.map → chunk-XWSLQ5PQ.js.map} +0 -0
  105. /package/dist/{chunk-5RSH7N6W.js.map → chunk-YJI3TAJD.js.map} +0 -0
  106. /package/dist/{chunk-ZTX7DLWE.js.map → chunk-Z66FYRAW.js.map} +0 -0
  107. /package/dist/{chunk-YDVOA4I3.js.map → chunk-ZWT7PLA4.js.map} +0 -0
  108. /package/dist/{cli-circuit-breaker-G7JVCCHA.js.map → cli-circuit-breaker-BRL7DAYM.js.map} +0 -0
  109. /package/dist/{composite-router-ZBNPUNRE.js.map → composite-router-MZYI7QXQ.js.map} +0 -0
  110. /package/dist/{consensus-vote-GEVSVYV6.js.map → consensus-vote-QSQ66LID.js.map} +0 -0
  111. /package/dist/{context-retriever-J34XBWSS.js.map → context-retriever-QUZLDELM.js.map} +0 -0
  112. /package/dist/{doctor-deep-ITUREQZO.js.map → doctor-deep-NVOF2ER5.js.map} +0 -0
  113. /package/dist/{doctor-live-UVODP772.js.map → doctor-live-R34ELQ57.js.map} +0 -0
  114. /package/dist/{expert-bridge-QX2UR2BM.js.map → expert-bridge-FBCMB6OX.js.map} +0 -0
  115. /package/dist/{factory-EYT7ROYW.js.map → factory-76EOSZND.js.map} +0 -0
  116. /package/dist/{factory-WOUE5TFB.js.map → factory-XOH5OJYR.js.map} +0 -0
  117. /package/dist/{improvement-review-25ML3PFG.js.map → improvement-review-MSK5GJZ2.js.map} +0 -0
  118. /package/dist/{init-opencode-K7SFAFPP.js.map → init-opencode-45S2XHGX.js.map} +0 -0
  119. /package/dist/{issue-triage-ULMBQTMC.js.map → issue-triage-USLZCNEV.js.map} +0 -0
  120. /package/dist/{pr-reviewer-helpers-AS7QF6EZ.js.map → pr-reviewer-helpers-CZUPG3AA.js.map} +0 -0
  121. /package/dist/{registry-command-TBKBERPQ.js.map → registry-command-HJF3R4FO.js.map} +0 -0
  122. /package/dist/{repo-security-plan-IL67SCKX.js.map → repo-security-plan-T6XER6E5.js.map} +0 -0
  123. /package/dist/{research-helpers-synthesize-567ZPTCF.js.map → research-helpers-synthesize-CBBQDWGS.js.map} +0 -0
  124. /package/dist/{routing-memory-RHDT5HIP.js.map → routing-memory-TOQKGEWX.js.map} +0 -0
  125. /package/dist/{session-memory-UPX3KPG6.js.map → session-memory-I5EJA7MT.js.map} +0 -0
  126. /package/dist/{setup-config-HKQKKAIB.js.map → setup-config-QTGVQ7H2.js.map} +0 -0
  127. /package/dist/{setup-custom-api-OBAFCX4H.js.map → setup-custom-api-VACESB4N.js.map} +0 -0
  128. /package/dist/{setup-data-dir-S2YYGJSS.js.map → setup-data-dir-N5TCUUH4.js.map} +0 -0
  129. /package/dist/{tool-memory-NFO4G45N.js.map → tool-memory-IF22RCZB.js.map} +0 -0
  130. /package/dist/{unified-registry-RQ34NS65.js.map → unified-registry-A2A3JZGT.js.map} +0 -0
  131. /package/dist/{weather-report-5UHJLCEZ.js.map → weather-report-VMA3BJV5.js.map} +0 -0
@@ -9,8 +9,8 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-TZ6FVGJZ.js";
13
- import "./chunk-6DYJTPER.js";
12
+ } from "./chunk-UKAGJ224.js";
13
+ import "./chunk-TWL6LR65.js";
14
14
  import "./chunk-MTYJPPIG.js";
15
15
  import "./chunk-BTYRPZON.js";
16
16
  import "./chunk-ZPWHCABL.js";
@@ -26,4 +26,4 @@ export {
26
26
  loadRules,
27
27
  runAstQaRules
28
28
  };
29
- //# sourceMappingURL=ast-rule-runner-NIX2R2ER.js.map
29
+ //# sourceMappingURL=ast-rule-runner-DEO7JRWD.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-T46RV7Y7.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-6DYJTPER.js";
6
+ } from "./chunk-TWL6LR65.js";
7
7
  import "./chunk-MTYJPPIG.js";
8
8
  import "./chunk-BTYRPZON.js";
9
9
  import "./chunk-ZPWHCABL.js";
@@ -60,4 +60,4 @@ export {
60
60
  generateMcpConfig,
61
61
  getDefaultAllowedTools
62
62
  };
63
- //# sourceMappingURL=child-mcp-config-LBCDGXVO.js.map
63
+ //# sourceMappingURL=child-mcp-config-UKY4JZD2.js.map
@@ -5,7 +5,7 @@ import {
5
5
  MCP_TIMEOUTS,
6
6
  TEST_TIMEOUTS,
7
7
  WORKFLOW_TIMEOUTS
8
- } from "./chunk-6DYJTPER.js";
8
+ } from "./chunk-TWL6LR65.js";
9
9
  import {
10
10
  createGetEnvVarDocumentation,
11
11
  createGetTimeout,
@@ -224,4 +224,4 @@ export {
224
224
  CUSTOM_API_DEFAULT_MODEL,
225
225
  DEFAULTS
226
226
  };
227
- //# sourceMappingURL=chunk-MH2IGA2C.js.map
227
+ //# sourceMappingURL=chunk-257NGWEF.js.map
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  import semver from "semver";
3
- var VERSION = true ? "8.58.4" : "dev";
3
+ var VERSION = true ? "8.58.6" : "dev";
4
4
  var NODE_ENGINE_RANGE = ">=22.5.0";
5
5
  function isNodeVersionSupported(version) {
6
6
  return semver.satisfies(version, NODE_ENGINE_RANGE);
@@ -11,4 +11,4 @@ export {
11
11
  NODE_ENGINE_RANGE,
12
12
  isNodeVersionSupported
13
13
  };
14
- //# sourceMappingURL=chunk-XFUWBS6A.js.map
14
+ //# sourceMappingURL=chunk-2NN3HKP7.js.map
@@ -4,7 +4,7 @@ import {
4
4
  err,
5
5
  getErrorMessage,
6
6
  ok
7
- } from "./chunk-6DYJTPER.js";
7
+ } from "./chunk-TWL6LR65.js";
8
8
 
9
9
  // src/scm/types.ts
10
10
  var ScmError = class extends Error {
@@ -281,4 +281,4 @@ export {
281
281
  ScmError,
282
282
  GitHubProvider
283
283
  };
284
- //# sourceMappingURL=chunk-KMEGWPIU.js.map
284
+ //# sourceMappingURL=chunk-47L5YCXT.js.map
@@ -5,34 +5,34 @@ import {
5
5
  planOptionalParams,
6
6
  requireApiKey,
7
7
  validateApiKeyPresence
8
- } from "./chunk-PSRLUHF2.js";
8
+ } from "./chunk-QNC7HJPJ.js";
9
9
  import {
10
10
  CUSTOM_API_DEFAULT_MODEL
11
- } from "./chunk-MH2IGA2C.js";
11
+ } from "./chunk-257NGWEF.js";
12
12
  import {
13
13
  CUSTOM_API_BASE_URL_ENV,
14
14
  PROVIDER_ENV_KEYS,
15
15
  assertCustomApiHostResolvesPublic,
16
16
  validateCustomApiBaseUrl
17
- } from "./chunk-5HAKYKCY.js";
17
+ } from "./chunk-UHS465UI.js";
18
18
  import {
19
19
  nexusMkdtempSync
20
20
  } from "./chunk-T46RV7Y7.js";
21
21
  import {
22
22
  getAvailabilityCache
23
- } from "./chunk-VUB6RPPH.js";
23
+ } from "./chunk-PW4BOOFF.js";
24
24
  import {
25
25
  extractSystemPrompt
26
26
  } from "./chunk-QZUG667L.js";
27
27
  import {
28
28
  generateHyphenId
29
- } from "./chunk-GESWDHFD.js";
29
+ } from "./chunk-I73M6A6N.js";
30
30
  import {
31
31
  CliCircuitBreaker,
32
32
  DEFAULT_CIRCUIT_BREAKER_CONFIG,
33
33
  getCliCircuitBreakerSnapshot,
34
34
  getDefaultCliCircuitBreakerRegistry
35
- } from "./chunk-67AADYKZ.js";
35
+ } from "./chunk-HA4PGGHG.js";
36
36
  import {
37
37
  CLI_SUBPROCESS_TIMEOUTS,
38
38
  CLI_TIMEOUTS,
@@ -75,7 +75,7 @@ import {
75
75
  resolveCliModelName,
76
76
  resolveRetryAfterMs,
77
77
  retryAfterMsFromContext
78
- } from "./chunk-6DYJTPER.js";
78
+ } from "./chunk-TWL6LR65.js";
79
79
  import {
80
80
  parseBoolValue
81
81
  } from "./chunk-BTYRPZON.js";
@@ -2438,7 +2438,7 @@ var LOGIN_HINTS = {
2438
2438
  gemini: "gemini",
2439
2439
  opencode: "opencode auth login"
2440
2440
  };
2441
- var NOT_AUTH_PATTERNS = [
2441
+ var AUTH_FAILURE_PATTERNS = [
2442
2442
  /not logged in/i,
2443
2443
  /please run \/?login/i,
2444
2444
  /authentication (?:required|expired|failed)/i,
@@ -2460,12 +2460,20 @@ var NOT_AUTH_PATTERNS = [
2460
2460
  /refresh token .*already used/i,
2461
2461
  /could not be refreshed/i,
2462
2462
  /log ?out and sign in/i,
2463
- /sign in again/i
2463
+ /sign in again/i,
2464
+ // #6269: the gemini/agy binary's OAuth-personal tier was discontinued; it
2465
+ // writes "Error authenticating: IneligibleTierError: This client is no
2466
+ // longer supported…" to stderr and may still exit 0 with an EMPTY answer.
2467
+ // Neither word matched any pattern above, so the seat was retried as a
2468
+ // parse failure for the whole panel budget instead of falling over.
2469
+ /error authenticating/i,
2470
+ /ineligible ?tier/i
2464
2471
  ];
2472
+ function isAuthFailureText(text) {
2473
+ return AUTH_FAILURE_PATTERNS.some((re) => re.test(text));
2474
+ }
2465
2475
  function classifyMessage(message) {
2466
- for (const re of NOT_AUTH_PATTERNS) {
2467
- if (re.test(message)) return { code: "NOT_AUTHENTICATED", auth: true };
2468
- }
2476
+ if (isAuthFailureText(message)) return { code: "NOT_AUTHENTICATED", auth: true };
2469
2477
  return { code: "EXECUTION_ERROR", auth: false };
2470
2478
  }
2471
2479
  function resolveCliName(cliName) {
@@ -2584,8 +2592,12 @@ function classifyStderrError(stderr) {
2584
2592
  if (STDERR_CONNECTION_PATTERNS.some((p) => lower.includes(p))) return "CONNECTION_ERROR";
2585
2593
  if (isRateLimitText(stderr)) return "RATE_LIMITED";
2586
2594
  if (isTimeoutText(stderr)) return "TIMEOUT";
2595
+ if (isAuthFailureText(stderr)) return "NOT_AUTHENTICATED";
2587
2596
  return "EXECUTION_ERROR";
2588
2597
  }
2598
+ function firstStderrLine(stderr) {
2599
+ return stderr.split("\n").find((line) => line.trim() !== "")?.trim() ?? "";
2600
+ }
2589
2601
  var subprocessLogger = createLogger({ component: "subprocess-adapter" });
2590
2602
  var MAX_RESPONSE_STDERR_CHARS = 8e3;
2591
2603
  function successStderrField(stderr) {
@@ -2951,14 +2963,12 @@ var SubprocessCliAdapter = class extends BaseCliAdapter {
2951
2963
  */
2952
2964
  handleSubprocessOutput(stdout, stderr, startTime) {
2953
2965
  if (stderr !== "" && stdout === "") {
2954
- return err(this.createError("EXECUTION_ERROR", stderr));
2966
+ return err(this.createError(classifyStderrError(stderr), stderr));
2955
2967
  }
2956
2968
  const text = this.parser.extractResponse(stdout);
2957
- if (text === null) {
2958
- const errorOnly = this.classifyErrorOnlyStream(stdout);
2959
- if (errorOnly !== null) return errorOnly;
2960
- return this.handleUnparseableOutput(stdout, stderr, startTime);
2961
- }
2969
+ if (text === null) return this.handleNoAnswer(stdout, stderr, startTime);
2970
+ const authFailure = this.classifyEmptyAnswer(text, stderr);
2971
+ if (authFailure !== null) return authFailure;
2962
2972
  const usage = this.parser.extractUsage(stdout);
2963
2973
  const sessionId = this.parser.extractSessionId(stdout);
2964
2974
  const costUsd = this.parser.extractCostUsd?.(stdout) ?? null;
@@ -2972,6 +2982,31 @@ var SubprocessCliAdapter = class extends BaseCliAdapter {
2972
2982
  })
2973
2983
  );
2974
2984
  }
2985
+ /**
2986
+ * The parser found no usable content. An error-only stream (e.g. OpenCode
2987
+ * NDJSON `{"type":"error"}`) surfaced an `errorMessage`: classify it before
2988
+ * the generic PARSE_ERROR path, which would mask the real cause.
2989
+ */
2990
+ handleNoAnswer(stdout, stderr, startTime) {
2991
+ const errorOnly = this.classifyErrorOnlyStream(stdout);
2992
+ if (errorOnly !== null) return errorOnly;
2993
+ return this.handleUnparseableOutput(stdout, stderr, startTime);
2994
+ }
2995
+ /**
2996
+ * #6269: a well-formed envelope carrying NO answer while stderr names a
2997
+ * credential failure is that failure, not a completion. `agy` exits 0 with
2998
+ * `{"status":"SUCCESS","response":""}` and "Error authenticating: …" on
2999
+ * stderr; handing "" downstream had the vote path parse it (and retry the
3000
+ * parse) for the whole panel budget. Returns `null` — no reclassification —
3001
+ * for a non-empty answer, and for an empty answer with stderr that names no
3002
+ * auth failure: empty stderr is NOT evidence, so that case still flows
3003
+ * through as the empty answer it is.
3004
+ */
3005
+ classifyEmptyAnswer(text, stderr) {
3006
+ if (text.trim() !== "" || !isAuthFailureText(stderr)) return null;
3007
+ const msg = `${this.name}: ${firstStderrLine(stderr)}`;
3008
+ return err(this.createError("NOT_AUTHENTICATED", msg));
3009
+ }
2975
3010
  /**
2976
3011
  * Classify an error-only stream — one where the parser surfaced an
2977
3012
  * `errorMessage` but no usable content (so `extractResponse` returned null).
@@ -5176,6 +5211,8 @@ export {
5176
5211
  BaseCliAdapter,
5177
5212
  NEXUS_SUBPROCESS_DEPTH_ENV,
5178
5213
  readSubprocessDepth,
5214
+ sanitizeOutput,
5215
+ isAuthFailureText,
5179
5216
  authRemediation,
5180
5217
  classifyExtractedError,
5181
5218
  SubprocessCliAdapter,
@@ -5211,4 +5248,4 @@ export {
5211
5248
  SdkAdapter,
5212
5249
  createAutoAdapter
5213
5250
  };
5214
- //# sourceMappingURL=chunk-4FFTWLHX.js.map
5251
+ //# sourceMappingURL=chunk-6WIEJNJE.js.map