pushary 1.9.42 → 1.9.44

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 (111) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -0
  3. package/data/SKILL.md +7 -1
  4. package/data/cowork/SKILL.md +3 -1
  5. package/data/cursor-plugin/.cursor-plugin/plugin.json +1 -1
  6. package/data/cursor-plugin/skills/pushary/SKILL.md +6 -0
  7. package/data/vscode-plugin/skills/pushary/SKILL.md +6 -0
  8. package/dist/bin/pushary-bell-hook.js +27 -26
  9. package/dist/bin/pushary-bell.js +11 -11
  10. package/dist/bin/pushary-claude.js +30 -28
  11. package/dist/bin/pushary-clean.js +39 -38
  12. package/dist/bin/pushary-codex-bridge.js +38 -28
  13. package/dist/bin/pushary-codex-hook.js +35 -33
  14. package/dist/bin/pushary-codex-session.d.ts +1 -0
  15. package/dist/bin/pushary-codex-session.js +253 -0
  16. package/dist/bin/pushary-codex.js +13 -12
  17. package/dist/bin/pushary-connect.js +28 -27
  18. package/dist/bin/pushary-cowork.js +6 -6
  19. package/dist/bin/pushary-daemon.js +48 -47
  20. package/dist/bin/pushary-disconnect.js +27 -26
  21. package/dist/bin/pushary-doctor.js +85 -82
  22. package/dist/bin/pushary-elicitation-hook.js +27 -26
  23. package/dist/bin/pushary-gemini-bridge.js +22 -22
  24. package/dist/bin/pushary-gemini-hook.js +32 -30
  25. package/dist/bin/pushary-hook.js +33 -32
  26. package/dist/bin/pushary-login.js +16 -16
  27. package/dist/bin/pushary-logout.js +28 -27
  28. package/dist/bin/pushary-mcp.js +9 -9
  29. package/dist/bin/pushary-mode.js +14 -14
  30. package/dist/bin/pushary-notification-hook.js +26 -25
  31. package/dist/bin/pushary-opencode-hook.js +31 -29
  32. package/dist/bin/pushary-permission-denied-hook.js +31 -30
  33. package/dist/bin/pushary-permission-hook.js +30 -29
  34. package/dist/bin/pushary-post-hook.js +26 -25
  35. package/dist/bin/pushary-prompt-hook.js +26 -25
  36. package/dist/bin/pushary-session-end-hook.js +26 -25
  37. package/dist/bin/pushary-session-start-hook.js +31 -30
  38. package/dist/bin/pushary-setup.js +165 -112
  39. package/dist/bin/pushary-stats.js +5 -5
  40. package/dist/bin/pushary-status.js +35 -34
  41. package/dist/bin/pushary-stop-hook.js +26 -25
  42. package/dist/bin/pushary-stopfailure-hook.js +26 -25
  43. package/dist/bin/pushary-suggestions.js +14 -14
  44. package/dist/bin/pushary-transcript-register.js +18 -18
  45. package/dist/bin/pushary-transcripts.js +7 -7
  46. package/dist/bin/pushary-upgrade.js +41 -40
  47. package/dist/bin/pushary-wait.js +14 -14
  48. package/dist/bin/pushary.js +7 -6
  49. package/dist/{chunk-ZX3PFROQ.js → chunk-2NVXFWQY.js} +1 -1
  50. package/dist/{chunk-7L6YSHZO.js → chunk-3IRC3XFG.js} +2 -2
  51. package/dist/{chunk-IXNVIWNN.js → chunk-42CVAOC5.js} +2 -2
  52. package/dist/{chunk-EBZK2SJ2.js → chunk-4JHEZ2PV.js} +12 -5
  53. package/dist/{chunk-JBK47Y2M.js → chunk-4WBAHVBK.js} +11 -11
  54. package/dist/{chunk-AW4TDBUJ.js → chunk-53UZN7JW.js} +3 -3
  55. package/dist/{chunk-I7EZMNKI.js → chunk-5ZSBQHCM.js} +12 -173
  56. package/dist/{chunk-KYFWYPHN.js → chunk-6EV3B5CD.js} +1 -1
  57. package/dist/{chunk-X7TNLYNZ.js → chunk-75M7NFFC.js} +1 -1
  58. package/dist/{chunk-AUDM6HU6.js → chunk-7UM4NCUI.js} +2 -2
  59. package/dist/{chunk-5INZFKHL.js → chunk-ALY7ZBNB.js} +1 -1
  60. package/dist/{chunk-CGRVIUKE.js → chunk-BKK3JCTD.js} +80 -164
  61. package/dist/{chunk-K2SSNAUW.js → chunk-CAJCCQ7N.js} +1 -1
  62. package/dist/{chunk-B7PZBWBU.js → chunk-CESLE4UN.js} +10 -10
  63. package/dist/{chunk-MI67QQEQ.js → chunk-CEZTYTBN.js} +13 -11
  64. package/dist/{chunk-6PABNQVH.js → chunk-DD6IBKEJ.js} +4 -4
  65. package/dist/{chunk-Z4RM54LU.js → chunk-E76QCZIA.js} +2 -2
  66. package/dist/{chunk-RBUCXUT7.js → chunk-FI2F5KZJ.js} +4 -4
  67. package/dist/{chunk-IVUP2EE4.js → chunk-FKDZU6YX.js} +4 -4
  68. package/dist/{chunk-EA5NWDK7.js → chunk-FYNMFSIZ.js} +29 -0
  69. package/dist/{chunk-M2YE3OEC.js → chunk-GBCR2FH2.js} +3 -3
  70. package/dist/chunk-GOEIW2VH.js +266 -0
  71. package/dist/{chunk-JQX2L3ES.js → chunk-GRAPJKDK.js} +1 -1
  72. package/dist/{chunk-DPISXMLL.js → chunk-HV4TEKNP.js} +4 -4
  73. package/dist/{chunk-FMYXPJYS.js → chunk-IWHDNMM3.js} +5 -5
  74. package/dist/{chunk-ORLTWJ2O.js → chunk-JNU3LV47.js} +355 -138
  75. package/dist/{chunk-ZJY4KON3.js → chunk-KILK6SWZ.js} +7 -7
  76. package/dist/{chunk-J7OBJZ5S.js → chunk-KYLY6UMN.js} +1 -1
  77. package/dist/{chunk-T3Q4B6WV.js → chunk-L2ZM7LXN.js} +2 -2
  78. package/dist/{chunk-PJ3C6IID.js → chunk-LEHBWBCG.js} +4 -4
  79. package/dist/{chunk-ODPULZZG.js → chunk-M2L7625S.js} +2 -2
  80. package/dist/{chunk-BDSIE2MT.js → chunk-MIBCRQWK.js} +2 -2
  81. package/dist/{chunk-MAB6CGL5.js → chunk-MRQJCIFO.js} +1 -1
  82. package/dist/{chunk-F43LAKAK.js → chunk-OR6KJOHE.js} +2 -2
  83. package/dist/{chunk-Y3HTWB5S.js → chunk-OSMNLNPF.js} +1 -1
  84. package/dist/{chunk-CHD6IUNM.js → chunk-OWQOMGBF.js} +1 -1
  85. package/dist/{chunk-RTM5GVRZ.js → chunk-OZ7MLVDM.js} +15 -15
  86. package/dist/{chunk-4WM7IVVQ.js → chunk-PGHN5D4N.js} +2 -2
  87. package/dist/{chunk-OLLWYLQX.js → chunk-PQAFH4DF.js} +3 -11
  88. package/dist/{chunk-E47JEBUR.js → chunk-RGBTKOCC.js} +45 -8
  89. package/dist/{chunk-4UCTKLHY.js → chunk-S2ALW446.js} +3 -3
  90. package/dist/{chunk-3U3FU6ZX.js → chunk-SI2NC6UU.js} +3 -3
  91. package/dist/chunk-SVCT5D7K.js +196 -0
  92. package/dist/{chunk-ZVMFRUBD.js → chunk-SWDPCDLT.js} +4 -4
  93. package/dist/{chunk-DIJ532S7.js → chunk-T3KMJI4W.js} +2 -1
  94. package/dist/{chunk-NRSTNZYJ.js → chunk-T4CKP47U.js} +5 -5
  95. package/dist/{chunk-M7VKFAAK.js → chunk-TJZUQRMH.js} +3 -3
  96. package/dist/{chunk-ZV56INA6.js → chunk-TKTS3SIM.js} +3 -3
  97. package/dist/{chunk-RETRVO47.js → chunk-TWATOPHK.js} +2 -2
  98. package/dist/{chunk-WZNRDDC4.js → chunk-UC4PNLMK.js} +6 -6
  99. package/dist/{chunk-ASXBYX2N.js → chunk-UJXLVH66.js} +1 -1
  100. package/dist/{chunk-Q3QRD67J.js → chunk-UY5E2UUW.js} +5 -5
  101. package/dist/{chunk-FP2ZJK3T.js → chunk-UZVF6MP2.js} +5 -5
  102. package/dist/{chunk-STETTN4K.js → chunk-W2TA4EVZ.js} +5 -5
  103. package/dist/{chunk-QRNNIDGY.js → chunk-WBD7HZEZ.js} +1 -1
  104. package/dist/{chunk-QPT4PTUG.js → chunk-WMO2XVG4.js} +1 -1
  105. package/dist/{chunk-BZIXDIIT.js → chunk-XPQDBTW4.js} +1 -1
  106. package/dist/{global-upgrade-YEAGJG4G.js → global-upgrade-QSSDYZCZ.js} +6 -6
  107. package/dist/{paths-HQAICWAF.js → paths-55DDFLY4.js} +2 -2
  108. package/dist/{reapply-XBEB2B5A.js → reapply-MEU66ALO.js} +23 -22
  109. package/dist/src/index.js +20 -19
  110. package/dist/{upgrade-lock-GIO5QZ7E.js → upgrade-lock-YLXAU4AD.js} +3 -3
  111. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.44
4
+
5
+ - Start a managed Codex terminal session with `pushary codex` and route supported command, file-change, and MCP permissions through Pushary. The native terminal remains available for unsupported requests.
6
+ - Preserve repository-specific deny and routing rules, cancel stale questions across delayed or lost responses, and stop owned session processes on shutdown. Existing Codex desktop chats are not attached by this feature.
7
+
8
+ ## 1.9.43
9
+
10
+ - Agent and fx setup guidance uses Pushary’s durable personal reminders, which persist after the agent exits and deliver privately to their creator.
11
+
3
12
  ## 1.9.42
4
13
 
5
14
  - Complete Mac cleanup removes the Partner enrollment and device-key slots introduced by the native Partner flow, alongside existing session state.
package/README.md CHANGED
@@ -205,6 +205,7 @@ failing closed would let one malformed download silence every hook on the machin
205
205
 
206
206
  ```
207
207
  cowork Set up Claude Desktop and Cowork with the Pushary connector
208
+ codex Start a managed Codex terminal session with Pushary native approvals
208
209
  setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, VS Code, OpenCode, or fx with Pushary
209
210
  claude Run Claude Code through Pushary, reachable from your phone even when idle
210
211
  daemon Keep this machine reachable so your phone can START a new session
package/data/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pushary
3
- version: 0.11.3
3
+ version: 0.12.0
4
4
  description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted, paid service; web and native store checkout have different price and trial terms.
5
5
  metadata:
6
6
  hermes:
@@ -358,6 +358,12 @@ and every returned field, and it is always current. This section adds only what
358
358
  schema cannot say: when to use a tool, what its result means for your next step,
359
359
  and the shapes that are easy to get wrong.
360
360
 
361
+ ### schedule_reminder
362
+
363
+ When the user asks “remind me later,” set a one-time personal reminder with `body` and either `inMinutes` (from the server clock) or `at` (ISO timestamp with explicit UTC offset or Z). Confirm the returned `fireAt` in their local time. Never guess their timezone. For example, `{"body":"Check the deploy","inMinutes":30}`. Pushary persists it and delivers to the authenticated creator even after the agent exits. It does not schedule agent work.
364
+
365
+ Call with no arguments to list pending reminders. Pass `cancelReminderId` to cancel a scheduled reminder; `cancelled:false` means it was not cancelled and it may already be dispatching. Limits: 30 days ahead, 25 pending per user/site. Delivery normally follows within about a minute, requires a connected phone, and respects current account access, membership and stop/mute. Test reminders never notify. Do not use `ask_user` for reminders or promise exact delivery time.
366
+
361
367
  ### send_notification
362
368
 
363
369
  Send a one-way push notification to the user. Optionally include structured context for a rich detail page.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pushary-cowork
3
- version: 0.5.0
3
+ version: 0.6.0
4
4
  description: Use Pushary in Claude Chat, Cowork, or Claude Code when the user asks for phone updates, a missing decision blocks work, an action needs approval outside existing authorization, or meaningful unattended work finishes or fails. Send task updates and confirm, choice, or text questions to the user's connected devices, then read the returned answer and handoff. Requires the Pushary connector and a paid Pushary account. This skill does not install native permission hooks.
5
5
  metadata:
6
6
  tags: notifications, push, mcp, human-in-the-loop, cowork, claude, alerts, approvals
@@ -18,6 +18,8 @@ Every question costs the user their attention wherever they are. Before a run of
18
18
 
19
19
  ## When to reach out
20
20
 
21
+ For a personal reminder later, call `schedule_reminder` with `body` and `inMinutes`, or `at` with an explicit UTC offset. Never guess the timezone; confirm the returned time. Pushary saves the reminder and delivers after this conversation ends. It does not reopen Claude or perform future agent work. No arguments lists pending reminders; `cancelReminderId` cancels a scheduled one. Delivery can be about a minute late and requires a connected phone. Do not use `ask_user` for reminders.
22
+
21
23
  - **You need a decision or a clarifying answer.** Call `ask_user` instead of guessing or stalling. Use type `confirm` for yes or no, `select` for a fixed set of options, and `input` for free text.
22
24
  - **An action outside your existing authorization is risky or irreversible.** Deleting or overwriting files, spending money, sending anything external, bulk changes: call `ask_user` with type `confirm` first and wait for approval.
23
25
  - **Meaningful work finishes while the user is away, or they requested an alert.** Call `send_notification` with a short summary of what changed, and pass `context.type` as `task_complete`. That is what marks it a task update, and the user's setting for where task updates land can only route one that says so. Keep a reply channel open only for a specific unresolved decision needed to finish, as described below.
@@ -2,7 +2,7 @@
2
2
  "name": "pushary",
3
3
  "displayName": "Pushary — Control Panel for AI Agents",
4
4
  "description": "Push notifications, human-in-the-loop questions, and permission gating for your AI coding agent. Get a push when a task finishes, answer the agent from your phone, and approve risky commands before they run.",
5
- "version": "0.2.6",
5
+ "version": "0.2.7",
6
6
  "author": { "name": "Pushary", "email": "business@pushary.com" },
7
7
  "homepage": "https://pushary.com",
8
8
  "repository": "https://github.com/Pushary/cursor-plugin",
@@ -351,6 +351,12 @@ and every returned field, and it is always current. This section adds only what
351
351
  schema cannot say: when to use a tool, what its result means for your next step,
352
352
  and the shapes that are easy to get wrong.
353
353
 
354
+ ### schedule_reminder
355
+
356
+ When the user asks “remind me later,” set a one-time personal reminder with `body` and either `inMinutes` (from the server clock) or `at` (ISO timestamp with explicit UTC offset or Z). Confirm the returned `fireAt` in their local time. Never guess their timezone. For example, `{"body":"Check the deploy","inMinutes":30}`. Pushary persists it and delivers to the authenticated creator even after the agent exits. It does not schedule agent work.
357
+
358
+ Call with no arguments to list pending reminders. Pass `cancelReminderId` to cancel a scheduled reminder; `cancelled:false` means it was not cancelled and it may already be dispatching. Limits: 30 days ahead, 25 pending per user/site. Delivery normally follows within about a minute, requires a connected phone, and respects current account access, membership and stop/mute. Test reminders never notify. Do not use `ask_user` for reminders or promise exact delivery time.
359
+
354
360
  ### send_notification
355
361
 
356
362
  Send a one-way push notification to the user. Optionally include structured context for a rich detail page.
@@ -351,6 +351,12 @@ and every returned field, and it is always current. This section adds only what
351
351
  schema cannot say: when to use a tool, what its result means for your next step,
352
352
  and the shapes that are easy to get wrong.
353
353
 
354
+ ### schedule_reminder
355
+
356
+ When the user asks “remind me later,” set a one-time personal reminder with `body` and either `inMinutes` (from the server clock) or `at` (ISO timestamp with explicit UTC offset or Z). Confirm the returned `fireAt` in their local time. Never guess their timezone. For example, `{"body":"Check the deploy","inMinutes":30}`. Pushary persists it and delivers to the authenticated creator even after the agent exits. It does not schedule agent work.
357
+
358
+ Call with no arguments to list pending reminders. Pass `cancelReminderId` to cancel a scheduled reminder; `cancelled:false` means it was not cancelled and it may already be dispatching. Limits: 30 days ahead, 25 pending per user/site. Delivery normally follows within about a minute, requires a connected phone, and respects current account access, membership and stop/mute. Test reminders never notify. Do not use `ask_user` for reminders or promise exact delivery time.
359
+
354
360
  ### send_notification
355
361
 
356
362
  Send a one-way push notification to the user. Optionally include structured context for a rich detail page.
@@ -1,41 +1,42 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-ASXBYX2N.js";
4
+ } from "../chunk-UJXLVH66.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-6PABNQVH.js";
8
- import "../chunk-RTM5GVRZ.js";
7
+ } from "../chunk-DD6IBKEJ.js";
8
+ import "../chunk-OZ7MLVDM.js";
9
9
  import "../chunk-DWQYCOPI.js";
10
- import "../chunk-STETTN4K.js";
11
- import "../chunk-X7TNLYNZ.js";
12
- import "../chunk-MAB6CGL5.js";
13
- import "../chunk-QRNNIDGY.js";
14
- import "../chunk-XHKBHWLX.js";
15
- import "../chunk-IVUP2EE4.js";
16
- import "../chunk-NRSTNZYJ.js";
17
- import "../chunk-3U3FU6ZX.js";
18
- import "../chunk-KYFWYPHN.js";
19
- import "../chunk-Y3HTWB5S.js";
10
+ import "../chunk-FKDZU6YX.js";
11
+ import "../chunk-W2TA4EVZ.js";
12
+ import "../chunk-T4CKP47U.js";
13
+ import "../chunk-SI2NC6UU.js";
14
+ import "../chunk-6EV3B5CD.js";
15
+ import "../chunk-OSMNLNPF.js";
20
16
  import "../chunk-GMXKITVA.js";
17
+ import "../chunk-WBD7HZEZ.js";
18
+ import "../chunk-XHKBHWLX.js";
19
+ import "../chunk-TJZUQRMH.js";
20
+ import "../chunk-75M7NFFC.js";
21
+ import "../chunk-MRQJCIFO.js";
21
22
  import "../chunk-6ICPEJY5.js";
22
- import "../chunk-M7VKFAAK.js";
23
- import "../chunk-CGRVIUKE.js";
24
- import "../chunk-K2SSNAUW.js";
25
- import "../chunk-I7EZMNKI.js";
23
+ import "../chunk-BKK3JCTD.js";
24
+ import "../chunk-CAJCCQ7N.js";
25
+ import "../chunk-5ZSBQHCM.js";
26
+ import "../chunk-M2L7625S.js";
27
+ import "../chunk-GOEIW2VH.js";
26
28
  import "../chunk-POFBE6ZY.js";
27
- import "../chunk-AW4TDBUJ.js";
28
- import "../chunk-ZV56INA6.js";
29
- import "../chunk-4UCTKLHY.js";
30
- import "../chunk-QPT4PTUG.js";
29
+ import "../chunk-53UZN7JW.js";
30
+ import "../chunk-TKTS3SIM.js";
31
+ import "../chunk-S2ALW446.js";
32
+ import "../chunk-WMO2XVG4.js";
31
33
  import "../chunk-7QLSKOSU.js";
32
34
  import "../chunk-KZERVKTD.js";
33
- import "../chunk-ODPULZZG.js";
34
- import "../chunk-EBZK2SJ2.js";
35
+ import "../chunk-4JHEZ2PV.js";
35
36
  import "../chunk-AQFEP65J.js";
36
- import "../chunk-CHD6IUNM.js";
37
- import "../chunk-DIJ532S7.js";
38
- import "../chunk-ORLTWJ2O.js";
37
+ import "../chunk-OWQOMGBF.js";
38
+ import "../chunk-T3KMJI4W.js";
39
+ import "../chunk-JNU3LV47.js";
39
40
 
40
41
  // bin/pushary-bell-hook.ts
41
42
  var main = async () => {
@@ -5,39 +5,39 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-ASXBYX2N.js";
8
+ } from "../chunk-UJXLVH66.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
- import {
13
- exitOnHelpFlag
14
- } from "../chunk-F43LAKAK.js";
15
12
  import {
16
13
  addBellHooks,
17
14
  bellInstalled,
18
15
  removeBellHooks
19
- } from "../chunk-Y3HTWB5S.js";
16
+ } from "../chunk-OSMNLNPF.js";
20
17
  import {
21
18
  parseFlags
22
19
  } from "../chunk-GMXKITVA.js";
23
- import "../chunk-M7VKFAAK.js";
20
+ import "../chunk-TJZUQRMH.js";
21
+ import {
22
+ exitOnHelpFlag
23
+ } from "../chunk-OR6KJOHE.js";
24
+ import "../chunk-M2L7625S.js";
24
25
  import "../chunk-7QLSKOSU.js";
25
26
  import {
26
27
  EXIT
27
28
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-ODPULZZG.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-EBZK2SJ2.js";
31
+ } from "../chunk-4JHEZ2PV.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
35
  } from "../chunk-AQFEP65J.js";
36
- import "../chunk-CHD6IUNM.js";
37
- import "../chunk-DIJ532S7.js";
36
+ import "../chunk-OWQOMGBF.js";
37
+ import "../chunk-T3KMJI4W.js";
38
38
  import {
39
39
  isRecord
40
- } from "../chunk-ORLTWJ2O.js";
40
+ } from "../chunk-JNU3LV47.js";
41
41
 
42
42
  // bin/pushary-bell.ts
43
43
  exitOnHelpFlag("bell");
@@ -8,39 +8,39 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-4WM7IVVQ.js";
11
+ } from "../chunk-PGHN5D4N.js";
12
12
  import {
13
13
  announceSubscriptionRequired,
14
14
  isDeferAnswer
15
- } from "../chunk-ZX3PFROQ.js";
15
+ } from "../chunk-2NVXFWQY.js";
16
16
  import {
17
17
  claudeTranscriptPath,
18
18
  loadSessionKey,
19
19
  registerTranscript,
20
20
  registeredTranscriptEnabled
21
- } from "../chunk-RTM5GVRZ.js";
21
+ } from "../chunk-OZ7MLVDM.js";
22
22
  import "../chunk-DWQYCOPI.js";
23
23
  import {
24
24
  ensureDaemonRunning
25
- } from "../chunk-STETTN4K.js";
26
- import {
27
- encryptRecord
28
- } from "../chunk-X7TNLYNZ.js";
29
- import "../chunk-MAB6CGL5.js";
25
+ } from "../chunk-W2TA4EVZ.js";
26
+ import "../chunk-T4CKP47U.js";
27
+ import "../chunk-SI2NC6UU.js";
28
+ import "../chunk-6EV3B5CD.js";
29
+ import "../chunk-OSMNLNPF.js";
30
+ import "../chunk-GMXKITVA.js";
30
31
  import {
31
32
  transcriptsEnabled
32
- } from "../chunk-QRNNIDGY.js";
33
+ } from "../chunk-WBD7HZEZ.js";
33
34
  import {
34
35
  needsShell,
35
36
  spawnClaude
36
37
  } from "../chunk-XHKBHWLX.js";
37
- import "../chunk-NRSTNZYJ.js";
38
- import "../chunk-3U3FU6ZX.js";
39
- import "../chunk-KYFWYPHN.js";
40
- import "../chunk-Y3HTWB5S.js";
41
- import "../chunk-GMXKITVA.js";
38
+ import "../chunk-TJZUQRMH.js";
39
+ import {
40
+ encryptRecord
41
+ } from "../chunk-75M7NFFC.js";
42
+ import "../chunk-MRQJCIFO.js";
42
43
  import "../chunk-6ICPEJY5.js";
43
- import "../chunk-M7VKFAAK.js";
44
44
  import {
45
45
  DEFAULT_SESSION,
46
46
  UNNAMED_ACTION,
@@ -54,12 +54,11 @@ import {
54
54
  readPendingCommand,
55
55
  readPendingCommandById,
56
56
  removePendingCommand,
57
- repoKeyFor,
58
57
  reportEvent,
59
58
  savePendingCommand,
60
59
  scopePathFor
61
- } from "../chunk-CGRVIUKE.js";
62
- import "../chunk-K2SSNAUW.js";
60
+ } from "../chunk-BKK3JCTD.js";
61
+ import "../chunk-CAJCCQ7N.js";
63
62
  import {
64
63
  askUser,
65
64
  cancelQuestion,
@@ -70,28 +69,31 @@ import {
70
69
  waitForAnswer,
71
70
  waitsForThePhone,
72
71
  withdrawQuestion
73
- } from "../chunk-I7EZMNKI.js";
72
+ } from "../chunk-5ZSBQHCM.js";
73
+ import "../chunk-M2L7625S.js";
74
+ import {
75
+ repoKeyFor
76
+ } from "../chunk-GOEIW2VH.js";
74
77
  import "../chunk-POFBE6ZY.js";
75
78
  import {
76
79
  SubscriptionRequiredError
77
- } from "../chunk-AW4TDBUJ.js";
78
- import "../chunk-ZV56INA6.js";
79
- import "../chunk-4UCTKLHY.js";
80
+ } from "../chunk-53UZN7JW.js";
81
+ import "../chunk-TKTS3SIM.js";
82
+ import "../chunk-S2ALW446.js";
80
83
  import {
81
84
  getMachineId
82
- } from "../chunk-QPT4PTUG.js";
85
+ } from "../chunk-WMO2XVG4.js";
83
86
  import "../chunk-7QLSKOSU.js";
84
87
  import "../chunk-KZERVKTD.js";
85
- import "../chunk-ODPULZZG.js";
86
- import "../chunk-EBZK2SJ2.js";
88
+ import "../chunk-4JHEZ2PV.js";
87
89
  import "../chunk-AQFEP65J.js";
88
90
  import {
89
91
  getApiKey,
90
92
  getBaseUrl
91
- } from "../chunk-CHD6IUNM.js";
93
+ } from "../chunk-OWQOMGBF.js";
92
94
  import {
93
95
  NPX_LATEST_COMMAND
94
- } from "../chunk-DIJ532S7.js";
96
+ } from "../chunk-T3KMJI4W.js";
95
97
  import {
96
98
  DECISION_STOP_REASON,
97
99
  HAND_BACK_WITHOUT_A_PROMPT,
@@ -101,7 +103,7 @@ import {
101
103
  redactSecretsFromContent,
102
104
  resolveGate,
103
105
  timeoutActionWithoutLocalPrompt
104
- } from "../chunk-ORLTWJ2O.js";
106
+ } from "../chunk-JNU3LV47.js";
105
107
 
106
108
  // src/wrapper/localPassthrough.ts
107
109
  var SIGNAL_NUMBERS = {
@@ -9,12 +9,13 @@ import {
9
9
  planCliKeyRevocations,
10
10
  readCliHeldKeys,
11
11
  revokeCliKeys
12
- } from "../chunk-FMYXPJYS.js";
12
+ } from "../chunk-IWHDNMM3.js";
13
+ import "../chunk-SWDPCDLT.js";
13
14
  import {
14
15
  isCursorPluginLeftover,
15
16
  releaseSoleGate,
16
17
  withoutPusharyCursorHooks
17
- } from "../chunk-RBUCXUT7.js";
18
+ } from "../chunk-FI2F5KZJ.js";
18
19
  import {
19
20
  HERMES_PIP_PACKAGE,
20
21
  readHermesStatus,
@@ -23,25 +24,20 @@ import {
23
24
  shortenHome,
24
25
  unregisterPluginLocation,
25
26
  vscodeSettingsTargets
26
- } from "../chunk-DPISXMLL.js";
27
- import {
28
- planFxRemoval,
29
- removeInstructionBlock
30
- } from "../chunk-E47JEBUR.js";
31
- import "../chunk-RETRVO47.js";
32
- import {
33
- disableDaemonService
34
- } from "../chunk-STETTN4K.js";
35
- import "../chunk-XHKBHWLX.js";
36
- import "../chunk-ZVMFRUBD.js";
27
+ } from "../chunk-HV4TEKNP.js";
37
28
  import {
38
29
  macAppKeepsMcpEntry,
39
30
  mcpServerBearer,
40
31
  pusharyKey,
41
32
  readMacAppAgentKey,
42
33
  setupReceiptKey
43
- } from "../chunk-PJ3C6IID.js";
44
- import "../chunk-IXNVIWNN.js";
34
+ } from "../chunk-LEHBWBCG.js";
35
+ import "../chunk-42CVAOC5.js";
36
+ import {
37
+ planFxRemoval,
38
+ removeInstructionBlock
39
+ } from "../chunk-RGBTKOCC.js";
40
+ import "../chunk-TWATOPHK.js";
45
41
  import {
46
42
  OPENCODE_PLUGIN_SIBLING,
47
43
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -53,14 +49,11 @@ import {
53
49
  openCodePluginDir,
54
50
  openCodePluginFile,
55
51
  removeOpenCodeMcpServer
56
- } from "../chunk-FP2ZJK3T.js";
52
+ } from "../chunk-UZVF6MP2.js";
57
53
  import {
58
54
  ansiPainter,
59
55
  useColor
60
56
  } from "../chunk-FO3MDD26.js";
61
- import {
62
- exitOnHelpFlag
63
- } from "../chunk-F43LAKAK.js";
64
57
  import {
65
58
  compatibleConfigFile,
66
59
  compatibleDocuments,
@@ -76,7 +69,10 @@ import {
76
69
  removePusharyToolPermissions,
77
70
  restoreClaudeMcpServer,
78
71
  serializeConfigDocument
79
- } from "../chunk-IVUP2EE4.js";
72
+ } from "../chunk-FKDZU6YX.js";
73
+ import {
74
+ disableDaemonService
75
+ } from "../chunk-W2TA4EVZ.js";
80
76
  import {
81
77
  hookOwnerOf,
82
78
  isHookTakeoverReceipt,
@@ -84,35 +80,40 @@ import {
84
80
  resolveBridgeStub,
85
81
  restoreHookTakeover,
86
82
  restoreMcpServer
87
- } from "../chunk-NRSTNZYJ.js";
83
+ } from "../chunk-T4CKP47U.js";
88
84
  import {
89
85
  removeGeminiSettings
90
- } from "../chunk-3U3FU6ZX.js";
91
- import "../chunk-KYFWYPHN.js";
92
- import "../chunk-Y3HTWB5S.js";
86
+ } from "../chunk-SI2NC6UU.js";
87
+ import "../chunk-6EV3B5CD.js";
88
+ import "../chunk-OSMNLNPF.js";
93
89
  import {
94
90
  rejectUnknownFlags
95
91
  } from "../chunk-GMXKITVA.js";
96
- import "../chunk-6ICPEJY5.js";
92
+ import "../chunk-XHKBHWLX.js";
97
93
  import {
98
94
  CANDIDATE_RCS,
99
95
  isDisabledExport,
100
96
  removeClaudeAlias,
101
97
  shellProfileCandidates
102
- } from "../chunk-M7VKFAAK.js";
103
- import "../chunk-CGRVIUKE.js";
104
- import "../chunk-K2SSNAUW.js";
105
- import "../chunk-I7EZMNKI.js";
98
+ } from "../chunk-TJZUQRMH.js";
99
+ import {
100
+ exitOnHelpFlag
101
+ } from "../chunk-OR6KJOHE.js";
102
+ import "../chunk-6ICPEJY5.js";
103
+ import "../chunk-BKK3JCTD.js";
104
+ import "../chunk-CAJCCQ7N.js";
105
+ import "../chunk-5ZSBQHCM.js";
106
+ import "../chunk-M2L7625S.js";
107
+ import "../chunk-GOEIW2VH.js";
106
108
  import "../chunk-POFBE6ZY.js";
107
- import "../chunk-AW4TDBUJ.js";
108
- import "../chunk-ZV56INA6.js";
109
- import "../chunk-4UCTKLHY.js";
110
- import "../chunk-QPT4PTUG.js";
109
+ import "../chunk-53UZN7JW.js";
110
+ import "../chunk-TKTS3SIM.js";
111
+ import "../chunk-S2ALW446.js";
112
+ import "../chunk-WMO2XVG4.js";
111
113
  import "../chunk-7QLSKOSU.js";
112
114
  import {
113
115
  EXIT
114
116
  } from "../chunk-KZERVKTD.js";
115
- import "../chunk-ODPULZZG.js";
116
117
  import {
117
118
  claudeJson,
118
119
  claudeMcpReceipt,
@@ -149,14 +150,14 @@ import {
149
150
  restoreCodexHookTrust,
150
151
  vscodePluginDir,
151
152
  vscodePluginMcp
152
- } from "../chunk-EBZK2SJ2.js";
153
+ } from "../chunk-4JHEZ2PV.js";
153
154
  import "../chunk-AQFEP65J.js";
154
155
  import {
155
156
  getBaseUrl
156
- } from "../chunk-CHD6IUNM.js";
157
+ } from "../chunk-OWQOMGBF.js";
157
158
  import {
158
159
  NPX_LATEST_COMMAND
159
- } from "../chunk-DIJ532S7.js";
160
+ } from "../chunk-T3KMJI4W.js";
160
161
  import {
161
162
  CLI_PACKAGE_NAMES,
162
163
  HOOK_COMPATIBLE_PROFILES,
@@ -168,7 +169,7 @@ import {
168
169
  globalRootFor,
169
170
  isValidApiKey,
170
171
  redactSecrets
171
- } from "../chunk-ORLTWJ2O.js";
172
+ } from "../chunk-JNU3LV47.js";
172
173
 
173
174
  // bin/pushary-clean.ts
174
175
  import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
@@ -1,59 +1,64 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- LiveTranscriptRelay,
4
- liveSessionSleep,
5
- postLiveSession,
6
- postLiveSessionUntilAccepted,
7
- startLiveSessionHeartbeat
8
- } from "../chunk-OLLWYLQX.js";
9
- import {
10
- resolveProviderBinary
11
- } from "../chunk-T3Q4B6WV.js";
12
- import "../chunk-RIVNNBEK.js";
13
2
  import {
14
3
  SESSION_IDLE_TIMEOUT_MS,
15
4
  describeIdleWindow,
16
5
  idleDeadlinePassed,
17
6
  startProcessOwnership,
18
7
  withSpawnProcessOwnership
19
- } from "../chunk-4WM7IVVQ.js";
20
- import "../chunk-X7TNLYNZ.js";
21
- import "../chunk-MAB6CGL5.js";
8
+ } from "../chunk-PGHN5D4N.js";
22
9
  import {
23
10
  transcriptsEnabled
24
- } from "../chunk-QRNNIDGY.js";
11
+ } from "../chunk-WBD7HZEZ.js";
25
12
  import {
26
13
  spawnClaude
27
14
  } from "../chunk-XHKBHWLX.js";
15
+ import "../chunk-TJZUQRMH.js";
16
+ import {
17
+ CodexNativeApprovals
18
+ } from "../chunk-SVCT5D7K.js";
19
+ import {
20
+ LiveTranscriptRelay,
21
+ liveSessionSleep,
22
+ postLiveSession,
23
+ postLiveSessionUntilAccepted,
24
+ startLiveSessionHeartbeat
25
+ } from "../chunk-PQAFH4DF.js";
26
+ import {
27
+ resolveProviderBinary
28
+ } from "../chunk-L2ZM7LXN.js";
29
+ import "../chunk-RIVNNBEK.js";
30
+ import "../chunk-75M7NFFC.js";
31
+ import "../chunk-MRQJCIFO.js";
28
32
  import "../chunk-6ICPEJY5.js";
29
- import "../chunk-M7VKFAAK.js";
30
33
  import {
31
- isAskUserResponse,
32
34
  isDecisionStopped,
35
+ withdrawQuestion
36
+ } from "../chunk-5ZSBQHCM.js";
37
+ import "../chunk-M2L7625S.js";
38
+ import {
39
+ isAskUserResponse,
33
40
  isWaitForAnswerResponse,
34
- withdrawQuestion,
35
41
  writeDegraded
36
- } from "../chunk-I7EZMNKI.js";
42
+ } from "../chunk-GOEIW2VH.js";
37
43
  import "../chunk-POFBE6ZY.js";
38
44
  import {
39
45
  callMcpTool,
40
46
  isRetryable
41
- } from "../chunk-AW4TDBUJ.js";
42
- import "../chunk-ZV56INA6.js";
43
- import "../chunk-4UCTKLHY.js";
47
+ } from "../chunk-53UZN7JW.js";
48
+ import "../chunk-TKTS3SIM.js";
49
+ import "../chunk-S2ALW446.js";
44
50
  import {
45
51
  getMachineId
46
- } from "../chunk-QPT4PTUG.js";
52
+ } from "../chunk-WMO2XVG4.js";
47
53
  import "../chunk-7QLSKOSU.js";
48
54
  import "../chunk-KZERVKTD.js";
49
- import "../chunk-ODPULZZG.js";
50
- import "../chunk-EBZK2SJ2.js";
55
+ import "../chunk-4JHEZ2PV.js";
51
56
  import "../chunk-AQFEP65J.js";
52
57
  import {
53
58
  getApiKey,
54
59
  getBaseUrl
55
- } from "../chunk-CHD6IUNM.js";
56
- import "../chunk-DIJ532S7.js";
60
+ } from "../chunk-OWQOMGBF.js";
61
+ import "../chunk-T3KMJI4W.js";
57
62
  import {
58
63
  AGENT_QUESTION_DESCRIPTION_MAX,
59
64
  AGENT_QUESTION_HEADER_MAX,
@@ -68,7 +73,7 @@ import {
68
73
  parseCodexQuestions,
69
74
  planElicitationAsk,
70
75
  readElicitationFields
71
- } from "../chunk-ORLTWJ2O.js";
76
+ } from "../chunk-JNU3LV47.js";
72
77
 
73
78
  // bin/pushary-codex-bridge.ts
74
79
  import { existsSync } from "fs";
@@ -178,6 +183,7 @@ var MAX_MESSAGE_BUFFERS = 16;
178
183
  var JsonRpcClient = class {
179
184
  constructor(command, cwd, timeoutMs, bridgeOptions) {
180
185
  this.bridgeOptions = bridgeOptions;
186
+ this.approvals = new CodexNativeApprovals({ ...bridgeOptions, shared: false, reply: (id, result) => this.write({ id, result }) });
181
187
  this.threadId = bridgeOptions.resumeThreadId ?? null;
182
188
  const options = { cwd, env: { ...process.env, PUSHARY_CODEX_BRIDGE: "1" }, stdio: ["pipe", "pipe", "pipe"] };
183
189
  this.child = process.platform === "win32" ? spawnClaude(command.command, command.args ?? [], options) : spawn(command.command, command.args ?? [], options);
@@ -189,6 +195,7 @@ var JsonRpcClient = class {
189
195
  this.child.once("exit", (code, signal) => this.fail(new Error(this.exitMessage(code, signal))));
190
196
  this.timeoutMs = timeoutMs;
191
197
  }
198
+ approvals;
192
199
  child;
193
200
  pending = /* @__PURE__ */ new Map();
194
201
  notifications = /* @__PURE__ */ new Set();
@@ -239,6 +246,7 @@ var JsonRpcClient = class {
239
246
  });
240
247
  }
241
248
  async close() {
249
+ await this.approvals.close();
242
250
  if (this.closed) return;
243
251
  this.closed = true;
244
252
  for (const request of this.serverRequests.values()) {
@@ -286,6 +294,7 @@ var JsonRpcClient = class {
286
294
  } catch {
287
295
  return;
288
296
  }
297
+ if (this.approvals.handle(message, this.threadId)) return;
289
298
  if (message.id !== void 0 && (message.method === "item/tool/requestUserInput" || message.method === "mcpServer/elicitation/request")) {
290
299
  const id = message.id;
291
300
  const owner = message.method === "item/tool/requestUserInput" ? codexQuestionOwner(message.params ?? {}, id, { machineId: this.bridgeOptions.machineId, generation: this.generation, threadId: this.threadId }) : null;
@@ -365,6 +374,7 @@ var JsonRpcClient = class {
365
374
  }
366
375
  }
367
376
  fail(error) {
377
+ void this.approvals.close();
368
378
  if (this.closed) return;
369
379
  this.closed = true;
370
380
  this.failure = error;