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.
Files changed (2) hide show
  1. package/dist/index.js +41 -12
  2. 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(`${color.cyan(line)}
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", "@bopo/api", "db:init"], {
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
- `Web URL: http://127.0.0.1:4010`,
269
- `API URL: http://127.0.0.1:4020`
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());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bopodev",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "bin": {