@indigoai-us/hq-cli 5.345.178 → 5.345.180

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 (117) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/command-catalog.generated.d.ts +197 -1
  3. package/dist/command-catalog.generated.js +241 -1
  4. package/dist/commands/bot-jobs.d.ts +11 -9
  5. package/dist/commands/bot-jobs.js +56 -21
  6. package/dist/commands/bot.d.ts +37 -1
  7. package/dist/commands/bot.js +289 -13
  8. package/dist/commands/channels.d.ts +18 -1
  9. package/dist/commands/channels.js +185 -1
  10. package/dist/commands/daemon.d.ts +2 -0
  11. package/dist/commands/daemon.js +15 -4
  12. package/dist/commands/integrations-core.d.ts +2 -0
  13. package/dist/commands/integrations-core.js +1 -0
  14. package/dist/commands/lanes.d.ts +1 -1
  15. package/dist/commands/lanes.js +6 -2
  16. package/dist/commands/mesh.js +19 -0
  17. package/dist/commands/sources.d.ts +89 -0
  18. package/dist/commands/sources.js +363 -1
  19. package/dist/hq-cloud-sync-runner/bin/sync-runner.js +2285 -1743
  20. package/dist/hq-cloud-sync-runner/package.json +1 -1
  21. package/dist/lib/bot/config.d.ts +8 -0
  22. package/dist/lib/bot/fleet-local.d.ts +1 -1
  23. package/dist/lib/bot/fleet-local.js +82 -30
  24. package/dist/lib/bot/jobs/hot-signal-sync.d.ts +109 -0
  25. package/dist/lib/bot/jobs/hot-signal-sync.js +177 -0
  26. package/dist/lib/bot/local-jobs.d.ts +40 -4
  27. package/dist/lib/bot/local-jobs.js +72 -5
  28. package/dist/lib/bot/run.d.ts +15 -0
  29. package/dist/lib/bot/run.js +99 -1
  30. package/dist/lib/bot/runtime-auth.d.ts +119 -0
  31. package/dist/lib/bot/runtime-auth.js +251 -0
  32. package/dist/lib/daemon/catalog.d.ts +1 -0
  33. package/dist/lib/daemon/catalog.js +1 -1
  34. package/dist/lib/daemon/handoff.d.ts +4 -0
  35. package/dist/lib/daemon/handoff.js +6 -2
  36. package/dist/lib/daemon/install.d.ts +70 -2
  37. package/dist/lib/daemon/install.js +185 -27
  38. package/dist/lib/daemon/legacy.d.ts +9 -3
  39. package/dist/lib/daemon/legacy.js +11 -4
  40. package/dist/lib/daemon/migrate.js +1 -1
  41. package/dist/lib/daemon/run.d.ts +5 -2
  42. package/dist/lib/daemon/run.js +74 -22
  43. package/dist/lib/doctor/checks/anywhere.d.ts +6 -0
  44. package/dist/lib/doctor/checks/anywhere.js +35 -6
  45. package/dist/lib/flag-registry-worker-source.generated.d.ts +1 -1
  46. package/dist/lib/flag-registry-worker-source.generated.js +1 -1
  47. package/dist/lib/hot-channels/adapters/__fixtures__/dummy.d.ts +33 -0
  48. package/dist/lib/hot-channels/adapters/__fixtures__/dummy.js +53 -0
  49. package/dist/lib/hot-channels/adapters/__fixtures__/meeting-providers.d.ts +38 -0
  50. package/dist/lib/hot-channels/adapters/__fixtures__/meeting-providers.js +64 -0
  51. package/dist/lib/hot-channels/adapters/attio.d.ts +67 -0
  52. package/dist/lib/hot-channels/adapters/attio.js +374 -0
  53. package/dist/lib/hot-channels/adapters/gmail.d.ts +111 -0
  54. package/dist/lib/hot-channels/adapters/gmail.js +413 -0
  55. package/dist/lib/hot-channels/adapters/index.d.ts +23 -0
  56. package/dist/lib/hot-channels/adapters/index.js +39 -0
  57. package/dist/lib/hot-channels/adapters/linear.d.ts +79 -0
  58. package/dist/lib/hot-channels/adapters/linear.js +321 -0
  59. package/dist/lib/hot-channels/adapters/meeting-providers.d.ts +86 -0
  60. package/dist/lib/hot-channels/adapters/meeting-providers.js +253 -0
  61. package/dist/lib/hot-channels/adapters/meetings.d.ts +81 -0
  62. package/dist/lib/hot-channels/adapters/meetings.js +525 -0
  63. package/dist/lib/hot-channels/adapters/slack.d.ts +70 -0
  64. package/dist/lib/hot-channels/adapters/slack.js +277 -0
  65. package/dist/lib/hot-channels/alert.d.ts +78 -0
  66. package/dist/lib/hot-channels/alert.js +179 -0
  67. package/dist/lib/hot-channels/audience.d.ts +15 -0
  68. package/dist/lib/hot-channels/audience.js +25 -0
  69. package/dist/lib/hot-channels/contract.d.ts +146 -0
  70. package/dist/lib/hot-channels/contract.js +20 -0
  71. package/dist/lib/hot-channels/cursors.d.ts +41 -0
  72. package/dist/lib/hot-channels/cursors.js +84 -0
  73. package/dist/lib/hot-channels/index.d.ts +10 -0
  74. package/dist/lib/hot-channels/index.js +10 -0
  75. package/dist/lib/hot-channels/landing.d.ts +83 -0
  76. package/dist/lib/hot-channels/landing.js +175 -0
  77. package/dist/lib/hot-channels/ledger.d.ts +101 -0
  78. package/dist/lib/hot-channels/ledger.js +203 -0
  79. package/dist/lib/hot-channels/loop.d.ts +74 -0
  80. package/dist/lib/hot-channels/loop.js +221 -0
  81. package/dist/lib/hot-channels/prompts/signals-pass.md +22 -0
  82. package/dist/lib/hot-channels/registry.d.ts +28 -0
  83. package/dist/lib/hot-channels/registry.js +121 -0
  84. package/dist/lib/hot-channels/run.d.ts +137 -0
  85. package/dist/lib/hot-channels/run.js +324 -0
  86. package/dist/lib/hot-channels/signals-pass.d.ts +150 -0
  87. package/dist/lib/hot-channels/signals-pass.js +581 -0
  88. package/dist/lib/hot-channels/sync-lock.d.ts +51 -0
  89. package/dist/lib/hot-channels/sync-lock.js +224 -0
  90. package/dist/lib/install/hook-target.d.ts +6 -2
  91. package/dist/lib/install/hook-target.js +9 -4
  92. package/dist/lib/lanes/accounts.d.ts +1 -17
  93. package/dist/lib/lanes/accounts.js +5 -45
  94. package/dist/lib/lanes/loop.d.ts +10 -0
  95. package/dist/lib/lanes/loop.js +18 -1
  96. package/dist/lib/lanes/provider-home.d.ts +24 -0
  97. package/dist/lib/lanes/provider-home.js +52 -0
  98. package/dist/lib/lanes/spawn.d.ts +12 -0
  99. package/dist/lib/lanes/spawn.js +27 -0
  100. package/dist/lib/mesh/live/daemon/doctor.d.ts +3 -0
  101. package/dist/lib/mesh/live/daemon/doctor.js +13 -0
  102. package/dist/lib/mesh/live/daemon/owner-inbox-push.d.ts +94 -0
  103. package/dist/lib/mesh/live/daemon/owner-inbox-push.js +273 -0
  104. package/dist/lib/mesh/live/daemon/run.js +31 -0
  105. package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +14 -0
  106. package/dist/lib/mesh/live/daemon/work-subscribe.js +210 -3
  107. package/dist/lib/mesh/live/paths.d.ts +2 -0
  108. package/dist/lib/mesh/live/paths.js +2 -0
  109. package/dist/lib/sync-core/flag.d.ts +1 -1
  110. package/dist/lib/sync-core/flag.js +1 -1
  111. package/dist/lib/sync-core/reconcile.d.ts +1 -1
  112. package/dist/lib/sync-core/reconcile.js +9 -7
  113. package/dist/lib/sync-core/release.d.ts +3 -3
  114. package/dist/lib/sync-core/release.js +4 -4
  115. package/dist/lib/sync-core/rollout-state.d.ts +1 -0
  116. package/dist/lib/sync-core/rollout-state.js +1 -0
  117. package/package.json +8 -8
package/CHANGELOG.md CHANGED
@@ -2,6 +2,45 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.345.180] — 2026-10-30
6
+ - New `hq channels add <channel> <member...>` and `hq channels remove <channel> <member>`. An owner can now add a personal bot (or a teammate) to a channel from the CLI by @handle, email, or prs_/agt_ uid, so everyone in the channel can @mention it. Before this there was no verb for it, and posting "@bot" into the channel was refused with "No channel member matches". The server's join-first refusal and the owner-or-company-admin rule for adding and removing members are explained in plain words. Feedback e165b286-b059-4d5c-bd44-ac344f00c821.
7
+ - A local bot can now have a model login of its own, so it no longer has to use yours. `hq bot login <name> [--runtime claude|codex]` runs the runtime's own sign-in into `~/.hq/bots/<name>/auth/<runtime>/` (`CLAUDE_CONFIG_DIR` or `CODEX_HOME`). `hq bot logout <name>` signs that login out and deletes the folder. `hq bot set <name> --account <id|default>` points the bot at an existing `hq capacity` account instead. Every model turn uses the chosen login. When that login is missing or its account is gone, the turn does not fall back to your login: the bot replies in the DM saying so, keeps the message pending, and `hq bot status` shows the problem. `hq bot status` now has a `login:` line (default, own, or the account name) and never shows a token.
8
+ - `hq bot set <name> --runtime <claude|codex|grok>` switches a bot's model CLI. It first runs one test turn on the new runtime with the bot's login, and changes nothing if that fails. It then stops a running bot, backs up `bot.json` and moves the old runtime's session files to `~/.hq/bots/<name>/session-archive/`, saves the new runtime, and starts the bot again. If the bot does not come back, the old runtime, settings and sessions are restored. A model or thinking level that does not fit the new runtime is reset to the default. DM history, memory and the bot's HQ identity are not touched.
9
+ - Pins hq-fleet-local v0.4.14 so Grok browser sign-in returns valid machine-readable authentication results while retaining the first-start delivery fix.
10
+ - Personal fleet bots now share one runtime installation per engine version on the same computer. Creating another bot keeps its own profile and credentials without reinstalling the runtime. Upgrades reuse a downloaded runtime archive only when its SHA-256 matches the new release pin.
11
+ - The bot's daily hot-channel sync now skips a run, writing nothing, when the bot's `bot.json` is missing or cannot be read. It no longer falls back to the company the bot started with. The job stays in place and tries again at its next run.
12
+ - A hot-channel sync that loses its lock now stops before writing meeting notes, moving a cursor, or adding a run ledger line. Only the ledger line that records the lost lock is still written.
13
+ - Fixed (hq-cloud): bump hq-cloud to 6.18.105 so company sync keeps downloading when the server refuses some uploads.
14
+ - Lane self-review. `hq lanes create` adds a self-review rule to every lane brief (claude, codex and grok), right after the temp-home rule. Before reporting done on work that opens or updates a PR, the lane runs the paranoid /review on its own final diff, fixes every critical and re-runs until there are 0 criticals. It puts the report in the PR body under a "Self-review" heading with the head SHA, and saves it under `workspace/reviews/` in the `hq-pr-review.v1` format that the core-pr-reviews channel guard reads. The lane never posts to core-pr-reviews, and if it cannot produce the report, the lane marks the PR as draft. A resumed lane carries the rule once.
15
+ - On a person (`prs_`) account the mesh daemon now also subscribes to the owner's `hq/{prs}/dm` realtime topic. From each wake it reads only `type`, `channelId` and `eventId`. A channel event counts only when that channel's company is in the allowed set (the device default company plus companies from recent sessions); an unknown channel or a channel with no company is dropped. Each kept event bumps a counter in `~/.hq/work-mesh/owner-inbox-push.json` (count, last event time and type, heartbeat), which is written atomically with mode 0600. Message text, poster name and email are never stored, logged or forwarded. New `hq mesh push-status [--json]` reports whether the signal is live or stale with the last event time, and exits 1 when stale. `hq mesh daemon doctor` shows the same line and reports a stale push as unhealthy while the daemon runs. The owner subscription is best-effort: if the broker rejects it, the work topic keeps running and the daemon retries the owner subscribe with backoff, up to 6 times per connection. On an account that is not a person account, push-status reports `off` and doctor skips the check. Agent (`agt_`) accounts are unchanged.
16
+ - Updates the new sync engine to 0.1.23, fixing concurrent rename/edit stalls
17
+ and delayed recovery after delete confirmations.
18
+ - Requires version 0.1.23 or newer for full sync of both personal and company
19
+ vaults. If an engine update fails, an older engine cannot join the rollout.
20
+ - Avoids full local filesystem scans for remote-only wake events when local
21
+ watcher coverage is complete, while preserving full scans after local changes.
22
+ - Receive files from the new sync engine while a computer uses legacy sync, including personal vaults and rollback, with current access and single-owner checks.
23
+ - Use a separate rollout switch for the new sync engine generation so older CLI installations stay on legacy sync until updated. This generation requires engine 0.1.23 and does not inherit approval from the previous switch when the new switch is missing or unavailable.
24
+
25
+ ## [5.345.179] — 2026-10-29
26
+ - Conduct loop lanes now count a phase's absolute `deadline` from when the lane starts the phase, so time the envelope spent waiting in the queue no longer eats its run budget. An unparsable `deadline` now falls back to the phase's normal budget instead of an invalid one.
27
+ - Pins hq-fleet-local v0.4.13 so a personal bot's first-start kickoff waits for HQ Fleet Runtime to attach before delivery instead of being dropped during startup.
28
+ - `hq sources sync` runs every hot channel now for the signed-in person: each adapter once per integration connection the person created or was granted, through the HQ integration gateway. It prints sources landed per adapter and connection. A signed-out session or a revoked connection prints a reconnect prompt naming the connection, exits non-zero, and leaves the cursor unchanged. Use `--adapter <id>` to run one adapter and `--company <slug>` to pick the company. Catalog channels with no adapter in this build report "adapter not available in this hq version".
29
+ - `hq sources runs --today` shows the hot-channel run log for the signed-in person: per adapter, the sources each run landed and the signals it generated, with start and finish times and any error. Cursors live at `sources/_cursors/@{personKey}/` and each run appends to `sources/_runs/@{personKey}/{day}.jsonl`, where the person key is a short hash of the person's email.
30
+ - `hq bot run` registers a built-in hot-channel sync job for the bot's company: daily at 06:30 in the computer's time zone, run inside the bot with no model turn. If the computer was asleep at 06:30, the job runs once when it wakes and the ledger records `catchUp: true`. No crontab or launchd entry is written. Change the time with the new `hq bot jobs <bot> --reschedule <jobId> --every "..."` (or `--cron`); a removed job is not added back.
31
+ - Only one hot-channel sync runs at a time per person and company. If the bot's scheduled run and `hq sources sync` overlap, the second one lands nothing, says another sync is running, and writes a `skipped` line to the run log.
32
+ - Linear: issues assigned to you that changed since the last sync land as source documents.
33
+ - Slack: threads HQ has saved to your company vault that you are part of become one signal each, pointing at the thread with no message text copied. A Slack rate-limit pause is reported with a prompt to retry or reconnect.
34
+ - Attio: activity HQ has saved to your company vault becomes signals only when it is about you (changes you made, records you own, comments or notes that mention or are assigned to you), with no payload copied.
35
+ - Meetings: transcripts already in `sources/meetings/` that you attended land as short pointer documents under `sources/meeting-events/`, with no transcript text copied.
36
+ - Gmail ships behind the `hq.hot-channel-gmail` flag. While the flag is off, Gmail is listed as `gated` and never called. With it on, new INBOX mail lands as header-only pointers (never the body or snippet) with a read-only scope.
37
+ - Newly landed sources are turned into signals with your own logged-in `claude`: up to 20 documents per run, each signal linked to its source and listed in the day's signal index. Signals from meetings, Slack and Attio use the full saved content each pointer names (up to 200 KB). A logged-out `claude`, a timeout, bad output, or any other error in one adapter's signals step marks that adapter failed in the run log and the run continues with the next adapter.
38
+ - One malformed event from a channel is skipped and counted as rejected in the run log, with the reason, instead of stopping that channel on every later run.
39
+ - Hot-channel syncs alert when sources land but no signals come out: the bot DMs you and `hq sources sync` prints the alert, at most once an hour per connection. Set `signals_alert_channel: <Slack channel id>` in the company's `settings/signals/preferences.yaml` to also post it to Slack.
40
+ - Contributors: adding a hot channel is one adapter file plus one catalog entry, with end-to-end tests for both run triggers.
41
+ - On Windows, `hq daemon install` now registers a scheduled task named for the current user (`ai.getindigo.hq-daemon-<SID>`, or a sanitised username when the SID cannot be read), so two people who share a PC no longer overwrite each other's daemon. Status, uninstall, `hq doctor` and the handoff and legacy lookups use the same per-user name. An older shared `ai.getindigo.hq-daemon` task that runs as the current user is moved to the new name and kept running; one that belongs to another Windows user, or whose owner cannot be read, is left untouched and `hq` says so.
42
+ - `hq daemon uninstall` on Windows now works for users who upgraded from the shared task and have not re-run install: it checks schtasks for the per-user task instead of trusting the shared XML file, treats a per-user task that is already gone as removed, and also removes this user's task registered under the username form. A task owner stored as a bare user name is no longer treated as `DOMAIN\user`, so another domain's user of the same name keeps their task.
43
+
5
44
  ## [5.345.178] — 2026-10-29
6
45
  - `hq dm send --attach` now uploads the bytes it read with their exact length, so a file changed after the size check no longer stalls and fails with `Upload failed (HTTP 400)`. A refused upload now names the storage error (for example `RequestTimeout`).
7
46
  - `hq daemon disable mesh` now keeps `mesh` off on machines where it is not on by default,
@@ -4394,6 +4394,58 @@ export declare const COMMAND_CATALOG: readonly [{
4394
4394
  readonly hidden: false;
4395
4395
  }];
4396
4396
  readonly subcommands: readonly [];
4397
+ }, {
4398
+ readonly name: "add";
4399
+ readonly description: "Add people or your own bots to a channel, by @handle, email, or prs_/agt_ uid.";
4400
+ readonly aliases: readonly [];
4401
+ readonly hidden: false;
4402
+ readonly helpOption: true;
4403
+ readonly helpCommand: false;
4404
+ readonly usage: "[options] <channel> <member...>";
4405
+ readonly helpText: readonly [];
4406
+ readonly arguments: readonly [{
4407
+ readonly name: "channel";
4408
+ readonly required: true;
4409
+ readonly variadic: false;
4410
+ readonly description: "";
4411
+ }, {
4412
+ readonly name: "member";
4413
+ readonly required: true;
4414
+ readonly variadic: true;
4415
+ readonly description: "";
4416
+ }];
4417
+ readonly options: readonly [{
4418
+ readonly flags: "--json";
4419
+ readonly description: "Output the per-member results as JSON.";
4420
+ readonly hidden: false;
4421
+ }];
4422
+ readonly subcommands: readonly [];
4423
+ }, {
4424
+ readonly name: "remove";
4425
+ readonly description: "Remove a member or bot from a channel (owner or company admin), or leave it yourself.";
4426
+ readonly aliases: readonly [];
4427
+ readonly hidden: false;
4428
+ readonly helpOption: true;
4429
+ readonly helpCommand: false;
4430
+ readonly usage: "[options] <channel> <member>";
4431
+ readonly helpText: readonly [];
4432
+ readonly arguments: readonly [{
4433
+ readonly name: "channel";
4434
+ readonly required: true;
4435
+ readonly variadic: false;
4436
+ readonly description: "";
4437
+ }, {
4438
+ readonly name: "member";
4439
+ readonly required: true;
4440
+ readonly variadic: false;
4441
+ readonly description: "";
4442
+ }];
4443
+ readonly options: readonly [{
4444
+ readonly flags: "--json";
4445
+ readonly description: "Output the result as JSON.";
4446
+ readonly hidden: false;
4447
+ }];
4448
+ readonly subcommands: readonly [];
4397
4449
  }];
4398
4450
  }, {
4399
4451
  readonly name: "onboard";
@@ -5150,6 +5202,72 @@ export declare const COMMAND_CATALOG: readonly [{
5150
5202
  readonly hidden: false;
5151
5203
  }];
5152
5204
  readonly subcommands: readonly [];
5205
+ }, {
5206
+ readonly name: "runs";
5207
+ readonly description: "Show the hot-channel run log: sources landed and signals generated per adapter";
5208
+ readonly aliases: readonly [];
5209
+ readonly hidden: false;
5210
+ readonly helpOption: true;
5211
+ readonly helpCommand: false;
5212
+ readonly usage: "[options]";
5213
+ readonly helpText: readonly [];
5214
+ readonly arguments: readonly [];
5215
+ readonly options: readonly [{
5216
+ readonly flags: "--today";
5217
+ readonly description: "Show today's runs (UTC); the default";
5218
+ readonly hidden: false;
5219
+ }, {
5220
+ readonly flags: "--date <YYYY-MM-DD>";
5221
+ readonly description: "Show runs for this UTC day";
5222
+ readonly hidden: false;
5223
+ }, {
5224
+ readonly flags: "--company <slug>";
5225
+ readonly description: "Company slug (defaults to .hq/config.json activeCompany)";
5226
+ readonly hidden: false;
5227
+ }, {
5228
+ readonly flags: "--email <address>";
5229
+ readonly description: "Whose runs to show (defaults to the signed-in person)";
5230
+ readonly hidden: false;
5231
+ }, {
5232
+ readonly flags: "--format <fmt>";
5233
+ readonly description: "Output format: table | json (default: table for TTY, json piped)";
5234
+ readonly hidden: false;
5235
+ }, {
5236
+ readonly flags: "--hq-root <path>";
5237
+ readonly description: "Local HQ tree root (default: <runtime-path>)";
5238
+ readonly hidden: false;
5239
+ readonly defaultValue: "<runtime-path>";
5240
+ }];
5241
+ readonly subcommands: readonly [];
5242
+ }, {
5243
+ readonly name: "sync";
5244
+ readonly description: "Run every hot channel now: each adapter once per connection you can use";
5245
+ readonly aliases: readonly [];
5246
+ readonly hidden: false;
5247
+ readonly helpOption: true;
5248
+ readonly helpCommand: false;
5249
+ readonly usage: "[options]";
5250
+ readonly helpText: readonly [];
5251
+ readonly arguments: readonly [];
5252
+ readonly options: readonly [{
5253
+ readonly flags: "--adapter <id>";
5254
+ readonly description: "Run one adapter only (a catalog provider or adapter id)";
5255
+ readonly hidden: false;
5256
+ }, {
5257
+ readonly flags: "--company <slug>";
5258
+ readonly description: "Company slug (defaults to .hq/config.json activeCompany)";
5259
+ readonly hidden: false;
5260
+ }, {
5261
+ readonly flags: "--json";
5262
+ readonly description: "Print the run report as JSON";
5263
+ readonly hidden: false;
5264
+ }, {
5265
+ readonly flags: "--hq-root <path>";
5266
+ readonly description: "Local HQ tree root (default: <runtime-path>)";
5267
+ readonly hidden: false;
5268
+ readonly defaultValue: "<runtime-path>";
5269
+ }];
5270
+ readonly subcommands: readonly [];
5153
5271
  }];
5154
5272
  }, {
5155
5273
  readonly name: "signals";
@@ -13943,6 +14061,22 @@ export declare const COMMAND_CATALOG: readonly [{
13943
14061
  }];
13944
14062
  readonly subcommands: readonly [];
13945
14063
  }];
14064
+ }, {
14065
+ readonly name: "push-status";
14066
+ readonly description: "Report whether the owner DM push signal is live or stale, with the last event time";
14067
+ readonly aliases: readonly [];
14068
+ readonly hidden: false;
14069
+ readonly helpOption: true;
14070
+ readonly helpCommand: false;
14071
+ readonly usage: "[options]";
14072
+ readonly helpText: readonly [];
14073
+ readonly arguments: readonly [];
14074
+ readonly options: readonly [{
14075
+ readonly flags: "--json";
14076
+ readonly description: "Print machine-readable JSON";
14077
+ readonly hidden: false;
14078
+ }];
14079
+ readonly subcommands: readonly [];
13946
14080
  }];
13947
14081
  }, {
13948
14082
  readonly name: "lanes";
@@ -18691,7 +18825,7 @@ export declare const COMMAND_CATALOG: readonly [{
18691
18825
  readonly subcommands: readonly [];
18692
18826
  }, {
18693
18827
  readonly name: "jobs";
18694
- readonly description: "Show, schedule, or remove a bot's recurring jobs (the schedule runs in the cloud, not on this computer)";
18828
+ readonly description: "Show, schedule, reschedule, or remove a bot's recurring jobs (they run on this computer while the bot runs)";
18695
18829
  readonly aliases: readonly [];
18696
18830
  readonly hidden: false;
18697
18831
  readonly helpOption: true;
@@ -18728,6 +18862,10 @@ export declare const COMMAND_CATALOG: readonly [{
18728
18862
  readonly flags: "--rm <jobId>";
18729
18863
  readonly description: "Remove a scheduled job";
18730
18864
  readonly hidden: false;
18865
+ }, {
18866
+ readonly flags: "--reschedule <jobId>";
18867
+ readonly description: "Change a job's schedule (with --every or --cron)";
18868
+ readonly hidden: false;
18731
18869
  }, {
18732
18870
  readonly flags: "--json";
18733
18871
  readonly description: "Print machine-readable JSON";
@@ -19203,6 +19341,14 @@ export declare const COMMAND_CATALOG: readonly [{
19203
19341
  readonly description: "";
19204
19342
  }];
19205
19343
  readonly options: readonly [{
19344
+ readonly flags: "--runtime <runtime>";
19345
+ readonly description: "Switch the model CLI: claude|codex|grok. Checked with one test turn first; the old runtime's sessions are set aside (backed up), DM history and memory stay";
19346
+ readonly hidden: false;
19347
+ }, {
19348
+ readonly flags: "--account <id>";
19349
+ readonly description: "Use this hq capacity account's login for the bot's runtime, or default for your own sign-in";
19350
+ readonly hidden: false;
19351
+ }, {
19206
19352
  readonly flags: "--model <model>";
19207
19353
  readonly description: "Model id for the runtime CLI, or default for the CLI's own default";
19208
19354
  readonly hidden: false;
@@ -19220,6 +19366,56 @@ export declare const COMMAND_CATALOG: readonly [{
19220
19366
  readonly hidden: false;
19221
19367
  }];
19222
19368
  readonly subcommands: readonly [];
19369
+ }, {
19370
+ readonly name: "login";
19371
+ readonly description: "Give the bot a model login of its own, so it does not use yours: runs the runtime's own sign-in into ~/.hq/bots/<name>/auth/<runtime>";
19372
+ readonly aliases: readonly [];
19373
+ readonly hidden: false;
19374
+ readonly helpOption: true;
19375
+ readonly helpCommand: false;
19376
+ readonly usage: "[options] <name>";
19377
+ readonly helpText: readonly [];
19378
+ readonly arguments: readonly [{
19379
+ readonly name: "name";
19380
+ readonly required: true;
19381
+ readonly variadic: false;
19382
+ readonly description: "";
19383
+ }];
19384
+ readonly options: readonly [{
19385
+ readonly flags: "--runtime <runtime>";
19386
+ readonly description: "claude|codex (default: the bot's runtime)";
19387
+ readonly hidden: false;
19388
+ }, {
19389
+ readonly flags: "--json";
19390
+ readonly description: "Print machine-readable JSON";
19391
+ readonly hidden: false;
19392
+ }];
19393
+ readonly subcommands: readonly [];
19394
+ }, {
19395
+ readonly name: "logout";
19396
+ readonly description: "Sign the bot's own model login out and delete it; the bot goes back to your default sign-in";
19397
+ readonly aliases: readonly [];
19398
+ readonly hidden: false;
19399
+ readonly helpOption: true;
19400
+ readonly helpCommand: false;
19401
+ readonly usage: "[options] <name>";
19402
+ readonly helpText: readonly [];
19403
+ readonly arguments: readonly [{
19404
+ readonly name: "name";
19405
+ readonly required: true;
19406
+ readonly variadic: false;
19407
+ readonly description: "";
19408
+ }];
19409
+ readonly options: readonly [{
19410
+ readonly flags: "--runtime <runtime>";
19411
+ readonly description: "claude|codex (default: both)";
19412
+ readonly hidden: false;
19413
+ }, {
19414
+ readonly flags: "--json";
19415
+ readonly description: "Print machine-readable JSON";
19416
+ readonly hidden: false;
19417
+ }];
19418
+ readonly subcommands: readonly [];
19223
19419
  }, {
19224
19420
  readonly name: "set-model";
19225
19421
  readonly description: "Set the model this bot asks its runtime for (stored in the bot's own settings; the runtime's own config is never changed), or default to clear it";
@@ -5326,6 +5326,70 @@ export const COMMAND_CATALOG = [
5326
5326
  }
5327
5327
  ],
5328
5328
  "subcommands": []
5329
+ },
5330
+ {
5331
+ "name": "add",
5332
+ "description": "Add people or your own bots to a channel, by @handle, email, or prs_/agt_ uid.",
5333
+ "aliases": [],
5334
+ "hidden": false,
5335
+ "helpOption": true,
5336
+ "helpCommand": false,
5337
+ "usage": "[options] <channel> <member...>",
5338
+ "helpText": [],
5339
+ "arguments": [
5340
+ {
5341
+ "name": "channel",
5342
+ "required": true,
5343
+ "variadic": false,
5344
+ "description": ""
5345
+ },
5346
+ {
5347
+ "name": "member",
5348
+ "required": true,
5349
+ "variadic": true,
5350
+ "description": ""
5351
+ }
5352
+ ],
5353
+ "options": [
5354
+ {
5355
+ "flags": "--json",
5356
+ "description": "Output the per-member results as JSON.",
5357
+ "hidden": false
5358
+ }
5359
+ ],
5360
+ "subcommands": []
5361
+ },
5362
+ {
5363
+ "name": "remove",
5364
+ "description": "Remove a member or bot from a channel (owner or company admin), or leave it yourself.",
5365
+ "aliases": [],
5366
+ "hidden": false,
5367
+ "helpOption": true,
5368
+ "helpCommand": false,
5369
+ "usage": "[options] <channel> <member>",
5370
+ "helpText": [],
5371
+ "arguments": [
5372
+ {
5373
+ "name": "channel",
5374
+ "required": true,
5375
+ "variadic": false,
5376
+ "description": ""
5377
+ },
5378
+ {
5379
+ "name": "member",
5380
+ "required": true,
5381
+ "variadic": false,
5382
+ "description": ""
5383
+ }
5384
+ ],
5385
+ "options": [
5386
+ {
5387
+ "flags": "--json",
5388
+ "description": "Output the result as JSON.",
5389
+ "hidden": false
5390
+ }
5391
+ ],
5392
+ "subcommands": []
5329
5393
  }
5330
5394
  ]
5331
5395
  },
@@ -6243,6 +6307,86 @@ export const COMMAND_CATALOG = [
6243
6307
  }
6244
6308
  ],
6245
6309
  "subcommands": []
6310
+ },
6311
+ {
6312
+ "name": "runs",
6313
+ "description": "Show the hot-channel run log: sources landed and signals generated per adapter",
6314
+ "aliases": [],
6315
+ "hidden": false,
6316
+ "helpOption": true,
6317
+ "helpCommand": false,
6318
+ "usage": "[options]",
6319
+ "helpText": [],
6320
+ "arguments": [],
6321
+ "options": [
6322
+ {
6323
+ "flags": "--today",
6324
+ "description": "Show today's runs (UTC); the default",
6325
+ "hidden": false
6326
+ },
6327
+ {
6328
+ "flags": "--date <YYYY-MM-DD>",
6329
+ "description": "Show runs for this UTC day",
6330
+ "hidden": false
6331
+ },
6332
+ {
6333
+ "flags": "--company <slug>",
6334
+ "description": "Company slug (defaults to .hq/config.json activeCompany)",
6335
+ "hidden": false
6336
+ },
6337
+ {
6338
+ "flags": "--email <address>",
6339
+ "description": "Whose runs to show (defaults to the signed-in person)",
6340
+ "hidden": false
6341
+ },
6342
+ {
6343
+ "flags": "--format <fmt>",
6344
+ "description": "Output format: table | json (default: table for TTY, json piped)",
6345
+ "hidden": false
6346
+ },
6347
+ {
6348
+ "flags": "--hq-root <path>",
6349
+ "description": "Local HQ tree root (default: <runtime-path>)",
6350
+ "hidden": false,
6351
+ "defaultValue": "<runtime-path>"
6352
+ }
6353
+ ],
6354
+ "subcommands": []
6355
+ },
6356
+ {
6357
+ "name": "sync",
6358
+ "description": "Run every hot channel now: each adapter once per connection you can use",
6359
+ "aliases": [],
6360
+ "hidden": false,
6361
+ "helpOption": true,
6362
+ "helpCommand": false,
6363
+ "usage": "[options]",
6364
+ "helpText": [],
6365
+ "arguments": [],
6366
+ "options": [
6367
+ {
6368
+ "flags": "--adapter <id>",
6369
+ "description": "Run one adapter only (a catalog provider or adapter id)",
6370
+ "hidden": false
6371
+ },
6372
+ {
6373
+ "flags": "--company <slug>",
6374
+ "description": "Company slug (defaults to .hq/config.json activeCompany)",
6375
+ "hidden": false
6376
+ },
6377
+ {
6378
+ "flags": "--json",
6379
+ "description": "Print the run report as JSON",
6380
+ "hidden": false
6381
+ },
6382
+ {
6383
+ "flags": "--hq-root <path>",
6384
+ "description": "Local HQ tree root (default: <runtime-path>)",
6385
+ "hidden": false,
6386
+ "defaultValue": "<runtime-path>"
6387
+ }
6388
+ ],
6389
+ "subcommands": []
6246
6390
  }
6247
6391
  ]
6248
6392
  },
@@ -16963,6 +17107,25 @@ export const COMMAND_CATALOG = [
16963
17107
  "subcommands": []
16964
17108
  }
16965
17109
  ]
17110
+ },
17111
+ {
17112
+ "name": "push-status",
17113
+ "description": "Report whether the owner DM push signal is live or stale, with the last event time",
17114
+ "aliases": [],
17115
+ "hidden": false,
17116
+ "helpOption": true,
17117
+ "helpCommand": false,
17118
+ "usage": "[options]",
17119
+ "helpText": [],
17120
+ "arguments": [],
17121
+ "options": [
17122
+ {
17123
+ "flags": "--json",
17124
+ "description": "Print machine-readable JSON",
17125
+ "hidden": false
17126
+ }
17127
+ ],
17128
+ "subcommands": []
16966
17129
  }
16967
17130
  ]
16968
17131
  },
@@ -22774,7 +22937,7 @@ export const COMMAND_CATALOG = [
22774
22937
  },
22775
22938
  {
22776
22939
  "name": "jobs",
22777
- "description": "Show, schedule, or remove a bot's recurring jobs (the schedule runs in the cloud, not on this computer)",
22940
+ "description": "Show, schedule, reschedule, or remove a bot's recurring jobs (they run on this computer while the bot runs)",
22778
22941
  "aliases": [],
22779
22942
  "hidden": false,
22780
22943
  "helpOption": true,
@@ -22820,6 +22983,11 @@ export const COMMAND_CATALOG = [
22820
22983
  "description": "Remove a scheduled job",
22821
22984
  "hidden": false
22822
22985
  },
22986
+ {
22987
+ "flags": "--reschedule <jobId>",
22988
+ "description": "Change a job's schedule (with --every or --cron)",
22989
+ "hidden": false
22990
+ },
22823
22991
  {
22824
22992
  "flags": "--json",
22825
22993
  "description": "Print machine-readable JSON",
@@ -23404,6 +23572,16 @@ export const COMMAND_CATALOG = [
23404
23572
  }
23405
23573
  ],
23406
23574
  "options": [
23575
+ {
23576
+ "flags": "--runtime <runtime>",
23577
+ "description": "Switch the model CLI: claude|codex|grok. Checked with one test turn first; the old runtime's sessions are set aside (backed up), DM history and memory stay",
23578
+ "hidden": false
23579
+ },
23580
+ {
23581
+ "flags": "--account <id>",
23582
+ "description": "Use this hq capacity account's login for the bot's runtime, or default for your own sign-in",
23583
+ "hidden": false
23584
+ },
23407
23585
  {
23408
23586
  "flags": "--model <model>",
23409
23587
  "description": "Model id for the runtime CLI, or default for the CLI's own default",
@@ -23427,6 +23605,68 @@ export const COMMAND_CATALOG = [
23427
23605
  ],
23428
23606
  "subcommands": []
23429
23607
  },
23608
+ {
23609
+ "name": "login",
23610
+ "description": "Give the bot a model login of its own, so it does not use yours: runs the runtime's own sign-in into ~/.hq/bots/<name>/auth/<runtime>",
23611
+ "aliases": [],
23612
+ "hidden": false,
23613
+ "helpOption": true,
23614
+ "helpCommand": false,
23615
+ "usage": "[options] <name>",
23616
+ "helpText": [],
23617
+ "arguments": [
23618
+ {
23619
+ "name": "name",
23620
+ "required": true,
23621
+ "variadic": false,
23622
+ "description": ""
23623
+ }
23624
+ ],
23625
+ "options": [
23626
+ {
23627
+ "flags": "--runtime <runtime>",
23628
+ "description": "claude|codex (default: the bot's runtime)",
23629
+ "hidden": false
23630
+ },
23631
+ {
23632
+ "flags": "--json",
23633
+ "description": "Print machine-readable JSON",
23634
+ "hidden": false
23635
+ }
23636
+ ],
23637
+ "subcommands": []
23638
+ },
23639
+ {
23640
+ "name": "logout",
23641
+ "description": "Sign the bot's own model login out and delete it; the bot goes back to your default sign-in",
23642
+ "aliases": [],
23643
+ "hidden": false,
23644
+ "helpOption": true,
23645
+ "helpCommand": false,
23646
+ "usage": "[options] <name>",
23647
+ "helpText": [],
23648
+ "arguments": [
23649
+ {
23650
+ "name": "name",
23651
+ "required": true,
23652
+ "variadic": false,
23653
+ "description": ""
23654
+ }
23655
+ ],
23656
+ "options": [
23657
+ {
23658
+ "flags": "--runtime <runtime>",
23659
+ "description": "claude|codex (default: both)",
23660
+ "hidden": false
23661
+ },
23662
+ {
23663
+ "flags": "--json",
23664
+ "description": "Print machine-readable JSON",
23665
+ "hidden": false
23666
+ }
23667
+ ],
23668
+ "subcommands": []
23669
+ },
23430
23670
  {
23431
23671
  "name": "set-model",
23432
23672
  "description": "Set the model this bot asks its runtime for (stored in the bot's own settings; the runtime's own config is never changed), or default to clear it",
@@ -5,17 +5,17 @@
5
5
  * hq bot jobs <botName> --add "<what to do>" --every "<plain english>"
6
6
  * hq bot jobs <botName> --add "<what to do>" --cron "0 9 * * 1-5"
7
7
  * hq bot jobs <botName> --rm <jobId>
8
+ * hq bot jobs <botName> --reschedule <jobId> --every "<plain english>"
8
9
  *
9
- * The schedule lives in the cloud, never on this computer: hq-pro-agents holds
10
- * the job and fires it on an EventBridge schedule, and the bot's inbox loop
11
- * runs the fired run (see lib/bot/job-run.ts). Nothing here writes a crontab,
12
- * a launchd plist, or a systemd unit — by rule.
13
- *
14
- * The routes are self-only per agent, so every call uses the BOT's own machine
15
- * identity — the same credential path its turns use — not the owner's session.
10
+ * The schedule lives with the bot: its jobs sit in the bot's own folder
11
+ * (lib/bot/local-jobs.ts) and the bot's inbox loop fires them while it runs
12
+ * (see lib/bot/job-run.ts). Nothing here writes a crontab, a launchd plist, or
13
+ * a systemd unit — by rule. Schedules are still written in the EventBridge form
14
+ * and held to the same limits, so a job reads the same wherever it runs.
16
15
  */
17
16
  import type { Command } from "commander";
18
- import { BotApi, type BotJobRecord, type CreateJobInput } from "../lib/bot/api.js";
17
+ import { type LocalJobsApi } from "../lib/bot/local-jobs.js";
18
+ import { type BotJobRecord, type CreateJobInput } from "../lib/bot/api.js";
19
19
  import { type BotConfig, type BotKind } from "../lib/bot/config.js";
20
20
  /** Mirrors hq-pro-agents `MIN_RECURRING_INTERVAL_SECONDS`. */
21
21
  export declare const MIN_RECURRING_INTERVAL_SECONDS: number;
@@ -100,7 +100,7 @@ export interface BotJobsDeps {
100
100
  };
101
101
  botTokenSupplier(dir: string): () => Promise<string>;
102
102
  /** Test seam: the jobs client for a bot directory. */
103
- apiFor?(dir: string): Pick<BotApi, "listJobs" | "createJob" | "cancelJob">;
103
+ apiFor?(dir: string): LocalJobsApi;
104
104
  parseSchedule?: typeof parseScheduleText;
105
105
  timezone?: () => string;
106
106
  out?: (line: string) => void;
@@ -113,6 +113,8 @@ export interface BotJobsOptions {
113
113
  cron?: string;
114
114
  tz?: string;
115
115
  rm?: string;
116
+ /** Change an existing job's schedule, keeping its id, instruction and history. */
117
+ reschedule?: string;
116
118
  json?: boolean;
117
119
  quiet?: boolean;
118
120
  }