@agentuity/workbench 0.0.105 → 0.0.107

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 (171) hide show
  1. package/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +15 -13
  3. package/dist/components/App.js.map +1 -1
  4. package/dist/components/ai-elements/actions.d.ts +1 -1
  5. package/dist/components/ai-elements/actions.d.ts.map +1 -1
  6. package/dist/components/ai-elements/actions.js +1 -1
  7. package/dist/components/ai-elements/actions.js.map +1 -1
  8. package/dist/components/ai-elements/code-block.d.ts +1 -1
  9. package/dist/components/ai-elements/code-block.d.ts.map +1 -1
  10. package/dist/components/ai-elements/code-block.js +22 -20
  11. package/dist/components/ai-elements/code-block.js.map +1 -1
  12. package/dist/components/ai-elements/conversation.d.ts +2 -2
  13. package/dist/components/ai-elements/conversation.d.ts.map +1 -1
  14. package/dist/components/ai-elements/conversation.js +5 -3
  15. package/dist/components/ai-elements/conversation.js.map +1 -1
  16. package/dist/components/ai-elements/message.d.ts +1 -1
  17. package/dist/components/ai-elements/message.d.ts.map +1 -1
  18. package/dist/components/ai-elements/message.js +4 -9
  19. package/dist/components/ai-elements/message.js.map +1 -1
  20. package/dist/components/ai-elements/prompt-input.d.ts.map +1 -1
  21. package/dist/components/ai-elements/prompt-input.js +1 -1
  22. package/dist/components/ai-elements/prompt-input.js.map +1 -1
  23. package/dist/components/ai-elements/shimmer.d.ts.map +1 -1
  24. package/dist/components/ai-elements/shimmer.js +1 -1
  25. package/dist/components/ai-elements/shimmer.js.map +1 -1
  26. package/dist/components/internal/chat.d.ts +10 -0
  27. package/dist/components/internal/chat.d.ts.map +1 -0
  28. package/dist/components/internal/chat.js +104 -0
  29. package/dist/components/internal/chat.js.map +1 -0
  30. package/dist/components/internal/{Header.d.ts → header.d.ts} +4 -6
  31. package/dist/components/internal/header.d.ts.map +1 -0
  32. package/dist/components/internal/header.js +25 -0
  33. package/dist/components/internal/header.js.map +1 -0
  34. package/dist/components/internal/{InputSection.d.ts → input-section.d.ts} +9 -9
  35. package/dist/components/internal/input-section.d.ts.map +1 -0
  36. package/dist/components/internal/input-section.js +162 -0
  37. package/dist/components/internal/input-section.js.map +1 -0
  38. package/dist/components/internal/json-editor.d.ts +14 -0
  39. package/dist/components/internal/json-editor.d.ts.map +1 -0
  40. package/dist/components/internal/{MonacoJsonEditor.js → json-editor.js} +40 -37
  41. package/dist/components/internal/json-editor.js.map +1 -0
  42. package/dist/components/internal/logo.d.ts +2 -3
  43. package/dist/components/internal/logo.d.ts.map +1 -1
  44. package/dist/components/internal/logo.js +2 -2
  45. package/dist/components/internal/logo.js.map +1 -1
  46. package/dist/components/internal/resizable-provider.d.ts.map +1 -0
  47. package/dist/components/internal/resizable-provider.js.map +1 -0
  48. package/dist/components/internal/{Schema.d.ts → schema.d.ts} +2 -2
  49. package/dist/components/internal/schema.d.ts.map +1 -0
  50. package/dist/components/internal/schema.js +13 -0
  51. package/dist/components/internal/schema.js.map +1 -0
  52. package/dist/components/internal/{WorkbenchProvider.d.ts → workbench-provider.d.ts} +8 -4
  53. package/dist/components/internal/workbench-provider.d.ts.map +1 -0
  54. package/dist/components/internal/{WorkbenchProvider.js → workbench-provider.js} +87 -60
  55. package/dist/components/internal/workbench-provider.js.map +1 -0
  56. package/dist/components/ui/avatar.d.ts +1 -1
  57. package/dist/components/ui/avatar.d.ts.map +1 -1
  58. package/dist/components/ui/avatar.js.map +1 -1
  59. package/dist/components/ui/button.d.ts +1 -1
  60. package/dist/components/ui/command.d.ts +1 -1
  61. package/dist/components/ui/command.d.ts.map +1 -1
  62. package/dist/components/ui/command.js.map +1 -1
  63. package/dist/components/ui/dialog.d.ts +1 -1
  64. package/dist/components/ui/dialog.d.ts.map +1 -1
  65. package/dist/components/ui/dialog.js.map +1 -1
  66. package/dist/components/ui/dropdown-menu.d.ts +1 -1
  67. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  68. package/dist/components/ui/dropdown-menu.js.map +1 -1
  69. package/dist/components/ui/hover-card.d.ts +1 -1
  70. package/dist/components/ui/hover-card.d.ts.map +1 -1
  71. package/dist/components/ui/hover-card.js.map +1 -1
  72. package/dist/components/ui/input-group.d.ts +2 -2
  73. package/dist/components/ui/input-group.d.ts.map +1 -1
  74. package/dist/components/ui/input-group.js.map +1 -1
  75. package/dist/components/ui/input.d.ts +1 -1
  76. package/dist/components/ui/input.d.ts.map +1 -1
  77. package/dist/components/ui/scroll-area.d.ts +1 -1
  78. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  79. package/dist/components/ui/scroll-area.js.map +1 -1
  80. package/dist/components/ui/textarea.d.ts +1 -1
  81. package/dist/components/ui/textarea.d.ts.map +1 -1
  82. package/dist/components/ui/theme-provider.d.ts.map +1 -1
  83. package/dist/components/ui/theme-provider.js +1 -1
  84. package/dist/components/ui/theme-provider.js.map +1 -1
  85. package/dist/components/ui/tooltip.d.ts +1 -1
  86. package/dist/components/ui/tooltip.d.ts.map +1 -1
  87. package/dist/components/ui/tooltip.js.map +1 -1
  88. package/dist/hooks/useAgentSchemas.d.ts +10 -10
  89. package/dist/hooks/useAgentSchemas.d.ts.map +1 -1
  90. package/dist/hooks/useAgentSchemas.js +9 -7
  91. package/dist/hooks/useAgentSchemas.js.map +1 -1
  92. package/dist/hooks/useLogger.d.ts.map +1 -1
  93. package/dist/hooks/useLogger.js +2 -1
  94. package/dist/hooks/useLogger.js.map +1 -1
  95. package/dist/hooks/useWorkbenchWebsocket.d.ts +2 -2
  96. package/dist/hooks/useWorkbenchWebsocket.d.ts.map +1 -1
  97. package/dist/hooks/useWorkbenchWebsocket.js +24 -20
  98. package/dist/hooks/useWorkbenchWebsocket.js.map +1 -1
  99. package/dist/index.d.ts +5 -5
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +4 -6
  102. package/dist/index.js.map +1 -1
  103. package/dist/lib/utils.d.ts +3 -0
  104. package/dist/lib/utils.d.ts.map +1 -1
  105. package/dist/lib/utils.js +59 -0
  106. package/dist/lib/utils.js.map +1 -1
  107. package/dist/server.d.ts +1 -1
  108. package/dist/server.d.ts.map +1 -1
  109. package/dist/server.js.map +1 -1
  110. package/dist/standalone.css +360 -295
  111. package/dist/types/config.d.ts +27 -18
  112. package/dist/types/config.d.ts.map +1 -1
  113. package/package.json +5 -5
  114. package/src/base.css +186 -158
  115. package/src/components/App.tsx +31 -16
  116. package/src/components/ai-elements/actions.tsx +2 -2
  117. package/src/components/ai-elements/code-block.tsx +46 -32
  118. package/src/components/ai-elements/conversation.tsx +18 -17
  119. package/src/components/ai-elements/message.tsx +4 -9
  120. package/src/components/ai-elements/prompt-input.tsx +1 -1
  121. package/src/components/ai-elements/shimmer.tsx +1 -1
  122. package/src/components/internal/chat.tsx +326 -0
  123. package/src/components/internal/{Header.tsx → header.tsx} +37 -40
  124. package/src/components/internal/{InputSection.tsx → input-section.tsx} +173 -119
  125. package/src/components/internal/{MonacoJsonEditor.tsx → json-editor.tsx} +77 -49
  126. package/src/components/internal/logo.tsx +3 -5
  127. package/src/components/internal/schema.tsx +96 -0
  128. package/src/components/internal/{WorkbenchProvider.tsx → workbench-provider.tsx} +194 -68
  129. package/src/components/ui/avatar.tsx +1 -1
  130. package/src/components/ui/command.tsx +1 -1
  131. package/src/components/ui/dialog.tsx +1 -1
  132. package/src/components/ui/dropdown-menu.tsx +1 -1
  133. package/src/components/ui/hover-card.tsx +1 -1
  134. package/src/components/ui/input-group.tsx +1 -1
  135. package/src/components/ui/input.tsx +1 -1
  136. package/src/components/ui/scroll-area.tsx +1 -1
  137. package/src/components/ui/textarea.tsx +1 -1
  138. package/src/components/ui/theme-provider.tsx +1 -1
  139. package/src/components/ui/tooltip.tsx +1 -1
  140. package/src/hooks/useAgentSchemas.ts +26 -15
  141. package/src/hooks/useLogger.ts +7 -1
  142. package/src/hooks/useWorkbenchWebsocket.ts +67 -32
  143. package/src/index.ts +5 -9
  144. package/src/lib/utils.ts +88 -0
  145. package/src/server.ts +1 -1
  146. package/src/types/config.ts +28 -21
  147. package/dist/components/internal/Chat.d.ts +0 -14
  148. package/dist/components/internal/Chat.d.ts.map +0 -1
  149. package/dist/components/internal/Chat.js +0 -61
  150. package/dist/components/internal/Chat.js.map +0 -1
  151. package/dist/components/internal/Header.d.ts.map +0 -1
  152. package/dist/components/internal/Header.js +0 -31
  153. package/dist/components/internal/Header.js.map +0 -1
  154. package/dist/components/internal/InputSection.d.ts.map +0 -1
  155. package/dist/components/internal/InputSection.js +0 -152
  156. package/dist/components/internal/InputSection.js.map +0 -1
  157. package/dist/components/internal/MonacoJsonEditor.d.ts +0 -13
  158. package/dist/components/internal/MonacoJsonEditor.d.ts.map +0 -1
  159. package/dist/components/internal/MonacoJsonEditor.js.map +0 -1
  160. package/dist/components/internal/Schema.d.ts.map +0 -1
  161. package/dist/components/internal/Schema.js +0 -13
  162. package/dist/components/internal/Schema.js.map +0 -1
  163. package/dist/components/internal/WorkbenchProvider.d.ts.map +0 -1
  164. package/dist/components/internal/WorkbenchProvider.js.map +0 -1
  165. package/dist/components/ui/resizable-provider.d.ts.map +0 -1
  166. package/dist/components/ui/resizable-provider.js.map +0 -1
  167. package/src/components/internal/Chat.tsx +0 -201
  168. package/src/components/internal/Schema.tsx +0 -100
  169. /package/dist/components/{ui → internal}/resizable-provider.d.ts +0 -0
  170. /package/dist/components/{ui → internal}/resizable-provider.js +0 -0
  171. /package/src/components/{ui → internal}/resizable-provider.tsx +0 -0
@@ -1,201 +0,0 @@
1
- /* Styles should be imported in app's CSS file (e.g., globals.css) */
2
- /* import '../../styles.css'; */
3
- import React, { useState } from 'react';
4
- import { ChevronRight, Copy, Loader, RefreshCcw } from 'lucide-react';
5
- import { Action, Actions } from '../ai-elements/actions';
6
- import {
7
- Conversation,
8
- ConversationContent,
9
- ConversationScrollButton,
10
- } from '../ai-elements/conversation';
11
- import { Message, MessageContent } from '../ai-elements/message';
12
- import { InputSection } from './InputSection';
13
- import { Shimmer } from '../ai-elements/shimmer';
14
- import { cn } from '../../lib/utils';
15
- import { useWorkbench } from './WorkbenchProvider';
16
- import { useLogger } from '../../hooks/useLogger';
17
-
18
- export interface ChatProps {
19
- className?: string;
20
- schemaOpen: boolean;
21
- onSchemaToggle: () => void;
22
- emptyState?: React.ReactNode;
23
- }
24
-
25
- /**
26
- * Chat component - conversation and input area (everything except header)
27
- * Must be used within WorkbenchProvider
28
- */
29
- export function Chat({ className: _className, schemaOpen, onSchemaToggle, emptyState }: ChatProps) {
30
- const logger = useLogger('Chat');
31
- const {
32
- agents,
33
- suggestions,
34
- messages,
35
- selectedAgent,
36
- setSelectedAgent,
37
- isLoading,
38
- submitMessage,
39
- clearAgentState,
40
- connectionStatus,
41
- } = useWorkbench();
42
-
43
- const [value, setValue] = useState('');
44
-
45
- const handleSubmit = async () => {
46
- logger.debug('🎯 Chat handleSubmit - selectedAgent:', selectedAgent, 'value:', value);
47
- const selectedAgentData = Object.values(agents).find(
48
- (agent) => agent.metadata.agentId === selectedAgent
49
- );
50
- logger.debug('📊 Chat handleSubmit - selectedAgentData:', selectedAgentData);
51
- const hasInputSchema = selectedAgentData?.schema?.input?.json;
52
- logger.debug('📝 Chat handleSubmit - hasInputSchema:', hasInputSchema);
53
-
54
- // If agent has no input schema, submit without requiring input
55
- if (!hasInputSchema) {
56
- await submitMessage('');
57
- return;
58
- }
59
-
60
- // For agents with input schema, require input
61
- if (!value.trim()) return;
62
- await submitMessage(value);
63
- setValue('');
64
- };
65
-
66
- return (
67
- <div className="flex flex-col h-full overflow-hidden">
68
- <Conversation className="flex-1 overflow-y-auto">
69
- {connectionStatus === 'disconnected' && emptyState ? (
70
- <div className="flex flex-col h-full">{emptyState}</div>
71
- ) : (
72
- <ConversationContent className="pb-0">
73
- {messages.map((message) => {
74
- const { role, parts, id } = message;
75
- const isStreaming = parts.some(
76
- (part) => part.type === 'text' && part.state === 'streaming'
77
- );
78
- const tokens =
79
- 'tokens' in message ? (message as { tokens?: string }).tokens : undefined;
80
- const duration =
81
- 'duration' in message
82
- ? (message as { duration?: string }).duration
83
- : undefined;
84
-
85
- return (
86
- <div key={id} className="mb-2">
87
- {role === 'assistant' && (
88
- <div
89
- className={cn(
90
- 'w-fit flex items-center mb-2 text-muted-foreground text-sm transition-colors',
91
- !isStreaming && 'hover:text-foreground cursor-pointer'
92
- )}
93
- >
94
- <Loader
95
- className={cn(
96
- 'size-4 transition-all',
97
- isStreaming ? 'animate-spin mr-2' : 'w-0 mr-2.5'
98
- )}
99
- />
100
-
101
- {isStreaming ? (
102
- <Shimmer duration={1}>Running...</Shimmer>
103
- ) : (
104
- <>
105
- {duration && (
106
- <>
107
- Ran for
108
- <span className="mx-1">{duration}</span>
109
- </>
110
- )}
111
- {duration && tokens && ` and consumed ${tokens} tokens`}
112
- {(duration || tokens) && <ChevronRight className="size-4" />}
113
- </>
114
- )}
115
- </div>
116
- )}
117
-
118
- {(role === 'user' || !isStreaming) && (
119
- <>
120
- <Message
121
- key={id}
122
- from={role as 'user' | 'system' | 'assistant'}
123
- className="p-0"
124
- >
125
- <MessageContent>
126
- {parts.map((part, index) => {
127
- switch (part.type) {
128
- case 'text':
129
- return (
130
- <div key={`${id}-${part.text}-${index}`}>
131
- {part.text || ''}
132
- </div>
133
- );
134
- }
135
- })}
136
- </MessageContent>
137
- </Message>
138
-
139
- <Actions
140
- className={cn('mt-1 gap-0', role === 'user' && 'justify-end')}
141
- >
142
- {role === 'user' && (
143
- <Action
144
- label="Retry"
145
- className="size-8 hover:bg-transparent!"
146
- onClick={() =>
147
- setValue(
148
- parts
149
- .filter((part) => part.type === 'text')
150
- .map((part) => part.text)
151
- .join('')
152
- )
153
- }
154
- >
155
- <RefreshCcw className="size-4" />
156
- </Action>
157
- )}
158
-
159
- <Action
160
- onClick={() =>
161
- navigator.clipboard.writeText(
162
- parts
163
- .filter((part) => part.type === 'text')
164
- .map((part) => part.text)
165
- .join('')
166
- )
167
- }
168
- label="Copy"
169
- className="size-8 hover:bg-transparent!"
170
- >
171
- <Copy className="size-4" />
172
- </Action>
173
- </Actions>
174
- </>
175
- )}
176
- </div>
177
- );
178
- })}
179
- </ConversationContent>
180
- )}
181
-
182
- {connectionStatus !== 'disconnected' && <ConversationScrollButton />}
183
- </Conversation>
184
- <InputSection
185
- value={value}
186
- onChange={setValue}
187
- onSubmit={handleSubmit}
188
- isLoading={isLoading}
189
- agents={agents}
190
- selectedAgent={selectedAgent}
191
- setSelectedAgent={setSelectedAgent}
192
- suggestions={suggestions}
193
- isSchemaOpen={schemaOpen}
194
- onSchemaToggle={onSchemaToggle}
195
- clearAgentState={clearAgentState}
196
- />
197
- </div>
198
- );
199
- }
200
-
201
- export default Chat;
@@ -1,100 +0,0 @@
1
- import React from 'react';
2
- import { X, FileJson } from 'lucide-react';
3
- import { Button } from '../ui/button';
4
- import { CodeBlock, CodeBlockCopyButton } from '../ai-elements/code-block';
5
- import { ScrollArea } from '../ui/scroll-area';
6
- import { useWorkbench } from './WorkbenchProvider';
7
-
8
- export interface SchemaProps {
9
- onOpenChange: (open: boolean) => void;
10
- }
11
-
12
- export function Schema({ onOpenChange }: SchemaProps) {
13
- const { agents, selectedAgent, schemasLoading, schemasError } = useWorkbench();
14
-
15
- const selectedAgentData =
16
- Object.values(agents).find((agent) => agent.metadata.agentId === selectedAgent) || null;
17
-
18
- return (
19
- <div className="h-full bg-background border-l border-border flex flex-col">
20
- {/* Header */}
21
- <div className="flex items-center justify-between p-4 border-b border-border">
22
- <div className="flex items-center gap-2">
23
- <FileJson className="size-5 text-muted-foreground" />
24
- <div>
25
- <h2 className="text-lg font-semibold">Schema</h2>
26
- {selectedAgentData && (
27
- <p className="text-sm text-muted-foreground">
28
- {selectedAgentData.metadata.name}
29
- </p>
30
- )}
31
- </div>
32
- </div>
33
- <Button
34
- variant="ghost"
35
- size="icon"
36
- onClick={() => onOpenChange(false)}
37
- className="size-8"
38
- >
39
- <X className="size-4" />
40
- </Button>
41
- </div>
42
- {/* Content */}
43
- <ScrollArea className="flex-1">
44
- <div className="p-6 space-y-6">
45
- {schemasLoading && (
46
- <div className="text-center text-muted-foreground py-8">Loading schemas...</div>
47
- )}
48
-
49
- {schemasError && (
50
- <div className="rounded-md bg-destructive/10 text-destructive p-4">
51
- <p className="font-medium">Error loading schemas</p>
52
- <p className="text-sm mt-1">{schemasError.message}</p>
53
- </div>
54
- )}
55
-
56
- {!schemasLoading && !schemasError && !selectedAgentData && (
57
- <div className="text-center text-muted-foreground py-8">
58
- <p>No schema available for selected agent</p>
59
- </div>
60
- )}
61
-
62
- {!schemasLoading && !schemasError && selectedAgentData && (
63
- <>
64
- {/* Input Schema */}
65
- {selectedAgentData.schema.input?.code ? (
66
- <div className="space-y-2">
67
- <h3 className="text-sm font-semibold text-muted-foreground uppercase tracking-wide">
68
- Input Schema
69
- </h3>
70
- <CodeBlock
71
- code={selectedAgentData.schema.input?.code}
72
- language="typescript"
73
- >
74
- <CodeBlockCopyButton />
75
- </CodeBlock>
76
- </div>
77
- ) : null}
78
- {/* Output Schema */}
79
- {selectedAgentData.schema.output?.code ? (
80
- <div className="space-y-2">
81
- <h3 className="text-sm font-semibold text-muted-foreground uppercase tracking-wide">
82
- Output Schema
83
- </h3>
84
- <CodeBlock
85
- code={selectedAgentData.schema.output?.code}
86
- language="typescript"
87
- >
88
- <CodeBlockCopyButton />
89
- </CodeBlock>
90
- </div>
91
- ) : null}
92
- </>
93
- )}
94
- </div>
95
- </ScrollArea>
96
- </div>
97
- );
98
- }
99
-
100
- export default Schema;