@swarmclawai/swarmclaw 0.2.0

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 (319) hide show
  1. package/README.md +577 -0
  2. package/bin/server-cmd.js +359 -0
  3. package/bin/swarmclaw.js +29 -0
  4. package/bin/swarmclaw.mjs +1504 -0
  5. package/next.config.ts +33 -0
  6. package/package.json +112 -0
  7. package/postcss.config.mjs +7 -0
  8. package/public/branding/swarmclaw-org-avatar.png +0 -0
  9. package/public/branding/swarmclaw-org-avatar.svg +58 -0
  10. package/public/file.svg +1 -0
  11. package/public/globe.svg +1 -0
  12. package/public/next.svg +1 -0
  13. package/public/screenshots/agents.png +0 -0
  14. package/public/screenshots/connectors.png +0 -0
  15. package/public/screenshots/dashboard.png +0 -0
  16. package/public/screenshots/new-session-openclaw.png +0 -0
  17. package/public/screenshots/providers.png +0 -0
  18. package/public/screenshots/schedules.png +0 -0
  19. package/public/screenshots/tasks.png +0 -0
  20. package/public/vercel.svg +1 -0
  21. package/public/window.svg +1 -0
  22. package/src/app/api/agents/[id]/route.ts +30 -0
  23. package/src/app/api/agents/[id]/thread/route.ts +66 -0
  24. package/src/app/api/agents/generate/route.ts +42 -0
  25. package/src/app/api/agents/route.ts +33 -0
  26. package/src/app/api/auth/route.ts +25 -0
  27. package/src/app/api/claude-skills/route.ts +42 -0
  28. package/src/app/api/clawhub/install/route.ts +39 -0
  29. package/src/app/api/clawhub/search/route.ts +11 -0
  30. package/src/app/api/connectors/[id]/route.ts +79 -0
  31. package/src/app/api/connectors/route.ts +60 -0
  32. package/src/app/api/credentials/[id]/route.ts +14 -0
  33. package/src/app/api/credentials/route.ts +31 -0
  34. package/src/app/api/daemon/health-check/route.ts +11 -0
  35. package/src/app/api/daemon/route.ts +22 -0
  36. package/src/app/api/dirs/pick/route.ts +60 -0
  37. package/src/app/api/dirs/route.ts +29 -0
  38. package/src/app/api/documents/[id]/route.ts +47 -0
  39. package/src/app/api/documents/route.ts +93 -0
  40. package/src/app/api/files/serve/route.ts +69 -0
  41. package/src/app/api/generate/info/route.ts +12 -0
  42. package/src/app/api/generate/route.ts +106 -0
  43. package/src/app/api/ip/route.ts +6 -0
  44. package/src/app/api/knowledge/[id]/route.ts +61 -0
  45. package/src/app/api/knowledge/route.ts +48 -0
  46. package/src/app/api/knowledge/upload/route.ts +86 -0
  47. package/src/app/api/logs/route.ts +65 -0
  48. package/src/app/api/mcp-servers/[id]/route.ts +32 -0
  49. package/src/app/api/mcp-servers/[id]/test/route.ts +23 -0
  50. package/src/app/api/mcp-servers/[id]/tools/route.ts +32 -0
  51. package/src/app/api/mcp-servers/route.ts +27 -0
  52. package/src/app/api/memory/[id]/route.ts +126 -0
  53. package/src/app/api/memory/maintenance/route.ts +63 -0
  54. package/src/app/api/memory/route.ts +111 -0
  55. package/src/app/api/memory-images/[filename]/route.ts +36 -0
  56. package/src/app/api/orchestrator/run/route.ts +43 -0
  57. package/src/app/api/plugins/install/route.ts +58 -0
  58. package/src/app/api/plugins/marketplace/route.ts +33 -0
  59. package/src/app/api/plugins/route.ts +21 -0
  60. package/src/app/api/preview-server/route.ts +339 -0
  61. package/src/app/api/providers/[id]/models/route.ts +29 -0
  62. package/src/app/api/providers/[id]/route.ts +34 -0
  63. package/src/app/api/providers/configs/route.ts +7 -0
  64. package/src/app/api/providers/ollama/route.ts +30 -0
  65. package/src/app/api/providers/openclaw/health/route.ts +23 -0
  66. package/src/app/api/providers/route.ts +28 -0
  67. package/src/app/api/runs/[id]/route.ts +9 -0
  68. package/src/app/api/runs/route.ts +13 -0
  69. package/src/app/api/schedules/[id]/route.ts +28 -0
  70. package/src/app/api/schedules/[id]/run/route.ts +104 -0
  71. package/src/app/api/schedules/route.ts +78 -0
  72. package/src/app/api/secrets/[id]/route.ts +29 -0
  73. package/src/app/api/secrets/route.ts +42 -0
  74. package/src/app/api/sessions/[id]/browser/route.ts +13 -0
  75. package/src/app/api/sessions/[id]/chat/route.ts +96 -0
  76. package/src/app/api/sessions/[id]/clear/route.ts +19 -0
  77. package/src/app/api/sessions/[id]/deploy/route.ts +34 -0
  78. package/src/app/api/sessions/[id]/devserver/route.ts +69 -0
  79. package/src/app/api/sessions/[id]/mailbox/route.ts +70 -0
  80. package/src/app/api/sessions/[id]/main-loop/route.ts +94 -0
  81. package/src/app/api/sessions/[id]/messages/route.ts +9 -0
  82. package/src/app/api/sessions/[id]/retry/route.ts +28 -0
  83. package/src/app/api/sessions/[id]/route.ts +103 -0
  84. package/src/app/api/sessions/[id]/stop/route.ts +13 -0
  85. package/src/app/api/sessions/heartbeat/route.ts +26 -0
  86. package/src/app/api/sessions/route.ts +85 -0
  87. package/src/app/api/settings/route.ts +58 -0
  88. package/src/app/api/setup/check-provider/route.ts +326 -0
  89. package/src/app/api/setup/doctor/route.ts +250 -0
  90. package/src/app/api/skills/[id]/route.ts +40 -0
  91. package/src/app/api/skills/import/route.ts +69 -0
  92. package/src/app/api/skills/route.ts +28 -0
  93. package/src/app/api/tasks/[id]/route.ts +102 -0
  94. package/src/app/api/tasks/route.ts +115 -0
  95. package/src/app/api/tts/route.ts +40 -0
  96. package/src/app/api/upload/route.ts +18 -0
  97. package/src/app/api/uploads/[filename]/route.ts +59 -0
  98. package/src/app/api/usage/route.ts +35 -0
  99. package/src/app/api/version/route.ts +81 -0
  100. package/src/app/api/version/update/route.ts +95 -0
  101. package/src/app/api/webhooks/[id]/history/route.ts +13 -0
  102. package/src/app/api/webhooks/[id]/route.ts +204 -0
  103. package/src/app/api/webhooks/route.ts +37 -0
  104. package/src/app/favicon.ico +0 -0
  105. package/src/app/globals.css +370 -0
  106. package/src/app/layout.tsx +52 -0
  107. package/src/app/page.tsx +172 -0
  108. package/src/cli/index.js +1232 -0
  109. package/src/cli/index.test.js +281 -0
  110. package/src/cli/index.ts +1158 -0
  111. package/src/cli/spec.js +284 -0
  112. package/src/components/agents/agent-card.tsx +219 -0
  113. package/src/components/agents/agent-chat-list.tsx +165 -0
  114. package/src/components/agents/agent-list.tsx +110 -0
  115. package/src/components/agents/agent-sheet.tsx +1220 -0
  116. package/src/components/auth/access-key-gate.tsx +248 -0
  117. package/src/components/auth/setup-wizard.tsx +940 -0
  118. package/src/components/auth/user-picker.tsx +88 -0
  119. package/src/components/chat/chat-area.tsx +406 -0
  120. package/src/components/chat/chat-header.tsx +491 -0
  121. package/src/components/chat/chat-tool-toggles.tsx +161 -0
  122. package/src/components/chat/code-block.tsx +146 -0
  123. package/src/components/chat/dev-server-bar.tsx +39 -0
  124. package/src/components/chat/message-bubble.tsx +486 -0
  125. package/src/components/chat/message-list.tsx +299 -0
  126. package/src/components/chat/session-debug-panel.tsx +196 -0
  127. package/src/components/chat/streaming-bubble.tsx +85 -0
  128. package/src/components/chat/thinking-indicator.tsx +26 -0
  129. package/src/components/chat/tool-call-bubble.tsx +438 -0
  130. package/src/components/chat/tool-request-banner.tsx +103 -0
  131. package/src/components/connectors/connector-list.tsx +196 -0
  132. package/src/components/connectors/connector-sheet.tsx +804 -0
  133. package/src/components/input/chat-input.tsx +235 -0
  134. package/src/components/knowledge/knowledge-list.tsx +206 -0
  135. package/src/components/knowledge/knowledge-sheet.tsx +316 -0
  136. package/src/components/layout/app-layout.tsx +1016 -0
  137. package/src/components/layout/daemon-indicator.tsx +56 -0
  138. package/src/components/layout/mobile-header.tsx +31 -0
  139. package/src/components/layout/network-banner.tsx +17 -0
  140. package/src/components/layout/update-banner.tsx +130 -0
  141. package/src/components/logs/log-list.tsx +358 -0
  142. package/src/components/mcp-servers/mcp-server-list.tsx +122 -0
  143. package/src/components/mcp-servers/mcp-server-sheet.tsx +243 -0
  144. package/src/components/memory/memory-card.tsx +63 -0
  145. package/src/components/memory/memory-detail.tsx +339 -0
  146. package/src/components/memory/memory-list.tsx +198 -0
  147. package/src/components/memory/memory-sheet.tsx +70 -0
  148. package/src/components/plugins/plugin-list.tsx +60 -0
  149. package/src/components/plugins/plugin-sheet.tsx +311 -0
  150. package/src/components/providers/provider-list.tsx +96 -0
  151. package/src/components/providers/provider-sheet.tsx +542 -0
  152. package/src/components/runs/run-list.tsx +231 -0
  153. package/src/components/schedules/schedule-card.tsx +63 -0
  154. package/src/components/schedules/schedule-list.tsx +76 -0
  155. package/src/components/schedules/schedule-sheet.tsx +336 -0
  156. package/src/components/secrets/secret-sheet.tsx +180 -0
  157. package/src/components/secrets/secrets-list.tsx +91 -0
  158. package/src/components/sessions/new-session-sheet.tsx +478 -0
  159. package/src/components/sessions/session-card.tsx +144 -0
  160. package/src/components/sessions/session-list.tsx +202 -0
  161. package/src/components/shared/ai-gen-block.tsx +77 -0
  162. package/src/components/shared/avatar.tsx +48 -0
  163. package/src/components/shared/bottom-sheet.tsx +30 -0
  164. package/src/components/shared/confirm-dialog.tsx +47 -0
  165. package/src/components/shared/connector-platform-icon.tsx +113 -0
  166. package/src/components/shared/dir-browser.tsx +285 -0
  167. package/src/components/shared/dropdown.tsx +55 -0
  168. package/src/components/shared/icon-button.tsx +25 -0
  169. package/src/components/shared/settings/plugin-manager.tsx +207 -0
  170. package/src/components/shared/settings/section-capability-policy.tsx +93 -0
  171. package/src/components/shared/settings/section-embedding.tsx +99 -0
  172. package/src/components/shared/settings/section-heartbeat.tsx +168 -0
  173. package/src/components/shared/settings/section-memory.tsx +77 -0
  174. package/src/components/shared/settings/section-orchestrator.tsx +108 -0
  175. package/src/components/shared/settings/section-providers.tsx +181 -0
  176. package/src/components/shared/settings/section-runtime-loop.tsx +183 -0
  177. package/src/components/shared/settings/section-secrets.tsx +132 -0
  178. package/src/components/shared/settings/section-user-preferences.tsx +24 -0
  179. package/src/components/shared/settings/section-voice.tsx +53 -0
  180. package/src/components/shared/settings/settings-sheet.tsx +88 -0
  181. package/src/components/shared/settings/types.ts +7 -0
  182. package/src/components/shared/settings/utils.ts +13 -0
  183. package/src/components/shared/settings-sheet.tsx +1 -0
  184. package/src/components/shared/skeleton.tsx +19 -0
  185. package/src/components/shared/usage-badge.tsx +28 -0
  186. package/src/components/skills/clawhub-browser.tsx +225 -0
  187. package/src/components/skills/skill-list.tsx +70 -0
  188. package/src/components/skills/skill-sheet.tsx +254 -0
  189. package/src/components/tasks/task-board.tsx +96 -0
  190. package/src/components/tasks/task-card.tsx +179 -0
  191. package/src/components/tasks/task-column.tsx +73 -0
  192. package/src/components/tasks/task-list.tsx +118 -0
  193. package/src/components/tasks/task-sheet.tsx +415 -0
  194. package/src/components/ui/avatar.tsx +109 -0
  195. package/src/components/ui/badge.tsx +48 -0
  196. package/src/components/ui/button.tsx +64 -0
  197. package/src/components/ui/card.tsx +92 -0
  198. package/src/components/ui/dialog.tsx +158 -0
  199. package/src/components/ui/dropdown-menu.tsx +257 -0
  200. package/src/components/ui/input.tsx +21 -0
  201. package/src/components/ui/scroll-area.tsx +58 -0
  202. package/src/components/ui/select.tsx +190 -0
  203. package/src/components/ui/separator.tsx +28 -0
  204. package/src/components/ui/sheet.tsx +143 -0
  205. package/src/components/ui/sonner.tsx +22 -0
  206. package/src/components/ui/textarea.tsx +18 -0
  207. package/src/components/ui/tooltip.tsx +56 -0
  208. package/src/components/usage/usage-list.tsx +105 -0
  209. package/src/components/webhooks/webhook-list.tsx +166 -0
  210. package/src/components/webhooks/webhook-sheet.tsx +402 -0
  211. package/src/hooks/use-auto-resize.ts +20 -0
  212. package/src/hooks/use-media-query.ts +21 -0
  213. package/src/hooks/use-speech-recognition.ts +83 -0
  214. package/src/instrumentation.ts +8 -0
  215. package/src/lib/agents.ts +13 -0
  216. package/src/lib/api-client.ts +100 -0
  217. package/src/lib/chat.ts +60 -0
  218. package/src/lib/memory.ts +42 -0
  219. package/src/lib/openclaw-endpoint.test.ts +48 -0
  220. package/src/lib/openclaw-endpoint.ts +67 -0
  221. package/src/lib/provider-config.ts +13 -0
  222. package/src/lib/providers/anthropic.ts +135 -0
  223. package/src/lib/providers/claude-cli.ts +202 -0
  224. package/src/lib/providers/codex-cli.ts +260 -0
  225. package/src/lib/providers/index.ts +351 -0
  226. package/src/lib/providers/ollama.ts +131 -0
  227. package/src/lib/providers/openai.ts +164 -0
  228. package/src/lib/providers/openclaw.ts +330 -0
  229. package/src/lib/providers/opencode-cli.ts +164 -0
  230. package/src/lib/runtime-loop.ts +15 -0
  231. package/src/lib/schedule-dedupe.test.ts +84 -0
  232. package/src/lib/schedule-dedupe.ts +174 -0
  233. package/src/lib/schedule-name.ts +62 -0
  234. package/src/lib/schedules.ts +16 -0
  235. package/src/lib/server/agent-registry.ts +70 -0
  236. package/src/lib/server/api-routes.test.ts +362 -0
  237. package/src/lib/server/autonomy-contract.ts +200 -0
  238. package/src/lib/server/build-llm.ts +155 -0
  239. package/src/lib/server/capability-router.test.ts +21 -0
  240. package/src/lib/server/capability-router.ts +172 -0
  241. package/src/lib/server/chat-execution.ts +894 -0
  242. package/src/lib/server/clawhub-client.test.ts +161 -0
  243. package/src/lib/server/clawhub-client.ts +26 -0
  244. package/src/lib/server/connectors/connector-routing.test.ts +243 -0
  245. package/src/lib/server/connectors/discord.ts +116 -0
  246. package/src/lib/server/connectors/googlechat.ts +66 -0
  247. package/src/lib/server/connectors/manager.ts +559 -0
  248. package/src/lib/server/connectors/matrix.ts +78 -0
  249. package/src/lib/server/connectors/media.ts +149 -0
  250. package/src/lib/server/connectors/openclaw.test.ts +375 -0
  251. package/src/lib/server/connectors/openclaw.ts +1132 -0
  252. package/src/lib/server/connectors/signal.ts +183 -0
  253. package/src/lib/server/connectors/slack.ts +258 -0
  254. package/src/lib/server/connectors/teams.ts +94 -0
  255. package/src/lib/server/connectors/telegram.ts +221 -0
  256. package/src/lib/server/connectors/types.ts +62 -0
  257. package/src/lib/server/connectors/whatsapp.ts +349 -0
  258. package/src/lib/server/context-manager.ts +232 -0
  259. package/src/lib/server/cost.ts +31 -0
  260. package/src/lib/server/daemon-state.ts +354 -0
  261. package/src/lib/server/data-dir.ts +3 -0
  262. package/src/lib/server/embeddings.ts +111 -0
  263. package/src/lib/server/execution-log.ts +257 -0
  264. package/src/lib/server/gateway/protocol.test.ts +54 -0
  265. package/src/lib/server/gateway/protocol.ts +114 -0
  266. package/src/lib/server/heartbeat-service.ts +366 -0
  267. package/src/lib/server/knowledge-db.test.ts +441 -0
  268. package/src/lib/server/logger.ts +47 -0
  269. package/src/lib/server/main-agent-loop.ts +1017 -0
  270. package/src/lib/server/mcp-client.test.ts +342 -0
  271. package/src/lib/server/mcp-client.ts +130 -0
  272. package/src/lib/server/memory-db.ts +1078 -0
  273. package/src/lib/server/memory-graph.test.ts +153 -0
  274. package/src/lib/server/memory-graph.ts +138 -0
  275. package/src/lib/server/openclaw-health.ts +245 -0
  276. package/src/lib/server/orchestrator-lg.ts +431 -0
  277. package/src/lib/server/orchestrator.ts +364 -0
  278. package/src/lib/server/playwright-proxy.mjs +70 -0
  279. package/src/lib/server/plugins.ts +229 -0
  280. package/src/lib/server/process-manager.ts +327 -0
  281. package/src/lib/server/provider-health.ts +113 -0
  282. package/src/lib/server/queue.ts +859 -0
  283. package/src/lib/server/runtime-settings.ts +119 -0
  284. package/src/lib/server/scheduler.ts +196 -0
  285. package/src/lib/server/session-mailbox.ts +129 -0
  286. package/src/lib/server/session-run-manager.ts +512 -0
  287. package/src/lib/server/session-tools/connector.ts +124 -0
  288. package/src/lib/server/session-tools/context-mgmt.ts +103 -0
  289. package/src/lib/server/session-tools/context.ts +114 -0
  290. package/src/lib/server/session-tools/crud.ts +673 -0
  291. package/src/lib/server/session-tools/delegate.ts +708 -0
  292. package/src/lib/server/session-tools/file.ts +264 -0
  293. package/src/lib/server/session-tools/index.ts +164 -0
  294. package/src/lib/server/session-tools/memory.ts +230 -0
  295. package/src/lib/server/session-tools/session-info.ts +422 -0
  296. package/src/lib/server/session-tools/session-tools-wiring.test.ts +166 -0
  297. package/src/lib/server/session-tools/shell.ts +171 -0
  298. package/src/lib/server/session-tools/web.ts +408 -0
  299. package/src/lib/server/session-tools.ts +9 -0
  300. package/src/lib/server/skills-normalize.ts +130 -0
  301. package/src/lib/server/storage-mcp.test.ts +161 -0
  302. package/src/lib/server/storage.ts +670 -0
  303. package/src/lib/server/stream-agent-chat.ts +571 -0
  304. package/src/lib/server/task-reports.ts +122 -0
  305. package/src/lib/server/task-result.ts +161 -0
  306. package/src/lib/server/task-validation.test.ts +27 -0
  307. package/src/lib/server/task-validation.ts +90 -0
  308. package/src/lib/server/tool-capability-policy.test.ts +58 -0
  309. package/src/lib/server/tool-capability-policy.ts +262 -0
  310. package/src/lib/sessions.ts +68 -0
  311. package/src/lib/tasks.ts +20 -0
  312. package/src/lib/tts.ts +42 -0
  313. package/src/lib/upload.ts +10 -0
  314. package/src/lib/utils.ts +6 -0
  315. package/src/proxy.ts +43 -0
  316. package/src/stores/use-app-store.ts +468 -0
  317. package/src/stores/use-chat-store.ts +323 -0
  318. package/src/types/index.ts +621 -0
  319. package/tsconfig.json +34 -0
@@ -0,0 +1,621 @@
1
+ export interface MessageToolEvent {
2
+ name: string
3
+ input: string
4
+ output?: string
5
+ error?: boolean
6
+ }
7
+
8
+ export interface Message {
9
+ role: 'user' | 'assistant'
10
+ text: string
11
+ time: number
12
+ imagePath?: string
13
+ imageUrl?: string
14
+ toolEvents?: MessageToolEvent[]
15
+ kind?: 'chat' | 'heartbeat' | 'system'
16
+ suppressed?: boolean
17
+ }
18
+
19
+ export type ProviderType = 'claude-cli' | 'codex-cli' | 'opencode-cli' | 'openai' | 'ollama' | 'anthropic' | 'openclaw' | 'google' | 'deepseek' | 'groq' | 'together' | 'mistral' | 'xai' | 'fireworks'
20
+
21
+ export interface ProviderInfo {
22
+ id: ProviderType
23
+ name: string
24
+ models: string[]
25
+ requiresApiKey: boolean
26
+ optionalApiKey?: boolean
27
+ requiresEndpoint: boolean
28
+ defaultEndpoint?: string
29
+ }
30
+
31
+ export interface Credential {
32
+ id: string
33
+ provider: string
34
+ name: string
35
+ createdAt: number
36
+ }
37
+
38
+ export type Credentials = Record<string, Credential>
39
+
40
+ export interface Session {
41
+ id: string
42
+ name: string
43
+ cwd: string
44
+ user: string
45
+ provider: ProviderType
46
+ model: string
47
+ credentialId?: string | null
48
+ fallbackCredentialIds?: string[]
49
+ apiEndpoint?: string | null
50
+ claudeSessionId: string | null
51
+ codexThreadId?: string | null
52
+ opencodeSessionId?: string | null
53
+ delegateResumeIds?: {
54
+ claudeCode?: string | null
55
+ codex?: string | null
56
+ opencode?: string | null
57
+ }
58
+ messages: Message[]
59
+ createdAt: number
60
+ lastActiveAt: number
61
+ active?: boolean
62
+ sessionType?: SessionType
63
+ agentId?: string | null
64
+ parentSessionId?: string | null
65
+ tools?: string[]
66
+ heartbeatEnabled?: boolean | null
67
+ heartbeatIntervalSec?: number | null
68
+ heartbeatTarget?: 'last' | 'none' | string | null
69
+ lastAutoMemoryAt?: number | null
70
+ mainLoopState?: {
71
+ goal?: string | null
72
+ goalContract?: GoalContract | null
73
+ status?: 'idle' | 'progress' | 'blocked' | 'ok'
74
+ summary?: string | null
75
+ nextAction?: string | null
76
+ planSteps?: string[]
77
+ currentPlanStep?: string | null
78
+ reviewNote?: string | null
79
+ reviewConfidence?: number | null
80
+ missionTaskId?: string | null
81
+ momentumScore?: number
82
+ paused?: boolean
83
+ autonomyMode?: 'assist' | 'autonomous'
84
+ pendingEvents?: Array<{
85
+ id: string
86
+ type: string
87
+ text: string
88
+ createdAt: number
89
+ }>
90
+ timeline?: Array<{
91
+ id: string
92
+ at: number
93
+ source: string
94
+ note: string
95
+ status?: 'idle' | 'progress' | 'blocked' | 'ok'
96
+ }>
97
+ followupChainCount?: number
98
+ metaMissCount?: number
99
+ workingMemoryNotes?: string[]
100
+ lastMemoryNoteAt?: number | null
101
+ lastPlannedAt?: number | null
102
+ lastReviewedAt?: number | null
103
+ lastTickAt?: number | null
104
+ updatedAt?: number
105
+ }
106
+ pinned?: boolean
107
+ file?: string | null
108
+ queuedCount?: number
109
+ currentRunId?: string | null
110
+ }
111
+
112
+ export type Sessions = Record<string, Session>
113
+
114
+ export type SessionTool =
115
+ | 'shell'
116
+ | 'files'
117
+ | 'claude_code'
118
+ | 'codex_cli'
119
+ | 'opencode_cli'
120
+ | 'web_search'
121
+ | 'web_fetch'
122
+ | 'edit_file'
123
+ | 'process'
124
+
125
+ // --- Cost Tracking ---
126
+
127
+ export interface UsageRecord {
128
+ sessionId: string
129
+ messageIndex: number
130
+ model: string
131
+ provider: string
132
+ inputTokens: number
133
+ outputTokens: number
134
+ totalTokens: number
135
+ estimatedCost: number
136
+ timestamp: number
137
+ }
138
+
139
+ // --- Plugin System ---
140
+
141
+ export interface PluginHooks {
142
+ beforeAgentStart?: (ctx: { session: Session; message: string }) => Promise<void> | void
143
+ afterAgentComplete?: (ctx: { session: Session; response: string }) => Promise<void> | void
144
+ beforeToolExec?: (ctx: { toolName: string; input: any }) => Promise<any> | any
145
+ afterToolExec?: (ctx: { toolName: string; input: any; output: string }) => Promise<void> | void
146
+ onMessage?: (ctx: { session: Session; message: Message }) => Promise<void> | void
147
+ }
148
+
149
+ export interface Plugin {
150
+ name: string
151
+ description?: string
152
+ hooks: PluginHooks
153
+ }
154
+
155
+ export interface PluginMeta {
156
+ name: string
157
+ description?: string
158
+ filename: string
159
+ enabled: boolean
160
+ author?: string
161
+ version?: string
162
+ source?: 'local' | 'marketplace'
163
+ openclaw?: boolean
164
+ }
165
+
166
+ export interface MarketplacePlugin {
167
+ id: string
168
+ name: string
169
+ description: string
170
+ author: string
171
+ version: string
172
+ url: string
173
+ tags: string[]
174
+ openclaw: boolean
175
+ downloads: number
176
+ }
177
+
178
+ export interface SSEEvent {
179
+ t: 'd' | 'md' | 'r' | 'done' | 'err' | 'tool_call' | 'tool_result'
180
+ text?: string
181
+ toolName?: string
182
+ toolInput?: string
183
+ toolOutput?: string
184
+ }
185
+
186
+ export interface Directory {
187
+ name: string
188
+ path: string
189
+ }
190
+
191
+ export interface DevServerStatus {
192
+ running: boolean
193
+ url?: string
194
+ }
195
+
196
+ export interface DeployResult {
197
+ ok: boolean
198
+ output?: string
199
+ error?: string
200
+ }
201
+
202
+ export interface UploadResult {
203
+ path: string
204
+ size: number
205
+ url: string
206
+ }
207
+
208
+ export interface NetworkInfo {
209
+ ip: string
210
+ port: number
211
+ }
212
+
213
+ // --- Agent / Orchestration ---
214
+
215
+ export interface Agent {
216
+ id: string
217
+ name: string
218
+ description: string
219
+ soul?: string
220
+ systemPrompt: string
221
+ provider: ProviderType
222
+ model: string
223
+ credentialId?: string | null
224
+ fallbackCredentialIds?: string[]
225
+ apiEndpoint?: string | null
226
+ isOrchestrator?: boolean
227
+ subAgentIds?: string[]
228
+ tools?: string[] // e.g. ['browser'] — available tool integrations
229
+ skills?: string[] // e.g. ['frontend-design'] — Claude Code skills to use
230
+ skillIds?: string[] // IDs of uploaded skills from the Skills manager
231
+ mcpServerIds?: string[] // IDs of configured MCP servers to inject tools from
232
+ mcpDisabledTools?: string[] // MCP tool names disabled for this agent (denylist)
233
+ capabilities?: string[] // e.g. ['frontend', 'screenshots', 'research', 'devops']
234
+ threadSessionId?: string | null // persistent chat thread session for agent-centric UI
235
+ platformAssignScope?: 'self' | 'all' // defaults to 'self'
236
+ heartbeatEnabled?: boolean
237
+ heartbeatIntervalSec?: number | null
238
+ heartbeatInterval?: string | number | null
239
+ heartbeatPrompt?: string | null
240
+ heartbeatModel?: string | null
241
+ heartbeatAckMaxChars?: number | null
242
+ heartbeatShowOk?: boolean | null
243
+ heartbeatShowAlerts?: boolean | null
244
+ heartbeatTarget?: 'last' | 'none' | string | null
245
+ createdAt: number
246
+ updatedAt: number
247
+ }
248
+
249
+ export type AgentTool = 'browser'
250
+
251
+ export interface ClaudeSkill {
252
+ id: string
253
+ name: string
254
+ description: string
255
+ }
256
+
257
+ export type ScheduleType = 'cron' | 'interval' | 'once'
258
+ export type ScheduleStatus = 'active' | 'paused' | 'completed' | 'failed'
259
+
260
+ export interface Schedule {
261
+ id: string
262
+ name: string
263
+ agentId: string
264
+ taskPrompt: string
265
+ scheduleType: ScheduleType
266
+ cron?: string
267
+ intervalMs?: number
268
+ runAt?: number
269
+ lastRunAt?: number
270
+ nextRunAt?: number
271
+ status: ScheduleStatus
272
+ linkedTaskId?: string | null
273
+ runNumber?: number
274
+ createdAt: number
275
+ }
276
+
277
+ export interface FileReference {
278
+ path: string
279
+ contextSnippet?: string
280
+ kind?: 'file' | 'folder' | 'project'
281
+ projectRoot?: string
282
+ projectName?: string
283
+ exists?: boolean
284
+ timestamp: number
285
+ }
286
+
287
+ export interface MemoryReference {
288
+ type: 'project' | 'folder' | 'file' | 'task' | 'session' | 'url'
289
+ path?: string
290
+ projectRoot?: string
291
+ projectName?: string
292
+ title?: string
293
+ note?: string
294
+ exists?: boolean
295
+ timestamp: number
296
+ }
297
+
298
+ export interface MemoryImage {
299
+ path: string
300
+ mimeType?: string
301
+ width?: number
302
+ height?: number
303
+ sizeBytes?: number
304
+ }
305
+
306
+ export interface MemoryEntry {
307
+ id: string
308
+ agentId?: string | null
309
+ sessionId?: string | null
310
+ category: string
311
+ title: string
312
+ content: string
313
+ metadata?: Record<string, unknown>
314
+ references?: MemoryReference[]
315
+ filePaths?: FileReference[]
316
+ image?: MemoryImage | null
317
+ imagePath?: string | null
318
+ linkedMemoryIds?: string[]
319
+ createdAt: number
320
+ updatedAt: number
321
+ }
322
+
323
+ export type SessionType = 'human' | 'orchestrated'
324
+ export type AppView = 'sessions' | 'agents' | 'schedules' | 'memory' | 'tasks' | 'secrets' | 'providers' | 'skills' | 'connectors' | 'webhooks' | 'mcp_servers' | 'knowledge' | 'plugins' | 'usage' | 'runs' | 'logs'
325
+
326
+ // --- Session Runs ---
327
+
328
+ export type SessionRunStatus = 'queued' | 'running' | 'completed' | 'failed' | 'cancelled'
329
+
330
+ export interface SessionRunRecord {
331
+ id: string
332
+ sessionId: string
333
+ source: string
334
+ internal: boolean
335
+ mode: string
336
+ status: SessionRunStatus
337
+ messagePreview: string
338
+ dedupeKey?: string
339
+ queuedAt: number
340
+ startedAt?: number
341
+ endedAt?: number
342
+ error?: string
343
+ resultPreview?: string
344
+ }
345
+
346
+ // --- Webhook Logs ---
347
+
348
+ export interface WebhookLogEntry {
349
+ id: string
350
+ webhookId: string
351
+ event: string
352
+ payload: string
353
+ status: 'success' | 'error'
354
+ sessionId?: string
355
+ runId?: string
356
+ error?: string
357
+ timestamp: number
358
+ }
359
+
360
+ // --- App Settings ---
361
+
362
+ export type LangGraphProvider = string
363
+ export type LoopMode = 'bounded' | 'ongoing'
364
+
365
+ export interface GoalContract {
366
+ objective: string
367
+ constraints?: string[]
368
+ budgetUsd?: number | null
369
+ deadlineAt?: number | null
370
+ successMetric?: string | null
371
+ }
372
+
373
+ export interface AppSettings {
374
+ userPrompt?: string
375
+ userName?: string
376
+ setupCompleted?: boolean
377
+ langGraphProvider?: LangGraphProvider
378
+ langGraphModel?: string
379
+ langGraphCredentialId?: string | null
380
+ langGraphEndpoint?: string | null
381
+ embeddingProvider?: 'local' | 'openai' | 'ollama' | null
382
+ embeddingModel?: string | null
383
+ embeddingCredentialId?: string | null
384
+ loopMode?: LoopMode
385
+ agentLoopRecursionLimit?: number
386
+ orchestratorLoopRecursionLimit?: number
387
+ legacyOrchestratorMaxTurns?: number
388
+ ongoingLoopMaxIterations?: number
389
+ ongoingLoopMaxRuntimeMinutes?: number
390
+ shellCommandTimeoutSec?: number
391
+ claudeCodeTimeoutSec?: number
392
+ cliProcessTimeoutSec?: number
393
+ elevenLabsApiKey?: string | null
394
+ elevenLabsVoiceId?: string | null
395
+ speechRecognitionLang?: string | null
396
+ heartbeatPrompt?: string | null
397
+ heartbeatIntervalSec?: number | null
398
+ heartbeatInterval?: string | number | null
399
+ heartbeatModel?: string | null
400
+ heartbeatAckMaxChars?: number | null
401
+ heartbeatShowOk?: boolean | null
402
+ heartbeatShowAlerts?: boolean | null
403
+ heartbeatTarget?: 'last' | 'none' | string | null
404
+ heartbeatActiveStart?: string | null
405
+ heartbeatActiveEnd?: string | null
406
+ heartbeatTimezone?: string | null
407
+ // Task resiliency and supervision
408
+ defaultTaskMaxAttempts?: number
409
+ taskRetryBackoffSec?: number
410
+ taskStallTimeoutMin?: number
411
+ // Safety rails
412
+ safetyRequireApprovalForOutbound?: boolean
413
+ safetyMaxDailySpendUsd?: number | null
414
+ safetyBlockedTools?: string[]
415
+ capabilityPolicyMode?: 'permissive' | 'balanced' | 'strict'
416
+ capabilityBlockedTools?: string[]
417
+ capabilityBlockedCategories?: string[]
418
+ capabilityAllowedTools?: string[]
419
+ // Memory governance
420
+ memoryWorkingTtlHours?: number
421
+ memoryDefaultConfidence?: number
422
+ memoryPruneEnabled?: boolean
423
+ memorySummaryEnabled?: boolean
424
+ // Capability router preferences
425
+ autonomyPreferredDelegates?: Array<'claude' | 'codex' | 'opencode'>
426
+ autonomyPreferToolRouting?: boolean
427
+ // Continuous eval
428
+ autonomyEvalEnabled?: boolean
429
+ autonomyEvalCron?: string | null
430
+ memoryReferenceDepth?: number
431
+ maxMemoriesPerLookup?: number
432
+ maxLinkedMemoriesExpanded?: number
433
+ memoryMaxDepth?: number
434
+ memoryMaxPerLookup?: number
435
+ }
436
+
437
+ // --- Orchestrator Secrets ---
438
+
439
+ export interface OrchestratorSecret {
440
+ id: string
441
+ name: string
442
+ service: string // e.g. 'gmail', 'ahrefs', 'custom'
443
+ encryptedValue: string
444
+ scope: 'global' | 'agent'
445
+ agentIds: string[] // if scope === 'agent', which orchestrators can use it
446
+ createdAt: number
447
+ updatedAt: number
448
+ }
449
+
450
+ // --- Task Board ---
451
+
452
+ export type BoardTaskStatus = 'backlog' | 'queued' | 'running' | 'completed' | 'failed' | 'archived'
453
+
454
+ export interface TaskComment {
455
+ id: string
456
+ author: string // agent name or 'user'
457
+ agentId?: string // if from an orchestrator
458
+ text: string
459
+ createdAt: number
460
+ }
461
+
462
+ // --- Custom Providers ---
463
+
464
+ export interface ProviderConfig {
465
+ id: string
466
+ name: string
467
+ type: 'builtin' | 'custom'
468
+ baseUrl?: string
469
+ models: string[]
470
+ requiresApiKey: boolean
471
+ credentialId?: string | null
472
+ isEnabled: boolean
473
+ createdAt: number
474
+ updatedAt: number
475
+ }
476
+
477
+ // --- Skills ---
478
+
479
+ export interface Skill {
480
+ id: string
481
+ name: string
482
+ filename: string
483
+ content: string
484
+ description?: string
485
+ sourceUrl?: string
486
+ sourceFormat?: 'openclaw' | 'plain'
487
+ createdAt: number
488
+ updatedAt: number
489
+ }
490
+
491
+ // --- Connectors (Chat Platform Bridges) ---
492
+
493
+ export type ConnectorPlatform = 'discord' | 'telegram' | 'slack' | 'whatsapp' | 'openclaw' | 'signal' | 'teams' | 'googlechat' | 'matrix'
494
+ export type ConnectorStatus = 'stopped' | 'running' | 'error'
495
+
496
+ export interface Connector {
497
+ id: string
498
+ name: string
499
+ platform: ConnectorPlatform
500
+ agentId: string // which agent handles incoming messages
501
+ credentialId?: string | null // bot token stored as encrypted credential
502
+ config: Record<string, string> // platform-specific settings
503
+ isEnabled: boolean
504
+ status: ConnectorStatus
505
+ lastError?: string | null
506
+ /** WhatsApp QR code data URL (runtime only) */
507
+ qrDataUrl?: string | null
508
+ /** WhatsApp authenticated/paired state (runtime only) */
509
+ authenticated?: boolean
510
+ /** WhatsApp has stored credentials from previous pairing (runtime only) */
511
+ hasCredentials?: boolean
512
+ createdAt: number
513
+ updatedAt: number
514
+ }
515
+
516
+ export interface Webhook {
517
+ id: string
518
+ name: string
519
+ source: string
520
+ events: string[]
521
+ agentId?: string | null
522
+ secret?: string
523
+ isEnabled: boolean
524
+ createdAt: number
525
+ updatedAt: number
526
+ }
527
+
528
+ export interface DocumentEntry {
529
+ id: string
530
+ title: string
531
+ fileName: string
532
+ sourcePath: string
533
+ content: string
534
+ method: string
535
+ textLength: number
536
+ metadata?: Record<string, unknown>
537
+ createdAt: number
538
+ updatedAt: number
539
+ }
540
+
541
+ export interface BoardTask {
542
+ id: string
543
+ title: string
544
+ description: string
545
+ status: BoardTaskStatus
546
+ agentId: string
547
+ goalContract?: GoalContract | null
548
+ cwd?: string | null
549
+ file?: string | null
550
+ sessionId?: string | null
551
+ completionReportPath?: string | null
552
+ result?: string | null
553
+ error?: string | null
554
+ comments?: TaskComment[]
555
+ images?: string[]
556
+ createdAt: number
557
+ updatedAt: number
558
+ queuedAt?: number | null
559
+ startedAt?: number | null
560
+ completedAt?: number | null
561
+ archivedAt?: number | null
562
+ attempts?: number
563
+ maxAttempts?: number
564
+ retryBackoffSec?: number
565
+ retryScheduledAt?: number | null
566
+ runNumber?: number
567
+ totalRuns?: number
568
+ totalCompleted?: number
569
+ totalFailed?: number
570
+ sourceType?: 'schedule' | 'delegation' | 'manual'
571
+ sourceScheduleId?: string | null
572
+ sourceScheduleName?: string | null
573
+ sourceScheduleKey?: string | null
574
+ deadLetteredAt?: number | null
575
+ cliResumeId?: string | null
576
+ cliProvider?: string | null
577
+ claudeResumeId?: string | null
578
+ codexResumeId?: string | null
579
+ opencodeResumeId?: string | null
580
+ checkpoint?: {
581
+ lastRunId?: string | null
582
+ lastSessionId?: string | null
583
+ note?: string | null
584
+ updatedAt: number
585
+ } | null
586
+ validation?: {
587
+ ok: boolean
588
+ reasons: string[]
589
+ checkedAt: number
590
+ } | null
591
+ }
592
+
593
+ // --- MCP Servers ---
594
+
595
+ export type McpTransport = 'stdio' | 'sse' | 'streamable-http'
596
+
597
+ export interface McpServerConfig {
598
+ id: string
599
+ name: string
600
+ transport: McpTransport
601
+ command?: string // for stdio transport
602
+ args?: string[] // for stdio transport
603
+ url?: string // for sse/streamable-http transport
604
+ env?: Record<string, string> // environment variables
605
+ headers?: Record<string, string> // HTTP headers for sse/streamable-http
606
+ createdAt: number
607
+ updatedAt: number
608
+ }
609
+
610
+ // --- ClawHub ---
611
+
612
+ export interface ClawHubSkill {
613
+ id: string
614
+ name: string
615
+ description: string
616
+ author: string
617
+ tags: string[]
618
+ downloads: number
619
+ url: string
620
+ version: string
621
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2017",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "react-jsx",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "paths": {
22
+ "@/*": ["./src/*"]
23
+ }
24
+ },
25
+ "include": [
26
+ "next-env.d.ts",
27
+ "**/*.ts",
28
+ "**/*.tsx",
29
+ ".next/types/**/*.ts",
30
+ ".next/dev/types/**/*.ts",
31
+ "**/*.mts"
32
+ ],
33
+ "exclude": ["node_modules"]
34
+ }