@stigmer/react 0.0.36
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/LICENSE +190 -0
- package/README.md +248 -0
- package/agent/components/AgentCard.d.ts +9 -0
- package/agent/components/AgentCard.d.ts.map +1 -0
- package/agent/components/AgentCard.js +26 -0
- package/agent/components/AgentCard.js.map +1 -0
- package/agent/components/AgentOverview.d.ts +7 -0
- package/agent/components/AgentOverview.d.ts.map +1 -0
- package/agent/components/AgentOverview.js +36 -0
- package/agent/components/AgentOverview.js.map +1 -0
- package/agent/components/AgentPicker.d.ts +17 -0
- package/agent/components/AgentPicker.d.ts.map +1 -0
- package/agent/components/AgentPicker.js +86 -0
- package/agent/components/AgentPicker.js.map +1 -0
- package/agent/hooks/useAgentSearch.d.ts +28 -0
- package/agent/hooks/useAgentSearch.d.ts.map +1 -0
- package/agent/hooks/useAgentSearch.js +63 -0
- package/agent/hooks/useAgentSearch.js.map +1 -0
- package/agent/index.d.ts +9 -0
- package/agent/index.d.ts.map +1 -0
- package/agent/index.js +7 -0
- package/agent/index.js.map +1 -0
- package/agent-execution/components/ApprovalControls.d.ts +10 -0
- package/agent-execution/components/ApprovalControls.d.ts.map +1 -0
- package/agent-execution/components/ApprovalControls.js +19 -0
- package/agent-execution/components/ApprovalControls.js.map +1 -0
- package/agent-execution/components/ExecutionStatus.d.ts +8 -0
- package/agent-execution/components/ExecutionStatus.d.ts.map +1 -0
- package/agent-execution/components/ExecutionStatus.js +14 -0
- package/agent-execution/components/ExecutionStatus.js.map +1 -0
- package/agent-execution/components/ExecutionStream.d.ts +16 -0
- package/agent-execution/components/ExecutionStream.d.ts.map +1 -0
- package/agent-execution/components/ExecutionStream.js +39 -0
- package/agent-execution/components/ExecutionStream.js.map +1 -0
- package/agent-execution/components/MessageEntry.d.ts +17 -0
- package/agent-execution/components/MessageEntry.d.ts.map +1 -0
- package/agent-execution/components/MessageEntry.js +36 -0
- package/agent-execution/components/MessageEntry.js.map +1 -0
- package/agent-execution/components/MessageInput.d.ts +10 -0
- package/agent-execution/components/MessageInput.d.ts.map +1 -0
- package/agent-execution/components/MessageInput.js +27 -0
- package/agent-execution/components/MessageInput.js.map +1 -0
- package/agent-execution/components/OutputBlock.d.ts +9 -0
- package/agent-execution/components/OutputBlock.d.ts.map +1 -0
- package/agent-execution/components/OutputBlock.js +15 -0
- package/agent-execution/components/OutputBlock.js.map +1 -0
- package/agent-execution/components/SubAgentCard.d.ts +11 -0
- package/agent-execution/components/SubAgentCard.d.ts.map +1 -0
- package/agent-execution/components/SubAgentCard.js +19 -0
- package/agent-execution/components/SubAgentCard.js.map +1 -0
- package/agent-execution/components/ToolCallCard.d.ts +11 -0
- package/agent-execution/components/ToolCallCard.d.ts.map +1 -0
- package/agent-execution/components/ToolCallCard.js +25 -0
- package/agent-execution/components/ToolCallCard.js.map +1 -0
- package/agent-execution/helpers.d.ts +35 -0
- package/agent-execution/helpers.d.ts.map +1 -0
- package/agent-execution/helpers.js +157 -0
- package/agent-execution/helpers.js.map +1 -0
- package/agent-execution/hooks/useAgentExecution.d.ts +21 -0
- package/agent-execution/hooks/useAgentExecution.d.ts.map +1 -0
- package/agent-execution/hooks/useAgentExecution.js +99 -0
- package/agent-execution/hooks/useAgentExecution.js.map +1 -0
- package/agent-execution/hooks/useApproval.d.ts +12 -0
- package/agent-execution/hooks/useApproval.d.ts.map +1 -0
- package/agent-execution/hooks/useApproval.js +32 -0
- package/agent-execution/hooks/useApproval.js.map +1 -0
- package/agent-execution/index.d.ts +14 -0
- package/agent-execution/index.d.ts.map +1 -0
- package/agent-execution/index.js +15 -0
- package/agent-execution/index.js.map +1 -0
- package/catalog/components/ResourceSearchCard.d.ts +23 -0
- package/catalog/components/ResourceSearchCard.d.ts.map +1 -0
- package/catalog/components/ResourceSearchCard.js +36 -0
- package/catalog/components/ResourceSearchCard.js.map +1 -0
- package/catalog/index.d.ts +4 -0
- package/catalog/index.d.ts.map +1 -0
- package/catalog/index.js +5 -0
- package/catalog/index.js.map +1 -0
- package/catalog/internal/time.d.ts +13 -0
- package/catalog/internal/time.d.ts.map +1 -0
- package/catalog/internal/time.js +41 -0
- package/catalog/internal/time.js.map +1 -0
- package/context.d.ts +12 -0
- package/context.d.ts.map +1 -0
- package/context.js +13 -0
- package/context.js.map +1 -0
- package/hooks.d.ts +19 -0
- package/hooks.d.ts.map +1 -0
- package/hooks.js +28 -0
- package/hooks.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.d.ts.map +1 -0
- package/index.js +6 -0
- package/index.js.map +1 -0
- package/internal/badge.d.ts +8 -0
- package/internal/badge.d.ts.map +1 -0
- package/internal/badge.js +34 -0
- package/internal/badge.js.map +1 -0
- package/internal/button.d.ts +9 -0
- package/internal/button.d.ts.map +1 -0
- package/internal/button.js +36 -0
- package/internal/button.js.map +1 -0
- package/internal/collapsible.d.ts +6 -0
- package/internal/collapsible.d.ts.map +1 -0
- package/internal/collapsible.js +14 -0
- package/internal/collapsible.js.map +1 -0
- package/internal/section.d.ts +8 -0
- package/internal/section.d.ts.map +1 -0
- package/internal/section.js +6 -0
- package/internal/section.js.map +1 -0
- package/internal/textarea.d.ts +4 -0
- package/internal/textarea.d.ts.map +1 -0
- package/internal/textarea.js +9 -0
- package/internal/textarea.js.map +1 -0
- package/mcp-server/hooks/useMcpServerSearch.d.ts +25 -0
- package/mcp-server/hooks/useMcpServerSearch.d.ts.map +1 -0
- package/mcp-server/hooks/useMcpServerSearch.js +57 -0
- package/mcp-server/hooks/useMcpServerSearch.js.map +1 -0
- package/mcp-server/index.d.ts +3 -0
- package/mcp-server/index.d.ts.map +1 -0
- package/mcp-server/index.js +3 -0
- package/mcp-server/index.js.map +1 -0
- package/package.json +75 -0
- package/provider.d.ts +55 -0
- package/provider.d.ts.map +1 -0
- package/provider.js +34 -0
- package/provider.js.map +1 -0
- package/session/components/AgentSessionHistory.d.ts +8 -0
- package/session/components/AgentSessionHistory.d.ts.map +1 -0
- package/session/components/AgentSessionHistory.js +11 -0
- package/session/components/AgentSessionHistory.js.map +1 -0
- package/session/components/SessionCard.d.ts +8 -0
- package/session/components/SessionCard.d.ts.map +1 -0
- package/session/components/SessionCard.js +57 -0
- package/session/components/SessionCard.js.map +1 -0
- package/session/hooks/useAgentSessionList.d.ts +21 -0
- package/session/hooks/useAgentSessionList.d.ts.map +1 -0
- package/session/hooks/useAgentSessionList.js +90 -0
- package/session/hooks/useAgentSessionList.js.map +1 -0
- package/session/index.d.ts +7 -0
- package/session/index.d.ts.map +1 -0
- package/session/index.js +6 -0
- package/session/index.js.map +1 -0
- package/skill/hooks/useSkillSearch.d.ts +25 -0
- package/skill/hooks/useSkillSearch.d.ts.map +1 -0
- package/skill/hooks/useSkillSearch.js +57 -0
- package/skill/hooks/useSkillSearch.js.map +1 -0
- package/skill/index.d.ts +3 -0
- package/skill/index.d.ts.map +1 -0
- package/skill/index.js +3 -0
- package/skill/index.js.map +1 -0
- package/src/agent/components/AgentCard.tsx +125 -0
- package/src/agent/components/AgentOverview.tsx +209 -0
- package/src/agent/components/AgentPicker.tsx +255 -0
- package/src/agent/hooks/useAgentSearch.ts +94 -0
- package/src/agent/index.ts +17 -0
- package/src/agent-execution/components/ApprovalControls.tsx +99 -0
- package/src/agent-execution/components/ExecutionStatus.tsx +33 -0
- package/src/agent-execution/components/ExecutionStream.tsx +148 -0
- package/src/agent-execution/components/MessageEntry.tsx +125 -0
- package/src/agent-execution/components/MessageInput.tsx +70 -0
- package/src/agent-execution/components/OutputBlock.tsx +43 -0
- package/src/agent-execution/components/SubAgentCard.tsx +138 -0
- package/src/agent-execution/components/ToolCallCard.tsx +153 -0
- package/src/agent-execution/helpers.ts +193 -0
- package/src/agent-execution/hooks/useAgentExecution.ts +147 -0
- package/src/agent-execution/hooks/useApproval.ts +56 -0
- package/src/agent-execution/index.ts +46 -0
- package/src/catalog/components/ResourceSearchCard.tsx +137 -0
- package/src/catalog/index.ts +6 -0
- package/src/catalog/internal/time.ts +40 -0
- package/src/context.ts +15 -0
- package/src/hooks.ts +32 -0
- package/src/index.ts +6 -0
- package/src/internal/badge.tsx +52 -0
- package/src/internal/button.tsx +60 -0
- package/src/internal/collapsible.tsx +21 -0
- package/src/internal/section.tsx +18 -0
- package/src/internal/textarea.tsx +23 -0
- package/src/mcp-server/hooks/useMcpServerSearch.ts +79 -0
- package/src/mcp-server/index.ts +6 -0
- package/src/provider.tsx +73 -0
- package/src/session/components/AgentSessionHistory.tsx +109 -0
- package/src/session/components/SessionCard.tsx +113 -0
- package/src/session/hooks/useAgentSessionList.ts +117 -0
- package/src/session/index.ts +13 -0
- package/src/skill/hooks/useSkillSearch.ts +79 -0
- package/src/skill/index.ts +6 -0
- package/src/styles.css +72 -0
- package/styles.css +2 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useId, useRef, useState, } from "react";
|
|
4
|
+
import { Bot, Search, X, Loader2 } from "lucide-react";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { useAgentSearch } from "../hooks/useAgentSearch";
|
|
7
|
+
export function AgentPicker({ org, onSelect, onClear, selected, disabled = false, className, }) {
|
|
8
|
+
const instanceId = useId();
|
|
9
|
+
const listboxId = `${instanceId}-listbox`;
|
|
10
|
+
const inputRef = useRef(null);
|
|
11
|
+
const { query, setQuery, results, isLoading, error } = useAgentSearch({ org });
|
|
12
|
+
const [activeIndex, setActiveIndex] = useState(-1);
|
|
13
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
+
const showResults = isOpen && !selected;
|
|
15
|
+
const handleSelect = useCallback((index) => {
|
|
16
|
+
const result = results[index];
|
|
17
|
+
if (!result)
|
|
18
|
+
return;
|
|
19
|
+
onSelect({
|
|
20
|
+
id: result.id,
|
|
21
|
+
name: result.name,
|
|
22
|
+
qualifiedSlug: result.qualifiedSlug,
|
|
23
|
+
org: result.org,
|
|
24
|
+
description: result.description,
|
|
25
|
+
});
|
|
26
|
+
setIsOpen(false);
|
|
27
|
+
setActiveIndex(-1);
|
|
28
|
+
}, [results, onSelect]);
|
|
29
|
+
const handleClear = useCallback(() => {
|
|
30
|
+
onClear();
|
|
31
|
+
setQuery("");
|
|
32
|
+
setActiveIndex(-1);
|
|
33
|
+
setIsOpen(true);
|
|
34
|
+
requestAnimationFrame(() => inputRef.current?.focus());
|
|
35
|
+
}, [onClear, setQuery]);
|
|
36
|
+
const handleKeyDown = useCallback((e) => {
|
|
37
|
+
if (!showResults)
|
|
38
|
+
return;
|
|
39
|
+
switch (e.key) {
|
|
40
|
+
case "ArrowDown": {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
setActiveIndex((prev) => (prev < results.length - 1 ? prev + 1 : 0));
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "ArrowUp": {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
setActiveIndex((prev) => (prev > 0 ? prev - 1 : results.length - 1));
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case "Enter": {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
if (activeIndex >= 0 && activeIndex < results.length) {
|
|
53
|
+
handleSelect(activeIndex);
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case "Escape": {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
setIsOpen(false);
|
|
60
|
+
setActiveIndex(-1);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, [showResults, results.length, activeIndex, handleSelect]);
|
|
65
|
+
if (selected) {
|
|
66
|
+
return (_jsxs("div", { className: cn("stgm-agent-picker space-y-1", className), children: [_jsx("label", { className: "text-muted-foreground text-sm font-medium", children: "Agent" }), _jsxs("div", { className: "bg-muted/50 flex items-center gap-3 rounded-lg border px-3 py-2.5", children: [_jsx("div", { className: "bg-primary/10 flex size-8 shrink-0 items-center justify-center rounded-md", children: _jsx(Bot, { className: "text-primary size-4" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: selected.name }), _jsx("p", { className: "text-muted-foreground truncate font-mono text-xs", children: selected.qualifiedSlug })] }), _jsx("button", { type: "button", onClick: handleClear, disabled: disabled, "aria-label": "Change agent", className: cn("inline-flex size-7 shrink-0 items-center justify-center rounded-md", "text-muted-foreground hover:bg-accent hover:text-accent-foreground", "transition-colors focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none", "disabled:pointer-events-none disabled:opacity-50"), children: _jsx(X, { className: "size-3.5" }) })] })] }));
|
|
67
|
+
}
|
|
68
|
+
const activeOptionId = activeIndex >= 0 ? `${instanceId}-option-${activeIndex}` : undefined;
|
|
69
|
+
return (_jsxs("div", { className: cn("stgm-agent-picker space-y-1", className), children: [_jsx("label", { htmlFor: `${instanceId}-input`, className: "text-muted-foreground text-sm font-medium", children: "Agent" }), _jsxs("div", { className: "relative", children: [_jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx("input", { ref: inputRef, id: `${instanceId}-input`, type: "text", role: "combobox", "aria-expanded": showResults, "aria-controls": listboxId, "aria-activedescendant": activeOptionId, "aria-autocomplete": "list", "aria-label": "Search agents", value: query, disabled: disabled, placeholder: "Search agents...", className: cn("bg-background w-full rounded-lg border py-2.5 pr-9 pl-9 text-sm", "placeholder:text-muted-foreground", "focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none", "disabled:cursor-not-allowed disabled:opacity-50"), onChange: (e) => {
|
|
70
|
+
setQuery(e.target.value);
|
|
71
|
+
setActiveIndex(-1);
|
|
72
|
+
if (!isOpen)
|
|
73
|
+
setIsOpen(true);
|
|
74
|
+
}, onFocus: () => setIsOpen(true), onBlur: () => {
|
|
75
|
+
setTimeout(() => setIsOpen(false), 150);
|
|
76
|
+
}, onKeyDown: handleKeyDown }), isLoading && (_jsx(Loader2, { className: "text-muted-foreground absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin" }))] }), showResults && (_jsxs("ul", { id: listboxId, role: "listbox", "aria-label": "Agent search results", className: cn("bg-popover absolute z-popover mt-1 max-h-64 w-full overflow-y-auto rounded-lg border shadow-md", results.length === 0 && !isLoading && "p-3"), children: [results.length === 0 && !isLoading && (_jsx("li", { className: "text-muted-foreground text-center text-sm", role: "presentation", children: error
|
|
77
|
+
? error
|
|
78
|
+
: query
|
|
79
|
+
? "No agents found"
|
|
80
|
+
: "No agents available" })), results.map((result, index) => (_jsxs("li", { id: `${instanceId}-option-${index}`, role: "option", "aria-selected": index === activeIndex, className: cn("flex cursor-pointer items-start gap-3 px-3 py-2.5", "transition-colors", index === activeIndex
|
|
81
|
+
? "bg-accent text-accent-foreground"
|
|
82
|
+
: "hover:bg-accent/50"), onMouseDown: (e) => {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
}, onClick: () => handleSelect(index), onMouseEnter: () => setActiveIndex(index), children: [_jsx("div", { className: "bg-primary/10 mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md", children: _jsx(Bot, { className: "text-primary size-3.5" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: result.name }), _jsx("p", { className: "text-muted-foreground truncate font-mono text-xs", children: result.qualifiedSlug }), result.description && (_jsx("p", { className: "text-muted-foreground/70 mt-0.5 line-clamp-1 text-xs", children: result.description }))] })] }, result.id)))] }))] })] }));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=AgentPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentPicker.js","sourceRoot":"","sources":["../../../src/agent/components/AgentPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface AgentSearchResult {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
qualifiedSlug: string;
|
|
5
|
+
org: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
export interface UseAgentSearchOptions {
|
|
9
|
+
org: string;
|
|
10
|
+
debounceMs?: number;
|
|
11
|
+
pageSize?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface UseAgentSearchReturn {
|
|
14
|
+
query: string;
|
|
15
|
+
setQuery: (query: string) => void;
|
|
16
|
+
results: AgentSearchResult[];
|
|
17
|
+
isLoading: boolean;
|
|
18
|
+
error: string | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Debounced agent search scoped to a specific organization.
|
|
22
|
+
*
|
|
23
|
+
* On mount fetches all accessible agents (empty query). Typing fires at most
|
|
24
|
+
* one request per debounce interval. Stale responses from out-of-order
|
|
25
|
+
* requests are discarded.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useAgentSearch(options: UseAgentSearchOptions): UseAgentSearchReturn;
|
|
28
|
+
//# sourceMappingURL=useAgentSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAgentSearch.d.ts","sourceRoot":"","sources":["../../../src/agent/hooks/useAgentSearch.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAYD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAkCnF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useStigmer } from "../../hooks";
|
|
4
|
+
const DEBOUNCE_MS = 300;
|
|
5
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
6
|
+
function toAgentSearchResult(r) {
|
|
7
|
+
return {
|
|
8
|
+
id: r.id,
|
|
9
|
+
name: r.name,
|
|
10
|
+
qualifiedSlug: r.qualifiedSlug,
|
|
11
|
+
org: r.org,
|
|
12
|
+
description: r.description,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Debounced agent search scoped to a specific organization.
|
|
17
|
+
*
|
|
18
|
+
* On mount fetches all accessible agents (empty query). Typing fires at most
|
|
19
|
+
* one request per debounce interval. Stale responses from out-of-order
|
|
20
|
+
* requests are discarded.
|
|
21
|
+
*/
|
|
22
|
+
export function useAgentSearch(options) {
|
|
23
|
+
const { org, debounceMs = DEBOUNCE_MS, pageSize = DEFAULT_PAGE_SIZE } = options;
|
|
24
|
+
const stigmer = useStigmer();
|
|
25
|
+
const [query, setQuery] = useState("");
|
|
26
|
+
const [results, setResults] = useState([]);
|
|
27
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
28
|
+
const [error, setError] = useState(null);
|
|
29
|
+
const latestRequestId = useRef(0);
|
|
30
|
+
const debouncedQuery = useDebouncedValue(query, debounceMs);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const requestId = ++latestRequestId.current;
|
|
33
|
+
setIsLoading(true);
|
|
34
|
+
setError(null);
|
|
35
|
+
stigmer.agent
|
|
36
|
+
.list({ query: debouncedQuery, org, page: { num: 1, size: pageSize } })
|
|
37
|
+
.then((response) => {
|
|
38
|
+
if (requestId !== latestRequestId.current)
|
|
39
|
+
return;
|
|
40
|
+
setResults(response.entries.map(toAgentSearchResult));
|
|
41
|
+
})
|
|
42
|
+
.catch((err) => {
|
|
43
|
+
if (requestId !== latestRequestId.current)
|
|
44
|
+
return;
|
|
45
|
+
setError(err instanceof Error ? err.message : "Search failed");
|
|
46
|
+
})
|
|
47
|
+
.finally(() => {
|
|
48
|
+
if (requestId !== latestRequestId.current)
|
|
49
|
+
return;
|
|
50
|
+
setIsLoading(false);
|
|
51
|
+
});
|
|
52
|
+
}, [debouncedQuery, org, pageSize, stigmer]);
|
|
53
|
+
return { query, setQuery, results, isLoading, error };
|
|
54
|
+
}
|
|
55
|
+
function useDebouncedValue(value, delayMs) {
|
|
56
|
+
const [debounced, setDebounced] = useState(value);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const timer = setTimeout(() => setDebounced(value), delayMs);
|
|
59
|
+
return () => clearTimeout(timer);
|
|
60
|
+
}, [value, delayMs]);
|
|
61
|
+
return debounced;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=useAgentSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAgentSearch.js","sourceRoot":"","sources":["../../../src/agent/hooks/useAgentSearch.ts"],"names":[],"mappings":"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"}
|
package/agent/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { useAgentSearch } from "./hooks/useAgentSearch";
|
|
2
|
+
export type { UseAgentSearchOptions, UseAgentSearchReturn, AgentSearchResult, } from "./hooks/useAgentSearch";
|
|
3
|
+
export { AgentCard } from "./components/AgentCard";
|
|
4
|
+
export type { AgentCardProps } from "./components/AgentCard";
|
|
5
|
+
export { AgentOverview } from "./components/AgentOverview";
|
|
6
|
+
export type { AgentOverviewProps } from "./components/AgentOverview";
|
|
7
|
+
export { AgentPicker } from "./components/AgentPicker";
|
|
8
|
+
export type { AgentPickerProps, SelectedAgent } from "./components/AgentPicker";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
package/agent/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Hooks
|
|
2
|
+
export { useAgentSearch } from "./hooks/useAgentSearch";
|
|
3
|
+
// Components
|
|
4
|
+
export { AgentCard } from "./components/AgentCard";
|
|
5
|
+
export { AgentOverview } from "./components/AgentOverview";
|
|
6
|
+
export { AgentPicker } from "./components/AgentPicker";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOxD,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
2
|
+
interface ApprovalControlsProps {
|
|
3
|
+
approvalMessage: string;
|
|
4
|
+
onSubmit: (action: ApprovalAction, comment?: string) => Promise<void>;
|
|
5
|
+
isSubmitting: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function ApprovalControls({ approvalMessage, onSubmit, isSubmitting, className, }: ApprovalControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ApprovalControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalControls.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/ApprovalControls.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAI9F,UAAU,qBAAqB;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,EAAE,qBAAqB,2CA6EvB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import { Button } from "../../internal/button";
|
|
5
|
+
import { Textarea } from "../../internal/textarea";
|
|
6
|
+
import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
7
|
+
import { cn } from "@stigmer/theme";
|
|
8
|
+
import { Check, X, SkipForward, Loader2 } from "lucide-react";
|
|
9
|
+
export function ApprovalControls({ approvalMessage, onSubmit, isSubmitting, className, }) {
|
|
10
|
+
const [showComment, setShowComment] = useState(false);
|
|
11
|
+
const [comment, setComment] = useState("");
|
|
12
|
+
const handleAction = useCallback(async (action) => {
|
|
13
|
+
await onSubmit(action, comment || undefined);
|
|
14
|
+
setComment("");
|
|
15
|
+
setShowComment(false);
|
|
16
|
+
}, [onSubmit, comment]);
|
|
17
|
+
return (_jsxs("div", { className: cn("border-primary/30 bg-primary/5 space-y-3 rounded-lg border-2 p-3", className), children: [_jsx("p", { className: "text-sm font-medium", children: approvalMessage }), showComment && (_jsx(Textarea, { value: comment, onChange: (e) => setComment(e.target.value), placeholder: "Optional comment...", className: "min-h-10 text-sm", disabled: isSubmitting })), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { size: "sm", onClick: () => handleAction(ApprovalAction.APPROVE), disabled: isSubmitting, children: [isSubmitting ? (_jsx(Loader2, { className: "size-3.5 animate-spin" })) : (_jsx(Check, { className: "size-3.5" })), "Approve"] }), _jsxs(Button, { size: "sm", variant: "secondary", onClick: () => handleAction(ApprovalAction.SKIP), disabled: isSubmitting, children: [_jsx(SkipForward, { className: "size-3.5" }), "Skip"] }), _jsxs(Button, { size: "sm", variant: "destructive", onClick: () => handleAction(ApprovalAction.REJECT), disabled: isSubmitting, children: [_jsx(X, { className: "size-3.5" }), "Reject"] }), !showComment && (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => setShowComment(true), disabled: isSubmitting, className: "text-muted-foreground ml-auto text-xs", children: "Add comment" }))] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ApprovalControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalControls.js","sourceRoot":"","sources":["../../../src/agent-execution/components/ApprovalControls.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAS9D,MAAM,UAAU,gBAAgB,CAAC,EAC/B,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,SAAS,GACa;IACtB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,WAAW,CAC9B,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC/B,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,IAAI,SAAS,CAAC,CAAC;QAC7C,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EACD,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,SAAS,CACV,aAED,YAAG,SAAS,EAAC,qBAAqB,YAAE,eAAe,GAAK,EAEvD,WAAW,IAAI,CACd,KAAC,QAAQ,IACP,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3C,WAAW,EAAC,qBAAqB,EACjC,SAAS,EAAC,kBAAkB,EAC5B,QAAQ,EAAE,YAAY,GACtB,CACH,EAED,eAAK,SAAS,EAAC,yBAAyB,aACtC,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EACnD,QAAQ,EAAE,YAAY,aAErB,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,OAAO,IAAC,SAAS,EAAC,uBAAuB,GAAG,CAC9C,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,GAAG,CAC/B,eAEM,EACT,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAChD,QAAQ,EAAE,YAAY,aAEtB,KAAC,WAAW,IAAC,SAAS,EAAC,UAAU,GAAG,YAE7B,EACT,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,aAAa,EACrB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,EAClD,QAAQ,EAAE,YAAY,aAEtB,KAAC,CAAC,IAAC,SAAS,EAAC,UAAU,GAAG,cAEnB,EACR,CAAC,WAAW,IAAI,CACf,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EACnC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAC,uCAAuC,4BAG1C,CACV,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
2
|
+
interface ExecutionStatusProps {
|
|
3
|
+
phase: ExecutionPhase;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ExecutionStatus({ phase, className }: ExecutionStatusProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ExecutionStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionStatus.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/ExecutionStatus.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAI9F,UAAU,oBAAoB;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAqBzE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from "../../internal/badge";
|
|
3
|
+
import { phaseLabel, phaseVariant, isTerminalPhase } from "../helpers";
|
|
4
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { Loader2 } from "lucide-react";
|
|
7
|
+
export function ExecutionStatus({ phase, className }) {
|
|
8
|
+
const isActive = phase === ExecutionPhase.EXECUTION_IN_PROGRESS ||
|
|
9
|
+
phase === ExecutionPhase.EXECUTION_PENDING;
|
|
10
|
+
const isWaiting = phase === ExecutionPhase.EXECUTION_WAITING_FOR_APPROVAL;
|
|
11
|
+
return (_jsxs(Badge, { variant: phaseVariant(phase), className: cn(isWaiting && "animate-pulse", className), children: [isActive && (_jsx(Loader2, { className: "size-3 animate-spin", "data-icon": "inline-start" })), phaseLabel(phase), isTerminalPhase(phase) &&
|
|
12
|
+
phase === ExecutionPhase.EXECUTION_COMPLETED && (_jsx("span", { "data-icon": "inline-end", children: "\u2713" }))] }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ExecutionStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionStatus.js","sourceRoot":"","sources":["../../../src/agent-execution/components/ExecutionStatus.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAwB;IACxE,MAAM,QAAQ,GACZ,KAAK,KAAK,cAAc,CAAC,qBAAqB;QAC9C,KAAK,KAAK,cAAc,CAAC,iBAAiB,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,KAAK,cAAc,CAAC,8BAA8B,CAAC;IAE1E,OAAO,CACL,MAAC,KAAK,IACJ,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,eAAe,EAAE,SAAS,CAAC,aAErD,QAAQ,IAAI,CACX,KAAC,OAAO,IAAC,SAAS,EAAC,qBAAqB,eAAW,cAAc,GAAG,CACrE,EACA,UAAU,CAAC,KAAK,CAAC,EACjB,eAAe,CAAC,KAAK,CAAC;gBACrB,KAAK,KAAK,cAAc,CAAC,mBAAmB,IAAI,CAC9C,4BAAgB,YAAY,uBAAS,CACtC,IACG,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
2
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
3
|
+
import type { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
4
|
+
interface ExecutionStreamProps {
|
|
5
|
+
execution: AgentExecution | null;
|
|
6
|
+
phase: ExecutionPhase;
|
|
7
|
+
isConnected: boolean;
|
|
8
|
+
error: string | null;
|
|
9
|
+
onApproval?: (toolCallId: string, action: ApprovalAction, comment?: string) => Promise<void>;
|
|
10
|
+
isApprovalSubmitting?: boolean;
|
|
11
|
+
onSendMessage?: (message: string) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function ExecutionStream(props: ExecutionStreamProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=ExecutionStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionStream.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/ExecutionStream.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AASnG,UAAU,oBAAoB;IAC5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAsH1D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { ExecutionStatus } from "./ExecutionStatus";
|
|
5
|
+
import { MessageEntry, HumanMessageBubble } from "./MessageEntry";
|
|
6
|
+
import { MessageInput } from "./MessageInput";
|
|
7
|
+
import { buildSubAgentIndex, isTerminalPhase } from "../helpers";
|
|
8
|
+
import { cn } from "@stigmer/theme";
|
|
9
|
+
import { Button } from "../../internal/button";
|
|
10
|
+
import { ArrowDown, AlertCircle } from "lucide-react";
|
|
11
|
+
export function ExecutionStream(props) {
|
|
12
|
+
const { execution, phase, isConnected: _isConnected, error, onApproval, isApprovalSubmitting = false, onSendMessage, className, } = props;
|
|
13
|
+
const scrollRef = useRef(null);
|
|
14
|
+
const bottomRef = useRef(null);
|
|
15
|
+
const [isAtBottom, setIsAtBottom] = useState(true);
|
|
16
|
+
const messages = execution?.status?.messages ?? [];
|
|
17
|
+
const subAgentIndex = useMemo(() => (execution ? buildSubAgentIndex(execution) : new Map()), [execution]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (isAtBottom) {
|
|
20
|
+
bottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
21
|
+
}
|
|
22
|
+
}, [messages.length, isAtBottom]);
|
|
23
|
+
const handleScroll = useCallback(() => {
|
|
24
|
+
const el = scrollRef.current;
|
|
25
|
+
if (!el)
|
|
26
|
+
return;
|
|
27
|
+
const threshold = 48;
|
|
28
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < threshold;
|
|
29
|
+
setIsAtBottom(atBottom);
|
|
30
|
+
}, []);
|
|
31
|
+
const scrollToBottom = useCallback(() => {
|
|
32
|
+
bottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
33
|
+
setIsAtBottom(true);
|
|
34
|
+
}, []);
|
|
35
|
+
const isTerminal = isTerminalPhase(phase);
|
|
36
|
+
const canSendMessage = isTerminal && !!onSendMessage;
|
|
37
|
+
return (_jsxs("div", { className: cn("flex flex-col", className), children: [_jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [_jsx(ExecutionStatus, { phase: phase }), execution?.status?.startedAt && (_jsx("time", { dateTime: execution.status.startedAt, className: "text-muted-foreground text-xs", children: new Date(execution.status.startedAt).toLocaleTimeString() }))] }), _jsxs("div", { ref: scrollRef, onScroll: handleScroll, className: "relative flex-1 overflow-y-auto", children: [_jsxs("div", { className: "space-y-4 p-4", children: [messages.length === 0 && execution?.spec?.message && (_jsx(HumanMessageBubble, { content: execution.spec.message })), messages.map((msg, index) => (_jsx(MessageEntry, { message: msg, subAgentIndex: subAgentIndex, onApproval: onApproval, isApprovalSubmitting: isApprovalSubmitting }, index))), error && (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 text-destructive flex items-start gap-2 rounded-lg border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 size-4 shrink-0" }), _jsx("p", { children: error })] })), execution?.status?.error && isTerminal && (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 text-destructive flex items-start gap-2 rounded-lg border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 size-4 shrink-0" }), _jsx("p", { children: execution.status.error })] })), _jsx("div", { ref: bottomRef })] }), !isAtBottom && (_jsx(Button, { size: "icon", variant: "secondary", onClick: scrollToBottom, className: "absolute right-4 bottom-4 z-10 rounded-full shadow-md", "aria-label": "Scroll to bottom", children: _jsx(ArrowDown, { className: "size-4" }) }))] }), canSendMessage && (_jsx("div", { className: "border-t p-4", children: _jsx(MessageInput, { onSend: onSendMessage, placeholder: "Send a follow-up message..." }) }))] }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ExecutionStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionStream.js","sourceRoot":"","sources":["../../../src/agent-execution/components/ExecutionStream.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
2
|
+
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
3
|
+
import type { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
4
|
+
export interface MessageEntryProps {
|
|
5
|
+
message: AgentMessage;
|
|
6
|
+
subAgentIndex: Map<string, SubAgentExecution>;
|
|
7
|
+
onApproval?: (toolCallId: string, action: ApprovalAction, comment?: string) => Promise<void>;
|
|
8
|
+
isApprovalSubmitting?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function MessageEntry({ message, subAgentIndex, onApproval, isApprovalSubmitting, }: MessageEntryProps): import("react/jsx-runtime").JSX.Element | null;
|
|
11
|
+
export declare function HumanMessageBubble({ content }: {
|
|
12
|
+
content: string;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function SystemMessageBlock({ content }: {
|
|
15
|
+
content: string;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=MessageEntry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageEntry.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/MessageEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iEAAiE,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAOnG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,aAAa,EACb,UAAU,EACV,oBAAoB,GACrB,EAAE,iBAAiB,kDAqBnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,2CAWlE;AAyDD,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,kDAQlE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { OutputBlock } from "./OutputBlock";
|
|
3
|
+
import { ToolCallCard } from "./ToolCallCard";
|
|
4
|
+
import { SubAgentCard } from "./SubAgentCard";
|
|
5
|
+
import { isHumanMessage, isAiMessage, isSystemMessage } from "../helpers";
|
|
6
|
+
import { User, BotMessageSquare, Info } from "lucide-react";
|
|
7
|
+
export function MessageEntry({ message, subAgentIndex, onApproval, isApprovalSubmitting, }) {
|
|
8
|
+
if (isHumanMessage(message.type)) {
|
|
9
|
+
return _jsx(HumanMessageBubble, { content: message.content });
|
|
10
|
+
}
|
|
11
|
+
if (isAiMessage(message.type)) {
|
|
12
|
+
return (_jsx(AiMessageBlock, { message: message, subAgentIndex: subAgentIndex, onApproval: onApproval, isApprovalSubmitting: isApprovalSubmitting }));
|
|
13
|
+
}
|
|
14
|
+
if (isSystemMessage(message.type)) {
|
|
15
|
+
return _jsx(SystemMessageBlock, { content: message.content });
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
export function HumanMessageBubble({ content }) {
|
|
20
|
+
return (_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "bg-muted flex size-7 shrink-0 items-center justify-center rounded-full", children: _jsx(User, { className: "text-muted-foreground size-3.5" }) }), _jsx("div", { className: "bg-muted min-w-0 flex-1 rounded-lg px-3 py-2 text-sm", children: _jsx("p", { className: "whitespace-pre-wrap", children: content }) })] }));
|
|
21
|
+
}
|
|
22
|
+
function AiMessageBlock({ message, subAgentIndex, onApproval, isApprovalSubmitting, }) {
|
|
23
|
+
return (_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "bg-primary/10 flex size-7 shrink-0 items-center justify-center rounded-full", children: _jsx(BotMessageSquare, { className: "text-primary size-3.5" }) }), _jsxs("div", { className: "min-w-0 flex-1 space-y-2", children: [message.content && (_jsx(OutputBlock, { content: message.content, isStreaming: message.isStreaming, model: message.model })), message.toolCalls.map((tc) => {
|
|
24
|
+
const subAgent = subAgentIndex.get(tc.id);
|
|
25
|
+
if (subAgent) {
|
|
26
|
+
return (_jsx(SubAgentCard, { subAgent: subAgent, onApproval: onApproval, isApprovalSubmitting: isApprovalSubmitting }, tc.id));
|
|
27
|
+
}
|
|
28
|
+
return (_jsx(ToolCallCard, { toolCall: tc, onApproval: onApproval, isApprovalSubmitting: isApprovalSubmitting }, tc.id));
|
|
29
|
+
})] })] }));
|
|
30
|
+
}
|
|
31
|
+
export function SystemMessageBlock({ content }) {
|
|
32
|
+
if (!content)
|
|
33
|
+
return null;
|
|
34
|
+
return (_jsxs("div", { className: "text-muted-foreground flex items-center gap-2 text-xs", children: [_jsx(Info, { className: "size-3 shrink-0" }), _jsx("p", { children: content })] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=MessageEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageEntry.js","sourceRoot":"","sources":["../../../src/agent-execution/components/MessageEntry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface MessageInputProps {
|
|
2
|
+
onSend: (message: string) => void;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function MessageInput({ onSend, disabled, isLoading, placeholder, className, }: MessageInputProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=MessageInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/MessageInput.tsx"],"names":[],"mappings":"AAQA,UAAU,iBAAiB;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAgB,EAChB,SAAiB,EACjB,WAAiC,EACjC,SAAS,GACV,EAAE,iBAAiB,2CA+CnB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useRef } from "react";
|
|
4
|
+
import { Textarea } from "../../internal/textarea";
|
|
5
|
+
import { Button } from "../../internal/button";
|
|
6
|
+
import { cn } from "@stigmer/theme";
|
|
7
|
+
import { SendHorizontal, Loader2 } from "lucide-react";
|
|
8
|
+
export function MessageInput({ onSend, disabled = false, isLoading = false, placeholder = "Send a message...", className, }) {
|
|
9
|
+
const textareaRef = useRef(null);
|
|
10
|
+
const handleSend = useCallback(() => {
|
|
11
|
+
const value = textareaRef.current?.value.trim();
|
|
12
|
+
if (!value || disabled || isLoading)
|
|
13
|
+
return;
|
|
14
|
+
onSend(value);
|
|
15
|
+
if (textareaRef.current) {
|
|
16
|
+
textareaRef.current.value = "";
|
|
17
|
+
}
|
|
18
|
+
}, [onSend, disabled, isLoading]);
|
|
19
|
+
const handleKeyDown = useCallback((e) => {
|
|
20
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
handleSend();
|
|
23
|
+
}
|
|
24
|
+
}, [handleSend]);
|
|
25
|
+
return (_jsxs("div", { className: cn("flex items-end gap-2", className), children: [_jsx(Textarea, { ref: textareaRef, placeholder: placeholder, disabled: disabled || isLoading, onKeyDown: handleKeyDown, className: "min-h-10 resize-none", rows: 1 }), _jsx(Button, { size: "icon", onClick: handleSend, disabled: disabled || isLoading, className: "shrink-0", "aria-label": "Send message", children: isLoading ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(SendHorizontal, { className: "size-4" })) })] }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=MessageInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageInput.js","sourceRoot":"","sources":["../../../src/agent-execution/components/MessageInput.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,EAAsB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvD,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,mBAAmB,EACjC,SAAS,GACS;IAClB,MAAM,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,SAAS;YAAE,OAAO;QAC5C,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAqC,EAAE,EAAE;QACxC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,aACnD,KAAC,QAAQ,IACP,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAC/B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAC,sBAAsB,EAChC,IAAI,EAAE,CAAC,GACP,EACF,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAC/B,SAAS,EAAC,UAAU,gBACT,cAAc,YAExB,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,OAAO,IAAC,SAAS,EAAC,qBAAqB,GAAG,CAC5C,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IAAC,SAAS,EAAC,QAAQ,GAAG,CACtC,GACM,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface OutputBlockProps {
|
|
2
|
+
content: string;
|
|
3
|
+
isStreaming?: boolean;
|
|
4
|
+
model?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const OutputBlock: import("react").NamedExoticComponent<OutputBlockProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=OutputBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputBlock.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/OutputBlock.tsx"],"names":[],"mappings":"AAOA,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,wDAmBtB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import ReactMarkdown from "react-markdown";
|
|
5
|
+
import remarkGfm from "remark-gfm";
|
|
6
|
+
import { cn } from "@stigmer/theme";
|
|
7
|
+
export const OutputBlock = memo(function OutputBlock({ content, isStreaming = false, model, className, }) {
|
|
8
|
+
if (!content && !isStreaming)
|
|
9
|
+
return null;
|
|
10
|
+
return (_jsxs("div", { className: cn("relative", className), children: [_jsxs("div", { className: "prose prose-sm dark:prose-invert [&_pre]:bg-muted [&_code]:bg-muted max-w-none break-words [&_code]:rounded [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:text-xs [&_code]:before:content-none [&_code]:after:content-none [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:p-3 [&_pre]:text-xs [&_table]:text-xs [&_td]:px-2 [&_td]:py-1 [&_th]:px-2 [&_th]:py-1", children: [_jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], children: content }), isStreaming && _jsx(StreamingCursor, {})] }), model && !isStreaming && (_jsx("p", { className: "text-muted-foreground/60 mt-1.5 text-[10px]", children: model }))] }));
|
|
11
|
+
});
|
|
12
|
+
function StreamingCursor() {
|
|
13
|
+
return (_jsx("span", { className: "bg-foreground ml-0.5 inline-block h-4 w-0.5 animate-pulse align-text-bottom", "aria-label": "Generating..." }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=OutputBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputBlock.js","sourceRoot":"","sources":["../../../src/agent-execution/components/OutputBlock.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AASpC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,EACnD,OAAO,EACP,WAAW,GAAG,KAAK,EACnB,KAAK,EACL,SAAS,GACQ;IACjB,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,aACvC,eAAK,SAAS,EAAC,gWAAgW,aAC7W,KAAC,aAAa,IAAC,aAAa,EAAE,CAAC,SAAS,CAAC,YAAG,OAAO,GAAiB,EACnE,WAAW,IAAI,KAAC,eAAe,KAAG,IAC/B,EACL,KAAK,IAAI,CAAC,WAAW,IAAI,CACxB,YAAG,SAAS,EAAC,6CAA6C,YAAE,KAAK,GAAK,CACvE,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,eAAe;IACtB,OAAO,CACL,eACE,SAAS,EAAC,6EAA6E,gBAC5E,eAAe,GAC1B,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
2
|
+
import type { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
3
|
+
interface SubAgentCardProps {
|
|
4
|
+
subAgent: SubAgentExecution;
|
|
5
|
+
onApproval?: (toolCallId: string, action: ApprovalAction, comment?: string) => Promise<void>;
|
|
6
|
+
isApprovalSubmitting?: boolean;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function SubAgentCard({ subAgent, onApproval, isApprovalSubmitting, className, }: SubAgentCardProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=SubAgentCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubAgentCard.d.ts","sourceRoot":"","sources":["../../../src/agent-execution/components/SubAgentCard.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAKnG,UAAU,iBAAiB;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,oBAA4B,EAC5B,SAAS,GACV,EAAE,iBAAiB,2CAkGnB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Badge } from "../../internal/badge";
|
|
5
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../../internal/collapsible";
|
|
6
|
+
import { OutputBlock } from "./OutputBlock";
|
|
7
|
+
import { ToolCallCard } from "./ToolCallCard";
|
|
8
|
+
import { subAgentStatusLabel, subAgentStatusVariant, formatDuration, isAiMessage, } from "../helpers";
|
|
9
|
+
import { SubAgentStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
10
|
+
import { cn } from "@stigmer/theme";
|
|
11
|
+
import { ChevronRight, Bot, Loader2 } from "lucide-react";
|
|
12
|
+
export function SubAgentCard({ subAgent, onApproval, isApprovalSubmitting = false, className, }) {
|
|
13
|
+
const [open, setOpen] = useState(false);
|
|
14
|
+
const isActive = subAgent.status === SubAgentStatus.SUB_AGENT_IN_PROGRESS;
|
|
15
|
+
const duration = formatDuration(subAgent.startedAt, subAgent.completedAt);
|
|
16
|
+
const aiMessages = subAgent.messages.filter((m) => isAiMessage(m.type));
|
|
17
|
+
return (_jsx(Collapsible, { open: open, onOpenChange: setOpen, children: _jsxs("div", { className: cn("bg-card text-card-foreground rounded-lg border border-dashed text-sm", className), children: [_jsxs(CollapsibleTrigger, { className: "hover:bg-muted/50 flex w-full items-center gap-2 rounded-t-lg px-3 py-2 text-left transition-colors", children: [_jsx(ChevronRight, { className: cn("text-muted-foreground size-3.5 shrink-0 transition-transform", open && "rotate-90") }), isActive ? (_jsx(Loader2, { className: "text-muted-foreground size-3.5 shrink-0 animate-spin" })) : (_jsx(Bot, { className: "text-muted-foreground size-3.5 shrink-0" })), _jsx("span", { className: "truncate text-xs font-medium", children: subAgent.subject || subAgent.name }), _jsx(Badge, { variant: subAgentStatusVariant(subAgent.status), className: "ml-auto shrink-0 text-[10px]", children: subAgentStatusLabel(subAgent.status) }), duration && (_jsx("span", { className: "text-muted-foreground shrink-0 text-[10px]", children: duration })), subAgent.toolCalls.length > 0 && (_jsxs("span", { className: "text-muted-foreground shrink-0 text-[10px]", children: [subAgent.toolCalls.length, " tool", subAgent.toolCalls.length !== 1 && "s"] }))] }), _jsx(CollapsibleContent, { children: _jsxs("div", { className: "space-y-3 border-t px-3 py-2", children: [subAgent.input && (_jsxs("div", { children: [_jsx("p", { className: "text-muted-foreground mb-1 text-[10px] font-medium tracking-wider uppercase", children: "Task" }), _jsx("p", { className: "text-muted-foreground text-xs", children: subAgent.input })] })), aiMessages.map((msg, i) => (_jsx(OutputBlock, { content: msg.content, isStreaming: msg.isStreaming, model: msg.model }, i))), subAgent.toolCalls.map((tc) => (_jsx(ToolCallCard, { toolCall: tc, onApproval: onApproval, isApprovalSubmitting: isApprovalSubmitting }, tc.id))), subAgent.error && (_jsx("p", { className: "text-destructive text-xs", children: subAgent.error })), subAgent.output && (_jsxs("div", { children: [_jsx("p", { className: "text-muted-foreground mb-1 text-[10px] font-medium tracking-wider uppercase", children: "Result" }), _jsx("pre", { className: "bg-muted overflow-x-auto rounded p-2 text-[11px] leading-relaxed whitespace-pre-wrap", children: subAgent.output })] }))] }) })] }) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=SubAgentCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubAgentCard.js","sourceRoot":"","sources":["../../../src/agent-execution/components/SubAgentCard.tsx"],"names":[],"mappings":"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"}
|