@alpaca-editor/core 1.0.4154 → 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/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 +49 -40
- 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/ai/AgentStatusBadge.tsx +18 -2
- package/src/editor/ai/AgentTerminal.tsx +64 -47
- package/src/editor/ai/useAgentStatus.ts +35 -21
- package/src/editor/services/agentService.ts +1 -0
- package/src/revision.ts +2 -2
|
@@ -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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"}
|
|
@@ -1185,15 +1185,26 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1185
1185
|
}
|
|
1186
1186
|
else if (kind === "cost_limit_reached") {
|
|
1187
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);
|
|
1188
1190
|
const data = message.data || {};
|
|
1189
1191
|
const totalCost = Number(data.totalCost) || 0;
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
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
|
|
1197
1208
|
setIsWaitingForResponse(false);
|
|
1198
1209
|
setIsConnecting(false);
|
|
1199
1210
|
shouldCreateNewMessage.current = false;
|
|
@@ -1727,31 +1738,37 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
1727
1738
|
// For existing agents, use database metadata or none
|
|
1728
1739
|
setAgentMetadata(parsedMeta);
|
|
1729
1740
|
// Connect to stream if agent is running
|
|
1730
|
-
//
|
|
1741
|
+
// Keep stream open for: running, waiting for approval, or cost limit reached
|
|
1731
1742
|
const isRunning = agentData.status === "running" || agentData.status === 1;
|
|
1732
1743
|
const isWaitingForApproval = agentData.status === "waitingForApproval" ||
|
|
1733
1744
|
agentData.status === 2;
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
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)
|
|
1737
1750
|
setTimeout(async () => {
|
|
1738
1751
|
if (abortControllerRef.current) {
|
|
1739
1752
|
return;
|
|
1740
1753
|
}
|
|
1741
1754
|
shouldCreateNewMessage.current = false;
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
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);
|
|
1751
1771
|
}
|
|
1752
|
-
}
|
|
1753
|
-
catch (startError) {
|
|
1754
|
-
console.warn("Failed to call startAgent during reconnection:", startError);
|
|
1755
1772
|
}
|
|
1756
1773
|
await connectToStream(agentData);
|
|
1757
1774
|
}, 100);
|
|
@@ -2622,38 +2639,30 @@ export function AgentTerminal({ agentStub, initialMetadata, profiles, }) {
|
|
|
2622
2639
|
return null;
|
|
2623
2640
|
const { totalCost, costLimit, initialCostLimit } = costLimitExceeded;
|
|
2624
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 () => {
|
|
2625
|
-
if (!agent?.id
|
|
2642
|
+
if (!agent?.id)
|
|
2626
2643
|
return;
|
|
2627
2644
|
try {
|
|
2628
|
-
// Extend
|
|
2645
|
+
// Extend cost limit - backend will automatically resume the agent
|
|
2629
2646
|
const result = await updateAgentCostLimit(agent.id, "extend");
|
|
2630
2647
|
// Update the agent's cost limit in local state
|
|
2631
2648
|
if (result.success && result.costLimit !== undefined) {
|
|
2632
2649
|
setAgent((prev) => prev ? { ...prev, costLimit: result.costLimit } : prev);
|
|
2633
2650
|
}
|
|
2651
|
+
// Clear the banner and set waiting state
|
|
2652
|
+
// Agent will resume automatically via backend's ResumeAgentAsync
|
|
2634
2653
|
setCostLimitExceeded(null);
|
|
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
2654
|
setIsWaitingForResponse(true);
|
|
2647
2655
|
isWaitingRef.current = true;
|
|
2648
2656
|
setShouldAutoScroll(true);
|
|
2649
|
-
|
|
2650
|
-
|
|
2657
|
+
console.log("[AgentTerminal] Cost limit extended to $" +
|
|
2658
|
+
result.costLimit?.toFixed(4) +
|
|
2659
|
+
" - agent resuming via backend");
|
|
2651
2660
|
}
|
|
2652
2661
|
catch (e) {
|
|
2653
|
-
console.error("Failed to extend cost limit
|
|
2662
|
+
console.error("Failed to extend cost limit:", e);
|
|
2654
2663
|
setError(e instanceof Error
|
|
2655
2664
|
? e.message
|
|
2656
|
-
: "Failed to extend cost limit
|
|
2665
|
+
: "Failed to extend cost limit");
|
|
2657
2666
|
}
|
|
2658
2667
|
}, children: "Extend limit and continue" }) })] }));
|
|
2659
2668
|
};
|