@arkhera30/cli 0.1.4 → 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.
@@ -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/arkhera/horus/qmd-daemon:latest
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/arkhera/horus/anvil:latest
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/arkhera/horus/vault:latest
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/arkhera/horus/vault-mcp:latest
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/arkhera/horus/forge:latest
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
@@ -298,6 +298,13 @@ async function detectRuntime(preferred) {
298
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"
299
299
  );
300
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
+ }
301
308
  async function composeStreaming(runtime, args) {
302
309
  const bin = runtime.name;
303
310
  const result = await execa(bin, ["compose", ...args], {
@@ -542,14 +549,23 @@ var setupCommand = new Command("setup").description("Interactive first-run setup
542
549
  console.error(error.message);
543
550
  process.exit(1);
544
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
+ }
545
562
  console.log("");
546
563
  console.log(chalk.bold("Pulling container images..."));
547
564
  try {
548
- await composeStreaming(runtime, ["pull"]);
549
- } catch (error) {
550
- console.log(chalk.red("Failed to pull images."));
551
- console.log(chalk.dim(error.message));
552
- 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."));
553
569
  }
554
570
  console.log("");
555
571
  console.log(chalk.bold("Starting Horus services..."));
@@ -1248,14 +1264,23 @@ var updateCommand = new Command7("update").description("Update Horus to the late
1248
1264
  snapshotSpinner.warn("Could not save snapshot (update will proceed)");
1249
1265
  console.log(chalk7.dim(error.message));
1250
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
+ }
1251
1277
  console.log("");
1252
1278
  console.log(chalk7.bold("Pulling latest images..."));
1253
1279
  try {
1254
- await composeStreaming(runtime, ["pull"]);
1255
- } catch (error) {
1256
- console.log(chalk7.red("Failed to pull images."));
1257
- console.log(chalk7.dim(error.message));
1258
- 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."));
1259
1284
  }
1260
1285
  console.log("");
1261
1286
  console.log(chalk7.bold("Restarting services..."));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkhera30/cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "CLI for managing the Horus AI development stack",
5
5
  "type": "module",
6
6
  "bin": {