@webda/debug 4.0.0-beta.3

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 (66) hide show
  1. package/LICENSE +166 -0
  2. package/README.md +95 -0
  3. package/lib/bodycapture.d.ts +66 -0
  4. package/lib/bodycapture.js +162 -0
  5. package/lib/bodycapture.js.map +1 -0
  6. package/lib/debugservice.service.d.ts +166 -0
  7. package/lib/debugservice.service.js +609 -0
  8. package/lib/debugservice.service.js.map +1 -0
  9. package/lib/index.d.ts +7 -0
  10. package/lib/index.js +7 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/introspection.d.ts +115 -0
  13. package/lib/introspection.js +260 -0
  14. package/lib/introspection.js.map +1 -0
  15. package/lib/logbuffer.d.ts +75 -0
  16. package/lib/logbuffer.js +98 -0
  17. package/lib/logbuffer.js.map +1 -0
  18. package/lib/requestlog.d.ts +181 -0
  19. package/lib/requestlog.js +153 -0
  20. package/lib/requestlog.js.map +1 -0
  21. package/lib/tui/client.d.ts +165 -0
  22. package/lib/tui/client.js +220 -0
  23. package/lib/tui/client.js.map +1 -0
  24. package/lib/tui/panels/config.d.ts +79 -0
  25. package/lib/tui/panels/config.js +291 -0
  26. package/lib/tui/panels/config.js.map +1 -0
  27. package/lib/tui/panels/logs.d.ts +106 -0
  28. package/lib/tui/panels/logs.js +342 -0
  29. package/lib/tui/panels/logs.js.map +1 -0
  30. package/lib/tui/panels/models.d.ts +47 -0
  31. package/lib/tui/panels/models.js +193 -0
  32. package/lib/tui/panels/models.js.map +1 -0
  33. package/lib/tui/panels/operations.d.ts +55 -0
  34. package/lib/tui/panels/operations.js +241 -0
  35. package/lib/tui/panels/operations.js.map +1 -0
  36. package/lib/tui/panels/panel.d.ts +55 -0
  37. package/lib/tui/panels/panel.js +31 -0
  38. package/lib/tui/panels/panel.js.map +1 -0
  39. package/lib/tui/panels/requests.d.ts +156 -0
  40. package/lib/tui/panels/requests.js +512 -0
  41. package/lib/tui/panels/requests.js.map +1 -0
  42. package/lib/tui/panels/routes.d.ts +45 -0
  43. package/lib/tui/panels/routes.js +154 -0
  44. package/lib/tui/panels/routes.js.map +1 -0
  45. package/lib/tui/panels/services.d.ts +49 -0
  46. package/lib/tui/panels/services.js +266 -0
  47. package/lib/tui/panels/services.js.map +1 -0
  48. package/lib/tui/tui.d.ts +58 -0
  49. package/lib/tui/tui.js +236 -0
  50. package/lib/tui/tui.js.map +1 -0
  51. package/package.json +60 -0
  52. package/webui/app.js +177 -0
  53. package/webui/components/logs.js +128 -0
  54. package/webui/components/model-graph.js +292 -0
  55. package/webui/components/models.js +213 -0
  56. package/webui/components/operations.js +315 -0
  57. package/webui/components/requests.js +264 -0
  58. package/webui/components/schema-form.js +268 -0
  59. package/webui/components/services.js +248 -0
  60. package/webui/index.html +22 -0
  61. package/webui/logo.svg +1 -0
  62. package/webui/styles.css +685 -0
  63. package/webui/vendor/htm.js +1 -0
  64. package/webui/vendor/preact-hooks.js +2 -0
  65. package/webui/vendor/preact.js +2 -0
  66. package/webui/webda.png +0 -0
@@ -0,0 +1,45 @@
1
+ import { ScrollablePanel } from "./panel.js";
2
+ import { DebugClient } from "../client.js";
3
+ /**
4
+ * Routes panel: displays all registered routes with path, HTTP methods
5
+ * (color-coded), and executor service name.
6
+ */
7
+ export declare class RoutesPanel extends ScrollablePanel {
8
+ private client;
9
+ name: string;
10
+ private routes;
11
+ private visibleRows;
12
+ /**
13
+ * @param client - Debug API client
14
+ */
15
+ constructor(client: DebugClient);
16
+ /**
17
+ * Fetch routes from the debug server.
18
+ */
19
+ refresh(): Promise<void>;
20
+ /**
21
+ * Handle keyboard input.
22
+ * @param key - key name from terminal-kit
23
+ */
24
+ onKey(key: string): void;
25
+ /**
26
+ * Render the routes table.
27
+ * @param term - terminal-kit instance
28
+ * @param startRow - first available row
29
+ * @param endRow - last available row
30
+ * @param width - terminal width in columns
31
+ */
32
+ render(term: any, startRow: number, endRow: number, width: number): void;
33
+ /**
34
+ * Get a color function for an HTTP method.
35
+ * @param term - terminal-kit instance
36
+ * @param method - HTTP method string
37
+ * @param inverse - whether to apply inverse styling
38
+ * @returns bound color function
39
+ */
40
+ private getMethodColor;
41
+ /**
42
+ * Clean up panel resources.
43
+ */
44
+ destroy(): void;
45
+ }
@@ -0,0 +1,154 @@
1
+ import { ScrollablePanel } from "./panel.js";
2
+ /**
3
+ * Routes panel: displays all registered routes with path, HTTP methods
4
+ * (color-coded), and executor service name.
5
+ */
6
+ export class RoutesPanel extends ScrollablePanel {
7
+ /**
8
+ * @param client - Debug API client
9
+ */
10
+ constructor(client) {
11
+ super();
12
+ this.client = client;
13
+ this.name = "Routes";
14
+ this.routes = [];
15
+ this.visibleRows = 0;
16
+ }
17
+ /**
18
+ * Fetch routes from the debug server.
19
+ */
20
+ async refresh() {
21
+ try {
22
+ this.routes = await this.client.getRoutes();
23
+ this.itemCount = this.routes.length;
24
+ this.cursor = Math.min(this.cursor, Math.max(0, this.itemCount - 1));
25
+ }
26
+ catch {
27
+ this.routes = [];
28
+ this.itemCount = 0;
29
+ }
30
+ }
31
+ /**
32
+ * Handle keyboard input.
33
+ * @param key - key name from terminal-kit
34
+ */
35
+ onKey(key) {
36
+ switch (key) {
37
+ case "UP":
38
+ this.moveCursor(-1, this.visibleRows);
39
+ break;
40
+ case "DOWN":
41
+ this.moveCursor(1, this.visibleRows);
42
+ break;
43
+ }
44
+ }
45
+ /**
46
+ * Render the routes table.
47
+ * @param term - terminal-kit instance
48
+ * @param startRow - first available row
49
+ * @param endRow - last available row
50
+ * @param width - terminal width in columns
51
+ */
52
+ render(term, startRow, endRow, width) {
53
+ this.visibleRows = endRow - startRow - 1;
54
+ if (this.routes.length === 0) {
55
+ term.moveTo(1, startRow);
56
+ term.eraseLine();
57
+ term(" No routes found. Is the debug server running?");
58
+ return;
59
+ }
60
+ // Header
61
+ term.moveTo(1, startRow);
62
+ term.eraseLine();
63
+ term.bold(" Path" + " ".repeat(Math.max(1, 40 - 4)) + "Methods" + " ".repeat(Math.max(1, 25 - 7)) + "Executor");
64
+ const dataStart = startRow + 1;
65
+ const visible = endRow - dataStart;
66
+ for (let i = 0; i < visible; i++) {
67
+ const idx = this.scrollOffset + i;
68
+ const row = dataStart + i;
69
+ term.moveTo(1, row);
70
+ term.eraseLine();
71
+ if (idx >= this.routes.length)
72
+ continue;
73
+ const route = this.routes[idx];
74
+ const isSelected = idx === this.cursor;
75
+ const path = (route.path || "unknown").substring(0, 38);
76
+ const methods = route.methods || [];
77
+ const executor = (route.executor || "unknown").substring(0, width - 70);
78
+ const pathCol = ` ${path.padEnd(38)} `;
79
+ if (isSelected) {
80
+ term.inverse(pathCol);
81
+ }
82
+ else {
83
+ term(pathCol);
84
+ }
85
+ // Color-code HTTP methods
86
+ for (let m = 0; m < methods.length; m++) {
87
+ if (m > 0) {
88
+ if (isSelected)
89
+ term.inverse(",");
90
+ else
91
+ term(",");
92
+ }
93
+ const method = methods[m];
94
+ const colorFn = this.getMethodColor(term, method, isSelected);
95
+ colorFn(method);
96
+ }
97
+ // Pad methods column and add executor
98
+ const methodsStr = methods.join(",");
99
+ const remaining = 23 - methodsStr.length;
100
+ const pad = remaining > 0 ? " ".repeat(remaining) : " ";
101
+ if (isSelected) {
102
+ term.inverse(pad + executor);
103
+ const totalLen = pathCol.length + methodsStr.length + pad.length + executor.length;
104
+ const endPad = width - totalLen;
105
+ if (endPad > 0)
106
+ term.inverse(" ".repeat(endPad));
107
+ }
108
+ else {
109
+ term(pad + executor);
110
+ }
111
+ }
112
+ }
113
+ /**
114
+ * Get a color function for an HTTP method.
115
+ * @param term - terminal-kit instance
116
+ * @param method - HTTP method string
117
+ * @param inverse - whether to apply inverse styling
118
+ * @returns bound color function
119
+ */
120
+ getMethodColor(term, method, inverse) {
121
+ const m = method.toUpperCase();
122
+ if (inverse) {
123
+ if (m === "GET")
124
+ return (s) => term.inverse.green(s);
125
+ if (m === "POST")
126
+ return (s) => term.inverse.cyan(s);
127
+ if (m === "PUT")
128
+ return (s) => term.inverse.yellow(s);
129
+ if (m === "DELETE")
130
+ return (s) => term.inverse.red(s);
131
+ if (m === "PATCH")
132
+ return (s) => term.inverse.magenta(s);
133
+ return (s) => term.inverse(s);
134
+ }
135
+ if (m === "GET")
136
+ return (s) => term.green(s);
137
+ if (m === "POST")
138
+ return (s) => term.cyan(s);
139
+ if (m === "PUT")
140
+ return (s) => term.yellow(s);
141
+ if (m === "DELETE")
142
+ return (s) => term.red(s);
143
+ if (m === "PATCH")
144
+ return (s) => term.magenta(s);
145
+ return (s) => term(s);
146
+ }
147
+ /**
148
+ * Clean up panel resources.
149
+ */
150
+ destroy() {
151
+ this.routes = [];
152
+ }
153
+ }
154
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/tui/panels/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { ScrollablePanel } from "./panel.js";
2
+ import { DebugClient } from "../client.js";
3
+ /**
4
+ * Services panel: displays all registered services in a table with
5
+ * color-coded state indicators. Press Enter for detail view with
6
+ * configuration, capabilities, schema, and metrics.
7
+ */
8
+ export declare class ServicesPanel extends ScrollablePanel {
9
+ private client;
10
+ name: string;
11
+ private services;
12
+ private config;
13
+ private visibleRows;
14
+ private detailMode;
15
+ private detailScroll;
16
+ /**
17
+ * @param client - Debug API client
18
+ */
19
+ constructor(client: DebugClient);
20
+ /**
21
+ * Fetch services and config from the debug server.
22
+ */
23
+ refresh(): Promise<void>;
24
+ /**
25
+ * Handle keyboard input.
26
+ * @param key - key name from terminal-kit
27
+ */
28
+ onKey(key: string): void;
29
+ /**
30
+ * Render the services table or detail view.
31
+ * @param term - terminal-kit instance
32
+ * @param startRow - first available row
33
+ * @param endRow - last available row
34
+ * @param width - terminal width in columns
35
+ */
36
+ render(term: any, startRow: number, endRow: number, width: number): void;
37
+ /**
38
+ * Render detail view for the selected service.
39
+ * @param term - terminal-kit instance
40
+ * @param startRow - first available row
41
+ * @param endRow - last available row
42
+ * @param width - terminal width in columns
43
+ */
44
+ private renderDetail;
45
+ /**
46
+ * Clean up panel resources.
47
+ */
48
+ destroy(): void;
49
+ }
@@ -0,0 +1,266 @@
1
+ import { ScrollablePanel } from "./panel.js";
2
+ /**
3
+ * Services panel: displays all registered services in a table with
4
+ * color-coded state indicators. Press Enter for detail view with
5
+ * configuration, capabilities, schema, and metrics.
6
+ */
7
+ export class ServicesPanel extends ScrollablePanel {
8
+ /**
9
+ * @param client - Debug API client
10
+ */
11
+ constructor(client) {
12
+ super();
13
+ this.client = client;
14
+ this.name = "Services";
15
+ this.services = [];
16
+ this.config = {};
17
+ this.visibleRows = 0;
18
+ this.detailMode = false;
19
+ this.detailScroll = 0;
20
+ }
21
+ /**
22
+ * Fetch services and config from the debug server.
23
+ */
24
+ async refresh() {
25
+ try {
26
+ const [services, config] = await Promise.all([this.client.getServices(), this.client.getConfig()]);
27
+ this.services = services;
28
+ this.config = config || {};
29
+ this.itemCount = this.services.length;
30
+ this.cursor = Math.min(this.cursor, Math.max(0, this.itemCount - 1));
31
+ }
32
+ catch {
33
+ this.services = [];
34
+ this.config = {};
35
+ this.itemCount = 0;
36
+ }
37
+ }
38
+ /**
39
+ * Handle keyboard input.
40
+ * @param key - key name from terminal-kit
41
+ */
42
+ onKey(key) {
43
+ if (this.detailMode) {
44
+ switch (key) {
45
+ case "ESCAPE":
46
+ case "BACKSPACE":
47
+ this.detailMode = false;
48
+ this.detailScroll = 0;
49
+ break;
50
+ case "UP":
51
+ this.detailScroll = Math.max(0, this.detailScroll - 1);
52
+ break;
53
+ case "DOWN":
54
+ this.detailScroll++;
55
+ break;
56
+ }
57
+ return;
58
+ }
59
+ switch (key) {
60
+ case "UP":
61
+ this.moveCursor(-1, this.visibleRows);
62
+ break;
63
+ case "DOWN":
64
+ this.moveCursor(1, this.visibleRows);
65
+ break;
66
+ case "ENTER":
67
+ if (this.services.length > 0) {
68
+ this.detailMode = true;
69
+ this.detailScroll = 0;
70
+ }
71
+ break;
72
+ }
73
+ }
74
+ /**
75
+ * Render the services table or detail view.
76
+ * @param term - terminal-kit instance
77
+ * @param startRow - first available row
78
+ * @param endRow - last available row
79
+ * @param width - terminal width in columns
80
+ */
81
+ render(term, startRow, endRow, width) {
82
+ this.visibleRows = endRow - startRow - 1;
83
+ if (this.services.length === 0) {
84
+ term.moveTo(1, startRow);
85
+ term.eraseLine();
86
+ term(" No services found. Is the debug server running?");
87
+ return;
88
+ }
89
+ if (this.detailMode) {
90
+ this.renderDetail(term, startRow, endRow, width);
91
+ return;
92
+ }
93
+ // Global Parameters header
94
+ const params = this.config?.parameters || {};
95
+ const paramKeys = Object.keys(params);
96
+ let row = startRow;
97
+ if (paramKeys.length > 0) {
98
+ term.moveTo(1, row);
99
+ term.eraseLine();
100
+ term.bold.cyan(" Global Parameters");
101
+ row++;
102
+ for (const key of paramKeys.slice(0, 3)) {
103
+ if (row >= endRow)
104
+ break;
105
+ term.moveTo(1, row);
106
+ term.eraseLine();
107
+ const val = typeof params[key] === "object" ? JSON.stringify(params[key]) : String(params[key]);
108
+ term.dim(` ${key}`);
109
+ term.dim(" = ");
110
+ term(`${val.substring(0, width - key.length - 10)}`);
111
+ row++;
112
+ }
113
+ if (paramKeys.length > 3) {
114
+ term.moveTo(1, row);
115
+ term.eraseLine();
116
+ term.dim(` ... and ${paramKeys.length - 3} more`);
117
+ row++;
118
+ }
119
+ term.moveTo(1, row);
120
+ term.eraseLine();
121
+ row++;
122
+ }
123
+ // Header
124
+ term.moveTo(1, row);
125
+ term.eraseLine();
126
+ term.bold(" Name" + " ".repeat(Math.max(1, 30 - 4)) + "Type" + " ".repeat(Math.max(1, 30 - 4)) + "State");
127
+ row++;
128
+ const visible = endRow - row;
129
+ for (let i = 0; i < visible; i++) {
130
+ const idx = this.scrollOffset + i;
131
+ const r = row + i;
132
+ term.moveTo(1, r);
133
+ term.eraseLine();
134
+ if (idx >= this.services.length)
135
+ continue;
136
+ const svc = this.services[idx];
137
+ const isSelected = idx === this.cursor;
138
+ const name = (svc.name || "unknown").substring(0, 28);
139
+ const type = (svc.type || "unknown").substring(0, 28);
140
+ const state = svc.state || "unknown";
141
+ const prefix = ` ${name.padEnd(28)} ${type.padEnd(28)} `;
142
+ if (isSelected) {
143
+ term.inverse(prefix);
144
+ }
145
+ else {
146
+ term(prefix);
147
+ }
148
+ const sl = state.toLowerCase();
149
+ if (sl === "running" || sl === "resolved") {
150
+ if (isSelected)
151
+ term.inverse.green(state);
152
+ else
153
+ term.green(state);
154
+ }
155
+ else if (sl === "stopped" || sl === "error" || sl === "failed") {
156
+ if (isSelected)
157
+ term.inverse.red(state);
158
+ else
159
+ term.red(state);
160
+ }
161
+ else {
162
+ if (isSelected)
163
+ term.inverse.yellow(state);
164
+ else
165
+ term.yellow(state);
166
+ }
167
+ if (isSelected) {
168
+ const remaining = width - prefix.length - state.length;
169
+ if (remaining > 0)
170
+ term.inverse(" ".repeat(remaining));
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Render detail view for the selected service.
176
+ * @param term - terminal-kit instance
177
+ * @param startRow - first available row
178
+ * @param endRow - last available row
179
+ * @param width - terminal width in columns
180
+ */
181
+ renderDetail(term, startRow, endRow, width) {
182
+ const svc = this.services[this.cursor];
183
+ if (!svc)
184
+ return;
185
+ const lines = [];
186
+ const addText = function addTextLine(text, style) {
187
+ lines.push({
188
+ render: function renderText(t, w) {
189
+ if (style === "bold")
190
+ t.bold(text.substring(0, w));
191
+ else if (style === "dim")
192
+ t.dim(text.substring(0, w));
193
+ else if (style === "cyan")
194
+ t.cyan(text.substring(0, w));
195
+ else
196
+ t(text.substring(0, w));
197
+ }
198
+ });
199
+ };
200
+ const addEmpty = function addEmptyLine() {
201
+ lines.push({ render: function renderEmpty() { } });
202
+ };
203
+ addText(` Service: ${svc.name}`, "bold");
204
+ addText(` Type: ${svc.type} | State: ${svc.state}`);
205
+ addEmpty();
206
+ // Capabilities
207
+ const caps = Object.keys(svc.capabilities || {});
208
+ if (caps.length > 0) {
209
+ addText(" Capabilities:", "bold");
210
+ addText(` ${caps.join(", ")}`);
211
+ addEmpty();
212
+ }
213
+ // Configuration
214
+ const config = svc.configuration || {};
215
+ const configKeys = Object.keys(config).filter(k => !k.startsWith("_"));
216
+ if (configKeys.length > 0) {
217
+ addText(" Configuration:", "bold");
218
+ for (const key of configKeys) {
219
+ const val = typeof config[key] === "object" ? JSON.stringify(config[key]) : String(config[key]);
220
+ addText(` ${key}: ${val}`);
221
+ }
222
+ addEmpty();
223
+ }
224
+ // Schema properties
225
+ const schema = svc.schema;
226
+ if (schema?.properties) {
227
+ addText(" Schema Properties:", "bold");
228
+ for (const [name, prop] of Object.entries(schema.properties)) {
229
+ const desc = prop.description ? ` - ${prop.description.substring(0, 60)}` : "";
230
+ const def = prop.default !== undefined ? ` [default: ${JSON.stringify(prop.default)}]` : "";
231
+ addText(` ${name} (${prop.type || "ref"})${desc}${def}`);
232
+ }
233
+ addEmpty();
234
+ }
235
+ // Metrics
236
+ if (svc.metrics?.length > 0) {
237
+ addText(" Metrics:", "bold");
238
+ for (const m of svc.metrics) {
239
+ const val = m.values?.length ? m.values.reduce((a, v) => a + (v.value || 0), 0) : 0;
240
+ addText(` ${m.name} [${m.type}] = ${val}${m.help ? " " + m.help : ""}`);
241
+ }
242
+ addEmpty();
243
+ }
244
+ addText(" Press ESC to go back", "dim");
245
+ // Render with scroll
246
+ const visible = endRow - startRow;
247
+ this.detailScroll = Math.min(this.detailScroll, Math.max(0, lines.length - visible));
248
+ for (let i = 0; i < visible; i++) {
249
+ const lineIdx = this.detailScroll + i;
250
+ const row = startRow + i;
251
+ term.moveTo(1, row);
252
+ term.eraseLine();
253
+ if (lineIdx < lines.length) {
254
+ lines[lineIdx].render(term, width);
255
+ }
256
+ }
257
+ }
258
+ /**
259
+ * Clean up panel resources.
260
+ */
261
+ destroy() {
262
+ this.services = [];
263
+ this.config = {};
264
+ }
265
+ }
266
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/tui/panels/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Terminal UI dashboard for the Webda debug server.
3
+ *
4
+ * Provides a tab-based interface with seven panels (Logs, Models, Services,
5
+ * Operations, Routes, Config, Requests) and live WebSocket updates.
6
+ * Connect to an already-running debug server started with `webda debug`.
7
+ */
8
+ export declare class DebugTui {
9
+ private client;
10
+ private panels;
11
+ private logsPanel;
12
+ private activeTab;
13
+ private running;
14
+ /** Called once the TUI stopped (user quit) */
15
+ onStop?: () => void;
16
+ private renderTimer?;
17
+ private lastRefresh;
18
+ private wsUnsubscribe?;
19
+ private appInfo;
20
+ /**
21
+ * Create a new TUI instance.
22
+ *
23
+ * @param port - Port of the debug server to connect to
24
+ */
25
+ constructor(port?: number);
26
+ /**
27
+ * Start the TUI: initialize terminal, load data, and begin rendering.
28
+ */
29
+ start(): Promise<void>;
30
+ /**
31
+ * Refresh data for all panels.
32
+ */
33
+ private refreshAll;
34
+ /**
35
+ * Handle keyboard input.
36
+ * @param key - key name from terminal-kit
37
+ */
38
+ private handleKey;
39
+ /**
40
+ * Full render: header, panel content, status bar.
41
+ */
42
+ private render;
43
+ /**
44
+ * Render the header/tab bar.
45
+ * @param width - terminal width in columns
46
+ */
47
+ private renderHeader;
48
+ /**
49
+ * Render the status bar at the bottom.
50
+ * @param width - terminal width in columns
51
+ * @param height - terminal height in rows
52
+ */
53
+ private renderStatusBar;
54
+ /**
55
+ * Stop the TUI and clean up.
56
+ */
57
+ stop(): void;
58
+ }