@agent-relay/dashboard 2.0.80 → 2.0.82

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 (244) hide show
  1. package/out/404.html +1 -1
  2. package/out/_next/static/chunks/{118-4c8241b0218335de.js → 118-ae2b650136a5a5fc.js} +1 -1
  3. package/out/_next/static/chunks/407-0c82986cf79c8ecb.js +1 -0
  4. package/out/_next/static/chunks/app/app/[[...slug]]/{page-1e81c047cff17212.js → page-f7eca1b66fb4249b.js} +1 -1
  5. package/out/_next/static/chunks/app/{page-6892fe2dd07fb48b.js → page-0ee604f7070d14c0.js} +1 -1
  6. package/out/_next/static/css/8968d98ed4c4d33f.css +1 -0
  7. package/out/about.html +2 -2
  8. package/out/about.txt +1 -1
  9. package/out/app/onboarding.html +1 -1
  10. package/out/app/onboarding.txt +1 -1
  11. package/out/app.html +1 -1
  12. package/out/app.txt +2 -2
  13. package/out/blog/go-to-bed-wake-up-to-a-finished-product.html +2 -2
  14. package/out/blog/go-to-bed-wake-up-to-a-finished-product.txt +1 -1
  15. package/out/blog/let-them-cook-multi-agent-orchestration.html +2 -2
  16. package/out/blog/let-them-cook-multi-agent-orchestration.txt +2 -2
  17. package/out/blog.html +2 -2
  18. package/out/blog.txt +1 -1
  19. package/out/careers.html +2 -2
  20. package/out/careers.txt +1 -1
  21. package/out/changelog.html +2 -2
  22. package/out/changelog.txt +1 -1
  23. package/out/cloud/link.html +1 -1
  24. package/out/cloud/link.txt +2 -2
  25. package/out/complete-profile.html +2 -2
  26. package/out/complete-profile.txt +1 -1
  27. package/out/connect-repos.html +1 -1
  28. package/out/connect-repos.txt +1 -1
  29. package/out/contact.html +2 -2
  30. package/out/contact.txt +1 -1
  31. package/out/docs.html +2 -2
  32. package/out/docs.txt +1 -1
  33. package/out/history.html +1 -1
  34. package/out/history.txt +2 -2
  35. package/out/index.html +1 -1
  36. package/out/index.txt +2 -2
  37. package/out/login.html +2 -2
  38. package/out/login.txt +1 -1
  39. package/out/metrics.html +1 -1
  40. package/out/metrics.txt +2 -2
  41. package/out/pricing.html +2 -2
  42. package/out/pricing.txt +1 -1
  43. package/out/privacy.html +2 -2
  44. package/out/privacy.txt +1 -1
  45. package/out/providers/setup/claude.html +1 -1
  46. package/out/providers/setup/claude.txt +1 -1
  47. package/out/providers/setup/codex.html +1 -1
  48. package/out/providers/setup/codex.txt +1 -1
  49. package/out/providers/setup/cursor.html +1 -1
  50. package/out/providers/setup/cursor.txt +1 -1
  51. package/out/providers.html +1 -1
  52. package/out/providers.txt +1 -1
  53. package/out/security.html +2 -2
  54. package/out/security.txt +1 -1
  55. package/out/signup.html +2 -2
  56. package/out/signup.txt +1 -1
  57. package/out/terms.html +2 -2
  58. package/out/terms.txt +1 -1
  59. package/package.json +7 -1
  60. package/src/app/about/page.tsx +7 -0
  61. package/src/app/app/[[...slug]]/DashboardPageClient.tsx +853 -0
  62. package/src/app/app/[[...slug]]/page.tsx +23 -0
  63. package/src/app/app/onboarding/page.tsx +394 -0
  64. package/src/app/apple-icon.png +0 -0
  65. package/src/app/blog/go-to-bed-wake-up-to-a-finished-product/page.tsx +88 -0
  66. package/src/app/blog/let-them-cook-multi-agent-orchestration/page.tsx +93 -0
  67. package/src/app/blog/page.tsx +15 -0
  68. package/src/app/careers/page.tsx +7 -0
  69. package/src/app/changelog/page.tsx +7 -0
  70. package/src/app/cloud/link/page.tsx +464 -0
  71. package/src/app/complete-profile/page.tsx +204 -0
  72. package/src/app/connect-repos/page.tsx +410 -0
  73. package/src/app/contact/page.tsx +7 -0
  74. package/src/app/docs/page.tsx +7 -0
  75. package/src/app/favicon.png +0 -0
  76. package/src/app/globals.css +200 -0
  77. package/src/app/history/page.tsx +658 -0
  78. package/src/app/layout.tsx +25 -0
  79. package/src/app/login/page.tsx +424 -0
  80. package/src/app/metrics/page.tsx +781 -0
  81. package/src/app/page.tsx +59 -0
  82. package/src/app/pricing/page.tsx +7 -0
  83. package/src/app/privacy/page.tsx +7 -0
  84. package/src/app/providers/page.tsx +193 -0
  85. package/src/app/providers/setup/[provider]/ProviderSetupClient.tsx +197 -0
  86. package/src/app/providers/setup/[provider]/constants.ts +35 -0
  87. package/src/app/providers/setup/[provider]/page.tsx +42 -0
  88. package/src/app/security/page.tsx +7 -0
  89. package/src/app/signup/page.tsx +533 -0
  90. package/src/app/terms/page.tsx +7 -0
  91. package/src/components/ActivityFeed.tsx +216 -0
  92. package/src/components/AddWorkspaceModal.tsx +170 -0
  93. package/src/components/AgentCard.test.tsx +134 -0
  94. package/src/components/AgentCard.tsx +585 -0
  95. package/src/components/AgentList.test.tsx +147 -0
  96. package/src/components/AgentList.tsx +419 -0
  97. package/src/components/AgentLogPreview.tsx +173 -0
  98. package/src/components/AgentProfilePanel.tsx +569 -0
  99. package/src/components/App.tsx +3424 -0
  100. package/src/components/BillingPanel.tsx +922 -0
  101. package/src/components/BillingResult.tsx +447 -0
  102. package/src/components/BroadcastComposer.tsx +690 -0
  103. package/src/components/ChannelAdminPanel.tsx +773 -0
  104. package/src/components/ChannelBrowser.tsx +385 -0
  105. package/src/components/ChannelChat.tsx +261 -0
  106. package/src/components/ChannelSidebar.tsx +399 -0
  107. package/src/components/CloudSessionProvider.tsx +130 -0
  108. package/src/components/CommandPalette.tsx +815 -0
  109. package/src/components/ConfirmationDialog.tsx +133 -0
  110. package/src/components/ConversationHistory.tsx +518 -0
  111. package/src/components/CoordinatorPanel.tsx +956 -0
  112. package/src/components/DecisionQueue.tsx +717 -0
  113. package/src/components/DirectMessageView.tsx +164 -0
  114. package/src/components/FileAutocomplete.tsx +368 -0
  115. package/src/components/FleetOverview.tsx +278 -0
  116. package/src/components/LogViewer.tsx +310 -0
  117. package/src/components/LogViewerPanel.tsx +482 -0
  118. package/src/components/Logo.tsx +284 -0
  119. package/src/components/MentionAutocomplete.tsx +384 -0
  120. package/src/components/MessageComposer.tsx +473 -0
  121. package/src/components/MessageList.tsx +725 -0
  122. package/src/components/MessageSenderName.tsx +91 -0
  123. package/src/components/MessageStatusIndicator.tsx +142 -0
  124. package/src/components/NewConversationModal.tsx +400 -0
  125. package/src/components/NotificationToast.tsx +488 -0
  126. package/src/components/OnlineUsersIndicator.tsx +164 -0
  127. package/src/components/Pagination.tsx +124 -0
  128. package/src/components/PricingPlans.tsx +386 -0
  129. package/src/components/ProjectList.tsx +711 -0
  130. package/src/components/ProviderAuthFlow.tsx +343 -0
  131. package/src/components/ProviderConnectionList.tsx +375 -0
  132. package/src/components/ProvisioningProgress.tsx +730 -0
  133. package/src/components/ReactionChips.tsx +70 -0
  134. package/src/components/ReactionPicker.tsx +121 -0
  135. package/src/components/RepoAccessPanel.tsx +787 -0
  136. package/src/components/RepositoriesPanel.tsx +901 -0
  137. package/src/components/ServerCard.tsx +202 -0
  138. package/src/components/SessionExpiredModal.tsx +128 -0
  139. package/src/components/SpawnModal.test.tsx +190 -0
  140. package/src/components/SpawnModal.tsx +1001 -0
  141. package/src/components/TaskAssignmentUI.tsx +375 -0
  142. package/src/components/TerminalProviderSetup.tsx +517 -0
  143. package/src/components/ThemeProvider.tsx +159 -0
  144. package/src/components/ThinkingIndicator.tsx +231 -0
  145. package/src/components/ThreadList.tsx +198 -0
  146. package/src/components/ThreadPanel.tsx +405 -0
  147. package/src/components/TrajectoryViewer.tsx +698 -0
  148. package/src/components/TypingIndicator.tsx +69 -0
  149. package/src/components/UsageBanner.tsx +231 -0
  150. package/src/components/UserProfilePanel.tsx +233 -0
  151. package/src/components/WorkspaceContext.tsx +95 -0
  152. package/src/components/WorkspaceSelector.tsx +234 -0
  153. package/src/components/WorkspaceStatusIndicator.tsx +396 -0
  154. package/src/components/XTermInteractive.tsx +516 -0
  155. package/src/components/XTermLogViewer.tsx +719 -0
  156. package/src/components/channels/ChannelDialogs.tsx +1411 -0
  157. package/src/components/channels/ChannelHeader.tsx +317 -0
  158. package/src/components/channels/ChannelMessageList.tsx +463 -0
  159. package/src/components/channels/ChannelViewV1.tsx +146 -0
  160. package/src/components/channels/MessageInput.tsx +302 -0
  161. package/src/components/channels/SearchInput.tsx +172 -0
  162. package/src/components/channels/SearchResults.tsx +336 -0
  163. package/src/components/channels/api.test.ts +1527 -0
  164. package/src/components/channels/api.ts +703 -0
  165. package/src/components/channels/index.ts +76 -0
  166. package/src/components/channels/mockApi.ts +344 -0
  167. package/src/components/channels/types.ts +566 -0
  168. package/src/components/hooks/index.ts +58 -0
  169. package/src/components/hooks/useAgentLogs.ts +504 -0
  170. package/src/components/hooks/useAgents.ts +127 -0
  171. package/src/components/hooks/useBroadcastDedup.test.ts +371 -0
  172. package/src/components/hooks/useBroadcastDedup.ts +86 -0
  173. package/src/components/hooks/useChannelAdmin.ts +329 -0
  174. package/src/components/hooks/useChannelBrowser.ts +239 -0
  175. package/src/components/hooks/useChannelCommands.ts +138 -0
  176. package/src/components/hooks/useChannels.ts +367 -0
  177. package/src/components/hooks/useDebounce.ts +29 -0
  178. package/src/components/hooks/useDirectMessage.test.ts +952 -0
  179. package/src/components/hooks/useDirectMessage.ts +141 -0
  180. package/src/components/hooks/useMessages.ts +310 -0
  181. package/src/components/hooks/useOrchestrator.test.ts +165 -0
  182. package/src/components/hooks/useOrchestrator.ts +424 -0
  183. package/src/components/hooks/usePinnedAgents.test.ts +356 -0
  184. package/src/components/hooks/usePinnedAgents.ts +140 -0
  185. package/src/components/hooks/usePresence.test.ts +245 -0
  186. package/src/components/hooks/usePresence.ts +377 -0
  187. package/src/components/hooks/useRecentRepos.ts +130 -0
  188. package/src/components/hooks/useSession.ts +209 -0
  189. package/src/components/hooks/useThread.ts +138 -0
  190. package/src/components/hooks/useTrajectory.ts +265 -0
  191. package/src/components/hooks/useWebSocket.ts +290 -0
  192. package/src/components/hooks/useWorkspaceMembers.ts +132 -0
  193. package/src/components/hooks/useWorkspaceRepos.ts +73 -0
  194. package/src/components/hooks/useWorkspaceStatus.ts +237 -0
  195. package/src/components/index.ts +81 -0
  196. package/src/components/layout/Header.tsx +311 -0
  197. package/src/components/layout/RepoContextHeader.tsx +361 -0
  198. package/src/components/layout/Sidebar.archive.test.tsx +126 -0
  199. package/src/components/layout/Sidebar.test.tsx +691 -0
  200. package/src/components/layout/Sidebar.tsx +900 -0
  201. package/src/components/layout/index.ts +7 -0
  202. package/src/components/settings/BillingSettingsPanel.tsx +564 -0
  203. package/src/components/settings/SettingsPage.tsx +683 -0
  204. package/src/components/settings/TeamSettingsPanel.tsx +560 -0
  205. package/src/components/settings/WorkspaceSettingsPanel.tsx +1368 -0
  206. package/src/components/settings/index.ts +11 -0
  207. package/src/components/settings/types.ts +79 -0
  208. package/src/components/utils/messageFormatting.test.tsx +331 -0
  209. package/src/components/utils/messageFormatting.tsx +597 -0
  210. package/src/index.ts +63 -0
  211. package/src/landing/AboutPage.tsx +77 -0
  212. package/src/landing/BlogContent.tsx +187 -0
  213. package/src/landing/BlogPage.tsx +47 -0
  214. package/src/landing/CareersPage.tsx +53 -0
  215. package/src/landing/ChangelogPage.tsx +33 -0
  216. package/src/landing/ContactPage.tsx +41 -0
  217. package/src/landing/DocsPage.tsx +43 -0
  218. package/src/landing/LandingPage.tsx +702 -0
  219. package/src/landing/PricingPage.tsx +549 -0
  220. package/src/landing/PrivacyPage.tsx +117 -0
  221. package/src/landing/SecurityPage.tsx +42 -0
  222. package/src/landing/StaticPage.tsx +165 -0
  223. package/src/landing/TermsPage.tsx +125 -0
  224. package/src/landing/blogData.ts +312 -0
  225. package/src/landing/index.ts +18 -0
  226. package/src/landing/styles.css +3673 -0
  227. package/src/lib/agent-merge.test.ts +43 -0
  228. package/src/lib/agent-merge.ts +35 -0
  229. package/src/lib/api.ts +1294 -0
  230. package/src/lib/cloudApi.ts +893 -0
  231. package/src/lib/colors.test.ts +175 -0
  232. package/src/lib/colors.ts +218 -0
  233. package/src/lib/config.ts +109 -0
  234. package/src/lib/hierarchy.ts +242 -0
  235. package/src/lib/stuckDetection.ts +142 -0
  236. package/src/lib/useUrlRouting.ts +190 -0
  237. package/src/types/index.ts +317 -0
  238. package/src/types/threading.ts +7 -0
  239. package/out/_next/static/chunks/285-dc644487a8d6500d.js +0 -1
  240. package/out/_next/static/css/4c58d9cf493aa626.css +0 -1
  241. /package/out/_next/static/{AqelRhy1vr2nBUcU0Iqcp → IxfA6RZu4trcsEMYlkQra}/_buildManifest.js +0 -0
  242. /package/out/_next/static/{AqelRhy1vr2nBUcU0Iqcp → IxfA6RZu4trcsEMYlkQra}/_ssgManifest.js +0 -0
  243. /package/out/_next/static/chunks/{528-d375bc8b46912d2c.js → 528-f5f676996d613c25.js} +0 -0
  244. /package/out/_next/static/chunks/app/blog/let-them-cook-multi-agent-orchestration/{page-a58308f43557b908.js → page-b194f207fbd91862.js} +0 -0
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Dashboard V2 Type Definitions
3
+ */
4
+
5
+ import type { AgentStatus } from '../lib/colors';
6
+ import type { ThreadMetadata } from './threading';
7
+
8
+ export type { ThreadMetadata } from './threading';
9
+
10
+ // Agent Types
11
+ export interface Agent {
12
+ name: string;
13
+ role?: string;
14
+ cli?: string;
15
+ model?: string;
16
+ status: AgentStatus;
17
+ lastSeen?: string;
18
+ lastActive?: string;
19
+ messageCount?: number;
20
+ needsAttention?: boolean;
21
+ currentTask?: string;
22
+ server?: string; // For fleet view - which server the agent is on
23
+ isProcessing?: boolean; // True when agent is thinking/processing a message
24
+ processingStartedAt?: number; // Timestamp when processing started
25
+ isSpawned?: boolean; // True if agent was spawned via dashboard (can be killed)
26
+ team?: string; // Optional user-defined team grouping (e.g., "frontend-team", "backend-team")
27
+ agentId?: string; // Unique agent ID for resume functionality
28
+ lastMessageReceivedAt?: number; // Timestamp when agent last received a message
29
+ lastOutputAt?: number; // Timestamp when agent last produced output
30
+ isStuck?: boolean; // True when agent received message but hasn't responded within threshold
31
+ isHuman?: boolean; // True if this is a human user, not an AI agent
32
+ avatarUrl?: string; // Avatar URL for human users
33
+ authRevoked?: boolean; // True if agent's authentication has been revoked (needs re-login)
34
+ cwd?: string; // Working directory (repo name) the agent was spawned in
35
+ // Local daemon agent fields
36
+ isLocal?: boolean; // True if agent is from a linked local daemon
37
+ daemonName?: string; // Name of the linked daemon
38
+ machineId?: string; // Machine ID of the linked daemon
39
+ // Profile fields for understanding agent behavior
40
+ profile?: AgentProfile;
41
+ }
42
+
43
+ /**
44
+ * Agent profile information - helps users understand agent behavior
45
+ */
46
+ export interface AgentProfile {
47
+ /** Display title/role (e.g., "Lead Developer", "Code Reviewer") */
48
+ title?: string;
49
+ /** Short description of what this agent does */
50
+ description?: string;
51
+ /** The prompt/task the agent was spawned with */
52
+ spawnPrompt?: string;
53
+ /** Agent profile/persona prompt (e.g., lead agent instructions) */
54
+ personaPrompt?: string;
55
+ /** Name of the persona preset used (e.g., "lead", "reviewer", "shadow-auditor") */
56
+ personaName?: string;
57
+ /** Model being used (e.g., "claude-3-opus", "gpt-4") */
58
+ model?: string;
59
+ /** Working directory */
60
+ workingDirectory?: string;
61
+ /** When the agent was first seen */
62
+ firstSeen?: string;
63
+ /** Capabilities or tools available to the agent */
64
+ capabilities?: string[];
65
+ /** Tags for categorization */
66
+ tags?: string[];
67
+ }
68
+
69
+ export interface AgentSummary {
70
+ agentName: string;
71
+ lastUpdated: string;
72
+ currentTask?: string;
73
+ completedTasks?: string[];
74
+ context?: string;
75
+ files?: string[];
76
+ }
77
+
78
+ // Message Status
79
+ export type MessageStatus = 'unread' | 'read' | 'acked' | 'sending' | 'failed';
80
+
81
+ // Attachment Types
82
+ export interface Attachment {
83
+ /** Unique identifier for the attachment */
84
+ id: string;
85
+ /** Original filename */
86
+ filename: string;
87
+ /** MIME type (e.g., 'image/png', 'image/jpeg') */
88
+ mimeType: string;
89
+ /** Size in bytes */
90
+ size: number;
91
+ /** URL to access the attachment */
92
+ url: string;
93
+ /** Absolute file path for agents to read the file directly */
94
+ filePath?: string;
95
+ /** Width for images */
96
+ width?: number;
97
+ /** Height for images */
98
+ height?: number;
99
+ /** Base64-encoded data (for inline display, optional) */
100
+ data?: string;
101
+ }
102
+
103
+
104
+ // Reaction Types
105
+ export interface Reaction {
106
+ emoji: string;
107
+ count: number;
108
+ agents: string[];
109
+ }
110
+
111
+ // Message Types
112
+ export interface Message {
113
+ id: string;
114
+ from: string;
115
+ to: string;
116
+ content: string;
117
+ timestamp: string;
118
+ thread?: string;
119
+ isBroadcast?: boolean;
120
+ isRead?: boolean;
121
+ replyCount?: number;
122
+ threadSummary?: ThreadMetadata;
123
+ /** Message delivery status: sending → acked (received by agent) */
124
+ status?: MessageStatus;
125
+ /** Attachments (images, files) */
126
+ attachments?: Attachment[];
127
+ /** Channel context for routing (e.g., 'general' for broadcasts) */
128
+ channel?: string;
129
+ /** Aggregated reactions on this message */
130
+ reactions?: Reaction[];
131
+ }
132
+
133
+ export interface Thread {
134
+ id: string;
135
+ messages: Message[];
136
+ participants: string[];
137
+ lastActivity: string;
138
+ }
139
+
140
+ // Fleet Types
141
+ export interface PeerServer {
142
+ id: string;
143
+ url: string;
144
+ name?: string;
145
+ status: 'connected' | 'disconnected' | 'error';
146
+ agentCount: number;
147
+ latency?: number;
148
+ }
149
+
150
+ export interface FleetData {
151
+ servers: PeerServer[];
152
+ agents: Agent[];
153
+ totalMessages: number;
154
+ }
155
+
156
+ export interface Project {
157
+ id: string;
158
+ path: string;
159
+ name?: string;
160
+ agents: Agent[];
161
+ lead?: {
162
+ name: string;
163
+ connected: boolean;
164
+ };
165
+ }
166
+
167
+ // Session Types
168
+ export interface Session {
169
+ id: string;
170
+ agentName: string;
171
+ cli?: string;
172
+ startedAt: string;
173
+ endedAt?: string;
174
+ duration?: string;
175
+ messageCount: number;
176
+ summary?: string;
177
+ isActive: boolean;
178
+ closedBy?: 'agent' | 'disconnect' | 'error';
179
+ }
180
+
181
+ // Task Types (Beads Integration)
182
+ export interface Task {
183
+ id: string;
184
+ title: string;
185
+ description?: string;
186
+ status: 'open' | 'in_progress' | 'completed' | 'blocked';
187
+ priority: 'P1' | 'P2' | 'P3' | 'P4';
188
+ type: 'task' | 'bug' | 'feature' | 'epic';
189
+ assignee?: string;
190
+ blockedBy?: string[];
191
+ blocking?: string[];
192
+ created: string;
193
+ updated: string;
194
+ }
195
+
196
+ // Trajectory Types
197
+ export interface Decision {
198
+ id: string;
199
+ timestamp: string;
200
+ agent: string;
201
+ type: 'tool_call' | 'message' | 'file_edit' | 'command' | 'question';
202
+ summary: string;
203
+ details?: string;
204
+ context?: string;
205
+ outcome?: 'success' | 'error' | 'pending';
206
+ children?: Decision[];
207
+ }
208
+
209
+ export interface Trajectory {
210
+ agentName: string;
211
+ sessionId: string;
212
+ decisions: Decision[];
213
+ startTime: string;
214
+ endTime?: string;
215
+ }
216
+
217
+ // Decision Queue Types
218
+ export interface PendingDecision {
219
+ id: string;
220
+ agent: string;
221
+ question: string;
222
+ options?: string[];
223
+ context?: string;
224
+ priority: 'low' | 'medium' | 'high' | 'critical';
225
+ createdAt: string;
226
+ expiresAt?: string;
227
+ }
228
+
229
+ // Dashboard State
230
+ export interface DashboardState {
231
+ agents: Agent[];
232
+ messages: Message[];
233
+ currentChannel: string;
234
+ currentThread: string | null;
235
+ isConnected: boolean;
236
+ viewMode: 'local' | 'fleet';
237
+ fleetData: FleetData | null;
238
+ sessions: Session[];
239
+ summaries: AgentSummary[];
240
+ }
241
+
242
+ // WebSocket Message Types
243
+ export interface WSMessage {
244
+ type: 'data' | 'agents' | 'messages' | 'fleet' | 'error';
245
+ payload: unknown;
246
+ }
247
+
248
+ // API Response Types
249
+ export interface ApiResponse<T> {
250
+ success: boolean;
251
+ data?: T;
252
+ error?: string;
253
+ }
254
+
255
+ export interface SendMessageRequest {
256
+ to: string;
257
+ message: string;
258
+ thread?: string;
259
+ /** Attachment IDs to include with the message */
260
+ attachments?: string[];
261
+ }
262
+
263
+ export type SpeakOnTrigger = 'SESSION_END' | 'CODE_WRITTEN' | 'REVIEW_REQUEST' | 'EXPLICIT_ASK' | 'ALL_MESSAGES';
264
+
265
+ export interface SpawnAgentRequest {
266
+ name: string;
267
+ cli?: string;
268
+ task?: string;
269
+ team?: string;
270
+ /** Working directory relative to project root */
271
+ cwd?: string;
272
+ /** Shadow execution mode (subagent for Claude/OpenCode, process otherwise) */
273
+ shadowMode?: 'subagent' | 'process';
274
+ /** Primary agent to shadow (if this agent is a shadow) */
275
+ shadowOf?: string;
276
+ /** Shadow agent profile to use (for subagent mode) */
277
+ shadowAgent?: string;
278
+ /** When the shadow should be invoked (for subagent mode) */
279
+ shadowTriggers?: SpeakOnTrigger[];
280
+ /** When the shadow should speak */
281
+ shadowSpeakOn?: SpeakOnTrigger[];
282
+ }
283
+
284
+ export interface SpawnAgentResponse {
285
+ success: boolean;
286
+ name: string;
287
+ error?: string;
288
+ }
289
+
290
+ // Activity Feed Types
291
+ export type ActivityEventType =
292
+ | 'agent_spawned'
293
+ | 'agent_released'
294
+ | 'agent_online'
295
+ | 'agent_offline'
296
+ | 'user_joined'
297
+ | 'user_left'
298
+ | 'broadcast'
299
+ | 'error';
300
+
301
+ export interface ActivityEvent {
302
+ id: string;
303
+ type: ActivityEventType;
304
+ timestamp: string;
305
+ /** Actor who triggered the event (user or agent name) */
306
+ actor: string;
307
+ /** Optional avatar URL for the actor */
308
+ actorAvatarUrl?: string;
309
+ /** Whether actor is a user or agent */
310
+ actorType: 'user' | 'agent' | 'system';
311
+ /** Event title for display */
312
+ title: string;
313
+ /** Optional detailed description */
314
+ description?: string;
315
+ /** Optional metadata (e.g., task for spawns, cli type, etc.) */
316
+ metadata?: Record<string, unknown>;
317
+ }
@@ -0,0 +1,7 @@
1
+ export interface ThreadMetadata {
2
+ threadId: string;
3
+ replyCount: number;
4
+ participants: string[];
5
+ lastReplyAt: number;
6
+ lastReplyPreview?: string;
7
+ }