@indigoai-us/hq-cli 5.345.170 → 5.345.171
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 +55 -0
- package/assets/scaffold/core/scripts/hq-delegate-send.sh +1 -1
- package/dist/command-catalog.generated.d.ts +132 -5
- package/dist/command-catalog.generated.js +164 -6
- 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 +137 -14
- package/dist/commands/cloud.d.ts +58 -1
- package/dist/commands/cloud.js +219 -5
- 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/dm.d.ts +17 -3
- package/dist/commands/dm.js +121 -26
- 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/hq-cloud-sync-runner/bin/sync-runner.js +2367 -2109
- 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 +127 -0
- package/dist/lib/bot/fleet-local.js +638 -0
- package/dist/lib/bot/index.d.ts +1 -0
- package/dist/lib/bot/index.js +1 -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/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.js +4 -1
- package/dist/lib/daemon/sync-core-canary.d.ts +3 -0
- package/dist/lib/daemon/sync-core-canary.js +8 -3
- 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/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/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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.345.171] — 2026-10-26
|
|
6
|
+
- 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).
|
|
7
|
+
|
|
8
|
+
- 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.
|
|
9
|
+
- `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)
|
|
10
|
+
- 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)
|
|
11
|
+
- The bundled sync engine now uses hq-cloud 6.18.102, the current npm `latest`.
|
|
12
|
+
It pulls in these hq-cloud fixes:
|
|
13
|
+
- Sync no longer lists the same vault page forever when the listing stops
|
|
14
|
+
early. It retries the page up to 3 times with backoff, then fails that
|
|
15
|
+
company's leg with `REMOTE_LIST_NOT_CONVERGING`. Before this,
|
|
16
|
+
`hq sync now --all --on-conflict keep` could hold a CPU core for hours.
|
|
17
|
+
- Sync pull no longer replaces your session handoff pointer
|
|
18
|
+
(`workspace/threads/handoff.json`) with an older vault copy. The copy with
|
|
19
|
+
the newer `created_at` is kept, and a kept local pointer is always queued
|
|
20
|
+
for push, so the vault catches up.
|
|
21
|
+
- When the vault refuses some of your files during a push
|
|
22
|
+
(FILES_PRESIGN_FORBIDDEN), the pull that follows no longer deletes or
|
|
23
|
+
overwrites your local copies of those files (hq-cloud #1048).
|
|
24
|
+
- Sync pull no longer writes or deletes a file through a folder link inside
|
|
25
|
+
the synced tree, such as `.agents` linking to `.claude` (hq-cloud #1041).
|
|
26
|
+
- Sync push no longer uploads a second cloud copy of a file under an in-tree
|
|
27
|
+
folder link's name; it skips the path and names the real path to push
|
|
28
|
+
instead. Files reached only through a link into an excluded folder are no
|
|
29
|
+
longer backed up under the link's name (hq-cloud #1047, #1053).
|
|
30
|
+
- `readManifestUploadStatus` also returns the last failed manifest upload's
|
|
31
|
+
time, failure count, reason and HTTP status (hq-cloud #1050).
|
|
32
|
+
- New `hq outposts pull <outpost> <remote-path> [local-path]` downloads one
|
|
33
|
+
file from an Outpost when it is too large for `hq outposts exec`. It needs
|
|
34
|
+
the matching hq-pro endpoint to be deployed (hq-cloud #996).
|
|
35
|
+
- 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.
|
|
36
|
+
- `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.
|
|
37
|
+
- `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`.
|
|
38
|
+
- `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.
|
|
39
|
+
- `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.
|
|
40
|
+
- `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.
|
|
41
|
+
- 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.
|
|
42
|
+
- `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.
|
|
43
|
+
- `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`.
|
|
44
|
+
- 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.
|
|
45
|
+
- 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.
|
|
46
|
+
- Personal bots can now run on this computer on the HQ Fleet Runtime: `hq bot create <name> --hq-fleet-runtime`
|
|
47
|
+
installs a signed, isolated runtime, `hq bot auth <name> --provider chatgpt|grok|claude` signs it in with your own
|
|
48
|
+
login or API key, and `hq bot start|stop|restart|status|rm` manage its background service. Credentials live in the
|
|
49
|
+
operating system's secure store, removal wipes them, and `hq bot promote` moves such a bot to the cloud too.
|
|
50
|
+
- 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.
|
|
51
|
+
- `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).
|
|
52
|
+
- 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).
|
|
53
|
+
- `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).
|
|
54
|
+
- `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)
|
|
55
|
+
- `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)
|
|
56
|
+
- `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 }`.
|
|
57
|
+
- 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.
|
|
58
|
+
- `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.
|
|
59
|
+
|
|
5
60
|
## [5.345.170] — 2026-10-25
|
|
6
61
|
- `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
62
|
|
|
@@ -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
|
}, {
|
|
@@ -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.";
|
|
@@ -18546,7 +18625,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18546
18625
|
readonly flags: "--runtime <runtime>";
|
|
18547
18626
|
readonly description: "Model CLI to run the bot with: claude|codex|grok";
|
|
18548
18627
|
readonly hidden: false;
|
|
18549
|
-
|
|
18628
|
+
}, {
|
|
18629
|
+
readonly flags: "--hq-fleet-runtime";
|
|
18630
|
+
readonly description: "Create this personal bot with the local HQ Fleet Runtime";
|
|
18631
|
+
readonly hidden: false;
|
|
18550
18632
|
}, {
|
|
18551
18633
|
readonly flags: "--model <model>";
|
|
18552
18634
|
readonly description: "Model override passed to the runtime CLI";
|
|
@@ -18818,6 +18900,51 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
18818
18900
|
readonly hidden: false;
|
|
18819
18901
|
}];
|
|
18820
18902
|
readonly subcommands: readonly [];
|
|
18903
|
+
}, {
|
|
18904
|
+
readonly name: "auth";
|
|
18905
|
+
readonly description: "Sign a runtime-backed personal bot in to ChatGPT, Grok, Claude, or another supported provider";
|
|
18906
|
+
readonly aliases: readonly [];
|
|
18907
|
+
readonly hidden: false;
|
|
18908
|
+
readonly helpOption: true;
|
|
18909
|
+
readonly helpCommand: false;
|
|
18910
|
+
readonly usage: "[options] <name>";
|
|
18911
|
+
readonly helpText: readonly [];
|
|
18912
|
+
readonly arguments: readonly [{
|
|
18913
|
+
readonly name: "name";
|
|
18914
|
+
readonly required: true;
|
|
18915
|
+
readonly variadic: false;
|
|
18916
|
+
readonly description: "";
|
|
18917
|
+
}];
|
|
18918
|
+
readonly options: readonly [{
|
|
18919
|
+
readonly flags: "--provider <provider>";
|
|
18920
|
+
readonly description: "Provider: chatgpt, grok, claude, or a runtime provider id";
|
|
18921
|
+
readonly hidden: false;
|
|
18922
|
+
}, {
|
|
18923
|
+
readonly flags: "--model <model>";
|
|
18924
|
+
readonly description: "Model id; required for providers without a built-in personal-bot default";
|
|
18925
|
+
readonly hidden: false;
|
|
18926
|
+
}, {
|
|
18927
|
+
readonly flags: "--api-key";
|
|
18928
|
+
readonly description: "Read an API key from stdin instead of starting device authorization";
|
|
18929
|
+
readonly hidden: false;
|
|
18930
|
+
}, {
|
|
18931
|
+
readonly flags: "--base-url <url>";
|
|
18932
|
+
readonly description: "Provider API base URL; required for custom runtime providers";
|
|
18933
|
+
readonly hidden: false;
|
|
18934
|
+
}, {
|
|
18935
|
+
readonly flags: "--transport <transport>";
|
|
18936
|
+
readonly description: "Provider transport: chat_completions, anthropic_messages, or codex_responses";
|
|
18937
|
+
readonly hidden: false;
|
|
18938
|
+
}, {
|
|
18939
|
+
readonly flags: "--no-browser";
|
|
18940
|
+
readonly description: "Do not open a browser during device authorization";
|
|
18941
|
+
readonly hidden: false;
|
|
18942
|
+
}, {
|
|
18943
|
+
readonly flags: "--json";
|
|
18944
|
+
readonly description: "Print machine-readable JSON";
|
|
18945
|
+
readonly hidden: false;
|
|
18946
|
+
}];
|
|
18947
|
+
readonly subcommands: readonly [];
|
|
18821
18948
|
}, {
|
|
18822
18949
|
readonly name: "logs";
|
|
18823
18950
|
readonly description: "Show the bot's log";
|
|
@@ -1252,6 +1252,16 @@ export const COMMAND_CATALOG = [
|
|
|
1252
1252
|
"flags": "--force-scope-shrink",
|
|
1253
1253
|
"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/.",
|
|
1254
1254
|
"hidden": false
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
"flags": "--max-idle <seconds>",
|
|
1258
|
+
"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)",
|
|
1259
|
+
"hidden": false
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
"flags": "--max-runtime <seconds>",
|
|
1263
|
+
"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)",
|
|
1264
|
+
"hidden": false
|
|
1255
1265
|
}
|
|
1256
1266
|
],
|
|
1257
1267
|
"subcommands": []
|
|
@@ -2750,6 +2760,16 @@ export const COMMAND_CATALOG = [
|
|
|
2750
2760
|
"description": "Token expiry duration (e.g. 24h, 2d, 30m)",
|
|
2751
2761
|
"hidden": false,
|
|
2752
2762
|
"defaultValue": "24h"
|
|
2763
|
+
},
|
|
2764
|
+
{
|
|
2765
|
+
"flags": "--format <format>",
|
|
2766
|
+
"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",
|
|
2767
|
+
"hidden": false
|
|
2768
|
+
},
|
|
2769
|
+
{
|
|
2770
|
+
"flags": "--json",
|
|
2771
|
+
"description": "Print { url, expiresAt, secretName } as JSON (same as --format json)",
|
|
2772
|
+
"hidden": false
|
|
2753
2773
|
}
|
|
2754
2774
|
],
|
|
2755
2775
|
"subcommands": []
|
|
@@ -4095,7 +4115,7 @@ export const COMMAND_CATALOG = [
|
|
|
4095
4115
|
"helpText": [
|
|
4096
4116
|
{
|
|
4097
4117
|
"position": "after",
|
|
4098
|
-
"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"
|
|
4118
|
+
"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"
|
|
4099
4119
|
}
|
|
4100
4120
|
],
|
|
4101
4121
|
"arguments": [
|
|
@@ -4842,7 +4862,7 @@ export const COMMAND_CATALOG = [
|
|
|
4842
4862
|
},
|
|
4843
4863
|
{
|
|
4844
4864
|
"name": "dm",
|
|
4845
|
-
"description": "Send and read direct messages, and manage connection requests. Messages
|
|
4865
|
+
"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.",
|
|
4846
4866
|
"aliases": [],
|
|
4847
4867
|
"hidden": false,
|
|
4848
4868
|
"helpOption": true,
|
|
@@ -4923,7 +4943,7 @@ export const COMMAND_CATALOG = [
|
|
|
4923
4943
|
},
|
|
4924
4944
|
{
|
|
4925
4945
|
"flags": "--audience <human|agent|both>",
|
|
4926
|
-
"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.",
|
|
4946
|
+
"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.",
|
|
4927
4947
|
"hidden": false
|
|
4928
4948
|
},
|
|
4929
4949
|
{
|
|
@@ -6478,6 +6498,11 @@ export const COMMAND_CATALOG = [
|
|
|
6478
6498
|
"description": "Company slug, e.g. indigo",
|
|
6479
6499
|
"hidden": false
|
|
6480
6500
|
},
|
|
6501
|
+
{
|
|
6502
|
+
"flags": "--account <id-or-label>",
|
|
6503
|
+
"description": "Which account of the app: its connection id or account label",
|
|
6504
|
+
"hidden": false
|
|
6505
|
+
},
|
|
6481
6506
|
{
|
|
6482
6507
|
"flags": "--describe <tool>",
|
|
6483
6508
|
"description": "Print the full input schema for one tool",
|
|
@@ -6519,6 +6544,11 @@ export const COMMAND_CATALOG = [
|
|
|
6519
6544
|
"description": "Connection id (acct_…)",
|
|
6520
6545
|
"hidden": false
|
|
6521
6546
|
},
|
|
6547
|
+
{
|
|
6548
|
+
"flags": "--account <id-or-label>",
|
|
6549
|
+
"description": "Which account of the app: its connection id or account label",
|
|
6550
|
+
"hidden": false
|
|
6551
|
+
},
|
|
6522
6552
|
{
|
|
6523
6553
|
"flags": "--company <slug>",
|
|
6524
6554
|
"description": "Company slug, e.g. indigo",
|
|
@@ -6840,6 +6870,16 @@ export const COMMAND_CATALOG = [
|
|
|
6840
6870
|
"description": "Connect again even if this app is already connected",
|
|
6841
6871
|
"hidden": false
|
|
6842
6872
|
},
|
|
6873
|
+
{
|
|
6874
|
+
"flags": "--personal",
|
|
6875
|
+
"description": "Connect it as your own personal connection (not --company <slug>, which picks the company)",
|
|
6876
|
+
"hidden": false
|
|
6877
|
+
},
|
|
6878
|
+
{
|
|
6879
|
+
"flags": "--company-owned",
|
|
6880
|
+
"description": "Connect it as a connection the whole company owns (needs permission to add company apps)",
|
|
6881
|
+
"hidden": false
|
|
6882
|
+
},
|
|
6843
6883
|
{
|
|
6844
6884
|
"flags": "--json",
|
|
6845
6885
|
"description": "Machine-readable output",
|
|
@@ -6926,6 +6966,16 @@ export const COMMAND_CATALOG = [
|
|
|
6926
6966
|
"description": "For a revoked row, run `connect <domain>` to re-add and revive it",
|
|
6927
6967
|
"hidden": false
|
|
6928
6968
|
},
|
|
6969
|
+
{
|
|
6970
|
+
"flags": "--personal",
|
|
6971
|
+
"description": "With --connect: re-add it as your own personal connection",
|
|
6972
|
+
"hidden": false
|
|
6973
|
+
},
|
|
6974
|
+
{
|
|
6975
|
+
"flags": "--company-owned",
|
|
6976
|
+
"description": "With --connect: re-add it as a connection the whole company owns",
|
|
6977
|
+
"hidden": false
|
|
6978
|
+
},
|
|
6929
6979
|
{
|
|
6930
6980
|
"flags": "--json",
|
|
6931
6981
|
"description": "Machine-readable output",
|
|
@@ -7698,7 +7748,7 @@ export const COMMAND_CATALOG = [
|
|
|
7698
7748
|
},
|
|
7699
7749
|
{
|
|
7700
7750
|
"flags": "--repo <dir>",
|
|
7701
|
-
"description": "With files: apply this repo's committed .gitleaks.toml allowlists, matching repo-relative paths",
|
|
7751
|
+
"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)",
|
|
7702
7752
|
"hidden": false
|
|
7703
7753
|
},
|
|
7704
7754
|
{
|
|
@@ -7710,6 +7760,11 @@ export const COMMAND_CATALOG = [
|
|
|
7710
7760
|
"flags": "--allowlist-rev <rev>",
|
|
7711
7761
|
"description": "With --repo: read .gitleaks.toml from this commit instead of HEAD",
|
|
7712
7762
|
"hidden": false
|
|
7763
|
+
},
|
|
7764
|
+
{
|
|
7765
|
+
"flags": "--range <range>",
|
|
7766
|
+
"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]]",
|
|
7767
|
+
"hidden": false
|
|
7713
7768
|
}
|
|
7714
7769
|
],
|
|
7715
7770
|
"subcommands": []
|
|
@@ -10370,6 +10425,49 @@ export const COMMAND_CATALOG = [
|
|
|
10370
10425
|
],
|
|
10371
10426
|
"subcommands": []
|
|
10372
10427
|
},
|
|
10428
|
+
{
|
|
10429
|
+
"name": "pull",
|
|
10430
|
+
"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.",
|
|
10431
|
+
"aliases": [],
|
|
10432
|
+
"hidden": false,
|
|
10433
|
+
"helpOption": true,
|
|
10434
|
+
"helpCommand": false,
|
|
10435
|
+
"usage": "[options] <outpost> <remote-path> [local-path]",
|
|
10436
|
+
"helpText": [],
|
|
10437
|
+
"arguments": [
|
|
10438
|
+
{
|
|
10439
|
+
"name": "outpost",
|
|
10440
|
+
"required": true,
|
|
10441
|
+
"variadic": false,
|
|
10442
|
+
"description": ""
|
|
10443
|
+
},
|
|
10444
|
+
{
|
|
10445
|
+
"name": "remote-path",
|
|
10446
|
+
"required": true,
|
|
10447
|
+
"variadic": false,
|
|
10448
|
+
"description": ""
|
|
10449
|
+
},
|
|
10450
|
+
{
|
|
10451
|
+
"name": "local-path",
|
|
10452
|
+
"required": false,
|
|
10453
|
+
"variadic": false,
|
|
10454
|
+
"description": ""
|
|
10455
|
+
}
|
|
10456
|
+
],
|
|
10457
|
+
"options": [
|
|
10458
|
+
{
|
|
10459
|
+
"flags": "--force",
|
|
10460
|
+
"description": "Replace the local file if it already exists",
|
|
10461
|
+
"hidden": false
|
|
10462
|
+
},
|
|
10463
|
+
{
|
|
10464
|
+
"flags": "--json",
|
|
10465
|
+
"description": "Emit raw JSON",
|
|
10466
|
+
"hidden": false
|
|
10467
|
+
}
|
|
10468
|
+
],
|
|
10469
|
+
"subcommands": []
|
|
10470
|
+
},
|
|
10373
10471
|
{
|
|
10374
10472
|
"name": "terminal",
|
|
10375
10473
|
"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.",
|
|
@@ -22596,8 +22694,12 @@ export const COMMAND_CATALOG = [
|
|
|
22596
22694
|
{
|
|
22597
22695
|
"flags": "--runtime <runtime>",
|
|
22598
22696
|
"description": "Model CLI to run the bot with: claude|codex|grok",
|
|
22599
|
-
"hidden": false
|
|
22600
|
-
|
|
22697
|
+
"hidden": false
|
|
22698
|
+
},
|
|
22699
|
+
{
|
|
22700
|
+
"flags": "--hq-fleet-runtime",
|
|
22701
|
+
"description": "Create this personal bot with the local HQ Fleet Runtime",
|
|
22702
|
+
"hidden": false
|
|
22601
22703
|
},
|
|
22602
22704
|
{
|
|
22603
22705
|
"flags": "--model <model>",
|
|
@@ -22933,6 +23035,62 @@ export const COMMAND_CATALOG = [
|
|
|
22933
23035
|
],
|
|
22934
23036
|
"subcommands": []
|
|
22935
23037
|
},
|
|
23038
|
+
{
|
|
23039
|
+
"name": "auth",
|
|
23040
|
+
"description": "Sign a runtime-backed personal bot in to ChatGPT, Grok, Claude, or another supported provider",
|
|
23041
|
+
"aliases": [],
|
|
23042
|
+
"hidden": false,
|
|
23043
|
+
"helpOption": true,
|
|
23044
|
+
"helpCommand": false,
|
|
23045
|
+
"usage": "[options] <name>",
|
|
23046
|
+
"helpText": [],
|
|
23047
|
+
"arguments": [
|
|
23048
|
+
{
|
|
23049
|
+
"name": "name",
|
|
23050
|
+
"required": true,
|
|
23051
|
+
"variadic": false,
|
|
23052
|
+
"description": ""
|
|
23053
|
+
}
|
|
23054
|
+
],
|
|
23055
|
+
"options": [
|
|
23056
|
+
{
|
|
23057
|
+
"flags": "--provider <provider>",
|
|
23058
|
+
"description": "Provider: chatgpt, grok, claude, or a runtime provider id",
|
|
23059
|
+
"hidden": false
|
|
23060
|
+
},
|
|
23061
|
+
{
|
|
23062
|
+
"flags": "--model <model>",
|
|
23063
|
+
"description": "Model id; required for providers without a built-in personal-bot default",
|
|
23064
|
+
"hidden": false
|
|
23065
|
+
},
|
|
23066
|
+
{
|
|
23067
|
+
"flags": "--api-key",
|
|
23068
|
+
"description": "Read an API key from stdin instead of starting device authorization",
|
|
23069
|
+
"hidden": false
|
|
23070
|
+
},
|
|
23071
|
+
{
|
|
23072
|
+
"flags": "--base-url <url>",
|
|
23073
|
+
"description": "Provider API base URL; required for custom runtime providers",
|
|
23074
|
+
"hidden": false
|
|
23075
|
+
},
|
|
23076
|
+
{
|
|
23077
|
+
"flags": "--transport <transport>",
|
|
23078
|
+
"description": "Provider transport: chat_completions, anthropic_messages, or codex_responses",
|
|
23079
|
+
"hidden": false
|
|
23080
|
+
},
|
|
23081
|
+
{
|
|
23082
|
+
"flags": "--no-browser",
|
|
23083
|
+
"description": "Do not open a browser during device authorization",
|
|
23084
|
+
"hidden": false
|
|
23085
|
+
},
|
|
23086
|
+
{
|
|
23087
|
+
"flags": "--json",
|
|
23088
|
+
"description": "Print machine-readable JSON",
|
|
23089
|
+
"hidden": false
|
|
23090
|
+
}
|
|
23091
|
+
],
|
|
23092
|
+
"subcommands": []
|
|
23093
|
+
},
|
|
22936
23094
|
{
|
|
22937
23095
|
"name": "logs",
|
|
22938
23096
|
"description": "Show the bot's log",
|