@indigoai-us/hq-cli 5.345.151 → 5.345.153

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/dist/bin/hq-auth-refresh.d.ts +4 -0
  3. package/dist/bin/hq-auth-refresh.js +9 -1
  4. package/dist/command-catalog.generated.d.ts +188 -3
  5. package/dist/command-catalog.generated.js +230 -3
  6. package/dist/command-registration-plan.d.ts +6 -0
  7. package/dist/command-registration-plan.js +1 -0
  8. package/dist/commands/agent-enroll.d.ts +12 -0
  9. package/dist/commands/agent-enroll.js +37 -4
  10. package/dist/commands/core-policy.js +4 -4
  11. package/dist/commands/core-session-project-native.js +19 -4
  12. package/dist/commands/decide.d.ts +13 -0
  13. package/dist/commands/decide.js +74 -0
  14. package/dist/commands/files.js +23 -7
  15. package/dist/commands/integrations-connect.js +24 -1
  16. package/dist/commands/integrations-core.d.ts +14 -0
  17. package/dist/commands/integrations-core.js +19 -1
  18. package/dist/commands/integrations-import.js +22 -1
  19. package/dist/commands/integrations.js +43 -2
  20. package/dist/commands/lanes-message.js +4 -11
  21. package/dist/commands/lanes-questions.js +3 -0
  22. package/dist/commands/lanes-resume.js +4 -11
  23. package/dist/commands/lanes-stories.js +3 -0
  24. package/dist/commands/rescue.d.ts +7 -0
  25. package/dist/commands/rescue.js +22 -13
  26. package/dist/commands/run.js +14 -5
  27. package/dist/commands/secrets.d.ts +13 -0
  28. package/dist/commands/secrets.js +51 -8
  29. package/dist/hq-cloud-sync-runner/bin/sync-runner.js +186 -186
  30. package/dist/hq-cloud-sync-runner/package.json +1 -1
  31. package/dist/lib/agent-kit/adopt-identity.d.ts +7 -1
  32. package/dist/lib/agent-kit/adopt-identity.js +18 -3
  33. package/dist/lib/agent-kit/services.d.ts +3 -1
  34. package/dist/lib/agent-kit/services.js +5 -1
  35. package/dist/lib/daemon/ops/policy.d.ts +9 -1
  36. package/dist/lib/daemon/ops/policy.js +37 -2
  37. package/dist/lib/decisions/client.d.ts +67 -0
  38. package/dist/lib/decisions/client.js +120 -0
  39. package/dist/lib/decisions/expiry.d.ts +2 -0
  40. package/dist/lib/decisions/expiry.js +12 -0
  41. package/dist/lib/decisions/fixtures/us001.d.ts +137 -0
  42. package/dist/lib/decisions/fixtures/us001.js +21 -0
  43. package/dist/lib/decisions/import-lanes.d.ts +16 -0
  44. package/dist/lib/decisions/import-lanes.js +152 -0
  45. package/dist/lib/decisions/principal.d.ts +11 -0
  46. package/dist/lib/decisions/principal.js +52 -0
  47. package/dist/lib/doctor/checks/claude-wiring.d.ts +2 -2
  48. package/dist/lib/doctor/checks/claude-wiring.js +21 -10
  49. package/dist/lib/doctor/checks/work-context.js +7 -2
  50. package/dist/lib/doctor/fix/apply.d.ts +3 -2
  51. package/dist/lib/doctor/fix/apply.js +19 -15
  52. package/dist/lib/doctor/fix/refresh-sync-progress.d.ts +14 -0
  53. package/dist/lib/doctor/fix/refresh-sync-progress.js +30 -2
  54. package/dist/lib/doctor/fix/remediation.js +4 -2
  55. package/dist/lib/doctor/hook-gate-profiles.d.ts +19 -0
  56. package/dist/lib/doctor/hook-gate-profiles.js +34 -0
  57. package/dist/lib/doctor/types.d.ts +5 -0
  58. package/dist/lib/install/provider-wrappers.js +5 -1
  59. package/dist/lib/lanes/autopilot.js +4 -1
  60. package/dist/lib/lanes/imported-question.d.ts +5 -0
  61. package/dist/lib/lanes/imported-question.js +17 -0
  62. package/dist/lib/lanes/questions.d.ts +0 -5
  63. package/dist/lib/lanes/questions.js +2 -0
  64. package/dist/lib/lanes/reconcile.js +21 -10
  65. package/dist/lib/lanes/store.d.ts +0 -8
  66. package/dist/lib/lanes/store.js +2 -1
  67. package/dist/lib/lanes/stories.d.ts +15 -0
  68. package/dist/lib/lanes/stories.js +25 -0
  69. package/dist/lib/mesh/client.d.ts +8 -0
  70. package/dist/lib/mesh/client.js +44 -3
  71. package/dist/lib/mesh/denial-codes.js +1 -1
  72. package/dist/lib/mesh/live/daemon/run.d.ts +9 -1
  73. package/dist/lib/mesh/live/daemon/run.js +30 -1
  74. package/dist/lib/mesh/live/flush.d.ts +7 -0
  75. package/dist/lib/mesh/live/flush.js +53 -10
  76. package/dist/lib/registry/registry.js +6 -0
  77. package/dist/lib/scan-packages/index.js +7 -3
  78. package/dist/lib/work-context/organize.d.ts +2 -0
  79. package/dist/lib/work-context/organize.js +22 -4
  80. package/dist/lib/workers-registry/index.d.ts +12 -1
  81. package/dist/lib/workers-registry/index.js +39 -1
  82. package/dist/utils/cognito-session.d.ts +4 -1
  83. package/dist/utils/cognito-session.js +11 -1
  84. package/dist/utils/hook-trust.d.ts +27 -0
  85. package/dist/utils/hook-trust.js +150 -8
  86. package/dist/utils/shipped-codex-hooks.d.ts +17 -0
  87. package/dist/utils/shipped-codex-hooks.js +86 -0
  88. package/package.json +8 -8
package/CHANGELOG.md CHANGED
@@ -2,6 +2,135 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.345.153] — 2026-10-21
6
+ - `hq-auth-refresh --min-validity-seconds N` now applies to person sessions,
7
+ not only machine tokens: a person session with less than N seconds left
8
+ (120 to 1800, default 120) is renewed. New `--force` renews a person session
9
+ even while it is still valid. The deploy identity resolver can use these to
10
+ stop returning `login_required` while `hq whoami` shows a valid session.
11
+ - `hq doctor --fix` now rotates stale sync-manifest uploads across runs. Each
12
+ run starts after the last company it tried, so a machine with many stale
13
+ company manifests reaches all of them, and a company whose upload keeps
14
+ failing no longer blocks the rest. When stale journals and stale manifests
15
+ are both pending, one of the two network repair slots goes to a manifest
16
+ upload. The run still makes at most two network repairs in total.
17
+ - Work Mesh sessions held because their company was missing now drain once
18
+ your membership confirms the company. Before this, after
19
+ `hq mesh daemon install` those sessions kept piling up in the held and
20
+ dead-letter queues when the session only knew the company's slug. The daemon
21
+ now looks the slug up through your membership, and retries the held backlog
22
+ every 15 minutes instead of only at start. Sessions whose company cannot be
23
+ confirmed stay held.
24
+ - Each agent kit now keeps its machine sign-in tokens in its own folder
25
+ (`token-state/` inside the agent's directory) instead of the shared
26
+ `~/.hq/work-mesh/daemon/cognito-tokens.json`. Before this, an agent running on
27
+ your computer could write to that shared file and your own `hq` commands,
28
+ such as a deploy, would then act as a machine and fail with
29
+ `login_required`. Kits installed before this release pick up the new folder
30
+ without being reinstalled. A token file an agent already wrote to the shared
31
+ location is not removed by this change.
32
+ - When a company's work registry is turned off, `hq doctor` no longer reports
33
+ the held work sessions as a login problem (`AUTH_DENIED`). It now says the
34
+ work registry is disabled and gives the setting a company admin can turn on:
35
+ `hq company --company <slug> settings set --work-registry-enabled true`.
36
+ Sessions held for this reason are re-sent by `hq mesh context requeue` once
37
+ the registry is on.
38
+ - `hq agent enroll` on a computer that already has an enrolled bot now tells
39
+ you to add the new bot with `--name <bot>`, so it gets its own agent
40
+ identity. It no longer suggests `--replace`, which overwrites the first
41
+ bot's credentials. When more than one bot is enrolled on the computer,
42
+ enroll prints the `HQ_AGENT_DIR` value the new bot must run with. Every bot,
43
+ including the first one's MCP server, needs its own `HQ_AGENT_DIR`, or it
44
+ acts as another bot.
45
+ - `hq doctor` no longer fails a hook just because it is left out of the
46
+ `minimal` hook profile on purpose. A hook must now be listed in the lowest
47
+ profile it appears in and every stricter one. Missing from the profile you are running
48
+ (`HQ_HOOK_PROFILE`, `standard` by default) is still a failure, because the
49
+ hook does not run; missing only from a profile you are not running is a
50
+ warning. A hook listed only in `strict` still fails under `standard`.
51
+ `hq doctor --fix` repairs both cases.
52
+ - `hq integrations approve` now prints the provider result when the gateway
53
+ runs the approved call in the background. Before, the command waited for the
54
+ queue row to report `resumed` and then printed only "Approved — the call
55
+ completed.", so paid results such as Apollo matches were lost. The CLI now
56
+ reads the stored result back from the queue row (the call does not run
57
+ again) and prints it; `--json` adds it as `result`. For a call that already
58
+ ran, running `hq integrations approve <queueId>` again returns its stored
59
+ result.
60
+ - `hq run` no longer refuses to start when varlock reports only warnings, such
61
+ as "Value is very short! Is it actually sensitive?" or a 2-character value
62
+ that is sensitive by default. Warnings are printed to stderr and the command
63
+ runs. Real errors still stop `hq run` with exit code 1.
64
+ - Added `hq decide ask|list|show|answer|talk|withdraw|import-lanes` for owner Queue decisions. Release 1 accepts asks from personal local bots and lets the personal local bot import option-style questions addressed to that owner. Imported questions become read-only in legacy lanes; advanced questions are skipped with counts. Ask resolves --company and accepts --expires (default 72h), matching the US-001 decisions service contract. Requires that service before use.
65
+ - Company members can now add apps with `hq integrations connect`, `catalog`,
66
+ `inspect`, `discover`, `import`, and `reconnect --connect`; guests are still
67
+ refused by the server. Removing and governing apps is unchanged.
68
+ - When a member tries to reconnect or replace an app someone else connected,
69
+ the CLI explains that an owner or admin has to reconnect it, instead of
70
+ printing the raw `INTEGRATION_RECONNECT_FORBIDDEN` refusal.
71
+ - `hq integrations connect <app>` on an app someone else connected now tells a
72
+ member to ask an owner or admin, rather than suggesting `reconnect` or
73
+ `--force`, which the server would refuse.
74
+ - `hq integrations import` skips a connector that someone else already
75
+ connected and keeps importing the rest.
76
+ - `hq lanes message --project <p>` and `hq lanes resume --project <p>` now
77
+ work on a lane that has no story. Before this, moving a no-story lane to
78
+ another project appended a stories entry with an empty story id, the lane
79
+ schema rejected it, and the whole write rolled back. The lane now moves to
80
+ the new project, keeps its no-story reason, and gains no story entry.
81
+ `hq lanes stories add` refuses an empty story id with `missing_story`.
82
+ - The unit suite now passes on a developer Mac with a temporary HOME. A setup file gives every test worker the canonical macOS temp directory (`/private/var/...`) and strips HQ, Claude Code and Codex session variables, so a run started from inside an HQ session behaves like CI. Local macOS runs use at most 4 workers unless `--maxWorkers` is passed. Tests no longer pick up Homebrew bash, `/opt/homebrew/bin`, an installed HQ.app, or BSD `stat` differences, and node stubs work when node's path contains a space. Every test worker also puts a stand-in `crontab` first on PATH, and a test fails if `crontab` would resolve to anything else, so no test can edit the real user crontab (a temp HOME does not isolate it). The agent-kit fallback install test now injects its own crontab runner. Linux-only tests (Linux login-home lanes accounts) and the clean-clone checks that need a case-sensitive, non-normalizing filesystem are skipped with a stated reason where they cannot run.
83
+ - The daemon policy index notices a policy file added or removed even when the file watcher misses the event, which macOS FSEvents can do right after a watcher starts. `list()` compares directory stamps taken at the last rebuild.
84
+ - An autopilot lock records the real time it was taken, not the injected clock value.
85
+ - The registry canonicalises directories with the native realpath on macOS, so `/var` and `/private/var` spellings of one directory map to the same key. A registry entry saved with letter case that differs from the disk may need re-registering.
86
+ - The provider wrapper's perl timeout fallback (used where `timeout` is not installed, such as macOS) no longer prints "Alarm clock" to the terminal. The exit status is still 142.
87
+ - `hq core policy` age report prints the awk error for the platform it ran on, and the differential corpus recorder maps both macOS spellings of `$HOME` to `<HOME>`.
88
+ - `hq mesh context organize` now lists fresh candidates when the session's pending decision has expired, instead of returning the same expired decision. Choosing an option or `--create-project` after that no longer fails with `DECISION_EXPIRED` or `DECISION_WINDOW_MISSING`.
89
+ - The published core E2E harness tears down reliably on macOS.
90
+ - Windows lock acquisition now waits out transient EPERM/EBUSY instead of failing early.
91
+ - Worker registry rebuild no longer walks into nested git checkouts. A folder below the scan root that holds a `.git` file (linked worktree) or `.git` folder (clone) is treated as a separate checkout: a `worker.yaml` directly inside it still registers, but nothing beneath it is read. `workspace/worktrees/`, `node_modules/`, and `.git/` folders are skipped wherever they appear. A company folder (`companies/<slug>`) or its `workers/` folder kept as its own repository still registers every worker. The worker-id clash check in `hq core scan-packages` uses the same rule.
92
+
93
+ ## [5.345.152] — 2026-10-20
94
+ - The bundled sync engine now uses hq-cloud 6.18.91. When a company Outpost
95
+ fails to start and the server has already cleaned it up,
96
+ `hq outposts provision --company <slug>` (and `create --company --name`)
97
+ stops right away and says nothing was left running, you were not charged,
98
+ and it is safe to run the same command again. `hq outposts status --company`
99
+ shows the same line, and `--json` adds `code: "failed_cleaned_up"` and
100
+ `retrySafe: true`. Other blocked reasons keep their existing text.
101
+ - CI: the "changelog entry" check sets up Node before it runs, so it no longer
102
+ fails with "node: command not found" on the self-hosted ARM runners. No change
103
+ to the `hq` command itself.
104
+ - `hq files share --with out_…` and `hq files unshare --with out_…` now accept
105
+ a company Outpost id, with read or write. `hq files acl` shows the grantee as
106
+ `Outpost (out_…)`; `--json` output is unchanged.
107
+ - `hq secrets share --with out_…` now refuses write or admin for a company
108
+ Outpost with "Company Outposts can only be given read access to a secret."
109
+ before anything is sent. Leaving out `--permission` for an Outpost gives it
110
+ read. A server refusal for the same reason shows the same message.
111
+ - `hq rescue` (and so `/update-hq`) now re-trusts HQ's own Codex hooks after a
112
+ successful rescue. Before this, an update that changed a hook command left
113
+ Codex holding the old trusted hash, so Codex skipped that hook until you ran
114
+ `hq reindex`. Rescue trusts a hook only when its entry in the HQ root's
115
+ `.codex/hooks.json` or `.codex/config.toml` matches the copy shipped in the
116
+ installed core release, which it reads from GitHub at the synced commit.
117
+ It reads that copy only from `indigoai-us/hq-core` or
118
+ `indigoai-us/hq-core-staging`; if `core/core.yaml` names any other repo
119
+ (for example after `hq rescue --source <fork>`), rescue trusts nothing.
120
+ Hooks you added to those files by hand, or shipped entries you edited, are
121
+ never trusted. User and managed hooks are left alone, and hooks that are
122
+ already trusted are not rewritten. Rescue does not re-enable a shipped hook
123
+ you disabled; it only refreshes that hook's trust (`hq reindex` still
124
+ re-enables shipped hooks). Nothing happens when Codex is not installed, and
125
+ `--check` never touches hook trust. Rescue prints a warning that points at
126
+ `hq reindex` and keeps its exit status when the shipped files cannot be
127
+ read, when the release does not ship a file an HQ hook comes from, when a
128
+ shipped file does not parse, when the repo is not an HQ core repo, or when
129
+ the trust step fails.
130
+ - `hq secrets exec` run without a session id (no `HQ_SESSION_ID`, `CLAUDE_CODE_SESSION_ID`, `CLAUDE_SESSION_ID`, `CODEX_SESSION_ID`, `CODEX_THREAD_ID` or `GROK_SESSION_ID`), such as a launchd or cron job, no longer borrows the company lock of whichever interactive session last wrote the sessions `.current` pointer. Before this, a job could load the same-named secret from that session's company. Such a job must now pass `--company <slug>` or `--personal`. Otherwise it prints how to fix the call and exits 78 without reading the vault. An `HQ_API_KEY` (`hqk_`) caller is unaffected because its key is bound to one company. A caller with its own session id keeps the existing lock rules: `--company` can only pick a company inside that session's lock.
131
+ - Defines the Windows acceptance bar for the native hook engine and checks it before a release. Hook checks whose stories are not merged yet are reported as pending and do not block other releases. A failed check still blocks the release.
132
+ - A pass requires runner evidence for that commit. Counts written into corpus files, a source-text match, or a signed-off latency number with no report stay pending and do not block a release.
133
+
5
134
  ## [5.345.151] — 2026-10-20
6
135
  - `hq lanes link _deliver` no longer hands a conductor message to a subagent. Subagent hook events share the root session id, so a subagent tool call used to claim the message and the root session never saw it. Child payloads, including Grok child sessions (`subagent_type`) and Codex child threads, now get nothing and the message stays queued until the root session's next tool call or stop. SubagentStop no longer delivers. A parent session id alone does not mark a child, so resumed, forked, or launcher-spawned Grok roots still receive their messages.
7
136
  - If you leave out `--company`, `hq meetings invite <url>` now uses your only active company. If you belong to several companies, it lists them and asks you to pick one. The command used to send the invite as Personal instead. Personal can never record, so you saw the HQ Workforce upgrade prompt even when your company already had meeting recording.
@@ -6,6 +6,9 @@
6
6
  * shell out to a plain binary instead of a subcommand. Equivalent to
7
7
  * `hq auth refresh`.
8
8
  *
9
+ * Flags: `--min-validity-seconds N` renews a person session that has less than
10
+ * N seconds left (default 120); `--force` renews it even when still valid.
11
+ *
9
12
  * Exit 0 if a valid session is ensured now (healthy cache hit, refresh, or
10
13
  * machine-token mint). Exit 1 if no valid session could be ensured
11
14
  * non-interactively.
@@ -16,6 +19,7 @@ import "../node-network-compat.js";
16
19
  import type { refreshCachedSession } from "../utils/cognito-session.js";
17
20
  type RefreshSession = (options?: {
18
21
  minValiditySeconds?: number;
22
+ force?: boolean;
19
23
  }) => ReturnType<typeof refreshCachedSession>;
20
24
  export declare function runAuthRefresh(refreshSession?: RefreshSession): Promise<number>;
21
25
  export declare function startAuthRefresh(acquireLease?: typeof acquireCurrentPackageUseLease, updateRequestPending?: () => boolean): Promise<number>;
@@ -6,6 +6,9 @@
6
6
  * shell out to a plain binary instead of a subcommand. Equivalent to
7
7
  * `hq auth refresh`.
8
8
  *
9
+ * Flags: `--min-validity-seconds N` renews a person session that has less than
10
+ * N seconds left (default 120); `--force` renews it even when still valid.
11
+ *
9
12
  * Exit 0 if a valid session is ensured now (healthy cache hit, refresh, or
10
13
  * machine-token mint). Exit 1 if no valid session could be ensured
11
14
  * non-interactively.
@@ -17,6 +20,7 @@ import { acquireCurrentPackageUseLease, currentPackageUseUpdatePending, } from "
17
20
  import "../node-network-compat.js";
18
21
  import { isMainModule } from "../utils/is-main-module.js";
19
22
  const MIN_VALIDITY_FLAG = "--min-validity-seconds";
23
+ const FORCE_FLAG = "--force";
20
24
  function parseMinimumValiditySeconds(argv, env) {
21
25
  let raw;
22
26
  let fromFlag = false;
@@ -53,7 +57,11 @@ export async function runAuthRefresh(refreshSession) {
53
57
  let exitCode = 1;
54
58
  try {
55
59
  const minValiditySeconds = parseMinimumValiditySeconds(process.argv.slice(2), process.env);
56
- const result = await (refreshSession ?? refresh)(minValiditySeconds === undefined ? {} : { minValiditySeconds });
60
+ const force = process.argv.slice(2).includes(FORCE_FLAG);
61
+ const result = await (refreshSession ?? refresh)({
62
+ ...(minValiditySeconds === undefined ? {} : { minValiditySeconds }),
63
+ ...(force ? { force } : {}),
64
+ });
57
65
  if (result.refreshed) {
58
66
  exitCode = 0;
59
67
  }
@@ -27,6 +27,191 @@ export type CommandCatalogEntry = {
27
27
  readonly subcommands: readonly CommandCatalogEntry[];
28
28
  };
29
29
  export declare const COMMAND_CATALOG: readonly [{
30
+ readonly name: "decide";
31
+ readonly description: "Ask and answer owner decisions in the HQ Queue";
32
+ readonly aliases: readonly [];
33
+ readonly hidden: false;
34
+ readonly helpOption: true;
35
+ readonly helpCommand: true;
36
+ readonly usage: "[options] [command]";
37
+ readonly helpText: readonly [];
38
+ readonly arguments: readonly [];
39
+ readonly options: readonly [];
40
+ readonly subcommands: readonly [{
41
+ readonly name: "ask";
42
+ readonly description: "Create an option-choice owner decision as the personal local bot";
43
+ readonly aliases: readonly [];
44
+ readonly hidden: false;
45
+ readonly helpOption: true;
46
+ readonly helpCommand: false;
47
+ readonly usage: "[options] <statement>";
48
+ readonly helpText: readonly [];
49
+ readonly arguments: readonly [{
50
+ readonly name: "statement";
51
+ readonly required: true;
52
+ readonly variadic: false;
53
+ readonly description: "";
54
+ }];
55
+ readonly options: readonly [{
56
+ readonly flags: "--to <audience>";
57
+ readonly description: "Decision audience";
58
+ readonly hidden: false;
59
+ readonly choices: readonly ["me"];
60
+ readonly defaultValue: "me";
61
+ }, {
62
+ readonly flags: "--option <id|label>";
63
+ readonly description: "Choice, repeatable";
64
+ readonly hidden: false;
65
+ readonly defaultValue: readonly [];
66
+ }, {
67
+ readonly flags: "--recommend <id>";
68
+ readonly description: "Recommended option id";
69
+ readonly hidden: false;
70
+ }, {
71
+ readonly flags: "--context-link <url>";
72
+ readonly description: "Context link, repeatable";
73
+ readonly hidden: false;
74
+ readonly defaultValue: readonly [];
75
+ }, {
76
+ readonly flags: "--context <text>";
77
+ readonly description: "Short context brief";
78
+ readonly hidden: false;
79
+ readonly defaultValue: "";
80
+ }, {
81
+ readonly flags: "--company <slug|uid>";
82
+ readonly description: "Company (defaults to the active company)";
83
+ readonly hidden: false;
84
+ }, {
85
+ readonly flags: "--expires <duration|iso>";
86
+ readonly description: "Expiry duration (m, h, d) or ISO date-time";
87
+ readonly hidden: false;
88
+ readonly defaultValue: "72h";
89
+ }, {
90
+ readonly flags: "--commitment <id>";
91
+ readonly description: "Related commitment";
92
+ readonly hidden: false;
93
+ }, {
94
+ readonly flags: "--json";
95
+ readonly description: "Print the decision record";
96
+ readonly hidden: false;
97
+ }];
98
+ readonly subcommands: readonly [];
99
+ }, {
100
+ readonly name: "list";
101
+ readonly description: "Read your decisions across companies, oldest first";
102
+ readonly aliases: readonly [];
103
+ readonly hidden: false;
104
+ readonly helpOption: true;
105
+ readonly helpCommand: false;
106
+ readonly usage: "[options]";
107
+ readonly helpText: readonly [];
108
+ readonly arguments: readonly [];
109
+ readonly options: readonly [{
110
+ readonly flags: "--open";
111
+ readonly description: "List open decisions";
112
+ readonly hidden: false;
113
+ }, {
114
+ readonly flags: "--json";
115
+ readonly description: "Print JSON";
116
+ readonly hidden: false;
117
+ }];
118
+ readonly subcommands: readonly [];
119
+ }, {
120
+ readonly name: "show";
121
+ readonly description: "Show a visible decision, including its options and answer";
122
+ readonly aliases: readonly [];
123
+ readonly hidden: false;
124
+ readonly helpOption: true;
125
+ readonly helpCommand: false;
126
+ readonly usage: "[options] <id>";
127
+ readonly helpText: readonly [];
128
+ readonly arguments: readonly [{
129
+ readonly name: "id";
130
+ readonly required: true;
131
+ readonly variadic: false;
132
+ readonly description: "";
133
+ }];
134
+ readonly options: readonly [];
135
+ readonly subcommands: readonly [];
136
+ }, {
137
+ readonly name: "answer";
138
+ readonly description: "Answer with an option ID; the server enforces expiry and first answer";
139
+ readonly aliases: readonly [];
140
+ readonly hidden: false;
141
+ readonly helpOption: true;
142
+ readonly helpCommand: false;
143
+ readonly usage: "[options] <id>";
144
+ readonly helpText: readonly [];
145
+ readonly arguments: readonly [{
146
+ readonly name: "id";
147
+ readonly required: true;
148
+ readonly variadic: false;
149
+ readonly description: "";
150
+ }];
151
+ readonly options: readonly [{
152
+ readonly flags: "--choice <id>";
153
+ readonly description: "Option id";
154
+ readonly hidden: false;
155
+ }, {
156
+ readonly flags: "--source <source>";
157
+ readonly description: "Answer surface";
158
+ readonly hidden: false;
159
+ readonly choices: readonly ["desktop", "thread"];
160
+ readonly defaultValue: "desktop";
161
+ }];
162
+ readonly subcommands: readonly [];
163
+ }, {
164
+ readonly name: "talk";
165
+ readonly description: "Open the decision's bot conversation";
166
+ readonly aliases: readonly [];
167
+ readonly hidden: false;
168
+ readonly helpOption: true;
169
+ readonly helpCommand: false;
170
+ readonly usage: "[options] <id>";
171
+ readonly helpText: readonly [];
172
+ readonly arguments: readonly [{
173
+ readonly name: "id";
174
+ readonly required: true;
175
+ readonly variadic: false;
176
+ readonly description: "";
177
+ }];
178
+ readonly options: readonly [];
179
+ readonly subcommands: readonly [];
180
+ }, {
181
+ readonly name: "withdraw";
182
+ readonly description: "Withdraw a decision you asked";
183
+ readonly aliases: readonly [];
184
+ readonly hidden: false;
185
+ readonly helpOption: true;
186
+ readonly helpCommand: false;
187
+ readonly usage: "[options] <id>";
188
+ readonly helpText: readonly [];
189
+ readonly arguments: readonly [{
190
+ readonly name: "id";
191
+ readonly required: true;
192
+ readonly variadic: false;
193
+ readonly description: "";
194
+ }];
195
+ readonly options: readonly [];
196
+ readonly subcommands: readonly [];
197
+ }, {
198
+ readonly name: "import-lanes";
199
+ readonly description: "Import option-style legacy questions once; report skipped advanced questions";
200
+ readonly aliases: readonly [];
201
+ readonly hidden: false;
202
+ readonly helpOption: true;
203
+ readonly helpCommand: false;
204
+ readonly usage: "[options]";
205
+ readonly helpText: readonly [];
206
+ readonly arguments: readonly [];
207
+ readonly options: readonly [{
208
+ readonly flags: "--json";
209
+ readonly description: "Print import counts and skipped question reasons";
210
+ readonly hidden: false;
211
+ }];
212
+ readonly subcommands: readonly [];
213
+ }];
214
+ }, {
30
215
  readonly name: "modules";
31
216
  readonly description: "Module management commands";
32
217
  readonly aliases: readonly [];
@@ -2058,7 +2243,7 @@ export declare const COMMAND_CATALOG: readonly [{
2058
2243
  readonly hidden: false;
2059
2244
  }, {
2060
2245
  readonly flags: "--permission <level>";
2061
- readonly description: "Permission level: read | write | admin";
2246
+ readonly description: "Permission level: read | write | admin (required, except for a company Outpost, which can only be given read and defaults to it)";
2062
2247
  readonly hidden: false;
2063
2248
  }];
2064
2249
  readonly subcommands: readonly [];
@@ -2813,7 +2998,7 @@ export declare const COMMAND_CATALOG: readonly [{
2813
2998
  }];
2814
2999
  readonly options: readonly [{
2815
3000
  readonly flags: "--with <principal>";
2816
- readonly description: "Email address, group id, or '@all' to share with every active company member";
3001
+ readonly description: "Email address, group id, company Outpost id (out_...), or '@all' to share with every active company member";
2817
3002
  readonly hidden: false;
2818
3003
  }, {
2819
3004
  readonly flags: "--permission <level>";
@@ -2859,7 +3044,7 @@ export declare const COMMAND_CATALOG: readonly [{
2859
3044
  }];
2860
3045
  readonly options: readonly [{
2861
3046
  readonly flags: "--with <principal>";
2862
- readonly description: "Person uid, agent uid, email address, group id, or '@all' to remove the grant";
3047
+ readonly description: "Person uid, agent uid, company Outpost id (out_...), email address, group id, or '@all' to remove the grant";
2863
3048
  readonly hidden: false;
2864
3049
  }];
2865
3050
  readonly subcommands: readonly [];
@@ -1,5 +1,232 @@
1
1
  // This file is generated by scripts/generate-command-catalog.mjs. Do not edit.
2
2
  export const COMMAND_CATALOG = [
3
+ {
4
+ "name": "decide",
5
+ "description": "Ask and answer owner decisions in the HQ Queue",
6
+ "aliases": [],
7
+ "hidden": false,
8
+ "helpOption": true,
9
+ "helpCommand": true,
10
+ "usage": "[options] [command]",
11
+ "helpText": [],
12
+ "arguments": [],
13
+ "options": [],
14
+ "subcommands": [
15
+ {
16
+ "name": "ask",
17
+ "description": "Create an option-choice owner decision as the personal local bot",
18
+ "aliases": [],
19
+ "hidden": false,
20
+ "helpOption": true,
21
+ "helpCommand": false,
22
+ "usage": "[options] <statement>",
23
+ "helpText": [],
24
+ "arguments": [
25
+ {
26
+ "name": "statement",
27
+ "required": true,
28
+ "variadic": false,
29
+ "description": ""
30
+ }
31
+ ],
32
+ "options": [
33
+ {
34
+ "flags": "--to <audience>",
35
+ "description": "Decision audience",
36
+ "hidden": false,
37
+ "choices": [
38
+ "me"
39
+ ],
40
+ "defaultValue": "me"
41
+ },
42
+ {
43
+ "flags": "--option <id|label>",
44
+ "description": "Choice, repeatable",
45
+ "hidden": false,
46
+ "defaultValue": []
47
+ },
48
+ {
49
+ "flags": "--recommend <id>",
50
+ "description": "Recommended option id",
51
+ "hidden": false
52
+ },
53
+ {
54
+ "flags": "--context-link <url>",
55
+ "description": "Context link, repeatable",
56
+ "hidden": false,
57
+ "defaultValue": []
58
+ },
59
+ {
60
+ "flags": "--context <text>",
61
+ "description": "Short context brief",
62
+ "hidden": false,
63
+ "defaultValue": ""
64
+ },
65
+ {
66
+ "flags": "--company <slug|uid>",
67
+ "description": "Company (defaults to the active company)",
68
+ "hidden": false
69
+ },
70
+ {
71
+ "flags": "--expires <duration|iso>",
72
+ "description": "Expiry duration (m, h, d) or ISO date-time",
73
+ "hidden": false,
74
+ "defaultValue": "72h"
75
+ },
76
+ {
77
+ "flags": "--commitment <id>",
78
+ "description": "Related commitment",
79
+ "hidden": false
80
+ },
81
+ {
82
+ "flags": "--json",
83
+ "description": "Print the decision record",
84
+ "hidden": false
85
+ }
86
+ ],
87
+ "subcommands": []
88
+ },
89
+ {
90
+ "name": "list",
91
+ "description": "Read your decisions across companies, oldest first",
92
+ "aliases": [],
93
+ "hidden": false,
94
+ "helpOption": true,
95
+ "helpCommand": false,
96
+ "usage": "[options]",
97
+ "helpText": [],
98
+ "arguments": [],
99
+ "options": [
100
+ {
101
+ "flags": "--open",
102
+ "description": "List open decisions",
103
+ "hidden": false
104
+ },
105
+ {
106
+ "flags": "--json",
107
+ "description": "Print JSON",
108
+ "hidden": false
109
+ }
110
+ ],
111
+ "subcommands": []
112
+ },
113
+ {
114
+ "name": "show",
115
+ "description": "Show a visible decision, including its options and answer",
116
+ "aliases": [],
117
+ "hidden": false,
118
+ "helpOption": true,
119
+ "helpCommand": false,
120
+ "usage": "[options] <id>",
121
+ "helpText": [],
122
+ "arguments": [
123
+ {
124
+ "name": "id",
125
+ "required": true,
126
+ "variadic": false,
127
+ "description": ""
128
+ }
129
+ ],
130
+ "options": [],
131
+ "subcommands": []
132
+ },
133
+ {
134
+ "name": "answer",
135
+ "description": "Answer with an option ID; the server enforces expiry and first answer",
136
+ "aliases": [],
137
+ "hidden": false,
138
+ "helpOption": true,
139
+ "helpCommand": false,
140
+ "usage": "[options] <id>",
141
+ "helpText": [],
142
+ "arguments": [
143
+ {
144
+ "name": "id",
145
+ "required": true,
146
+ "variadic": false,
147
+ "description": ""
148
+ }
149
+ ],
150
+ "options": [
151
+ {
152
+ "flags": "--choice <id>",
153
+ "description": "Option id",
154
+ "hidden": false
155
+ },
156
+ {
157
+ "flags": "--source <source>",
158
+ "description": "Answer surface",
159
+ "hidden": false,
160
+ "choices": [
161
+ "desktop",
162
+ "thread"
163
+ ],
164
+ "defaultValue": "desktop"
165
+ }
166
+ ],
167
+ "subcommands": []
168
+ },
169
+ {
170
+ "name": "talk",
171
+ "description": "Open the decision's bot conversation",
172
+ "aliases": [],
173
+ "hidden": false,
174
+ "helpOption": true,
175
+ "helpCommand": false,
176
+ "usage": "[options] <id>",
177
+ "helpText": [],
178
+ "arguments": [
179
+ {
180
+ "name": "id",
181
+ "required": true,
182
+ "variadic": false,
183
+ "description": ""
184
+ }
185
+ ],
186
+ "options": [],
187
+ "subcommands": []
188
+ },
189
+ {
190
+ "name": "withdraw",
191
+ "description": "Withdraw a decision you asked",
192
+ "aliases": [],
193
+ "hidden": false,
194
+ "helpOption": true,
195
+ "helpCommand": false,
196
+ "usage": "[options] <id>",
197
+ "helpText": [],
198
+ "arguments": [
199
+ {
200
+ "name": "id",
201
+ "required": true,
202
+ "variadic": false,
203
+ "description": ""
204
+ }
205
+ ],
206
+ "options": [],
207
+ "subcommands": []
208
+ },
209
+ {
210
+ "name": "import-lanes",
211
+ "description": "Import option-style legacy questions once; report skipped advanced questions",
212
+ "aliases": [],
213
+ "hidden": false,
214
+ "helpOption": true,
215
+ "helpCommand": false,
216
+ "usage": "[options]",
217
+ "helpText": [],
218
+ "arguments": [],
219
+ "options": [
220
+ {
221
+ "flags": "--json",
222
+ "description": "Print import counts and skipped question reasons",
223
+ "hidden": false
224
+ }
225
+ ],
226
+ "subcommands": []
227
+ }
228
+ ]
229
+ },
3
230
  {
4
231
  "name": "modules",
5
232
  "description": "Module management commands",
@@ -2469,7 +2696,7 @@ export const COMMAND_CATALOG = [
2469
2696
  },
2470
2697
  {
2471
2698
  "flags": "--permission <level>",
2472
- "description": "Permission level: read | write | admin",
2699
+ "description": "Permission level: read | write | admin (required, except for a company Outpost, which can only be given read and defaults to it)",
2473
2700
  "hidden": false
2474
2701
  }
2475
2702
  ],
@@ -3380,7 +3607,7 @@ export const COMMAND_CATALOG = [
3380
3607
  "options": [
3381
3608
  {
3382
3609
  "flags": "--with <principal>",
3383
- "description": "Email address, group id, or '@all' to share with every active company member",
3610
+ "description": "Email address, group id, company Outpost id (out_...), or '@all' to share with every active company member",
3384
3611
  "hidden": false
3385
3612
  },
3386
3613
  {
@@ -3437,7 +3664,7 @@ export const COMMAND_CATALOG = [
3437
3664
  "options": [
3438
3665
  {
3439
3666
  "flags": "--with <principal>",
3440
- "description": "Person uid, agent uid, email address, group id, or '@all' to remove the grant",
3667
+ "description": "Person uid, agent uid, company Outpost id (out_...), email address, group id, or '@all' to remove the grant",
3441
3668
  "hidden": false
3442
3669
  }
3443
3670
  ],