@indigoai-us/hq-cli 5.345.160 → 5.345.162

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 (73) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/assets/scaffold/core/scripts/session-journal.sh +116 -24
  3. package/dist/command-catalog.generated.d.ts +262 -5
  4. package/dist/command-catalog.generated.js +322 -5
  5. package/dist/command-registration-plan.d.ts +6 -0
  6. package/dist/command-registration-plan.js +1 -0
  7. package/dist/commands/agent-inbox.js +6 -2
  8. package/dist/commands/auth.js +6 -5
  9. package/dist/commands/core-session-helper-runtime.d.ts +1 -0
  10. package/dist/commands/core-session-journal-native.d.ts +1 -0
  11. package/dist/commands/core-session-journal-native.js +158 -34
  12. package/dist/commands/feedback.d.ts +12 -0
  13. package/dist/commands/feedback.js +52 -0
  14. package/dist/commands/files-browse.d.ts +8 -0
  15. package/dist/commands/files-browse.js +83 -1
  16. package/dist/commands/install-global.d.ts +2 -0
  17. package/dist/commands/install-global.js +24 -1
  18. package/dist/commands/integrations-connect.js +1 -0
  19. package/dist/commands/integrations-manage.d.ts +2 -0
  20. package/dist/commands/integrations-manage.js +6 -4
  21. package/dist/commands/lanes-link.js +5 -3
  22. package/dist/commands/lanes-loop.js +7 -7
  23. package/dist/commands/lanes-questions.js +54 -4
  24. package/dist/commands/lanes-session-start.d.ts +12 -0
  25. package/dist/commands/lanes-session-start.js +93 -12
  26. package/dist/commands/lanes.js +2 -1
  27. package/dist/commands/meetings.d.ts +11 -0
  28. package/dist/commands/meetings.js +41 -11
  29. package/dist/commands/sync-held.d.ts +87 -0
  30. package/dist/commands/sync-held.js +191 -0
  31. package/dist/hq-cloud-sync-runner/bin/sync-runner.js +3830 -2812
  32. package/dist/hq-cloud-sync-runner/package.json +1 -1
  33. package/dist/index.js +21 -0
  34. package/dist/lanes-session-start-argv.d.ts +7 -0
  35. package/dist/lanes-session-start-argv.js +9 -0
  36. package/dist/lib/agent-kit/inbox-state.d.ts +5 -4
  37. package/dist/lib/agent-kit/inbox-state.js +24 -3
  38. package/dist/lib/bot/log.d.ts +3 -2
  39. package/dist/lib/bot/progress.d.ts +23 -1
  40. package/dist/lib/bot/progress.js +43 -5
  41. package/dist/lib/bot/run.js +2 -0
  42. package/dist/lib/bot/runtime/claude.d.ts +12 -0
  43. package/dist/lib/bot/runtime/claude.js +20 -0
  44. package/dist/lib/bot/runtime/index.d.ts +10 -1
  45. package/dist/lib/bot/runtime/index.js +14 -2
  46. package/dist/lib/bot/runtime/types.d.ts +8 -0
  47. package/dist/lib/doctor/checks/ps1-shims.d.ts +21 -0
  48. package/dist/lib/doctor/checks/ps1-shims.js +82 -0
  49. package/dist/lib/doctor/fix/apply.d.ts +13 -1
  50. package/dist/lib/doctor/fix/apply.js +38 -3
  51. package/dist/lib/doctor/fix/remediation.d.ts +9 -1
  52. package/dist/lib/doctor/fix/remediation.js +22 -0
  53. package/dist/lib/doctor/registry.js +2 -0
  54. package/dist/lib/flag-registry-worker-source.generated.d.ts +1 -1
  55. package/dist/lib/flag-registry-worker-source.generated.js +1 -1
  56. package/dist/lib/lanes/links.d.ts +2 -1
  57. package/dist/lib/lanes/links.js +235 -17
  58. package/dist/lib/lanes/loop.d.ts +17 -0
  59. package/dist/lib/lanes/loop.js +235 -5
  60. package/dist/lib/lanes/questions.d.ts +1 -0
  61. package/dist/lib/lanes/registry-flag.d.ts +24 -0
  62. package/dist/lib/lanes/registry-flag.js +72 -6
  63. package/dist/lib/lanes/store.d.ts +4 -2
  64. package/dist/lib/lanes/store.js +8 -8
  65. package/dist/lib/windows/ps1-shims.d.ts +60 -0
  66. package/dist/lib/windows/ps1-shims.js +152 -0
  67. package/dist/utils/self-update.d.ts +2 -0
  68. package/dist/utils/self-update.js +8 -0
  69. package/dist/utils/staged-npm-install.js +13 -2
  70. package/dist/utils/token-keychain.d.ts +11 -8
  71. package/dist/utils/token-keychain.js +36 -15
  72. package/package.json +8 -8
  73. package/scripts/install-hook-engine.mjs +12 -0
@@ -1412,6 +1412,59 @@ export const COMMAND_CATALOG = [
1412
1412
  }
1413
1413
  ],
1414
1414
  "subcommands": []
1415
+ },
1416
+ {
1417
+ "name": "held",
1418
+ "description": "Show uploads held because someone else was signed in on this computer",
1419
+ "aliases": [],
1420
+ "hidden": false,
1421
+ "helpOption": true,
1422
+ "helpCommand": false,
1423
+ "usage": "[options]",
1424
+ "helpText": [],
1425
+ "arguments": [],
1426
+ "options": [
1427
+ {
1428
+ "flags": "--json",
1429
+ "description": "Print the held scopes as JSON",
1430
+ "hidden": false
1431
+ }
1432
+ ],
1433
+ "subcommands": []
1434
+ },
1435
+ {
1436
+ "name": "release-held",
1437
+ "description": "Confirm held files are yours and let sync upload them",
1438
+ "aliases": [],
1439
+ "hidden": false,
1440
+ "helpOption": true,
1441
+ "helpCommand": false,
1442
+ "usage": "[options]",
1443
+ "helpText": [],
1444
+ "arguments": [],
1445
+ "options": [
1446
+ {
1447
+ "flags": "--company <slug>",
1448
+ "description": "Release only this company",
1449
+ "hidden": false
1450
+ },
1451
+ {
1452
+ "flags": "--personal",
1453
+ "description": "Release only the personal vault",
1454
+ "hidden": false
1455
+ },
1456
+ {
1457
+ "flags": "--yes",
1458
+ "description": "Do not ask for confirmation",
1459
+ "hidden": false
1460
+ },
1461
+ {
1462
+ "flags": "--json",
1463
+ "description": "Print the result as JSON",
1464
+ "hidden": false
1465
+ }
1466
+ ],
1467
+ "subcommands": []
1415
1468
  }
1416
1469
  ]
1417
1470
  },
@@ -5517,6 +5570,32 @@ export const COMMAND_CATALOG = [
5517
5570
  }
5518
5571
  ],
5519
5572
  "subcommands": []
5573
+ },
5574
+ {
5575
+ "name": "assign",
5576
+ "description": "Reassign a ticket to a person, including one another person has claimed",
5577
+ "aliases": [],
5578
+ "hidden": false,
5579
+ "helpOption": true,
5580
+ "helpCommand": false,
5581
+ "usage": "[options] <id>",
5582
+ "helpText": [],
5583
+ "arguments": [
5584
+ {
5585
+ "name": "id",
5586
+ "required": true,
5587
+ "variadic": false,
5588
+ "description": "Feedback id (feedback_<uuid>)"
5589
+ }
5590
+ ],
5591
+ "options": [
5592
+ {
5593
+ "flags": "--to <assignee>",
5594
+ "description": "New assignee: an email address or a prs_ uid",
5595
+ "hidden": false
5596
+ }
5597
+ ],
5598
+ "subcommands": []
5520
5599
  }
5521
5600
  ]
5522
5601
  },
@@ -5533,7 +5612,7 @@ export const COMMAND_CATALOG = [
5533
5612
  "options": [
5534
5613
  {
5535
5614
  "flags": "--company <slug>",
5536
- "description": "Company slug (for multi-company users)",
5615
+ "description": "Company slug (defaults to the company this HQ session is bound to)",
5537
5616
  "hidden": false
5538
5617
  },
5539
5618
  {
@@ -6624,6 +6703,11 @@ export const COMMAND_CATALOG = [
6624
6703
  "description": "Read that app's client secret from stdin",
6625
6704
  "hidden": false
6626
6705
  },
6706
+ {
6707
+ "flags": "--scopes <list>",
6708
+ "description": "Permissions to request, space- or comma-separated (default: the permissions the app was approved for last time)",
6709
+ "hidden": false
6710
+ },
6627
6711
  {
6628
6712
  "flags": "--no-browser",
6629
6713
  "description": "Print the sign-in URL instead of opening a browser",
@@ -6866,7 +6950,7 @@ export const COMMAND_CATALOG = [
6866
6950
  },
6867
6951
  {
6868
6952
  "flags": "--to <principal>",
6869
- "description": "Email, uid, or `everyone`",
6953
+ "description": "Email, uid, vault group (grp_…), or `everyone`",
6870
6954
  "hidden": false
6871
6955
  },
6872
6956
  {
@@ -6923,7 +7007,7 @@ export const COMMAND_CATALOG = [
6923
7007
  },
6924
7008
  {
6925
7009
  "flags": "--from <principal>",
6926
- "description": "Email, uid, or `everyone`",
7010
+ "description": "Email, uid, vault group (grp_…), or `everyone`",
6927
7011
  "hidden": false
6928
7012
  },
6929
7013
  {
@@ -7010,7 +7094,7 @@ export const COMMAND_CATALOG = [
7010
7094
  },
7011
7095
  {
7012
7096
  "flags": "--with <principal>",
7013
- "description": "Email, uid, or `everyone`",
7097
+ "description": "Email, uid, vault group (grp_…), or `everyone`",
7014
7098
  "hidden": false
7015
7099
  },
7016
7100
  {
@@ -7062,7 +7146,7 @@ export const COMMAND_CATALOG = [
7062
7146
  },
7063
7147
  {
7064
7148
  "flags": "--from <principal>",
7065
- "description": "Email, uid, or `everyone`",
7149
+ "description": "Email, uid, vault group (grp_…), or `everyone`",
7066
7150
  "hidden": false
7067
7151
  },
7068
7152
  {
@@ -16486,6 +16570,11 @@ export const COMMAND_CATALOG = [
16486
16570
  "helpText": [],
16487
16571
  "arguments": [],
16488
16572
  "options": [
16573
+ {
16574
+ "flags": "--refresh-flags",
16575
+ "description": "Refresh the offline session-start flag values from the registry",
16576
+ "hidden": false
16577
+ },
16489
16578
  {
16490
16579
  "flags": "--json",
16491
16580
  "description": "JSON on stdout (always)",
@@ -16557,6 +16646,11 @@ export const COMMAND_CATALOG = [
16557
16646
  "description": "Host session id",
16558
16647
  "hidden": false
16559
16648
  },
16649
+ {
16650
+ "flags": "--claims <ids>",
16651
+ "description": "Exact comma-separated recipient receipt IDs",
16652
+ "hidden": false
16653
+ },
16560
16654
  {
16561
16655
  "flags": "--text <message>",
16562
16656
  "description": "Message text",
@@ -16636,6 +16730,11 @@ export const COMMAND_CATALOG = [
16636
16730
  "description": "Host session id",
16637
16731
  "hidden": false
16638
16732
  },
16733
+ {
16734
+ "flags": "--claims <ids>",
16735
+ "description": "Exact comma-separated recipient receipt IDs",
16736
+ "hidden": false
16737
+ },
16639
16738
  {
16640
16739
  "flags": "--text <message>",
16641
16740
  "description": "Message text",
@@ -16715,6 +16814,179 @@ export const COMMAND_CATALOG = [
16715
16814
  "description": "Host session id",
16716
16815
  "hidden": false
16717
16816
  },
16817
+ {
16818
+ "flags": "--claims <ids>",
16819
+ "description": "Exact comma-separated recipient receipt IDs",
16820
+ "hidden": false
16821
+ },
16822
+ {
16823
+ "flags": "--text <message>",
16824
+ "description": "Message text",
16825
+ "hidden": false
16826
+ },
16827
+ {
16828
+ "flags": "--text-file <path>",
16829
+ "description": "Read message text from a file",
16830
+ "hidden": false
16831
+ },
16832
+ {
16833
+ "flags": "--state <state>",
16834
+ "description": "Child state",
16835
+ "hidden": false
16836
+ },
16837
+ {
16838
+ "flags": "--note <note>",
16839
+ "description": "State note",
16840
+ "hidden": false
16841
+ },
16842
+ {
16843
+ "flags": "--timeout <seconds>",
16844
+ "description": "Wait timeout in seconds",
16845
+ "hidden": false
16846
+ }
16847
+ ],
16848
+ "subcommands": []
16849
+ },
16850
+ {
16851
+ "name": "ack",
16852
+ "description": "",
16853
+ "aliases": [],
16854
+ "hidden": false,
16855
+ "helpOption": true,
16856
+ "helpCommand": false,
16857
+ "usage": "[options]",
16858
+ "helpText": [],
16859
+ "arguments": [],
16860
+ "options": [
16861
+ {
16862
+ "flags": "--json",
16863
+ "description": "Print JSON output (the default)",
16864
+ "hidden": false
16865
+ },
16866
+ {
16867
+ "flags": "--session-id <id>",
16868
+ "description": "Act as this session",
16869
+ "hidden": false
16870
+ },
16871
+ {
16872
+ "flags": "--link <id>",
16873
+ "description": "Conduct link id",
16874
+ "hidden": false
16875
+ },
16876
+ {
16877
+ "flags": "--child <name|all>",
16878
+ "description": "Child name or all children",
16879
+ "hidden": false
16880
+ },
16881
+ {
16882
+ "flags": "--name <name>",
16883
+ "description": "Child name",
16884
+ "hidden": false
16885
+ },
16886
+ {
16887
+ "flags": "--engine <engine>",
16888
+ "description": "Session engine",
16889
+ "hidden": false
16890
+ },
16891
+ {
16892
+ "flags": "--title <title>",
16893
+ "description": "Session title",
16894
+ "hidden": false
16895
+ },
16896
+ {
16897
+ "flags": "--host-session <id>",
16898
+ "description": "Host session id",
16899
+ "hidden": false
16900
+ },
16901
+ {
16902
+ "flags": "--claims <ids>",
16903
+ "description": "Exact comma-separated recipient receipt IDs",
16904
+ "hidden": false
16905
+ },
16906
+ {
16907
+ "flags": "--text <message>",
16908
+ "description": "Message text",
16909
+ "hidden": false
16910
+ },
16911
+ {
16912
+ "flags": "--text-file <path>",
16913
+ "description": "Read message text from a file",
16914
+ "hidden": false
16915
+ },
16916
+ {
16917
+ "flags": "--state <state>",
16918
+ "description": "Child state",
16919
+ "hidden": false
16920
+ },
16921
+ {
16922
+ "flags": "--note <note>",
16923
+ "description": "State note",
16924
+ "hidden": false
16925
+ },
16926
+ {
16927
+ "flags": "--timeout <seconds>",
16928
+ "description": "Wait timeout in seconds",
16929
+ "hidden": false
16930
+ }
16931
+ ],
16932
+ "subcommands": []
16933
+ },
16934
+ {
16935
+ "name": "capabilities",
16936
+ "description": "",
16937
+ "aliases": [],
16938
+ "hidden": false,
16939
+ "helpOption": true,
16940
+ "helpCommand": false,
16941
+ "usage": "[options]",
16942
+ "helpText": [],
16943
+ "arguments": [],
16944
+ "options": [
16945
+ {
16946
+ "flags": "--json",
16947
+ "description": "Print JSON output (the default)",
16948
+ "hidden": false
16949
+ },
16950
+ {
16951
+ "flags": "--session-id <id>",
16952
+ "description": "Act as this session",
16953
+ "hidden": false
16954
+ },
16955
+ {
16956
+ "flags": "--link <id>",
16957
+ "description": "Conduct link id",
16958
+ "hidden": false
16959
+ },
16960
+ {
16961
+ "flags": "--child <name|all>",
16962
+ "description": "Child name or all children",
16963
+ "hidden": false
16964
+ },
16965
+ {
16966
+ "flags": "--name <name>",
16967
+ "description": "Child name",
16968
+ "hidden": false
16969
+ },
16970
+ {
16971
+ "flags": "--engine <engine>",
16972
+ "description": "Session engine",
16973
+ "hidden": false
16974
+ },
16975
+ {
16976
+ "flags": "--title <title>",
16977
+ "description": "Session title",
16978
+ "hidden": false
16979
+ },
16980
+ {
16981
+ "flags": "--host-session <id>",
16982
+ "description": "Host session id",
16983
+ "hidden": false
16984
+ },
16985
+ {
16986
+ "flags": "--claims <ids>",
16987
+ "description": "Exact comma-separated recipient receipt IDs",
16988
+ "hidden": false
16989
+ },
16718
16990
  {
16719
16991
  "flags": "--text <message>",
16720
16992
  "description": "Message text",
@@ -16794,6 +17066,11 @@ export const COMMAND_CATALOG = [
16794
17066
  "description": "Host session id",
16795
17067
  "hidden": false
16796
17068
  },
17069
+ {
17070
+ "flags": "--claims <ids>",
17071
+ "description": "Exact comma-separated recipient receipt IDs",
17072
+ "hidden": false
17073
+ },
16797
17074
  {
16798
17075
  "flags": "--text <message>",
16799
17076
  "description": "Message text",
@@ -16873,6 +17150,11 @@ export const COMMAND_CATALOG = [
16873
17150
  "description": "Host session id",
16874
17151
  "hidden": false
16875
17152
  },
17153
+ {
17154
+ "flags": "--claims <ids>",
17155
+ "description": "Exact comma-separated recipient receipt IDs",
17156
+ "hidden": false
17157
+ },
16876
17158
  {
16877
17159
  "flags": "--text <message>",
16878
17160
  "description": "Message text",
@@ -16952,6 +17234,11 @@ export const COMMAND_CATALOG = [
16952
17234
  "description": "Host session id",
16953
17235
  "hidden": false
16954
17236
  },
17237
+ {
17238
+ "flags": "--claims <ids>",
17239
+ "description": "Exact comma-separated recipient receipt IDs",
17240
+ "hidden": false
17241
+ },
16955
17242
  {
16956
17243
  "flags": "--text <message>",
16957
17244
  "description": "Message text",
@@ -17031,6 +17318,11 @@ export const COMMAND_CATALOG = [
17031
17318
  "description": "Host session id",
17032
17319
  "hidden": false
17033
17320
  },
17321
+ {
17322
+ "flags": "--claims <ids>",
17323
+ "description": "Exact comma-separated recipient receipt IDs",
17324
+ "hidden": false
17325
+ },
17034
17326
  {
17035
17327
  "flags": "--text <message>",
17036
17328
  "description": "Message text",
@@ -17110,6 +17402,11 @@ export const COMMAND_CATALOG = [
17110
17402
  "description": "Host session id",
17111
17403
  "hidden": false
17112
17404
  },
17405
+ {
17406
+ "flags": "--claims <ids>",
17407
+ "description": "Exact comma-separated recipient receipt IDs",
17408
+ "hidden": false
17409
+ },
17113
17410
  {
17114
17411
  "flags": "--text <message>",
17115
17412
  "description": "Message text",
@@ -17189,6 +17486,11 @@ export const COMMAND_CATALOG = [
17189
17486
  "description": "Host session id",
17190
17487
  "hidden": false
17191
17488
  },
17489
+ {
17490
+ "flags": "--claims <ids>",
17491
+ "description": "Exact comma-separated recipient receipt IDs",
17492
+ "hidden": false
17493
+ },
17192
17494
  {
17193
17495
  "flags": "--text <message>",
17194
17496
  "description": "Message text",
@@ -17268,6 +17570,11 @@ export const COMMAND_CATALOG = [
17268
17570
  "description": "Host session id",
17269
17571
  "hidden": false
17270
17572
  },
17573
+ {
17574
+ "flags": "--claims <ids>",
17575
+ "description": "Exact comma-separated recipient receipt IDs",
17576
+ "hidden": false
17577
+ },
17271
17578
  {
17272
17579
  "flags": "--text <message>",
17273
17580
  "description": "Message text",
@@ -17347,6 +17654,11 @@ export const COMMAND_CATALOG = [
17347
17654
  "description": "Host session id",
17348
17655
  "hidden": false
17349
17656
  },
17657
+ {
17658
+ "flags": "--claims <ids>",
17659
+ "description": "Exact comma-separated recipient receipt IDs",
17660
+ "hidden": false
17661
+ },
17350
17662
  {
17351
17663
  "flags": "--text <message>",
17352
17664
  "description": "Message text",
@@ -17391,6 +17703,11 @@ export const COMMAND_CATALOG = [
17391
17703
  "description": "Hook event",
17392
17704
  "hidden": false
17393
17705
  },
17706
+ {
17707
+ "flags": "--ack-mode <mode>",
17708
+ "description": "Internal explicit recipient acknowledgement",
17709
+ "hidden": false
17710
+ },
17394
17711
  {
17395
17712
  "flags": "--json",
17396
17713
  "description": "JSON on stdout (always)",
@@ -135,6 +135,12 @@ export declare const REGISTRATION_PLAN: readonly [{
135
135
  readonly parent: "sync";
136
136
  readonly module: "./commands/sync-manifest.js";
137
137
  readonly exportName: "registerSyncManifestCommand";
138
+ }, {
139
+ readonly type: "registrar";
140
+ readonly root: "sync";
141
+ readonly parent: "sync";
142
+ readonly module: "./commands/sync-held.js";
143
+ readonly exportName: "registerSyncHeldCommands";
138
144
  }, {
139
145
  readonly type: "group";
140
146
  readonly root: "cloud";
@@ -25,6 +25,7 @@ export const REGISTRATION_PLAN = [
25
25
  { type: "registrar", root: "sync", parent: "sync", module: "./commands/sync-mode.js", exportName: "registerSyncModeCommand" },
26
26
  { type: "registrar", root: "sync", parent: "sync", module: "./commands/sync-narrow.js", exportName: "registerSyncNarrowCommand" },
27
27
  { type: "registrar", root: "sync", parent: "sync", module: "./commands/sync-manifest.js", exportName: "registerSyncManifestCommand" },
28
+ { type: "registrar", root: "sync", parent: "sync", module: "./commands/sync-held.js", exportName: "registerSyncHeldCommands" },
28
29
  { type: "group", root: "cloud", id: "cloud", name: "cloud", description: "Cloud commands — provision entities and manage cloud-backed companies" },
29
30
  { type: "registrar", root: "cloud", parent: "cloud", module: "./commands/cloud-provision.js", exportName: "registerCloudProvisionCommands" },
30
31
  { type: "registrar", root: "cloud", parent: "cloud", module: "./commands/cloud-retire.js", exportName: "registerCloudRetireCommands" },
@@ -33,7 +33,9 @@ export function registerAgentInboxCommand(agent) {
33
33
  baseUrl: creds.apiBaseUrl,
34
34
  path: `/v1/agents/${encodeURIComponent(creds.entityUid)}/inbox`,
35
35
  });
36
- return { status: res.status, body: await res.json().catch(() => ({})) };
36
+ // Preserve a decode failure as an invalid body for mergeAgentInbox to
37
+ // classify. Parser errors can contain response bytes: do not echo them.
38
+ return { status: res.status, body: await res.json().catch(() => undefined) };
37
39
  });
38
40
  const rows = entries
39
41
  .filter((e) => opts.all || !done.has(e.id))
@@ -45,7 +47,9 @@ export function registerAgentInboxCommand(agent) {
45
47
  if (note)
46
48
  console.error(chalk.yellow(note));
47
49
  if (rows.length === 0) {
48
- console.log(opts.all ? "Inbox is empty." : "No pending messages.");
50
+ console.log(note
51
+ ? "No matching messages can be confirmed; the server inbox could not be read completely."
52
+ : opts.all ? "Inbox is empty." : "No pending messages.");
49
53
  return;
50
54
  }
51
55
  for (const r of rows) {
@@ -385,7 +385,10 @@ export function registerAuthCommands(program) {
385
385
  if (!options.retry) {
386
386
  const state = keychain.readKeychainAccessState();
387
387
  if (state.deniedAt) {
388
- console.log("Keychain access wasn't allowed, so HQ uses ~/.hq/cognito-tokens.json. Run `hq auth keychain --retry` to ask again.");
388
+ console.log("Keychain access did not complete, so HQ uses ~/.hq/cognito-tokens.json. Run `hq auth keychain --retry` to ask again.");
389
+ }
390
+ else if (state.lastFailureAt) {
391
+ console.log("Keychain access did not complete. HQ uses your saved sign-in instead and can ask again from a terminal. Run `hq auth keychain --retry` to retry now.");
389
392
  }
390
393
  else if (state.allowedAt) {
391
394
  console.log(chalk.green("HQ can read your sign-in from the Keychain."));
@@ -395,9 +398,7 @@ export function registerAuthCommands(program) {
395
398
  }
396
399
  return;
397
400
  }
398
- const state = keychain.readKeychainAccessState();
399
- if (!state.allowedAt)
400
- console.error(keychain.KEYCHAIN_FIRST_READ_NOTE);
401
+ console.error(keychain.KEYCHAIN_FIRST_READ_NOTE);
401
402
  const result = keychain.readKeychainTokensDetailed({ retry: true, interactive: true, notify: () => { } });
402
403
  if (result.outcome === "hit") {
403
404
  console.log(result.tokens
@@ -408,7 +409,7 @@ export function registerAuthCommands(program) {
408
409
  console.log("No HQ sign-in is saved in the Keychain yet. HQ will use ~/.hq/cognito-tokens.json.");
409
410
  }
410
411
  else {
411
- console.log(chalk.yellow("Keychain access wasn't allowed. HQ will use ~/.hq/cognito-tokens.json. Run `hq auth keychain --retry` to ask again."));
412
+ console.log(chalk.yellow("Keychain access did not complete. HQ will use ~/.hq/cognito-tokens.json. Run `hq auth keychain --retry` to ask again."));
412
413
  }
413
414
  });
414
415
  authCmd
@@ -1,6 +1,7 @@
1
1
  export type SessionHelperRuntimeOverrides = {
2
2
  env?: NodeJS.ProcessEnv;
3
3
  now?: () => Date;
4
+ beforeCounterAction?: () => void;
4
5
  };
5
6
  export type SessionHelperRuntime = {
6
7
  env: NodeJS.ProcessEnv;
@@ -1,6 +1,7 @@
1
1
  type SessionHelperRuntimeOverrides = {
2
2
  env?: NodeJS.ProcessEnv;
3
3
  now?: () => Date;
4
+ beforeCounterAction?: () => void;
4
5
  };
5
6
  export type SessionJournalOperationResult = {
6
7
  code: number;