@indigoai-us/hq-cli 5.268.0 → 5.270.0

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 (37) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/command-catalog.generated.d.ts +77 -4
  3. package/dist/command-catalog.generated.js +98 -4
  4. package/dist/commands/files.js +6 -3
  5. package/dist/commands/lanes-hold.d.ts +2 -0
  6. package/dist/commands/lanes-hold.js +122 -310
  7. package/dist/commands/lanes-message.js +6 -4
  8. package/dist/commands/lanes-review.d.ts +10 -0
  9. package/dist/commands/lanes-review.js +56 -0
  10. package/dist/commands/lanes-shared.d.ts +1 -0
  11. package/dist/commands/lanes.d.ts +2 -0
  12. package/dist/commands/lanes.js +29 -4
  13. package/dist/lib/billing/plan-limit-upgrade-url.d.ts +1 -4
  14. package/dist/lib/billing/plan-limit-upgrade-url.js +7 -18
  15. package/dist/lib/doctor/checks/sync-runtime.d.ts +1 -1
  16. package/dist/lib/doctor/checks/sync-runtime.js +69 -19
  17. package/dist/lib/lanes/blocker-freshness.js +2 -1
  18. package/dist/lib/lanes/keep-alive.js +49 -20
  19. package/dist/lib/lanes/kr-freshness.js +3 -2
  20. package/dist/lib/lanes/lane-company.d.ts +3 -2
  21. package/dist/lib/lanes/lane-company.js +21 -4
  22. package/dist/lib/lanes/manager-status-gate.js +5 -3
  23. package/dist/lib/lanes/merge-command.d.ts +14 -0
  24. package/dist/lib/lanes/merge-command.js +363 -0
  25. package/dist/lib/lanes/reviews.d.ts +38 -0
  26. package/dist/lib/lanes/reviews.js +395 -0
  27. package/dist/lib/lanes/watcher.js +4 -2
  28. package/dist/lib/plan-limit-nag.js +2 -4
  29. package/dist/utils/feedback-logs.d.ts +14 -9
  30. package/dist/utils/feedback-logs.js +43 -14
  31. package/dist/utils/local-files-overview.d.ts +4 -2
  32. package/dist/utils/local-files-overview.js +47 -6
  33. package/dist/utils/sync-log-sources.d.ts +15 -0
  34. package/dist/utils/sync-log-sources.js +36 -0
  35. package/dist/utils/version-gate.d.ts +1 -0
  36. package/dist/utils/version-gate.js +6 -1
  37. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.270.0] — 2026-09-28
6
+
7
+ ### Fixed
8
+
9
+ - Company billing links in CLI plan-limit notices no longer depend on the
10
+ rollout flag.
11
+
12
+ ### Removed
13
+
14
+ - Removed stale gate language from hire-grant command help. Enforcement remains
15
+ unconditional; backfill remains dry-run only.
16
+
17
+ ### Fixed
18
+
19
+ - `hq files unshare --with` now accepts the same person UID principals as direct grants.
20
+ - The update gate no longer retries failed Windows installs through `sudo -n`.
21
+
22
+ ## [5.269.0] — 2026-09-28
23
+
24
+ ### Fixed
25
+
26
+ - Keep-alive no longer treats cancelled, killed, or failed project workers as
27
+ replacement leads, and recognizes descendants whose session senior belongs
28
+ to the lead.
29
+ - Company-scoped lane flags resolve ownership from a complete lane company,
30
+ then a complete mesh company, then the lane's unique project company.
31
+
32
+ ### Added
33
+
34
+ - Add `hq lanes review` records and optional reviewed-head checks to
35
+ `hq lanes hold check` for senior lanes.
36
+
5
37
  ## [5.268.0] — 2026-09-28
6
38
 
7
39
  ### Fixed
@@ -319,6 +351,10 @@
319
351
  - Removed the unused `cli.network.force-ipv4` hq-flags lookup and forced IPv4
320
352
  startup path. The existing Node family-attempt timeout remains unchanged.
321
353
  - `hq auth login` continues when it cannot read or save the remembered provider. It prints a dim warning with the state path and error code; a save failure does not turn a successful sign-in into a login failure.
354
+ - `hq doctor`, client health metadata, and feedback attachments now use the
355
+ newest sync-log source from the desktop app or configured daemon directory.
356
+ Daemon `HQ_DAEMON_DIR` overrides and log rotations are supported, and
357
+ numeric runner error levels count in health metadata.
322
358
 
323
359
  ## [5.242.0] — 2026-09-27
324
360
 
@@ -1701,7 +1701,7 @@ export declare const COMMAND_CATALOG: readonly [{
1701
1701
  }];
1702
1702
  readonly options: readonly [{
1703
1703
  readonly flags: "--with <principal>";
1704
- readonly description: "Email address, group id, or '@all' to remove the company-wide grant";
1704
+ readonly description: "Person uid, email address, group id, or '@all' to remove the grant";
1705
1705
  }];
1706
1706
  readonly subcommands: readonly [];
1707
1707
  }, {
@@ -7471,6 +7471,79 @@ export declare const COMMAND_CATALOG: readonly [{
7471
7471
  }];
7472
7472
  readonly subcommands: readonly [];
7473
7473
  }];
7474
+ }, {
7475
+ readonly name: "review";
7476
+ readonly description: "Record manager review of pull-request heads";
7477
+ readonly aliases: readonly [];
7478
+ readonly hidden: false;
7479
+ readonly usage: "[options] [command]";
7480
+ readonly arguments: readonly [];
7481
+ readonly options: readonly [];
7482
+ readonly subcommands: readonly [{
7483
+ readonly name: "record";
7484
+ readonly description: "Record a review against an exact pull-request head";
7485
+ readonly aliases: readonly [];
7486
+ readonly hidden: false;
7487
+ readonly usage: "[options] <repo> <pr-number>";
7488
+ readonly arguments: readonly [{
7489
+ readonly name: "repo";
7490
+ readonly required: true;
7491
+ readonly variadic: false;
7492
+ }, {
7493
+ readonly name: "pr-number";
7494
+ readonly required: true;
7495
+ readonly variadic: false;
7496
+ }];
7497
+ readonly options: readonly [{
7498
+ readonly flags: "--head <sha>";
7499
+ readonly description: "40-character commit SHA that was reviewed";
7500
+ }, {
7501
+ readonly flags: "--worker <lane-id>";
7502
+ readonly description: "Worker lane whose output was reviewed";
7503
+ }, {
7504
+ readonly flags: "--note <text>";
7505
+ readonly description: "Short note about the review";
7506
+ }, {
7507
+ readonly flags: "--json";
7508
+ readonly description: "Print JSON";
7509
+ }];
7510
+ readonly subcommands: readonly [];
7511
+ }, {
7512
+ readonly name: "show";
7513
+ readonly description: "Show the review record for one pull request";
7514
+ readonly aliases: readonly [];
7515
+ readonly hidden: false;
7516
+ readonly usage: "[options] <repo> <pr-number>";
7517
+ readonly arguments: readonly [{
7518
+ readonly name: "repo";
7519
+ readonly required: true;
7520
+ readonly variadic: false;
7521
+ }, {
7522
+ readonly name: "pr-number";
7523
+ readonly required: true;
7524
+ readonly variadic: false;
7525
+ }];
7526
+ readonly options: readonly [{
7527
+ readonly flags: "--json";
7528
+ readonly description: "Print JSON";
7529
+ }];
7530
+ readonly subcommands: readonly [];
7531
+ }, {
7532
+ readonly name: "list";
7533
+ readonly description: "List recorded pull-request reviews";
7534
+ readonly aliases: readonly [];
7535
+ readonly hidden: false;
7536
+ readonly usage: "[options]";
7537
+ readonly arguments: readonly [];
7538
+ readonly options: readonly [{
7539
+ readonly flags: "--repo <owner/repo>";
7540
+ readonly description: "Limit results to one repository";
7541
+ }, {
7542
+ readonly flags: "--json";
7543
+ readonly description: "Print JSON";
7544
+ }];
7545
+ readonly subcommands: readonly [];
7546
+ }];
7474
7547
  }, {
7475
7548
  readonly name: "outpost-pruner";
7476
7549
  readonly description: "Inspect, install, and run safe outpost worktree pruning";
@@ -7682,7 +7755,7 @@ export declare const COMMAND_CATALOG: readonly [{
7682
7755
  readonly description: "Non-negative safe integer hire grant";
7683
7756
  }, {
7684
7757
  readonly flags: "--grant-context <base64url>";
7685
- readonly description: "Primary-authorized hire hierarchy and gate decision";
7758
+ readonly description: "Primary-authorized hire hierarchy context";
7686
7759
  }, {
7687
7760
  readonly flags: "--json";
7688
7761
  readonly description: "JSON on stdout (always)";
@@ -7734,7 +7807,7 @@ export declare const COMMAND_CATALOG: readonly [{
7734
7807
  readonly subcommands: readonly [];
7735
7808
  }, {
7736
7809
  readonly name: "backfill-grants";
7737
- readonly description: "Preview or apply missing hire grants for alive manager lanes";
7810
+ readonly description: "Preview missing hire grants for alive manager lanes; writes are disabled";
7738
7811
  readonly aliases: readonly [];
7739
7812
  readonly hidden: false;
7740
7813
  readonly usage: "[options]";
@@ -7744,7 +7817,7 @@ export declare const COMMAND_CATALOG: readonly [{
7744
7817
  readonly description: "Print proposed values without writing (default)";
7745
7818
  }, {
7746
7819
  readonly flags: "--apply";
7747
- readonly description: "Write missing hire grants; only run before enforcement is enabled";
7820
+ readonly description: "Retained for compatibility; writes are disabled";
7748
7821
  }, {
7749
7822
  readonly flags: "--json";
7750
7823
  readonly description: "JSON on stdout (always)";
@@ -2170,7 +2170,7 @@ export const COMMAND_CATALOG = [
2170
2170
  "options": [
2171
2171
  {
2172
2172
  "flags": "--with <principal>",
2173
- "description": "Email address, group id, or '@all' to remove the company-wide grant"
2173
+ "description": "Person uid, email address, group id, or '@all' to remove the grant"
2174
2174
  }
2175
2175
  ],
2176
2176
  "subcommands": []
@@ -9658,6 +9658,100 @@ export const COMMAND_CATALOG = [
9658
9658
  }
9659
9659
  ]
9660
9660
  },
9661
+ {
9662
+ "name": "review",
9663
+ "description": "Record manager review of pull-request heads",
9664
+ "aliases": [],
9665
+ "hidden": false,
9666
+ "usage": "[options] [command]",
9667
+ "arguments": [],
9668
+ "options": [],
9669
+ "subcommands": [
9670
+ {
9671
+ "name": "record",
9672
+ "description": "Record a review against an exact pull-request head",
9673
+ "aliases": [],
9674
+ "hidden": false,
9675
+ "usage": "[options] <repo> <pr-number>",
9676
+ "arguments": [
9677
+ {
9678
+ "name": "repo",
9679
+ "required": true,
9680
+ "variadic": false
9681
+ },
9682
+ {
9683
+ "name": "pr-number",
9684
+ "required": true,
9685
+ "variadic": false
9686
+ }
9687
+ ],
9688
+ "options": [
9689
+ {
9690
+ "flags": "--head <sha>",
9691
+ "description": "40-character commit SHA that was reviewed"
9692
+ },
9693
+ {
9694
+ "flags": "--worker <lane-id>",
9695
+ "description": "Worker lane whose output was reviewed"
9696
+ },
9697
+ {
9698
+ "flags": "--note <text>",
9699
+ "description": "Short note about the review"
9700
+ },
9701
+ {
9702
+ "flags": "--json",
9703
+ "description": "Print JSON"
9704
+ }
9705
+ ],
9706
+ "subcommands": []
9707
+ },
9708
+ {
9709
+ "name": "show",
9710
+ "description": "Show the review record for one pull request",
9711
+ "aliases": [],
9712
+ "hidden": false,
9713
+ "usage": "[options] <repo> <pr-number>",
9714
+ "arguments": [
9715
+ {
9716
+ "name": "repo",
9717
+ "required": true,
9718
+ "variadic": false
9719
+ },
9720
+ {
9721
+ "name": "pr-number",
9722
+ "required": true,
9723
+ "variadic": false
9724
+ }
9725
+ ],
9726
+ "options": [
9727
+ {
9728
+ "flags": "--json",
9729
+ "description": "Print JSON"
9730
+ }
9731
+ ],
9732
+ "subcommands": []
9733
+ },
9734
+ {
9735
+ "name": "list",
9736
+ "description": "List recorded pull-request reviews",
9737
+ "aliases": [],
9738
+ "hidden": false,
9739
+ "usage": "[options]",
9740
+ "arguments": [],
9741
+ "options": [
9742
+ {
9743
+ "flags": "--repo <owner/repo>",
9744
+ "description": "Limit results to one repository"
9745
+ },
9746
+ {
9747
+ "flags": "--json",
9748
+ "description": "Print JSON"
9749
+ }
9750
+ ],
9751
+ "subcommands": []
9752
+ }
9753
+ ]
9754
+ },
9661
9755
  {
9662
9756
  "name": "outpost-pruner",
9663
9757
  "description": "Inspect, install, and run safe outpost worktree pruning",
@@ -9932,7 +10026,7 @@ export const COMMAND_CATALOG = [
9932
10026
  },
9933
10027
  {
9934
10028
  "flags": "--grant-context <base64url>",
9935
- "description": "Primary-authorized hire hierarchy and gate decision"
10029
+ "description": "Primary-authorized hire hierarchy context"
9936
10030
  },
9937
10031
  {
9938
10032
  "flags": "--json",
@@ -10001,7 +10095,7 @@ export const COMMAND_CATALOG = [
10001
10095
  },
10002
10096
  {
10003
10097
  "name": "backfill-grants",
10004
- "description": "Preview or apply missing hire grants for alive manager lanes",
10098
+ "description": "Preview missing hire grants for alive manager lanes; writes are disabled",
10005
10099
  "aliases": [],
10006
10100
  "hidden": false,
10007
10101
  "usage": "[options]",
@@ -10013,7 +10107,7 @@ export const COMMAND_CATALOG = [
10013
10107
  },
10014
10108
  {
10015
10109
  "flags": "--apply",
10016
- "description": "Write missing hire grants; only run before enforcement is enabled"
10110
+ "description": "Retained for compatibility; writes are disabled"
10017
10111
  },
10018
10112
  {
10019
10113
  "flags": "--json",
@@ -262,7 +262,7 @@ export function registerFilesCommand(program) {
262
262
  files
263
263
  .command("unshare <prefix>")
264
264
  .description("Remove a file access grant. A trailing slash targets the private-folder row exactly.")
265
- .requiredOption("--with <principal>", "Email address, group id, or '@all' to remove the company-wide grant")
265
+ .requiredOption("--with <principal>", "Person uid, email address, group id, or '@all' to remove the grant")
266
266
  .action(async (prefix, opts) => {
267
267
  try {
268
268
  // Unshare MUTATES access with no preview, and it resolves the target
@@ -278,7 +278,8 @@ export function registerFilesCommand(program) {
278
278
  const isAll = principal === "@all";
279
279
  const isEmail = !isAll && EMAIL_PATTERN.test(principal);
280
280
  const isGroup = !isAll && GROUP_ID_PATTERN.test(principal);
281
- if (!isAll && !isEmail && !isGroup) {
281
+ const isPerson = !isAll && !isEmail && !isGroup && PERSON_UID_PATTERN.test(principal);
282
+ if (!isAll && !isEmail && !isGroup && !isPerson) {
282
283
  console.error(chalk.red(`Invalid principal '${principal}': must be '@all', an email address, or a group id matching grp_<alphanumeric>`));
283
284
  process.exit(1);
284
285
  }
@@ -286,7 +287,9 @@ export function registerFilesCommand(program) {
286
287
  ? "company-wide"
287
288
  : isEmail
288
289
  ? "email"
289
- : "group";
290
+ : isGroup
291
+ ? "group"
292
+ : "person";
290
293
  const granteeId = isAll
291
294
  ? ""
292
295
  : isEmail
@@ -1,6 +1,7 @@
1
1
  import type { Command } from "commander";
2
2
  import type { LaneCompanyRef } from "../lib/lanes/types.js";
3
3
  export declare const LANES_REPO_MERGE_HOLD_FLAG = "lanes.repo-merge-hold";
4
+ export declare const LANES_REVIEW_BEFORE_MERGE_FLAG = "lanes.review-before-merge";
4
5
  export declare const REPO_MERGE_HOLDS_REL: string;
5
6
  declare const HOLD_SCHEMA_VERSION = "hq-lanes-repo-merge-hold.v1";
6
7
  interface HoldHistoryEntry {
@@ -31,6 +32,7 @@ export interface LaneRepoMergeHoldDeps {
31
32
  now: () => Date;
32
33
  env: NodeJS.ProcessEnv;
33
34
  mergeHoldEnabled?: (company: LaneCompanyRef) => boolean | Promise<boolean>;
35
+ mergeReviewEnabled?: (company: LaneCompanyRef) => boolean | Promise<boolean>;
34
36
  }
35
37
  type WrapHandler = <Args extends unknown[]>(action: (...args: Args) => Promise<void>) => (...args: Args) => Promise<void>;
36
38
  export declare function repoMergeHoldPath(hqRoot: string, repo: string): string;