@indigoai-us/hq-cli 5.345.148 → 5.345.150
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 +75 -0
- package/README.md +2 -0
- package/dist/command-catalog.generated.d.ts +62 -14
- package/dist/command-catalog.generated.js +74 -14
- package/dist/command-help.js +2 -1
- package/dist/commands/_patterns.d.ts +6 -0
- package/dist/commands/_patterns.js +6 -0
- package/dist/commands/access.d.ts +45 -2
- package/dist/commands/access.js +537 -223
- package/dist/commands/billing-usage.d.ts +33 -2
- package/dist/commands/billing-usage.js +75 -4
- package/dist/commands/bot.js +2 -2
- package/dist/commands/channels.d.ts +27 -0
- package/dist/commands/channels.js +108 -4
- package/dist/commands/core-refresh-vault-access-native.d.ts +16 -0
- package/dist/commands/core-refresh-vault-access-native.js +142 -9
- package/dist/commands/core.js +4 -1
- package/dist/commands/dm.js +9 -1
- package/dist/commands/groups.js +9 -6
- package/dist/commands/install-global.d.ts +1 -8
- package/dist/commands/install-global.js +11 -27
- package/dist/commands/lanes-questions.js +7 -4
- package/dist/commands/lanes.js +13 -6
- package/dist/commands/library-add.d.ts +31 -1
- package/dist/commands/library-add.js +69 -2
- package/dist/commands/library.js +37 -3
- package/dist/commands/members.d.ts +35 -0
- package/dist/commands/members.js +65 -14
- package/dist/commands/reindex.js +19 -0
- package/dist/commands/secrets.d.ts +5 -0
- package/dist/commands/secrets.js +11 -6
- package/dist/hook-engine-path.js +10 -3
- package/dist/hq-cloud-sync-runner/bin/sync-runner.js +63282 -62480
- package/dist/hq-cloud-sync-runner/package.json +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.js +70 -5
- package/dist/lazy-commands.js +2 -0
- package/dist/lib/billing/usage-cost.d.ts +31 -1
- package/dist/lib/billing/usage-cost.js +46 -0
- package/dist/lib/db/local.d.ts +2 -2
- package/dist/lib/db/local.js +2 -2
- package/dist/lib/db/sql.js +2 -2
- package/dist/lib/db/sqlite-binding.d.ts +22 -0
- package/dist/lib/db/sqlite-binding.js +168 -0
- package/dist/lib/doctor/checks/anywhere.d.ts +12 -0
- package/dist/lib/doctor/checks/anywhere.js +63 -12
- package/dist/lib/doctor/checks/cli-path.d.ts +2 -1
- package/dist/lib/doctor/checks/cli-path.js +2 -1
- package/dist/lib/doctor/checks/hook-engine.js +2 -1
- 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/hook-engine/reconcile.d.ts +9 -0
- package/dist/lib/hook-engine/reconcile.js +134 -0
- package/dist/lib/hook-engine/registration.d.ts +17 -0
- package/dist/lib/hook-engine/registration.js +50 -0
- package/dist/lib/install/claude-targets.d.ts +2 -1
- package/dist/lib/install/claude-targets.js +8 -3
- package/dist/lib/install/codex-targets.d.ts +3 -0
- package/dist/lib/install/codex-targets.js +15 -4
- package/dist/lib/install/hook-target.d.ts +9 -0
- package/dist/lib/install/hook-target.js +39 -0
- package/dist/lib/lanes/index.d.ts +1 -1
- package/dist/lib/lanes/index.js +1 -1
- package/dist/lib/lanes/store.d.ts +11 -0
- package/dist/lib/lanes/store.js +20 -0
- package/dist/lib/lanes/watch.js +5 -3
- package/dist/lib/windows/console-encoding.d.ts +24 -0
- package/dist/lib/windows/console-encoding.js +83 -0
- package/dist/lib/windows/install-followup.d.ts +35 -0
- package/dist/lib/windows/install-followup.js +142 -0
- package/dist/lib/windows/user-path.d.ts +80 -3
- package/dist/lib/windows/user-path.js +187 -26
- package/dist/main.js +2 -1
- package/dist/unknown-command.d.ts +18 -0
- package/dist/unknown-command.js +88 -0
- package/dist/utils/cognito-session.d.ts +8 -0
- package/dist/utils/cognito-session.js +14 -2
- package/dist/utils/hook-trust.d.ts +9 -0
- package/dist/utils/hook-trust.js +30 -2
- package/dist/utils/qmd-native-binding-error.js +3 -1
- package/dist/utils/resolve-executable.d.ts +2 -0
- package/dist/utils/resolve-executable.js +6 -2
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,81 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.345.150] — 2026-10-19
|
|
6
|
+
- The bundled sync engine now uses hq-cloud 6.18.90, which brings two fixes.
|
|
7
|
+
- Owners and admins can now destroy one of a company's Outposts with
|
|
8
|
+
`hq outposts destroy --company <slug>`. Add `--outpost <name|id>` when the
|
|
9
|
+
company has more than one. Without `--yes`, hq shows the company, Outpost
|
|
10
|
+
name and id, and destroys it only after you type the Outpost name or `yes`.
|
|
11
|
+
A script without a terminal must pass `--yes`. With `--yes --json` it prints
|
|
12
|
+
one result object. After the request, hq keeps checking status and reports
|
|
13
|
+
whether the Outpost is destroyed or still being destroyed, instead of
|
|
14
|
+
failing on a slow or errored response. It never falls back to your personal
|
|
15
|
+
Outpost. The Company Outpost commands from the last release are unchanged:
|
|
16
|
+
`hq outposts list --company`, `--outpost <name|id>` on status, login,
|
|
17
|
+
login-code, refresh-config and the jobs commands, and `hq outposts jobs`
|
|
18
|
+
edit, pause, resume, delete and run-now.
|
|
19
|
+
- HQ Sync uses much less CPU and memory on Windows when HQ holds git
|
|
20
|
+
worktrees. The sync watcher no longer watches `worktrees/` at the top of
|
|
21
|
+
HQ, `.worktrees/`, `.claude/worktrees/`, `workspace/worktrees/`,
|
|
22
|
+
`node_modules` or nested `.git` folders, including during startup. A top
|
|
23
|
+
level `worktrees/` folder and any `.worktrees/` folder also stop syncing;
|
|
24
|
+
files from them that are already in the vault are not deleted. Sync passes
|
|
25
|
+
started by local changes now run at most once every 30 seconds, and a file
|
|
26
|
+
hq just downloaded no longer triggers an upload of itself. If the sync
|
|
27
|
+
runner uses more than a quarter of a CPU core or 600 MB of memory for a
|
|
28
|
+
while, it writes one warning line to its log. You can opt in to a local
|
|
29
|
+
diagnostics capture, and `hq-sync-runner --diagnostics` prints a redacted
|
|
30
|
+
summary to paste into a bug report. Nothing is uploaded.
|
|
31
|
+
- A company Outpost can now be given access to a secret. Use its `out_` id:
|
|
32
|
+
`hq secrets share <path> --with out_…` gives it that one secret, and
|
|
33
|
+
`hq groups add <group> out_…` lets it read the secrets shared with that
|
|
34
|
+
group. It gets nothing it was not explicitly given.
|
|
35
|
+
- `hq members list` now shows the company Outpost as a read-only row labeled
|
|
36
|
+
"Outpost", and `--json` lists it under `outposts`. Promoting, removing or
|
|
37
|
+
revoking an Outpost is refused with a plain message.
|
|
38
|
+
- `hq lanes create` now prints the new lane's `lane_id` before the list of other lanes it admitted, so a script that takes the first lane id from the output gets the lane it just created. Lane commands that accept a lane id (`hq lanes message`, `hq lanes questions list --from`, `hq lanes watch` and the other lane-target commands) still match the full id first. They now also accept a ULID prefix of 8 or more characters when it names exactly one local lane, and they refuse an ambiguous prefix with an error that lists every matching lane. `hq lanes watch` always prints full lane ids.
|
|
39
|
+
- `hq lanes create --runner subagent` accepts `--provider codex` (and `grok`),
|
|
40
|
+
so Codex `spawn_agent` work from `/conduct` and `/run-project` shows on the
|
|
41
|
+
lanes board like Claude `Agent` work. A subagent lane is a board record only;
|
|
42
|
+
the provider is attribution and no process is started. The
|
|
43
|
+
`subagent_runner_requires_claude` refusal is gone.
|
|
44
|
+
|
|
45
|
+
## [5.345.149] — 2026-10-19
|
|
46
|
+
- `hq access` answers faster. It checks the exact path first and, on a miss,
|
|
47
|
+
looks only in the nearest folder instead of listing the whole vault. It
|
|
48
|
+
loads the member list only when it is about to send an access request.
|
|
49
|
+
Results and denial reasons are the same as before.
|
|
50
|
+
- `hq access` takes several paths at once (`hq access a.md b.md`) or reads
|
|
51
|
+
them from `--stdin`, one per line. Each path gets its own result, `--json`
|
|
52
|
+
prints an array, and the exit code is the highest one across the paths.
|
|
53
|
+
- A folder path now resolves to the folder, and the three spellings `docs`,
|
|
54
|
+
`docs/` and `docs/*` all check the same folder. Before, a bare folder name
|
|
55
|
+
was matched against every file in the vault and usually came back
|
|
56
|
+
ambiguous.
|
|
57
|
+
- Two `hq bot create` error messages now call HQ's built-in bot "your assistant" instead of "setup bot", matching the desktop app. Using `--kind company` with the setup worker now says "HQ's assistant is always a personal bot; drop --kind company.", and using the reserved name `setup` with another worker now says the name is reserved for HQ's assistant. The reserved name and the worker are still `setup`, so commands are unchanged.
|
|
58
|
+
- `hq channels list` takes `--json`, `--active-since <time|duration>` and
|
|
59
|
+
`--sort activity`. `--active-since 2h` (or an ISO time) lists only the
|
|
60
|
+
channels and group DMs with activity since then, newest first, so a sweep
|
|
61
|
+
no longer has to read all of your channels to find the busy ones. `--json`
|
|
62
|
+
includes each channel's last-activity time and unread count.
|
|
63
|
+
- New `hq channels changes [--cursor <token>]` prints the channels that changed
|
|
64
|
+
since the last call's cursor, as JSON. With no cursor it prints a full
|
|
65
|
+
snapshot and a cursor to use next time.
|
|
66
|
+
- `hq dm channel <channel id> --json` no longer downloads your whole channel
|
|
67
|
+
list first, so reading one channel by id takes about a second.
|
|
68
|
+
- `hq billing usage` no longer prices meters for a company or personal account
|
|
69
|
+
on a flat plan (for example a Workforce company that subscribed before usage
|
|
70
|
+
pricing). It shows the readings and one line saying usage meters are not
|
|
71
|
+
billed, with no per-meter cost and no projected bill. `--json` carries
|
|
72
|
+
`onUsagePricing` and leaves out the cost fields. The plan comes from the
|
|
73
|
+
server; when an older server does not send it, the command uses the billing
|
|
74
|
+
summary, and it shows no cost when neither says.
|
|
75
|
+
- `hq library add` now reaches the company vault for members in `shared` or `custom` sync mode. When the library folder is outside the membership's sync scope, the command pins it the same way `hq files get` does, so the next sync uploads the new placeholders and teammates and cloud search can find them. `all` mode and folders already covered by a grant or pin are left alone. If the sync scope cannot be read or the pin cannot be written, the command prints a warning with the exact `hq files get <folder>/ --company <co>` command to run. `--json` output reports this as `syncScope`.
|
|
76
|
+
- `hq library add --to <folder>` no longer pins the whole target folder for `shared` or `custom` sync. Outside the default `library/` folder it pins only the placeholders it wrote, so the rest of that folder stays out of sync. When the pin cannot be written or the sync scope cannot be read, the warning lists the exact paths to add to `.hq/pins.json` (the `hq files get library/` command is still printed for the default folder).
|
|
77
|
+
- Windows cold-install polish. The first `hq` command adds the npm folder that holds `hq.cmd` to the user PATH (HKCU only), idempotently, and broadcasts the environment change. It never edits the machine PATH. `hq doctor` still prints the exact PowerShell command when that folder is missing. npm install no longer needs a package postinstall for the mesh daemon: `hq mesh daemon install --if-stale` runs once on the first real command for that CLI version (the postinstall now only pins the native hook engine), and better-sqlite3 loads from its prebuilt binary or fails with `npm install -g @indigoai-us/hq-cli --allow-scripts=better-sqlite3`. On a Windows console that is not UTF-8, hq prints ASCII instead of a garbled em dash. `hq invite --help` and other unknown commands print `unknown command` plus a nested did-you-mean and exit non-zero, instead of the main help. When the hqd named pipe cannot be used, `hq doctor` says whether hqd is down, access was denied, the pipe is missing, or hqd did not answer. On Windows, `hq reindex` now finds the npm `codex.cmd` shim on PATH and runs it through cmd.exe, so Codex hook trust no longer fails with `spawn codex ENOENT`. When Codex is missing, reindex names it and says how to fix it. Any hook-trust failure now says that runtime will not run HQ hooks until trust succeeds and to rerun `hq reindex`. The SessionStart vault-access refresh (`hq core refresh-vault-access`) exits right away when nobody is signed in to HQ. Each child `hq` call it makes has a 30-second timeout (`HQ_VAULT_ACCESS_TIMEOUT_MS` changes it) and runs with `HQ_NO_BROWSER_LOGIN=1`, so a signed-out child fails fast instead of waiting on a browser login.
|
|
78
|
+
- Register the pinned native hook launcher behind the default-off hook-engine-launcher flag, with Claude exec form, Codex commandWindows, and reindex rollback to bash. Project hook files are converted in place and restored exactly, and a registration file that cannot be read no longer stops the others or their Codex trust. Codex hooks are only trusted after their file was written and verified.
|
|
79
|
+
|
|
5
80
|
## [5.345.148] — 2026-10-19
|
|
6
81
|
|
|
7
82
|
- The `hq lanes` free-memory gate (`throttle.min_available_mem_mb`) now reads the same values as macOS `memory_pressure`: the system-wide free percentage and the pressure level. A Mac that `memory_pressure` reports as normal with enough free memory no longer holds new lanes. While the gate is set, new lanes wait at the warn or critical level. The old `vm_stat` reading, which leaves out purgeable and compressible memory, is used only when those values cannot be read. A memory hold is recorded as `memory_hold` in the throttle state and in `hq lanes admit` output, with the signal, the reading, the level and the threshold.
|
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@ npm install -g @indigoai-us/hq-cli
|
|
|
7
7
|
hq --help
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
+
On Windows, the first `hq` command adds the folder that holds `hq.cmd` to your user PATH (HKCU only, not the machine PATH). You do not need to approve npm install scripts for hq itself. If the local database cannot load better-sqlite3 because npm skipped its install script, HQ tries to download the prebuilt binary. If that fails, the error names `npm install -g @indigoai-us/hq-cli --allow-scripts=better-sqlite3`.
|
|
11
|
+
|
|
10
12
|
## Marketplace package verification
|
|
11
13
|
|
|
12
14
|
Marketplace packages must include an Ed25519 signature made with a platform
|
|
@@ -2039,7 +2039,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2039
2039
|
readonly subcommands: readonly [];
|
|
2040
2040
|
}, {
|
|
2041
2041
|
readonly name: "share";
|
|
2042
|
-
readonly description: "Share a secret with an email address, group, or the entire company (@all)";
|
|
2042
|
+
readonly description: "Share a secret with an email address, group, company Outpost (out_…), or the entire company (@all)";
|
|
2043
2043
|
readonly aliases: readonly [];
|
|
2044
2044
|
readonly hidden: false;
|
|
2045
2045
|
readonly helpOption: true;
|
|
@@ -2054,7 +2054,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2054
2054
|
}];
|
|
2055
2055
|
readonly options: readonly [{
|
|
2056
2056
|
readonly flags: "--with <principal>";
|
|
2057
|
-
readonly description: "Email address, group id, or @all (entire company) to share with";
|
|
2057
|
+
readonly description: "Email address, group id, out_ Outpost id, or @all (entire company) to share with";
|
|
2058
2058
|
readonly hidden: false;
|
|
2059
2059
|
}, {
|
|
2060
2060
|
readonly flags: "--permission <level>";
|
|
@@ -2079,7 +2079,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2079
2079
|
}];
|
|
2080
2080
|
readonly options: readonly [{
|
|
2081
2081
|
readonly flags: "--from <principal>";
|
|
2082
|
-
readonly description: "Email address, group id, or @all (entire company) to remove";
|
|
2082
|
+
readonly description: "Email address, group id, out_ Outpost id, or @all (entire company) to remove";
|
|
2083
2083
|
readonly hidden: false;
|
|
2084
2084
|
}];
|
|
2085
2085
|
readonly subcommands: readonly [];
|
|
@@ -2555,7 +2555,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2555
2555
|
readonly subcommands: readonly [];
|
|
2556
2556
|
}, {
|
|
2557
2557
|
readonly name: "add";
|
|
2558
|
-
readonly description: "Add a person or
|
|
2558
|
+
readonly description: "Add a person, agent, or company Outpost to a group (principal: email, personUid, agentUid, or out_ Outpost id)";
|
|
2559
2559
|
readonly aliases: readonly [];
|
|
2560
2560
|
readonly hidden: false;
|
|
2561
2561
|
readonly helpOption: true;
|
|
@@ -2577,7 +2577,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2577
2577
|
readonly subcommands: readonly [];
|
|
2578
2578
|
}, {
|
|
2579
2579
|
readonly name: "remove";
|
|
2580
|
-
readonly description: "Remove a person or
|
|
2580
|
+
readonly description: "Remove a person, agent, or company Outpost from a group (principal: email, personUid, agentUid, or out_ Outpost id)";
|
|
2581
2581
|
readonly aliases: readonly [];
|
|
2582
2582
|
readonly hidden: false;
|
|
2583
2583
|
readonly helpOption: true;
|
|
@@ -3125,20 +3125,20 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3125
3125
|
}];
|
|
3126
3126
|
}, {
|
|
3127
3127
|
readonly name: "access";
|
|
3128
|
-
readonly description: "Tell whether a vault file exists and whether you can read it. Never a bare not-found. Exit codes: 0 local/not-synced, 2 never-existed, 3 no-access, 4 ambiguous.";
|
|
3128
|
+
readonly description: "Tell whether a vault file exists and whether you can read it. Never a bare not-found. Takes one or more paths or queries. Exit codes: 0 local/not-synced, 2 never-existed, 3 no-access, 4 ambiguous.";
|
|
3129
3129
|
readonly aliases: readonly [];
|
|
3130
3130
|
readonly hidden: false;
|
|
3131
3131
|
readonly helpOption: true;
|
|
3132
3132
|
readonly helpCommand: false;
|
|
3133
|
-
readonly usage: "[options]
|
|
3133
|
+
readonly usage: "[options] [vault-path...]";
|
|
3134
3134
|
readonly helpText: readonly [{
|
|
3135
3135
|
readonly position: "after";
|
|
3136
|
-
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";
|
|
3136
|
+
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";
|
|
3137
3137
|
}];
|
|
3138
3138
|
readonly arguments: readonly [{
|
|
3139
|
-
readonly name: "path
|
|
3140
|
-
readonly required:
|
|
3141
|
-
readonly variadic:
|
|
3139
|
+
readonly name: "vault-path";
|
|
3140
|
+
readonly required: false;
|
|
3141
|
+
readonly variadic: true;
|
|
3142
3142
|
readonly description: "";
|
|
3143
3143
|
}];
|
|
3144
3144
|
readonly options: readonly [{
|
|
@@ -3151,7 +3151,11 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
3151
3151
|
readonly hidden: false;
|
|
3152
3152
|
}, {
|
|
3153
3153
|
readonly flags: "--json";
|
|
3154
|
-
readonly description: "Print a single JSON object";
|
|
3154
|
+
readonly description: "Print a single JSON object (an array for several paths)";
|
|
3155
|
+
readonly hidden: false;
|
|
3156
|
+
}, {
|
|
3157
|
+
readonly flags: "--stdin";
|
|
3158
|
+
readonly description: "Read more paths from stdin, one per line";
|
|
3155
3159
|
readonly hidden: false;
|
|
3156
3160
|
}, {
|
|
3157
3161
|
readonly flags: "--no-fix";
|
|
@@ -4026,7 +4030,35 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
4026
4030
|
readonly usage: "[options]";
|
|
4027
4031
|
readonly helpText: readonly [];
|
|
4028
4032
|
readonly arguments: readonly [];
|
|
4029
|
-
readonly options: readonly [
|
|
4033
|
+
readonly options: readonly [{
|
|
4034
|
+
readonly flags: "--json";
|
|
4035
|
+
readonly description: "Output the channel array as JSON, including activity fields.";
|
|
4036
|
+
readonly hidden: false;
|
|
4037
|
+
}, {
|
|
4038
|
+
readonly flags: "--active-since <when>";
|
|
4039
|
+
readonly description: "Only channels with activity at or after an ISO time or a duration back from now (30m, 2h, 1d); newest first.";
|
|
4040
|
+
readonly hidden: false;
|
|
4041
|
+
}, {
|
|
4042
|
+
readonly flags: "--sort <order>";
|
|
4043
|
+
readonly description: "'activity' lists the most recently active channels first.";
|
|
4044
|
+
readonly hidden: false;
|
|
4045
|
+
}];
|
|
4046
|
+
readonly subcommands: readonly [];
|
|
4047
|
+
}, {
|
|
4048
|
+
readonly name: "changes";
|
|
4049
|
+
readonly description: "Print the channels that changed since a feed cursor, as JSON (no cursor → full snapshot).";
|
|
4050
|
+
readonly aliases: readonly [];
|
|
4051
|
+
readonly hidden: false;
|
|
4052
|
+
readonly helpOption: true;
|
|
4053
|
+
readonly helpCommand: false;
|
|
4054
|
+
readonly usage: "[options]";
|
|
4055
|
+
readonly helpText: readonly [];
|
|
4056
|
+
readonly arguments: readonly [];
|
|
4057
|
+
readonly options: readonly [{
|
|
4058
|
+
readonly flags: "--cursor <token>";
|
|
4059
|
+
readonly description: "Cursor from the previous `hq channels changes` response.";
|
|
4060
|
+
readonly hidden: false;
|
|
4061
|
+
}];
|
|
4030
4062
|
readonly subcommands: readonly [];
|
|
4031
4063
|
}, {
|
|
4032
4064
|
readonly name: "members";
|
|
@@ -7938,6 +7970,18 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
7938
7970
|
readonly flags: "--id <outpostId>";
|
|
7939
7971
|
readonly description: "Outpost id (defaults to your primary box)";
|
|
7940
7972
|
readonly hidden: false;
|
|
7973
|
+
}, {
|
|
7974
|
+
readonly flags: "--company <slug>";
|
|
7975
|
+
readonly description: "Destroy one of the company's Outposts (owner or admin)";
|
|
7976
|
+
readonly hidden: false;
|
|
7977
|
+
}, {
|
|
7978
|
+
readonly flags: "--outpost <name|id>";
|
|
7979
|
+
readonly description: "Which company Outpost, when the company has more than one";
|
|
7980
|
+
readonly hidden: false;
|
|
7981
|
+
}, {
|
|
7982
|
+
readonly flags: "--json";
|
|
7983
|
+
readonly description: "With --company and --yes: print one result object on stdout";
|
|
7984
|
+
readonly hidden: false;
|
|
7941
7985
|
}, {
|
|
7942
7986
|
readonly flags: "--yes";
|
|
7943
7987
|
readonly description: "Confirm the irreversible teardown (required)";
|
|
@@ -8404,6 +8448,10 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
8404
8448
|
readonly flags: "--repair";
|
|
8405
8449
|
readonly description: "Repair the pinned copy after closing running hook processes";
|
|
8406
8450
|
readonly hidden: false;
|
|
8451
|
+
}, {
|
|
8452
|
+
readonly flags: "--for-registration";
|
|
8453
|
+
readonly description: "Print a path only when the offline launcher flag is enabled";
|
|
8454
|
+
readonly hidden: false;
|
|
8407
8455
|
}];
|
|
8408
8456
|
readonly subcommands: readonly [];
|
|
8409
8457
|
}, {
|
|
@@ -14331,7 +14379,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
14331
14379
|
readonly hidden: false;
|
|
14332
14380
|
}, {
|
|
14333
14381
|
readonly flags: "--runner <kind>";
|
|
14334
|
-
readonly description: "process (default) | subagent: register a lane an in-session Claude
|
|
14382
|
+
readonly description: "process (default) | subagent: register a lane an in-session subagent runs (Claude Agent, Codex spawn_agent); skips admission and starts no process";
|
|
14335
14383
|
readonly hidden: false;
|
|
14336
14384
|
}, {
|
|
14337
14385
|
readonly flags: "--remote-control";
|
|
@@ -2446,7 +2446,7 @@ export const COMMAND_CATALOG = [
|
|
|
2446
2446
|
},
|
|
2447
2447
|
{
|
|
2448
2448
|
"name": "share",
|
|
2449
|
-
"description": "Share a secret with an email address, group, or the entire company (@all)",
|
|
2449
|
+
"description": "Share a secret with an email address, group, company Outpost (out_…), or the entire company (@all)",
|
|
2450
2450
|
"aliases": [],
|
|
2451
2451
|
"hidden": false,
|
|
2452
2452
|
"helpOption": true,
|
|
@@ -2464,7 +2464,7 @@ export const COMMAND_CATALOG = [
|
|
|
2464
2464
|
"options": [
|
|
2465
2465
|
{
|
|
2466
2466
|
"flags": "--with <principal>",
|
|
2467
|
-
"description": "Email address, group id, or @all (entire company) to share with",
|
|
2467
|
+
"description": "Email address, group id, out_ Outpost id, or @all (entire company) to share with",
|
|
2468
2468
|
"hidden": false
|
|
2469
2469
|
},
|
|
2470
2470
|
{
|
|
@@ -2495,7 +2495,7 @@ export const COMMAND_CATALOG = [
|
|
|
2495
2495
|
"options": [
|
|
2496
2496
|
{
|
|
2497
2497
|
"flags": "--from <principal>",
|
|
2498
|
-
"description": "Email address, group id, or @all (entire company) to remove",
|
|
2498
|
+
"description": "Email address, group id, out_ Outpost id, or @all (entire company) to remove",
|
|
2499
2499
|
"hidden": false
|
|
2500
2500
|
}
|
|
2501
2501
|
],
|
|
@@ -3071,7 +3071,7 @@ export const COMMAND_CATALOG = [
|
|
|
3071
3071
|
},
|
|
3072
3072
|
{
|
|
3073
3073
|
"name": "add",
|
|
3074
|
-
"description": "Add a person or
|
|
3074
|
+
"description": "Add a person, agent, or company Outpost to a group (principal: email, personUid, agentUid, or out_ Outpost id)",
|
|
3075
3075
|
"aliases": [],
|
|
3076
3076
|
"hidden": false,
|
|
3077
3077
|
"helpOption": true,
|
|
@@ -3097,7 +3097,7 @@ export const COMMAND_CATALOG = [
|
|
|
3097
3097
|
},
|
|
3098
3098
|
{
|
|
3099
3099
|
"name": "remove",
|
|
3100
|
-
"description": "Remove a person or
|
|
3100
|
+
"description": "Remove a person, agent, or company Outpost from a group (principal: email, personUid, agentUid, or out_ Outpost id)",
|
|
3101
3101
|
"aliases": [],
|
|
3102
3102
|
"hidden": false,
|
|
3103
3103
|
"helpOption": true,
|
|
@@ -3766,23 +3766,23 @@ export const COMMAND_CATALOG = [
|
|
|
3766
3766
|
},
|
|
3767
3767
|
{
|
|
3768
3768
|
"name": "access",
|
|
3769
|
-
"description": "Tell whether a vault file exists and whether you can read it. Never a bare not-found. Exit codes: 0 local/not-synced, 2 never-existed, 3 no-access, 4 ambiguous.",
|
|
3769
|
+
"description": "Tell whether a vault file exists and whether you can read it. Never a bare not-found. Takes one or more paths or queries. Exit codes: 0 local/not-synced, 2 never-existed, 3 no-access, 4 ambiguous.",
|
|
3770
3770
|
"aliases": [],
|
|
3771
3771
|
"hidden": false,
|
|
3772
3772
|
"helpOption": true,
|
|
3773
3773
|
"helpCommand": false,
|
|
3774
|
-
"usage": "[options]
|
|
3774
|
+
"usage": "[options] [vault-path...]",
|
|
3775
3775
|
"helpText": [
|
|
3776
3776
|
{
|
|
3777
3777
|
"position": "after",
|
|
3778
|
-
"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"
|
|
3778
|
+
"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"
|
|
3779
3779
|
}
|
|
3780
3780
|
],
|
|
3781
3781
|
"arguments": [
|
|
3782
3782
|
{
|
|
3783
|
-
"name": "path
|
|
3784
|
-
"required":
|
|
3785
|
-
"variadic":
|
|
3783
|
+
"name": "vault-path",
|
|
3784
|
+
"required": false,
|
|
3785
|
+
"variadic": true,
|
|
3786
3786
|
"description": ""
|
|
3787
3787
|
}
|
|
3788
3788
|
],
|
|
@@ -3799,7 +3799,12 @@ export const COMMAND_CATALOG = [
|
|
|
3799
3799
|
},
|
|
3800
3800
|
{
|
|
3801
3801
|
"flags": "--json",
|
|
3802
|
-
"description": "Print a single JSON object",
|
|
3802
|
+
"description": "Print a single JSON object (an array for several paths)",
|
|
3803
|
+
"hidden": false
|
|
3804
|
+
},
|
|
3805
|
+
{
|
|
3806
|
+
"flags": "--stdin",
|
|
3807
|
+
"description": "Read more paths from stdin, one per line",
|
|
3803
3808
|
"hidden": false
|
|
3804
3809
|
},
|
|
3805
3810
|
{
|
|
@@ -4872,7 +4877,42 @@ export const COMMAND_CATALOG = [
|
|
|
4872
4877
|
"usage": "[options]",
|
|
4873
4878
|
"helpText": [],
|
|
4874
4879
|
"arguments": [],
|
|
4875
|
-
"options": [
|
|
4880
|
+
"options": [
|
|
4881
|
+
{
|
|
4882
|
+
"flags": "--json",
|
|
4883
|
+
"description": "Output the channel array as JSON, including activity fields.",
|
|
4884
|
+
"hidden": false
|
|
4885
|
+
},
|
|
4886
|
+
{
|
|
4887
|
+
"flags": "--active-since <when>",
|
|
4888
|
+
"description": "Only channels with activity at or after an ISO time or a duration back from now (30m, 2h, 1d); newest first.",
|
|
4889
|
+
"hidden": false
|
|
4890
|
+
},
|
|
4891
|
+
{
|
|
4892
|
+
"flags": "--sort <order>",
|
|
4893
|
+
"description": "'activity' lists the most recently active channels first.",
|
|
4894
|
+
"hidden": false
|
|
4895
|
+
}
|
|
4896
|
+
],
|
|
4897
|
+
"subcommands": []
|
|
4898
|
+
},
|
|
4899
|
+
{
|
|
4900
|
+
"name": "changes",
|
|
4901
|
+
"description": "Print the channels that changed since a feed cursor, as JSON (no cursor → full snapshot).",
|
|
4902
|
+
"aliases": [],
|
|
4903
|
+
"hidden": false,
|
|
4904
|
+
"helpOption": true,
|
|
4905
|
+
"helpCommand": false,
|
|
4906
|
+
"usage": "[options]",
|
|
4907
|
+
"helpText": [],
|
|
4908
|
+
"arguments": [],
|
|
4909
|
+
"options": [
|
|
4910
|
+
{
|
|
4911
|
+
"flags": "--cursor <token>",
|
|
4912
|
+
"description": "Cursor from the previous `hq channels changes` response.",
|
|
4913
|
+
"hidden": false
|
|
4914
|
+
}
|
|
4915
|
+
],
|
|
4876
4916
|
"subcommands": []
|
|
4877
4917
|
},
|
|
4878
4918
|
{
|
|
@@ -9674,6 +9714,21 @@ export const COMMAND_CATALOG = [
|
|
|
9674
9714
|
"description": "Outpost id (defaults to your primary box)",
|
|
9675
9715
|
"hidden": false
|
|
9676
9716
|
},
|
|
9717
|
+
{
|
|
9718
|
+
"flags": "--company <slug>",
|
|
9719
|
+
"description": "Destroy one of the company's Outposts (owner or admin)",
|
|
9720
|
+
"hidden": false
|
|
9721
|
+
},
|
|
9722
|
+
{
|
|
9723
|
+
"flags": "--outpost <name|id>",
|
|
9724
|
+
"description": "Which company Outpost, when the company has more than one",
|
|
9725
|
+
"hidden": false
|
|
9726
|
+
},
|
|
9727
|
+
{
|
|
9728
|
+
"flags": "--json",
|
|
9729
|
+
"description": "With --company and --yes: print one result object on stdout",
|
|
9730
|
+
"hidden": false
|
|
9731
|
+
},
|
|
9677
9732
|
{
|
|
9678
9733
|
"flags": "--yes",
|
|
9679
9734
|
"description": "Confirm the irreversible teardown (required)",
|
|
@@ -10241,6 +10296,11 @@ export const COMMAND_CATALOG = [
|
|
|
10241
10296
|
"flags": "--repair",
|
|
10242
10297
|
"description": "Repair the pinned copy after closing running hook processes",
|
|
10243
10298
|
"hidden": false
|
|
10299
|
+
},
|
|
10300
|
+
{
|
|
10301
|
+
"flags": "--for-registration",
|
|
10302
|
+
"description": "Print a path only when the offline launcher flag is enabled",
|
|
10303
|
+
"hidden": false
|
|
10244
10304
|
}
|
|
10245
10305
|
],
|
|
10246
10306
|
"subcommands": []
|
|
@@ -17427,7 +17487,7 @@ export const COMMAND_CATALOG = [
|
|
|
17427
17487
|
},
|
|
17428
17488
|
{
|
|
17429
17489
|
"flags": "--runner <kind>",
|
|
17430
|
-
"description": "process (default) | subagent: register a lane an in-session Claude
|
|
17490
|
+
"description": "process (default) | subagent: register a lane an in-session subagent runs (Claude Agent, Codex spawn_agent); skips admission and starts no process",
|
|
17431
17491
|
"hidden": false
|
|
17432
17492
|
},
|
|
17433
17493
|
{
|
package/dist/command-help.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { CLI_VERSION } from "./cli-version.js";
|
|
3
3
|
import { registerCommandCatalog } from "./lazy-commands.js";
|
|
4
|
+
import { argvWithoutHelpOnUnknownCommand } from "./unknown-command.js";
|
|
4
5
|
export async function runCommandHelp(argv) {
|
|
5
6
|
const program = new Command()
|
|
6
7
|
.name("hq")
|
|
@@ -10,6 +11,6 @@ export async function runCommandHelp(argv) {
|
|
|
10
11
|
registerCommandCatalog(program);
|
|
11
12
|
const { hideStorageInCatalog } = await import("./lib/storage-feature-flag.js");
|
|
12
13
|
hideStorageInCatalog(program);
|
|
13
|
-
await program.parseAsync([...argv]);
|
|
14
|
+
await program.parseAsync(argvWithoutHelpOnUnknownCommand([...argv]));
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=command-help.js.map
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export declare const SECRET_NAME_PATTERN: RegExp;
|
|
2
2
|
export declare const GROUP_ID_PATTERN: RegExp;
|
|
3
3
|
export declare const EMAIL_PATTERN: RegExp;
|
|
4
|
+
/**
|
|
5
|
+
* A company Outpost identity: `out_` plus a 26-character Crockford ULID, the
|
|
6
|
+
* same shape hq-pro accepts as an Outpost grantee. It rides the `person`
|
|
7
|
+
* grantee slot on the wire.
|
|
8
|
+
*/
|
|
9
|
+
export declare const OUTPOST_UID_PATTERN: RegExp;
|
|
4
10
|
/**
|
|
5
11
|
* Keep an ACL pattern exactly as the caller supplied it.
|
|
6
12
|
*
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export const SECRET_NAME_PATTERN = /^[A-Z][A-Z0-9_]*(?:\/[A-Z][A-Z0-9_]+)*$/;
|
|
2
2
|
export const GROUP_ID_PATTERN = /^grp_[A-Za-z0-9_-]+$/;
|
|
3
3
|
export const EMAIL_PATTERN = /^[^\s]+@[^\s]+$/;
|
|
4
|
+
/**
|
|
5
|
+
* A company Outpost identity: `out_` plus a 26-character Crockford ULID, the
|
|
6
|
+
* same shape hq-pro accepts as an Outpost grantee. It rides the `person`
|
|
7
|
+
* grantee slot on the wire.
|
|
8
|
+
*/
|
|
9
|
+
export const OUTPOST_UID_PATTERN = /^out_[0-9A-HJKMNP-TV-Z]{26}$/;
|
|
4
10
|
/**
|
|
5
11
|
* Keep an ACL pattern exactly as the caller supplied it.
|
|
6
12
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `hq access <path-or-query
|
|
2
|
+
* `hq access <path-or-query...>` — existence + ACL probe with a self-healing
|
|
3
3
|
* ladder: resolve, list, probe ACL, then (with --fix) download / pin / repair
|
|
4
4
|
* sync or request access from the grantor.
|
|
5
5
|
*
|
|
@@ -74,10 +74,19 @@ export interface AccessDeps {
|
|
|
74
74
|
fetchAclTree: (prefix: string) => Promise<AccessAclTree | null>;
|
|
75
75
|
/** Active members (owner/admin/member/guest) — used for grantor resolution. */
|
|
76
76
|
listMembers: () => Promise<AccessMember[]>;
|
|
77
|
+
/** The caller, or a loader for it. A loader runs only when a request is sent. */
|
|
77
78
|
requester: {
|
|
78
79
|
email: string;
|
|
79
80
|
name?: string;
|
|
80
|
-
}
|
|
81
|
+
} | (() => Promise<{
|
|
82
|
+
email: string;
|
|
83
|
+
name?: string;
|
|
84
|
+
}>);
|
|
85
|
+
/**
|
|
86
|
+
* Batch POST acl/resolve: permission per company-relative target (null when
|
|
87
|
+
* the resolver grants nothing). Used by batch mode only.
|
|
88
|
+
*/
|
|
89
|
+
resolveAcl?: (targets: string[]) => Promise<Map<string, string | null>>;
|
|
81
90
|
dm?: {
|
|
82
91
|
send(msg: {
|
|
83
92
|
recipient: string;
|
|
@@ -150,7 +159,34 @@ export declare function outcomeExitCode(outcome: AccessOutcome): 0 | 2 | 3 | 4;
|
|
|
150
159
|
export declare function formatAccessOutcome(result: RunAccessResult): string;
|
|
151
160
|
export declare function resolveGrantor(tree: AccessAclTree | null, members: AccessMember[]): AccessGrantor | null;
|
|
152
161
|
export declare function runAccess(input: RunAccessInput): Promise<RunAccessResult>;
|
|
162
|
+
export interface RunAccessBatchInput {
|
|
163
|
+
targets: string[];
|
|
164
|
+
fix: boolean;
|
|
165
|
+
json: boolean;
|
|
166
|
+
yes?: boolean;
|
|
167
|
+
deps: AccessDeps;
|
|
168
|
+
/** Parallel existence checks. Default 4. */
|
|
169
|
+
concurrency?: number;
|
|
170
|
+
}
|
|
171
|
+
export interface RunAccessBatchResult {
|
|
172
|
+
results: Array<{
|
|
173
|
+
target: string;
|
|
174
|
+
result: RunAccessResult;
|
|
175
|
+
}>;
|
|
176
|
+
/** Highest exit code across the targets. */
|
|
177
|
+
exitCode: 0 | 2 | 3 | 4;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Several targets in one company: one vend, one bucket lookup, and one
|
|
181
|
+
* acl/resolve call for all of them, then bounded-concurrency existence
|
|
182
|
+
* checks. Requests (DM rung) run one at a time in input order so prompts and
|
|
183
|
+
* grantor lines never interleave. Several fuzzy hits are reported as
|
|
184
|
+
* ambiguous; the interactive picker is single-path only.
|
|
185
|
+
*/
|
|
186
|
+
export declare function runAccessBatch(input: RunAccessBatchInput): Promise<RunAccessBatchResult>;
|
|
153
187
|
export declare function registerAccessCommand(program: Command): void;
|
|
188
|
+
/** One target per non-blank line; surrounding whitespace is ignored. */
|
|
189
|
+
export declare function parseTargetLines(text: string): string[];
|
|
154
190
|
/**
|
|
155
191
|
* Resolve the company `hq access` runs against: explicit `company` (the
|
|
156
192
|
* ladder forwards the slug stamped on a 403), else the slug anchored in the
|
|
@@ -173,4 +209,11 @@ export declare function runAccessForPath(path: string, opts?: {
|
|
|
173
209
|
yes?: boolean;
|
|
174
210
|
fix?: boolean;
|
|
175
211
|
}): Promise<RunAccessResult>;
|
|
212
|
+
export declare function runAccessForPaths(paths: string[], opts?: {
|
|
213
|
+
company?: string;
|
|
214
|
+
hqRoot?: string;
|
|
215
|
+
json?: boolean;
|
|
216
|
+
yes?: boolean;
|
|
217
|
+
fix?: boolean;
|
|
218
|
+
}): Promise<RunAccessBatchResult>;
|
|
176
219
|
//# sourceMappingURL=access.d.ts.map
|