@swarmclawai/swarmclaw 0.5.3 → 0.6.2
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.
- package/README.md +53 -9
- package/bin/server-cmd.js +1 -0
- package/bin/swarmclaw.js +76 -16
- package/next.config.ts +11 -1
- package/package.json +5 -2
- package/scripts/postinstall.mjs +18 -0
- package/src/app/api/canvas/[sessionId]/route.ts +31 -0
- package/src/app/api/chatrooms/[id]/chat/route.ts +284 -0
- package/src/app/api/chatrooms/[id]/members/route.ts +82 -0
- package/src/app/api/chatrooms/[id]/pins/route.ts +39 -0
- package/src/app/api/chatrooms/[id]/reactions/route.ts +42 -0
- package/src/app/api/chatrooms/[id]/route.ts +84 -0
- package/src/app/api/chatrooms/route.ts +50 -0
- package/src/app/api/connectors/[id]/route.ts +1 -0
- package/src/app/api/connectors/route.ts +2 -1
- package/src/app/api/credentials/route.ts +2 -3
- package/src/app/api/files/open/route.ts +43 -0
- package/src/app/api/knowledge/[id]/route.ts +13 -2
- package/src/app/api/knowledge/route.ts +8 -1
- package/src/app/api/memory/route.ts +8 -0
- package/src/app/api/notifications/route.ts +4 -0
- package/src/app/api/orchestrator/run/route.ts +1 -1
- package/src/app/api/plugins/install/route.ts +2 -2
- package/src/app/api/search/route.ts +53 -1
- package/src/app/api/sessions/[id]/chat/route.ts +2 -0
- package/src/app/api/sessions/[id]/edit-resend/route.ts +1 -1
- package/src/app/api/sessions/[id]/fork/route.ts +1 -1
- package/src/app/api/sessions/[id]/messages/route.ts +70 -2
- package/src/app/api/sessions/[id]/route.ts +4 -0
- package/src/app/api/sessions/route.ts +3 -3
- package/src/app/api/settings/route.ts +9 -0
- package/src/app/api/setup/check-provider/route.ts +3 -16
- package/src/app/api/skills/[id]/route.ts +6 -0
- package/src/app/api/skills/route.ts +6 -0
- package/src/app/api/tasks/[id]/route.ts +12 -0
- package/src/app/api/tasks/bulk/route.ts +100 -0
- package/src/app/api/tasks/metrics/route.ts +101 -0
- package/src/app/api/tasks/route.ts +18 -2
- package/src/app/api/tts/route.ts +3 -2
- package/src/app/api/tts/stream/route.ts +3 -2
- package/src/app/api/uploads/[filename]/route.ts +19 -34
- package/src/app/api/uploads/route.ts +94 -0
- package/src/app/api/webhooks/[id]/route.ts +15 -1
- package/src/app/globals.css +63 -15
- package/src/app/page.tsx +142 -13
- package/src/cli/index.js +40 -1
- package/src/cli/index.test.js +30 -0
- package/src/cli/spec.js +42 -0
- package/src/components/agents/agent-avatar.tsx +57 -10
- package/src/components/agents/agent-card.tsx +50 -17
- package/src/components/agents/agent-chat-list.tsx +148 -12
- package/src/components/agents/agent-list.tsx +50 -19
- package/src/components/agents/agent-sheet.tsx +120 -65
- package/src/components/agents/inspector-panel.tsx +81 -6
- package/src/components/agents/openclaw-skills-panel.tsx +32 -3
- package/src/components/agents/personality-builder.tsx +42 -14
- package/src/components/agents/soul-library-picker.tsx +89 -0
- package/src/components/auth/access-key-gate.tsx +10 -3
- package/src/components/auth/setup-wizard.tsx +2 -2
- package/src/components/auth/user-picker.tsx +31 -3
- package/src/components/canvas/canvas-panel.tsx +96 -0
- package/src/components/chat/activity-moment.tsx +173 -0
- package/src/components/chat/chat-area.tsx +46 -22
- package/src/components/chat/chat-header.tsx +457 -286
- package/src/components/chat/chat-preview-panel.tsx +1 -2
- package/src/components/chat/chat-tool-toggles.tsx +1 -1
- package/src/components/chat/delegation-banner.tsx +371 -0
- package/src/components/chat/file-path-chip.tsx +146 -0
- package/src/components/chat/heartbeat-history-panel.tsx +269 -0
- package/src/components/chat/markdown-utils.ts +9 -0
- package/src/components/chat/message-bubble.tsx +356 -315
- package/src/components/chat/message-list.tsx +230 -8
- package/src/components/chat/streaming-bubble.tsx +104 -47
- package/src/components/chat/suggestions-bar.tsx +1 -1
- package/src/components/chat/thinking-indicator.tsx +72 -10
- package/src/components/chat/tool-call-bubble.tsx +111 -73
- package/src/components/chat/tool-request-banner.tsx +31 -7
- package/src/components/chat/transfer-agent-picker.tsx +63 -0
- package/src/components/chatrooms/agent-hover-card.tsx +124 -0
- package/src/components/chatrooms/chatroom-input.tsx +320 -0
- package/src/components/chatrooms/chatroom-list.tsx +130 -0
- package/src/components/chatrooms/chatroom-message.tsx +432 -0
- package/src/components/chatrooms/chatroom-sheet.tsx +215 -0
- package/src/components/chatrooms/chatroom-tool-request-banner.tsx +134 -0
- package/src/components/chatrooms/chatroom-typing-bar.tsx +88 -0
- package/src/components/chatrooms/chatroom-view.tsx +344 -0
- package/src/components/chatrooms/reaction-picker.tsx +273 -0
- package/src/components/connectors/connector-list.tsx +168 -90
- package/src/components/connectors/connector-sheet.tsx +95 -56
- package/src/components/home/home-view.tsx +501 -0
- package/src/components/input/chat-input.tsx +107 -43
- package/src/components/knowledge/knowledge-list.tsx +31 -1
- package/src/components/knowledge/knowledge-sheet.tsx +83 -2
- package/src/components/layout/app-layout.tsx +194 -97
- package/src/components/layout/update-banner.tsx +2 -2
- package/src/components/logs/log-list.tsx +2 -2
- package/src/components/mcp-servers/mcp-server-sheet.tsx +1 -1
- package/src/components/memory/memory-agent-list.tsx +143 -0
- package/src/components/memory/memory-browser.tsx +205 -0
- package/src/components/memory/memory-card.tsx +34 -7
- package/src/components/memory/memory-detail.tsx +359 -120
- package/src/components/memory/memory-sheet.tsx +157 -23
- package/src/components/plugins/plugin-list.tsx +1 -1
- package/src/components/plugins/plugin-sheet.tsx +1 -1
- package/src/components/projects/project-detail.tsx +509 -0
- package/src/components/projects/project-list.tsx +195 -59
- package/src/components/providers/provider-list.tsx +2 -2
- package/src/components/providers/provider-sheet.tsx +3 -3
- package/src/components/schedules/schedule-card.tsx +1 -1
- package/src/components/schedules/schedule-list.tsx +1 -1
- package/src/components/schedules/schedule-sheet.tsx +259 -126
- package/src/components/secrets/secret-sheet.tsx +47 -24
- package/src/components/secrets/secrets-list.tsx +18 -8
- package/src/components/sessions/new-session-sheet.tsx +33 -65
- package/src/components/sessions/session-card.tsx +45 -14
- package/src/components/sessions/session-list.tsx +35 -18
- package/src/components/settings/gateway-disconnect-overlay.tsx +80 -0
- package/src/components/shared/agent-picker-list.tsx +90 -0
- package/src/components/shared/agent-switch-dialog.tsx +156 -0
- package/src/components/shared/attachment-chip.tsx +165 -0
- package/src/components/shared/avatar.tsx +10 -1
- package/src/components/shared/chatroom-picker-list.tsx +61 -0
- package/src/components/shared/check-icon.tsx +12 -0
- package/src/components/shared/confirm-dialog.tsx +1 -1
- package/src/components/shared/connector-platform-icon.tsx +51 -4
- package/src/components/shared/empty-state.tsx +32 -0
- package/src/components/shared/file-preview.tsx +34 -0
- package/src/components/shared/form-styles.ts +2 -0
- package/src/components/shared/icon-button.tsx +16 -2
- package/src/components/shared/keyboard-shortcuts-dialog.tsx +116 -0
- package/src/components/shared/notification-center.tsx +44 -6
- package/src/components/shared/profile-sheet.tsx +115 -0
- package/src/components/shared/reply-quote.tsx +26 -0
- package/src/components/shared/search-dialog.tsx +31 -15
- package/src/components/shared/section-label.tsx +12 -0
- package/src/components/shared/settings/plugin-manager.tsx +1 -1
- package/src/components/shared/settings/section-embedding.tsx +48 -13
- package/src/components/shared/settings/section-orchestrator.tsx +46 -15
- package/src/components/shared/settings/section-providers.tsx +1 -1
- package/src/components/shared/settings/section-secrets.tsx +1 -1
- package/src/components/shared/settings/section-storage.tsx +206 -0
- package/src/components/shared/settings/section-theme.tsx +95 -0
- package/src/components/shared/settings/section-user-preferences.tsx +57 -0
- package/src/components/shared/settings/section-voice.tsx +42 -21
- package/src/components/shared/settings/section-web-search.tsx +30 -6
- package/src/components/shared/settings/settings-page.tsx +182 -27
- package/src/components/shared/settings/settings-sheet.tsx +9 -73
- package/src/components/shared/settings/storage-browser.tsx +259 -0
- package/src/components/shared/sheet-footer.tsx +33 -0
- package/src/components/skills/skill-list.tsx +61 -30
- package/src/components/skills/skill-sheet.tsx +81 -2
- package/src/components/tasks/task-board.tsx +448 -26
- package/src/components/tasks/task-card.tsx +59 -9
- package/src/components/tasks/task-column.tsx +62 -3
- package/src/components/tasks/task-list.tsx +12 -4
- package/src/components/tasks/task-sheet.tsx +416 -74
- package/src/components/ui/hover-card.tsx +52 -0
- package/src/components/usage/metrics-dashboard.tsx +90 -6
- package/src/components/usage/usage-list.tsx +1 -1
- package/src/components/webhooks/webhook-sheet.tsx +1 -1
- package/src/hooks/use-continuous-speech.ts +10 -4
- package/src/hooks/use-view-router.ts +69 -19
- package/src/hooks/use-voice-conversation.ts +53 -10
- package/src/hooks/use-ws.ts +4 -2
- package/src/instrumentation.ts +15 -1
- package/src/lib/chat.ts +2 -0
- package/src/lib/memory.ts +3 -0
- package/src/lib/providers/anthropic.ts +13 -7
- package/src/lib/providers/index.ts +1 -0
- package/src/lib/providers/openai.ts +13 -7
- package/src/lib/server/chat-execution.ts +75 -15
- package/src/lib/server/chatroom-helpers.ts +146 -0
- package/src/lib/server/connectors/manager.ts +229 -7
- package/src/lib/server/context-manager.ts +225 -13
- package/src/lib/server/create-notification.ts +14 -2
- package/src/lib/server/daemon-state.ts +157 -10
- package/src/lib/server/execution-log.ts +1 -0
- package/src/lib/server/heartbeat-service.ts +48 -6
- package/src/lib/server/heartbeat-wake.ts +110 -0
- package/src/lib/server/langgraph-checkpoint.ts +1 -0
- package/src/lib/server/main-agent-loop.ts +1 -1
- package/src/lib/server/memory-consolidation.ts +105 -0
- package/src/lib/server/memory-db.ts +183 -10
- package/src/lib/server/mime.ts +51 -0
- package/src/lib/server/openclaw-gateway.ts +9 -1
- package/src/lib/server/orchestrator-lg.ts +2 -0
- package/src/lib/server/orchestrator.ts +5 -2
- package/src/lib/server/playwright-proxy.mjs +2 -3
- package/src/lib/server/prompt-runtime-context.ts +53 -0
- package/src/lib/server/provider-health.ts +125 -0
- package/src/lib/server/queue.ts +56 -10
- package/src/lib/server/scheduler.ts +8 -0
- package/src/lib/server/session-run-manager.ts +4 -0
- package/src/lib/server/session-tools/canvas.ts +67 -0
- package/src/lib/server/session-tools/chatroom.ts +136 -0
- package/src/lib/server/session-tools/connector.ts +83 -9
- package/src/lib/server/session-tools/context-mgmt.ts +36 -18
- package/src/lib/server/session-tools/crud.ts +21 -0
- package/src/lib/server/session-tools/delegate.ts +68 -4
- package/src/lib/server/session-tools/git.ts +71 -0
- package/src/lib/server/session-tools/http.ts +57 -0
- package/src/lib/server/session-tools/index.ts +10 -0
- package/src/lib/server/session-tools/memory.ts +7 -1
- package/src/lib/server/session-tools/search-providers.ts +16 -8
- package/src/lib/server/session-tools/subagent.ts +106 -0
- package/src/lib/server/session-tools/web.ts +115 -4
- package/src/lib/server/storage.ts +53 -29
- package/src/lib/server/stream-agent-chat.ts +185 -57
- package/src/lib/server/system-events.ts +49 -0
- package/src/lib/server/task-mention.ts +41 -0
- package/src/lib/server/ws-hub.ts +11 -0
- package/src/lib/sessions.ts +10 -0
- package/src/lib/soul-library.ts +103 -0
- package/src/lib/soul-suggestions.ts +109 -0
- package/src/lib/task-dedupe.ts +26 -0
- package/src/lib/tasks.ts +4 -1
- package/src/lib/tool-definitions.ts +2 -0
- package/src/lib/tts.ts +2 -2
- package/src/lib/view-routes.ts +36 -1
- package/src/lib/ws-client.ts +14 -4
- package/src/stores/use-app-store.ts +41 -3
- package/src/stores/use-chat-store.ts +113 -5
- package/src/stores/use-chatroom-store.ts +276 -0
- package/src/types/index.ts +88 -4
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState, useCallback } from 'react'
|
|
4
4
|
import { TaskCard } from './task-card'
|
|
5
|
+
import { createTask } from '@/lib/tasks'
|
|
6
|
+
import { useAppStore } from '@/stores/use-app-store'
|
|
5
7
|
import type { BoardTask, BoardTaskStatus } from '@/types'
|
|
6
8
|
|
|
7
9
|
const COLUMN_CONFIG: Record<BoardTaskStatus, { label: string; color: string; dot: string }> = {
|
|
@@ -17,11 +19,18 @@ interface Props {
|
|
|
17
19
|
status: BoardTaskStatus
|
|
18
20
|
tasks: BoardTask[]
|
|
19
21
|
onDrop: (taskId: string, newStatus: BoardTaskStatus) => void
|
|
22
|
+
selectionMode?: boolean
|
|
23
|
+
selectedIds?: Set<string>
|
|
24
|
+
onToggleSelect?: (id: string) => void
|
|
25
|
+
onSelectAll?: () => void
|
|
20
26
|
}
|
|
21
27
|
|
|
22
|
-
export function TaskColumn({ status, tasks, onDrop }: Props) {
|
|
28
|
+
export function TaskColumn({ status, tasks, onDrop, selectionMode, selectedIds, onToggleSelect, onSelectAll }: Props) {
|
|
23
29
|
const config = COLUMN_CONFIG[status]
|
|
24
30
|
const [dragOver, setDragOver] = useState(false)
|
|
31
|
+
const [quickAddValue, setQuickAddValue] = useState('')
|
|
32
|
+
const [adding, setAdding] = useState(false)
|
|
33
|
+
const loadTasks = useAppStore((s) => s.loadTasks)
|
|
25
34
|
|
|
26
35
|
const handleDragOver = useCallback((e: React.DragEvent) => {
|
|
27
36
|
e.preventDefault()
|
|
@@ -42,6 +51,21 @@ export function TaskColumn({ status, tasks, onDrop }: Props) {
|
|
|
42
51
|
}
|
|
43
52
|
}, [onDrop, status])
|
|
44
53
|
|
|
54
|
+
const handleQuickAdd = async () => {
|
|
55
|
+
const title = quickAddValue.trim()
|
|
56
|
+
if (!title || adding) return
|
|
57
|
+
setAdding(true)
|
|
58
|
+
try {
|
|
59
|
+
await createTask({ title, description: '', agentId: '', status })
|
|
60
|
+
await loadTasks()
|
|
61
|
+
setQuickAddValue('')
|
|
62
|
+
} finally {
|
|
63
|
+
setAdding(false)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const selectedCount = tasks.filter((t) => selectedIds?.has(t.id)).length
|
|
68
|
+
|
|
45
69
|
return (
|
|
46
70
|
<div
|
|
47
71
|
className={`flex-1 min-w-[240px] max-w-[320px] flex flex-col rounded-[16px] transition-colors duration-150 ${
|
|
@@ -51,14 +75,49 @@ export function TaskColumn({ status, tasks, onDrop }: Props) {
|
|
|
51
75
|
onDragLeave={handleDragLeave}
|
|
52
76
|
onDrop={handleDrop}
|
|
53
77
|
>
|
|
54
|
-
<div className="flex items-center gap-2.5 px-2 mb-
|
|
78
|
+
<div className="flex items-center gap-2.5 px-2 mb-3">
|
|
55
79
|
<div className={`w-2 h-2 rounded-full ${config.dot}`} />
|
|
56
80
|
<span className={`font-display text-[13px] font-600 ${config.color}`}>{config.label}</span>
|
|
57
81
|
<span className="text-[12px] text-text-3 ml-auto">{tasks.length}</span>
|
|
82
|
+
{selectionMode && tasks.length > 0 && (
|
|
83
|
+
<button
|
|
84
|
+
onClick={onSelectAll}
|
|
85
|
+
className={`text-[10px] font-600 px-1.5 py-0.5 rounded-[5px] cursor-pointer border-none transition-colors
|
|
86
|
+
${selectedCount === tasks.length && selectedCount > 0
|
|
87
|
+
? 'bg-accent-bright/20 text-accent-bright'
|
|
88
|
+
: 'bg-white/[0.04] text-text-3 hover:bg-white/[0.08]'}`}
|
|
89
|
+
style={{ fontFamily: 'inherit' }}
|
|
90
|
+
>
|
|
91
|
+
{selectedCount === tasks.length && selectedCount > 0 ? 'All' : 'Select all'}
|
|
92
|
+
</button>
|
|
93
|
+
)}
|
|
58
94
|
</div>
|
|
95
|
+
|
|
96
|
+
{/* Quick add input */}
|
|
97
|
+
{(status === 'backlog' || status === 'queued') && (
|
|
98
|
+
<div className="px-1 mb-2">
|
|
99
|
+
<input
|
|
100
|
+
type="text"
|
|
101
|
+
value={quickAddValue}
|
|
102
|
+
onChange={(e) => setQuickAddValue(e.target.value)}
|
|
103
|
+
onKeyDown={(e) => { if (e.key === 'Enter') handleQuickAdd() }}
|
|
104
|
+
placeholder={`+ Add to ${config.label.toLowerCase()}...`}
|
|
105
|
+
className="w-full px-3 py-2 rounded-[10px] bg-white/[0.02] border border-dashed border-white/[0.08] text-[12px] text-text placeholder:text-text-3/30 outline-none focus:border-white/[0.15] focus:bg-white/[0.03] transition-colors"
|
|
106
|
+
style={{ fontFamily: 'inherit' }}
|
|
107
|
+
disabled={adding}
|
|
108
|
+
/>
|
|
109
|
+
</div>
|
|
110
|
+
)}
|
|
111
|
+
|
|
59
112
|
<div className="flex flex-col gap-3 flex-1 overflow-y-auto pr-1 px-1 pb-2">
|
|
60
113
|
{tasks.map((task) => (
|
|
61
|
-
<TaskCard
|
|
114
|
+
<TaskCard
|
|
115
|
+
key={task.id}
|
|
116
|
+
task={task}
|
|
117
|
+
selectionMode={selectionMode}
|
|
118
|
+
selected={selectedIds?.has(task.id)}
|
|
119
|
+
onToggleSelect={onToggleSelect}
|
|
120
|
+
/>
|
|
62
121
|
))}
|
|
63
122
|
{tasks.length === 0 && (
|
|
64
123
|
<div className={`text-[12px] text-text-3/50 text-center py-8 rounded-[12px] border border-dashed transition-colors ${
|
|
@@ -5,6 +5,7 @@ import { useAppStore } from '@/stores/use-app-store'
|
|
|
5
5
|
import { useWs } from '@/hooks/use-ws'
|
|
6
6
|
import { api } from '@/lib/api-client'
|
|
7
7
|
import type { BoardTaskStatus } from '@/types'
|
|
8
|
+
import { EmptyState } from '@/components/shared/empty-state'
|
|
8
9
|
|
|
9
10
|
const STATUS_DOT: Record<BoardTaskStatus, string> = {
|
|
10
11
|
backlog: 'bg-white/20',
|
|
@@ -88,9 +89,16 @@ export function TaskList({ inSidebar }: { inSidebar?: boolean }) {
|
|
|
88
89
|
)}
|
|
89
90
|
|
|
90
91
|
{filtered.length === 0 && (
|
|
91
|
-
<
|
|
92
|
-
{
|
|
93
|
-
|
|
92
|
+
<EmptyState
|
|
93
|
+
icon={
|
|
94
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" className="text-accent-bright">
|
|
95
|
+
<rect x="3" y="3" width="18" height="18" rx="2" fill="currentColor" opacity="0.2" />
|
|
96
|
+
<path d="M9 11l3 3 5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
97
|
+
</svg>
|
|
98
|
+
}
|
|
99
|
+
title={sorted.length === 0 ? 'No tasks yet' : 'No matching tasks'}
|
|
100
|
+
subtitle={sorted.length === 0 ? 'Create tasks and assign agents to run them' : 'Try adjusting your search'}
|
|
101
|
+
/>
|
|
94
102
|
)}
|
|
95
103
|
{filtered.map((task) => {
|
|
96
104
|
const agent = agents[task.agentId]
|
|
@@ -101,7 +109,7 @@ export function TaskList({ inSidebar }: { inSidebar?: boolean }) {
|
|
|
101
109
|
setEditingTaskId(task.id)
|
|
102
110
|
setTaskSheetOpen(true)
|
|
103
111
|
}}
|
|
104
|
-
className="w-full text-left
|
|
112
|
+
className="w-full text-left py-3.5 px-4 rounded-[14px] border border-transparent bg-transparent cursor-pointer hover:bg-white/[0.03] transition-all"
|
|
105
113
|
style={{ fontFamily: 'inherit' }}
|
|
106
114
|
>
|
|
107
115
|
<div className="flex items-center gap-2.5">
|