nexus-agents 8.89.4 → 8.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/{ast-rule-runner-NOWNF5QY.js → ast-rule-runner-SD665GB7.js} +3 -3
  2. package/dist/{child-mcp-config-UBKF4SOL.js → child-mcp-config-BG3QNALD.js} +2 -2
  3. package/dist/{chunk-SXS2YQUK.js → chunk-2N7XWZPW.js} +4 -4
  4. package/dist/{chunk-4W4S6OBP.js → chunk-4KMNLWAC.js} +4 -4
  5. package/dist/{chunk-DGW6C2PT.js → chunk-5GI6Z5VE.js} +5 -4
  6. package/dist/chunk-5GI6Z5VE.js.map +1 -0
  7. package/dist/{chunk-U2C6V65K.js → chunk-C3HMZJ3R.js} +2 -2
  8. package/dist/{chunk-YYVBEHM3.js → chunk-C6Q2NUIH.js} +4 -4
  9. package/dist/{chunk-NRSAOTT7.js → chunk-ERTDJU7Y.js} +26 -12
  10. package/dist/chunk-ERTDJU7Y.js.map +1 -0
  11. package/dist/{chunk-P2RI4DGX.js → chunk-F2H3MCEV.js} +31 -8
  12. package/dist/{chunk-P2RI4DGX.js.map → chunk-F2H3MCEV.js.map} +1 -1
  13. package/dist/{chunk-XM2GVJPE.js → chunk-FPX55ON5.js} +7 -7
  14. package/dist/{chunk-6YQ55DOE.js → chunk-HBXAYO3C.js} +5 -5
  15. package/dist/{chunk-H7PL2D5A.js → chunk-HD3FTCV4.js} +5 -5
  16. package/dist/{chunk-6ZPHMRJQ.js → chunk-HPE3UQLT.js} +3 -3
  17. package/dist/{chunk-GPEGBNGB.js → chunk-HUCILYVO.js} +2 -2
  18. package/dist/{chunk-RQBI56JN.js → chunk-IDASIJE6.js} +2 -2
  19. package/dist/{chunk-3E4BZR3V.js → chunk-JWHIFEI3.js} +2 -2
  20. package/dist/{chunk-UR2KFP6P.js → chunk-KCWEMSU2.js} +2 -2
  21. package/dist/{chunk-SFHIXQGK.js → chunk-NFP7WQ22.js} +2 -2
  22. package/dist/{chunk-K6IVHUEK.js → chunk-NMJDOOYZ.js} +3 -3
  23. package/dist/{chunk-YBW45NIZ.js → chunk-NMZ5ZKEO.js} +2 -2
  24. package/dist/{chunk-YT7EP2B6.js → chunk-O3MSZUQM.js} +2 -2
  25. package/dist/{chunk-5JZ635RM.js → chunk-OJM75DDY.js} +3 -3
  26. package/dist/{chunk-GLG667IV.js → chunk-QCWY3GTZ.js} +2 -2
  27. package/dist/{chunk-YG3UYPKL.js → chunk-RMDG3OFS.js} +2 -2
  28. package/dist/{chunk-F3PIVN3B.js → chunk-S6FK47MZ.js} +2 -2
  29. package/dist/{chunk-LBYA22G5.js → chunk-SJH5U5XT.js} +10 -10
  30. package/dist/{chunk-2C5ABWLK.js → chunk-SMKBETIX.js} +2 -2
  31. package/dist/{chunk-NBVYSGSS.js → chunk-UWYNIMDF.js} +99 -63
  32. package/dist/{chunk-NBVYSGSS.js.map → chunk-UWYNIMDF.js.map} +1 -1
  33. package/dist/{chunk-5XCRXV43.js → chunk-VI5TF3KF.js} +2 -2
  34. package/dist/{chunk-P5ND7MWI.js → chunk-VIDSDHSQ.js} +8 -8
  35. package/dist/{chunk-LVL6WCWK.js → chunk-VLBXRQIA.js} +2 -2
  36. package/dist/{chunk-PEN5XFMP.js → chunk-WDGEJIWW.js} +2 -2
  37. package/dist/{chunk-XS3IJG4V.js → chunk-XT7VZSS3.js} +5 -3
  38. package/dist/chunk-XT7VZSS3.js.map +1 -0
  39. package/dist/{chunk-R57JPKHJ.js → chunk-ZP7LYABJ.js} +2 -2
  40. package/dist/{chunk-TFZDHQ45.js → chunk-ZVHJMROO.js} +4 -4
  41. package/dist/{cli-circuit-breaker-IFVKXCHQ.js → cli-circuit-breaker-GOH6U32K.js} +3 -3
  42. package/dist/cli.d.ts +1 -1
  43. package/dist/cli.js +88 -84
  44. package/dist/cli.js.map +1 -1
  45. package/dist/{composite-router-7LFS4CMF.js → composite-router-RMEHBA3J.js} +2 -2
  46. package/dist/{consensus-vote-SA2KVDQA.js → consensus-vote-BO7S3XSQ.js} +16 -16
  47. package/dist/{consensus-vote-types-DhmacUE7.d.ts → consensus-vote-types-BdptpuQK.d.ts} +6 -0
  48. package/dist/{context-retriever-V7OWZW7R.js → context-retriever-TWAN22PW.js} +8 -8
  49. package/dist/{doctor-deep-GJPTXS2N.js → doctor-deep-HRZ77NYS.js} +3 -3
  50. package/dist/{doctor-live-ET5O7O2D.js → doctor-live-VGOABDSJ.js} +10 -10
  51. package/dist/{expert-bridge-G656VGZG.js → expert-bridge-PFR7ZNWK.js} +4 -4
  52. package/dist/{factory-BQBFECEV.js → factory-DJPYG3WR.js} +9 -9
  53. package/dist/{factory-N34PTEMW.js → factory-JCVKAI7P.js} +5 -5
  54. package/dist/{improvement-review-YIXDCEX4.js → improvement-review-FXXRLLGX.js} +5 -5
  55. package/dist/index.d.ts +22 -2
  56. package/dist/index.js +30 -30
  57. package/dist/{init-opencode-33EU3PD6.js → init-opencode-KTIHOYIU.js} +5 -5
  58. package/dist/issue-triage-OCTW33O3.js +16 -0
  59. package/dist/{pr-reviewer-helpers-ZDAJARQ7.js → pr-reviewer-helpers-V67TZHNM.js} +4 -4
  60. package/dist/{registry-command-AB7KP7DK.js → registry-command-43IZQOAP.js} +2 -2
  61. package/dist/{repo-security-plan-YV3ZFKGO.js → repo-security-plan-OXMSNBOS.js} +3 -3
  62. package/dist/{research-helpers-synthesize-EOHUBGH3.js → research-helpers-synthesize-IBBRMZEY.js} +4 -4
  63. package/dist/{routing-memory-34JWGSAI.js → routing-memory-S3H3D6Z2.js} +2 -2
  64. package/dist/{session-memory-QGIJCM7P.js → session-memory-UO42CU2H.js} +3 -3
  65. package/dist/{setup-config-3KBMBPCN.js → setup-config-RGTKEVTD.js} +3 -3
  66. package/dist/{setup-custom-api-652FK232.js → setup-custom-api-PQ3PR2RR.js} +4 -4
  67. package/dist/setup-data-dir-BGG6ETH6.js +32 -0
  68. package/dist/{tool-memory-SPPCBLKQ.js → tool-memory-ZMLCOQH6.js} +5 -5
  69. package/dist/{unified-registry-ZOLSOVYN.js → unified-registry-HWBSGSOM.js} +10 -10
  70. package/dist/{weather-report-OHHDUNX3.js → weather-report-MZCA7Y6K.js} +2 -2
  71. package/package.json +1 -1
  72. package/dist/chunk-DGW6C2PT.js.map +0 -1
  73. package/dist/chunk-NRSAOTT7.js.map +0 -1
  74. package/dist/chunk-XS3IJG4V.js.map +0 -1
  75. package/dist/issue-triage-URFEVDIX.js +0 -16
  76. package/dist/setup-data-dir-XJMN4ALO.js +0 -32
  77. /package/dist/{ast-rule-runner-NOWNF5QY.js.map → ast-rule-runner-SD665GB7.js.map} +0 -0
  78. /package/dist/{child-mcp-config-UBKF4SOL.js.map → child-mcp-config-BG3QNALD.js.map} +0 -0
  79. /package/dist/{chunk-SXS2YQUK.js.map → chunk-2N7XWZPW.js.map} +0 -0
  80. /package/dist/{chunk-4W4S6OBP.js.map → chunk-4KMNLWAC.js.map} +0 -0
  81. /package/dist/{chunk-U2C6V65K.js.map → chunk-C3HMZJ3R.js.map} +0 -0
  82. /package/dist/{chunk-YYVBEHM3.js.map → chunk-C6Q2NUIH.js.map} +0 -0
  83. /package/dist/{chunk-XM2GVJPE.js.map → chunk-FPX55ON5.js.map} +0 -0
  84. /package/dist/{chunk-6YQ55DOE.js.map → chunk-HBXAYO3C.js.map} +0 -0
  85. /package/dist/{chunk-H7PL2D5A.js.map → chunk-HD3FTCV4.js.map} +0 -0
  86. /package/dist/{chunk-6ZPHMRJQ.js.map → chunk-HPE3UQLT.js.map} +0 -0
  87. /package/dist/{chunk-GPEGBNGB.js.map → chunk-HUCILYVO.js.map} +0 -0
  88. /package/dist/{chunk-RQBI56JN.js.map → chunk-IDASIJE6.js.map} +0 -0
  89. /package/dist/{chunk-3E4BZR3V.js.map → chunk-JWHIFEI3.js.map} +0 -0
  90. /package/dist/{chunk-UR2KFP6P.js.map → chunk-KCWEMSU2.js.map} +0 -0
  91. /package/dist/{chunk-SFHIXQGK.js.map → chunk-NFP7WQ22.js.map} +0 -0
  92. /package/dist/{chunk-K6IVHUEK.js.map → chunk-NMJDOOYZ.js.map} +0 -0
  93. /package/dist/{chunk-YBW45NIZ.js.map → chunk-NMZ5ZKEO.js.map} +0 -0
  94. /package/dist/{chunk-YT7EP2B6.js.map → chunk-O3MSZUQM.js.map} +0 -0
  95. /package/dist/{chunk-5JZ635RM.js.map → chunk-OJM75DDY.js.map} +0 -0
  96. /package/dist/{chunk-GLG667IV.js.map → chunk-QCWY3GTZ.js.map} +0 -0
  97. /package/dist/{chunk-YG3UYPKL.js.map → chunk-RMDG3OFS.js.map} +0 -0
  98. /package/dist/{chunk-F3PIVN3B.js.map → chunk-S6FK47MZ.js.map} +0 -0
  99. /package/dist/{chunk-LBYA22G5.js.map → chunk-SJH5U5XT.js.map} +0 -0
  100. /package/dist/{chunk-2C5ABWLK.js.map → chunk-SMKBETIX.js.map} +0 -0
  101. /package/dist/{chunk-5XCRXV43.js.map → chunk-VI5TF3KF.js.map} +0 -0
  102. /package/dist/{chunk-P5ND7MWI.js.map → chunk-VIDSDHSQ.js.map} +0 -0
  103. /package/dist/{chunk-LVL6WCWK.js.map → chunk-VLBXRQIA.js.map} +0 -0
  104. /package/dist/{chunk-PEN5XFMP.js.map → chunk-WDGEJIWW.js.map} +0 -0
  105. /package/dist/{chunk-R57JPKHJ.js.map → chunk-ZP7LYABJ.js.map} +0 -0
  106. /package/dist/{chunk-TFZDHQ45.js.map → chunk-ZVHJMROO.js.map} +0 -0
  107. /package/dist/{cli-circuit-breaker-IFVKXCHQ.js.map → cli-circuit-breaker-GOH6U32K.js.map} +0 -0
  108. /package/dist/{composite-router-7LFS4CMF.js.map → composite-router-RMEHBA3J.js.map} +0 -0
  109. /package/dist/{consensus-vote-SA2KVDQA.js.map → consensus-vote-BO7S3XSQ.js.map} +0 -0
  110. /package/dist/{context-retriever-V7OWZW7R.js.map → context-retriever-TWAN22PW.js.map} +0 -0
  111. /package/dist/{doctor-deep-GJPTXS2N.js.map → doctor-deep-HRZ77NYS.js.map} +0 -0
  112. /package/dist/{doctor-live-ET5O7O2D.js.map → doctor-live-VGOABDSJ.js.map} +0 -0
  113. /package/dist/{expert-bridge-G656VGZG.js.map → expert-bridge-PFR7ZNWK.js.map} +0 -0
  114. /package/dist/{factory-BQBFECEV.js.map → factory-DJPYG3WR.js.map} +0 -0
  115. /package/dist/{factory-N34PTEMW.js.map → factory-JCVKAI7P.js.map} +0 -0
  116. /package/dist/{improvement-review-YIXDCEX4.js.map → improvement-review-FXXRLLGX.js.map} +0 -0
  117. /package/dist/{init-opencode-33EU3PD6.js.map → init-opencode-KTIHOYIU.js.map} +0 -0
  118. /package/dist/{issue-triage-URFEVDIX.js.map → issue-triage-OCTW33O3.js.map} +0 -0
  119. /package/dist/{pr-reviewer-helpers-ZDAJARQ7.js.map → pr-reviewer-helpers-V67TZHNM.js.map} +0 -0
  120. /package/dist/{registry-command-AB7KP7DK.js.map → registry-command-43IZQOAP.js.map} +0 -0
  121. /package/dist/{repo-security-plan-YV3ZFKGO.js.map → repo-security-plan-OXMSNBOS.js.map} +0 -0
  122. /package/dist/{research-helpers-synthesize-EOHUBGH3.js.map → research-helpers-synthesize-IBBRMZEY.js.map} +0 -0
  123. /package/dist/{routing-memory-34JWGSAI.js.map → routing-memory-S3H3D6Z2.js.map} +0 -0
  124. /package/dist/{session-memory-QGIJCM7P.js.map → session-memory-UO42CU2H.js.map} +0 -0
  125. /package/dist/{setup-config-3KBMBPCN.js.map → setup-config-RGTKEVTD.js.map} +0 -0
  126. /package/dist/{setup-custom-api-652FK232.js.map → setup-custom-api-PQ3PR2RR.js.map} +0 -0
  127. /package/dist/{setup-data-dir-XJMN4ALO.js.map → setup-data-dir-BGG6ETH6.js.map} +0 -0
  128. /package/dist/{tool-memory-SPPCBLKQ.js.map → tool-memory-ZMLCOQH6.js.map} +0 -0
  129. /package/dist/{unified-registry-ZOLSOVYN.js.map → unified-registry-HWBSGSOM.js.map} +0 -0
  130. /package/dist/{weather-report-OHHDUNX3.js.map → weather-report-MZCA7Y6K.js.map} +0 -0
@@ -9,8 +9,8 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-YT7EP2B6.js";
13
- import "./chunk-P2RI4DGX.js";
12
+ } from "./chunk-O3MSZUQM.js";
13
+ import "./chunk-F2H3MCEV.js";
14
14
  import "./chunk-UE7A2XHM.js";
15
15
  import "./chunk-LWOX65CP.js";
16
16
  import "./chunk-PX6F3LHL.js";
@@ -26,4 +26,4 @@ export {
26
26
  loadRules,
27
27
  runAstQaRules
28
28
  };
29
- //# sourceMappingURL=ast-rule-runner-NOWNF5QY.js.map
29
+ //# sourceMappingURL=ast-rule-runner-SD665GB7.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-OITVVSWO.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-P2RI4DGX.js";
6
+ } from "./chunk-F2H3MCEV.js";
7
7
  import "./chunk-UE7A2XHM.js";
8
8
  import "./chunk-LWOX65CP.js";
9
9
  import "./chunk-PX6F3LHL.js";
@@ -56,4 +56,4 @@ async function generateMcpConfig(options) {
56
56
  export {
57
57
  generateMcpConfig
58
58
  };
59
- //# sourceMappingURL=child-mcp-config-UBKF4SOL.js.map
59
+ //# sourceMappingURL=child-mcp-config-BG3QNALD.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  GitHubProvider,
3
3
  ScmError
4
- } from "./chunk-3E4BZR3V.js";
4
+ } from "./chunk-JWHIFEI3.js";
5
5
  import {
6
6
  resolveToken
7
- } from "./chunk-GPEGBNGB.js";
7
+ } from "./chunk-HUCILYVO.js";
8
8
  import {
9
9
  err,
10
10
  ok
11
- } from "./chunk-P2RI4DGX.js";
11
+ } from "./chunk-F2H3MCEV.js";
12
12
 
13
13
  // src/scm/factory.ts
14
14
  async function createScmProvider(config) {
@@ -41,4 +41,4 @@ export {
41
41
  createScmProvider,
42
42
  createGitHubProvider
43
43
  };
44
- //# sourceMappingURL=chunk-SXS2YQUK.js.map
44
+ //# sourceMappingURL=chunk-2N7XWZPW.js.map
@@ -4,12 +4,12 @@ import {
4
4
  planOptionalParams,
5
5
  requireApiKey,
6
6
  validateApiKeyPresence
7
- } from "./chunk-5XCRXV43.js";
7
+ } from "./chunk-VI5TF3KF.js";
8
8
  import {
9
9
  assertCustomApiHostResolvesPublic,
10
10
  hostnameOf,
11
11
  redactApiKey
12
- } from "./chunk-UR2KFP6P.js";
12
+ } from "./chunk-KCWEMSU2.js";
13
13
  import {
14
14
  sanitizeErrorDetails
15
15
  } from "./chunk-2NDA4DHW.js";
@@ -31,7 +31,7 @@ import {
31
31
  isEndpointArmId,
32
32
  ok,
33
33
  recordUsageEvent
34
- } from "./chunk-P2RI4DGX.js";
34
+ } from "./chunk-F2H3MCEV.js";
35
35
 
36
36
  // src/adapters/openai-types.ts
37
37
  var OPENAI_MODELS = {
@@ -886,4 +886,4 @@ export {
886
886
  discoverModels,
887
887
  buildOpenAICompatAdapters
888
888
  };
889
- //# sourceMappingURL=chunk-4W4S6OBP.js.map
889
+ //# sourceMappingURL=chunk-4KMNLWAC.js.map
@@ -6,8 +6,9 @@ import {
6
6
  ApiArmIdSchema,
7
7
  TASK_CATEGORIES,
8
8
  getAdaptiveBonus,
9
- getOutcomeStore
10
- } from "./chunk-P2RI4DGX.js";
9
+ getOutcomeStore,
10
+ hasMeasuredCategory
11
+ } from "./chunk-F2H3MCEV.js";
11
12
 
12
13
  // src/cli/doctor-deep.ts
13
14
  var CLI_NAMES = ["claude", "gemini", "codex", "opencode"];
@@ -45,7 +46,7 @@ function checkDataSufficiency() {
45
46
  const categoriesWithData = /* @__PURE__ */ new Set();
46
47
  const allOutcomes = store.query();
47
48
  for (const o of allOutcomes) {
48
- categoriesWithData.add(o.category);
49
+ if (hasMeasuredCategory(o)) categoriesWithData.add(o.category);
49
50
  }
50
51
  const missing = TASK_CATEGORIES.filter((c) => !categoriesWithData.has(c));
51
52
  return { cliStatus, missingCategories: missing, coldStartThreshold: COLD_START_THRESHOLD };
@@ -145,4 +146,4 @@ export {
145
146
  runDeepDiagnostics,
146
147
  formatDeepDiagnostics
147
148
  };
148
- //# sourceMappingURL=chunk-DGW6C2PT.js.map
149
+ //# sourceMappingURL=chunk-5GI6Z5VE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/doctor-deep.ts"],"sourcesContent":["/**\n * Deep diagnostics for the doctor command.\n *\n * Surfaces learning loop health, data sufficiency, routing convergence,\n * and memory system status. Opt-in via `--deep` flag.\n *\n * @module cli/doctor-deep\n * (Source: Issue #1031 — Enhanced doctor --deep diagnostics)\n */\n\nimport { getOutcomeStore } from '../orchestration/outcomes/outcome-store.js';\nimport { hasMeasuredCategory } from '../orchestration/outcomes/outcome-types.js';\nimport { TASK_CATEGORIES, type TaskCategory } from '../config/task-specialization-types.js';\nimport { getAdaptiveBonus } from '../mcp/tools/weather-report.js';\nimport { ApiArmIdSchema } from '../cli-adapters/types-core.js';\nimport { allOf, verdictOver } from '../utils/verdict-aggregation.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Per-CLI data sufficiency snapshot. */\nexport interface CliDataStatus {\n readonly cli: string;\n readonly taskCount: number;\n readonly aboveThreshold: boolean;\n}\n\n/** Deep diagnostics result. */\nexport interface DeepDiagnostics {\n readonly learningLoop: LearningLoopHealth;\n readonly dataSufficiency: DataSufficiency;\n readonly routingConvergence: RoutingConvergence;\n}\n\nexport interface LearningLoopHealth {\n readonly totalOutcomes: number;\n readonly latestTimestamp: string | null;\n readonly activeBonuses: number;\n readonly totalBonusPairs: number;\n}\n\nexport interface DataSufficiency {\n readonly cliStatus: readonly CliDataStatus[];\n readonly missingCategories: readonly string[];\n readonly coldStartThreshold: number;\n}\n\n/**\n * One arm's success rate. An arm with no outcome rows is `unmeasured` — not a\n * 0% rate, which would claim every attempt failed (#6557).\n */\nexport type ArmSuccessRate =\n | { readonly status: 'measured'; readonly rate: number; readonly sampleCount: number }\n | { readonly status: 'unmeasured' };\n\nexport interface RoutingConvergence {\n /**\n * Mean success rate over MEASURED arms only. `'unmeasured'` when no arm has\n * a row — the empty case, which is neither 0 nor NaN (#6557).\n */\n readonly avgSuccessRate: number | 'unmeasured';\n /** Every routed arm (CLI slots and `api:*` arms), measured or not. */\n readonly armSuccessRates: ReadonlyMap<string, ArmSuccessRate>;\n /** Number of arms with at least one outcome row: the average's divisor. */\n readonly measuredArmCount: number;\n /** Every measured arm has cleared the cold-start threshold; false when none is measured. */\n readonly converged: boolean;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CLI_NAMES = ['claude', 'gemini', 'codex', 'opencode'] as const;\nconst COLD_START_THRESHOLD = 3;\n\n/**\n * CLI slots plus API arms: every `cli` an attributed outcome row can carry.\n * Routed rows record the arm that ran (`api:anthropic`), not its slot, since\n * #6554. `unknown` is deliberately absent: an unattributed row is no arm's\n * measurement.\n */\nconst ROUTED_ARMS: readonly string[] = [...CLI_NAMES, ...ApiArmIdSchema.options];\n\n// ============================================================================\n// Diagnostics\n// ============================================================================\n\n/** Check learning loop health: outcome count, latest timestamp, bonuses. */\nfunction checkLearningLoop(): LearningLoopHealth {\n const store = getOutcomeStore();\n const outcomes = store.query();\n const latestTimestamp =\n outcomes.length > 0 ? (outcomes[outcomes.length - 1]?.timestamp ?? null) : null;\n\n let activeBonuses = 0;\n const totalPairs = CLI_NAMES.length * TASK_CATEGORIES.length;\n for (const cli of CLI_NAMES) {\n for (const cat of TASK_CATEGORIES) {\n if (getAdaptiveBonus(cli, cat) !== 0) activeBonuses++;\n }\n }\n\n return {\n totalOutcomes: outcomes.length,\n latestTimestamp,\n activeBonuses,\n totalBonusPairs: totalPairs,\n };\n}\n\n/** Check per-CLI data sufficiency against cold-start threshold. */\nfunction checkDataSufficiency(): DataSufficiency {\n const store = getOutcomeStore();\n const cliStatus: CliDataStatus[] = [];\n\n for (const cli of CLI_NAMES) {\n const outcomes = store.query({ cli });\n cliStatus.push({\n cli,\n taskCount: outcomes.length,\n aboveThreshold: outcomes.length >= COLD_START_THRESHOLD,\n });\n }\n\n const categoriesWithData = new Set<TaskCategory>();\n const allOutcomes = store.query();\n for (const o of allOutcomes) {\n // A defaulted category is not coverage of that category (#6549).\n if (hasMeasuredCategory(o)) categoriesWithData.add(o.category);\n }\n const missing = TASK_CATEGORIES.filter((c) => !categoriesWithData.has(c));\n\n return { cliStatus, missingCategories: missing, coldStartThreshold: COLD_START_THRESHOLD };\n}\n\n/** Round a rate to three decimals for display-stable output. */\nfunction roundRate(rate: number): number {\n return Math.round(rate * 1000) / 1000;\n}\n\ninterface MeasuredArm {\n readonly rate: number;\n readonly sampleCount: number;\n}\n\n/** Tally rows per routed arm; rows carrying no routed arm (`unknown`) are skipped. */\nfunction tallyRowsByArm(): Map<string, { total: number; successes: number }> {\n const byArm = new Map<string, { total: number; successes: number }>();\n for (const o of getOutcomeStore().query()) {\n if (!ROUTED_ARMS.includes(o.cli)) continue;\n const tally = byArm.get(o.cli) ?? { total: 0, successes: 0 };\n tally.total++;\n if (o.success) tally.successes++;\n byArm.set(o.cli, tally);\n }\n return byArm;\n}\n\n/**\n * Check routing convergence from outcome success rates (#6557).\n *\n * Covers the arms rows actually carry, CLI and `api:*` alike. An arm with no\n * rows is `unmeasured` and stays out of the average, whose divisor is the\n * number of measured arms, never a fixed list.\n */\nfunction checkConvergence(): RoutingConvergence {\n const rowsByArm = tallyRowsByArm();\n const measured: MeasuredArm[] = [];\n const rates = new Map<string, ArmSuccessRate>();\n for (const arm of ROUTED_ARMS) {\n const tally = rowsByArm.get(arm);\n if (tally === undefined) {\n rates.set(arm, { status: 'unmeasured' });\n continue;\n }\n const rate = tally.successes / tally.total;\n measured.push({ rate, sampleCount: tally.total });\n rates.set(arm, { status: 'measured', rate: roundRate(rate), sampleCount: tally.total });\n }\n\n // Empty case named: with no measured arm there is no rate to average.\n const avgSuccessRate = verdictOver<MeasuredArm, number | 'unmeasured'>(\n measured,\n (arms) => roundRate(arms.reduce((sum, a) => sum + a.rate, 0) / arms.length),\n 'unmeasured'\n );\n // Nothing measured has not converged on anything.\n const converged = allOf(measured, (a) => a.sampleCount >= COLD_START_THRESHOLD, false);\n\n return {\n avgSuccessRate,\n armSuccessRates: rates,\n measuredArmCount: measured.length,\n converged,\n };\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/** Run all deep diagnostics. */\nexport function runDeepDiagnostics(): DeepDiagnostics {\n return {\n learningLoop: checkLearningLoop(),\n dataSufficiency: checkDataSufficiency(),\n routingConvergence: checkConvergence(),\n };\n}\n\n/** Render convergence rates, naming unmeasured arms rather than showing them as 0%. */\nfunction formatConvergenceRates(rc: RoutingConvergence): string[] {\n const pct = (rate: number): string => `${(rate * 100).toFixed(1)}%`;\n if (rc.avgSuccessRate === 'unmeasured') {\n return [' Avg success rate: unmeasured (no arm has outcome rows)'];\n }\n const noun = rc.measuredArmCount === 1 ? 'arm' : 'arms';\n const lines = [\n ` Avg success rate: ${pct(rc.avgSuccessRate)} over ${String(rc.measuredArmCount)} measured ${noun}`,\n ];\n const unmeasured: string[] = [];\n for (const [arm, r] of rc.armSuccessRates) {\n if (r.status === 'unmeasured') unmeasured.push(arm);\n else lines.push(` ${arm}: ${pct(r.rate)} (${String(r.sampleCount)} runs)`);\n }\n if (unmeasured.length > 0) lines.push(` Unmeasured (no rows): ${unmeasured.join(', ')}`);\n return lines;\n}\n\n/** Format deep diagnostics for CLI output. */\nexport function formatDeepDiagnostics(diag: DeepDiagnostics): string {\n const lines: string[] = ['\\n=== Deep Diagnostics ===\\n'];\n\n // Learning Loop\n const ll = diag.learningLoop;\n lines.push('Learning Loop:');\n const outcomeIcon = ll.totalOutcomes > 0 ? '+' : '-';\n lines.push(` ${outcomeIcon} OutcomeStore: ${String(ll.totalOutcomes)} entries`);\n const bonusIcon = ll.activeBonuses > 0 ? '+' : '-';\n lines.push(\n ` ${bonusIcon} Adaptive bonuses: ${String(ll.activeBonuses)}/${String(ll.totalBonusPairs)} active`\n );\n\n // Data Sufficiency\n lines.push('\\nData Sufficiency:');\n for (const cs of diag.dataSufficiency.cliStatus) {\n const icon = cs.aboveThreshold ? '+' : '!';\n const label = cs.aboveThreshold ? 'above threshold' : 'below threshold';\n lines.push(` ${icon} ${cs.cli}: ${String(cs.taskCount)} tasks (${label})`);\n }\n if (diag.dataSufficiency.missingCategories.length > 0) {\n lines.push(` Missing categories: ${diag.dataSufficiency.missingCategories.join(', ')}`);\n }\n\n // Routing Convergence\n const rc = diag.routingConvergence;\n lines.push('\\nRouting Convergence:');\n lines.push(...formatConvergenceRates(rc));\n lines.push(` Converged: ${rc.converged ? 'yes' : 'no (still below cold-start threshold)'}`);\n\n return lines.join('\\n');\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  import semver from "semver";
3
- var VERSION = true ? "8.89.4" : "dev";
3
+ var VERSION = true ? "8.91.0" : "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-U2C6V65K.js.map
14
+ //# sourceMappingURL=chunk-C3HMZJ3R.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createAutoAdapter
3
- } from "./chunk-P5ND7MWI.js";
3
+ } from "./chunk-VIDSDHSQ.js";
4
4
  import {
5
5
  getDefaultCliCircuitBreakerRegistry,
6
6
  mapModelErrorToCategory
7
- } from "./chunk-2C5ABWLK.js";
7
+ } from "./chunk-SMKBETIX.js";
8
8
  import {
9
9
  CircularBuffer,
10
10
  ConfigError,
@@ -28,7 +28,7 @@ import {
28
28
  resolveModelIdentitySync,
29
29
  toRateLimitError,
30
30
  warnIfGatewayCostUndeclared
31
- } from "./chunk-P2RI4DGX.js";
31
+ } from "./chunk-F2H3MCEV.js";
32
32
 
33
33
  // src/config/model-equivalence.ts
34
34
  function canonicalModelKey(modelId) {
@@ -975,4 +975,4 @@ export {
975
975
  getGlobalRegistry,
976
976
  resetGlobalRegistry
977
977
  };
978
- //# sourceMappingURL=chunk-YYVBEHM3.js.map
978
+ //# sourceMappingURL=chunk-C6Q2NUIH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isGatewayModelAdapter
3
- } from "./chunk-4W4S6OBP.js";
3
+ } from "./chunk-4KMNLWAC.js";
4
4
  import {
5
5
  allOf
6
6
  } from "./chunk-EZNIYU5T.js";
@@ -25,20 +25,20 @@ import {
25
25
  toolSuccessStructured,
26
26
  withProgressHeartbeat,
27
27
  wrapToolWithTimeout
28
- } from "./chunk-K6IVHUEK.js";
28
+ } from "./chunk-NMJDOOYZ.js";
29
29
  import {
30
30
  VERSION
31
- } from "./chunk-U2C6V65K.js";
31
+ } from "./chunk-C3HMZJ3R.js";
32
32
  import {
33
33
  UNRESOLVED_MODEL_ID,
34
34
  assessPanelIndependence,
35
35
  countDistinctModels,
36
36
  createEvent,
37
37
  getGlobalRegistry
38
- } from "./chunk-YYVBEHM3.js";
38
+ } from "./chunk-C6Q2NUIH.js";
39
39
  import {
40
40
  getToolMemory
41
- } from "./chunk-TFZDHQ45.js";
41
+ } from "./chunk-ZVHJMROO.js";
42
42
  import {
43
43
  authRemediation,
44
44
  classifyExtractedError,
@@ -48,7 +48,7 @@ import {
48
48
  isTimeoutText,
49
49
  sleep,
50
50
  withTimeout
51
- } from "./chunk-P5ND7MWI.js";
51
+ } from "./chunk-VIDSDHSQ.js";
52
52
  import {
53
53
  sanitizeErrorDetails,
54
54
  sanitizeOutput
@@ -88,7 +88,7 @@ import {
88
88
  resolveClassGuardMs,
89
89
  resolveVoteTimeout,
90
90
  stepBus
91
- } from "./chunk-P2RI4DGX.js";
91
+ } from "./chunk-F2H3MCEV.js";
92
92
  import {
93
93
  ensureLearningDir,
94
94
  getOutcomesFile
@@ -2146,6 +2146,11 @@ async function launchVotesWithOverallDeadline(input) {
2146
2146
  return results;
2147
2147
  }
2148
2148
 
2149
+ // src/cli/panel-workspace.ts
2150
+ function resolvePanelWorkspace(workspace) {
2151
+ return workspace ?? process.cwd();
2152
+ }
2153
+
2149
2154
  // src/cli/voter-agents.ts
2150
2155
  function computeOverallConsensusDeadlineMs(timeoutMs, maxRetries, roleCount, interDelayMs) {
2151
2156
  const perVoteBudget = timeoutMs * (maxRetries + 1);
@@ -2353,7 +2358,7 @@ async function collectRealVotes(options) {
2353
2358
  return createSimulatedVotes(roles, proposal, "No adapter available");
2354
2359
  const roleAdapters = await assignPanelSeats(adapterResult.adapter, options, logger11);
2355
2360
  warnIfCodexConcurrencyExceeded(roleAdapters, logger11);
2356
- const workspace = options.workspace ?? process.cwd();
2361
+ const workspace = resolvePanelWorkspace(options.workspace);
2357
2362
  const voteOptions = resolveVoteExecution({ ...options, workspace });
2358
2363
  const interDelay = options.interAgentDelayMs ?? DEFAULT_INTER_AGENT_DELAY_MS;
2359
2364
  const launchInput = {
@@ -6258,6 +6263,9 @@ function disclosedProject(input, result) {
6258
6263
  const { name, source } = result.project ?? resolveVoterProject({ input: input.project, cwd: process.cwd() });
6259
6264
  return { name, source };
6260
6265
  }
6266
+ function disclosedWorkspace(result) {
6267
+ return result.workspace === void 0 ? {} : { workspace: result.workspace };
6268
+ }
6261
6269
  function buildResponse(input, result, costSummary, voteRecord) {
6262
6270
  const proposalTruncated = input.proposal.length > 200 ? input.proposal.slice(0, 200) + "..." : input.proposal;
6263
6271
  const errorCount = result.votes.filter((v) => v.source === "error").length;
@@ -6281,6 +6289,7 @@ function buildResponse(input, result, costSummary, voteRecord) {
6281
6289
  durationMs: result.totalTimeMs,
6282
6290
  simulateVotes: result.simulateVotes,
6283
6291
  project: disclosedProject(input, result),
6292
+ ...disclosedWorkspace(result),
6284
6293
  // #6115: always present — a panel nobody answered is explicit zeros.
6285
6294
  panelDiversity: panelDiversityOf(result.votes),
6286
6295
  // #3991: surface the authentic-vote-record persistence outcome so a skipped
@@ -6435,7 +6444,7 @@ function logPartialProposal(bounded, log) {
6435
6444
  }
6436
6445
  async function runContrarianCheck(proposal, log, opts) {
6437
6446
  try {
6438
- const { executeExpert } = await import("./expert-bridge-G656VGZG.js");
6447
+ const { executeExpert } = await import("./expert-bridge-PFR7ZNWK.js");
6439
6448
  const bounded = boundArtifactForReview(proposal, CONTRARIAN_PROPOSAL_BUDGET, "proposal");
6440
6449
  logPartialProposal(bounded, log);
6441
6450
  const result = await executeExpert("architecture", buildContrarianPrompt(bounded, opts), {
@@ -9076,8 +9085,10 @@ function buildPolicyShortCircuitResult(args) {
9076
9085
  }
9077
9086
  async function executeVoting(input, logger11, opts) {
9078
9087
  const project = opts?.project ?? resolveAndLogVoterProject(input.project, logger11);
9079
- const result = await executeVotingInner(input, logger11, { ...opts, project });
9088
+ const panelWorkspace = resolvePanelWorkspace(opts?.workspace);
9089
+ const result = await executeVotingInner(input, logger11, { ...opts, project, panelWorkspace });
9080
9090
  result.project = project;
9091
+ if (!input.simulateVotes) result.workspace = panelWorkspace;
9081
9092
  const correlationAlreadyRecorded = result.decision !== void 0;
9082
9093
  const errorCount = result.votes.filter((v) => v.source === "error").length;
9083
9094
  applyOptionGate(input, result);
@@ -9124,7 +9135,7 @@ async function executeVotingInner(input, logger11, opts) {
9124
9135
  declaredOptions: input.options,
9125
9136
  // #6110: every seat's system prompt names the caller's project.
9126
9137
  project: opts.project.name,
9127
- workspace: opts.workspace,
9138
+ workspace: opts.panelWorkspace,
9128
9139
  workspaceSha: opts.workspaceSha,
9129
9140
  signal: opts.signal,
9130
9141
  onVoteCollected: opts.onVoteCollected
@@ -9506,6 +9517,9 @@ var CONSENSUS_VOTE_OUTPUT_SCHEMA = {
9506
9517
  name: z16.string().max(200),
9507
9518
  source: z16.enum(["input", "derived", "default"])
9508
9519
  }).optional(),
9520
+ // #6258: the working directory the panel's seats were pointed at. Absent
9521
+ // when no live seat ran (simulated panel) and on the async envelope.
9522
+ workspace: z16.string().max(4096).optional(),
9509
9523
  higherOrderMetadata: z16.object({
9510
9524
  posteriorApproval: z16.number(),
9511
9525
  posteriorRejection: z16.number(),
@@ -9703,4 +9717,4 @@ export {
9703
9717
  CONSENSUS_VOTE_TOOL_SCHEMA,
9704
9718
  registerConsensusVoteTool
9705
9719
  };
9706
- //# sourceMappingURL=chunk-NRSAOTT7.js.map
9720
+ //# sourceMappingURL=chunk-ERTDJU7Y.js.map