@stigmer/react 0.0.55 → 0.0.57
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/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +1 -1
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactsWidget.d.ts +1 -1
- package/execution/ArtifactsWidget.js +1 -1
- package/execution/ExecutionProgress.d.ts.map +1 -1
- package/execution/ExecutionProgress.js +2 -59
- package/execution/ExecutionProgress.js.map +1 -1
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +31 -6
- package/execution/MessageThread.js.map +1 -1
- package/execution/SubAgentSection.d.ts +25 -4
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +70 -11
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TodoList.d.ts +42 -0
- package/execution/TodoList.d.ts.map +1 -0
- package/execution/TodoList.js +108 -0
- package/execution/TodoList.js.map +1 -0
- package/execution/ToolCallItem.js +1 -1
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/UsageWidget.d.ts +57 -0
- package/execution/UsageWidget.d.ts.map +1 -0
- package/execution/UsageWidget.js +72 -0
- package/execution/UsageWidget.js.map +1 -0
- package/execution/index.d.ts +4 -4
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +2 -2
- package/execution/index.js.map +1 -1
- package/execution/useExecutionArtifacts.d.ts +1 -1
- package/execution/useExecutionArtifacts.js +1 -1
- package/index.d.ts +4 -4
- package/index.d.ts.map +1 -1
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/package.json +4 -4
- package/session/index.d.ts +2 -0
- package/session/index.d.ts.map +1 -1
- package/session/index.js +1 -0
- package/session/index.js.map +1 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +42 -5
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionUsage.d.ts +65 -0
- package/session/useSessionUsage.d.ts.map +1 -0
- package/session/useSessionUsage.js +107 -0
- package/session/useSessionUsage.js.map +1 -0
- package/src/execution/ApprovalCard.tsx +7 -13
- package/src/execution/ArtifactsWidget.tsx +1 -1
- package/src/execution/ExecutionProgress.tsx +2 -134
- package/src/execution/MessageThread.tsx +39 -6
- package/src/execution/SubAgentSection.tsx +323 -16
- package/src/execution/TodoList.tsx +202 -0
- package/src/execution/ToolCallItem.tsx +1 -1
- package/src/execution/{ExecutionCostSummary.tsx → UsageWidget.tsx} +43 -50
- package/src/execution/index.ts +10 -4
- package/src/execution/useExecutionArtifacts.ts +1 -1
- package/src/index.ts +12 -5
- package/src/session/index.ts +6 -0
- package/src/session/useSessionConversation.ts +56 -7
- package/src/session/useSessionUsage.ts +159 -0
- package/styles.css +1 -1
- package/execution/ExecutionCostSummary.d.ts +0 -47
- package/execution/ExecutionCostSummary.d.ts.map +0 -1
- package/execution/ExecutionCostSummary.js +0 -77
- package/execution/ExecutionCostSummary.js.map +0 -1
- package/execution/__tests__/ExecutionCostSummary.test.d.ts +0 -2
- package/execution/__tests__/ExecutionCostSummary.test.d.ts.map +0 -1
- package/execution/__tests__/ExecutionCostSummary.test.js +0 -255
- package/execution/__tests__/ExecutionCostSummary.test.js.map +0 -1
- package/execution/__tests__/useExecutionUsage.test.d.ts +0 -2
- package/execution/__tests__/useExecutionUsage.test.d.ts.map +0 -1
- package/execution/__tests__/useExecutionUsage.test.js +0 -303
- package/execution/__tests__/useExecutionUsage.test.js.map +0 -1
- package/execution/useExecutionUsage.d.ts +0 -45
- package/execution/useExecutionUsage.d.ts.map +0 -1
- package/execution/useExecutionUsage.js +0 -157
- package/execution/useExecutionUsage.js.map +0 -1
- package/src/execution/__tests__/ExecutionCostSummary.test.tsx +0 -416
- package/src/execution/__tests__/useExecutionUsage.test.tsx +0 -408
- package/src/execution/useExecutionUsage.ts +0 -213
|
@@ -8,6 +8,13 @@ import { useSubmitApproval } from "../execution/useSubmitApproval";
|
|
|
8
8
|
import { useSession } from "./useSession";
|
|
9
9
|
import { useSessionExecutions } from "./useSessionExecutions";
|
|
10
10
|
import { useUpdateSession } from "./useUpdateSession";
|
|
11
|
+
/**
|
|
12
|
+
* After an approval is submitted, the card is optimistically hidden for
|
|
13
|
+
* this many milliseconds. If the server still lists the same tool call
|
|
14
|
+
* as pending after the window expires, the card reappears so the user
|
|
15
|
+
* knows the approval was not processed.
|
|
16
|
+
*/
|
|
17
|
+
const DISMISS_GRACE_MS = 8_000;
|
|
11
18
|
/**
|
|
12
19
|
* Behavior hook that encapsulates the full conversation lifecycle for
|
|
13
20
|
* a session: loading data, streaming the active execution, submitting
|
|
@@ -60,7 +67,7 @@ export function useSessionConversation(sessionId, org) {
|
|
|
60
67
|
const { submitApproval: rawSubmitApproval, submittingToolCallIds, error: approvalError, clearError: clearApprovalError, } = useSubmitApproval();
|
|
61
68
|
const [pendingExecutionId, setPendingExecutionId] = useState(null);
|
|
62
69
|
const [pendingUserMessage, setPendingUserMessage] = useState(null);
|
|
63
|
-
const [
|
|
70
|
+
const [dismissTimestamps, setDismissTimestamps] = useState(new Map());
|
|
64
71
|
const listActiveId = useMemo(() => {
|
|
65
72
|
for (let i = executions.length - 1; i >= 0; i--) {
|
|
66
73
|
const phase = executions[i].status?.phase;
|
|
@@ -73,7 +80,7 @@ export function useSessionConversation(sessionId, org) {
|
|
|
73
80
|
const activeExecutionId = pendingExecutionId ?? listActiveId;
|
|
74
81
|
const stream = useExecutionStream(activeExecutionId);
|
|
75
82
|
useEffect(() => {
|
|
76
|
-
|
|
83
|
+
setDismissTimestamps(new Map());
|
|
77
84
|
}, [activeExecutionId]);
|
|
78
85
|
// Clear pendingExecutionId once the execution appears in the fetched list
|
|
79
86
|
useEffect(() => {
|
|
@@ -152,15 +159,45 @@ export function useSessionConversation(sessionId, org) {
|
|
|
152
159
|
setPendingUserMessage(null);
|
|
153
160
|
}
|
|
154
161
|
}, [sessionId, session, org, stigmer, create, updateSession, refetch, refetchSession]);
|
|
162
|
+
// Reconcile dismissed entries against server state on each stream
|
|
163
|
+
// snapshot. Two outcomes:
|
|
164
|
+
// - Server no longer lists the approval -> clean up (confirmed).
|
|
165
|
+
// - Server still lists it past the grace window -> evict so the card
|
|
166
|
+
// reappears, signaling to the user that the approval was not
|
|
167
|
+
// processed.
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (dismissTimestamps.size === 0)
|
|
170
|
+
return;
|
|
171
|
+
const serverPendingIds = new Set((activeStreamExecution?.status?.pendingApprovals ?? []).map((a) => a.toolCallId));
|
|
172
|
+
const now = Date.now();
|
|
173
|
+
const toRemove = [];
|
|
174
|
+
for (const [tcId, ts] of dismissTimestamps) {
|
|
175
|
+
if (!serverPendingIds.has(tcId)) {
|
|
176
|
+
toRemove.push(tcId);
|
|
177
|
+
}
|
|
178
|
+
else if (now - ts > DISMISS_GRACE_MS) {
|
|
179
|
+
toRemove.push(tcId);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (toRemove.length > 0) {
|
|
183
|
+
setDismissTimestamps((prev) => {
|
|
184
|
+
const next = new Map(prev);
|
|
185
|
+
for (const id of toRemove)
|
|
186
|
+
next.delete(id);
|
|
187
|
+
return next;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}, [activeStreamExecution, dismissTimestamps]);
|
|
191
|
+
const dismissedApprovalIds = useMemo(() => new Set(dismissTimestamps.keys()), [dismissTimestamps]);
|
|
155
192
|
const pendingApprovals = useMemo(() => {
|
|
156
193
|
const all = activeStreamExecution?.status?.pendingApprovals ?? [];
|
|
157
|
-
return all.filter((a) => !
|
|
158
|
-
}, [activeStreamExecution,
|
|
194
|
+
return all.filter((a) => !dismissTimestamps.has(a.toolCallId));
|
|
195
|
+
}, [activeStreamExecution, dismissTimestamps]);
|
|
159
196
|
const submitApproval = useCallback(async (toolCallId, action, comment) => {
|
|
160
197
|
if (!activeExecutionId)
|
|
161
198
|
return;
|
|
162
199
|
await rawSubmitApproval(activeExecutionId, toolCallId, action, comment);
|
|
163
|
-
|
|
200
|
+
setDismissTimestamps((prev) => new Map(prev).set(toolCallId, Date.now()));
|
|
164
201
|
}, [activeExecutionId, rawSubmitApproval]);
|
|
165
202
|
const isLoading = sessionLoading || executionsLoading;
|
|
166
203
|
const loadError = sessionError || executionsError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSessionConversation.js","sourceRoot":"","sources":["../../src/session/useSessionConversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
2
|
+
/**
|
|
3
|
+
* Per-model cost breakdown computed from per-message {@link LlmCallMetrics}.
|
|
4
|
+
*/
|
|
5
|
+
export interface ModelCostEntry {
|
|
6
|
+
readonly model: string;
|
|
7
|
+
readonly provider: string;
|
|
8
|
+
readonly estimatedCostUsd: number;
|
|
9
|
+
readonly inputTokens: number;
|
|
10
|
+
readonly outputTokens: number;
|
|
11
|
+
readonly cacheCreationTokens: number;
|
|
12
|
+
readonly cacheReadTokens: number;
|
|
13
|
+
readonly callCount: number;
|
|
14
|
+
}
|
|
15
|
+
export interface UseSessionUsageReturn {
|
|
16
|
+
/** Total estimated cost across all executions in the session. */
|
|
17
|
+
readonly totalCostUsd: number;
|
|
18
|
+
/** Total tokens (all types) across all executions. */
|
|
19
|
+
readonly totalTokens: number;
|
|
20
|
+
/** Total input tokens (non-cached) across all executions. */
|
|
21
|
+
readonly inputTokens: number;
|
|
22
|
+
/** Total output tokens across all executions. */
|
|
23
|
+
readonly outputTokens: number;
|
|
24
|
+
/** Total cache read tokens across all executions. */
|
|
25
|
+
readonly cacheReadTokens: number;
|
|
26
|
+
/** Total cache creation tokens across all executions. */
|
|
27
|
+
readonly cacheCreationTokens: number;
|
|
28
|
+
/** Total number of LLM calls across all executions. */
|
|
29
|
+
readonly llmCallCount: number;
|
|
30
|
+
/** Per-model breakdown, sorted by cost descending. */
|
|
31
|
+
readonly modelBreakdown: readonly ModelCostEntry[];
|
|
32
|
+
/** Primary model (first model encountered). */
|
|
33
|
+
readonly primaryModel: string;
|
|
34
|
+
/** Primary provider (first provider encountered). */
|
|
35
|
+
readonly primaryProvider: string;
|
|
36
|
+
/** `true` when at least one execution has cost data. */
|
|
37
|
+
readonly hasUsage: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Pure derivation hook that aggregates usage data across all executions
|
|
41
|
+
* in a session from per-message {@link LlmCallMetrics}.
|
|
42
|
+
*
|
|
43
|
+
* Follows the same pattern as {@link useSessionArtifacts} and
|
|
44
|
+
* {@link useSessionWriteBacks}: `useMemo`-based derivation, no side
|
|
45
|
+
* effects, no data fetching. Takes the same `executions` array input.
|
|
46
|
+
*
|
|
47
|
+
* Per-message `llm_metrics` on `AgentMessage` (type == MESSAGE_AI) is
|
|
48
|
+
* the single source of truth for cost data. This hook walks all messages
|
|
49
|
+
* (main agent + sub-agents) across all executions and sums the fields.
|
|
50
|
+
*
|
|
51
|
+
* @param executions - All executions for a session, in chronological
|
|
52
|
+
* order. Pass both completed and active-stream executions.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* const conv = useSessionConversation(sessionId, org);
|
|
57
|
+
* const allExecutions = [
|
|
58
|
+
* ...conv.completedExecutions,
|
|
59
|
+
* ...(conv.activeStreamExecution ? [conv.activeStreamExecution] : []),
|
|
60
|
+
* ];
|
|
61
|
+
* const { totalCostUsd, totalTokens, hasUsage } = useSessionUsage(allExecutions);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function useSessionUsage(executions: readonly AgentExecution[]): UseSessionUsageReturn;
|
|
65
|
+
//# sourceMappingURL=useSessionUsage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionUsage.d.ts","sourceRoot":"","sources":["../../src/session/useSessionUsage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAIlG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,yDAAyD;IACzD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,EAAE,SAAS,cAAc,EAAE,CAAC;IACnD,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,cAAc,EAAE,GACpC,qBAAqB,CAqFvB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Pure derivation hook that aggregates usage data across all executions
|
|
5
|
+
* in a session from per-message {@link LlmCallMetrics}.
|
|
6
|
+
*
|
|
7
|
+
* Follows the same pattern as {@link useSessionArtifacts} and
|
|
8
|
+
* {@link useSessionWriteBacks}: `useMemo`-based derivation, no side
|
|
9
|
+
* effects, no data fetching. Takes the same `executions` array input.
|
|
10
|
+
*
|
|
11
|
+
* Per-message `llm_metrics` on `AgentMessage` (type == MESSAGE_AI) is
|
|
12
|
+
* the single source of truth for cost data. This hook walks all messages
|
|
13
|
+
* (main agent + sub-agents) across all executions and sums the fields.
|
|
14
|
+
*
|
|
15
|
+
* @param executions - All executions for a session, in chronological
|
|
16
|
+
* order. Pass both completed and active-stream executions.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* const conv = useSessionConversation(sessionId, org);
|
|
21
|
+
* const allExecutions = [
|
|
22
|
+
* ...conv.completedExecutions,
|
|
23
|
+
* ...(conv.activeStreamExecution ? [conv.activeStreamExecution] : []),
|
|
24
|
+
* ];
|
|
25
|
+
* const { totalCostUsd, totalTokens, hasUsage } = useSessionUsage(allExecutions);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function useSessionUsage(executions) {
|
|
29
|
+
return useMemo(() => {
|
|
30
|
+
let totalCostUsd = 0;
|
|
31
|
+
let totalTokens = 0;
|
|
32
|
+
let inputTokens = 0;
|
|
33
|
+
let outputTokens = 0;
|
|
34
|
+
let cacheReadTokens = 0;
|
|
35
|
+
let cacheCreationTokens = 0;
|
|
36
|
+
let llmCallCount = 0;
|
|
37
|
+
let primaryModel = "";
|
|
38
|
+
let primaryProvider = "";
|
|
39
|
+
const modelMap = new Map();
|
|
40
|
+
const processMessage = (msg) => {
|
|
41
|
+
const m = msg.llmMetrics;
|
|
42
|
+
if (!m)
|
|
43
|
+
return;
|
|
44
|
+
totalCostUsd += m.estimatedCostUsd;
|
|
45
|
+
totalTokens += m.totalTokens;
|
|
46
|
+
inputTokens += m.inputTokens;
|
|
47
|
+
outputTokens += m.outputTokens;
|
|
48
|
+
cacheReadTokens += m.cacheReadTokens;
|
|
49
|
+
cacheCreationTokens += m.cacheCreationTokens;
|
|
50
|
+
llmCallCount++;
|
|
51
|
+
if (!primaryModel && m.model) {
|
|
52
|
+
primaryModel = m.model;
|
|
53
|
+
primaryProvider = m.provider;
|
|
54
|
+
}
|
|
55
|
+
const key = `${m.model}\0${m.provider}`;
|
|
56
|
+
const existing = modelMap.get(key);
|
|
57
|
+
if (existing) {
|
|
58
|
+
modelMap.set(key, {
|
|
59
|
+
...existing,
|
|
60
|
+
estimatedCostUsd: existing.estimatedCostUsd + m.estimatedCostUsd,
|
|
61
|
+
inputTokens: existing.inputTokens + m.inputTokens,
|
|
62
|
+
outputTokens: existing.outputTokens + m.outputTokens,
|
|
63
|
+
cacheCreationTokens: existing.cacheCreationTokens + m.cacheCreationTokens,
|
|
64
|
+
cacheReadTokens: existing.cacheReadTokens + m.cacheReadTokens,
|
|
65
|
+
callCount: existing.callCount + 1,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
modelMap.set(key, {
|
|
70
|
+
model: m.model,
|
|
71
|
+
provider: m.provider,
|
|
72
|
+
estimatedCostUsd: m.estimatedCostUsd,
|
|
73
|
+
inputTokens: m.inputTokens,
|
|
74
|
+
outputTokens: m.outputTokens,
|
|
75
|
+
cacheCreationTokens: m.cacheCreationTokens,
|
|
76
|
+
cacheReadTokens: m.cacheReadTokens,
|
|
77
|
+
callCount: 1,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
for (const execution of executions) {
|
|
82
|
+
for (const msg of execution.status?.messages ?? []) {
|
|
83
|
+
processMessage(msg);
|
|
84
|
+
}
|
|
85
|
+
for (const sub of execution.status?.subAgentExecutions ?? []) {
|
|
86
|
+
for (const msg of sub.messages) {
|
|
87
|
+
processMessage(msg);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const modelBreakdown = Array.from(modelMap.values()).sort((a, b) => b.estimatedCostUsd - a.estimatedCostUsd);
|
|
92
|
+
return {
|
|
93
|
+
totalCostUsd,
|
|
94
|
+
totalTokens,
|
|
95
|
+
inputTokens,
|
|
96
|
+
outputTokens,
|
|
97
|
+
cacheReadTokens,
|
|
98
|
+
cacheCreationTokens,
|
|
99
|
+
llmCallCount,
|
|
100
|
+
modelBreakdown,
|
|
101
|
+
primaryModel,
|
|
102
|
+
primaryProvider,
|
|
103
|
+
hasUsage: llmCallCount > 0,
|
|
104
|
+
};
|
|
105
|
+
}, [executions]);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=useSessionUsage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionUsage.js","sourceRoot":"","sources":["../../src/session/useSessionUsage.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,6 +134,12 @@ export function ApprovalCard({
|
|
|
134
134
|
)}
|
|
135
135
|
</span>
|
|
136
136
|
|
|
137
|
+
{pendingApproval.fromSubAgent && pendingApproval.subAgentName && (
|
|
138
|
+
<span className="shrink-0 rounded bg-muted px-1 py-0.5 font-mono text-muted-foreground">
|
|
139
|
+
via {pendingApproval.subAgentSubject || pendingApproval.subAgentName}
|
|
140
|
+
</span>
|
|
141
|
+
)}
|
|
142
|
+
|
|
137
143
|
<WaitingDuration requestedAt={pendingApproval.requestedAt} />
|
|
138
144
|
|
|
139
145
|
<span className="shrink-0 text-warning" aria-hidden="true">
|
|
@@ -143,19 +149,7 @@ export function ApprovalCard({
|
|
|
143
149
|
|
|
144
150
|
{/* Body */}
|
|
145
151
|
<div className="px-3 py-2.5 space-y-2">
|
|
146
|
-
{
|
|
147
|
-
{pendingApproval.fromSubAgent && pendingApproval.subAgentName && (
|
|
148
|
-
<p className="text-xs text-muted-foreground">
|
|
149
|
-
Sub-agent{" "}
|
|
150
|
-
<span className="font-medium text-foreground">
|
|
151
|
-
{pendingApproval.subAgentName}
|
|
152
|
-
</span>{" "}
|
|
153
|
-
wants to execute this tool
|
|
154
|
-
</p>
|
|
155
|
-
)}
|
|
156
|
-
|
|
157
|
-
{/* Approval message */}
|
|
158
|
-
{pendingApproval.message && (
|
|
152
|
+
{pendingApproval.message && categoryInfo.category !== "shell" && (
|
|
159
153
|
<p className="text-xs text-foreground">
|
|
160
154
|
{pendingApproval.message}
|
|
161
155
|
</p>
|
|
@@ -51,7 +51,7 @@ export interface ArtifactsWidgetProps {
|
|
|
51
51
|
*
|
|
52
52
|
* Returns `null` when the executions list is empty or no execution
|
|
53
53
|
* has artifacts, matching the conditional-render pattern of
|
|
54
|
-
* {@link ExecutionProgress} and {@link
|
|
54
|
+
* {@link ExecutionProgress} and {@link UsageWidget}.
|
|
55
55
|
*
|
|
56
56
|
* Renders without card chrome — each {@link ArtifactCard} provides its
|
|
57
57
|
* own border and padding. The consumer controls the container styling
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useMemo } from "react";
|
|
4
3
|
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
5
|
-
import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
6
|
-
import { TodoStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
7
4
|
import { cn } from "@stigmer/theme";
|
|
8
5
|
import { ExecutionPhaseBadge } from "./ExecutionPhaseBadge";
|
|
6
|
+
import { TodoList } from "./TodoList";
|
|
9
7
|
|
|
10
8
|
export interface ExecutionProgressProps {
|
|
11
9
|
/** The execution to display progress for. Renders nothing when null. */
|
|
@@ -13,17 +11,6 @@ export interface ExecutionProgressProps {
|
|
|
13
11
|
readonly className?: string;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
const STATUS_SORT_ORDER: ReadonlyMap<TodoStatus, number> = new Map([
|
|
17
|
-
[TodoStatus.TODO_IN_PROGRESS, 0],
|
|
18
|
-
[TodoStatus.TODO_PENDING, 1],
|
|
19
|
-
[TodoStatus.TODO_COMPLETED, 2],
|
|
20
|
-
[TodoStatus.TODO_CANCELLED, 3],
|
|
21
|
-
]);
|
|
22
|
-
|
|
23
|
-
function todoSortKey(item: TodoItem): number {
|
|
24
|
-
return STATUS_SORT_ORDER.get(item.status) ?? 4;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
14
|
/**
|
|
28
15
|
* Displays execution lifecycle phase and, when present, the agent's
|
|
29
16
|
* todo checklist showing multi-step task progress.
|
|
@@ -59,13 +46,6 @@ export function ExecutionProgress({
|
|
|
59
46
|
|
|
60
47
|
const todos = execution.status?.todos;
|
|
61
48
|
|
|
62
|
-
const sortedTodos = useMemo(() => {
|
|
63
|
-
if (!todos) return [];
|
|
64
|
-
const items = Object.values(todos);
|
|
65
|
-
if (items.length === 0) return [];
|
|
66
|
-
return items.slice().sort((a, b) => todoSortKey(a) - todoSortKey(b));
|
|
67
|
-
}, [todos]);
|
|
68
|
-
|
|
69
49
|
return (
|
|
70
50
|
<div
|
|
71
51
|
className={cn("flex flex-col gap-2", className)}
|
|
@@ -73,119 +53,7 @@ export function ExecutionProgress({
|
|
|
73
53
|
aria-label="Execution progress"
|
|
74
54
|
>
|
|
75
55
|
<ExecutionPhaseBadge phase={phase} />
|
|
76
|
-
{
|
|
77
|
-
<ul role="list" className="flex flex-col gap-1" aria-label="Tasks">
|
|
78
|
-
{sortedTodos.map((item) => (
|
|
79
|
-
<TodoRow key={item.id} item={item} />
|
|
80
|
-
))}
|
|
81
|
-
</ul>
|
|
82
|
-
)}
|
|
56
|
+
{todos && <TodoList todos={todos} />}
|
|
83
57
|
</div>
|
|
84
58
|
);
|
|
85
59
|
}
|
|
86
|
-
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
// Internal sub-components
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
|
|
91
|
-
function TodoRow({ item }: { item: TodoItem }) {
|
|
92
|
-
const Icon = TODO_ICONS[item.status] ?? TodoPendingIcon;
|
|
93
|
-
const colorClass = TODO_COLORS[item.status] ?? "text-muted-foreground";
|
|
94
|
-
const cancelled = item.status === TodoStatus.TODO_CANCELLED;
|
|
95
|
-
|
|
96
|
-
return (
|
|
97
|
-
<li className="flex items-start gap-1.5 text-xs">
|
|
98
|
-
<span className={cn("mt-0.5 shrink-0", colorClass)} aria-hidden="true">
|
|
99
|
-
<Icon />
|
|
100
|
-
</span>
|
|
101
|
-
<span
|
|
102
|
-
className={cn(
|
|
103
|
-
"min-w-0 break-words",
|
|
104
|
-
cancelled ? "text-muted-foreground line-through" : "text-foreground",
|
|
105
|
-
)}
|
|
106
|
-
>
|
|
107
|
-
{item.content}
|
|
108
|
-
</span>
|
|
109
|
-
</li>
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// ---------------------------------------------------------------------------
|
|
114
|
-
// Status icon mapping
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
|
-
|
|
117
|
-
const TODO_ICONS: Partial<Record<TodoStatus, () => React.JSX.Element>> = {
|
|
118
|
-
[TodoStatus.TODO_PENDING]: TodoPendingIcon,
|
|
119
|
-
[TodoStatus.TODO_IN_PROGRESS]: TodoInProgressIcon,
|
|
120
|
-
[TodoStatus.TODO_COMPLETED]: TodoCompletedIcon,
|
|
121
|
-
[TodoStatus.TODO_CANCELLED]: TodoCancelledIcon,
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const TODO_COLORS: Partial<Record<TodoStatus, string>> = {
|
|
125
|
-
[TodoStatus.TODO_PENDING]: "text-muted-foreground",
|
|
126
|
-
[TodoStatus.TODO_IN_PROGRESS]: "text-foreground",
|
|
127
|
-
[TodoStatus.TODO_COMPLETED]: "text-success",
|
|
128
|
-
[TodoStatus.TODO_CANCELLED]: "text-muted-foreground",
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
// ---------------------------------------------------------------------------
|
|
132
|
-
// Inline SVG icons — no external icon dependency in SDK
|
|
133
|
-
// ---------------------------------------------------------------------------
|
|
134
|
-
|
|
135
|
-
function TodoPendingIcon() {
|
|
136
|
-
return (
|
|
137
|
-
<svg
|
|
138
|
-
width="12"
|
|
139
|
-
height="12"
|
|
140
|
-
viewBox="0 0 12 12"
|
|
141
|
-
fill="none"
|
|
142
|
-
stroke="currentColor"
|
|
143
|
-
strokeWidth="1.5"
|
|
144
|
-
>
|
|
145
|
-
<circle cx="6" cy="6" r="4.5" />
|
|
146
|
-
</svg>
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function TodoInProgressIcon() {
|
|
151
|
-
return (
|
|
152
|
-
<span className="relative flex h-3 w-3 items-center justify-center">
|
|
153
|
-
<span className="absolute inline-flex h-2 w-2 animate-ping rounded-full bg-current opacity-75" />
|
|
154
|
-
<span className="relative inline-flex h-2 w-2 rounded-full bg-current" />
|
|
155
|
-
</span>
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function TodoCompletedIcon() {
|
|
160
|
-
return (
|
|
161
|
-
<svg
|
|
162
|
-
width="12"
|
|
163
|
-
height="12"
|
|
164
|
-
viewBox="0 0 12 12"
|
|
165
|
-
fill="none"
|
|
166
|
-
stroke="currentColor"
|
|
167
|
-
strokeWidth="2"
|
|
168
|
-
strokeLinecap="round"
|
|
169
|
-
strokeLinejoin="round"
|
|
170
|
-
>
|
|
171
|
-
<path d="M2.5 6L5 8.5L9.5 3.5" />
|
|
172
|
-
</svg>
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function TodoCancelledIcon() {
|
|
177
|
-
return (
|
|
178
|
-
<svg
|
|
179
|
-
width="12"
|
|
180
|
-
height="12"
|
|
181
|
-
viewBox="0 0 12 12"
|
|
182
|
-
fill="none"
|
|
183
|
-
stroke="currentColor"
|
|
184
|
-
strokeWidth="2"
|
|
185
|
-
strokeLinecap="round"
|
|
186
|
-
strokeLinejoin="round"
|
|
187
|
-
>
|
|
188
|
-
<path d="M3 3L9 9M9 3L3 9" />
|
|
189
|
-
</svg>
|
|
190
|
-
);
|
|
191
|
-
}
|
|
@@ -17,6 +17,7 @@ import { cn } from "@stigmer/theme";
|
|
|
17
17
|
import { isTerminalPhase } from "./execution-phases";
|
|
18
18
|
import { MessageEntry } from "./MessageEntry";
|
|
19
19
|
import { ToolCallGroup } from "./ToolCallGroup";
|
|
20
|
+
import { SubAgentSection } from "./SubAgentSection";
|
|
20
21
|
import { ExecutionPhaseBadge } from "./ExecutionPhaseBadge";
|
|
21
22
|
import { SetupProgress } from "./SetupProgress";
|
|
22
23
|
import { ApprovalCard } from "./ApprovalCard";
|
|
@@ -110,6 +111,7 @@ const AUTO_SCROLL_THRESHOLD_PX = 80;
|
|
|
110
111
|
type ThreadItem =
|
|
111
112
|
| { readonly kind: "message"; readonly message: AgentMessage; readonly key: string }
|
|
112
113
|
| { readonly kind: "tool-group"; readonly toolCalls: readonly ToolCall[]; readonly subAgentExecutions: readonly SubAgentExecution[]; readonly key: string }
|
|
114
|
+
| { readonly kind: "sub-agent"; readonly subAgentExecution: SubAgentExecution; readonly key: string }
|
|
113
115
|
| { readonly kind: "phase-badge"; readonly phase: ExecutionPhase; readonly key: string }
|
|
114
116
|
| { readonly kind: "pending-message"; readonly content: string; readonly key: string }
|
|
115
117
|
| { readonly kind: "approval-request"; readonly pendingApproval: PendingApproval; readonly key: string }
|
|
@@ -176,12 +178,35 @@ function buildThreadItems(
|
|
|
176
178
|
msg.type === MessageType.MESSAGE_AI &&
|
|
177
179
|
msg.toolCalls.length > 0
|
|
178
180
|
) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
const regularTools: ToolCall[] = [];
|
|
182
|
+
const taskTools: ToolCall[] = [];
|
|
183
|
+
for (const tc of msg.toolCalls) {
|
|
184
|
+
if (tc.name === "task") {
|
|
185
|
+
taskTools.push(tc);
|
|
186
|
+
} else {
|
|
187
|
+
regularTools.push(tc);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (regularTools.length > 0) {
|
|
192
|
+
items.push({
|
|
193
|
+
kind: "tool-group",
|
|
194
|
+
toolCalls: regularTools,
|
|
195
|
+
subAgentExecutions: subAgents,
|
|
196
|
+
key: `e${ei}-m${mi}-tc`,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
for (let ti = 0; ti < taskTools.length; ti++) {
|
|
201
|
+
const matched = subAgents.find((sa) => sa.id === taskTools[ti].id);
|
|
202
|
+
if (matched) {
|
|
203
|
+
items.push({
|
|
204
|
+
kind: "sub-agent",
|
|
205
|
+
subAgentExecution: matched,
|
|
206
|
+
key: `e${ei}-m${mi}-sa${ti}`,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
185
210
|
}
|
|
186
211
|
}
|
|
187
212
|
}
|
|
@@ -349,6 +374,14 @@ export function MessageThread({
|
|
|
349
374
|
className="mx-4"
|
|
350
375
|
/>
|
|
351
376
|
);
|
|
377
|
+
case "sub-agent":
|
|
378
|
+
return (
|
|
379
|
+
<SubAgentSection
|
|
380
|
+
key={item.key}
|
|
381
|
+
subAgentExecution={item.subAgentExecution}
|
|
382
|
+
className="mx-4"
|
|
383
|
+
/>
|
|
384
|
+
);
|
|
352
385
|
case "phase-badge":
|
|
353
386
|
return (
|
|
354
387
|
<div key={item.key} className="flex justify-center py-3">
|