@contractspec/example.agent-console 3.8.8 → 3.8.10
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/.turbo/turbo-build.log +225 -222
- package/CHANGELOG.md +34 -0
- package/dist/agent/agent.entity.js +1 -127
- package/dist/agent/agent.enum.js +1 -25
- package/dist/agent/agent.event.js +1 -116
- package/dist/agent/agent.handler.js +1 -1030
- package/dist/agent/agent.operation.js +1 -735
- package/dist/agent/agent.presentation.js +1 -282
- package/dist/agent/agent.schema.js +1 -215
- package/dist/agent/agent.test-spec.js +1 -58
- package/dist/agent/index.js +1 -1248
- package/dist/agent.capability.js +1 -19
- package/dist/agent.feature.js +1 -305
- package/dist/browser/agent/agent.entity.js +1 -127
- package/dist/browser/agent/agent.enum.js +1 -25
- package/dist/browser/agent/agent.event.js +1 -116
- package/dist/browser/agent/agent.handler.js +1 -1030
- package/dist/browser/agent/agent.operation.js +1 -735
- package/dist/browser/agent/agent.presentation.js +1 -282
- package/dist/browser/agent/agent.schema.js +1 -215
- package/dist/browser/agent/agent.test-spec.js +1 -58
- package/dist/browser/agent/index.js +1 -1248
- package/dist/browser/agent.capability.js +1 -19
- package/dist/browser/agent.feature.js +1 -305
- package/dist/browser/docs/agent-console.docblock.js +5 -49
- package/dist/browser/docs/index.js +5 -49
- package/dist/browser/example.js +1 -41
- package/dist/browser/handlers/agent.handlers.js +6 -2143
- package/dist/browser/handlers/index.js +6 -2943
- package/dist/browser/index.js +14 -6828
- package/dist/browser/presentations/index.js +1 -693
- package/dist/browser/run/index.js +1 -1363
- package/dist/browser/run/run.entity.js +1 -160
- package/dist/browser/run/run.enum.js +1 -34
- package/dist/browser/run/run.event.js +1 -217
- package/dist/browser/run/run.handler.js +1 -919
- package/dist/browser/run/run.operation.js +1 -667
- package/dist/browser/run/run.presentation.js +1 -223
- package/dist/browser/run/run.schema.js +1 -179
- package/dist/browser/run/run.test-spec.js +1 -58
- package/dist/browser/seeders/index.js +2 -21
- package/dist/browser/shared/index.js +1 -626
- package/dist/browser/shared/mock-agents.js +1 -82
- package/dist/browser/shared/mock-runs.js +1 -113
- package/dist/browser/shared/mock-tools.js +1 -146
- package/dist/browser/tool/index.js +1 -949
- package/dist/browser/tool/tool.entity.js +1 -90
- package/dist/browser/tool/tool.enum.js +1 -26
- package/dist/browser/tool/tool.event.js +1 -99
- package/dist/browser/tool/tool.handler.js +1 -699
- package/dist/browser/tool/tool.operation.js +1 -482
- package/dist/browser/tool/tool.presentation.js +1 -188
- package/dist/browser/tool/tool.schema.js +1 -141
- package/dist/browser/tool/tool.test-spec.js +1 -58
- package/dist/browser/ui/AgentDashboard.js +1 -2527
- package/dist/browser/ui/AgentDashboard.visualizations.js +1 -217
- package/dist/browser/ui/AgentRunList.js +1 -482
- package/dist/browser/ui/AgentToolRegistry.js +1 -212
- package/dist/browser/ui/ExecutionConsoleHost.js +1 -0
- package/dist/browser/ui/hooks/index.js +1 -740
- package/dist/browser/ui/hooks/useAgentList.js +1 -55
- package/dist/browser/ui/hooks/useAgentMutations.js +1 -530
- package/dist/browser/ui/hooks/useRunList.js +1 -70
- package/dist/browser/ui/hooks/useToolList.js +1 -85
- package/dist/browser/ui/index.js +5 -3018
- package/dist/browser/ui/modals/AgentActionsModal.js +1 -304
- package/dist/browser/ui/modals/CreateAgentModal.js +1 -243
- package/dist/browser/ui/modals/index.js +1 -546
- package/dist/browser/ui/overlays/demo-overlays.js +1 -64
- package/dist/browser/ui/overlays/index.js +1 -64
- package/dist/browser/ui/renderers/agent-list.markdown.js +2 -64
- package/dist/browser/ui/renderers/agent-list.renderer.js +1 -180
- package/dist/browser/ui/renderers/dashboard.markdown.js +2 -288
- package/dist/browser/ui/renderers/index.js +5 -642
- package/dist/browser/ui/renderers/run-list.markdown.js +2 -50
- package/dist/browser/ui/renderers/tool-registry.markdown.js +2 -64
- package/dist/browser/ui/views/AgentListView.js +1 -165
- package/dist/browser/ui/views/RunDataTable.js +1 -326
- package/dist/browser/ui/views/RunListView.js +1 -479
- package/dist/browser/ui/views/ToolRegistryView.js +1 -209
- package/dist/browser/ui/views/index.js +1 -851
- package/dist/browser/ui/views/run-data-table.columns.js +1 -271
- package/dist/browser/ui/views/run-list.shared.js +1 -177
- package/dist/browser/visualizations/catalog.js +1 -134
- package/dist/browser/visualizations/index.js +1 -187
- package/dist/browser/visualizations/selectors.js +1 -181
- package/dist/docs/agent-console.docblock.js +5 -49
- package/dist/docs/index.js +5 -49
- package/dist/example.js +1 -41
- package/dist/handlers/agent.handlers.js +6 -2143
- package/dist/handlers/index.js +6 -2943
- package/dist/index.js +14 -6828
- package/dist/node/agent/agent.entity.js +1 -127
- package/dist/node/agent/agent.enum.js +1 -25
- package/dist/node/agent/agent.event.js +1 -116
- package/dist/node/agent/agent.handler.js +1 -1030
- package/dist/node/agent/agent.operation.js +1 -735
- package/dist/node/agent/agent.presentation.js +1 -282
- package/dist/node/agent/agent.schema.js +1 -215
- package/dist/node/agent/agent.test-spec.js +1 -58
- package/dist/node/agent/index.js +1 -1248
- package/dist/node/agent.capability.js +1 -19
- package/dist/node/agent.feature.js +1 -305
- package/dist/node/docs/agent-console.docblock.js +5 -49
- package/dist/node/docs/index.js +5 -49
- package/dist/node/example.js +1 -41
- package/dist/node/handlers/agent.handlers.js +6 -2143
- package/dist/node/handlers/index.js +6 -2943
- package/dist/node/index.js +14 -6828
- package/dist/node/presentations/index.js +1 -693
- package/dist/node/run/index.js +1 -1363
- package/dist/node/run/run.entity.js +1 -160
- package/dist/node/run/run.enum.js +1 -34
- package/dist/node/run/run.event.js +1 -217
- package/dist/node/run/run.handler.js +1 -919
- package/dist/node/run/run.operation.js +1 -667
- package/dist/node/run/run.presentation.js +1 -223
- package/dist/node/run/run.schema.js +1 -179
- package/dist/node/run/run.test-spec.js +1 -58
- package/dist/node/seeders/index.js +2 -21
- package/dist/node/shared/index.js +1 -626
- package/dist/node/shared/mock-agents.js +1 -82
- package/dist/node/shared/mock-runs.js +1 -113
- package/dist/node/shared/mock-tools.js +1 -146
- package/dist/node/tool/index.js +1 -949
- package/dist/node/tool/tool.entity.js +1 -90
- package/dist/node/tool/tool.enum.js +1 -26
- package/dist/node/tool/tool.event.js +1 -99
- package/dist/node/tool/tool.handler.js +1 -699
- package/dist/node/tool/tool.operation.js +1 -482
- package/dist/node/tool/tool.presentation.js +1 -188
- package/dist/node/tool/tool.schema.js +1 -141
- package/dist/node/tool/tool.test-spec.js +1 -58
- package/dist/node/ui/AgentDashboard.js +1 -2527
- package/dist/node/ui/AgentDashboard.visualizations.js +1 -217
- package/dist/node/ui/AgentRunList.js +1 -482
- package/dist/node/ui/AgentToolRegistry.js +1 -212
- package/dist/node/ui/ExecutionConsoleHost.js +1 -0
- package/dist/node/ui/hooks/index.js +1 -740
- package/dist/node/ui/hooks/useAgentList.js +1 -55
- package/dist/node/ui/hooks/useAgentMutations.js +1 -530
- package/dist/node/ui/hooks/useRunList.js +1 -70
- package/dist/node/ui/hooks/useToolList.js +1 -85
- package/dist/node/ui/index.js +5 -3018
- package/dist/node/ui/modals/AgentActionsModal.js +1 -304
- package/dist/node/ui/modals/CreateAgentModal.js +1 -243
- package/dist/node/ui/modals/index.js +1 -546
- package/dist/node/ui/overlays/demo-overlays.js +1 -64
- package/dist/node/ui/overlays/index.js +1 -64
- package/dist/node/ui/renderers/agent-list.markdown.js +2 -64
- package/dist/node/ui/renderers/agent-list.renderer.js +1 -180
- package/dist/node/ui/renderers/dashboard.markdown.js +2 -288
- package/dist/node/ui/renderers/index.js +5 -642
- package/dist/node/ui/renderers/run-list.markdown.js +2 -50
- package/dist/node/ui/renderers/tool-registry.markdown.js +2 -64
- package/dist/node/ui/views/AgentListView.js +1 -165
- package/dist/node/ui/views/RunDataTable.js +1 -326
- package/dist/node/ui/views/RunListView.js +1 -479
- package/dist/node/ui/views/ToolRegistryView.js +1 -209
- package/dist/node/ui/views/index.js +1 -851
- package/dist/node/ui/views/run-data-table.columns.js +1 -271
- package/dist/node/ui/views/run-list.shared.js +1 -177
- package/dist/node/visualizations/catalog.js +1 -134
- package/dist/node/visualizations/index.js +1 -187
- package/dist/node/visualizations/selectors.js +1 -181
- package/dist/presentations/index.js +1 -693
- package/dist/run/index.js +1 -1363
- package/dist/run/run.entity.js +1 -160
- package/dist/run/run.enum.js +1 -34
- package/dist/run/run.event.js +1 -217
- package/dist/run/run.handler.js +1 -919
- package/dist/run/run.operation.js +1 -667
- package/dist/run/run.presentation.js +1 -223
- package/dist/run/run.schema.js +1 -179
- package/dist/run/run.test-spec.js +1 -58
- package/dist/seeders/index.js +2 -21
- package/dist/shared/index.js +1 -626
- package/dist/shared/mock-agents.js +1 -82
- package/dist/shared/mock-runs.js +1 -113
- package/dist/shared/mock-tools.js +1 -146
- package/dist/tool/index.js +1 -949
- package/dist/tool/tool.entity.js +1 -90
- package/dist/tool/tool.enum.js +1 -26
- package/dist/tool/tool.event.js +1 -99
- package/dist/tool/tool.handler.js +1 -699
- package/dist/tool/tool.operation.js +1 -482
- package/dist/tool/tool.presentation.js +1 -188
- package/dist/tool/tool.schema.js +1 -141
- package/dist/tool/tool.test-spec.js +1 -58
- package/dist/ui/AgentDashboard.js +1 -2527
- package/dist/ui/AgentDashboard.visualizations.js +1 -217
- package/dist/ui/AgentRunList.js +1 -482
- package/dist/ui/AgentToolRegistry.js +1 -212
- package/dist/ui/ExecutionConsoleHost.d.ts +1 -0
- package/dist/ui/ExecutionConsoleHost.js +2 -0
- package/dist/ui/ExecutionConsoleHost.test.d.ts +1 -0
- package/dist/ui/hooks/index.js +1 -740
- package/dist/ui/hooks/useAgentList.js +1 -55
- package/dist/ui/hooks/useAgentMutations.js +1 -530
- package/dist/ui/hooks/useRunList.js +1 -70
- package/dist/ui/hooks/useToolList.js +1 -85
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.js +5 -3018
- package/dist/ui/modals/AgentActionsModal.js +1 -304
- package/dist/ui/modals/CreateAgentModal.js +1 -243
- package/dist/ui/modals/index.js +1 -546
- package/dist/ui/overlays/demo-overlays.js +1 -64
- package/dist/ui/overlays/index.js +1 -64
- package/dist/ui/renderers/agent-list.markdown.js +2 -64
- package/dist/ui/renderers/agent-list.renderer.js +1 -180
- package/dist/ui/renderers/dashboard.markdown.js +2 -288
- package/dist/ui/renderers/index.js +5 -642
- package/dist/ui/renderers/run-list.markdown.js +2 -50
- package/dist/ui/renderers/tool-registry.markdown.js +2 -64
- package/dist/ui/views/AgentListView.js +1 -165
- package/dist/ui/views/RunDataTable.js +1 -326
- package/dist/ui/views/RunListView.js +1 -479
- package/dist/ui/views/ToolRegistryView.js +1 -209
- package/dist/ui/views/index.js +1 -851
- package/dist/ui/views/run-data-table.columns.js +1 -271
- package/dist/ui/views/run-list.shared.js +1 -177
- package/dist/visualizations/catalog.js +1 -134
- package/dist/visualizations/index.js +1 -187
- package/dist/visualizations/selectors.js +1 -181
- package/package.json +29 -13
- package/src/ui/ExecutionConsoleHost.test.tsx +110 -0
- package/src/ui/ExecutionConsoleHost.tsx +14 -0
- package/src/ui/index.ts +1 -1
|
@@ -1,304 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Button } from "@contractspec/lib.design-system";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
5
|
-
"use client";
|
|
6
|
-
function getStatusColor(status) {
|
|
7
|
-
switch (status) {
|
|
8
|
-
case "ACTIVE":
|
|
9
|
-
return "text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30";
|
|
10
|
-
case "DRAFT":
|
|
11
|
-
return "text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30";
|
|
12
|
-
case "PAUSED":
|
|
13
|
-
return "text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30";
|
|
14
|
-
case "ARCHIVED":
|
|
15
|
-
return "text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700";
|
|
16
|
-
default:
|
|
17
|
-
return "text-gray-600 bg-gray-100";
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function AgentActionsModal({
|
|
21
|
-
isOpen,
|
|
22
|
-
agent,
|
|
23
|
-
onClose,
|
|
24
|
-
onActivate,
|
|
25
|
-
onPause,
|
|
26
|
-
onArchive,
|
|
27
|
-
onExecute,
|
|
28
|
-
isLoading = false
|
|
29
|
-
}) {
|
|
30
|
-
const [mode, setMode] = useState("menu");
|
|
31
|
-
const [message, setMessage] = useState("");
|
|
32
|
-
const [confirmAction, setConfirmAction] = useState(null);
|
|
33
|
-
const [error, setError] = useState(null);
|
|
34
|
-
const resetForm = () => {
|
|
35
|
-
setMode("menu");
|
|
36
|
-
setMessage("");
|
|
37
|
-
setConfirmAction(null);
|
|
38
|
-
setError(null);
|
|
39
|
-
};
|
|
40
|
-
const handleClose = () => {
|
|
41
|
-
resetForm();
|
|
42
|
-
onClose();
|
|
43
|
-
};
|
|
44
|
-
const handleExecute = async () => {
|
|
45
|
-
if (!agent)
|
|
46
|
-
return;
|
|
47
|
-
setError(null);
|
|
48
|
-
if (!message.trim()) {
|
|
49
|
-
setError("Please enter a message");
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
try {
|
|
53
|
-
await onExecute(agent.id, message.trim());
|
|
54
|
-
handleClose();
|
|
55
|
-
} catch (err) {
|
|
56
|
-
setError(err instanceof Error ? err.message : "Failed to execute agent");
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const handleStatusChange = async (action) => {
|
|
60
|
-
if (!agent)
|
|
61
|
-
return;
|
|
62
|
-
setError(null);
|
|
63
|
-
try {
|
|
64
|
-
switch (action) {
|
|
65
|
-
case "activate":
|
|
66
|
-
await onActivate(agent.id);
|
|
67
|
-
break;
|
|
68
|
-
case "pause":
|
|
69
|
-
await onPause(agent.id);
|
|
70
|
-
break;
|
|
71
|
-
case "archive":
|
|
72
|
-
await onArchive(agent.id);
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
handleClose();
|
|
76
|
-
} catch (err) {
|
|
77
|
-
setError(err instanceof Error ? err.message : `Failed to ${action} agent`);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
if (!isOpen || !agent)
|
|
81
|
-
return null;
|
|
82
|
-
return /* @__PURE__ */ jsxDEV("div", {
|
|
83
|
-
className: "fixed inset-0 z-50 flex items-center justify-center",
|
|
84
|
-
children: [
|
|
85
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
86
|
-
className: "absolute inset-0 bg-background/80 backdrop-blur-sm",
|
|
87
|
-
onClick: handleClose,
|
|
88
|
-
role: "button",
|
|
89
|
-
tabIndex: 0,
|
|
90
|
-
onKeyDown: (e) => {
|
|
91
|
-
if (e.key === "Enter" || e.key === " ")
|
|
92
|
-
handleClose();
|
|
93
|
-
},
|
|
94
|
-
"aria-label": "Close modal"
|
|
95
|
-
}, undefined, false, undefined, this),
|
|
96
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
97
|
-
className: "relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl",
|
|
98
|
-
children: [
|
|
99
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
100
|
-
className: "mb-4 border-border border-b pb-4",
|
|
101
|
-
children: [
|
|
102
|
-
/* @__PURE__ */ jsxDEV("h2", {
|
|
103
|
-
className: "font-semibold text-xl",
|
|
104
|
-
children: agent.name
|
|
105
|
-
}, undefined, false, undefined, this),
|
|
106
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
107
|
-
className: "mt-1 flex items-center gap-2",
|
|
108
|
-
children: [
|
|
109
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
110
|
-
className: "text-muted-foreground text-sm",
|
|
111
|
-
children: [
|
|
112
|
-
agent.modelProvider,
|
|
113
|
-
" / ",
|
|
114
|
-
agent.modelName
|
|
115
|
-
]
|
|
116
|
-
}, undefined, true, undefined, this),
|
|
117
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
118
|
-
className: `rounded-full px-2 py-0.5 font-medium text-xs ${getStatusColor(agent.status)}`,
|
|
119
|
-
children: agent.status
|
|
120
|
-
}, undefined, false, undefined, this)
|
|
121
|
-
]
|
|
122
|
-
}, undefined, true, undefined, this),
|
|
123
|
-
agent.description && /* @__PURE__ */ jsxDEV("p", {
|
|
124
|
-
className: "mt-2 text-muted-foreground text-sm",
|
|
125
|
-
children: agent.description
|
|
126
|
-
}, undefined, false, undefined, this)
|
|
127
|
-
]
|
|
128
|
-
}, undefined, true, undefined, this),
|
|
129
|
-
mode === "menu" && /* @__PURE__ */ jsxDEV("div", {
|
|
130
|
-
className: "space-y-3",
|
|
131
|
-
children: [
|
|
132
|
-
agent.status === "ACTIVE" && /* @__PURE__ */ jsxDEV(Button, {
|
|
133
|
-
className: "w-full justify-start",
|
|
134
|
-
variant: "ghost",
|
|
135
|
-
onPress: () => setMode("execute"),
|
|
136
|
-
children: [
|
|
137
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
138
|
-
className: "mr-2",
|
|
139
|
-
children: "▶️"
|
|
140
|
-
}, undefined, false, undefined, this),
|
|
141
|
-
" Execute Agent"
|
|
142
|
-
]
|
|
143
|
-
}, undefined, true, undefined, this),
|
|
144
|
-
(agent.status === "DRAFT" || agent.status === "PAUSED") && /* @__PURE__ */ jsxDEV(Button, {
|
|
145
|
-
className: "w-full justify-start",
|
|
146
|
-
variant: "ghost",
|
|
147
|
-
onPress: () => handleStatusChange("activate"),
|
|
148
|
-
disabled: isLoading,
|
|
149
|
-
children: [
|
|
150
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
151
|
-
className: "mr-2",
|
|
152
|
-
children: "\uD83D\uDFE2"
|
|
153
|
-
}, undefined, false, undefined, this),
|
|
154
|
-
" Activate Agent"
|
|
155
|
-
]
|
|
156
|
-
}, undefined, true, undefined, this),
|
|
157
|
-
agent.status === "ACTIVE" && /* @__PURE__ */ jsxDEV(Button, {
|
|
158
|
-
className: "w-full justify-start",
|
|
159
|
-
variant: "ghost",
|
|
160
|
-
onPress: () => handleStatusChange("pause"),
|
|
161
|
-
disabled: isLoading,
|
|
162
|
-
children: [
|
|
163
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
164
|
-
className: "mr-2",
|
|
165
|
-
children: "⏸️"
|
|
166
|
-
}, undefined, false, undefined, this),
|
|
167
|
-
" Pause Agent"
|
|
168
|
-
]
|
|
169
|
-
}, undefined, true, undefined, this),
|
|
170
|
-
agent.status !== "ARCHIVED" && /* @__PURE__ */ jsxDEV(Button, {
|
|
171
|
-
className: "w-full justify-start text-yellow-600 hover:text-yellow-700",
|
|
172
|
-
variant: "ghost",
|
|
173
|
-
onPress: () => {
|
|
174
|
-
setConfirmAction("archive");
|
|
175
|
-
setMode("confirm");
|
|
176
|
-
},
|
|
177
|
-
children: [
|
|
178
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
179
|
-
className: "mr-2",
|
|
180
|
-
children: "\uD83D\uDCE6"
|
|
181
|
-
}, undefined, false, undefined, this),
|
|
182
|
-
" Archive Agent"
|
|
183
|
-
]
|
|
184
|
-
}, undefined, true, undefined, this),
|
|
185
|
-
agent.status === "ARCHIVED" && /* @__PURE__ */ jsxDEV(Button, {
|
|
186
|
-
className: "w-full justify-start",
|
|
187
|
-
variant: "ghost",
|
|
188
|
-
onPress: () => handleStatusChange("activate"),
|
|
189
|
-
disabled: isLoading,
|
|
190
|
-
children: [
|
|
191
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
192
|
-
className: "mr-2",
|
|
193
|
-
children: "\uD83D\uDD04"
|
|
194
|
-
}, undefined, false, undefined, this),
|
|
195
|
-
" Restore Agent"
|
|
196
|
-
]
|
|
197
|
-
}, undefined, true, undefined, this),
|
|
198
|
-
error && /* @__PURE__ */ jsxDEV("div", {
|
|
199
|
-
className: "rounded-md bg-destructive/10 p-3 text-destructive text-sm",
|
|
200
|
-
children: error
|
|
201
|
-
}, undefined, false, undefined, this),
|
|
202
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
203
|
-
className: "border-border border-t pt-3",
|
|
204
|
-
children: /* @__PURE__ */ jsxDEV(Button, {
|
|
205
|
-
className: "w-full",
|
|
206
|
-
variant: "outline",
|
|
207
|
-
onPress: handleClose,
|
|
208
|
-
children: "Close"
|
|
209
|
-
}, undefined, false, undefined, this)
|
|
210
|
-
}, undefined, false, undefined, this)
|
|
211
|
-
]
|
|
212
|
-
}, undefined, true, undefined, this),
|
|
213
|
-
mode === "execute" && /* @__PURE__ */ jsxDEV("div", {
|
|
214
|
-
className: "space-y-4",
|
|
215
|
-
children: [
|
|
216
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
217
|
-
children: [
|
|
218
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
219
|
-
htmlFor: "execute-message",
|
|
220
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
221
|
-
children: "Message *"
|
|
222
|
-
}, undefined, false, undefined, this),
|
|
223
|
-
/* @__PURE__ */ jsxDEV("textarea", {
|
|
224
|
-
id: "execute-message",
|
|
225
|
-
value: message,
|
|
226
|
-
onChange: (e) => setMessage(e.target.value),
|
|
227
|
-
placeholder: "Enter your message to the agent...",
|
|
228
|
-
rows: 4,
|
|
229
|
-
disabled: isLoading,
|
|
230
|
-
className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"
|
|
231
|
-
}, undefined, false, undefined, this)
|
|
232
|
-
]
|
|
233
|
-
}, undefined, true, undefined, this),
|
|
234
|
-
error && /* @__PURE__ */ jsxDEV("div", {
|
|
235
|
-
className: "rounded-md bg-destructive/10 p-3 text-destructive text-sm",
|
|
236
|
-
children: error
|
|
237
|
-
}, undefined, false, undefined, this),
|
|
238
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
239
|
-
className: "flex justify-end gap-3 pt-2",
|
|
240
|
-
children: [
|
|
241
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
242
|
-
variant: "ghost",
|
|
243
|
-
onPress: () => setMode("menu"),
|
|
244
|
-
disabled: isLoading,
|
|
245
|
-
children: "Back"
|
|
246
|
-
}, undefined, false, undefined, this),
|
|
247
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
248
|
-
onPress: handleExecute,
|
|
249
|
-
disabled: isLoading,
|
|
250
|
-
children: isLoading ? "Executing..." : "▶️ Execute"
|
|
251
|
-
}, undefined, false, undefined, this)
|
|
252
|
-
]
|
|
253
|
-
}, undefined, true, undefined, this)
|
|
254
|
-
]
|
|
255
|
-
}, undefined, true, undefined, this),
|
|
256
|
-
mode === "confirm" && confirmAction === "archive" && /* @__PURE__ */ jsxDEV("div", {
|
|
257
|
-
className: "space-y-4",
|
|
258
|
-
children: [
|
|
259
|
-
/* @__PURE__ */ jsxDEV("p", {
|
|
260
|
-
className: "text-muted-foreground",
|
|
261
|
-
children: [
|
|
262
|
-
"Are you sure you want to archive",
|
|
263
|
-
" ",
|
|
264
|
-
/* @__PURE__ */ jsxDEV("span", {
|
|
265
|
-
className: "font-medium text-foreground",
|
|
266
|
-
children: agent.name
|
|
267
|
-
}, undefined, false, undefined, this),
|
|
268
|
-
"?"
|
|
269
|
-
]
|
|
270
|
-
}, undefined, true, undefined, this),
|
|
271
|
-
/* @__PURE__ */ jsxDEV("p", {
|
|
272
|
-
className: "text-muted-foreground text-sm",
|
|
273
|
-
children: "Archived agents cannot be executed but can be restored later."
|
|
274
|
-
}, undefined, false, undefined, this),
|
|
275
|
-
error && /* @__PURE__ */ jsxDEV("div", {
|
|
276
|
-
className: "rounded-md bg-destructive/10 p-3 text-destructive text-sm",
|
|
277
|
-
children: error
|
|
278
|
-
}, undefined, false, undefined, this),
|
|
279
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
280
|
-
className: "flex justify-end gap-3 pt-2",
|
|
281
|
-
children: [
|
|
282
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
283
|
-
variant: "ghost",
|
|
284
|
-
onPress: () => setMode("menu"),
|
|
285
|
-
disabled: isLoading,
|
|
286
|
-
children: "Cancel"
|
|
287
|
-
}, undefined, false, undefined, this),
|
|
288
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
289
|
-
onPress: () => handleStatusChange("archive"),
|
|
290
|
-
disabled: isLoading,
|
|
291
|
-
children: isLoading ? "Archiving..." : "\uD83D\uDCE6 Archive"
|
|
292
|
-
}, undefined, false, undefined, this)
|
|
293
|
-
]
|
|
294
|
-
}, undefined, true, undefined, this)
|
|
295
|
-
]
|
|
296
|
-
}, undefined, true, undefined, this)
|
|
297
|
-
]
|
|
298
|
-
}, undefined, true, undefined, this)
|
|
299
|
-
]
|
|
300
|
-
}, undefined, true, undefined, this);
|
|
301
|
-
}
|
|
302
|
-
export {
|
|
303
|
-
AgentActionsModal
|
|
304
|
-
};
|
|
1
|
+
import{Button as G}from"@contractspec/lib.design-system";import{useState as Q}from"react";import{jsx as k,jsxs as w}from"react/jsx-runtime";function p(R){switch(R){case"ACTIVE":return"text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30";case"DRAFT":return"text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30";case"PAUSED":return"text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30";case"ARCHIVED":return"text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700";default:return"text-gray-600 bg-gray-100"}}function v({isOpen:R,agent:q,onClose:Y,onActivate:Z,onPause:_,onArchive:$,onExecute:b,isLoading:z=!1}){let[T,J]=Q("menu"),[U,V]=Q(""),[y,W]=Q(null),[H,I]=Q(null),F=()=>{J("menu"),V(""),W(null),I(null)},K=()=>{F(),Y()},P=async()=>{if(!q)return;if(I(null),!U.trim()){I("Please enter a message");return}try{await b(q.id,U.trim()),K()}catch(D){I(D instanceof Error?D.message:"Failed to execute agent")}},N=async(D)=>{if(!q)return;I(null);try{switch(D){case"activate":await Z(q.id);break;case"pause":await _(q.id);break;case"archive":await $(q.id);break}K()}catch(X){I(X instanceof Error?X.message:`Failed to ${D} agent`)}};if(!R||!q)return null;return w("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[k("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:K,role:"button",tabIndex:0,onKeyDown:(D)=>{if(D.key==="Enter"||D.key===" ")K()},"aria-label":"Close modal"}),w("div",{className:"relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl",children:[w("div",{className:"mb-4 border-border border-b pb-4",children:[k("h2",{className:"font-semibold text-xl",children:q.name}),w("div",{className:"mt-1 flex items-center gap-2",children:[w("span",{className:"text-muted-foreground text-sm",children:[q.modelProvider," / ",q.modelName]}),k("span",{className:`rounded-full px-2 py-0.5 font-medium text-xs ${p(q.status)}`,children:q.status})]}),q.description&&k("p",{className:"mt-2 text-muted-foreground text-sm",children:q.description})]}),T==="menu"&&w("div",{className:"space-y-3",children:[q.status==="ACTIVE"&&w(G,{className:"w-full justify-start",variant:"ghost",onPress:()=>J("execute"),children:[k("span",{className:"mr-2",children:"▶️"})," Execute Agent"]}),(q.status==="DRAFT"||q.status==="PAUSED")&&w(G,{className:"w-full justify-start",variant:"ghost",onPress:()=>N("activate"),disabled:z,children:[k("span",{className:"mr-2",children:"\uD83D\uDFE2"})," Activate Agent"]}),q.status==="ACTIVE"&&w(G,{className:"w-full justify-start",variant:"ghost",onPress:()=>N("pause"),disabled:z,children:[k("span",{className:"mr-2",children:"⏸️"})," Pause Agent"]}),q.status!=="ARCHIVED"&&w(G,{className:"w-full justify-start text-yellow-600 hover:text-yellow-700",variant:"ghost",onPress:()=>{W("archive"),J("confirm")},children:[k("span",{className:"mr-2",children:"\uD83D\uDCE6"})," Archive Agent"]}),q.status==="ARCHIVED"&&w(G,{className:"w-full justify-start",variant:"ghost",onPress:()=>N("activate"),disabled:z,children:[k("span",{className:"mr-2",children:"\uD83D\uDD04"})," Restore Agent"]}),H&&k("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:H}),k("div",{className:"border-border border-t pt-3",children:k(G,{className:"w-full",variant:"outline",onPress:K,children:"Close"})})]}),T==="execute"&&w("div",{className:"space-y-4",children:[w("div",{children:[k("label",{htmlFor:"execute-message",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Message *"}),k("textarea",{id:"execute-message",value:U,onChange:(D)=>V(D.target.value),placeholder:"Enter your message to the agent...",rows:4,disabled:z,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),H&&k("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:H}),w("div",{className:"flex justify-end gap-3 pt-2",children:[k(G,{variant:"ghost",onPress:()=>J("menu"),disabled:z,children:"Back"}),k(G,{onPress:P,disabled:z,children:z?"Executing...":"▶️ Execute"})]})]}),T==="confirm"&&y==="archive"&&w("div",{className:"space-y-4",children:[w("p",{className:"text-muted-foreground",children:["Are you sure you want to archive"," ",k("span",{className:"font-medium text-foreground",children:q.name}),"?"]}),k("p",{className:"text-muted-foreground text-sm",children:"Archived agents cannot be executed but can be restored later."}),H&&k("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:H}),w("div",{className:"flex justify-end gap-3 pt-2",children:[k(G,{variant:"ghost",onPress:()=>J("menu"),disabled:z,children:"Cancel"}),k(G,{onPress:()=>N("archive"),disabled:z,children:z?"Archiving...":"\uD83D\uDCE6 Archive"})]})]})]})]})}export{v as AgentActionsModal};
|
|
@@ -1,243 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Button, Input } from "@contractspec/lib.design-system";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
5
|
-
"use client";
|
|
6
|
-
var MODEL_PROVIDERS = [
|
|
7
|
-
{
|
|
8
|
-
value: "openai",
|
|
9
|
-
label: "OpenAI",
|
|
10
|
-
models: ["gpt-5.4", "gpt-5-mini", "gpt-4o", "gpt-4-turbo", "gpt-3.5-turbo"]
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
value: "anthropic",
|
|
14
|
-
label: "Anthropic",
|
|
15
|
-
models: ["claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5"]
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
value: "google",
|
|
19
|
-
label: "Google",
|
|
20
|
-
models: [
|
|
21
|
-
"gemini-2.5-flash",
|
|
22
|
-
"gemini-2.5-pro",
|
|
23
|
-
"gemini-pro",
|
|
24
|
-
"gemini-ultra"
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
value: "mistral",
|
|
29
|
-
label: "Mistral",
|
|
30
|
-
models: [
|
|
31
|
-
"mistral-large-2512",
|
|
32
|
-
"mistral-large-latest",
|
|
33
|
-
"mistral-medium-latest",
|
|
34
|
-
"mistral-small-latest"
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
];
|
|
38
|
-
function CreateAgentModal({
|
|
39
|
-
isOpen,
|
|
40
|
-
onClose,
|
|
41
|
-
onSubmit,
|
|
42
|
-
isLoading = false
|
|
43
|
-
}) {
|
|
44
|
-
const [name, setName] = useState("");
|
|
45
|
-
const [description, setDescription] = useState("");
|
|
46
|
-
const [modelProvider, setModelProvider] = useState("openai");
|
|
47
|
-
const [modelName, setModelName] = useState("gpt-5.4");
|
|
48
|
-
const [systemPrompt, setSystemPrompt] = useState("");
|
|
49
|
-
const [error, setError] = useState(null);
|
|
50
|
-
const selectedProvider = MODEL_PROVIDERS.find((p) => p.value === modelProvider);
|
|
51
|
-
const handleSubmit = async (e) => {
|
|
52
|
-
e.preventDefault();
|
|
53
|
-
setError(null);
|
|
54
|
-
if (!name.trim()) {
|
|
55
|
-
setError("Agent name is required");
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
try {
|
|
59
|
-
await onSubmit({
|
|
60
|
-
name: name.trim(),
|
|
61
|
-
description: description.trim() || undefined,
|
|
62
|
-
modelProvider,
|
|
63
|
-
modelName,
|
|
64
|
-
systemPrompt: systemPrompt.trim() || undefined
|
|
65
|
-
});
|
|
66
|
-
setName("");
|
|
67
|
-
setDescription("");
|
|
68
|
-
setModelProvider("openai");
|
|
69
|
-
setModelName("gpt-5.4");
|
|
70
|
-
setSystemPrompt("");
|
|
71
|
-
onClose();
|
|
72
|
-
} catch (err) {
|
|
73
|
-
setError(err instanceof Error ? err.message : "Failed to create agent");
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const handleProviderChange = (provider) => {
|
|
77
|
-
setModelProvider(provider);
|
|
78
|
-
const providerConfig = MODEL_PROVIDERS.find((p) => p.value === provider);
|
|
79
|
-
if (providerConfig) {
|
|
80
|
-
setModelName(providerConfig.models[0]);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
if (!isOpen)
|
|
84
|
-
return null;
|
|
85
|
-
return /* @__PURE__ */ jsxDEV("div", {
|
|
86
|
-
className: "fixed inset-0 z-50 flex items-center justify-center",
|
|
87
|
-
children: [
|
|
88
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
89
|
-
className: "absolute inset-0 bg-background/80 backdrop-blur-sm",
|
|
90
|
-
onClick: onClose,
|
|
91
|
-
role: "button",
|
|
92
|
-
tabIndex: 0,
|
|
93
|
-
onKeyDown: (e) => {
|
|
94
|
-
if (e.key === "Enter" || e.key === " ")
|
|
95
|
-
onClose();
|
|
96
|
-
},
|
|
97
|
-
"aria-label": "Close modal"
|
|
98
|
-
}, undefined, false, undefined, this),
|
|
99
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
100
|
-
className: "relative z-10 max-h-[90vh] w-full max-w-lg overflow-y-auto rounded-xl border border-border bg-card p-6 shadow-xl",
|
|
101
|
-
children: [
|
|
102
|
-
/* @__PURE__ */ jsxDEV("h2", {
|
|
103
|
-
className: "mb-4 font-semibold text-xl",
|
|
104
|
-
children: "Create New Agent"
|
|
105
|
-
}, undefined, false, undefined, this),
|
|
106
|
-
/* @__PURE__ */ jsxDEV("form", {
|
|
107
|
-
onSubmit: handleSubmit,
|
|
108
|
-
className: "space-y-4",
|
|
109
|
-
children: [
|
|
110
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
111
|
-
children: [
|
|
112
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
113
|
-
htmlFor: "agent-name",
|
|
114
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
115
|
-
children: "Agent Name *"
|
|
116
|
-
}, undefined, false, undefined, this),
|
|
117
|
-
/* @__PURE__ */ jsxDEV(Input, {
|
|
118
|
-
id: "agent-name",
|
|
119
|
-
value: name,
|
|
120
|
-
onChange: (e) => setName(e.target.value),
|
|
121
|
-
placeholder: "e.g., Customer Support Bot",
|
|
122
|
-
disabled: isLoading
|
|
123
|
-
}, undefined, false, undefined, this)
|
|
124
|
-
]
|
|
125
|
-
}, undefined, true, undefined, this),
|
|
126
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
127
|
-
children: [
|
|
128
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
129
|
-
htmlFor: "agent-description",
|
|
130
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
131
|
-
children: "Description"
|
|
132
|
-
}, undefined, false, undefined, this),
|
|
133
|
-
/* @__PURE__ */ jsxDEV("textarea", {
|
|
134
|
-
id: "agent-description",
|
|
135
|
-
value: description,
|
|
136
|
-
onChange: (e) => setDescription(e.target.value),
|
|
137
|
-
placeholder: "Describe what this agent does...",
|
|
138
|
-
rows: 2,
|
|
139
|
-
disabled: isLoading,
|
|
140
|
-
className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"
|
|
141
|
-
}, undefined, false, undefined, this)
|
|
142
|
-
]
|
|
143
|
-
}, undefined, true, undefined, this),
|
|
144
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
145
|
-
className: "flex gap-3",
|
|
146
|
-
children: [
|
|
147
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
148
|
-
className: "flex-1",
|
|
149
|
-
children: [
|
|
150
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
151
|
-
htmlFor: "model-provider",
|
|
152
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
153
|
-
children: "Provider *"
|
|
154
|
-
}, undefined, false, undefined, this),
|
|
155
|
-
/* @__PURE__ */ jsxDEV("select", {
|
|
156
|
-
id: "model-provider",
|
|
157
|
-
value: modelProvider,
|
|
158
|
-
onChange: (e) => handleProviderChange(e.target.value),
|
|
159
|
-
disabled: isLoading,
|
|
160
|
-
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",
|
|
161
|
-
children: MODEL_PROVIDERS.map((p) => /* @__PURE__ */ jsxDEV("option", {
|
|
162
|
-
value: p.value,
|
|
163
|
-
children: p.label
|
|
164
|
-
}, p.value, false, undefined, this))
|
|
165
|
-
}, undefined, false, undefined, this)
|
|
166
|
-
]
|
|
167
|
-
}, undefined, true, undefined, this),
|
|
168
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
169
|
-
className: "flex-1",
|
|
170
|
-
children: [
|
|
171
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
172
|
-
htmlFor: "model-name",
|
|
173
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
174
|
-
children: "Model *"
|
|
175
|
-
}, undefined, false, undefined, this),
|
|
176
|
-
/* @__PURE__ */ jsxDEV("select", {
|
|
177
|
-
id: "model-name",
|
|
178
|
-
value: modelName,
|
|
179
|
-
onChange: (e) => setModelName(e.target.value),
|
|
180
|
-
disabled: isLoading,
|
|
181
|
-
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",
|
|
182
|
-
children: selectedProvider?.models.map((m) => /* @__PURE__ */ jsxDEV("option", {
|
|
183
|
-
value: m,
|
|
184
|
-
children: m
|
|
185
|
-
}, m, false, undefined, this))
|
|
186
|
-
}, undefined, false, undefined, this)
|
|
187
|
-
]
|
|
188
|
-
}, undefined, true, undefined, this)
|
|
189
|
-
]
|
|
190
|
-
}, undefined, true, undefined, this),
|
|
191
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
192
|
-
children: [
|
|
193
|
-
/* @__PURE__ */ jsxDEV("label", {
|
|
194
|
-
htmlFor: "system-prompt",
|
|
195
|
-
className: "mb-1 block font-medium text-muted-foreground text-sm",
|
|
196
|
-
children: "System Prompt"
|
|
197
|
-
}, undefined, false, undefined, this),
|
|
198
|
-
/* @__PURE__ */ jsxDEV("textarea", {
|
|
199
|
-
id: "system-prompt",
|
|
200
|
-
value: systemPrompt,
|
|
201
|
-
onChange: (e) => setSystemPrompt(e.target.value),
|
|
202
|
-
placeholder: "You are a helpful assistant that...",
|
|
203
|
-
rows: 4,
|
|
204
|
-
disabled: isLoading,
|
|
205
|
-
className: "w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"
|
|
206
|
-
}, undefined, false, undefined, this),
|
|
207
|
-
/* @__PURE__ */ jsxDEV("p", {
|
|
208
|
-
className: "mt-1 text-muted-foreground text-xs",
|
|
209
|
-
children: "Instructions that define the agent's behavior"
|
|
210
|
-
}, undefined, false, undefined, this)
|
|
211
|
-
]
|
|
212
|
-
}, undefined, true, undefined, this),
|
|
213
|
-
error && /* @__PURE__ */ jsxDEV("div", {
|
|
214
|
-
className: "rounded-md bg-destructive/10 p-3 text-destructive text-sm",
|
|
215
|
-
children: error
|
|
216
|
-
}, undefined, false, undefined, this),
|
|
217
|
-
/* @__PURE__ */ jsxDEV("div", {
|
|
218
|
-
className: "flex justify-end gap-3 pt-2",
|
|
219
|
-
children: [
|
|
220
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
221
|
-
type: "button",
|
|
222
|
-
variant: "ghost",
|
|
223
|
-
onPress: onClose,
|
|
224
|
-
disabled: isLoading,
|
|
225
|
-
children: "Cancel"
|
|
226
|
-
}, undefined, false, undefined, this),
|
|
227
|
-
/* @__PURE__ */ jsxDEV(Button, {
|
|
228
|
-
type: "submit",
|
|
229
|
-
disabled: isLoading,
|
|
230
|
-
children: isLoading ? "Creating..." : "Create Agent"
|
|
231
|
-
}, undefined, false, undefined, this)
|
|
232
|
-
]
|
|
233
|
-
}, undefined, true, undefined, this)
|
|
234
|
-
]
|
|
235
|
-
}, undefined, true, undefined, this)
|
|
236
|
-
]
|
|
237
|
-
}, undefined, true, undefined, this)
|
|
238
|
-
]
|
|
239
|
-
}, undefined, true, undefined, this);
|
|
240
|
-
}
|
|
241
|
-
export {
|
|
242
|
-
CreateAgentModal
|
|
243
|
-
};
|
|
1
|
+
import{Button as V,Input as N}from"@contractspec/lib.design-system";import{useState as H}from"react";import{jsx as z,jsxs as F}from"react/jsx-runtime";var Y=[{value:"openai",label:"OpenAI",models:["gpt-5.4","gpt-5-mini","gpt-4o","gpt-4-turbo","gpt-3.5-turbo"]},{value:"anthropic",label:"Anthropic",models:["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5"]},{value:"google",label:"Google",models:["gemini-2.5-flash","gemini-2.5-pro","gemini-pro","gemini-ultra"]},{value:"mistral",label:"Mistral",models:["mistral-large-2512","mistral-large-latest","mistral-medium-latest","mistral-small-latest"]}];function E({isOpen:_,onClose:K,onSubmit:b,isLoading:G=!1}){let[Q,Z]=H(""),[$,k]=H(""),[T,w]=H("openai"),[U,W]=H("gpt-5.4"),[f,A]=H(""),[B,X]=H(null),I=Y.find((q)=>q.value===T),h=async(q)=>{if(q.preventDefault(),X(null),!Q.trim()){X("Agent name is required");return}try{await b({name:Q.trim(),description:$.trim()||void 0,modelProvider:T,modelName:U,systemPrompt:f.trim()||void 0}),Z(""),k(""),w("openai"),W("gpt-5.4"),A(""),K()}catch(J){X(J instanceof Error?J.message:"Failed to create agent")}},y=(q)=>{w(q);let J=Y.find((R)=>R.value===q);if(J)W(J.models[0])};if(!_)return null;return F("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[z("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:K,role:"button",tabIndex:0,onKeyDown:(q)=>{if(q.key==="Enter"||q.key===" ")K()},"aria-label":"Close modal"}),F("div",{className:"relative z-10 max-h-[90vh] w-full max-w-lg overflow-y-auto rounded-xl border border-border bg-card p-6 shadow-xl",children:[z("h2",{className:"mb-4 font-semibold text-xl",children:"Create New Agent"}),F("form",{onSubmit:h,className:"space-y-4",children:[F("div",{children:[z("label",{htmlFor:"agent-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Agent Name *"}),z(N,{id:"agent-name",value:Q,onChange:(q)=>Z(q.target.value),placeholder:"e.g., Customer Support Bot",disabled:G})]}),F("div",{children:[z("label",{htmlFor:"agent-description",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Description"}),z("textarea",{id:"agent-description",value:$,onChange:(q)=>k(q.target.value),placeholder:"Describe what this agent does...",rows:2,disabled:G,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),F("div",{className:"flex gap-3",children:[F("div",{className:"flex-1",children:[z("label",{htmlFor:"model-provider",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Provider *"}),z("select",{id:"model-provider",value:T,onChange:(q)=>y(q.target.value),disabled:G,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:Y.map((q)=>z("option",{value:q.value,children:q.label},q.value))})]}),F("div",{className:"flex-1",children:[z("label",{htmlFor:"model-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Model *"}),z("select",{id:"model-name",value:U,onChange:(q)=>W(q.target.value),disabled:G,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:I?.models.map((q)=>z("option",{value:q,children:q},q))})]})]}),F("div",{children:[z("label",{htmlFor:"system-prompt",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"System Prompt"}),z("textarea",{id:"system-prompt",value:f,onChange:(q)=>A(q.target.value),placeholder:"You are a helpful assistant that...",rows:4,disabled:G,className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"}),z("p",{className:"mt-1 text-muted-foreground text-xs",children:"Instructions that define the agent's behavior"})]}),B&&z("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:B}),F("div",{className:"flex justify-end gap-3 pt-2",children:[z(V,{type:"button",variant:"ghost",onPress:K,disabled:G,children:"Cancel"}),z(V,{type:"submit",disabled:G,children:G?"Creating...":"Create Agent"})]})]})]})]})}export{E as CreateAgentModal};
|