pushary 1.9.120 → 1.9.122

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 (130) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{api-QFUMNTEQ.js → api-KE4OJ3NK.js} +11 -11
  3. package/dist/bin/pushary-audit.js +3 -3
  4. package/dist/bin/pushary-bell-hook.js +27 -27
  5. package/dist/bin/pushary-bell.js +10 -10
  6. package/dist/bin/pushary-claude.js +25 -25
  7. package/dist/bin/pushary-clean.js +34 -34
  8. package/dist/bin/pushary-codex-bridge.js +21 -21
  9. package/dist/bin/pushary-codex-hook.js +34 -34
  10. package/dist/bin/pushary-codex-session.js +8 -8
  11. package/dist/bin/pushary-codex.js +15 -15
  12. package/dist/bin/pushary-connect.js +28 -28
  13. package/dist/bin/pushary-cowork.js +5 -5
  14. package/dist/bin/pushary-daemon.js +42 -42
  15. package/dist/bin/pushary-disconnect.js +27 -27
  16. package/dist/bin/pushary-display-hook.js +17 -17
  17. package/dist/bin/pushary-doctor.js +42 -42
  18. package/dist/bin/pushary-elicitation-hook.js +27 -27
  19. package/dist/bin/pushary-gemini-bridge.js +15 -15
  20. package/dist/bin/pushary-gemini-hook.js +31 -31
  21. package/dist/bin/pushary-hook.js +33 -33
  22. package/dist/bin/pushary-login.js +21 -21
  23. package/dist/bin/pushary-logout.js +26 -26
  24. package/dist/bin/pushary-mcp.js +12 -12
  25. package/dist/bin/pushary-mode.js +15 -15
  26. package/dist/bin/pushary-notification-hook.js +26 -26
  27. package/dist/bin/pushary-opencode-hook.js +30 -30
  28. package/dist/bin/pushary-permission-denied-hook.js +33 -33
  29. package/dist/bin/pushary-permission-hook.js +33 -33
  30. package/dist/bin/pushary-post-hook.js +26 -26
  31. package/dist/bin/pushary-prompt-hook.js +26 -26
  32. package/dist/bin/pushary-session-end-hook.js +26 -26
  33. package/dist/bin/pushary-session-start-hook.js +35 -35
  34. package/dist/bin/pushary-setup.js +49 -49
  35. package/dist/bin/pushary-stats.js +5 -5
  36. package/dist/bin/pushary-status.js +32 -32
  37. package/dist/bin/pushary-stop-hook.js +26 -26
  38. package/dist/bin/pushary-stopfailure-hook.js +26 -26
  39. package/dist/bin/pushary-suggestions.js +15 -15
  40. package/dist/bin/pushary-transcript-register.js +17 -17
  41. package/dist/bin/pushary-transcripts.js +25 -25
  42. package/dist/bin/pushary-upgrade.js +40 -40
  43. package/dist/bin/pushary-wait.js +15 -15
  44. package/dist/bin/pushary.js +7 -7
  45. package/dist/{chunk-YOSATSUD.js → chunk-27FILS44.js} +2 -2
  46. package/dist/{chunk-AIABYHHZ.js → chunk-2FOCCDVV.js} +6 -6
  47. package/dist/{chunk-MZX35RFX.js → chunk-2M7FELUY.js} +1 -1
  48. package/dist/{chunk-XRRY45XB.js → chunk-2M7ZV6NA.js} +3 -3
  49. package/dist/{chunk-363YZ5WJ.js → chunk-2QWQCU7L.js} +1 -1
  50. package/dist/{chunk-PEMESJZY.js → chunk-2WGP6QE7.js} +3 -3
  51. package/dist/{chunk-6CJ7D6EQ.js → chunk-44SXI642.js} +5 -5
  52. package/dist/{chunk-4DSJF5JD.js → chunk-5MITA7MU.js} +3 -3
  53. package/dist/{chunk-7VRL6XYM.js → chunk-5S32WI3B.js} +1 -1
  54. package/dist/{chunk-H4LCCX7W.js → chunk-6VMEUCKP.js} +6 -6
  55. package/dist/{chunk-SSTO42XS.js → chunk-7EYXAM63.js} +1 -1
  56. package/dist/{chunk-ZWUVJ3DV.js → chunk-7LZQK7EB.js} +3 -3
  57. package/dist/{chunk-RWS4DRFK.js → chunk-7M5M3CF5.js} +3 -3
  58. package/dist/{chunk-HVGN7TRN.js → chunk-7OSBFMRV.js} +1 -1
  59. package/dist/{chunk-KG7UZSCD.js → chunk-7ZTVBYPE.js} +6 -6
  60. package/dist/{chunk-5KCUQ3B7.js → chunk-ABYRJP4R.js} +3 -3
  61. package/dist/{chunk-XSSG5JLJ.js → chunk-AH4NLZTT.js} +1 -1
  62. package/dist/{chunk-33NEYAK2.js → chunk-AVSHVOFB.js} +4 -4
  63. package/dist/{chunk-ZV7G73KH.js → chunk-B5OX2WCA.js} +3 -3
  64. package/dist/{chunk-BZ6N5DDZ.js → chunk-BHQYJFPY.js} +19 -26
  65. package/dist/{chunk-IYUAMUO6.js → chunk-BVI2N7QA.js} +1 -1
  66. package/dist/{chunk-L37Q4BR6.js → chunk-C2L477NM.js} +4 -4
  67. package/dist/{chunk-KESS6HAK.js → chunk-DK6R5IVR.js} +2 -2
  68. package/dist/{chunk-EG2E2562.js → chunk-DRYQ7RLF.js} +1 -1
  69. package/dist/{chunk-TAHUCUY3.js → chunk-E3LX6DEF.js} +2 -2
  70. package/dist/{chunk-47HCNA5U.js → chunk-E5LU5MJ2.js} +1 -1
  71. package/dist/{chunk-EU4NV7SS.js → chunk-EBJ5QUVE.js} +2 -2
  72. package/dist/{chunk-ZRTUS6WD.js → chunk-EUIDFLPM.js} +5 -4
  73. package/dist/{chunk-W744DTUT.js → chunk-HI5YJFKW.js} +60 -13
  74. package/dist/{chunk-J6ACLE2A.js → chunk-I2D23TBS.js} +2 -2
  75. package/dist/{chunk-YZORQXN7.js → chunk-IA3E675D.js} +1 -1
  76. package/dist/{chunk-HSFTTGOB.js → chunk-JLUMELYR.js} +2 -2
  77. package/dist/{chunk-ODXZPMKN.js → chunk-KQKHSJOM.js} +3 -3
  78. package/dist/{chunk-BYP2R2PF.js → chunk-LIIIC27B.js} +1 -1
  79. package/dist/{chunk-YQUJQGJU.js → chunk-LRS26PXE.js} +4 -4
  80. package/dist/{chunk-SUI5JE6T.js → chunk-LS3CQ536.js} +1 -1
  81. package/dist/{chunk-5JZCFZUT.js → chunk-MIO2IWCZ.js} +8 -8
  82. package/dist/{chunk-EDNCFLR7.js → chunk-MKUFVNZL.js} +3 -3
  83. package/dist/{chunk-W4MZBZU3.js → chunk-MXUQJIQS.js} +3 -3
  84. package/dist/{chunk-B4M2XZNQ.js → chunk-NCHNITQW.js} +2 -2
  85. package/dist/{chunk-4FLMGGWB.js → chunk-NLEHRQHL.js} +2 -2
  86. package/dist/{chunk-PTONPJWL.js → chunk-NPAEVCTN.js} +4 -4
  87. package/dist/{chunk-2ZT4XV4I.js → chunk-NZEFACKS.js} +6 -6
  88. package/dist/{chunk-A5YOWKPR.js → chunk-O2UMQKR4.js} +10 -10
  89. package/dist/{chunk-K4RIBZ32.js → chunk-OJPHNITI.js} +1 -1
  90. package/dist/{chunk-YQGPBLIT.js → chunk-P2WA3YY2.js} +2 -2
  91. package/dist/{chunk-RM7MNCCA.js → chunk-P6H2DI6T.js} +5 -5
  92. package/dist/{chunk-NXWQZBOK.js → chunk-PO5Z73HT.js} +3 -3
  93. package/dist/{chunk-ZR35L635.js → chunk-PO6ECYXG.js} +2 -2
  94. package/dist/{chunk-3GFJ7CXQ.js → chunk-Q3KKA5IZ.js} +4 -4
  95. package/dist/{chunk-6FR5ZYMS.js → chunk-RBPPX663.js} +1 -1
  96. package/dist/{chunk-F24QURGP.js → chunk-RF66KSSY.js} +4 -4
  97. package/dist/{chunk-NVOQBKIL.js → chunk-RKXSWF62.js} +4 -4
  98. package/dist/{chunk-INKDRMSK.js → chunk-SBPVEVLZ.js} +5 -5
  99. package/dist/{chunk-5NHWNILG.js → chunk-SNF3OTPB.js} +5 -5
  100. package/dist/{chunk-UZL3VQCE.js → chunk-SO44USAF.js} +5 -5
  101. package/dist/{chunk-XUAGV5VH.js → chunk-STGEWWFW.js} +2 -2
  102. package/dist/{chunk-CPBS6LS3.js → chunk-SZV5SLSD.js} +3 -3
  103. package/dist/{chunk-2AMSWODQ.js → chunk-T2WDQ3NT.js} +2 -2
  104. package/dist/{chunk-VKRRUT45.js → chunk-TJ32WT6M.js} +5 -5
  105. package/dist/{chunk-ZMKZ5WHS.js → chunk-UV2JM3PZ.js} +1 -1
  106. package/dist/{chunk-J4AJVM5F.js → chunk-VUNQZNKR.js} +3 -3
  107. package/dist/{chunk-XOPOX5QY.js → chunk-WLC3AX6F.js} +11 -11
  108. package/dist/{chunk-SJPH24TK.js → chunk-WS37PSC5.js} +4 -4
  109. package/dist/{chunk-RHTAI4XP.js → chunk-WZWZ7UCN.js} +24 -17
  110. package/dist/{chunk-T57CIR6H.js → chunk-X2PN3XNW.js} +1 -1
  111. package/dist/{chunk-3DD44QTA.js → chunk-X6WYICTL.js} +5 -5
  112. package/dist/{chunk-WFHUECGB.js → chunk-XWFYR52C.js} +6 -6
  113. package/dist/{chunk-7YRKM4AB.js → chunk-YANGE5FG.js} +6 -6
  114. package/dist/{chunk-UFRRAAYD.js → chunk-YWA4Q42Z.js} +4 -4
  115. package/dist/{chunk-NBKH6SKN.js → chunk-Z7FUHJKU.js} +1 -1
  116. package/dist/{chunk-HHZSB6KL.js → chunk-ZAYXOSEP.js} +5 -5
  117. package/dist/{codex-app-cards-switch-545ISCGQ.js → codex-app-cards-switch-HUU5TTBZ.js} +11 -11
  118. package/dist/{codex-card-routing-IKNAEEMC.js → codex-card-routing-JTZ2PC24.js} +2 -2
  119. package/dist/{codex-desktop-launch-VQNI4GUS.js → codex-desktop-launch-QJOCWURE.js} +1 -1
  120. package/dist/{codex-session-launch-OGOGHTM7.js → codex-session-launch-DANHY5JS.js} +18 -18
  121. package/dist/{config-VGWGOR2V.js → config-43UOHCK6.js} +3 -3
  122. package/dist/{global-upgrade-GUHXKJPO.js → global-upgrade-SIAPPAFR.js} +9 -9
  123. package/dist/{identity-FORDJUYW.js → identity-DCDWOISV.js} +4 -4
  124. package/dist/{live-capabilities-VA3VXZOZ.js → live-capabilities-VB7PM2DJ.js} +4 -4
  125. package/dist/{paths-5XZPI4LD.js → paths-346XNBFK.js} +3 -3
  126. package/dist/{reapply-77JJ3QV2.js → reapply-LMTBF3XQ.js} +28 -28
  127. package/dist/src/index.js +32 -32
  128. package/dist/{upgrade-lock-EEPLQBLA.js → upgrade-lock-YT4O5QW6.js} +4 -4
  129. package/dist/{usage-27IDH6UH.js → usage-MUXR5SZ7.js} +3 -3
  130. package/package.json +1 -1
@@ -24,7 +24,7 @@ import {
24
24
  reportableSessionId,
25
25
  toToolLookup,
26
26
  truncateLine
27
- } from "./chunk-W744DTUT.js";
27
+ } from "./chunk-HI5YJFKW.js";
28
28
 
29
29
  // ../hook-mapping/src/commit-receipt.ts
30
30
  var COMMIT_OUTPUT_MAX_LENGTH = 65536;
@@ -6,21 +6,21 @@ import {
6
6
  McpToolError,
7
7
  SubscriptionRequiredError,
8
8
  callMcpTool
9
- } from "./chunk-UZL3VQCE.js";
9
+ } from "./chunk-SO44USAF.js";
10
10
  import {
11
11
  installNetworkDefaults,
12
12
  isNetworkFailure
13
- } from "./chunk-XRRY45XB.js";
13
+ } from "./chunk-2M7ZV6NA.js";
14
14
  import {
15
15
  fetchAsCredential
16
- } from "./chunk-47HCNA5U.js";
16
+ } from "./chunk-E5LU5MJ2.js";
17
17
  import {
18
18
  clientReportClaims
19
- } from "./chunk-ZRTUS6WD.js";
19
+ } from "./chunk-EUIDFLPM.js";
20
20
  import {
21
21
  getApiKey,
22
22
  getBaseUrl
23
- } from "./chunk-MZX35RFX.js";
23
+ } from "./chunk-2M7FELUY.js";
24
24
  import {
25
25
  ASK_AGENT_NAME_MAX,
26
26
  CLIENT_REPORT_PATH,
@@ -29,7 +29,7 @@ import {
29
29
  TOOL_FAILURE_CODES,
30
30
  degradedLine,
31
31
  truncateLine
32
- } from "./chunk-W744DTUT.js";
32
+ } from "./chunk-HI5YJFKW.js";
33
33
 
34
34
  // src/api.ts
35
35
  import { randomUUID } from "crypto";
@@ -531,8 +531,8 @@ var loadedOnce = (load) => {
531
531
  };
532
532
 
533
533
  // src/codex-desktop-proxy.ts
534
- var loadThePhone = () => import("./api-QFUMNTEQ.js");
535
- var loadTheCardRouting = () => import("./codex-card-routing-IKNAEEMC.js");
534
+ var loadThePhone = () => import("./api-KE4OJ3NK.js");
535
+ var loadTheCardRouting = () => import("./codex-card-routing-JTZ2PC24.js");
536
536
  var theFirstCardLoadsAgain = () => {
537
537
  };
538
538
  var ASKS_WITHOUT_ROUTING = {};
@@ -1085,7 +1085,7 @@ var codexDesktopCommand = async (args, entry, readAccount) => {
1085
1085
  return runCodexDesktopProxy(engine2, args.slice(3), readAccount, { watchesForCards: layoutIsKnown });
1086
1086
  }
1087
1087
  if (args[0] === APP_CARDS_FLAG) {
1088
- const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-545ISCGQ.js");
1088
+ const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-HUU5TTBZ.js");
1089
1089
  return codexAppCardsCommandOnThisMac(args.slice(1), entry, readAccount);
1090
1090
  }
1091
1091
  if (args.length > 2) throw new Error("Usage: pushary codex --desktop [path/to/Codex.app]");
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readTranscriptPreference
3
- } from "./chunk-CPBS6LS3.js";
3
+ } from "./chunk-SZV5SLSD.js";
4
4
 
5
5
  // src/transcript-setting.ts
6
6
  var transcriptEnvironmentPreference = () => {
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  compatibleConfigFile,
3
3
  hasCompatibleHooks
4
- } from "./chunk-HHZSB6KL.js";
4
+ } from "./chunk-ZAYXOSEP.js";
5
5
  import {
6
6
  pusharyHookExecutable
7
- } from "./chunk-3GFJ7CXQ.js";
7
+ } from "./chunk-Q3KKA5IZ.js";
8
8
  import {
9
9
  isProtectedByScope,
10
10
  registerHookEntry
11
- } from "./chunk-ZRTUS6WD.js";
11
+ } from "./chunk-EUIDFLPM.js";
12
12
  import {
13
13
  isRecord
14
- } from "./chunk-W744DTUT.js";
14
+ } from "./chunk-HI5YJFKW.js";
15
15
 
16
16
  // src/cursor-config.ts
17
17
  var hookCommandOf = (entry) => {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pusharyFetch
3
- } from "./chunk-XRRY45XB.js";
3
+ } from "./chunk-2M7ZV6NA.js";
4
4
  import {
5
5
  getBaseUrl
6
- } from "./chunk-MZX35RFX.js";
6
+ } from "./chunk-2M7FELUY.js";
7
7
  import {
8
8
  NetworkError
9
9
  } from "./chunk-YU2EUD7O.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  isValidApiKey,
15
15
  normalizeKeyScope
16
- } from "./chunk-W744DTUT.js";
16
+ } from "./chunk-HI5YJFKW.js";
17
17
 
18
18
  // src/session.ts
19
19
  var samePusharyAccount = (left, right) => left.kind === "ok" && right.kind === "ok" && left.identity.workspaceId !== "" && left.identity.workspaceId === right.identity.workspaceId && left.identity.siteId === right.identity.siteId;
@@ -1,33 +1,33 @@
1
1
  import {
2
2
  claudeSettingsLocationFor,
3
3
  readClaudePermissionRules
4
- } from "./chunk-ZR35L635.js";
4
+ } from "./chunk-PO6ECYXG.js";
5
5
  import {
6
6
  askAgentQuestions,
7
7
  defersToNativeMode,
8
8
  outcomeOfFailedAsk,
9
9
  storedWaitDeadline
10
- } from "./chunk-3DD44QTA.js";
10
+ } from "./chunk-X6WYICTL.js";
11
11
  import {
12
12
  reportMachineDenial
13
- } from "./chunk-PEMESJZY.js";
13
+ } from "./chunk-2WGP6QE7.js";
14
14
  import {
15
15
  isGatingMoment,
16
16
  recordKeylessMoment
17
- } from "./chunk-SSTO42XS.js";
17
+ } from "./chunk-7EYXAM63.js";
18
18
  import {
19
19
  isAdmitted,
20
20
  readAdmissionRules
21
- } from "./chunk-VKRRUT45.js";
21
+ } from "./chunk-TJ32WT6M.js";
22
22
  import {
23
23
  isDeferAnswer,
24
24
  oncePerSession
25
- } from "./chunk-K4RIBZ32.js";
25
+ } from "./chunk-OJPHNITI.js";
26
26
  import {
27
27
  activeHookSource,
28
28
  activeIdentity,
29
29
  namedSource
30
- } from "./chunk-HHZSB6KL.js";
30
+ } from "./chunk-ZAYXOSEP.js";
31
31
  import {
32
32
  DEFAULT_SESSION,
33
33
  approvalAwaitingRetry,
@@ -48,7 +48,7 @@ import {
48
48
  settleQuestionsForToolUse,
49
49
  sweepFilesOlderThan,
50
50
  userScope
51
- } from "./chunk-XOPOX5QY.js";
51
+ } from "./chunk-WLC3AX6F.js";
52
52
  import {
53
53
  UNNAMED_ACTION,
54
54
  deriveAction,
@@ -59,12 +59,12 @@ import {
59
59
  patchDeletesFiles,
60
60
  permissionDeniedAction,
61
61
  scopePathFor
62
- } from "./chunk-HVGN7TRN.js";
62
+ } from "./chunk-7OSBFMRV.js";
63
63
  import {
64
64
  branchFor,
65
65
  repoKeyFor,
66
66
  repositoryScopeFor
67
- } from "./chunk-363YZ5WJ.js";
67
+ } from "./chunk-2QWQCU7L.js";
68
68
  import {
69
69
  askUser,
70
70
  cancelQuestion,
@@ -81,24 +81,23 @@ import {
81
81
  waitForQuestion,
82
82
  waitsForThePhone,
83
83
  withdrawQuestion
84
- } from "./chunk-KG7UZSCD.js";
84
+ } from "./chunk-7ZTVBYPE.js";
85
85
  import {
86
86
  getMachineId
87
- } from "./chunk-6FR5ZYMS.js";
87
+ } from "./chunk-RBPPX663.js";
88
88
  import {
89
89
  getApiKey,
90
90
  getBaseUrl
91
- } from "./chunk-MZX35RFX.js";
91
+ } from "./chunk-2M7FELUY.js";
92
92
  import {
93
93
  writeFileAtomic
94
94
  } from "./chunk-T5I4PKOQ.js";
95
95
  import {
96
96
  NPX_LATEST_COMMAND
97
- } from "./chunk-7VRL6XYM.js";
97
+ } from "./chunk-5S32WI3B.js";
98
98
  import {
99
99
  AGENT_QUESTION_STRATEGY,
100
100
  AGENT_QUESTION_TOOL,
101
- CLAUDE_REFUSALS_ONLY_TOOLS,
102
101
  DECISION_STOP_REASON,
103
102
  GATE_BLOCK_REASON_MAX_LENGTH,
104
103
  GATE_WIRE,
@@ -115,7 +114,6 @@ import {
115
114
  TERMINAL_AND_PHONE_REASON,
116
115
  UNREADABLE_CALL_REASON,
117
116
  UNVERIFIABLE_APPROVAL_REASON,
118
- WILDCARD_TOOL_PATTERN,
119
117
  WITHDRAWN_APPROVAL_REASON,
120
118
  agentQuestionStrategy,
121
119
  agentRulesAllowEveryInput,
@@ -132,7 +130,6 @@ import {
132
130
  claudePromptTakesTheCall,
133
131
  claudeStoppedPermissionRequestOutput,
134
132
  claudeStoppedPreToolUseOutput,
135
- claudeSubagentToolAliasOf,
136
133
  denyReasonFrom,
137
134
  editGoesToTheAgentsPrompt,
138
135
  effectiveWaitSeconds,
@@ -144,6 +141,7 @@ import {
144
141
  hookWaitDeadline,
145
142
  hookWritePath,
146
143
  isBlockedActionRequest,
144
+ isClaudeRefusalsOnlyTool,
147
145
  isCursorHookPayload,
148
146
  isPermissionRequestOwnedByPreToolUse,
149
147
  isPusharyConnectorTool,
@@ -159,12 +157,13 @@ import {
159
157
  questionLimitHandBack,
160
158
  refusesWhenUnanswered,
161
159
  resolveGate,
160
+ standingDenyOfSubagentAlias,
162
161
  terminalLiveWait,
163
162
  terminalStaysLiveForTheCall,
164
163
  timeoutActionWithoutLocalPrompt,
165
164
  unansweredRefusalReason,
166
165
  unapprovedScopeReason
167
- } from "./chunk-W744DTUT.js";
166
+ } from "./chunk-HI5YJFKW.js";
168
167
 
169
168
  // src/terminal-answer-watch.ts
170
169
  import { closeSync, openSync, readSync, statSync } from "fs";
@@ -836,14 +835,8 @@ var rememberHandbackToThePrompt = (input, heldForMcpRoute, result) => {
836
835
  if (heldForMcpRoute && result?.hookSpecificOutput?.permissionDecision === "ask") recordMcpHoldHandback(blockedActionFingerprintFor(input));
837
836
  return result;
838
837
  };
839
- var isRefusalsOnlyCallInClaudeCode = (input) => isMcpCallInClaudeCode(input) || ACTIVE_SOURCE === "claude" && CLAUDE_REFUSALS_ONLY_TOOLS.includes(input.tool_name);
838
+ var isRefusalsOnlyCallInClaudeCode = (input) => ACTIVE_SOURCE === "claude" && isClaudeRefusalsOnlyTool(input.tool_name);
840
839
  var STANDING_REFUSAL_NETWORK_BUDGET_MS = 800;
841
- var standingDenyOfTheSubagentAlias = (gateInputFor, toolName) => {
842
- const alias = claudeSubagentToolAliasOf(toolName);
843
- if (alias === void 0) return void 0;
844
- const verdict = resolveGate(gateInputFor(alias));
845
- return verdict.kind === "deny" && verdict.policy.tool !== WILDCARD_TOOL_PATTERN ? verdict : void 0;
846
- };
847
840
  var standingRefusalOf = async (input) => {
848
841
  let apiKey;
849
842
  try {
@@ -862,7 +855,7 @@ var standingRefusalOf = async (input) => {
862
855
  if (policy === null) return void 0;
863
856
  const gateInputFor = (toolName) => claudeGateInput(modeState, policy, { ...input, tool_name: toolName });
864
857
  const asCalled = resolveGate(gateInputFor(input.tool_name));
865
- const denied = asCalled.kind === "deny" ? asCalled : standingDenyOfTheSubagentAlias(gateInputFor, input.tool_name);
858
+ const denied = asCalled.kind === "deny" ? asCalled : standingDenyOfSubagentAlias(input.tool_name, (toolName) => resolveGate(gateInputFor(toolName)));
866
859
  if (denied === void 0) return void 0;
867
860
  await reportMachineDenial(input, denied, ACTIVE_AGENT);
868
861
  return deny(denied.reason);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readConfigFileKey
3
- } from "./chunk-CPBS6LS3.js";
3
+ } from "./chunk-SZV5SLSD.js";
4
4
 
5
5
  // src/bell/fleet.ts
6
6
  import { closeSync, constants, futimesSync, lstatSync, mkdirSync, openSync, readdirSync, unlinkSync } from "fs";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  pusharyHookExecutable
3
- } from "./chunk-3GFJ7CXQ.js";
3
+ } from "./chunk-Q3KKA5IZ.js";
4
4
  import {
5
5
  bridgeResolvesToApp,
6
6
  cursorUserHooks,
7
7
  executableFileName,
8
8
  isBridgeLocator,
9
9
  liveBridgeProbe
10
- } from "./chunk-ZRTUS6WD.js";
10
+ } from "./chunk-EUIDFLPM.js";
11
11
  import {
12
12
  atLeast,
13
13
  parseVersion
14
- } from "./chunk-ODXZPMKN.js";
14
+ } from "./chunk-KQKHSJOM.js";
15
15
  import {
16
16
  CURSOR_GATE_COVERAGE,
17
17
  CURSOR_GATE_SCRIPT,
@@ -21,7 +21,7 @@ import {
21
21
  isCursorHookPayload,
22
22
  isRecord,
23
23
  toolsCoveredByGateEntry
24
- } from "./chunk-W744DTUT.js";
24
+ } from "./chunk-HI5YJFKW.js";
25
25
 
26
26
  // src/cursor-gate-registration.ts
27
27
  import { dirname, isAbsolute, join, resolve } from "path";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  absoluteUrl
3
- } from "./chunk-ZV7G73KH.js";
3
+ } from "./chunk-B5OX2WCA.js";
4
4
  import {
5
5
  KEY_SCOPE
6
- } from "./chunk-W744DTUT.js";
6
+ } from "./chunk-HI5YJFKW.js";
7
7
 
8
8
  // src/cli/approval-settings-pages.ts
9
9
  var API_KEYS_PATH = "/dashboard/agent/settings";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  guardBinary
3
- } from "./chunk-ZRTUS6WD.js";
3
+ } from "./chunk-EUIDFLPM.js";
4
4
 
5
5
  // src/bell/install.ts
6
6
  import { join } from "path";
@@ -9,13 +9,13 @@ import {
9
9
  installedCodexApp,
10
10
  readCodexAppRuntime,
11
11
  shellQuoted
12
- } from "./chunk-5KCUQ3B7.js";
12
+ } from "./chunk-ABYRJP4R.js";
13
13
  import {
14
14
  writeHuman
15
15
  } from "./chunk-QCGNGEGE.js";
16
16
  import {
17
17
  xml
18
- } from "./chunk-WFHUECGB.js";
18
+ } from "./chunk-XWFYR52C.js";
19
19
  import {
20
20
  writeFileAtomic
21
21
  } from "./chunk-T5I4PKOQ.js";
@@ -5,7 +5,7 @@ import {
5
5
  MCP_CREDENTIAL_REJECTION_BODY,
6
6
  isRecord,
7
7
  responseRejectsCredential
8
- } from "./chunk-W744DTUT.js";
8
+ } from "./chunk-HI5YJFKW.js";
9
9
 
10
10
  // src/credential-rejection.ts
11
11
  import { createHash, randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-ZRTUS6WD.js";
3
+ } from "./chunk-EUIDFLPM.js";
4
4
  import {
5
5
  readRegularJsonFile,
6
6
  writeFileAtomic
@@ -13,7 +13,7 @@ import {
13
13
  serializeDeclinedAgents,
14
14
  withDeclinedAgent,
15
15
  withoutDeclinedAgent
16
- } from "./chunk-W744DTUT.js";
16
+ } from "./chunk-HI5YJFKW.js";
17
17
 
18
18
  // src/declined-agents-file.ts
19
19
  import { join } from "path";
@@ -3,7 +3,7 @@ import {
3
3
  formatVersion,
4
4
  quoteIfNeeded,
5
5
  shellDoubleQuoted
6
- } from "./chunk-ODXZPMKN.js";
6
+ } from "./chunk-KQKHSJOM.js";
7
7
  import {
8
8
  writeFileAtomic
9
9
  } from "./chunk-T5I4PKOQ.js";
@@ -19,7 +19,7 @@ import {
19
19
  HOOK_LOCATOR_BINARY,
20
20
  PRETOOLUSE_GATED_TOOLS,
21
21
  withHookHoldBudget
22
- } from "./chunk-W744DTUT.js";
22
+ } from "./chunk-HI5YJFKW.js";
23
23
 
24
24
  // src/setup/paths.ts
25
25
  import { createHash as createHash2 } from "crypto";
@@ -742,7 +742,6 @@ var CLAUDE_MCP_ROUTE_HOLD_HOOK = {
742
742
  matcher: CLAUDE_MCP_PRETOOLUSE_MATCHER,
743
743
  timeout: HOOK_BUDGETS.claude.budgetSeconds,
744
744
  delivery: "approval",
745
- cliOnly: true,
746
745
  since: ESTABLISHED
747
746
  };
748
747
  var CLAUDE_REFUSALS_ONLY_HOOK = {
@@ -886,7 +885,8 @@ var addPusharyHooks = (settings, binDir, version = null) => {
886
885
  const supported = new Map(supportedClaudeEvents(version).map((hook) => [hook.event, hook]));
887
886
  for (const known of CLAUDE_HOOK_EVENTS) {
888
887
  const current = Array.isArray(hooks[known.event]) ? hooks[known.event] : [];
889
- const definition = supported.get(known.event);
888
+ const oursButUnjudged = version === null && current.some((item) => isPusharyHook(item));
889
+ const definition = supported.get(known.event) ?? (oursButUnjudged ? known : void 0);
890
890
  if (definition) {
891
891
  hooks[known.event] = registerHookEntry(current, isPusharyHook, entry(definition, resolve2));
892
892
  continue;
@@ -1284,6 +1284,7 @@ export {
1284
1284
  guardCursorGate,
1285
1285
  guardedArgv,
1286
1286
  registeredCommands,
1287
+ namesCliBinary,
1287
1288
  namesOurBinary,
1288
1289
  registrationHolderOf,
1289
1290
  windowsNodeLauncherFor,
@@ -1807,20 +1807,60 @@ var scriptsOfShellsIn = (text3) => {
1807
1807
  const words = shellWordsOf(text3);
1808
1808
  return words === null ? [] : words.flatMap((_, index) => scriptArgumentOfAShellAt(words, index) ?? []);
1809
1809
  };
1810
+ var endsTheCommandAsAControlOperator = (text3, index) => {
1811
+ const char = text3.charAt(index);
1812
+ const before = text3.charAt(index - 1);
1813
+ if (char === "|") return before !== ">";
1814
+ return char === "&" && before !== ">" && before !== "<" && text3.charAt(index + 1) !== ">";
1815
+ };
1816
+ var endOfTheSimpleCommandAt = (text3, from) => {
1817
+ let depth = 0;
1818
+ let quote = null;
1819
+ let inBackticks = false;
1820
+ for (let index = from; index < text3.length; index += 1) {
1821
+ const char = text3.charAt(index);
1822
+ if (quote === "'") {
1823
+ if (char === "'") quote = null;
1824
+ } else if (char === "\\") {
1825
+ index += 1;
1826
+ } else if (quote === '"') {
1827
+ if (char === '"') quote = null;
1828
+ } else if (char === "'" || char === '"') {
1829
+ quote = char;
1830
+ } else if (char === "`") {
1831
+ inBackticks = !inBackticks;
1832
+ } else if (inBackticks) {
1833
+ continue;
1834
+ } else if (char === "(") {
1835
+ depth += 1;
1836
+ } else if (char === ")" && depth > 0) {
1837
+ depth -= 1;
1838
+ } else if (depth === 0 && (char === "\n" || char === ";" || char === ")" || endsTheCommandAsAControlOperator(text3, index))) {
1839
+ return index;
1840
+ }
1841
+ }
1842
+ return text3.length;
1843
+ };
1810
1844
  var scriptOfAnEvalEndingAt = (text3, end) => {
1811
- const words = shellWordsOf(text3.slice(end));
1812
- return words === null ? [] : [words.map((word) => word.text).join(" ")];
1845
+ const words = shellWordsOf(text3.slice(end, endOfTheSimpleCommandAt(text3, end)));
1846
+ if (words === null) return [];
1847
+ const firstComment = words.findIndex((word) => word.comment);
1848
+ return [(firstComment === -1 ? words : words.slice(0, firstComment)).map((word) => word.text).join(" ")];
1813
1849
  };
1814
- var scriptsOfEvalsIn = (text3) => [...text3.matchAll(AN_EVAL_THAT_RUNS)].slice(0, MOST_SCRIPTS_READ_FROM_ONE_COMMAND).flatMap((match) => scriptOfAnEvalEndingAt(text3, match.index + match[0].length));
1850
+ var scriptsOfEvalsIn = (text3) => [...text3.matchAll(AN_EVAL_THAT_RUNS)].slice(0, MOST_SCRIPTS_READ_FROM_ONE_COMMAND + 1).flatMap((match) => scriptOfAnEvalEndingAt(text3, match.index + match[0].length));
1815
1851
  var scriptsDirectlyInside = (text3) => [...scriptsOfEvalsIn(text3), ...scriptsOfShellsIn(text3)];
1816
- var scriptsPassedToAShell = (text3) => {
1817
- const found = [];
1852
+ var READING_OF_SCRIPTS_TOO_MANY_TO_READ = ": | sh";
1853
+ var readingsOfScriptsPassedToAShell = (text3) => {
1854
+ const readings = [];
1855
+ let scriptsRead = 0;
1818
1856
  let level = [text3];
1819
- for (let depth = 0; depth < DEEPEST_NESTED_SCRIPT_READ && level.length > 0 && found.length < MOST_SCRIPTS_READ_FROM_ONE_COMMAND; depth += 1) {
1820
- level = level.flatMap(scriptsDirectlyInside).slice(0, MOST_SCRIPTS_READ_FROM_ONE_COMMAND - found.length);
1821
- found.push(...level);
1857
+ for (let depth = 0; depth < DEEPEST_NESTED_SCRIPT_READ && level.length > 0; depth += 1) {
1858
+ level = level.flatMap(scriptsDirectlyInside).filter((script) => COMMENT_OR_ANSI_C_QUOTE.test(script));
1859
+ scriptsRead += level.length;
1860
+ if (scriptsRead > MOST_SCRIPTS_READ_FROM_ONE_COMMAND) return [...readings, READING_OF_SCRIPTS_TOO_MANY_TO_READ];
1861
+ readings.push(...level.flatMap((script) => readingWithoutCommentsOrAnsiEscapes(script) ?? []));
1822
1862
  }
1823
- return found;
1863
+ return readings;
1824
1864
  };
1825
1865
  var shellCommandSegments = (command) => splitShellSegments(command)?.map((segment) => segment.text) ?? null;
1826
1866
  var shellSegmentsReadingAPipe = (command) => splitShellSegments(command)?.filter((segment) => segment.readsPipe).map((segment) => segment.text) ?? null;
@@ -8655,6 +8695,13 @@ var CLAUDE_REFUSALS_ONLY_TOOLS = ["WebFetch", "Task", "Agent"];
8655
8695
  var CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER = `^(${CLAUDE_REFUSALS_ONLY_TOOLS.join("|")})$`;
8656
8696
  var CLAUDE_SUBAGENT_TOOL_ALIASES = { Task: "Agent", Agent: "Task" };
8657
8697
  var claudeSubagentToolAliasOf = (toolName) => Object.hasOwn(CLAUDE_SUBAGENT_TOOL_ALIASES, toolName) ? CLAUDE_SUBAGENT_TOOL_ALIASES[toolName] : void 0;
8698
+ var isClaudeRefusalsOnlyTool = (toolName) => toolName.startsWith(MCP_TOOL_PREFIX) || CLAUDE_REFUSALS_ONLY_TOOLS.includes(toolName);
8699
+ var standingDenyOfSubagentAlias = (toolName, verdictFor) => {
8700
+ const alias = claudeSubagentToolAliasOf(toolName);
8701
+ if (alias === void 0) return void 0;
8702
+ const verdict = verdictFor(alias);
8703
+ return verdict.kind === "deny" && verdict.policy.tool !== WILDCARD_TOOL_PATTERN ? verdict : void 0;
8704
+ };
8658
8705
  var LINE_BREAK = /[\r\n]/;
8659
8706
  var bypassModeCovers = (toolName, toolInput) => {
8660
8707
  const arg = extractPolicyArg(toolName, toolInput);
@@ -8675,6 +8722,7 @@ var PATTERN_PREFIX_WILDCARD = /(?::\*|\*)?\)$/;
8675
8722
  var CONTINUES_A_COMMAND_WORD = /^[ :]/;
8676
8723
  var ruleNarrowsThePattern = (ruleTool, pattern) => {
8677
8724
  if (ruleTool === pattern) return false;
8725
+ if (pattern === WILDCARD_TOOL_PATTERN) return true;
8678
8726
  if (!pattern.includes("(")) return ruleTool.includes("(");
8679
8727
  const prefix = pattern.replace(PATTERN_PREFIX_WILDCARD, "");
8680
8728
  return ruleTool.startsWith(prefix) && CONTINUES_A_COMMAND_WORD.test(ruleTool.slice(prefix.length));
@@ -8713,7 +8761,7 @@ var extraReadingsOf = (toolInput) => {
8713
8761
  const readings = [
8714
8762
  commentFree,
8715
8763
  ...spelledOut,
8716
- ...[command, commentFree, ...spelledOut].filter(isAReading).flatMap((text3) => scriptsPassedToAShell(text3)).map(readingWithoutCommentsOrAnsiEscapes)
8764
+ ...[command, commentFree, ...spelledOut].filter(isAReading).flatMap(readingsOfScriptsPassedToAShell)
8717
8765
  ];
8718
8766
  return readings.filter(isAReading).map((reading) => ({ ...toolInput, command: reading }));
8719
8767
  };
@@ -9576,7 +9624,6 @@ export {
9576
9624
  isTokenCount,
9577
9625
  reportableSessionId,
9578
9626
  TOOL_NAME_MAX_LENGTH,
9579
- WILDCARD_TOOL_PATTERN,
9580
9627
  normalizeRepoRemote,
9581
9628
  localRepoKey,
9582
9629
  isSafeReadOnlyCommand,
@@ -9622,9 +9669,9 @@ export {
9622
9669
  isPermissionRequestOwnedByPreToolUse,
9623
9670
  CLAUDE_PRETOOLUSE_MATCHER,
9624
9671
  CLAUDE_MCP_PRETOOLUSE_MATCHER,
9625
- CLAUDE_REFUSALS_ONLY_TOOLS,
9626
9672
  CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER,
9627
- claudeSubagentToolAliasOf,
9673
+ isClaudeRefusalsOnlyTool,
9674
+ standingDenyOfSubagentAlias,
9628
9675
  permissionsOffLineAppliesTo,
9629
9676
  permissionsOffAskReason,
9630
9677
  resolveGate,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  autoUpdateLock
3
- } from "./chunk-ZRTUS6WD.js";
3
+ } from "./chunk-EUIDFLPM.js";
4
4
  import {
5
5
  installPackageGlobally,
6
6
  npmErrorMessage,
7
7
  npmExitedOnPermissionDenied
8
- } from "./chunk-ODXZPMKN.js";
8
+ } from "./chunk-KQKHSJOM.js";
9
9
  import {
10
10
  writeJsonAtomic
11
11
  } from "./chunk-T5I4PKOQ.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-BG4HHB7E.js";
4
4
  import {
5
5
  renderCommandHelp
6
- } from "./chunk-7VRL6XYM.js";
6
+ } from "./chunk-5S32WI3B.js";
7
7
  import {
8
8
  getPackageVersion
9
9
  } from "./chunk-ZVU6WMMU.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-ZRTUS6WD.js";
3
+ } from "./chunk-EUIDFLPM.js";
4
4
  import {
5
5
  readJsonSafe
6
6
  } from "./chunk-T5I4PKOQ.js";
7
7
  import {
8
8
  isRecord
9
- } from "./chunk-W744DTUT.js";
9
+ } from "./chunk-HI5YJFKW.js";
10
10
 
11
11
  // src/process-ownership.ts
12
12
  import { createHash, randomUUID } from "crypto";
@@ -399,9 +399,9 @@ var installGlobally = (options) => {
399
399
  }
400
400
  const started = (async () => {
401
401
  if (!npmIsOnPath()) throw new NpmMissingError();
402
- const { withUpgradeLock } = await import("./global-upgrade-GUHXKJPO.js");
403
- const { installWithUpgradeLock, ownsUpgradeLock } = await import("./upgrade-lock-EEPLQBLA.js");
404
- const { autoUpdateLock } = await import("./paths-5XZPI4LD.js");
402
+ const { withUpgradeLock } = await import("./global-upgrade-SIAPPAFR.js");
403
+ const { installWithUpgradeLock, ownsUpgradeLock } = await import("./upgrade-lock-YT4O5QW6.js");
404
+ const { autoUpdateLock } = await import("./paths-346XNBFK.js");
405
405
  let result = "skipped";
406
406
  const install = async () => {
407
407
  const platform = process.platform;
@@ -7,7 +7,7 @@ import {
7
7
  recordSealerFor,
8
8
  uploadTranscriptRecords,
9
9
  wrapSessionKey
10
- } from "./chunk-4DSJF5JD.js";
10
+ } from "./chunk-5MITA7MU.js";
11
11
 
12
12
  // src/live-session.ts
13
13
  var MAX_TRANSCRIPT_QUEUE = 100;
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  notificationAnswerStep
3
- } from "./chunk-AIABYHHZ.js";
3
+ } from "./chunk-2FOCCDVV.js";
4
4
  import {
5
5
  canChangeApprovalSettings
6
- } from "./chunk-KESS6HAK.js";
6
+ } from "./chunk-DK6R5IVR.js";
7
7
  import {
8
8
  matchMacAccountStep,
9
9
  retryAgentCommand
10
- } from "./chunk-EDNCFLR7.js";
10
+ } from "./chunk-MKUFVNZL.js";
11
11
  import {
12
12
  EXIT
13
13
  } from "./chunk-BG4HHB7E.js";
14
14
  import {
15
15
  NPX_LATEST_COMMAND
16
- } from "./chunk-7VRL6XYM.js";
16
+ } from "./chunk-5S32WI3B.js";
17
17
 
18
18
  // src/setup/closing.ts
19
19
  var ACTIVITY_URL = "pushary.com/dashboard/agent/activity";
@@ -9,7 +9,7 @@ import {
9
9
  isSetupConnectMode,
10
10
  isValidApiKey,
11
11
  normalizeAgentId
12
- } from "./chunk-W744DTUT.js";
12
+ } from "./chunk-HI5YJFKW.js";
13
13
 
14
14
  // src/setup/options.ts
15
15
  var AGENT_CHOICES = SETUP_AGENT_CHOICES;