pushary 1.9.119 → 1.9.121

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 (133) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/data/cursor-plugin/scripts/pushary-gate.mjs +13 -2
  3. package/data/vscode-plugin/scripts/pushary-gate.mjs +12 -1
  4. package/dist/{api-WWB7ZOLK.js → api-RI52IA65.js} +11 -11
  5. package/dist/bin/pushary-audit.js +3 -3
  6. package/dist/bin/pushary-bell-hook.js +27 -27
  7. package/dist/bin/pushary-bell.js +10 -10
  8. package/dist/bin/pushary-claude.js +25 -25
  9. package/dist/bin/pushary-clean.js +43 -43
  10. package/dist/bin/pushary-codex-bridge.js +21 -21
  11. package/dist/bin/pushary-codex-hook.js +36 -36
  12. package/dist/bin/pushary-codex-session.js +8 -8
  13. package/dist/bin/pushary-codex.js +15 -15
  14. package/dist/bin/pushary-connect.js +28 -28
  15. package/dist/bin/pushary-cowork.js +5 -5
  16. package/dist/bin/pushary-daemon.js +44 -44
  17. package/dist/bin/pushary-disconnect.js +27 -27
  18. package/dist/bin/pushary-display-hook.js +17 -17
  19. package/dist/bin/pushary-doctor.js +47 -47
  20. package/dist/bin/pushary-elicitation-hook.js +27 -27
  21. package/dist/bin/pushary-gemini-bridge.js +15 -15
  22. package/dist/bin/pushary-gemini-hook.js +33 -33
  23. package/dist/bin/pushary-hook.js +33 -33
  24. package/dist/bin/pushary-login.js +22 -22
  25. package/dist/bin/pushary-logout.js +26 -26
  26. package/dist/bin/pushary-mcp.js +12 -12
  27. package/dist/bin/pushary-mode.js +15 -15
  28. package/dist/bin/pushary-notification-hook.js +26 -26
  29. package/dist/bin/pushary-opencode-hook.js +30 -30
  30. package/dist/bin/pushary-permission-denied-hook.js +33 -33
  31. package/dist/bin/pushary-permission-hook.js +33 -33
  32. package/dist/bin/pushary-post-hook.js +26 -26
  33. package/dist/bin/pushary-prompt-hook.js +26 -26
  34. package/dist/bin/pushary-session-end-hook.js +26 -26
  35. package/dist/bin/pushary-session-start-hook.js +35 -35
  36. package/dist/bin/pushary-setup.js +90 -90
  37. package/dist/bin/pushary-stats.js +5 -5
  38. package/dist/bin/pushary-status.js +32 -32
  39. package/dist/bin/pushary-stop-hook.js +26 -26
  40. package/dist/bin/pushary-stopfailure-hook.js +26 -26
  41. package/dist/bin/pushary-suggestions.js +15 -15
  42. package/dist/bin/pushary-transcript-register.js +17 -17
  43. package/dist/bin/pushary-transcripts.js +25 -25
  44. package/dist/bin/pushary-upgrade.js +43 -43
  45. package/dist/bin/pushary-wait.js +17 -17
  46. package/dist/bin/pushary.js +7 -7
  47. package/dist/{chunk-Z3OG44Z4.js → chunk-2A4X4ETF.js} +4 -4
  48. package/dist/{chunk-R3RTISDD.js → chunk-2M7FELUY.js} +1 -1
  49. package/dist/{chunk-SE7P5BBK.js → chunk-2QWQCU7L.js} +1 -1
  50. package/dist/{chunk-NVV3YUTX.js → chunk-3HZ374VU.js} +2 -2
  51. package/dist/{chunk-TZYVXTLN.js → chunk-4LR27PGD.js} +1 -1
  52. package/dist/{chunk-EFFH2FYG.js → chunk-5CMNZXJV.js} +2 -2
  53. package/dist/{chunk-SQRS4IF2.js → chunk-5MITA7MU.js} +3 -3
  54. package/dist/{chunk-PJSFKKZ5.js → chunk-5S32WI3B.js} +1 -1
  55. package/dist/{chunk-XBH6OKHD.js → chunk-5UT5EFMH.js} +3 -3
  56. package/dist/{chunk-VRZOUCIK.js → chunk-6LP6G2NA.js} +2 -2
  57. package/dist/{chunk-YZESBU7F.js → chunk-6RME4X3J.js} +151 -6
  58. package/dist/{chunk-ISVHV2DP.js → chunk-7EYXAM63.js} +1 -1
  59. package/dist/{chunk-GBVTVTDF.js → chunk-7FDDOT2A.js} +1 -1
  60. package/dist/{chunk-KVDN4U6W.js → chunk-7FH6T4EN.js} +10 -10
  61. package/dist/{chunk-GW3PE52Q.js → chunk-7OSBFMRV.js} +1 -1
  62. package/dist/{chunk-TLCJCP5R.js → chunk-AH4NLZTT.js} +1 -1
  63. package/dist/{chunk-ZLUAXGAA.js → chunk-AXSAL7DK.js} +4 -4
  64. package/dist/{chunk-G5FQU2XF.js → chunk-B3KFHR43.js} +6 -6
  65. package/dist/{chunk-7CJ7W2RH.js → chunk-BMME65OT.js} +4 -4
  66. package/dist/{chunk-JKS4MN47.js → chunk-BPU6P3DS.js} +6 -6
  67. package/dist/{chunk-JJNF6QU4.js → chunk-BVI2N7QA.js} +1 -1
  68. package/dist/{chunk-DXJUASTS.js → chunk-D2LPVOG5.js} +2 -2
  69. package/dist/{chunk-ZTVBM3EZ.js → chunk-DLXYQE5G.js} +4 -4
  70. package/dist/{chunk-U32N5JZO.js → chunk-E5LU5MJ2.js} +1 -1
  71. package/dist/{chunk-6KX2H4I5.js → chunk-EVWF3A5D.js} +3 -3
  72. package/dist/{chunk-5HKU4VUL.js → chunk-F4K2A7DJ.js} +3 -3
  73. package/dist/{chunk-K5WTTEIQ.js → chunk-F5FMUDD7.js} +5 -5
  74. package/dist/{chunk-PNSIMPC7.js → chunk-FBJHC7HW.js} +6 -6
  75. package/dist/{chunk-2C45MJGK.js → chunk-FEJP2I44.js} +13 -6
  76. package/dist/{chunk-SNKC2IQZ.js → chunk-FG67GH5B.js} +2 -2
  77. package/dist/{chunk-CBLFIWPI.js → chunk-GZ3D46PV.js} +12 -6
  78. package/dist/{chunk-MYNLU6DV.js → chunk-H2OUB5S5.js} +2 -2
  79. package/dist/{chunk-TRDHHF3A.js → chunk-HI5YJFKW.js} +74 -10
  80. package/dist/{chunk-4HDX77ND.js → chunk-HINZZUOB.js} +3 -3
  81. package/dist/{chunk-GAOUWLYN.js → chunk-HLZWEGW3.js} +3 -3
  82. package/dist/{chunk-67I7QRQB.js → chunk-IA3E675D.js} +1 -1
  83. package/dist/{chunk-XNCKBVZX.js → chunk-IEZXEY7L.js} +5 -5
  84. package/dist/{chunk-KOZBVXXC.js → chunk-IGMI36FA.js} +3 -3
  85. package/dist/{chunk-V52J2THT.js → chunk-IZ7MIGO7.js} +1 -1
  86. package/dist/{chunk-FPG7X2GS.js → chunk-J7WPO2M2.js} +4 -4
  87. package/dist/{chunk-BQ673OOD.js → chunk-JK7GROFO.js} +2 -2
  88. package/dist/{chunk-YCCLWG7G.js → chunk-JY2DOJKN.js} +6 -6
  89. package/dist/{chunk-CXIYGD33.js → chunk-KRKH26TX.js} +2 -2
  90. package/dist/{chunk-HYTDNEXV.js → chunk-LIIIC27B.js} +1 -1
  91. package/dist/{chunk-2UE2NDCX.js → chunk-LS3CQ536.js} +1 -1
  92. package/dist/{chunk-VFZ2PE6U.js → chunk-N47MAVYX.js} +3 -3
  93. package/dist/{chunk-VMM6JCNQ.js → chunk-NCHNITQW.js} +2 -2
  94. package/dist/{chunk-PDAOZ2NF.js → chunk-NDOT226I.js} +10 -10
  95. package/dist/{chunk-UHAUC7EO.js → chunk-NLEHRQHL.js} +2 -2
  96. package/dist/{chunk-AGXOTZID.js → chunk-O7VVRTOR.js} +5 -5
  97. package/dist/{chunk-NASQPMXW.js → chunk-QK4I4CHR.js} +9 -9
  98. package/dist/{chunk-4SZM2HRA.js → chunk-RI5APNBY.js} +6 -6
  99. package/dist/{chunk-W5ZUDPKV.js → chunk-RK7QHQTY.js} +5 -5
  100. package/dist/{chunk-SSBETUYZ.js → chunk-S6TMCUU7.js} +3 -3
  101. package/dist/{chunk-EISUEJDT.js → chunk-SFMJMQJC.js} +6 -6
  102. package/dist/{chunk-W6LKC5YD.js → chunk-SQPAX33Q.js} +5 -5
  103. package/dist/{chunk-YZ7V2LVG.js → chunk-SZV5SLSD.js} +3 -3
  104. package/dist/{chunk-RIAELZYW.js → chunk-T2WDQ3NT.js} +2 -2
  105. package/dist/{chunk-KILSIJTF.js → chunk-TZHTLLXJ.js} +53 -16
  106. package/dist/{chunk-4D23TNCL.js → chunk-UI7XS3MN.js} +4 -4
  107. package/dist/{chunk-RGXFBS56.js → chunk-UIHY3ANL.js} +3 -3
  108. package/dist/{chunk-B7BOENW7.js → chunk-UV2JM3PZ.js} +1 -1
  109. package/dist/{chunk-6YLVNFQZ.js → chunk-VUNQZNKR.js} +3 -3
  110. package/dist/{chunk-3IESC326.js → chunk-W4OWC34V.js} +3 -3
  111. package/dist/{chunk-EP6I3MQY.js → chunk-WJUFRGJS.js} +4 -4
  112. package/dist/{chunk-R67NTMBY.js → chunk-WS37PSC5.js} +8 -8
  113. package/dist/{chunk-MEPYLTWF.js → chunk-WSYWK4I3.js} +10 -10
  114. package/dist/{chunk-3B7S2H4R.js → chunk-X2PN3XNW.js} +1 -1
  115. package/dist/{chunk-G4OVFWU4.js → chunk-X4CDZLUK.js} +46 -28
  116. package/dist/{chunk-COXNQUDP.js → chunk-XOYPF2BI.js} +4 -4
  117. package/dist/{chunk-5T5T4YXM.js → chunk-Z7FUHJKU.js} +1 -1
  118. package/dist/{chunk-L3MCQSES.js → chunk-ZQHT57AL.js} +5 -5
  119. package/dist/{codex-app-cards-switch-J6EULXO5.js → codex-app-cards-switch-MEVTS3QV.js} +12 -12
  120. package/dist/{codex-card-routing-XNJB6573.js → codex-card-routing-JTZ2PC24.js} +2 -2
  121. package/dist/{codex-desktop-launch-46ELENBQ.js → codex-desktop-launch-E5TZ72YZ.js} +1 -1
  122. package/dist/{codex-session-launch-R5FHFWAG.js → codex-session-launch-UMVQ7FJA.js} +18 -18
  123. package/dist/{config-RKWDMDRY.js → config-43UOHCK6.js} +3 -3
  124. package/dist/{global-upgrade-E65GJQS6.js → global-upgrade-KHVTFNAK.js} +9 -9
  125. package/dist/{identity-JRGY2KS6.js → identity-DAUTKB5X.js} +4 -4
  126. package/dist/{live-capabilities-SOO6PD7Y.js → live-capabilities-T2FOTXAH.js} +4 -4
  127. package/dist/{paths-G7NZODAY.js → paths-W5X4C6PA.js} +3 -3
  128. package/dist/{reapply-YKN5BKIP.js → reapply-WW4LJZUD.js} +28 -28
  129. package/dist/src/index.d.ts +1 -1
  130. package/dist/src/index.js +32 -32
  131. package/dist/{upgrade-lock-YKAZI3BH.js → upgrade-lock-TJBGZLH6.js} +4 -4
  132. package/dist/{usage-QWYNOIU6.js → usage-MUXR5SZ7.js} +3 -3
  133. package/package.json +1 -1
@@ -3,7 +3,7 @@ import {
3
3
  formatVersion,
4
4
  quoteIfNeeded,
5
5
  shellDoubleQuoted
6
- } from "./chunk-KOZBVXXC.js";
6
+ } from "./chunk-IGMI36FA.js";
7
7
  import {
8
8
  writeFileAtomic
9
9
  } from "./chunk-T5I4PKOQ.js";
@@ -13,12 +13,13 @@ import {
13
13
  import {
14
14
  CLAUDE_MCP_PRETOOLUSE_MATCHER,
15
15
  CLAUDE_PRETOOLUSE_MATCHER,
16
+ CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER,
16
17
  CODEX_QUESTION_TOOLS,
17
18
  HOOK_BUDGETS,
18
19
  HOOK_LOCATOR_BINARY,
19
20
  PRETOOLUSE_GATED_TOOLS,
20
21
  withHookHoldBudget
21
- } from "./chunk-TRDHHF3A.js";
22
+ } from "./chunk-HI5YJFKW.js";
22
23
 
23
24
  // src/setup/paths.ts
24
25
  import { createHash as createHash2 } from "crypto";
@@ -741,9 +742,13 @@ var CLAUDE_MCP_ROUTE_HOLD_HOOK = {
741
742
  matcher: CLAUDE_MCP_PRETOOLUSE_MATCHER,
742
743
  timeout: HOOK_BUDGETS.claude.budgetSeconds,
743
744
  delivery: "approval",
744
- cliOnly: true,
745
745
  since: ESTABLISHED
746
746
  };
747
+ var CLAUDE_REFUSALS_ONLY_HOOK = {
748
+ ...CLAUDE_MCP_ROUTE_HOLD_HOOK,
749
+ matcher: CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER
750
+ };
751
+ var CLAUDE_EXTRA_PRETOOLUSE_HOOKS = [CLAUDE_MCP_ROUTE_HOLD_HOOK, CLAUDE_REFUSALS_ONLY_HOOK];
747
752
  var supportedClaudeEvents = (version) => CLAUDE_HOOK_EVENTS.filter((hook) => version ? atLeast(version, hook.since) : hook.since === ESTABLISHED);
748
753
  var registrationSignatures = (events, version) => Object.fromEntries(
749
754
  events.map((hook) => [hook.event, `registered|${version ? formatVersion(version) : "unknown"}`])
@@ -892,9 +897,10 @@ var addPusharyHooks = (settings, binDir, version = null) => {
892
897
  delete hooks[known.event];
893
898
  }
894
899
  }
895
- if (supported.has(CLAUDE_MCP_ROUTE_HOLD_HOOK.event)) {
896
- const current = Array.isArray(hooks.PreToolUse) ? hooks.PreToolUse : [];
897
- hooks.PreToolUse = [...current, entry(CLAUDE_MCP_ROUTE_HOLD_HOOK, resolve2)];
900
+ for (const extra of CLAUDE_EXTRA_PRETOOLUSE_HOOKS) {
901
+ if (!supported.has(extra.event)) continue;
902
+ const current = Array.isArray(hooks[extra.event]) ? hooks[extra.event] : [];
903
+ hooks[extra.event] = [...current, entry(extra, resolve2)];
898
904
  }
899
905
  };
900
906
  var entry = (definition, resolve2) => ({
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-POFBE6ZY.js";
4
4
  import {
5
5
  autoUpdateState
6
- } from "./chunk-CBLFIWPI.js";
6
+ } from "./chunk-GZ3D46PV.js";
7
7
  import {
8
8
  readJsonSafe,
9
9
  writeJsonAtomic
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ZVU6WMMU.js";
18
18
  import {
19
19
  isAutoUpdateResult
20
- } from "./chunk-TRDHHF3A.js";
20
+ } from "./chunk-HI5YJFKW.js";
21
21
 
22
22
  // src/auto-update.ts
23
23
  import { spawn } from "child_process";
@@ -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;
@@ -8533,6 +8573,14 @@ var GATE_ALLOW_SOURCE = {
8533
8573
  };
8534
8574
  var PUSHARY_TOOL_PREFIX = "mcp__pushary__";
8535
8575
  var isPusharyOwnTool = (toolName) => toolName.startsWith(PUSHARY_TOOL_PREFIX);
8576
+ var PUSHARY_CONNECTOR_TOOL_PREFIXES = ["mcp__claude_ai_Pushary__", "mcp__plugin_pushary_pushary__"];
8577
+ var SERVER_AND_TOOL_SEPARATOR = "__";
8578
+ var namesOneToolAfterPrefix = (toolName, prefix) => {
8579
+ if (!toolName.startsWith(prefix)) return false;
8580
+ const tool = toolName.slice(prefix.length);
8581
+ return tool.length > 0 && !tool.includes(SERVER_AND_TOOL_SEPARATOR);
8582
+ };
8583
+ var isPusharyConnectorTool = (toolName) => PUSHARY_CONNECTOR_TOOL_PREFIXES.some((prefix) => namesOneToolAfterPrefix(toolName, prefix));
8536
8584
  var strictestScopeVerdict = (scope, paths) => {
8537
8585
  if (paths.length === 0) return evaluateScope(scope, void 0);
8538
8586
  let worst = { outcome: "in_scope" };
@@ -8643,6 +8691,17 @@ var PRETOOLUSE_HANDLED_TOOLS = /* @__PURE__ */ new Set([...PRETOOLUSE_GATED_TOOL
8643
8691
  var isPermissionRequestOwnedByPreToolUse = (toolName, permissionMode, defers = shouldDeferToNativeMode) => PRETOOLUSE_HANDLED_TOOLS.has(toolName) && (isAskedInEveryMode(toolName) || !defers(permissionMode, toolName));
8644
8692
  var CLAUDE_PRETOOLUSE_MATCHER = [...PRETOOLUSE_HANDLED_TOOLS].join("|");
8645
8693
  var CLAUDE_MCP_PRETOOLUSE_MATCHER = "mcp__.*";
8694
+ var CLAUDE_REFUSALS_ONLY_TOOLS = ["WebFetch", "Task", "Agent"];
8695
+ var CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER = `^(${CLAUDE_REFUSALS_ONLY_TOOLS.join("|")})$`;
8696
+ var CLAUDE_SUBAGENT_TOOL_ALIASES = { Task: "Agent", Agent: "Task" };
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
+ };
8646
8705
  var LINE_BREAK = /[\r\n]/;
8647
8706
  var bypassModeCovers = (toolName, toolInput) => {
8648
8707
  const arg = extractPolicyArg(toolName, toolInput);
@@ -8663,6 +8722,7 @@ var PATTERN_PREFIX_WILDCARD = /(?::\*|\*)?\)$/;
8663
8722
  var CONTINUES_A_COMMAND_WORD = /^[ :]/;
8664
8723
  var ruleNarrowsThePattern = (ruleTool, pattern) => {
8665
8724
  if (ruleTool === pattern) return false;
8725
+ if (pattern === WILDCARD_TOOL_PATTERN) return true;
8666
8726
  if (!pattern.includes("(")) return ruleTool.includes("(");
8667
8727
  const prefix = pattern.replace(PATTERN_PREFIX_WILDCARD, "");
8668
8728
  return ruleTool.startsWith(prefix) && CONTINUES_A_COMMAND_WORD.test(ruleTool.slice(prefix.length));
@@ -8701,7 +8761,7 @@ var extraReadingsOf = (toolInput) => {
8701
8761
  const readings = [
8702
8762
  commentFree,
8703
8763
  ...spelledOut,
8704
- ...[command, commentFree, ...spelledOut].filter(isAReading).flatMap((text3) => scriptsPassedToAShell(text3)).map(readingWithoutCommentsOrAnsiEscapes)
8764
+ ...[command, commentFree, ...spelledOut].filter(isAReading).flatMap(readingsOfScriptsPassedToAShell)
8705
8765
  ];
8706
8766
  return readings.filter(isAReading).map((reading) => ({ ...toolInput, command: reading }));
8707
8767
  };
@@ -9588,6 +9648,7 @@ export {
9588
9648
  resolvePolicy,
9589
9649
  KILL_REASON,
9590
9650
  isPusharyOwnTool,
9651
+ isPusharyConnectorTool,
9591
9652
  shouldDeferToNativeMode,
9592
9653
  AGENT_QUESTION_TOOL,
9593
9654
  AGENT_QUESTION_STRATEGY,
@@ -9608,6 +9669,9 @@ export {
9608
9669
  isPermissionRequestOwnedByPreToolUse,
9609
9670
  CLAUDE_PRETOOLUSE_MATCHER,
9610
9671
  CLAUDE_MCP_PRETOOLUSE_MATCHER,
9672
+ CLAUDE_REFUSALS_ONLY_PRETOOLUSE_MATCHER,
9673
+ isClaudeRefusalsOnlyTool,
9674
+ standingDenyOfSubagentAlias,
9611
9675
  permissionsOffLineAppliesTo,
9612
9676
  permissionsOffAskReason,
9613
9677
  resolveGate,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pusharyFetch
3
- } from "./chunk-RGXFBS56.js";
3
+ } from "./chunk-UIHY3ANL.js";
4
4
  import {
5
5
  getBaseUrl
6
- } from "./chunk-R3RTISDD.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-TRDHHF3A.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;
@@ -531,8 +531,8 @@ var loadedOnce = (load) => {
531
531
  };
532
532
 
533
533
  // src/codex-desktop-proxy.ts
534
- var loadThePhone = () => import("./api-WWB7ZOLK.js");
535
- var loadTheCardRouting = () => import("./codex-card-routing-XNJB6573.js");
534
+ var loadThePhone = () => import("./api-RI52IA65.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-J6EULXO5.js");
1088
+ const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-MEVTS3QV.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]");
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-BG4HHB7E.js";
4
4
  import {
5
5
  renderCommandHelp
6
- } from "./chunk-PJSFKKZ5.js";
6
+ } from "./chunk-5S32WI3B.js";
7
7
  import {
8
8
  getPackageVersion
9
9
  } from "./chunk-ZVU6WMMU.js";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  announceSubscriptionRequired,
3
3
  isDeferAnswer
4
- } from "./chunk-GBVTVTDF.js";
4
+ } from "./chunk-7FDDOT2A.js";
5
5
  import {
6
6
  askUser,
7
7
  isDecisionStopped,
8
8
  isQuestionLimitRefusal,
9
9
  waitForQuestion
10
- } from "./chunk-NASQPMXW.js";
10
+ } from "./chunk-QK4I4CHR.js";
11
11
  import {
12
12
  SubscriptionRequiredError
13
- } from "./chunk-W6LKC5YD.js";
13
+ } from "./chunk-SQPAX33Q.js";
14
14
  import {
15
15
  getMachineId
16
- } from "./chunk-TZYVXTLN.js";
16
+ } from "./chunk-4LR27PGD.js";
17
17
  import {
18
18
  ASK_CONTEXT_MAX,
19
19
  agentQuestionContext,
@@ -23,7 +23,7 @@ import {
23
23
  plainAskOf,
24
24
  questionsShownAsASet,
25
25
  shouldDeferToNativeMode
26
- } from "./chunk-TRDHHF3A.js";
26
+ } from "./chunk-HI5YJFKW.js";
27
27
 
28
28
  // src/native-defer.ts
29
29
  var nativeDeferOptions = () => {
@@ -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-E65GJQS6.js");
403
- const { installWithUpgradeLock, ownsUpgradeLock } = await import("./upgrade-lock-YKAZI3BH.js");
404
- const { autoUpdateLock } = await import("./paths-G7NZODAY.js");
402
+ const { withUpgradeLock } = await import("./global-upgrade-KHVTFNAK.js");
403
+ const { installWithUpgradeLock, ownsUpgradeLock } = await import("./upgrade-lock-TJBGZLH6.js");
404
+ const { autoUpdateLock } = await import("./paths-W5X4C6PA.js");
405
405
  let result = "skipped";
406
406
  const install = async () => {
407
407
  const platform = process.platform;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  guardBinary
3
- } from "./chunk-CBLFIWPI.js";
3
+ } from "./chunk-GZ3D46PV.js";
4
4
 
5
5
  // src/bell/install.ts
6
6
  import { join } from "path";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  macAppBridgeAvailable
3
- } from "./chunk-AGXOTZID.js";
3
+ } from "./chunk-O7VVRTOR.js";
4
4
  import {
5
5
  keyPrefix
6
- } from "./chunk-YZ7V2LVG.js";
6
+ } from "./chunk-SZV5SLSD.js";
7
7
  import {
8
8
  bridgeAgentKey
9
- } from "./chunk-CBLFIWPI.js";
9
+ } from "./chunk-GZ3D46PV.js";
10
10
  import {
11
11
  readJsonSafe
12
12
  } from "./chunk-T5I4PKOQ.js";
13
13
  import {
14
14
  isRecord,
15
15
  isValidApiKey
16
- } from "./chunk-TRDHHF3A.js";
16
+ } from "./chunk-HI5YJFKW.js";
17
17
 
18
18
  // src/shared-mcp-key.ts
19
19
  var asRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  absoluteUrl
3
- } from "./chunk-4HDX77ND.js";
3
+ } from "./chunk-HINZZUOB.js";
4
4
  import {
5
5
  KEY_SCOPE
6
- } from "./chunk-TRDHHF3A.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,19 +1,19 @@
1
1
  import {
2
2
  APPROVAL_RULES_PATH,
3
3
  canChangeApprovalSettings
4
- } from "./chunk-BQ673OOD.js";
4
+ } from "./chunk-JK7GROFO.js";
5
5
  import {
6
6
  callMcpTool
7
- } from "./chunk-W6LKC5YD.js";
7
+ } from "./chunk-SQPAX33Q.js";
8
8
  import {
9
9
  absoluteUrl
10
- } from "./chunk-4HDX77ND.js";
10
+ } from "./chunk-HINZZUOB.js";
11
11
  import {
12
12
  getBaseUrl
13
- } from "./chunk-R3RTISDD.js";
13
+ } from "./chunk-2M7FELUY.js";
14
14
  import {
15
15
  NPX_LATEST_COMMAND
16
- } from "./chunk-PJSFKKZ5.js";
16
+ } from "./chunk-5S32WI3B.js";
17
17
  import {
18
18
  AGENT_STOP_DEFAULT_SECONDS,
19
19
  APPROVAL_MODE_META,
@@ -21,7 +21,7 @@ import {
21
21
  classifyConfirmResponse,
22
22
  isAnswerSource,
23
23
  roundTripAsk
24
- } from "./chunk-TRDHHF3A.js";
24
+ } from "./chunk-HI5YJFKW.js";
25
25
 
26
26
  // src/reach.ts
27
27
  var reachVerdict = (channels) => {
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-ROVLRXBI.js";
4
4
  import {
5
5
  parseVersion
6
- } from "./chunk-KOZBVXXC.js";
6
+ } from "./chunk-IGMI36FA.js";
7
7
  import {
8
8
  isRecord
9
- } from "./chunk-TRDHHF3A.js";
9
+ } from "./chunk-HI5YJFKW.js";
10
10
 
11
11
  // src/setup/agent-probe.ts
12
12
  import { execSync } from "child_process";
@@ -7,7 +7,7 @@ import {
7
7
  recordSealerFor,
8
8
  uploadTranscriptRecords,
9
9
  wrapSessionKey
10
- } from "./chunk-SQRS4IF2.js";
10
+ } from "./chunk-5MITA7MU.js";
11
11
 
12
12
  // src/live-session.ts
13
13
  var MAX_TRANSCRIPT_QUEUE = 100;
@@ -9,7 +9,7 @@ import {
9
9
  isSetupConnectMode,
10
10
  isValidApiKey,
11
11
  normalizeAgentId
12
- } from "./chunk-TRDHHF3A.js";
12
+ } from "./chunk-HI5YJFKW.js";
13
13
 
14
14
  // src/setup/options.ts
15
15
  var AGENT_CHOICES = SETUP_AGENT_CHOICES;
@@ -4,15 +4,15 @@ import {
4
4
  claimThrottle,
5
5
  releaseThrottle,
6
6
  reportEvent
7
- } from "./chunk-G4OVFWU4.js";
7
+ } from "./chunk-X4CDZLUK.js";
8
8
  import {
9
9
  deriveToolTarget,
10
10
  permissionDeniedAction
11
- } from "./chunk-GW3PE52Q.js";
11
+ } from "./chunk-7OSBFMRV.js";
12
12
  import {
13
13
  machineDecisionFor,
14
14
  wireVerdictFor
15
- } from "./chunk-TRDHHF3A.js";
15
+ } from "./chunk-HI5YJFKW.js";
16
16
 
17
17
  // src/machine-decision-audit.ts
18
18
  import { basename } from "path";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  configFilePath
3
- } from "./chunk-R3RTISDD.js";
3
+ } from "./chunk-2M7FELUY.js";
4
4
  import {
5
5
  normalizeInstallSource
6
- } from "./chunk-TRDHHF3A.js";
6
+ } from "./chunk-HI5YJFKW.js";
7
7
 
8
8
  // src/install-source.ts
9
9
  import { readFileSync } from "fs";
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-G66WIAST.js";
8
8
  import {
9
9
  ensureDaemonRunning
10
- } from "./chunk-EISUEJDT.js";
10
+ } from "./chunk-SFMJMQJC.js";
11
11
  import {
12
12
  hookOwnerOf
13
- } from "./chunk-COXNQUDP.js";
13
+ } from "./chunk-XOYPF2BI.js";
14
14
  import {
15
15
  hookMeaning
16
- } from "./chunk-GW3PE52Q.js";
16
+ } from "./chunk-7OSBFMRV.js";
17
17
  import {
18
18
  buildTranscriptRecords,
19
19
  decodePublicKey,
@@ -24,29 +24,29 @@ import {
24
24
  recordSealerFor,
25
25
  uploadTranscriptRecords,
26
26
  wrapSessionKey
27
- } from "./chunk-SQRS4IF2.js";
27
+ } from "./chunk-5MITA7MU.js";
28
28
  import {
29
29
  external_exports
30
30
  } from "./chunk-XMSDA5WA.js";
31
31
  import {
32
32
  transcriptEnvironmentPreference,
33
33
  transcriptsEnabled
34
- } from "./chunk-TLCJCP5R.js";
34
+ } from "./chunk-AH4NLZTT.js";
35
35
  import {
36
36
  fetchAsCredential
37
- } from "./chunk-U32N5JZO.js";
37
+ } from "./chunk-E5LU5MJ2.js";
38
38
  import {
39
39
  readTranscriptPreference
40
- } from "./chunk-YZ7V2LVG.js";
40
+ } from "./chunk-SZV5SLSD.js";
41
41
  import {
42
42
  claudeConfigDir,
43
43
  codexHome,
44
44
  pusharyDir
45
- } from "./chunk-CBLFIWPI.js";
45
+ } from "./chunk-GZ3D46PV.js";
46
46
  import {
47
47
  getApiKey,
48
48
  getBaseUrl
49
- } from "./chunk-R3RTISDD.js";
49
+ } from "./chunk-2M7FELUY.js";
50
50
  import {
51
51
  writeJsonAtomic,
52
52
  writeJsonAtomicDurable
@@ -58,7 +58,7 @@ import {
58
58
  isHookSource,
59
59
  isRecord,
60
60
  redactSecretsFromContent
61
- } from "./chunk-TRDHHF3A.js";
61
+ } from "./chunk-HI5YJFKW.js";
62
62
 
63
63
  // src/transcript-recipient-pin.ts
64
64
  import { createHash } from "crypto";
@@ -4,10 +4,10 @@ import {
4
4
  keyPrefix,
5
5
  readConfigFileKey,
6
6
  readMacAppKeyPrefix
7
- } from "./chunk-YZ7V2LVG.js";
7
+ } from "./chunk-SZV5SLSD.js";
8
8
  import {
9
9
  NPX_LATEST_COMMAND
10
- } from "./chunk-PJSFKKZ5.js";
10
+ } from "./chunk-5S32WI3B.js";
11
11
 
12
12
  // src/key-signed-out.ts
13
13
  var VERDICT_BY_CHECK = {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  compatibleConfigFile
3
- } from "./chunk-YZESBU7F.js";
3
+ } from "./chunk-6RME4X3J.js";
4
4
  import {
5
5
  hookOwnerOf,
6
6
  hookOwnerOfCommands
7
- } from "./chunk-COXNQUDP.js";
7
+ } from "./chunk-XOYPF2BI.js";
8
8
  import {
9
9
  AGENT_CHOICES
10
- } from "./chunk-2UE2NDCX.js";
10
+ } from "./chunk-LS3CQ536.js";
11
11
  import {
12
12
  bridgeStub,
13
13
  claudeSettings,
@@ -19,7 +19,7 @@ import {
19
19
  resolveBridgeStub,
20
20
  vscodePluginDir,
21
21
  windowsNodeLauncherFor
22
- } from "./chunk-CBLFIWPI.js";
22
+ } from "./chunk-GZ3D46PV.js";
23
23
  import {
24
24
  readJsonSafe
25
25
  } from "./chunk-T5I4PKOQ.js";
@@ -29,7 +29,7 @@ import {
29
29
  OPENCODE_APPROVAL_EVENT,
30
30
  hookCompatibleProfile,
31
31
  isRecord
32
- } from "./chunk-TRDHHF3A.js";
32
+ } from "./chunk-HI5YJFKW.js";
33
33
 
34
34
  // src/opencode-plugin.ts
35
35
  var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
@@ -6,21 +6,21 @@ import {
6
6
  McpToolError,
7
7
  SubscriptionRequiredError,
8
8
  callMcpTool
9
- } from "./chunk-W6LKC5YD.js";
9
+ } from "./chunk-SQPAX33Q.js";
10
10
  import {
11
11
  installNetworkDefaults,
12
12
  isNetworkFailure
13
- } from "./chunk-RGXFBS56.js";
13
+ } from "./chunk-UIHY3ANL.js";
14
14
  import {
15
15
  fetchAsCredential
16
- } from "./chunk-U32N5JZO.js";
16
+ } from "./chunk-E5LU5MJ2.js";
17
17
  import {
18
18
  clientReportClaims
19
- } from "./chunk-CBLFIWPI.js";
19
+ } from "./chunk-GZ3D46PV.js";
20
20
  import {
21
21
  getApiKey,
22
22
  getBaseUrl
23
- } from "./chunk-R3RTISDD.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-TRDHHF3A.js";
32
+ } from "./chunk-HI5YJFKW.js";
33
33
 
34
34
  // src/api.ts
35
35
  import { randomUUID } from "crypto";
@@ -327,13 +327,13 @@ var claimBlockedAction = async (apiKey, request, timeoutMs) => {
327
327
  };
328
328
 
329
329
  export {
330
- isPolicyConfig,
331
- isAskUserResponse,
332
- isWaitForAnswerResponse,
333
330
  reportClientError,
334
331
  exitAfterClientReports,
335
332
  clientErrorKindOf,
336
333
  writeDegraded,
334
+ isPolicyConfig,
335
+ isAskUserResponse,
336
+ isWaitForAnswerResponse,
337
337
  isDecisionStopped,
338
338
  isAwayPaused,
339
339
  isLocalQuestionHandoff,
@@ -4,7 +4,7 @@ import {
4
4
  postLiveSession,
5
5
  postLiveSessionUntilAccepted,
6
6
  startLiveSessionHeartbeat
7
- } from "./chunk-HYTDNEXV.js";
7
+ } from "./chunk-LIIIC27B.js";
8
8
  import {
9
9
  CommandReceipts,
10
10
  controllerCommandSchema
@@ -14,21 +14,21 @@ import {
14
14
  describeIdleWindow,
15
15
  idleDeadlinePassed,
16
16
  startProcessOwnership
17
- } from "./chunk-SNKC2IQZ.js";
17
+ } from "./chunk-FG67GH5B.js";
18
18
  import {
19
19
  repositoryScopeFor
20
- } from "./chunk-SE7P5BBK.js";
20
+ } from "./chunk-2QWQCU7L.js";
21
21
  import {
22
22
  isAskUserResponse,
23
23
  isDecisionStopped,
24
24
  isWaitForAnswerResponse,
25
25
  withdrawQuestion,
26
26
  writeDegraded
27
- } from "./chunk-NASQPMXW.js";
27
+ } from "./chunk-QK4I4CHR.js";
28
28
  import {
29
29
  callMcpTool,
30
30
  isRetryable
31
- } from "./chunk-W6LKC5YD.js";
31
+ } from "./chunk-SQPAX33Q.js";
32
32
  import {
33
33
  spawnClaude
34
34
  } from "./chunk-XHKBHWLX.js";
@@ -52,7 +52,7 @@ import {
52
52
  parseCodexQuestions,
53
53
  planElicitationAsk,
54
54
  readElicitationFields
55
- } from "./chunk-TRDHHF3A.js";
55
+ } from "./chunk-HI5YJFKW.js";
56
56
 
57
57
  // src/codex-question-owner.ts
58
58
  import { createHash } from "crypto";