pushary 1.9.134 → 1.9.136

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 +10 -0
  2. package/dist/{api-7CZR7B53.js → api-5H25QRNM.js} +11 -11
  3. package/dist/bin/pushary-audit.js +3 -3
  4. package/dist/bin/pushary-bell-hook.js +28 -27
  5. package/dist/bin/pushary-bell.js +10 -10
  6. package/dist/bin/pushary-claude.js +47 -33
  7. package/dist/bin/pushary-clean.js +35 -34
  8. package/dist/bin/pushary-codex-bridge.js +23 -22
  9. package/dist/bin/pushary-codex-hook.js +58 -41
  10. package/dist/bin/pushary-codex-session.js +8 -8
  11. package/dist/bin/pushary-codex.js +16 -15
  12. package/dist/bin/pushary-connect.js +29 -28
  13. package/dist/bin/pushary-cowork.js +5 -5
  14. package/dist/bin/pushary-daemon.js +78 -59
  15. package/dist/bin/pushary-disconnect.js +28 -27
  16. package/dist/bin/pushary-display-hook.js +44 -17
  17. package/dist/bin/pushary-doctor.js +43 -42
  18. package/dist/bin/pushary-elicitation-hook.js +28 -27
  19. package/dist/bin/pushary-gemini-bridge.js +20 -17
  20. package/dist/bin/pushary-gemini-hook.js +32 -31
  21. package/dist/bin/pushary-hook.js +35 -33
  22. package/dist/bin/pushary-login.js +21 -21
  23. package/dist/bin/pushary-logout.js +27 -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 +27 -26
  27. package/dist/bin/pushary-opencode-hook.js +31 -30
  28. package/dist/bin/pushary-permission-denied-hook.js +35 -33
  29. package/dist/bin/pushary-permission-hook.js +39 -35
  30. package/dist/bin/pushary-post-hook.js +33 -27
  31. package/dist/bin/pushary-prompt-hook.js +27 -26
  32. package/dist/bin/pushary-session-end-hook.js +27 -26
  33. package/dist/bin/pushary-session-start-hook.js +36 -35
  34. package/dist/bin/pushary-setup.js +50 -49
  35. package/dist/bin/pushary-stats.js +5 -5
  36. package/dist/bin/pushary-status.js +33 -32
  37. package/dist/bin/pushary-stop-hook.js +27 -26
  38. package/dist/bin/pushary-stopfailure-hook.js +27 -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 +41 -40
  43. package/dist/bin/pushary-wait.js +15 -15
  44. package/dist/bin/pushary.js +7 -7
  45. package/dist/{chunk-ZJPBTJED.js → chunk-2E46RALI.js} +6 -6
  46. package/dist/{chunk-ZXJTTV7I.js → chunk-2MVKT7KH.js} +2 -2
  47. package/dist/{chunk-XWUPOTJV.js → chunk-2R4OVJHS.js} +5 -5
  48. package/dist/{chunk-IZJDVOJV.js → chunk-2XDVEBHI.js} +5 -5
  49. package/dist/{chunk-VO55SJSD.js → chunk-3HXOR6E5.js} +11 -8
  50. package/dist/{chunk-GKZMBU6T.js → chunk-3QBI5C6P.js} +2 -2
  51. package/dist/{chunk-RZBV5KTF.js → chunk-43DT3QWZ.js} +18 -5
  52. package/dist/{chunk-LBMCQWRX.js → chunk-4T72AHIA.js} +4 -4
  53. package/dist/{chunk-3TKTZOKG.js → chunk-54TZGPZP.js} +3 -3
  54. package/dist/{chunk-XHC3UNOK.js → chunk-5XDFQ6E3.js} +1 -1
  55. package/dist/{chunk-KIWFCW7M.js → chunk-62GD26OE.js} +2 -2
  56. package/dist/{chunk-RLQDVWZ4.js → chunk-6SWFS4GU.js} +2 -2
  57. package/dist/{chunk-JYCAAQUW.js → chunk-A2YJ2FBR.js} +3 -2
  58. package/dist/{chunk-RVGYXUOC.js → chunk-A4YOXS24.js} +3 -3
  59. package/dist/{chunk-7MIT5C7B.js → chunk-A7R43KOX.js} +3 -3
  60. package/dist/{chunk-MRHGK3Q3.js → chunk-D7AAAD6W.js} +193 -121
  61. package/dist/{chunk-X23GSBOH.js → chunk-DBIPNY7J.js} +3 -3
  62. package/dist/{chunk-M65LPNIO.js → chunk-DL67HX3D.js} +53 -10
  63. package/dist/{chunk-UJZ5YHSR.js → chunk-EJHD44ZN.js} +2 -2
  64. package/dist/{chunk-PHKCTMAV.js → chunk-EQZB5P6I.js} +2 -2
  65. package/dist/{chunk-3DCCMO23.js → chunk-FAF5RDWT.js} +6 -6
  66. package/dist/{chunk-FT5MTCKU.js → chunk-G73ACPR2.js} +2 -2
  67. package/dist/{chunk-QBJVECFY.js → chunk-GACQSKNG.js} +2 -2
  68. package/dist/{chunk-A44MRVWG.js → chunk-GS5FH3C2.js} +3 -3
  69. package/dist/{chunk-EA5EASYT.js → chunk-H2RE3IPK.js} +1 -1
  70. package/dist/{chunk-FJST6ZXC.js → chunk-HKJLPVPZ.js} +5 -5
  71. package/dist/{chunk-HW63OEVM.js → chunk-HY4ATVCT.js} +3 -3
  72. package/dist/{chunk-UZUDMZES.js → chunk-ICCM3DLT.js} +2 -2
  73. package/dist/{chunk-MF5ZQX7C.js → chunk-IHAKBLW2.js} +4 -4
  74. package/dist/{chunk-T6HX6OTY.js → chunk-IKBTG3OT.js} +1 -1
  75. package/dist/{chunk-RGVQOOGD.js → chunk-IRIXOH4U.js} +1 -1
  76. package/dist/{chunk-YNV5GURD.js → chunk-JZJ5CM6X.js} +5 -5
  77. package/dist/{chunk-4EQOCSJW.js → chunk-K7YJBVR3.js} +1 -1
  78. package/dist/{chunk-FTH4TSJ2.js → chunk-KLV2NQVT.js} +4 -4
  79. package/dist/{chunk-YI6RR4JP.js → chunk-KTVMIG32.js} +4 -4
  80. package/dist/{chunk-WZ4SIRMH.js → chunk-KYD3LHFB.js} +1 -1
  81. package/dist/{chunk-J4UNR655.js → chunk-L2GADKFL.js} +6 -6
  82. package/dist/{chunk-I6MI4NWX.js → chunk-L7Q57R4J.js} +10 -10
  83. package/dist/{chunk-MJVDFNP2.js → chunk-LAWI6NQK.js} +1 -1
  84. package/dist/{chunk-BKH4LQJC.js → chunk-LNF36PTF.js} +2 -2
  85. package/dist/{chunk-GQPXW6BL.js → chunk-MENTZJHA.js} +1 -1
  86. package/dist/{chunk-6JY44IZI.js → chunk-MQ3I5OIC.js} +8 -8
  87. package/dist/{chunk-SZYKS433.js → chunk-MQMVJDII.js} +1 -1
  88. package/dist/{chunk-75FJZR2M.js → chunk-N3VCBXI6.js} +3 -3
  89. package/dist/{chunk-EPPH5RMJ.js → chunk-NN43KGTN.js} +4 -4
  90. package/dist/{chunk-PFHRW3LR.js → chunk-NZD6ISCL.js} +3 -3
  91. package/dist/{chunk-QVIDOVT6.js → chunk-O5T53LZ5.js} +42 -25
  92. package/dist/{chunk-V2T5ZDMP.js → chunk-PHA6AFOR.js} +3 -3
  93. package/dist/{chunk-CVBSETPW.js → chunk-PNVTPEO5.js} +3 -3
  94. package/dist/{chunk-PPUIIP3O.js → chunk-POV2TBFA.js} +11 -11
  95. package/dist/{chunk-LR3PIGRS.js → chunk-Q2VV77IY.js} +3 -3
  96. package/dist/{chunk-NYFUU23B.js → chunk-QXATIKHQ.js} +1 -1
  97. package/dist/{chunk-N5P2FLOJ.js → chunk-R7CQF2P3.js} +20 -5
  98. package/dist/{chunk-W4FJR57E.js → chunk-R7KC57PC.js} +2 -2
  99. package/dist/{chunk-VME5NXCM.js → chunk-RPFSVNH6.js} +3 -3
  100. package/dist/{chunk-VRUEKURE.js → chunk-RRUP72V6.js} +1 -1
  101. package/dist/{chunk-237FYIVC.js → chunk-TLK5YLIE.js} +4 -4
  102. package/dist/{chunk-2YS7YEUW.js → chunk-U3OLXV5Z.js} +2 -2
  103. package/dist/chunk-UP5QXEUU.js +31 -0
  104. package/dist/{chunk-L5RSLIBQ.js → chunk-V7ZY7P2X.js} +6 -6
  105. package/dist/{chunk-NSBWFX7H.js → chunk-VBWJ756P.js} +5 -5
  106. package/dist/{chunk-3PGANQ4K.js → chunk-VO77WHK4.js} +6 -6
  107. package/dist/{chunk-C4UH6YPD.js → chunk-VV7WRIQT.js} +4 -4
  108. package/dist/{chunk-42PVKPHM.js → chunk-VVN3RPV6.js} +1 -1
  109. package/dist/{chunk-XMZVQF2J.js → chunk-WM7OY63L.js} +1 -1
  110. package/dist/{chunk-DS7XMYUB.js → chunk-WNT4JHK3.js} +1 -1
  111. package/dist/{chunk-2KN53MPE.js → chunk-WXUEOHYY.js} +5 -5
  112. package/dist/chunk-Y47BMZUR.js +36 -0
  113. package/dist/{chunk-HOPJEPL4.js → chunk-YHX5YF77.js} +4 -4
  114. package/dist/{chunk-KWICQAP7.js → chunk-YOV3LHOL.js} +3 -3
  115. package/dist/{chunk-2U4MCUVZ.js → chunk-YQQGIDBC.js} +1 -1
  116. package/dist/{chunk-UDAXXR43.js → chunk-YURIU333.js} +5 -5
  117. package/dist/{chunk-D2KJKAYM.js → chunk-ZWIJJYN3.js} +4 -4
  118. package/dist/{chunk-PG23ENSN.js → chunk-ZWLSXECG.js} +2 -2
  119. package/dist/{chunk-25UU4Q4V.js → chunk-ZWURBNA3.js} +1 -1
  120. package/dist/{codex-app-cards-switch-D2SODMQN.js → codex-app-cards-switch-Z7TMF2OR.js} +11 -11
  121. package/dist/{codex-card-routing-X2HUY2AV.js → codex-card-routing-LQJEJNTS.js} +2 -2
  122. package/dist/{codex-desktop-launch-CFKIJZVB.js → codex-desktop-launch-HKXGKL3T.js} +1 -1
  123. package/dist/{codex-session-launch-YGH5UUAH.js → codex-session-launch-DTGH7ZKM.js} +20 -19
  124. package/dist/{config-5SNDVPS2.js → config-34VUNHK6.js} +3 -3
  125. package/dist/{global-upgrade-U4V7KWH6.js → global-upgrade-5UAH5DCG.js} +9 -9
  126. package/dist/{identity-DCRNA3J3.js → identity-UFJEWGEU.js} +4 -4
  127. package/dist/{live-capabilities-H7J5ANZ3.js → live-capabilities-BL3SHFWX.js} +4 -4
  128. package/dist/{paths-3DUQGU4V.js → paths-YA5ROXGC.js} +3 -3
  129. package/dist/{reapply-LNVBPUWL.js → reapply-OPQF4DPQ.js} +29 -28
  130. package/dist/src/index.js +34 -32
  131. package/dist/{upgrade-lock-3T7JLBHT.js → upgrade-lock-AZLOOGKV.js} +4 -4
  132. package/dist/{usage-XLJK7OTL.js → usage-ZSV4LFDL.js} +3 -3
  133. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  inspectConfiguredManagedProviders
4
- } from "../chunk-PPUIIP3O.js";
4
+ } from "../chunk-POV2TBFA.js";
5
5
  import {
6
6
  readHookWiring,
7
7
  readHookWiringSafely
8
- } from "../chunk-6JY44IZI.js";
9
- import "../chunk-FT5MTCKU.js";
10
- import "../chunk-PG23ENSN.js";
8
+ } from "../chunk-MQ3I5OIC.js";
9
+ import "../chunk-G73ACPR2.js";
10
+ import "../chunk-ZWLSXECG.js";
11
11
  import {
12
12
  keepLinuxDaemonAfterLogout,
13
13
  lingerReportOf
@@ -15,26 +15,26 @@ import {
15
15
  import {
16
16
  HEARTBEAT_INTERVAL_MS,
17
17
  sendHeartbeat
18
- } from "../chunk-FJST6ZXC.js";
19
- import "../chunk-RLQDVWZ4.js";
18
+ } from "../chunk-HKJLPVPZ.js";
19
+ import "../chunk-6SWFS4GU.js";
20
20
  import {
21
21
  readSignedOutDiagnosis
22
- } from "../chunk-2YS7YEUW.js";
22
+ } from "../chunk-U3OLXV5Z.js";
23
23
  import {
24
24
  HERMES_INSTALL_MARKER_FILE,
25
25
  defaultHermesHome,
26
26
  parseHermesInstallMarker
27
- } from "../chunk-7MIT5C7B.js";
27
+ } from "../chunk-A7R43KOX.js";
28
28
  import {
29
29
  writeHuman
30
30
  } from "../chunk-QCGNGEGE.js";
31
- import "../chunk-IZJDVOJV.js";
32
- import "../chunk-3TKTZOKG.js";
33
- import "../chunk-PFHRW3LR.js";
34
- import "../chunk-NSBWFX7H.js";
31
+ import "../chunk-2XDVEBHI.js";
32
+ import "../chunk-54TZGPZP.js";
33
+ import "../chunk-NZD6ISCL.js";
34
+ import "../chunk-VBWJ756P.js";
35
35
  import {
36
36
  exitOnHelpFlag
37
- } from "../chunk-4EQOCSJW.js";
37
+ } from "../chunk-K7YJBVR3.js";
38
38
  import {
39
39
  codexBinaryIsBroken,
40
40
  detectProviderLiveCapabilities,
@@ -43,8 +43,8 @@ import {
43
43
  launchableProviders,
44
44
  resolveControlPolicy,
45
45
  trackProviderInventory
46
- } from "../chunk-X23GSBOH.js";
47
- import "../chunk-UJZ5YHSR.js";
46
+ } from "../chunk-DBIPNY7J.js";
47
+ import "../chunk-EJHD44ZN.js";
48
48
  import {
49
49
  SESSION_REAP_SILENCE_MS,
50
50
  describeIdleWindow,
@@ -52,18 +52,18 @@ import {
52
52
  listProcessProofs,
53
53
  ownsLiveProcess,
54
54
  silentSpawnedProofs
55
- } from "../chunk-ZXJTTV7I.js";
55
+ } from "../chunk-2MVKT7KH.js";
56
56
  import "../chunk-CYTPQDQY.js";
57
57
  import {
58
58
  readLocalAutoUpdateReport
59
- } from "../chunk-UZUDMZES.js";
60
- import "../chunk-EPPH5RMJ.js";
59
+ } from "../chunk-ICCM3DLT.js";
60
+ import "../chunk-NN43KGTN.js";
61
61
  import {
62
62
  startRegisteredTranscripts
63
- } from "../chunk-I6MI4NWX.js";
63
+ } from "../chunk-L7Q57R4J.js";
64
64
  import "../chunk-VAE5JBR5.js";
65
65
  import "../chunk-G66WIAST.js";
66
- import "../chunk-RZBV5KTF.js";
66
+ import "../chunk-43DT3QWZ.js";
67
67
  import {
68
68
  DAEMON_LEASE_RENEW_INTERVAL_MS,
69
69
  DAEMON_YIELD_CHECK_INTERVAL_MS,
@@ -81,49 +81,54 @@ import {
81
81
  requestDaemonHandoff,
82
82
  stopDaemonRunning,
83
83
  writeDaemonNeedsLogin
84
- } from "../chunk-3DCCMO23.js";
84
+ } from "../chunk-FAF5RDWT.js";
85
85
  import {
86
86
  hookOwnerOf
87
- } from "../chunk-237FYIVC.js";
87
+ } from "../chunk-TLK5YLIE.js";
88
88
  import {
89
+ markPendingCommandRefused,
89
90
  pendingCommandReceipts,
90
91
  removePendingCommand
91
- } from "../chunk-MRHGK3Q3.js";
92
- import "../chunk-JYCAAQUW.js";
93
- import "../chunk-XHC3UNOK.js";
94
- import "../chunk-MJVDFNP2.js";
92
+ } from "../chunk-D7AAAD6W.js";
93
+ import "../chunk-A2YJ2FBR.js";
94
+ import "../chunk-5XDFQ6E3.js";
95
+ import "../chunk-LAWI6NQK.js";
95
96
  import "../chunk-YPY4YCIZ.js";
96
- import "../chunk-KWICQAP7.js";
97
+ import "../chunk-YOV3LHOL.js";
97
98
  import "../chunk-XMSDA5WA.js";
98
- import "../chunk-25UU4Q4V.js";
99
+ import "../chunk-ZWURBNA3.js";
99
100
  import {
100
101
  spawnClaude
101
102
  } from "../chunk-H6CL3T2S.js";
102
- import "../chunk-RGVQOOGD.js";
103
- import "../chunk-J4UNR655.js";
103
+ import "../chunk-IRIXOH4U.js";
104
+ import "../chunk-L2GADKFL.js";
105
+ import {
106
+ readCommandAck,
107
+ refusedReceiptMessage
108
+ } from "../chunk-Y47BMZUR.js";
104
109
  import "../chunk-POFBE6ZY.js";
105
- import "../chunk-2KN53MPE.js";
106
- import "../chunk-42PVKPHM.js";
107
- import "../chunk-LR3PIGRS.js";
108
- import "../chunk-V2T5ZDMP.js";
110
+ import "../chunk-WXUEOHYY.js";
111
+ import "../chunk-VVN3RPV6.js";
112
+ import "../chunk-Q2VV77IY.js";
113
+ import "../chunk-PHA6AFOR.js";
109
114
  import {
110
115
  getMachineId
111
- } from "../chunk-DS7XMYUB.js";
116
+ } from "../chunk-WNT4JHK3.js";
112
117
  import {
113
118
  readControlMode
114
- } from "../chunk-CVBSETPW.js";
115
- import "../chunk-BKH4LQJC.js";
119
+ } from "../chunk-PNVTPEO5.js";
120
+ import "../chunk-LNF36PTF.js";
116
121
  import {
117
122
  claudeConfigDir,
118
123
  codexHome
119
- } from "../chunk-W4FJR57E.js";
124
+ } from "../chunk-R7KC57PC.js";
120
125
  import {
121
126
  resolveBinary
122
- } from "../chunk-A44MRVWG.js";
127
+ } from "../chunk-GS5FH3C2.js";
123
128
  import {
124
129
  getApiKey,
125
130
  getBaseUrl
126
- } from "../chunk-T6HX6OTY.js";
131
+ } from "../chunk-IKBTG3OT.js";
127
132
  import "../chunk-YU2EUD7O.js";
128
133
  import {
129
134
  writeJsonAtomicDurable
@@ -131,7 +136,7 @@ import {
131
136
  import {
132
137
  EXIT
133
138
  } from "../chunk-BG4HHB7E.js";
134
- import "../chunk-SZYKS433.js";
139
+ import "../chunk-MQMVJDII.js";
135
140
  import "../chunk-WIIMW5YO.js";
136
141
  import {
137
142
  CLAUDE_INBOX,
@@ -161,7 +166,7 @@ import {
161
166
  parseHermesAdmission,
162
167
  parseHermesReplayCursor,
163
168
  qualifyHermesReceiptMode
164
- } from "../chunk-M65LPNIO.js";
169
+ } from "../chunk-DL67HX3D.js";
165
170
  import "../chunk-MLKGABMK.js";
166
171
 
167
172
  // src/native-host-receiver.ts
@@ -810,23 +815,25 @@ var startNativeInputReceiver = (apiKey, machineId, options) => {
810
815
  const abort = new AbortController();
811
816
  const busy = /* @__PURE__ */ new Set();
812
817
  const settling = /* @__PURE__ */ new Set();
818
+ const refusalsReported = /* @__PURE__ */ new Set();
813
819
  const heartbeats = /* @__PURE__ */ new Map();
814
820
  const settlements = /* @__PURE__ */ new Map();
815
821
  let scanning = false;
816
822
  let cursor = 0;
823
+ const request = (path, body) => fetch(`${baseUrl}${path}`, {
824
+ method: "POST",
825
+ headers: {
826
+ "Content-Type": "application/json",
827
+ Authorization: `Bearer ${apiKey}`
828
+ },
829
+ body: JSON.stringify(body),
830
+ signal: AbortSignal.any([
831
+ abort.signal,
832
+ AbortSignal.timeout(CLAUDE_INBOX_RECEIVER.requestTimeoutMs)
833
+ ])
834
+ });
817
835
  const post = async (path, body) => {
818
- const response = await fetch(`${baseUrl}${path}`, {
819
- method: "POST",
820
- headers: {
821
- "Content-Type": "application/json",
822
- Authorization: `Bearer ${apiKey}`
823
- },
824
- body: JSON.stringify(body),
825
- signal: AbortSignal.any([
826
- abort.signal,
827
- AbortSignal.timeout(CLAUDE_INBOX_RECEIVER.requestTimeoutMs)
828
- ])
829
- });
836
+ const response = await request(path, body);
830
837
  if (!response.ok) throw new Error(`native inbox HTTP ${response.status}`);
831
838
  return response.json();
832
839
  };
@@ -835,17 +842,23 @@ var startNativeInputReceiver = (apiKey, machineId, options) => {
835
842
  if (!pending || settling.has(commandId) || settling.size >= CLAUDE_INBOX_RECEIVER.maxConcurrent) return false;
836
843
  settling.add(commandId);
837
844
  try {
838
- const receipt = await post("/api/agent/command/ack", {
845
+ const response = await request("/api/agent/command/ack", {
839
846
  ...pending,
840
847
  commandId,
841
848
  machineId
842
849
  });
843
- if (!isCommandAcknowledgementReceipt(receipt))
850
+ const ack = await readCommandAck(response);
851
+ if (ack.outcome === "retry") throw new Error(`native inbox HTTP ${response.status}`);
852
+ if (ack.outcome === "settled" && !isCommandAcknowledgementReceipt(await response.json()))
844
853
  throw new Error("native acknowledgement missing receipt");
845
854
  const current = settlements.get(commandId);
846
855
  if (current?.state !== pending.state || current.failureCode !== pending.failureCode || current.sessionId !== pending.sessionId) return false;
847
856
  if (pending.state === "delivered") client.confirmSettlement(pending.sessionId, commandId);
848
857
  settlements.delete(commandId);
858
+ if (ack.outcome === "refused" && !refusalsReported.has(commandId)) {
859
+ refusalsReported.add(commandId);
860
+ options.report?.(refusedReceiptMessage(commandId, ack.status));
861
+ }
849
862
  return true;
850
863
  } catch (error) {
851
864
  if (!abort.signal.aborted)
@@ -993,7 +1006,7 @@ var startNativeHostReceivers = (apiKey, machineId, report) => {
993
1006
  };
994
1007
 
995
1008
  // src/hook-command-receipts.ts
996
- var reconcileCommandReceipts = async (apiKey, machineId, agentType, baseUrl, signal) => {
1009
+ var reconcileCommandReceipts = async (apiKey, machineId, agentType, baseUrl, signal, report) => {
997
1010
  const namespace = `${apiKey}:${machineId}:${agentType}`;
998
1011
  for (const { sessionId, command } of pendingCommandReceipts(namespace)) {
999
1012
  signal?.throwIfAborted();
@@ -1016,7 +1029,12 @@ var reconcileCommandReceipts = async (apiKey, machineId, agentType, baseUrl, sig
1016
1029
  ...signal ? [signal] : []
1017
1030
  ])
1018
1031
  });
1019
- if (response.ok) removePendingCommand(sessionId, command.id, namespace);
1032
+ const ack = await readCommandAck(response);
1033
+ if (ack.outcome === "settled") removePendingCommand(sessionId, command.id, namespace);
1034
+ if (ack.outcome === "refused") {
1035
+ markPendingCommandRefused(sessionId, command.id, namespace);
1036
+ report?.(refusedReceiptMessage(command.id, ack.status));
1037
+ }
1020
1038
  }
1021
1039
  };
1022
1040
 
@@ -1417,7 +1435,8 @@ var startClaudeInboxReceiver = (apiKey, machineId, options = {}) => {
1417
1435
  machineId,
1418
1436
  "claude_code",
1419
1437
  baseUrl,
1420
- abort.signal
1438
+ abort.signal,
1439
+ options.report
1421
1440
  );
1422
1441
  const sessions = client.sessions().filter(options.ownsSession ?? ownsSession).slice(0, CLAUDE_INBOX_MAX_SESSIONS);
1423
1442
  if (!sessions.length) {
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  declinedAgentsFile,
4
4
  recordDeclinedAgent
5
- } from "../chunk-PG23ENSN.js";
5
+ } from "../chunk-ZWLSXECG.js";
6
6
  import {
7
7
  isCursorPluginLeftover,
8
8
  isPusharyCursorPluginManifest,
9
9
  releaseSoleGate
10
- } from "../chunk-D2KJKAYM.js";
10
+ } from "../chunk-ZWIJJYN3.js";
11
11
  import {
12
12
  planFxRemoval,
13
13
  removeClineServer
14
- } from "../chunk-IZJDVOJV.js";
15
- import "../chunk-3TKTZOKG.js";
16
- import "../chunk-PFHRW3LR.js";
14
+ } from "../chunk-2XDVEBHI.js";
15
+ import "../chunk-54TZGPZP.js";
16
+ import "../chunk-NZD6ISCL.js";
17
17
  import {
18
18
  OPENCODE_PLUGIN_SIBLING,
19
19
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -25,10 +25,10 @@ import {
25
25
  openCodePluginDir,
26
26
  openCodePluginFile,
27
27
  removeOpenCodeMcpServer
28
- } from "../chunk-NSBWFX7H.js";
28
+ } from "../chunk-VBWJ756P.js";
29
29
  import {
30
30
  exitOnHelpFlag
31
- } from "../chunk-4EQOCSJW.js";
31
+ } from "../chunk-K7YJBVR3.js";
32
32
  import {
33
33
  compatibleConfigFile,
34
34
  compatibleDocuments,
@@ -38,27 +38,28 @@ import {
38
38
  isEmptiedPusharyOwnedDocument,
39
39
  removeCompatibleHooks,
40
40
  removeCompatibleMcpServer
41
- } from "../chunk-RZBV5KTF.js";
41
+ } from "../chunk-43DT3QWZ.js";
42
42
  import {
43
43
  removeGeminiSettings
44
- } from "../chunk-237FYIVC.js";
45
- import "../chunk-MRHGK3Q3.js";
46
- import "../chunk-JYCAAQUW.js";
47
- import "../chunk-XHC3UNOK.js";
48
- import "../chunk-MJVDFNP2.js";
44
+ } from "../chunk-TLK5YLIE.js";
45
+ import "../chunk-D7AAAD6W.js";
46
+ import "../chunk-A2YJ2FBR.js";
47
+ import "../chunk-5XDFQ6E3.js";
48
+ import "../chunk-LAWI6NQK.js";
49
49
  import {
50
50
  parseFlags
51
51
  } from "../chunk-YPY4YCIZ.js";
52
- import "../chunk-RGVQOOGD.js";
53
- import "../chunk-J4UNR655.js";
52
+ import "../chunk-IRIXOH4U.js";
53
+ import "../chunk-L2GADKFL.js";
54
+ import "../chunk-Y47BMZUR.js";
54
55
  import "../chunk-POFBE6ZY.js";
55
- import "../chunk-2KN53MPE.js";
56
- import "../chunk-42PVKPHM.js";
57
- import "../chunk-LR3PIGRS.js";
58
- import "../chunk-V2T5ZDMP.js";
59
- import "../chunk-DS7XMYUB.js";
60
- import "../chunk-CVBSETPW.js";
61
- import "../chunk-BKH4LQJC.js";
56
+ import "../chunk-WXUEOHYY.js";
57
+ import "../chunk-VVN3RPV6.js";
58
+ import "../chunk-Q2VV77IY.js";
59
+ import "../chunk-PHA6AFOR.js";
60
+ import "../chunk-WNT4JHK3.js";
61
+ import "../chunk-PNVTPEO5.js";
62
+ import "../chunk-LNF36PTF.js";
62
63
  import {
63
64
  claudeJson,
64
65
  claudeMcpReceipt,
@@ -88,9 +89,9 @@ import {
88
89
  removePusharySettings,
89
90
  removePusharyToolPermissions,
90
91
  restoreClaudeMcpServer
91
- } from "../chunk-W4FJR57E.js";
92
- import "../chunk-A44MRVWG.js";
93
- import "../chunk-T6HX6OTY.js";
92
+ } from "../chunk-R7KC57PC.js";
93
+ import "../chunk-GS5FH3C2.js";
94
+ import "../chunk-IKBTG3OT.js";
94
95
  import {
95
96
  UsageError
96
97
  } from "../chunk-YU2EUD7O.js";
@@ -102,14 +103,14 @@ import {
102
103
  } from "../chunk-BG4HHB7E.js";
103
104
  import {
104
105
  isInvocationOf
105
- } from "../chunk-SZYKS433.js";
106
+ } from "../chunk-MQMVJDII.js";
106
107
  import "../chunk-WIIMW5YO.js";
107
108
  import {
108
109
  DISCONNECTABLE_AGENTS,
109
110
  DISCONNECT_AGENT_IDS,
110
111
  hookCompatibleProfileBySource,
111
112
  normalizeAgentId
112
- } from "../chunk-M65LPNIO.js";
113
+ } from "../chunk-DL67HX3D.js";
113
114
  import "../chunk-MLKGABMK.js";
114
115
 
115
116
  // bin/pushary-disconnect.ts
@@ -135,11 +135,21 @@ var init_native_input = __esm({
135
135
  }
136
136
  });
137
137
 
138
+ // ../contracts/src/json-record.ts
139
+ var isRecord;
140
+ var init_json_record = __esm({
141
+ "../contracts/src/json-record.ts"() {
142
+ "use strict";
143
+ isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
144
+ }
145
+ });
146
+
138
147
  // ../contracts/src/command-delivery.ts
139
- var COMMAND_SETTLEMENT_STATES, COMMAND_RECOVERY, COMMAND_ACKNOWLEDGEMENT_STATES;
148
+ var COMMAND_SETTLEMENT_STATES, COMMAND_RECOVERY, COMMAND_ACKNOWLEDGEMENT_STATES, COMMAND_ACK_ERRORS, COMMAND_ACK_ERROR_RESPONSES;
140
149
  var init_command_delivery = __esm({
141
150
  "../contracts/src/command-delivery.ts"() {
142
151
  "use strict";
152
+ init_json_record();
143
153
  COMMAND_SETTLEMENT_STATES = [
144
154
  "delivered",
145
155
  "failed",
@@ -156,6 +166,18 @@ var init_command_delivery = __esm({
156
166
  "dispatching",
157
167
  ...COMMAND_SETTLEMENT_STATES
158
168
  ];
169
+ COMMAND_ACK_ERRORS = {
170
+ unauthorized: { status: 401, error: "Unauthorized", final: false },
171
+ forbiddenKeyScope: { status: 403, error: "Forbidden key scope", final: true },
172
+ invalidAck: { status: 400, error: "invalid_ack", final: true },
173
+ invalidMachineId: { status: 400, error: "invalid_machine_id", final: true },
174
+ invalidDispatch: { status: 400, error: "invalid_dispatch", final: true },
175
+ machineRequired: { status: 400, error: "machine_required", final: true },
176
+ ackUnavailable: { status: 503, error: "ack_unavailable", final: false },
177
+ claimMismatch: { status: 409, error: "claim_mismatch", final: true },
178
+ staleCommand: { status: 409, error: "stale_command", final: true }
179
+ };
180
+ COMMAND_ACK_ERROR_RESPONSES = Object.values(COMMAND_ACK_ERRORS);
159
181
  }
160
182
  });
161
183
 
@@ -181,15 +203,6 @@ var init_claude_wake = __esm({
181
203
  }
182
204
  });
183
205
 
184
- // ../contracts/src/json-record.ts
185
- var isRecord;
186
- var init_json_record = __esm({
187
- "../contracts/src/json-record.ts"() {
188
- "use strict";
189
- isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
190
- }
191
- });
192
-
193
206
  // ../contracts/src/agent-questions.ts
194
207
  var init_agent_questions = __esm({
195
208
  "../contracts/src/agent-questions.ts"() {
@@ -674,7 +687,9 @@ var init_agent_wiring = __esm({
674
687
  permissionRuleFile: null,
675
688
  configDirIsShared: false,
676
689
  soleGate: null,
677
- taskControl: null
690
+ taskControl: null,
691
+ promptFollowsPreToolUseAllow: true,
692
+ permissionRequestPaths: "shell_escaped"
678
693
  };
679
694
  CODEBUDDY = {
680
695
  agentType: "codebuddy",
@@ -698,7 +713,9 @@ var init_agent_wiring = __esm({
698
713
  permissionRuleFile: homeJson(".codebuddy", "settings.json"),
699
714
  configDirIsShared: false,
700
715
  soleGate: null,
701
- taskControl: null
716
+ taskControl: null,
717
+ promptFollowsPreToolUseAllow: false,
718
+ permissionRequestPaths: "as_pre_tool_use"
702
719
  };
703
720
  QODER = {
704
721
  agentType: "qoder",
@@ -722,7 +739,9 @@ var init_agent_wiring = __esm({
722
739
  permissionRuleFile: null,
723
740
  configDirIsShared: false,
724
741
  soleGate: null,
725
- taskControl: null
742
+ taskControl: null,
743
+ promptFollowsPreToolUseAllow: false,
744
+ permissionRequestPaths: "as_pre_tool_use"
726
745
  };
727
746
  DROID = {
728
747
  agentType: "droid",
@@ -751,7 +770,9 @@ var init_agent_wiring = __esm({
751
770
  permissionRuleFile: null,
752
771
  configDirIsShared: false,
753
772
  soleGate: null,
754
- taskControl: null
773
+ taskControl: null,
774
+ promptFollowsPreToolUseAllow: false,
775
+ permissionRequestPaths: "as_pre_tool_use"
755
776
  };
756
777
  DEVIN = {
757
778
  agentType: "devin",
@@ -785,7 +806,9 @@ var init_agent_wiring = __esm({
785
806
  permissionRuleFile: null,
786
807
  configDirIsShared: false,
787
808
  soleGate: null,
788
- taskControl: null
809
+ taskControl: null,
810
+ promptFollowsPreToolUseAllow: false,
811
+ permissionRequestPaths: "as_pre_tool_use"
789
812
  };
790
813
  ANTIGRAVITY_TASK_CONTROL = {
791
814
  name: "manage_task",
@@ -836,7 +859,9 @@ var init_agent_wiring = __esm({
836
859
  receipt: [".pushary", "setup", "antigravity-tool-permission.json"],
837
860
  coveredTools: [ANTIGRAVITY_TASK_CONTROL.name]
838
861
  },
839
- taskControl: ANTIGRAVITY_TASK_CONTROL
862
+ taskControl: ANTIGRAVITY_TASK_CONTROL,
863
+ promptFollowsPreToolUseAllow: false,
864
+ permissionRequestPaths: "as_pre_tool_use"
840
865
  };
841
866
  GROK = {
842
867
  agentType: "grok",
@@ -870,7 +895,9 @@ var init_agent_wiring = __esm({
870
895
  permissionRuleFile: null,
871
896
  configDirIsShared: false,
872
897
  soleGate: null,
873
- taskControl: null
898
+ taskControl: null,
899
+ promptFollowsPreToolUseAllow: false,
900
+ permissionRequestPaths: "as_pre_tool_use"
874
901
  };
875
902
  HOOK_COMPATIBLE_PROFILES = Object.freeze([QWEN_CODE, CODEBUDDY, QODER, DROID, DEVIN, ANTIGRAVITY_CLI, GROK]);
876
903
  }