@shardworks/dashboard-apparatus 0.1.113

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAg/BD,CAAC;AACT,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @shardworks/dashboard-apparatus — The Dashboard.
3
+ *
4
+ * Web-based guild operations dashboard. Exposes the `dashboard-start` CLI
5
+ * tool which launches a local web server with a live operations UI including
6
+ * tabs for Overview, Clerk, Walker, Animator, and Codexes.
7
+ *
8
+ * Usage:
9
+ * nsg dashboard start
10
+ * nsg dashboard start --port 8080
11
+ * nsg dashboard start --no-open
12
+ */
13
+ export { createDashboard } from './dashboard.ts';
14
+ declare const _default: import("@shardworks/nexus-core").Plugin;
15
+ export default _default;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;;AAIjD,wBAAiC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @shardworks/dashboard-apparatus — The Dashboard.
3
+ *
4
+ * Web-based guild operations dashboard. Exposes the `dashboard-start` CLI
5
+ * tool which launches a local web server with a live operations UI including
6
+ * tabs for Overview, Clerk, Walker, Animator, and Codexes.
7
+ *
8
+ * Usage:
9
+ * nsg dashboard start
10
+ * nsg dashboard start --port 8080
11
+ * nsg dashboard start --no-open
12
+ */
13
+ import { createDashboard } from "./dashboard.js";
14
+ export { createDashboard } from "./dashboard.js";
15
+ // ── Default export: the apparatus plugin ──────────────────────────
16
+ export default createDashboard();
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,qEAAqE;AAErE,eAAe,eAAe,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Local type stubs for Walker rig documents read via Stacks readBook().
3
+ */
4
+ export interface EngineInstance {
5
+ id: string;
6
+ designId: string;
7
+ status: 'pending' | 'running' | 'completed' | 'failed';
8
+ upstream: string[];
9
+ givensSpec: Record<string, unknown>;
10
+ yields?: unknown;
11
+ error?: string;
12
+ sessionId?: string;
13
+ startedAt?: string;
14
+ completedAt?: string;
15
+ }
16
+ export interface RigDoc {
17
+ id: string;
18
+ writId: string;
19
+ status: 'running' | 'completed' | 'failed';
20
+ engines: EngineInstance[];
21
+ [key: string]: unknown;
22
+ }
23
+ //# sourceMappingURL=rig-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rig-types.d.ts","sourceRoot":"","sources":["../src/rig-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Local type stubs for Walker rig documents read via Stacks readBook().
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=rig-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rig-types.js","sourceRoot":"","sources":["../src/rig-types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Dashboard HTTP server.
3
+ *
4
+ * Serves the web UI at / and REST API endpoints at /api/*.
5
+ * Uses only Node built-ins — no express or other dependencies.
6
+ */
7
+ export interface DashboardServer {
8
+ port: number;
9
+ url: string;
10
+ close(): Promise<void>;
11
+ }
12
+ export declare function startServer(port: number): Promise<DashboardServer>;
13
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiRH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA0BxE"}
package/dist/server.js ADDED
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Dashboard HTTP server.
3
+ *
4
+ * Serves the web UI at / and REST API endpoints at /api/*.
5
+ * Uses only Node built-ins — no express or other dependencies.
6
+ */
7
+ import http from 'node:http';
8
+ import { guild } from '@shardworks/nexus-core';
9
+ import { getDashboardHtml } from "./html.js";
10
+ // ── Helpers ───────────────────────────────────────────────────────
11
+ function json(res, data, status = 200) {
12
+ const body = JSON.stringify(data);
13
+ res.writeHead(status, {
14
+ 'Content-Type': 'application/json',
15
+ 'Content-Length': Buffer.byteLength(body),
16
+ 'Cache-Control': 'no-cache',
17
+ });
18
+ res.end(body);
19
+ }
20
+ function error(res, msg, status = 500) {
21
+ res.writeHead(status, { 'Content-Type': 'text/plain' });
22
+ res.end(msg);
23
+ }
24
+ async function readBody(req) {
25
+ return new Promise((resolve, reject) => {
26
+ let raw = '';
27
+ req.on('data', chunk => { raw += chunk; });
28
+ req.on('end', () => {
29
+ try {
30
+ resolve(JSON.parse(raw || '{}'));
31
+ }
32
+ catch {
33
+ reject(new Error('Invalid JSON body'));
34
+ }
35
+ });
36
+ req.on('error', reject);
37
+ });
38
+ }
39
+ function parseQS(url) {
40
+ const qm = url.indexOf('?');
41
+ if (qm < 0)
42
+ return {};
43
+ return Object.fromEntries(new URLSearchParams(url.slice(qm + 1)));
44
+ }
45
+ function pathname(url) {
46
+ const qm = url.indexOf('?');
47
+ return qm < 0 ? url : url.slice(0, qm);
48
+ }
49
+ function tryApparatus(name) {
50
+ try {
51
+ return guild().apparatus(name);
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ // ── Request router ────────────────────────────────────────────────
58
+ async function handleRequest(req, res) {
59
+ const method = req.method ?? 'GET';
60
+ const path = pathname(req.url ?? '/');
61
+ const qs = parseQS(req.url ?? '');
62
+ // ── Web UI ──────────────────────────────────────────────────────
63
+ if (path === '/' || path === '/index.html') {
64
+ const html = getDashboardHtml();
65
+ res.writeHead(200, {
66
+ 'Content-Type': 'text/html; charset=utf-8',
67
+ 'Content-Length': Buffer.byteLength(html),
68
+ });
69
+ res.end(html);
70
+ return;
71
+ }
72
+ // ── API: Overview ───────────────────────────────────────────────
73
+ if (path === '/api/overview' && method === 'GET') {
74
+ try {
75
+ const g = guild();
76
+ const config = g.guildConfig();
77
+ const plugins = [
78
+ ...g.kits().map(k => ({ id: k.id, version: k.version, type: 'kit' })),
79
+ ...g.apparatuses().map(a => ({ id: a.id, version: a.version, type: 'apparatus' })),
80
+ ].sort((a, b) => a.id.localeCompare(b.id));
81
+ const counts = {};
82
+ const clerk = tryApparatus('clerk');
83
+ if (clerk) {
84
+ counts.writs = await clerk.count();
85
+ counts.ready = await clerk.count({ status: 'ready' });
86
+ counts.active = await clerk.count({ status: 'active' });
87
+ }
88
+ const stacks = tryApparatus('stacks');
89
+ if (stacks) {
90
+ try {
91
+ const sessions = stacks.readBook('animator', 'sessions');
92
+ counts.sessions = await sessions.count();
93
+ counts.runningSessions = await sessions.count([['status', '=', 'running']]);
94
+ }
95
+ catch { /* animator not installed */ }
96
+ try {
97
+ const rigs = stacks.readBook('walker', 'rigs');
98
+ counts.rigs = await rigs.count();
99
+ counts.runningRigs = await rigs.count([['status', '=', 'running']]);
100
+ }
101
+ catch { /* walker not installed */ }
102
+ }
103
+ const scriptorium = tryApparatus('codexes');
104
+ if (scriptorium) {
105
+ const codexList = await scriptorium.list();
106
+ counts.codexes = codexList.length;
107
+ counts.codexNames = codexList.map(c => c.name);
108
+ }
109
+ json(res, { guild: config, plugins, counts });
110
+ }
111
+ catch (e) {
112
+ error(res, e.message);
113
+ }
114
+ return;
115
+ }
116
+ // ── API: Writs ──────────────────────────────────────────────────
117
+ if (path === '/api/writs' && method === 'GET') {
118
+ const clerk = tryApparatus('clerk');
119
+ if (!clerk) {
120
+ error(res, 'Clerk apparatus not installed', 404);
121
+ return;
122
+ }
123
+ try {
124
+ const filters = {};
125
+ if (qs.status)
126
+ filters.status = qs.status;
127
+ if (qs.type)
128
+ filters.type = qs.type;
129
+ filters.limit = qs.limit ? parseInt(qs.limit, 10) : 20;
130
+ filters.offset = qs.offset ? parseInt(qs.offset, 10) : 0;
131
+ const [writs, total] = await Promise.all([
132
+ clerk.list(filters),
133
+ clerk.count({ status: filters.status, type: filters.type }),
134
+ ]);
135
+ // Derive declared types from guild config
136
+ const clerkConfig = guild().guildConfig().clerk;
137
+ const types = ['mandate', ...(clerkConfig?.writTypes?.map(t => t.name) ?? [])];
138
+ json(res, { writs, total, types });
139
+ }
140
+ catch (e) {
141
+ error(res, e.message);
142
+ }
143
+ return;
144
+ }
145
+ if (path === '/api/writs' && method === 'POST') {
146
+ const clerk = tryApparatus('clerk');
147
+ if (!clerk) {
148
+ error(res, 'Clerk apparatus not installed', 404);
149
+ return;
150
+ }
151
+ try {
152
+ const body = await readBody(req);
153
+ const writ = await clerk.post({
154
+ title: body.title,
155
+ body: body.body,
156
+ ...(body.type ? { type: body.type } : {}),
157
+ ...(body.codex ? { codex: body.codex } : {}),
158
+ });
159
+ json(res, writ, 201);
160
+ }
161
+ catch (e) {
162
+ error(res, e.message, 400);
163
+ }
164
+ return;
165
+ }
166
+ // ── API: Writ transition ─────────────────────────────────────────
167
+ const transMatch = path.match(/^\/api\/writs\/([^/]+)\/transition$/);
168
+ if (transMatch && method === 'POST') {
169
+ const clerk = tryApparatus('clerk');
170
+ if (!clerk) {
171
+ error(res, 'Clerk apparatus not installed', 404);
172
+ return;
173
+ }
174
+ try {
175
+ const id = transMatch[1];
176
+ const body = await readBody(req);
177
+ const fields = {};
178
+ if (body.resolution)
179
+ fields.resolution = body.resolution;
180
+ const writ = await clerk.transition(id, body.to, Object.keys(fields).length ? fields : undefined);
181
+ json(res, writ);
182
+ }
183
+ catch (e) {
184
+ error(res, e.message, 400);
185
+ }
186
+ return;
187
+ }
188
+ // ── API: Sessions ────────────────────────────────────────────────
189
+ if (path === '/api/sessions' && method === 'GET') {
190
+ const stacks = tryApparatus('stacks');
191
+ if (!stacks) {
192
+ json(res, { sessions: [], total: 0 });
193
+ return;
194
+ }
195
+ try {
196
+ const sessions = stacks.readBook('animator', 'sessions');
197
+ const limit = qs.limit ? parseInt(qs.limit, 10) : 20;
198
+ const offset = qs.offset ? parseInt(qs.offset, 10) : 0;
199
+ const where = qs.status
200
+ ? [['status', '=', qs.status]]
201
+ : undefined;
202
+ const [rows, total] = await Promise.all([
203
+ sessions.find({ where, orderBy: ['startedAt', 'desc'], limit, offset }),
204
+ sessions.count(where),
205
+ ]);
206
+ json(res, { sessions: rows, total });
207
+ }
208
+ catch (e) {
209
+ json(res, { sessions: [], total: 0 });
210
+ }
211
+ return;
212
+ }
213
+ // ── API: Rigs ────────────────────────────────────────────────────
214
+ if (path === '/api/rigs' && method === 'GET') {
215
+ const stacks = tryApparatus('stacks');
216
+ if (!stacks) {
217
+ json(res, { rigs: [] });
218
+ return;
219
+ }
220
+ try {
221
+ const rigs = stacks.readBook('walker', 'rigs');
222
+ const where = qs.status
223
+ ? [['status', '=', qs.status]]
224
+ : undefined;
225
+ const rows = await rigs.find({
226
+ where,
227
+ orderBy: ['id', 'desc'],
228
+ limit: 100,
229
+ });
230
+ json(res, { rigs: rows });
231
+ }
232
+ catch (e) {
233
+ json(res, { rigs: [] });
234
+ }
235
+ return;
236
+ }
237
+ // ── API: Codexes ─────────────────────────────────────────────────
238
+ if (path === '/api/codexes' && method === 'GET') {
239
+ const scriptorium = tryApparatus('codexes');
240
+ if (!scriptorium) {
241
+ json(res, { codexes: [], drafts: [] });
242
+ return;
243
+ }
244
+ try {
245
+ const [codexes, drafts] = await Promise.all([
246
+ scriptorium.list(),
247
+ scriptorium.listDrafts(),
248
+ ]);
249
+ json(res, { codexes, drafts });
250
+ }
251
+ catch (e) {
252
+ error(res, e.message);
253
+ }
254
+ return;
255
+ }
256
+ // ── 404 ──────────────────────────────────────────────────────────
257
+ error(res, 'Not found', 404);
258
+ }
259
+ export async function startServer(port) {
260
+ const server = http.createServer(async (req, res) => {
261
+ try {
262
+ await handleRequest(req, res);
263
+ }
264
+ catch (e) {
265
+ if (!res.headersSent) {
266
+ error(res, e.message ?? 'Internal error');
267
+ }
268
+ }
269
+ });
270
+ await new Promise((resolve, reject) => {
271
+ server.listen(port, '127.0.0.1', resolve);
272
+ server.once('error', reject);
273
+ });
274
+ const addr = server.address();
275
+ const actualPort = addr.port;
276
+ return {
277
+ port: actualPort,
278
+ url: `http://127.0.0.1:${actualPort}`,
279
+ close: () => new Promise((resolve, reject) => {
280
+ server.close(err => err ? reject(err) : resolve());
281
+ }),
282
+ };
283
+ }
284
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAK/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAyB7C,qEAAqE;AAErE,SAAS,IAAI,CAAC,GAAmB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,eAAe,EAAE,UAAU;KAC5B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,KAAK,CAAC,GAAmB,EAAE,GAAW,EAAE,MAAM,GAAG,GAAG;IAC3D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAoB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;YAAC,CAAC;YACzC,MAAM,CAAC;gBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAI,IAAY;IACnC,IAAI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,SAAS,CAAI,IAAI,CAAC,CAAC;IAAC,CAAC;IAC1C,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,qEAAqE;AAErE,KAAK,UAAU,aAAa,CAAC,GAAoB,EAAE,GAAmB;IACpE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IACnC,MAAM,IAAI,GAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACxC,MAAM,EAAE,GAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAEtC,mEAAmE;IACnE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,0BAA0B;YAC1C,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,IAAI,KAAK,eAAe,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG;gBACd,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE,CAAC,CAAC;gBAC9E,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,WAAoB,EAAE,CAAC,CAAC;aAC5F,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3C,MAAM,MAAM,GAA4B,EAAE,CAAC;YAE3C,MAAM,KAAK,GAAG,YAAY,CAAW,OAAO,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,GAAM,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,GAAM,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzD,MAAM,CAAC,MAAM,GAAK,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAY,QAAQ,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAa,UAAU,EAAE,UAAU,CAAC,CAAC;oBACrE,MAAM,CAAC,QAAQ,GAAU,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAChD,MAAM,CAAC,eAAe,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;gBAExC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAS,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACvD,MAAM,CAAC,IAAI,GAAU,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;oBACxC,MAAM,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;gBAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,WAAW,GAAG,YAAY,CAAiB,SAAS,CAAC,CAAC;YAC5D,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,CAAC,OAAO,GAAO,SAAS,CAAC,MAAM,CAAC;gBACtC,MAAM,CAAC,UAAU,GAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,YAAY,CAAW,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,OAAO,GAA4E,EAAE,CAAC;YAC5F,IAAI,EAAE,CAAC,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAoB,CAAC;YACxD,IAAI,EAAE,CAAC,IAAI;gBAAI,OAAO,CAAC,IAAI,GAAK,EAAE,CAAC,IAAI,CAAC;YACxC,OAAO,CAAC,KAAK,GAAI,EAAE,CAAC,KAAK,CAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnB,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;aAC5D,CAAC,CAAC;YAEH,0CAA0C;YAC1C,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChD,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE/E,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,YAAY,CAAW,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAmE,CAAC;YACnG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAG,IAAI,CAAC,IAAI;gBAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE,IAAI,EAAG,IAAI,CAAC,IAAI,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACrE,IAAI,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,YAAY,CAAW,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAA4C,CAAC;YAC5E,MAAM,MAAM,GAAqB,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,KAAK,eAAe,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,YAAY,CAAY,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAa,UAAU,EAAE,UAAU,CAAC,CAAC;YACrE,MAAM,KAAK,GAAI,EAAE,CAAC,KAAK,CAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAA4B,EAAE,CAAC,MAAM;gBAC9C,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBACvE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAY,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAS,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,KAAK,GAA4B,EAAE,CAAC,MAAM;gBAC9C,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBAC3B,KAAK;gBACL,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;gBACvB,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,KAAK,cAAc,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,YAAY,CAAiB,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1C,WAAW,CAAC,IAAI,EAAE;gBAClB,WAAW,CAAC,UAAU,EAAE;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAClD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,EAAG,CAAW,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAE7B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,oBAAoB,UAAU,EAAE;QACrC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
package/dist/tool.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * dashboard-start tool — CLI-only.
3
+ *
4
+ * Starts the web dashboard server and opens the browser.
5
+ * Runs until the process is interrupted (Ctrl+C).
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const dashboardStart: import("@shardworks/tools-apparatus").ToolDefinition<{
9
+ port: z.ZodOptional<z.ZodNumber>;
10
+ 'no-open': z.ZodOptional<z.ZodBoolean>;
11
+ }>;
12
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;EAiDzB,CAAC"}
package/dist/tool.js ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * dashboard-start tool — CLI-only.
3
+ *
4
+ * Starts the web dashboard server and opens the browser.
5
+ * Runs until the process is interrupted (Ctrl+C).
6
+ */
7
+ import { execSync } from 'node:child_process';
8
+ import process from 'node:process';
9
+ import { z } from 'zod';
10
+ import { tool } from '@shardworks/tools-apparatus';
11
+ import { startServer } from "./server.js";
12
+ export const dashboardStart = tool({
13
+ name: 'dashboard-start',
14
+ description: 'Start the guild web dashboard. Opens a browser and serves a live operations UI.',
15
+ callableBy: ['cli'],
16
+ params: {
17
+ port: z
18
+ .number()
19
+ .int()
20
+ .min(1024)
21
+ .max(65535)
22
+ .optional()
23
+ .describe('Port to listen on (default: 4242)'),
24
+ 'no-open': z
25
+ .boolean()
26
+ .optional()
27
+ .describe('Skip opening the browser automatically'),
28
+ },
29
+ handler: async ({ port: portArg, 'no-open': noOpen }) => {
30
+ const port = portArg ?? 4242;
31
+ const server = await startServer(port);
32
+ const url = server.url;
33
+ console.log('');
34
+ console.log(' Guild Dashboard running at:');
35
+ console.log('');
36
+ console.log(' ' + url);
37
+ console.log('');
38
+ console.log(' Press Ctrl+C to stop.');
39
+ console.log('');
40
+ if (!noOpen) {
41
+ try {
42
+ const platform = process.platform;
43
+ if (platform === 'darwin')
44
+ execSync('open ' + url, { stdio: 'ignore' });
45
+ else if (platform === 'win32')
46
+ execSync('start "" ' + url, { stdio: 'ignore', shell: 'cmd.exe' });
47
+ else
48
+ execSync('xdg-open ' + url + ' 2>/dev/null; true', { stdio: 'ignore', shell: '/bin/sh' });
49
+ }
50
+ catch {
51
+ // Browser open is best-effort; ignore errors
52
+ }
53
+ }
54
+ // Keep the process alive until Ctrl+C
55
+ await new Promise(resolve => {
56
+ process.once('SIGINT', async () => { await server.close(); resolve(); });
57
+ process.once('SIGTERM', async () => { await server.close(); resolve(); });
58
+ });
59
+ return { status: 'stopped', url };
60
+ },
61
+ });
62
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iFAAiF;IAC9F,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAChD,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAClC,IAAI,QAAQ,KAAK,QAAQ;oBAAG,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;qBACtE,IAAI,QAAQ,KAAK,OAAO;oBAAE,QAAQ,CAAC,WAAW,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;;oBAC7F,QAAQ,CAAC,WAAW,GAAG,GAAG,GAAG,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;YAC/C,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAG,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Local type stubs for apparatus documents read via Stacks readBook().
3
+ * These mirror the shapes declared by the respective apparatus packages
4
+ * without importing from them (to keep dashboard dependencies minimal).
5
+ */
6
+ /** Minimal shape of a session document from the Animator's sessions book. */
7
+ export interface SessionDoc {
8
+ id: string;
9
+ status: 'running' | 'completed' | 'failed' | 'timeout';
10
+ startedAt: string;
11
+ endedAt?: string;
12
+ durationMs?: number;
13
+ provider: string;
14
+ exitCode?: number;
15
+ error?: string;
16
+ conversationId?: string;
17
+ providerSessionId?: string;
18
+ tokenUsage?: {
19
+ inputTokens: number;
20
+ outputTokens: number;
21
+ cacheReadTokens?: number;
22
+ cacheWriteTokens?: number;
23
+ };
24
+ costUsd?: number;
25
+ metadata?: Record<string, unknown>;
26
+ output?: string;
27
+ [key: string]: unknown;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Local type stubs for apparatus documents read via Stacks readBook().
3
+ * These mirror the shapes declared by the respective apparatus packages
4
+ * without importing from them (to keep dashboard dependencies minimal).
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@shardworks/dashboard-apparatus",
3
+ "version": "0.1.113",
4
+ "license": "ISC",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/shardworks/nexus",
8
+ "directory": "packages/plugins/dashboard"
9
+ },
10
+ "description": "The Dashboard — web-based guild operations dashboard apparatus",
11
+ "type": "module",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "dependencies": {
19
+ "zod": "4.3.6",
20
+ "@shardworks/clerk-apparatus": "0.1.113",
21
+ "@shardworks/nexus-core": "0.1.113",
22
+ "@shardworks/stacks-apparatus": "0.1.113",
23
+ "@shardworks/tools-apparatus": "0.1.113"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "25.5.0"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "scripts": {
32
+ "build": "tsc",
33
+ "typecheck": "tsc --noEmit"
34
+ }
35
+ }