@windagency/valora 2.2.0 → 2.3.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 (324) hide show
  1. package/README.md +45 -19
  2. package/data/agents/secops-engineer.md +74 -7
  3. package/data/commands/_meta/schema.json +8 -1
  4. package/data/commands/assert.md +1 -1
  5. package/data/commands/generate-all-documentation.md +1 -1
  6. package/data/commands/generate-docs.md +1 -1
  7. package/data/commands/implement.md +2 -0
  8. package/data/commands/plan-architecture.md +1 -1
  9. package/data/commands/plan-implementation.md +1 -1
  10. package/data/commands/plan.md +1 -1
  11. package/data/commands/refine-task.md +1 -1
  12. package/data/commands/registry.json +11 -11
  13. package/data/commands/review-code.md +1 -1
  14. package/data/commands/review-functional.md +1 -1
  15. package/data/prompts/01_onboard/analyze-patterns.md +1 -0
  16. package/data/prompts/01_onboard/collect-clarifications.md +1 -0
  17. package/data/prompts/01_onboard/map-dependencies.md +1 -0
  18. package/data/prompts/02_context/analyze-change-scope.md +1 -0
  19. package/data/prompts/02_context/analyze-changes-for-review.md +1 -0
  20. package/data/prompts/02_context/analyze-codebase-changes.md +1 -0
  21. package/data/prompts/02_context/analyze-command-execution.md +1 -0
  22. package/data/prompts/02_context/analyze-commits-for-pr.md +1 -0
  23. package/data/prompts/02_context/analyze-functional-scope.md +1 -0
  24. package/data/prompts/02_context/analyze-git-branch.md +1 -0
  25. package/data/prompts/02_context/analyze-git-status.md +1 -0
  26. package/data/prompts/02_context/analyze-task-context.md +1 -0
  27. package/data/prompts/02_context/extract-ticket-info.md +1 -0
  28. package/data/prompts/02_context/extract-ticket-references.md +1 -0
  29. package/data/prompts/02_context/gather-git-metrics.md +1 -0
  30. package/data/prompts/02_context/identify-completed-workflow.md +1 -0
  31. package/data/prompts/02_context/load-and-analyze-parallel.md +1 -0
  32. package/data/prompts/02_context/load-commit-template.md +1 -0
  33. package/data/prompts/02_context/load-implementation-context.md +1 -0
  34. package/data/prompts/02_context/load-plan-context.md +1 -0
  35. package/data/prompts/02_context/load-pr-template.md +1 -0
  36. package/data/prompts/02_context/scan-codebase.md +1 -0
  37. package/data/prompts/02_context/use-modern-cli-tools.md +1 -0
  38. package/data/prompts/03_plan/assess-complexity.md +1 -0
  39. package/data/prompts/03_plan/assess-risks.md +1 -0
  40. package/data/prompts/03_plan/breakdown-implementation.md +1 -0
  41. package/data/prompts/03_plan/define-architecture.md +1 -0
  42. package/data/prompts/03_plan/identify-dependencies.md +1 -0
  43. package/data/prompts/04_code/calculate-version-bump.md +1 -0
  44. package/data/prompts/04_code/create-version-tag.md +1 -0
  45. package/data/prompts/04_code/determine-commit-strategy.md +1 -0
  46. package/data/prompts/04_code/determine-labels.md +1 -0
  47. package/data/prompts/04_code/determine-reviewers.md +1 -0
  48. package/data/prompts/04_code/generate-commit-messages.md +1 -0
  49. package/data/prompts/04_code/generate-pr-description.md +1 -0
  50. package/data/prompts/04_code/generate-pr-title.md +1 -0
  51. package/data/prompts/04_code/implement-changes.md +1 -0
  52. package/data/prompts/04_code/implement-tests.md +1 -0
  53. package/data/prompts/04_code/interactive-review.md +1 -0
  54. package/data/prompts/04_code/push-and-create-pr.md +1 -0
  55. package/data/prompts/04_code/stage-and-commit.md +1 -0
  56. package/data/prompts/04_code/validate-prerequisites.md +1 -0
  57. package/data/prompts/04_code/verify-implementation.md +1 -0
  58. package/data/prompts/05_review/assess-code-quality.md +1 -0
  59. package/data/prompts/05_review/assess-constraints.md +1 -0
  60. package/data/prompts/05_review/evaluate-quality-outcomes.md +1 -0
  61. package/data/prompts/05_review/generate-commit-insights.md +1 -0
  62. package/data/prompts/05_review/identify-improvement-areas.md +1 -0
  63. package/data/prompts/05_review/synthesize-plan-assessment.md +1 -0
  64. package/data/prompts/05_review/synthesize-validation-report.md +1 -0
  65. package/data/prompts/05_review/validate-functional-requirements.md +1 -0
  66. package/data/prompts/05_review/validate-maintainability.md +1 -0
  67. package/data/prompts/05_review/validate-performance.md +1 -0
  68. package/data/prompts/05_review/validate-pr-creation.md +1 -0
  69. package/data/prompts/05_review/validate-pr-readiness.md +1 -0
  70. package/data/prompts/05_review/validate-risk-coverage.md +1 -0
  71. package/data/prompts/05_review/validate-step-quality.md +1 -0
  72. package/data/prompts/05_review/validate-technical-feasibility.md +1 -0
  73. package/data/prompts/05_review/validate-test-strategy.md +1 -0
  74. package/data/prompts/05_review/verify-commits.md +1 -0
  75. package/data/prompts/06_test/analyze-results.md +1 -0
  76. package/data/prompts/06_test/analyze-test-infrastructure.md +1 -0
  77. package/data/prompts/06_test/execute-tests.md +1 -0
  78. package/data/prompts/07_documentation/generate-all-domains-parallel.md +1 -0
  79. package/data/prompts/07_documentation/generate-code-review-report.md +1 -0
  80. package/data/prompts/07_documentation/generate-feedback-report.md +1 -0
  81. package/data/prompts/07_documentation/generate-feedback-summary.md +1 -0
  82. package/data/prompts/07_documentation/generate-functional-review-report.md +1 -0
  83. package/data/prompts/07_documentation/generate-prd.md +1 -0
  84. package/data/prompts/07_documentation/review-and-persist-parallel.md +1 -0
  85. package/data/prompts/07_documentation/update-changelog.md +1 -0
  86. package/data/prompts/07_documentation/update-inline-docs.md +1 -0
  87. package/data/prompts/07_documentation/update-knowledge-base.md +1 -0
  88. package/data/prompts/_meta/schema.json +4 -0
  89. package/data/prompts/registry.json +72 -72
  90. package/dist/ast/ast-context.service.d.ts +32 -0
  91. package/dist/ast/ast-context.service.d.ts.map +1 -0
  92. package/dist/ast/ast-context.service.js +220 -0
  93. package/dist/ast/ast-context.service.js.map +1 -0
  94. package/dist/ast/ast-index-watcher.service.d.ts +40 -0
  95. package/dist/ast/ast-index-watcher.service.d.ts.map +1 -0
  96. package/dist/ast/ast-index-watcher.service.js +124 -0
  97. package/dist/ast/ast-index-watcher.service.js.map +1 -0
  98. package/dist/ast/ast-index.service.d.ts +111 -0
  99. package/dist/ast/ast-index.service.d.ts.map +1 -0
  100. package/dist/ast/ast-index.service.js +437 -0
  101. package/dist/ast/ast-index.service.js.map +1 -0
  102. package/dist/ast/ast-parser.service.d.ts +31 -0
  103. package/dist/ast/ast-parser.service.d.ts.map +1 -0
  104. package/dist/ast/ast-parser.service.js +524 -0
  105. package/dist/ast/ast-parser.service.js.map +1 -0
  106. package/dist/ast/ast-query.service.d.ts +34 -0
  107. package/dist/ast/ast-query.service.d.ts.map +1 -0
  108. package/dist/ast/ast-query.service.js +203 -0
  109. package/dist/ast/ast-query.service.js.map +1 -0
  110. package/dist/ast/ast-tools.service.d.ts +39 -0
  111. package/dist/ast/ast-tools.service.d.ts.map +1 -0
  112. package/dist/ast/ast-tools.service.js +187 -0
  113. package/dist/ast/ast-tools.service.js.map +1 -0
  114. package/dist/ast/ast.types.d.ts +195 -0
  115. package/dist/ast/ast.types.d.ts.map +1 -0
  116. package/dist/ast/ast.types.js +8 -0
  117. package/dist/ast/ast.types.js.map +1 -0
  118. package/dist/ast/grammars/grammar-loader.d.ts +23 -0
  119. package/dist/ast/grammars/grammar-loader.d.ts.map +1 -0
  120. package/dist/ast/grammars/grammar-loader.js +28 -0
  121. package/dist/ast/grammars/grammar-loader.js.map +1 -0
  122. package/dist/ast/grammars/language-map.d.ts +28 -0
  123. package/dist/ast/grammars/language-map.d.ts.map +1 -0
  124. package/dist/ast/grammars/language-map.js +65 -0
  125. package/dist/ast/grammars/language-map.js.map +1 -0
  126. package/dist/ast/grammars/tree-sitter-adapter.d.ts +39 -0
  127. package/dist/ast/grammars/tree-sitter-adapter.d.ts.map +1 -0
  128. package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts +84 -0
  129. package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts.map +1 -0
  130. package/dist/ast/grammars/tree-sitter-adapter.interface.js +48 -0
  131. package/dist/ast/grammars/tree-sitter-adapter.interface.js.map +1 -0
  132. package/dist/ast/grammars/tree-sitter-adapter.js +91 -0
  133. package/dist/ast/grammars/tree-sitter-adapter.js.map +1 -0
  134. package/dist/cli/autocomplete.d.ts.map +1 -1
  135. package/dist/cli/autocomplete.js +6 -6
  136. package/dist/cli/autocomplete.js.map +1 -1
  137. package/dist/cli/command-executor.d.ts +10 -0
  138. package/dist/cli/command-executor.d.ts.map +1 -1
  139. package/dist/cli/command-executor.js +85 -11
  140. package/dist/cli/command-executor.js.map +1 -1
  141. package/dist/cli/command-wizard.d.ts.map +1 -1
  142. package/dist/cli/command-wizard.js +8 -2
  143. package/dist/cli/command-wizard.js.map +1 -1
  144. package/dist/cli/commands/config.d.ts.map +1 -1
  145. package/dist/cli/commands/config.js +5 -2
  146. package/dist/cli/commands/config.js.map +1 -1
  147. package/dist/cli/first-run-setup.d.ts.map +1 -1
  148. package/dist/cli/first-run-setup.js +3 -1
  149. package/dist/cli/first-run-setup.js.map +1 -1
  150. package/dist/cli/provider-resolver.d.ts.map +1 -1
  151. package/dist/cli/provider-resolver.js +11 -0
  152. package/dist/cli/provider-resolver.js.map +1 -1
  153. package/dist/config/constants.d.ts +18 -0
  154. package/dist/config/constants.d.ts.map +1 -1
  155. package/dist/config/constants.js +18 -0
  156. package/dist/config/constants.js.map +1 -1
  157. package/dist/config/interactive-wizard.d.ts +7 -0
  158. package/dist/config/interactive-wizard.d.ts.map +1 -1
  159. package/dist/config/interactive-wizard.js +24 -19
  160. package/dist/config/interactive-wizard.js.map +1 -1
  161. package/dist/config/loader.d.ts +5 -0
  162. package/dist/config/loader.d.ts.map +1 -1
  163. package/dist/config/loader.js +24 -0
  164. package/dist/config/loader.js.map +1 -1
  165. package/dist/config/providers.config.d.ts.map +1 -1
  166. package/dist/config/providers.config.js +17 -1
  167. package/dist/config/providers.config.js.map +1 -1
  168. package/dist/config/schema.d.ts +194 -6
  169. package/dist/config/schema.d.ts.map +1 -1
  170. package/dist/config/schema.js +1 -0
  171. package/dist/config/schema.js.map +1 -1
  172. package/dist/config/validation-helpers.d.ts.map +1 -1
  173. package/dist/config/validation-helpers.js +84 -41
  174. package/dist/config/validation-helpers.js.map +1 -1
  175. package/dist/di/container.d.ts +5 -0
  176. package/dist/di/container.d.ts.map +1 -1
  177. package/dist/di/container.js +17 -0
  178. package/dist/di/container.js.map +1 -1
  179. package/dist/executor/message-builder.service.d.ts +2 -0
  180. package/dist/executor/message-builder.service.d.ts.map +1 -1
  181. package/dist/executor/message-builder.service.js +6 -1
  182. package/dist/executor/message-builder.service.js.map +1 -1
  183. package/dist/executor/stage-executor.d.ts +15 -5
  184. package/dist/executor/stage-executor.d.ts.map +1 -1
  185. package/dist/executor/stage-executor.js +126 -22
  186. package/dist/executor/stage-executor.js.map +1 -1
  187. package/dist/executor/stage-output-cache.d.ts +3 -3
  188. package/dist/executor/stage-output-cache.d.ts.map +1 -1
  189. package/dist/executor/stage-output-cache.js +6 -6
  190. package/dist/executor/stage-output-cache.js.map +1 -1
  191. package/dist/executor/tool-execution.service.d.ts +12 -0
  192. package/dist/executor/tool-execution.service.d.ts.map +1 -1
  193. package/dist/executor/tool-execution.service.js +270 -8
  194. package/dist/executor/tool-execution.service.js.map +1 -1
  195. package/dist/executor/tools/search-tools.service.d.ts +1 -1
  196. package/dist/executor/tools/search-tools.service.d.ts.map +1 -1
  197. package/dist/executor/tools/search-tools.service.js +25 -3
  198. package/dist/executor/tools/search-tools.service.js.map +1 -1
  199. package/dist/executor/variables.d.ts.map +1 -1
  200. package/dist/executor/variables.js +5 -0
  201. package/dist/executor/variables.js.map +1 -1
  202. package/dist/llm/model-mapping-registry.d.ts.map +1 -1
  203. package/dist/llm/model-mapping-registry.js +11 -3
  204. package/dist/llm/model-mapping-registry.js.map +1 -1
  205. package/dist/llm/providers/anthropic.provider.d.ts.map +1 -1
  206. package/dist/llm/providers/anthropic.provider.js +5 -1
  207. package/dist/llm/providers/anthropic.provider.js.map +1 -1
  208. package/dist/llm/providers/index.d.ts +2 -0
  209. package/dist/llm/providers/index.d.ts.map +1 -1
  210. package/dist/llm/providers/index.js +2 -0
  211. package/dist/llm/providers/index.js.map +1 -1
  212. package/dist/llm/providers/local.provider.d.ts +27 -0
  213. package/dist/llm/providers/local.provider.d.ts.map +1 -0
  214. package/dist/llm/providers/local.provider.js +179 -0
  215. package/dist/llm/providers/local.provider.js.map +1 -0
  216. package/dist/llm/providers/openai.provider.d.ts.map +1 -1
  217. package/dist/llm/providers/openai.provider.js +1 -0
  218. package/dist/llm/providers/openai.provider.js.map +1 -1
  219. package/dist/lsp/lsp-client-manager.service.d.ts +47 -0
  220. package/dist/lsp/lsp-client-manager.service.d.ts.map +1 -0
  221. package/dist/lsp/lsp-client-manager.service.js +117 -0
  222. package/dist/lsp/lsp-client-manager.service.js.map +1 -0
  223. package/dist/lsp/lsp-client.d.ts +45 -0
  224. package/dist/lsp/lsp-client.d.ts.map +1 -0
  225. package/dist/lsp/lsp-client.js +147 -0
  226. package/dist/lsp/lsp-client.js.map +1 -0
  227. package/dist/lsp/lsp-context-enricher.d.ts +15 -0
  228. package/dist/lsp/lsp-context-enricher.d.ts.map +1 -0
  229. package/dist/lsp/lsp-context-enricher.js +72 -0
  230. package/dist/lsp/lsp-context-enricher.js.map +1 -0
  231. package/dist/lsp/lsp-language-registry.d.ts +24 -0
  232. package/dist/lsp/lsp-language-registry.d.ts.map +1 -0
  233. package/dist/lsp/lsp-language-registry.js +108 -0
  234. package/dist/lsp/lsp-language-registry.js.map +1 -0
  235. package/dist/lsp/lsp-lifecycle.service.d.ts +34 -0
  236. package/dist/lsp/lsp-lifecycle.service.d.ts.map +1 -0
  237. package/dist/lsp/lsp-lifecycle.service.js +57 -0
  238. package/dist/lsp/lsp-lifecycle.service.js.map +1 -0
  239. package/dist/lsp/lsp-protocol-adapter.d.ts +32 -0
  240. package/dist/lsp/lsp-protocol-adapter.d.ts.map +1 -0
  241. package/dist/lsp/lsp-protocol-adapter.interface.d.ts +93 -0
  242. package/dist/lsp/lsp-protocol-adapter.interface.d.ts.map +1 -0
  243. package/dist/lsp/lsp-protocol-adapter.interface.js +50 -0
  244. package/dist/lsp/lsp-protocol-adapter.interface.js.map +1 -0
  245. package/dist/lsp/lsp-protocol-adapter.js +69 -0
  246. package/dist/lsp/lsp-protocol-adapter.js.map +1 -0
  247. package/dist/lsp/lsp-result-cache.d.ts +43 -0
  248. package/dist/lsp/lsp-result-cache.d.ts.map +1 -0
  249. package/dist/lsp/lsp-result-cache.js +87 -0
  250. package/dist/lsp/lsp-result-cache.js.map +1 -0
  251. package/dist/lsp/lsp-tools.service.d.ts +68 -0
  252. package/dist/lsp/lsp-tools.service.d.ts.map +1 -0
  253. package/dist/lsp/lsp-tools.service.js +310 -0
  254. package/dist/lsp/lsp-tools.service.js.map +1 -0
  255. package/dist/lsp/lsp.types.d.ts +122 -0
  256. package/dist/lsp/lsp.types.d.ts.map +1 -0
  257. package/dist/lsp/lsp.types.js +7 -0
  258. package/dist/lsp/lsp.types.js.map +1 -0
  259. package/dist/mcp/mcp-client-manager.service.d.ts.map +1 -1
  260. package/dist/mcp/mcp-client-manager.service.js +32 -6
  261. package/dist/mcp/mcp-client-manager.service.js.map +1 -1
  262. package/dist/mcp/mcp-tool-handler.d.ts.map +1 -1
  263. package/dist/mcp/mcp-tool-handler.js +17 -1
  264. package/dist/mcp/mcp-tool-handler.js.map +1 -1
  265. package/dist/package.json +4 -1
  266. package/dist/security/command-guard.d.ts +58 -0
  267. package/dist/security/command-guard.d.ts.map +1 -0
  268. package/dist/security/command-guard.js +249 -0
  269. package/dist/security/command-guard.js.map +1 -0
  270. package/dist/security/credential-guard.d.ts +42 -0
  271. package/dist/security/credential-guard.d.ts.map +1 -0
  272. package/dist/security/credential-guard.js +181 -0
  273. package/dist/security/credential-guard.js.map +1 -0
  274. package/dist/security/index.d.ts +22 -0
  275. package/dist/security/index.d.ts.map +1 -0
  276. package/dist/security/index.js +17 -0
  277. package/dist/security/index.js.map +1 -0
  278. package/dist/security/prompt-injection-detector.d.ts +55 -0
  279. package/dist/security/prompt-injection-detector.d.ts.map +1 -0
  280. package/dist/security/prompt-injection-detector.js +233 -0
  281. package/dist/security/prompt-injection-detector.js.map +1 -0
  282. package/dist/security/security-event.types.d.ts +19 -0
  283. package/dist/security/security-event.types.d.ts.map +1 -0
  284. package/dist/security/security-event.types.js +13 -0
  285. package/dist/security/security-event.types.js.map +1 -0
  286. package/dist/security/tool-definition-validator.d.ts +55 -0
  287. package/dist/security/tool-definition-validator.d.ts.map +1 -0
  288. package/dist/security/tool-definition-validator.js +221 -0
  289. package/dist/security/tool-definition-validator.js.map +1 -0
  290. package/dist/security/tool-integrity-monitor.d.ts +67 -0
  291. package/dist/security/tool-integrity-monitor.d.ts.map +1 -0
  292. package/dist/security/tool-integrity-monitor.js +155 -0
  293. package/dist/security/tool-integrity-monitor.js.map +1 -0
  294. package/dist/tsconfig.json +3 -0
  295. package/dist/types/command.types.d.ts +15 -1
  296. package/dist/types/command.types.d.ts.map +1 -1
  297. package/dist/types/command.types.js.map +1 -1
  298. package/dist/types/llm.types.d.ts +2 -0
  299. package/dist/types/llm.types.d.ts.map +1 -1
  300. package/dist/types/provider-names.types.d.ts +3 -0
  301. package/dist/types/provider-names.types.d.ts.map +1 -1
  302. package/dist/types/provider-names.types.js +3 -0
  303. package/dist/types/provider-names.types.js.map +1 -1
  304. package/dist/ui/dashboard/detail-panels/spending-panel.d.ts.map +1 -1
  305. package/dist/ui/dashboard/detail-panels/spending-panel.js +8 -3
  306. package/dist/ui/dashboard/detail-panels/spending-panel.js.map +1 -1
  307. package/dist/ui/dashboard/detail-panels/token-usage-panel.d.ts.map +1 -1
  308. package/dist/ui/dashboard/detail-panels/token-usage-panel.js +37 -13
  309. package/dist/ui/dashboard/detail-panels/token-usage-panel.js.map +1 -1
  310. package/dist/ui/dashboard/views/agent-analytics-view.js +1 -1
  311. package/dist/ui/dashboard/views/agent-analytics-view.js.map +1 -1
  312. package/dist/ui/dashboard/views/cache-stats-view.js +1 -1
  313. package/dist/ui/dashboard/views/cache-stats-view.js.map +1 -1
  314. package/dist/ui/dashboard/views/performance-view.js +1 -1
  315. package/dist/ui/dashboard/views/performance-view.js.map +1 -1
  316. package/dist/utils/spending-tracker.d.ts +22 -0
  317. package/dist/utils/spending-tracker.d.ts.map +1 -1
  318. package/dist/utils/spending-tracker.js +33 -1
  319. package/dist/utils/spending-tracker.js.map +1 -1
  320. package/dist/utils/token-estimator.d.ts +21 -5
  321. package/dist/utils/token-estimator.d.ts.map +1 -1
  322. package/dist/utils/token-estimator.js +74 -28
  323. package/dist/utils/token-estimator.js.map +1 -1
  324. package/package.json +4 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Tool Integrity Monitor
3
+ *
4
+ * Detects tool-set drift (rug pull attacks) by fingerprinting MCP server
5
+ * tool definitions and comparing them across connections.
6
+ */
7
+ import type { ExternalMCPTool } from '../types/mcp-client.types.js';
8
+ import { type SecurityEvent } from './security-event.types.js';
9
+ export interface IntegrityCheckResult {
10
+ changed: boolean;
11
+ currentFingerprint: string;
12
+ diff?: ToolSetDiff;
13
+ previousFingerprint?: string;
14
+ }
15
+ export interface ToolSetDiff {
16
+ added: string[];
17
+ changed: string[];
18
+ removed: string[];
19
+ }
20
+ export declare class ToolIntegrityMonitor {
21
+ private events;
22
+ private fingerprints;
23
+ private toolSnapshots;
24
+ /**
25
+ * Compute a SHA-256 fingerprint of a tool set.
26
+ * Sorted by name for deterministic output.
27
+ */
28
+ computeFingerprint(tools: ExternalMCPTool[]): string;
29
+ /**
30
+ * Check integrity of a server's tool set.
31
+ * On first call for a server, stores the fingerprint.
32
+ * On subsequent calls, compares and reports changes.
33
+ */
34
+ checkIntegrity(serverId: string, currentTools: ExternalMCPTool[]): IntegrityCheckResult;
35
+ /**
36
+ * Get the stored fingerprint for a server.
37
+ */
38
+ getFingerprint(serverId: string): string | undefined;
39
+ /**
40
+ * Store a fingerprint explicitly (e.g., from approval cache).
41
+ */
42
+ setFingerprint(serverId: string, fingerprint: string): void;
43
+ /**
44
+ * Remove stored fingerprint (e.g., after approval invalidation).
45
+ */
46
+ clearFingerprint(serverId: string): void;
47
+ /**
48
+ * Get recorded security events.
49
+ */
50
+ getEvents(): SecurityEvent[];
51
+ /**
52
+ * Clear recorded events.
53
+ */
54
+ clearEvents(): void;
55
+ /**
56
+ * Store individual tool fingerprints for diff computation.
57
+ */
58
+ private storeToolSnapshot;
59
+ /**
60
+ * Compute which tools were added, removed, or changed.
61
+ */
62
+ private computeDiff;
63
+ private logEvent;
64
+ }
65
+ export declare function getToolIntegrityMonitor(): ToolIntegrityMonitor;
66
+ export declare function resetToolIntegrityMonitor(): void;
67
+ //# sourceMappingURL=tool-integrity-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-integrity-monitor.d.ts","sourceRoot":"","sources":["../../src/security/tool-integrity-monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAChC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA0C;IAE/D;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM;IAUpD;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,oBAAoB;IA2BvF;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3D;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxC;;OAEG;IACH,SAAS,IAAI,aAAa,EAAE;IAI5B;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,QAAQ;CAkBhB;AAOD,wBAAgB,uBAAuB,IAAI,oBAAoB,CAG9D;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Tool Integrity Monitor
3
+ *
4
+ * Detects tool-set drift (rug pull attacks) by fingerprinting MCP server
5
+ * tool definitions and comparing them across connections.
6
+ */
7
+ import { createHash } from 'crypto';
8
+ import { getLogger } from '../output/logger.js';
9
+ import { createSecurityEvent } from './security-event.types.js';
10
+ export class ToolIntegrityMonitor {
11
+ events = [];
12
+ fingerprints = new Map();
13
+ toolSnapshots = new Map();
14
+ /**
15
+ * Compute a SHA-256 fingerprint of a tool set.
16
+ * Sorted by name for deterministic output.
17
+ */
18
+ computeFingerprint(tools) {
19
+ const sorted = [...tools].sort((a, b) => a.name.localeCompare(b.name));
20
+ const data = sorted.map((t) => ({
21
+ description: t.description,
22
+ inputSchema: t.inputSchema,
23
+ name: t.name
24
+ }));
25
+ return createHash('sha256').update(JSON.stringify(data)).digest('hex');
26
+ }
27
+ /**
28
+ * Check integrity of a server's tool set.
29
+ * On first call for a server, stores the fingerprint.
30
+ * On subsequent calls, compares and reports changes.
31
+ */
32
+ checkIntegrity(serverId, currentTools) {
33
+ const currentFingerprint = this.computeFingerprint(currentTools);
34
+ const previousFingerprint = this.fingerprints.get(serverId);
35
+ if (previousFingerprint === undefined) {
36
+ // First connection — store baseline
37
+ this.fingerprints.set(serverId, currentFingerprint);
38
+ this.storeToolSnapshot(serverId, currentTools);
39
+ return { changed: false, currentFingerprint };
40
+ }
41
+ if (currentFingerprint === previousFingerprint) {
42
+ return { changed: false, currentFingerprint, previousFingerprint };
43
+ }
44
+ // Tools changed — compute diff
45
+ const diff = this.computeDiff(serverId, currentTools);
46
+ this.logEvent(serverId, previousFingerprint, currentFingerprint, diff);
47
+ // Update stored state
48
+ this.fingerprints.set(serverId, currentFingerprint);
49
+ this.storeToolSnapshot(serverId, currentTools);
50
+ return { changed: true, currentFingerprint, diff, previousFingerprint };
51
+ }
52
+ /**
53
+ * Get the stored fingerprint for a server.
54
+ */
55
+ getFingerprint(serverId) {
56
+ return this.fingerprints.get(serverId);
57
+ }
58
+ /**
59
+ * Store a fingerprint explicitly (e.g., from approval cache).
60
+ */
61
+ setFingerprint(serverId, fingerprint) {
62
+ this.fingerprints.set(serverId, fingerprint);
63
+ }
64
+ /**
65
+ * Remove stored fingerprint (e.g., after approval invalidation).
66
+ */
67
+ clearFingerprint(serverId) {
68
+ this.fingerprints.delete(serverId);
69
+ this.toolSnapshots.delete(serverId);
70
+ }
71
+ /**
72
+ * Get recorded security events.
73
+ */
74
+ getEvents() {
75
+ return [...this.events];
76
+ }
77
+ /**
78
+ * Clear recorded events.
79
+ */
80
+ clearEvents() {
81
+ this.events = [];
82
+ }
83
+ /**
84
+ * Store individual tool fingerprints for diff computation.
85
+ */
86
+ storeToolSnapshot(serverId, tools) {
87
+ const snapshot = new Map();
88
+ for (const tool of tools) {
89
+ const hash = createHash('sha256')
90
+ .update(JSON.stringify({ description: tool.description, inputSchema: tool.inputSchema }))
91
+ .digest('hex');
92
+ snapshot.set(tool.name, hash);
93
+ }
94
+ this.toolSnapshots.set(serverId, snapshot);
95
+ }
96
+ /**
97
+ * Compute which tools were added, removed, or changed.
98
+ */
99
+ computeDiff(serverId, currentTools) {
100
+ const previousSnapshot = this.toolSnapshots.get(serverId) ?? new Map();
101
+ const currentSnapshot = new Map();
102
+ for (const tool of currentTools) {
103
+ const hash = createHash('sha256')
104
+ .update(JSON.stringify({ description: tool.description, inputSchema: tool.inputSchema }))
105
+ .digest('hex');
106
+ currentSnapshot.set(tool.name, hash);
107
+ }
108
+ const added = [];
109
+ const removed = [];
110
+ const changed = [];
111
+ for (const [name, hash] of currentSnapshot) {
112
+ if (!previousSnapshot.has(name)) {
113
+ added.push(name);
114
+ }
115
+ else if (previousSnapshot.get(name) !== hash) {
116
+ changed.push(name);
117
+ }
118
+ }
119
+ for (const name of previousSnapshot.keys()) {
120
+ if (!currentSnapshot.has(name)) {
121
+ removed.push(name);
122
+ }
123
+ }
124
+ return { added, changed, removed };
125
+ }
126
+ logEvent(serverId, previousFingerprint, currentFingerprint, diff) {
127
+ const event = createSecurityEvent('tool_set_changed', 'critical', {
128
+ added: diff.added,
129
+ changed: diff.changed,
130
+ currentFingerprint,
131
+ previousFingerprint,
132
+ removed: diff.removed,
133
+ serverId
134
+ });
135
+ this.events.push(event);
136
+ const logger = getLogger();
137
+ logger.warn(`[Security] MCP tool set changed for ${serverId}`, {
138
+ added: diff.added,
139
+ changed: diff.changed,
140
+ removed: diff.removed
141
+ });
142
+ }
143
+ }
144
+ /**
145
+ * Singleton instance
146
+ */
147
+ let instance = null;
148
+ export function getToolIntegrityMonitor() {
149
+ instance ??= new ToolIntegrityMonitor();
150
+ return instance;
151
+ }
152
+ export function resetToolIntegrityMonitor() {
153
+ instance = null;
154
+ }
155
+ //# sourceMappingURL=tool-integrity-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-integrity-monitor.js","sourceRoot":"","sources":["../../src/security/tool-integrity-monitor.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,15 @@
3
3
  "baseUrl": ".",
4
4
  "paths": {
5
5
  "src/*": ["./*"],
6
+ "ast/*": ["./ast/*"],
6
7
  "batch/*": ["./batch/*"],
8
+ "security/*": ["./security/*"],
7
9
  "cleanup/*": ["./cleanup/*"],
8
10
  "cli/*": ["./cli/*"],
9
11
  "config/*": ["./config/*"],
10
12
  "executor/*": ["./executor/*"],
11
13
  "llm/*": ["./llm/*"],
14
+ "lsp/*": ["./lsp/*"],
12
15
  "mcp/*": ["./mcp/*"],
13
16
  "output/*": ["./output/*"],
14
17
  "session/*": ["./session/*"],
@@ -17,7 +17,7 @@ export type AIModel = 'gpt-5-codex' | 'gpt-5-thinking-high' | ModelNameValue;
17
17
  /**
18
18
  * Built-in tools available to commands
19
19
  */
20
- export type BuiltInTool = 'codebase_search' | 'delete_file' | 'glob_file_search' | 'grep' | 'list_dir' | 'query_session' | 'read_file' | 'run_terminal_cmd' | 'search_replace' | 'web_search' | 'write';
20
+ export type BuiltInTool = 'codebase_search' | 'delete_file' | 'file_outline' | 'find_references' | 'get_diagnostics' | 'get_type_info' | 'glob_file_search' | 'goto_definition' | 'grep' | 'hover_info' | 'list_dir' | 'query_session' | 'read_file' | 'request_context' | 'run_terminal_cmd' | 'search_replace' | 'smart_context' | 'symbol_search' | 'web_search' | 'write';
21
21
  /**
22
22
  * External MCP tools available to commands.
23
23
  * Derived from external-mcp.json registry for maintainability.
@@ -123,6 +123,13 @@ export interface IsolatedExecutionOptions {
123
123
  */
124
124
  forceRequired?: boolean;
125
125
  }
126
+ /**
127
+ * Controls how tool failures affect stage success.
128
+ * - 'strict': all failures count toward hard-stop (default for code/test/refactor)
129
+ * - 'tolerant': only fatal (mutating) failures count toward hard-stop (default for context/review)
130
+ * - 'lenient': never hard-stop; stage always completes (possibly degraded)
131
+ */
132
+ export type FailurePolicy = 'lenient' | 'strict' | 'tolerant';
126
133
  export type MergeStrategy = 'conditional' | 'parallel' | 'sequential' | 'waterfall';
127
134
  /**
128
135
  * Extract server ID from MCP tool name
@@ -139,6 +146,11 @@ export interface PipelineStage {
139
146
  /** Cache configuration for this stage */
140
147
  cache?: PipelineStageCacheConfig;
141
148
  conditional?: string;
149
+ /**
150
+ * Controls how tool failures affect stage success.
151
+ * Defaults vary by stage type — see DEFAULT_FAILURE_POLICY in stage-executor.ts.
152
+ */
153
+ failure_policy?: FailurePolicy;
142
154
  inputs?: Record<string, string>;
143
155
  /**
144
156
  * Maximum number of tool-call failures before hard-stopping the stage.
@@ -190,6 +202,8 @@ export interface StageOutput {
190
202
  duration_ms: number;
191
203
  error?: string;
192
204
  metadata?: Record<string, unknown>;
205
+ /** The actual model name used by the provider for this stage */
206
+ model?: string;
193
207
  outputs: Record<string, unknown>;
194
208
  prompt: string;
195
209
  stage: string;
@@ -1 +1 @@
1
- {"version":3,"file":"command.types.d.ts","sourceRoot":"","sources":["../../src/types/command.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.types.d.ts","sourceRoot":"","sources":["../../src/types/command.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.types.js","sourceRoot":"","sources":["../../src/types/command.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAqGD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"command.types.js","sourceRoot":"","sources":["../../src/types/command.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiDH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AA6GD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -16,6 +16,8 @@ export interface LLMCompletionOptions {
16
16
  export interface LLMCompletionResult {
17
17
  content: string;
18
18
  finish_reason?: string;
19
+ /** The actual model name returned by the provider (may differ from the requested model) */
20
+ model?: string;
19
21
  role: LLMRole;
20
22
  tool_calls?: LLMToolCall[];
21
23
  usage?: LLMUsage;
@@ -1 +1 @@
1
- {"version":3,"file":"llm.types.d.ts","sourceRoot":"","sources":["../../src/types/llm.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.types.d.ts","sourceRoot":"","sources":["../../src/types/llm.types.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare enum ProviderName {
12
12
  ANTHROPIC = "anthropic",
13
13
  CURSOR = "cursor",
14
14
  GOOGLE = "google",
15
+ LOCAL = "local",
15
16
  MOONSHOT = "moonshot",
16
17
  OPENAI = "openai",
17
18
  XAI = "xai"
@@ -26,8 +27,10 @@ export declare const ModelName: {
26
27
  readonly CLAUDE_OPUS_4: "claude-opus-4";
27
28
  readonly CLAUDE_OPUS_4_1: "claude-opus-4.1";
28
29
  readonly CLAUDE_OPUS_4_5: "claude-opus-4.5";
30
+ readonly CLAUDE_OPUS_4_6: "claude-opus-4.6";
29
31
  readonly CLAUDE_SONNET_4: "claude-sonnet-4";
30
32
  readonly CLAUDE_SONNET_4_5: "claude-sonnet-4.5";
33
+ readonly CLAUDE_SONNET_4_6: "claude-sonnet-4.6";
31
34
  readonly CURSOR_CLAUDE_3_5: "cursor-claude-3.5";
32
35
  readonly CURSOR_GPT_4: "cursor-gpt-4";
33
36
  readonly CURSOR_SONNET_4_5: "cursor-sonnet-4.5";
@@ -1 +1 @@
1
- {"version":3,"file":"provider-names.types.d.ts","sourceRoot":"","sources":["../../src/types/provider-names.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,oBAAY,YAAY;IACvB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;CACX;AAED;;;GAGG;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"provider-names.types.d.ts","sourceRoot":"","sources":["../../src/types/provider-names.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,oBAAY,YAAY;IACvB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;CACX;AAED;;;GAGG;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
@@ -13,6 +13,7 @@ export var ProviderName;
13
13
  ProviderName["ANTHROPIC"] = "anthropic";
14
14
  ProviderName["CURSOR"] = "cursor";
15
15
  ProviderName["GOOGLE"] = "google";
16
+ ProviderName["LOCAL"] = "local";
16
17
  ProviderName["MOONSHOT"] = "moonshot";
17
18
  ProviderName["OPENAI"] = "openai";
18
19
  ProviderName["XAI"] = "xai";
@@ -29,8 +30,10 @@ export const ModelName = {
29
30
  CLAUDE_OPUS_4: 'claude-opus-4',
30
31
  CLAUDE_OPUS_4_1: 'claude-opus-4.1',
31
32
  CLAUDE_OPUS_4_5: 'claude-opus-4.5',
33
+ CLAUDE_OPUS_4_6: 'claude-opus-4.6',
32
34
  CLAUDE_SONNET_4: 'claude-sonnet-4',
33
35
  CLAUDE_SONNET_4_5: 'claude-sonnet-4.5',
36
+ CLAUDE_SONNET_4_6: 'claude-sonnet-4.6',
34
37
  // Cursor models
35
38
  CURSOR_CLAUDE_3_5: 'cursor-claude-3.5',
36
39
  CURSOR_GPT_4: 'cursor-gpt-4',
@@ -1 +1 @@
1
- {"version":3,"file":"provider-names.types.js","sourceRoot":"","sources":["../../src/types/provider-names.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACvB,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,qCAAqB,CAAA;IACrB,iCAAiB,CAAA;IACjB,2BAAW,CAAA;AACZ,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB;AAED;;;GAGG;AACH,sIAAsI;AACtI,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,mBAAmB;IACnB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IAEtC,gBAAgB;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IAEtC,gBAAgB;IAChB,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IAEpB,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAElB,gBAAgB;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAElB,aAAa;IACb,2BAA2B,EAAE,6BAA6B;IAC1D,uBAAuB,EAAE,yBAAyB;IAClD,yBAAyB,EAAE,2BAA2B;IACtD,qBAAqB,EAAE,uBAAuB;IAC9C,SAAS,EAAE,WAAW;CACb,CAAC"}
1
+ {"version":3,"file":"provider-names.types.js","sourceRoot":"","sources":["../../src/types/provider-names.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAN,IAAY,YAQX;AARD,WAAY,YAAY;IACvB,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,qCAAqB,CAAA;IACrB,iCAAiB,CAAA;IACjB,2BAAW,CAAA;AACZ,CAAC,EARW,YAAY,KAAZ,YAAY,QAQvB;AAED;;;GAGG;AACH,sIAAsI;AACtI,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,mBAAmB;IACnB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IAEtC,gBAAgB;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IAEtC,gBAAgB;IAChB,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IAEpB,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAElB,gBAAgB;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAElB,aAAa;IACb,2BAA2B,EAAE,6BAA6B;IAC1D,uBAAuB,EAAE,yBAAyB;IAClD,yBAAyB,EAAE,2BAA2B;IACtD,qBAAqB,EAAE,uBAAuB;IAC9C,SAAS,EAAE,WAAW;CACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spending-panel.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/spending-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAWnD,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgFlF"}
1
+ {"version":3,"file":"spending-panel.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/spending-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAWnD,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAoHlF"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getTUIAdapter } from '../../tui-adapter.interface.js';
3
3
  import { formatNumber } from '../../../utils/number-format.js';
4
4
  import { getSpendingTracker } from '../../../utils/spending-tracker.js';
@@ -16,13 +16,18 @@ export function SpendingPanel({ session }) {
16
16
  const maxCost = byEndpoint.length > 0 ? Math.max(...byEndpoint.map((e) => e.totalCostUsd)) : 1;
17
17
  // Top 5 most expensive in this session
18
18
  const topExpensive = tracker.getExpensive(5, { since: sessionStart });
19
- return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "yellow", children: "Spending" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Session cost: " }), _jsxs(Text, { bold: true, color: "yellow", children: ["$", totals.totalCostUsd.toFixed(4)] }), totals.cacheSavingsUsd > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " Cache saved: " }), _jsxs(Text, { bold: true, color: "green", children: ["$", totals.cacheSavingsUsd.toFixed(4)] })] }))] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Requests: " }), _jsx(Text, { color: "cyan", children: totals.requestCount }), _jsx(Text, { dimColor: true, children: " Tokens: " }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalTokens) })] })] }), byEndpoint.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Cost by Command:" }), byEndpoint.slice(0, 8).map((e, index) => {
19
+ return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "yellow", children: "Spending" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Session cost: " }), _jsxs(Text, { bold: true, color: "yellow", children: ["$", totals.totalCostUsd.toFixed(4)] }), totals.hasUnknownModelPricing && _jsx(Text, { color: "red", children: " (estimated \u2014 model pricing unknown)" })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Requests: " }), _jsx(Text, { color: "cyan", children: totals.requestCount }), _jsx(Text, { dimColor: true, children: " Tokens: " }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalTokens) })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Cost Breakdown:" }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Input: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalInputTokens).padStart(7) }), _jsx(Text, { dimColor: true, children: " tok " }), _jsxs(Text, { color: "yellow", children: ["$", totals.totalInputCostUsd.toFixed(4)] })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Output: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalOutputTokens).padStart(7) }), _jsx(Text, { dimColor: true, children: " tok " }), _jsxs(Text, { color: "yellow", children: ["$", totals.totalOutputCostUsd.toFixed(4)] })] }), totals.totalCacheReadTokens > 0 && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Cache read: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalCacheReadTokens).padStart(7) }), _jsx(Text, { dimColor: true, children: " tok " }), _jsxs(Text, { color: "yellow", children: ["$", totals.totalCacheReadCostUsd.toFixed(4)] }), totals.cacheSavingsUsd > 0 && _jsxs(Text, { color: "green", children: [" (saved $", totals.cacheSavingsUsd.toFixed(4), ")"] })] })), totals.totalCacheWriteTokens > 0 && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Cache write: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalCacheWriteTokens).padStart(7) }), _jsx(Text, { dimColor: true, children: " tok " }), _jsxs(Text, { color: "yellow", children: ["$", totals.totalCacheWriteCostUsd.toFixed(4)] })] }))] })] }), byEndpoint.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Cost by Command:" }), byEndpoint.slice(0, 8).map((e, index) => {
20
20
  const barWidth = 20;
21
21
  const filled = Math.max(1, Math.floor((e.totalCostUsd / maxCost) * barWidth));
22
22
  return (_jsxs(Box, { children: [_jsxs(Text, { children: [" ", (e.command.length > 14 ? e.command.substring(0, 11) + '...' : e.command).padEnd(14)] }), _jsx(Text, { color: "yellow", children: '█'.repeat(filled) }), _jsx(Text, { dimColor: true, children: '░'.repeat(barWidth - filled) }), _jsxs(Text, { children: [" $", e.totalCostUsd.toFixed(4)] })] }, index));
23
23
  })] })), topExpensive.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Top Expensive Requests:" }), topExpensive.map((r, index) => {
24
24
  const date = new Date(r.timestamp).toLocaleTimeString();
25
- return (_jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [index + 1, ". "] }), _jsx(Text, { color: "cyan", children: r.command.padEnd(12) }), _jsxs(Text, { dimColor: true, children: [" ", date, " "] }), _jsxs(Text, { color: "yellow", children: ["$", r.costUsd.toFixed(4)] }), _jsxs(Text, { dimColor: true, children: [" ", formatNumber(r.totalTokens), " tok"] })] }, index));
25
+ const tokenParts = [`in:${formatNumber(r.promptTokens)}`, `out:${formatNumber(r.completionTokens)}`];
26
+ if (r.cacheReadTokens > 0)
27
+ tokenParts.push(`cr:${formatNumber(r.cacheReadTokens)}`);
28
+ if (r.cacheWriteTokens > 0)
29
+ tokenParts.push(`cw:${formatNumber(r.cacheWriteTokens)}`);
30
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [index + 1, ". "] }), _jsx(Text, { color: "cyan", children: r.command.padEnd(12) }), _jsxs(Text, { dimColor: true, children: [" ", date, " "] }), _jsxs(Text, { color: "yellow", children: ["$", r.costUsd.toFixed(4)] }), (r.unknownModelPricing ?? false) && _jsx(Text, { color: "red", children: " ~est" })] }), _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [' ', tokenParts.join(' ')] }) })] }, index));
26
31
  })] })), records.length === 0 && _jsx(Text, { dimColor: true, children: "No spending recorded this session" })] }));
27
32
  }
28
33
  //# sourceMappingURL=spending-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spending-panel.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/spending-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spending-panel.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/spending-panel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-usage-panel.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/token-usage-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAWnD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkEpF"}
1
+ {"version":3,"file":"token-usage-panel.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/token-usage-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAanD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmEpF"}
@@ -1,23 +1,47 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getModelContextWindow } from '../../../config/providers.config.js';
2
3
  import { Sparkline } from '../../../exploration/dashboard-metrics.js';
3
4
  import { getTUIAdapter } from '../../tui-adapter.interface.js';
4
5
  import { formatNumber } from '../../../utils/number-format.js';
6
+ import { getSpendingTracker } from '../../../utils/spending-tracker.js';
5
7
  const tui = getTUIAdapter();
6
8
  // eslint-disable-next-line @typescript-eslint/naming-convention -- Box and Text are React components which require PascalCase
7
9
  const { Box, Text } = tui;
8
10
  // eslint-disable-next-line @typescript-eslint/naming-convention -- React components must use PascalCase
9
11
  export function TokenUsagePanel({ session }) {
10
- const commandsWithTokens = session.commands.filter((cmd) => cmd.tokens_used != null && cmd.tokens_used > 0);
11
- const totalTokens = session.total_tokens_used ?? 0;
12
- const tokenValues = commandsWithTokens.map((cmd) => cmd.tokens_used);
13
- const maxTokens = tokenValues.length > 0 ? Math.max(...tokenValues) : 1;
14
- return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Token Usage" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Total Tokens: " }), _jsx(Text, { bold: true, color: "cyan", children: formatNumber(totalTokens) }), session.context_window && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " Context: " }), _jsxs(Text, { bold: true, color: session.context_window.utilization_percent > 80 ? 'red' : 'green', children: [session.context_window.utilization_percent.toFixed(1), "%"] }), _jsx(Text, { dimColor: true, children: " Model: " }), _jsx(Text, { color: "cyan", children: session.context_window.model })] }))] }) }), commandsWithTokens.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Per-Command Usage:" }), commandsWithTokens
15
- .slice(-10)
16
- .reverse()
17
- .map((cmd, index) => {
18
- const barWidth = 20;
19
- const filled = Math.max(1, Math.floor((cmd.tokens_used / maxTokens) * barWidth));
20
- return (_jsxs(Box, { children: [_jsx(Text, { color: cmd.success ? 'green' : 'red', children: cmd.success ? '✓' : '✗' }), _jsxs(Text, { children: [' ', (cmd.command.length > 15 ? cmd.command.substring(0, 12) + '...' : cmd.command).padEnd(15)] }), _jsx(Text, { color: "cyan", children: '█'.repeat(filled) }), _jsx(Text, { dimColor: true, children: '░'.repeat(barWidth - filled) }), _jsxs(Text, { children: [" ", formatNumber(cmd.tokens_used)] })] }, index));
21
- })] })), tokenValues.length > 1 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Token Usage Trend:" }), _jsx(Sparkline, { color: "cyan", data: tokenValues, height: 3, width: 30 })] })), commandsWithTokens.length === 0 && _jsx(Text, { dimColor: true, children: "No token usage recorded" })] }));
12
+ const tracker = getSpendingTracker();
13
+ const sessionStart = session.created_at;
14
+ const totals = tracker.getTotals({ since: sessionStart });
15
+ const byEndpoint = tracker.getByEndpoint({ since: sessionStart });
16
+ const maxTokens = Math.max(1, ...byEndpoint.map((e) => e.totalTokens));
17
+ // Most recent record for model + context window info
18
+ const records = tracker.getRecords({ since: sessionStart });
19
+ const latestRecord = records.at(-1);
20
+ const model = latestRecord?.model;
21
+ const latestPromptTokens = latestRecord?.promptTokens ?? 0;
22
+ const { contextWindowSize, utilizationPercent } = getContextInfo(model, latestPromptTokens);
23
+ // Trend data: tokens per request in chronological order
24
+ const tokenTrend = records.map((r) => r.totalTokens);
25
+ return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Token Usage" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Total Tokens: " }), _jsx(Text, { bold: true, color: "cyan", children: formatNumber(totals.totalTokens) }), model && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " Model: " }), _jsx(Text, { color: "cyan", children: model })] })), contextWindowSize > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " Context: " }), _jsxs(Text, { bold: true, color: utilizationPercent > 80 ? 'red' : 'green', children: [utilizationPercent.toFixed(1), "%"] }), _jsxs(Text, { dimColor: true, children: [" of ", formatNumber(contextWindowSize)] })] }))] }), _jsx(TokenBreakdown, { totals: totals })] }), byEndpoint.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Per-Command Usage:" }), byEndpoint.slice(0, 10).map((e, index) => (_jsx(CommandRow, { e: e, maxTokens: maxTokens }, index)))] })), tokenTrend.length > 1 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Token Usage Trend:" }), _jsx(Sparkline, { color: "cyan", data: tokenTrend, height: 3, width: 30 })] })), totals.requestCount === 0 && _jsx(Text, { dimColor: true, children: "No token usage recorded" })] }));
26
+ }
27
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- React component must use PascalCase
28
+ function CommandRow({ e, maxTokens }) {
29
+ const barWidth = 20;
30
+ const filled = Math.max(1, Math.floor((e.totalTokens / maxTokens) * barWidth));
31
+ const commandLabel = e.command.length > 15 ? `${e.command.substring(0, 12)}...` : e.command;
32
+ const cacheReadStr = e.totalCacheReadTokens > 0 ? ` cr:${formatNumber(e.totalCacheReadTokens)}` : '';
33
+ const cacheWriteStr = e.totalCacheWriteTokens > 0 ? ` cw:${formatNumber(e.totalCacheWriteTokens)}` : '';
34
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { children: [" ", commandLabel.padEnd(15)] }), _jsx(Text, { color: "cyan", children: '█'.repeat(filled) }), _jsx(Text, { dimColor: true, children: '░'.repeat(barWidth - filled) }), _jsxs(Text, { children: [" ", formatNumber(e.totalTokens)] })] }), _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [' ', `in:${formatNumber(e.totalInputTokens)} out:${formatNumber(e.totalOutputTokens)}${cacheReadStr}${cacheWriteStr}`] }) })] }));
35
+ }
36
+ function getContextInfo(model, latestPromptTokens) {
37
+ if (!model)
38
+ return { contextWindowSize: 0, utilizationPercent: 0 };
39
+ const contextWindowSize = getModelContextWindow(model);
40
+ const utilizationPercent = contextWindowSize > 0 ? Math.min(100, (latestPromptTokens / contextWindowSize) * 100) : 0;
41
+ return { contextWindowSize, utilizationPercent };
42
+ }
43
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- React component must use PascalCase
44
+ function TokenBreakdown({ totals }) {
45
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Token Breakdown:" }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Input: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalInputTokens).padStart(7) })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Output: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalOutputTokens).padStart(7) })] }), totals.totalCacheReadTokens > 0 && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Cache read: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalCacheReadTokens).padStart(7) })] })), totals.totalCacheWriteTokens > 0 && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: ' Cache write: ' }), _jsx(Text, { color: "cyan", children: formatNumber(totals.totalCacheWriteTokens).padStart(7) })] }))] }));
22
46
  }
23
47
  //# sourceMappingURL=token-usage-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-usage-panel.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/token-usage-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-usage-panel.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/token-usage-panel.tsx"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ const { Box, Text } = tui;
6
6
  // eslint-disable-next-line @typescript-eslint/naming-convention -- React components must use PascalCase
7
7
  export function AgentAnalyticsView({ data }) {
8
8
  if (!data.metrics || data.metrics.totalSelections === 0) {
9
- return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Agent Analytics" }), _jsx(Text, { dimColor: true, children: "No agent selection events recorded yet." })] }));
9
+ return (_jsxs(Box, { borderColor: "white", borderStyle: "round", flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Agent Analytics" }), _jsx(Text, { dimColor: true, children: "No events \u2014 agent analytics populate when dynamic agent selection is active" })] }));
10
10
  }
11
11
  const { metrics, successMetrics } = data;
12
12
  return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SummaryHeader, { metrics: metrics }), _jsxs(Box, { flexGrow: 1, marginTop: 1, children: [_jsxs(Box, { flexDirection: "column", width: "50%", children: [_jsxs(Box, { borderColor: "green", borderStyle: "round", flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "green", children: "Agent Distribution" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: renderDistribution(metrics.agentDistribution, 'green') })] }), Object.keys(metrics.commandDistribution).length > 0 && (_jsxs(Box, { borderColor: "yellow", borderStyle: "round", flexDirection: "column", marginTop: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "yellow", children: "Command Distribution" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: renderDistribution(metrics.commandDistribution, 'yellow') })] }))] }), _jsxs(Box, { flexDirection: "column", marginLeft: 1, width: "50%", children: [Object.keys(metrics.reasonDistribution).length > 0 && (_jsxs(Box, { borderColor: "magenta", borderStyle: "round", flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "magenta", children: "Selection Reasons" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: renderDistribution(metrics.reasonDistribution, 'magenta') })] })), successMetrics && (_jsxs(Box, { borderColor: "cyan", borderStyle: "round", flexDirection: "column", marginTop: 1, paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Success Metrics (7d)" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Accuracy: " }), _jsxs(Text, { bold: true, color: rateColor(successMetrics.accuracy, 0.85), children: [(successMetrics.accuracy * 100).toFixed(1), "%"] })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Completion: " }), _jsxs(Text, { bold: true, color: rateColor(successMetrics.completionRate, 0.85), children: [(successMetrics.completionRate * 100).toFixed(1), "%"] })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Satisfaction: " }), _jsxs(Text, { bold: true, color: rateColor(successMetrics.userSatisfaction, 0.8), children: [(successMetrics.userSatisfaction * 100).toFixed(1), "%"] })] })] }), successMetrics.insights.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Insights:" }), successMetrics.insights.map((insight, index) => (_jsx(Text, { children: insight }, index)))] }))] }))] })] })] }));