nexus-agents 3.7.0 → 3.8.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 (124) hide show
  1. package/dist/{child-mcp-config-RERUXZJS.js → child-mcp-config-R4GQMDAV.js} +2 -2
  2. package/dist/{chunk-KEO6QJE6.js → chunk-2XFBHREJ.js} +2 -2
  3. package/dist/{chunk-J2F5E3DF.js → chunk-5CXAYPSU.js} +2 -2
  4. package/dist/{chunk-WT6JCD3E.js → chunk-5LFB77LA.js} +2 -2
  5. package/dist/{chunk-JFZP7IA4.js → chunk-5WGOPKHZ.js} +2 -2
  6. package/dist/{chunk-5FMDEEV7.js → chunk-6G4FMCXS.js} +8 -8
  7. package/dist/{chunk-PXJDALVM.js → chunk-6Y4QIIQD.js} +2 -2
  8. package/dist/{chunk-NC6CLKIB.js → chunk-7ILVQDUT.js} +2 -2
  9. package/dist/{chunk-7TJVDU2S.js → chunk-A5P7Y4SB.js} +3 -3
  10. package/dist/{chunk-UK2HVVTQ.js → chunk-C5O7Z4P7.js} +2 -2
  11. package/dist/{chunk-TDXJYLRP.js → chunk-C62JS6A7.js} +2 -2
  12. package/dist/{chunk-MBNECNPL.js → chunk-D55LWKBW.js} +15 -10
  13. package/dist/{chunk-MBNECNPL.js.map → chunk-D55LWKBW.js.map} +1 -1
  14. package/dist/{chunk-DOT3TG4T.js → chunk-DHWEXVCJ.js} +3 -3
  15. package/dist/{chunk-4LMP452D.js → chunk-GJDNMK3G.js} +7 -7
  16. package/dist/{chunk-4DXZJJK3.js → chunk-GX3QJX7X.js} +2 -2
  17. package/dist/{chunk-ETEGV2NG.js → chunk-H5G4N5UL.js} +2 -2
  18. package/dist/{chunk-CZC4FIVH.js → chunk-IJXJGQUY.js} +4 -4
  19. package/dist/{chunk-D2SKFK4W.js → chunk-JIZ7B6FX.js} +5 -5
  20. package/dist/{chunk-V7EFU7LB.js → chunk-MB2T54VO.js} +6 -2
  21. package/dist/chunk-MB2T54VO.js.map +1 -0
  22. package/dist/{chunk-TZGM6BXE.js → chunk-NTBGFI5Q.js} +3 -3
  23. package/dist/{chunk-3BKFXSHM.js → chunk-OIBSPO6Q.js} +3 -3
  24. package/dist/{chunk-6YLKVLI4.js → chunk-P3XQMXIW.js} +35 -35
  25. package/dist/{chunk-VYWHIQHX.js → chunk-P4QFJ7OX.js} +2 -2
  26. package/dist/{chunk-TOBIDJ3V.js → chunk-PPZTSOSH.js} +8 -8
  27. package/dist/{chunk-XFQMSO3R.js → chunk-PQCKQKKP.js} +5 -5
  28. package/dist/{chunk-Y3CGQUCQ.js → chunk-Q4L2DXA4.js} +5 -5
  29. package/dist/{chunk-YKEBDGCK.js → chunk-QWI4VF5L.js} +2 -2
  30. package/dist/{chunk-JF7YUXZX.js → chunk-R3ZNOB3V.js} +2 -2
  31. package/dist/{chunk-6QBCTIKD.js → chunk-RYJ2VU7E.js} +2 -2
  32. package/dist/{chunk-V24NAR5C.js → chunk-RYOQ3WJR.js} +2 -2
  33. package/dist/{chunk-ZYL6RNBZ.js → chunk-SJGNFNFT.js} +5 -5
  34. package/dist/{chunk-ZHVVLJFQ.js → chunk-SQ35C5SD.js} +4 -4
  35. package/dist/{chunk-7KHCQPHO.js → chunk-YSE3VQ4A.js} +343 -314
  36. package/dist/chunk-YSE3VQ4A.js.map +1 -0
  37. package/dist/{chunk-ISF7BEHM.js → chunk-YUPUHMWP.js} +4 -4
  38. package/dist/{cli-circuit-breaker-AR6SXY4G.js → cli-circuit-breaker-YKY7NCQ5.js} +3 -3
  39. package/dist/cli.d.ts +1 -1
  40. package/dist/cli.js +41 -41
  41. package/dist/{composite-router-NQ4UCMV6.js → composite-router-63QDM6CQ.js} +2 -2
  42. package/dist/{consensus-vote-ILSS373K.js → consensus-vote-C7QTJJH7.js} +16 -16
  43. package/dist/{consensus-vote-types-BC2vWQKe.d.ts → consensus-vote-types-b-KD-0g_.d.ts} +102 -0
  44. package/dist/{context-retriever-CCGMXTGJ.js → context-retriever-DIKQ7QZA.js} +8 -8
  45. package/dist/{doctor-deep-VMTFQG7N.js → doctor-deep-JVUEAUAG.js} +3 -3
  46. package/dist/{doctor-live-IAQOG6LI.js → doctor-live-CT2SKNLI.js} +9 -9
  47. package/dist/{expert-bridge-JOM5P4I4.js → expert-bridge-G5WXRNUH.js} +4 -4
  48. package/dist/{factory-6A6TGK6D.js → factory-72QUNWLV.js} +5 -5
  49. package/dist/{factory-MYQRDKOJ.js → factory-LYRONJ3P.js} +9 -9
  50. package/dist/{improvement-review-CFBMX6BL.js → improvement-review-CJMYGUDM.js} +5 -5
  51. package/dist/index.d.ts +10 -2
  52. package/dist/index.js +30 -30
  53. package/dist/{init-opencode-J7GUKZF4.js → init-opencode-UATS6Q6W.js} +6 -6
  54. package/dist/{issue-triage-T3L7CAUV.js → issue-triage-CZWWJSOT.js} +6 -6
  55. package/dist/{pr-reviewer-helpers-XMTT5K4E.js → pr-reviewer-helpers-OLEK46AR.js} +4 -4
  56. package/dist/{registry-command-5QPDC5SH.js → registry-command-FKRZFXYQ.js} +2 -2
  57. package/dist/{repo-security-plan-WQG7G4H6.js → repo-security-plan-BULZVX3A.js} +3 -3
  58. package/dist/{research-helpers-synthesize-6FPLB3UK.js → research-helpers-synthesize-LTMSKVUB.js} +4 -4
  59. package/dist/{routing-memory-HNZRMLXC.js → routing-memory-H7DT3HVY.js} +2 -2
  60. package/dist/{session-memory-SXYFTZYM.js → session-memory-UTPN4MCS.js} +3 -3
  61. package/dist/{setup-command-X7EJ7LBU.js → setup-command-TGGSIV6F.js} +14 -14
  62. package/dist/{setup-config-4UPPIMTI.js → setup-config-WIXJT5YV.js} +3 -3
  63. package/dist/{setup-custom-api-U5WEZRQO.js → setup-custom-api-36BFRFWO.js} +4 -4
  64. package/dist/{tool-memory-BT7VS5N5.js → tool-memory-YQTO4WUG.js} +5 -5
  65. package/dist/{unified-registry-L2T5UJHQ.js → unified-registry-N2BQJSLK.js} +10 -10
  66. package/dist/{weather-report-2T3OIAJS.js → weather-report-AOX6RULO.js} +2 -2
  67. package/package.json +1 -1
  68. package/dist/chunk-7KHCQPHO.js.map +0 -1
  69. package/dist/chunk-V7EFU7LB.js.map +0 -1
  70. /package/dist/{child-mcp-config-RERUXZJS.js.map → child-mcp-config-R4GQMDAV.js.map} +0 -0
  71. /package/dist/{chunk-KEO6QJE6.js.map → chunk-2XFBHREJ.js.map} +0 -0
  72. /package/dist/{chunk-J2F5E3DF.js.map → chunk-5CXAYPSU.js.map} +0 -0
  73. /package/dist/{chunk-WT6JCD3E.js.map → chunk-5LFB77LA.js.map} +0 -0
  74. /package/dist/{chunk-JFZP7IA4.js.map → chunk-5WGOPKHZ.js.map} +0 -0
  75. /package/dist/{chunk-5FMDEEV7.js.map → chunk-6G4FMCXS.js.map} +0 -0
  76. /package/dist/{chunk-PXJDALVM.js.map → chunk-6Y4QIIQD.js.map} +0 -0
  77. /package/dist/{chunk-NC6CLKIB.js.map → chunk-7ILVQDUT.js.map} +0 -0
  78. /package/dist/{chunk-7TJVDU2S.js.map → chunk-A5P7Y4SB.js.map} +0 -0
  79. /package/dist/{chunk-UK2HVVTQ.js.map → chunk-C5O7Z4P7.js.map} +0 -0
  80. /package/dist/{chunk-TDXJYLRP.js.map → chunk-C62JS6A7.js.map} +0 -0
  81. /package/dist/{chunk-DOT3TG4T.js.map → chunk-DHWEXVCJ.js.map} +0 -0
  82. /package/dist/{chunk-4LMP452D.js.map → chunk-GJDNMK3G.js.map} +0 -0
  83. /package/dist/{chunk-4DXZJJK3.js.map → chunk-GX3QJX7X.js.map} +0 -0
  84. /package/dist/{chunk-ETEGV2NG.js.map → chunk-H5G4N5UL.js.map} +0 -0
  85. /package/dist/{chunk-CZC4FIVH.js.map → chunk-IJXJGQUY.js.map} +0 -0
  86. /package/dist/{chunk-D2SKFK4W.js.map → chunk-JIZ7B6FX.js.map} +0 -0
  87. /package/dist/{chunk-TZGM6BXE.js.map → chunk-NTBGFI5Q.js.map} +0 -0
  88. /package/dist/{chunk-3BKFXSHM.js.map → chunk-OIBSPO6Q.js.map} +0 -0
  89. /package/dist/{chunk-6YLKVLI4.js.map → chunk-P3XQMXIW.js.map} +0 -0
  90. /package/dist/{chunk-VYWHIQHX.js.map → chunk-P4QFJ7OX.js.map} +0 -0
  91. /package/dist/{chunk-TOBIDJ3V.js.map → chunk-PPZTSOSH.js.map} +0 -0
  92. /package/dist/{chunk-XFQMSO3R.js.map → chunk-PQCKQKKP.js.map} +0 -0
  93. /package/dist/{chunk-Y3CGQUCQ.js.map → chunk-Q4L2DXA4.js.map} +0 -0
  94. /package/dist/{chunk-YKEBDGCK.js.map → chunk-QWI4VF5L.js.map} +0 -0
  95. /package/dist/{chunk-JF7YUXZX.js.map → chunk-R3ZNOB3V.js.map} +0 -0
  96. /package/dist/{chunk-6QBCTIKD.js.map → chunk-RYJ2VU7E.js.map} +0 -0
  97. /package/dist/{chunk-V24NAR5C.js.map → chunk-RYOQ3WJR.js.map} +0 -0
  98. /package/dist/{chunk-ZYL6RNBZ.js.map → chunk-SJGNFNFT.js.map} +0 -0
  99. /package/dist/{chunk-ZHVVLJFQ.js.map → chunk-SQ35C5SD.js.map} +0 -0
  100. /package/dist/{chunk-ISF7BEHM.js.map → chunk-YUPUHMWP.js.map} +0 -0
  101. /package/dist/{cli-circuit-breaker-AR6SXY4G.js.map → cli-circuit-breaker-YKY7NCQ5.js.map} +0 -0
  102. /package/dist/{composite-router-NQ4UCMV6.js.map → composite-router-63QDM6CQ.js.map} +0 -0
  103. /package/dist/{consensus-vote-ILSS373K.js.map → consensus-vote-C7QTJJH7.js.map} +0 -0
  104. /package/dist/{context-retriever-CCGMXTGJ.js.map → context-retriever-DIKQ7QZA.js.map} +0 -0
  105. /package/dist/{doctor-deep-VMTFQG7N.js.map → doctor-deep-JVUEAUAG.js.map} +0 -0
  106. /package/dist/{doctor-live-IAQOG6LI.js.map → doctor-live-CT2SKNLI.js.map} +0 -0
  107. /package/dist/{expert-bridge-JOM5P4I4.js.map → expert-bridge-G5WXRNUH.js.map} +0 -0
  108. /package/dist/{factory-6A6TGK6D.js.map → factory-72QUNWLV.js.map} +0 -0
  109. /package/dist/{factory-MYQRDKOJ.js.map → factory-LYRONJ3P.js.map} +0 -0
  110. /package/dist/{improvement-review-CFBMX6BL.js.map → improvement-review-CJMYGUDM.js.map} +0 -0
  111. /package/dist/{init-opencode-J7GUKZF4.js.map → init-opencode-UATS6Q6W.js.map} +0 -0
  112. /package/dist/{issue-triage-T3L7CAUV.js.map → issue-triage-CZWWJSOT.js.map} +0 -0
  113. /package/dist/{pr-reviewer-helpers-XMTT5K4E.js.map → pr-reviewer-helpers-OLEK46AR.js.map} +0 -0
  114. /package/dist/{registry-command-5QPDC5SH.js.map → registry-command-FKRZFXYQ.js.map} +0 -0
  115. /package/dist/{repo-security-plan-WQG7G4H6.js.map → repo-security-plan-BULZVX3A.js.map} +0 -0
  116. /package/dist/{research-helpers-synthesize-6FPLB3UK.js.map → research-helpers-synthesize-LTMSKVUB.js.map} +0 -0
  117. /package/dist/{routing-memory-HNZRMLXC.js.map → routing-memory-H7DT3HVY.js.map} +0 -0
  118. /package/dist/{session-memory-SXYFTZYM.js.map → session-memory-UTPN4MCS.js.map} +0 -0
  119. /package/dist/{setup-command-X7EJ7LBU.js.map → setup-command-TGGSIV6F.js.map} +0 -0
  120. /package/dist/{setup-config-4UPPIMTI.js.map → setup-config-WIXJT5YV.js.map} +0 -0
  121. /package/dist/{setup-custom-api-U5WEZRQO.js.map → setup-custom-api-36BFRFWO.js.map} +0 -0
  122. /package/dist/{tool-memory-BT7VS5N5.js.map → tool-memory-YQTO4WUG.js.map} +0 -0
  123. /package/dist/{unified-registry-L2T5UJHQ.js.map → unified-registry-N2BQJSLK.js.map} +0 -0
  124. /package/dist/{weather-report-2T3OIAJS.js.map → weather-report-AOX6RULO.js.map} +0 -0
@@ -2623,7 +2623,7 @@ function setDefaultRegistry(registry) {
2623
2623
  }
2624
2624
  async function reloadDefaultRegistry() {
2625
2625
  globalRegistry = buildDefaultRegistry();
2626
- const { resetGlobalRegistry } = await import("./unified-registry-L2T5UJHQ.js");
2626
+ const { resetGlobalRegistry } = await import("./unified-registry-N2BQJSLK.js");
2627
2627
  resetGlobalRegistry();
2628
2628
  return globalRegistry;
2629
2629
  }
@@ -2828,6 +2828,10 @@ function modelSupportsAll(modelId, requirements) {
2828
2828
  return meetsContext && includesAll(model.outputModalities, requirements.outputModalities) && includesAll(model.inputModalities, requirements.inputModalities) && includesAll(model.toolCapabilities, requirements.toolCapabilities) && includesAll(model.specialFeatures, requirements.specialFeatures);
2829
2829
  }
2830
2830
 
2831
+ // src/core/price-basis.ts
2832
+ import { z as z3 } from "zod";
2833
+ var PriceBasisSchema = z3.enum(["list", "unknown"]);
2834
+
2831
2835
  // src/core/trace-pricing.ts
2832
2836
  function toPricing(pricing) {
2833
2837
  if (pricing === void 0) return void 0;
@@ -3328,7 +3332,7 @@ function formatPercentage(value, decimals = 0) {
3328
3332
 
3329
3333
  // src/core/artifact.ts
3330
3334
  import { randomUUID as randomUUID2 } from "crypto";
3331
- import { z as z3 } from "zod";
3335
+ import { z as z4 } from "zod";
3332
3336
  var ArtifactType = {
3333
3337
  /** Planning documents and task breakdowns */
3334
3338
  PLAN: "plan",
@@ -3341,30 +3345,30 @@ var ArtifactType = {
3341
3345
  /** Intent declarations for policy authorization */
3342
3346
  INTENT: "intent"
3343
3347
  };
3344
- var ArtifactTypeSchema = z3.enum([
3348
+ var ArtifactTypeSchema = z4.enum([
3345
3349
  ArtifactType.PLAN,
3346
3350
  ArtifactType.ANALYSIS,
3347
3351
  ArtifactType.DECISION,
3348
3352
  ArtifactType.RESULT,
3349
3353
  ArtifactType.INTENT
3350
3354
  ]);
3351
- var ArtifactMetadataSchema = z3.object({
3352
- createdAt: z3.iso.datetime({ message: "createdAt must be ISO 8601 format" }),
3353
- createdBy: z3.string().min(1, "createdBy is required"),
3354
- parentId: z3.uuid().optional(),
3355
- taskId: z3.string().min(1, "taskId is required"),
3356
- traceId: z3.string().optional()
3355
+ var ArtifactMetadataSchema = z4.object({
3356
+ createdAt: z4.iso.datetime({ message: "createdAt must be ISO 8601 format" }),
3357
+ createdBy: z4.string().min(1, "createdBy is required"),
3358
+ parentId: z4.uuid().optional(),
3359
+ taskId: z4.string().min(1, "taskId is required"),
3360
+ traceId: z4.string().optional()
3357
3361
  });
3358
3362
  function createArtifactSchema(dataSchema) {
3359
- return z3.object({
3360
- id: z3.uuid(),
3363
+ return z4.object({
3364
+ id: z4.uuid(),
3361
3365
  type: ArtifactTypeSchema,
3362
- schemaVersion: z3.string().regex(/^\d+\.\d+\.\d+$/, "schemaVersion must be semver"),
3366
+ schemaVersion: z4.string().regex(/^\d+\.\d+\.\d+$/, "schemaVersion must be semver"),
3363
3367
  data: dataSchema,
3364
3368
  metadata: ArtifactMetadataSchema
3365
3369
  });
3366
3370
  }
3367
- var BaseArtifactSchema = createArtifactSchema(z3.unknown());
3371
+ var BaseArtifactSchema = createArtifactSchema(z4.unknown());
3368
3372
 
3369
3373
  // src/core/metrics.ts
3370
3374
  var MAX_RECENT_ERRORS = 1e3;
@@ -5340,8 +5344,8 @@ function estimateTokens(text) {
5340
5344
  }
5341
5345
 
5342
5346
  // src/cli-adapters/types-core.ts
5343
- import { z as z4 } from "zod";
5344
- var ApiArmIdSchema = z4.enum([
5347
+ import { z as z5 } from "zod";
5348
+ var ApiArmIdSchema = z5.enum([
5345
5349
  "api:anthropic",
5346
5350
  "api:openai",
5347
5351
  "api:google",
@@ -5530,7 +5534,7 @@ function createBudgetExceededError(budget, result, currentBudget) {
5530
5534
  }
5531
5535
 
5532
5536
  // src/config/task-specialization-types.ts
5533
- import { z as z5 } from "zod";
5537
+ import { z as z6 } from "zod";
5534
5538
  var TASK_CATEGORIES = [
5535
5539
  "architecture",
5536
5540
  "code_generation",
@@ -5543,8 +5547,8 @@ var TASK_CATEGORIES = [
5543
5547
  "devops",
5544
5548
  "exploration"
5545
5549
  ];
5546
- var TaskCategorySchema = z5.enum(TASK_CATEGORIES);
5547
- var TaskSpecializationSchema = z5.object({
5550
+ var TaskCategorySchema = z6.enum(TASK_CATEGORIES);
5551
+ var TaskSpecializationSchema = z6.object({
5548
5552
  /** Task category identifier */
5549
5553
  category: TaskCategorySchema,
5550
5554
  /** Primary CLI recommendation */
@@ -5552,11 +5556,11 @@ var TaskSpecializationSchema = z5.object({
5552
5556
  /** Secondary CLI fallback */
5553
5557
  secondaryCli: CliNameSchema,
5554
5558
  /** Why this CLI is preferred for this task type */
5555
- reasoning: z5.string(),
5559
+ reasoning: z6.string(),
5556
5560
  /** Keywords that trigger this category detection */
5557
- keywords: z5.array(z5.string()).min(1),
5561
+ keywords: z6.array(z6.string()).min(1),
5558
5562
  /** Bonus score applied when this category matches (0-20) */
5559
- bonus: z5.number().min(0).max(20)
5563
+ bonus: z6.number().min(0).max(20)
5560
5564
  });
5561
5565
 
5562
5566
  // src/config/task-specialization.ts
@@ -6392,19 +6396,19 @@ var TopsisRouter = class {
6392
6396
  };
6393
6397
 
6394
6398
  // src/cli-adapters/budget-router-types.ts
6395
- import { z as z6 } from "zod";
6396
- var BudgetConstraintSchema = z6.object({
6397
- maxTokens: z6.number().int().positive().optional(),
6398
- maxCostUSD: z6.number().positive().optional(),
6399
- maxLatencyMs: z6.number().positive().optional()
6399
+ import { z as z7 } from "zod";
6400
+ var BudgetConstraintSchema = z7.object({
6401
+ maxTokens: z7.number().int().positive().optional(),
6402
+ maxCostUSD: z7.number().positive().optional(),
6403
+ maxLatencyMs: z7.number().positive().optional()
6400
6404
  });
6401
- var SessionBudgetSchema = z6.object({
6402
- totalTokens: z6.number().int().positive(),
6403
- totalCostUSD: z6.number().positive(),
6404
- usedTokens: z6.number().int().min(0).default(0),
6405
- usedCostUSD: z6.number().min(0).default(0),
6406
- startTime: z6.number().int().positive(),
6407
- sessionId: z6.string().min(1)
6405
+ var SessionBudgetSchema = z7.object({
6406
+ totalTokens: z7.number().int().positive(),
6407
+ totalCostUSD: z7.number().positive(),
6408
+ usedTokens: z7.number().int().min(0).default(0),
6409
+ usedCostUSD: z7.number().min(0).default(0),
6410
+ startTime: z7.number().int().positive(),
6411
+ sessionId: z7.string().min(1)
6408
6412
  });
6409
6413
  var DEFAULT_LINUCB_CONFIG = {
6410
6414
  numArms: 4,
@@ -6412,11 +6416,11 @@ var DEFAULT_LINUCB_CONFIG = {
6412
6416
  alpha: 1,
6413
6417
  lambda: 1
6414
6418
  };
6415
- var LinUCBConfigSchema = z6.object({
6416
- numArms: z6.number().int().positive().default(4),
6417
- featureDim: z6.number().int().positive().default(6),
6418
- alpha: z6.number().positive().default(1),
6419
- lambda: z6.number().positive().default(1)
6419
+ var LinUCBConfigSchema = z7.object({
6420
+ numArms: z7.number().int().positive().default(4),
6421
+ featureDim: z7.number().int().positive().default(6),
6422
+ alpha: z7.number().positive().default(1),
6423
+ lambda: z7.number().positive().default(1)
6420
6424
  });
6421
6425
 
6422
6426
  // src/cli-adapters/linucb-math.ts
@@ -6816,7 +6820,7 @@ var LinUCBBandit = class {
6816
6820
  import { randomUUID as randomUUID4 } from "crypto";
6817
6821
 
6818
6822
  // src/cli-adapters/preference-router-types.ts
6819
- import { z as z7 } from "zod";
6823
+ import { z as z8 } from "zod";
6820
6824
  var DEFAULT_PREFERENCE_ROUTER_CONFIG = {
6821
6825
  strongModel: {
6822
6826
  tier: "strong",
@@ -6837,24 +6841,24 @@ var DEFAULT_PREFERENCE_ROUTER_CONFIG = {
6837
6841
  maxDataPoints: 1e4,
6838
6842
  enableOnlineLearning: true
6839
6843
  };
6840
- var PreferenceRouterConfigSchema = z7.object({
6841
- strongModel: z7.object({
6842
- tier: z7.literal("strong"),
6843
- cli: z7.enum(["claude", "gemini", "codex", "opencode"]),
6844
- costPerMillionTokens: z7.number().positive(),
6845
- qualityBaseline: z7.number().min(0).max(1)
6844
+ var PreferenceRouterConfigSchema = z8.object({
6845
+ strongModel: z8.object({
6846
+ tier: z8.literal("strong"),
6847
+ cli: z8.enum(["claude", "gemini", "codex", "opencode"]),
6848
+ costPerMillionTokens: z8.number().positive(),
6849
+ qualityBaseline: z8.number().min(0).max(1)
6846
6850
  }),
6847
- weakModel: z7.object({
6848
- tier: z7.literal("weak"),
6849
- cli: z7.enum(["claude", "gemini", "codex", "opencode"]),
6850
- costPerMillionTokens: z7.number().positive(),
6851
- qualityBaseline: z7.number().min(0).max(1)
6851
+ weakModel: z8.object({
6852
+ tier: z8.literal("weak"),
6853
+ cli: z8.enum(["claude", "gemini", "codex", "opencode"]),
6854
+ costPerMillionTokens: z8.number().positive(),
6855
+ qualityBaseline: z8.number().min(0).max(1)
6852
6856
  }),
6853
- routingThreshold: z7.number().min(0).max(1).default(0.5),
6854
- minDataPoints: z7.number().int().positive().default(10),
6855
- maxDataPoints: z7.number().int().positive().default(1e4),
6856
- enableOnlineLearning: z7.boolean().default(true),
6857
- domainThresholds: z7.record(z7.string(), z7.number().min(0).max(1)).optional()
6857
+ routingThreshold: z8.number().min(0).max(1).default(0.5),
6858
+ minDataPoints: z8.number().int().positive().default(10),
6859
+ maxDataPoints: z8.number().int().positive().default(1e4),
6860
+ enableOnlineLearning: z8.boolean().default(true),
6861
+ domainThresholds: z8.record(z8.string(), z8.number().min(0).max(1)).optional()
6858
6862
  });
6859
6863
 
6860
6864
  // src/cli-adapters/preference-router-store.ts
@@ -7196,7 +7200,7 @@ function createPreferenceRouter(config, dataStore) {
7196
7200
  }
7197
7201
 
7198
7202
  // src/cli-adapters/zero-router-types.ts
7199
- import { z as z8 } from "zod";
7203
+ import { z as z9 } from "zod";
7200
7204
 
7201
7205
  // src/cli-adapters/derive-tier-tables.ts
7202
7206
  var CLI_ORDER = CLI_NAMES;
@@ -7324,7 +7328,7 @@ function deriveWeakClis() {
7324
7328
  }
7325
7329
 
7326
7330
  // src/cli-adapters/zero-router-types.ts
7327
- var DifficultyDimensionSchema = z8.enum([
7331
+ var DifficultyDimensionSchema = z9.enum([
7328
7332
  "reasoning",
7329
7333
  "knowledge",
7330
7334
  "creativity",
@@ -7338,17 +7342,17 @@ var DIFFICULTY_DIMENSIONS = [
7338
7342
  "precision",
7339
7343
  "context_length"
7340
7344
  ];
7341
- var DifficultySpaceSchema = z8.object({
7345
+ var DifficultySpaceSchema = z9.object({
7342
7346
  /** Reasoning difficulty: logical complexity, multi-step inference (0-1) */
7343
- reasoning: z8.number().min(0).max(1),
7347
+ reasoning: z9.number().min(0).max(1),
7344
7348
  /** Knowledge difficulty: domain expertise required (0-1) */
7345
- knowledge: z8.number().min(0).max(1),
7349
+ knowledge: z9.number().min(0).max(1),
7346
7350
  /** Creativity difficulty: novel generation, open-endedness (0-1) */
7347
- creativity: z8.number().min(0).max(1),
7351
+ creativity: z9.number().min(0).max(1),
7348
7352
  /** Precision difficulty: accuracy requirements, error tolerance (0-1) */
7349
- precision: z8.number().min(0).max(1),
7353
+ precision: z9.number().min(0).max(1),
7350
7354
  /** Context length difficulty: amount of context to process (0-1) */
7351
- context_length: z8.number().min(0).max(1)
7355
+ context_length: z9.number().min(0).max(1)
7352
7356
  });
7353
7357
  var DEFAULT_DIFFICULTY_THRESHOLDS = {
7354
7358
  easyUpperBound: 0.3,
@@ -7360,12 +7364,12 @@ var DEFAULT_DIFFICULTY_TO_TIER = {
7360
7364
  hard: "powerful"
7361
7365
  };
7362
7366
  var DEFAULT_TIER_TO_CLIS = deriveTierToClis();
7363
- var DifficultyWeightsSchema = z8.object({
7364
- reasoning: z8.number().min(0).max(1),
7365
- knowledge: z8.number().min(0).max(1),
7366
- creativity: z8.number().min(0).max(1),
7367
- precision: z8.number().min(0).max(1),
7368
- context_length: z8.number().min(0).max(1)
7367
+ var DifficultyWeightsSchema = z9.object({
7368
+ reasoning: z9.number().min(0).max(1),
7369
+ knowledge: z9.number().min(0).max(1),
7370
+ creativity: z9.number().min(0).max(1),
7371
+ precision: z9.number().min(0).max(1),
7372
+ context_length: z9.number().min(0).max(1)
7369
7373
  });
7370
7374
  var DEFAULT_DIFFICULTY_WEIGHTS = {
7371
7375
  reasoning: 0.3,
@@ -7374,29 +7378,29 @@ var DEFAULT_DIFFICULTY_WEIGHTS = {
7374
7378
  precision: 0.25,
7375
7379
  context_length: 0.15
7376
7380
  };
7377
- var ZeroRouterConfigSchema = z8.object({
7381
+ var ZeroRouterConfigSchema = z9.object({
7378
7382
  /** Difficulty thresholds for level classification */
7379
- thresholds: z8.object({
7380
- easyUpperBound: z8.number().min(0).max(1),
7381
- hardLowerBound: z8.number().min(0).max(1)
7383
+ thresholds: z9.object({
7384
+ easyUpperBound: z9.number().min(0).max(1),
7385
+ hardLowerBound: z9.number().min(0).max(1)
7382
7386
  }).default(DEFAULT_DIFFICULTY_THRESHOLDS),
7383
7387
  /** Weights for difficulty aggregation */
7384
7388
  weights: DifficultyWeightsSchema.default(DEFAULT_DIFFICULTY_WEIGHTS),
7385
7389
  /** Mapping from difficulty level to model tier */
7386
- difficultyToTier: z8.record(z8.enum(["easy", "medium", "hard"]), z8.enum(["fast", "balanced", "powerful"])).default(DEFAULT_DIFFICULTY_TO_TIER),
7390
+ difficultyToTier: z9.record(z9.enum(["easy", "medium", "hard"]), z9.enum(["fast", "balanced", "powerful"])).default(DEFAULT_DIFFICULTY_TO_TIER),
7387
7391
  /** Mapping from model tier to CLI preference order */
7388
- tierToClis: z8.record(
7389
- z8.enum(["fast", "balanced", "powerful"]),
7390
- z8.array(z8.enum(["claude", "gemini", "codex", "opencode"]))
7392
+ tierToClis: z9.record(
7393
+ z9.enum(["fast", "balanced", "powerful"]),
7394
+ z9.array(z9.enum(["claude", "gemini", "codex", "opencode"]))
7391
7395
  ).default(DEFAULT_TIER_TO_CLIS),
7392
7396
  /** Enable adaptive calibration from outcomes */
7393
- enableCalibration: z8.boolean().default(true),
7397
+ enableCalibration: z9.boolean().default(true),
7394
7398
  /** Maximum outcomes to store for calibration */
7395
- maxCalibrationOutcomes: z8.number().int().positive().default(1e3),
7399
+ maxCalibrationOutcomes: z9.number().int().positive().default(1e3),
7396
7400
  /** Minimum outcomes before applying calibration adjustments */
7397
- minCalibrationOutcomes: z8.number().int().positive().default(50),
7401
+ minCalibrationOutcomes: z9.number().int().positive().default(50),
7398
7402
  /** Verbose logging */
7399
- verbose: z8.boolean().default(false)
7403
+ verbose: z9.boolean().default(false)
7400
7404
  });
7401
7405
  var DEFAULT_ZERO_ROUTER_CONFIG = {
7402
7406
  thresholds: DEFAULT_DIFFICULTY_THRESHOLDS,
@@ -7920,16 +7924,16 @@ var ZeroRouter = class {
7920
7924
  };
7921
7925
 
7922
7926
  // src/cli-adapters/latency-tracker-types.ts
7923
- import { z as z9 } from "zod";
7924
- var LatencyTrackerConfigSchema = z9.object({
7927
+ import { z as z10 } from "zod";
7928
+ var LatencyTrackerConfigSchema = z10.object({
7925
7929
  /** Maximum number of samples to keep per CLI (default: 100) */
7926
- windowSize: z9.number().int().positive().default(100),
7930
+ windowSize: z10.number().int().positive().default(100),
7927
7931
  /** Time-weighted decay factor (0-1, higher = more weight to recent) (default: 0.95) */
7928
- decayFactor: z9.number().min(0).max(1).default(0.95),
7932
+ decayFactor: z10.number().min(0).max(1).default(0.95),
7929
7933
  /** Maximum age of samples in milliseconds before forced eviction (default: 3600000 = 1 hour) */
7930
- maxSampleAgeMs: z9.number().int().positive().default(36e5),
7934
+ maxSampleAgeMs: z10.number().int().positive().default(36e5),
7931
7935
  /** Percentiles to calculate (default: [50, 95, 99]) */
7932
- percentiles: z9.array(z9.number().min(0).max(100)).default([50, 95, 99])
7936
+ percentiles: z10.array(z10.number().min(0).max(100)).default([50, 95, 99])
7933
7937
  });
7934
7938
  var EMPTY_LATENCY_STATS = {
7935
7939
  count: 0,
@@ -8164,19 +8168,19 @@ var LatencyTracker = class {
8164
8168
  };
8165
8169
 
8166
8170
  // src/cli-adapters/routing/router-stage.ts
8167
- import { z as z10 } from "zod";
8168
- var StageConfigSchema = z10.object({
8169
- enabled: z10.boolean().default(true),
8170
- priority: z10.number().int().min(0).max(100).default(50),
8171
- options: z10.record(z10.string(), z10.unknown()).optional()
8171
+ import { z as z11 } from "zod";
8172
+ var StageConfigSchema = z11.object({
8173
+ enabled: z11.boolean().default(true),
8174
+ priority: z11.number().int().min(0).max(100).default(50),
8175
+ options: z11.record(z11.string(), z11.unknown()).optional()
8172
8176
  });
8173
- var RoutingOutcomeSchema = z10.object({
8177
+ var RoutingOutcomeSchema = z11.object({
8174
8178
  selectedCli: CliNameSchema,
8175
- task: z10.string(),
8176
- success: z10.boolean(),
8177
- qualityScore: z10.number().min(0).max(1).optional(),
8178
- latencyMs: z10.number().int().positive().optional(),
8179
- tokensUsed: z10.number().int().positive().optional()
8179
+ task: z11.string(),
8180
+ success: z11.boolean(),
8181
+ qualityScore: z11.number().min(0).max(1).optional(),
8182
+ latencyMs: z11.number().int().positive().optional(),
8183
+ tokensUsed: z11.number().int().positive().optional()
8180
8184
  });
8181
8185
  function createRoutingContext(task, availableClis = ["claude", "gemini", "codex", "opencode"], metadata) {
8182
8186
  return {
@@ -9675,10 +9679,10 @@ function createPersistentDistillerOrFallback(outcomeStore, logger15) {
9675
9679
  }
9676
9680
 
9677
9681
  // src/orchestration/outcomes/outcome-types.ts
9678
- import { z as z11 } from "zod";
9682
+ import { z as z12 } from "zod";
9679
9683
  var logger7 = createLogger({ component: "outcome-error-taxonomy" });
9680
- var OutcomeSourceSchema = z11.enum(["delegate", "consensus", "manual"]);
9681
- var OutcomeFailureCategorySchema = z11.enum([
9684
+ var OutcomeSourceSchema = z12.enum(["delegate", "consensus", "manual"]);
9685
+ var OutcomeFailureCategorySchema = z12.enum([
9682
9686
  "timeout",
9683
9687
  "authentication",
9684
9688
  "rate_limit",
@@ -9691,37 +9695,37 @@ var OutcomeFailureCategorySchema = z11.enum([
9691
9695
  "generic",
9692
9696
  "unknown"
9693
9697
  ]);
9694
- var OutcomeCliSchema = z11.union([CliNameSchema, ApiArmIdSchema, z11.literal("unknown")]);
9695
- var TaskOutcomeSchema = z11.object({
9696
- id: z11.string().min(1),
9698
+ var OutcomeCliSchema = z12.union([CliNameSchema, ApiArmIdSchema, z12.literal("unknown")]);
9699
+ var TaskOutcomeSchema = z12.object({
9700
+ id: z12.string().min(1),
9697
9701
  cli: OutcomeCliSchema,
9698
9702
  category: TaskCategorySchema,
9699
- model: z11.string().min(1),
9700
- success: z11.boolean(),
9701
- durationMs: z11.number().nonnegative(),
9702
- timestamp: z11.string().min(1),
9703
- qualitySignals: z11.array(z11.string()).optional(),
9703
+ model: z12.string().min(1),
9704
+ success: z12.boolean(),
9705
+ durationMs: z12.number().nonnegative(),
9706
+ timestamp: z12.string().min(1),
9707
+ qualitySignals: z12.array(z12.string()).optional(),
9704
9708
  failureCategory: OutcomeFailureCategorySchema.optional(),
9705
- errorMessage: z11.string().max(500).optional(),
9709
+ errorMessage: z12.string().max(500).optional(),
9706
9710
  source: OutcomeSourceSchema,
9707
9711
  /** Whether this outcome came from a triage-initiated retry (#1506). */
9708
- wasRetried: z11.boolean().optional(),
9712
+ wasRetried: z12.boolean().optional(),
9709
9713
  /** Triage action taken on the failure (#1506). */
9710
- triageAction: z11.string().max(30).optional(),
9714
+ triageAction: z12.string().max(30).optional(),
9711
9715
  /** Routing stage that selected this CLI (#1785). */
9712
- routingStage: z11.string().max(50).optional(),
9716
+ routingStage: z12.string().max(50).optional(),
9713
9717
  /** Number of retry attempts before this outcome (#1785). */
9714
- retryCount: z11.number().int().nonnegative().optional(),
9718
+ retryCount: z12.number().int().nonnegative().optional(),
9715
9719
  /** Vendor resolved from `model` via ModelRegistry at write time (#2548). */
9716
- vendor: z11.string().min(1).max(40).optional(),
9720
+ vendor: z12.string().min(1).max(40).optional(),
9717
9721
  /** Family resolved from `model` via ModelRegistry at write time (#2548). */
9718
- family: z11.string().min(1).max(80).optional(),
9722
+ family: z12.string().min(1).max(80).optional(),
9719
9723
  /**
9720
9724
  * Voter role for `source: 'consensus'` outcomes (#2662) — `architect`,
9721
9725
  * `security`, etc. Absent on non-consensus outcomes. Lets the
9722
9726
  * stratified outcome report break results down by voter role.
9723
9727
  */
9724
- voterRole: z11.string().min(1).max(40).optional(),
9728
+ voterRole: z12.string().min(1).max(40).optional(),
9725
9729
  /**
9726
9730
  * Baseline this outcome forked from (#2697 / Epic F follow-up to #2665).
9727
9731
  * Set on outcomes recorded inside a fork-then-merge graph branch so
@@ -9730,27 +9734,27 @@ var TaskOutcomeSchema = z11.object({
9730
9734
  * cohort. Free-form string (caller-assigned); typically the parent
9731
9735
  * node's `executionId` or `taskId`.
9732
9736
  */
9733
- baselineId: z11.string().min(1).max(64).optional(),
9737
+ baselineId: z12.string().min(1).max(64).optional(),
9734
9738
  /**
9735
9739
  * Distributed trace id correlating this outcome across the pipeline (#3146).
9736
9740
  * Optional + backward-compatible: older JSONL records without it hydrate fine.
9737
9741
  */
9738
- traceId: z11.string().min(1).max(128).optional(),
9742
+ traceId: z12.string().min(1).max(128).optional(),
9739
9743
  /** Request id correlating this outcome to its originating invocation (#3146). */
9740
- requestId: z11.string().min(1).max(128).optional()
9744
+ requestId: z12.string().min(1).max(128).optional()
9741
9745
  });
9742
- var OutcomeQuerySchema = z11.object({
9746
+ var OutcomeQuerySchema = z12.object({
9743
9747
  cli: OutcomeCliSchema.optional(),
9744
9748
  category: TaskCategorySchema.optional(),
9745
9749
  source: OutcomeSourceSchema.optional(),
9746
- success: z11.boolean().optional(),
9750
+ success: z12.boolean().optional(),
9747
9751
  failureCategory: OutcomeFailureCategorySchema.optional(),
9748
- since: z11.string().optional(),
9749
- limit: z11.number().int().positive().optional(),
9752
+ since: z12.string().optional(),
9753
+ limit: z12.number().int().positive().optional(),
9750
9754
  /** Exclude outcomes with any of these quality signals (#1680). */
9751
- excludeQualitySignals: z11.array(z11.string()).optional(),
9755
+ excludeQualitySignals: z12.array(z12.string()).optional(),
9752
9756
  /** Restrict to outcomes recorded against a specific baseline (#2697). */
9753
- baselineId: z11.string().min(1).max(64).optional()
9757
+ baselineId: z12.string().min(1).max(64).optional()
9754
9758
  });
9755
9759
  var TIMEOUT_PATTERNS = ["timeout", "timed out", "deadline exceeded", "socket hang up", "aborted"];
9756
9760
  var AUTH_PATTERNS = [
@@ -10400,52 +10404,52 @@ function runWarmUp(logger15) {
10400
10404
  }
10401
10405
 
10402
10406
  // src/cli-adapters/composite-router-types.ts
10403
- import { z as z12 } from "zod";
10404
- var CompositeRouterConfigSchema = z12.object({
10407
+ import { z as z13 } from "zod";
10408
+ var CompositeRouterConfigSchema = z13.object({
10405
10409
  /** Enable confidence cascade stage (default: false) (Issue #755, ADR-0005) */
10406
- enableConfidenceCascade: z12.boolean().default(false),
10410
+ enableConfidenceCascade: z13.boolean().default(false),
10407
10411
  /** Enable budget filtering stage (default: true) */
10408
- enableBudgetFilter: z12.boolean().default(true),
10412
+ enableBudgetFilter: z13.boolean().default(true),
10409
10413
  /** Enable capability match stage (default: false) (Issue #755, ADR-0005) */
10410
- enableCapabilityMatch: z12.boolean().default(false),
10414
+ enableCapabilityMatch: z13.boolean().default(false),
10411
10415
  /** Enable ZeroRouter difficulty-based routing stage (default: true) (Issue #473) */
10412
- enableZeroRouter: z12.boolean().default(true),
10416
+ enableZeroRouter: z13.boolean().default(true),
10413
10417
  /** Enable preference-trained routing stage (default: false) */
10414
- enablePreferenceRouting: z12.boolean().default(false),
10418
+ enablePreferenceRouting: z13.boolean().default(false),
10415
10419
  /** Enable TOPSIS ranking stage (default: true) */
10416
- enableTopsisRanking: z12.boolean().default(true),
10420
+ enableTopsisRanking: z13.boolean().default(true),
10417
10421
  /** Enable LinUCB selection stage (default: true) */
10418
- enableLinUCBSelection: z12.boolean().default(true),
10422
+ enableLinUCBSelection: z13.boolean().default(true),
10419
10423
  /** Enable quality constraint stage (default: false) (Issue #755, ADR-0005) */
10420
- enableQualityConstraint: z12.boolean().default(false),
10424
+ enableQualityConstraint: z13.boolean().default(false),
10421
10425
  /** Enable resource strategy stage for budget-aware oscillation (default: true) (Issue #998) */
10422
- enableResourceStrategy: z12.boolean().default(true),
10426
+ enableResourceStrategy: z13.boolean().default(true),
10423
10427
  /** Enable strategy distillation for learned routing rules (default: false) (Issue #999) */
10424
- enableStrategyDistillation: z12.boolean().default(false),
10428
+ enableStrategyDistillation: z13.boolean().default(false),
10425
10429
  /** Enable latency tracking for routing decisions (default: true) (Issue #361) */
10426
- enableLatencyTracking: z12.boolean().default(true),
10430
+ enableLatencyTracking: z13.boolean().default(true),
10427
10431
  /** Enable routing memory for learned routing (default: false) (Issue #463, #461) */
10428
- enableRoutingMemory: z12.boolean().default(false),
10432
+ enableRoutingMemory: z13.boolean().default(false),
10429
10433
  /** Enable KNN experience-based routing (default: false) (arXiv:2505.12601) */
10430
- enableKnnRouting: z12.boolean().default(false),
10434
+ enableKnnRouting: z13.boolean().default(false),
10431
10435
  /** Weight for latency score in final routing (0-1, default: 0.2) */
10432
- latencyScoreWeight: z12.number().min(0).max(1).default(0.2),
10436
+ latencyScoreWeight: z13.number().min(0).max(1).default(0.2),
10433
10437
  /** Budget constraints (optional) */
10434
- budgetConstraints: z12.object({
10435
- maxTokens: z12.number().positive(),
10436
- maxCostUsd: z12.number().positive(),
10437
- maxLatencyMs: z12.number().positive(),
10438
+ budgetConstraints: z13.object({
10439
+ maxTokens: z13.number().positive(),
10440
+ maxCostUsd: z13.number().positive(),
10441
+ maxLatencyMs: z13.number().positive(),
10438
10442
  /** Per-task-class cost ceilings in USD, keyed by TaskCategory (#4196).
10439
10443
  * Keys are validated against the TaskCategory enum (#4214) so a typo'd
10440
10444
  * class fails config parsing instead of silently configuring nothing.
10441
10445
  * Default: absent → no ceiling (OFF/unlimited). Enforced only under
10442
10446
  * billingMode 'api'; missing candidate pricing fails CLOSED. */
10443
- taskClassMaxCostUsd: z12.partialRecord(TaskCategorySchema, z12.number().positive())
10447
+ taskClassMaxCostUsd: z13.partialRecord(TaskCategorySchema, z13.number().positive())
10444
10448
  }).partial().optional(),
10445
10449
  /** LinUCB exploration parameter (default: 1.0) */
10446
- linucbAlpha: z12.number().positive().default(1),
10450
+ linucbAlpha: z13.number().positive().default(1),
10447
10451
  /** Billing mode: 'plan' zeroes cost weight, 'api' preserves current behavior (default: 'plan') */
10448
- billingMode: z12.enum(["plan", "api"]).default("plan"),
10452
+ billingMode: z13.enum(["plan", "api"]).default("plan"),
10449
10453
  /**
10450
10454
  * Enable capacity-aware routing exclusion — remove a candidate whose adapter
10451
10455
  * reports *measurably* exhausted capacity (default: true) (#807, #4373).
@@ -10457,11 +10461,11 @@ var CompositeRouterConfigSchema = z12.object({
10457
10461
  * to "exclude" to match #4351 criterion 3; nothing can depend on the former,
10458
10462
  * since no deprioritization was ever implemented.
10459
10463
  */
10460
- enableCapacityBalancing: z12.boolean().default(true),
10464
+ enableCapacityBalancing: z13.boolean().default(true),
10461
10465
  /** Maximum routing decision time in ms (default: 50) */
10462
- maxDecisionTimeMs: z12.number().positive().default(50),
10466
+ maxDecisionTimeMs: z13.number().positive().default(50),
10463
10467
  /** Minimum preference data points before using learned routing (default: 10) */
10464
- preferenceMinDataPoints: z12.number().int().positive().default(10)
10468
+ preferenceMinDataPoints: z13.number().int().positive().default(10)
10465
10469
  });
10466
10470
  var DEFAULT_COMPOSITE_CONFIG = {
10467
10471
  enableConfidenceCascade: false,
@@ -10858,12 +10862,12 @@ All defaults can be overridden via environment variables using the NEXUS_ prefix
10858
10862
  }
10859
10863
 
10860
10864
  // src/mcp/tools/weather-report-types.ts
10861
- import { z as z13 } from "zod";
10862
- var WeatherReportInputSchema = z13.object({
10865
+ import { z as z14 } from "zod";
10866
+ var WeatherReportInputSchema = z14.object({
10863
10867
  /** Filter by CLI name. */
10864
- cli: z13.enum(CLI_NAMES).optional().describe("Filter by CLI"),
10868
+ cli: z14.enum(CLI_NAMES).optional().describe("Filter by CLI"),
10865
10869
  /** Filter by task category. */
10866
- category: z13.enum([
10870
+ category: z14.enum([
10867
10871
  "architecture",
10868
10872
  "code_generation",
10869
10873
  "code_review",
@@ -10876,22 +10880,22 @@ var WeatherReportInputSchema = z13.object({
10876
10880
  "exploration"
10877
10881
  ]).optional().describe("Filter by task category"),
10878
10882
  /** Include adaptive routing bonus data. */
10879
- includeAdaptive: z13.boolean().optional().default(true).describe("Include adaptive routing bonuses (default: true)")
10883
+ includeAdaptive: z14.boolean().optional().default(true).describe("Include adaptive routing bonuses (default: true)")
10880
10884
  });
10881
10885
  var DEFAULT_OUTCOME_LOOKBACK_MS = 7 * 24 * 60 * 60 * 1e3;
10882
- var WeatherReportConfigSchema = z13.object({
10886
+ var WeatherReportConfigSchema = z14.object({
10883
10887
  /** Minimum observations before adjusting bonuses (lowered for faster activation). */
10884
- coldStartThreshold: z13.number().int().min(1).max(1e3).default(3),
10888
+ coldStartThreshold: z14.number().int().min(1).max(1e3).default(3),
10885
10889
  /** Exploration rate: fraction of random routing (0.0-1.0). */
10886
- explorationRate: z13.number().min(0).max(1).default(0.1),
10890
+ explorationRate: z14.number().min(0).max(1).default(0.1),
10887
10891
  /** Max adaptive bonus adjustment (+/-). */
10888
- maxBonusAdjustment: z13.number().min(0).max(20).default(10),
10892
+ maxBonusAdjustment: z14.number().min(0).max(20).default(10),
10889
10893
  /**
10890
10894
  * Lookback window for outcome queries (ms). Only outcomes within this
10891
10895
  * window are used for adaptive bonuses. Falls back to all history if
10892
10896
  * the window has fewer samples than coldStartThreshold. Default: 7 days.
10893
10897
  */
10894
- outcomeLookbackMs: z13.number().int().min(0).default(DEFAULT_OUTCOME_LOOKBACK_MS)
10898
+ outcomeLookbackMs: z14.number().int().min(0).default(DEFAULT_OUTCOME_LOOKBACK_MS)
10895
10899
  });
10896
10900
  function createDefaultWeatherConfig() {
10897
10901
  return WeatherReportConfigSchema.parse({});
@@ -11307,47 +11311,47 @@ function createMetricsMiddleware() {
11307
11311
  import { randomBytes as randomBytes3 } from "crypto";
11308
11312
 
11309
11313
  // src/config/defaults-types.ts
11310
- import { z as z14 } from "zod";
11314
+ import { z as z15 } from "zod";
11311
11315
  function isKnownCliName(cli) {
11312
11316
  return cli === "claude" || cli === "gemini" || cli === "codex" || cli === "opencode" || cli === "default";
11313
11317
  }
11314
- var positiveInt = z14.number().int().positive();
11315
- var nonNegativeInt = z14.number().int().nonnegative();
11316
- var durationMs = z14.number().int().positive().describe("Duration in milliseconds");
11317
- var TimeoutProfileSchema = z14.object({
11318
+ var positiveInt = z15.number().int().positive();
11319
+ var nonNegativeInt = z15.number().int().nonnegative();
11320
+ var durationMs = z15.number().int().positive().describe("Duration in milliseconds");
11321
+ var TimeoutProfileSchema = z15.object({
11318
11322
  simple: durationMs.describe("Timeout for simple tasks"),
11319
11323
  standard: durationMs.describe("Timeout for standard tasks"),
11320
11324
  complex: durationMs.describe("Timeout for complex tasks")
11321
11325
  });
11322
- var RetryDefaultsSchema = z14.object({
11326
+ var RetryDefaultsSchema = z15.object({
11323
11327
  maxRetries: nonNegativeInt.max(10).describe("Maximum retry attempts"),
11324
11328
  baseDelayMs: durationMs.describe("Base delay between retries"),
11325
11329
  maxDelayMs: durationMs.describe("Maximum delay between retries"),
11326
- jitterFactor: z14.number().min(0).max(1).describe("Jitter factor (0-1)")
11330
+ jitterFactor: z15.number().min(0).max(1).describe("Jitter factor (0-1)")
11327
11331
  });
11328
- var RateLimitDefaultsSchema = z14.object({
11332
+ var RateLimitDefaultsSchema = z15.object({
11329
11333
  requestsPerMinute: positiveInt.max(1e3).describe("Max requests per minute"),
11330
- enabled: z14.boolean().describe("Whether rate limiting is enabled"),
11334
+ enabled: z15.boolean().describe("Whether rate limiting is enabled"),
11331
11335
  maxConcurrent: positiveInt.max(100).describe("Max concurrent requests"),
11332
11336
  capacity: positiveInt.describe("Token bucket capacity"),
11333
11337
  refillRate: positiveInt.describe("Token refill rate"),
11334
11338
  refillIntervalMs: durationMs.describe("Token refill interval")
11335
11339
  });
11336
- var CircuitBreakerDefaultsSchema = z14.object({
11337
- failureThreshold: z14.number().int().min(1).max(100).describe("Failures before opening"),
11340
+ var CircuitBreakerDefaultsSchema = z15.object({
11341
+ failureThreshold: z15.number().int().min(1).max(100).describe("Failures before opening"),
11338
11342
  resetTimeoutMs: durationMs.describe("Time before attempting reset"),
11339
- halfOpenSuccessThreshold: z14.number().int().min(1).max(10).describe("Successes to close"),
11340
- countTimeoutsAsFailures: z14.boolean().describe("Count timeouts as failures"),
11341
- countAuthFailuresAsFailures: z14.boolean().describe("Count auth failures as failures"),
11342
- countRateLimitsAsFailures: z14.boolean().describe("Count rate limit errors as failures"),
11343
+ halfOpenSuccessThreshold: z15.number().int().min(1).max(10).describe("Successes to close"),
11344
+ countTimeoutsAsFailures: z15.boolean().describe("Count timeouts as failures"),
11345
+ countAuthFailuresAsFailures: z15.boolean().describe("Count auth failures as failures"),
11346
+ countRateLimitsAsFailures: z15.boolean().describe("Count rate limit errors as failures"),
11343
11347
  halfOpenMaxRequests: positiveInt.describe("Max requests in half-open state")
11344
11348
  });
11345
- var ToolRateLimitConfigSchema = z14.object({
11349
+ var ToolRateLimitConfigSchema = z15.object({
11346
11350
  capacity: positiveInt.describe("Token bucket capacity"),
11347
11351
  refillRate: positiveInt.describe("Token refill rate"),
11348
11352
  refillIntervalMs: durationMs.describe("Token refill interval")
11349
11353
  });
11350
- var TimeoutDefaultsSchema = z14.object({
11354
+ var TimeoutDefaultsSchema = z15.object({
11351
11355
  cliMs: durationMs.describe("Default CLI timeout"),
11352
11356
  // cliSimpleMs / cliComplexMs removed in #4180 — see config/defaults.ts.
11353
11357
  apiMs: durationMs.describe("Default API timeout"),
@@ -11960,7 +11964,7 @@ function aggregateDecisionCosts(records, windowMs) {
11960
11964
  }
11961
11965
 
11962
11966
  // src/observability/decision-cost-store.ts
11963
- import { z as z16 } from "zod";
11967
+ import { z as z17 } from "zod";
11964
11968
 
11965
11969
  // src/config/jsonl-store.ts
11966
11970
  import { appendFileSync, existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2 } from "fs";
@@ -12095,38 +12099,40 @@ var JsonlStore = class {
12095
12099
  };
12096
12100
 
12097
12101
  // src/observability/decision-cost.ts
12098
- import { z as z15 } from "zod";
12102
+ import { z as z16 } from "zod";
12099
12103
  var UNKNOWN_MODEL = "unknown";
12100
- var DecisionCostSummarySchema = z15.object({
12101
- billingMode: z15.enum(["plan", "api"]),
12102
- voterCount: z15.number(),
12103
- measuredVoters: z15.number(),
12104
- unmeasuredVoters: z15.number(),
12105
- totalInputTokens: z15.number(),
12106
- totalOutputTokens: z15.number(),
12107
- totalTokens: z15.number(),
12108
- totalCostUsd: z15.number(),
12109
- perVoter: z15.array(
12110
- z15.object({
12111
- role: z15.string(),
12112
- model: z15.string(),
12113
- inputTokens: z15.number(),
12114
- outputTokens: z15.number(),
12115
- totalTokens: z15.number(),
12116
- cachedInputTokens: z15.number().optional(),
12117
- cacheCreationInputTokens: z15.number().optional(),
12118
- costUsd: z15.number(),
12119
- unmeasured: z15.boolean()
12104
+ var DecisionCostSummarySchema = z16.object({
12105
+ billingMode: z16.enum(["plan", "api"]),
12106
+ voterCount: z16.number(),
12107
+ measuredVoters: z16.number(),
12108
+ unmeasuredVoters: z16.number(),
12109
+ totalInputTokens: z16.number(),
12110
+ totalOutputTokens: z16.number(),
12111
+ totalTokens: z16.number(),
12112
+ totalCostUsd: z16.number(),
12113
+ priceBasis: PriceBasisSchema.optional(),
12114
+ perVoter: z16.array(
12115
+ z16.object({
12116
+ role: z16.string(),
12117
+ model: z16.string(),
12118
+ inputTokens: z16.number(),
12119
+ outputTokens: z16.number(),
12120
+ totalTokens: z16.number(),
12121
+ cachedInputTokens: z16.number().optional(),
12122
+ cacheCreationInputTokens: z16.number().optional(),
12123
+ costUsd: z16.number(),
12124
+ unmeasured: z16.boolean(),
12125
+ priceBasis: PriceBasisSchema.optional()
12120
12126
  })
12121
12127
  ),
12122
- perModel: z15.array(
12123
- z15.object({
12124
- model: z15.string(),
12125
- voterCount: z15.number(),
12126
- inputTokens: z15.number(),
12127
- outputTokens: z15.number(),
12128
- totalTokens: z15.number(),
12129
- costUsd: z15.number()
12128
+ perModel: z16.array(
12129
+ z16.object({
12130
+ model: z16.string(),
12131
+ voterCount: z16.number(),
12132
+ inputTokens: z16.number(),
12133
+ outputTokens: z16.number(),
12134
+ totalTokens: z16.number(),
12135
+ costUsd: z16.number()
12130
12136
  })
12131
12137
  )
12132
12138
  });
@@ -12151,9 +12157,20 @@ function toVoterBreakdown(v, isPlan) {
12151
12157
  ...v.cachedInputTokens !== void 0 ? { cachedInputTokens: v.cachedInputTokens } : {},
12152
12158
  ...v.cacheCreationInputTokens !== void 0 ? { cacheCreationInputTokens: v.cacheCreationInputTokens } : {},
12153
12159
  costUsd,
12154
- unmeasured: !measured
12160
+ unmeasured: !measured,
12161
+ // Plan mode forced `costUsd` to 0, so this row's money figure rests on no
12162
+ // price — the same reasoning the decision total applies (#4406 review).
12163
+ // Echoing 'list' here would attribute a $0 to a rate that produced nothing,
12164
+ // and since `plan` is the DEFAULT billing mode that fiction would be on
12165
+ // most persisted rows. `billingMode` already explains the zero.
12166
+ ...isPlan ? {} : basisField(v.priceBasis)
12155
12167
  };
12156
12168
  }
12169
+ function decisionPriceBasis(voters) {
12170
+ const stated = voters.filter((v) => v.priceBasis !== void 0);
12171
+ if (stated.length === 0) return void 0;
12172
+ return stated.some((v) => v.priceBasis === "list") ? "list" : "unknown";
12173
+ }
12157
12174
  function rollupDecisionCost(voters, billingMode) {
12158
12175
  const isPlan = billingMode === "plan";
12159
12176
  const perVoter = [];
@@ -12186,10 +12203,16 @@ function rollupDecisionCost(voters, billingMode) {
12186
12203
  totalOutputTokens,
12187
12204
  totalTokens: totalInputTokens + totalOutputTokens,
12188
12205
  totalCostUsd: roundUsd2(totalCostUsd),
12206
+ // Plan mode's $0 is pre-covered spend, not a priced figure — no basis to
12207
+ // report, so the field stays off rather than crediting a rate.
12208
+ ...isPlan ? {} : basisField(decisionPriceBasis(voters)),
12189
12209
  perVoter,
12190
12210
  perModel
12191
12211
  };
12192
12212
  }
12213
+ function basisField(basis) {
12214
+ return basis === void 0 ? {} : { priceBasis: basis };
12215
+ }
12193
12216
  function buildPerModelBreakdowns(modelAcc) {
12194
12217
  return [...modelAcc.entries()].map(([model, a]) => ({
12195
12218
  model,
@@ -12204,47 +12227,53 @@ function buildPerModelBreakdowns(modelAcc) {
12204
12227
  }
12205
12228
 
12206
12229
  // src/observability/decision-cost-store.ts
12207
- var DecisionGateSchema = z16.enum(["consensus_vote", "pr_review"]);
12208
- var VoterCostBreakdownSchema = z16.object({
12209
- role: z16.string().min(1).max(64),
12210
- model: z16.string().min(1).max(120),
12211
- inputTokens: z16.number().int().nonnegative(),
12212
- outputTokens: z16.number().int().nonnegative(),
12213
- totalTokens: z16.number().int().nonnegative(),
12230
+ var DecisionGateSchema = z17.enum(["consensus_vote", "pr_review"]);
12231
+ var VoterCostBreakdownSchema = z17.object({
12232
+ role: z17.string().min(1).max(64),
12233
+ model: z17.string().min(1).max(120),
12234
+ inputTokens: z17.number().int().nonnegative(),
12235
+ outputTokens: z17.number().int().nonnegative(),
12236
+ totalTokens: z17.number().int().nonnegative(),
12214
12237
  // #4435 — optional: absent means the adapter reported no cache activity,
12215
12238
  // which is a different claim from "zero cache tokens were used".
12216
- cachedInputTokens: z16.number().int().nonnegative().optional(),
12217
- cacheCreationInputTokens: z16.number().int().nonnegative().optional(),
12218
- costUsd: z16.number().nonnegative(),
12219
- unmeasured: z16.boolean()
12239
+ cachedInputTokens: z17.number().int().nonnegative().optional(),
12240
+ cacheCreationInputTokens: z17.number().int().nonnegative().optional(),
12241
+ costUsd: z17.number().nonnegative(),
12242
+ unmeasured: z17.boolean(),
12243
+ // #4406 — optional: records written before the basis existed carry no
12244
+ // provenance at all, and absent must stay absent rather than becoming the
12245
+ // positive claim 'unknown'.
12246
+ priceBasis: PriceBasisSchema.optional()
12220
12247
  });
12221
- var ModelCostBreakdownSchema = z16.object({
12222
- model: z16.string().min(1).max(120),
12223
- voterCount: z16.number().int().nonnegative(),
12224
- inputTokens: z16.number().int().nonnegative(),
12225
- outputTokens: z16.number().int().nonnegative(),
12226
- totalTokens: z16.number().int().nonnegative(),
12227
- costUsd: z16.number().nonnegative()
12248
+ var ModelCostBreakdownSchema = z17.object({
12249
+ model: z17.string().min(1).max(120),
12250
+ voterCount: z17.number().int().nonnegative(),
12251
+ inputTokens: z17.number().int().nonnegative(),
12252
+ outputTokens: z17.number().int().nonnegative(),
12253
+ totalTokens: z17.number().int().nonnegative(),
12254
+ costUsd: z17.number().nonnegative()
12228
12255
  });
12229
- var DecisionCostSummarySchema2 = z16.object({
12230
- billingMode: z16.enum(["plan", "api"]),
12231
- voterCount: z16.number().int().nonnegative(),
12232
- measuredVoters: z16.number().int().nonnegative(),
12233
- unmeasuredVoters: z16.number().int().nonnegative(),
12234
- totalInputTokens: z16.number().int().nonnegative(),
12235
- totalOutputTokens: z16.number().int().nonnegative(),
12236
- totalTokens: z16.number().int().nonnegative(),
12237
- totalCostUsd: z16.number().nonnegative(),
12238
- perVoter: z16.array(VoterCostBreakdownSchema).readonly(),
12239
- perModel: z16.array(ModelCostBreakdownSchema).readonly()
12256
+ var DecisionCostSummarySchema2 = z17.object({
12257
+ billingMode: z17.enum(["plan", "api"]),
12258
+ voterCount: z17.number().int().nonnegative(),
12259
+ measuredVoters: z17.number().int().nonnegative(),
12260
+ unmeasuredVoters: z17.number().int().nonnegative(),
12261
+ totalInputTokens: z17.number().int().nonnegative(),
12262
+ totalOutputTokens: z17.number().int().nonnegative(),
12263
+ totalTokens: z17.number().int().nonnegative(),
12264
+ totalCostUsd: z17.number().nonnegative(),
12265
+ // #4406 — optional for the same reason as the per-voter field above.
12266
+ priceBasis: PriceBasisSchema.optional(),
12267
+ perVoter: z17.array(VoterCostBreakdownSchema).readonly(),
12268
+ perModel: z17.array(ModelCostBreakdownSchema).readonly()
12240
12269
  });
12241
- var DecisionCostRecordSchema = z16.object({
12270
+ var DecisionCostRecordSchema = z17.object({
12242
12271
  /** Stable id for the decision (correlation id / jobId / minted decision id). */
12243
- decisionId: z16.string().min(1).max(160),
12272
+ decisionId: z17.string().min(1).max(160),
12244
12273
  /** Which gate type incurred the cost. */
12245
12274
  gate: DecisionGateSchema,
12246
12275
  /** ISO 8601 timestamp the rollup was recorded. */
12247
- timestamp: z16.string().min(1).max(40),
12276
+ timestamp: z17.string().min(1).max(40),
12248
12277
  /** The rolled-up cost summary. */
12249
12278
  summary: DecisionCostSummarySchema2
12250
12279
  });
@@ -12304,7 +12333,7 @@ var DecisionCostStore = class {
12304
12333
  // src/orchestration/strategy-manifest.ts
12305
12334
  import { existsSync as existsSync6, readFileSync as readFileSync5 } from "fs";
12306
12335
  import { parse as parseYaml2 } from "yaml";
12307
- import { z as z17 } from "zod";
12336
+ import { z as z18 } from "zod";
12308
12337
  var STRATEGY_MANIFEST_SCHEMA_VERSION = 1;
12309
12338
  var EXECUTION_STRATEGY_NAMES = [
12310
12339
  "single-shot",
@@ -12316,41 +12345,41 @@ var EXECUTION_STRATEGY_NAMES = [
12316
12345
  "spec",
12317
12346
  "research"
12318
12347
  ];
12319
- var StrategyNameSchema = z17.enum(EXECUTION_STRATEGY_NAMES);
12320
- var AuthorityTierSchema = z17.enum(["observe", "suggest", "advisory", "enforce"]);
12321
- var PromotionEvidenceSchema = z17.object({
12348
+ var StrategyNameSchema = z18.enum(EXECUTION_STRATEGY_NAMES);
12349
+ var AuthorityTierSchema = z18.enum(["observe", "suggest", "advisory", "enforce"]);
12350
+ var PromotionEvidenceSchema = z18.object({
12322
12351
  /** The loop/strategy being promoted (manifest `id`). */
12323
- loopId: z17.string().min(1),
12352
+ loopId: z18.string().min(1),
12324
12353
  /** Current tier before promotion. */
12325
12354
  fromTier: AuthorityTierSchema,
12326
12355
  /** Target tier; must be exactly one step up (checked by the gate). */
12327
12356
  toTier: AuthorityTierSchema,
12328
12357
  /** Number of independent, judged evaluations behind the metric. */
12329
- evalN: z17.number().int().nonnegative(),
12358
+ evalN: z18.number().int().nonnegative(),
12330
12359
  /** Precision on judged output (0–1); required for advisory+ promotions. */
12331
- precision: z17.number().min(0).max(1).optional(),
12360
+ precision: z18.number().min(0).max(1).optional(),
12332
12361
  /** Recall (0–1); required for enforce promotions (missed-action cost). */
12333
- recall: z17.number().min(0).max(1).optional(),
12362
+ recall: z18.number().min(0).max(1).optional(),
12334
12363
  /** The loop-specific promotion metric: name, value, and CI bounds. */
12335
- primaryMetric: z17.object({
12336
- name: z17.string().min(1),
12337
- value: z17.number(),
12338
- ci: z17.tuple([z17.number(), z17.number()])
12364
+ primaryMetric: z18.object({
12365
+ name: z18.string().min(1),
12366
+ value: z18.number(),
12367
+ ci: z18.tuple([z18.number(), z18.number()])
12339
12368
  }).strict(),
12340
12369
  /** ISO-8601 duration of soak at the lower tier with no intervention. */
12341
- soakDuration: z17.string().regex(/^P/, "soakDuration must be an ISO-8601 duration (e.g. P30D)"),
12370
+ soakDuration: z18.string().regex(/^P/, "soakDuration must be an ISO-8601 duration (e.g. P30D)"),
12342
12371
  /** Confounders the primaryMetric controls for. */
12343
- controlledFor: z17.array(z17.string()).optional(),
12372
+ controlledFor: z18.array(z18.string()).optional(),
12344
12373
  /** The recorded consensus_vote ref that ratifies the promotion. */
12345
- ratificationVote: z17.string().min(1),
12374
+ ratificationVote: z18.string().min(1),
12346
12375
  /** Link to the measurement surface / report that produced the numbers. */
12347
- evidenceUri: z17.string().min(1)
12376
+ evidenceUri: z18.string().min(1)
12348
12377
  }).strict();
12349
- var PromotionEvidenceLedgerSchema = z17.object({
12350
- version: z17.number().int().positive(),
12351
- evidence: z17.array(PromotionEvidenceSchema)
12378
+ var PromotionEvidenceLedgerSchema = z18.object({
12379
+ version: z18.number().int().positive(),
12380
+ evidence: z18.array(PromotionEvidenceSchema)
12352
12381
  }).strict();
12353
- var LatencyClassSchema = z17.enum([
12382
+ var LatencyClassSchema = z18.enum([
12354
12383
  "interactive",
12355
12384
  "single-llm",
12356
12385
  "multi-llm-panel",
@@ -12358,9 +12387,9 @@ var LatencyClassSchema = z17.enum([
12358
12387
  "network-fetch",
12359
12388
  "async-job-body"
12360
12389
  ]);
12361
- var MaturityTierSchema = z17.enum(["experimental", "beta", "stable"]);
12362
- var CostProfileSchema = z17.enum(["low", "medium", "high", "variable"]);
12363
- var WorkflowPatternSchema = z17.enum([
12390
+ var MaturityTierSchema = z18.enum(["experimental", "beta", "stable"]);
12391
+ var CostProfileSchema = z18.enum(["low", "medium", "high", "variable"]);
12392
+ var WorkflowPatternSchema = z18.enum([
12364
12393
  "sequential",
12365
12394
  "wave",
12366
12395
  "graph",
@@ -12368,34 +12397,34 @@ var WorkflowPatternSchema = z17.enum([
12368
12397
  "aflow",
12369
12398
  "puppeteer"
12370
12399
  ]);
12371
- var PipelineTypeSchema = z17.enum(["dev", "research", "audit", "greenfield", "general"]);
12372
- var ComplexityTierSchema = z17.enum(["simple", "moderate", "complex", "expert"]);
12373
- var SelectionRuleSchema = z17.object({
12400
+ var PipelineTypeSchema = z18.enum(["dev", "research", "audit", "greenfield", "general"]);
12401
+ var ComplexityTierSchema = z18.enum(["simple", "moderate", "complex", "expert"]);
12402
+ var SelectionRuleSchema = z18.object({
12374
12403
  /** Higher wins. Distinctive templates outrank the structural-pattern fallback. */
12375
- priority: z17.number().int(),
12404
+ priority: z18.number().int(),
12376
12405
  /** Matches only when the routed workflow pattern is one of these. */
12377
- patterns: z17.array(WorkflowPatternSchema).min(1).optional(),
12406
+ patterns: z18.array(WorkflowPatternSchema).min(1).optional(),
12378
12407
  /** Matches only when the classified pipeline template is one of these. */
12379
- pipelineTypes: z17.array(PipelineTypeSchema).min(1).optional(),
12408
+ pipelineTypes: z18.array(PipelineTypeSchema).min(1).optional(),
12380
12409
  /** Matches only when the analyzed complexity is one of these. */
12381
- complexities: z17.array(ComplexityTierSchema).min(1).optional()
12410
+ complexities: z18.array(ComplexityTierSchema).min(1).optional()
12382
12411
  }).strict().refine((r) => r.patterns !== void 0 || r.pipelineTypes !== void 0, {
12383
12412
  message: "a selection rule must constrain at least patterns or pipelineTypes"
12384
12413
  });
12385
- var StrategyManifestSchema = z17.object({
12414
+ var StrategyManifestSchema = z18.object({
12386
12415
  /**
12387
12416
  * Stable kebab-case identifier; never reused. For the initial 8 this equals
12388
12417
  * the strategy name, but `id` is a distinct field so future strategies can
12389
12418
  * carry a more specific id without colliding with the {@link StrategyName}
12390
12419
  * enum.
12391
12420
  */
12392
- id: z17.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, "id must be kebab-case"),
12421
+ id: z18.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, "id must be kebab-case"),
12393
12422
  /**
12394
12423
  * The manifest-shape version this entry was authored against. Must equal
12395
12424
  * {@link STRATEGY_MANIFEST_SCHEMA_VERSION}; a mismatch fails closed so a
12396
12425
  * manifest written for a future shape is never misread.
12397
12426
  */
12398
- schemaVersion: z17.literal(STRATEGY_MANIFEST_SCHEMA_VERSION),
12427
+ schemaVersion: z18.literal(STRATEGY_MANIFEST_SCHEMA_VERSION),
12399
12428
  /** The execution strategy this manifest describes (router enum). */
12400
12429
  strategy: StrategyNameSchema,
12401
12430
  /**
@@ -12403,7 +12432,7 @@ var StrategyManifestSchema = z17.object({
12403
12432
  * force-strategy entry point (generalizes `STRATEGY_ENTRYPOINT_TOOL`,
12404
12433
  * run-tool.ts). Non-empty.
12405
12434
  */
12406
- entrypointTool: z17.string().min(1),
12435
+ entrypointTool: z18.string().min(1),
12407
12436
  /**
12408
12437
  * Whether a wired executor exists for this strategy (run-tool.ts
12409
12438
  * `buildDefaultExecutors`). FAIL-CLOSED routing key: only 4/8 are `true`
@@ -12417,15 +12446,15 @@ var StrategyManifestSchema = z17.object({
12417
12446
  * (#3881), so declaring `true` for a strategy with no wired executor (silent
12418
12447
  * fail-OPEN) fails the build rather than mis-advertising routability.
12419
12448
  */
12420
- executorAvailable: z17.boolean(),
12449
+ executorAvailable: z18.boolean(),
12421
12450
  /** One-line human description of what this strategy is for (#3838 docs). */
12422
- description: z17.string().min(1),
12451
+ description: z18.string().min(1),
12423
12452
  /**
12424
12453
  * Guidance on when to FORCE this strategy via `run({ forceStrategy })` —
12425
12454
  * the escape-hatch docs surfaced in #3838. Optional: the router selects by
12426
12455
  * capability; this is operator guidance, not a routing input.
12427
12456
  */
12428
- whenToForce: z17.string().min(1).optional(),
12457
+ whenToForce: z18.string().min(1).optional(),
12429
12458
  /** Maturity tier; defaults are not assumed — author states it explicitly. */
12430
12459
  maturityTier: MaturityTierSchema,
12431
12460
  /** Expected latency class (#3734 taxonomy). */
@@ -12449,11 +12478,11 @@ var StrategyManifestSchema = z17.object({
12449
12478
  * no claim on any signal). Each rule is a {@link SelectionRule}; the router
12450
12479
  * applies the highest-priority matching rule across the whole registry.
12451
12480
  */
12452
- selectionRules: z17.array(SelectionRuleSchema).min(1).optional()
12481
+ selectionRules: z18.array(SelectionRuleSchema).min(1).optional()
12453
12482
  }).strict();
12454
- var StrategyManifestRegistrySchema = z17.object({
12455
- version: z17.number().int().positive(),
12456
- manifests: z17.array(StrategyManifestSchema).min(1).superRefine((manifests, ctx) => {
12483
+ var StrategyManifestRegistrySchema = z18.object({
12484
+ version: z18.number().int().positive(),
12485
+ manifests: z18.array(StrategyManifestSchema).min(1).superRefine((manifests, ctx) => {
12457
12486
  const seenIds = /* @__PURE__ */ new Set();
12458
12487
  const seenStrategies = /* @__PURE__ */ new Set();
12459
12488
  for (const [i, m] of manifests.entries()) {
@@ -13271,9 +13300,9 @@ function convertBonusesToScoreMap(bonuses, taskCategory) {
13271
13300
  }
13272
13301
 
13273
13302
  // src/cli-adapters/fallback-chains.ts
13274
- import { z as z18 } from "zod";
13275
- var FallbackChainSchema = z18.array(z18.enum(["claude", "gemini", "codex", "opencode"])).min(1).readonly();
13276
- var FallbackChainRegistrySchema = z18.object({
13303
+ import { z as z19 } from "zod";
13304
+ var FallbackChainSchema = z19.array(z19.enum(["claude", "gemini", "codex", "opencode"])).min(1).readonly();
13305
+ var FallbackChainRegistrySchema = z19.object({
13277
13306
  code: FallbackChainSchema,
13278
13307
  research: FallbackChainSchema,
13279
13308
  documentation: FallbackChainSchema,
@@ -14030,20 +14059,20 @@ function setDefaultAvailableModelsCache(cache) {
14030
14059
  }
14031
14060
 
14032
14061
  // src/config/openrouter-models-source.ts
14033
- import { z as z19 } from "zod";
14062
+ import { z as z20 } from "zod";
14034
14063
  var OPENROUTER_MODELS_URL = "https://openrouter.ai/api/v1/models";
14035
14064
  var DEFAULT_TIMEOUT_MS = 8e3;
14036
14065
  var MAX_MODELS = 5e3;
14037
14066
  var MAX_BYTES = 8e6;
14038
14067
  var MAX_SUPPORTED_PARAMETERS = 256;
14039
- var OpenRouterModelSchema = z19.object({
14040
- id: z19.string().min(1).max(256),
14068
+ var OpenRouterModelSchema = z20.object({
14069
+ id: z20.string().min(1).max(256),
14041
14070
  // #4121: the provider's machine-readable capability list. Optional & additive —
14042
14071
  // older catalogs (and our older fixtures) omit it; consumers reading only `.id`
14043
14072
  // are unaffected. Bounded so a hostile payload can't blow memory.
14044
- supported_parameters: z19.array(z19.string().max(256)).max(MAX_SUPPORTED_PARAMETERS).optional()
14073
+ supported_parameters: z20.array(z20.string().max(256)).max(MAX_SUPPORTED_PARAMETERS).optional()
14045
14074
  });
14046
- var OpenRouterModelsResponseSchema = z19.object({ data: z19.array(OpenRouterModelSchema) });
14075
+ var OpenRouterModelsResponseSchema = z20.object({ data: z20.array(OpenRouterModelSchema) });
14047
14076
  var logger12 = createLogger({ component: "openrouter-models-source" });
14048
14077
  function parseCatalog(text) {
14049
14078
  if (text.length > MAX_BYTES) {
@@ -14182,32 +14211,32 @@ function resolveModelForTier(cliName, tier, opts = {}) {
14182
14211
 
14183
14212
  // src/cli-adapters/model-selection-shadow.ts
14184
14213
  import { appendFileSync as appendFileSync2, existsSync as existsSync7, readFileSync as readFileSync6 } from "fs";
14185
- import { z as z20 } from "zod";
14214
+ import { z as z21 } from "zod";
14186
14215
  function isRouteModelShadowEnabled() {
14187
14216
  return process.env["NEXUS_ROUTE_MODEL_SHADOW"] === "1" && isPersistenceEnabled();
14188
14217
  }
14189
14218
  var MODEL_SELECTION_SHADOW_SCHEMA_VERSION = 1;
14190
14219
  var READ_LOOKBACK_DAYS = 30;
14191
14220
  var READ_LOOKBACK_MS = READ_LOOKBACK_DAYS * 24 * 60 * 60 * 1e3;
14192
- var ModelTierSchema = z20.enum(["fast", "balanced", "powerful"]);
14193
- var ModelSelectionShadowRecordSchema = z20.object({
14194
- schema: z20.literal(MODEL_SELECTION_SHADOW_SCHEMA_VERSION),
14221
+ var ModelTierSchema = z21.enum(["fast", "balanced", "powerful"]);
14222
+ var ModelSelectionShadowRecordSchema = z21.object({
14223
+ schema: z21.literal(MODEL_SELECTION_SHADOW_SCHEMA_VERSION),
14195
14224
  /** ISO timestamp of the outcome join. */
14196
- timestamp: z20.string().min(1),
14225
+ timestamp: z21.string().min(1),
14197
14226
  /** Display slot of the routed CLI (api:* arms collapse to their slot). */
14198
- cli: z20.string().min(1).max(40),
14227
+ cli: z21.string().min(1).max(40),
14199
14228
  /** Difficulty tier the ZeroRouter computed for the task. */
14200
14229
  tier: ModelTierSchema,
14201
14230
  /** Model the live decision actually used (or the CLI default when route-time selection is off). */
14202
- actualModel: z20.string().min(1).max(120),
14231
+ actualModel: z21.string().min(1).max(120),
14203
14232
  /** Model `resolveModelForTier` WOULD have picked (never executed). */
14204
- shadowModel: z20.string().min(1).max(120),
14233
+ shadowModel: z21.string().min(1).max(120),
14205
14234
  /** Whether shadow and actual agree. */
14206
- agree: z20.boolean(),
14235
+ agree: z21.boolean(),
14207
14236
  /** Whether the actually-executed decision succeeded. */
14208
- success: z20.boolean(),
14237
+ success: z21.boolean(),
14209
14238
  /** Measured cost of the actual execution, when available (unmeasured today on the routing path). */
14210
- costUsd: z20.number().nonnegative().optional()
14239
+ costUsd: z21.number().nonnegative().optional()
14211
14240
  });
14212
14241
  function computeModelSelectionShadow(cli, tier, actualModel) {
14213
14242
  const shadowModel = resolveModelForTier(cli, tier);
@@ -14747,7 +14776,7 @@ var CompositeRouter = class _CompositeRouter {
14747
14776
  */
14748
14777
  async consultUnifiedContext(task) {
14749
14778
  try {
14750
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-CCGMXTGJ.js");
14779
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-DIKQ7QZA.js");
14751
14780
  const ctx = await getContextForTask({
14752
14781
  task: task.content,
14753
14782
  category: inferTaskCategory(task.content),
@@ -15245,7 +15274,7 @@ import { dirname as dirname5 } from "path";
15245
15274
  import { mkdirSync as mkdirSync3 } from "fs";
15246
15275
 
15247
15276
  // src/context/mobimem-types.ts
15248
- import { z as z21 } from "zod";
15277
+ import { z as z22 } from "zod";
15249
15278
  var DEFAULT_MOBIMEM_CONFIG = {
15250
15279
  dbPath: ":memory:",
15251
15280
  maxProfileEntries: 100,
@@ -15257,15 +15286,15 @@ var DEFAULT_MOBIMEM_CONFIG = {
15257
15286
  minExperienceSuccessRate: 0.7,
15258
15287
  autoEviction: true
15259
15288
  };
15260
- var MobiMemConfigSchema = z21.object({
15261
- dbPath: z21.string(),
15262
- maxProfileEntries: z21.number().int().positive().default(100),
15263
- maxExperiencePatterns: z21.number().int().positive().default(500),
15264
- maxActionCacheEntries: z21.number().int().positive().default(1e3),
15265
- actionCacheTtlMs: z21.number().int().positive().default(36e5),
15266
- minProfileConfidence: z21.number().min(0).max(1).default(0.6),
15267
- minExperienceSuccessRate: z21.number().min(0).max(1).default(0.7),
15268
- autoEviction: z21.boolean().default(true)
15289
+ var MobiMemConfigSchema = z22.object({
15290
+ dbPath: z22.string(),
15291
+ maxProfileEntries: z22.number().int().positive().default(100),
15292
+ maxExperiencePatterns: z22.number().int().positive().default(500),
15293
+ maxActionCacheEntries: z22.number().int().positive().default(1e3),
15294
+ actionCacheTtlMs: z22.number().int().positive().default(36e5),
15295
+ minProfileConfidence: z22.number().min(0).max(1).default(0.6),
15296
+ minExperienceSuccessRate: z22.number().min(0).max(1).default(0.7),
15297
+ autoEviction: z22.boolean().default(true)
15269
15298
  });
15270
15299
 
15271
15300
  // src/context/mobimem-impl.ts
@@ -16333,4 +16362,4 @@ export {
16333
16362
  AgentCapability,
16334
16363
  OrchestratorError
16335
16364
  };
16336
- //# sourceMappingURL=chunk-7KHCQPHO.js.map
16365
+ //# sourceMappingURL=chunk-YSE3VQ4A.js.map