@contractspec/example.agent-console 3.7.5 → 3.7.7

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.
Files changed (176) hide show
  1. package/.turbo/turbo-build.log +18 -18
  2. package/AGENTS.md +50 -31
  3. package/CHANGELOG.md +12 -0
  4. package/README.md +69 -77
  5. package/dist/agent/agent.event.js +1 -1
  6. package/dist/agent/agent.operation.js +1 -1
  7. package/dist/agent/index.d.ts +5 -5
  8. package/dist/agent/index.js +1 -1
  9. package/dist/browser/agent/agent.event.js +1 -1
  10. package/dist/browser/agent/agent.operation.js +1 -1
  11. package/dist/browser/agent/index.js +1 -1
  12. package/dist/browser/index.js +2145 -2145
  13. package/dist/browser/presentations/index.js +4 -4
  14. package/dist/browser/run/index.js +536 -536
  15. package/dist/browser/run/run.event.js +2 -2
  16. package/dist/browser/run/run.presentation.js +2 -2
  17. package/dist/browser/tool/index.js +260 -260
  18. package/dist/browser/tool/tool.event.js +1 -1
  19. package/dist/browser/tool/tool.presentation.js +2 -2
  20. package/dist/browser/ui/AgentDashboard.js +956 -956
  21. package/dist/browser/ui/AgentRunList.js +16 -16
  22. package/dist/browser/ui/AgentToolRegistry.js +9 -9
  23. package/dist/browser/ui/hooks/index.js +153 -153
  24. package/dist/browser/ui/hooks/useAgentList.js +1 -1
  25. package/dist/browser/ui/hooks/useAgentMutations.js +1 -1
  26. package/dist/browser/ui/hooks/useRunList.js +1 -1
  27. package/dist/browser/ui/hooks/useToolList.js +1 -1
  28. package/dist/browser/ui/index.js +1222 -1222
  29. package/dist/browser/ui/modals/AgentActionsModal.js +13 -13
  30. package/dist/browser/ui/modals/CreateAgentModal.js +15 -15
  31. package/dist/browser/ui/modals/index.js +297 -297
  32. package/dist/browser/ui/renderers/agent-list.renderer.js +7 -7
  33. package/dist/browser/ui/renderers/index.js +157 -157
  34. package/dist/browser/ui/views/AgentListView.js +7 -7
  35. package/dist/browser/ui/views/RunListView.js +16 -16
  36. package/dist/browser/ui/views/ToolRegistryView.js +9 -9
  37. package/dist/browser/ui/views/index.js +97 -97
  38. package/dist/handlers/index.d.ts +1 -1
  39. package/dist/index.d.ts +4 -4
  40. package/dist/index.js +2145 -2145
  41. package/dist/node/agent/agent.event.js +1 -1
  42. package/dist/node/agent/agent.operation.js +1 -1
  43. package/dist/node/agent/index.js +1 -1
  44. package/dist/node/index.js +2145 -2145
  45. package/dist/node/presentations/index.js +4 -4
  46. package/dist/node/run/index.js +536 -536
  47. package/dist/node/run/run.event.js +2 -2
  48. package/dist/node/run/run.presentation.js +2 -2
  49. package/dist/node/tool/index.js +260 -260
  50. package/dist/node/tool/tool.event.js +1 -1
  51. package/dist/node/tool/tool.presentation.js +2 -2
  52. package/dist/node/ui/AgentDashboard.js +956 -956
  53. package/dist/node/ui/AgentRunList.js +16 -16
  54. package/dist/node/ui/AgentToolRegistry.js +9 -9
  55. package/dist/node/ui/hooks/index.js +153 -153
  56. package/dist/node/ui/hooks/useAgentList.js +1 -1
  57. package/dist/node/ui/hooks/useAgentMutations.js +1 -1
  58. package/dist/node/ui/hooks/useRunList.js +1 -1
  59. package/dist/node/ui/hooks/useToolList.js +1 -1
  60. package/dist/node/ui/index.js +1222 -1222
  61. package/dist/node/ui/modals/AgentActionsModal.js +13 -13
  62. package/dist/node/ui/modals/CreateAgentModal.js +15 -15
  63. package/dist/node/ui/modals/index.js +297 -297
  64. package/dist/node/ui/renderers/agent-list.renderer.js +7 -7
  65. package/dist/node/ui/renderers/index.js +157 -157
  66. package/dist/node/ui/views/AgentListView.js +7 -7
  67. package/dist/node/ui/views/RunListView.js +16 -16
  68. package/dist/node/ui/views/ToolRegistryView.js +9 -9
  69. package/dist/node/ui/views/index.js +97 -97
  70. package/dist/presentations/index.d.ts +3 -5
  71. package/dist/presentations/index.js +4 -4
  72. package/dist/run/index.d.ts +7 -7
  73. package/dist/run/index.js +536 -536
  74. package/dist/run/run.event.js +2 -2
  75. package/dist/run/run.handler.d.ts +3 -0
  76. package/dist/run/run.presentation.js +2 -2
  77. package/dist/shared/index.d.ts +1 -1
  78. package/dist/tool/index.d.ts +7 -7
  79. package/dist/tool/index.js +260 -260
  80. package/dist/tool/tool.event.js +1 -1
  81. package/dist/tool/tool.handler.d.ts +1 -1
  82. package/dist/tool/tool.presentation.js +2 -2
  83. package/dist/ui/AgentDashboard.js +956 -956
  84. package/dist/ui/AgentRunList.js +16 -16
  85. package/dist/ui/AgentToolRegistry.js +9 -9
  86. package/dist/ui/hooks/index.d.ts +4 -4
  87. package/dist/ui/hooks/index.js +153 -153
  88. package/dist/ui/hooks/useAgentList.d.ts +5 -0
  89. package/dist/ui/hooks/useAgentList.js +1 -1
  90. package/dist/ui/hooks/useAgentMutations.d.ts +9 -2
  91. package/dist/ui/hooks/useAgentMutations.js +1 -1
  92. package/dist/ui/hooks/useRunList.d.ts +5 -0
  93. package/dist/ui/hooks/useRunList.js +1 -1
  94. package/dist/ui/hooks/useToolList.d.ts +5 -0
  95. package/dist/ui/hooks/useToolList.js +1 -1
  96. package/dist/ui/index.d.ts +3 -3
  97. package/dist/ui/index.js +1222 -1222
  98. package/dist/ui/modals/AgentActionsModal.js +13 -13
  99. package/dist/ui/modals/CreateAgentModal.js +15 -15
  100. package/dist/ui/modals/index.d.ts +1 -1
  101. package/dist/ui/modals/index.js +297 -297
  102. package/dist/ui/renderers/agent-list.markdown.d.ts +5 -0
  103. package/dist/ui/renderers/agent-list.renderer.js +7 -7
  104. package/dist/ui/renderers/dashboard.markdown.d.ts +5 -0
  105. package/dist/ui/renderers/index.d.ts +2 -2
  106. package/dist/ui/renderers/index.js +157 -157
  107. package/dist/ui/renderers/run-list.markdown.d.ts +5 -0
  108. package/dist/ui/renderers/tool-registry.markdown.d.ts +5 -0
  109. package/dist/ui/views/AgentListView.js +7 -7
  110. package/dist/ui/views/RunListView.js +16 -16
  111. package/dist/ui/views/ToolRegistryView.js +9 -9
  112. package/dist/ui/views/index.js +97 -97
  113. package/package.json +10 -10
  114. package/src/agent/agent.entity.ts +111 -111
  115. package/src/agent/agent.enum.ts +12 -12
  116. package/src/agent/agent.event.ts +91 -91
  117. package/src/agent/agent.handler.ts +123 -123
  118. package/src/agent/agent.operation.ts +400 -400
  119. package/src/agent/agent.presentation.ts +62 -62
  120. package/src/agent/agent.schema.ts +175 -175
  121. package/src/agent/agent.test-spec.ts +48 -48
  122. package/src/agent/index.ts +46 -51
  123. package/src/agent.capability.ts +11 -11
  124. package/src/agent.feature.ts +131 -131
  125. package/src/docs/agent-console.docblock.ts +42 -42
  126. package/src/example.ts +35 -35
  127. package/src/handlers/agent.handlers.ts +522 -521
  128. package/src/handlers/index.ts +12 -12
  129. package/src/index.ts +8 -9
  130. package/src/presentations/index.ts +11 -13
  131. package/src/run/index.ts +49 -54
  132. package/src/run/run.entity.ts +137 -137
  133. package/src/run/run.enum.ts +18 -18
  134. package/src/run/run.event.ts +174 -174
  135. package/src/run/run.handler.ts +92 -91
  136. package/src/run/run.operation.ts +474 -474
  137. package/src/run/run.presentation.ts +42 -42
  138. package/src/run/run.schema.ts +126 -126
  139. package/src/run/run.test-spec.ts +48 -48
  140. package/src/seeders/index.ts +21 -21
  141. package/src/shared/index.ts +1 -1
  142. package/src/shared/mock-agents.ts +76 -76
  143. package/src/shared/mock-runs.ts +102 -102
  144. package/src/shared/mock-tools.ts +140 -140
  145. package/src/shared/overlay-types.ts +23 -23
  146. package/src/tool/index.ts +39 -44
  147. package/src/tool/tool.entity.ts +73 -73
  148. package/src/tool/tool.enum.ts +13 -13
  149. package/src/tool/tool.event.ts +80 -80
  150. package/src/tool/tool.handler.ts +102 -102
  151. package/src/tool/tool.operation.ts +328 -328
  152. package/src/tool/tool.presentation.ts +43 -43
  153. package/src/tool/tool.schema.ts +106 -106
  154. package/src/tool/tool.test-spec.ts +48 -48
  155. package/src/ui/AgentDashboard.tsx +348 -348
  156. package/src/ui/hooks/index.ts +7 -7
  157. package/src/ui/hooks/useAgentList.ts +57 -56
  158. package/src/ui/hooks/useAgentMutations.ts +160 -159
  159. package/src/ui/hooks/useRunList.ts +58 -57
  160. package/src/ui/hooks/useToolList.ts +102 -101
  161. package/src/ui/index.ts +6 -9
  162. package/src/ui/modals/AgentActionsModal.tsx +262 -262
  163. package/src/ui/modals/CreateAgentModal.tsx +232 -232
  164. package/src/ui/modals/index.ts +1 -1
  165. package/src/ui/overlays/demo-overlays.ts +52 -52
  166. package/src/ui/renderers/agent-list.markdown.ts +61 -60
  167. package/src/ui/renderers/agent-list.renderer.tsx +14 -14
  168. package/src/ui/renderers/dashboard.markdown.ts +140 -139
  169. package/src/ui/renderers/index.ts +3 -4
  170. package/src/ui/renderers/run-list.markdown.ts +48 -47
  171. package/src/ui/renderers/tool-registry.markdown.ts +66 -65
  172. package/src/ui/views/AgentListView.tsx +90 -90
  173. package/src/ui/views/RunListView.tsx +141 -141
  174. package/src/ui/views/ToolRegistryView.tsx +113 -113
  175. package/tsconfig.json +7 -8
  176. package/tsdown.config.js +7 -3
@@ -1,306 +1,306 @@
1
1
  'use client';
2
2
 
3
+ import { Button } from '@contractspec/lib.design-system';
3
4
  /**
4
5
  * AgentActionsModal - Actions for a specific agent
5
6
  *
6
7
  * Wires to UpdateAgentCommand via useAgentMutations hook.
7
8
  */
8
9
  import { useState } from 'react';
9
- import { Button } from '@contractspec/lib.design-system';
10
10
  import type { Agent } from '../hooks/useAgentList';
11
11
 
12
12
  type ActionMode = 'menu' | 'execute' | 'confirm';
13
13
 
14
14
  interface AgentActionsModalProps {
15
- isOpen: boolean;
16
- agent: Agent | null;
17
- onClose: () => void;
18
- onActivate: (agentId: string) => Promise<void>;
19
- onPause: (agentId: string) => Promise<void>;
20
- onArchive: (agentId: string) => Promise<void>;
21
- onExecute: (agentId: string, message: string) => Promise<void>;
22
- isLoading?: boolean;
15
+ isOpen: boolean;
16
+ agent: Agent | null;
17
+ onClose: () => void;
18
+ onActivate: (agentId: string) => Promise<void>;
19
+ onPause: (agentId: string) => Promise<void>;
20
+ onArchive: (agentId: string) => Promise<void>;
21
+ onExecute: (agentId: string, message: string) => Promise<void>;
22
+ isLoading?: boolean;
23
23
  }
24
24
 
25
25
  function getStatusColor(status: Agent['status']): string {
26
- switch (status) {
27
- case 'ACTIVE':
28
- return 'text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30';
29
- case 'DRAFT':
30
- return 'text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30';
31
- case 'PAUSED':
32
- return 'text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30';
33
- case 'ARCHIVED':
34
- return 'text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700';
35
- default:
36
- return 'text-gray-600 bg-gray-100';
37
- }
26
+ switch (status) {
27
+ case 'ACTIVE':
28
+ return 'text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30';
29
+ case 'DRAFT':
30
+ return 'text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30';
31
+ case 'PAUSED':
32
+ return 'text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30';
33
+ case 'ARCHIVED':
34
+ return 'text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700';
35
+ default:
36
+ return 'text-gray-600 bg-gray-100';
37
+ }
38
38
  }
39
39
 
40
40
  export function AgentActionsModal({
41
- isOpen,
42
- agent,
43
- onClose,
44
- onActivate,
45
- onPause,
46
- onArchive,
47
- onExecute,
48
- isLoading = false,
41
+ isOpen,
42
+ agent,
43
+ onClose,
44
+ onActivate,
45
+ onPause,
46
+ onArchive,
47
+ onExecute,
48
+ isLoading = false,
49
49
  }: AgentActionsModalProps) {
50
- const [mode, setMode] = useState<ActionMode>('menu');
51
- const [message, setMessage] = useState('');
52
- const [confirmAction, setConfirmAction] = useState<'archive' | null>(null);
53
- const [error, setError] = useState<string | null>(null);
50
+ const [mode, setMode] = useState<ActionMode>('menu');
51
+ const [message, setMessage] = useState('');
52
+ const [confirmAction, setConfirmAction] = useState<'archive' | null>(null);
53
+ const [error, setError] = useState<string | null>(null);
54
54
 
55
- const resetForm = () => {
56
- setMode('menu');
57
- setMessage('');
58
- setConfirmAction(null);
59
- setError(null);
60
- };
55
+ const resetForm = () => {
56
+ setMode('menu');
57
+ setMessage('');
58
+ setConfirmAction(null);
59
+ setError(null);
60
+ };
61
61
 
62
- const handleClose = () => {
63
- resetForm();
64
- onClose();
65
- };
62
+ const handleClose = () => {
63
+ resetForm();
64
+ onClose();
65
+ };
66
66
 
67
- const handleExecute = async () => {
68
- if (!agent) return;
69
- setError(null);
67
+ const handleExecute = async () => {
68
+ if (!agent) return;
69
+ setError(null);
70
70
 
71
- if (!message.trim()) {
72
- setError('Please enter a message');
73
- return;
74
- }
71
+ if (!message.trim()) {
72
+ setError('Please enter a message');
73
+ return;
74
+ }
75
75
 
76
- try {
77
- await onExecute(agent.id, message.trim());
78
- handleClose();
79
- } catch (err) {
80
- setError(err instanceof Error ? err.message : 'Failed to execute agent');
81
- }
82
- };
76
+ try {
77
+ await onExecute(agent.id, message.trim());
78
+ handleClose();
79
+ } catch (err) {
80
+ setError(err instanceof Error ? err.message : 'Failed to execute agent');
81
+ }
82
+ };
83
83
 
84
- const handleStatusChange = async (
85
- action: 'activate' | 'pause' | 'archive'
86
- ) => {
87
- if (!agent) return;
88
- setError(null);
84
+ const handleStatusChange = async (
85
+ action: 'activate' | 'pause' | 'archive'
86
+ ) => {
87
+ if (!agent) return;
88
+ setError(null);
89
89
 
90
- try {
91
- switch (action) {
92
- case 'activate':
93
- await onActivate(agent.id);
94
- break;
95
- case 'pause':
96
- await onPause(agent.id);
97
- break;
98
- case 'archive':
99
- await onArchive(agent.id);
100
- break;
101
- }
102
- handleClose();
103
- } catch (err) {
104
- setError(
105
- err instanceof Error ? err.message : `Failed to ${action} agent`
106
- );
107
- }
108
- };
90
+ try {
91
+ switch (action) {
92
+ case 'activate':
93
+ await onActivate(agent.id);
94
+ break;
95
+ case 'pause':
96
+ await onPause(agent.id);
97
+ break;
98
+ case 'archive':
99
+ await onArchive(agent.id);
100
+ break;
101
+ }
102
+ handleClose();
103
+ } catch (err) {
104
+ setError(
105
+ err instanceof Error ? err.message : `Failed to ${action} agent`
106
+ );
107
+ }
108
+ };
109
109
 
110
- if (!isOpen || !agent) return null;
110
+ if (!isOpen || !agent) return null;
111
111
 
112
- return (
113
- <div className="fixed inset-0 z-50 flex items-center justify-center">
114
- {/* Backdrop */}
115
- <div
116
- className="bg-background/80 absolute inset-0 backdrop-blur-sm"
117
- onClick={handleClose}
118
- role="button"
119
- tabIndex={0}
120
- onKeyDown={(e) => {
121
- if (e.key === 'Enter' || e.key === ' ') handleClose();
122
- }}
123
- aria-label="Close modal"
124
- />
112
+ return (
113
+ <div className="fixed inset-0 z-50 flex items-center justify-center">
114
+ {/* Backdrop */}
115
+ <div
116
+ className="absolute inset-0 bg-background/80 backdrop-blur-sm"
117
+ onClick={handleClose}
118
+ role="button"
119
+ tabIndex={0}
120
+ onKeyDown={(e) => {
121
+ if (e.key === 'Enter' || e.key === ' ') handleClose();
122
+ }}
123
+ aria-label="Close modal"
124
+ />
125
125
 
126
- {/* Modal */}
127
- <div className="bg-card border-border relative z-10 w-full max-w-md rounded-xl border p-6 shadow-xl">
128
- {/* Agent Header */}
129
- <div className="border-border mb-4 border-b pb-4">
130
- <h2 className="text-xl font-semibold">{agent.name}</h2>
131
- <div className="mt-1 flex items-center gap-2">
132
- <span className="text-muted-foreground text-sm">
133
- {agent.modelProvider} / {agent.modelName}
134
- </span>
135
- <span
136
- className={`rounded-full px-2 py-0.5 text-xs font-medium ${getStatusColor(agent.status)}`}
137
- >
138
- {agent.status}
139
- </span>
140
- </div>
141
- {agent.description && (
142
- <p className="text-muted-foreground mt-2 text-sm">
143
- {agent.description}
144
- </p>
145
- )}
146
- </div>
126
+ {/* Modal */}
127
+ <div className="relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl">
128
+ {/* Agent Header */}
129
+ <div className="mb-4 border-border border-b pb-4">
130
+ <h2 className="font-semibold text-xl">{agent.name}</h2>
131
+ <div className="mt-1 flex items-center gap-2">
132
+ <span className="text-muted-foreground text-sm">
133
+ {agent.modelProvider} / {agent.modelName}
134
+ </span>
135
+ <span
136
+ className={`rounded-full px-2 py-0.5 font-medium text-xs ${getStatusColor(agent.status)}`}
137
+ >
138
+ {agent.status}
139
+ </span>
140
+ </div>
141
+ {agent.description && (
142
+ <p className="mt-2 text-muted-foreground text-sm">
143
+ {agent.description}
144
+ </p>
145
+ )}
146
+ </div>
147
147
 
148
- {/* Main Menu */}
149
- {mode === 'menu' && (
150
- <div className="space-y-3">
151
- {/* Execute - Only for active agents */}
152
- {agent.status === 'ACTIVE' && (
153
- <Button
154
- className="w-full justify-start"
155
- variant="ghost"
156
- onPress={() => setMode('execute')}
157
- >
158
- <span className="mr-2">▶️</span> Execute Agent
159
- </Button>
160
- )}
148
+ {/* Main Menu */}
149
+ {mode === 'menu' && (
150
+ <div className="space-y-3">
151
+ {/* Execute - Only for active agents */}
152
+ {agent.status === 'ACTIVE' && (
153
+ <Button
154
+ className="w-full justify-start"
155
+ variant="ghost"
156
+ onPress={() => setMode('execute')}
157
+ >
158
+ <span className="mr-2">▶️</span> Execute Agent
159
+ </Button>
160
+ )}
161
161
 
162
- {/* Status Changes */}
163
- {(agent.status === 'DRAFT' || agent.status === 'PAUSED') && (
164
- <Button
165
- className="w-full justify-start"
166
- variant="ghost"
167
- onPress={() => handleStatusChange('activate')}
168
- disabled={isLoading}
169
- >
170
- <span className="mr-2">🟢</span> Activate Agent
171
- </Button>
172
- )}
162
+ {/* Status Changes */}
163
+ {(agent.status === 'DRAFT' || agent.status === 'PAUSED') && (
164
+ <Button
165
+ className="w-full justify-start"
166
+ variant="ghost"
167
+ onPress={() => handleStatusChange('activate')}
168
+ disabled={isLoading}
169
+ >
170
+ <span className="mr-2">🟢</span> Activate Agent
171
+ </Button>
172
+ )}
173
173
 
174
- {agent.status === 'ACTIVE' && (
175
- <Button
176
- className="w-full justify-start"
177
- variant="ghost"
178
- onPress={() => handleStatusChange('pause')}
179
- disabled={isLoading}
180
- >
181
- <span className="mr-2">⏸️</span> Pause Agent
182
- </Button>
183
- )}
174
+ {agent.status === 'ACTIVE' && (
175
+ <Button
176
+ className="w-full justify-start"
177
+ variant="ghost"
178
+ onPress={() => handleStatusChange('pause')}
179
+ disabled={isLoading}
180
+ >
181
+ <span className="mr-2">⏸️</span> Pause Agent
182
+ </Button>
183
+ )}
184
184
 
185
- {agent.status !== 'ARCHIVED' && (
186
- <Button
187
- className="w-full justify-start text-yellow-600 hover:text-yellow-700"
188
- variant="ghost"
189
- onPress={() => {
190
- setConfirmAction('archive');
191
- setMode('confirm');
192
- }}
193
- >
194
- <span className="mr-2">📦</span> Archive Agent
195
- </Button>
196
- )}
185
+ {agent.status !== 'ARCHIVED' && (
186
+ <Button
187
+ className="w-full justify-start text-yellow-600 hover:text-yellow-700"
188
+ variant="ghost"
189
+ onPress={() => {
190
+ setConfirmAction('archive');
191
+ setMode('confirm');
192
+ }}
193
+ >
194
+ <span className="mr-2">📦</span> Archive Agent
195
+ </Button>
196
+ )}
197
197
 
198
- {agent.status === 'ARCHIVED' && (
199
- <Button
200
- className="w-full justify-start"
201
- variant="ghost"
202
- onPress={() => handleStatusChange('activate')}
203
- disabled={isLoading}
204
- >
205
- <span className="mr-2">🔄</span> Restore Agent
206
- </Button>
207
- )}
198
+ {agent.status === 'ARCHIVED' && (
199
+ <Button
200
+ className="w-full justify-start"
201
+ variant="ghost"
202
+ onPress={() => handleStatusChange('activate')}
203
+ disabled={isLoading}
204
+ >
205
+ <span className="mr-2">🔄</span> Restore Agent
206
+ </Button>
207
+ )}
208
208
 
209
- {error && (
210
- <div className="bg-destructive/10 text-destructive rounded-md p-3 text-sm">
211
- {error}
212
- </div>
213
- )}
209
+ {error && (
210
+ <div className="rounded-md bg-destructive/10 p-3 text-destructive text-sm">
211
+ {error}
212
+ </div>
213
+ )}
214
214
 
215
- <div className="border-border border-t pt-3">
216
- <Button
217
- className="w-full"
218
- variant="outline"
219
- onPress={handleClose}
220
- >
221
- Close
222
- </Button>
223
- </div>
224
- </div>
225
- )}
215
+ <div className="border-border border-t pt-3">
216
+ <Button
217
+ className="w-full"
218
+ variant="outline"
219
+ onPress={handleClose}
220
+ >
221
+ Close
222
+ </Button>
223
+ </div>
224
+ </div>
225
+ )}
226
226
 
227
- {/* Execute Form */}
228
- {mode === 'execute' && (
229
- <div className="space-y-4">
230
- <div>
231
- <label
232
- htmlFor="execute-message"
233
- className="text-muted-foreground mb-1 block text-sm font-medium"
234
- >
235
- Message *
236
- </label>
237
- <textarea
238
- id="execute-message"
239
- value={message}
240
- onChange={(e) => setMessage(e.target.value)}
241
- placeholder="Enter your message to the agent..."
242
- rows={4}
243
- disabled={isLoading}
244
- className="border-input bg-background focus:ring-ring w-full rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-none disabled:opacity-50"
245
- />
246
- </div>
227
+ {/* Execute Form */}
228
+ {mode === 'execute' && (
229
+ <div className="space-y-4">
230
+ <div>
231
+ <label
232
+ htmlFor="execute-message"
233
+ className="mb-1 block font-medium text-muted-foreground text-sm"
234
+ >
235
+ Message *
236
+ </label>
237
+ <textarea
238
+ id="execute-message"
239
+ value={message}
240
+ onChange={(e) => setMessage(e.target.value)}
241
+ placeholder="Enter your message to the agent..."
242
+ rows={4}
243
+ disabled={isLoading}
244
+ 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"
245
+ />
246
+ </div>
247
247
 
248
- {error && (
249
- <div className="bg-destructive/10 text-destructive rounded-md p-3 text-sm">
250
- {error}
251
- </div>
252
- )}
248
+ {error && (
249
+ <div className="rounded-md bg-destructive/10 p-3 text-destructive text-sm">
250
+ {error}
251
+ </div>
252
+ )}
253
253
 
254
- <div className="flex justify-end gap-3 pt-2">
255
- <Button
256
- variant="ghost"
257
- onPress={() => setMode('menu')}
258
- disabled={isLoading}
259
- >
260
- Back
261
- </Button>
262
- <Button onPress={handleExecute} disabled={isLoading}>
263
- {isLoading ? 'Executing...' : '▶️ Execute'}
264
- </Button>
265
- </div>
266
- </div>
267
- )}
254
+ <div className="flex justify-end gap-3 pt-2">
255
+ <Button
256
+ variant="ghost"
257
+ onPress={() => setMode('menu')}
258
+ disabled={isLoading}
259
+ >
260
+ Back
261
+ </Button>
262
+ <Button onPress={handleExecute} disabled={isLoading}>
263
+ {isLoading ? 'Executing...' : '▶️ Execute'}
264
+ </Button>
265
+ </div>
266
+ </div>
267
+ )}
268
268
 
269
- {/* Confirm Action */}
270
- {mode === 'confirm' && confirmAction === 'archive' && (
271
- <div className="space-y-4">
272
- <p className="text-muted-foreground">
273
- Are you sure you want to archive{' '}
274
- <span className="text-foreground font-medium">{agent.name}</span>?
275
- </p>
276
- <p className="text-muted-foreground text-sm">
277
- Archived agents cannot be executed but can be restored later.
278
- </p>
269
+ {/* Confirm Action */}
270
+ {mode === 'confirm' && confirmAction === 'archive' && (
271
+ <div className="space-y-4">
272
+ <p className="text-muted-foreground">
273
+ Are you sure you want to archive{' '}
274
+ <span className="font-medium text-foreground">{agent.name}</span>?
275
+ </p>
276
+ <p className="text-muted-foreground text-sm">
277
+ Archived agents cannot be executed but can be restored later.
278
+ </p>
279
279
 
280
- {error && (
281
- <div className="bg-destructive/10 text-destructive rounded-md p-3 text-sm">
282
- {error}
283
- </div>
284
- )}
280
+ {error && (
281
+ <div className="rounded-md bg-destructive/10 p-3 text-destructive text-sm">
282
+ {error}
283
+ </div>
284
+ )}
285
285
 
286
- <div className="flex justify-end gap-3 pt-2">
287
- <Button
288
- variant="ghost"
289
- onPress={() => setMode('menu')}
290
- disabled={isLoading}
291
- >
292
- Cancel
293
- </Button>
294
- <Button
295
- onPress={() => handleStatusChange('archive')}
296
- disabled={isLoading}
297
- >
298
- {isLoading ? 'Archiving...' : '📦 Archive'}
299
- </Button>
300
- </div>
301
- </div>
302
- )}
303
- </div>
304
- </div>
305
- );
286
+ <div className="flex justify-end gap-3 pt-2">
287
+ <Button
288
+ variant="ghost"
289
+ onPress={() => setMode('menu')}
290
+ disabled={isLoading}
291
+ >
292
+ Cancel
293
+ </Button>
294
+ <Button
295
+ onPress={() => handleStatusChange('archive')}
296
+ disabled={isLoading}
297
+ >
298
+ {isLoading ? 'Archiving...' : '📦 Archive'}
299
+ </Button>
300
+ </div>
301
+ </div>
302
+ )}
303
+ </div>
304
+ </div>
305
+ );
306
306
  }