claw-dashboard 1.9.0 → 2.0.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.
- package/.c8rc.json +38 -0
- package/.dockerignore +68 -0
- package/.github/dependabot.yml +45 -0
- package/.github/pull_request_template.md +39 -0
- package/.github/workflows/ci.yml +147 -0
- package/.github/workflows/release.yml +40 -0
- package/.github/workflows/security.yml +84 -0
- package/.husky/pre-commit +1 -0
- package/.planning/codebase/ARCHITECTURE.md +206 -0
- package/.planning/codebase/INTEGRATIONS.md +150 -0
- package/.planning/codebase/STACK.md +122 -0
- package/.planning/codebase/STRUCTURE.md +201 -0
- package/CHANGELOG.md +293 -0
- package/CONTRIBUTING.md +378 -0
- package/Dockerfile +54 -0
- package/FEATURES.md +195 -21
- package/README.md +83 -6
- package/TODO.md +28 -0
- package/build-cjs.js +127 -0
- package/cjs-shim.js +13 -0
- package/dist/clawdash +1729 -0
- package/dist/clawdash.meta.json +2236 -0
- package/dist/widgets.cjs +6511 -0
- package/docker-compose.yml +67 -0
- package/docs/API.md +1050 -0
- package/docs/PLUGINS.md +1504 -0
- package/esbuild.config.js +158 -0
- package/eslint.config.js +56 -0
- package/examples/plugins/README.md +122 -0
- package/examples/plugins/api-status/index.js +294 -0
- package/examples/plugins/api-status/plugin.json +19 -0
- package/examples/plugins/hello-world/index.js +104 -0
- package/examples/plugins/hello-world/plugin.json +15 -0
- package/examples/plugins/system-metrics-chart/index.js +339 -0
- package/examples/plugins/system-metrics-chart/plugin.json +18 -0
- package/examples/plugins/weather-widget/index.js +136 -0
- package/examples/plugins/weather-widget/plugin.json +19 -0
- package/index.cjs +23005 -0
- package/index.js +5236 -566
- package/jest.config.js +11 -0
- package/man/clawdash.1 +276 -0
- package/package.json +54 -5
- package/schemas/plugin-manifest.json +128 -0
- package/scripts/release.js +595 -0
- package/src/alerts.js +693 -0
- package/src/auto-save.js +584 -0
- package/src/cache.js +390 -0
- package/src/checksum.js +146 -0
- package/src/cli/args.js +110 -0
- package/src/cli/export-schedule.js +423 -0
- package/src/cli/export-snapshot.js +138 -0
- package/src/cli/help.js +69 -0
- package/src/cli/import-snapshot.js +230 -0
- package/src/cli/index.js +14 -0
- package/src/cli/list-templates.js +69 -0
- package/src/cli/validate-config.js +76 -0
- package/src/cli/validate-plugin.js +187 -0
- package/src/cli/version.js +15 -0
- package/src/config-validator.js +586 -0
- package/src/config-watcher.js +401 -0
- package/src/config.js +684 -0
- package/src/container-detector.js +499 -0
- package/src/database.js +734 -0
- package/src/differential-render.js +327 -0
- package/src/errors.js +169 -0
- package/src/export-scheduler.js +581 -0
- package/src/gateway-manager.js +685 -0
- package/src/hints.js +371 -0
- package/src/loading-states.js +509 -0
- package/src/logger.js +185 -0
- package/src/memory-pressure.js +467 -0
- package/src/performance-monitor.js +374 -0
- package/src/plugin-errors.js +586 -0
- package/src/plugin-manifest-validator.js +219 -0
- package/src/plugin-reload.js +481 -0
- package/src/plugin-scaffold.js +1941 -0
- package/src/plugin-validator.js +284 -0
- package/src/retry.js +218 -0
- package/src/security.js +860 -0
- package/src/snapshot.js +372 -0
- package/src/splash.js +115 -0
- package/src/theme-selector.js +411 -0
- package/src/themes.js +874 -0
- package/src/transitions.js +534 -0
- package/src/types.d.ts +174 -0
- package/src/validation.js +926 -0
- package/src/web-server.js +885 -0
- package/src/widgets/builtin-widgets.js +1057 -0
- package/src/widgets/config-processor.js +401 -0
- package/src/widgets/dependency-resolver.js +596 -0
- package/src/widgets/index.js +79 -0
- package/src/widgets/plugin-api.js +845 -0
- package/src/widgets/widget-error-boundary.js +773 -0
- package/src/widgets/widget-error-isolation.js +551 -0
- package/src/widgets/widget-loader.js +1437 -0
- package/src/workers/system-worker.js +130 -0
- package/src/workers/worker-pool.js +633 -0
- package/tests/alerts.test.js +437 -0
- package/tests/auto-save.test.js +529 -0
- package/tests/cache.test.js +317 -0
- package/tests/cli.test.js +351 -0
- package/tests/command-palette.test.js +320 -0
- package/tests/config-processor.test.js +452 -0
- package/tests/config-validator.test.js +710 -0
- package/tests/config-watcher.test.js +594 -0
- package/tests/config.test.js +755 -0
- package/tests/database.test.js +438 -0
- package/tests/errors.test.js +189 -0
- package/tests/example-plugins.test.js +624 -0
- package/tests/integration.test.js +1321 -0
- package/tests/loading-states.test.js +300 -0
- package/tests/manifest-validation-on-load.test.js +671 -0
- package/tests/performance-monitor.test.js +190 -0
- package/tests/plugin-api-rate-limit.test.js +302 -0
- package/tests/plugin-errors.test.js +311 -0
- package/tests/plugin-lifecycle-e2e.test.js +1036 -0
- package/tests/plugin-reload.test.js +764 -0
- package/tests/rate-limiter.test.js +539 -0
- package/tests/retry.test.js +308 -0
- package/tests/security.test.js +411 -0
- package/tests/settings-modal.test.js +226 -0
- package/tests/theme-selector.test.js +57 -0
- package/tests/utils.js +242 -0
- package/tests/utils.test.js +317 -0
- package/tests/validate-plugin-cli.test.js +359 -0
- package/tests/validation.test.js +837 -0
- package/tests/web-server.test.js +646 -0
- package/tests/widget-arrange-mode.test.js +183 -0
- package/tests/widget-config-hot-reload.test.js +465 -0
- package/tests/widget-dependency.test.js +591 -0
- package/tests/widget-error-boundary.test.js +749 -0
- package/tests/widget-error-isolation.test.js +469 -0
- package/tests/widget-integration.test.js +1147 -0
- package/tests/widget-refresh-intervals.test.js +284 -0
- package/tests/worker-pool.test.js +522 -0
package/jest.config.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
testEnvironment: 'node',
|
|
3
|
+
transform: {},
|
|
4
|
+
moduleFileExtensions: ['js', 'mjs'],
|
|
5
|
+
testMatch: ['**/tests/**/*.test.js'],
|
|
6
|
+
// c8 handles coverage - Jest coverage disabled
|
|
7
|
+
collectCoverage: false,
|
|
8
|
+
coverageProvider: 'v8',
|
|
9
|
+
verbose: true,
|
|
10
|
+
testTimeout: 10000,
|
|
11
|
+
};
|
package/man/clawdash.1
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
.TH CLAWDASH 1 "February 2026" "claw-dashboard 2.0.0" "User Commands"
|
|
2
|
+
.SH NAME
|
|
3
|
+
clawdash \- A beautiful terminal dashboard for monitoring OpenClaw instances
|
|
4
|
+
.SH SYNOPSIS
|
|
5
|
+
.B clawdash
|
|
6
|
+
[\fIOPTIONS\fR]
|
|
7
|
+
.SH DESCRIPTION
|
|
8
|
+
.B clawdash
|
|
9
|
+
is a real-time terminal dashboard for monitoring OpenClaw instances,
|
|
10
|
+
inspired by modern system monitors like btop, htop, and mactop.
|
|
11
|
+
It provides beautiful visualizations including ASCII art logo, gradient
|
|
12
|
+
colors, donut charts, progress bars, and sparklines.
|
|
13
|
+
.PP
|
|
14
|
+
The dashboard displays:
|
|
15
|
+
.IP \(bu 2
|
|
16
|
+
System stats (CPU, memory, GPU, disk, network)
|
|
17
|
+
.IP \(bu 2
|
|
18
|
+
OpenClaw sessions list with real-time updates
|
|
19
|
+
.IP \(bu 2
|
|
20
|
+
OpenClaw agents list
|
|
21
|
+
.IP \(bu 2
|
|
22
|
+
Uptime tracking
|
|
23
|
+
.IP \(bu 2
|
|
24
|
+
OpenClaw logs
|
|
25
|
+
.IP \(bu 2
|
|
26
|
+
Settings panel for customization
|
|
27
|
+
.SH OPTIONS
|
|
28
|
+
.TP
|
|
29
|
+
.BR \-h ", " \-\-help
|
|
30
|
+
Display help message and exit.
|
|
31
|
+
.TP
|
|
32
|
+
.BR \-v ", " \-\-version
|
|
33
|
+
Display version information and exit.
|
|
34
|
+
.TP
|
|
35
|
+
.BR \-d ", " \-\-debug
|
|
36
|
+
Run in debug mode with additional logging output.
|
|
37
|
+
.TP
|
|
38
|
+
.BR \-c ", " \-\-config " "\fICONFIG\fR
|
|
39
|
+
Use alternative configuration file.
|
|
40
|
+
.TP
|
|
41
|
+
.BR \-w ", " \-\-web
|
|
42
|
+
Run in web server mode instead of TUI. Exposes dashboard data via HTTP API.
|
|
43
|
+
.TP
|
|
44
|
+
.BR \-p ", " \-\-web-port " "\fIPORT\fR
|
|
45
|
+
Set the web server port (default: 18790). Requires \-\-web option.
|
|
46
|
+
.TP
|
|
47
|
+
.B "\-\-web-host "\fIHOST\fR
|
|
48
|
+
Set the web server bind host (default: 0.0.0.0). Requires \-\-web option.
|
|
49
|
+
.SH CONTROLS
|
|
50
|
+
.SS Navigation
|
|
51
|
+
.TP
|
|
52
|
+
.BR q ", " Q ", " Ctrl+C
|
|
53
|
+
Quit the dashboard.
|
|
54
|
+
.TP
|
|
55
|
+
.BR r ", " R
|
|
56
|
+
Force refresh all data immediately.
|
|
57
|
+
.TP
|
|
58
|
+
.BR p ", " Space
|
|
59
|
+
Pause or resume auto-refresh.
|
|
60
|
+
.TP
|
|
61
|
+
.BR ? ", " h
|
|
62
|
+
Toggle the help panel.
|
|
63
|
+
.TP
|
|
64
|
+
.BR s ", " S
|
|
65
|
+
Open or close the settings panel.
|
|
66
|
+
.TP
|
|
67
|
+
.BR Esc
|
|
68
|
+
Close the settings panel (when open).
|
|
69
|
+
.SS Session Sorting
|
|
70
|
+
.TP
|
|
71
|
+
.B o
|
|
72
|
+
Cycle through session sort modes:
|
|
73
|
+
.RS
|
|
74
|
+
.IP \(bu 2
|
|
75
|
+
time - Most recently updated first (default)
|
|
76
|
+
.IP \(bu 2
|
|
77
|
+
tokens - Highest token usage first
|
|
78
|
+
.IP \(bu 2
|
|
79
|
+
idle - Longest idle time first
|
|
80
|
+
.IP \(bu 2
|
|
81
|
+
name - Alphabetical by agent name
|
|
82
|
+
.RE
|
|
83
|
+
.SS Widget Toggles
|
|
84
|
+
.TP
|
|
85
|
+
.BR 1 \- 8
|
|
86
|
+
Toggle individual widgets:
|
|
87
|
+
.RS
|
|
88
|
+
.IP \(bu 2
|
|
89
|
+
1 - CPU widget
|
|
90
|
+
.IP \(bu 2
|
|
91
|
+
2 - Memory widget
|
|
92
|
+
.IP \(bu 2
|
|
93
|
+
3 - GPU widget
|
|
94
|
+
.IP \(bu 2
|
|
95
|
+
4 - Network widget
|
|
96
|
+
.IP \(bu 2
|
|
97
|
+
5 - Disk widget
|
|
98
|
+
.IP \(bu 2
|
|
99
|
+
6 - System widget
|
|
100
|
+
.IP \(bu 2
|
|
101
|
+
7 - Uptime widget
|
|
102
|
+
.IP \(bu 2
|
|
103
|
+
8 - Health widget
|
|
104
|
+
.RE
|
|
105
|
+
.TP
|
|
106
|
+
.B 0
|
|
107
|
+
Cycle log level filter.
|
|
108
|
+
.SS Vi-Mode Navigation
|
|
109
|
+
.TP
|
|
110
|
+
.BR h ", " l
|
|
111
|
+
Previous/next page.
|
|
112
|
+
.TP
|
|
113
|
+
.BR j ", " k
|
|
114
|
+
Select next/previous session.
|
|
115
|
+
.TP
|
|
116
|
+
.BR g ", " G
|
|
117
|
+
Go to first/last page.
|
|
118
|
+
.TP
|
|
119
|
+
.BR Ctrl+B ", " Ctrl+F
|
|
120
|
+
Page up/down.
|
|
121
|
+
.SS Data Export
|
|
122
|
+
.TP
|
|
123
|
+
.B e
|
|
124
|
+
Export dashboard data (JSON/CSV).
|
|
125
|
+
.TP
|
|
126
|
+
.B E
|
|
127
|
+
Cycle export format between JSON and CSV.
|
|
128
|
+
.SS Favorites
|
|
129
|
+
.TP
|
|
130
|
+
.B f
|
|
131
|
+
Toggle favorite status on current session.
|
|
132
|
+
.TP
|
|
133
|
+
.B F
|
|
134
|
+
Show favorites only (toggle filter).
|
|
135
|
+
.SS Themes
|
|
136
|
+
.TP
|
|
137
|
+
.B t
|
|
138
|
+
Cycle through available themes:
|
|
139
|
+
.RS
|
|
140
|
+
.IP \(bu 2
|
|
141
|
+
default - Standard color scheme
|
|
142
|
+
.IP \(bu 2
|
|
143
|
+
dark - Dark color scheme
|
|
144
|
+
.IP \(bu 2
|
|
145
|
+
high-contrast - High contrast accessibility theme
|
|
146
|
+
.IP \(bu 2
|
|
147
|
+
ocean - Ocean-inspired blue tones
|
|
148
|
+
.RE
|
|
149
|
+
.SH FILES
|
|
150
|
+
.TP
|
|
151
|
+
.I ~/.openclaw/dashboard-settings.json
|
|
152
|
+
User settings file containing refresh interval, widget visibility,
|
|
153
|
+
theme preferences, and sort mode.
|
|
154
|
+
.TP
|
|
155
|
+
.I ~/.openclaw/config.json
|
|
156
|
+
OpenClaw configuration file for gateway port and authentication token.
|
|
157
|
+
.TP
|
|
158
|
+
.I ~/Library/Logs/OpenClaw/
|
|
159
|
+
OpenClaw log directory (monitored by the dashboard).
|
|
160
|
+
.SH ENVIRONMENT
|
|
161
|
+
.TP
|
|
162
|
+
.B CLAWDASH_THEME
|
|
163
|
+
Override the default theme. Values: default, dark, high-contrast, ocean.
|
|
164
|
+
.TP
|
|
165
|
+
.B CLAWDASH_REFRESH
|
|
166
|
+
Override the default refresh interval in milliseconds.
|
|
167
|
+
.SH WEB INTERFACE
|
|
168
|
+
When running with the \-\-web option, clawdash starts an HTTP server that
|
|
169
|
+
exposes dashboard data via a REST API. This allows remote monitoring without
|
|
170
|
+
launching the TUI.
|
|
171
|
+
.PP
|
|
172
|
+
Available endpoints:
|
|
173
|
+
.TP
|
|
174
|
+
.B GET /health
|
|
175
|
+
Health check returning server status and uptime.
|
|
176
|
+
.TP
|
|
177
|
+
.B GET /metrics
|
|
178
|
+
System metrics including CPU, memory, GPU, disk, and network.
|
|
179
|
+
.TP
|
|
180
|
+
.B GET /sessions
|
|
181
|
+
List of active OpenClaw sessions.
|
|
182
|
+
.TP
|
|
183
|
+
.B GET /agents
|
|
184
|
+
List of available OpenClaw agents.
|
|
185
|
+
.TP
|
|
186
|
+
.B GET /logs
|
|
187
|
+
Recent OpenClaw logs.
|
|
188
|
+
.TP
|
|
189
|
+
.B GET /status
|
|
190
|
+
Full dashboard status including all data types.
|
|
191
|
+
.PP
|
|
192
|
+
All endpoints return JSON data with CORS headers for cross-origin requests.
|
|
193
|
+
.SH WIDGET PLUGIN SYSTEM
|
|
194
|
+
The dashboard supports a plugin system for custom widgets. Plugins can be
|
|
195
|
+
installed in
|
|
196
|
+
.I ~/.openclaw/plugins/
|
|
197
|
+
and are automatically discovered on startup.
|
|
198
|
+
.PP
|
|
199
|
+
Each plugin consists of:
|
|
200
|
+
.IP \(bu 2
|
|
201
|
+
.I plugin.json
|
|
202
|
+
- Plugin manifest with metadata
|
|
203
|
+
.IP \(bu 2
|
|
204
|
+
.I index.js
|
|
205
|
+
- Widget implementation extending BaseWidget
|
|
206
|
+
.PP
|
|
207
|
+
Configuration options in settings:
|
|
208
|
+
.IP \(bu 2
|
|
209
|
+
widgetLoading.enabled - Enable lazy loading (default: true)
|
|
210
|
+
.IP \(bu 2
|
|
211
|
+
widgetLoading.preloadPriority - Widgets to load immediately
|
|
212
|
+
.IP \(bu 2
|
|
213
|
+
widgetLoading.autoDiscover - Auto-discover plugins (default: true)
|
|
214
|
+
.PP
|
|
215
|
+
See
|
|
216
|
+
.I docs/PLUGINS.md
|
|
217
|
+
for full documentation and examples.
|
|
218
|
+
.SH EXAMPLES
|
|
219
|
+
.PP
|
|
220
|
+
Run the dashboard:
|
|
221
|
+
.RS
|
|
222
|
+
.nf
|
|
223
|
+
$ clawdash
|
|
224
|
+
.fi
|
|
225
|
+
.RE
|
|
226
|
+
.PP
|
|
227
|
+
Run with debug mode:
|
|
228
|
+
.RS
|
|
229
|
+
.nf
|
|
230
|
+
$ clawdash --debug
|
|
231
|
+
.fi
|
|
232
|
+
.RE
|
|
233
|
+
.PP
|
|
234
|
+
Run web server mode on default port (18790):
|
|
235
|
+
.RS
|
|
236
|
+
.nf
|
|
237
|
+
$ clawdash --web
|
|
238
|
+
.fi
|
|
239
|
+
.RE
|
|
240
|
+
.PP
|
|
241
|
+
Run web server on custom port:
|
|
242
|
+
.RS
|
|
243
|
+
.nf
|
|
244
|
+
$ clawdash --web --web-port 8080
|
|
245
|
+
.fi
|
|
246
|
+
.RE
|
|
247
|
+
.PP
|
|
248
|
+
Query the web API:
|
|
249
|
+
.RS
|
|
250
|
+
.nf
|
|
251
|
+
$ curl http://localhost:18790/health
|
|
252
|
+
$ curl http://localhost:18790/metrics
|
|
253
|
+
$ curl http://localhost:18790/status
|
|
254
|
+
.fi
|
|
255
|
+
.RE
|
|
256
|
+
.SH REQUIREMENTS
|
|
257
|
+
.IP \(bu 2
|
|
258
|
+
Node.js v18 or higher
|
|
259
|
+
.IP \(bu 2
|
|
260
|
+
OpenClaw installed and configured
|
|
261
|
+
.IP \(bu 2
|
|
262
|
+
macOS (Apple Silicon optimized)
|
|
263
|
+
.IP \(bu 2
|
|
264
|
+
Terminal with 256 color support
|
|
265
|
+
.SH SEE ALSO
|
|
266
|
+
.BR openclaw (1)
|
|
267
|
+
.SH BUGS
|
|
268
|
+
Report bugs at: https://github.com/spleck/claw-dashboard/issues
|
|
269
|
+
.SH AUTHOR
|
|
270
|
+
Written by Kevin Smith.
|
|
271
|
+
.SH COPYRIGHT
|
|
272
|
+
Copyright 2026 Kevin Smith.
|
|
273
|
+
License: MIT
|
|
274
|
+
.PP
|
|
275
|
+
This is free software; you can redistribute it and/or modify it under
|
|
276
|
+
the terms of the MIT License. There is NO WARRANTY.
|
package/package.json
CHANGED
|
@@ -1,15 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claw-dashboard",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "A beautiful console dashboard for monitoring OpenClaw instances — inspired by htop/btop/mactop",
|
|
5
5
|
"main": "index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": "./index.js",
|
|
9
|
+
"require": "./index.cjs"
|
|
10
|
+
},
|
|
11
|
+
"./widgets": {
|
|
12
|
+
"import": "./src/widgets/index.js",
|
|
13
|
+
"require": "./dist/widgets.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
6
17
|
"bin": {
|
|
7
18
|
"clawdash": "./index.js"
|
|
8
19
|
},
|
|
20
|
+
"man": [
|
|
21
|
+
"./man/clawdash.1"
|
|
22
|
+
],
|
|
9
23
|
"type": "module",
|
|
10
24
|
"scripts": {
|
|
11
25
|
"start": "node index.js",
|
|
12
|
-
"dev": "node index.js --debug"
|
|
26
|
+
"dev": "node index.js --debug",
|
|
27
|
+
"test": "node --experimental-vm-modules node_modules/.bin/jest",
|
|
28
|
+
"test:coverage": "c8 --reporter=text --reporter=html --reporter=lcov npm test",
|
|
29
|
+
"test:coverage:check": "c8 --check-coverage npm test",
|
|
30
|
+
"coverage:report": "c8 report",
|
|
31
|
+
"coverage:clean": "rm -rf coverage",
|
|
32
|
+
"build": "node esbuild.config.js",
|
|
33
|
+
"build:dev": "node esbuild.config.js --dev",
|
|
34
|
+
"build:cjs": "node build-cjs.js",
|
|
35
|
+
"lint": "eslint src/ --ignore-pattern 'src/workers/**'",
|
|
36
|
+
"release": "node scripts/release.js",
|
|
37
|
+
"release:sign": "node scripts/release.js --sign",
|
|
38
|
+
"release:github": "node scripts/release.js --github --sign",
|
|
39
|
+
"prepare": "husky"
|
|
13
40
|
},
|
|
14
41
|
"repository": {
|
|
15
42
|
"type": "git",
|
|
@@ -34,8 +61,30 @@
|
|
|
34
61
|
},
|
|
35
62
|
"dependencies": {
|
|
36
63
|
"blessed": "^0.1.81",
|
|
37
|
-
"blessed-contrib": "^
|
|
38
|
-
"
|
|
39
|
-
"
|
|
64
|
+
"blessed-contrib": "^1.0.11",
|
|
65
|
+
"chalk": "^5.3.0",
|
|
66
|
+
"sql.js": "^1.14.0",
|
|
67
|
+
"systeminformation": "^5.21.22"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@eslint/js": "^10.0.1",
|
|
71
|
+
"c8": "^11.0.0",
|
|
72
|
+
"esbuild": "^0.25.12",
|
|
73
|
+
"eslint": "^10.0.2",
|
|
74
|
+
"husky": "^9.1.7",
|
|
75
|
+
"jest": "^30.2.0",
|
|
76
|
+
"lint-staged": "^16.3.0"
|
|
77
|
+
},
|
|
78
|
+
"lint-staged": {
|
|
79
|
+
"src/**/*.{js,mjs,cjs}": [
|
|
80
|
+
"eslint --fix --ignore-pattern 'src/workers/**'",
|
|
81
|
+
"node --experimental-vm-modules node_modules/.bin/jest --bail --findRelatedTests"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"overrides": {
|
|
85
|
+
"xml2js": "^0.6.2",
|
|
86
|
+
"form-data": "^4.0.0",
|
|
87
|
+
"qs": "^6.14.1",
|
|
88
|
+
"tough-cookie": "^5.0.0"
|
|
40
89
|
}
|
|
41
90
|
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://claw-dashboard.io/schemas/plugin-manifest.json",
|
|
4
|
+
"title": "Claw Dashboard Plugin Manifest",
|
|
5
|
+
"description": "Schema for validating claw-dashboard plugin.json files",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["id", "name", "version", "type"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Unique identifier for the plugin (kebab-case recommended)",
|
|
13
|
+
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$",
|
|
14
|
+
"minLength": 1,
|
|
15
|
+
"maxLength": 64,
|
|
16
|
+
"examples": ["my-custom-widget", "system-metrics-chart"]
|
|
17
|
+
},
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Display name for the widget",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"maxLength": 100,
|
|
23
|
+
"examples": ["My Custom Widget", "System Metrics Chart"]
|
|
24
|
+
},
|
|
25
|
+
"description": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Brief description of the widget",
|
|
28
|
+
"maxLength": 500,
|
|
29
|
+
"default": ""
|
|
30
|
+
},
|
|
31
|
+
"version": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Semantic version (major.minor.patch)",
|
|
34
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$",
|
|
35
|
+
"examples": ["1.0.0", "1.2.3-beta.1"]
|
|
36
|
+
},
|
|
37
|
+
"author": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Author name or email",
|
|
40
|
+
"maxLength": 200,
|
|
41
|
+
"default": "",
|
|
42
|
+
"examples": ["John Doe", "Jane Doe <jane@example.com>"]
|
|
43
|
+
},
|
|
44
|
+
"category": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Category for organization",
|
|
47
|
+
"enum": ["system", "monitoring", "custom", "example"],
|
|
48
|
+
"default": "custom"
|
|
49
|
+
},
|
|
50
|
+
"type": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Plugin type",
|
|
53
|
+
"enum": ["widget"],
|
|
54
|
+
"default": "widget"
|
|
55
|
+
},
|
|
56
|
+
"lazyLoad": {
|
|
57
|
+
"type": "boolean",
|
|
58
|
+
"description": "Whether to defer loading until needed",
|
|
59
|
+
"default": true
|
|
60
|
+
},
|
|
61
|
+
"priority": {
|
|
62
|
+
"type": "number",
|
|
63
|
+
"description": "Loading priority (lower = earlier, range: 0-1000)",
|
|
64
|
+
"minimum": 0,
|
|
65
|
+
"maximum": 1000,
|
|
66
|
+
"default": 100
|
|
67
|
+
},
|
|
68
|
+
"config": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"description": "Default configuration values",
|
|
71
|
+
"default": {},
|
|
72
|
+
"additionalProperties": true
|
|
73
|
+
},
|
|
74
|
+
"entryPoint": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Main JavaScript file (deprecated, use standard index.js)",
|
|
77
|
+
"default": "index.js",
|
|
78
|
+
"deprecated": true
|
|
79
|
+
},
|
|
80
|
+
"permissions": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"description": "Required permissions for the plugin",
|
|
83
|
+
"items": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"enum": ["filesystem", "network", "system", "database", "config"]
|
|
86
|
+
},
|
|
87
|
+
"default": [],
|
|
88
|
+
"uniqueItems": true
|
|
89
|
+
},
|
|
90
|
+
"dependencies": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"description": "Plugin dependencies (other plugin IDs)",
|
|
93
|
+
"items": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$"
|
|
96
|
+
},
|
|
97
|
+
"default": [],
|
|
98
|
+
"uniqueItems": true
|
|
99
|
+
},
|
|
100
|
+
"__version": {
|
|
101
|
+
"type": "number",
|
|
102
|
+
"description": "Widget config schema version for migration tracking",
|
|
103
|
+
"minimum": 1,
|
|
104
|
+
"examples": [1, 2],
|
|
105
|
+
"default": 1
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"definitions": {},
|
|
109
|
+
"examples": [
|
|
110
|
+
{
|
|
111
|
+
"id": "my-custom-widget",
|
|
112
|
+
"name": "My Custom Widget",
|
|
113
|
+
"description": "A widget that displays custom data",
|
|
114
|
+
"version": "1.0.0",
|
|
115
|
+
"author": "Your Name <you@example.com>",
|
|
116
|
+
"category": "monitoring",
|
|
117
|
+
"type": "widget",
|
|
118
|
+
"lazyLoad": true,
|
|
119
|
+
"priority": 50,
|
|
120
|
+
"config": {
|
|
121
|
+
"refreshInterval": 5000,
|
|
122
|
+
"maxDataPoints": 30
|
|
123
|
+
},
|
|
124
|
+
"permissions": ["network"],
|
|
125
|
+
"__version": 1
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|