pushary 1.9.90 → 1.9.92

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 (128) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/data/cursor-plugin/scripts/pushary-gate.mjs +34 -9
  3. package/data/vscode-plugin/scripts/pushary-gate.mjs +34 -9
  4. package/dist/{api-ORGHXO4N.js → api-QUARGXSY.js} +10 -10
  5. package/dist/bin/pushary-bell-hook.js +26 -26
  6. package/dist/bin/pushary-bell.js +10 -10
  7. package/dist/bin/pushary-claude.js +30 -29
  8. package/dist/bin/pushary-clean.js +34 -34
  9. package/dist/bin/pushary-codex-bridge.js +21 -21
  10. package/dist/bin/pushary-codex-hook.js +35 -34
  11. package/dist/bin/pushary-codex-session.js +8 -8
  12. package/dist/bin/pushary-codex.js +14 -14
  13. package/dist/bin/pushary-connect.js +27 -27
  14. package/dist/bin/pushary-cowork.js +5 -5
  15. package/dist/bin/pushary-daemon.js +39 -39
  16. package/dist/bin/pushary-disconnect.js +26 -26
  17. package/dist/bin/pushary-display-hook.js +17 -17
  18. package/dist/bin/pushary-doctor.js +45 -48
  19. package/dist/bin/pushary-elicitation-hook.js +26 -26
  20. package/dist/bin/pushary-gemini-bridge.js +15 -15
  21. package/dist/bin/pushary-gemini-hook.js +28 -28
  22. package/dist/bin/pushary-hook.js +30 -30
  23. package/dist/bin/pushary-login.js +20 -20
  24. package/dist/bin/pushary-logout.js +25 -25
  25. package/dist/bin/pushary-mcp.js +11 -11
  26. package/dist/bin/pushary-mode.js +15 -15
  27. package/dist/bin/pushary-notification-hook.js +25 -25
  28. package/dist/bin/pushary-opencode-hook.js +27 -27
  29. package/dist/bin/pushary-permission-denied-hook.js +30 -30
  30. package/dist/bin/pushary-permission-hook.js +30 -30
  31. package/dist/bin/pushary-post-hook.js +25 -25
  32. package/dist/bin/pushary-prompt-hook.js +25 -25
  33. package/dist/bin/pushary-session-end-hook.js +27 -27
  34. package/dist/bin/pushary-session-start-hook.js +35 -35
  35. package/dist/bin/pushary-setup.js +50 -49
  36. package/dist/bin/pushary-stats.js +5 -5
  37. package/dist/bin/pushary-status.js +32 -32
  38. package/dist/bin/pushary-stop-hook.js +25 -25
  39. package/dist/bin/pushary-stopfailure-hook.js +25 -25
  40. package/dist/bin/pushary-suggestions.js +15 -15
  41. package/dist/bin/pushary-transcript-register.js +18 -18
  42. package/dist/bin/pushary-transcripts.js +26 -26
  43. package/dist/bin/pushary-upgrade.js +40 -40
  44. package/dist/bin/pushary-wait.js +15 -15
  45. package/dist/bin/pushary.js +7 -7
  46. package/dist/{chunk-FAM2TLFC.js → chunk-2BVVMWVF.js} +47 -8
  47. package/dist/{chunk-NMDWW3EY.js → chunk-2BXWBKVN.js} +3 -3
  48. package/dist/{chunk-2RUJIPNN.js → chunk-2FL5PLA4.js} +2 -2
  49. package/dist/{chunk-KT25MC57.js → chunk-373552A3.js} +4 -4
  50. package/dist/{chunk-G7GVI5RL.js → chunk-3CJFBWID.js} +3 -3
  51. package/dist/{chunk-WGBW66IO.js → chunk-3JVV6PMG.js} +5 -5
  52. package/dist/{chunk-TOPXBWUN.js → chunk-4HQTZQ4D.js} +2 -2
  53. package/dist/{chunk-XO3UJDJE.js → chunk-4PD7FP55.js} +2 -2
  54. package/dist/{chunk-EFQQLEWW.js → chunk-5TQC2LS6.js} +4 -4
  55. package/dist/{chunk-K2NIENKY.js → chunk-66VEUAN5.js} +1 -1
  56. package/dist/{chunk-V4ZLZYQ4.js → chunk-6QH4MWCW.js} +3 -3
  57. package/dist/{chunk-OGR5WSHI.js → chunk-76ROCOWD.js} +7 -7
  58. package/dist/{chunk-OODEIR3Z.js → chunk-7DOSRSRU.js} +38 -20
  59. package/dist/{chunk-TTXUWHBL.js → chunk-7PQ66CB3.js} +1 -1
  60. package/dist/{chunk-53YQO4HL.js → chunk-7S3LH5AX.js} +11 -11
  61. package/dist/{chunk-2EOTXWFK.js → chunk-7YB2XRY7.js} +3 -3
  62. package/dist/{chunk-APT7KJ5I.js → chunk-ANDG4PUV.js} +6 -6
  63. package/dist/{chunk-VMUBIBHQ.js → chunk-B6WYXY32.js} +7 -7
  64. package/dist/{chunk-GKDVI6WX.js → chunk-BETKU76V.js} +3 -3
  65. package/dist/{chunk-ALT4KW5M.js → chunk-CA4PS7XT.js} +5 -5
  66. package/dist/{chunk-HT5WOP2M.js → chunk-CFD3IESN.js} +6 -6
  67. package/dist/{chunk-7EGNVZLK.js → chunk-CHVXLS7U.js} +2 -2
  68. package/dist/{chunk-I567L2KG.js → chunk-CI6VDIHW.js} +10 -10
  69. package/dist/{chunk-QCSPLJL6.js → chunk-CO6TQ44W.js} +3 -3
  70. package/dist/{chunk-CNFM6JEV.js → chunk-CSUO5YJG.js} +2 -2
  71. package/dist/{chunk-AF3OHGKE.js → chunk-DV7LLH25.js} +1 -1
  72. package/dist/{chunk-3EVOYLXQ.js → chunk-DYNMKVNO.js} +5 -5
  73. package/dist/{chunk-OEPP5VUW.js → chunk-F2CWT6Y6.js} +6 -6
  74. package/dist/{chunk-CE2ISNPN.js → chunk-FCBFWXPE.js} +5 -5
  75. package/dist/{chunk-5DTOMJVD.js → chunk-FTJ5DQL7.js} +2 -2
  76. package/dist/{chunk-ALTGRWSO.js → chunk-GDVS6J4R.js} +1 -1
  77. package/dist/{chunk-MWXX34K4.js → chunk-GLA6MCOG.js} +1 -1
  78. package/dist/{chunk-XBXBX7YF.js → chunk-H4MIOBC6.js} +2 -2
  79. package/dist/{chunk-CDBGZWPY.js → chunk-HUNGCBCF.js} +3 -3
  80. package/dist/{chunk-OH67LB2U.js → chunk-INSLGCGD.js} +18 -17
  81. package/dist/{chunk-LJFITB6T.js → chunk-ITGPUTFV.js} +4 -4
  82. package/dist/{chunk-DADN6GJO.js → chunk-JJWZIPDL.js} +4 -4
  83. package/dist/{chunk-2U6FPMXG.js → chunk-JZ2MRWC4.js} +3 -3
  84. package/dist/{chunk-HKGGENVU.js → chunk-KJ752DUH.js} +6 -6
  85. package/dist/{chunk-LGQQUQDZ.js → chunk-LANGH7UF.js} +4 -4
  86. package/dist/{chunk-7BEQB3X4.js → chunk-LTMMFZHG.js} +1 -1
  87. package/dist/{chunk-6P4II3ZL.js → chunk-N7CPX5S5.js} +5 -5
  88. package/dist/{chunk-E4XGV5UG.js → chunk-NDPOESVW.js} +1 -1
  89. package/dist/{chunk-ASTOMXHJ.js → chunk-NHGOCUX7.js} +1 -1
  90. package/dist/{chunk-32F3BWRY.js → chunk-NPZ5L2WQ.js} +1 -1
  91. package/dist/{chunk-NIZ6ITRH.js → chunk-NZKH2RMQ.js} +1 -1
  92. package/dist/{chunk-7MN3KPHM.js → chunk-OC47FGOY.js} +1 -1
  93. package/dist/{chunk-INNH7EUK.js → chunk-OFQJHWAS.js} +12 -10
  94. package/dist/{chunk-VE333PL5.js → chunk-OMN5UCMW.js} +120 -69
  95. package/dist/{chunk-Y5BPNOJI.js → chunk-PFHU3CW4.js} +1 -1
  96. package/dist/{chunk-6B4O7XNC.js → chunk-PS2K6ZQ3.js} +12 -11
  97. package/dist/{chunk-P4OZVK2B.js → chunk-R3EUVK3A.js} +4 -4
  98. package/dist/{chunk-XRSE2PAM.js → chunk-RXAQOAZI.js} +3 -3
  99. package/dist/{chunk-K6QLKUCT.js → chunk-RXQT5FTX.js} +52 -11
  100. package/dist/{chunk-6LJOCQBB.js → chunk-SPPMPM7F.js} +1 -1
  101. package/dist/{chunk-FSJYYZ3G.js → chunk-SR44ZNZF.js} +5 -5
  102. package/dist/{chunk-QUKDNQ4L.js → chunk-UGGACQMD.js} +3 -3
  103. package/dist/{chunk-3N4GETIW.js → chunk-UHS3JZLN.js} +2 -2
  104. package/dist/{chunk-4V25M4X5.js → chunk-UNPDFIPQ.js} +2 -2
  105. package/dist/{chunk-JJNO3ACZ.js → chunk-UZRKR6NZ.js} +3 -3
  106. package/dist/{chunk-URJHH72Z.js → chunk-V3LBQFQM.js} +1 -1
  107. package/dist/{chunk-E3EJARHF.js → chunk-V7TNHTHH.js} +1 -1
  108. package/dist/{chunk-72UCLJJW.js → chunk-VMIWR724.js} +1 -1
  109. package/dist/{chunk-VTF6EYVB.js → chunk-VTCSUU4R.js} +5 -5
  110. package/dist/{chunk-SJCPI4WT.js → chunk-WW4OMRZX.js} +1 -1
  111. package/dist/{chunk-XIPP777K.js → chunk-X3AHEUQ5.js} +3 -3
  112. package/dist/{chunk-NWSGMYX7.js → chunk-XTNCXIYR.js} +4 -4
  113. package/dist/{chunk-I7UZODYO.js → chunk-Y7AX6BS4.js} +3 -3
  114. package/dist/{chunk-G7MVZHMM.js → chunk-YLCNW7YN.js} +2 -2
  115. package/dist/{chunk-JQUMX7YZ.js → chunk-YT3ENXBT.js} +2 -2
  116. package/dist/{codex-app-cards-switch-UQ7TGFYV.js → codex-app-cards-switch-XP2H2CZO.js} +11 -11
  117. package/dist/{codex-desktop-launch-O5FWONZ7.js → codex-desktop-launch-QRFE2GHZ.js} +1 -1
  118. package/dist/{codex-session-launch-MTKJC2RH.js → codex-session-launch-EUUWALWW.js} +18 -18
  119. package/dist/{config-EGBMIS5K.js → config-WBDMUTD4.js} +3 -3
  120. package/dist/{global-upgrade-QOAUUHZ6.js → global-upgrade-ZXFLRGGV.js} +10 -10
  121. package/dist/{identity-Z5TRRQL5.js → identity-NUQ75BP7.js} +4 -4
  122. package/dist/{live-capabilities-M4HOY7EM.js → live-capabilities-SIQ25SSK.js} +5 -5
  123. package/dist/{paths-ZOS6Y3PS.js → paths-BGO6PZFZ.js} +3 -3
  124. package/dist/{reapply-PYDRWYKU.js → reapply-QOXNSRFA.js} +28 -28
  125. package/dist/src/index.js +29 -29
  126. package/dist/{upgrade-lock-QZOSOFK5.js → upgrade-lock-B5HTMEWT.js} +4 -4
  127. package/dist/{usage-4FVOG3QN.js → usage-YHFALPKW.js} +3 -3
  128. package/package.json +1 -1
@@ -1,3 +1,67 @@
1
+ // ../contracts/src/redaction.ts
2
+ var CREDENTIAL_NAME = String.raw`(?:authorization|secret|token|password|passwd|api[_-]?key|access[_-]?key|client[_-]?secret|private[_-]?key)["']?`;
3
+ var CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}\s*[=:]\s*`;
4
+ var DISPLAYED_CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}(?:[ \t]*:[ \t]*|[ \t]+=[ \t]*|=)`;
5
+ var SHELL_INERT_UNIT = String.raw`(?:[A-Za-z0-9_\-./+=:@%^!#]|\\[^\s'"])`;
6
+ var SHELL_INERT_SINGLE_QUOTED_UNIT = String.raw`[A-Za-z0-9_\-./+=:@%^!#\\]`;
7
+ var SHELL_INERT_URL_PASSWORD_UNIT = String.raw`(?:[A-Za-z0-9_\-.+=:%^!#]|\\[^\s'"@/])`;
8
+ var PEM_LINE_BREAK = String.raw`(?:\r?\n|(?:\\r)?\\n)`;
9
+ var credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
10
+ pattern: new RegExp(String.raw`(${key})(?:(")${doubleQuoted}|(')${singleQuoted}|(["']?)${bare})`, "gi"),
11
+ replacement: "$1$2$3$4[redacted]$2$3"
12
+ });
13
+ var DISPLAYED_SECRET_SHAPES = {
14
+ separator: String.raw`[ \t]`,
15
+ privateKeyBody: String.raw`${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
16
+ urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
17
+ authorizationValue: `${SHELL_INERT_UNIT}+`,
18
+ credentialAssignment: credentialAssignmentRule(
19
+ DISPLAYED_CREDENTIAL_KEY,
20
+ `${SHELL_INERT_UNIT}*"`,
21
+ `${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`,
22
+ `${SHELL_INERT_UNIT}+`
23
+ )
24
+ };
25
+ var CUT_OFF_SECRET_SHAPES = {
26
+ separator: String.raw`\s`,
27
+ privateKeyBody: String.raw`[\s\S]*?`,
28
+ urlPassword: String.raw`[^\s@/]+`,
29
+ authorizationValue: String.raw`\S+`,
30
+ credentialAssignment: credentialAssignmentRule(
31
+ CREDENTIAL_KEY,
32
+ String.raw`(?:\\[\s\S]|[^"\\])*(?:"|\\?$)`,
33
+ "[^']*(?:'|$)",
34
+ String.raw`\S+`
35
+ )
36
+ };
37
+ var secretRedactionRules = (shapes) => [
38
+ { pattern: /\bpk_[A-Za-z0-9_]+\.[A-Za-z0-9_]+/g, replacement: "[redacted]" },
39
+ { pattern: new RegExp(String.raw`-----BEGIN[A-Z0-9 ]*PRIVATE KEY-----${shapes.privateKeyBody}-----END[A-Z0-9 ]*PRIVATE KEY-----`, "g"), replacement: "[redacted key]" },
40
+ { pattern: /\bsk-[A-Za-z0-9_-]{16,}\b/g, replacement: "[redacted]" },
41
+ { pattern: /\b[spr]k_(?:live|test)_[A-Za-z0-9]{8,}\b/g, replacement: "[redacted]" },
42
+ { pattern: /\bwhsec_[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
43
+ { pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g, replacement: "[redacted]" },
44
+ { pattern: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g, replacement: "[redacted]" },
45
+ { pattern: /\bglpat-[A-Za-z0-9_-]{20,}\b/g, replacement: "[redacted]" },
46
+ { pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, replacement: "[redacted]" },
47
+ { pattern: /\bAIza[A-Za-z0-9_-]{35}\b/g, replacement: "[redacted]" },
48
+ { pattern: /\bAKIA[0-9A-Z]{16}\b/g, replacement: "[redacted]" },
49
+ { pattern: /\bnpm_[A-Za-z0-9]{36}\b/g, replacement: "[redacted]" },
50
+ { pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
51
+ { pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: "[redacted]" },
52
+ { pattern: new RegExp(String.raw`\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, "gi"), replacement: "$1[redacted]@" },
53
+ { pattern: new RegExp(String.raw`\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, "gi"), replacement: "bearer [redacted]" },
54
+ { pattern: new RegExp(String.raw`\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, "gi"), replacement: "authorization: [redacted]" },
55
+ shapes.credentialAssignment
56
+ ];
57
+ var SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
58
+ var CUT_OFF_TEXT_REDACTION_RULES = secretRedactionRules(CUT_OFF_SECRET_SHAPES);
59
+ var HIGH_ENTROPY_RULE = { pattern: /[A-Za-z0-9+/]{40,}={0,2}/g, replacement: "[redacted]" };
60
+ var applyRedactionRules = (rules, text3) => rules.reduce((acc, rule) => acc.replace(rule.pattern, rule.replacement), text3);
61
+ var redactSecrets = (text3) => applyRedactionRules(SECRET_REDACTION_RULES, text3);
62
+ var redactSecretsFromContent = (text3) => applyRedactionRules(CUT_OFF_TEXT_REDACTION_RULES, text3);
63
+ var redactSecretsDeep = (text3) => redactSecrets(text3).replace(HIGH_ENTROPY_RULE.pattern, HIGH_ENTROPY_RULE.replacement);
64
+
1
65
  // ../contracts/src/json-record.ts
2
66
  var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
67
 
@@ -139,7 +203,8 @@ var CLAUDE_CONNECTOR_STEPS = [
139
203
  "For proactive Cowork use, install the Pushary Cowork plugin/skill or paste the standing instructions into Settings > Cowork.",
140
204
  "Ask Claude to send the test question below, answer it from Pushary, and confirm Claude receives your answer."
141
205
  ];
142
- var CLAUDE_CONNECTOR_TEST = "Use Pushary ask_user to ask \u201CDid this setup question reach you?\u201D with type \u201Cconfirm\u201D. Use agentName \u201CClaude Cowork - Setup check\u201D in Cowork or \u201CClaude Chat - Setup check\u201D in Chat. Wait for my answer and tell me which answer you received. Do not run a command or change any files.";
206
+ var CONNECTOR_SETUP_QUESTION = "Did this setup question reach you?";
207
+ var CLAUDE_CONNECTOR_TEST = `Use Pushary ask_user to ask \u201C${CONNECTOR_SETUP_QUESTION}\u201D with type \u201Cconfirm\u201D. Use agentName \u201CClaude Cowork - Setup check\u201D in Cowork or \u201CClaude Chat - Setup check\u201D in Chat. Wait for my answer and tell me which answer you received. Do not run a command or change any files.`;
143
208
  var COWORK_STANDING_INSTRUCTIONS = `Pushary is connected as a connector. Use it proactively to reach me on my phone or Mac notch.
144
209
 
145
210
  - When you need a decision or clarifying answer, call ask_user. Use type "confirm", "select", or "input" as appropriate. Ask once on one channel.
@@ -930,70 +995,6 @@ var compatibleTargetFiles = (profile) => {
930
995
  return [...seen.values()];
931
996
  };
932
997
 
933
- // ../contracts/src/redaction.ts
934
- var CREDENTIAL_NAME = String.raw`(?:authorization|secret|token|password|passwd|api[_-]?key|access[_-]?key|client[_-]?secret|private[_-]?key)["']?`;
935
- var CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}\s*[=:]\s*`;
936
- var DISPLAYED_CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}(?:[ \t]*:[ \t]*|[ \t]+=[ \t]*|=)`;
937
- var SHELL_INERT_UNIT = String.raw`(?:[A-Za-z0-9_\-./+=:@%^!#]|\\[^\s'"])`;
938
- var SHELL_INERT_SINGLE_QUOTED_UNIT = String.raw`[A-Za-z0-9_\-./+=:@%^!#\\]`;
939
- var SHELL_INERT_URL_PASSWORD_UNIT = String.raw`(?:[A-Za-z0-9_\-.+=:%^!#]|\\[^\s'"@/])`;
940
- var PEM_LINE_BREAK = String.raw`(?:\r?\n|(?:\\r)?\\n)`;
941
- var credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
942
- pattern: new RegExp(String.raw`(${key})(?:(")${doubleQuoted}|(')${singleQuoted}|(["']?)${bare})`, "gi"),
943
- replacement: "$1$2$3$4[redacted]$2$3"
944
- });
945
- var DISPLAYED_SECRET_SHAPES = {
946
- separator: String.raw`[ \t]`,
947
- privateKeyBody: String.raw`${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
948
- urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
949
- authorizationValue: `${SHELL_INERT_UNIT}+`,
950
- credentialAssignment: credentialAssignmentRule(
951
- DISPLAYED_CREDENTIAL_KEY,
952
- `${SHELL_INERT_UNIT}*"`,
953
- `${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`,
954
- `${SHELL_INERT_UNIT}+`
955
- )
956
- };
957
- var CUT_OFF_SECRET_SHAPES = {
958
- separator: String.raw`\s`,
959
- privateKeyBody: String.raw`[\s\S]*?`,
960
- urlPassword: String.raw`[^\s@/]+`,
961
- authorizationValue: String.raw`\S+`,
962
- credentialAssignment: credentialAssignmentRule(
963
- CREDENTIAL_KEY,
964
- String.raw`(?:\\[\s\S]|[^"\\])*(?:"|\\?$)`,
965
- "[^']*(?:'|$)",
966
- String.raw`\S+`
967
- )
968
- };
969
- var secretRedactionRules = (shapes) => [
970
- { pattern: /\bpk_[A-Za-z0-9_]+\.[A-Za-z0-9_]+/g, replacement: "[redacted]" },
971
- { pattern: new RegExp(String.raw`-----BEGIN[A-Z0-9 ]*PRIVATE KEY-----${shapes.privateKeyBody}-----END[A-Z0-9 ]*PRIVATE KEY-----`, "g"), replacement: "[redacted key]" },
972
- { pattern: /\bsk-[A-Za-z0-9_-]{16,}\b/g, replacement: "[redacted]" },
973
- { pattern: /\b[spr]k_(?:live|test)_[A-Za-z0-9]{8,}\b/g, replacement: "[redacted]" },
974
- { pattern: /\bwhsec_[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
975
- { pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g, replacement: "[redacted]" },
976
- { pattern: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g, replacement: "[redacted]" },
977
- { pattern: /\bglpat-[A-Za-z0-9_-]{20,}\b/g, replacement: "[redacted]" },
978
- { pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, replacement: "[redacted]" },
979
- { pattern: /\bAIza[A-Za-z0-9_-]{35}\b/g, replacement: "[redacted]" },
980
- { pattern: /\bAKIA[0-9A-Z]{16}\b/g, replacement: "[redacted]" },
981
- { pattern: /\bnpm_[A-Za-z0-9]{36}\b/g, replacement: "[redacted]" },
982
- { pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
983
- { pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: "[redacted]" },
984
- { pattern: new RegExp(String.raw`\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, "gi"), replacement: "$1[redacted]@" },
985
- { pattern: new RegExp(String.raw`\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, "gi"), replacement: "bearer [redacted]" },
986
- { pattern: new RegExp(String.raw`\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, "gi"), replacement: "authorization: [redacted]" },
987
- shapes.credentialAssignment
988
- ];
989
- var SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
990
- var CUT_OFF_TEXT_REDACTION_RULES = secretRedactionRules(CUT_OFF_SECRET_SHAPES);
991
- var HIGH_ENTROPY_RULE = { pattern: /[A-Za-z0-9+/]{40,}={0,2}/g, replacement: "[redacted]" };
992
- var applyRedactionRules = (rules, text3) => rules.reduce((acc, rule) => acc.replace(rule.pattern, rule.replacement), text3);
993
- var redactSecrets = (text3) => applyRedactionRules(SECRET_REDACTION_RULES, text3);
994
- var redactSecretsFromContent = (text3) => applyRedactionRules(CUT_OFF_TEXT_REDACTION_RULES, text3);
995
- var redactSecretsDeep = (text3) => redactSecrets(text3).replace(HIGH_ENTROPY_RULE.pattern, HIGH_ENTROPY_RULE.replacement);
996
-
997
998
  // ../contracts/src/cursor.ts
998
999
  var CURSOR_GATE_EVENTS = ["beforeShellExecution", "beforeMCPExecution", "preToolUse"];
999
1000
  var CURSOR_GATE_SCRIPT = "pushary-gate.mjs";
@@ -1028,6 +1029,19 @@ var toolsCoveredByGateEntry = (coverage, matcher) => {
1028
1029
  var toolMatches = (match, toolName) => match.kind === "named" ? match.tools.includes(toolName) : toolName.startsWith(match.prefix);
1029
1030
  var cursorGateOwnsToolCall = (registration, toolName) => typeof toolName === "string" && registration.some((match) => toolMatches(match, toolName));
1030
1031
 
1032
+ // ../contracts/src/receipt-evidence.ts
1033
+ var RECEIPT_TARGET_MAX_LENGTH = 256;
1034
+ var GIT_BRANCH_MAX_LENGTH = 256;
1035
+ function isGitBranch(value) {
1036
+ return typeof value === "string" && value.length > 0 && value.length <= GIT_BRANCH_MAX_LENGTH && !/[\x00-\x20\x7f]/.test(value);
1037
+ }
1038
+ function parseGitBranch(value) {
1039
+ return isGitBranch(value) && redactSecrets(value) === value ? value : void 0;
1040
+ }
1041
+ function parseCommitId(value) {
1042
+ return typeof value === "string" && /^[a-f\d]{7,64}$/i.test(value) ? value.toLowerCase() : void 0;
1043
+ }
1044
+
1031
1045
  // ../contracts/src/conversation-text.ts
1032
1046
  var INTERNAL_ENVELOPE = /(^|\n) {0,3}(?:<(total_tokens|task-notification)>[\s\S]*?(?:<\/\2>|$)[\t ]*)+/g;
1033
1047
  var INCOMPLETE_ENVELOPE = /(^|\n) {0,3}<(?:total_tokens|task-notification)$/g;
@@ -2864,6 +2878,9 @@ var shellCommandStringOf = (shell, args) => {
2864
2878
  return operand === void 0 || operand.expands ? UNREADABLE2 : { kind: "readable", script: operand.text };
2865
2879
  };
2866
2880
 
2881
+ // ../contracts/src/chatgpt-plugin.ts
2882
+ var CHATGPT_CONNECTOR_TEST = `@Pushary use ask_user to ask \u201C${CONNECTOR_SETUP_QUESTION}\u201D with type \u201Cconfirm\u201D and agentName \u201CChatGPT - Setup check\u201D. Wait for my answer and tell me which answer you received.`;
2883
+
2867
2884
  // ../contracts/src/partner-developer-guide.ts
2868
2885
  var PARTNER_API_KEYS_URL = "https://pushary.com/dashboard/agent/settings";
2869
2886
  var PARTNER_INSTALL_COMMAND = "npm i @pushary/server";
@@ -3473,6 +3490,27 @@ var approvalModeWithoutLocalPrompt = (mode) => {
3473
3490
  };
3474
3491
  var TIMEOUT_ACTION_THAT_REFUSES = "deny";
3475
3492
  var timeoutActionWithoutLocalPrompt = ({ mode, timeoutAction }) => mode !== "push_only" && timeoutAction === "approve" ? TIMEOUT_ACTION_THAT_REFUSES : timeoutAction;
3493
+ var SETUP_VERIFICATION_SENDER = {
3494
+ agentName: "Pushary setup",
3495
+ title: "Pushary is connected",
3496
+ body: "This setup notification reached you. Agent hooks still need a real-agent check."
3497
+ };
3498
+ var DOCTOR_VERIFICATION_SENDER = {
3499
+ agentName: "Pushary Doctor",
3500
+ title: "Pushary Doctor",
3501
+ body: "If you see this, push notifications are working."
3502
+ };
3503
+ var SETUP_VERIFICATION_SENDER_THROUGH_0_95_5 = {
3504
+ ...SETUP_VERIFICATION_SENDER,
3505
+ body: "Your AI agent can now reach you right here."
3506
+ };
3507
+ var ROUND_TRIP_QUESTION = "Pushary delivery test. Answer either way to test returning an answer. This does not test your agent hooks.";
3508
+ var ROUND_TRIP_SENDER_NAMES = [
3509
+ SETUP_VERIFICATION_SENDER.agentName,
3510
+ DOCTOR_VERIFICATION_SENDER.agentName
3511
+ ];
3512
+ var roundTripAsk = (agentName) => ({ question: ROUND_TRIP_QUESTION, type: "confirm", agentName, wait: false });
3513
+ var AGENT_STOP_DEFAULT_SECONDS = 3600;
3476
3514
  var TIMEOUT_ACTIONS = ["approve", "deny", "escalate", "wait"];
3477
3515
  var isTimeoutAction = (value) => typeof value === "string" && TIMEOUT_ACTIONS.includes(value);
3478
3516
  var typedTextAsAnswers = (questions, text3) => {
@@ -6623,7 +6661,8 @@ var PRETOOLUSE_HANDLED_TOOLS = /* @__PURE__ */ new Set([...PRETOOLUSE_GATED_TOOL
6623
6661
  var isPermissionRequestOwnedByPreToolUse = (toolName, permissionMode, defers = shouldDeferToNativeMode) => PRETOOLUSE_HANDLED_TOOLS.has(toolName) && (isAskedInEveryMode(toolName) || !defers(permissionMode, toolName));
6624
6662
  var CLAUDE_PRETOOLUSE_MATCHER = [...PRETOOLUSE_HANDLED_TOOLS].join("|");
6625
6663
  var resolveGate = (input) => {
6626
- const { modeState, config, toolName, toolInputs, cwd, repoKey, sessionId } = input;
6664
+ const { modeState, config, toolName, toolInputs, cwd, sessionId } = input;
6665
+ const repoKey = input.sharedRepoKey ?? input.repoKey;
6627
6666
  if (isPusharyOwnTool(toolName)) {
6628
6667
  return {
6629
6668
  kind: "defer",
@@ -6632,6 +6671,10 @@ var resolveGate = (input) => {
6632
6671
  };
6633
6672
  }
6634
6673
  if (modeState.kill) return { kind: "kill", reason: KILL_REASON };
6674
+ if (input.sharedRepoKey && input.repoKey && input.sharedRepoKey !== input.repoKey) {
6675
+ const legacyPolicy = (toolInputs.length ? toolInputs : [void 0]).map((toolInput) => resolvePolicy(config, toolName, modeState.mode, toolInput, cwd, input.repoKey, sessionId)).find((policy2) => policy2.repoKey === input.repoKey && verdictForPolicy(policy2) === "deny");
6676
+ if (legacyPolicy) return { kind: "deny", policy: legacyPolicy, reason: `Denied by policy for ${legacyPolicy.tool}` };
6677
+ }
6635
6678
  const policy = resolvePolicyAcross(config, toolName, modeState.mode, toolInputs, cwd, repoKey, sessionId);
6636
6679
  const verdict = verdictForPolicy(policy);
6637
6680
  const autoApproves = verdict === "allow";
@@ -7113,6 +7156,12 @@ var hookActivationResult = (report) => {
7113
7156
  };
7114
7157
 
7115
7158
  export {
7159
+ redactSecrets,
7160
+ redactSecretsFromContent,
7161
+ redactSecretsDeep,
7162
+ RECEIPT_TARGET_MAX_LENGTH,
7163
+ parseGitBranch,
7164
+ parseCommitId,
7116
7165
  conversationText,
7117
7166
  extractMessageText,
7118
7167
  NativeInputAgent,
@@ -7180,9 +7229,6 @@ export {
7180
7229
  hookCompatibleProfile,
7181
7230
  hookCompatibleProfileBySource,
7182
7231
  compatibleTargetFiles,
7183
- redactSecrets,
7184
- redactSecretsFromContent,
7185
- redactSecretsDeep,
7186
7232
  CURSOR_GATE_EVENTS,
7187
7233
  CURSOR_GATE_SCRIPT,
7188
7234
  CURSOR_GATE_COVERAGE,
@@ -7244,6 +7290,10 @@ export {
7244
7290
  APPROVAL_MODE_META,
7245
7291
  approvalModeWithoutLocalPrompt,
7246
7292
  timeoutActionWithoutLocalPrompt,
7293
+ SETUP_VERIFICATION_SENDER,
7294
+ DOCTOR_VERIFICATION_SENDER,
7295
+ roundTripAsk,
7296
+ AGENT_STOP_DEFAULT_SECONDS,
7247
7297
  isTimeoutAction,
7248
7298
  plainAskOf,
7249
7299
  questionsShownAsASet,
@@ -7285,6 +7335,7 @@ export {
7285
7335
  isAnswerSource,
7286
7336
  denyReasonFrom,
7287
7337
  classifyConfirmResponse,
7338
+ classifyDecisionRisk,
7288
7339
  buildDecisionEpisodeFeatures,
7289
7340
  resolveAutoResolveOrigin,
7290
7341
  resolvePolicy,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  guardBinary
3
- } from "./chunk-7EGNVZLK.js";
3
+ } from "./chunk-CHVXLS7U.js";
4
4
 
5
5
  // src/bell/install.ts
6
6
  import { join } from "path";
@@ -4,7 +4,7 @@ import {
4
4
  postLiveSession,
5
5
  postLiveSessionUntilAccepted,
6
6
  startLiveSessionHeartbeat
7
- } from "./chunk-6LJOCQBB.js";
7
+ } from "./chunk-SPPMPM7F.js";
8
8
  import {
9
9
  CommandReceipts,
10
10
  controllerCommandSchema
@@ -14,24 +14,24 @@ import {
14
14
  describeIdleWindow,
15
15
  idleDeadlinePassed,
16
16
  startProcessOwnership
17
- } from "./chunk-NMDWW3EY.js";
17
+ } from "./chunk-2BXWBKVN.js";
18
18
  import {
19
19
  spawnClaude
20
20
  } from "./chunk-XHKBHWLX.js";
21
21
  import {
22
- repoKeyFor
23
- } from "./chunk-K6QLKUCT.js";
22
+ repositoryScopeFor
23
+ } from "./chunk-RXQT5FTX.js";
24
24
  import {
25
25
  isAskUserResponse,
26
26
  isDecisionStopped,
27
27
  isWaitForAnswerResponse,
28
28
  withdrawQuestion,
29
29
  writeDegraded
30
- } from "./chunk-FSJYYZ3G.js";
30
+ } from "./chunk-SR44ZNZF.js";
31
31
  import {
32
32
  callMcpTool,
33
33
  isRetryable
34
- } from "./chunk-NWSGMYX7.js";
34
+ } from "./chunk-XTNCXIYR.js";
35
35
  import {
36
36
  AGENT_QUESTION_DESCRIPTION_MAX,
37
37
  AGENT_QUESTION_HEADER_MAX,
@@ -52,7 +52,7 @@ import {
52
52
  parseCodexQuestions,
53
53
  planElicitationAsk,
54
54
  readElicitationFields
55
- } from "./chunk-VE333PL5.js";
55
+ } from "./chunk-OMN5UCMW.js";
56
56
 
57
57
  // src/codex-question-owner.ts
58
58
  import { createHash } from "crypto";
@@ -114,8 +114,8 @@ var CodexNativeApprovals = class {
114
114
  const changes = this.patches.get(this.patchKey(p));
115
115
  const approval = parseCodexNativeApproval({ method: message.method, params: p, ...changes ? { changes } : {} });
116
116
  if (!approval || approval.threadId !== threadId) return false;
117
- const repoKey = repoKeyFor(approval.cwd ?? cwd);
118
- const subjectHash = createHash2("sha256").update(canonicalJsonText({ request: approval.request, cwd, repoKey })).digest("hex");
117
+ const { repoKey, sharedRepoKey } = repositoryScopeFor(approval.cwd ?? cwd);
118
+ const subjectHash = createHash2("sha256").update(canonicalJsonText({ request: approval.request, cwd, repoKey, ...sharedRepoKey ? { sharedRepoKey } : {} })).digest("hex");
119
119
  const existing = this.pending.get(message.id);
120
120
  if (existing) {
121
121
  if (existing.owner.subjectHash !== subjectHash) this.retire(message.id, existing, false);
@@ -131,7 +131,7 @@ var CodexNativeApprovals = class {
131
131
  subjectHash,
132
132
  method: approval.request.method
133
133
  };
134
- const pending = { owner, approval, repoKey, cwd, controller: new AbortController(), replied: false, creating: true, correlationId: randomUUID() };
134
+ const pending = { owner, approval, repoKey, sharedRepoKey, cwd, controller: new AbortController(), replied: false, creating: true, correlationId: randomUUID() };
135
135
  this.pending.set(message.id, pending);
136
136
  const task = this.answer(pending).finally(() => {
137
137
  this.tasks.delete(task);
@@ -191,7 +191,8 @@ var CodexNativeApprovals = class {
191
191
  localSurfaceAvailable: this.options.shared,
192
192
  acceptsAllowReply: true,
193
193
  cwd: pending.cwd,
194
- repoKey: pending.repoKey
194
+ repoKey: pending.repoKey,
195
+ sharedRepoKey: pending.sharedRepoKey
195
196
  });
196
197
  const body = await response.json();
197
198
  if (!response.ok || !record(body)) throw new Error("Native approval service unavailable");
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  compatibleConfigFile,
3
3
  hasCompatibleHooks
4
- } from "./chunk-ALT4KW5M.js";
4
+ } from "./chunk-CA4PS7XT.js";
5
5
  import {
6
6
  pusharyHookExecutable
7
- } from "./chunk-LJFITB6T.js";
7
+ } from "./chunk-ITGPUTFV.js";
8
8
  import {
9
9
  isProtectedByScope,
10
10
  registerHookEntry
11
- } from "./chunk-7EGNVZLK.js";
11
+ } from "./chunk-CHVXLS7U.js";
12
12
  import {
13
13
  isRecord
14
- } from "./chunk-VE333PL5.js";
14
+ } from "./chunk-OMN5UCMW.js";
15
15
 
16
16
  // src/cursor-config.ts
17
17
  var hookCommandOf = (entry) => {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  findNativeClaudeInstall
3
- } from "./chunk-K2NIENKY.js";
3
+ } from "./chunk-66VEUAN5.js";
4
4
  import {
5
5
  parseVersion
6
- } from "./chunk-I7UZODYO.js";
6
+ } from "./chunk-Y7AX6BS4.js";
7
7
  import {
8
8
  isRecord
9
- } from "./chunk-VE333PL5.js";
9
+ } from "./chunk-OMN5UCMW.js";
10
10
 
11
11
  // src/setup/agent-probe.ts
12
12
  import { execSync } from "child_process";
@@ -1,17 +1,19 @@
1
1
  import {
2
2
  localRepoKey,
3
- normalizeRepoRemote
4
- } from "./chunk-VE333PL5.js";
3
+ normalizeRepoRemote,
4
+ parseGitBranch
5
+ } from "./chunk-OMN5UCMW.js";
5
6
 
6
7
  // src/repo.ts
7
8
  import { existsSync, readFileSync, statSync } from "fs";
8
9
  import { basename, dirname, isAbsolute, join, resolve } from "path";
9
10
  var MAX_PARENT_WALK = 64;
10
11
  var GIT_FILE_PREFIX = "gitdir:";
12
+ var GIT_DIR_NAME = ".git";
11
13
  var findGitDir = (startDir) => {
12
14
  let current = resolve(startDir);
13
15
  for (let depth = 0; depth < MAX_PARENT_WALK; depth += 1) {
14
- const candidate = join(current, ".git");
16
+ const candidate = join(current, GIT_DIR_NAME);
15
17
  try {
16
18
  if (existsSync(candidate)) {
17
19
  if (statSync(candidate).isDirectory()) return candidate;
@@ -29,16 +31,28 @@ var findGitDir = (startDir) => {
29
31
  }
30
32
  return void 0;
31
33
  };
32
- var configPathFor = (gitDir) => {
33
- const index = gitDir.replace(/\\/g, "/").indexOf("/worktrees/");
34
- return index === -1 ? join(gitDir, "config") : join(gitDir.slice(0, index), "config");
34
+ var COMMON_DIR_FILE = "commondir";
35
+ var mainGitDirOf = (gitDir) => {
36
+ try {
37
+ const pointer = readFileSync(join(gitDir, COMMON_DIR_FILE), "utf-8").trim();
38
+ if (pointer.length === 0) return gitDir;
39
+ return isAbsolute(pointer) ? pointer : resolve(gitDir, pointer);
40
+ } catch {
41
+ return gitDir;
42
+ }
43
+ };
44
+ var configPathFor = (gitDir) => join(mainGitDirOf(gitDir), "config");
45
+ var GIT_DIR_SUFFIX = ".git";
46
+ var projectRootOf = (gitDir, cwd) => {
47
+ const mainGitDir = mainGitDirOf(gitDir);
48
+ if (basename(mainGitDir) === GIT_DIR_NAME) return dirname(mainGitDir);
49
+ return gitDir.endsWith(GIT_DIR_SUFFIX) ? dirname(gitDir) : cwd;
35
50
  };
36
51
  var ORIGIN_SECTION = /^\[remote "origin"\]/;
37
52
  var SECTION_HEADER = /^\[/;
38
53
  var URL_LINE = /^url\s*=\s*(.+)$/;
39
- var readOriginRemote = (gitDir) => {
54
+ var readConfiguredOrigin = (configPath) => {
40
55
  try {
41
- const configPath = configPathFor(gitDir);
42
56
  if (!existsSync(configPath)) return void 0;
43
57
  let inOrigin = false;
44
58
  for (const rawLine of readFileSync(configPath, "utf-8").split("\n")) {
@@ -55,6 +69,7 @@ var readOriginRemote = (gitDir) => {
55
69
  }
56
70
  return void 0;
57
71
  };
72
+ var readOriginRemote = (gitDir) => readConfiguredOrigin(configPathFor(gitDir));
58
73
  var deriveRepoKey = (cwd) => {
59
74
  const dir = cwd && cwd.length > 0 ? cwd : process.cwd();
60
75
  try {
@@ -63,8 +78,7 @@ var deriveRepoKey = (cwd) => {
63
78
  const remote = readOriginRemote(gitDir);
64
79
  const normalized = remote ? normalizeRepoRemote(remote) : void 0;
65
80
  if (normalized) return normalized;
66
- const root = gitDir.endsWith(".git") ? dirname(gitDir) : dir;
67
- return localRepoKey(basename(root));
81
+ return localRepoKey(basename(projectRootOf(gitDir, dir)));
68
82
  }
69
83
  return localRepoKey(basename(resolve(dir)));
70
84
  } catch {
@@ -86,7 +100,34 @@ var repoKeyFor = (cwd) => {
86
100
  repoKeyCache.set(dir, derived);
87
101
  return derived;
88
102
  };
103
+ function branchFor(cwd) {
104
+ try {
105
+ const gitDir = findGitDir(cwd || process.cwd());
106
+ if (!gitDir) return void 0;
107
+ const headPath = join(gitDir, "HEAD");
108
+ if (statSync(headPath).size > 1024) return void 0;
109
+ const head = readFileSync(headPath, "utf8").trim();
110
+ const prefix = "ref: refs/heads/";
111
+ return head.startsWith(prefix) ? parseGitBranch(head.slice(prefix.length)) : void 0;
112
+ } catch {
113
+ return void 0;
114
+ }
115
+ }
116
+ var repositoryScopeFor = (cwd) => {
117
+ const sharedRepoKey = repoKeyFor(cwd);
118
+ if (process.env[REPO_KEY_ENV]?.trim()) return { repoKey: sharedRepoKey };
119
+ const dir = cwd || process.cwd();
120
+ const gitDir = findGitDir(dir);
121
+ if (!gitDir) return { repoKey: sharedRepoKey };
122
+ const index = gitDir.replace(/\\/g, "/").indexOf("/worktrees/");
123
+ const path = index === -1 ? join(gitDir, "config") : join(gitDir.slice(0, index), "config");
124
+ const remote = readConfiguredOrigin(path);
125
+ const repoKey = (remote ? normalizeRepoRemote(remote) : void 0) ?? localRepoKey(basename(gitDir.endsWith(".git") ? dirname(gitDir) : dir));
126
+ return { repoKey, ...sharedRepoKey && repoKey !== sharedRepoKey ? { sharedRepoKey } : {} };
127
+ };
89
128
 
90
129
  export {
91
- repoKeyFor
130
+ repoKeyFor,
131
+ branchFor,
132
+ repositoryScopeFor
92
133
  };
@@ -7,7 +7,7 @@ import {
7
7
  recordSealerFor,
8
8
  uploadTranscriptRecords,
9
9
  wrapSessionKey
10
- } from "./chunk-XO3UJDJE.js";
10
+ } from "./chunk-4PD7FP55.js";
11
11
 
12
12
  // src/live-session.ts
13
13
  var MAX_TRANSCRIPT_QUEUE = 100;
@@ -6,18 +6,18 @@ import {
6
6
  McpToolError,
7
7
  SubscriptionRequiredError,
8
8
  callMcpTool
9
- } from "./chunk-NWSGMYX7.js";
9
+ } from "./chunk-XTNCXIYR.js";
10
10
  import {
11
11
  installNetworkDefaults,
12
12
  isNetworkFailure
13
- } from "./chunk-QCSPLJL6.js";
13
+ } from "./chunk-CO6TQ44W.js";
14
14
  import {
15
15
  clientReportClaims
16
- } from "./chunk-7EGNVZLK.js";
16
+ } from "./chunk-CHVXLS7U.js";
17
17
  import {
18
18
  getApiKey,
19
19
  getBaseUrl
20
- } from "./chunk-32F3BWRY.js";
20
+ } from "./chunk-NPZ5L2WQ.js";
21
21
  import {
22
22
  ASK_AGENT_NAME_MAX,
23
23
  CLIENT_REPORT_PATH,
@@ -26,7 +26,7 @@ import {
26
26
  TOOL_FAILURE_CODES,
27
27
  degradedLine,
28
28
  truncateLine
29
- } from "./chunk-VE333PL5.js";
29
+ } from "./chunk-OMN5UCMW.js";
30
30
 
31
31
  // src/api.ts
32
32
  import { randomUUID } from "crypto";
@@ -9,20 +9,20 @@ import {
9
9
  installedCodexApp,
10
10
  readCodexAppRuntime,
11
11
  shellQuoted
12
- } from "./chunk-JQUMX7YZ.js";
12
+ } from "./chunk-YT3ENXBT.js";
13
13
  import {
14
14
  writeHuman
15
15
  } from "./chunk-QCGNGEGE.js";
16
16
  import {
17
17
  xml
18
- } from "./chunk-HT5WOP2M.js";
18
+ } from "./chunk-CFD3IESN.js";
19
19
  import {
20
20
  CODEX_APP_LAUNCH_AT_LOGIN_VERB,
21
21
  CODEX_APP_LAUNCH_VARIABLE
22
22
  } from "./chunk-E46NE7FB.js";
23
23
  import {
24
24
  writeFileAtomic
25
- } from "./chunk-I7UZODYO.js";
25
+ } from "./chunk-Y7AX6BS4.js";
26
26
 
27
27
  // src/codex-app-cards-switch.ts
28
28
  import { execFileSync as execFileSync2 } from "child_process";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  parseSseMessages
3
- } from "./chunk-NWSGMYX7.js";
3
+ } from "./chunk-XTNCXIYR.js";
4
4
  import {
5
5
  NPX_LATEST_COMMAND
6
- } from "./chunk-E4XGV5UG.js";
6
+ } from "./chunk-NDPOESVW.js";
7
7
 
8
8
  // src/mcp-stdio-bridge.ts
9
9
  var MCP_BRIDGE_BINARY = "pushary-mcp";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  autoUpdateLock
3
- } from "./chunk-7EGNVZLK.js";
3
+ } from "./chunk-CHVXLS7U.js";
4
4
  import {
5
5
  installPackageGlobally,
6
6
  npmErrorMessage,
7
7
  writeJsonAtomic
8
- } from "./chunk-I7UZODYO.js";
8
+ } from "./chunk-Y7AX6BS4.js";
9
9
 
10
10
  // src/upgrade-lock.ts
11
11
  import { fork } from "child_process";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pusharyFetch
3
- } from "./chunk-QCSPLJL6.js";
3
+ } from "./chunk-CO6TQ44W.js";
4
4
  import {
5
5
  getBaseUrl
6
- } from "./chunk-32F3BWRY.js";
6
+ } from "./chunk-NPZ5L2WQ.js";
7
7
  import {
8
8
  NetworkError
9
9
  } from "./chunk-PPY5N2E6.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  isValidApiKey,
15
15
  normalizeKeyScope
16
- } from "./chunk-VE333PL5.js";
16
+ } from "./chunk-OMN5UCMW.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,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_SESSION
3
- } from "./chunk-INNH7EUK.js";
3
+ } from "./chunk-OFQJHWAS.js";
4
4
 
5
5
  // src/answer.ts
6
6
  var isDeferAnswer = (value) => value === "defer";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KZERVKTD.js";
4
4
  import {
5
5
  renderCommandHelp
6
- } from "./chunk-E4XGV5UG.js";
6
+ } from "./chunk-NDPOESVW.js";
7
7
  import {
8
8
  getPackageVersion
9
9
  } from "./chunk-ZVU6WMMU.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readTranscriptPreference
3
- } from "./chunk-LGQQUQDZ.js";
3
+ } from "./chunk-LANGH7UF.js";
4
4
 
5
5
  // src/transcript-setting.ts
6
6
  var transcriptEnvironmentPreference = () => {