@teamclaws/teamclaw 2026.3.21
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 +37 -0
- package/api.ts +10 -0
- package/index.ts +246 -0
- package/openclaw.plugin.json +41 -0
- package/package.json +63 -0
- package/src/config.ts +297 -0
- package/src/controller/controller-service.ts +197 -0
- package/src/controller/controller-tools.ts +224 -0
- package/src/controller/http-server.ts +1946 -0
- package/src/controller/local-worker-manager.ts +531 -0
- package/src/controller/message-router.ts +62 -0
- package/src/controller/prompt-injector.ts +116 -0
- package/src/controller/task-router.ts +97 -0
- package/src/controller/websocket.ts +63 -0
- package/src/controller/worker-provisioning.ts +1286 -0
- package/src/discovery.ts +101 -0
- package/src/git-collaboration.ts +690 -0
- package/src/identity.ts +149 -0
- package/src/openclaw-workspace.ts +101 -0
- package/src/protocol.ts +88 -0
- package/src/roles.ts +275 -0
- package/src/state.ts +118 -0
- package/src/task-executor.ts +478 -0
- package/src/types.ts +469 -0
- package/src/ui/app.js +1400 -0
- package/src/ui/index.html +207 -0
- package/src/ui/style.css +1281 -0
- package/src/worker/http-handler.ts +136 -0
- package/src/worker/message-queue.ts +31 -0
- package/src/worker/prompt-injector.ts +72 -0
- package/src/worker/tools.ts +318 -0
- package/src/worker/worker-service.ts +194 -0
- package/src/workspace-browser.ts +312 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>TeamClaw - Virtual Team Dashboard</title>
|
|
7
|
+
<link rel="stylesheet" href="/ui/style.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header class="header">
|
|
11
|
+
<h1 class="header-title">TeamClaw</h1>
|
|
12
|
+
<div class="header-status">
|
|
13
|
+
<span id="connection-status" class="status-dot disconnected"></span>
|
|
14
|
+
<span id="team-name">Team</span>
|
|
15
|
+
</div>
|
|
16
|
+
</header>
|
|
17
|
+
|
|
18
|
+
<main class="main">
|
|
19
|
+
<aside class="sidebar">
|
|
20
|
+
<div class="sidebar-section">
|
|
21
|
+
<h2 class="sidebar-heading">Workers</h2>
|
|
22
|
+
<div id="workers-list" class="workers-list">
|
|
23
|
+
<div class="empty-state">No workers connected</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="sidebar-section">
|
|
27
|
+
<h2 class="sidebar-heading">Roles</h2>
|
|
28
|
+
<div id="roles-list" class="roles-list"></div>
|
|
29
|
+
</div>
|
|
30
|
+
</aside>
|
|
31
|
+
|
|
32
|
+
<div class="content">
|
|
33
|
+
<div class="tabs">
|
|
34
|
+
<button class="tab active" data-tab="tasks">Tasks</button>
|
|
35
|
+
<button class="tab" data-tab="workspace">Workspace</button>
|
|
36
|
+
<button class="tab" data-tab="clarifications">Clarifications <span id="clarifications-tab-count" class="tab-badge">0</span></button>
|
|
37
|
+
<button class="tab" data-tab="messages">Messages</button>
|
|
38
|
+
<button class="tab" data-tab="create-task">Manual Task</button>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div class="tab-content">
|
|
42
|
+
<!-- Tasks Tab -->
|
|
43
|
+
<div id="tab-tasks" class="tab-panel active">
|
|
44
|
+
<div class="task-filters">
|
|
45
|
+
<button class="filter-btn active" data-filter="all">All</button>
|
|
46
|
+
<button class="filter-btn" data-filter="pending">Pending</button>
|
|
47
|
+
<button class="filter-btn" data-filter="assigned">Assigned</button>
|
|
48
|
+
<button class="filter-btn" data-filter="in_progress">In Progress</button>
|
|
49
|
+
<button class="filter-btn" data-filter="blocked">Blocked</button>
|
|
50
|
+
<button class="filter-btn" data-filter="completed">Completed</button>
|
|
51
|
+
<button class="filter-btn" data-filter="failed">Failed</button>
|
|
52
|
+
</div>
|
|
53
|
+
<div id="tasks-board" class="tasks-board">
|
|
54
|
+
<div class="empty-state">No tasks yet</div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Workspace Tab -->
|
|
59
|
+
<div id="tab-workspace" class="tab-panel">
|
|
60
|
+
<div class="workspace-browser">
|
|
61
|
+
<aside class="workspace-sidebar-panel">
|
|
62
|
+
<div class="workspace-panel-header">
|
|
63
|
+
<div>
|
|
64
|
+
<div class="workspace-panel-kicker">Workspace</div>
|
|
65
|
+
<h3>Files</h3>
|
|
66
|
+
</div>
|
|
67
|
+
<button id="workspace-tree-refresh" class="btn btn-small" type="button">Refresh</button>
|
|
68
|
+
</div>
|
|
69
|
+
<div id="workspace-tree" class="workspace-tree">
|
|
70
|
+
<div class="empty-state">Workspace tree loading…</div>
|
|
71
|
+
</div>
|
|
72
|
+
</aside>
|
|
73
|
+
|
|
74
|
+
<section class="workspace-viewer-panel">
|
|
75
|
+
<div class="workspace-panel-header">
|
|
76
|
+
<div>
|
|
77
|
+
<div class="workspace-panel-kicker">Preview</div>
|
|
78
|
+
<h3 id="workspace-file-name">Select a file</h3>
|
|
79
|
+
<div id="workspace-file-meta" class="workspace-file-meta"></div>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="workspace-viewer-actions">
|
|
82
|
+
<a id="workspace-open-raw" class="btn btn-small workspace-open-raw hidden" href="#" target="_blank" rel="noreferrer">Open Raw</a>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="workspace-view-tabs">
|
|
87
|
+
<button id="workspace-view-source" class="workspace-view-tab active" type="button" data-workspace-view="source">Source</button>
|
|
88
|
+
<button id="workspace-view-preview" class="workspace-view-tab" type="button" data-workspace-view="preview">Preview</button>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div class="workspace-view-body">
|
|
92
|
+
<div id="workspace-source-view" class="workspace-view-panel active"></div>
|
|
93
|
+
<div id="workspace-preview-view" class="workspace-view-panel"></div>
|
|
94
|
+
</div>
|
|
95
|
+
</section>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<!-- Clarifications Tab -->
|
|
100
|
+
<div id="tab-clarifications" class="tab-panel">
|
|
101
|
+
<div id="clarifications-list" class="clarifications-list">
|
|
102
|
+
<div class="empty-state">No clarification requests</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<!-- Messages Tab -->
|
|
107
|
+
<div id="tab-messages" class="tab-panel">
|
|
108
|
+
<div id="messages-feed" class="messages-feed">
|
|
109
|
+
<div class="empty-state">No messages yet</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<!-- Create Task Tab -->
|
|
114
|
+
<div id="tab-create-task" class="tab-panel">
|
|
115
|
+
<div class="panel-note">
|
|
116
|
+
Raw human requirements should go to the controller conversation first. Use this form only for explicit manual task injection or testing.
|
|
117
|
+
</div>
|
|
118
|
+
<form id="create-task-form" class="create-task-form">
|
|
119
|
+
<div class="form-group">
|
|
120
|
+
<label for="task-title">Title</label>
|
|
121
|
+
<input type="text" id="task-title" placeholder="Task title..." required>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="form-group">
|
|
124
|
+
<label for="task-desc">Description</label>
|
|
125
|
+
<textarea id="task-desc" placeholder="Execution-ready task description..." rows="4" required></textarea>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="form-row">
|
|
128
|
+
<div class="form-group">
|
|
129
|
+
<label for="task-priority">Priority</label>
|
|
130
|
+
<select id="task-priority">
|
|
131
|
+
<option value="low">Low</option>
|
|
132
|
+
<option value="medium" selected>Medium</option>
|
|
133
|
+
<option value="high">High</option>
|
|
134
|
+
<option value="critical">Critical</option>
|
|
135
|
+
</select>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="form-group">
|
|
138
|
+
<label for="task-role">Assigned Role</label>
|
|
139
|
+
<select id="task-role">
|
|
140
|
+
<option value="">Auto-assign</option>
|
|
141
|
+
<option value="pm">Product Manager</option>
|
|
142
|
+
<option value="architect">Software Architect</option>
|
|
143
|
+
<option value="developer">Developer</option>
|
|
144
|
+
<option value="qa">QA Engineer</option>
|
|
145
|
+
<option value="release-engineer">Release Engineer</option>
|
|
146
|
+
<option value="infra-engineer">Infra Engineer</option>
|
|
147
|
+
<option value="devops">DevOps Engineer</option>
|
|
148
|
+
<option value="security-engineer">Security Engineer</option>
|
|
149
|
+
<option value="designer">UI/UX Designer</option>
|
|
150
|
+
<option value="marketing">Marketing Specialist</option>
|
|
151
|
+
</select>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
<button type="submit" class="btn btn-primary">Create Manual Task</button>
|
|
155
|
+
</form>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</main>
|
|
160
|
+
|
|
161
|
+
<div id="task-detail-modal" class="task-detail-modal" aria-hidden="true">
|
|
162
|
+
<div class="task-detail-backdrop" data-task-detail-close></div>
|
|
163
|
+
<section class="task-detail-panel" role="dialog" aria-modal="true" aria-labelledby="task-detail-title">
|
|
164
|
+
<header class="task-detail-header">
|
|
165
|
+
<div class="task-detail-heading">
|
|
166
|
+
<div class="task-detail-kicker">Task Details</div>
|
|
167
|
+
<h2 id="task-detail-title">Select a task</h2>
|
|
168
|
+
<div id="task-detail-subtitle" class="task-detail-subtitle"></div>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="task-detail-actions">
|
|
171
|
+
<button id="task-detail-refresh" class="btn btn-small" type="button">Refresh</button>
|
|
172
|
+
<button id="task-detail-close" class="btn btn-small" type="button">Close</button>
|
|
173
|
+
</div>
|
|
174
|
+
</header>
|
|
175
|
+
|
|
176
|
+
<div class="task-detail-toolbar">
|
|
177
|
+
<label class="task-detail-follow">
|
|
178
|
+
<input id="task-detail-follow-toggle" type="checkbox" checked>
|
|
179
|
+
<span>Follow live output</span>
|
|
180
|
+
</label>
|
|
181
|
+
<span id="task-detail-live-badge" class="task-detail-live-badge">Idle</span>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="task-detail-tabs">
|
|
185
|
+
<button class="task-detail-tab active" type="button" data-task-detail-tab="overview">Overview</button>
|
|
186
|
+
<button class="task-detail-tab" type="button" data-task-detail-tab="timeline">Timeline</button>
|
|
187
|
+
<button class="task-detail-tab" type="button" data-task-detail-tab="output">Output</button>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<div class="task-detail-body">
|
|
191
|
+
<div id="task-detail-overview" class="task-detail-panel-content active"></div>
|
|
192
|
+
<div id="task-detail-timeline" class="task-detail-panel-content"></div>
|
|
193
|
+
<div id="task-detail-output" class="task-detail-panel-content"></div>
|
|
194
|
+
</div>
|
|
195
|
+
</section>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<footer class="footer">
|
|
199
|
+
<div class="command-bar">
|
|
200
|
+
<input type="text" id="command-input" placeholder="Send a controller message or slash command... (e.g., 继续工作, /status, /assign task-id developer)" autocomplete="off">
|
|
201
|
+
<button id="command-send" class="btn btn-small">Send to Controller</button>
|
|
202
|
+
</div>
|
|
203
|
+
</footer>
|
|
204
|
+
|
|
205
|
+
<script src="/ui/app.js"></script>
|
|
206
|
+
</body>
|
|
207
|
+
</html>
|