@indigoai-us/hq-cli 5.180.0 → 5.181.0

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 CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.181.0] — 2026-09-24
6
+
7
+ ### Changed
8
+
9
+ - `hq daemon` runs the session host from the hq-cloud copy it keeps up to date (hq-cloud's `hq-outpost-session-host`, when that copy has it), the same way it already runs sync and the outpost heartbeat, and restarts it after an hq-cloud update. Session-host fixes, such as starting on an Outpost that signs in with machine credentials, now reach boxes without an hq CLI release.
10
+
5
11
  ## [5.180.0] — 2026-09-24
6
12
 
7
13
  ## [5.179.1] — 2026-09-24
@@ -432,7 +432,7 @@ async function runServiceSelfUpdate(d) {
432
432
  updateCli: cliSelfUpdatable() ? () => daemonSelfUpdate({ env }) : null,
433
433
  tools: TOOL_NAMES.map((name) => hostToolUpdater(name, env, d.home)),
434
434
  updateHqCloud: async () => updateManagedHqCloud(paths.root, env),
435
- hqCloudUnits: hqCloudUnits(detected.type),
435
+ hqCloudUnits: hqCloudUnits(detected.type, enabledServices(detected.type, readDaemonConfig(paths.configPath))),
436
436
  requestDaemonRestart: () => writeControlRequest(paths.requestsDir, { action: "restart-daemon" }),
437
437
  requestRestart: (unit) => writeControlRequest(paths.requestsDir, { action: "restart", unit }),
438
438
  log: d.out,
@@ -64,6 +64,8 @@ export interface PlanContext {
64
64
  syncRunnerPath: string | null;
65
65
  /** hq-cloud's `hq-outpost-heartbeat` bin, when the hq-cloud in use has one. */
66
66
  heartbeatRunnerPath: string | null;
67
+ /** hq-cloud's `hq-outpost-session-host` bin, when the hq-cloud in use has one. */
68
+ sessionHostRunnerPath: string | null;
67
69
  signedIn: boolean;
68
70
  /** ~/.hq-agent/kit.json exists. */
69
71
  kitConfigured: boolean;
@@ -89,11 +91,12 @@ export interface PlanContext {
89
91
  codexRunnerScript: string | null;
90
92
  }
91
93
  /**
92
- * The units that run hq-cloud's code on a machine type, restarted after the
93
- * updater installs a new hq-cloud. Only outposts and self-hosted machines run
94
- * the outpost heartbeat; agent machines run the agent kit's own.
94
+ * The units that run hq-cloud's code on this host, restarted after the updater
95
+ * installs a new hq-cloud. Only outposts and self-hosted machines run the
96
+ * outpost heartbeat (agent machines run the agent kit's own); the session host
97
+ * is included wherever it is enabled.
95
98
  */
96
- export declare function hqCloudUnits(machineType: MachineType): ServiceName[];
99
+ export declare function hqCloudUnits(machineType: MachineType, enabled: readonly ServiceName[]): ServiceName[];
97
100
  /** Written by outpost provisioning; the daemon runs it rather than re-implementing Codex login and relay setup. */
98
101
  export declare const CODEX_RUNNER_SCRIPT = "/usr/local/bin/outpost-codex-runner.sh";
99
102
  /** The outpost's Claude runner script, read for the session name it uses. */
@@ -97,12 +97,18 @@ function firstBlock(checks) {
97
97
  return hit ? { state: "waiting", reason: hit[1] } : undefined;
98
98
  }
99
99
  /**
100
- * The units that run hq-cloud's code on a machine type, restarted after the
101
- * updater installs a new hq-cloud. Only outposts and self-hosted machines run
102
- * the outpost heartbeat; agent machines run the agent kit's own.
100
+ * The units that run hq-cloud's code on this host, restarted after the updater
101
+ * installs a new hq-cloud. Only outposts and self-hosted machines run the
102
+ * outpost heartbeat (agent machines run the agent kit's own); the session host
103
+ * is included wherever it is enabled.
103
104
  */
104
- export function hqCloudUnits(machineType) {
105
- return machineType === "outpost" || machineType === "self-hosted" ? ["sync", "heartbeat"] : ["sync"];
105
+ export function hqCloudUnits(machineType, enabled) {
106
+ const units = ["sync"];
107
+ if (machineType === "outpost" || machineType === "self-hosted")
108
+ units.push("heartbeat");
109
+ if (enabled.includes("session-host"))
110
+ units.push("session-host");
111
+ return units;
106
112
  }
107
113
  /** Written by outpost provisioning; the daemon runs it rather than re-implementing Codex login and relay setup. */
108
114
  export const CODEX_RUNNER_SCRIPT = "/usr/local/bin/outpost-codex-runner.sh";
@@ -181,7 +187,10 @@ function planService(service, ctx) {
181
187
  case "session-host":
182
188
  return [
183
189
  base(service, {
184
- command: { type: "hq", args: ["outposts", "session-host"] },
190
+ // hq-cloud's own session host picks up hq-cloud updates without a CLI release.
191
+ command: ctx.sessionHostRunnerPath
192
+ ? { type: "node", script: ctx.sessionHostRunnerPath, args: [] }
193
+ : { type: "hq", args: ["outposts", "session-host"] },
185
194
  env: ctx.hqRoot ? { HQ_ROOT: ctx.hqRoot } : {},
186
195
  blocked: firstBlock([[!ctx.signedIn, NOT_SIGNED_IN]]),
187
196
  }),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Which hq-cloud the daemon runs sync and the outpost heartbeat from.
2
+ * Which hq-cloud the daemon runs sync, the outpost heartbeat and the session host from.
3
3
  *
4
4
  * The hq CLI ships with a copy of hq-cloud, but hq-cloud releases more often
5
5
  * than the CLI. The updater keeps a newer copy of the same major version in
@@ -27,6 +27,8 @@ export interface HqCloudRunners {
27
27
  syncRunner: string | null;
28
28
  /** `hq-outpost-heartbeat`, which older hq-cloud releases do not have. */
29
29
  heartbeat: string | null;
30
+ /** `hq-outpost-session-host`, which older hq-cloud releases do not have. */
31
+ sessionHost: string | null;
30
32
  }
31
33
  export declare function hqCloudRunners(root: string, exists?: (p: string) => boolean): HqCloudRunners;
32
34
  /** Install the newest release of the bundled major version, never older than the bundled copy. */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Which hq-cloud the daemon runs sync and the outpost heartbeat from.
2
+ * Which hq-cloud the daemon runs sync, the outpost heartbeat and the session host from.
3
3
  *
4
4
  * The hq CLI ships with a copy of hq-cloud, but hq-cloud releases more often
5
5
  * than the CLI. The updater keeps a newer copy of the same major version in
@@ -48,7 +48,11 @@ export function hqCloudRunners(root, exists = fs.existsSync) {
48
48
  const p = path.join(root, "dist", "bin", name);
49
49
  return exists(p) ? p : null;
50
50
  };
51
- return { syncRunner: bin("sync-runner.js"), heartbeat: bin("outpost-heartbeat.js") };
51
+ return {
52
+ syncRunner: bin("sync-runner.js"),
53
+ heartbeat: bin("outpost-heartbeat.js"),
54
+ sessionHost: bin("outpost-session-host.js"),
55
+ };
52
56
  }
53
57
  /** Install the newest release of the bundled major version, never older than the bundled copy. */
54
58
  export function hqCloudInstallCommand(prefix, bundledVersion, platform = process.platform) {
@@ -249,7 +249,7 @@ export async function runDaemon(opts) {
249
249
  const hqRoot = configured && fs.existsSync(configured) ? configured : undefined;
250
250
  // Re-picked every reconcile, so a newer hq-cloud from the updater is used as soon as it lands.
251
251
  const hqCloud = currentHqCloud(paths.root);
252
- const runners = hqCloud ? hqCloudRunners(hqCloud.root) : { syncRunner: null, heartbeat: null };
252
+ const runners = hqCloud ? hqCloudRunners(hqCloud.root) : { syncRunner: null, heartbeat: null, sessionHost: null };
253
253
  return planUnits(enabledServices(machineType, config), {
254
254
  machineType,
255
255
  platform,
@@ -257,6 +257,7 @@ export async function runDaemon(opts) {
257
257
  hqRoot,
258
258
  syncRunnerPath: runners.syncRunner,
259
259
  heartbeatRunnerPath: runners.heartbeat,
260
+ sessionHostRunnerPath: runners.sessionHost,
260
261
  signedIn: signedIn(env, home, log),
261
262
  kitConfigured: fs.existsSync(agentKitPaths(home, env).kitConfigPath),
262
263
  desktopAppManagesSync: machineType === "desktop" &&
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.180.0",
3
+ "version": "5.181.0",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {