@pushary/agent-hooks 1.2.0 → 1.3.1

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 (85) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/data/SKILL.md +22 -10
  3. package/data/cursor-plugin/skills/pushary/SKILL.md +21 -9
  4. package/data/vscode-plugin/skills/pushary/SKILL.md +21 -9
  5. package/dist/bin/pushary-bell-hook.js +20 -20
  6. package/dist/bin/pushary-bell.js +7 -7
  7. package/dist/bin/pushary-claude.js +20 -20
  8. package/dist/bin/pushary-clean.js +21 -21
  9. package/dist/bin/pushary-codex-bridge.js +11 -11
  10. package/dist/bin/pushary-codex-hook.js +24 -24
  11. package/dist/bin/pushary-codex.js +7 -7
  12. package/dist/bin/pushary-connect.js +7 -7
  13. package/dist/bin/pushary-cowork.js +3 -3
  14. package/dist/bin/pushary-daemon.js +24 -24
  15. package/dist/bin/pushary-disconnect.js +11 -11
  16. package/dist/bin/pushary-doctor.js +35 -22
  17. package/dist/bin/pushary-elicitation-hook.js +19 -19
  18. package/dist/bin/pushary-gemini-bridge.js +10 -10
  19. package/dist/bin/pushary-gemini-hook.js +21 -21
  20. package/dist/bin/pushary-hook.js +30 -40
  21. package/dist/bin/pushary-login.js +8 -8
  22. package/dist/bin/pushary-logout.js +5 -5
  23. package/dist/bin/pushary-mode.js +3 -3
  24. package/dist/bin/pushary-notification-hook.js +22 -22
  25. package/dist/bin/pushary-opencode-hook.js +21 -21
  26. package/dist/bin/pushary-permission-denied-hook.js +26 -26
  27. package/dist/bin/pushary-permission-hook.js +30 -29
  28. package/dist/bin/pushary-post-hook.js +22 -22
  29. package/dist/bin/pushary-prompt-hook.js +22 -22
  30. package/dist/bin/pushary-session-end-hook.js +22 -22
  31. package/dist/bin/pushary-session-start-hook.js +24 -24
  32. package/dist/bin/pushary-setup.js +27 -27
  33. package/dist/bin/pushary-stats.js +2 -2
  34. package/dist/bin/pushary-status.js +11 -11
  35. package/dist/bin/pushary-stop-hook.js +22 -22
  36. package/dist/bin/pushary-stopfailure-hook.js +22 -22
  37. package/dist/bin/pushary-transcript-register.js +18 -18
  38. package/dist/bin/pushary-transcripts.js +6 -6
  39. package/dist/bin/pushary-upgrade.js +15 -15
  40. package/dist/bin/pushary-wait.js +3 -3
  41. package/dist/{chunk-PX53RT6Q.js → chunk-34NNTYK6.js} +1 -1
  42. package/dist/{chunk-7ERWAYVV.js → chunk-35RPUNYU.js} +1 -1
  43. package/dist/{chunk-KZPUARCU.js → chunk-465UENKO.js} +2 -2
  44. package/dist/{chunk-7TDQ7KDY.js → chunk-5SALHATY.js} +2 -2
  45. package/dist/{chunk-7DQVIIHX.js → chunk-5UWDYOZX.js} +33 -6
  46. package/dist/{chunk-ZFQPSGPO.js → chunk-5WLH2ENB.js} +1 -1
  47. package/dist/{chunk-YK3OU4E2.js → chunk-5XKMOZO6.js} +4 -4
  48. package/dist/{chunk-CVCSUAXI.js → chunk-6HH4IH4K.js} +4 -4
  49. package/dist/{chunk-JQJB7BZE.js → chunk-AFKOWCMQ.js} +1 -1
  50. package/dist/{chunk-JOTV75GX.js → chunk-AFOTOA24.js} +1 -1
  51. package/dist/{chunk-6QCN5XQE.js → chunk-CDSL3LLO.js} +1 -1
  52. package/dist/{chunk-4UT44NRP.js → chunk-CKLWJ6EL.js} +10 -2
  53. package/dist/{chunk-VDOKRCWM.js → chunk-EAGMQMRM.js} +1 -1
  54. package/dist/{chunk-WC5PYFDK.js → chunk-FGNABUPN.js} +1 -1
  55. package/dist/{chunk-BXLFUTSD.js → chunk-HCTSTMDD.js} +4 -4
  56. package/dist/{chunk-KODKICKJ.js → chunk-I2OLM3DM.js} +30 -21
  57. package/dist/{chunk-LGO7U23Z.js → chunk-JZA2JOGO.js} +1 -1
  58. package/dist/{chunk-ERP7FOFQ.js → chunk-KHGIM2BN.js} +3 -3
  59. package/dist/{chunk-U42ES5U3.js → chunk-KLZJEMSE.js} +1 -1
  60. package/dist/{chunk-YT6H7BB5.js → chunk-LWT34GSY.js} +20 -13
  61. package/dist/{chunk-VE2ZWUML.js → chunk-NDSOOJDX.js} +1 -1
  62. package/dist/{chunk-2DT7STR5.js → chunk-OMP3KDDU.js} +1 -1
  63. package/dist/{chunk-PCT2MYG5.js → chunk-P232YODQ.js} +8 -8
  64. package/dist/{chunk-7GH3D6YG.js → chunk-PEV6ULSM.js} +3 -3
  65. package/dist/{chunk-CG4ZUQ5O.js → chunk-PHXU4NOP.js} +2 -2
  66. package/dist/{chunk-LAXU5U75.js → chunk-QDYJQLXT.js} +2 -2
  67. package/dist/{chunk-C3WH44MH.js → chunk-QOCWB4Q6.js} +3 -3
  68. package/dist/{chunk-OGSRCIOD.js → chunk-R5CU7ED6.js} +1 -1
  69. package/dist/{chunk-W6XVHP4U.js → chunk-REIZ5GXG.js} +4 -4
  70. package/dist/{chunk-DRAATYTY.js → chunk-RERJ2ZDV.js} +6 -6
  71. package/dist/{chunk-PX54KULQ.js → chunk-SGZE2JBF.js} +3 -3
  72. package/dist/{chunk-YKLCWWEI.js → chunk-SGZJ5LYH.js} +1 -1
  73. package/dist/{chunk-4LL6LG5X.js → chunk-T7E75EKA.js} +4 -3
  74. package/dist/{chunk-VIQ7CCWW.js → chunk-TGG4FWWB.js} +2 -2
  75. package/dist/{chunk-RN6ZWIAC.js → chunk-TW7KA27C.js} +1 -1
  76. package/dist/{chunk-5AATCXJN.js → chunk-WOBHHXW5.js} +4 -4
  77. package/dist/{chunk-KEVJ2WW6.js → chunk-XOUQUZ43.js} +2 -2
  78. package/dist/{chunk-UWP66NDF.js → chunk-XP2KRTZD.js} +1 -1
  79. package/dist/{chunk-LWKVEMVK.js → chunk-XVE52YFZ.js} +1 -1
  80. package/dist/{chunk-KHTBSSY5.js → chunk-YXWM4TNX.js} +1 -1
  81. package/dist/{reapply-47AMVIXN.js → reapply-ADFRVH5N.js} +9 -9
  82. package/dist/src/index.d.ts +2 -2
  83. package/dist/src/index.js +13 -13
  84. package/package.json +1 -1
  85. /package/dist/{chunk-KBITFQST.js → chunk-P32LPT2L.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.1
4
+
5
+ - Keep human-review policies effective inside shell chains, and refuse automatic approval of quoted command substitutions.
6
+ - Check kill switches and standing denials before rejecting unreadable tool targets. Check every file in a patch; ask the agent to split a batch that crosses scope.
7
+ - Preserve symlinked agent configuration files during atomic updates.
8
+ - The installed skill recognizes file-edit capabilities across agents, including Codex patches.
9
+
3
10
  ## 1.2.0
4
11
 
5
12
  Nothing to run. These are the gate's own rules, tightened where they were guessing.
package/data/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pushary
3
- version: 0.10.0
3
+ version: 0.11.1
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 service, $9.99/mo after a 3-day card-first trial.
5
5
  metadata:
6
6
  hermes:
@@ -125,7 +125,7 @@ For example, in a repository with two apps and no test runner in the package:
125
125
  - **Ask at the boundary, not once for each item.** Ask about deleting files. Do not ask about each file.
126
126
  - **The limit of three notifications counts pushes.** Questions you ask in the terminal are free and do not count.
127
127
 
128
- `propose_scope` records the boundary this work produces. Read its section below first. What it can enforce depends on whether this run changes files.
128
+ `propose_scope` records the boundary this work produces. It is a separate decision from notifying: see "When to Propose a Scope" below. What it can enforce depends on whether this run changes files.
129
129
 
130
130
  ## When to Use
131
131
 
@@ -147,17 +147,29 @@ For example, in a repository with two apps and no test runner in the package:
147
147
  - You need a name, path, value, or free-text decision
148
148
  - The options cannot be enumerated in advance
149
149
 
150
- **Propose a scope when:**
151
- - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
152
- - Call `propose_scope` once, before the work, not after
153
- - Skip it for a single quick edit; a scope prompt for one file is just noise
154
- - Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back, and tell the user what it says
155
-
156
150
  **Do NOT notify when:**
157
151
  - The task is trivial or single-step
158
152
  - The question can be answered from context without user input
159
153
  - You already sent 3 notifications for the current task (unless the user explicitly asked for more)
160
154
 
155
+ ## When to Propose a Scope
156
+
157
+ This is a separate decision from notifying. The rules above do not apply to it. A scope is not a notification, and the limit of three does not count it.
158
+
159
+ **Propose a scope when:**
160
+ - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
161
+ - The run touches more than one file, or you cannot name every file before you start
162
+ - Call `propose_scope` once, before the first edit, not after
163
+
164
+ **Do not propose a scope when:**
165
+ - The run changes one file and you already know which one
166
+ - The user named the exact files in this turn, so the boundary is already agreed
167
+ - The run changes no files and records no promise worth keeping
168
+
169
+ "Trivial" here means one file. It does not mean one task. A refactor across modules, a rename through several files, a migration, or wiring one option through the code all need a scope. Each edit can be small and the run still needs a boundary.
170
+
171
+ Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back. Tell the user what it says.
172
+
161
173
  ## Setup
162
174
 
163
175
  **Look at the machine first. Do not guess the install path.** Run these. Each one is read-only and fast. Run them as separate commands.
@@ -436,7 +448,7 @@ Propose the boundary of this run and block until the user agrees to it. Call it
436
448
 
437
449
  The user sees three things: the paths you will change, the paths you promise to leave alone, and your definition of done. The user agrees to all three in one tap.
438
450
 
439
- **Before you call this, look at your own tool list.** If you hold no `Edit`, `Write` or `MultiEdit`, this run changes no files, and a path contract here enforces nothing. Use shape 3 below. This one check decides everything else in this section, and it costs no tool calls.
451
+ **Before you call this, identify the file-editing capabilities you will use.** Native names differ: Codex uses `apply_patch`, VS Code also uses patch and replacement tools, and other agents expose `Edit`, `Write` or `MultiEdit`. These can carry enforceable paths. Use shape 3 only when this run has no file boundary to enforce. Read the returned `enforces` and `hookSeen` fields to confirm what is actually checked; tool names alone do not prove enforcement.
440
452
 
441
453
  **A boundary makes a question. It never makes an approval.** After the user agrees, a rule that already asked still asks. A scope can only turn an automatic approval into a question.
442
454
 
@@ -444,7 +456,7 @@ The user sees three things: the paths you will change, the paths you promise to
444
456
 
445
457
  The gate reads one thing from the contract: the path of a file you are about to change. It compares that path with `allowedPaths` and `offLimitsPaths`.
446
458
 
447
- - **Enforced.** `Edit`, `Write` and `MultiEdit`, and the same calls under other agent names. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
459
+ - **Enforced.** `Edit`, `Write`, `MultiEdit` and supported aliases, including Codex `apply_patch` and VS Code patch/replacement tools. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
448
460
  - **Not enforced.** Shell commands. `Read`. Web requests. Every MCP tool. These carry no file path, so the gate has no path to judge and reads them as inside the scope. The permission policy still governs them.
449
461
  - **`doneWhen` and `promises` are not enforced.** The user reads them. No code checks them.
450
462
 
@@ -118,7 +118,7 @@ For example, in a repository with two apps and no test runner in the package:
118
118
  - **Ask at the boundary, not once for each item.** Ask about deleting files. Do not ask about each file.
119
119
  - **The limit of three notifications counts pushes.** Questions you ask in the terminal are free and do not count.
120
120
 
121
- `propose_scope` records the boundary this work produces. Read its section below first. What it can enforce depends on whether this run changes files.
121
+ `propose_scope` records the boundary this work produces. It is a separate decision from notifying: see "When to Propose a Scope" below. What it can enforce depends on whether this run changes files.
122
122
 
123
123
  ## When to Use
124
124
 
@@ -140,17 +140,29 @@ For example, in a repository with two apps and no test runner in the package:
140
140
  - You need a name, path, value, or free-text decision
141
141
  - The options cannot be enumerated in advance
142
142
 
143
- **Propose a scope when:**
144
- - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
145
- - Call `propose_scope` once, before the work, not after
146
- - Skip it for a single quick edit; a scope prompt for one file is just noise
147
- - Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back, and tell the user what it says
148
-
149
143
  **Do NOT notify when:**
150
144
  - The task is trivial or single-step
151
145
  - The question can be answered from context without user input
152
146
  - You already sent 3 notifications for the current task (unless the user explicitly asked for more)
153
147
 
148
+ ## When to Propose a Scope
149
+
150
+ This is a separate decision from notifying. The rules above do not apply to it. A scope is not a notification, and the limit of three does not count it.
151
+
152
+ **Propose a scope when:**
153
+ - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
154
+ - The run touches more than one file, or you cannot name every file before you start
155
+ - Call `propose_scope` once, before the first edit, not after
156
+
157
+ **Do not propose a scope when:**
158
+ - The run changes one file and you already know which one
159
+ - The user named the exact files in this turn, so the boundary is already agreed
160
+ - The run changes no files and records no promise worth keeping
161
+
162
+ "Trivial" here means one file. It does not mean one task. A refactor across modules, a rename through several files, a migration, or wiring one option through the code all need a scope. Each edit can be small and the run still needs a boundary.
163
+
164
+ Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back. Tell the user what it says.
165
+
154
166
  ## Setup
155
167
 
156
168
  **Look at the machine first. Do not guess the install path.** Run these. Each one is read-only and fast. Run them as separate commands.
@@ -429,7 +441,7 @@ Propose the boundary of this run and block until the user agrees to it. Call it
429
441
 
430
442
  The user sees three things: the paths you will change, the paths you promise to leave alone, and your definition of done. The user agrees to all three in one tap.
431
443
 
432
- **Before you call this, look at your own tool list.** If you hold no `Edit`, `Write` or `MultiEdit`, this run changes no files, and a path contract here enforces nothing. Use shape 3 below. This one check decides everything else in this section, and it costs no tool calls.
444
+ **Before you call this, identify the file-editing capabilities you will use.** Native names differ: Codex uses `apply_patch`, VS Code also uses patch and replacement tools, and other agents expose `Edit`, `Write` or `MultiEdit`. These can carry enforceable paths. Use shape 3 only when this run has no file boundary to enforce. Read the returned `enforces` and `hookSeen` fields to confirm what is actually checked; tool names alone do not prove enforcement.
433
445
 
434
446
  **A boundary makes a question. It never makes an approval.** After the user agrees, a rule that already asked still asks. A scope can only turn an automatic approval into a question.
435
447
 
@@ -437,7 +449,7 @@ The user sees three things: the paths you will change, the paths you promise to
437
449
 
438
450
  The gate reads one thing from the contract: the path of a file you are about to change. It compares that path with `allowedPaths` and `offLimitsPaths`.
439
451
 
440
- - **Enforced.** `Edit`, `Write` and `MultiEdit`, and the same calls under other agent names. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
452
+ - **Enforced.** `Edit`, `Write`, `MultiEdit` and supported aliases, including Codex `apply_patch` and VS Code patch/replacement tools. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
441
453
  - **Not enforced.** Shell commands. `Read`. Web requests. Every MCP tool. These carry no file path, so the gate has no path to judge and reads them as inside the scope. The permission policy still governs them.
442
454
  - **`doneWhen` and `promises` are not enforced.** The user reads them. No code checks them.
443
455
 
@@ -118,7 +118,7 @@ For example, in a repository with two apps and no test runner in the package:
118
118
  - **Ask at the boundary, not once for each item.** Ask about deleting files. Do not ask about each file.
119
119
  - **The limit of three notifications counts pushes.** Questions you ask in the terminal are free and do not count.
120
120
 
121
- `propose_scope` records the boundary this work produces. Read its section below first. What it can enforce depends on whether this run changes files.
121
+ `propose_scope` records the boundary this work produces. It is a separate decision from notifying: see "When to Propose a Scope" below. What it can enforce depends on whether this run changes files.
122
122
 
123
123
  ## When to Use
124
124
 
@@ -140,17 +140,29 @@ For example, in a repository with two apps and no test runner in the package:
140
140
  - You need a name, path, value, or free-text decision
141
141
  - The options cannot be enumerated in advance
142
142
 
143
- **Propose a scope when:**
144
- - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
145
- - Call `propose_scope` once, before the work, not after
146
- - Skip it for a single quick edit; a scope prompt for one file is just noise
147
- - Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back, and tell the user what it says
148
-
149
143
  **Do NOT notify when:**
150
144
  - The task is trivial or single-step
151
145
  - The question can be answered from context without user input
152
146
  - You already sent 3 notifications for the current task (unless the user explicitly asked for more)
153
147
 
148
+ ## When to Propose a Scope
149
+
150
+ This is a separate decision from notifying. The rules above do not apply to it. A scope is not a notification, and the limit of three does not count it.
151
+
152
+ **Propose a scope when:**
153
+ - This run changes files with `Edit`, `Write` or `MultiEdit`, and the file boundary is not yet agreed
154
+ - The run touches more than one file, or you cannot name every file before you start
155
+ - Call `propose_scope` once, before the first edit, not after
156
+
157
+ **Do not propose a scope when:**
158
+ - The run changes one file and you already know which one
159
+ - The user named the exact files in this turn, so the boundary is already agreed
160
+ - The run changes no files and records no promise worth keeping
161
+
162
+ "Trivial" here means one file. It does not mean one task. A refactor across modules, a rename through several files, a migration, or wiring one option through the code all need a scope. Each edit can be small and the run still needs a boundary.
163
+
164
+ Put a boundary that is not a file path in `promises`, never in `allowedPaths`. Read the `enforces` field that comes back. Tell the user what it says.
165
+
154
166
  ## Setup
155
167
 
156
168
  **Look at the machine first. Do not guess the install path.** Run these. Each one is read-only and fast. Run them as separate commands.
@@ -429,7 +441,7 @@ Propose the boundary of this run and block until the user agrees to it. Call it
429
441
 
430
442
  The user sees three things: the paths you will change, the paths you promise to leave alone, and your definition of done. The user agrees to all three in one tap.
431
443
 
432
- **Before you call this, look at your own tool list.** If you hold no `Edit`, `Write` or `MultiEdit`, this run changes no files, and a path contract here enforces nothing. Use shape 3 below. This one check decides everything else in this section, and it costs no tool calls.
444
+ **Before you call this, identify the file-editing capabilities you will use.** Native names differ: Codex uses `apply_patch`, VS Code also uses patch and replacement tools, and other agents expose `Edit`, `Write` or `MultiEdit`. These can carry enforceable paths. Use shape 3 only when this run has no file boundary to enforce. Read the returned `enforces` and `hookSeen` fields to confirm what is actually checked; tool names alone do not prove enforcement.
433
445
 
434
446
  **A boundary makes a question. It never makes an approval.** After the user agrees, a rule that already asked still asks. A scope can only turn an automatic approval into a question.
435
447
 
@@ -437,7 +449,7 @@ The user sees three things: the paths you will change, the paths you promise to
437
449
 
438
450
  The gate reads one thing from the contract: the path of a file you are about to change. It compares that path with `allowedPaths` and `offLimitsPaths`.
439
451
 
440
- - **Enforced.** `Edit`, `Write` and `MultiEdit`, and the same calls under other agent names. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
452
+ - **Enforced.** `Edit`, `Write`, `MultiEdit` and supported aliases, including Codex `apply_patch` and VS Code patch/replacement tools. A file outside the agreed paths stops being auto-approvable and becomes a new question. Approving it widens the scope by that exact path.
441
453
  - **Not enforced.** Shell commands. `Read`. Web requests. Every MCP tool. These carry no file path, so the gate has no path to judge and reads them as inside the scope. The permission policy still governs them.
442
454
  - **`doneWhen` and `promises` are not enforced.** The user reads them. No code checks them.
443
455
 
@@ -1,35 +1,35 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-7ERWAYVV.js";
4
+ } from "../chunk-35RPUNYU.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-4UT44NRP.js";
8
- import "../chunk-PCT2MYG5.js";
9
- import "../chunk-YKLCWWEI.js";
10
- import "../chunk-W6XVHP4U.js";
11
- import "../chunk-WC5PYFDK.js";
12
- import "../chunk-U42ES5U3.js";
13
- import "../chunk-C3WH44MH.js";
14
- import "../chunk-CVCSUAXI.js";
15
- import "../chunk-ERP7FOFQ.js";
16
- import "../chunk-VDOKRCWM.js";
17
- import "../chunk-6QCN5XQE.js";
7
+ } from "../chunk-CKLWJ6EL.js";
8
+ import "../chunk-P232YODQ.js";
9
+ import "../chunk-SGZJ5LYH.js";
10
+ import "../chunk-REIZ5GXG.js";
11
+ import "../chunk-FGNABUPN.js";
12
+ import "../chunk-KLZJEMSE.js";
13
+ import "../chunk-QOCWB4Q6.js";
14
+ import "../chunk-6HH4IH4K.js";
15
+ import "../chunk-KHGIM2BN.js";
16
+ import "../chunk-EAGMQMRM.js";
17
+ import "../chunk-CDSL3LLO.js";
18
18
  import "../chunk-EQRS3SGM.js";
19
- import "../chunk-KHTBSSY5.js";
19
+ import "../chunk-YXWM4TNX.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-UWP66NDF.js";
22
- import "../chunk-KZPUARCU.js";
23
- import "../chunk-PX53RT6Q.js";
21
+ import "../chunk-XP2KRTZD.js";
22
+ import "../chunk-465UENKO.js";
23
+ import "../chunk-34NNTYK6.js";
24
24
  import "../chunk-GMXKITVA.js";
25
25
  import "../chunk-DINDL2CF.js";
26
- import "../chunk-7TDQ7KDY.js";
26
+ import "../chunk-5SALHATY.js";
27
27
  import "../chunk-7QLSKOSU.js";
28
28
  import "../chunk-KZERVKTD.js";
29
- import "../chunk-ZFQPSGPO.js";
30
- import "../chunk-4LL6LG5X.js";
29
+ import "../chunk-5WLH2ENB.js";
30
+ import "../chunk-T7E75EKA.js";
31
31
  import "../chunk-2UMNXADU.js";
32
- import "../chunk-7DQVIIHX.js";
32
+ import "../chunk-5UWDYOZX.js";
33
33
 
34
34
  // bin/pushary-bell-hook.ts
35
35
  var main = async () => {
@@ -5,15 +5,15 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-7ERWAYVV.js";
8
+ } from "../chunk-35RPUNYU.js";
9
9
  import {
10
10
  addBellHooks,
11
11
  bellInstalled,
12
12
  removeBellHooks
13
- } from "../chunk-VDOKRCWM.js";
13
+ } from "../chunk-EAGMQMRM.js";
14
14
  import {
15
15
  claudeSettings
16
- } from "../chunk-PX53RT6Q.js";
16
+ } from "../chunk-34NNTYK6.js";
17
17
  import {
18
18
  createIo
19
19
  } from "../chunk-5RUIFDTP.js";
@@ -25,18 +25,18 @@ import {
25
25
  parseFlags
26
26
  } from "../chunk-GMXKITVA.js";
27
27
  import "../chunk-DINDL2CF.js";
28
- import "../chunk-7TDQ7KDY.js";
28
+ import "../chunk-5SALHATY.js";
29
29
  import "../chunk-7QLSKOSU.js";
30
30
  import {
31
31
  EXIT
32
32
  } from "../chunk-KZERVKTD.js";
33
- import "../chunk-ZFQPSGPO.js";
33
+ import "../chunk-5WLH2ENB.js";
34
34
  import {
35
35
  readJsonSafe,
36
36
  writeJsonAtomic
37
- } from "../chunk-4LL6LG5X.js";
37
+ } from "../chunk-T7E75EKA.js";
38
38
  import "../chunk-2UMNXADU.js";
39
- import "../chunk-7DQVIIHX.js";
39
+ import "../chunk-5UWDYOZX.js";
40
40
 
41
41
  // bin/pushary-bell.ts
42
42
  exitOnHelpFlag("bell");
@@ -8,7 +8,7 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-KEVJ2WW6.js";
11
+ } from "../chunk-XOUQUZ43.js";
12
12
  import {
13
13
  isDeferAnswer
14
14
  } from "../chunk-YHG74UFF.js";
@@ -17,24 +17,24 @@ import {
17
17
  loadSessionKey,
18
18
  registerTranscript,
19
19
  registeredTranscriptEnabled
20
- } from "../chunk-PCT2MYG5.js";
21
- import "../chunk-YKLCWWEI.js";
22
- import "../chunk-W6XVHP4U.js";
23
- import "../chunk-WC5PYFDK.js";
24
- import "../chunk-U42ES5U3.js";
25
- import "../chunk-C3WH44MH.js";
20
+ } from "../chunk-P232YODQ.js";
21
+ import "../chunk-SGZJ5LYH.js";
22
+ import "../chunk-REIZ5GXG.js";
23
+ import "../chunk-FGNABUPN.js";
24
+ import "../chunk-KLZJEMSE.js";
25
+ import "../chunk-QOCWB4Q6.js";
26
26
  import {
27
27
  ensureDaemonRunning
28
- } from "../chunk-CVCSUAXI.js";
29
- import "../chunk-ERP7FOFQ.js";
30
- import "../chunk-VDOKRCWM.js";
28
+ } from "../chunk-6HH4IH4K.js";
29
+ import "../chunk-KHGIM2BN.js";
30
+ import "../chunk-EAGMQMRM.js";
31
31
  import {
32
32
  encryptRecord
33
- } from "../chunk-6QCN5XQE.js";
33
+ } from "../chunk-CDSL3LLO.js";
34
34
  import "../chunk-EQRS3SGM.js";
35
35
  import {
36
36
  transcriptsEnabled
37
- } from "../chunk-KHTBSSY5.js";
37
+ } from "../chunk-YXWM4TNX.js";
38
38
  import {
39
39
  needsShell,
40
40
  spawnClaude
@@ -56,8 +56,8 @@ import {
56
56
  reportEvent,
57
57
  savePendingCommand,
58
58
  scopePathFor
59
- } from "../chunk-5AATCXJN.js";
60
- import "../chunk-UWP66NDF.js";
59
+ } from "../chunk-WOBHHXW5.js";
60
+ import "../chunk-XP2KRTZD.js";
61
61
  import {
62
62
  DECISION_STOP_REASON,
63
63
  askUser,
@@ -70,17 +70,17 @@ import {
70
70
  } from "../chunk-LGXUGYUH.js";
71
71
  import {
72
72
  getMachineId
73
- } from "../chunk-KZPUARCU.js";
74
- import "../chunk-PX53RT6Q.js";
73
+ } from "../chunk-465UENKO.js";
74
+ import "../chunk-34NNTYK6.js";
75
75
  import "../chunk-GMXKITVA.js";
76
76
  import "../chunk-DINDL2CF.js";
77
- import "../chunk-7TDQ7KDY.js";
77
+ import "../chunk-5SALHATY.js";
78
78
  import "../chunk-EYRGBYZG.js";
79
79
  import "../chunk-SAF6HGAA.js";
80
80
  import "../chunk-7QLSKOSU.js";
81
81
  import "../chunk-KZERVKTD.js";
82
- import "../chunk-ZFQPSGPO.js";
83
- import "../chunk-4LL6LG5X.js";
82
+ import "../chunk-5WLH2ENB.js";
83
+ import "../chunk-T7E75EKA.js";
84
84
  import {
85
85
  getApiKey,
86
86
  getBaseUrl
@@ -89,7 +89,7 @@ import {
89
89
  KILL_REASON,
90
90
  redactSecrets,
91
91
  resolveGate
92
- } from "../chunk-7DQVIIHX.js";
92
+ } from "../chunk-5UWDYOZX.js";
93
93
 
94
94
  // src/wrapper/localPassthrough.ts
95
95
  var SIGNAL_NUMBERS = {
@@ -5,14 +5,14 @@ import {
5
5
  createGuards,
6
6
  resolveHermesPython,
7
7
  runHermesPythonScript
8
- } from "../chunk-JOTV75GX.js";
9
- import "../chunk-KBITFQST.js";
8
+ } from "../chunk-AFOTOA24.js";
9
+ import "../chunk-P32LPT2L.js";
10
10
  import {
11
11
  removeInstructionBlock,
12
12
  shortenHome,
13
13
  unregisterPluginLocation,
14
14
  vscodeSettingsTargets
15
- } from "../chunk-7GH3D6YG.js";
15
+ } from "../chunk-PEV6ULSM.js";
16
16
  import {
17
17
  OPENCODE_PLUGIN_SIBLING,
18
18
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -22,7 +22,7 @@ import {
22
22
  openCodePluginDir,
23
23
  openCodePluginFile,
24
24
  removeOpenCodeMcpServer
25
- } from "../chunk-LWKVEMVK.js";
25
+ } from "../chunk-XVE52YFZ.js";
26
26
  import {
27
27
  compatibleConfigFile,
28
28
  compatibleInstructionsFile,
@@ -30,37 +30,37 @@ import {
30
30
  compatiblePermissionRuleFile,
31
31
  removeCompatibleHooks,
32
32
  removeCompatibleMcpServer
33
- } from "../chunk-YT6H7BB5.js";
33
+ } from "../chunk-LWT34GSY.js";
34
34
  import {
35
35
  isClaudeMcpSnapshot,
36
36
  removeClaudeMcpServers,
37
37
  removePusharySettings,
38
38
  removePusharyToolPermissions,
39
39
  restoreClaudeMcpServer
40
- } from "../chunk-PX54KULQ.js";
40
+ } from "../chunk-SGZE2JBF.js";
41
41
  import {
42
42
  hookOwnerOf,
43
43
  isHookTakeoverReceipt,
44
44
  restoreHookTakeover,
45
45
  restoreMcpServer
46
- } from "../chunk-W6XVHP4U.js";
47
- import "../chunk-WC5PYFDK.js";
48
- import "../chunk-U42ES5U3.js";
46
+ } from "../chunk-REIZ5GXG.js";
47
+ import "../chunk-FGNABUPN.js";
48
+ import "../chunk-KLZJEMSE.js";
49
49
  import {
50
50
  pusharyHookExecutable
51
- } from "../chunk-C3WH44MH.js";
51
+ } from "../chunk-QOCWB4Q6.js";
52
52
  import {
53
53
  disableDaemonService
54
- } from "../chunk-CVCSUAXI.js";
54
+ } from "../chunk-6HH4IH4K.js";
55
55
  import {
56
56
  removeGeminiSettings
57
- } from "../chunk-ERP7FOFQ.js";
58
- import "../chunk-VDOKRCWM.js";
57
+ } from "../chunk-KHGIM2BN.js";
58
+ import "../chunk-EAGMQMRM.js";
59
59
  import "../chunk-XHKBHWLX.js";
60
- import "../chunk-5AATCXJN.js";
61
- import "../chunk-UWP66NDF.js";
60
+ import "../chunk-WOBHHXW5.js";
61
+ import "../chunk-XP2KRTZD.js";
62
62
  import "../chunk-LGXUGYUH.js";
63
- import "../chunk-KZPUARCU.js";
63
+ import "../chunk-465UENKO.js";
64
64
  import {
65
65
  bridgeAgentKey,
66
66
  claudeJson,
@@ -89,7 +89,7 @@ import {
89
89
  restoreCodexHookTrust,
90
90
  vscodePluginDir,
91
91
  vscodePluginMcp
92
- } from "../chunk-PX53RT6Q.js";
92
+ } from "../chunk-34NNTYK6.js";
93
93
  import {
94
94
  exitOnHelpFlag
95
95
  } from "../chunk-GOQHN2UH.js";
@@ -100,22 +100,22 @@ import {
100
100
  import "../chunk-DINDL2CF.js";
101
101
  import {
102
102
  removeClaudeAlias
103
- } from "../chunk-7TDQ7KDY.js";
103
+ } from "../chunk-5SALHATY.js";
104
104
  import "../chunk-EYRGBYZG.js";
105
105
  import "../chunk-SAF6HGAA.js";
106
106
  import "../chunk-7QLSKOSU.js";
107
107
  import {
108
108
  EXIT
109
109
  } from "../chunk-KZERVKTD.js";
110
- import "../chunk-ZFQPSGPO.js";
111
- import "../chunk-4LL6LG5X.js";
110
+ import "../chunk-5WLH2ENB.js";
111
+ import "../chunk-T7E75EKA.js";
112
112
  import "../chunk-2UMNXADU.js";
113
113
  import {
114
114
  CURSOR_GATE_EVENTS,
115
115
  HOOK_COMPATIBLE_PROFILES,
116
116
  HOOK_LOCATOR_BINARY,
117
117
  isValidApiKey
118
- } from "../chunk-7DQVIIHX.js";
118
+ } from "../chunk-5UWDYOZX.js";
119
119
 
120
120
  // bin/pushary-clean.ts
121
121
  import { existsSync, readFileSync, copyFileSync, readdirSync } from "fs";
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
- import "../chunk-CG4ZUQ5O.js";
2
+ import "../chunk-PHXU4NOP.js";
3
3
  import {
4
4
  LiveTranscriptRelay,
5
5
  liveSessionSleep,
6
6
  postLiveSession,
7
7
  postLiveSessionUntilAccepted,
8
8
  startLiveSessionHeartbeat
9
- } from "../chunk-OGSRCIOD.js";
9
+ } from "../chunk-R5CU7ED6.js";
10
10
  import {
11
11
  SESSION_IDLE_TIMEOUT_MS,
12
12
  describeIdleWindow,
13
13
  idleDeadlinePassed,
14
14
  startProcessOwnership,
15
15
  withSpawnProcessOwnership
16
- } from "../chunk-KEVJ2WW6.js";
17
- import "../chunk-6QCN5XQE.js";
16
+ } from "../chunk-XOUQUZ43.js";
17
+ import "../chunk-CDSL3LLO.js";
18
18
  import "../chunk-EQRS3SGM.js";
19
19
  import {
20
20
  transcriptsEnabled
21
- } from "../chunk-KHTBSSY5.js";
21
+ } from "../chunk-YXWM4TNX.js";
22
22
  import {
23
23
  spawnClaude
24
24
  } from "../chunk-XHKBHWLX.js";
@@ -28,19 +28,19 @@ import {
28
28
  } from "../chunk-LGXUGYUH.js";
29
29
  import {
30
30
  getMachineId
31
- } from "../chunk-KZPUARCU.js";
31
+ } from "../chunk-465UENKO.js";
32
32
  import {
33
33
  resolveBinary
34
- } from "../chunk-PX53RT6Q.js";
35
- import "../chunk-7TDQ7KDY.js";
34
+ } from "../chunk-34NNTYK6.js";
35
+ import "../chunk-5SALHATY.js";
36
36
  import {
37
37
  callMcpTool
38
38
  } from "../chunk-EYRGBYZG.js";
39
39
  import "../chunk-SAF6HGAA.js";
40
40
  import "../chunk-7QLSKOSU.js";
41
41
  import "../chunk-KZERVKTD.js";
42
- import "../chunk-ZFQPSGPO.js";
43
- import "../chunk-4LL6LG5X.js";
42
+ import "../chunk-5WLH2ENB.js";
43
+ import "../chunk-T7E75EKA.js";
44
44
  import {
45
45
  getApiKey,
46
46
  getBaseUrl
@@ -48,7 +48,7 @@ import {
48
48
  import {
49
49
  parseAgentQuestion,
50
50
  parseAgentQuestionAnswers
51
- } from "../chunk-7DQVIIHX.js";
51
+ } from "../chunk-5UWDYOZX.js";
52
52
 
53
53
  // bin/pushary-codex-bridge.ts
54
54
  import { existsSync } from "fs";