@jango-blockchained/hoox-cli 0.5.2 → 0.5.6
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/bin/hoox.js +3 -4
- package/dist/index.js +32545 -0
- package/package.json +10 -15
- package/src/commands/check/check-command.test.ts +0 -476
- package/src/commands/check/check-command.ts +0 -1087
- package/src/commands/check/index.ts +0 -10
- package/src/commands/check/prerequisites-command.test.ts +0 -19
- package/src/commands/check/prerequisites-command.ts +0 -97
- package/src/commands/check/types.ts +0 -103
- package/src/commands/clone/clone-command.test.ts +0 -440
- package/src/commands/clone/clone-command.ts +0 -431
- package/src/commands/clone/index.ts +0 -1
- package/src/commands/config/config-command.test.ts +0 -583
- package/src/commands/config/config-command.ts +0 -896
- package/src/commands/config/env-command.test.ts +0 -43
- package/src/commands/config/env-command.ts +0 -292
- package/src/commands/config/index.ts +0 -3
- package/src/commands/config/kv-command.test.ts +0 -14
- package/src/commands/config/kv-command.ts +0 -290
- package/src/commands/dashboard/dashboard-command.test.ts +0 -47
- package/src/commands/dashboard/dashboard-command.ts +0 -130
- package/src/commands/dashboard/index.ts +0 -1
- package/src/commands/db/db-command.test.ts +0 -21
- package/src/commands/db/db-command.ts +0 -311
- package/src/commands/db/index.ts +0 -1
- package/src/commands/deploy/deploy-command.test.ts +0 -324
- package/src/commands/deploy/deploy-command.ts +0 -1054
- package/src/commands/deploy/index.ts +0 -2
- package/src/commands/deploy/telegram-service.ts +0 -76
- package/src/commands/deploy/types.ts +0 -34
- package/src/commands/dev/dev-command.test.ts +0 -405
- package/src/commands/dev/dev-command.ts +0 -398
- package/src/commands/dev/index.ts +0 -1
- package/src/commands/disclaimer/disclaimer-command.ts +0 -21
- package/src/commands/disclaimer/index.ts +0 -1
- package/src/commands/infra/index.ts +0 -5
- package/src/commands/infra/infra-command.test.ts +0 -719
- package/src/commands/infra/infra-command.ts +0 -974
- package/src/commands/infra/types.ts +0 -23
- package/src/commands/init/__tests__/cli-provisioner.test.ts +0 -17
- package/src/commands/init/cli-provisioner.ts +0 -71
- package/src/commands/init/index.ts +0 -1
- package/src/commands/init/init-command.test.ts +0 -854
- package/src/commands/init/init-command.ts +0 -597
- package/src/commands/init/types.ts +0 -23
- package/src/commands/logs/index.ts +0 -1
- package/src/commands/logs/logs-command.test.ts +0 -293
- package/src/commands/logs/logs-command.ts +0 -452
- package/src/commands/monitor/index.ts +0 -2
- package/src/commands/monitor/monitor-command.test.ts +0 -271
- package/src/commands/monitor/monitor-command.ts +0 -269
- package/src/commands/monitor/monitor-service.ts +0 -65
- package/src/commands/monitor/types.ts +0 -13
- package/src/commands/repair/index.ts +0 -2
- package/src/commands/repair/repair-command.test.ts +0 -243
- package/src/commands/repair/repair-command.ts +0 -220
- package/src/commands/repair/repair-service.ts +0 -164
- package/src/commands/repair/types.ts +0 -13
- package/src/commands/schema/index.ts +0 -1
- package/src/commands/schema/schema-command.ts +0 -137
- package/src/commands/test/index.ts +0 -2
- package/src/commands/test/test-command.test.ts +0 -318
- package/src/commands/test/test-command.ts +0 -406
- package/src/commands/tui/index.ts +0 -1
- package/src/commands/tui/tui-command.ts +0 -87
- package/src/commands/update/index.ts +0 -1
- package/src/commands/update/update-command.ts +0 -109
- package/src/commands/waf/index.ts +0 -2
- package/src/commands/waf/types.ts +0 -48
- package/src/commands/waf/waf-command.test.ts +0 -506
- package/src/commands/waf/waf-command.ts +0 -545
- package/src/index.ts +0 -261
- package/src/services/cloudflare/cloudflare-service.test.ts +0 -658
- package/src/services/cloudflare/cloudflare-service.ts +0 -433
- package/src/services/cloudflare/index.ts +0 -2
- package/src/services/cloudflare/types.ts +0 -30
- package/src/services/config/config-service.test.ts +0 -395
- package/src/services/config/config-service.ts +0 -202
- package/src/services/config/index.ts +0 -9
- package/src/services/config/types.ts +0 -66
- package/src/services/db/db-service.test.ts +0 -63
- package/src/services/db/db-service.ts +0 -131
- package/src/services/db/index.ts +0 -1
- package/src/services/docker/docker-service.ts +0 -155
- package/src/services/docker/index.ts +0 -1
- package/src/services/env/env-service.test.ts +0 -259
- package/src/services/env/env-service.ts +0 -372
- package/src/services/env/index.ts +0 -1
- package/src/services/kv/index.ts +0 -1
- package/src/services/kv/kv-sync-service.test.ts +0 -38
- package/src/services/kv/kv-sync-service.ts +0 -243
- package/src/services/prerequisites/index.ts +0 -1
- package/src/services/prerequisites/prerequisites-service.test.ts +0 -89
- package/src/services/prerequisites/prerequisites-service.ts +0 -377
- package/src/services/prerequisites/types.ts +0 -48
- package/src/services/schema/index.ts +0 -1
- package/src/services/schema/schema-service.ts +0 -99
- package/src/services/secrets/index.ts +0 -11
- package/src/services/secrets/secrets-service.test.ts +0 -502
- package/src/services/secrets/secrets-service.ts +0 -287
- package/src/services/secrets/types.ts +0 -50
- package/src/services/update/index.ts +0 -2
- package/src/services/update/update-service.test.ts +0 -76
- package/src/services/update/update-service.ts +0 -193
- package/src/ui/banner.ts +0 -141
- package/src/ui/index.ts +0 -8
- package/src/ui/menu.ts +0 -490
- package/src/utils/error-handler.ts +0 -62
- package/src/utils/errors.test.ts +0 -69
- package/src/utils/errors.ts +0 -24
- package/src/utils/formatters.test.ts +0 -180
- package/src/utils/formatters.ts +0 -269
- package/src/utils/git.ts +0 -134
- package/src/utils/theme.ts +0 -92
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `hoox dev` command group — local development for workers and dashboard.
|
|
3
|
-
*
|
|
4
|
-
* Subcommands:
|
|
5
|
-
* start — Launch all workers with wrangler dev
|
|
6
|
-
* worker — Start a single worker with wrangler dev
|
|
7
|
-
* dashboard — Start the Next.js dashboard dev server
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { Command } from "commander";
|
|
11
|
-
import { select } from "@clack/prompts";
|
|
12
|
-
import path from "node:path";
|
|
13
|
-
import { ConfigService } from "../../services/config/index.js";
|
|
14
|
-
import { CloudflareService } from "../../services/cloudflare/index.js";
|
|
15
|
-
import { PrerequisitesService } from "../../services/prerequisites/index.js";
|
|
16
|
-
import { DockerService } from "../../services/docker/index.js";
|
|
17
|
-
import {
|
|
18
|
-
formatSuccess,
|
|
19
|
-
formatError,
|
|
20
|
-
getFormatOptions,
|
|
21
|
-
} from "../../utils/formatters.js";
|
|
22
|
-
import { CLIError, ExitCode } from "../../utils/errors.js";
|
|
23
|
-
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// Command registration
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Register the `hoox dev` command group with subcommands:
|
|
30
|
-
* start, worker <name>, dashboard.
|
|
31
|
-
*/
|
|
32
|
-
export function registerDevCommand(program: Command): void {
|
|
33
|
-
const devCmd = program
|
|
34
|
-
.command("dev")
|
|
35
|
-
.summary("Local development commands for workers and dashboard")
|
|
36
|
-
.description(
|
|
37
|
-
`Start local development servers for your Hoox workers and dashboard.
|
|
38
|
-
|
|
39
|
-
RUNTIME OPTIONS:
|
|
40
|
-
native - Uses wrangler dev (default, recommended for most cases)
|
|
41
|
-
docker - Uses Docker Compose (requires Docker + docker-compose)
|
|
42
|
-
|
|
43
|
-
The CLI will prompt you to choose a runtime if Docker is available and no preference is saved. Your choice is saved to wrangler.jsonc for future runs.
|
|
44
|
-
|
|
45
|
-
EXAMPLES:
|
|
46
|
-
hoox dev start Start all workers (prompts for runtime)
|
|
47
|
-
hoox dev start --runtime native Force native runtime (wrangler dev)
|
|
48
|
-
hoox dev start --runtime docker Force Docker runtime
|
|
49
|
-
hoox dev worker trade-worker Start single worker
|
|
50
|
-
hoox dev dashboard Start dashboard dev server`
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
// -- dev start ------------------------------------------------------------
|
|
54
|
-
devCmd
|
|
55
|
-
.command("start")
|
|
56
|
-
.summary("Start all enabled workers for local development")
|
|
57
|
-
.description(
|
|
58
|
-
`Start all enabled workers using either wrangler dev (native) or Docker Compose.
|
|
59
|
-
|
|
60
|
-
The command checks for prerequisites (wrangler version, Docker availability) and starts workers on sequential ports starting at 8787.
|
|
61
|
-
|
|
62
|
-
PORT ASSIGNMENTS:
|
|
63
|
-
hoox → 8787
|
|
64
|
-
trade-worker → 8788
|
|
65
|
-
d1-worker → 8789
|
|
66
|
-
telegram-worker → 8790
|
|
67
|
-
web3-wallet-worker → 8792
|
|
68
|
-
(other workers) → 8800+
|
|
69
|
-
|
|
70
|
-
OPTIONS:
|
|
71
|
-
--runtime <native|docker> Choose dev runtime (overrides saved preference)
|
|
72
|
-
|
|
73
|
-
EXAMPLES:
|
|
74
|
-
hoox dev start
|
|
75
|
-
hoox dev start --runtime native
|
|
76
|
-
hoox dev start --runtime docker`
|
|
77
|
-
)
|
|
78
|
-
.option(
|
|
79
|
-
"--runtime <native|docker>",
|
|
80
|
-
"Choose dev runtime (overrides saved preference)"
|
|
81
|
-
)
|
|
82
|
-
.action(async (options: { runtime?: string }) => {
|
|
83
|
-
const fmt = getFormatOptions(program);
|
|
84
|
-
try {
|
|
85
|
-
const configService = new ConfigService();
|
|
86
|
-
const prereqs = new PrerequisitesService();
|
|
87
|
-
const docker = new DockerService();
|
|
88
|
-
|
|
89
|
-
// Load config early so we can read saved runtime preference
|
|
90
|
-
await configService.load();
|
|
91
|
-
|
|
92
|
-
// === Prerequisite checks ===
|
|
93
|
-
|
|
94
|
-
// 1. Wrangler version check (advisory)
|
|
95
|
-
const wranglerCheck = await prereqs.checkWranglerVersion();
|
|
96
|
-
if (wranglerCheck.outdated) {
|
|
97
|
-
process.stdout.write(
|
|
98
|
-
`\n! wrangler is outdated (${wranglerCheck.current} < ${wranglerCheck.minimum})\n` +
|
|
99
|
-
` Run \`bunx wrangler update\` to update.\n` +
|
|
100
|
-
` Press Enter to continue or Ctrl+C to abort.\n\n`
|
|
101
|
-
);
|
|
102
|
-
// Wait briefly — user can proceed with Enter or Ctrl+C
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// 2. Check Docker availability
|
|
106
|
-
const dockerStatus = await docker.checkAvailability();
|
|
107
|
-
const dockerViable = dockerStatus.docker && dockerStatus.compose;
|
|
108
|
-
const composeExists = await docker.composeFileExists();
|
|
109
|
-
|
|
110
|
-
// 3. Determine runtime
|
|
111
|
-
let runtime: "native" | "docker" = "native";
|
|
112
|
-
if (options.runtime === "native" || options.runtime === "docker") {
|
|
113
|
-
runtime = options.runtime;
|
|
114
|
-
} else {
|
|
115
|
-
const savedRuntime = configService.getDevRuntime();
|
|
116
|
-
if (savedRuntime) {
|
|
117
|
-
runtime = savedRuntime;
|
|
118
|
-
} else if (dockerViable && composeExists) {
|
|
119
|
-
const choice = await select({
|
|
120
|
-
message: "Which runtime would you like to use?",
|
|
121
|
-
options: [
|
|
122
|
-
{
|
|
123
|
-
value: "native",
|
|
124
|
-
label: "Native (wrangler dev)",
|
|
125
|
-
hint: "run locally with wrangler",
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
value: "docker",
|
|
129
|
-
label: "Docker",
|
|
130
|
-
hint: "run via docker compose",
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
});
|
|
134
|
-
runtime = choice;
|
|
135
|
-
await configService.setDevRuntime(runtime);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Validate configuration
|
|
140
|
-
const validation = configService.validate();
|
|
141
|
-
if (!validation.valid) {
|
|
142
|
-
formatError(
|
|
143
|
-
new CLIError(
|
|
144
|
-
`Invalid configuration:\n${validation.errors.map((e) => ` - ${e}`).join("\n")}`,
|
|
145
|
-
ExitCode.INVALID_USAGE
|
|
146
|
-
),
|
|
147
|
-
fmt
|
|
148
|
-
);
|
|
149
|
-
process.exitCode = ExitCode.INVALID_USAGE;
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// === Runtime branching ===
|
|
154
|
-
|
|
155
|
-
if (runtime === "docker") {
|
|
156
|
-
const profiles = ["workers"];
|
|
157
|
-
formatSuccess(
|
|
158
|
-
`Starting workers via Docker Compose (profiles: ${profiles.join(", ")})...`,
|
|
159
|
-
fmt
|
|
160
|
-
);
|
|
161
|
-
const result = await docker.composeUp(profiles, false);
|
|
162
|
-
if (!result.ok) {
|
|
163
|
-
formatError(
|
|
164
|
-
new CLIError(
|
|
165
|
-
result.error ?? "Docker compose failed",
|
|
166
|
-
ExitCode.ERROR
|
|
167
|
-
),
|
|
168
|
-
fmt
|
|
169
|
-
);
|
|
170
|
-
process.exitCode = ExitCode.ERROR;
|
|
171
|
-
}
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// === Native runtime (wrangler dev) ===
|
|
176
|
-
|
|
177
|
-
const enabledWorkers = configService.listEnabledWorkers();
|
|
178
|
-
if (enabledWorkers.length === 0) {
|
|
179
|
-
formatError(
|
|
180
|
-
new CLIError(
|
|
181
|
-
"No enabled workers found in wrangler.jsonc. Enable at least one worker.",
|
|
182
|
-
ExitCode.INVALID_USAGE
|
|
183
|
-
),
|
|
184
|
-
fmt
|
|
185
|
-
);
|
|
186
|
-
process.exitCode = ExitCode.INVALID_USAGE;
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Port assignments for known workers (from local-dev.md)
|
|
191
|
-
const LOCAL_PORTS: Record<string, number> = {
|
|
192
|
-
hoox: 8787,
|
|
193
|
-
"trade-worker": 8788,
|
|
194
|
-
"d1-worker": 8789,
|
|
195
|
-
"telegram-worker": 8790,
|
|
196
|
-
"web3-wallet-worker": 8792,
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
let nextFallbackPort = 8800;
|
|
200
|
-
const cf = new CloudflareService();
|
|
201
|
-
let started = 0;
|
|
202
|
-
let failed = 0;
|
|
203
|
-
|
|
204
|
-
for (const name of enabledWorkers) {
|
|
205
|
-
const worker = configService.getWorker(name);
|
|
206
|
-
if (!worker) {
|
|
207
|
-
formatError(`Worker "${name}" not found in config, skipping.`, fmt);
|
|
208
|
-
failed++;
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const port = LOCAL_PORTS[name] ?? nextFallbackPort++;
|
|
213
|
-
formatSuccess(
|
|
214
|
-
`Starting worker "${name}" (${worker.path}) on port ${port}...`,
|
|
215
|
-
fmt
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
const result = await cf.dev(worker.path, port);
|
|
219
|
-
if (!result.ok) {
|
|
220
|
-
formatError(
|
|
221
|
-
`Failed to start worker "${name}": ${result.error}`,
|
|
222
|
-
fmt
|
|
223
|
-
);
|
|
224
|
-
failed++;
|
|
225
|
-
} else {
|
|
226
|
-
formatSuccess(
|
|
227
|
-
`Worker "${name}" running on http://localhost:${result.value.port}`,
|
|
228
|
-
fmt
|
|
229
|
-
);
|
|
230
|
-
started++;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (started > 0) {
|
|
235
|
-
formatSuccess(
|
|
236
|
-
`Started ${started} worker(s) — http://localhost:8787 (and adjacent ports)`,
|
|
237
|
-
fmt
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
if (failed > 0) {
|
|
241
|
-
process.exitCode = ExitCode.ERROR;
|
|
242
|
-
}
|
|
243
|
-
} catch (err) {
|
|
244
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
245
|
-
formatError(message, fmt);
|
|
246
|
-
process.exitCode = ExitCode.ERROR;
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
// -- dev worker <name> [--port] -------------------------------------------
|
|
251
|
-
devCmd
|
|
252
|
-
.command("worker <name>")
|
|
253
|
-
.summary("Start a single worker for local development")
|
|
254
|
-
.description(
|
|
255
|
-
`Start a specific worker using wrangler dev.
|
|
256
|
-
|
|
257
|
-
ARGUMENTS:
|
|
258
|
-
name Worker name (e.g., trade-worker, agent-worker, hoox)
|
|
259
|
-
|
|
260
|
-
OPTIONS:
|
|
261
|
-
--port <port> Dev server port (default: 8787)
|
|
262
|
-
--runtime <native|docker> Choose dev runtime (overrides saved preference)
|
|
263
|
-
|
|
264
|
-
EXAMPLES:
|
|
265
|
-
hoox dev worker trade-worker
|
|
266
|
-
hoox dev worker agent-worker --port 8788
|
|
267
|
-
hoox dev worker hoox --runtime docker`
|
|
268
|
-
)
|
|
269
|
-
.option("--port <port>", "Dev server port (default: 8787)", (v: string) =>
|
|
270
|
-
parseInt(v, 10)
|
|
271
|
-
)
|
|
272
|
-
.option(
|
|
273
|
-
"--runtime <native|docker>",
|
|
274
|
-
"Choose dev runtime (overrides saved preference)"
|
|
275
|
-
)
|
|
276
|
-
.action(
|
|
277
|
-
async (name: string, options: { port?: number; runtime?: string }) => {
|
|
278
|
-
const fmt = getFormatOptions(program);
|
|
279
|
-
try {
|
|
280
|
-
const configService = new ConfigService();
|
|
281
|
-
await configService.load();
|
|
282
|
-
|
|
283
|
-
// Validate the worker exists in config
|
|
284
|
-
const worker = configService.getWorker(name);
|
|
285
|
-
if (!worker) {
|
|
286
|
-
formatError(
|
|
287
|
-
new CLIError(
|
|
288
|
-
`Worker "${name}" not found in wrangler.jsonc.\n` +
|
|
289
|
-
`Available workers: ${configService.listWorkers().join(", ")}`,
|
|
290
|
-
ExitCode.INVALID_USAGE
|
|
291
|
-
),
|
|
292
|
-
fmt
|
|
293
|
-
);
|
|
294
|
-
process.exitCode = ExitCode.INVALID_USAGE;
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (!worker.enabled) {
|
|
299
|
-
formatError(
|
|
300
|
-
new CLIError(
|
|
301
|
-
`Worker "${name}" is disabled. Enable it with the config command first.`,
|
|
302
|
-
ExitCode.INVALID_USAGE
|
|
303
|
-
),
|
|
304
|
-
fmt
|
|
305
|
-
);
|
|
306
|
-
process.exitCode = ExitCode.INVALID_USAGE;
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
const port = options.port ?? 8787;
|
|
311
|
-
|
|
312
|
-
formatSuccess(
|
|
313
|
-
`Starting worker "${name}" (${worker.path}) on port ${port}...`,
|
|
314
|
-
fmt
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
const cf = new CloudflareService();
|
|
318
|
-
const result = await cf.dev(worker.path, port);
|
|
319
|
-
|
|
320
|
-
if (!result.ok) {
|
|
321
|
-
formatError(
|
|
322
|
-
new CLIError(
|
|
323
|
-
`Failed to start worker "${name}": ${result.error}`,
|
|
324
|
-
ExitCode.ERROR
|
|
325
|
-
),
|
|
326
|
-
fmt
|
|
327
|
-
);
|
|
328
|
-
process.exitCode = ExitCode.ERROR;
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
formatSuccess(
|
|
333
|
-
`Worker "${name}" running on http://localhost:${result.value.port}`,
|
|
334
|
-
fmt
|
|
335
|
-
);
|
|
336
|
-
} catch (err) {
|
|
337
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
338
|
-
formatError(message, fmt);
|
|
339
|
-
process.exitCode = ExitCode.ERROR;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
// -- dev dashboard --------------------------------------------------------
|
|
345
|
-
devCmd
|
|
346
|
-
.command("dashboard")
|
|
347
|
-
.summary("Start the Next.js dashboard dev server")
|
|
348
|
-
.description(
|
|
349
|
-
`Start the Hoox dashboard development server using Next.js.
|
|
350
|
-
|
|
351
|
-
The dashboard runs on http://localhost:3000 with hot-reloading enabled.
|
|
352
|
-
|
|
353
|
-
OPTIONS:
|
|
354
|
-
--runtime <native|docker> Choose dev runtime (overrides saved preference)
|
|
355
|
-
|
|
356
|
-
EXAMPLES:
|
|
357
|
-
hoox dev dashboard
|
|
358
|
-
hoox dev dashboard --runtime docker`
|
|
359
|
-
)
|
|
360
|
-
.option(
|
|
361
|
-
"--runtime <native|docker>",
|
|
362
|
-
"Choose dev runtime (overrides saved preference)"
|
|
363
|
-
)
|
|
364
|
-
.action(async () => {
|
|
365
|
-
const fmt = getFormatOptions(program);
|
|
366
|
-
try {
|
|
367
|
-
const dashboardPath = path.resolve(process.cwd(), "workers/dashboard");
|
|
368
|
-
const dashboardDir = Bun.file(dashboardPath);
|
|
369
|
-
|
|
370
|
-
if (!(await dashboardDir.exists())) {
|
|
371
|
-
formatError(
|
|
372
|
-
new CLIError(
|
|
373
|
-
`Dashboard directory not found: ${dashboardPath}`,
|
|
374
|
-
ExitCode.INVALID_USAGE
|
|
375
|
-
),
|
|
376
|
-
fmt
|
|
377
|
-
);
|
|
378
|
-
process.exitCode = ExitCode.INVALID_USAGE;
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
formatSuccess("Starting Next.js dashboard dev server...", fmt);
|
|
383
|
-
|
|
384
|
-
// Fire-and-forget: spawn `bun run dev` inside pages/dashboard
|
|
385
|
-
Bun.spawn(["bun", "run", "dev"], {
|
|
386
|
-
cwd: dashboardPath,
|
|
387
|
-
stdout: "inherit",
|
|
388
|
-
stderr: "inherit",
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
formatSuccess("Dashboard starting on http://localhost:3000", fmt);
|
|
392
|
-
} catch (err) {
|
|
393
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
394
|
-
formatError(message, fmt);
|
|
395
|
-
process.exitCode = ExitCode.ERROR;
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { registerDevCommand } from "./dev-command.js";
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `hoox disclaimer` command — displays legal disclaimers and trademark information.
|
|
3
|
-
*
|
|
4
|
-
* Uses the centralized legal notices from @jango-blockchained/hoox-shared/legal
|
|
5
|
-
* so all surfaces (CLI, HTTP, Dashboard) stay consistent.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { Command } from "commander";
|
|
9
|
-
import { FULL_LEGAL_NOTICE } from "@jango-blockchained/hoox-shared/legal";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Registers the `hoox disclaimer` command on the given Commander.js program instance.
|
|
13
|
-
*/
|
|
14
|
-
export function registerDisclaimerCommand(program: Command): void {
|
|
15
|
-
program
|
|
16
|
-
.command("disclaimer")
|
|
17
|
-
.description("Display legal disclaimers and trademark information")
|
|
18
|
-
.action(() => {
|
|
19
|
-
console.log(FULL_LEGAL_NOTICE);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { registerDisclaimerCommand } from "./disclaimer-command.js";
|