@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.
@@ -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
- if (agent?.costLimit) {
1191
- setCostLimitExceeded({
1192
- totalCost: totalCost,
1193
- costLimit: agent.costLimit,
1194
- initialCostLimit: agent.costLimit,
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
- // For agents waiting for approval, DON'T auto-reconnect on load - let the user click approve first
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
- if (isRunning || isWaitingForApproval) {
1735
- // Auto-connect for running agents AND agents waiting for approval
1736
- // (stream stays open during approval now)
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
- try {
1743
- if (editContext?.sessionId) {
1744
- await startAgent({
1745
- agentId: agentData.id,
1746
- message: "",
1747
- sessionId: editContext.sessionId,
1748
- profileId: agentData.profileId || "",
1749
- model: agentData.model,
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 || !editContext?.sessionId)
2642
+ if (!agent?.id)
2626
2643
  return;
2627
2644
  try {
2628
- // Extend by initial cost limit amount
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
- await startAgent(request);
2650
- await connectToStream();
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 and resume agent", e);
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 and resume agent");
2665
+ : "Failed to extend cost limit");
2657
2666
  }
2658
2667
  }, children: "Extend limit and continue" }) })] }));
2659
2668
  };