bopodev 0.1.5 → 0.1.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/dist/index.js +41 -12
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -121,15 +121,21 @@ import color from "picocolors";
|
|
|
121
121
|
function printBanner() {
|
|
122
122
|
const lines = [
|
|
123
123
|
"",
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
124
|
+
"\u2591\u2588\u2588 ",
|
|
125
|
+
"\u2591\u2588\u2588 ",
|
|
126
|
+
"\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ",
|
|
127
|
+
"\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 ",
|
|
128
|
+
"\u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 ",
|
|
129
|
+
"\u2591\u2588\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 \u2591\u2588\u2588 ",
|
|
130
|
+
"\u2591\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2591\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ",
|
|
131
|
+
" \u2591\u2588\u2588 ",
|
|
132
|
+
" \u2591\u2588\u2588 ",
|
|
129
133
|
""
|
|
130
134
|
];
|
|
135
|
+
const logoColor = "\x1B[38;2;221;128;92m";
|
|
136
|
+
const logoReset = "\x1B[0m";
|
|
131
137
|
for (const line of lines) {
|
|
132
|
-
process.stdout.write(`${
|
|
138
|
+
process.stdout.write(`${logoColor}${line}${logoReset}
|
|
133
139
|
`);
|
|
134
140
|
}
|
|
135
141
|
process.stdout.write(`${color.dim("Open-source orchestration for autonomous companies")}
|
|
@@ -200,7 +206,7 @@ var defaultDeps = {
|
|
|
200
206
|
},
|
|
201
207
|
runDoctor: (workspaceRoot) => runDoctorChecks({ workspaceRoot }),
|
|
202
208
|
initializeDatabase: async (workspaceRoot, dbPath) => {
|
|
203
|
-
const code = await runCommandStreaming("pnpm", ["--filter", "
|
|
209
|
+
const code = await runCommandStreaming("pnpm", ["--filter", "bopodev-api", "db:init"], {
|
|
204
210
|
cwd: workspaceRoot,
|
|
205
211
|
env: {
|
|
206
212
|
...process.env,
|
|
@@ -211,7 +217,7 @@ var defaultDeps = {
|
|
|
211
217
|
throw new Error(`db:init failed with exit code ${String(code)}`);
|
|
212
218
|
}
|
|
213
219
|
},
|
|
214
|
-
startServices: (workspaceRoot) => runCommandStreaming("pnpm", ["start"], { cwd: workspaceRoot })
|
|
220
|
+
startServices: (workspaceRoot) => runCommandStreaming("pnpm", ["start:quiet"], { cwd: workspaceRoot })
|
|
215
221
|
};
|
|
216
222
|
async function runOnboardFlow(options, deps = defaultDeps) {
|
|
217
223
|
const workspaceRoot = await resolveWorkspaceRoot(options.cwd);
|
|
@@ -265,18 +271,20 @@ async function runOnboardFlow(options, deps = defaultDeps) {
|
|
|
265
271
|
printLine("");
|
|
266
272
|
printSummaryCard([
|
|
267
273
|
`Summary: ${passed} passed, ${failed} warnings`,
|
|
268
|
-
|
|
269
|
-
|
|
274
|
+
"Web URL: http://127.0.0.1:4010 (auto-fallback if occupied)",
|
|
275
|
+
"API URL: http://127.0.0.1:4020 (auto-fallback if occupied)"
|
|
270
276
|
]);
|
|
271
277
|
printLine("");
|
|
272
278
|
if (options.start) {
|
|
273
279
|
printSection("Starting services");
|
|
274
|
-
printLine("Running `pnpm start` (production mode)...");
|
|
280
|
+
printLine("Running `pnpm start:quiet` (production mode)...");
|
|
275
281
|
printDivider();
|
|
276
282
|
await deps.startServices(workspaceRoot);
|
|
277
283
|
} else {
|
|
278
284
|
printSection("Next commands");
|
|
279
|
-
printLine("- Run: pnpm start");
|
|
285
|
+
printLine("- Run: pnpm start:quiet (opens browser by default)");
|
|
286
|
+
printLine("- Full logs: pnpm start");
|
|
287
|
+
printLine("- Disable browser auto-open: BOPO_OPEN_BROWSER=0 pnpm start:quiet");
|
|
280
288
|
printLine("- Diagnose: bopodev doctor");
|
|
281
289
|
}
|
|
282
290
|
return {
|
|
@@ -314,6 +322,19 @@ async function hasExistingInstall(workspaceRoot) {
|
|
|
314
322
|
return await fileExists2(pnpmModulesFile) && await fileExists2(packageLockfile);
|
|
315
323
|
}
|
|
316
324
|
|
|
325
|
+
// src/commands/start.ts
|
|
326
|
+
async function runStartCommand(cwd, options) {
|
|
327
|
+
const workspaceRoot = await resolveWorkspaceRoot(cwd);
|
|
328
|
+
if (!workspaceRoot) {
|
|
329
|
+
throw new Error("Could not find a pnpm workspace root. Run this command from inside the Bopodev repo.");
|
|
330
|
+
}
|
|
331
|
+
const script = options?.quiet === false ? "start" : "start:quiet";
|
|
332
|
+
const code = await runCommandStreaming("pnpm", [script], { cwd: workspaceRoot });
|
|
333
|
+
if (code !== 0) {
|
|
334
|
+
throw new Error(`pnpm ${script} failed with exit code ${String(code)}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
317
338
|
// src/index.ts
|
|
318
339
|
var program = new Command();
|
|
319
340
|
program.name("bopodev").description("Bopodev CLI");
|
|
@@ -333,6 +354,14 @@ program.command("onboard").description("Install, configure, and start Bopodev lo
|
|
|
333
354
|
process.exitCode = 1;
|
|
334
355
|
}
|
|
335
356
|
});
|
|
357
|
+
program.command("start").description("Start Bopodev without rerunning onboarding").option("--full-logs", "Use full startup logs instead of quiet mode", false).action(async (options) => {
|
|
358
|
+
try {
|
|
359
|
+
await runStartCommand(process.cwd(), { quiet: !options.fullLogs });
|
|
360
|
+
} catch (error) {
|
|
361
|
+
cancel(String(error));
|
|
362
|
+
process.exitCode = 1;
|
|
363
|
+
}
|
|
364
|
+
});
|
|
336
365
|
program.command("doctor").description("Run local preflight checks").action(async () => {
|
|
337
366
|
try {
|
|
338
367
|
await runDoctorCommand(process.cwd());
|