@pushary/agent-hooks 1.9.12 → 1.9.14

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 (102) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/data/cursor-plugin/scripts/pushary-gate.mjs +7 -2
  3. package/dist/bin/pushary-bell-hook.js +25 -25
  4. package/dist/bin/pushary-bell.js +9 -9
  5. package/dist/bin/pushary-claude.js +26 -25
  6. package/dist/bin/pushary-clean.js +52 -30
  7. package/dist/bin/pushary-codex-bridge.js +17 -17
  8. package/dist/bin/pushary-codex-hook.js +30 -30
  9. package/dist/bin/pushary-codex.js +12 -12
  10. package/dist/bin/pushary-connect.js +24 -24
  11. package/dist/bin/pushary-cowork.js +5 -5
  12. package/dist/bin/pushary-daemon.js +31 -31
  13. package/dist/bin/pushary-disconnect.js +39 -25
  14. package/dist/bin/pushary-doctor.js +33 -33
  15. package/dist/bin/pushary-elicitation-hook.js +25 -25
  16. package/dist/bin/pushary-gemini-bridge.js +13 -13
  17. package/dist/bin/pushary-gemini-hook.js +27 -27
  18. package/dist/bin/pushary-hook.js +29 -29
  19. package/dist/bin/pushary-login.js +12 -12
  20. package/dist/bin/pushary-logout.js +10 -10
  21. package/dist/bin/pushary-mcp.js +9 -9
  22. package/dist/bin/pushary-mode.js +12 -12
  23. package/dist/bin/pushary-notification-hook.js +24 -24
  24. package/dist/bin/pushary-opencode-hook.js +26 -26
  25. package/dist/bin/pushary-permission-denied-hook.js +29 -29
  26. package/dist/bin/pushary-permission-hook.js +28 -28
  27. package/dist/bin/pushary-post-hook.js +24 -24
  28. package/dist/bin/pushary-prompt-hook.js +24 -24
  29. package/dist/bin/pushary-session-end-hook.js +24 -24
  30. package/dist/bin/pushary-session-start-hook.js +28 -28
  31. package/dist/bin/pushary-setup.js +69 -41
  32. package/dist/bin/pushary-stats.js +5 -5
  33. package/dist/bin/pushary-status.js +26 -26
  34. package/dist/bin/pushary-stop-hook.js +24 -24
  35. package/dist/bin/pushary-stopfailure-hook.js +24 -24
  36. package/dist/bin/pushary-suggestions.js +12 -12
  37. package/dist/bin/pushary-transcript-register.js +17 -17
  38. package/dist/bin/pushary-transcripts.js +7 -7
  39. package/dist/bin/pushary-upgrade.js +30 -30
  40. package/dist/bin/pushary-wait.js +12 -12
  41. package/dist/bin/pushary.js +6 -6
  42. package/dist/{chunk-FSCWOYK6.js → chunk-2A234H3F.js} +3 -3
  43. package/dist/{chunk-DYQ5QIDN.js → chunk-2NIBBM3N.js} +2 -2
  44. package/dist/{chunk-FLPXTN3Q.js → chunk-2Q6IT5PR.js} +1 -1
  45. package/dist/{chunk-LBDMCNQY.js → chunk-2QASSTM5.js} +2 -2
  46. package/dist/{chunk-AWD2SLNA.js → chunk-2WWHZTI5.js} +13 -4
  47. package/dist/{chunk-J5XCHLP4.js → chunk-2Z56BRTF.js} +2 -2
  48. package/dist/{chunk-MEHDBT5H.js → chunk-34PUBGLS.js} +2 -2
  49. package/dist/{chunk-BX2R7SIY.js → chunk-3KHQWC4F.js} +6 -6
  50. package/dist/{chunk-CMZ4CW5J.js → chunk-3U4R475X.js} +3 -3
  51. package/dist/{chunk-RBBMGCSZ.js → chunk-3XAUHY35.js} +1 -1
  52. package/dist/{chunk-E2FGVADR.js → chunk-42WYKVHL.js} +2 -2
  53. package/dist/{chunk-BNQKHPEC.js → chunk-4BXVGCPE.js} +4 -4
  54. package/dist/{chunk-Z6VYZSVA.js → chunk-5RONPCMH.js} +5 -5
  55. package/dist/{chunk-GP44LTXN.js → chunk-5UYAJVAQ.js} +1 -1
  56. package/dist/{chunk-CXKY5FGY.js → chunk-5VP72OOI.js} +8 -8
  57. package/dist/{chunk-M2P3HQA3.js → chunk-7MGNY7S3.js} +1 -1
  58. package/dist/{chunk-2QJ6K2SR.js → chunk-7SIZISYH.js} +5 -5
  59. package/dist/{chunk-ZC6EVOX6.js → chunk-AJRT3JGE.js} +1 -1
  60. package/dist/{chunk-UEQWLVJB.js → chunk-APG7IAUK.js} +1 -1
  61. package/dist/{chunk-CPUEZAE2.js → chunk-ARM4DMIL.js} +1 -1
  62. package/dist/{chunk-CATIBZQH.js → chunk-CIZQARGJ.js} +3 -3
  63. package/dist/{chunk-ZHF4JDVE.js → chunk-CT4BJEU7.js} +1 -1
  64. package/dist/{chunk-PKQ435Z2.js → chunk-DVTXGXXL.js} +1 -1
  65. package/dist/{chunk-WBSL4FBX.js → chunk-EB6LH3U6.js} +3 -3
  66. package/dist/{chunk-EYLQVCME.js → chunk-ECU2Y7D2.js} +2 -2
  67. package/dist/{chunk-RYBAJXV4.js → chunk-FKQMH2DW.js} +1 -1
  68. package/dist/{chunk-TZCHW6KR.js → chunk-H7MTFFNI.js} +4 -4
  69. package/dist/{chunk-SQJUXVLW.js → chunk-J5RQW52I.js} +2 -2
  70. package/dist/{chunk-4DWQNP52.js → chunk-JHDHC2M7.js} +4 -4
  71. package/dist/{chunk-NDZKDJQU.js → chunk-K2IUMMZJ.js} +1 -1
  72. package/dist/{chunk-PNBJAYSL.js → chunk-LETLRKSY.js} +1 -1
  73. package/dist/{chunk-5VUB6VVO.js → chunk-LRZMGU7T.js} +4 -4
  74. package/dist/{chunk-CKUACXAX.js → chunk-MSEUUAJ7.js} +5 -5
  75. package/dist/{chunk-QOBOIFGG.js → chunk-NAROM5IR.js} +37 -7
  76. package/dist/{chunk-3VPS7JPH.js → chunk-NMDGIMDV.js} +2 -2
  77. package/dist/{chunk-GTM7C36Y.js → chunk-NNCK2PUR.js} +2 -2
  78. package/dist/{chunk-JNDELCH5.js → chunk-NXJNYAP7.js} +1 -1
  79. package/dist/{chunk-VDPU4YQN.js → chunk-OMR3P7PJ.js} +27 -18
  80. package/dist/{chunk-BOHDM4T7.js → chunk-POJUUEGO.js} +10 -5
  81. package/dist/{chunk-DWHCF4RH.js → chunk-PWO6T7JG.js} +5 -5
  82. package/dist/chunk-Q7JWY33N.js +111 -0
  83. package/dist/{chunk-5HPC3RNE.js → chunk-QD6GQDYW.js} +1 -1
  84. package/dist/{chunk-TSGQYARU.js → chunk-RMWV3MYN.js} +4 -4
  85. package/dist/{chunk-KXCWWHYO.js → chunk-RV4U3LYL.js} +3 -3
  86. package/dist/{chunk-SJ7M37RL.js → chunk-SEQSZYLW.js} +5 -5
  87. package/dist/{chunk-JKGTASA2.js → chunk-VYXXAFIA.js} +1 -1
  88. package/dist/{chunk-7U26QSMF.js → chunk-WYPQKDKX.js} +8 -8
  89. package/dist/{chunk-2GBUL4NP.js → chunk-XJKM6NQS.js} +6 -6
  90. package/dist/{chunk-A2DW2RNT.js → chunk-Y6IKUCVF.js} +2 -2
  91. package/dist/{chunk-YZWUTWDG.js → chunk-YSVCBUT3.js} +2 -2
  92. package/dist/{chunk-OBGZUD73.js → chunk-ZECHTK3K.js} +3 -3
  93. package/dist/{chunk-WKP2KRTU.js → chunk-ZSL7B7NF.js} +2 -2
  94. package/dist/{chunk-2NKTEA42.js → chunk-ZVFKNSRX.js} +1 -1
  95. package/dist/{global-upgrade-OCZWEF3A.js → global-upgrade-P5CJ22AW.js} +6 -6
  96. package/dist/{paths-SOGZJICO.js → paths-XZE2MPTP.js} +2 -2
  97. package/dist/{reapply-DFG5IE6N.js → reapply-V4GMKCGP.js} +20 -20
  98. package/dist/src/index.d.ts +1 -0
  99. package/dist/src/index.js +19 -19
  100. package/dist/{upgrade-lock-XLE5GVWS.js → upgrade-lock-DQF62B6X.js} +3 -3
  101. package/package.json +1 -1
  102. package/dist/chunk-PMUOEEUE.js +0 -50
@@ -6,38 +6,38 @@ import {
6
6
  } from "./chunk-SGZJ5LYH.js";
7
7
  import {
8
8
  ensureDaemonRunning
9
- } from "./chunk-2QJ6K2SR.js";
9
+ } from "./chunk-7SIZISYH.js";
10
10
  import {
11
11
  buildTranscriptRecords,
12
12
  decodePublicKey,
13
13
  generateSessionKey,
14
14
  wrapSessionKey
15
- } from "./chunk-PKQ435Z2.js";
15
+ } from "./chunk-DVTXGXXL.js";
16
16
  import {
17
17
  fetchTranscriptRecipients,
18
18
  uploadTranscriptRecords
19
- } from "./chunk-ZHF4JDVE.js";
19
+ } from "./chunk-CT4BJEU7.js";
20
20
  import {
21
21
  transcriptEnvironmentPreference,
22
22
  transcriptsEnabled
23
- } from "./chunk-M2P3HQA3.js";
23
+ } from "./chunk-7MGNY7S3.js";
24
24
  import {
25
25
  hookOwnerOf
26
- } from "./chunk-SJ7M37RL.js";
26
+ } from "./chunk-SEQSZYLW.js";
27
27
  import {
28
28
  readTranscriptPreference
29
- } from "./chunk-3VPS7JPH.js";
29
+ } from "./chunk-NMDGIMDV.js";
30
30
  import {
31
31
  codexHome,
32
32
  pusharyDir
33
- } from "./chunk-AWD2SLNA.js";
33
+ } from "./chunk-2WWHZTI5.js";
34
34
  import {
35
35
  writeJsonAtomic
36
36
  } from "./chunk-T7E75EKA.js";
37
37
  import {
38
38
  getApiKey,
39
39
  getBaseUrl
40
- } from "./chunk-ZC6EVOX6.js";
40
+ } from "./chunk-AJRT3JGE.js";
41
41
 
42
42
  // src/transcript-registration.ts
43
43
  import { createHash } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readTranscriptPreference
3
- } from "./chunk-3VPS7JPH.js";
3
+ } from "./chunk-NMDGIMDV.js";
4
4
 
5
5
  // src/transcript-setting.ts
6
6
  var transcriptEnvironmentPreference = () => {
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-XHKBHWLX.js";
5
5
  import {
6
6
  readControlMode
7
- } from "./chunk-3VPS7JPH.js";
7
+ } from "./chunk-NMDGIMDV.js";
8
8
  import {
9
9
  getMachineId
10
- } from "./chunk-2NKTEA42.js";
10
+ } from "./chunk-ZVFKNSRX.js";
11
11
  import {
12
12
  pusharyDir,
13
13
  resolveGlobalBinary
14
- } from "./chunk-AWD2SLNA.js";
14
+ } from "./chunk-2WWHZTI5.js";
15
15
  import {
16
16
  readJsonSafe,
17
17
  writeFileAtomic,
@@ -20,14 +20,14 @@ import {
20
20
  } from "./chunk-T7E75EKA.js";
21
21
  import {
22
22
  getApiKey
23
- } from "./chunk-ZC6EVOX6.js";
23
+ } from "./chunk-AJRT3JGE.js";
24
24
  import {
25
25
  CLI_PACKAGE_NAMES,
26
26
  cmdShimTarget,
27
27
  getPackageVersion,
28
28
  globalPackageFolder,
29
29
  globalRootFor
30
- } from "./chunk-QOBOIFGG.js";
30
+ } from "./chunk-NAROM5IR.js";
31
31
 
32
32
  // src/daemon-lifecycle.ts
33
33
  import { dirname, join, win32 as win32Path } from "path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  NPX_LATEST_COMMAND
3
- } from "./chunk-RYBAJXV4.js";
3
+ } from "./chunk-FKQMH2DW.js";
4
4
 
5
5
  // src/config.ts
6
6
  import { readFileSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOOK_HOLD_BUDGET_ENV,
3
3
  hookHoldBudgetProof
4
- } from "./chunk-QOBOIFGG.js";
4
+ } from "./chunk-NAROM5IR.js";
5
5
 
6
6
  // src/hold-budget.ts
7
7
  var takeHookHoldBudget = (args = process.argv.slice(2), env = process.env) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_SESSION
3
- } from "./chunk-7U26QSMF.js";
3
+ } from "./chunk-WYPQKDKX.js";
4
4
 
5
5
  // src/answer.ts
6
6
  var denyReasonFrom = (value, note) => {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  keyCheckFromResponse
3
- } from "./chunk-CMZ4CW5J.js";
3
+ } from "./chunk-3U4R475X.js";
4
4
  import {
5
5
  installNetworkDefaults
6
- } from "./chunk-WBSL4FBX.js";
6
+ } from "./chunk-EB6LH3U6.js";
7
7
  import {
8
8
  getBaseUrl
9
- } from "./chunk-ZC6EVOX6.js";
9
+ } from "./chunk-AJRT3JGE.js";
10
10
 
11
11
  // src/retry.ts
12
12
  var isRetryable = (err) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getBaseUrl
3
- } from "./chunk-ZC6EVOX6.js";
3
+ } from "./chunk-AJRT3JGE.js";
4
4
 
5
5
  // src/transcript-api.ts
6
6
  var fetchTranscriptRecipients = async (apiKey, baseUrl = getBaseUrl()) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactSecretsFromContent
3
- } from "./chunk-QOBOIFGG.js";
3
+ } from "./chunk-NAROM5IR.js";
4
4
 
5
5
  // src/crypto.ts
6
6
  import nacl from "tweetnacl";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  readExistingMachineId
3
- } from "./chunk-2NKTEA42.js";
3
+ } from "./chunk-ZVFKNSRX.js";
4
4
  import {
5
5
  NetworkError
6
6
  } from "./chunk-7QLSKOSU.js";
7
7
  import {
8
8
  getBaseUrl
9
- } from "./chunk-ZC6EVOX6.js";
9
+ } from "./chunk-AJRT3JGE.js";
10
10
  import {
11
11
  clientContextHeaders,
12
12
  getPackageVersion
13
- } from "./chunk-QOBOIFGG.js";
13
+ } from "./chunk-NAROM5IR.js";
14
14
 
15
15
  // src/cli/net.ts
16
16
  import { createRequire } from "module";
@@ -10,10 +10,10 @@ import {
10
10
  resolvePackageVersionFromBinary,
11
11
  resolvePathBinary,
12
12
  resolvePathBinaryAsync
13
- } from "./chunk-AWD2SLNA.js";
13
+ } from "./chunk-2WWHZTI5.js";
14
14
  import {
15
15
  MANAGED_PROVIDERS
16
- } from "./chunk-QOBOIFGG.js";
16
+ } from "./chunk-NAROM5IR.js";
17
17
 
18
18
  // src/setup/codex-install.ts
19
19
  var NATIVE_BINARY_MIN_BYTES = 20 * 1024 * 1024;
@@ -2,7 +2,7 @@ import {
2
2
  DISCONNECT_AGENT_IDS,
3
3
  SETUP_AGENT_CHOICES,
4
4
  isApprovalMode
5
- } from "./chunk-QOBOIFGG.js";
5
+ } from "./chunk-NAROM5IR.js";
6
6
 
7
7
  // src/cli/mode-request.ts
8
8
  var parseDuration = (value) => {
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  macAppBridgeAvailable
3
- } from "./chunk-Z6VYZSVA.js";
3
+ } from "./chunk-5RONPCMH.js";
4
4
  import {
5
5
  keyPrefix
6
- } from "./chunk-3VPS7JPH.js";
6
+ } from "./chunk-NMDGIMDV.js";
7
7
  import {
8
8
  bridgeAgentKey
9
- } from "./chunk-AWD2SLNA.js";
9
+ } from "./chunk-2WWHZTI5.js";
10
10
  import {
11
11
  readJsonSafe
12
12
  } from "./chunk-T7E75EKA.js";
13
13
  import {
14
14
  isValidApiKey
15
- } from "./chunk-QOBOIFGG.js";
15
+ } from "./chunk-NAROM5IR.js";
16
16
 
17
17
  // src/shared-mcp-key.ts
18
18
  var asRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
@@ -3,10 +3,10 @@ import {
3
3
  keyPrefix,
4
4
  readConfigFileKey,
5
5
  readMacAppKeyPrefix
6
- } from "./chunk-3VPS7JPH.js";
6
+ } from "./chunk-NMDGIMDV.js";
7
7
  import {
8
8
  NPX_LATEST_COMMAND
9
- } from "./chunk-RYBAJXV4.js";
9
+ } from "./chunk-FKQMH2DW.js";
10
10
 
11
11
  // src/key-signed-out.ts
12
12
  var VERDICT_BY_CHECK = {
@@ -2,25 +2,25 @@ import {
2
2
  SIGNED_OUT_ON_MAC_MESSAGE,
3
3
  describeSignedOutKey,
4
4
  readSignedOutDiagnosis
5
- } from "./chunk-SQJUXVLW.js";
5
+ } from "./chunk-J5RQW52I.js";
6
6
  import {
7
7
  createIo
8
8
  } from "./chunk-U4TMAANR.js";
9
9
  import {
10
10
  readKeySource
11
- } from "./chunk-3VPS7JPH.js";
11
+ } from "./chunk-NMDGIMDV.js";
12
12
  import {
13
13
  absoluteUrl,
14
14
  checkApiKey,
15
15
  describeKeyCheck,
16
16
  keyCheckFromResponse
17
- } from "./chunk-CMZ4CW5J.js";
17
+ } from "./chunk-3U4R475X.js";
18
18
  import {
19
19
  EXIT
20
20
  } from "./chunk-KZERVKTD.js";
21
21
  import {
22
22
  getBaseUrl
23
- } from "./chunk-ZC6EVOX6.js";
23
+ } from "./chunk-AJRT3JGE.js";
24
24
 
25
25
  // src/cli/report-key.ts
26
26
  var { dim, yellow } = createIo();
@@ -10,7 +10,7 @@ import {
10
10
  isSetupConnectMode,
11
11
  isValidApiKey,
12
12
  normalizeAgentId
13
- } from "./chunk-QOBOIFGG.js";
13
+ } from "./chunk-NAROM5IR.js";
14
14
 
15
15
  // src/setup/options.ts
16
16
  var AGENT_CHOICES = SETUP_AGENT_CHOICES;
@@ -2,7 +2,7 @@ import {
2
2
  autoUpdateLock,
3
3
  installPackageGlobally,
4
4
  npmErrorMessage
5
- } from "./chunk-AWD2SLNA.js";
5
+ } from "./chunk-2WWHZTI5.js";
6
6
  import {
7
7
  writeJsonAtomic
8
8
  } from "./chunk-T7E75EKA.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  registerTranscript
3
- } from "./chunk-CXKY5FGY.js";
3
+ } from "./chunk-5VP72OOI.js";
4
4
  import {
5
5
  namedEvent
6
- } from "./chunk-BOHDM4T7.js";
6
+ } from "./chunk-POJUUEGO.js";
7
7
  import {
8
8
  writeDegraded
9
- } from "./chunk-DWHCF4RH.js";
9
+ } from "./chunk-PWO6T7JG.js";
10
10
  import {
11
11
  claudeShapedHookInput,
12
12
  hookCompatibleProfileBySource
13
- } from "./chunk-QOBOIFGG.js";
13
+ } from "./chunk-NAROM5IR.js";
14
14
 
15
15
  // src/tool-hook-input.ts
16
16
  var OPTIONAL_TEXT_FIELDS = ["hook_event_name", "session_id", "cwd", "transcript_path", "tool_use_id", "permission_mode"];
@@ -4,7 +4,7 @@ import {
4
4
  forkFinishWithUpgradeLock,
5
5
  installWithUpgradeLock,
6
6
  releaseAutoUpdateLock
7
- } from "./chunk-PNBJAYSL.js";
7
+ } from "./chunk-LETLRKSY.js";
8
8
  import {
9
9
  describeAutoUpdateCheck,
10
10
  globalInstallLocation,
@@ -14,7 +14,7 @@ import {
14
14
  readAutoUpdateState,
15
15
  updateAutoUpdateState,
16
16
  upgradeEntryFor
17
- } from "./chunk-J5XCHLP4.js";
17
+ } from "./chunk-2Z56BRTF.js";
18
18
  import {
19
19
  EXIT
20
20
  } from "./chunk-KZERVKTD.js";
@@ -27,10 +27,10 @@ import {
27
27
  npmErrorMessage,
28
28
  readGlobalCliInstallAt,
29
29
  readGlobalPrefix
30
- } from "./chunk-AWD2SLNA.js";
30
+ } from "./chunk-2WWHZTI5.js";
31
31
  import {
32
32
  NPX_LATEST_COMMAND
33
- } from "./chunk-RYBAJXV4.js";
33
+ } from "./chunk-FKQMH2DW.js";
34
34
  import {
35
35
  commandsPackage,
36
36
  globalUpgradeEntry,
@@ -39,7 +39,7 @@ import {
39
39
  isSameMajorVersion,
40
40
  ownPackageRoot,
41
41
  packageVersionAt
42
- } from "./chunk-QOBOIFGG.js";
42
+ } from "./chunk-NAROM5IR.js";
43
43
 
44
44
  // src/global-upgrade.ts
45
45
  import { existsSync } from "fs";
@@ -239,7 +239,7 @@ var AGENTS = {
239
239
  connectVia: "Native hooks + MCP",
240
240
  setupCommand: PUSHARY_SETUP_COMMAND,
241
241
  enforcementDetail: "Shell commands, file writes, edits and MCP calls through native PreToolUse hooks in ~/.gemini/config/hooks.json, answered allow or deny.",
242
- capabilityNote: 'Antigravity CLI ignores a hook\'s allow unless it runs in always-proceed mode (`toolPermission: "always-proceed"` or `--dangerously-skip-permissions`), so approving from the phone needs that mode, with Pushary as the only gate. Pushary answers allow or deny and never ask, because ask and force_ask run the call unprompted in that mode. An unanswered approval is blocked with a reason.'
242
+ capabilityNote: 'Antigravity CLI ignores a hook\'s allow unless it runs in always-proceed mode, so connecting it sets `toolPermission: "always-proceed"` when you never chose a mode, and disconnecting puts it back. Pushary is then the only gate: it answers allow or deny and never ask, and a call it cannot decide, one nobody answers, or one made after Pushary was removed is blocked with a reason.'
243
243
  },
244
244
  windsurf: {
245
245
  ...defaults,
@@ -332,6 +332,8 @@ var toToolLookup = (profile, toolName, toolInput, resolvePath = (path) => path)
332
332
  };
333
333
  var NO_AGENT_PROMPT_REASON = "Pushary needs an answer from the phone before this can run, and this agent has no approval prompt of its own here, so nothing ran. Ask the user, then try again.";
334
334
  var DENIED_BY_PUSHARY_REASON = "Denied from Pushary.";
335
+ var SOLE_GATE_UNDECIDED_REASON = "Pushary could not decide on this call, so it did not run. Pushary is the only approval for this agent. Check that Pushary is signed in and online, then try again.";
336
+ var SOLE_GATE_SIGNED_OUT_REASON = "Pushary is not signed in on this computer, so nothing can approve this call and it did not run. Sign in to Pushary, or disconnect this agent from Pushary.";
335
337
  var UNCARRIED_ANSWER_REASON = "The answer from the phone cannot be passed to this agent, so the call did not run. Ask the question in chat instead.";
336
338
  var renderAllowDenyDecision = (verdict) => {
337
339
  const { permissionDecision, permissionDecisionReason } = verdict.hookSpecificOutput;
@@ -357,6 +359,14 @@ var renderPreToolUseVerdict = (profile, verdict) => {
357
359
  ...stop
358
360
  };
359
361
  };
362
+ var homePath = (segments) => `~/${segments.join("/")}`;
363
+ var pusharyMissingReason = (profile) => {
364
+ const settingBack = profile.soleGate ? ` and remove ${profile.soleGate.key} from ${homePath(profile.soleGate.file)}` : "";
365
+ return `Pushary is not installed on this computer any more, so nothing can approve this call and it did not run. Reinstall Pushary, or remove the pushary hook from ${homePath(profile.configFile)}${settingBack}.`;
366
+ };
367
+ var refusalOutput = (profile, reason) => JSON.stringify(renderPreToolUseVerdict(profile, {
368
+ hookSpecificOutput: { permissionDecision: "deny", permissionDecisionReason: reason }
369
+ }));
360
370
  var ANTIGRAVITY_MCP_TOOL = "call_mcp_tool";
361
371
  var isPayloadRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
362
372
  var nonEmptyString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
@@ -442,7 +452,7 @@ var QWEN_CODE = {
442
452
  instructions: { file: [".qwen", "QWEN.md"], label: "Qwen Code" },
443
453
  permissionRuleFile: null,
444
454
  configDirIsShared: false,
445
- setupNote: null
455
+ soleGate: null
446
456
  };
447
457
  var CODEBUDDY = {
448
458
  agentType: "codebuddy",
@@ -465,7 +475,7 @@ var CODEBUDDY = {
465
475
  instructions: { file: [".codebuddy", "CODEBUDDY.md"], label: "CodeBuddy" },
466
476
  permissionRuleFile: [".codebuddy", "settings.json"],
467
477
  configDirIsShared: false,
468
- setupNote: null
478
+ soleGate: null
469
479
  };
470
480
  var QODER = {
471
481
  agentType: "qoder",
@@ -488,7 +498,7 @@ var QODER = {
488
498
  instructions: null,
489
499
  permissionRuleFile: null,
490
500
  configDirIsShared: false,
491
- setupNote: null
501
+ soleGate: null
492
502
  };
493
503
  var DROID = {
494
504
  agentType: "droid",
@@ -516,7 +526,7 @@ var DROID = {
516
526
  instructions: null,
517
527
  permissionRuleFile: null,
518
528
  configDirIsShared: false,
519
- setupNote: null
529
+ soleGate: null
520
530
  };
521
531
  var DEVIN = {
522
532
  agentType: "devin",
@@ -549,7 +559,7 @@ var DEVIN = {
549
559
  instructions: null,
550
560
  permissionRuleFile: null,
551
561
  configDirIsShared: false,
552
- setupNote: null
562
+ soleGate: null
553
563
  };
554
564
  var ANTIGRAVITY_CLI = {
555
565
  agentType: "antigravity_cli",
@@ -584,7 +594,12 @@ var ANTIGRAVITY_CLI = {
584
594
  instructions: null,
585
595
  permissionRuleFile: null,
586
596
  configDirIsShared: true,
587
- setupNote: 'Approvals from your phone take effect only when Antigravity CLI runs in always-proceed mode: start it with --dangerously-skip-permissions, or set "toolPermission": "always-proceed" in ~/.gemini/antigravity-cli/settings.json. Pushary is then the only gate, and an unanswered approval is blocked.'
597
+ soleGate: {
598
+ file: [".gemini", "antigravity-cli", "settings.json"],
599
+ key: "toolPermission",
600
+ value: "always-proceed",
601
+ receipt: [".pushary", "setup", "antigravity-tool-permission.json"]
602
+ }
588
603
  };
589
604
  var HOOK_COMPATIBLE_PROFILES = Object.freeze([QWEN_CODE, CODEBUDDY, QODER, DROID, DEVIN, ANTIGRAVITY_CLI]);
590
605
  var hookCompatibleProfile = (agentType) => HOOK_COMPATIBLE_PROFILES.find((profile) => profile.agentType === agentType);
@@ -885,6 +900,16 @@ var KEY_SCOPES = ["full_access", "agent", "connector", "bound"];
885
900
  var normalizeKeyScope = (value) => typeof value === "string" && KEY_SCOPES.includes(value) ? value : null;
886
901
  var APPROVAL_MODES = ["push_only", "terminal_only", "push_first", "notify_only"];
887
902
  var isApprovalMode = (value) => typeof value === "string" && APPROVAL_MODES.includes(value);
903
+ var approvalModeWithoutLocalPrompt = (mode) => {
904
+ switch (mode) {
905
+ case "push_first":
906
+ return "push_only";
907
+ case "push_only":
908
+ case "notify_only":
909
+ case "terminal_only":
910
+ return mode;
911
+ }
912
+ };
888
913
  var MAX_AGENT_QUESTIONS = 4;
889
914
  var parseAgentQuestion = (raw) => {
890
915
  const q = raw;
@@ -3019,7 +3044,11 @@ export {
3019
3044
  PHONE_ANSWERED_TOOLS,
3020
3045
  canonicalToolName,
3021
3046
  toToolLookup,
3047
+ SOLE_GATE_UNDECIDED_REASON,
3048
+ SOLE_GATE_SIGNED_OUT_REASON,
3022
3049
  renderPreToolUseVerdict,
3050
+ pusharyMissingReason,
3051
+ refusalOutput,
3023
3052
  claudeShapedHookInput,
3024
3053
  HOOK_COMPATIBLE_PROFILES,
3025
3054
  hookCompatibleProfile,
@@ -3049,6 +3078,7 @@ export {
3049
3078
  withoutDeclinedAgent,
3050
3079
  normalizeKeyScope,
3051
3080
  isApprovalMode,
3081
+ approvalModeWithoutLocalPrompt,
3052
3082
  parseAgentQuestion,
3053
3083
  parseAgentQuestions,
3054
3084
  parseAgentQuestionAnswers,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveInstallSourceFor
3
- } from "./chunk-WKP2KRTU.js";
3
+ } from "./chunk-ZSL7B7NF.js";
4
4
  import {
5
5
  backupFile,
6
6
  readJsonSafe,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-T7E75EKA.js";
10
10
  import {
11
11
  configFilePath
12
- } from "./chunk-ZC6EVOX6.js";
12
+ } from "./chunk-AJRT3JGE.js";
13
13
 
14
14
  // src/shell-alias.ts
15
15
  import { homedir } from "os";
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-KZERVKTD.js";
4
4
  import {
5
5
  renderCommandHelp
6
- } from "./chunk-RYBAJXV4.js";
6
+ } from "./chunk-FKQMH2DW.js";
7
7
  import {
8
8
  getPackageVersion
9
- } from "./chunk-QOBOIFGG.js";
9
+ } from "./chunk-NAROM5IR.js";
10
10
 
11
11
  // src/cli/usage.ts
12
12
  var exitOnHelpFlag = (command) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  guardBinary
3
- } from "./chunk-AWD2SLNA.js";
3
+ } from "./chunk-2WWHZTI5.js";
4
4
 
5
5
  // src/bell/install.ts
6
6
  import { join } from "path";