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.
Files changed (135) hide show
  1. package/.c8rc.json +38 -0
  2. package/.dockerignore +68 -0
  3. package/.github/dependabot.yml +45 -0
  4. package/.github/pull_request_template.md +39 -0
  5. package/.github/workflows/ci.yml +147 -0
  6. package/.github/workflows/release.yml +40 -0
  7. package/.github/workflows/security.yml +84 -0
  8. package/.husky/pre-commit +1 -0
  9. package/.planning/codebase/ARCHITECTURE.md +206 -0
  10. package/.planning/codebase/INTEGRATIONS.md +150 -0
  11. package/.planning/codebase/STACK.md +122 -0
  12. package/.planning/codebase/STRUCTURE.md +201 -0
  13. package/CHANGELOG.md +293 -0
  14. package/CONTRIBUTING.md +378 -0
  15. package/Dockerfile +54 -0
  16. package/FEATURES.md +195 -21
  17. package/README.md +83 -6
  18. package/TODO.md +28 -0
  19. package/build-cjs.js +127 -0
  20. package/cjs-shim.js +13 -0
  21. package/dist/clawdash +1729 -0
  22. package/dist/clawdash.meta.json +2236 -0
  23. package/dist/widgets.cjs +6511 -0
  24. package/docker-compose.yml +67 -0
  25. package/docs/API.md +1050 -0
  26. package/docs/PLUGINS.md +1504 -0
  27. package/esbuild.config.js +158 -0
  28. package/eslint.config.js +56 -0
  29. package/examples/plugins/README.md +122 -0
  30. package/examples/plugins/api-status/index.js +294 -0
  31. package/examples/plugins/api-status/plugin.json +19 -0
  32. package/examples/plugins/hello-world/index.js +104 -0
  33. package/examples/plugins/hello-world/plugin.json +15 -0
  34. package/examples/plugins/system-metrics-chart/index.js +339 -0
  35. package/examples/plugins/system-metrics-chart/plugin.json +18 -0
  36. package/examples/plugins/weather-widget/index.js +136 -0
  37. package/examples/plugins/weather-widget/plugin.json +19 -0
  38. package/index.cjs +23005 -0
  39. package/index.js +5236 -566
  40. package/jest.config.js +11 -0
  41. package/man/clawdash.1 +276 -0
  42. package/package.json +54 -5
  43. package/schemas/plugin-manifest.json +128 -0
  44. package/scripts/release.js +595 -0
  45. package/src/alerts.js +693 -0
  46. package/src/auto-save.js +584 -0
  47. package/src/cache.js +390 -0
  48. package/src/checksum.js +146 -0
  49. package/src/cli/args.js +110 -0
  50. package/src/cli/export-schedule.js +423 -0
  51. package/src/cli/export-snapshot.js +138 -0
  52. package/src/cli/help.js +69 -0
  53. package/src/cli/import-snapshot.js +230 -0
  54. package/src/cli/index.js +14 -0
  55. package/src/cli/list-templates.js +69 -0
  56. package/src/cli/validate-config.js +76 -0
  57. package/src/cli/validate-plugin.js +187 -0
  58. package/src/cli/version.js +15 -0
  59. package/src/config-validator.js +586 -0
  60. package/src/config-watcher.js +401 -0
  61. package/src/config.js +684 -0
  62. package/src/container-detector.js +499 -0
  63. package/src/database.js +734 -0
  64. package/src/differential-render.js +327 -0
  65. package/src/errors.js +169 -0
  66. package/src/export-scheduler.js +581 -0
  67. package/src/gateway-manager.js +685 -0
  68. package/src/hints.js +371 -0
  69. package/src/loading-states.js +509 -0
  70. package/src/logger.js +185 -0
  71. package/src/memory-pressure.js +467 -0
  72. package/src/performance-monitor.js +374 -0
  73. package/src/plugin-errors.js +586 -0
  74. package/src/plugin-manifest-validator.js +219 -0
  75. package/src/plugin-reload.js +481 -0
  76. package/src/plugin-scaffold.js +1941 -0
  77. package/src/plugin-validator.js +284 -0
  78. package/src/retry.js +218 -0
  79. package/src/security.js +860 -0
  80. package/src/snapshot.js +372 -0
  81. package/src/splash.js +115 -0
  82. package/src/theme-selector.js +411 -0
  83. package/src/themes.js +874 -0
  84. package/src/transitions.js +534 -0
  85. package/src/types.d.ts +174 -0
  86. package/src/validation.js +926 -0
  87. package/src/web-server.js +885 -0
  88. package/src/widgets/builtin-widgets.js +1057 -0
  89. package/src/widgets/config-processor.js +401 -0
  90. package/src/widgets/dependency-resolver.js +596 -0
  91. package/src/widgets/index.js +79 -0
  92. package/src/widgets/plugin-api.js +845 -0
  93. package/src/widgets/widget-error-boundary.js +773 -0
  94. package/src/widgets/widget-error-isolation.js +551 -0
  95. package/src/widgets/widget-loader.js +1437 -0
  96. package/src/workers/system-worker.js +130 -0
  97. package/src/workers/worker-pool.js +633 -0
  98. package/tests/alerts.test.js +437 -0
  99. package/tests/auto-save.test.js +529 -0
  100. package/tests/cache.test.js +317 -0
  101. package/tests/cli.test.js +351 -0
  102. package/tests/command-palette.test.js +320 -0
  103. package/tests/config-processor.test.js +452 -0
  104. package/tests/config-validator.test.js +710 -0
  105. package/tests/config-watcher.test.js +594 -0
  106. package/tests/config.test.js +755 -0
  107. package/tests/database.test.js +438 -0
  108. package/tests/errors.test.js +189 -0
  109. package/tests/example-plugins.test.js +624 -0
  110. package/tests/integration.test.js +1321 -0
  111. package/tests/loading-states.test.js +300 -0
  112. package/tests/manifest-validation-on-load.test.js +671 -0
  113. package/tests/performance-monitor.test.js +190 -0
  114. package/tests/plugin-api-rate-limit.test.js +302 -0
  115. package/tests/plugin-errors.test.js +311 -0
  116. package/tests/plugin-lifecycle-e2e.test.js +1036 -0
  117. package/tests/plugin-reload.test.js +764 -0
  118. package/tests/rate-limiter.test.js +539 -0
  119. package/tests/retry.test.js +308 -0
  120. package/tests/security.test.js +411 -0
  121. package/tests/settings-modal.test.js +226 -0
  122. package/tests/theme-selector.test.js +57 -0
  123. package/tests/utils.js +242 -0
  124. package/tests/utils.test.js +317 -0
  125. package/tests/validate-plugin-cli.test.js +359 -0
  126. package/tests/validation.test.js +837 -0
  127. package/tests/web-server.test.js +646 -0
  128. package/tests/widget-arrange-mode.test.js +183 -0
  129. package/tests/widget-config-hot-reload.test.js +465 -0
  130. package/tests/widget-dependency.test.js +591 -0
  131. package/tests/widget-error-boundary.test.js +749 -0
  132. package/tests/widget-error-isolation.test.js +469 -0
  133. package/tests/widget-integration.test.js +1147 -0
  134. package/tests/widget-refresh-intervals.test.js +284 -0
  135. 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": "1.9.0",
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": "^4.11.0",
38
- "systeminformation": "^5.21.22",
39
- "chalk": "^5.3.0"
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
+ }