@contractspec/example.agent-console 3.7.6 → 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 (175) hide show
  1. package/.turbo/turbo-build.log +18 -18
  2. package/AGENTS.md +50 -31
  3. package/README.md +69 -77
  4. package/dist/agent/agent.event.js +1 -1
  5. package/dist/agent/agent.operation.js +1 -1
  6. package/dist/agent/index.d.ts +5 -5
  7. package/dist/agent/index.js +1 -1
  8. package/dist/browser/agent/agent.event.js +1 -1
  9. package/dist/browser/agent/agent.operation.js +1 -1
  10. package/dist/browser/agent/index.js +1 -1
  11. package/dist/browser/index.js +2145 -2145
  12. package/dist/browser/presentations/index.js +4 -4
  13. package/dist/browser/run/index.js +536 -536
  14. package/dist/browser/run/run.event.js +2 -2
  15. package/dist/browser/run/run.presentation.js +2 -2
  16. package/dist/browser/tool/index.js +260 -260
  17. package/dist/browser/tool/tool.event.js +1 -1
  18. package/dist/browser/tool/tool.presentation.js +2 -2
  19. package/dist/browser/ui/AgentDashboard.js +956 -956
  20. package/dist/browser/ui/AgentRunList.js +16 -16
  21. package/dist/browser/ui/AgentToolRegistry.js +9 -9
  22. package/dist/browser/ui/hooks/index.js +153 -153
  23. package/dist/browser/ui/hooks/useAgentList.js +1 -1
  24. package/dist/browser/ui/hooks/useAgentMutations.js +1 -1
  25. package/dist/browser/ui/hooks/useRunList.js +1 -1
  26. package/dist/browser/ui/hooks/useToolList.js +1 -1
  27. package/dist/browser/ui/index.js +1222 -1222
  28. package/dist/browser/ui/modals/AgentActionsModal.js +13 -13
  29. package/dist/browser/ui/modals/CreateAgentModal.js +15 -15
  30. package/dist/browser/ui/modals/index.js +297 -297
  31. package/dist/browser/ui/renderers/agent-list.renderer.js +7 -7
  32. package/dist/browser/ui/renderers/index.js +157 -157
  33. package/dist/browser/ui/views/AgentListView.js +7 -7
  34. package/dist/browser/ui/views/RunListView.js +16 -16
  35. package/dist/browser/ui/views/ToolRegistryView.js +9 -9
  36. package/dist/browser/ui/views/index.js +97 -97
  37. package/dist/handlers/index.d.ts +1 -1
  38. package/dist/index.d.ts +4 -4
  39. package/dist/index.js +2145 -2145
  40. package/dist/node/agent/agent.event.js +1 -1
  41. package/dist/node/agent/agent.operation.js +1 -1
  42. package/dist/node/agent/index.js +1 -1
  43. package/dist/node/index.js +2145 -2145
  44. package/dist/node/presentations/index.js +4 -4
  45. package/dist/node/run/index.js +536 -536
  46. package/dist/node/run/run.event.js +2 -2
  47. package/dist/node/run/run.presentation.js +2 -2
  48. package/dist/node/tool/index.js +260 -260
  49. package/dist/node/tool/tool.event.js +1 -1
  50. package/dist/node/tool/tool.presentation.js +2 -2
  51. package/dist/node/ui/AgentDashboard.js +956 -956
  52. package/dist/node/ui/AgentRunList.js +16 -16
  53. package/dist/node/ui/AgentToolRegistry.js +9 -9
  54. package/dist/node/ui/hooks/index.js +153 -153
  55. package/dist/node/ui/hooks/useAgentList.js +1 -1
  56. package/dist/node/ui/hooks/useAgentMutations.js +1 -1
  57. package/dist/node/ui/hooks/useRunList.js +1 -1
  58. package/dist/node/ui/hooks/useToolList.js +1 -1
  59. package/dist/node/ui/index.js +1222 -1222
  60. package/dist/node/ui/modals/AgentActionsModal.js +13 -13
  61. package/dist/node/ui/modals/CreateAgentModal.js +15 -15
  62. package/dist/node/ui/modals/index.js +297 -297
  63. package/dist/node/ui/renderers/agent-list.renderer.js +7 -7
  64. package/dist/node/ui/renderers/index.js +157 -157
  65. package/dist/node/ui/views/AgentListView.js +7 -7
  66. package/dist/node/ui/views/RunListView.js +16 -16
  67. package/dist/node/ui/views/ToolRegistryView.js +9 -9
  68. package/dist/node/ui/views/index.js +97 -97
  69. package/dist/presentations/index.d.ts +3 -5
  70. package/dist/presentations/index.js +4 -4
  71. package/dist/run/index.d.ts +7 -7
  72. package/dist/run/index.js +536 -536
  73. package/dist/run/run.event.js +2 -2
  74. package/dist/run/run.handler.d.ts +3 -0
  75. package/dist/run/run.presentation.js +2 -2
  76. package/dist/shared/index.d.ts +1 -1
  77. package/dist/tool/index.d.ts +7 -7
  78. package/dist/tool/index.js +260 -260
  79. package/dist/tool/tool.event.js +1 -1
  80. package/dist/tool/tool.handler.d.ts +1 -1
  81. package/dist/tool/tool.presentation.js +2 -2
  82. package/dist/ui/AgentDashboard.js +956 -956
  83. package/dist/ui/AgentRunList.js +16 -16
  84. package/dist/ui/AgentToolRegistry.js +9 -9
  85. package/dist/ui/hooks/index.d.ts +4 -4
  86. package/dist/ui/hooks/index.js +153 -153
  87. package/dist/ui/hooks/useAgentList.d.ts +5 -0
  88. package/dist/ui/hooks/useAgentList.js +1 -1
  89. package/dist/ui/hooks/useAgentMutations.d.ts +9 -2
  90. package/dist/ui/hooks/useAgentMutations.js +1 -1
  91. package/dist/ui/hooks/useRunList.d.ts +5 -0
  92. package/dist/ui/hooks/useRunList.js +1 -1
  93. package/dist/ui/hooks/useToolList.d.ts +5 -0
  94. package/dist/ui/hooks/useToolList.js +1 -1
  95. package/dist/ui/index.d.ts +3 -3
  96. package/dist/ui/index.js +1222 -1222
  97. package/dist/ui/modals/AgentActionsModal.js +13 -13
  98. package/dist/ui/modals/CreateAgentModal.js +15 -15
  99. package/dist/ui/modals/index.d.ts +1 -1
  100. package/dist/ui/modals/index.js +297 -297
  101. package/dist/ui/renderers/agent-list.markdown.d.ts +5 -0
  102. package/dist/ui/renderers/agent-list.renderer.js +7 -7
  103. package/dist/ui/renderers/dashboard.markdown.d.ts +5 -0
  104. package/dist/ui/renderers/index.d.ts +2 -2
  105. package/dist/ui/renderers/index.js +157 -157
  106. package/dist/ui/renderers/run-list.markdown.d.ts +5 -0
  107. package/dist/ui/renderers/tool-registry.markdown.d.ts +5 -0
  108. package/dist/ui/views/AgentListView.js +7 -7
  109. package/dist/ui/views/RunListView.js +16 -16
  110. package/dist/ui/views/ToolRegistryView.js +9 -9
  111. package/dist/ui/views/index.js +97 -97
  112. package/package.json +6 -6
  113. package/src/agent/agent.entity.ts +111 -111
  114. package/src/agent/agent.enum.ts +12 -12
  115. package/src/agent/agent.event.ts +91 -91
  116. package/src/agent/agent.handler.ts +123 -123
  117. package/src/agent/agent.operation.ts +400 -400
  118. package/src/agent/agent.presentation.ts +62 -62
  119. package/src/agent/agent.schema.ts +175 -175
  120. package/src/agent/agent.test-spec.ts +48 -48
  121. package/src/agent/index.ts +46 -51
  122. package/src/agent.capability.ts +11 -11
  123. package/src/agent.feature.ts +131 -131
  124. package/src/docs/agent-console.docblock.ts +42 -42
  125. package/src/example.ts +35 -35
  126. package/src/handlers/agent.handlers.ts +522 -521
  127. package/src/handlers/index.ts +12 -12
  128. package/src/index.ts +8 -9
  129. package/src/presentations/index.ts +11 -13
  130. package/src/run/index.ts +49 -54
  131. package/src/run/run.entity.ts +137 -137
  132. package/src/run/run.enum.ts +18 -18
  133. package/src/run/run.event.ts +174 -174
  134. package/src/run/run.handler.ts +92 -91
  135. package/src/run/run.operation.ts +474 -474
  136. package/src/run/run.presentation.ts +42 -42
  137. package/src/run/run.schema.ts +126 -126
  138. package/src/run/run.test-spec.ts +48 -48
  139. package/src/seeders/index.ts +21 -21
  140. package/src/shared/index.ts +1 -1
  141. package/src/shared/mock-agents.ts +76 -76
  142. package/src/shared/mock-runs.ts +102 -102
  143. package/src/shared/mock-tools.ts +140 -140
  144. package/src/shared/overlay-types.ts +23 -23
  145. package/src/tool/index.ts +39 -44
  146. package/src/tool/tool.entity.ts +73 -73
  147. package/src/tool/tool.enum.ts +13 -13
  148. package/src/tool/tool.event.ts +80 -80
  149. package/src/tool/tool.handler.ts +102 -102
  150. package/src/tool/tool.operation.ts +328 -328
  151. package/src/tool/tool.presentation.ts +43 -43
  152. package/src/tool/tool.schema.ts +106 -106
  153. package/src/tool/tool.test-spec.ts +48 -48
  154. package/src/ui/AgentDashboard.tsx +348 -348
  155. package/src/ui/hooks/index.ts +7 -7
  156. package/src/ui/hooks/useAgentList.ts +57 -56
  157. package/src/ui/hooks/useAgentMutations.ts +160 -159
  158. package/src/ui/hooks/useRunList.ts +58 -57
  159. package/src/ui/hooks/useToolList.ts +102 -101
  160. package/src/ui/index.ts +6 -9
  161. package/src/ui/modals/AgentActionsModal.tsx +262 -262
  162. package/src/ui/modals/CreateAgentModal.tsx +232 -232
  163. package/src/ui/modals/index.ts +1 -1
  164. package/src/ui/overlays/demo-overlays.ts +52 -52
  165. package/src/ui/renderers/agent-list.markdown.ts +61 -60
  166. package/src/ui/renderers/agent-list.renderer.tsx +14 -14
  167. package/src/ui/renderers/dashboard.markdown.ts +140 -139
  168. package/src/ui/renderers/index.ts +3 -4
  169. package/src/ui/renderers/run-list.markdown.ts +48 -47
  170. package/src/ui/renderers/tool-registry.markdown.ts +66 -65
  171. package/src/ui/views/AgentListView.tsx +90 -90
  172. package/src/ui/views/RunListView.tsx +141 -141
  173. package/src/ui/views/ToolRegistryView.tsx +113 -113
  174. package/tsconfig.json +7 -8
  175. 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
  }