omo-suites 1.7.5 → 1.7.7
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/CHANGELOG.md +12 -0
- package/dist/cli/omocs.js +123 -63
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,18 @@ All notable changes to OMO Suites will be documented in this file.
|
|
|
5
5
|
Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.7.7] - 2026-03-07
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Launchboard start now works on Windows — replaced `bash setup.sh` with cross-platform TypeScript logic
|
|
12
|
+
- Deps install, DB setup, and process management all work without bash
|
|
13
|
+
|
|
14
|
+
## [1.7.6] - 2026-03-07
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Config detection now checks `opencode.json`, `.opencode/opencode.json`, and `~/.config/opencode/opencode.json` (was only checking `.opencode.json`)
|
|
18
|
+
- Doctor now also checks for `oh-my-opencode.json`
|
|
19
|
+
|
|
8
20
|
## [1.7.5] - 2026-03-07
|
|
9
21
|
|
|
10
22
|
### Added
|
package/dist/cli/omocs.js
CHANGED
|
@@ -1999,7 +1999,10 @@ import { join as join3, resolve as resolve3, dirname as dirname3 } from "path";
|
|
|
1999
1999
|
import { homedir as homedir3 } from "os";
|
|
2000
2000
|
function getConfigPaths() {
|
|
2001
2001
|
return [
|
|
2002
|
+
join3(process.cwd(), "opencode.json"),
|
|
2002
2003
|
join3(process.cwd(), ".opencode.json"),
|
|
2004
|
+
join3(process.cwd(), ".opencode", "opencode.json"),
|
|
2005
|
+
join3(homedir3(), ".config", "opencode", "opencode.json"),
|
|
2003
2006
|
join3(homedir3(), ".opencode.json"),
|
|
2004
2007
|
join3(homedir3(), ".config", "opencode", "config.json")
|
|
2005
2008
|
];
|
|
@@ -2395,6 +2398,8 @@ var init_lsp = __esm(() => {
|
|
|
2395
2398
|
});
|
|
2396
2399
|
|
|
2397
2400
|
// src/tui/views/doctor.ts
|
|
2401
|
+
import { existsSync as existsSync4 } from "fs";
|
|
2402
|
+
import { join as join4 } from "path";
|
|
2398
2403
|
function initialDoctorState() {
|
|
2399
2404
|
return {
|
|
2400
2405
|
results: [],
|
|
@@ -2473,14 +2478,32 @@ async function runDoctorChecks(state, onProgress) {
|
|
|
2473
2478
|
status: foundKeys.length > 0 ? "pass" : "warn",
|
|
2474
2479
|
message: foundKeys.length > 0 ? `${foundKeys.length} key(s) in environment` : "No API keys in environment"
|
|
2475
2480
|
});
|
|
2476
|
-
state.currentCheck = "
|
|
2481
|
+
state.currentCheck = "opencode.json";
|
|
2477
2482
|
onProgress();
|
|
2478
2483
|
const ocConfig = await readOpenCodeConfig();
|
|
2479
2484
|
addResult({
|
|
2480
|
-
name: "
|
|
2485
|
+
name: "opencode.json",
|
|
2481
2486
|
status: ocConfig ? "pass" : "warn",
|
|
2482
2487
|
message: ocConfig ? `Found at ${ocConfig.path}` : "Not found"
|
|
2483
2488
|
});
|
|
2489
|
+
state.currentCheck = "oh-my-opencode.json";
|
|
2490
|
+
onProgress();
|
|
2491
|
+
const omoConfigPaths = [
|
|
2492
|
+
join4(process.cwd(), "oh-my-opencode.json"),
|
|
2493
|
+
join4(process.cwd(), ".opencode", "oh-my-opencode.json")
|
|
2494
|
+
];
|
|
2495
|
+
let omoConfigPath = null;
|
|
2496
|
+
for (const p of omoConfigPaths) {
|
|
2497
|
+
if (existsSync4(p)) {
|
|
2498
|
+
omoConfigPath = p;
|
|
2499
|
+
break;
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
addResult({
|
|
2503
|
+
name: "oh-my-opencode.json",
|
|
2504
|
+
status: omoConfigPath ? "pass" : "warn",
|
|
2505
|
+
message: omoConfigPath ? `Found at ${omoConfigPath}` : "Not found (optional)"
|
|
2506
|
+
});
|
|
2484
2507
|
state.currentCheck = "LSP Servers";
|
|
2485
2508
|
onProgress();
|
|
2486
2509
|
let lspInstalled = 0;
|
|
@@ -2557,15 +2580,15 @@ var init_doctor = __esm(() => {
|
|
|
2557
2580
|
});
|
|
2558
2581
|
|
|
2559
2582
|
// src/tui/views/stats.ts
|
|
2560
|
-
import { existsSync as
|
|
2561
|
-
import { join as
|
|
2583
|
+
import { existsSync as existsSync5, readFileSync as readFileSync6 } from "fs";
|
|
2584
|
+
import { join as join5 } from "path";
|
|
2562
2585
|
import { homedir as homedir4 } from "os";
|
|
2563
2586
|
function initialStatsState() {
|
|
2564
2587
|
return { loaded: false, data: null };
|
|
2565
2588
|
}
|
|
2566
2589
|
async function loadStats(state) {
|
|
2567
|
-
const statsPath =
|
|
2568
|
-
if (!
|
|
2590
|
+
const statsPath = join5(homedir4(), ".omocs", "stats.json");
|
|
2591
|
+
if (!existsSync5(statsPath)) {
|
|
2569
2592
|
state.data = null;
|
|
2570
2593
|
state.loaded = true;
|
|
2571
2594
|
return;
|
|
@@ -2951,11 +2974,11 @@ function lspCommand(args) {
|
|
|
2951
2974
|
return [dim(`Usage: /lsp [detect|list]`)];
|
|
2952
2975
|
}
|
|
2953
2976
|
async function statsCommand() {
|
|
2954
|
-
const { existsSync:
|
|
2955
|
-
const { join:
|
|
2977
|
+
const { existsSync: existsSync6 } = await import("fs");
|
|
2978
|
+
const { join: join6 } = await import("path");
|
|
2956
2979
|
const { homedir: homedir5 } = await import("os");
|
|
2957
|
-
const statsPath =
|
|
2958
|
-
if (!
|
|
2980
|
+
const statsPath = join6(homedir5(), ".omocs", "stats.json");
|
|
2981
|
+
if (!existsSync6(statsPath)) {
|
|
2959
2982
|
return [
|
|
2960
2983
|
goldBold("═══ Stats ═══"),
|
|
2961
2984
|
"",
|
|
@@ -8324,7 +8347,7 @@ __export(exports_ui, {
|
|
|
8324
8347
|
createTable: () => createTable,
|
|
8325
8348
|
bullet: () => bullet
|
|
8326
8349
|
});
|
|
8327
|
-
import { readFileSync as readFileSync7, existsSync as
|
|
8350
|
+
import { readFileSync as readFileSync7, existsSync as existsSync6 } from "fs";
|
|
8328
8351
|
import { dirname as dirname4, resolve as resolve4 } from "path";
|
|
8329
8352
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
8330
8353
|
function getVersion() {
|
|
@@ -8332,7 +8355,7 @@ function getVersion() {
|
|
|
8332
8355
|
let dir = dirname4(fileURLToPath3(import.meta.url));
|
|
8333
8356
|
for (let i = 0;i < 5; i++) {
|
|
8334
8357
|
const candidate = resolve4(dir, "package.json");
|
|
8335
|
-
if (
|
|
8358
|
+
if (existsSync6(candidate)) {
|
|
8336
8359
|
return JSON.parse(readFileSync7(candidate, "utf-8")).version || "?";
|
|
8337
8360
|
}
|
|
8338
8361
|
dir = dirname4(dir);
|
|
@@ -33257,28 +33280,28 @@ var init_esm17 = __esm(() => {
|
|
|
33257
33280
|
});
|
|
33258
33281
|
|
|
33259
33282
|
// src/utils/detect.ts
|
|
33260
|
-
import { existsSync as
|
|
33261
|
-
import { join as
|
|
33283
|
+
import { existsSync as existsSync7, readdirSync, readFileSync as readFileSync9 } from "fs";
|
|
33284
|
+
import { join as join6 } from "path";
|
|
33262
33285
|
function fileOrDirExists(base, name) {
|
|
33263
|
-
const full =
|
|
33264
|
-
return
|
|
33286
|
+
const full = join6(base, name);
|
|
33287
|
+
return existsSync7(full);
|
|
33265
33288
|
}
|
|
33266
33289
|
function detectPackageManager(base) {
|
|
33267
|
-
if (
|
|
33290
|
+
if (existsSync7(join6(base, "bun.lockb")) || existsSync7(join6(base, "bun.lock")))
|
|
33268
33291
|
return "bun";
|
|
33269
|
-
if (
|
|
33292
|
+
if (existsSync7(join6(base, "pnpm-lock.yaml")))
|
|
33270
33293
|
return "pnpm";
|
|
33271
|
-
if (
|
|
33294
|
+
if (existsSync7(join6(base, "yarn.lock")))
|
|
33272
33295
|
return "yarn";
|
|
33273
|
-
if (
|
|
33296
|
+
if (existsSync7(join6(base, "package-lock.json")))
|
|
33274
33297
|
return "npm";
|
|
33275
|
-
if (
|
|
33298
|
+
if (existsSync7(join6(base, "Pipfile.lock")))
|
|
33276
33299
|
return "pipenv";
|
|
33277
|
-
if (
|
|
33300
|
+
if (existsSync7(join6(base, "poetry.lock")))
|
|
33278
33301
|
return "poetry";
|
|
33279
|
-
if (
|
|
33302
|
+
if (existsSync7(join6(base, "Cargo.lock")))
|
|
33280
33303
|
return "cargo";
|
|
33281
|
-
if (
|
|
33304
|
+
if (existsSync7(join6(base, "go.sum")))
|
|
33282
33305
|
return "go";
|
|
33283
33306
|
return null;
|
|
33284
33307
|
}
|
|
@@ -33389,26 +33412,26 @@ var init_detect = __esm(() => {
|
|
|
33389
33412
|
|
|
33390
33413
|
// src/utils/launchboard-resolver.ts
|
|
33391
33414
|
import { execSync as execSync3 } from "child_process";
|
|
33392
|
-
import { existsSync as
|
|
33415
|
+
import { existsSync as existsSync8, mkdirSync as mkdirSync4, rmSync } from "fs";
|
|
33393
33416
|
import { resolve as resolve5, dirname as dirname5 } from "path";
|
|
33394
33417
|
import { homedir as homedir5 } from "os";
|
|
33395
33418
|
function resolveLaunchboardDir() {
|
|
33396
33419
|
const bundledDir = resolve5(dirname5(new URL(import.meta.url).pathname), "../../packages/launchboard");
|
|
33397
|
-
if (
|
|
33420
|
+
if (existsSync8(bundledDir)) {
|
|
33398
33421
|
return { dir: bundledDir };
|
|
33399
33422
|
}
|
|
33400
33423
|
const persistentDir = resolve5(homedir5(), ".omocs", "launchboard");
|
|
33401
|
-
if (
|
|
33424
|
+
if (existsSync8(persistentDir)) {
|
|
33402
33425
|
return { dir: persistentDir };
|
|
33403
33426
|
}
|
|
33404
33427
|
const cloneSpinner = ora("Downloading Launchboard from GitHub...").start();
|
|
33405
33428
|
const tmpDir = resolve5(homedir5(), ".omocs", ".launchboard-clone-tmp");
|
|
33406
33429
|
try {
|
|
33407
33430
|
const omocsDir = resolve5(homedir5(), ".omocs");
|
|
33408
|
-
if (!
|
|
33431
|
+
if (!existsSync8(omocsDir)) {
|
|
33409
33432
|
mkdirSync4(omocsDir, { recursive: true });
|
|
33410
33433
|
}
|
|
33411
|
-
if (
|
|
33434
|
+
if (existsSync8(tmpDir)) {
|
|
33412
33435
|
cleanupDir(tmpDir);
|
|
33413
33436
|
}
|
|
33414
33437
|
execSync3(`git clone ${GITHUB_REPO} --depth 1 "${tmpDir}"`, {
|
|
@@ -33416,7 +33439,7 @@ function resolveLaunchboardDir() {
|
|
|
33416
33439
|
timeout: 120000
|
|
33417
33440
|
});
|
|
33418
33441
|
const srcDir = resolve5(tmpDir, "packages", "launchboard");
|
|
33419
|
-
if (
|
|
33442
|
+
if (existsSync8(srcDir)) {
|
|
33420
33443
|
copyDir(srcDir, persistentDir);
|
|
33421
33444
|
cloneSpinner.succeed("Launchboard downloaded from GitHub");
|
|
33422
33445
|
cleanupDir(tmpDir);
|
|
@@ -33447,7 +33470,7 @@ function copyDir(src, dest) {
|
|
|
33447
33470
|
}
|
|
33448
33471
|
}
|
|
33449
33472
|
function cleanupDir(dir) {
|
|
33450
|
-
if (!
|
|
33473
|
+
if (!existsSync8(dir))
|
|
33451
33474
|
return;
|
|
33452
33475
|
try {
|
|
33453
33476
|
rmSync(dir, { recursive: true, force: true });
|
|
@@ -33466,7 +33489,7 @@ var init_launchboard_resolver = __esm(() => {
|
|
|
33466
33489
|
|
|
33467
33490
|
// src/commands/init.ts
|
|
33468
33491
|
import { execSync as execSync4 } from "child_process";
|
|
33469
|
-
import { existsSync as
|
|
33492
|
+
import { existsSync as existsSync9, readFileSync as readFileSync10, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "fs";
|
|
33470
33493
|
import { resolve as resolve6, dirname as dirname6 } from "path";
|
|
33471
33494
|
function registerInitCommand(program2) {
|
|
33472
33495
|
program2.command("init").description("Interactive setup wizard — configure OMOCS for the first time").option("-f, --force", "Overwrite existing configuration").action(async (options) => {
|
|
@@ -33512,7 +33535,7 @@ function registerInitCommand(program2) {
|
|
|
33512
33535
|
try {
|
|
33513
33536
|
const opencodeConfigPath = findOpencodeConfig();
|
|
33514
33537
|
let opencodeConfig = {};
|
|
33515
|
-
if (
|
|
33538
|
+
if (existsSync9(opencodeConfigPath)) {
|
|
33516
33539
|
opencodeConfig = JSON.parse(readFileSync10(opencodeConfigPath, "utf-8"));
|
|
33517
33540
|
}
|
|
33518
33541
|
if (!opencodeConfig.plugin)
|
|
@@ -33524,7 +33547,7 @@ function registerInitCommand(program2) {
|
|
|
33524
33547
|
opencodeConfig.plugin.push("omocs");
|
|
33525
33548
|
}
|
|
33526
33549
|
const configDir = dirname6(opencodeConfigPath);
|
|
33527
|
-
if (!
|
|
33550
|
+
if (!existsSync9(configDir)) {
|
|
33528
33551
|
mkdirSync5(configDir, { recursive: true });
|
|
33529
33552
|
}
|
|
33530
33553
|
writeFileSync5(opencodeConfigPath, JSON.stringify(opencodeConfig, null, 2));
|
|
@@ -33556,7 +33579,7 @@ function registerInitCommand(program2) {
|
|
|
33556
33579
|
lbSpinner.fail("Failed to install backend deps");
|
|
33557
33580
|
}
|
|
33558
33581
|
const frontendDir = resolve6(lbDir, "frontend");
|
|
33559
|
-
if (
|
|
33582
|
+
if (existsSync9(frontendDir)) {
|
|
33560
33583
|
const feSpinner = ora("Installing frontend dependencies...").start();
|
|
33561
33584
|
try {
|
|
33562
33585
|
execSync4("bun install", { cwd: frontendDir, stdio: "pipe" });
|
|
@@ -33566,7 +33589,7 @@ function registerInitCommand(program2) {
|
|
|
33566
33589
|
}
|
|
33567
33590
|
}
|
|
33568
33591
|
const dbPath = resolve6(lbDir, "launchboard.db");
|
|
33569
|
-
if (!
|
|
33592
|
+
if (!existsSync9(dbPath)) {
|
|
33570
33593
|
const dbSpinner = ora("Creating database...").start();
|
|
33571
33594
|
try {
|
|
33572
33595
|
execSync4("bunx drizzle-kit push", { cwd: lbDir, stdio: "pipe" });
|
|
@@ -33660,7 +33683,7 @@ function registerInitCommand(program2) {
|
|
|
33660
33683
|
try {
|
|
33661
33684
|
const opencodeConfigPath = findOpencodeConfig();
|
|
33662
33685
|
let opencodeConfig = {};
|
|
33663
|
-
if (
|
|
33686
|
+
if (existsSync9(opencodeConfigPath)) {
|
|
33664
33687
|
opencodeConfig = JSON.parse(readFileSync10(opencodeConfigPath, "utf-8"));
|
|
33665
33688
|
}
|
|
33666
33689
|
if (!opencodeConfig.plugin)
|
|
@@ -33669,7 +33692,7 @@ function registerInitCommand(program2) {
|
|
|
33669
33692
|
opencodeConfig.plugin.push("opencode-antigravity-auth@latest");
|
|
33670
33693
|
}
|
|
33671
33694
|
const configDir = dirname6(opencodeConfigPath);
|
|
33672
|
-
if (!
|
|
33695
|
+
if (!existsSync9(configDir)) {
|
|
33673
33696
|
mkdirSync5(configDir, { recursive: true });
|
|
33674
33697
|
}
|
|
33675
33698
|
writeFileSync5(opencodeConfigPath, JSON.stringify(opencodeConfig, null, 2));
|
|
@@ -34307,19 +34330,19 @@ var init_account = __esm(() => {
|
|
|
34307
34330
|
});
|
|
34308
34331
|
|
|
34309
34332
|
// src/core/store.ts
|
|
34310
|
-
import { existsSync as
|
|
34311
|
-
import { join as
|
|
34333
|
+
import { existsSync as existsSync11, readFileSync as readFileSync11, writeFileSync as writeFileSync6 } from "fs";
|
|
34334
|
+
import { join as join7 } from "path";
|
|
34312
34335
|
|
|
34313
34336
|
class Store {
|
|
34314
34337
|
filePath;
|
|
34315
34338
|
defaults;
|
|
34316
34339
|
constructor(filename, defaults) {
|
|
34317
34340
|
ensureConfigDir();
|
|
34318
|
-
this.filePath =
|
|
34341
|
+
this.filePath = join7(getConfigDir(), filename);
|
|
34319
34342
|
this.defaults = defaults;
|
|
34320
34343
|
}
|
|
34321
34344
|
async read() {
|
|
34322
|
-
if (!
|
|
34345
|
+
if (!existsSync11(this.filePath)) {
|
|
34323
34346
|
return { ...this.defaults };
|
|
34324
34347
|
}
|
|
34325
34348
|
try {
|
|
@@ -34348,10 +34371,10 @@ class Store {
|
|
|
34348
34371
|
});
|
|
34349
34372
|
}
|
|
34350
34373
|
async exists() {
|
|
34351
|
-
return
|
|
34374
|
+
return existsSync11(this.filePath);
|
|
34352
34375
|
}
|
|
34353
34376
|
async delete() {
|
|
34354
|
-
if (
|
|
34377
|
+
if (existsSync11(this.filePath)) {
|
|
34355
34378
|
const { unlinkSync: unlinkSync2 } = await import("fs");
|
|
34356
34379
|
unlinkSync2(this.filePath);
|
|
34357
34380
|
}
|
|
@@ -35124,7 +35147,7 @@ var require_bindings = __commonJS((exports, module) => {
|
|
|
35124
35147
|
var fs = __require("fs");
|
|
35125
35148
|
var path2 = __require("path");
|
|
35126
35149
|
var fileURLToPath4 = require_file_uri_to_path();
|
|
35127
|
-
var
|
|
35150
|
+
var join8 = path2.join;
|
|
35128
35151
|
var dirname7 = path2.dirname;
|
|
35129
35152
|
var exists = fs.accessSync && function(path3) {
|
|
35130
35153
|
try {
|
|
@@ -35177,7 +35200,7 @@ var require_bindings = __commonJS((exports, module) => {
|
|
|
35177
35200
|
var requireFunc = typeof __webpack_require__ === "function" ? __non_webpack_require__ : __require;
|
|
35178
35201
|
var tries = [], i = 0, l = opts.try.length, n, b, err;
|
|
35179
35202
|
for (;i < l; i++) {
|
|
35180
|
-
n =
|
|
35203
|
+
n = join8.apply(null, opts.try[i].map(function(p) {
|
|
35181
35204
|
return opts[p] || p;
|
|
35182
35205
|
}));
|
|
35183
35206
|
tries.push(n);
|
|
@@ -35235,14 +35258,14 @@ var require_bindings = __commonJS((exports, module) => {
|
|
|
35235
35258
|
if (dir === ".") {
|
|
35236
35259
|
dir = process.cwd();
|
|
35237
35260
|
}
|
|
35238
|
-
if (exists(
|
|
35261
|
+
if (exists(join8(dir, "package.json")) || exists(join8(dir, "node_modules"))) {
|
|
35239
35262
|
return dir;
|
|
35240
35263
|
}
|
|
35241
35264
|
if (prev === dir) {
|
|
35242
35265
|
throw new Error('Could not find module root given file: "' + file + '". Do you have a `package.json` file? ');
|
|
35243
35266
|
}
|
|
35244
35267
|
prev = dir;
|
|
35245
|
-
dir =
|
|
35268
|
+
dir = join8(dir, "..");
|
|
35246
35269
|
}
|
|
35247
35270
|
};
|
|
35248
35271
|
});
|
|
@@ -35821,17 +35844,17 @@ var require_lib4 = __commonJS((exports, module) => {
|
|
|
35821
35844
|
});
|
|
35822
35845
|
|
|
35823
35846
|
// src/commands/stats.ts
|
|
35824
|
-
import { existsSync as
|
|
35825
|
-
import { join as
|
|
35847
|
+
import { existsSync as existsSync12, writeFileSync as writeFileSync7 } from "fs";
|
|
35848
|
+
import { join as join8 } from "path";
|
|
35826
35849
|
import { homedir as homedir7 } from "os";
|
|
35827
35850
|
function findDatabase() {
|
|
35828
35851
|
const locations = [
|
|
35829
|
-
|
|
35830
|
-
|
|
35831
|
-
|
|
35852
|
+
join8(process.cwd(), ".opencode", "data.db"),
|
|
35853
|
+
join8(homedir7(), ".opencode", "data.db"),
|
|
35854
|
+
join8(homedir7(), ".config", "opencode", "data.db")
|
|
35832
35855
|
];
|
|
35833
35856
|
for (const loc of locations) {
|
|
35834
|
-
if (
|
|
35857
|
+
if (existsSync12(loc))
|
|
35835
35858
|
return loc;
|
|
35836
35859
|
}
|
|
35837
35860
|
return null;
|
|
@@ -35996,7 +36019,7 @@ var init_stats2 = __esm(() => {
|
|
|
35996
36019
|
|
|
35997
36020
|
// src/commands/launchboard.ts
|
|
35998
36021
|
import { execSync as execSync5 } from "child_process";
|
|
35999
|
-
import { existsSync as
|
|
36022
|
+
import { existsSync as existsSync13 } from "fs";
|
|
36000
36023
|
import { resolve as resolve7 } from "path";
|
|
36001
36024
|
function getLaunchboardDir() {
|
|
36002
36025
|
const result = resolveLaunchboardDir();
|
|
@@ -36024,7 +36047,7 @@ function registerLaunchboardCommand(program2) {
|
|
|
36024
36047
|
return;
|
|
36025
36048
|
}
|
|
36026
36049
|
const frontendDir = resolve7(LAUNCHBOARD_DIR, "frontend");
|
|
36027
|
-
if (
|
|
36050
|
+
if (existsSync13(frontendDir)) {
|
|
36028
36051
|
spinner.start("Installing frontend dependencies...");
|
|
36029
36052
|
try {
|
|
36030
36053
|
execSync5("bun install", { cwd: frontendDir, stdio: "pipe" });
|
|
@@ -36034,7 +36057,7 @@ function registerLaunchboardCommand(program2) {
|
|
|
36034
36057
|
}
|
|
36035
36058
|
}
|
|
36036
36059
|
const dbPath = resolve7(LAUNCHBOARD_DIR, "launchboard.db");
|
|
36037
|
-
if (!
|
|
36060
|
+
if (!existsSync13(dbPath)) {
|
|
36038
36061
|
spinner.start("Creating database...");
|
|
36039
36062
|
try {
|
|
36040
36063
|
execSync5("bunx drizzle-kit push", { cwd: LAUNCHBOARD_DIR, stdio: "pipe" });
|
|
@@ -36067,7 +36090,7 @@ function registerLaunchboardCommand(program2) {
|
|
|
36067
36090
|
const LAUNCHBOARD_DIR = getLaunchboardDir();
|
|
36068
36091
|
if (!LAUNCHBOARD_DIR)
|
|
36069
36092
|
return;
|
|
36070
|
-
if (!
|
|
36093
|
+
if (!existsSync13(resolve7(LAUNCHBOARD_DIR, "node_modules"))) {
|
|
36071
36094
|
console.log(source_default.yellow("⚠️ Dependencies not installed. Run: omocs launchboard setup"));
|
|
36072
36095
|
return;
|
|
36073
36096
|
}
|
|
@@ -36083,7 +36106,44 @@ function registerLaunchboardCommand(program2) {
|
|
|
36083
36106
|
console.log(source_default.dim(" Frontend:"), source_default.white("http://localhost:3040"));
|
|
36084
36107
|
console.log(source_default.dim(` Press Ctrl+C to stop
|
|
36085
36108
|
`));
|
|
36086
|
-
|
|
36109
|
+
const lbDir = LAUNCHBOARD_DIR;
|
|
36110
|
+
const frontendDir = resolve7(lbDir, "frontend");
|
|
36111
|
+
const isWin = process.platform === "win32";
|
|
36112
|
+
const runCmd = (cmd, cwd) => execSync5(cmd, { cwd, stdio: "inherit", shell: isWin ? "cmd.exe" : "/bin/sh" });
|
|
36113
|
+
if (!existsSync13(resolve7(lbDir, "node_modules"))) {
|
|
36114
|
+
console.log(source_default.dim(" Installing backend dependencies..."));
|
|
36115
|
+
runCmd("bun install", lbDir);
|
|
36116
|
+
}
|
|
36117
|
+
if (!existsSync13(resolve7(frontendDir, "node_modules"))) {
|
|
36118
|
+
console.log(source_default.dim(" Installing frontend dependencies..."));
|
|
36119
|
+
runCmd("bun install", frontendDir);
|
|
36120
|
+
}
|
|
36121
|
+
if (!existsSync13(resolve7(lbDir, "launchboard.db"))) {
|
|
36122
|
+
console.log(source_default.dim(" Creating database..."));
|
|
36123
|
+
runCmd("bunx drizzle-kit push", lbDir);
|
|
36124
|
+
console.log(source_default.dim(" Seeding sample data..."));
|
|
36125
|
+
runCmd("bun run seed", lbDir);
|
|
36126
|
+
}
|
|
36127
|
+
const { spawn: spawnProc } = await import("child_process");
|
|
36128
|
+
const backendProc = spawnProc("bun", ["run", "start"], { cwd: lbDir, stdio: "inherit", shell: isWin });
|
|
36129
|
+
const frontendProc = spawnProc("bun", ["run", "dev"], { cwd: frontendDir, stdio: "inherit", shell: isWin });
|
|
36130
|
+
const cleanup2 = () => {
|
|
36131
|
+
backendProc.kill();
|
|
36132
|
+
frontendProc.kill();
|
|
36133
|
+
process.exit(0);
|
|
36134
|
+
};
|
|
36135
|
+
process.on("SIGINT", cleanup2);
|
|
36136
|
+
process.on("SIGTERM", cleanup2);
|
|
36137
|
+
await new Promise((res) => {
|
|
36138
|
+
backendProc.on("exit", () => {
|
|
36139
|
+
frontendProc.kill();
|
|
36140
|
+
res();
|
|
36141
|
+
});
|
|
36142
|
+
frontendProc.on("exit", () => {
|
|
36143
|
+
backendProc.kill();
|
|
36144
|
+
res();
|
|
36145
|
+
});
|
|
36146
|
+
});
|
|
36087
36147
|
}
|
|
36088
36148
|
});
|
|
36089
36149
|
lb.command("status").description("Check if Launchboard is running").action(async () => {
|
|
@@ -36117,14 +36177,14 @@ var exports_src = {};
|
|
|
36117
36177
|
__export(exports_src, {
|
|
36118
36178
|
program: () => program2
|
|
36119
36179
|
});
|
|
36120
|
-
import { readFileSync as readFileSync13, existsSync as
|
|
36180
|
+
import { readFileSync as readFileSync13, existsSync as existsSync14 } from "fs";
|
|
36121
36181
|
import { dirname as dirname7, resolve as resolve8 } from "path";
|
|
36122
36182
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
36123
36183
|
function findPackageJson() {
|
|
36124
36184
|
let dir = dirname7(fileURLToPath4(import.meta.url));
|
|
36125
36185
|
for (let i = 0;i < 5; i++) {
|
|
36126
36186
|
const candidate = resolve8(dir, "package.json");
|
|
36127
|
-
if (
|
|
36187
|
+
if (existsSync14(candidate))
|
|
36128
36188
|
return candidate;
|
|
36129
36189
|
dir = dirname7(dir);
|
|
36130
36190
|
}
|
|
@@ -36269,14 +36329,14 @@ async function checkAndUpdate(currentVersion) {
|
|
|
36269
36329
|
}
|
|
36270
36330
|
|
|
36271
36331
|
// bin/omocs.ts
|
|
36272
|
-
import { readFileSync as readFileSync14, existsSync as
|
|
36332
|
+
import { readFileSync as readFileSync14, existsSync as existsSync15 } from "fs";
|
|
36273
36333
|
import { dirname as dirname8, resolve as resolve9 } from "path";
|
|
36274
36334
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
36275
36335
|
function findPackageJson2() {
|
|
36276
36336
|
let dir = dirname8(fileURLToPath5(import.meta.url));
|
|
36277
36337
|
for (let i = 0;i < 5; i++) {
|
|
36278
36338
|
const candidate = resolve9(dir, "package.json");
|
|
36279
|
-
if (
|
|
36339
|
+
if (existsSync15(candidate))
|
|
36280
36340
|
return candidate;
|
|
36281
36341
|
dir = dirname8(dir);
|
|
36282
36342
|
}
|
package/package.json
CHANGED