agent-nuvira 3.3.11 → 3.3.13

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 (220) hide show
  1. package/README.md +32 -1
  2. package/dist/agents/agents/reasoner.d.ts.map +1 -1
  3. package/dist/agents/agents/reasoner.js +13 -0
  4. package/dist/agents/agents/reasoner.js.map +1 -1
  5. package/dist/agents/orchestrator.d.ts.map +1 -1
  6. package/dist/agents/orchestrator.js +56 -20
  7. package/dist/agents/orchestrator.js.map +1 -1
  8. package/dist/cli/chat.d.ts +36 -0
  9. package/dist/cli/chat.d.ts.map +1 -1
  10. package/dist/cli/chat.js +456 -43
  11. package/dist/cli/chat.js.map +1 -1
  12. package/dist/cli/cli-program.d.ts.map +1 -1
  13. package/dist/cli/cli-program.js +8 -0
  14. package/dist/cli/cli-program.js.map +1 -1
  15. package/dist/cli/config.d.ts.map +1 -1
  16. package/dist/cli/config.js +35 -4
  17. package/dist/cli/config.js.map +1 -1
  18. package/dist/cli/execute.d.ts.map +1 -1
  19. package/dist/cli/execute.js +14 -0
  20. package/dist/cli/execute.js.map +1 -1
  21. package/dist/cli/knowledge.d.ts +23 -0
  22. package/dist/cli/knowledge.d.ts.map +1 -0
  23. package/dist/cli/knowledge.js +132 -0
  24. package/dist/cli/knowledge.js.map +1 -0
  25. package/dist/cli/loop-executor.d.ts.map +1 -1
  26. package/dist/cli/loop-executor.js +57 -13
  27. package/dist/cli/loop-executor.js.map +1 -1
  28. package/dist/cli/omniroute-control.d.ts +88 -0
  29. package/dist/cli/omniroute-control.d.ts.map +1 -0
  30. package/dist/cli/omniroute-control.js +179 -0
  31. package/dist/cli/omniroute-control.js.map +1 -0
  32. package/dist/cli/omniroute.d.ts +21 -0
  33. package/dist/cli/omniroute.d.ts.map +1 -0
  34. package/dist/cli/omniroute.js +67 -0
  35. package/dist/cli/omniroute.js.map +1 -0
  36. package/dist/cli/tool-install-prompt.d.ts +58 -0
  37. package/dist/cli/tool-install-prompt.d.ts.map +1 -1
  38. package/dist/cli/tool-install-prompt.js +137 -0
  39. package/dist/cli/tool-install-prompt.js.map +1 -1
  40. package/dist/cli/weak-model-prompt.d.ts +16 -7
  41. package/dist/cli/weak-model-prompt.d.ts.map +1 -1
  42. package/dist/cli/weak-model-prompt.js +24 -8
  43. package/dist/cli/weak-model-prompt.js.map +1 -1
  44. package/dist/config/types.d.ts +44 -0
  45. package/dist/config/types.d.ts.map +1 -1
  46. package/dist/context/cache.d.ts +35 -1
  47. package/dist/context/cache.d.ts.map +1 -1
  48. package/dist/context/cache.js +31 -2
  49. package/dist/context/cache.js.map +1 -1
  50. package/dist/context/history.d.ts +21 -0
  51. package/dist/context/history.d.ts.map +1 -1
  52. package/dist/context/history.js +50 -0
  53. package/dist/context/history.js.map +1 -1
  54. package/dist/gateway/hook-contract.d.ts +173 -0
  55. package/dist/gateway/hook-contract.d.ts.map +1 -0
  56. package/dist/gateway/hook-contract.js +352 -0
  57. package/dist/gateway/hook-contract.js.map +1 -0
  58. package/dist/gateway/hooks.d.ts.map +1 -1
  59. package/dist/gateway/hooks.js +14 -0
  60. package/dist/gateway/hooks.js.map +1 -1
  61. package/dist/inference/interface.d.ts +17 -0
  62. package/dist/inference/interface.d.ts.map +1 -1
  63. package/dist/inference/model-catalog.d.ts +17 -0
  64. package/dist/inference/model-catalog.d.ts.map +1 -1
  65. package/dist/inference/model-catalog.js +42 -7
  66. package/dist/inference/model-catalog.js.map +1 -1
  67. package/dist/inference/model-id-validation.d.ts +57 -0
  68. package/dist/inference/model-id-validation.d.ts.map +1 -0
  69. package/dist/inference/model-id-validation.js +127 -0
  70. package/dist/inference/model-id-validation.js.map +1 -0
  71. package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
  72. package/dist/inference/openai-compat-adapter.js +12 -1
  73. package/dist/inference/openai-compat-adapter.js.map +1 -1
  74. package/dist/inference/provider-catalog.d.ts +11 -0
  75. package/dist/inference/provider-catalog.d.ts.map +1 -1
  76. package/dist/inference/provider-catalog.js +80 -0
  77. package/dist/inference/provider-catalog.js.map +1 -1
  78. package/dist/inference/route-resolver.d.ts +2 -8
  79. package/dist/inference/route-resolver.d.ts.map +1 -1
  80. package/dist/inference/route-resolver.js +17 -0
  81. package/dist/inference/route-resolver.js.map +1 -1
  82. package/dist/inference/tool-call-utils.d.ts +4 -3
  83. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  84. package/dist/inference/tool-call-utils.js +26 -12
  85. package/dist/inference/tool-call-utils.js.map +1 -1
  86. package/dist/inference/tools.d.ts +1 -0
  87. package/dist/inference/tools.d.ts.map +1 -1
  88. package/dist/inference/tools.js +20 -3
  89. package/dist/inference/tools.js.map +1 -1
  90. package/dist/learning/agentic-route-gate.d.ts +104 -0
  91. package/dist/learning/agentic-route-gate.d.ts.map +1 -0
  92. package/dist/learning/agentic-route-gate.js +125 -0
  93. package/dist/learning/agentic-route-gate.js.map +1 -0
  94. package/dist/learning/auto-router.d.ts +89 -0
  95. package/dist/learning/auto-router.d.ts.map +1 -1
  96. package/dist/learning/auto-router.js +188 -8
  97. package/dist/learning/auto-router.js.map +1 -1
  98. package/dist/learning/build-prerequisites.d.ts +68 -0
  99. package/dist/learning/build-prerequisites.d.ts.map +1 -0
  100. package/dist/learning/build-prerequisites.js +267 -0
  101. package/dist/learning/build-prerequisites.js.map +1 -0
  102. package/dist/learning/continuation-intent.d.ts +43 -0
  103. package/dist/learning/continuation-intent.d.ts.map +1 -0
  104. package/dist/learning/continuation-intent.js +82 -0
  105. package/dist/learning/continuation-intent.js.map +1 -0
  106. package/dist/learning/error-repair.d.ts +23 -1
  107. package/dist/learning/error-repair.d.ts.map +1 -1
  108. package/dist/learning/error-repair.js +58 -0
  109. package/dist/learning/error-repair.js.map +1 -1
  110. package/dist/learning/knowledge-base.d.ts +124 -0
  111. package/dist/learning/knowledge-base.d.ts.map +1 -0
  112. package/dist/learning/knowledge-base.js +337 -0
  113. package/dist/learning/knowledge-base.js.map +1 -0
  114. package/dist/learning/model-harness.d.ts +19 -0
  115. package/dist/learning/model-harness.d.ts.map +1 -1
  116. package/dist/learning/model-harness.js +27 -0
  117. package/dist/learning/model-harness.js.map +1 -1
  118. package/dist/learning/model-selection.d.ts +2 -1
  119. package/dist/learning/model-selection.d.ts.map +1 -1
  120. package/dist/learning/model-selection.js +35 -2
  121. package/dist/learning/model-selection.js.map +1 -1
  122. package/dist/learning/project-docs.d.ts +83 -0
  123. package/dist/learning/project-docs.d.ts.map +1 -0
  124. package/dist/learning/project-docs.js +132 -0
  125. package/dist/learning/project-docs.js.map +1 -0
  126. package/dist/learning/prompt-budget.d.ts +91 -0
  127. package/dist/learning/prompt-budget.d.ts.map +1 -0
  128. package/dist/learning/prompt-budget.js +99 -0
  129. package/dist/learning/prompt-budget.js.map +1 -0
  130. package/dist/learning/quota-ledger.d.ts +13 -0
  131. package/dist/learning/quota-ledger.d.ts.map +1 -1
  132. package/dist/learning/quota-ledger.js +28 -0
  133. package/dist/learning/quota-ledger.js.map +1 -1
  134. package/dist/learning/reasoning-trace.d.ts +55 -2
  135. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  136. package/dist/learning/reasoning-trace.js +48 -0
  137. package/dist/learning/reasoning-trace.js.map +1 -1
  138. package/dist/learning/resilient-call.d.ts.map +1 -1
  139. package/dist/learning/resilient-call.js +16 -3
  140. package/dist/learning/resilient-call.js.map +1 -1
  141. package/dist/learning/routing-history.d.ts +13 -0
  142. package/dist/learning/routing-history.d.ts.map +1 -1
  143. package/dist/learning/routing-history.js.map +1 -1
  144. package/dist/learning/seeded-benchmark.d.ts +14 -0
  145. package/dist/learning/seeded-benchmark.d.ts.map +1 -1
  146. package/dist/learning/seeded-benchmark.js +43 -4
  147. package/dist/learning/seeded-benchmark.js.map +1 -1
  148. package/dist/learning/turn-report.d.ts +78 -0
  149. package/dist/learning/turn-report.d.ts.map +1 -0
  150. package/dist/learning/turn-report.js +140 -0
  151. package/dist/learning/turn-report.js.map +1 -0
  152. package/dist/security/secret-scan.d.ts +156 -0
  153. package/dist/security/secret-scan.d.ts.map +1 -0
  154. package/dist/security/secret-scan.js +525 -0
  155. package/dist/security/secret-scan.js.map +1 -0
  156. package/dist/tools/edit-verification.d.ts +2 -11
  157. package/dist/tools/edit-verification.d.ts.map +1 -1
  158. package/dist/tools/edit-verification.js +33 -1
  159. package/dist/tools/edit-verification.js.map +1 -1
  160. package/dist/tools/loop-skill-hint.d.ts +51 -0
  161. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  162. package/dist/tools/loop-skill-hint.js +87 -2
  163. package/dist/tools/loop-skill-hint.js.map +1 -1
  164. package/dist/tools/plan-store.d.ts +126 -3
  165. package/dist/tools/plan-store.d.ts.map +1 -1
  166. package/dist/tools/plan-store.js +290 -6
  167. package/dist/tools/plan-store.js.map +1 -1
  168. package/dist/tools/registry.d.ts +20 -1
  169. package/dist/tools/registry.d.ts.map +1 -1
  170. package/dist/tools/registry.js +165 -4
  171. package/dist/tools/registry.js.map +1 -1
  172. package/dist/tools/remediation-ladder.d.ts +91 -0
  173. package/dist/tools/remediation-ladder.d.ts.map +1 -0
  174. package/dist/tools/remediation-ladder.js +308 -0
  175. package/dist/tools/remediation-ladder.js.map +1 -0
  176. package/dist/tools/run-terminal.d.ts.map +1 -1
  177. package/dist/tools/run-terminal.js +60 -2
  178. package/dist/tools/run-terminal.js.map +1 -1
  179. package/dist/tools/skills-hub.d.ts +7 -0
  180. package/dist/tools/skills-hub.d.ts.map +1 -1
  181. package/dist/tools/skills-hub.js +11 -2
  182. package/dist/tools/skills-hub.js.map +1 -1
  183. package/dist/tools/step-artifact.d.ts +35 -0
  184. package/dist/tools/step-artifact.d.ts.map +1 -0
  185. package/dist/tools/step-artifact.js +154 -0
  186. package/dist/tools/step-artifact.js.map +1 -0
  187. package/dist/tools/tool-loop.d.ts +35 -0
  188. package/dist/tools/tool-loop.d.ts.map +1 -1
  189. package/dist/tools/tool-loop.js +284 -9
  190. package/dist/tools/tool-loop.js.map +1 -1
  191. package/dist/tools/toolsets.js +4 -4
  192. package/dist/tools/toolsets.js.map +1 -1
  193. package/dist/tools/worktree.d.ts +11 -2
  194. package/dist/tools/worktree.d.ts.map +1 -1
  195. package/dist/tools/worktree.js +11 -2
  196. package/dist/tools/worktree.js.map +1 -1
  197. package/dist/utils/effect-verification.js +1 -1
  198. package/dist/utils/effect-verification.js.map +1 -1
  199. package/dist/web-dashboard/chat-console.d.ts +21 -1
  200. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  201. package/dist/web-dashboard/chat-console.js +33 -5
  202. package/dist/web-dashboard/chat-console.js.map +1 -1
  203. package/dist/web-dashboard/server.d.ts +29 -0
  204. package/dist/web-dashboard/server.d.ts.map +1 -1
  205. package/dist/web-dashboard/server.js +410 -5
  206. package/dist/web-dashboard/server.js.map +1 -1
  207. package/dist/web-dashboard/src/types.d.ts +137 -0
  208. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  209. package/dist/web-dashboard/workspace-guard.d.ts +7 -0
  210. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  211. package/dist/web-dashboard/workspace-guard.js +70 -0
  212. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  213. package/package.json +4 -1
  214. package/src/web-dashboard/public/assets/index-DhiuR4S2.js +210 -0
  215. package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +1 -0
  216. package/src/web-dashboard/public/assets/index-tK8Y2qHB.css +1 -0
  217. package/src/web-dashboard/public/index.html +2 -2
  218. package/src/web-dashboard/public/assets/index-BdKf5Xw2.js +0 -207
  219. package/src/web-dashboard/public/assets/index-BdKf5Xw2.js.map +0 -1
  220. package/src/web-dashboard/public/assets/index-C9eBskc9.css +0 -1
@@ -68,9 +68,28 @@ export function hasCredentials(configManager, provider) {
68
68
  * failed outright.
69
69
  */
70
70
  export const MODEL_HEALTH_CEILING = 0.6;
71
+ /**
72
+ * How much a verification SOURCE is worth when ranking models of equal health.
73
+ * Lower = more trustworthy, so it sorts first.
74
+ *
75
+ * A `spot-check` is a single 1-token generation: it proves the model NAME
76
+ * exists and accepts a request — it does NOT prove the model can hold a task.
77
+ * `telemetry` is real traffic (hundreds of samples), so it is the strongest
78
+ * evidence we have. Ranking them as equals let a model with six probe samples
79
+ * (observed live: `deepseek-v4-pro`, 6 samples) sit at errorRate 0 beside a
80
+ * model with 290 real calls (`deepseek-flash`) — and whenever the configured
81
+ * pin was dead, the fallback walk could then hand a caller a model that had
82
+ * never actually done a task. Real evidence must win.
83
+ */
84
+ const SOURCE_CONFIDENCE = {
85
+ telemetry: 0,
86
+ 'spot-check': 1,
87
+ probe: 2,
88
+ };
71
89
  /**
72
90
  * Verified working models for a provider, ranked by learned health:
73
- * lowest error rate first, then lowest latency, then most recently verified.
91
+ * strongest verification source first, then lowest error rate, then lowest
92
+ * latency, then most recently verified.
74
93
  * Empty when nothing has been verified yet (cold start / no keys).
75
94
  *
76
95
  * MODELS AT/ABOVE `MODEL_HEALTH_CEILING` SORT AFTER THE HEALTHY ONES but are
@@ -96,6 +115,13 @@ export function preferredModelsFor(provider) {
96
115
  .sort((a, b) => {
97
116
  const ea = registry.getEntry(provider, a);
98
117
  const eb = registry.getEntry(provider, b);
118
+ // 1. Evidence strength. A model proven by real traffic must outrank one
119
+ // that only ever answered a 1-token probe — they are NOT equivalent
120
+ // evidence, and treating them as such is how an unproven model won.
121
+ const sa = SOURCE_CONFIDENCE[ea?.source ?? 'probe'] ?? 2;
122
+ const sb = SOURCE_CONFIDENCE[eb?.source ?? 'probe'] ?? 2;
123
+ if (sa !== sb)
124
+ return sa - sb;
99
125
  const ra = ea?.errorRate ?? 0;
100
126
  const rb = eb?.errorRate ?? 0;
101
127
  if (ra !== rb)
@@ -156,8 +182,10 @@ export function rankAvailableProviders(configManager) {
156
182
  // providers join routing the moment they appear in config. Nothing is
157
183
  // hardcoded to the 6 built-ins anymore.
158
184
  let configuredIds = [];
185
+ let providerConfig = {};
159
186
  try {
160
- configuredIds = Object.keys(configManager.getAll?.()?.providers ?? {});
187
+ providerConfig = configManager.getAll?.()?.providers ?? {};
188
+ configuredIds = Object.keys(providerConfig);
161
189
  }
162
190
  catch {
163
191
  // Best-effort.
@@ -165,6 +193,11 @@ export function rankAvailableProviders(configManager) {
165
193
  const candidates = [...new Set([...CATALOG_PROVIDER_IDS, ...configuredIds])].filter((p) => {
166
194
  if (blocked.has(p))
167
195
  return false;
196
+ // The dashboard's per-provider On/Off switch. Off removes the provider from
197
+ // the AUTO pool only; credentials stay on disk, and an explicit `--provider`
198
+ // pin is a user decision the router does not second-guess.
199
+ if (providerConfig[p]?.enabled === false)
200
+ return false;
168
201
  // Keyless runners BEYOND `local` (nuvira, lmstudio, vllm) only join when the
169
202
  // registry has VERIFIED them or the user explicitly configured them — a
170
203
  // not-running localhost endpoint must never out-rank running local on a
@@ -1 +1 @@
1
- {"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * PROJECT DOCUMENTATION (software deliverables).
3
+ *
4
+ * The gap this closes: a software build produced CODE and stopped. The
5
+ * documents a real project ships — a README, a changelog that grows with each
6
+ * change, a short architecture note with a diagram, and (for a library/service)
7
+ * usage + API docs — were only produced when the user named them, which is
8
+ * exactly backwards: a user should not have to ask a "world-class developer" to
9
+ * write down what it built.
10
+ *
11
+ * Two rules keep this from becoming noise:
12
+ *
13
+ * 1. **Software only.** This module is consulted ONLY for a `code` deliverable
14
+ * that is not authored (`deliverable-class.ts` already separates a poem
15
+ * from a program). Nobody wants a README and an ARCHITECTURE.md for
16
+ * "write me a poem about rain" — the classifier decides, and this guidance
17
+ * is never appended to an authored ask.
18
+ * 2. **Proportionate.** A README and a CHANGELOG are expected of every
19
+ * software deliverable; the heavier documents (architecture, API reference,
20
+ * contributing guide) are asked for only when the shape warrants them —
21
+ * a multi-component or library/service build, or an explicit request for
22
+ * docs. A one-file script still gets a README; it is not asked to invent an
23
+ * architecture diagram.
24
+ *
25
+ * It also encodes the maintenance rule the user cares about: an EXISTING
26
+ * document is UPDATED in place (CHANGELOG gets a new entry at the top), never
27
+ * shadowed by a second file — a project with two changelogs is worse than one
28
+ * with none.
29
+ *
30
+ * Pure and side-effect free: every input is data, so it is unit-testable and can
31
+ * be appended to any prompt without touching the filesystem.
32
+ */
33
+ /** The canonical documents a software project ships, in priority order. */
34
+ export interface ProjectDocArtifact {
35
+ /** Project-relative path the document lives at. */
36
+ path: string;
37
+ /** What it is FOR — handed to the model so the document has a job. */
38
+ purpose: string;
39
+ /** Required of every software deliverable (README, CHANGELOG). */
40
+ always: boolean;
41
+ }
42
+ export declare const PROJECT_DOC_ARTIFACTS: readonly ProjectDocArtifact[];
43
+ /** What we know about the deliverable, from the goal + project assessment. */
44
+ export interface ProjectDocShape {
45
+ /**
46
+ * True when the workspace has no project yet (a scaffold). A greenfield build
47
+ * gets the full proportionate set rather than only the always-on pair.
48
+ */
49
+ greenfield?: boolean;
50
+ /**
51
+ * A library, package, SDK or service — a thing other code CONSUMES — rather
52
+ * than an end-user app. Its public surface must be documented.
53
+ */
54
+ isLibraryOrService?: boolean;
55
+ /** The project already exposes tests (or the agent is expected to write them). */
56
+ hasTests?: boolean;
57
+ /** Names the user explicitly asked for docs ("with documentation", "API docs"). */
58
+ docsRequested?: boolean;
59
+ /**
60
+ * Documents that ALREADY exist in the workspace (project-relative paths).
61
+ * These are UPDATED in place, never duplicated.
62
+ */
63
+ existingDocs?: readonly string[];
64
+ }
65
+ /** The always-on pair, plus the heavier docs a bigger build warrants. */
66
+ export declare function requiredProjectDocs(shape?: ProjectDocShape): string[];
67
+ /**
68
+ * Does the goal name something other code CONSUMES (a library, package, SDK,
69
+ * CLI, service, plugin) rather than an end-user app? A consumed surface has a
70
+ * public API worth documenting; an app does not need an API reference.
71
+ */
72
+ export declare function looksLikeLibraryOrService(goal: string): boolean;
73
+ /** The required docs that do NOT yet exist on disk (the ones to CREATE). */
74
+ export declare function missingProjectDocs(shape?: ProjectDocShape): string[];
75
+ /** The required docs that already exist (the ones to UPDATE, not recreate). */
76
+ export declare function existingProjectDocs(shape?: ProjectDocShape): string[];
77
+ /**
78
+ * The instruction appended to the reasoner/planner prompt for a SOFTWARE
79
+ * deliverable. Returns `''` for a non-software (authored) ask, so callers can
80
+ * append it unconditionally without a poem ever being asked for a CHANGELOG.
81
+ */
82
+ export declare function softwareProjectGuidance(verdictClass: string, authored: boolean, shape?: ProjectDocShape): string;
83
+ //# sourceMappingURL=project-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-docs.d.ts","sourceRoot":"","sources":["../../src/learning/project-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAqC9D,CAAC;AAEF,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,eAAoB,GAAG,MAAM,EAAE,CAOzE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU/D;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,eAAoB,GAAG,MAAM,EAAE,CAGxE;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,eAAoB,GAAG,MAAM,EAAE,CAGzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,KAAK,GAAE,eAAoB,GAC1B,MAAM,CAmCR"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * PROJECT DOCUMENTATION (software deliverables).
3
+ *
4
+ * The gap this closes: a software build produced CODE and stopped. The
5
+ * documents a real project ships — a README, a changelog that grows with each
6
+ * change, a short architecture note with a diagram, and (for a library/service)
7
+ * usage + API docs — were only produced when the user named them, which is
8
+ * exactly backwards: a user should not have to ask a "world-class developer" to
9
+ * write down what it built.
10
+ *
11
+ * Two rules keep this from becoming noise:
12
+ *
13
+ * 1. **Software only.** This module is consulted ONLY for a `code` deliverable
14
+ * that is not authored (`deliverable-class.ts` already separates a poem
15
+ * from a program). Nobody wants a README and an ARCHITECTURE.md for
16
+ * "write me a poem about rain" — the classifier decides, and this guidance
17
+ * is never appended to an authored ask.
18
+ * 2. **Proportionate.** A README and a CHANGELOG are expected of every
19
+ * software deliverable; the heavier documents (architecture, API reference,
20
+ * contributing guide) are asked for only when the shape warrants them —
21
+ * a multi-component or library/service build, or an explicit request for
22
+ * docs. A one-file script still gets a README; it is not asked to invent an
23
+ * architecture diagram.
24
+ *
25
+ * It also encodes the maintenance rule the user cares about: an EXISTING
26
+ * document is UPDATED in place (CHANGELOG gets a new entry at the top), never
27
+ * shadowed by a second file — a project with two changelogs is worse than one
28
+ * with none.
29
+ *
30
+ * Pure and side-effect free: every input is data, so it is unit-testable and can
31
+ * be appended to any prompt without touching the filesystem.
32
+ */
33
+ export const PROJECT_DOC_ARTIFACTS = [
34
+ {
35
+ path: 'README.md',
36
+ purpose: 'what the project is, how to install it, and a copy-pasteable quick start — the FIRST thing a ' +
37
+ 'newcomer reads',
38
+ always: true,
39
+ },
40
+ {
41
+ path: 'CHANGELOG.md',
42
+ purpose: 'Keep a Changelog format, newest section first (Added / Changed / Fixed / Removed) — every ' +
43
+ 'meaningful change appends an entry here',
44
+ always: true,
45
+ },
46
+ {
47
+ path: 'ARCHITECTURE.md',
48
+ purpose: 'the components, how data flows between them, and a diagram (a Mermaid `flowchart` or ' +
49
+ '`sequenceDiagram` block renders on GitHub with no tooling)',
50
+ always: false,
51
+ },
52
+ {
53
+ path: 'docs/usage.md',
54
+ purpose: 'task-oriented guides: "how do I do X", with working examples',
55
+ always: false,
56
+ },
57
+ {
58
+ path: 'docs/api.md',
59
+ purpose: 'the public API reference — every exported symbol, its signature and an example',
60
+ always: false,
61
+ },
62
+ {
63
+ path: 'CONTRIBUTING.md',
64
+ purpose: 'how to build, test and submit a change (the commands a contributor needs)',
65
+ always: false,
66
+ },
67
+ ];
68
+ /** The always-on pair, plus the heavier docs a bigger build warrants. */
69
+ export function requiredProjectDocs(shape = {}) {
70
+ const paths = PROJECT_DOC_ARTIFACTS.filter((a) => a.always).map((a) => a.path);
71
+ if (shape.isLibraryOrService || shape.docsRequested)
72
+ paths.push('docs/api.md', 'docs/usage.md');
73
+ if (shape.greenfield || shape.isLibraryOrService || shape.docsRequested)
74
+ paths.push('ARCHITECTURE.md');
75
+ if (shape.hasTests)
76
+ paths.push('CONTRIBUTING.md');
77
+ // De-dupe while preserving priority order.
78
+ return [...new Set(paths)];
79
+ }
80
+ /**
81
+ * Does the goal name something other code CONSUMES (a library, package, SDK,
82
+ * CLI, service, plugin) rather than an end-user app? A consumed surface has a
83
+ * public API worth documenting; an app does not need an API reference.
84
+ */
85
+ export function looksLikeLibraryOrService(goal) {
86
+ const consumed = /\b(library|lib|package|npm\s+package|sdk|module|cli|command[- ]?line|api|service|server|daemon|plugin|extension|framework|toolkit)\b/i.test(goal);
87
+ const endUserApp = /\b(website|web\s?app|webapp|landing\s+page|game|mobile\s+app|desktop\s+app|swiftui|android\s+app|ios\s+app)\b/i.test(goal);
88
+ return consumed && !endUserApp;
89
+ }
90
+ /** The required docs that do NOT yet exist on disk (the ones to CREATE). */
91
+ export function missingProjectDocs(shape = {}) {
92
+ const existing = new Set((shape.existingDocs ?? []).map((p) => p.replace(/^\.\//, '')));
93
+ return requiredProjectDocs(shape).filter((p) => !existing.has(p));
94
+ }
95
+ /** The required docs that already exist (the ones to UPDATE, not recreate). */
96
+ export function existingProjectDocs(shape = {}) {
97
+ const existing = new Set((shape.existingDocs ?? []).map((p) => p.replace(/^\.\//, '')));
98
+ return requiredProjectDocs(shape).filter((p) => existing.has(p));
99
+ }
100
+ /**
101
+ * The instruction appended to the reasoner/planner prompt for a SOFTWARE
102
+ * deliverable. Returns `''` for a non-software (authored) ask, so callers can
103
+ * append it unconditionally without a poem ever being asked for a CHANGELOG.
104
+ */
105
+ export function softwareProjectGuidance(verdictClass, authored, shape = {}) {
106
+ if (authored || verdictClass !== 'code')
107
+ return '';
108
+ const create = missingProjectDocs(shape);
109
+ const update = existingProjectDocs(shape);
110
+ if (create.length === 0 && update.length === 0)
111
+ return '';
112
+ const purposeOf = (path) => PROJECT_DOC_ARTIFACTS.find((a) => a.path === path)?.purpose ?? 'project documentation';
113
+ const lines = [
114
+ '',
115
+ '## ⚠️ PROJECT DOCUMENTATION (this is a SOFTWARE deliverable)',
116
+ 'Code is not the whole deliverable. A project is not finished until the',
117
+ 'documents below exist and are current — include them as REAL plan steps with',
118
+ '`expectedFiles`, not as an afterthought.',
119
+ '',
120
+ 'Create:',
121
+ ];
122
+ for (const path of create)
123
+ lines.push(`- \`${path}\` — ${purposeOf(path)}`);
124
+ if (update.length > 0) {
125
+ lines.push('', 'Update IN PLACE (do NOT create a second copy or a parallel file):');
126
+ for (const path of update)
127
+ lines.push(`- \`${path}\` — add the new state of the project (for a CHANGELOG, a new top section)`);
128
+ }
129
+ lines.push('', 'Rules:', '- Every document must reflect what was ACTUALLY built — never invent features,', ' flags or files that do not exist.', '- A document you cannot fill honestly gets a shorter honest version, not filler.', '- If the project already has these documents, UPDATING them is the task; a', ' duplicate CHANGELOG or a shadow architecture file is a defect.', '- Keep the CHANGELOG append-only going forward: each change adds an entry, and', ' old entries are never rewritten.');
130
+ return lines.join('\n');
131
+ }
132
+ //# sourceMappingURL=project-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-docs.js","sourceRoot":"","sources":["../../src/learning/project-docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * PROMPT BUDGET (Workstream D1).
3
+ *
4
+ * Context is a finite resource with diminishing marginal returns ("context
5
+ * rot"): as the prompt grows, recall and long-range reasoning get worse, so the
6
+ * harness must manage what it SENDS, not just what it stores. Industry practice
7
+ * converges on: a stable cached prefix + just-in-time retrieval + per-source
8
+ * caps + measurement at assembly time + deterministic degradation. This module
9
+ * provides the measurement and the degradation PLAN; the caller applies it.
10
+ *
11
+ * It is deliberately dependency-light and pure, so it can be unit tested without
12
+ * a provider, a project, or a terminal.
13
+ *
14
+ * NOTE: this is distinct from `context-budget.ts`, which resolves a model's
15
+ * WINDOW and output-token budget. `MAX_SYSTEM_PROMPT_CHARS` in reasoning-trace.ts
16
+ * bounds what the TRACE stores. This module's thresholds bound what the MODEL is
17
+ * SENT — the previously ungated thing (the 3.3.11 bloat was 7.6K → 32.8K chars
18
+ * sent with no guard).
19
+ */
20
+ /** Character budgets for the outbound context (estimates, not token counts). */
21
+ export interface PromptBudget {
22
+ /** Note once the whole thread exceeds this many chars. */
23
+ noteTotal: number;
24
+ /** Warn once the whole thread exceeds this many chars. */
25
+ warnTotal: number;
26
+ /** Hard ceiling: trim optional contributors until under this. */
27
+ maxTotal: number;
28
+ /** Note once the stable SYSTEM layer exceeds this. */
29
+ noteSystem: number;
30
+ /** Warn once the stable SYSTEM layer exceeds this. */
31
+ warnSystem: number;
32
+ }
33
+ export declare const DEFAULT_PROMPT_BUDGET: PromptBudget;
34
+ interface ConfigLike {
35
+ getAll?: () => {
36
+ routing?: {
37
+ promptBudget?: Partial<PromptBudget>;
38
+ };
39
+ } | undefined;
40
+ }
41
+ /**
42
+ * Resolve the budget: `routing.promptBudget` overrides the defaults per key.
43
+ * Unknown/invalid values fall through rather than throwing.
44
+ */
45
+ export declare function resolvePromptBudget(configManager?: ConfigLike): PromptBudget;
46
+ /** How far over budget the outbound context is. */
47
+ export type PromptBudgetLevel = 'ok' | 'note' | 'warn' | 'over';
48
+ /** One contributor to the outbound context. */
49
+ export interface PromptContribution {
50
+ /** Stable name (`system:identity+tool-contract`, `skill-hint`, …). */
51
+ name: string;
52
+ /** Size in chars. */
53
+ chars: number;
54
+ /**
55
+ * Degradation order: lower drops FIRST. `undefined` = never dropped (the
56
+ * identity/tool contract and safety clauses must survive any trim).
57
+ */
58
+ dropPriority?: number;
59
+ }
60
+ export interface PromptBudgetReport {
61
+ /** Total outbound chars across every contribution. */
62
+ totalChars: number;
63
+ /** The stable SYSTEM layer's chars. */
64
+ systemChars: number;
65
+ /** Budget band the total fell into. */
66
+ level: PromptBudgetLevel;
67
+ /** Contributions, largest first. */
68
+ contributions: PromptContribution[];
69
+ /** The single largest contributor (the one to attack first). */
70
+ biggest?: PromptContribution;
71
+ /**
72
+ * Names to drop, lowest value first, until the total fits under `maxTotal`.
73
+ * Empty when already under. Never includes a contribution without a
74
+ * `dropPriority`.
75
+ */
76
+ trims: string[];
77
+ }
78
+ /**
79
+ * Measure the outbound context and decide, deterministically, what to trim.
80
+ *
81
+ * The `system:`-prefixed contributions (identity/tool-contract, channel policy)
82
+ * are treated as the stable layer for the system budget.
83
+ */
84
+ export declare function measurePromptBudget(parts: PromptContribution[], opts?: {
85
+ budget?: PromptBudget;
86
+ systemName?: string;
87
+ }): PromptBudgetReport;
88
+ /** A compact one-line breakdown for the console / trace summary. */
89
+ export declare function formatPromptBudgetBreakdown(report: PromptBudgetReport): string;
90
+ export {};
91
+ //# sourceMappingURL=prompt-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-budget.d.ts","sourceRoot":"","sources":["../../src/learning/prompt-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAMnC,CAAC;AAOF,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM;QAAE,OAAO,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,CAAC;CACnF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,CAAC,EAAE,UAAU,GAAG,YAAY,CAe5E;AAED,mDAAmD;AACnD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,iBAAiB,CAAC;IACzB,oCAAoC;IACpC,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,gEAAgE;IAChE,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,kBAAkB,CAsCpB;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAG9E"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * PROMPT BUDGET (Workstream D1).
3
+ *
4
+ * Context is a finite resource with diminishing marginal returns ("context
5
+ * rot"): as the prompt grows, recall and long-range reasoning get worse, so the
6
+ * harness must manage what it SENDS, not just what it stores. Industry practice
7
+ * converges on: a stable cached prefix + just-in-time retrieval + per-source
8
+ * caps + measurement at assembly time + deterministic degradation. This module
9
+ * provides the measurement and the degradation PLAN; the caller applies it.
10
+ *
11
+ * It is deliberately dependency-light and pure, so it can be unit tested without
12
+ * a provider, a project, or a terminal.
13
+ *
14
+ * NOTE: this is distinct from `context-budget.ts`, which resolves a model's
15
+ * WINDOW and output-token budget. `MAX_SYSTEM_PROMPT_CHARS` in reasoning-trace.ts
16
+ * bounds what the TRACE stores. This module's thresholds bound what the MODEL is
17
+ * SENT — the previously ungated thing (the 3.3.11 bloat was 7.6K → 32.8K chars
18
+ * sent with no guard).
19
+ */
20
+ export const DEFAULT_PROMPT_BUDGET = {
21
+ noteTotal: 24_000,
22
+ warnTotal: 40_000,
23
+ maxTotal: 48_000,
24
+ noteSystem: 8_000,
25
+ warnSystem: 12_000,
26
+ };
27
+ function positiveInt(v, fallback) {
28
+ const n = Number(v);
29
+ return Number.isFinite(n) && n > 0 ? Math.round(n) : fallback;
30
+ }
31
+ /**
32
+ * Resolve the budget: `routing.promptBudget` overrides the defaults per key.
33
+ * Unknown/invalid values fall through rather than throwing.
34
+ */
35
+ export function resolvePromptBudget(configManager) {
36
+ let overrides;
37
+ try {
38
+ overrides = configManager?.getAll?.()?.routing?.promptBudget;
39
+ }
40
+ catch {
41
+ overrides = undefined;
42
+ }
43
+ const o = overrides ?? {};
44
+ return {
45
+ noteTotal: positiveInt(o.noteTotal, DEFAULT_PROMPT_BUDGET.noteTotal),
46
+ warnTotal: positiveInt(o.warnTotal, DEFAULT_PROMPT_BUDGET.warnTotal),
47
+ maxTotal: positiveInt(o.maxTotal, DEFAULT_PROMPT_BUDGET.maxTotal),
48
+ noteSystem: positiveInt(o.noteSystem, DEFAULT_PROMPT_BUDGET.noteSystem),
49
+ warnSystem: positiveInt(o.warnSystem, DEFAULT_PROMPT_BUDGET.warnSystem),
50
+ };
51
+ }
52
+ const SYSTEM_NAME_PREFIX = 'system:';
53
+ /**
54
+ * Measure the outbound context and decide, deterministically, what to trim.
55
+ *
56
+ * The `system:`-prefixed contributions (identity/tool-contract, channel policy)
57
+ * are treated as the stable layer for the system budget.
58
+ */
59
+ export function measurePromptBudget(parts, opts) {
60
+ const budget = opts?.budget ?? DEFAULT_PROMPT_BUDGET;
61
+ const clean = parts
62
+ .filter((p) => Number.isFinite(p.chars) && p.chars > 0)
63
+ .map((p) => ({ ...p, chars: Math.round(p.chars) }));
64
+ const totalChars = clean.reduce((n, p) => n + p.chars, 0);
65
+ const systemChars = clean
66
+ .filter((p) => p.name.startsWith(SYSTEM_NAME_PREFIX) || p.name === opts?.systemName)
67
+ .reduce((n, p) => n + p.chars, 0);
68
+ const level = totalChars > budget.maxTotal
69
+ ? 'over'
70
+ : totalChars > budget.warnTotal || systemChars > budget.warnSystem
71
+ ? 'warn'
72
+ : totalChars > budget.noteTotal || systemChars > budget.noteSystem
73
+ ? 'note'
74
+ : 'ok';
75
+ const contributions = [...clean].sort((a, b) => b.chars - a.chars);
76
+ const biggest = contributions[0];
77
+ // Deterministic ladder: drop optional contributors by ascending dropPriority
78
+ // (lowest value = least valuable = dropped first) until under the ceiling.
79
+ const trims = [];
80
+ if (totalChars > budget.maxTotal) {
81
+ const droppable = clean
82
+ .filter((p) => p.dropPriority !== undefined)
83
+ .sort((a, b) => (a.dropPriority ?? 0) - (b.dropPriority ?? 0));
84
+ let running = totalChars;
85
+ for (const p of droppable) {
86
+ if (running <= budget.maxTotal)
87
+ break;
88
+ trims.push(p.name);
89
+ running -= p.chars;
90
+ }
91
+ }
92
+ return { totalChars, systemChars, level, contributions, biggest, trims };
93
+ }
94
+ /** A compact one-line breakdown for the console / trace summary. */
95
+ export function formatPromptBudgetBreakdown(report) {
96
+ const top = report.contributions.slice(0, 5).map((c) => `${c.name} ${c.chars}`);
97
+ return `context ${report.totalChars} chars (${report.level}) — ${top.join(', ')}`;
98
+ }
99
+ //# sourceMappingURL=prompt-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-budget.js","sourceRoot":"","sources":["../../src/learning/prompt-budget.ts"],"names":[],"mappings":"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"}
@@ -215,6 +215,19 @@ export declare class QuotaLedger {
215
215
  * Effective quota limits for a provider from config (`routing.quota`).
216
216
  */
217
217
  private limitsFor;
218
+ /**
219
+ * ADMIN-BUDGET exhaustion ONLY: is this provider over the window budget the
220
+ * user DECLARED in `routing.quota.<provider>`?
221
+ *
222
+ * Deliberately ignores transient parks/cooldowns. A rate-limit park is a
223
+ * provider hiccup that may clear in seconds and says nothing about the user's
224
+ * plan; the admin budget is a control the user set, so the two must be
225
+ * separable. The pinned-run preflight reads THIS (a declared limit) — never
226
+ * the blended `getRouterQuotaStatus()` — so an explicit selection is refused
227
+ * only when it genuinely exceeds the budget the user configured, and is still
228
+ * given its shot after a transient 429.
229
+ */
230
+ isOverConfiguredLimit(configManager: ConfigManager | undefined, provider: string): boolean;
218
231
  /**
219
232
  * Build the router's "parked providers" feed — providers that must sink
220
233
  * below healthy candidates because they are exhausted or in cooldown.
@@ -1 +1 @@
1
- {"version":3,"file":"quota-ledger.d.ts","sourceRoot":"","sources":["../../src/learning/quota-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-ledger.d.ts","sourceRoot":"","sources":["../../src/learning/quota-ledger.ts"],"names":[],"mappings":"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"}
@@ -437,6 +437,34 @@ export class QuotaLedger {
437
437
  limitsFor(configManager, provider) {
438
438
  return configManager?.getAll().routing?.quota?.[provider];
439
439
  }
440
+ /**
441
+ * ADMIN-BUDGET exhaustion ONLY: is this provider over the window budget the
442
+ * user DECLARED in `routing.quota.<provider>`?
443
+ *
444
+ * Deliberately ignores transient parks/cooldowns. A rate-limit park is a
445
+ * provider hiccup that may clear in seconds and says nothing about the user's
446
+ * plan; the admin budget is a control the user set, so the two must be
447
+ * separable. The pinned-run preflight reads THIS (a declared limit) — never
448
+ * the blended `getRouterQuotaStatus()` — so an explicit selection is refused
449
+ * only when it genuinely exceeds the budget the user configured, and is still
450
+ * given its shot after a transient 429.
451
+ */
452
+ isOverConfiguredLimit(configManager, provider) {
453
+ const limit = this.limitsFor(configManager, provider);
454
+ if (!limit)
455
+ return false;
456
+ let requests = 0;
457
+ let tokens = 0;
458
+ for (const entry of Object.values(this.state.entries)) {
459
+ if (entry.provider !== provider)
460
+ continue;
461
+ this.rotateWindow(entry);
462
+ requests += entry.requests;
463
+ tokens += entry.tokensConsumed;
464
+ }
465
+ return ((limit.requestsPerWindow !== undefined && requests >= limit.requestsPerWindow) ||
466
+ (limit.tokensPerWindow !== undefined && tokens >= limit.tokensPerWindow));
467
+ }
440
468
  /**
441
469
  * Build the router's "parked providers" feed — providers that must sink
442
470
  * below healthy candidates because they are exhausted or in cooldown.