@windagency/valora 2.1.4 → 2.2.1

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 (138) hide show
  1. package/README.md +2 -2
  2. package/data/commands/_meta/schema.json +5 -0
  3. package/data/commands/create-backlog.md +4 -0
  4. package/data/commands/create-prd.md +3 -0
  5. package/data/commands/generate-docs.md +4 -0
  6. package/data/commands/implement.md +2 -0
  7. package/data/commands/plan-architecture.md +1 -0
  8. package/data/commands/plan-implementation.md +2 -0
  9. package/data/commands/refine-specs.md +2 -0
  10. package/data/commands/refine-task.md +2 -0
  11. package/data/commands/review-code.md +1 -0
  12. package/data/commands/review-functional.md +1 -0
  13. package/data/commands/review-plan.md +5 -0
  14. package/dist/batch/batch-eligibility.d.ts +17 -0
  15. package/dist/batch/batch-eligibility.d.ts.map +1 -0
  16. package/dist/batch/batch-eligibility.js +22 -0
  17. package/dist/batch/batch-eligibility.js.map +1 -0
  18. package/dist/batch/batch-orchestrator.d.ts +35 -0
  19. package/dist/batch/batch-orchestrator.d.ts.map +1 -0
  20. package/dist/batch/batch-orchestrator.js +121 -0
  21. package/dist/batch/batch-orchestrator.js.map +1 -0
  22. package/dist/batch/batch-provider.interface.d.ts +14 -0
  23. package/dist/batch/batch-provider.interface.d.ts.map +1 -0
  24. package/dist/batch/batch-provider.interface.js +9 -0
  25. package/dist/batch/batch-provider.interface.js.map +1 -0
  26. package/dist/batch/batch-session.d.ts +29 -0
  27. package/dist/batch/batch-session.d.ts.map +1 -0
  28. package/dist/batch/batch-session.js +91 -0
  29. package/dist/batch/batch-session.js.map +1 -0
  30. package/dist/batch/batch.types.d.ts +48 -0
  31. package/dist/batch/batch.types.d.ts.map +1 -0
  32. package/dist/batch/batch.types.js +5 -0
  33. package/dist/batch/batch.types.js.map +1 -0
  34. package/dist/batch/providers/anthropic.batch-provider.d.ts +33 -0
  35. package/dist/batch/providers/anthropic.batch-provider.d.ts.map +1 -0
  36. package/dist/batch/providers/anthropic.batch-provider.js +106 -0
  37. package/dist/batch/providers/anthropic.batch-provider.js.map +1 -0
  38. package/dist/batch/providers/google.batch-provider.d.ts +32 -0
  39. package/dist/batch/providers/google.batch-provider.d.ts.map +1 -0
  40. package/dist/batch/providers/google.batch-provider.js +41 -0
  41. package/dist/batch/providers/google.batch-provider.js.map +1 -0
  42. package/dist/batch/providers/openai.batch-provider.d.ts +32 -0
  43. package/dist/batch/providers/openai.batch-provider.d.ts.map +1 -0
  44. package/dist/batch/providers/openai.batch-provider.js +151 -0
  45. package/dist/batch/providers/openai.batch-provider.js.map +1 -0
  46. package/dist/cli/command-executor.d.ts +5 -0
  47. package/dist/cli/command-executor.d.ts.map +1 -1
  48. package/dist/cli/command-executor.js +63 -11
  49. package/dist/cli/command-executor.js.map +1 -1
  50. package/dist/cli/commands/batch.command.d.ts +14 -0
  51. package/dist/cli/commands/batch.command.d.ts.map +1 -0
  52. package/dist/cli/commands/batch.command.js +174 -0
  53. package/dist/cli/commands/batch.command.js.map +1 -0
  54. package/dist/cli/commands/monitoring.d.ts.map +1 -1
  55. package/dist/cli/commands/monitoring.js +119 -0
  56. package/dist/cli/commands/monitoring.js.map +1 -1
  57. package/dist/cli/flags.d.ts +1 -0
  58. package/dist/cli/flags.d.ts.map +1 -1
  59. package/dist/cli/flags.js +1 -0
  60. package/dist/cli/flags.js.map +1 -1
  61. package/dist/cli/index.js +4 -0
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/result-presenter.d.ts +6 -2
  64. package/dist/cli/result-presenter.d.ts.map +1 -1
  65. package/dist/cli/result-presenter.js +22 -12
  66. package/dist/cli/result-presenter.js.map +1 -1
  67. package/dist/cli/types/cli-options.types.d.ts +1 -0
  68. package/dist/cli/types/cli-options.types.d.ts.map +1 -1
  69. package/dist/config/schema.d.ts +87 -12
  70. package/dist/config/schema.d.ts.map +1 -1
  71. package/dist/config/schema.js +1 -0
  72. package/dist/config/schema.js.map +1 -1
  73. package/dist/executor/stage-executor.d.ts +26 -5
  74. package/dist/executor/stage-executor.d.ts.map +1 -1
  75. package/dist/executor/stage-executor.js +180 -14
  76. package/dist/executor/stage-executor.js.map +1 -1
  77. package/dist/executor/tool-execution.service.d.ts +10 -0
  78. package/dist/executor/tool-execution.service.d.ts.map +1 -1
  79. package/dist/executor/tool-execution.service.js +40 -6
  80. package/dist/executor/tool-execution.service.js.map +1 -1
  81. package/dist/executor/variable-resolution.service.d.ts.map +1 -1
  82. package/dist/executor/variable-resolution.service.js +1 -2
  83. package/dist/executor/variable-resolution.service.js.map +1 -1
  84. package/dist/executor/variables.d.ts +1 -5
  85. package/dist/executor/variables.d.ts.map +1 -1
  86. package/dist/executor/variables.js +0 -21
  87. package/dist/executor/variables.js.map +1 -1
  88. package/dist/llm/providers/anthropic.provider.d.ts +30 -1
  89. package/dist/llm/providers/anthropic.provider.d.ts.map +1 -1
  90. package/dist/llm/providers/anthropic.provider.js +163 -6
  91. package/dist/llm/providers/anthropic.provider.js.map +1 -1
  92. package/dist/llm/providers/google.provider.d.ts +9 -0
  93. package/dist/llm/providers/google.provider.d.ts.map +1 -1
  94. package/dist/llm/providers/google.provider.js +25 -10
  95. package/dist/llm/providers/google.provider.js.map +1 -1
  96. package/dist/llm/providers/openai.provider.d.ts +17 -1
  97. package/dist/llm/providers/openai.provider.d.ts.map +1 -1
  98. package/dist/llm/providers/openai.provider.js +93 -25
  99. package/dist/llm/providers/openai.provider.js.map +1 -1
  100. package/dist/output/processing-feedback.d.ts +14 -0
  101. package/dist/output/processing-feedback.d.ts.map +1 -1
  102. package/dist/output/processing-feedback.js +46 -7
  103. package/dist/output/processing-feedback.js.map +1 -1
  104. package/dist/package.json +3 -3
  105. package/dist/session/context.d.ts +2 -0
  106. package/dist/session/context.d.ts.map +1 -1
  107. package/dist/session/context.js +43 -13
  108. package/dist/session/context.js.map +1 -1
  109. package/dist/tsconfig.json +1 -0
  110. package/dist/types/command.types.d.ts +14 -0
  111. package/dist/types/command.types.d.ts.map +1 -1
  112. package/dist/types/command.types.js.map +1 -1
  113. package/dist/types/llm.types.d.ts +4 -0
  114. package/dist/types/llm.types.d.ts.map +1 -1
  115. package/dist/ui/dashboard/detail-panels/spending-panel.d.ts +9 -0
  116. package/dist/ui/dashboard/detail-panels/spending-panel.d.ts.map +1 -0
  117. package/dist/ui/dashboard/detail-panels/spending-panel.js +28 -0
  118. package/dist/ui/dashboard/detail-panels/spending-panel.js.map +1 -0
  119. package/dist/ui/dashboard/hooks/use-navigation.js +1 -1
  120. package/dist/ui/dashboard/hooks/use-navigation.js.map +1 -1
  121. package/dist/ui/dashboard/index.d.ts +1 -0
  122. package/dist/ui/dashboard/index.d.ts.map +1 -1
  123. package/dist/ui/dashboard/index.js +1 -0
  124. package/dist/ui/dashboard/index.js.map +1 -1
  125. package/dist/ui/dashboard/types.d.ts +1 -1
  126. package/dist/ui/dashboard/types.d.ts.map +1 -1
  127. package/dist/ui/dashboard/views/session-details-view.d.ts.map +1 -1
  128. package/dist/ui/dashboard/views/session-details-view.js +5 -1
  129. package/dist/ui/dashboard/views/session-details-view.js.map +1 -1
  130. package/dist/utils/spending-tracker.d.ts +64 -0
  131. package/dist/utils/spending-tracker.d.ts.map +1 -0
  132. package/dist/utils/spending-tracker.js +107 -0
  133. package/dist/utils/spending-tracker.js.map +1 -0
  134. package/dist/utils/token-estimator.d.ts +31 -5
  135. package/dist/utils/token-estimator.d.ts.map +1 -1
  136. package/dist/utils/token-estimator.js +42 -20
  137. package/dist/utils/token-estimator.js.map +1 -1
  138. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"llm.types.d.ts","sourceRoot":"","sources":["../../src/types/llm.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,QAAQ,CAAC;IAEjB,gBAAgB,CAAC,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,UAAU,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;CACF;AAED,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtE,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtD,YAAY,IAAI,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9G,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC/B,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;IACnF,qBAAqB,IAAI,MAAM,EAAE,CAAC;CAClC"}
1
+ {"version":3,"file":"llm.types.d.ts","sourceRoot":"","sources":["../../src/types/llm.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Spending Panel - Session cost breakdown for the live dashboard
3
+ */
4
+ import React from 'react';
5
+ import type { Session } from '../../../types/session.types.js';
6
+ export declare function SpendingPanel({ session }: {
7
+ session: Session;
8
+ }): React.JSX.Element;
9
+ //# sourceMappingURL=spending-panel.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { getTUIAdapter } from '../../tui-adapter.interface.js';
3
+ import { formatNumber } from '../../../utils/number-format.js';
4
+ import { getSpendingTracker } from '../../../utils/spending-tracker.js';
5
+ const tui = getTUIAdapter();
6
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- Box and Text are React components which require PascalCase
7
+ const { Box, Text } = tui;
8
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- React components must use PascalCase
9
+ export function SpendingPanel({ session }) {
10
+ const tracker = getSpendingTracker();
11
+ const sessionStart = session.created_at;
12
+ const records = tracker.getRecords({ since: sessionStart });
13
+ const totals = tracker.getTotals({ since: sessionStart });
14
+ // Group by command for the bar chart
15
+ const byEndpoint = tracker.getByEndpoint({ since: sessionStart });
16
+ const maxCost = byEndpoint.length > 0 ? Math.max(...byEndpoint.map((e) => e.totalCostUsd)) : 1;
17
+ // Top 5 most expensive in this session
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) => {
20
+ const barWidth = 20;
21
+ const filled = Math.max(1, Math.floor((e.totalCostUsd / maxCost) * barWidth));
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
+ })] })), topExpensive.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Top Expensive Requests:" }), topExpensive.map((r, index) => {
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));
26
+ })] })), records.length === 0 && _jsx(Text, { dimColor: true, children: "No spending recorded this session" })] }));
27
+ }
28
+ //# sourceMappingURL=spending-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spending-panel.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/detail-panels/spending-panel.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { useCallback, useState } from 'react';
5
5
  const TAB_ORDER = ['overview', 'performance', 'agents', 'cache', 'audit'];
6
- const SUB_TAB_ORDER = ['overview', 'optimization', 'quality', 'tokens'];
6
+ const SUB_TAB_ORDER = ['overview', 'optimization', 'quality', 'tokens', 'spending'];
7
7
  export function useNavigation() {
8
8
  const [activeTab, setActiveTab] = useState('overview');
9
9
  const [viewMode, setViewMode] = useState('dashboard');
@@ -1 +1 @@
1
- {"version":3,"file":"use-navigation.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/hooks/use-navigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-navigation.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/hooks/use-navigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAI9C,MAAM,SAAS,GAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1F,MAAM,aAAa,GAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAuBrG,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAe,UAAU,CAAC,CAAC;IACrE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC;IAChE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,UAAU,CAAC,CAAC;IAE9E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC;QACjD,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAE,CAAC;QACpE,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,GAAiB,EAAE,EAAE;QAChD,YAAY,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAE,CAAC;QAChF,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,EAAE;QACrD,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvB,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACN,SAAS;QACT,YAAY;QACZ,UAAU;QACV,UAAU;QACV,OAAO;QACP,UAAU;QACV,OAAO;QACP,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,MAAM;QACN,WAAW;QACX,iBAAiB;QACjB,eAAe;QACf,QAAQ;KACR,CAAC;AACH,CAAC"}
@@ -27,6 +27,7 @@ export { OptimizationPanel } from './detail-panels/optimization-panel.js';
27
27
  export { QualityPanel } from './detail-panels/quality-panel.js';
28
28
  export { RunningTaskPanel } from './detail-panels/running-task-panel.js';
29
29
  export { SessionInfoPanel } from './detail-panels/session-info-panel.js';
30
+ export { SpendingPanel } from './detail-panels/spending-panel.js';
30
31
  export { TokenUsagePanel } from './detail-panels/token-usage-panel.js';
31
32
  export { MCPSessionPanel } from './detail-panels/tool-calls-panel.js';
32
33
  export { WorktreeStatsPanel } from './detail-panels/worktree-stats-panel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dashboard/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dashboard/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -31,6 +31,7 @@ export { OptimizationPanel } from './detail-panels/optimization-panel.js';
31
31
  export { QualityPanel } from './detail-panels/quality-panel.js';
32
32
  export { RunningTaskPanel } from './detail-panels/running-task-panel.js';
33
33
  export { SessionInfoPanel } from './detail-panels/session-info-panel.js';
34
+ export { SpendingPanel } from './detail-panels/spending-panel.js';
34
35
  export { TokenUsagePanel } from './detail-panels/token-usage-panel.js';
35
36
  export { MCPSessionPanel } from './detail-panels/tool-calls-panel.js';
36
37
  export { WorktreeStatsPanel } from './detail-panels/worktree-stats-panel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/dashboard/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/dashboard/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -59,7 +59,7 @@ export interface WorktreeDiagramEntry {
59
59
  /** Top-level dashboard tabs */
60
60
  export type DashboardTab = 'agents' | 'audit' | 'cache' | 'overview' | 'performance';
61
61
  /** Session details sub-tabs */
62
- export type SessionSubTab = 'optimization' | 'overview' | 'quality' | 'tokens';
62
+ export type SessionSubTab = 'optimization' | 'overview' | 'quality' | 'spending' | 'tokens';
63
63
  /** Navigation view mode */
64
64
  export type ViewMode = 'dashboard' | 'details';
65
65
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/dashboard/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AAErF,+BAA+B;AAC/B,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/E,2BAA2B;AAC3B,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/dashboard/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AAErF,+BAA+B;AAC/B,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE5F,2BAA2B;AAC3B,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-details-view.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/views/session-details-view.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA0BxD,wBAAgB,kBAAkB,CAAC,EAClC,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,EAAE;IACF,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CACjB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAsDpB"}
1
+ {"version":3,"file":"session-details-view.d.ts","sourceRoot":"","sources":["../../../../src/ui/dashboard/views/session-details-view.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA4BxD,wBAAgB,kBAAkB,CAAC,EAClC,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,EAAE;IACF,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CACjB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAsDpB"}
@@ -10,6 +10,7 @@ import { OptimizationPanel } from '../../dashboard/detail-panels/optimization-pa
10
10
  import { QualityPanel } from '../../dashboard/detail-panels/quality-panel.js';
11
11
  import { RunningTaskPanel } from '../../dashboard/detail-panels/running-task-panel.js';
12
12
  import { SessionInfoPanel } from '../../dashboard/detail-panels/session-info-panel.js';
13
+ import { SpendingPanel } from '../../dashboard/detail-panels/spending-panel.js';
13
14
  import { TokenUsagePanel } from '../../dashboard/detail-panels/token-usage-panel.js';
14
15
  import { MCPSessionPanel } from '../../dashboard/detail-panels/tool-calls-panel.js';
15
16
  import { WorktreeStatsPanel } from '../../dashboard/detail-panels/worktree-stats-panel.js';
@@ -21,7 +22,8 @@ const SUB_TAB_CONFIG = [
21
22
  { label: 'Overview', tab: 'overview' },
22
23
  { label: 'Optimisation', tab: 'optimization' },
23
24
  { label: 'Quality', tab: 'quality' },
24
- { label: 'Tokens', tab: 'tokens' }
25
+ { label: 'Tokens', tab: 'tokens' },
26
+ { label: 'Spending', tab: 'spending' }
25
27
  ];
26
28
  // eslint-disable-next-line @typescript-eslint/naming-convention -- React components must use PascalCase
27
29
  export function SessionDetailsView({ activeSubTab, onBack, onExit, session }) {
@@ -61,6 +63,8 @@ function SubTabContent({ activeSubTab, session }) {
61
63
  return _jsx(OptimizationPanel, { session: session });
62
64
  case 'quality':
63
65
  return _jsx(QualityPanel, { session: session });
66
+ case 'spending':
67
+ return _jsx(SpendingPanel, { session: session });
64
68
  case 'tokens':
65
69
  return _jsx(TokenUsagePanel, { session: session });
66
70
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"session-details-view.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/views/session-details-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-details-view.js","sourceRoot":"","sources":["../../../../src/ui/dashboard/views/session-details-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Spending Tracker - Persistent per-request cost ledger
3
+ *
4
+ * Appends each request's cost data to .valora/spending.jsonl
5
+ * (one JSON record per line for easy streaming and appending).
6
+ */
7
+ export interface EndpointSummary {
8
+ avgCostUsd: number;
9
+ cacheSavingsUsd: number;
10
+ command: string;
11
+ requestCount: number;
12
+ totalCostUsd: number;
13
+ totalTokens: number;
14
+ }
15
+ export interface GetRecordsOptions {
16
+ command?: string;
17
+ since?: string;
18
+ }
19
+ export interface SpendingRecord {
20
+ batchDiscounted: boolean;
21
+ cacheReadTokens: number;
22
+ cacheSavingsUsd: number;
23
+ cacheWriteTokens: number;
24
+ command: string;
25
+ completionTokens: number;
26
+ costUsd: number;
27
+ durationMs: number;
28
+ id: string;
29
+ model: string;
30
+ promptTokens: number;
31
+ stage: string;
32
+ timestamp: string;
33
+ totalTokens: number;
34
+ }
35
+ export interface SpendingTotals {
36
+ cacheSavingsUsd: number;
37
+ requestCount: number;
38
+ totalCostUsd: number;
39
+ totalTokens: number;
40
+ }
41
+ export declare class SpendingTracker {
42
+ /**
43
+ * Append a spending record to the JSONL file
44
+ */
45
+ record(r: SpendingRecord): void;
46
+ /**
47
+ * Read all records, optionally filtered by command and/or date
48
+ */
49
+ getRecords(opts?: GetRecordsOptions): SpendingRecord[];
50
+ /**
51
+ * Group records by command (endpoint), sorted by total cost descending
52
+ */
53
+ getByEndpoint(opts?: GetRecordsOptions): EndpointSummary[];
54
+ /**
55
+ * Return the top N most expensive records
56
+ */
57
+ getExpensive(limit: number, opts?: GetRecordsOptions): SpendingRecord[];
58
+ /**
59
+ * Return aggregate totals across all (optionally filtered) records
60
+ */
61
+ getTotals(opts?: GetRecordsOptions): SpendingTotals;
62
+ }
63
+ export declare function getSpendingTracker(): SpendingTracker;
64
+ //# sourceMappingURL=spending-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spending-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/spending-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACpB;AAID,qBAAa,eAAe;IAC3B;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI;IAS/B;;OAEG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAsBtD;;OAEG;IACH,aAAa,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,eAAe,EAAE;IA2B1D;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAMvE;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,cAAc;CAYnD;AAWD,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Spending Tracker - Persistent per-request cost ledger
3
+ *
4
+ * Appends each request's cost data to .valora/spending.jsonl
5
+ * (one JSON record per line for easy streaming and appending).
6
+ */
7
+ import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { getRuntimeDataDir } from './paths.js';
10
+ const getSpendingFile = () => join(getRuntimeDataDir(), 'spending.jsonl');
11
+ export class SpendingTracker {
12
+ /**
13
+ * Append a spending record to the JSONL file
14
+ */
15
+ record(r) {
16
+ try {
17
+ ensureDir();
18
+ appendFileSync(getSpendingFile(), JSON.stringify(r) + '\n', 'utf8');
19
+ }
20
+ catch {
21
+ // Non-fatal: spending tracking should not break the main flow
22
+ }
23
+ }
24
+ /**
25
+ * Read all records, optionally filtered by command and/or date
26
+ */
27
+ getRecords(opts) {
28
+ const file = getSpendingFile();
29
+ if (!existsSync(file))
30
+ return [];
31
+ try {
32
+ const lines = readFileSync(file, 'utf8').split('\n').filter(Boolean);
33
+ let records = lines.map((line) => JSON.parse(line));
34
+ if (opts?.command) {
35
+ records = records.filter((r) => r.command === opts.command);
36
+ }
37
+ if (opts?.since) {
38
+ const since = new Date(opts.since).getTime();
39
+ records = records.filter((r) => new Date(r.timestamp).getTime() >= since);
40
+ }
41
+ return records;
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ }
47
+ /**
48
+ * Group records by command (endpoint), sorted by total cost descending
49
+ */
50
+ getByEndpoint(opts) {
51
+ const records = this.getRecords(opts);
52
+ const byCommand = new Map();
53
+ for (const r of records) {
54
+ const existing = byCommand.get(r.command);
55
+ if (existing) {
56
+ existing.totalCostUsd += r.costUsd;
57
+ existing.totalTokens += r.totalTokens;
58
+ existing.requestCount += 1;
59
+ existing.cacheSavingsUsd += r.cacheSavingsUsd;
60
+ existing.avgCostUsd = existing.totalCostUsd / existing.requestCount;
61
+ }
62
+ else {
63
+ byCommand.set(r.command, {
64
+ avgCostUsd: r.costUsd,
65
+ cacheSavingsUsd: r.cacheSavingsUsd,
66
+ command: r.command,
67
+ requestCount: 1,
68
+ totalCostUsd: r.costUsd,
69
+ totalTokens: r.totalTokens
70
+ });
71
+ }
72
+ }
73
+ return Array.from(byCommand.values()).sort((a, b) => b.totalCostUsd - a.totalCostUsd);
74
+ }
75
+ /**
76
+ * Return the top N most expensive records
77
+ */
78
+ getExpensive(limit, opts) {
79
+ return this.getRecords(opts)
80
+ .sort((a, b) => b.costUsd - a.costUsd)
81
+ .slice(0, limit);
82
+ }
83
+ /**
84
+ * Return aggregate totals across all (optionally filtered) records
85
+ */
86
+ getTotals(opts) {
87
+ const records = this.getRecords(opts);
88
+ return records.reduce((acc, r) => ({
89
+ cacheSavingsUsd: acc.cacheSavingsUsd + r.cacheSavingsUsd,
90
+ requestCount: acc.requestCount + 1,
91
+ totalCostUsd: acc.totalCostUsd + r.costUsd,
92
+ totalTokens: acc.totalTokens + r.totalTokens
93
+ }), { cacheSavingsUsd: 0, requestCount: 0, totalCostUsd: 0, totalTokens: 0 });
94
+ }
95
+ }
96
+ function ensureDir() {
97
+ const dir = getRuntimeDataDir();
98
+ if (!existsSync(dir)) {
99
+ mkdirSync(dir, { recursive: true });
100
+ }
101
+ }
102
+ let instance = null;
103
+ export function getSpendingTracker() {
104
+ instance ??= new SpendingTracker();
105
+ return instance;
106
+ }
107
+ //# sourceMappingURL=spending-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spending-tracker.js","sourceRoot":"","sources":["../../src/utils/spending-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwChD,MAAM,eAAe,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAElF,MAAM,OAAO,eAAe;IAC3B;;OAEG;IACH,MAAM,CAAC,CAAiB;QACvB,IAAI,CAAC;YACJ,SAAS,EAAE,CAAC;YACZ,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACR,8DAA8D;QAC/D,CAAC;IACF,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAwB;QAClC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAEjC,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrE,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,CAAC;YAEtE,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC7C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,OAAO,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAwB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;QAErD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC;gBACnC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC;gBACtC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC3B,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC;gBAC9C,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE;oBACxB,UAAU,EAAE,CAAC,CAAC,OAAO;oBACrB,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,YAAY,EAAE,CAAC;oBACf,YAAY,EAAE,CAAC,CAAC,OAAO;oBACvB,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC1B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAa,EAAE,IAAwB;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;aACrC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAwB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACZ,eAAe,EAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe;YACxD,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC;YAClC,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO;YAC1C,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;SAC5C,CAAC,EACF,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CACxE,CAAC;IACH,CAAC;CACD;AAED,SAAS,SAAS;IACjB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;AACF,CAAC;AAED,IAAI,QAAQ,GAA2B,IAAI,CAAC;AAE5C,MAAM,UAAU,kBAAkB;IACjC,QAAQ,KAAK,IAAI,eAAe,EAAE,CAAC;IACnC,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Estimates token usage and cost for LLM API calls.
5
5
  * Uses approximate token counting (4 characters per token for English text).
6
6
  */
7
- import type { LLMMessage } from '../types/llm.types.js';
7
+ import type { LLMMessage, LLMUsage } from '../types/llm.types.js';
8
8
  export interface TokenEstimate {
9
9
  /** Estimated cost in USD */
10
10
  estimatedCost: {
@@ -17,6 +17,23 @@ export interface TokenEstimate {
17
17
  promptTokens: number;
18
18
  /** Total estimated tokens */
19
19
  totalTokens: number;
20
+ /** Tokens read from cache (optional, populated from actual usage) */
21
+ cacheReadTokens?: number;
22
+ /** Tokens written to cache (optional, populated from actual usage) */
23
+ cacheWriteTokens?: number;
24
+ /** Estimated cost savings from caching in USD (optional) */
25
+ cacheSavings?: number;
26
+ }
27
+ /**
28
+ * Model pricing per million tokens (approximate as of 2024)
29
+ * cache_write: cost per million tokens for writing to cache (1.25x input)
30
+ * cache_read: cost per million tokens for reading from cache (0.1x input)
31
+ */
32
+ interface ModelPricing {
33
+ cache_read?: number;
34
+ cache_write?: number;
35
+ input: number;
36
+ output: number;
20
37
  }
21
38
  /**
22
39
  * Estimate token usage and cost for a set of messages
@@ -40,16 +57,24 @@ export declare function estimateTokensFromText(text: string): number;
40
57
  * @returns Formatted string
41
58
  */
42
59
  export declare function formatTokenEstimate(estimate: TokenEstimate): string;
60
+ /**
61
+ * Calculate actual cost from real usage data, including cache pricing
62
+ *
63
+ * @param usage - Actual token usage from API response
64
+ * @param model - Model name for pricing lookup
65
+ * @returns Total cost and cache savings in USD
66
+ */
67
+ export declare function calculateActualCost(usage: LLMUsage, model?: string): {
68
+ cacheSavings: number;
69
+ totalCost: number;
70
+ };
43
71
  /**
44
72
  * Get pricing info for a model
45
73
  *
46
74
  * @param model - Model name
47
75
  * @returns Pricing info or undefined
48
76
  */
49
- export declare function getModelPricing(model: string): undefined | {
50
- input: number;
51
- output: number;
52
- };
77
+ export declare function getModelPricing(model: string): ModelPricing | undefined;
53
78
  /**
54
79
  * Check if a model has known pricing
55
80
  *
@@ -57,4 +82,5 @@ export declare function getModelPricing(model: string): undefined | {
57
82
  * @returns True if pricing is available
58
83
  */
59
84
  export declare function hasKnownPricing(model: string): boolean;
85
+ export {};
60
86
  //# sourceMappingURL=token-estimator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC7B,4BAA4B;IAC5B,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAC;IACnD,qEAAqE;IACrE,yBAAyB,EAAE,MAAM,CAAC;IAClC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;CACpB;AAoCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAqCpF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC7B,4BAA4B;IAC5B,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAC;IACnD,qEAAqE;IACrE,yBAAyB,EAAE,MAAM,CAAC;IAClC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,UAAU,YAAY;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAgCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAqCpF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOnE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAwBhH;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -4,29 +4,25 @@
4
4
  * Estimates token usage and cost for LLM API calls.
5
5
  * Uses approximate token counting (4 characters per token for English text).
6
6
  */
7
- /**
8
- * Model pricing per 1K tokens (approximate as of 2024)
9
- * Format: { input: pricePerMillion, output: pricePerMillion }
10
- */
11
7
  const MODEL_PRICING = {
12
- // Anthropic models
13
- 'claude-3-5-haiku-20241022': { input: 1.0, output: 5.0 },
14
- 'claude-3-5-haiku-latest': { input: 1.0, output: 5.0 },
15
- 'claude-3-5-sonnet-20241022': { input: 3.0, output: 15.0 },
16
- 'claude-3-5-sonnet-latest': { input: 3.0, output: 15.0 },
17
- 'claude-3-haiku-20240307': { input: 0.25, output: 1.25 },
18
- 'claude-3-opus-20240229': { input: 15.0, output: 75.0 },
19
- 'claude-3-sonnet-20240229': { input: 3.0, output: 15.0 },
20
- // OpenAI models
8
+ // Anthropic models (with cache pricing)
9
+ 'claude-3-5-haiku-20241022': { cache_read: 0.1, cache_write: 1.25, input: 1.0, output: 5.0 },
10
+ 'claude-3-5-haiku-latest': { cache_read: 0.1, cache_write: 1.25, input: 1.0, output: 5.0 },
11
+ 'claude-3-5-sonnet-20241022': { cache_read: 0.3, cache_write: 3.75, input: 3.0, output: 15.0 },
12
+ 'claude-3-5-sonnet-latest': { cache_read: 0.3, cache_write: 3.75, input: 3.0, output: 15.0 },
13
+ 'claude-3-haiku-20240307': { cache_read: 0.025, cache_write: 0.3125, input: 0.25, output: 1.25 },
14
+ 'claude-3-opus-20240229': { cache_read: 1.5, cache_write: 18.75, input: 15.0, output: 75.0 },
15
+ 'claude-3-sonnet-20240229': { cache_read: 0.3, cache_write: 3.75, input: 3.0, output: 15.0 },
16
+ // OpenAI models (automatic caching: cached reads at 50% discount, no write surcharge)
21
17
  'gpt-3.5-turbo': { input: 0.5, output: 1.5 },
22
18
  'gpt-4': { input: 30.0, output: 60.0 },
23
- 'gpt-4-turbo': { input: 10.0, output: 30.0 },
24
- 'gpt-4o': { input: 2.5, output: 10.0 },
25
- 'gpt-4o-mini': { input: 0.15, output: 0.6 },
26
- // Google models
27
- 'gemini-1.5-flash': { input: 0.075, output: 0.3 },
28
- 'gemini-1.5-pro': { input: 1.25, output: 5.0 },
29
- 'gemini-2.0-flash-exp': { input: 0.075, output: 0.3 }
19
+ 'gpt-4-turbo': { cache_read: 5.0, input: 10.0, output: 30.0 },
20
+ 'gpt-4o': { cache_read: 1.25, input: 2.5, output: 10.0 },
21
+ 'gpt-4o-mini': { cache_read: 0.075, input: 0.15, output: 0.6 },
22
+ // Google models (context caching: cached reads at 75% discount)
23
+ 'gemini-1.5-flash': { cache_read: 0.01875, input: 0.075, output: 0.3 },
24
+ 'gemini-1.5-pro': { cache_read: 0.3125, input: 1.25, output: 5.0 },
25
+ 'gemini-2.0-flash-exp': { cache_read: 0.01875, input: 0.075, output: 0.3 }
30
26
  };
31
27
  /** Default pricing if model not found */
32
28
  const DEFAULT_PRICING = { input: 3.0, output: 15.0 };
@@ -93,6 +89,32 @@ export function formatTokenEstimate(estimate) {
93
89
  ` Cost: $${estimate.estimatedCost.amount.toFixed(4)} ${estimate.estimatedCost.currency}`
94
90
  ].join('\n');
95
91
  }
92
+ /**
93
+ * Calculate actual cost from real usage data, including cache pricing
94
+ *
95
+ * @param usage - Actual token usage from API response
96
+ * @param model - Model name for pricing lookup
97
+ * @returns Total cost and cache savings in USD
98
+ */
99
+ export function calculateActualCost(usage, model) {
100
+ const pricing = MODEL_PRICING[model ?? ''] ?? DEFAULT_PRICING;
101
+ // Base input/output costs
102
+ const inputCost = (usage.prompt_tokens / 1_000_000) * pricing.input;
103
+ const outputCost = (usage.completion_tokens / 1_000_000) * pricing.output;
104
+ // Cache costs (if present)
105
+ const cacheWriteTokens = usage.cache_creation_input_tokens ?? 0;
106
+ const cacheReadTokens = usage.cache_read_input_tokens ?? 0;
107
+ const cacheWriteCost = pricing.cache_write ? (cacheWriteTokens / 1_000_000) * pricing.cache_write : 0;
108
+ const cacheReadCost = pricing.cache_read ? (cacheReadTokens / 1_000_000) * pricing.cache_read : 0;
109
+ // Savings: what those cached tokens would have cost at full input price
110
+ const fullPriceForCachedTokens = (cacheReadTokens / 1_000_000) * pricing.input;
111
+ const cacheSavings = fullPriceForCachedTokens - cacheReadCost;
112
+ const totalCost = inputCost + outputCost + cacheWriteCost + cacheReadCost;
113
+ return {
114
+ cacheSavings: Math.round(cacheSavings * 10000) / 10000,
115
+ totalCost: Math.round(totalCost * 10000) / 10000
116
+ };
117
+ }
96
118
  /**
97
119
  * Get pricing info for a model
98
120
  *
@@ -1 +1 @@
1
- {"version":3,"file":"token-estimator.js","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-estimator.js","sourceRoot":"","sources":["../../src/utils/token-estimator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windagency/valora",
3
- "version": "2.1.4",
3
+ "version": "2.2.1",
4
4
  "description": "VALORA - AI-assisted development workflow orchestration with agnostic multi-LLM support, session-based state, and Cursor MCP integration",
5
5
  "keywords": [
6
6
  "valora",
@@ -70,8 +70,8 @@
70
70
  "clear": "pnpm \"/clean:/\" && rm -rf ./node_modules",
71
71
  "lint": "eslint --color",
72
72
  "lint:fix": "eslint --color --fix",
73
- "beautify": "prettier --check \"**/*.+(js|ts|json)\"",
74
- "beautify:fix": "prettier --write \"**/*.+(js|ts|json)\"",
73
+ "beautify": "prettier --check \"**/*.+(js|jsx|ts|tsx|json|md|yml|yaml)\"",
74
+ "beautify:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|md|yml|yaml)\"",
75
75
  "format": "pnpm beautify:fix && pnpm lint:fix",
76
76
  "mcp:validate-types": "pnpm exec tsx scripts/generate-mcp-types.ts",
77
77
  "mcp:fix-types": "pnpm exec tsx scripts/generate-mcp-types.ts --fix",