@parhelia/core 0.1.12025 → 0.1.12045
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-view/AgentCard.d.ts +6 -4
- package/dist/agents-view/AgentCard.js +97 -10
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsInbox.d.ts +1 -1
- package/dist/agents-view/AgentsInbox.js +7 -81
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +6 -7
- package/dist/agents-view/AgentsView.js +64 -26
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -6
- package/dist/agents-view/AgentsWorkspaceView.js +242 -112
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.d.ts +2 -1
- package/dist/agents-view/ProfileAgentsGroup.js +2 -2
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/FilterInput.d.ts +1 -1
- package/dist/components/FilterInput.js +1 -1
- package/dist/components/FilterInput.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +1 -1
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +1 -1
- package/dist/components/ui/alert-dialog.js +6 -10
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/button.d.ts +2 -2
- package/dist/components/ui/button.js +3 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/dialog.js +8 -129
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/popover.js +1 -9
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/portal-container-context.d.ts +3 -0
- package/dist/components/ui/portal-container-context.js +23 -0
- package/dist/components/ui/portal-container-context.js.map +1 -0
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/styled-dialog-title.js +1 -1
- package/dist/components/ui/styled-dialog-title.js.map +1 -1
- package/dist/config/config.js +14 -10
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ContentTree.js +10 -3
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldListField.js +1 -1
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +1 -1
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/MainLayout.js +1 -2
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +29 -5
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/MobileLayout.js +37 -12
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/Titlebar.js +6 -1
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +1 -1
- package/dist/editor/ai/AgentStatusBadge.js +18 -2
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +320 -69
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +2 -1
- package/dist/editor/ai/AgentTerminalStatusBar.js +8 -5
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +46 -4
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.js +148 -5
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +516 -174
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +15 -4
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/ManualPanel.d.ts +5 -0
- package/dist/editor/ai/ManualPanel.js +16 -0
- package/dist/editor/ai/ManualPanel.js.map +1 -0
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +184 -23
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +119 -22
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +26 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/useAgentStatus.d.ts +1 -0
- package/dist/editor/ai/useAgentStatus.js +74 -29
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/client/EditorShell.js +183 -11
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +4 -0
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/helpers.js +6 -0
- package/dist/editor/client/helpers.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +1 -0
- package/dist/editor/client/hooks/useEditorWebSocket.js +10 -1
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +7 -0
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +19 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -1
- package/dist/editor/client/operations.js +75 -8
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +3 -30
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.js +51 -56
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +106 -6
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +1 -0
- package/dist/editor/commands/itemCommands.js +28 -1
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/media-selector/MediaSelector.js +7 -1
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +37 -31
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +1 -1
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.d.ts +3 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +12 -5
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +17 -133
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.js +1 -1
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +31 -4
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/HelpButton.js +1 -0
- package/dist/editor/menubar/toolbar-sections/HelpButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +3 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +231 -59
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.js +9 -3
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +27 -6
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +17 -11
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +50 -8
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.js +1 -1
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +234 -100
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/pageModel.d.ts +2 -1
- package/dist/editor/reviews/CreateReviewDialog.js +260 -173
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +96 -25
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +25 -3
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PagesPanel.js +31 -15
- package/dist/editor/reviews/PagesPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.js +13 -7
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +2 -2
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +7 -3
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +15 -1
- package/dist/editor/services/agentService.js +36 -2
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +41 -1
- package/dist/editor/services/aiService.js +12 -2
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +4 -0
- package/dist/editor/services/editService.js +5 -0
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +2 -1
- package/dist/editor/services/serviceHelper.js +12 -1
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/settings/About.js +1 -1
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +202 -4
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +1 -1
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -1
- package/dist/editor/settings/status/coreStatusChecks.js +82 -6
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/settings/status/useStartupChecks.js +2 -1
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +19 -6
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/MorePanelsButton.js +9 -3
- package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.js +2 -2
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/WorkspaceRail.d.ts +0 -1
- package/dist/editor/sidebar/WorkspaceRail.js +56 -168
- package/dist/editor/sidebar/WorkspaceRail.js.map +1 -1
- package/dist/editor/tree-indicators/GutterSelector.js +1 -1
- package/dist/editor/tree-indicators/GutterSelector.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js +1 -1
- package/dist/editor/ui/SharedFolderSelectorDialog.js +18 -2
- package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
- package/dist/editor/ui/SimpleIconButton.js +1 -1
- package/dist/editor/ui/SimpleIconButton.js.map +1 -1
- package/dist/editor/ui/Splitter.js +4 -2
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TreeListSelector.d.ts +2 -1
- package/dist/editor/ui/TreeListSelector.js +2 -2
- package/dist/editor/ui/TreeListSelector.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +7 -8
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +1 -1
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/wizard/steps/ImportModelDialog.js +24 -22
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +2 -2
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +26 -5
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/ProjectSelector.d.ts +19 -0
- package/dist/task-board/components/ProjectSelector.js +51 -0
- package/dist/task-board/components/ProjectSelector.js.map +1 -0
- package/dist/task-board/components/TaskBoardTitlebar.js +9 -50
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +126 -6
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/index.d.ts +2 -3
- package/dist/task-board/index.js +1 -2
- package/dist/task-board/index.js.map +1 -1
- package/dist/task-board/services/taskService.d.ts +6 -1
- package/dist/task-board/services/taskService.js +47 -2
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/task-board/taskBoardNavStore.d.ts +4 -0
- package/dist/task-board/taskBoardNavStore.js +3 -0
- package/dist/task-board/taskBoardNavStore.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,12 +3,14 @@ import { Agent } from "../editor/services/agentService";
|
|
|
3
3
|
interface AgentCardProps {
|
|
4
4
|
agent: Agent;
|
|
5
5
|
onClick: (agent: Agent) => void;
|
|
6
|
-
onResume
|
|
7
|
-
onClose
|
|
8
|
-
onDelete
|
|
6
|
+
onResume?: (agent: Agent) => void;
|
|
7
|
+
onClose?: (agentId: string, agentName: string) => void;
|
|
8
|
+
onDelete?: (agentId: string, agentName: string, event: React.MouseEvent) => void;
|
|
9
|
+
onDismiss?: (agentId: string, agentName: string) => void;
|
|
9
10
|
formatDateTime: (dateString: string) => string;
|
|
10
11
|
/** Whether this card is selected */
|
|
11
12
|
selected?: boolean;
|
|
12
13
|
}
|
|
13
|
-
export declare function
|
|
14
|
+
export declare function getInboxAttentionPriority(agent: Agent): number;
|
|
15
|
+
export declare function AgentCard({ agent, onClick, onResume, onClose, onDelete, onDismiss, formatDateTime, selected, }: AgentCardProps): import("react/jsx-runtime").JSX.Element;
|
|
14
16
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { getAgentStatusConfig } from "../editor/ai/AgentStatusBadge";
|
|
3
3
|
import { cn } from "../lib/utils";
|
|
4
|
-
import { Trash, X, Play, Users, AlertCircle, Clock, DollarSign, MessageSquare, } from "lucide-react";
|
|
4
|
+
import { Trash, X, Play, Users, AlertCircle, Clock, DollarSign, MessageSquare, HelpCircle, } from "lucide-react";
|
|
5
5
|
import { SimpleIconButton } from "../editor/ui/SimpleIconButton";
|
|
6
6
|
import { SecretAgentIcon } from "../editor/ui/Icons";
|
|
7
7
|
/**
|
|
@@ -38,12 +38,97 @@ function getAttentionIndicator(agent) {
|
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
function getInboxAttentionInfo(agent) {
|
|
42
|
+
const status = agent.status;
|
|
43
|
+
if (status === "waitingForApproval" || status === 2) {
|
|
44
|
+
return {
|
|
45
|
+
priority: 1,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (status === "waitingForInput" || status === 8) {
|
|
49
|
+
return {
|
|
50
|
+
priority: 0,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (status === "costLimitReached" || status === 7) {
|
|
54
|
+
return {
|
|
55
|
+
priority: 2,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (status === "error" || status === 4) {
|
|
59
|
+
return {
|
|
60
|
+
priority: 3,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (status === "completed" || status === 3) {
|
|
64
|
+
return {
|
|
65
|
+
priority: 5,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
priority: 4,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function getInboxAttentionPriority(agent) {
|
|
73
|
+
return getInboxAttentionInfo(agent).priority;
|
|
74
|
+
}
|
|
75
|
+
function getSelectedCardClass(agent) {
|
|
76
|
+
const status = agent.status;
|
|
77
|
+
if (status === "running" || status === 1) {
|
|
78
|
+
return "border-theme-secondary bg-theme-secondary/10 ring-2 ring-theme-secondary";
|
|
79
|
+
}
|
|
80
|
+
if (status === "waitingForApproval" || status === 2) {
|
|
81
|
+
return "border-amber-300 bg-amber-50/30 ring-2 ring-amber-500";
|
|
82
|
+
}
|
|
83
|
+
if (status === "waitingForInput" || status === 8) {
|
|
84
|
+
return "border-purple-300 bg-purple-50/30 ring-2 ring-purple-500";
|
|
85
|
+
}
|
|
86
|
+
if (status === "completed" || status === 3) {
|
|
87
|
+
return "border-green-300 bg-green-50/30 ring-2 ring-green-500";
|
|
88
|
+
}
|
|
89
|
+
if (status === "error" || status === 4) {
|
|
90
|
+
return "border-red-300 bg-red-50/30 ring-2 ring-red-500";
|
|
91
|
+
}
|
|
92
|
+
if (status === "costLimitReached" || status === 7) {
|
|
93
|
+
return "border-amber-300 bg-amber-50/30 ring-2 ring-amber-500";
|
|
94
|
+
}
|
|
95
|
+
if (status === "idle" || status === 6) {
|
|
96
|
+
return "border-amber-300 bg-amber-50/30 ring-2 ring-amber-500";
|
|
97
|
+
}
|
|
98
|
+
return "border-gray-300 bg-gray-50/50 ring-2 ring-gray-400";
|
|
99
|
+
}
|
|
100
|
+
export function AgentCard({ agent, onClick, onResume, onClose, onDelete, onDismiss, formatDateTime, selected = false, }) {
|
|
42
101
|
const statusConfig = getAgentStatusConfig(agent);
|
|
43
102
|
const isClosed = agent.status === "closed" || agent.status === 5;
|
|
44
|
-
const attentionIndicator = getAttentionIndicator(agent)
|
|
103
|
+
const attentionIndicator = getAttentionIndicator(agent) ??
|
|
104
|
+
(agent.status === "waitingForInput" || agent.status === 8
|
|
105
|
+
? {
|
|
106
|
+
show: true,
|
|
107
|
+
icon: _jsx(HelpCircle, { className: "size-3", strokeWidth: 2 }),
|
|
108
|
+
label: "Input Required",
|
|
109
|
+
colorClass: "bg-purple-50 text-purple-700 border-purple-100",
|
|
110
|
+
accentColor: "bg-purple-500",
|
|
111
|
+
}
|
|
112
|
+
: agent.status === "idle" || agent.status === 6
|
|
113
|
+
? {
|
|
114
|
+
show: true,
|
|
115
|
+
icon: _jsx(MessageSquare, { className: "size-3", strokeWidth: 2 }),
|
|
116
|
+
label: "Awaiting Response",
|
|
117
|
+
colorClass: "bg-amber-50 text-amber-700 border-amber-100",
|
|
118
|
+
accentColor: "bg-amber-500",
|
|
119
|
+
}
|
|
120
|
+
: agent.status === "completed" || agent.status === 3
|
|
121
|
+
? {
|
|
122
|
+
show: true,
|
|
123
|
+
icon: _jsx(MessageSquare, { className: "size-3", strokeWidth: 2 }),
|
|
124
|
+
label: "Ready",
|
|
125
|
+
colorClass: "bg-green-50 text-green-700 border-green-100",
|
|
126
|
+
accentColor: "bg-green-500",
|
|
127
|
+
}
|
|
128
|
+
: null);
|
|
129
|
+
const selectedClass = getSelectedCardClass(agent);
|
|
45
130
|
const handleCardClick = () => {
|
|
46
|
-
if (isClosed) {
|
|
131
|
+
if (isClosed && onResume) {
|
|
47
132
|
onResume(agent);
|
|
48
133
|
}
|
|
49
134
|
else {
|
|
@@ -52,17 +137,19 @@ export function AgentCard({ agent, onClick, onResume, onClose, onDelete, formatD
|
|
|
52
137
|
};
|
|
53
138
|
return (_jsxs("div", { className: cn("group relative cursor-pointer overflow-hidden rounded-xl border bg-white p-4 transition-all hover:border-gray-300 hover:shadow-[0_4px_12px_rgba(0,0,0,0.05)]", attentionIndicator
|
|
54
139
|
? "border-gray-200"
|
|
55
|
-
: "border-gray-100 shadow-[0_1px_2px_rgba(0,0,0,0.02)]", selected &&
|
|
56
|
-
"border-emerald-300 bg-emerald-50/30 ring-2 ring-emerald-500"), onClick: handleCardClick, children: [attentionIndicator && (_jsx("div", { className: cn("absolute inset-y-0 left-0 w-1", attentionIndicator.accentColor) })), _jsxs("div", { className: "flex items-start justify-between", children: [_jsx("div", { className: "mr-4 shrink-0", children: _jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-gray-50 text-gray-400 ring-1 ring-gray-100 transition-colors group-hover:bg-gray-100", children: agent.profileSvgIcon ? (_jsx("div", { className: "h-6 w-6 [&>svg]:h-full [&>svg]:w-full", dangerouslySetInnerHTML: {
|
|
140
|
+
: "border-gray-100 shadow-[0_1px_2px_rgba(0,0,0,0.02)]", selected && selectedClass), onClick: handleCardClick, children: [attentionIndicator && (_jsx("div", { className: cn("absolute inset-y-0 left-0 w-1", attentionIndicator.accentColor) })), _jsxs("div", { className: "flex items-start justify-between", children: [_jsx("div", { className: "mr-4 shrink-0", children: _jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-gray-50 text-gray-400 ring-1 ring-gray-100 transition-colors group-hover:bg-gray-100", children: agent.profileSvgIcon ? (_jsx("div", { className: "h-6 w-6 [&>svg]:h-full [&>svg]:w-full", dangerouslySetInnerHTML: {
|
|
57
141
|
__html: agent.profileSvgIcon,
|
|
58
142
|
} })) : (_jsx(SecretAgentIcon, { size: 24, strokeWidth: 1.5, className: "text-gray-400" })) }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "mb-1 flex items-center gap-2", children: [_jsx("h4", { className: "truncate text-sm font-semibold tracking-tight text-gray-900", children: agent.name }), _jsx("div", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full", statusConfig.color, statusConfig.shouldPulse && "animate-pulse"), title: statusConfig.label }), agent.isShared && (_jsx("div", { className: "flex items-center gap-1 rounded-full bg-blue-50/80 px-2 py-0.5 text-[10px] font-bold tracking-wider text-blue-600 uppercase ring-1 ring-blue-100 ring-inset", children: _jsx("span", { children: "Shared" }) }))] }), _jsxs("div", { className: "mb-1 font-mono text-[10px] text-gray-400", children: ["ID: ", agent.id] }), attentionIndicator && (_jsxs("div", { className: cn("mb-3 inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-[11px] font-semibold tracking-tight", attentionIndicator.colorClass), children: [attentionIndicator.icon, _jsx("span", { children: attentionIndicator.label })] })), agent.description ? (_jsx("p", { className: "mb-3 line-clamp-1 text-[13px] leading-relaxed text-gray-500", children: agent.description })) : (_jsx("div", { className: "mb-2" })), _jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] font-medium text-gray-400", children: [agent.nextRunAt && (_jsxs("div", { className: "flex items-center gap-1 text-amber-600", children: [_jsx(Clock, { className: "size-3", strokeWidth: 2 }), _jsxs("span", { children: ["Wake: ", formatDateTime(agent.nextRunAt)] })] })), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Clock, { className: "size-3", strokeWidth: 2 }), _jsx("span", { children: agent.lastMessageDate
|
|
59
143
|
? formatDateTime(agent.lastMessageDate)
|
|
60
144
|
: formatDateTime(agent.updatedDate) })] }), agent.isShared && agent.ownerName && (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Users, { className: "size-3", strokeWidth: 2 }), _jsxs("span", { children: ["By ", agent.ownerName] })] })), agent.messageCount !== undefined && agent.messageCount > 0 && (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(MessageSquare, { className: "size-3", strokeWidth: 2 }), _jsxs("span", { children: [agent.messageCount, " msg"] })] })), agent.totalCost !== undefined && agent.totalCost > 0 && (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(DollarSign, { className: "size-3", strokeWidth: 2 }), _jsxs("span", { children: ["$", agent.totalCost.toFixed(2)] })] }))] })] }), _jsxs("div", { className: "ml-4 flex shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100", children: [isClosed && (_jsx(SimpleIconButton, { onClick: (e) => {
|
|
61
145
|
e.stopPropagation();
|
|
62
|
-
onResume(agent);
|
|
63
|
-
}, icon: _jsx(Play, { className: "size-4", strokeWidth: 2 }), label: "Resume Agent", className: "h-8 w-8 rounded-full bg-blue-50 text-blue-600 shadow-sm hover:bg-blue-100" })), !isClosed && (_jsx(SimpleIconButton, { onClick: (e) => {
|
|
146
|
+
onResume?.(agent);
|
|
147
|
+
}, icon: _jsx(Play, { className: "size-4", strokeWidth: 2 }), label: "Resume Agent", className: "h-8 w-8 rounded-full bg-blue-50 text-blue-600 shadow-sm hover:bg-blue-100" })), !isClosed && !onDismiss && (_jsx(SimpleIconButton, { onClick: (e) => {
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
onClose?.(agent.id, agent.name);
|
|
150
|
+
}, icon: _jsx(X, { className: "size-4", strokeWidth: 2 }), label: "Close Agent", className: "h-8 w-8 rounded-full bg-gray-50 text-gray-600 shadow-sm hover:bg-gray-100" })), onDismiss ? (_jsx(SimpleIconButton, { onClick: (e) => {
|
|
64
151
|
e.stopPropagation();
|
|
65
|
-
|
|
66
|
-
}, icon: _jsx(X, { className: "size-4", strokeWidth: 2 }), label: "
|
|
152
|
+
onDismiss(agent.id, agent.name);
|
|
153
|
+
}, icon: _jsx(X, { className: "size-4", strokeWidth: 2 }), label: "Dismiss", className: "h-8 w-8 rounded-full bg-gray-50 text-gray-600 shadow-sm hover:bg-gray-100" })) : (_jsx(SimpleIconButton, { onClick: (e) => onDelete?.(agent.id, agent.name, e), icon: _jsx(Trash, { className: "size-4", strokeWidth: 2 }), label: "Delete Agent", className: "h-8 w-8 rounded-full bg-red-50 text-red-600 shadow-sm hover:bg-red-100" }))] })] })] }, agent.id));
|
|
67
154
|
}
|
|
68
155
|
//# sourceMappingURL=AgentCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentCard.js","sourceRoot":"","sources":["../../src/agents-view/AgentCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,KAAK,EACL,CAAC,EACD,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,UAAU,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"AgentCard.js","sourceRoot":"","sources":["../../src/agents-view/AgentCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,KAAK,EACL,CAAC,EACD,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,UAAU,EACV,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAkBrD;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAY;IAOzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,KAAK,oBAAoB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;YAClD,KAAK,EAAE,gBAAgB;YACvB,UAAU,EAAE,6CAA6C;YACzD,WAAW,EAAE,cAAc;SAC5B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;YACvD,KAAK,EAAE,iBAAiB;YACxB,UAAU,EAAE,gDAAgD;YAC5D,WAAW,EAAE,eAAe;SAC7B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAC,WAAW,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;YACxD,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,uCAAuC;YACnD,WAAW,EAAE,YAAY;SAC1B,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAY;IAGzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,KAAK,oBAAoB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO;YACL,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAY;IACpD,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAY;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,0EAA0E,CAAC;IACpF,CAAC;IAED,IAAI,MAAM,KAAK,oBAAoB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,0DAA0D,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,KAAK,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,OAAO,oDAAoD,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,GAAG,KAAK,GACD;IACf,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjE,MAAM,kBAAkB,GACtB,qBAAqB,CAAC,KAAK,CAAC;QAC5B,CAAC,KAAK,CAAC,MAAM,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YACvD,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;gBACvD,KAAK,EAAE,gBAAgB;gBACvB,UAAU,EAAE,gDAAgD;gBAC5D,WAAW,EAAE,eAAe;aAC7B;YACH,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC7C,CAAC,CAAC;oBACE,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,KAAC,aAAa,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;oBAC1D,KAAK,EAAE,mBAAmB;oBAC1B,UAAU,EAAE,6CAA6C;oBACzD,WAAW,EAAE,cAAc;iBAC5B;gBACH,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAClD,CAAC,CAAC;wBACE,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,KAAC,aAAa,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI;wBAC1D,KAAK,EAAE,OAAO;wBACd,UAAU,EAAE,6CAA6C;wBACzD,WAAW,EAAE,cAAc;qBAC5B;oBACH,CAAC,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eAEE,SAAS,EAAE,EAAE,CACX,8JAA8J,EAC9J,kBAAkB;YAChB,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,qDAAqD,EACzD,QAAQ,IAAI,aAAa,CAC1B,EACD,OAAO,EAAE,eAAe,aAGvB,kBAAkB,IAAI,CACrB,cACE,SAAS,EAAE,EAAE,CACX,+BAA+B,EAC/B,kBAAkB,CAAC,WAAW,CAC/B,GACD,CACH,EAED,eAAK,SAAS,EAAC,kCAAkC,aAE/C,cAAK,SAAS,EAAC,eAAe,YAC5B,cAAK,SAAS,EAAC,+IAA+I,YAC3J,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CACtB,cACE,SAAS,EAAC,uCAAuC,EACjD,uBAAuB,EAAE;oCACvB,MAAM,EAAE,KAAK,CAAC,cAAc;iCAC7B,GACD,CACH,CAAC,CAAC,CAAC,CACF,KAAC,eAAe,IACd,IAAI,EAAE,EAAE,EACR,WAAW,EAAE,GAAG,EAChB,SAAS,EAAC,eAAe,GACzB,CACH,GACG,GACF,EAEN,eAAK,SAAS,EAAC,gBAAgB,aAE7B,eAAK,SAAS,EAAC,8BAA8B,aAC3C,aAAI,SAAS,EAAC,6DAA6D,YACxE,KAAK,CAAC,IAAI,GACR,EACL,cACE,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,WAAW,IAAI,eAAe,CAC5C,EACD,KAAK,EAAE,YAAY,CAAC,KAAK,GACzB,EACD,KAAK,CAAC,QAAQ,IAAI,CACjB,cAAK,SAAS,EAAC,6JAA6J,YAC1K,oCAAmB,GACf,CACP,IACG,EAGN,eAAK,SAAS,EAAC,0CAA0C,qBAClD,KAAK,CAAC,EAAE,IACT,EAGL,kBAAkB,IAAI,CACrB,eACE,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,kBAAkB,CAAC,UAAU,CAC9B,aAEA,kBAAkB,CAAC,IAAI,EACxB,yBAAO,kBAAkB,CAAC,KAAK,GAAQ,IACnC,CACP,EAGA,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CACnB,YAAG,SAAS,EAAC,6DAA6D,YACvE,KAAK,CAAC,WAAW,GAChB,CACL,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,MAAM,GAAG,CACzB,EAGD,eAAK,SAAS,EAAC,mFAAmF,aAC/F,KAAK,CAAC,SAAS,IAAI,CAClB,eAAK,SAAS,EAAC,wCAAwC,aACrD,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAC5C,qCAAa,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,IAAQ,IAChD,CACP,EACD,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAC5C,yBACG,KAAK,CAAC,eAAe;oDACpB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC;oDACvC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,GAChC,IACH,EAEL,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,CACpC,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAC5C,kCAAU,KAAK,CAAC,SAAS,IAAQ,IAC7B,CACP,EAEA,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAC7D,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,aAAa,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EACpD,2BAAO,KAAK,CAAC,YAAY,YAAY,IACjC,CACP,EAEA,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,CACvD,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EACjD,gCAAQ,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IACtC,CACP,IACG,IACF,EAGN,eAAK,SAAS,EAAC,4FAA4F,aACxG,QAAQ,IAAI,CACX,KAAC,gBAAgB,IACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAC;oCACpB,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;gCACpB,CAAC,EACD,IAAI,EAAE,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EACjD,KAAK,EAAC,cAAc,EACpB,SAAS,EAAC,2EAA2E,GACrF,CACH,EACA,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,CAC1B,KAAC,gBAAgB,IACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAC;oCACpB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAClC,CAAC,EACD,IAAI,EAAE,KAAC,CAAC,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAC9C,KAAK,EAAC,aAAa,EACnB,SAAS,EAAC,2EAA2E,GACrF,CACH,EACA,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,gBAAgB,IACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAC;oCACpB,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAClC,CAAC,EACD,IAAI,EAAE,KAAC,CAAC,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAC9C,KAAK,EAAC,SAAS,EACf,SAAS,EAAC,2EAA2E,GACrF,CACH,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EACnD,IAAI,EAAE,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,GAAI,EAClD,KAAK,EAAC,cAAc,EACpB,SAAS,EAAC,wEAAwE,GAClF,CACH,IACG,IACF,KA5KD,KAAK,CAAC,EAAE,CA6KT,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -11,7 +11,7 @@ interface AgentsInboxProps {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Helper to check if an agent needs attention
|
|
14
|
-
* Includes: waitingForApproval, costLimitReached, error, idle, completed (ready for next prompt)
|
|
14
|
+
* Includes: waitingForApproval, waitingForInput, costLimitReached, error, idle, completed (ready for next prompt)
|
|
15
15
|
*/
|
|
16
16
|
export declare function agentNeedsAttention(agent: Agent): boolean;
|
|
17
17
|
/**
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { AlertCircle, Clock, DollarSign, MessageSquare, X } from "lucide-react";
|
|
5
|
-
import { SimpleIconButton } from "../editor/ui/SimpleIconButton";
|
|
6
|
-
import { SecretAgentIcon } from "../editor/ui/Icons";
|
|
2
|
+
import { MessageSquare, X } from "lucide-react";
|
|
3
|
+
import { AgentCard, getInboxAttentionPriority } from "./AgentCard";
|
|
7
4
|
/**
|
|
8
5
|
* Helper to check if an agent needs attention
|
|
9
|
-
* Includes: waitingForApproval, costLimitReached, error, idle, completed (ready for next prompt)
|
|
6
|
+
* Includes: waitingForApproval, waitingForInput, costLimitReached, error, idle, completed (ready for next prompt)
|
|
10
7
|
*/
|
|
11
8
|
export function agentNeedsAttention(agent) {
|
|
12
9
|
const status = agent.status;
|
|
13
10
|
return (status === "waitingForApproval" ||
|
|
14
11
|
status === 2 ||
|
|
12
|
+
status === "waitingForInput" ||
|
|
13
|
+
status === 8 ||
|
|
15
14
|
status === "costLimitReached" ||
|
|
16
15
|
status === 7 ||
|
|
17
16
|
status === "error" ||
|
|
@@ -21,66 +20,6 @@ export function agentNeedsAttention(agent) {
|
|
|
21
20
|
status === "completed" ||
|
|
22
21
|
status === 3);
|
|
23
22
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Get attention-specific info for display
|
|
26
|
-
*/
|
|
27
|
-
function getAttentionInfo(agent) {
|
|
28
|
-
const status = agent.status;
|
|
29
|
-
if (status === "waitingForApproval" || status === 2) {
|
|
30
|
-
return {
|
|
31
|
-
icon: _jsx(Clock, { className: "size-4", strokeWidth: 2 }),
|
|
32
|
-
label: "Needs Approval",
|
|
33
|
-
description: "Waiting for you to approve an action",
|
|
34
|
-
priority: 1,
|
|
35
|
-
accentColor: "bg-amber-500",
|
|
36
|
-
badgeClass: "text-amber-700 bg-amber-50 ring-1 ring-amber-100",
|
|
37
|
-
bgColor: "bg-white",
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
if (status === "costLimitReached" || status === 7) {
|
|
41
|
-
return {
|
|
42
|
-
icon: _jsx(DollarSign, { className: "size-4", strokeWidth: 2 }),
|
|
43
|
-
label: "Budget Exceeded",
|
|
44
|
-
description: "Cost limit reached - extend to continue",
|
|
45
|
-
priority: 2,
|
|
46
|
-
accentColor: "bg-orange-500",
|
|
47
|
-
badgeClass: "text-orange-700 bg-orange-50 ring-1 ring-orange-100",
|
|
48
|
-
bgColor: "bg-white",
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
if (status === "error" || status === 4) {
|
|
52
|
-
return {
|
|
53
|
-
icon: _jsx(AlertCircle, { className: "size-4", strokeWidth: 2 }),
|
|
54
|
-
label: "Error",
|
|
55
|
-
description: agent.statusMessage || "An error occurred",
|
|
56
|
-
priority: 3,
|
|
57
|
-
accentColor: "bg-red-500",
|
|
58
|
-
badgeClass: "text-red-700 bg-red-50 ring-1 ring-red-100",
|
|
59
|
-
bgColor: "bg-white",
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (status === "completed" || status === 3) {
|
|
63
|
-
return {
|
|
64
|
-
icon: _jsx(MessageSquare, { className: "size-4", strokeWidth: 2 }),
|
|
65
|
-
label: "Ready",
|
|
66
|
-
description: "Finished - ready for your next message",
|
|
67
|
-
priority: 5,
|
|
68
|
-
accentColor: "bg-green-500",
|
|
69
|
-
badgeClass: "text-green-700 bg-green-50 ring-1 ring-green-100",
|
|
70
|
-
bgColor: "bg-white",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
// idle
|
|
74
|
-
return {
|
|
75
|
-
icon: _jsx(MessageSquare, { className: "size-4", strokeWidth: 2 }),
|
|
76
|
-
label: "Awaiting Response",
|
|
77
|
-
description: "Waiting for your input",
|
|
78
|
-
priority: 4,
|
|
79
|
-
accentColor: "bg-gray-400",
|
|
80
|
-
badgeClass: "text-gray-600 bg-gray-50 ring-1 ring-gray-100",
|
|
81
|
-
bgColor: "bg-white",
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
23
|
/**
|
|
85
24
|
* Inbox view showing agents that need user attention.
|
|
86
25
|
* Displays agents with statuses: waitingForApproval, costLimitReached, error, idle
|
|
@@ -89,26 +28,13 @@ export function AgentsInbox({ agents, onOpenAgent, onDismissAgent, onCloseAll, f
|
|
|
89
28
|
// Filter and sort agents by priority
|
|
90
29
|
const inboxAgents = agents
|
|
91
30
|
.filter(agentNeedsAttention)
|
|
92
|
-
.
|
|
93
|
-
agent,
|
|
94
|
-
...getAttentionInfo(agent),
|
|
95
|
-
}))
|
|
96
|
-
.sort((a, b) => a.priority - b.priority);
|
|
31
|
+
.sort((a, b) => getInboxAttentionPriority(a) - getInboxAttentionPriority(b));
|
|
97
32
|
if (loading) {
|
|
98
33
|
return (_jsx("div", { className: "flex h-64 items-center justify-center", children: _jsx("div", { className: "text-sm text-gray-500", children: "Loading..." }) }));
|
|
99
34
|
}
|
|
100
35
|
if (inboxAgents.length === 0) {
|
|
101
36
|
return (_jsxs("div", { className: "flex h-[400px] flex-col items-center justify-center p-6 text-center", children: [_jsxs("div", { className: "relative mb-6", children: [_jsx("div", { className: "absolute inset-0 scale-150 rounded-full bg-green-400 opacity-20 blur-3xl" }), _jsx("div", { className: "relative flex h-20 w-20 items-center justify-center rounded-full bg-green-50 shadow-[0_0_40px_rgba(74,222,128,0.15)] ring-1 ring-green-100", children: _jsx(MessageSquare, { className: "size-10 text-green-500", strokeWidth: 1 }) })] }), _jsx("h3", { className: "mb-2 text-xl font-bold tracking-tight text-gray-900", children: "All caught up!" }), _jsx("p", { className: "max-w-[240px] text-[15px] leading-relaxed text-gray-500", children: "No agents need your attention right now. You're doing great!" })] }));
|
|
102
37
|
}
|
|
103
|
-
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold tracking-tight text-gray-900", children: "Action Required" }), _jsxs("p", { className: "text-[13px] text-gray-500", children: [inboxAgents.length, " agent", inboxAgents.length !== 1 ? "s" : "", " need attention"] })] }), onCloseAll && inboxAgents.length > 1 && (_jsxs("button", { onClick: onCloseAll, className: "flex items-center gap-2 rounded-full border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-600 transition-all hover:bg-gray-50 hover:text-gray-900", children: [_jsx(X, { className: "size-3.5", strokeWidth: 2 }), "Close All"] }))] }), _jsx("div", { className: "grid gap-4", children: inboxAgents.map(({ agent
|
|
104
|
-
const statusConfig = getAgentStatusConfig(agent);
|
|
105
|
-
return (_jsxs("div", { className: cn("group relative cursor-pointer overflow-hidden rounded-xl border border-gray-100 p-5 transition-all hover:border-gray-200 hover:shadow-[0_4px_20px_rgba(0,0,0,0.04)]", bgColor, selectedAgentId === agent.id &&
|
|
106
|
-
"border-emerald-300 bg-emerald-50/30 ring-2 ring-emerald-500"), onClick: () => onOpenAgent(agent), children: [_jsx("div", { className: cn("absolute inset-y-0 left-0 w-1", accentColor) }), _jsxs("div", { className: "flex items-start gap-4", children: [_jsx("div", { className: "flex-shrink-0", children: _jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-gray-50 text-gray-500 ring-1 ring-gray-100 transition-colors group-hover:bg-gray-100", children: agent.profileSvgIcon ? (_jsx("div", { className: "h-7 w-7 [&>svg]:h-full [&>svg]:w-full", dangerouslySetInnerHTML: {
|
|
107
|
-
__html: agent.profileSvgIcon,
|
|
108
|
-
} })) : (_jsx(SecretAgentIcon, { size: 32, strokeWidth: 1.5, className: "text-gray-400" })) }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("h4", { className: "truncate text-[15px] font-semibold tracking-tight text-gray-900", children: agent.name }), _jsx("div", { className: cn("h-1.5 w-1.5 flex-shrink-0 rounded-full", statusConfig.color, statusConfig.shouldPulse && "animate-pulse") })] }), _jsxs("div", { className: "mb-3 flex flex-wrap items-center gap-2", children: [_jsxs("div", { className: cn("inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-[11px] font-bold tracking-tight uppercase", badgeClass), children: [icon, _jsx("span", { children: label })] }), _jsx("span", { className: "text-[13px] text-gray-600", children: description })] }), _jsx("div", { className: "flex items-center gap-4 text-[11px] font-medium text-gray-400", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Clock, { className: "size-3", strokeWidth: 2 }), _jsx("span", { children: formatDateTime(agent.updatedDate) })] }) })] }), _jsx("div", { className: "flex shrink-0 self-center opacity-0 transition-opacity group-hover:opacity-100", children: _jsx(SimpleIconButton, { onClick: (e) => {
|
|
109
|
-
e.stopPropagation();
|
|
110
|
-
onDismissAgent(agent.id, agent.name);
|
|
111
|
-
}, icon: _jsx(X, { className: "size-4", strokeWidth: 2 }), label: "Dismiss", className: "h-9 w-9 rounded-full bg-gray-50 text-gray-500 shadow-sm hover:bg-gray-100 hover:text-gray-900" }) })] })] }, agent.id));
|
|
112
|
-
}) })] }));
|
|
38
|
+
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold tracking-tight text-gray-900", children: "Action Required" }), _jsxs("p", { className: "text-[13px] text-gray-500", children: [inboxAgents.length, " agent", inboxAgents.length !== 1 ? "s" : "", " need attention"] })] }), onCloseAll && inboxAgents.length > 1 && (_jsxs("button", { onClick: onCloseAll, className: "flex items-center gap-2 rounded-full border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-600 transition-all hover:bg-gray-50 hover:text-gray-900", children: [_jsx(X, { className: "size-3.5", strokeWidth: 2 }), "Close All"] }))] }), _jsx("div", { className: "grid gap-4", children: inboxAgents.map((agent) => (_jsx(AgentCard, { agent: agent, onClick: onOpenAgent, onDismiss: onDismissAgent, formatDateTime: formatDateTime, selected: selectedAgentId === agent.id }, agent.id))) })] }));
|
|
113
39
|
}
|
|
114
40
|
//# sourceMappingURL=AgentsInbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsInbox.js","sourceRoot":"","sources":["../../src/agents-view/AgentsInbox.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AgentsInbox.js","sourceRoot":"","sources":["../../src/agents-view/AgentsInbox.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAanE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,OAAO,CACL,MAAM,KAAK,oBAAoB;QAC/B,MAAM,KAAK,CAAC;QACZ,MAAM,KAAK,iBAAiB;QAC5B,MAAM,KAAK,CAAC;QACZ,MAAM,KAAK,kBAAkB;QAC7B,MAAM,KAAK,CAAC;QACZ,MAAM,KAAK,OAAO;QAClB,MAAM,KAAK,CAAC;QACZ,MAAM,KAAK,MAAM;QACjB,MAAM,KAAK,CAAC;QACZ,MAAM,KAAK,WAAW;QACtB,MAAM,KAAK,CAAC,CACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,OAAO,EACP,eAAe,GACE;IACjB,qCAAqC;IACrC,MAAM,WAAW,GAAG,MAAM;SACvB,MAAM,CAAC,mBAAmB,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,cAAK,SAAS,EAAC,uCAAuC,YACpD,cAAK,SAAS,EAAC,uBAAuB,2BAAiB,GACnD,CACP,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CACL,eAAK,SAAS,EAAC,qEAAqE,aAClF,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,0EAA0E,GAAG,EAC5F,cAAK,SAAS,EAAC,4IAA4I,YACzJ,KAAC,aAAa,IAAC,SAAS,EAAC,wBAAwB,EAAC,WAAW,EAAE,CAAC,GAAI,GAChE,IACF,EACN,aAAI,SAAS,EAAC,qDAAqD,+BAE9D,EACL,YAAG,SAAS,EAAC,yDAAyD,6EAElE,IACA,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAK,SAAS,EAAC,mCAAmC,aAChD,0BACE,aAAI,SAAS,EAAC,oDAAoD,gCAE7D,EACL,aAAG,SAAS,EAAC,2BAA2B,aACrC,WAAW,CAAC,MAAM,YAAQ,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,uBAE5D,IACA,EACL,UAAU,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACvC,kBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,wKAAwK,aAElL,KAAC,CAAC,IAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAE,CAAC,GAAI,iBAEnC,CACV,IACG,EAEN,cAAK,SAAS,EAAC,YAAY,YACxB,WAAW,CAAC,GAAG,CACd,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,KAAC,SAAS,IAER,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,cAAc,EACzB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,eAAe,KAAK,KAAK,CAAC,EAAE,IALjC,KAAK,CAAC,EAAE,CAMb,CACH,CACF,GACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Agent } from "../editor/services/agentService";
|
|
2
|
+
export type AgentsViewSection = "inbox" | "all" | "create";
|
|
2
3
|
/**
|
|
3
4
|
* Props for AgentsView component
|
|
4
5
|
*/
|
|
@@ -9,12 +10,10 @@ interface AgentsViewProps {
|
|
|
9
10
|
selectedAgentId?: string;
|
|
10
11
|
/** Whether to show a compact version without the header */
|
|
11
12
|
compact?: boolean;
|
|
13
|
+
/** When set, section is controlled by parent (e.g. AgentsWorkspaceView sidebar); no internal tab bar */
|
|
14
|
+
activeSection?: AgentsViewSection;
|
|
15
|
+
/** Called when inbox count changes (for sidebar badge) */
|
|
16
|
+
onInboxCountChange?: (count: number) => void;
|
|
12
17
|
}
|
|
13
|
-
|
|
14
|
-
* Agents overview view with tab-based navigation:
|
|
15
|
-
* - Inbox: Agents requiring user attention
|
|
16
|
-
* - All Agents: Active and closed agents with search/filter
|
|
17
|
-
* - Create New: Profile selection to start a new agent
|
|
18
|
-
*/
|
|
19
|
-
export declare function AgentsView({ onSelectAgent, selectedAgentId, compact, }?: AgentsViewProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function AgentsView({ onSelectAgent, selectedAgentId, compact, activeSection: controlledSection, onInboxCountChange, }?: AgentsViewProps): import("react/jsx-runtime").JSX.Element;
|
|
20
19
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect,
|
|
2
|
+
import { useState, useEffect, useMemo, useCallback } from "react";
|
|
3
3
|
import { getAgentsGrouped, getClosedAgentsByProfile, closeAgent, deleteAgent, } from "../editor/services/agentService";
|
|
4
4
|
import { cn } from "../lib/utils";
|
|
5
5
|
import { RefreshCw, List, Layers } from "lucide-react";
|
|
@@ -21,9 +21,26 @@ import { Spinner } from "../editor/ui/Spinner";
|
|
|
21
21
|
* - All Agents: Active and closed agents with search/filter
|
|
22
22
|
* - Create New: Profile selection to start a new agent
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
const SECTION_TO_INDEX = {
|
|
25
|
+
inbox: 0,
|
|
26
|
+
all: 1,
|
|
27
|
+
create: 2,
|
|
28
|
+
};
|
|
29
|
+
const SECTION_LABELS = {
|
|
30
|
+
inbox: "Inbox",
|
|
31
|
+
all: "All Agents",
|
|
32
|
+
create: "Create New",
|
|
33
|
+
};
|
|
34
|
+
export function AgentsView({ onSelectAgent, selectedAgentId, compact = false, activeSection: controlledSection, onInboxCountChange, } = {}) {
|
|
25
35
|
const editContext = useEditContext();
|
|
26
|
-
const [
|
|
36
|
+
const [internalTabIndex, setInternalTabIndex] = useState(1);
|
|
37
|
+
const activeTabIndex = controlledSection !== undefined
|
|
38
|
+
? SECTION_TO_INDEX[controlledSection]
|
|
39
|
+
: internalTabIndex;
|
|
40
|
+
const setActiveTabIndex = (index) => {
|
|
41
|
+
if (controlledSection === undefined)
|
|
42
|
+
setInternalTabIndex(index);
|
|
43
|
+
};
|
|
27
44
|
const [activeAgents, setActiveAgents] = useState([]);
|
|
28
45
|
const [profileGroups, setProfileGroups] = useState([]);
|
|
29
46
|
const [expandedProfiles, setExpandedProfiles] = useState(new Set());
|
|
@@ -61,7 +78,7 @@ export function AgentsView({ onSelectAgent, selectedAgentId, compact = false, }
|
|
|
61
78
|
setRefreshing(false);
|
|
62
79
|
setInitialLoad(false);
|
|
63
80
|
}
|
|
64
|
-
}, [
|
|
81
|
+
}, [debouncedSearchTerm, showOnlyMyAgents]);
|
|
65
82
|
// Initial load and reload when filters change
|
|
66
83
|
useEffect(() => {
|
|
67
84
|
loadAgents();
|
|
@@ -208,6 +225,10 @@ export function AgentsView({ onSelectAgent, selectedAgentId, compact = false, }
|
|
|
208
225
|
const inboxCount = useMemo(() => {
|
|
209
226
|
return activeAgents.filter(agentNeedsAttention).length;
|
|
210
227
|
}, [activeAgents]);
|
|
228
|
+
// Report inbox count to parent for sidebar badge
|
|
229
|
+
useEffect(() => {
|
|
230
|
+
onInboxCountChange?.(inboxCount);
|
|
231
|
+
}, [inboxCount, onInboxCountChange]);
|
|
211
232
|
// Calculate running agents (agents that are currently executing)
|
|
212
233
|
// Excludes agents waiting for tool call approval - they're shown in inbox
|
|
213
234
|
const runningAgents = useMemo(() => {
|
|
@@ -421,35 +442,52 @@ export function AgentsView({ onSelectAgent, selectedAgentId, compact = false, }
|
|
|
421
442
|
return new Date(dateB).getTime() - new Date(dateA).getTime();
|
|
422
443
|
});
|
|
423
444
|
}, [profileGroups]);
|
|
424
|
-
|
|
425
|
-
|
|
445
|
+
const currentSection = controlledSection ??
|
|
446
|
+
(activeTabIndex === 0 ? "inbox" : activeTabIndex === 1 ? "all" : "create");
|
|
447
|
+
const pageHeaderDescription = useMemo(() => {
|
|
448
|
+
if (selectedAgentId) {
|
|
449
|
+
const fromActive = activeAgents.find((agent) => agent.id === selectedAgentId);
|
|
450
|
+
if (fromActive?.name)
|
|
451
|
+
return fromActive.name;
|
|
452
|
+
for (const group of profileGroups) {
|
|
453
|
+
const agent = group.agents.find((agent) => agent.id === selectedAgentId);
|
|
454
|
+
if (agent?.name)
|
|
455
|
+
return agent.name;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return SECTION_LABELS[currentSection];
|
|
459
|
+
}, [selectedAgentId, activeAgents, profileGroups, currentSection]);
|
|
460
|
+
// Show full-screen loading only on initial load (skip for "create" – that view loads its own data)
|
|
461
|
+
if (initialLoad && loading && currentSection !== "create") {
|
|
426
462
|
return (_jsxs("div", { className: "flex h-full items-center justify-center gap-2", children: [_jsx(Spinner, { size: "sm" }), _jsx("div", { className: "text-sm text-gray-500", children: "Loading agents..." })] }));
|
|
427
463
|
}
|
|
428
|
-
|
|
429
|
-
const inboxLabel = inboxCount > 0 ? `Inbox (${inboxCount})` : "Inbox";
|
|
430
|
-
const tabs = [
|
|
431
|
-
{
|
|
432
|
-
id: "inbox",
|
|
433
|
-
label: inboxLabel,
|
|
434
|
-
content: null,
|
|
435
|
-
testId: "agents-tab-inbox",
|
|
436
|
-
},
|
|
437
|
-
{ id: "all", label: "All Agents", content: null, testId: "agents-tab-all" },
|
|
438
|
-
{
|
|
439
|
-
id: "create",
|
|
440
|
-
label: "Create New",
|
|
441
|
-
content: null,
|
|
442
|
-
testId: "agents-tab-create",
|
|
443
|
-
},
|
|
444
|
-
];
|
|
445
|
-
return (_jsxs("div", { className: "absolute inset-0 flex flex-col bg-[#fcfcfc]", children: [!compact && (_jsx(PageHeader, { icon: _jsx(SecretAgentIcon, { size: 28, strokeWidth: 1.5 }), title: "AI Agents", description: "Manage, monitor, and deploy your intelligent assistant workforce" })), runningAgents.length > 0 && (_jsxs("div", { className: "flex-shrink-0 border-b border-gray-100 bg-gradient-to-r from-emerald-50 to-teal-50 px-4 py-3", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("div", { className: "h-2 w-2 animate-pulse rounded-full bg-emerald-500" }), _jsxs("span", { className: "text-xs font-semibold tracking-wide text-emerald-700 uppercase", children: ["Running Now (", runningAgents.length, ")"] })] }), _jsx("div", { className: "max-h-[200px] overflow-y-auto pr-1", children: _jsx("div", { className: "flex flex-col gap-1.5", children: runningAgents.map((agent) => {
|
|
464
|
+
return (_jsxs("div", { className: "absolute inset-0 flex flex-col bg-[#fcfcfc]", children: [!compact && (_jsx(PageHeader, { icon: _jsx(SecretAgentIcon, { size: 28, strokeWidth: 1.5 }), title: "AI Agents", description: pageHeaderDescription, variant: "compact" })), runningAgents.length > 0 && (_jsxs("div", { className: "shrink-0 border-b border-gray-100 bg-linear-to-r from-emerald-50 to-teal-50 px-4 py-3", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("div", { className: "h-2 w-2 animate-pulse rounded-full bg-emerald-500" }), _jsxs("span", { className: "text-xs font-semibold tracking-wide text-emerald-700 uppercase", children: ["Running Now (", runningAgents.length, ")"] })] }), _jsx("div", { className: "max-h-[200px] overflow-y-auto pr-1", children: _jsx("div", { className: "flex flex-col gap-1.5", children: runningAgents.map((agent) => {
|
|
446
465
|
const isSelected = selectedAgentId === agent.id;
|
|
447
466
|
return (_jsxs("button", { onClick: () => handleAgentClick(agent), className: cn("flex w-full items-center gap-3 rounded-lg border px-3 py-2 text-xs transition-all", isSelected
|
|
448
467
|
? "border-emerald-500 bg-emerald-100 text-emerald-800 shadow-sm"
|
|
449
468
|
: "border-gray-200 bg-white text-gray-700 hover:border-emerald-300 hover:bg-emerald-50"), children: [agent.profileSvgIcon ? (_jsx("div", { className: "h-4 w-4 shrink-0 [&>svg]:h-full [&>svg]:w-full", dangerouslySetInnerHTML: {
|
|
450
469
|
__html: agent.profileSvgIcon,
|
|
451
470
|
} })) : (_jsx(SecretAgentIcon, { size: 14, strokeWidth: 1.5, className: "shrink-0" })), _jsx("span", { className: "flex-1 truncate text-left font-medium", children: agent.name }), _jsx("div", { className: "h-1.5 w-1.5 shrink-0 animate-pulse rounded-full bg-emerald-500" })] }, agent.id));
|
|
452
|
-
}) }) })] })), _jsx("div", { className: "
|
|
471
|
+
}) }) })] })), controlledSection === undefined && (_jsx("div", { className: "shrink-0 border-b border-gray-100 bg-white px-6 shadow-[0_1px_2px_rgba(0,0,0,0.03)]", children: _jsx(SimpleTabs, { tabs: [
|
|
472
|
+
{
|
|
473
|
+
id: "inbox",
|
|
474
|
+
label: inboxCount > 0 ? `Inbox (${inboxCount})` : "Inbox",
|
|
475
|
+
content: null,
|
|
476
|
+
testId: "agents-tab-inbox",
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
id: "all",
|
|
480
|
+
label: "All Agents",
|
|
481
|
+
content: null,
|
|
482
|
+
testId: "agents-tab-all",
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
id: "create",
|
|
486
|
+
label: "Create New",
|
|
487
|
+
content: null,
|
|
488
|
+
testId: "agents-tab-create",
|
|
489
|
+
},
|
|
490
|
+
], activeTab: activeTabIndex, setActiveTab: setActiveTabIndex, hideContent: true, variant: "elegant", className: "gap-6" }) })), _jsxs("div", { className: "relative flex-1 overflow-hidden", children: [activeTabIndex === 0 && (_jsx("div", { className: "absolute inset-0 overflow-y-auto", children: _jsx(AgentsInbox, { agents: activeAgents, onOpenAgent: handleOpenAgent, onDismissAgent: handleCloseAgent, onCloseAll: handleCloseAllInbox, formatDateTime: formatDateTime, loading: loading && initialLoad, selectedAgentId: selectedAgentId }) })), activeTabIndex === 1 && (_jsxs("div", { className: "absolute inset-0 flex flex-col", children: [_jsxs("div", { className: "shrink-0 border-b border-gray-100 bg-white p-6", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold tracking-tight text-gray-900", children: "Agent History" }), _jsxs("p", { className: "text-[13px] text-gray-500", children: [totalActiveCount, " active, ", totalClosedCount, " closed agents"] })] }), _jsx(SimpleIconButton, { onClick: handleRefresh, icon: _jsx(RefreshCw, { className: cn("size-4 text-gray-400", refreshing && "animate-spin"), strokeWidth: 2 }), label: "Refresh list", disabled: refreshing, className: "h-9 w-9 rounded-full bg-gray-50 shadow-sm transition-colors hover:bg-gray-100" })] }), _jsxs("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-center", children: [_jsx("div", { className: "flex-1", children: _jsx(FilterInput, { value: searchTerm, onChange: setSearchTerm, placeholder: "Search by name or description...", loading: loading && !initialLoad, size: "md", className: "border-gray-100 shadow-sm focus-within:border-gray-300" }) }), _jsxs("div", { className: "flex items-center gap-2", children: [profileGroups.length > 0 && (_jsxs("div", { className: "flex items-center gap-1 rounded-lg border border-gray-100 bg-gray-50/50 p-1", children: [_jsxs("button", { onClick: () => setHistoryViewMode("grouped"), className: cn("flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-[12px] font-medium transition-colors", historyViewMode === "grouped"
|
|
453
491
|
? "bg-white text-gray-900 shadow-sm"
|
|
454
492
|
: "text-gray-600 hover:text-gray-900"), title: "Grouped by profile", children: [_jsx(Layers, { className: "size-3.5", strokeWidth: 2 }), _jsx("span", { children: "Grouped" })] }), _jsxs("button", { onClick: () => setHistoryViewMode("flat"), className: cn("flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-[12px] font-medium transition-colors", historyViewMode === "flat"
|
|
455
493
|
? "bg-white text-gray-900 shadow-sm"
|
|
@@ -465,7 +503,7 @@ export function AgentsView({ onSelectAgent, selectedAgentId, compact = false, }
|
|
|
465
503
|
const isLoadingMore = loadingMoreForProfile === profileGroup.profileId;
|
|
466
504
|
const hasMore = profileGroup.agents.length <
|
|
467
505
|
profileGroup.totalClosedCount;
|
|
468
|
-
return (_jsx(ProfileAgentsGroup, { profileGroup: profileGroup, isExpanded: isExpanded, isLoadingMore: isLoadingMore, hasMore: hasMore, onToggle: () => handleToggleProfile(profileGroup.profileId), onLoadMore: () => handleLoadMoreForProfile(profileGroup.profileId), onAgentClick: handleAgentClick, onResumeAgent: handleOpenAgent, onCloseAgent: handleCloseAgent, onDeleteAgent: handleDeleteAgent, formatDateTime: formatDateTime }, profileKey));
|
|
506
|
+
return (_jsx(ProfileAgentsGroup, { profileGroup: profileGroup, isExpanded: isExpanded, isLoadingMore: isLoadingMore, hasMore: hasMore, onToggle: () => handleToggleProfile(profileGroup.profileId), onLoadMore: () => handleLoadMoreForProfile(profileGroup.profileId), onAgentClick: handleAgentClick, onResumeAgent: handleOpenAgent, onCloseAgent: handleCloseAgent, onDeleteAgent: handleDeleteAgent, formatDateTime: formatDateTime, selectedAgentId: selectedAgentId }, profileKey));
|
|
469
507
|
})) : (
|
|
470
508
|
// Flat list view (newest first)
|
|
471
509
|
_jsx("div", { className: "space-y-3", children: flatClosedAgents.map((agent) => (_jsx(AgentCard, { agent: agent, onClick: handleAgentClick, onResume: handleOpenAgent, onClose: handleCloseAgent, onDelete: handleDeleteAgent, formatDateTime: formatDateTime, selected: selectedAgentId === agent.id }, agent.id))) }))] }))] }))] })] })), activeTabIndex === 2 && (_jsx("div", { className: "absolute inset-0 overflow-y-auto bg-white p-2", children: _jsx(CreateAgentView, { onCreateAgent: handleCreateAgent }) }))] })] }));
|