@alpaca-editor/core 1.0.4152 → 1.0.4155
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.
- package/dist/editor/FieldListFieldWithFallbacks.js +2 -2
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +4 -0
- package/dist/editor/ai/AgentCostDisplay.js +12 -6
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +2 -2
- package/dist/editor/ai/AgentStatusBadge.js +18 -2
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +78 -21
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/useAgentStatus.d.ts +1 -0
- package/dist/editor/ai/useAgentStatus.js +12 -6
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +1 -1
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/package.json +1 -1
- package/src/editor/FieldListFieldWithFallbacks.tsx +2 -2
- package/src/editor/ai/AgentCostDisplay.tsx +47 -6
- package/src/editor/ai/AgentStatusBadge.tsx +18 -2
- package/src/editor/ai/AgentTerminal.tsx +118 -31
- package/src/editor/ai/useAgentStatus.ts +35 -21
- package/src/editor/services/agentService.ts +1 -0
- package/src/revision.ts +2 -2
|
@@ -79,9 +79,9 @@ export function FieldListFieldWithFallbacks({ fieldDescriptor, validators, simpl
|
|
|
79
79
|
}, [field]);
|
|
80
80
|
useEffect(() => {
|
|
81
81
|
if (ref.current && isFocusedField) {
|
|
82
|
-
// only scroll if the field is outside the viewport
|
|
82
|
+
// only scroll if the field is completely outside the viewport
|
|
83
83
|
const rect = ref.current.getBoundingClientRect();
|
|
84
|
-
if (rect.
|
|
84
|
+
if (rect.bottom < 0 || rect.top > window.innerHeight) {
|
|
85
85
|
ref.current.scrollIntoView({
|
|
86
86
|
behavior: "smooth",
|
|
87
87
|
block: "center",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldListFieldWithFallbacks.js","sourceRoot":"","sources":["../../src/editor/FieldListFieldWithFallbacks.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FieldListFieldWithFallbacks.js","sourceRoot":"","sources":["../../src/editor/FieldListFieldWithFallbacks.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,20 +6,24 @@ interface AgentCostDisplayProps {
|
|
|
6
6
|
numInputTokens: number;
|
|
7
7
|
numOutputTokens: number;
|
|
8
8
|
numCachedTokens: number;
|
|
9
|
+
numCacheWriteTokens?: number;
|
|
9
10
|
totalCost?: number;
|
|
10
11
|
inputCost?: number;
|
|
11
12
|
outputCost?: number;
|
|
12
13
|
cachedCost?: number;
|
|
14
|
+
cacheWriteCost?: number;
|
|
13
15
|
} | null;
|
|
14
16
|
/** Cumulative token usage across all messages in the session */
|
|
15
17
|
totalTokens?: {
|
|
16
18
|
input: number;
|
|
17
19
|
output: number;
|
|
18
20
|
cached: number;
|
|
21
|
+
cacheWrite: number;
|
|
19
22
|
totalCost: number;
|
|
20
23
|
inputCost: number;
|
|
21
24
|
outputCost: number;
|
|
22
25
|
cachedCost: number;
|
|
26
|
+
cacheWriteCost: number;
|
|
23
27
|
};
|
|
24
28
|
/** Cost limit for the agent (in USD) */
|
|
25
29
|
costLimit?: number | null;
|
|
@@ -25,17 +25,19 @@ export function AgentCostDisplay({ className = "", response, totalTokens, costLi
|
|
|
25
25
|
}, [showCostPopover]);
|
|
26
26
|
// Calculate estimated cost based on typical pricing (rough estimates)
|
|
27
27
|
// Claude 3.5 Sonnet pricing: ~$3/MTok input, ~$15/MTok output
|
|
28
|
-
const calculateEstimatedCost = (inputTokens, outputTokens, cachedTokens) => {
|
|
28
|
+
const calculateEstimatedCost = (inputTokens, outputTokens, cachedTokens, cacheWriteTokens = 0) => {
|
|
29
29
|
// Cached tokens are a subset of input tokens, not additional tokens
|
|
30
30
|
const freshInputTokens = inputTokens - cachedTokens;
|
|
31
31
|
const inputCost = (freshInputTokens / 1000000) * 3; // $3 per million tokens
|
|
32
32
|
const outputCost = (outputTokens / 1000000) * 15; // $15 per million tokens
|
|
33
33
|
const cachedCost = (cachedTokens / 1000000) * 0.3; // Cached tokens are typically much cheaper
|
|
34
|
+
const cacheWriteCost = (cacheWriteTokens / 1000000) * 3.75; // Cache write tokens cost more
|
|
34
35
|
return {
|
|
35
36
|
inputCost,
|
|
36
37
|
outputCost,
|
|
37
38
|
cachedCost,
|
|
38
|
-
|
|
39
|
+
cacheWriteCost,
|
|
40
|
+
totalCost: inputCost + outputCost + cachedCost + cacheWriteCost,
|
|
39
41
|
};
|
|
40
42
|
};
|
|
41
43
|
// Use actual cost data if available, otherwise calculate estimates
|
|
@@ -45,9 +47,10 @@ export function AgentCostDisplay({ className = "", response, totalTokens, costLi
|
|
|
45
47
|
inputCost: response.inputCost ?? 0,
|
|
46
48
|
outputCost: response.outputCost ?? 0,
|
|
47
49
|
cachedCost: response.cachedCost ?? 0,
|
|
50
|
+
cacheWriteCost: response.cacheWriteCost ?? 0,
|
|
48
51
|
totalCost: response.totalCost,
|
|
49
52
|
}
|
|
50
|
-
: calculateEstimatedCost(response.numInputTokens, response.numOutputTokens, response.numCachedTokens)
|
|
53
|
+
: calculateEstimatedCost(response.numInputTokens, response.numOutputTokens, response.numCachedTokens, response.numCacheWriteTokens ?? 0)
|
|
51
54
|
: null;
|
|
52
55
|
const displayTotalCost = totalTokens?.totalCost ?? currentCost?.totalCost ?? 0;
|
|
53
56
|
const hasTokenData = response &&
|
|
@@ -77,7 +80,9 @@ export function AgentCostDisplay({ className = "", response, totalTokens, costLi
|
|
|
77
80
|
return "text-yellow-600";
|
|
78
81
|
return "text-gray-400";
|
|
79
82
|
};
|
|
80
|
-
return (_jsx("div", { className: `relative ${className}`, ref: costPopoverRef, children: _jsxs(Popover, { open: showCostPopover, onOpenChange: setShowCostPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("div", { className: `cursor-pointer text-right hover:text-gray-600 ${getColorClass()}`, style: { fontSize: "10px" }, onClick: () => setShowCostPopover(!showCostPopover), children: ["Total Cost: ", displayTotalCost.toFixed(2), " ", currency, costLimit &&
|
|
83
|
+
return (_jsx("div", { className: `relative ${className}`, ref: costPopoverRef, children: _jsxs(Popover, { open: showCostPopover, onOpenChange: setShowCostPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("div", { className: `cursor-pointer text-right hover:text-gray-600 ${getColorClass()}`, style: { fontSize: "10px" }, onClick: () => setShowCostPopover(!showCostPopover), children: ["Total Cost: ", displayTotalCost.toFixed(2), " ", currency, costLimit &&
|
|
84
|
+
costLimit > 0 &&
|
|
85
|
+
` / ${costLimit.toFixed(2)} ${currency}`] }) }), _jsx(PopoverContent, { className: "w-80 p-4", align: "end", side: "bottom", children: _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "border-b pb-2", children: _jsxs("h4", { className: "flex items-center justify-between text-sm font-semibold", children: [_jsx("div", { children: "Cost Breakdown" }), _jsxs("span", { className: "text-sm font-semibold", children: [displayTotalCost.toFixed(2), " ", currency, costLimit && costLimit > 0 && (_jsxs("span", { className: "ml-1 text-xs text-gray-500", children: ["/ ", costLimit.toFixed(2), " ", currency] }))] })] }) }), costLimit && costLimit > 0 && (_jsxs("div", { className: "rounded-md bg-gray-50 p-3", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between text-xs", children: [_jsx("span", { className: "font-medium text-gray-700", children: "Cost Limit Usage" }), _jsxs("span", { className: `font-semibold ${getColorClass()}`, children: [percentUsed?.toFixed(1), "%"] })] }), _jsx("div", { className: "h-2 w-full overflow-hidden rounded-full bg-gray-200", children: _jsx("div", { className: `h-full transition-all ${percentUsed && percentUsed >= 100
|
|
81
86
|
? "bg-red-500"
|
|
82
87
|
: percentUsed && percentUsed >= 80
|
|
83
88
|
? "bg-orange-500"
|
|
@@ -85,7 +90,8 @@ export function AgentCostDisplay({ className = "", response, totalTokens, costLi
|
|
|
85
90
|
? "bg-yellow-500"
|
|
86
91
|
: "bg-blue-500"}`, style: { width: `${Math.min(percentUsed || 0, 100)}%` } }) }), percentUsed && percentUsed >= 90 && (_jsx("p", { className: "mt-2 text-xs text-gray-600", children: percentUsed >= 100
|
|
87
92
|
? "Cost limit reached. Execution will stop on next API call."
|
|
88
|
-
: "Approaching cost limit. Consider extending if needed." }))] })), _jsx("div", { className: "space-y-3", children: (hasTotalData || hasTokenData) && (_jsx(_Fragment, { children: _jsx("div", { className: "space-y-2", children: hasTotalData ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.input.toLocaleString(), " (", totalTokens.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.output.toLocaleString(), " (", totalTokens.outputCost.toFixed(2), " ", currency, ")"] })] }), totalTokens.cached > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.cached.toLocaleString(), " (", totalTokens.cachedCost.toFixed(2), " ", currency, ")"] })] }))] })) : (response &&
|
|
89
|
-
currentCost && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numInputTokens.toLocaleString(), "(", currentCost.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numOutputTokens.toLocaleString(), "(", currentCost.outputCost.toFixed(2), " ", currency, ")"] })] }), response.numCachedTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numCachedTokens.toLocaleString(), "(", currentCost.cachedCost.toFixed(2), " ", currency, ")"] })] })),
|
|
93
|
+
: "Approaching cost limit. Consider extending if needed." }))] })), _jsx("div", { className: "space-y-3", children: (hasTotalData || hasTokenData) && (_jsx(_Fragment, { children: _jsx("div", { className: "space-y-2", children: hasTotalData ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.input.toLocaleString(), " (", totalTokens.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.output.toLocaleString(), " (", totalTokens.outputCost.toFixed(2), " ", currency, ")"] })] }), totalTokens.cached > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.cached.toLocaleString(), " (", totalTokens.cachedCost.toFixed(2), " ", currency, ")"] })] })), totalTokens.cacheWrite > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cache write tokens:" }), _jsxs("span", { className: "text-xs", children: [totalTokens.cacheWrite.toLocaleString(), " (", (totalTokens.cacheWriteCost ?? 0).toFixed(2), " ", currency, ")"] })] }))] })) : (response &&
|
|
94
|
+
currentCost && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Input tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numInputTokens.toLocaleString(), "(", currentCost.inputCost.toFixed(2), " ", currency, ")"] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Output tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numOutputTokens.toLocaleString(), "(", currentCost.outputCost.toFixed(2), " ", currency, ")"] })] }), response.numCachedTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cached tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numCachedTokens.toLocaleString(), "(", currentCost.cachedCost.toFixed(2), " ", currency, ")"] })] })), response.numCacheWriteTokens &&
|
|
95
|
+
response.numCacheWriteTokens > 0 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500", children: "Cache write tokens:" }), _jsxs("span", { className: "text-xs", children: [response.numCacheWriteTokens.toLocaleString(), "(", currentCost.cacheWriteCost.toFixed(2), " ", currency, ")"] })] })), _jsx("div", { className: "mt-2 text-xs text-gray-400", children: "* Estimated costs based on typical Claude 3.5 pricing" })] }))) }) })) })] }) })] }) }));
|
|
90
96
|
}
|
|
91
97
|
//# sourceMappingURL=AgentCostDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentCostDisplay.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentCostDisplay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAe,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentCostDisplay.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentCostDisplay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAe,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAmC/D,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,WAAW,EACX,SAAS,GACa;IACtB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,cAAc,EAAE,QAAQ,IAAI,KAAK,CAAC;IAEnD,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,kBAAkB,CAAC,KAAiB;YAC3C,IACE,cAAc,CAAC,OAAO;gBACtB,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACtD,CAAC;gBACD,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACvD,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC5D,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,sBAAsB,GAAG,CAC7B,WAAmB,EACnB,YAAoB,EACpB,YAAoB,EACpB,mBAA2B,CAAC,EAC5B,EAAE;QACF,oEAAoE;QACpE,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB;QAC5E,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB;QAC3E,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,2CAA2C;QAC9F,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,+BAA+B;QAC3F,OAAO;YACL,SAAS;YACT,UAAU;YACV,UAAU;YACV,cAAc;YACd,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc;SAChE,CAAC;IACJ,CAAC,CAAC;IAEF,mEAAmE;IACnE,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS;YAChC,CAAC,CAAC;gBACE,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC;gBAClC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;gBACpC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;gBACpC,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,CAAC;gBAC5C,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B;YACH,CAAC,CAAC,sBAAsB,CACpB,QAAQ,CAAC,cAAc,EACvB,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,mBAAmB,IAAI,CAAC,CAClC;QACL,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,gBAAgB,GACpB,WAAW,EAAE,SAAS,IAAI,WAAW,EAAE,SAAS,IAAI,CAAC,CAAC;IACxD,MAAM,YAAY,GAChB,QAAQ;QACR,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC;YAC1B,QAAQ,CAAC,eAAe,GAAG,CAAC;YAC5B,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,YAAY,GAChB,WAAW;QACX,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,WAAW,GACf,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1D,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GACf,SAAS,IAAI,SAAS,GAAG,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC;IAEX,iCAAiC;IACjC,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,WAAW;YAAE,OAAO,eAAe,CAAC;QACzC,IAAI,WAAW,IAAI,GAAG;YAAE,OAAO,cAAc,CAAC;QAC9C,IAAI,WAAW,IAAI,EAAE;YAAE,OAAO,iBAAiB,CAAC;QAChD,IAAI,WAAW,IAAI,EAAE;YAAE,OAAO,iBAAiB,CAAC;QAChD,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAE,YAAY,SAAS,EAAE,EAAE,GAAG,EAAE,cAAc,YAC1D,MAAC,OAAO,IAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,aAC9D,KAAC,cAAc,IAAC,OAAO,kBACrB,eACE,SAAS,EAAE,iDAAiD,aAAa,EAAE,EAAE,EAC7E,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,6BAEtC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,EAClD,SAAS;gCACR,SAAS,GAAG,CAAC;gCACb,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,IACtC,GACS,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,QAAQ,YAC5D,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,eAAe,YAC5B,cAAI,SAAS,EAAC,yDAAyD,aACrE,2CAAyB,EACzB,gBAAM,SAAS,EAAC,uBAAuB,aACpC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,EACtC,SAAS,IAAI,SAAS,GAAG,CAAC,IAAI,CAC7B,gBAAM,SAAS,EAAC,4BAA4B,mBACvC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,IAC7B,CACR,IACI,IACJ,GACD,EAGL,SAAS,IAAI,SAAS,GAAG,CAAC,IAAI,CAC7B,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAM,SAAS,EAAC,2BAA2B,iCAEpC,EACP,gBAAM,SAAS,EAAE,iBAAiB,aAAa,EAAE,EAAE,aAChD,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,SACnB,IACH,EACN,cAAK,SAAS,EAAC,qDAAqD,YAClE,cACE,SAAS,EAAE,yBACT,WAAW,IAAI,WAAW,IAAI,GAAG;gDAC/B,CAAC,CAAC,YAAY;gDACd,CAAC,CAAC,WAAW,IAAI,WAAW,IAAI,EAAE;oDAChC,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,WAAW,IAAI,WAAW,IAAI,EAAE;wDAChC,CAAC,CAAC,eAAe;wDACjB,CAAC,CAAC,aACV,EAAE,EACF,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GACvD,GACE,EACL,WAAW,IAAI,WAAW,IAAI,EAAE,IAAI,CACnC,YAAG,SAAS,EAAC,4BAA4B,YACtC,WAAW,IAAI,GAAG;4CACjB,CAAC,CAAC,2DAA2D;4CAC7D,CAAC,CAAC,uDAAuD,GACzD,CACL,IACG,CACP,EAED,cAAK,SAAS,EAAC,WAAW,YAEvB,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,CACjC,4BACE,cAAK,SAAS,EAAC,WAAW,YACvB,YAAY,CAAC,CAAC,CAAC,CACd,8BACE,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,8BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,QAClC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACvC,IACH,EAEN,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,+BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,QACnC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACxC,IACH,EAEL,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,+BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,QACnC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACxC,IACH,CACP,EAEA,WAAW,CAAC,UAAU,GAAG,CAAC,IAAI,CAC7B,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,oCAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,QACvC,CAAC,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EACjD,QAAQ,SACJ,IACH,CACP,IACA,CACJ,CAAC,CAAC,CAAC,CACF,QAAQ;4CACR,WAAW,IAAI,CACb,8BACE,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,8BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,OACxC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACvC,IACH,EAEN,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,+BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,OACzC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACxC,IACH,EAEL,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,CAC/B,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,+BAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,OACzC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAG,QAAQ,SACxC,IACH,CACP,EAEA,QAAQ,CAAC,mBAAmB;oDAC3B,QAAQ,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAClC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,uBAAuB,oCAEhC,EACP,gBAAM,SAAS,EAAC,SAAS,aACtB,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAC5C,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAC3C,QAAQ,SACJ,IACH,CACP,EAEH,cAAK,SAAS,EAAC,4BAA4B,sEAGrC,IACL,CACJ,CACF,GACG,GACL,CACJ,GACG,IACF,GACS,IACT,GACN,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -12,13 +12,13 @@ export interface AgentStatusConfig {
|
|
|
12
12
|
/**
|
|
13
13
|
* Helper function to get status configuration for an individual agent
|
|
14
14
|
* Handles both numeric and string status values
|
|
15
|
-
* Enum: New=0, Running=1, WaitingForApproval=2, Completed=3, Error=4, Closed=5, Idle=6
|
|
15
|
+
* Enum: New=0, Running=1, WaitingForApproval=2, Completed=3, Error=4, Closed=5, Idle=6, CostLimitReached=7
|
|
16
16
|
*/
|
|
17
17
|
export declare function getAgentStatusConfig(agent: Agent): AgentStatusConfig;
|
|
18
18
|
/**
|
|
19
19
|
* Badge that overlays on the agent icon to show status
|
|
20
20
|
* Always displays the total number of active agents with color-coded status:
|
|
21
|
-
* - Amber: Agents waiting for approval (highest priority)
|
|
21
|
+
* - Amber: Agents waiting for approval or cost limit reached (highest priority)
|
|
22
22
|
* - Blue (pulsing): Agents actively running
|
|
23
23
|
* - Green: Other active agents
|
|
24
24
|
*/
|
|
@@ -3,7 +3,7 @@ import { cn } from "../../lib/utils";
|
|
|
3
3
|
/**
|
|
4
4
|
* Helper function to get status configuration for an individual agent
|
|
5
5
|
* Handles both numeric and string status values
|
|
6
|
-
* Enum: New=0, Running=1, WaitingForApproval=2, Completed=3, Error=4, Closed=5, Idle=6
|
|
6
|
+
* Enum: New=0, Running=1, WaitingForApproval=2, Completed=3, Error=4, Closed=5, Idle=6, CostLimitReached=7
|
|
7
7
|
*/
|
|
8
8
|
export function getAgentStatusConfig(agent) {
|
|
9
9
|
const status = agent.status;
|
|
@@ -57,6 +57,13 @@ export function getAgentStatusConfig(agent) {
|
|
|
57
57
|
shouldPulse: false,
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
+
else if (status === "costLimitReached" || status === 7) {
|
|
61
|
+
return {
|
|
62
|
+
color: "bg-amber-500",
|
|
63
|
+
label: "Status: Cost Limit Reached",
|
|
64
|
+
shouldPulse: false,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
60
67
|
// Default fallback - log for debugging
|
|
61
68
|
console.warn("Unknown agent status:", status, typeof status);
|
|
62
69
|
return {
|
|
@@ -68,7 +75,7 @@ export function getAgentStatusConfig(agent) {
|
|
|
68
75
|
/**
|
|
69
76
|
* Badge that overlays on the agent icon to show status
|
|
70
77
|
* Always displays the total number of active agents with color-coded status:
|
|
71
|
-
* - Amber: Agents waiting for approval (highest priority)
|
|
78
|
+
* - Amber: Agents waiting for approval or cost limit reached (highest priority)
|
|
72
79
|
* - Blue (pulsing): Agents actively running
|
|
73
80
|
* - Green: Other active agents
|
|
74
81
|
*/
|
|
@@ -87,6 +94,15 @@ export function AgentStatusBadge({ status, className }) {
|
|
|
87
94
|
content: _jsx("span", { className: "text-[8px] font-bold", children: status.total }),
|
|
88
95
|
};
|
|
89
96
|
}
|
|
97
|
+
// Cost limit reached - also requires user action
|
|
98
|
+
if (status.costLimitReached > 0) {
|
|
99
|
+
return {
|
|
100
|
+
baseClasses: "-right-2 -top-2",
|
|
101
|
+
bgColor: "bg-amber-500",
|
|
102
|
+
title: `${status.costLimitReached} agent${status.costLimitReached > 1 ? "s" : ""} cost limit reached (${status.total} total active)`,
|
|
103
|
+
content: _jsx("span", { className: "text-[8px] font-bold", children: status.total }),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
90
106
|
// Running agents - show count with pulsing indicator
|
|
91
107
|
if (status.running > 0) {
|
|
92
108
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentStatusBadge.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentStatusBadge.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AgentStatusBadge.js","sourceRoot":"","sources":["../../../src/editor/ai/AgentStatusBadge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -375,18 +375,22 @@ const calculateTotalTokens = (messages) => {
|
|
|
375
375
|
input: acc.input + (message.inputTokens || 0),
|
|
376
376
|
output: acc.output + (message.outputTokens || 0),
|
|
377
377
|
cached: acc.cached + (message.cachedInputTokens || 0),
|
|
378
|
+
cacheWrite: acc.cacheWrite,
|
|
378
379
|
inputCost: acc.inputCost + (message.inputTokenCost || 0),
|
|
379
380
|
outputCost: acc.outputCost + (message.outputTokenCost || 0),
|
|
380
381
|
cachedCost: acc.cachedCost + (message.cachedInputTokenCost || 0),
|
|
382
|
+
cacheWriteCost: acc.cacheWriteCost,
|
|
381
383
|
totalCost: acc.totalCost + (message.totalCost || 0),
|
|
382
384
|
};
|
|
383
385
|
}, {
|
|
384
386
|
input: 0,
|
|
385
387
|
output: 0,
|
|
386
388
|
cached: 0,
|
|
389
|
+
cacheWrite: 0,
|
|
387
390
|
inputCost: 0,
|
|
388
391
|
outputCost: 0,
|
|
389
392
|
cachedCost: 0,
|
|
393
|
+
cacheWriteCost: 0,
|
|
390
394
|
totalCost: 0,
|
|
391
395
|
});
|
|
392
396
|
return totals;
|
|
@@ -771,9 +775,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
771
775
|
input: Number(data.totalInputTokens) || 0,
|
|
772
776
|
output: Number(data.totalOutputTokens) || 0,
|
|
773
777
|
cached: Number(data.totalCachedTokens) || 0,
|
|
778
|
+
cacheWrite: Number(data.totalCacheWriteTokens) || 0,
|
|
774
779
|
inputCost: Number(data.totalInputTokenCost) || 0,
|
|
775
780
|
outputCost: Number(data.totalOutputTokenCost) || 0,
|
|
776
781
|
cachedCost: Number(data.totalCachedTokenCost) || 0,
|
|
782
|
+
cacheWriteCost: Number(data.totalCacheWriteTokenCost) || 0,
|
|
777
783
|
totalCost: Number(data.totalCost) || 0,
|
|
778
784
|
currency: data.currency || "USD",
|
|
779
785
|
});
|
|
@@ -927,9 +933,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
927
933
|
input: Number(data.totalInputTokens) || 0,
|
|
928
934
|
output: Number(data.totalOutputTokens) || 0,
|
|
929
935
|
cached: Number(data.totalCachedTokens) || 0,
|
|
936
|
+
cacheWrite: Number(data.totalCacheWriteTokens) || 0,
|
|
930
937
|
inputCost: Number(data.totalInputTokenCost) || 0,
|
|
931
938
|
outputCost: Number(data.totalOutputTokenCost) || 0,
|
|
932
939
|
cachedCost: Number(data.totalCachedTokenCost) || 0,
|
|
940
|
+
cacheWriteCost: Number(data.totalCacheWriteTokenCost) || 0,
|
|
933
941
|
totalCost: Number(data.totalCost) || 0,
|
|
934
942
|
currency: data.currency || "USD",
|
|
935
943
|
});
|
|
@@ -1036,7 +1044,9 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1036
1044
|
break;
|
|
1037
1045
|
case "statusUpdate":
|
|
1038
1046
|
try {
|
|
1039
|
-
|
|
1047
|
+
// Check both 'kind' and 'state' for backward compatibility
|
|
1048
|
+
const kind = message?.data?.kind ||
|
|
1049
|
+
message?.data?.state;
|
|
1040
1050
|
if (kind === "streamOpen") {
|
|
1041
1051
|
setIsConnecting(false);
|
|
1042
1052
|
// Don't clear waiting state here - let it be cleared when first content arrives
|
|
@@ -1051,9 +1061,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1051
1061
|
input: Number(totals.totalInputTokens) || 0,
|
|
1052
1062
|
output: Number(totals.totalOutputTokens) || 0,
|
|
1053
1063
|
cached: Number(totals.totalCachedInputTokens) || 0,
|
|
1064
|
+
cacheWrite: Number(totals.totalCacheWriteTokens) || 0,
|
|
1054
1065
|
inputCost: Number(totals.totalInputTokenCost) || 0,
|
|
1055
1066
|
outputCost: Number(totals.totalOutputTokenCost) || 0,
|
|
1056
1067
|
cachedCost: Number(totals.totalCachedInputTokenCost) || 0,
|
|
1068
|
+
cacheWriteCost: Number(totals.totalCacheWriteTokenCost) || 0,
|
|
1057
1069
|
totalCost: totalCost,
|
|
1058
1070
|
currency: totals.currency,
|
|
1059
1071
|
});
|
|
@@ -1171,6 +1183,33 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1171
1183
|
}
|
|
1172
1184
|
});
|
|
1173
1185
|
}
|
|
1186
|
+
else if (kind === "cost_limit_reached") {
|
|
1187
|
+
// Cost limit has been reached - show banner and stop waiting
|
|
1188
|
+
// NOTE: Stream stays connected so user can extend limit and continue immediately
|
|
1189
|
+
console.log("[AgentTerminal] Cost limit reached notification received", message);
|
|
1190
|
+
const data = message.data || {};
|
|
1191
|
+
const totalCost = Number(data.totalCost) || 0;
|
|
1192
|
+
// Use costLimit from the notification data, or fall back to agent.costLimit
|
|
1193
|
+
const costLimit = Number(data.costLimit) || agent?.costLimit || 0;
|
|
1194
|
+
console.log("[AgentTerminal] Setting cost limit exceeded state:", {
|
|
1195
|
+
totalCost,
|
|
1196
|
+
costLimit,
|
|
1197
|
+
agentCostLimit: agent?.costLimit,
|
|
1198
|
+
dataCostLimit: data.costLimit,
|
|
1199
|
+
dataValues: data,
|
|
1200
|
+
});
|
|
1201
|
+
// Set the state with values from the notification
|
|
1202
|
+
setCostLimitExceeded({
|
|
1203
|
+
totalCost: totalCost,
|
|
1204
|
+
costLimit: costLimit,
|
|
1205
|
+
initialCostLimit: costLimit,
|
|
1206
|
+
});
|
|
1207
|
+
// Clear waiting states but keep stream connected
|
|
1208
|
+
setIsWaitingForResponse(false);
|
|
1209
|
+
setIsConnecting(false);
|
|
1210
|
+
shouldCreateNewMessage.current = false;
|
|
1211
|
+
break;
|
|
1212
|
+
}
|
|
1174
1213
|
else if (kind === "toolApprovalGranted" ||
|
|
1175
1214
|
kind === "toolApprovalRejected") {
|
|
1176
1215
|
const data = message.data || {};
|
|
@@ -1699,31 +1738,37 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1699
1738
|
// For existing agents, use database metadata or none
|
|
1700
1739
|
setAgentMetadata(parsedMeta);
|
|
1701
1740
|
// Connect to stream if agent is running
|
|
1702
|
-
//
|
|
1741
|
+
// Keep stream open for: running, waiting for approval, or cost limit reached
|
|
1703
1742
|
const isRunning = agentData.status === "running" || agentData.status === 1;
|
|
1704
1743
|
const isWaitingForApproval = agentData.status === "waitingForApproval" ||
|
|
1705
1744
|
agentData.status === 2;
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1745
|
+
const isCostLimitReached = agentData.status === "costLimitReached" ||
|
|
1746
|
+
agentData.status === 7;
|
|
1747
|
+
if (isRunning || isWaitingForApproval || isCostLimitReached) {
|
|
1748
|
+
// Auto-connect for running agents, agents waiting for approval, and agents at cost limit
|
|
1749
|
+
// (stream stays open so user can extend limit and continue)
|
|
1709
1750
|
setTimeout(async () => {
|
|
1710
1751
|
if (abortControllerRef.current) {
|
|
1711
1752
|
return;
|
|
1712
1753
|
}
|
|
1713
1754
|
shouldCreateNewMessage.current = false;
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1755
|
+
// For cost limit reached, just connect to stream - don't restart agent
|
|
1756
|
+
// For running/approval states, signal the backend we're reconnecting
|
|
1757
|
+
if (!isCostLimitReached) {
|
|
1758
|
+
try {
|
|
1759
|
+
if (editContext?.sessionId) {
|
|
1760
|
+
await startAgent({
|
|
1761
|
+
agentId: agentData.id,
|
|
1762
|
+
message: "",
|
|
1763
|
+
sessionId: editContext.sessionId,
|
|
1764
|
+
profileId: agentData.profileId || "",
|
|
1765
|
+
model: agentData.model,
|
|
1766
|
+
});
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
catch (startError) {
|
|
1770
|
+
console.warn("Failed to call startAgent during reconnection:", startError);
|
|
1723
1771
|
}
|
|
1724
|
-
}
|
|
1725
|
-
catch (startError) {
|
|
1726
|
-
console.warn("Failed to call startAgent during reconnection:", startError);
|
|
1727
1772
|
}
|
|
1728
1773
|
await connectToStream(agentData);
|
|
1729
1774
|
}, 100);
|
|
@@ -2593,21 +2638,31 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2593
2638
|
if (!costLimitExceeded)
|
|
2594
2639
|
return null;
|
|
2595
2640
|
const { totalCost, costLimit, initialCostLimit } = costLimitExceeded;
|
|
2596
|
-
return (_jsxs("div", { className: "m-3 rounded border border-amber-300 bg-amber-50 p-3 text-xs text-amber-900", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500", strokeWidth: 1 }), _jsxs("span", { children: ["Cost limit exceeded. Spent $", totalCost.toFixed(
|
|
2641
|
+
return (_jsxs("div", { className: "m-3 rounded border border-amber-300 bg-amber-50 p-3 text-xs text-amber-900", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500", strokeWidth: 1 }), _jsxs("span", { children: ["Cost limit exceeded. Spent $", totalCost.toFixed(2), " / $", costLimit.toFixed(2), "."] })] }), _jsx("div", { className: "flex gap-2", children: _jsx("button", { className: "rounded border border-amber-300 bg-white px-2 py-1 hover:bg-amber-100", onClick: async () => {
|
|
2597
2642
|
if (!agent?.id)
|
|
2598
2643
|
return;
|
|
2599
2644
|
try {
|
|
2600
|
-
// Extend
|
|
2645
|
+
// Extend cost limit - backend will automatically resume the agent
|
|
2601
2646
|
const result = await updateAgentCostLimit(agent.id, "extend");
|
|
2602
2647
|
// Update the agent's cost limit in local state
|
|
2603
2648
|
if (result.success && result.costLimit !== undefined) {
|
|
2604
2649
|
setAgent((prev) => prev ? { ...prev, costLimit: result.costLimit } : prev);
|
|
2605
2650
|
}
|
|
2651
|
+
// Clear the banner and set waiting state
|
|
2652
|
+
// Agent will resume automatically via backend's ResumeAgentAsync
|
|
2606
2653
|
setCostLimitExceeded(null);
|
|
2607
|
-
|
|
2654
|
+
setIsWaitingForResponse(true);
|
|
2655
|
+
isWaitingRef.current = true;
|
|
2656
|
+
setShouldAutoScroll(true);
|
|
2657
|
+
console.log("[AgentTerminal] Cost limit extended to $" +
|
|
2658
|
+
result.costLimit?.toFixed(4) +
|
|
2659
|
+
" - agent resuming via backend");
|
|
2608
2660
|
}
|
|
2609
2661
|
catch (e) {
|
|
2610
|
-
console.error("Failed to extend cost limit", e);
|
|
2662
|
+
console.error("Failed to extend cost limit:", e);
|
|
2663
|
+
setError(e instanceof Error
|
|
2664
|
+
? e.message
|
|
2665
|
+
: "Failed to extend cost limit");
|
|
2611
2666
|
}
|
|
2612
2667
|
}, children: "Extend limit and continue" }) })] }));
|
|
2613
2668
|
};
|
|
@@ -2737,9 +2792,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2737
2792
|
input: liveTotals.input,
|
|
2738
2793
|
output: liveTotals.output,
|
|
2739
2794
|
cached: liveTotals.cached,
|
|
2795
|
+
cacheWrite: liveTotals.cacheWrite ?? 0,
|
|
2740
2796
|
inputCost: liveTotals.inputCost,
|
|
2741
2797
|
outputCost: liveTotals.outputCost,
|
|
2742
2798
|
cachedCost: liveTotals.cachedCost,
|
|
2799
|
+
cacheWriteCost: liveTotals.cacheWriteCost ?? 0,
|
|
2743
2800
|
totalCost: liveTotals.totalCost,
|
|
2744
2801
|
}
|
|
2745
2802
|
: totalTokens, costLimit: agent?.costLimit }), (() => {
|