@alpaca-editor/core 1.0.4149 → 1.0.4154
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/AgentTerminal.js +69 -10
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +2 -2
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +0 -6
- package/dist/editor/services/aiService.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/AgentTerminal.tsx +92 -13
- package/src/editor/client/hooks/useSocketMessageHandler.ts +13 -13
- package/src/editor/services/aiService.ts +0 -10
- 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":"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"}
|
|
@@ -250,8 +250,7 @@ const TodoListPanel = ({ messages, agentMetadata, }) => {
|
|
|
250
250
|
// First try to get todos from agent metadata (real-time updates)
|
|
251
251
|
const metadataTodos = (() => {
|
|
252
252
|
try {
|
|
253
|
-
const
|
|
254
|
-
const todoList = context?.todoList;
|
|
253
|
+
const todoList = agentMetadata?.additionalData?.todoList;
|
|
255
254
|
if (todoList?.items && Array.isArray(todoList.items)) {
|
|
256
255
|
return todoList.items
|
|
257
256
|
.map((item, idx) => ({
|
|
@@ -266,9 +265,12 @@ const TodoListPanel = ({ messages, agentMetadata, }) => {
|
|
|
266
265
|
}))
|
|
267
266
|
.filter((item) => item.text);
|
|
268
267
|
}
|
|
268
|
+
else {
|
|
269
|
+
console.log("📋 No todo list found in metadata. AgentMetadata:", agentMetadata);
|
|
270
|
+
}
|
|
269
271
|
}
|
|
270
272
|
catch (e) {
|
|
271
|
-
|
|
273
|
+
console.error("📋 Error extracting todos from metadata:", e);
|
|
272
274
|
}
|
|
273
275
|
return null;
|
|
274
276
|
})();
|
|
@@ -373,18 +375,22 @@ const calculateTotalTokens = (messages) => {
|
|
|
373
375
|
input: acc.input + (message.inputTokens || 0),
|
|
374
376
|
output: acc.output + (message.outputTokens || 0),
|
|
375
377
|
cached: acc.cached + (message.cachedInputTokens || 0),
|
|
378
|
+
cacheWrite: acc.cacheWrite,
|
|
376
379
|
inputCost: acc.inputCost + (message.inputTokenCost || 0),
|
|
377
380
|
outputCost: acc.outputCost + (message.outputTokenCost || 0),
|
|
378
381
|
cachedCost: acc.cachedCost + (message.cachedInputTokenCost || 0),
|
|
382
|
+
cacheWriteCost: acc.cacheWriteCost,
|
|
379
383
|
totalCost: acc.totalCost + (message.totalCost || 0),
|
|
380
384
|
};
|
|
381
385
|
}, {
|
|
382
386
|
input: 0,
|
|
383
387
|
output: 0,
|
|
384
388
|
cached: 0,
|
|
389
|
+
cacheWrite: 0,
|
|
385
390
|
inputCost: 0,
|
|
386
391
|
outputCost: 0,
|
|
387
392
|
cachedCost: 0,
|
|
393
|
+
cacheWriteCost: 0,
|
|
388
394
|
totalCost: 0,
|
|
389
395
|
});
|
|
390
396
|
return totals;
|
|
@@ -769,9 +775,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
769
775
|
input: Number(data.totalInputTokens) || 0,
|
|
770
776
|
output: Number(data.totalOutputTokens) || 0,
|
|
771
777
|
cached: Number(data.totalCachedTokens) || 0,
|
|
778
|
+
cacheWrite: Number(data.totalCacheWriteTokens) || 0,
|
|
772
779
|
inputCost: Number(data.totalInputTokenCost) || 0,
|
|
773
780
|
outputCost: Number(data.totalOutputTokenCost) || 0,
|
|
774
781
|
cachedCost: Number(data.totalCachedTokenCost) || 0,
|
|
782
|
+
cacheWriteCost: Number(data.totalCacheWriteTokenCost) || 0,
|
|
775
783
|
totalCost: Number(data.totalCost) || 0,
|
|
776
784
|
currency: data.currency || "USD",
|
|
777
785
|
});
|
|
@@ -925,9 +933,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
925
933
|
input: Number(data.totalInputTokens) || 0,
|
|
926
934
|
output: Number(data.totalOutputTokens) || 0,
|
|
927
935
|
cached: Number(data.totalCachedTokens) || 0,
|
|
936
|
+
cacheWrite: Number(data.totalCacheWriteTokens) || 0,
|
|
928
937
|
inputCost: Number(data.totalInputTokenCost) || 0,
|
|
929
938
|
outputCost: Number(data.totalOutputTokenCost) || 0,
|
|
930
939
|
cachedCost: Number(data.totalCachedTokenCost) || 0,
|
|
940
|
+
cacheWriteCost: Number(data.totalCacheWriteTokenCost) || 0,
|
|
931
941
|
totalCost: Number(data.totalCost) || 0,
|
|
932
942
|
currency: data.currency || "USD",
|
|
933
943
|
});
|
|
@@ -1034,7 +1044,9 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1034
1044
|
break;
|
|
1035
1045
|
case "statusUpdate":
|
|
1036
1046
|
try {
|
|
1037
|
-
|
|
1047
|
+
// Check both 'kind' and 'state' for backward compatibility
|
|
1048
|
+
const kind = message?.data?.kind ||
|
|
1049
|
+
message?.data?.state;
|
|
1038
1050
|
if (kind === "streamOpen") {
|
|
1039
1051
|
setIsConnecting(false);
|
|
1040
1052
|
// Don't clear waiting state here - let it be cleared when first content arrives
|
|
@@ -1049,9 +1061,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1049
1061
|
input: Number(totals.totalInputTokens) || 0,
|
|
1050
1062
|
output: Number(totals.totalOutputTokens) || 0,
|
|
1051
1063
|
cached: Number(totals.totalCachedInputTokens) || 0,
|
|
1064
|
+
cacheWrite: Number(totals.totalCacheWriteTokens) || 0,
|
|
1052
1065
|
inputCost: Number(totals.totalInputTokenCost) || 0,
|
|
1053
1066
|
outputCost: Number(totals.totalOutputTokenCost) || 0,
|
|
1054
1067
|
cachedCost: Number(totals.totalCachedInputTokenCost) || 0,
|
|
1068
|
+
cacheWriteCost: Number(totals.totalCacheWriteTokenCost) || 0,
|
|
1055
1069
|
totalCost: totalCost,
|
|
1056
1070
|
currency: totals.currency,
|
|
1057
1071
|
});
|
|
@@ -1169,6 +1183,22 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1169
1183
|
}
|
|
1170
1184
|
});
|
|
1171
1185
|
}
|
|
1186
|
+
else if (kind === "cost_limit_reached") {
|
|
1187
|
+
// Cost limit has been reached - show banner and stop waiting
|
|
1188
|
+
const data = message.data || {};
|
|
1189
|
+
const totalCost = Number(data.totalCost) || 0;
|
|
1190
|
+
if (agent?.costLimit) {
|
|
1191
|
+
setCostLimitExceeded({
|
|
1192
|
+
totalCost: totalCost,
|
|
1193
|
+
costLimit: agent.costLimit,
|
|
1194
|
+
initialCostLimit: agent.costLimit,
|
|
1195
|
+
});
|
|
1196
|
+
}
|
|
1197
|
+
setIsWaitingForResponse(false);
|
|
1198
|
+
setIsConnecting(false);
|
|
1199
|
+
shouldCreateNewMessage.current = false;
|
|
1200
|
+
break;
|
|
1201
|
+
}
|
|
1172
1202
|
else if (kind === "toolApprovalGranted" ||
|
|
1173
1203
|
kind === "toolApprovalRejected") {
|
|
1174
1204
|
const data = message.data || {};
|
|
@@ -1336,8 +1366,14 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1336
1366
|
case "contextUpdate":
|
|
1337
1367
|
// Update agent context when backend sends context update
|
|
1338
1368
|
try {
|
|
1369
|
+
console.log("📥 Received contextUpdate message:", message);
|
|
1339
1370
|
const updatedContext = message.data;
|
|
1340
1371
|
if (updatedContext) {
|
|
1372
|
+
console.log("📝 Updating agent metadata with:", updatedContext);
|
|
1373
|
+
// Check if there's a todo list in the context
|
|
1374
|
+
if (updatedContext.additionalData?.todoList) {
|
|
1375
|
+
console.log("✅ Todo list found in context update:", updatedContext.additionalData.todoList);
|
|
1376
|
+
}
|
|
1341
1377
|
// Update local metadata state
|
|
1342
1378
|
setAgentMetadata((prev) => ({
|
|
1343
1379
|
...prev,
|
|
@@ -1352,11 +1388,14 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1352
1388
|
agentContext: JSON.stringify(updatedContext),
|
|
1353
1389
|
};
|
|
1354
1390
|
});
|
|
1355
|
-
console.log("✅ Context updated from backend
|
|
1391
|
+
console.log("✅ Context updated from backend successfully");
|
|
1392
|
+
}
|
|
1393
|
+
else {
|
|
1394
|
+
console.warn("⚠️ Context update received but updatedContext is null/undefined");
|
|
1356
1395
|
}
|
|
1357
1396
|
}
|
|
1358
1397
|
catch (err) {
|
|
1359
|
-
console.error("Error handling context update:", err);
|
|
1398
|
+
console.error("❌ Error handling context update:", err);
|
|
1360
1399
|
}
|
|
1361
1400
|
break;
|
|
1362
1401
|
case "error":
|
|
@@ -2582,8 +2621,8 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2582
2621
|
if (!costLimitExceeded)
|
|
2583
2622
|
return null;
|
|
2584
2623
|
const { totalCost, costLimit, initialCostLimit } = costLimitExceeded;
|
|
2585
|
-
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(
|
|
2586
|
-
if (!agent?.id)
|
|
2624
|
+
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 () => {
|
|
2625
|
+
if (!agent?.id || !editContext?.sessionId)
|
|
2587
2626
|
return;
|
|
2588
2627
|
try {
|
|
2589
2628
|
// Extend by initial cost limit amount
|
|
@@ -2593,10 +2632,28 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2593
2632
|
setAgent((prev) => prev ? { ...prev, costLimit: result.costLimit } : prev);
|
|
2594
2633
|
}
|
|
2595
2634
|
setCostLimitExceeded(null);
|
|
2596
|
-
|
|
2635
|
+
// Resume agent execution with empty message
|
|
2636
|
+
const request = {
|
|
2637
|
+
agentId: agent.id,
|
|
2638
|
+
message: "",
|
|
2639
|
+
sessionId: editContext.sessionId,
|
|
2640
|
+
profileId: activeProfile?.id || profiles[0]?.id || "",
|
|
2641
|
+
profile: activeProfile?.name || profiles[0]?.name || "",
|
|
2642
|
+
model: selectedModelId,
|
|
2643
|
+
mode: mode,
|
|
2644
|
+
context: agentMetadata,
|
|
2645
|
+
};
|
|
2646
|
+
setIsWaitingForResponse(true);
|
|
2647
|
+
isWaitingRef.current = true;
|
|
2648
|
+
setShouldAutoScroll(true);
|
|
2649
|
+
await startAgent(request);
|
|
2650
|
+
await connectToStream();
|
|
2597
2651
|
}
|
|
2598
2652
|
catch (e) {
|
|
2599
|
-
console.error("Failed to extend cost limit", e);
|
|
2653
|
+
console.error("Failed to extend cost limit and resume agent", e);
|
|
2654
|
+
setError(e instanceof Error
|
|
2655
|
+
? e.message
|
|
2656
|
+
: "Failed to extend cost limit and resume agent");
|
|
2600
2657
|
}
|
|
2601
2658
|
}, children: "Extend limit and continue" }) })] }));
|
|
2602
2659
|
};
|
|
@@ -2726,9 +2783,11 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2726
2783
|
input: liveTotals.input,
|
|
2727
2784
|
output: liveTotals.output,
|
|
2728
2785
|
cached: liveTotals.cached,
|
|
2786
|
+
cacheWrite: liveTotals.cacheWrite ?? 0,
|
|
2729
2787
|
inputCost: liveTotals.inputCost,
|
|
2730
2788
|
outputCost: liveTotals.outputCost,
|
|
2731
2789
|
cachedCost: liveTotals.cachedCost,
|
|
2790
|
+
cacheWriteCost: liveTotals.cacheWriteCost ?? 0,
|
|
2732
2791
|
totalCost: liveTotals.totalCost,
|
|
2733
2792
|
}
|
|
2734
2793
|
: totalTokens, costLimit: agent?.costLimit }), (() => {
|