@indigoai-us/hq-cli 5.345.170 → 5.345.172
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 +84 -0
- package/assets/scaffold/core/scripts/hq-delegate-send.sh +1 -1
- package/dist/command-catalog.generated.d.ts +206 -7
- package/dist/command-catalog.generated.js +252 -8
- package/dist/command-registration-plan.d.ts +7 -0
- package/dist/command-registration-plan.js +1 -0
- package/dist/commands/access.d.ts +32 -1
- package/dist/commands/access.js +112 -3
- package/dist/commands/agent-kit.d.ts +1 -1
- package/dist/commands/agent-kit.js +3 -1
- package/dist/commands/agents.js +2 -1
- package/dist/commands/bot.d.ts +3 -0
- package/dist/commands/bot.js +179 -18
- package/dist/commands/cloud.d.ts +58 -1
- package/dist/commands/cloud.js +228 -10
- package/dist/commands/core-company-index-scope-flag.d.ts +8 -1
- package/dist/commands/core-company-index-scope-flag.js +9 -2
- package/dist/commands/core-delegate-w1b.js +5 -2
- package/dist/commands/core-dm-bind-native.js +19 -4
- package/dist/commands/core-rebuild-index-fast.js +24 -6
- package/dist/commands/core.js +18 -6
- package/dist/commands/daemon.js +16 -1
- package/dist/commands/dm.d.ts +17 -3
- package/dist/commands/dm.js +121 -26
- package/dist/commands/files.d.ts +1 -0
- package/dist/commands/files.js +22 -4
- package/dist/commands/integrations-api.d.ts +4 -0
- package/dist/commands/integrations-api.js +18 -2
- package/dist/commands/integrations-connect.d.ts +10 -3
- package/dist/commands/integrations-connect.js +70 -6
- package/dist/commands/integrations-core.d.ts +23 -0
- package/dist/commands/integrations-core.js +100 -0
- package/dist/commands/integrations-manage.js +8 -1
- package/dist/commands/integrations.js +49 -5
- package/dist/commands/lanes-loop.d.ts +20 -0
- package/dist/commands/lanes-loop.js +69 -11
- package/dist/commands/lanes.js +9 -1
- package/dist/commands/rescue.d.ts +9 -0
- package/dist/commands/rescue.js +31 -0
- package/dist/commands/run.js +115 -40
- package/dist/commands/scan.d.ts +5 -1
- package/dist/commands/scan.js +16 -4
- package/dist/commands/secrets.js +50 -9
- package/dist/commands/sync-core.d.ts +22 -0
- package/dist/commands/sync-core.js +124 -0
- package/dist/hq-cloud-sync-runner/bin/sync-runner.js +2447 -2135
- package/dist/hq-cloud-sync-runner/package.json +1 -1
- package/dist/lib/agent-kit/inbox-state.d.ts +17 -0
- package/dist/lib/agent-kit/inbox-state.js +41 -20
- package/dist/lib/agent-kit/kit-config.d.ts +2 -0
- package/dist/lib/agent-kit/kit-config.js +6 -0
- package/dist/lib/agent-kit/mcp/tools.js +12 -5
- package/dist/lib/agent-kit/run/heartbeat.d.ts +6 -3
- package/dist/lib/agent-kit/run/heartbeat.js +6 -3
- package/dist/lib/agent-kit/run/inbox.d.ts +8 -3
- package/dist/lib/agent-kit/run/inbox.js +42 -10
- package/dist/lib/agent-kit/run/request-timeout.d.ts +26 -0
- package/dist/lib/agent-kit/run/request-timeout.js +51 -0
- package/dist/lib/bot/api.d.ts +1 -1
- package/dist/lib/bot/config.d.ts +10 -0
- package/dist/lib/bot/config.js +17 -1
- package/dist/lib/bot/fleet-local.d.ts +142 -0
- package/dist/lib/bot/fleet-local.js +689 -0
- package/dist/lib/bot/fleet-python.d.ts +47 -0
- package/dist/lib/bot/fleet-python.js +218 -0
- package/dist/lib/bot/index.d.ts +2 -0
- package/dist/lib/bot/index.js +2 -0
- package/dist/lib/bot/local-config.d.ts +3 -2
- package/dist/lib/bot/local-config.js +5 -2
- package/dist/lib/bot/promote.d.ts +10 -0
- package/dist/lib/bot/promote.js +3 -2
- package/dist/lib/bot/prompt.d.ts +6 -1
- package/dist/lib/bot/prompt.js +8 -3
- package/dist/lib/bot/runtime/index.js +8 -4
- package/dist/lib/bot/runtime/scratch-dir.d.ts +24 -0
- package/dist/lib/bot/runtime/scratch-dir.js +41 -0
- package/dist/lib/caller-principal.d.ts +4 -0
- package/dist/lib/caller-principal.js +40 -0
- package/dist/lib/capacity/collectors/grok.js +8 -2
- package/dist/lib/cli-flag-keys.d.ts +2 -0
- package/dist/lib/cli-flag-keys.js +2 -0
- package/dist/lib/daemon/catalog.d.ts +12 -4
- package/dist/lib/daemon/catalog.js +70 -24
- package/dist/lib/daemon/config.d.ts +0 -7
- package/dist/lib/daemon/config.js +0 -32
- package/dist/lib/daemon/run.d.ts +5 -1
- package/dist/lib/daemon/run.js +48 -11
- package/dist/lib/daemon/supervisor.js +3 -1
- package/dist/lib/doctor/checks/release-links.d.ts +62 -1
- package/dist/lib/doctor/checks/release-links.js +188 -2
- package/dist/lib/doctor/fix/apply.js +54 -0
- package/dist/lib/doctor/fix/remediation.d.ts +8 -1
- package/dist/lib/doctor/fix/remediation.js +22 -0
- package/dist/lib/flag-registry-worker-source.generated.d.ts +1 -1
- package/dist/lib/flag-registry-worker-source.generated.js +1 -1
- package/dist/lib/index-render/index.d.ts +9 -0
- package/dist/lib/index-render/index.js +65 -5
- package/dist/lib/index-render/session-scope.d.ts +69 -0
- package/dist/lib/index-render/session-scope.js +279 -0
- package/dist/lib/lanes/admission.js +7 -20
- package/dist/lib/lanes/reconcile.js +13 -15
- package/dist/lib/lanes/stale-lock.d.ts +50 -0
- package/dist/lib/lanes/stale-lock.js +105 -0
- package/dist/lib/lanes/store.js +11 -76
- package/dist/lib/notify-recipient.d.ts +10 -4
- package/dist/lib/notify-recipient.js +16 -4
- package/dist/lib/secret-input-link.d.ts +42 -0
- package/dist/lib/secret-input-link.js +93 -0
- package/dist/lib/secret-scan/range.d.ts +57 -0
- package/dist/lib/secret-scan/range.js +266 -0
- package/dist/lib/secret-scan/repo-config.d.ts +18 -3
- package/dist/lib/secret-scan/repo-config.js +135 -2
- package/dist/lib/sync-core/engine-home.d.ts +44 -0
- package/dist/lib/sync-core/engine-home.js +193 -0
- package/dist/lib/sync-core/flag.d.ts +17 -0
- package/dist/lib/sync-core/flag.js +47 -0
- package/dist/lib/sync-core/reconcile.d.ts +31 -0
- package/dist/lib/sync-core/reconcile.js +196 -0
- package/dist/lib/sync-core/release.d.ts +32 -0
- package/dist/lib/sync-core/release.js +140 -0
- package/dist/lib/sync-core/rollout-state.d.ts +24 -0
- package/dist/lib/sync-core/rollout-state.js +94 -0
- package/dist/lib/vault-sync-switches.d.ts +5 -0
- package/dist/lib/vault-sync-switches.js +43 -0
- package/dist/run/script-bound-schema.d.ts +27 -0
- package/dist/run/script-bound-schema.js +97 -0
- package/dist/secrets-env-action.d.ts +2 -0
- package/dist/secrets-env-action.js +7 -2
- package/dist/utils/cognito-session.d.ts +3 -30
- package/dist/utils/cognito-session.js +2 -100
- package/dist/utils/machine-principal-state.d.ts +38 -0
- package/dist/utils/machine-principal-state.js +110 -0
- package/dist/utils/remote-list-not-converging.d.ts +21 -0
- package/dist/utils/remote-list-not-converging.js +40 -0
- package/dist/utils/safe-link.js +9 -0
- package/dist/utils/script-bound-exec.d.ts +158 -0
- package/dist/utils/script-bound-exec.js +568 -0
- package/dist/utils/sync-watchdog.d.ts +92 -0
- package/dist/utils/sync-watchdog.js +250 -0
- package/package.json +8 -8
- package/dist/lib/daemon/sync-core-canary.d.ts +0 -9
- package/dist/lib/daemon/sync-core-canary.js +0 -56
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,90 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.345.172] — 2026-10-27
|
|
6
|
+
- The daemon now moves vaults to the new sync engine by itself, following a per-company switch (`sync.rust-engine-rollout`) instead of a hand-written `syncCoreCanary` entry in `~/.hq/daemon/config.json`. A new `sync-core` service on desktop and self-hosted machines runs `hq daemon service sync-core-reconcile` every 10 minutes: it reads the switch for every company this machine belongs to, downloads the pinned hq-syncd release (v0.1.13) from the public mirror and checks it against the release's SHA256SUMS, installs it at `~/.hq/bin/hq-syncd`, writes one engine home per switched vault under `~/.hq/sync-core/engines/<vault>/`, and records the result in `~/.hq/sync-core/rollout.json`. Each vault's engine first runs read-only alongside the current sync until it has built its index and planned a pass; the reconcile records that plan's upload, download, delete, server-row and local-file counts per vault (`hq sync-core status` shows them). A vault is then promoted to full mode and turned off in the current sync (`menubar.json`) only when the plan would upload or delete at most 100 paths, and the daemon runs its `sync-core:<vault>` unit in full mode only after the current sync has stopped touching that vault. Company vaults stay read-only in this release: the engine's server snapshot is filtered by the caller's visibility while the current sync pulled the whole tree, so a full-mode company engine would upload the difference; promotion waits for an engine release that scopes the local tree the same way. The personal vault moves when at least one of the person's companies is switched on. When a switch turns off, the daemon stops that vault's engine, turns the current sync back on for it, and leaves the engine's index on disk. A switch that cannot be read keeps the vault where it was. `hq sync-core reconcile` and `hq sync-core status` run the same logic by hand (agent boxes run `reconcile --companies-only`). The old `syncCoreCanary` config key is ignored.
|
|
7
|
+
|
|
8
|
+
- `hq files share 'clients/*/11_reports' --with <person>` now sends the path as typed instead of refusing it. The vault accepts one `*` standing for a whole folder name, so a single grant covers the `11_reports` folder under every client. A `*` inside a folder name (`acme*`), two wildcard folders, or a path made only of wildcards is still refused by the vault. Feedback 600e747f-e608-4266-8e1a-a9a9a4034828.
|
|
9
|
+
- A bot created with `--hq-fleet-runtime` now starts with HQ knowledge: its standing HQ instructions (identity, owner, HQ folder, worker definition, persona and memory rules) become the runtime persona, the HQ folder's skills are available to it, and the runtime's own lifecycle and system notices no longer reach the conversation. The CLI checks those instructions with the runtime's own scanner before saving them and refreshes them from the worker folder on every start and restart. `hq bot list` and `hq bot status` read a runtime bot's process from its gateway, and the HQ background service no longer starts a second, legacy copy of a runtime bot. Pins hq-fleet-local v0.4.5.
|
|
10
|
+
- Creating a bot with `--hq-fleet-runtime` no longer needs Python on the computer: the CLI installs a private,
|
|
11
|
+
pinned Python under the HQ fleet folder and builds the bot's runtime from it, on macOS, Linux and Windows.
|
|
12
|
+
- `hq-hook` 0.3.1: the bridge runs a hook port only for a bash script version
|
|
13
|
+
the port was checked against. It hashes the `--script` it is given, and any
|
|
14
|
+
other version of `policy-enforcement-gate.sh` runs bash alone (logged as
|
|
15
|
+
`script-mismatch`), so an hq-core change to the gate is never answered by
|
|
16
|
+
an older engine.
|
|
17
|
+
- The gate port now opens only the path column of the policy list, as bash
|
|
18
|
+
does, and never the excerpt text.
|
|
19
|
+
- On Windows the gate port goes to bash for:
|
|
20
|
+
- UNC, device and MSYS-form policy paths, and for root forms Win32 and MSYS
|
|
21
|
+
read differently;
|
|
22
|
+
- a state folder it cannot create;
|
|
23
|
+
- Windows device names used as session ids.
|
|
24
|
+
- The pass stamp records the bytes the decision read.
|
|
25
|
+
- The nightly `hq-hook` workflow now runs the gate parity test on every target,
|
|
26
|
+
using Git Bash on Windows.
|
|
27
|
+
- In `on` mode, a hook port that declines a payload makes `hq-hook bridge`
|
|
28
|
+
exit 75 with no output. master-hook then runs the bash hook itself, so the
|
|
29
|
+
engine no longer starts bash for those calls. On Windows this removes about
|
|
30
|
+
200 to 330 ms from every gate call the port declines.
|
|
31
|
+
- Agent sign-in no longer hangs on a stale network connection (hq-cloud 6.18.103).
|
|
32
|
+
- When a company's sync stops because HQ could not finish listing the company's vault files (error code `REMOTE_LIST_NOT_CONVERGING` from hq-cloud), `hq sync now`, `hq sync push`, `hq sync pull` and their `--all` and `--personal` forms now print "HQ could not finish listing this company's files. Try hq sync now again in a minute; if it keeps happening, run hq feedback bug." with the original engine message on a following `Detail:` line, instead of only the raw engine message. `hq sync push --json` carries the same text in its `fatal` event. Menubar and background sync use the sync runner bundled from hq-cloud, which reports per-company errors as plain text without the code, so it still shows the engine message. Feedback e5eda195-9191-49b7-a73c-886f8139670b (DEV-5465).
|
|
33
|
+
|
|
34
|
+
## [5.345.171] — 2026-10-26
|
|
35
|
+
- The daemon's sync-core unit now accepts a `~/.hq/sync-core/config.toml` that sets `full_vault = true` instead of `canary_path`, so the Rust engine can keep the whole personal vault in sync under the same supervision (ownership check, legacy personal sync paused first, health restarts). A config that sets both keys, or neither, keeps the unit blocked with a reason that names the fix. `hq daemon status` describes the unit as the personal vault rather than a canary, and the unit's environment carries `HQ_SYNC_FULL_VAULT=1`. Company vaults and machines without the sync-core setting are unchanged. Requires an hq-sync-core release that understands `full_vault` (after 0.1.6).
|
|
36
|
+
|
|
37
|
+
- The agent kit inbox service (`hq agent kit run inbox` or `run all`) no longer waits hours on a stale network connection. Before, one inbox check could hang until the operating system dropped the connection, so new DMs were mirrored and their wake fired up to about 2 hours late. Now the inbox check and each ack give up after 30 seconds, and the poll stops waiting for its token after 30 seconds. The check counts as a failed poll, and the next poll retries after the normal interval. Heartbeat posts, and the heartbeat's wait for its token, have the same limit. A token request that hangs inside the machine sign-in itself is not stopped yet and can still delay later polls; that is a known follow-up. Set `requestTimeoutMs` in the kit's `kit.json` to change it. The inbox log now has one line when a poll takes longer than 10 seconds or times out, giving the duration and outcome. Reported in feedback_66ce5718-d5d9-4d86-a25c-dd361a96226c.
|
|
38
|
+
- `hq bot list --remote --json` now includes each bot's `ownerUid`, passed through unchanged from `GET /v1/agents/mine` (null when the server leaves it out). That route only returns the caller's own bots, so `ownerUid` always equals the viewer; the field is included for completeness. Telling a teammate's bot apart relies on the desktop app's local per-machine owner map, not this field. Human-readable output is unchanged. (feedback_ceda36fa-37c8-48ea-a066-e48c4d0fc438)
|
|
39
|
+
- A local bot no longer fails every turn with EPERM when its TMPDIR is not writable, for example a TMPDIR on an external volume that was not ready when the bot started at login. The turn now uses `/tmp`, then `~/.hq/tmp`, logs one warning naming the folder, and hands the model CLI the working TMPDIR. When no folder works, the turn fails with one message naming the folder and saying to fix TMPDIR or run `hq bot restart`. Nothing changes when TMPDIR is writable. (feedback_f0131909)
|
|
40
|
+
- The bundled sync engine now uses hq-cloud 6.18.102, the current npm `latest`.
|
|
41
|
+
It pulls in these hq-cloud fixes:
|
|
42
|
+
- Sync no longer lists the same vault page forever when the listing stops
|
|
43
|
+
early. It retries the page up to 3 times with backoff, then fails that
|
|
44
|
+
company's leg with `REMOTE_LIST_NOT_CONVERGING`. Before this,
|
|
45
|
+
`hq sync now --all --on-conflict keep` could hold a CPU core for hours.
|
|
46
|
+
- Sync pull no longer replaces your session handoff pointer
|
|
47
|
+
(`workspace/threads/handoff.json`) with an older vault copy. The copy with
|
|
48
|
+
the newer `created_at` is kept, and a kept local pointer is always queued
|
|
49
|
+
for push, so the vault catches up.
|
|
50
|
+
- When the vault refuses some of your files during a push
|
|
51
|
+
(FILES_PRESIGN_FORBIDDEN), the pull that follows no longer deletes or
|
|
52
|
+
overwrites your local copies of those files (hq-cloud #1048).
|
|
53
|
+
- Sync pull no longer writes or deletes a file through a folder link inside
|
|
54
|
+
the synced tree, such as `.agents` linking to `.claude` (hq-cloud #1041).
|
|
55
|
+
- Sync push no longer uploads a second cloud copy of a file under an in-tree
|
|
56
|
+
folder link's name; it skips the path and names the real path to push
|
|
57
|
+
instead. Files reached only through a link into an excluded folder are no
|
|
58
|
+
longer backed up under the link's name (hq-cloud #1047, #1053).
|
|
59
|
+
- `readManifestUploadStatus` also returns the last failed manifest upload's
|
|
60
|
+
time, failure count, reason and HTTP status (hq-cloud #1050).
|
|
61
|
+
- New `hq outposts pull <outpost> <remote-path> [local-path]` downloads one
|
|
62
|
+
file from an Outpost when it is too large for `hq outposts exec`. It needs
|
|
63
|
+
the matching hq-pro endpoint to be deployed (hq-cloud #996).
|
|
64
|
+
- People now send only human messages. From a person login, `hq dm` tags every message `audience: "human"`, including 1:1 DMs to an agent, group DMs, channel posts and scheduled sends, and `--audience agent` or `--audience both` fails before any request with "People can only send human messages. Agent messages are sent by agents and bots." and exit 1. `--audience human` and `--for-human` work as before. Local bots, agent-kit agents and other machine identities keep the recipient-based default (agent for an agent, a channel or a group) and may still pass `--audience agent|both`. The caller type comes from the credentials the send uses (machine creds or a person session), not from a flag. The same rule applies to `hq agents message`, the `hq access` grant request, the `hq core delegate send` pickup DM (`both` only from a machine identity), `hq dm-bind post` and the agent MCP `hq_dm_send` tool when its token is a person's. A 403 `person_cannot_send_agent_message` from the server is printed as a plain message with exit 1. A personal bot's model turn runs without machine credentials, so `hq dm --audience agent` typed inside such a turn is now refused and its channel and group posts default to human; the bot's own progress messages still go out under its machine identity.
|
|
65
|
+
- `hq dm send <name>` no longer falls through to a same-named channel when the name matches more than one person or bot. It refuses, sends nothing, and lists each match with its uid. `@name` now always means a person or bot: it never posts to a channel and refuses when no contact matches. `#name` and `--channel` still always mean the channel. When the contacts lookup fails, a bare name now exits 1 and sends nothing instead of guessing the channel; use `#name` or `--channel` to post to the channel.
|
|
66
|
+
- `hq dm inbox` for an agent identity no longer reports a malformed server response as an empty inbox. Invalid JSON or a missing/non-array `messages` field exits 1 with a privacy-safe error and acknowledges nothing. A mixed response keeps the valid messages and warns that the read may be incomplete; `--mark-read` then acks nothing and says how many items were not acked. Acks that fail are now reported. This reuses the `hq agent inbox` classifier from #2155, now exported as `classifyAgentInboxBody`.
|
|
67
|
+
- `hq doctor --fix` and `hq rescue` now repair HQ-managed release links (`.agents/skills`, `.codex/claude` and the other links hq-core ships) whose target is missing, such as links an earlier rescue left pointing into its deleted temp folder. On macOS and Linux the link gets back the relative text hq-core ships (for example `../.claude/skills`), so the git-tracked link is unchanged; on Windows a directory link is an absolute junction. A link is removed instead when its shipped target is missing too. Only a dangling link whose current target is under the HQ root, the system temp folder, or the rescue staging folder beside the backup root (`~/.hq/tmp`, or next to `$HQ_BACKUP_DIR`), or whose path has an `hq-replace-rescue-` folder, is repaired; a dangling link that points anywhere else (for example an unmounted `/Volumes/X`) is treated as your own, left alone, and reported. A real file or folder, or a link that resolves anywhere, is never touched, the link entry is removed without following it (re-checked right before removal), and one link that fails to repair does not stop the others.
|
|
68
|
+
- `hq capacity` Grok collector now passes its clock to the capacity ledger, so ledger retention and `now.json` use the same instant as the readings it just wrote. Before this, retention ran on the wall clock, and a collector given an earlier time deleted its own readings.
|
|
69
|
+
- `hq integrations connect` (and `add`) takes `--personal` or `--company-owned` to choose who owns the new connection; `reconnect --connect` takes them too when it adds a revoked app again. They cannot be combined, and `--company-owned` is separate from `--company <slug>`, which still picks the company. The CLI sends `scope` to the install and sign-in start requests only when one of the flags is given, including on the link-only and access-key retry paths. If the company does not have personal and company integrations turned on yet, the command says so and tells you to run it again without the flag.
|
|
70
|
+
- The "already connected" check now looks at ownership when the server offers personal connections. A personal connect only stops at your own personal connection of the same app, and a company connect only at a company or older shared one, so connecting your own Gmail no longer needs `--force` when the company already has one. `--force` still adds a second account.
|
|
71
|
+
- `hq integrations list` and `show` show each connection's owner (Personal, Company, or Shared (legacy)) and its account label when the server reports owners, and `--json` keeps both fields. Rows without an owner print as before.
|
|
72
|
+
- `hq integrations call` and `tools` take `--account <connection id or account label>` to pick one of several accounts of the same app. With owners reported, `call` passes it to the gateway as the account selector. When more than one account matches, or none does, the command lists the accounts (id, owner, label) and asks you to rerun with `--account`.
|
|
73
|
+
- A loop lane (`hq lanes loop`) no longer shows `running` with no engine after its next envelope is activated and admission is refused. If admission cannot run when the next phase starts, the lane goes to `queued` with reason `admit_failed` and the error, which `hq lanes show` displays. This covers a store lock timeout (`store_lock_timeout`) and the lane changing while admission was checked (`lane_admission_conflict`, `version_conflict`). Any other resume error still fails the envelope with its message. The phase is kept as a pending resume, so reconcile retries it and the envelope is not marked failed. When a throttled loop phase is later admitted, HQ starts that phase's engine (claude, codex or grok) through the normal spawn path. Before this fix it started a second loop controller, which exited at once and left the lane running with no engine pid. Feedback feedback_865fe8a0-49aa-49bd-8719-8a57355bc037.
|
|
74
|
+
- Lanes store locks: a lock held by a live process on this host is no longer reclaimed after the 30-second stale window; it is kept until a 10-minute ceiling (`HQ_LANES_LOCK_LIVE_OWNER_MAX_MS`) that covers pid reuse and hung holders. The reconcile and admission locks now use the same reclaim rules as lane record locks: a lock whose owner pid is dead on this host is reclaimed at once, and an empty lock left by a killed holder ages out by file time instead of blocking forever with `store_lock_timeout`. The reconcile lock holder now removes only its own lock. A legacy lock without a host line whose pid is alive here gets the same ceiling. Older CLIs on the same machine still reclaim by the 30-second window until they are upgraded. Feedback a4226dc9.
|
|
75
|
+
- Personal bots can now run on this computer on the HQ Fleet Runtime: `hq bot create <name> --hq-fleet-runtime`
|
|
76
|
+
installs a signed, isolated runtime, `hq bot auth <name> --provider chatgpt|grok|claude` signs it in with your own
|
|
77
|
+
login or API key, and `hq bot start|stop|restart|status|rm` manage its background service. Credentials live in the
|
|
78
|
+
operating system's secure store, removal wipes them, and `hq bot promote` moves such a bot to the cloud too.
|
|
79
|
+
- Loop lanes: the loop controller (`hq lanes _loop-worker`) is now started with the live Node binary, re-resolved from the Homebrew prefix or PATH when `process.execPath` no longer exists, so a Node upgrade that removes the launch-time binary no longer stops a loop lane from starting its controller. Phase workers and watchers already did this (#2064). Feedback 6cf19c9d.
|
|
80
|
+
- `hq sync push` of a path that is not listed in `.hqinclude` now says so and prints the `.hqinclude` line to add (for example `companies/<slug>/workers/<name>/`). Before, the error ended with advice about symlinks, which sent people looking for a symlink problem. The symlink advice now appears only when a path resolves outside the company folder or its link target cannot be read. The push error text changes for anyone pushing a path missing from `.hqinclude` (feedback_6afa6ce4).
|
|
81
|
+
- When every file under the paths you name in `hq sync push` falls outside your write access, the push now names each requested path as the blocker and points at `hq access <path>`. It still exits 1 (feedback_5baccb9e).
|
|
82
|
+
- `hq access` on a file that is on this computer but not in the vault now checks write access. When an ACL blocks writes, it reports the new outcome `no-write-access` (exit 3) and names the blocking ACL row (`writeBlockedBy` in `--json`), instead of `never-existed` (feedback_5baccb9e).
|
|
83
|
+
- `hq core rebuild-index` (projects, company-knowledge, companies, all) now stays inside the session's bound company set, read exactly as `core/scripts/hq-session.sh get company_slugs` reports it. In a bound session a run with no company rebuilds only the bound companies, and a company outside the set or `--all-companies` is refused before anything is written. Session state that cannot be read (unreadable metadata, a garbled or unreadable `workspace/sessions/.current`, a bound company that is no longer a real directory) refuses the rebuild. An unbound session keeps the every-company rebuild with a warning, so automation is unaffected, and a personal-only session's `all` rebuilds the non-company indexes. `cli.rebuild-index-company-scope` is now a default-on kill switch; turned off, the company root indexes go back to the every-company rebuild with a warning. (feedback_f4468815)
|
|
84
|
+
- `hq scan secrets --range <base>[..<head>]` scans only the lines a branch added: every commit of the range, the lines each merge commit introduced itself, and the net diff from the merge base. A secret added in any commit, including a merge resolution, is caught even if a later commit deletes it. Lines already on the base and older versions of untouched lines are no longer flagged. Added binary files are scanned as text up to 10 MB (larger ones are warned about). It applies the exact-value allowlists committed in the base's `.gitleaks.toml` and adds the base's `[[rules]]` to the built-in rules; rules a branch adds are not run, and a repo rule cannot replace or switch off a built-in one. A reversed range or a git failure exits 2; an empty range warns. `commit-secret-scan.sh pr-check` can use it in place of its whole-file history scan. (feedback_b0af3152)
|
|
85
|
+
- `hq secrets generate-link` prints the link as a clickable OSC-8 hyperlink when stdout is a terminal that supports it (iTerm2, WezTerm, VS Code, Ghostty, kitty, Windows Terminal, VTE; on a TTY only, the `FORCE_HYPERLINK` env var set to `1` or `0` overrides detection), and as the plain URL otherwise. Output to a pipe or file is unchanged and never gets escape sequences, whatever `FORCE_HYPERLINK` says. Control characters (C0, DEL, C1) are stripped from the URL, secret name and expiry before printing, and `[`/`]` are escaped in the Markdown label. New `--format markdown` prints one Markdown link line on stdout, with the expiry and one-time-use note on stderr, so `$(...)` and pipes capture only the link; the link label never contains the token. New `--json` (or `--format json`) prints `{ url, expiresAt, secretName }`.
|
|
86
|
+
- Security: `hq secrets exec --script` and `hq run --script` now release script-locked secrets only to the approved script itself. When any requested secret is script-locked (or the vault does not report its lock state), the command after `--` must be the script (for example `-- ./script.sh args`) or an allowlisted system interpreter followed directly by it (for example `-- bash script.sh args`). Any other command, a shell `-c` string, or a wrapper such as `env` or `xargs` is refused with exit 1 and nothing is injected. The script's `#!` interpreter goes through the same allowlist, and `#!/usr/bin/env X` is resolved on a fixed system PATH. Allowlisted interpreters are sh, dash, ksh, bash (with `--noprofile --norc`), zsh (with `-f`), python3 (with `-I -S`) and node; each must be root-owned and not writable by other users, so Homebrew installs are refused. The script is read once, hash-checked, copied to a private 0700 directory and that copy is run; `HQ_APPROVED_SCRIPT` and `HQ_APPROVED_SCRIPT_DIR` name the original path and its directory (use them to load neighbour files, since `$0` names the copy). The copy is removed on exit, SIGINT, SIGTERM and SIGHUP. `hq run --script` no longer loads the schema through varlock: it reads the schema and local env files in a strict mode that accepts only `KEY=hq(...)`, plain literals and the decorators `@hqCompany`, `@required`, `@optional`, `@sensitive`, `@public`, `@defaultRequired` and `@defaultSensitive`. Any other resolver (such as `exec()`) or decorator (such as `@plugin` or `@import`) is refused before a secret is fetched. The bound child's environment is built from an allowlist: HOME, USER, LOGNAME, LANG, LC_*, TERM, TZ and TMPDIR from the caller, plus the injected values. Injected secrets and schema literals may not use proxy, CA/TLS, pager/editor, HOME/XDG, locale/terminfo, interpreter or inherited names (for example `HTTPS_PROXY`, `SSL_CERT_FILE`, `NODE_TLS_REJECT_UNAUTHORIZED`, `HOME`, `PAGER`, `LESSOPEN`, `EDITOR`, `NLSPATH`, `TMPDIR`); Tool-config names (`AWS_ENDPOINT_URL*`, `AWS_CA_BUNDLE`, `AWS_CONFIG_FILE`, `AWS_SHARED_CREDENTIALS_FILE`, `AWS_PROFILE`, `KUBECONFIG`, `DOCKER_*`, `PIP_*`, `NPM_CONFIG_*`, `BROWSER`, `GNUPGHOME`, `TF_CLI_CONFIG_FILE`, `GOPROXY`, `GOFLAGS`, `CARGO_*`, `SUDO_ASKPASS`) are refused too. With `hq run --script`, schema and local env literals are accepted only for `NODE_ENV`, `APP_ENV`, `ENVIRONMENT`, `LOG_LEVEL`, `LOG_FORMAT`, `CI`, `NO_COLOR` and `FORCE_COLOR`; any other literal is refused before any fetch, and other values must come from the vault through `hq()`. Other caller variables such as `AWS_*` no longer reach a bound script. The private copy is written under `/tmp`, not the caller's `TMPDIR`. The binding controls which entrypoint receives the secret, not what that entrypoint runs. A same-user caller can still influence tools the script calls through dotfiles in HOME (`~/.gitconfig`, `~/.curlrc`, `~/.ssh/config`), so use `hq secrets sandbox` when real isolation matters. The child gets PATH `/usr/bin:/bin:/usr/sbin:/sbin` and loses interpreter and loader injection variables (`BASH_ENV`, `FPATH`, `PYTHON*`, `NODE_OPTIONS`, `NODE_PATH`, `RUBY*`, `GEM_*`, `BUNDLE_*`, `PERL*`, `LD_*`, `DYLD_*`, `OPENSSL_*`, `GIO_*`, `GCONV_PATH`, `LOCPATH`, `GLIBC_TUNABLES`, `DEVELOPER_DIR`, exported bash functions). A bound launch is refused when a secret, or an `hq run` schema or local env value, uses one of those names or `PATH`. The API-key fetch path now reads the secret's lock state too, so API-key callers with unlocked secrets keep working. For `hq secrets exec --script`, secrets the vault marks as not script-locked still go to the command as given. Breaking: every `hq run --script` run uses the strict schema reader and the literal allowlist, including runs whose secrets are not script-locked, so an ordinary literal such as `API_BASE_URL=https://...` now fails.
|
|
87
|
+
- `hq sync now` has two opt-in limits for scheduled or unattended jobs: `--max-idle <seconds>` (or `HQ_SYNC_MAX_IDLE`) and `--max-runtime <seconds>` (or `HQ_SYNC_MAX_RUNTIME`). Both are off by default, so a sync you start yourself is never stopped. With a limit set, a run that has no file planned, transferred, or skipped for the idle time, or that runs past the total time, prints a message saying the sync watchdog stopped it, records a failed sync, and exits with code 124. Time spent with a Mac or Linux laptop asleep does not count. The remote listing and planning step of each company does not register as progress, so set `--max-idle` longer than your slowest planning step. A check in a worker thread also ends the process if it is stuck in a loop that never yields, or if it hangs after the watchdog stops it. That forced stop exits with 137 on macOS and Linux (SIGKILL), not 124. The hang that prompted this, where `hq sync now --all --on-conflict keep` held a CPU core for hours, is fixed in the sync engine and the vault service. Feedback b7c00a62-fa46-417d-93a5-67119263d13f.
|
|
88
|
+
|
|
5
89
|
## [5.345.170] — 2026-10-25
|
|
6
90
|
- `hq access --fix` now labels its suggested recipient as an access contact and explicitly distinguishes an ACL creator from a fallback company owner or admin. The label no longer implies that the contact wrote the file; access checks and sharing permissions are unchanged.
|
|
7
91
|
|
|
@@ -283,7 +283,7 @@ if ! jq '.status = "sending"' "$MANIFEST" > "$TMP_MANIFEST" || ! mv "$TMP_MANIFE
|
|
|
283
283
|
rm -f "$TMP_MANIFEST"
|
|
284
284
|
die "could not persist sending state; no DM attempted"
|
|
285
285
|
fi
|
|
286
|
-
DM_OUT="$(hq dm "$PRINCIPAL" "$HEADLINE" --audience
|
|
286
|
+
DM_OUT="$(hq dm "$PRINCIPAL" "$HEADLINE" --audience human --prompt-file "$PROMPT" --details-file "$BRIEF")" \
|
|
287
287
|
|| die "hq dm delivery outcome is uncertain; status is sending, inspect DM history before retrying"
|
|
288
288
|
|
|
289
289
|
EVENT_ID="$(printf '%s' "$DM_OUT" | grep -oE 'eventId[: ]+[A-Za-z0-9_-]+' | head -1 | sed -E 's/eventId[: ]+//' || true)"
|
|
@@ -1044,6 +1044,14 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
1044
1044
|
readonly flags: "--force-scope-shrink";
|
|
1045
1045
|
readonly description: "When a scope shrink would un-track locally-modified files, proceed anyway. Dirty files are KEPT on disk (only un-tracked); clean out-of-scope files are quarantined under .hq/scope-quarantine/.";
|
|
1046
1046
|
readonly hidden: false;
|
|
1047
|
+
}, {
|
|
1048
|
+
readonly flags: "--max-idle <seconds>";
|
|
1049
|
+
readonly description: "For scheduled or unattended runs: stop with exit code 124 after this many seconds with no file planned, transferred or skipped. The remote listing and planning phase of a leg reports no progress, so set this longer than your slowest planning phase. Laptop sleep does not count. (default: HQ_SYNC_MAX_IDLE, else off)";
|
|
1050
|
+
readonly hidden: false;
|
|
1051
|
+
}, {
|
|
1052
|
+
readonly flags: "--max-runtime <seconds>";
|
|
1053
|
+
readonly description: "For scheduled or unattended runs: stop with exit code 124 if the run has not finished after this many seconds, even while it is making progress. Laptop sleep does not count. (default: HQ_SYNC_MAX_RUNTIME, else off)";
|
|
1054
|
+
readonly hidden: false;
|
|
1047
1055
|
}];
|
|
1048
1056
|
readonly subcommands: readonly [];
|
|
1049
1057
|
}, {
|
|
@@ -2287,6 +2295,14 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2287
2295
|
readonly description: "Token expiry duration (e.g. 24h, 2d, 30m)";
|
|
2288
2296
|
readonly hidden: false;
|
|
2289
2297
|
readonly defaultValue: "24h";
|
|
2298
|
+
}, {
|
|
2299
|
+
readonly flags: "--format <format>";
|
|
2300
|
+
readonly description: "Output format: text (default; OSC-8 hyperlink on a supporting TTY, plain URL otherwise; FORCE_HYPERLINK=1/0 overrides detection on a TTY only), markdown (one Markdown link line on stdout, details on stderr), json";
|
|
2301
|
+
readonly hidden: false;
|
|
2302
|
+
}, {
|
|
2303
|
+
readonly flags: "--json";
|
|
2304
|
+
readonly description: "Print { url, expiresAt, secretName } as JSON (same as --format json)";
|
|
2305
|
+
readonly hidden: false;
|
|
2290
2306
|
}];
|
|
2291
2307
|
readonly subcommands: readonly [];
|
|
2292
2308
|
}, {
|
|
@@ -3035,7 +3051,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3035
3051
|
}];
|
|
3036
3052
|
}, {
|
|
3037
3053
|
readonly name: "files";
|
|
3038
|
-
readonly description: "Manage file access controls in HQ vault. A trailing folder slash (foo/) is a private folder; the quoted glob 'foo/*' shares all children.";
|
|
3054
|
+
readonly description: "Manage file access controls in HQ vault. A trailing folder slash (foo/) is a private folder; the quoted glob 'foo/*' shares all children, and a quoted 'clients/*/reports' shares that folder under every client.";
|
|
3039
3055
|
readonly aliases: readonly [];
|
|
3040
3056
|
readonly hidden: false;
|
|
3041
3057
|
readonly helpOption: true;
|
|
@@ -3050,7 +3066,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3050
3066
|
}];
|
|
3051
3067
|
readonly subcommands: readonly [{
|
|
3052
3068
|
readonly name: "share";
|
|
3053
|
-
readonly description: "Share file paths. foo/ is a private folder (children stay creator-only); quote the shared-folder glob 'foo/*' so the shell passes it literally. Without --with: mint a share-session URL and open it in the browser. With --with: grant access directly to a person, group, or @all.";
|
|
3069
|
+
readonly description: "Share file paths. foo/ is a private folder (children stay creator-only); quote the shared-folder glob 'foo/*', or a one-folder wildcard such as 'clients/*/reports', so the shell passes it literally. Without --with: mint a share-session URL and open it in the browser. With --with: grant access directly to a person, group, or @all.";
|
|
3054
3070
|
readonly aliases: readonly [];
|
|
3055
3071
|
readonly hidden: false;
|
|
3056
3072
|
readonly helpOption: true;
|
|
@@ -3393,7 +3409,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3393
3409
|
readonly usage: "[options] [vault-path...]";
|
|
3394
3410
|
readonly helpText: readonly [{
|
|
3395
3411
|
readonly position: "after";
|
|
3396
|
-
readonly text: "\nExit codes:\n 0 local or not-synced (file exists and you can read it)\n 2 never-existed (the path was never created)\n 3 no-access (the file exists but you cannot read it)\n 4 ambiguous (several keys matched; pick one)\n\nWith several paths, each gets its own result block and the exit code is the\nhighest one across the paths.\n";
|
|
3412
|
+
readonly text: "\nExit codes:\n 0 local or not-synced (file exists and you can read it)\n 2 never-existed (the path was never created)\n 3 no-access (the file exists but you cannot read it), or\n no-write-access (the file is on disk, not in the vault, and you cannot\n write to it, so a push cannot upload it)\n 4 ambiguous (several keys matched; pick one)\n\nWith several paths, each gets its own result block and the exit code is the\nhighest one across the paths.\n";
|
|
3397
3413
|
}];
|
|
3398
3414
|
readonly arguments: readonly [{
|
|
3399
3415
|
readonly name: "vault-path";
|
|
@@ -3999,7 +4015,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3999
4015
|
}];
|
|
4000
4016
|
}, {
|
|
4001
4017
|
readonly name: "dm";
|
|
4002
|
-
readonly description: "Send and read direct messages, and manage connection requests. Messages
|
|
4018
|
+
readonly description: "Send and read direct messages, and manage connection requests. Messages sent from a person login are always tagged for people. When an agent or bot sends, messages to an agent, a channel or a group are tagged for agents and folded away from people by default. Pass --for-human or --audience human to tag a message for people; --audience agent|both is for agents and bots only.";
|
|
4003
4019
|
readonly aliases: readonly [];
|
|
4004
4020
|
readonly hidden: false;
|
|
4005
4021
|
readonly helpOption: true;
|
|
@@ -4066,7 +4082,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
4066
4082
|
readonly hidden: false;
|
|
4067
4083
|
}, {
|
|
4068
4084
|
readonly flags: "--audience <human|agent|both>";
|
|
4069
|
-
readonly description: "Tag who this message is for: human (a person must read it), agent (progress/status, hidden from humans by default), or both. Default: human for a person, agent for an agent, a channel or a group. Wins over --for-human.";
|
|
4085
|
+
readonly description: "Tag who this message is for: human (a person must read it), agent (progress/status, hidden from humans by default), or both. agent and both are for agents and bots only; a person login always sends human. Default for agents and bots: human for a person, agent for an agent, a channel or a group. Wins over --for-human.";
|
|
4070
4086
|
readonly hidden: false;
|
|
4071
4087
|
}, {
|
|
4072
4088
|
readonly flags: "--for-human";
|
|
@@ -5346,6 +5362,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
5346
5362
|
readonly flags: "--company <slug>";
|
|
5347
5363
|
readonly description: "Company slug, e.g. indigo";
|
|
5348
5364
|
readonly hidden: false;
|
|
5365
|
+
}, {
|
|
5366
|
+
readonly flags: "--account <id-or-label>";
|
|
5367
|
+
readonly description: "Which account of the app: its connection id or account label";
|
|
5368
|
+
readonly hidden: false;
|
|
5349
5369
|
}, {
|
|
5350
5370
|
readonly flags: "--describe <tool>";
|
|
5351
5371
|
readonly description: "Print the full input schema for one tool";
|
|
@@ -5379,6 +5399,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
5379
5399
|
readonly flags: "--connection <id>";
|
|
5380
5400
|
readonly description: "Connection id (acct_…)";
|
|
5381
5401
|
readonly hidden: false;
|
|
5402
|
+
}, {
|
|
5403
|
+
readonly flags: "--account <id-or-label>";
|
|
5404
|
+
readonly description: "Which account of the app: its connection id or account label";
|
|
5405
|
+
readonly hidden: false;
|
|
5382
5406
|
}, {
|
|
5383
5407
|
readonly flags: "--company <slug>";
|
|
5384
5408
|
readonly description: "Company slug, e.g. indigo";
|
|
@@ -5634,6 +5658,14 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
5634
5658
|
readonly flags: "--force";
|
|
5635
5659
|
readonly description: "Connect again even if this app is already connected";
|
|
5636
5660
|
readonly hidden: false;
|
|
5661
|
+
}, {
|
|
5662
|
+
readonly flags: "--personal";
|
|
5663
|
+
readonly description: "Connect it as your own personal connection (not --company <slug>, which picks the company)";
|
|
5664
|
+
readonly hidden: false;
|
|
5665
|
+
}, {
|
|
5666
|
+
readonly flags: "--company-owned";
|
|
5667
|
+
readonly description: "Connect it as a connection the whole company owns (needs permission to add company apps)";
|
|
5668
|
+
readonly hidden: false;
|
|
5637
5669
|
}, {
|
|
5638
5670
|
readonly flags: "--json";
|
|
5639
5671
|
readonly description: "Machine-readable output";
|
|
@@ -5703,6 +5735,14 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
5703
5735
|
readonly flags: "--connect";
|
|
5704
5736
|
readonly description: "For a revoked row, run `connect <domain>` to re-add and revive it";
|
|
5705
5737
|
readonly hidden: false;
|
|
5738
|
+
}, {
|
|
5739
|
+
readonly flags: "--personal";
|
|
5740
|
+
readonly description: "With --connect: re-add it as your own personal connection";
|
|
5741
|
+
readonly hidden: false;
|
|
5742
|
+
}, {
|
|
5743
|
+
readonly flags: "--company-owned";
|
|
5744
|
+
readonly description: "With --connect: re-add it as a connection the whole company owns";
|
|
5745
|
+
readonly hidden: false;
|
|
5706
5746
|
}, {
|
|
5707
5747
|
readonly flags: "--json";
|
|
5708
5748
|
readonly description: "Machine-readable output";
|
|
@@ -6328,7 +6368,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
6328
6368
|
readonly hidden: false;
|
|
6329
6369
|
}, {
|
|
6330
6370
|
readonly flags: "--repo <dir>";
|
|
6331
|
-
readonly description: "With files: apply this repo's committed .gitleaks.toml allowlists, matching repo-relative paths";
|
|
6371
|
+
readonly description: "With files: apply this repo's committed .gitleaks.toml allowlists, matching repo-relative paths. With --range: the repo to scan (default: the current directory)";
|
|
6332
6372
|
readonly hidden: false;
|
|
6333
6373
|
}, {
|
|
6334
6374
|
readonly flags: "--snapshot-root <dir>";
|
|
@@ -6338,6 +6378,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
6338
6378
|
readonly flags: "--allowlist-rev <rev>";
|
|
6339
6379
|
readonly description: "With --repo: read .gitleaks.toml from this commit instead of HEAD";
|
|
6340
6380
|
readonly hidden: false;
|
|
6381
|
+
}, {
|
|
6382
|
+
readonly flags: "--range <range>";
|
|
6383
|
+
readonly description: "Scan the lines added in <base>..<head> (head defaults to HEAD), every commit included, with the base's .gitleaks.toml allowlists and the repo's [[rules]]";
|
|
6384
|
+
readonly hidden: false;
|
|
6341
6385
|
}];
|
|
6342
6386
|
readonly subcommands: readonly [];
|
|
6343
6387
|
}];
|
|
@@ -8500,6 +8544,41 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
8500
8544
|
readonly hidden: false;
|
|
8501
8545
|
}];
|
|
8502
8546
|
readonly subcommands: readonly [];
|
|
8547
|
+
}, {
|
|
8548
|
+
readonly name: "pull";
|
|
8549
|
+
readonly description: "Download one file from an Outpost through a short-lived download link (for files too large for exec output). <outpost> is the Outpost id (`primary` for your first box). The remote path must be inside the Outpost user's home or HQ dir; relative and ~ paths start at the home dir. The file is saved to [local-path], or to the remote file name in the current directory.";
|
|
8550
|
+
readonly aliases: readonly [];
|
|
8551
|
+
readonly hidden: false;
|
|
8552
|
+
readonly helpOption: true;
|
|
8553
|
+
readonly helpCommand: false;
|
|
8554
|
+
readonly usage: "[options] <outpost> <remote-path> [local-path]";
|
|
8555
|
+
readonly helpText: readonly [];
|
|
8556
|
+
readonly arguments: readonly [{
|
|
8557
|
+
readonly name: "outpost";
|
|
8558
|
+
readonly required: true;
|
|
8559
|
+
readonly variadic: false;
|
|
8560
|
+
readonly description: "";
|
|
8561
|
+
}, {
|
|
8562
|
+
readonly name: "remote-path";
|
|
8563
|
+
readonly required: true;
|
|
8564
|
+
readonly variadic: false;
|
|
8565
|
+
readonly description: "";
|
|
8566
|
+
}, {
|
|
8567
|
+
readonly name: "local-path";
|
|
8568
|
+
readonly required: false;
|
|
8569
|
+
readonly variadic: false;
|
|
8570
|
+
readonly description: "";
|
|
8571
|
+
}];
|
|
8572
|
+
readonly options: readonly [{
|
|
8573
|
+
readonly flags: "--force";
|
|
8574
|
+
readonly description: "Replace the local file if it already exists";
|
|
8575
|
+
readonly hidden: false;
|
|
8576
|
+
}, {
|
|
8577
|
+
readonly flags: "--json";
|
|
8578
|
+
readonly description: "Emit raw JSON";
|
|
8579
|
+
readonly hidden: false;
|
|
8580
|
+
}];
|
|
8581
|
+
readonly subcommands: readonly [];
|
|
8503
8582
|
}, {
|
|
8504
8583
|
readonly name: "terminal";
|
|
8505
8584
|
readonly description: "Open an interactive terminal on an Outpost — a real TTY over SSM Session Manager (no SSH, no local AWS credentials). Requires the AWS session-manager-plugin installed locally. With --forward, tunnels a port on the box to your machine instead of opening a shell.";
|
|
@@ -18262,6 +18341,22 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18262
18341
|
readonly arguments: readonly [];
|
|
18263
18342
|
readonly options: readonly [];
|
|
18264
18343
|
readonly subcommands: readonly [];
|
|
18344
|
+
}, {
|
|
18345
|
+
readonly name: "sync-core-reconcile";
|
|
18346
|
+
readonly description: "Read each company's new-sync-engine switch and write this machine's engine homes and legacy off-switches";
|
|
18347
|
+
readonly aliases: readonly [];
|
|
18348
|
+
readonly hidden: false;
|
|
18349
|
+
readonly helpOption: true;
|
|
18350
|
+
readonly helpCommand: false;
|
|
18351
|
+
readonly usage: "[options]";
|
|
18352
|
+
readonly helpText: readonly [];
|
|
18353
|
+
readonly arguments: readonly [];
|
|
18354
|
+
readonly options: readonly [{
|
|
18355
|
+
readonly flags: "--hq-root <path>";
|
|
18356
|
+
readonly description: "HQ folder the engine works against";
|
|
18357
|
+
readonly hidden: false;
|
|
18358
|
+
}];
|
|
18359
|
+
readonly subcommands: readonly [];
|
|
18265
18360
|
}, {
|
|
18266
18361
|
readonly name: "remote-control";
|
|
18267
18362
|
readonly description: "Keep `claude remote-control` running in a tmux session in the HQ folder";
|
|
@@ -18384,6 +18479,62 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18384
18479
|
readonly subcommands: readonly [];
|
|
18385
18480
|
}];
|
|
18386
18481
|
}];
|
|
18482
|
+
}, {
|
|
18483
|
+
readonly name: "sync-core";
|
|
18484
|
+
readonly description: "Move this machine's vaults between the current sync and the new sync engine, following each company's switch";
|
|
18485
|
+
readonly aliases: readonly [];
|
|
18486
|
+
readonly hidden: true;
|
|
18487
|
+
readonly helpOption: true;
|
|
18488
|
+
readonly helpCommand: true;
|
|
18489
|
+
readonly usage: "[options] [command]";
|
|
18490
|
+
readonly helpText: readonly [];
|
|
18491
|
+
readonly arguments: readonly [];
|
|
18492
|
+
readonly options: readonly [];
|
|
18493
|
+
readonly subcommands: readonly [{
|
|
18494
|
+
readonly name: "reconcile";
|
|
18495
|
+
readonly description: "Read each company's switch, install the engine when needed, and write the engine homes and legacy off-switches";
|
|
18496
|
+
readonly aliases: readonly [];
|
|
18497
|
+
readonly hidden: false;
|
|
18498
|
+
readonly helpOption: true;
|
|
18499
|
+
readonly helpCommand: false;
|
|
18500
|
+
readonly usage: "[options]";
|
|
18501
|
+
readonly helpText: readonly [];
|
|
18502
|
+
readonly arguments: readonly [];
|
|
18503
|
+
readonly options: readonly [{
|
|
18504
|
+
readonly flags: "--hq-root <path>";
|
|
18505
|
+
readonly description: "HQ folder (default: the daemon's)";
|
|
18506
|
+
readonly hidden: false;
|
|
18507
|
+
}, {
|
|
18508
|
+
readonly flags: "--companies-only";
|
|
18509
|
+
readonly description: "Never move the personal vault (agent boxes)";
|
|
18510
|
+
readonly hidden: false;
|
|
18511
|
+
}, {
|
|
18512
|
+
readonly flags: "--token-file <path>";
|
|
18513
|
+
readonly description: "Token file the engine reads (default: this user's hq sign-in)";
|
|
18514
|
+
readonly hidden: false;
|
|
18515
|
+
}, {
|
|
18516
|
+
readonly flags: "--json";
|
|
18517
|
+
readonly description: "Print the written rollout state as JSON";
|
|
18518
|
+
readonly hidden: false;
|
|
18519
|
+
}];
|
|
18520
|
+
readonly subcommands: readonly [];
|
|
18521
|
+
}, {
|
|
18522
|
+
readonly name: "status";
|
|
18523
|
+
readonly description: "Show which vaults are on the new sync engine on this machine";
|
|
18524
|
+
readonly aliases: readonly [];
|
|
18525
|
+
readonly hidden: false;
|
|
18526
|
+
readonly helpOption: true;
|
|
18527
|
+
readonly helpCommand: false;
|
|
18528
|
+
readonly usage: "[options]";
|
|
18529
|
+
readonly helpText: readonly [];
|
|
18530
|
+
readonly arguments: readonly [];
|
|
18531
|
+
readonly options: readonly [{
|
|
18532
|
+
readonly flags: "--json";
|
|
18533
|
+
readonly description: "Print JSON";
|
|
18534
|
+
readonly hidden: false;
|
|
18535
|
+
}];
|
|
18536
|
+
readonly subcommands: readonly [];
|
|
18537
|
+
}];
|
|
18387
18538
|
}, {
|
|
18388
18539
|
readonly name: "bot";
|
|
18389
18540
|
readonly description: "Personal local bots that run on this computer with your own model login";
|
|
@@ -18546,7 +18697,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18546
18697
|
readonly flags: "--runtime <runtime>";
|
|
18547
18698
|
readonly description: "Model CLI to run the bot with: claude|codex|grok";
|
|
18548
18699
|
readonly hidden: false;
|
|
18549
|
-
|
|
18700
|
+
}, {
|
|
18701
|
+
readonly flags: "--hq-fleet-runtime";
|
|
18702
|
+
readonly description: "Create this personal bot with the local HQ Fleet Runtime";
|
|
18703
|
+
readonly hidden: false;
|
|
18550
18704
|
}, {
|
|
18551
18705
|
readonly flags: "--model <model>";
|
|
18552
18706
|
readonly description: "Model override passed to the runtime CLI";
|
|
@@ -18818,6 +18972,51 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18818
18972
|
readonly hidden: false;
|
|
18819
18973
|
}];
|
|
18820
18974
|
readonly subcommands: readonly [];
|
|
18975
|
+
}, {
|
|
18976
|
+
readonly name: "auth";
|
|
18977
|
+
readonly description: "Sign a runtime-backed personal bot in to ChatGPT, Grok, Claude, or another supported provider";
|
|
18978
|
+
readonly aliases: readonly [];
|
|
18979
|
+
readonly hidden: false;
|
|
18980
|
+
readonly helpOption: true;
|
|
18981
|
+
readonly helpCommand: false;
|
|
18982
|
+
readonly usage: "[options] <name>";
|
|
18983
|
+
readonly helpText: readonly [];
|
|
18984
|
+
readonly arguments: readonly [{
|
|
18985
|
+
readonly name: "name";
|
|
18986
|
+
readonly required: true;
|
|
18987
|
+
readonly variadic: false;
|
|
18988
|
+
readonly description: "";
|
|
18989
|
+
}];
|
|
18990
|
+
readonly options: readonly [{
|
|
18991
|
+
readonly flags: "--provider <provider>";
|
|
18992
|
+
readonly description: "Provider: chatgpt, grok, claude, or a runtime provider id";
|
|
18993
|
+
readonly hidden: false;
|
|
18994
|
+
}, {
|
|
18995
|
+
readonly flags: "--model <model>";
|
|
18996
|
+
readonly description: "Model id; required for providers without a built-in personal-bot default";
|
|
18997
|
+
readonly hidden: false;
|
|
18998
|
+
}, {
|
|
18999
|
+
readonly flags: "--api-key";
|
|
19000
|
+
readonly description: "Read an API key from stdin instead of starting device authorization";
|
|
19001
|
+
readonly hidden: false;
|
|
19002
|
+
}, {
|
|
19003
|
+
readonly flags: "--base-url <url>";
|
|
19004
|
+
readonly description: "Provider API base URL; required for custom runtime providers";
|
|
19005
|
+
readonly hidden: false;
|
|
19006
|
+
}, {
|
|
19007
|
+
readonly flags: "--transport <transport>";
|
|
19008
|
+
readonly description: "Provider transport: chat_completions, anthropic_messages, or codex_responses";
|
|
19009
|
+
readonly hidden: false;
|
|
19010
|
+
}, {
|
|
19011
|
+
readonly flags: "--no-browser";
|
|
19012
|
+
readonly description: "Do not open a browser during device authorization";
|
|
19013
|
+
readonly hidden: false;
|
|
19014
|
+
}, {
|
|
19015
|
+
readonly flags: "--json";
|
|
19016
|
+
readonly description: "Print machine-readable JSON";
|
|
19017
|
+
readonly hidden: false;
|
|
19018
|
+
}];
|
|
19019
|
+
readonly subcommands: readonly [];
|
|
18821
19020
|
}, {
|
|
18822
19021
|
readonly name: "logs";
|
|
18823
19022
|
readonly description: "Show the bot's log";
|