pushary 1.9.139 → 1.9.141

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 (135) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/data/vscode-plugin/README.md +2 -0
  3. package/dist/{api-JY6EQT7A.js → api-JWLCKSWR.js} +11 -11
  4. package/dist/bin/pushary-audit.js +3 -3
  5. package/dist/bin/pushary-bell-hook.js +28 -28
  6. package/dist/bin/pushary-bell.js +10 -10
  7. package/dist/bin/pushary-claude.js +27 -27
  8. package/dist/bin/pushary-clean.js +36 -36
  9. package/dist/bin/pushary-codex-bridge.js +23 -23
  10. package/dist/bin/pushary-codex-hook.js +35 -35
  11. package/dist/bin/pushary-codex-session.js +9 -9
  12. package/dist/bin/pushary-codex.js +16 -16
  13. package/dist/bin/pushary-connect.js +29 -29
  14. package/dist/bin/pushary-cowork.js +5 -5
  15. package/dist/bin/pushary-daemon.js +93 -95
  16. package/dist/bin/pushary-disconnect.js +28 -28
  17. package/dist/bin/pushary-display-hook.js +93 -5
  18. package/dist/bin/pushary-doctor.js +43 -43
  19. package/dist/bin/pushary-elicitation-hook.js +28 -28
  20. package/dist/bin/pushary-gemini-bridge.js +19 -18
  21. package/dist/bin/pushary-gemini-hook.js +32 -32
  22. package/dist/bin/pushary-hook.js +35 -35
  23. package/dist/bin/pushary-login.js +21 -21
  24. package/dist/bin/pushary-logout.js +27 -27
  25. package/dist/bin/pushary-mcp.js +12 -12
  26. package/dist/bin/pushary-mode.js +15 -15
  27. package/dist/bin/pushary-notification-hook.js +27 -27
  28. package/dist/bin/pushary-opencode-hook.js +31 -31
  29. package/dist/bin/pushary-permission-denied-hook.js +35 -35
  30. package/dist/bin/pushary-permission-hook.js +35 -35
  31. package/dist/bin/pushary-post-hook.js +28 -28
  32. package/dist/bin/pushary-prompt-hook.js +27 -27
  33. package/dist/bin/pushary-session-end-hook.js +27 -27
  34. package/dist/bin/pushary-session-start-hook.js +36 -36
  35. package/dist/bin/pushary-setup.js +51 -51
  36. package/dist/bin/pushary-stats.js +5 -5
  37. package/dist/bin/pushary-status.js +33 -33
  38. package/dist/bin/pushary-stop-hook.js +27 -27
  39. package/dist/bin/pushary-stopfailure-hook.js +27 -27
  40. package/dist/bin/pushary-suggestions.js +15 -15
  41. package/dist/bin/pushary-transcript-register.js +17 -17
  42. package/dist/bin/pushary-transcripts.js +25 -25
  43. package/dist/bin/pushary-upgrade.js +41 -41
  44. package/dist/bin/pushary-wait.js +15 -15
  45. package/dist/bin/pushary.js +7 -7
  46. package/dist/{chunk-SVKZKLEP.js → chunk-24BLJAQN.js} +1 -1
  47. package/dist/{chunk-SKVPWXNK.js → chunk-3MFJDZ2L.js} +10 -10
  48. package/dist/{chunk-UTUR6WEA.js → chunk-3MMOB5TM.js} +3 -3
  49. package/dist/{chunk-BURSH6SW.js → chunk-3PALTBFX.js} +4 -4
  50. package/dist/{chunk-P3UCAWUP.js → chunk-3RBUCAO7.js} +6 -6
  51. package/dist/{chunk-KYWH4XUR.js → chunk-3YV26XPH.js} +3 -3
  52. package/dist/{chunk-GGTLV67J.js → chunk-4JR6PPIY.js} +4 -4
  53. package/dist/{chunk-RBPAUX6C.js → chunk-4KHBN7LI.js} +5 -5
  54. package/dist/{chunk-4NLZUCPG.js → chunk-4Y2LO2WB.js} +2 -2
  55. package/dist/{chunk-U7Z53YWH.js → chunk-4ZTPPMLM.js} +4 -4
  56. package/dist/{chunk-J5SMCRIT.js → chunk-5DMGHDOT.js} +5 -5
  57. package/dist/{chunk-LHUA6ADC.js → chunk-62V26PAL.js} +3 -3
  58. package/dist/{chunk-IAWFSD4Q.js → chunk-6DAXKHVX.js} +1 -1
  59. package/dist/{chunk-KDQSPNPH.js → chunk-7EYUDJQ6.js} +16 -16
  60. package/dist/{chunk-KXHGEJVW.js → chunk-7TKF7IFS.js} +2 -2
  61. package/dist/{chunk-KQVURVAP.js → chunk-A6KNDKO5.js} +597 -116
  62. package/dist/{chunk-IDXCVT6W.js → chunk-ACG7RC7N.js} +3 -3
  63. package/dist/{chunk-4RKB6X4S.js → chunk-AIZ5KC2N.js} +2 -2
  64. package/dist/{chunk-BRXKVYTV.js → chunk-ALJL6GDD.js} +1 -1
  65. package/dist/{chunk-M6TJWXST.js → chunk-ARIJUXCG.js} +8 -8
  66. package/dist/{chunk-QTR6KQEU.js → chunk-BFXIQGWS.js} +1 -1
  67. package/dist/{chunk-ZYLZCNOJ.js → chunk-BKWDG5QV.js} +1 -1
  68. package/dist/{chunk-2MJMKM6D.js → chunk-C4VTURGH.js} +1 -1
  69. package/dist/{chunk-IOWB43KY.js → chunk-CAUSBRTJ.js} +1 -1
  70. package/dist/{chunk-DTJZK3MN.js → chunk-CL3OIICA.js} +6 -6
  71. package/dist/{chunk-LHYBHWCK.js → chunk-CUJ2MGG5.js} +2 -2
  72. package/dist/{chunk-H4O4IPWY.js → chunk-CVGVWUNE.js} +5 -5
  73. package/dist/{chunk-3FNBN4JQ.js → chunk-CWCJFCAY.js} +1 -1
  74. package/dist/{chunk-LYLADUYE.js → chunk-D35XQMWO.js} +2 -2
  75. package/dist/{chunk-UZZRSCFR.js → chunk-EADQYNLU.js} +5 -5
  76. package/dist/{chunk-M4G4VWW6.js → chunk-F335PCA4.js} +1 -1
  77. package/dist/{chunk-CQLQFN6B.js → chunk-FKKS4ZC5.js} +3 -12
  78. package/dist/{chunk-2X2JHX77.js → chunk-FOPV3VQD.js} +4 -4
  79. package/dist/{chunk-FSTSLVZJ.js → chunk-GA72NGS7.js} +1 -1
  80. package/dist/{chunk-CZH3JDVB.js → chunk-GGXAZTSW.js} +2 -2
  81. package/dist/{chunk-7MPKMLE3.js → chunk-GX46NBAE.js} +11 -11
  82. package/dist/{chunk-IHUXZGHB.js → chunk-HEXX52SX.js} +1 -1
  83. package/dist/{chunk-S63DCSH4.js → chunk-I547BHSE.js} +4 -4
  84. package/dist/{chunk-OBPBT6RG.js → chunk-I72H3AWD.js} +3 -3
  85. package/dist/{chunk-T5FPA2JO.js → chunk-IR7J5WY4.js} +3 -3
  86. package/dist/{chunk-3PQEUSPK.js → chunk-J2ELAXGI.js} +1 -1
  87. package/dist/{chunk-6RAHONLG.js → chunk-J3NMHMG7.js} +2 -2
  88. package/dist/{chunk-6A6OSNC2.js → chunk-JBQFVXDK.js} +1 -1
  89. package/dist/{chunk-INGRSQVC.js → chunk-KAYK66B3.js} +3 -3
  90. package/dist/{chunk-FIQ7ND7P.js → chunk-LCYHJQGQ.js} +5 -5
  91. package/dist/{chunk-2YMVIBFT.js → chunk-ME2ZKG6Y.js} +12 -12
  92. package/dist/{chunk-LKSFQTGQ.js → chunk-MQJEDVTH.js} +1 -1
  93. package/dist/{chunk-C4F5RUJL.js → chunk-MW6MPOQZ.js} +6 -6
  94. package/dist/{chunk-XQYBTRVW.js → chunk-NDAJSNIZ.js} +1 -1
  95. package/dist/{chunk-DF2CUKN4.js → chunk-NFXWQDZ6.js} +2 -2
  96. package/dist/{chunk-ZAZQHOBS.js → chunk-O2CW5IFD.js} +11 -11
  97. package/dist/{chunk-GVJWHTN2.js → chunk-OR47JOLE.js} +2 -2
  98. package/dist/{chunk-422KDIO5.js → chunk-PD5LSNEK.js} +2 -2
  99. package/dist/{chunk-IEHI64ZN.js → chunk-PDES33BK.js} +1 -1
  100. package/dist/{chunk-AOAIYHAP.js → chunk-PHSPXFAY.js} +5 -5
  101. package/dist/{chunk-AEC72YC3.js → chunk-PNKFGNJF.js} +6 -6
  102. package/dist/{chunk-OBKHLKKB.js → chunk-PY2JHBNC.js} +4 -4
  103. package/dist/{chunk-LSABM2ES.js → chunk-Q4XW5FWF.js} +2 -2
  104. package/dist/{chunk-WES6E62H.js → chunk-Q6EK2GDR.js} +4 -4
  105. package/dist/{chunk-ZNMLL2WN.js → chunk-QNEF5JII.js} +2 -2
  106. package/dist/{chunk-XKXOT2ZU.js → chunk-QVXNSVBS.js} +3 -3
  107. package/dist/{chunk-LVL7XAXK.js → chunk-RO36S2KY.js} +5 -5
  108. package/dist/{chunk-QMKI5RGT.js → chunk-RQCKUCWK.js} +4 -5
  109. package/dist/{chunk-Q5H5AFS7.js → chunk-TIX4DZ2J.js} +3 -3
  110. package/dist/{chunk-E46NE7FB.js → chunk-U4P4NDVB.js} +2 -0
  111. package/dist/{chunk-GCOOOIBX.js → chunk-UJ2WT54H.js} +43 -31
  112. package/dist/{chunk-LGIB72D7.js → chunk-UOKA4ENY.js} +3 -3
  113. package/dist/{chunk-OLJTUTD2.js → chunk-UQ352C7S.js} +37 -33
  114. package/dist/{chunk-7Q6YKZY2.js → chunk-VBYWBGIJ.js} +3 -3
  115. package/dist/{chunk-QG5MJ6NW.js → chunk-VR6VWNLQ.js} +6 -6
  116. package/dist/{chunk-ISDMTGZ3.js → chunk-VTT3WV4C.js} +1 -1
  117. package/dist/{chunk-MAPC5KKZ.js → chunk-XBPBYSNM.js} +2 -2
  118. package/dist/{chunk-FMQBG2TD.js → chunk-XYFKYZCQ.js} +6 -6
  119. package/dist/{chunk-J6CNQ5UK.js → chunk-XYRPLFMD.js} +1 -1
  120. package/dist/{chunk-P6S4CALA.js → chunk-YKL7VBKJ.js} +5 -5
  121. package/dist/{chunk-MNVBO6UO.js → chunk-ZE56WMFL.js} +4 -4
  122. package/dist/{codex-app-cards-switch-TOHSGS5T.js → codex-app-cards-switch-NRAMENRL.js} +12 -12
  123. package/dist/{codex-card-routing-BPCOKSBO.js → codex-card-routing-D7ARIQKL.js} +2 -2
  124. package/dist/{codex-desktop-launch-6LD5GETH.js → codex-desktop-launch-2X4UEMRL.js} +2 -2
  125. package/dist/{codex-session-launch-ZVFPD4ON.js → codex-session-launch-FY5QIZSI.js} +20 -20
  126. package/dist/{config-3AFJSGM2.js → config-NDOIVL6S.js} +3 -3
  127. package/dist/{global-upgrade-6SWFRW5G.js → global-upgrade-MS3WGHEP.js} +9 -9
  128. package/dist/{identity-K2VBL5PB.js → identity-VXA3TZ7U.js} +4 -4
  129. package/dist/{live-capabilities-VQEG7TCE.js → live-capabilities-2LCBHUWN.js} +14 -11
  130. package/dist/{paths-ZAVMBGAQ.js → paths-HOCSWOBY.js} +3 -3
  131. package/dist/{reapply-BXMMOQXK.js → reapply-VYMO3QM6.js} +29 -29
  132. package/dist/src/index.js +34 -34
  133. package/dist/{upgrade-lock-UZN332AO.js → upgrade-lock-XH5AQIOD.js} +4 -4
  134. package/dist/{usage-EDDIN5YZ.js → usage-EVX6CH5H.js} +3 -3
  135. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  inspectConfiguredManagedProviders
4
- } from "../chunk-ZAZQHOBS.js";
4
+ } from "../chunk-O2CW5IFD.js";
5
5
  import {
6
6
  readHookWiring,
7
7
  readHookWiringSafely
8
- } from "../chunk-M6TJWXST.js";
9
- import "../chunk-LYLADUYE.js";
10
- import "../chunk-4NLZUCPG.js";
8
+ } from "../chunk-ARIJUXCG.js";
9
+ import "../chunk-D35XQMWO.js";
10
+ import "../chunk-4Y2LO2WB.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-LVL7XAXK.js";
19
- import "../chunk-KXHGEJVW.js";
18
+ } from "../chunk-RO36S2KY.js";
19
+ import "../chunk-7TKF7IFS.js";
20
20
  import {
21
21
  readSignedOutDiagnosis
22
- } from "../chunk-ZNMLL2WN.js";
22
+ } from "../chunk-QNEF5JII.js";
23
23
  import {
24
24
  HERMES_INSTALL_MARKER_FILE,
25
25
  defaultHermesHome,
26
26
  parseHermesInstallMarker
27
- } from "../chunk-Q5H5AFS7.js";
27
+ } from "../chunk-TIX4DZ2J.js";
28
28
  import {
29
29
  writeHuman
30
30
  } from "../chunk-QCGNGEGE.js";
31
- import "../chunk-H4O4IPWY.js";
32
- import "../chunk-7Q6YKZY2.js";
33
- import "../chunk-UTUR6WEA.js";
34
- import "../chunk-RBPAUX6C.js";
31
+ import "../chunk-CVGVWUNE.js";
32
+ import "../chunk-VBYWBGIJ.js";
33
+ import "../chunk-3MMOB5TM.js";
34
+ import "../chunk-4KHBN7LI.js";
35
35
  import {
36
36
  exitOnHelpFlag
37
- } from "../chunk-3FNBN4JQ.js";
37
+ } from "../chunk-CWCJFCAY.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-OLJTUTD2.js";
47
- import "../chunk-MAPC5KKZ.js";
46
+ } from "../chunk-UQ352C7S.js";
47
+ import "../chunk-XBPBYSNM.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-LSABM2ES.js";
55
+ } from "../chunk-Q4XW5FWF.js";
56
56
  import "../chunk-CYTPQDQY.js";
57
57
  import {
58
58
  readLocalAutoUpdateReport
59
- } from "../chunk-LHYBHWCK.js";
60
- import "../chunk-GGTLV67J.js";
59
+ } from "../chunk-CUJ2MGG5.js";
60
+ import "../chunk-4JR6PPIY.js";
61
61
  import {
62
62
  startRegisteredTranscripts
63
- } from "../chunk-SKVPWXNK.js";
63
+ } from "../chunk-3MFJDZ2L.js";
64
64
  import "../chunk-VAE5JBR5.js";
65
65
  import "../chunk-G66WIAST.js";
66
- import "../chunk-FIQ7ND7P.js";
66
+ import "../chunk-LCYHJQGQ.js";
67
67
  import {
68
68
  DAEMON_LEASE_RENEW_INTERVAL_MS,
69
69
  DAEMON_YIELD_CHECK_INTERVAL_MS,
@@ -81,62 +81,62 @@ import {
81
81
  requestDaemonHandoff,
82
82
  stopDaemonRunning,
83
83
  writeDaemonNeedsLogin
84
- } from "../chunk-AEC72YC3.js";
84
+ } from "../chunk-PNKFGNJF.js";
85
85
  import {
86
86
  hookOwnerOf
87
- } from "../chunk-OBKHLKKB.js";
87
+ } from "../chunk-PY2JHBNC.js";
88
88
  import {
89
89
  markPendingCommandRefused,
90
90
  pendingCommandReceipts,
91
91
  removePendingCommand
92
- } from "../chunk-2YMVIBFT.js";
93
- import "../chunk-QTR6KQEU.js";
94
- import "../chunk-IOWB43KY.js";
95
- import "../chunk-BRXKVYTV.js";
92
+ } from "../chunk-ME2ZKG6Y.js";
93
+ import "../chunk-BFXIQGWS.js";
94
+ import "../chunk-CAUSBRTJ.js";
95
+ import "../chunk-ALJL6GDD.js";
96
96
  import "../chunk-YPY4YCIZ.js";
97
- import "../chunk-INGRSQVC.js";
97
+ import "../chunk-KAYK66B3.js";
98
98
  import "../chunk-XMSDA5WA.js";
99
- import "../chunk-XQYBTRVW.js";
100
- import "../chunk-6A6OSNC2.js";
101
- import "../chunk-P3UCAWUP.js";
99
+ import "../chunk-NDAJSNIZ.js";
100
+ import "../chunk-JBQFVXDK.js";
101
+ import "../chunk-3RBUCAO7.js";
102
102
  import "../chunk-POFBE6ZY.js";
103
- import "../chunk-UZZRSCFR.js";
104
- import "../chunk-LHUA6ADC.js";
105
- import "../chunk-KYWH4XUR.js";
103
+ import "../chunk-EADQYNLU.js";
104
+ import "../chunk-62V26PAL.js";
105
+ import "../chunk-3YV26XPH.js";
106
106
  import {
107
107
  spawnClaude
108
108
  } from "../chunk-H6CL3T2S.js";
109
109
  import {
110
110
  readCommandAck,
111
111
  refusedReceiptMessage
112
- } from "../chunk-3PQEUSPK.js";
113
- import "../chunk-IAWFSD4Q.js";
112
+ } from "../chunk-J2ELAXGI.js";
113
+ import "../chunk-6DAXKHVX.js";
114
114
  import {
115
115
  getMachineId
116
- } from "../chunk-J6CNQ5UK.js";
116
+ } from "../chunk-XYRPLFMD.js";
117
117
  import "../chunk-YU2EUD7O.js";
118
118
  import {
119
119
  readControlMode
120
- } from "../chunk-XKXOT2ZU.js";
121
- import "../chunk-GVJWHTN2.js";
120
+ } from "../chunk-QVXNSVBS.js";
121
+ import "../chunk-OR47JOLE.js";
122
122
  import {
123
123
  claudeConfigDir,
124
124
  codexHome
125
- } from "../chunk-CZH3JDVB.js";
125
+ } from "../chunk-GGXAZTSW.js";
126
126
  import {
127
127
  resolveBinary
128
- } from "../chunk-CQLQFN6B.js";
128
+ } from "../chunk-FKKS4ZC5.js";
129
129
  import {
130
130
  getApiKey,
131
131
  getBaseUrl
132
- } from "../chunk-IEHI64ZN.js";
132
+ } from "../chunk-PDES33BK.js";
133
133
  import {
134
134
  EXIT
135
135
  } from "../chunk-BG4HHB7E.js";
136
136
  import {
137
137
  writeJsonAtomicDurable
138
138
  } from "../chunk-TODDEIYG.js";
139
- import "../chunk-ZYLZCNOJ.js";
139
+ import "../chunk-BKWDG5QV.js";
140
140
  import "../chunk-WIIMW5YO.js";
141
141
  import {
142
142
  CLAUDE_INBOX,
@@ -148,6 +148,8 @@ import {
148
148
  COMMAND_RECOVERY,
149
149
  NATIVE_INPUT,
150
150
  NativeInputAgent,
151
+ SPAWN_LAUNCH_FAILED_CODE,
152
+ SPAWN_UNCONFIRMED_ATTEMPT_FAILURE,
151
153
  claudeInboxAction,
152
154
  claudeWakeDecision,
153
155
  claudeWakeWaitingOn,
@@ -157,6 +159,7 @@ import {
157
159
  isCodexInputReceipt,
158
160
  isCodexQueuedReceipt,
159
161
  isCommandAcknowledgementReceipt,
162
+ isRecord,
160
163
  nativeIdentifier,
161
164
  nativeInputAction,
162
165
  nativeRecord,
@@ -166,9 +169,56 @@ import {
166
169
  parseHermesAdmission,
167
170
  parseHermesReplayCursor,
168
171
  qualifyHermesReceiptMode
169
- } from "../chunk-KQVURVAP.js";
172
+ } from "../chunk-A6KNDKO5.js";
170
173
  import "../chunk-MLKGABMK.js";
171
174
 
175
+ // src/spawn-claim.ts
176
+ var parseSpawnClaim = (value) => {
177
+ if (!isRecord(value)) return null;
178
+ const request = value;
179
+ if (request.attemptCount !== void 0 && (typeof request.attemptCount !== "number" || !Number.isSafeInteger(request.attemptCount) || request.attemptCount < 1)) return null;
180
+ if (typeof request.id !== "string" || typeof request.prompt !== "string") return null;
181
+ return {
182
+ id: request.id,
183
+ prompt: request.prompt,
184
+ ...typeof request.claimId === "string" ? { claimId: request.claimId } : {},
185
+ ...typeof request.attemptCount === "number" ? { attemptCount: request.attemptCount } : {},
186
+ ...typeof request.cwd === "string" ? { cwd: request.cwd } : {},
187
+ ...typeof request.agent === "string" ? { agent: request.agent } : {},
188
+ ...typeof request.model === "string" ? { model: request.model } : {},
189
+ ...typeof request.resumeSessionId === "string" ? { resumeSessionId: request.resumeSessionId } : {}
190
+ };
191
+ };
192
+ var MAX_FAILURE_MESSAGE_LENGTH = 240;
193
+ var launchFailureOf = (outcome) => outcome.state === "unconfirmed" ? SPAWN_UNCONFIRMED_ATTEMPT_FAILURE : { code: SPAWN_LAUNCH_FAILED_CODE, message: outcome.message.slice(0, MAX_FAILURE_MESSAGE_LENGTH), retryable: false };
194
+ var spawnAcknowledgement = (request, machineId, outcome) => {
195
+ if (!request.claimId) return null;
196
+ const claim = { spawnId: request.id, claimId: request.claimId, machineId };
197
+ return outcome.state === "started" ? { ...claim, state: "started", pid: outcome.pid ?? null } : { ...claim, state: "failed", failure: launchFailureOf(outcome) };
198
+ };
199
+ var isRedelivered = (request) => (request.attemptCount ?? 1) > 1;
200
+ var launchSpawnClaim = async (request, runtime) => {
201
+ const existingPid = await runtime.findExistingPid(request.id);
202
+ if (existingPid !== null) {
203
+ await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "started", pid: existingPid }));
204
+ return;
205
+ }
206
+ if (isRedelivered(request)) {
207
+ await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "unconfirmed" }));
208
+ return;
209
+ }
210
+ let pid;
211
+ try {
212
+ pid = await runtime.launch(request);
213
+ } catch (err) {
214
+ const message = err instanceof Error ? err.message : String(err);
215
+ runtime.reportLaunchError(message);
216
+ await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "failed", message }));
217
+ return;
218
+ }
219
+ await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "started", pid }));
220
+ };
221
+
172
222
  // src/native-host-receiver.ts
173
223
  import { join as join2 } from "path";
174
224
  import { homedir } from "os";
@@ -1585,59 +1635,7 @@ var parseControlProbe = (value) => {
1585
1635
  return typeof id === "string" && id.length > 0 && id.length <= 128 ? id : null;
1586
1636
  };
1587
1637
  var daemonSignals = (platform = process.platform) => platform === "win32" ? ["SIGINT", "SIGTERM"] : ["SIGINT", "SIGTERM", "SIGHUP"];
1588
- var parseSpawnClaim = (value) => {
1589
- if (typeof value !== "object" || value === null) return null;
1590
- const request = value;
1591
- if (typeof request.id !== "string" || typeof request.prompt !== "string") return null;
1592
- return {
1593
- id: request.id,
1594
- prompt: request.prompt,
1595
- ...typeof request.claimId === "string" ? { claimId: request.claimId } : {},
1596
- ...Number.isInteger(request.attemptCount) ? { attemptCount: request.attemptCount } : {},
1597
- ...typeof request.cwd === "string" ? { cwd: request.cwd } : {},
1598
- ...typeof request.agent === "string" ? { agent: request.agent } : {},
1599
- ...typeof request.model === "string" ? { model: request.model } : {},
1600
- ...typeof request.resumeSessionId === "string" ? { resumeSessionId: request.resumeSessionId } : {}
1601
- };
1602
- };
1603
1638
  var stopAcknowledgement = (request, machineId, state) => request.id ? { stopId: request.id, machineId, state } : null;
1604
- var spawnAcknowledgement = (request, machineId, outcome) => {
1605
- if (!request.claimId) return null;
1606
- return outcome.state === "started" ? {
1607
- spawnId: request.id,
1608
- claimId: request.claimId,
1609
- machineId,
1610
- state: "started",
1611
- pid: outcome.pid ?? null
1612
- } : {
1613
- spawnId: request.id,
1614
- claimId: request.claimId,
1615
- machineId,
1616
- state: "failed",
1617
- failure: {
1618
- code: "launch_failed",
1619
- message: outcome.message.slice(0, 240),
1620
- retryable: false
1621
- }
1622
- };
1623
- };
1624
- var launchSpawnClaim = async (request, runtime) => {
1625
- const existingPid = await runtime.findExistingPid(request.id);
1626
- if (existingPid !== null) {
1627
- await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "started", pid: existingPid }));
1628
- return;
1629
- }
1630
- let pid;
1631
- try {
1632
- pid = await runtime.launch(request);
1633
- } catch (err) {
1634
- const message = err instanceof Error ? err.message : String(err);
1635
- runtime.reportLaunchError(message);
1636
- await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "failed", message }));
1637
- return;
1638
- }
1639
- await runtime.acknowledge(spawnAcknowledgement(request, runtime.machineId, { state: "started", pid }));
1640
- };
1641
1639
  var DrainError = class extends Error {
1642
1640
  constructor(status) {
1643
1641
  super(`drain ${status}`);
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  declinedAgentsFile,
4
4
  recordDeclinedAgent
5
- } from "../chunk-4NLZUCPG.js";
5
+ } from "../chunk-4Y2LO2WB.js";
6
6
  import {
7
7
  isCursorPluginLeftover,
8
8
  isPusharyCursorPluginManifest,
9
9
  releaseSoleGate
10
- } from "../chunk-2X2JHX77.js";
10
+ } from "../chunk-FOPV3VQD.js";
11
11
  import {
12
12
  planFxRemoval,
13
13
  removeClineServer
14
- } from "../chunk-H4O4IPWY.js";
15
- import "../chunk-7Q6YKZY2.js";
16
- import "../chunk-UTUR6WEA.js";
14
+ } from "../chunk-CVGVWUNE.js";
15
+ import "../chunk-VBYWBGIJ.js";
16
+ import "../chunk-3MMOB5TM.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-RBPAUX6C.js";
28
+ } from "../chunk-4KHBN7LI.js";
29
29
  import {
30
30
  exitOnHelpFlag
31
- } from "../chunk-3FNBN4JQ.js";
31
+ } from "../chunk-CWCJFCAY.js";
32
32
  import {
33
33
  compatibleConfigFile,
34
34
  compatibleDocuments,
@@ -38,31 +38,31 @@ import {
38
38
  isEmptiedPusharyOwnedDocument,
39
39
  removeCompatibleHooks,
40
40
  removeCompatibleMcpServer
41
- } from "../chunk-FIQ7ND7P.js";
41
+ } from "../chunk-LCYHJQGQ.js";
42
42
  import {
43
43
  removeGeminiSettings
44
- } from "../chunk-OBKHLKKB.js";
45
- import "../chunk-2YMVIBFT.js";
46
- import "../chunk-QTR6KQEU.js";
47
- import "../chunk-IOWB43KY.js";
48
- import "../chunk-BRXKVYTV.js";
44
+ } from "../chunk-PY2JHBNC.js";
45
+ import "../chunk-ME2ZKG6Y.js";
46
+ import "../chunk-BFXIQGWS.js";
47
+ import "../chunk-CAUSBRTJ.js";
48
+ import "../chunk-ALJL6GDD.js";
49
49
  import {
50
50
  parseFlags
51
51
  } from "../chunk-YPY4YCIZ.js";
52
- import "../chunk-6A6OSNC2.js";
53
- import "../chunk-P3UCAWUP.js";
52
+ import "../chunk-JBQFVXDK.js";
53
+ import "../chunk-3RBUCAO7.js";
54
54
  import "../chunk-POFBE6ZY.js";
55
- import "../chunk-UZZRSCFR.js";
56
- import "../chunk-LHUA6ADC.js";
57
- import "../chunk-KYWH4XUR.js";
58
- import "../chunk-3PQEUSPK.js";
59
- import "../chunk-IAWFSD4Q.js";
60
- import "../chunk-J6CNQ5UK.js";
55
+ import "../chunk-EADQYNLU.js";
56
+ import "../chunk-62V26PAL.js";
57
+ import "../chunk-3YV26XPH.js";
58
+ import "../chunk-J2ELAXGI.js";
59
+ import "../chunk-6DAXKHVX.js";
60
+ import "../chunk-XYRPLFMD.js";
61
61
  import {
62
62
  UsageError
63
63
  } from "../chunk-YU2EUD7O.js";
64
- import "../chunk-XKXOT2ZU.js";
65
- import "../chunk-GVJWHTN2.js";
64
+ import "../chunk-QVXNSVBS.js";
65
+ import "../chunk-OR47JOLE.js";
66
66
  import {
67
67
  claudeJson,
68
68
  claudeMcpReceipt,
@@ -92,9 +92,9 @@ import {
92
92
  removePusharySettings,
93
93
  removePusharyToolPermissions,
94
94
  restoreClaudeMcpServer
95
- } from "../chunk-CZH3JDVB.js";
96
- import "../chunk-CQLQFN6B.js";
97
- import "../chunk-IEHI64ZN.js";
95
+ } from "../chunk-GGXAZTSW.js";
96
+ import "../chunk-FKKS4ZC5.js";
97
+ import "../chunk-PDES33BK.js";
98
98
  import {
99
99
  EXIT
100
100
  } from "../chunk-BG4HHB7E.js";
@@ -103,14 +103,14 @@ import {
103
103
  } from "../chunk-TODDEIYG.js";
104
104
  import {
105
105
  isInvocationOf
106
- } from "../chunk-ZYLZCNOJ.js";
106
+ } from "../chunk-BKWDG5QV.js";
107
107
  import "../chunk-WIIMW5YO.js";
108
108
  import {
109
109
  DISCONNECTABLE_AGENTS,
110
110
  DISCONNECT_AGENT_IDS,
111
111
  hookCompatibleProfileBySource,
112
112
  normalizeAgentId
113
- } from "../chunk-KQVURVAP.js";
113
+ } from "../chunk-A6KNDKO5.js";
114
114
  import "../chunk-MLKGABMK.js";
115
115
 
116
116
  // bin/pushary-disconnect.ts
@@ -9,6 +9,13 @@ var __export = (target, all) => {
9
9
  __defProp(target, name, { get: all[name], enumerable: true });
10
10
  };
11
11
 
12
+ // ../contracts/src/settlement-render.ts
13
+ var init_settlement_render = __esm({
14
+ "../contracts/src/settlement-render.ts"() {
15
+ "use strict";
16
+ }
17
+ });
18
+
12
19
  // ../contracts/src/audit-chain.ts
13
20
  var AUDIT_CHAIN_GENESIS_HASH, AUDIT_CHECKPOINT_INTERVAL_MS, AUDIT_CHECKPOINT_SWEEP_MS, AUDIT_CHAIN_PASS_INTERVAL_MS, AUDIT_CHECKPOINT_MAX_AGE_MS, ASKED_TEXT_FIELDS, ASKED_NULLABLE_FIELDS, DECISION_NULLABLE_FIELDS, ASKED_PAYLOAD_KEYS, DECISION_PAYLOAD_KEYS;
14
21
  var init_audit_chain = __esm({
@@ -27,6 +34,14 @@ var init_audit_chain = __esm({
27
34
  }
28
35
  });
29
36
 
37
+ // ../contracts/src/permission-grant-routing.ts
38
+ var init_permission_grant_routing = __esm({
39
+ "../contracts/src/permission-grant-routing.ts"() {
40
+ "use strict";
41
+ init_src();
42
+ }
43
+ });
44
+
30
45
  // ../contracts/src/redaction.ts
31
46
  var CREDENTIAL_NAME, CREDENTIAL_KEY, DISPLAYED_CREDENTIAL_KEY, SHELL_INERT_UNIT, SHELL_INERT_SINGLE_QUOTED_UNIT, SHELL_INERT_URL_PASSWORD_UNIT, PEM_LINE_BREAK, credentialAssignmentRule, DISPLAYED_SECRET_SHAPES, CUT_OFF_SECRET_SHAPES, secretRedactionRules, SECRET_REDACTION_RULES, CUT_OFF_TEXT_REDACTION_RULES;
32
47
  var init_redaction = __esm({
@@ -274,6 +289,46 @@ var init_shell_tools = __esm({
274
289
  }
275
290
  });
276
291
 
292
+ // ../contracts/src/session-runtime.ts
293
+ var CLAUDE_BRIDGE_CAPABILITY, CLAUDE_RESUME_CAPABILITY, CODEX_BRIDGE_CAPABILITY, CODEX_RESUME_CAPABILITY, GEMINI_BRIDGE_CAPABILITY, GEMINI_RESUME_CAPABILITY, SESSION_RUNTIMES;
294
+ var init_session_runtime = __esm({
295
+ "../contracts/src/session-runtime.ts"() {
296
+ "use strict";
297
+ CLAUDE_BRIDGE_CAPABILITY = "claude-bridge";
298
+ CLAUDE_RESUME_CAPABILITY = "claude-resume";
299
+ CODEX_BRIDGE_CAPABILITY = "codex-bridge";
300
+ CODEX_RESUME_CAPABILITY = "codex-resume";
301
+ GEMINI_BRIDGE_CAPABILITY = "gemini-bridge";
302
+ GEMINI_RESUME_CAPABILITY = "gemini-resume";
303
+ SESSION_RUNTIMES = {
304
+ claude: {
305
+ provider: "claude",
306
+ label: "Claude",
307
+ protocol: "claude-stream-json",
308
+ bridgeCapability: CLAUDE_BRIDGE_CAPABILITY,
309
+ resumeCapability: CLAUDE_RESUME_CAPABILITY,
310
+ phoneResume: false
311
+ },
312
+ codex: {
313
+ provider: "codex",
314
+ label: "Codex",
315
+ protocol: "codex-app-server",
316
+ bridgeCapability: CODEX_BRIDGE_CAPABILITY,
317
+ resumeCapability: CODEX_RESUME_CAPABILITY,
318
+ phoneResume: true
319
+ },
320
+ gemini: {
321
+ provider: "gemini",
322
+ label: "Gemini",
323
+ protocol: "gemini-stream-json",
324
+ bridgeCapability: GEMINI_BRIDGE_CAPABILITY,
325
+ resumeCapability: GEMINI_RESUME_CAPABILITY,
326
+ phoneResume: true
327
+ }
328
+ };
329
+ }
330
+ });
331
+
277
332
  // ../contracts/src/claude-connector.ts
278
333
  var CLAUDE_DIRECTORY_URL, COWORK_CONNECTOR_LIMIT, CLAUDE_CONNECTOR_STEPS, CONNECTOR_SETUP_QUESTION, CLAUDE_CONNECTOR_TEST, connectorStarterPrompt, CLAUDE_CONNECTOR_STARTER;
279
334
  var init_claude_connector = __esm({
@@ -310,6 +365,7 @@ var PUSHARY_SETUP_COMMAND, defaults, AGENTS, HOOK_SOURCES, POLICY_AGENTS, AGENT_
310
365
  var init_agent_manifest = __esm({
311
366
  "../contracts/src/agent-manifest.ts"() {
312
367
  "use strict";
368
+ init_session_runtime();
313
369
  init_claude_connector();
314
370
  PUSHARY_SETUP_COMMAND = "npx pushary@latest setup";
315
371
  defaults = {
@@ -318,7 +374,7 @@ var init_agent_manifest = __esm({
318
374
  policyAgent: null,
319
375
  repoAware: false,
320
376
  disconnectable: false,
321
- managedProvider: false,
377
+ sessionRuntime: null,
322
378
  bridged: false,
323
379
  enforcement: "cooperative",
324
380
  connectVia: "Plain MCP",
@@ -341,7 +397,7 @@ var init_agent_manifest = __esm({
341
397
  policyAgent: "claude_code",
342
398
  repoAware: true,
343
399
  disconnectable: true,
344
- managedProvider: true,
400
+ sessionRuntime: SESSION_RUNTIMES.claude,
345
401
  enforcement: "enforced",
346
402
  connectVia: "Native hooks + MCP",
347
403
  setupCommand: PUSHARY_SETUP_COMMAND,
@@ -369,7 +425,7 @@ var init_agent_manifest = __esm({
369
425
  policyAgent: "codex",
370
426
  repoAware: true,
371
427
  disconnectable: true,
372
- managedProvider: true,
428
+ sessionRuntime: SESSION_RUNTIMES.codex,
373
429
  enforcement: "enforced",
374
430
  connectVia: "Native hooks + MCP",
375
431
  setupCommand: PUSHARY_SETUP_COMMAND,
@@ -390,7 +446,7 @@ var init_agent_manifest = __esm({
390
446
  policyAgent: "gemini_cli",
391
447
  repoAware: true,
392
448
  disconnectable: true,
393
- managedProvider: true,
449
+ sessionRuntime: SESSION_RUNTIMES.gemini,
394
450
  enforcement: "enforced",
395
451
  connectVia: "Native hooks + MCP",
396
452
  setupCommand: PUSHARY_SETUP_COMMAND,
@@ -606,7 +662,7 @@ var init_agent_manifest = __esm({
606
662
  );
607
663
  DISCONNECTABLE_AGENTS = Object.freeze(Object.values(AGENTS).flatMap((agent) => agent.disconnectable && agent.hookSource !== null ? [agent.hookSource] : []));
608
664
  REPO_AWARE_AGENTS = Object.freeze(Object.values(AGENTS).flatMap((agent) => agent.repoAware ? [agent.policyAgent] : []));
609
- MANAGED_PROVIDERS = Object.freeze(Object.values(AGENTS).flatMap((agent) => agent.managedProvider ? [agent.hookSource] : []));
665
+ MANAGED_PROVIDERS = Object.freeze(Object.values(AGENTS).flatMap((agent) => agent.sessionRuntime ? [agent.sessionRuntime.provider] : []));
610
666
  BRIDGE_HOOK_SOURCES = Object.freeze(Object.values(AGENTS).flatMap((agent) => agent.bridged ? [agent.hookSource] : []));
611
667
  isAgentId = (value) => Object.keys(AGENTS).includes(value);
612
668
  isHooklessDisconnectableAgent = (value) => isAgentId(value) && AGENTS[value].disconnectable && AGENTS[value].hookSource === null;
@@ -1228,6 +1284,19 @@ var init_codex_shell_script = __esm({
1228
1284
  }
1229
1285
  });
1230
1286
 
1287
+ // ../contracts/src/codex-permission-profile.ts
1288
+ var BROAD_ROOTS_IN_NAMING_ORDER, RANK_IN_A_SENSITIVE_PLACE, RANK_OUTSIDE_THE_WORKING_DIRECTORY, RANK_INSIDE_THE_WORKING_DIRECTORY;
1289
+ var init_codex_permission_profile = __esm({
1290
+ "../contracts/src/codex-permission-profile.ts"() {
1291
+ "use strict";
1292
+ init_redaction();
1293
+ BROAD_ROOTS_IN_NAMING_ORDER = ["computer", "drive", "volume", "share", "everyHome", "home", "topLevel"];
1294
+ RANK_IN_A_SENSITIVE_PLACE = BROAD_ROOTS_IN_NAMING_ORDER.length;
1295
+ RANK_OUTSIDE_THE_WORKING_DIRECTORY = RANK_IN_A_SENSITIVE_PLACE + 1;
1296
+ RANK_INSIDE_THE_WORKING_DIRECTORY = RANK_OUTSIDE_THE_WORKING_DIRECTORY + 1;
1297
+ }
1298
+ });
1299
+
1231
1300
  // ../contracts/src/codex-native-approval.ts
1232
1301
  var MCP_META_KEYS, COMPUTER_USE_META_KEYS;
1233
1302
  var init_codex_native_approval = __esm({
@@ -1235,6 +1304,7 @@ var init_codex_native_approval = __esm({
1235
1304
  "use strict";
1236
1305
  init_codex_shell_script();
1237
1306
  init_redaction();
1307
+ init_codex_permission_profile();
1238
1308
  MCP_META_KEYS = ["codex_approval_kind", "codex_requires_user_input", "codex_request_type", "codex_strict_auto_review", "codex_sensitive_action", "approvals_reviewer", "persist", "source", "connector_id", "connector_name", "connector_description", "tool_name", "tool_title", "tool_description", "tool_params", "tool_params_display"];
1239
1309
  COMPUTER_USE_META_KEYS = [...MCP_META_KEYS, "riskLevel", "subtitle", "tool_call_id"];
1240
1310
  }
@@ -1263,6 +1333,18 @@ var init_encryption_account = __esm({
1263
1333
  }
1264
1334
  });
1265
1335
 
1336
+ // ../contracts/src/spawn-delivery.ts
1337
+ var SPAWN_RECOVERY;
1338
+ var init_spawn_delivery = __esm({
1339
+ "../contracts/src/spawn-delivery.ts"() {
1340
+ "use strict";
1341
+ SPAWN_RECOVERY = {
1342
+ receiptRetentionMs: 7 * 24 * 60 * 60 * 1e3,
1343
+ retrySendWindowMs: 60 * 60 * 1e3
1344
+ };
1345
+ }
1346
+ });
1347
+
1266
1348
  // ../contracts/src/claude-inbox.ts
1267
1349
  var CLAUDE_INBOX_SETTLEMENTS;
1268
1350
  var init_claude_inbox = __esm({
@@ -1289,7 +1371,10 @@ var SETUP_VERIFICATION_SENDER, DOCTOR_VERIFICATION_SENDER, SETUP_VERIFICATION_SE
1289
1371
  var init_src = __esm({
1290
1372
  "../contracts/src/index.ts"() {
1291
1373
  "use strict";
1374
+ init_settlement_render();
1375
+ init_settlement_render();
1292
1376
  init_audit_chain();
1377
+ init_permission_grant_routing();
1293
1378
  init_receipt_evidence();
1294
1379
  init_team_context();
1295
1380
  init_team_phone_link();
@@ -1316,6 +1401,7 @@ var init_src = __esm({
1316
1401
  init_env_invocation();
1317
1402
  init_shell_command_string();
1318
1403
  init_agent_manifest();
1404
+ init_session_runtime();
1319
1405
  init_claude_connector();
1320
1406
  init_chatgpt_plugin();
1321
1407
  init_partner_developer_guide();
@@ -1346,8 +1432,10 @@ var init_src = __esm({
1346
1432
  init_decision_lifetime();
1347
1433
  init_question_continuation();
1348
1434
  init_codex_native_approval();
1435
+ init_codex_permission_profile();
1349
1436
  init_transcript_record();
1350
1437
  init_encryption_account();
1438
+ init_spawn_delivery();
1351
1439
  init_codex_shell_script();
1352
1440
  init_claude_inbox();
1353
1441
  init_command_delivery();