@arkhera30/cli 0.1.3 → 0.1.5
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/compose/docker-compose.yml +5 -5
- package/dist/index.js +39 -11
- package/package.json +1 -1
|
@@ -26,7 +26,7 @@ services:
|
|
|
26
26
|
#
|
|
27
27
|
# start_period covers first-boot GGUF model download (~1-2 GB) + initial embed.
|
|
28
28
|
qmd-daemon:
|
|
29
|
-
image: ghcr.io/
|
|
29
|
+
image: ghcr.io/arjunkhera/horus/qmd-daemon:latest
|
|
30
30
|
environment:
|
|
31
31
|
- QMD_DAEMON_PORT=8181
|
|
32
32
|
volumes:
|
|
@@ -51,7 +51,7 @@ services:
|
|
|
51
51
|
# ── Anvil ──────────────────────────────────────────────────────────────────
|
|
52
52
|
# Notes system and MCP server. Indexes markdown files from the Notes repo.
|
|
53
53
|
anvil:
|
|
54
|
-
image: ghcr.io/
|
|
54
|
+
image: ghcr.io/arjunkhera/horus/anvil:latest
|
|
55
55
|
ports:
|
|
56
56
|
- "${ANVIL_PORT:-8100}:8100"
|
|
57
57
|
volumes:
|
|
@@ -94,7 +94,7 @@ services:
|
|
|
94
94
|
# ── Vault ──────────────────────────────────────────────────────────────────
|
|
95
95
|
# Knowledge service. Semantic search over the knowledge-base repo.
|
|
96
96
|
vault:
|
|
97
|
-
image: ghcr.io/
|
|
97
|
+
image: ghcr.io/arjunkhera/horus/vault:latest
|
|
98
98
|
ports:
|
|
99
99
|
- "${VAULT_PORT:-8000}:8000"
|
|
100
100
|
volumes:
|
|
@@ -140,7 +140,7 @@ services:
|
|
|
140
140
|
# ── Vault MCP ──────────────────────────────────────────────────────────────
|
|
141
141
|
# Thin MCP adapter that translates MCP tool calls to Vault REST API calls.
|
|
142
142
|
vault-mcp:
|
|
143
|
-
image: ghcr.io/
|
|
143
|
+
image: ghcr.io/arjunkhera/horus/vault-mcp:latest
|
|
144
144
|
ports:
|
|
145
145
|
- "${VAULT_MCP_PORT:-8300}:8300"
|
|
146
146
|
environment:
|
|
@@ -172,7 +172,7 @@ services:
|
|
|
172
172
|
# ── Forge ──────────────────────────────────────────────────────────────────
|
|
173
173
|
# Workspace manager and package registry MCP server.
|
|
174
174
|
forge:
|
|
175
|
-
image: ghcr.io/
|
|
175
|
+
image: ghcr.io/arjunkhera/horus/forge:latest
|
|
176
176
|
ports:
|
|
177
177
|
- "${FORGE_PORT:-8200}:8200"
|
|
178
178
|
volumes:
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { Command as Command10 } from "commander";
|
|
5
5
|
import chalk10 from "chalk";
|
|
6
|
+
import { createRequire } from "module";
|
|
6
7
|
|
|
7
8
|
// src/commands/setup.ts
|
|
8
9
|
import { Command } from "commander";
|
|
@@ -297,6 +298,13 @@ async function detectRuntime(preferred) {
|
|
|
297
298
|
"No container runtime found.\n\nHorus requires Docker or Podman with the Compose plugin.\n\nInstall one of:\n - Docker Desktop: https://www.docker.com/products/docker-desktop/\n - Podman Desktop: https://podman-desktop.io/\n"
|
|
298
299
|
);
|
|
299
300
|
}
|
|
301
|
+
async function registryLogin(runtime, registry, token, username = "horus") {
|
|
302
|
+
const result = await execa(runtime.name, ["login", registry, "-u", username, "--password-stdin"], {
|
|
303
|
+
input: token,
|
|
304
|
+
reject: false
|
|
305
|
+
});
|
|
306
|
+
return result.exitCode === 0;
|
|
307
|
+
}
|
|
300
308
|
async function composeStreaming(runtime, args) {
|
|
301
309
|
const bin = runtime.name;
|
|
302
310
|
const result = await execa(bin, ["compose", ...args], {
|
|
@@ -541,14 +549,23 @@ var setupCommand = new Command("setup").description("Interactive first-run setup
|
|
|
541
549
|
console.error(error.message);
|
|
542
550
|
process.exit(1);
|
|
543
551
|
}
|
|
552
|
+
const ghcrToken = config.github_token || process.env.GITHUB_TOKEN || "";
|
|
553
|
+
if (ghcrToken) {
|
|
554
|
+
const loginSpinner = ora("Authenticating with ghcr.io...").start();
|
|
555
|
+
const ok = await registryLogin(runtime, "ghcr.io", ghcrToken);
|
|
556
|
+
if (ok) {
|
|
557
|
+
loginSpinner.succeed("Authenticated with ghcr.io");
|
|
558
|
+
} else {
|
|
559
|
+
loginSpinner.warn("GHCR login failed \u2014 private images may not pull");
|
|
560
|
+
}
|
|
561
|
+
}
|
|
544
562
|
console.log("");
|
|
545
563
|
console.log(chalk.bold("Pulling container images..."));
|
|
546
564
|
try {
|
|
547
|
-
await composeStreaming(runtime, ["pull"]);
|
|
548
|
-
} catch
|
|
549
|
-
console.log(chalk.
|
|
550
|
-
console.log(chalk.dim(
|
|
551
|
-
process.exit(1);
|
|
565
|
+
await composeStreaming(runtime, ["pull", "--ignore-pull-failures"]);
|
|
566
|
+
} catch {
|
|
567
|
+
console.log(chalk.yellow("Some images could not be pulled."));
|
|
568
|
+
console.log(chalk.dim("Continuing \u2014 services will be built from source if build contexts are available."));
|
|
552
569
|
}
|
|
553
570
|
console.log("");
|
|
554
571
|
console.log(chalk.bold("Starting Horus services..."));
|
|
@@ -1247,14 +1264,23 @@ var updateCommand = new Command7("update").description("Update Horus to the late
|
|
|
1247
1264
|
snapshotSpinner.warn("Could not save snapshot (update will proceed)");
|
|
1248
1265
|
console.log(chalk7.dim(error.message));
|
|
1249
1266
|
}
|
|
1267
|
+
const ghcrToken = config.github_token || process.env.GITHUB_TOKEN || "";
|
|
1268
|
+
if (ghcrToken) {
|
|
1269
|
+
const loginSpinner = ora6("Authenticating with ghcr.io...").start();
|
|
1270
|
+
const ok = await registryLogin(runtime, "ghcr.io", ghcrToken);
|
|
1271
|
+
if (ok) {
|
|
1272
|
+
loginSpinner.succeed("Authenticated with ghcr.io");
|
|
1273
|
+
} else {
|
|
1274
|
+
loginSpinner.warn("GHCR login failed \u2014 private images may not pull");
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1250
1277
|
console.log("");
|
|
1251
1278
|
console.log(chalk7.bold("Pulling latest images..."));
|
|
1252
1279
|
try {
|
|
1253
|
-
await composeStreaming(runtime, ["pull"]);
|
|
1254
|
-
} catch
|
|
1255
|
-
console.log(chalk7.
|
|
1256
|
-
console.log(chalk7.dim(
|
|
1257
|
-
process.exit(1);
|
|
1280
|
+
await composeStreaming(runtime, ["pull", "--ignore-pull-failures"]);
|
|
1281
|
+
} catch {
|
|
1282
|
+
console.log(chalk7.yellow("Some images could not be pulled."));
|
|
1283
|
+
console.log(chalk7.dim("Continuing \u2014 services will be built from source if build contexts are available."));
|
|
1258
1284
|
}
|
|
1259
1285
|
console.log("");
|
|
1260
1286
|
console.log(chalk7.bold("Restarting services..."));
|
|
@@ -1774,8 +1800,10 @@ backupCommand.command("restore <file>").description("Restore Horus data from a b
|
|
|
1774
1800
|
});
|
|
1775
1801
|
|
|
1776
1802
|
// src/index.ts
|
|
1803
|
+
var require2 = createRequire(import.meta.url);
|
|
1804
|
+
var { version } = require2("../package.json");
|
|
1777
1805
|
var program = new Command10();
|
|
1778
|
-
program.name("horus").description("CLI for managing the Horus Docker Compose stack").version(
|
|
1806
|
+
program.name("horus").description("CLI for managing the Horus Docker Compose stack").version(version);
|
|
1779
1807
|
program.addCommand(setupCommand);
|
|
1780
1808
|
program.addCommand(upCommand);
|
|
1781
1809
|
program.addCommand(downCommand);
|