pushary 1.8.0 → 1.8.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.
- package/CHANGELOG.md +4 -0
- package/README.md +27 -19
- package/data/SKILL.md +8 -8
- package/data/cowork/SKILL.md +2 -2
- package/data/cursor-plugin/README.md +2 -2
- package/data/cursor-plugin/scripts/redaction.mjs +4 -2
- package/data/cursor-plugin/skills/pushary/SKILL.md +7 -7
- package/data/vscode-plugin/README.md +4 -4
- package/data/vscode-plugin/scripts/pushary-gate.mjs +2 -2
- package/data/vscode-plugin/scripts/redaction.mjs +4 -2
- package/data/vscode-plugin/skills/pushary/SKILL.md +7 -7
- package/dist/bin/pushary-bell-hook.js +23 -23
- package/dist/bin/pushary-bell.js +9 -9
- package/dist/bin/pushary-claude.js +26 -26
- package/dist/bin/pushary-clean.js +34 -32
- package/dist/bin/pushary-codex-bridge.js +18 -18
- package/dist/bin/pushary-codex-hook.js +31 -31
- package/dist/bin/pushary-codex.js +13 -13
- package/dist/bin/pushary-connect.js +13 -13
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +27 -27
- package/dist/bin/pushary-disconnect.js +18 -18
- package/dist/bin/pushary-doctor.js +37 -37
- package/dist/bin/pushary-elicitation-hook.js +25 -25
- package/dist/bin/pushary-gemini-bridge.js +12 -12
- package/dist/bin/pushary-gemini-hook.js +28 -28
- package/dist/bin/pushary-hook.js +32 -32
- package/dist/bin/pushary-login.js +12 -12
- package/dist/bin/pushary-logout.js +7 -7
- package/dist/bin/pushary-mcp.js +9 -9
- package/dist/bin/pushary-mode.js +9 -9
- package/dist/bin/pushary-notification-hook.js +28 -28
- package/dist/bin/pushary-opencode-hook.js +27 -27
- package/dist/bin/pushary-permission-denied-hook.js +32 -32
- package/dist/bin/pushary-permission-hook.js +31 -31
- package/dist/bin/pushary-post-hook.js +28 -28
- package/dist/bin/pushary-prompt-hook.js +28 -28
- package/dist/bin/pushary-session-end-hook.js +28 -28
- package/dist/bin/pushary-session-start-hook.js +32 -32
- package/dist/bin/pushary-setup.js +39 -39
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +15 -15
- package/dist/bin/pushary-stop-hook.js +28 -28
- package/dist/bin/pushary-stopfailure-hook.js +28 -28
- package/dist/bin/pushary-suggestions.js +4 -4
- package/dist/bin/pushary-transcript-register.js +19 -19
- package/dist/bin/pushary-transcripts.js +7 -7
- package/dist/bin/pushary-upgrade.js +26 -26
- package/dist/bin/pushary-wait.js +9 -9
- package/dist/bin/pushary.js +6 -6
- package/dist/{chunk-2OY3ZZ5N.js → chunk-2SLCHCVN.js} +3 -3
- package/dist/{chunk-E4FJTUH4.js → chunk-35X5UDML.js} +7 -7
- package/dist/{chunk-LXQ5FBBD.js → chunk-4A3UQERT.js} +1 -1
- package/dist/{chunk-CJVVKOSR.js → chunk-5DGNEUXK.js} +2 -2
- package/dist/{chunk-DB3ONZB4.js → chunk-5Y2DY6X4.js} +2 -2
- package/dist/{chunk-NQTHFF4W.js → chunk-5YY3IJT4.js} +21 -19
- package/dist/{chunk-UI36QSBI.js → chunk-64H5IZZD.js} +2 -2
- package/dist/{chunk-JZTHGAPA.js → chunk-6TK4IY3A.js} +8 -8
- package/dist/{chunk-OLQRRFBX.js → chunk-72WOCX22.js} +1 -1
- package/dist/{chunk-JU6W3XAU.js → chunk-7ITOAMCD.js} +1 -1
- package/dist/{chunk-JYG4B33G.js → chunk-7U7ZWUTR.js} +1 -1
- package/dist/{chunk-SIFVFP6T.js → chunk-ASWRMBOM.js} +1 -1
- package/dist/{chunk-HZVVNGEW.js → chunk-CB23AO4D.js} +2 -2
- package/dist/{chunk-D2FX3EPW.js → chunk-CHMOVJ2M.js} +1 -1
- package/dist/{chunk-ZVSKMPBZ.js → chunk-DLEKCAQL.js} +1 -1
- package/dist/{chunk-2ABTSGFT.js → chunk-DVW2MYCM.js} +3 -3
- package/dist/{chunk-TY4JT7W3.js → chunk-DXBS2EL7.js} +1 -1
- package/dist/{chunk-WE2J62NC.js → chunk-EIGJYCOE.js} +5 -5
- package/dist/{chunk-CULUZTWQ.js → chunk-F6NTWZZC.js} +9 -9
- package/dist/{chunk-KGDWDSNL.js → chunk-FLQPM2GQ.js} +2 -2
- package/dist/{chunk-EYK3GSRH.js → chunk-GBNQXYN4.js} +4 -4
- package/dist/{chunk-VQKRG3AC.js → chunk-GH6KGWMC.js} +6 -6
- package/dist/{chunk-KVQBWI5T.js → chunk-HBWC3JVZ.js} +2 -2
- package/dist/{chunk-IPVKH2ST.js → chunk-HMNR7B2F.js} +1 -1
- package/dist/{chunk-OKXS7WDZ.js → chunk-HOEB6AKG.js} +1 -1
- package/dist/{chunk-Q7E4I6UA.js → chunk-HQRCVEI2.js} +13 -10
- package/dist/{chunk-3EVPNIBE.js → chunk-HTEGMMT3.js} +3 -3
- package/dist/{chunk-R7437YI3.js → chunk-HVDMGDYV.js} +2 -2
- package/dist/{chunk-M5ICYGHT.js → chunk-I4HKMUZQ.js} +3 -3
- package/dist/{chunk-M5JDZ45W.js → chunk-INSMZNS7.js} +5 -5
- package/dist/{chunk-AXPCESYO.js → chunk-JRQRNNGA.js} +3 -3
- package/dist/{chunk-CVQYGMSR.js → chunk-KB2FTO4O.js} +4 -4
- package/dist/{chunk-MDEPU45E.js → chunk-LK2S5XIV.js} +6 -6
- package/dist/{chunk-NGDD6TXY.js → chunk-MMVCI6DT.js} +5 -5
- package/dist/{chunk-C2WCPBF7.js → chunk-MYHG7PX2.js} +1 -1
- package/dist/{chunk-7Z7Q4GGS.js → chunk-N6JJJTPH.js} +6 -3
- package/dist/{chunk-EX3GAPA4.js → chunk-NHCUXTEM.js} +1 -1
- package/dist/{chunk-AHV4LNB5.js → chunk-NOLPURUI.js} +1 -1
- package/dist/{chunk-6J2JC2RT.js → chunk-OCVVSRDA.js} +3 -3
- package/dist/{chunk-GPEGOGRJ.js → chunk-ON5JW2HP.js} +1 -1
- package/dist/{chunk-J5TIV3J6.js → chunk-QB6QYZ6B.js} +5 -5
- package/dist/{chunk-SLFABHW3.js → chunk-T55H6YEP.js} +2 -2
- package/dist/{chunk-P7WQEVWA.js → chunk-TJMAXQ5Q.js} +2 -2
- package/dist/{chunk-DE4Y6TCC.js → chunk-TKQ6LZQZ.js} +6 -6
- package/dist/{chunk-SAXBC4AZ.js → chunk-UMMCHS6P.js} +1 -1
- package/dist/{chunk-A2A2YTMG.js → chunk-UPLV5AJF.js} +1 -1
- package/dist/{chunk-MPWXGONV.js → chunk-URNXU3FO.js} +1 -1
- package/dist/{chunk-EPCXUP3P.js → chunk-VFFHQC7W.js} +1 -1
- package/dist/{chunk-HQ6G3B5R.js → chunk-VZMIHERK.js} +2 -2
- package/dist/{chunk-RHR6NARM.js → chunk-W2LJ4O3A.js} +2 -2
- package/dist/{chunk-ZSZSSJCV.js → chunk-ZJYJAD52.js} +1 -1
- package/dist/{reapply-CW3MA66V.js → reapply-ICGTBHVE.js} +9 -9
- package/dist/src/index.js +20 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.8.1
|
|
4
|
+
|
|
5
|
+
- The CLI is now also published as `pushary`, from the same build as `@pushary/agent-hooks`, and the commands it prints now show `npx pushary@latest`. `npx @pushary/agent-hooks@latest` keeps working.
|
|
6
|
+
|
|
3
7
|
## 1.8.0
|
|
4
8
|
|
|
5
9
|
- **An approval you give after auto mode blocks a call is no longer lost when the agent rewords the call.** Your approval covers only the exact call that was blocked. Claude Code tells the agent only that it may retry, and an agent that sent a changed command was blocked again, so the approval you gave from your phone or the Mac notch did nothing. Pushary now refuses the first changed call and tells the agent to send the blocked call again unchanged. If the agent ends its turn without sending it, Pushary tells it to send it.
|
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Pushary
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/pushary)
|
|
4
|
+
[](https://www.npmjs.com/package/pushary)
|
|
5
|
+
[](./LICENSE)
|
|
6
6
|
|
|
7
7
|
Push notifications, questions, and permission approvals for AI agents. Get a push when your agent finishes work, answer its questions from your phone, and approve risky commands before they run. Works with Claude Code, Codex, Cursor, VS Code, OpenCode, Gemini CLI, Hermes, and fx.
|
|
8
8
|
|
|
9
9
|
Your agent froze waiting for a yes. This is how it reaches you.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npx
|
|
12
|
+
npx pushary@latest setup
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
One command wires up the MCP server, the permission hooks, and the agent instruction files. Then you close your laptop and the agent still reaches you.
|
|
@@ -30,7 +30,7 @@ If your agent runs in front of you and you only need to know when it finishes,
|
|
|
30
30
|
you do not need any of the above and you should not pay for it:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npx
|
|
33
|
+
npx pushary@latest bell
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
That is the whole thing. It makes a noise in your terminal and raises a desktop
|
|
@@ -80,7 +80,7 @@ talking. Set `PUSHARY_BELL_QUIET=1` if you would rather it never mentioned it.
|
|
|
80
80
|
Run setup:
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
npx
|
|
83
|
+
npx pushary@latest setup
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
It shows a QR code and short link. Open either in the Pushary app, check that the
|
|
@@ -91,13 +91,13 @@ pairing.
|
|
|
91
91
|
For CI or another non-interactive install, pass an existing key explicitly:
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
npx
|
|
94
|
+
npx pushary@latest setup --key pk_xxx.sk_xxx --skip-phone
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
Verify it worked:
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
|
-
npx
|
|
100
|
+
npx pushary@latest doctor
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
Setup installs this package globally with npm, at the version you ran, because the
|
|
@@ -106,12 +106,20 @@ hooks run from that install. You never install it by hand.
|
|
|
106
106
|
## Remove it
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
npx
|
|
109
|
+
npx pushary@latest clean
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
It removes the hooks, the MCP entries, the stored key and the background service.
|
|
113
113
|
Add `--dry-run` to see what it would remove first.
|
|
114
114
|
|
|
115
|
+
## One package, two names
|
|
116
|
+
|
|
117
|
+
`pushary` and `@pushary/agent-hooks` are the same build, published at the same
|
|
118
|
+
version. Every older command keeps working: `npx @pushary/agent-hooks@latest setup`
|
|
119
|
+
does exactly what `npx pushary@latest setup` does.
|
|
120
|
+
|
|
121
|
+
`pip install pushary` is a different package: the Pushary Python SDK.
|
|
122
|
+
|
|
115
123
|
## Supported agents
|
|
116
124
|
|
|
117
125
|
| Agent | Notify | Ask | Gate |
|
|
@@ -227,19 +235,19 @@ defaults rather than waiting for a keypress that can never arrive.
|
|
|
227
235
|
|
|
228
236
|
```bash
|
|
229
237
|
# Everything detected on this machine, no prompts
|
|
230
|
-
npx
|
|
238
|
+
npx pushary@latest setup --key-stdin --yes --skip-phone < key.txt
|
|
231
239
|
|
|
232
240
|
# Named agents only
|
|
233
|
-
npx
|
|
241
|
+
npx pushary@latest setup --agents claude_code,codex --yes --skip-phone
|
|
234
242
|
|
|
235
243
|
# Store the key and configure nothing
|
|
236
|
-
npx
|
|
244
|
+
npx pushary@latest setup --agents none --yes
|
|
237
245
|
|
|
238
246
|
# Show what would be written, change nothing
|
|
239
|
-
npx
|
|
247
|
+
npx pushary@latest setup --agents auto --dry-run
|
|
240
248
|
|
|
241
249
|
# One machine-readable object on stdout; every human line goes to stderr
|
|
242
|
-
npx
|
|
250
|
+
npx pushary@latest setup --agents auto --yes --json
|
|
243
251
|
```
|
|
244
252
|
|
|
245
253
|
Prefer `--key-stdin` over `--key` in CI: `--key` puts the secret in argv, where
|
|
@@ -252,9 +260,9 @@ that failed), `130` cancelled with Ctrl-C.
|
|
|
252
260
|
Examples:
|
|
253
261
|
|
|
254
262
|
```bash
|
|
255
|
-
npx
|
|
256
|
-
npx
|
|
257
|
-
npx
|
|
263
|
+
npx pushary@latest mode push_only --for 30m
|
|
264
|
+
npx pushary@latest wait 45
|
|
265
|
+
npx pushary@latest clean
|
|
258
266
|
```
|
|
259
267
|
|
|
260
268
|
## Updates
|
|
@@ -266,7 +274,7 @@ already run from, then refreshes each agent's config the way `pushary upgrade` d
|
|
|
266
274
|
The session does not wait for it, and the new version runs from the next hook call.
|
|
267
275
|
|
|
268
276
|
- It stays within the same major version. A new major shows in `pushary doctor`, and
|
|
269
|
-
you move to it with `npx
|
|
277
|
+
you move to it with `npx pushary@latest upgrade`.
|
|
270
278
|
- It only updates a global npm install. A copy run through `npx`, a plugin, or the Mac
|
|
271
279
|
app updates by its own route.
|
|
272
280
|
- It never uses `sudo`. If npm cannot write to the global folder, the attempt is
|
|
@@ -323,7 +331,7 @@ MIT
|
|
|
323
331
|
|
|
324
332
|
## Claude Desktop and Cowork
|
|
325
333
|
|
|
326
|
-
Run `pushary cowork` (or `npx
|
|
334
|
+
Run `pushary cowork` (or `npx pushary@latest cowork`) for connector setup. `pushary setup --agents cowork` opens the same setup path without storing a CLI key or writing hooks. Add the OAuth URL in Claude and sign in with the account used by your Pushary phone/Mac app.
|
|
327
335
|
|
|
328
336
|
Use `pushary cowork --instructions` for standing instructions or `pushary cowork --skill > SKILL.md` to export the bundled skill for upload. `--json` reports `manual_setup_required`; printing a link does not prove a connection. Ask a test question in Claude, answer it in Pushary, and verify Claude receives it.
|
|
329
337
|
|
package/data/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pushary
|
|
3
|
-
version: 0.11.
|
|
3
|
+
version: 0.11.2
|
|
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:
|
|
@@ -203,7 +203,7 @@ into the agent configuration files it wires, not into `~/.pushary/config.json`.
|
|
|
203
203
|
machine the app set up therefore prints `mac-app` and nothing else. Treat it as
|
|
204
204
|
ready.
|
|
205
205
|
|
|
206
|
-
Check it with `npx
|
|
206
|
+
Check it with `npx pushary@latest status --json`. The exit code is the answer:
|
|
207
207
|
|
|
208
208
|
| Code | Meaning |
|
|
209
209
|
| --- | --- |
|
|
@@ -214,7 +214,7 @@ Check it with `npx @pushary/agent-hooks@latest status --json`. The exit code is
|
|
|
214
214
|
| 6 | No device can answer |
|
|
215
215
|
| 8 | Pushary could not be reached |
|
|
216
216
|
|
|
217
|
-
On 6, the user needs to connect a phone: `npx
|
|
217
|
+
On 6, the user needs to connect a phone: `npx pushary@latest connect`. That adds a phone and rewrites no agent configuration.
|
|
218
218
|
|
|
219
219
|
If `mac-app` printed, the Mac app is installed here and it may also own the hooks. Read the hook command to know, because the command is the record:
|
|
220
220
|
|
|
@@ -241,7 +241,7 @@ The command line works on macOS too. Offer it if the user prefers the terminal,
|
|
|
241
241
|
There is no Mac app for these machines. Use the command line. It is fully supported.
|
|
242
242
|
|
|
243
243
|
```bash
|
|
244
|
-
npx
|
|
244
|
+
npx pushary@latest setup
|
|
245
245
|
```
|
|
246
246
|
|
|
247
247
|
Node 20.17+, 22.13+ or 23.5+ is necessary. Then the user needs a phone to answer on:
|
|
@@ -258,7 +258,7 @@ Run `setup`. It reads the key the app signed in with, so it mints no second key,
|
|
|
258
258
|
### What setup does
|
|
259
259
|
|
|
260
260
|
```bash
|
|
261
|
-
npx
|
|
261
|
+
npx pushary@latest setup
|
|
262
262
|
```
|
|
263
263
|
|
|
264
264
|
Setup pairs first and configures MCP, hooks, permissions and the skill only once pairing succeeds. Until someone completes the steps below, nothing is written and this machine has no Pushary. Treat pairing as the task, not as a prompt to wait out.
|
|
@@ -281,7 +281,7 @@ If `PUSHARY_API_KEY` is already in the environment or in an existing MCP config,
|
|
|
281
281
|
No app on their phone yet? They can get it at https://pushary.com/download. Or answer through the browser instead:
|
|
282
282
|
|
|
283
283
|
```bash
|
|
284
|
-
npx
|
|
284
|
+
npx pushary@latest setup --connect browser
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
This is web push, not a login tab. It prints a QR for the user's own subscribe page, and it waits for a browser on that page to subscribe. On iOS the user must first add that page to the Home Screen, because iOS sends web push only from an installed page.
|
|
@@ -291,7 +291,7 @@ Manual MCP configuration also works, but it needs a key, so the user signs up fi
|
|
|
291
291
|
After setup, verify with:
|
|
292
292
|
|
|
293
293
|
```bash
|
|
294
|
-
npx
|
|
294
|
+
npx pushary@latest doctor
|
|
295
295
|
```
|
|
296
296
|
|
|
297
297
|
## Answer surfaces and account boundaries
|
|
@@ -303,7 +303,7 @@ npx @pushary/agent-hooks@latest doctor
|
|
|
303
303
|
| Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
|
|
304
304
|
| Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
|
|
305
305
|
|
|
306
|
-
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx
|
|
306
|
+
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
|
|
307
307
|
|
|
308
308
|
Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
|
|
309
309
|
|
package/data/cowork/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pushary-cowork
|
|
3
|
-
version: 0.4.
|
|
3
|
+
version: 0.4.3
|
|
4
4
|
description: Phone notifications and human-in-the-loop for Claude Cowork through the Pushary connector. Use inside a Cowork session whenever you need a human and nobody is watching the session, 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 task finishes or fails with nobody watching. Also use it when the user says things like ping me on my phone when this is done, ask me before doing anything risky, keep me in the loop while I am away, or notify me if you get stuck. Sends completion alerts, asks questions (yes/no, multiple choice, or free text) via push, and gets answers from connected devices. This Pushary connector is cooperative; it does not install native Cowork permission hooks. Pushary is a hosted service, $9.99/mo after a 3-day card-first trial.
|
|
5
5
|
metadata:
|
|
6
6
|
tags: notifications, push, mcp, human-in-the-loop, cowork, claude, alerts, approvals
|
|
@@ -55,7 +55,7 @@ Delivery is controlled by the user's policy: `push_first` uses presence, `push_o
|
|
|
55
55
|
| Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
|
|
56
56
|
| Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
|
|
57
57
|
|
|
58
|
-
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx
|
|
58
|
+
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest cowork` for connector setup, then ask one harmless test question inside Cowork, answer it from Pushary, and verify Cowork receives the answer. CLI doctor checks do not verify a hosted connector. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
|
|
59
59
|
|
|
60
60
|
Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
|
|
61
61
|
|
|
@@ -35,7 +35,7 @@ Open the Marketplace panel in Cursor, search for Pushary, and click install. The
|
|
|
35
35
|
This also sets up Claude Code, Codex, and Hermes if you use them.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npx
|
|
38
|
+
npx pushary@latest setup
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
### Option 3: Manual MCP
|
|
@@ -94,7 +94,7 @@ Timeout approvals apply only after the configured wait actually elapsed. Short e
|
|
|
94
94
|
|
|
95
95
|
## Development
|
|
96
96
|
|
|
97
|
-
`skills/pushary/SKILL.md` mirrors the Pushary skill that ships with
|
|
97
|
+
`skills/pushary/SKILL.md` mirrors the Pushary skill that ships with the Pushary CLI (`pushary` on npm). Keep the two the same.
|
|
98
98
|
|
|
99
99
|
Test the plugin locally before publishing:
|
|
100
100
|
|
|
@@ -11,12 +11,14 @@ const credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
|
|
|
11
11
|
replacement: '$1$2$3$4[redacted]$2$3',
|
|
12
12
|
});
|
|
13
13
|
const DISPLAYED_SECRET_SHAPES = {
|
|
14
|
+
separator: String.raw `[ \t]`,
|
|
14
15
|
privateKeyBody: String.raw `${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
|
|
15
16
|
urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
|
|
16
17
|
authorizationValue: `${SHELL_INERT_UNIT}+`,
|
|
17
18
|
credentialAssignment: credentialAssignmentRule(DISPLAYED_CREDENTIAL_KEY, `${SHELL_INERT_UNIT}*"`, `${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`, `${SHELL_INERT_UNIT}+`),
|
|
18
19
|
};
|
|
19
20
|
const CUT_OFF_SECRET_SHAPES = {
|
|
21
|
+
separator: String.raw `\s`,
|
|
20
22
|
privateKeyBody: String.raw `[\s\S]*?`,
|
|
21
23
|
urlPassword: String.raw `[^\s@/]+`,
|
|
22
24
|
authorizationValue: String.raw `\S+`,
|
|
@@ -38,8 +40,8 @@ const secretRedactionRules = (shapes) => [
|
|
|
38
40
|
{ pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: '[redacted]' },
|
|
39
41
|
{ pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: '[redacted]' },
|
|
40
42
|
{ pattern: new RegExp(String.raw `\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, 'gi'), replacement: '$1[redacted]@' },
|
|
41
|
-
{ pattern:
|
|
42
|
-
{ pattern: new RegExp(String.raw `\bauthorization
|
|
43
|
+
{ pattern: new RegExp(String.raw `\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, 'gi'), replacement: 'bearer [redacted]' },
|
|
44
|
+
{ pattern: new RegExp(String.raw `\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, 'gi'), replacement: 'authorization: [redacted]' },
|
|
43
45
|
shapes.credentialAssignment,
|
|
44
46
|
];
|
|
45
47
|
export const SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
|
|
@@ -196,7 +196,7 @@ into the agent configuration files it wires, not into `~/.pushary/config.json`.
|
|
|
196
196
|
machine the app set up therefore prints `mac-app` and nothing else. Treat it as
|
|
197
197
|
ready.
|
|
198
198
|
|
|
199
|
-
Check it with `npx
|
|
199
|
+
Check it with `npx pushary@latest status --json`. The exit code is the answer:
|
|
200
200
|
|
|
201
201
|
| Code | Meaning |
|
|
202
202
|
| --- | --- |
|
|
@@ -207,7 +207,7 @@ Check it with `npx @pushary/agent-hooks@latest status --json`. The exit code is
|
|
|
207
207
|
| 6 | No device can answer |
|
|
208
208
|
| 8 | Pushary could not be reached |
|
|
209
209
|
|
|
210
|
-
On 6, the user needs to connect a phone: `npx
|
|
210
|
+
On 6, the user needs to connect a phone: `npx pushary@latest connect`. That adds a phone and rewrites no agent configuration.
|
|
211
211
|
|
|
212
212
|
If `mac-app` printed, the Mac app is installed here and it may also own the hooks. Read the hook command to know, because the command is the record:
|
|
213
213
|
|
|
@@ -234,7 +234,7 @@ The command line works on macOS too. Offer it if the user prefers the terminal,
|
|
|
234
234
|
There is no Mac app for these machines. Use the command line. It is fully supported.
|
|
235
235
|
|
|
236
236
|
```bash
|
|
237
|
-
npx
|
|
237
|
+
npx pushary@latest setup
|
|
238
238
|
```
|
|
239
239
|
|
|
240
240
|
Node 20.17+, 22.13+ or 23.5+ is necessary. Then the user needs a phone to answer on:
|
|
@@ -251,7 +251,7 @@ Run `setup`. It reads the key the app signed in with, so it mints no second key,
|
|
|
251
251
|
### What setup does
|
|
252
252
|
|
|
253
253
|
```bash
|
|
254
|
-
npx
|
|
254
|
+
npx pushary@latest setup
|
|
255
255
|
```
|
|
256
256
|
|
|
257
257
|
Setup pairs first and configures MCP, hooks, permissions and the skill only once pairing succeeds. Until someone completes the steps below, nothing is written and this machine has no Pushary. Treat pairing as the task, not as a prompt to wait out.
|
|
@@ -274,7 +274,7 @@ If `PUSHARY_API_KEY` is already in the environment or in an existing MCP config,
|
|
|
274
274
|
No app on their phone yet? They can get it at https://pushary.com/download. Or answer through the browser instead:
|
|
275
275
|
|
|
276
276
|
```bash
|
|
277
|
-
npx
|
|
277
|
+
npx pushary@latest setup --connect browser
|
|
278
278
|
```
|
|
279
279
|
|
|
280
280
|
This is web push, not a login tab. It prints a QR for the user's own subscribe page, and it waits for a browser on that page to subscribe. On iOS the user must first add that page to the Home Screen, because iOS sends web push only from an installed page.
|
|
@@ -284,7 +284,7 @@ Manual MCP configuration also works, but it needs a key, so the user signs up fi
|
|
|
284
284
|
After setup, verify with:
|
|
285
285
|
|
|
286
286
|
```bash
|
|
287
|
-
npx
|
|
287
|
+
npx pushary@latest doctor
|
|
288
288
|
```
|
|
289
289
|
|
|
290
290
|
## Answer surfaces and account boundaries
|
|
@@ -296,7 +296,7 @@ npx @pushary/agent-hooks@latest doctor
|
|
|
296
296
|
| Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
|
|
297
297
|
| Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
|
|
298
298
|
|
|
299
|
-
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx
|
|
299
|
+
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
|
|
300
300
|
|
|
301
301
|
Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
|
|
302
302
|
|
|
@@ -35,13 +35,13 @@ There are three things.
|
|
|
35
35
|
This installs the plugin, registers it with VS Code, and links your API key. It also sets up Claude Code, Codex, Cursor, and Hermes if you use them.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npx
|
|
38
|
+
npx pushary@latest setup
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
To configure only VS Code:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
npx
|
|
44
|
+
npx pushary@latest setup --agents vscode
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
### Option 2: Install from source
|
|
@@ -106,11 +106,11 @@ This repository uses the `.claude-plugin/plugin.json` layout, which VS Code, Git
|
|
|
106
106
|
|
|
107
107
|
The layout is portable; this plugin is not meant to be. `hooks/hooks.json` uses VS Code's flat hook form, and the gate speaks VS Code's tool names, so treat this as a VS Code plugin that happens to sit in a portable folder shape.
|
|
108
108
|
|
|
109
|
-
Claude Code users are served by `npx
|
|
109
|
+
Claude Code users are served by `npx pushary@latest setup --agents claude_code`, which installs a hook built for Claude Code's own tool names and matcher format. Do not install this directory as a Claude Code plugin as well: at best it duplicates the MCP server, and the two installs would fight over the same approvals.
|
|
110
110
|
|
|
111
111
|
## Development
|
|
112
112
|
|
|
113
|
-
`skills/pushary/SKILL.md` mirrors the Pushary skill that ships with
|
|
113
|
+
`skills/pushary/SKILL.md` mirrors the Pushary skill that ships with the Pushary CLI (`pushary` on npm). Keep the two the same.
|
|
114
114
|
|
|
115
115
|
Test the gate without VS Code:
|
|
116
116
|
|
|
@@ -703,9 +703,9 @@ const main = async () => {
|
|
|
703
703
|
|
|
704
704
|
const apiKey = resolveApiKey()
|
|
705
705
|
if (!apiKey) {
|
|
706
|
-
diag('no API key found (PUSHARY_API_KEY, the plugin .mcp.json, or ~/.pushary/config.json). Run: npx
|
|
706
|
+
diag('no API key found (PUSHARY_API_KEY, the plugin .mcp.json, or ~/.pushary/config.json). Run: npx pushary@latest setup')
|
|
707
707
|
return respond(
|
|
708
|
-
unresolved(input.tool_name, 'Pushary is not configured: run `npx
|
|
708
|
+
unresolved(input.tool_name, 'Pushary is not configured: run `npx pushary@latest setup` (get a key at https://pushary.com) to route this approval to your phone.')
|
|
709
709
|
)
|
|
710
710
|
}
|
|
711
711
|
|
|
@@ -11,12 +11,14 @@ const credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
|
|
|
11
11
|
replacement: '$1$2$3$4[redacted]$2$3',
|
|
12
12
|
});
|
|
13
13
|
const DISPLAYED_SECRET_SHAPES = {
|
|
14
|
+
separator: String.raw `[ \t]`,
|
|
14
15
|
privateKeyBody: String.raw `${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
|
|
15
16
|
urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
|
|
16
17
|
authorizationValue: `${SHELL_INERT_UNIT}+`,
|
|
17
18
|
credentialAssignment: credentialAssignmentRule(DISPLAYED_CREDENTIAL_KEY, `${SHELL_INERT_UNIT}*"`, `${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`, `${SHELL_INERT_UNIT}+`),
|
|
18
19
|
};
|
|
19
20
|
const CUT_OFF_SECRET_SHAPES = {
|
|
21
|
+
separator: String.raw `\s`,
|
|
20
22
|
privateKeyBody: String.raw `[\s\S]*?`,
|
|
21
23
|
urlPassword: String.raw `[^\s@/]+`,
|
|
22
24
|
authorizationValue: String.raw `\S+`,
|
|
@@ -38,8 +40,8 @@ const secretRedactionRules = (shapes) => [
|
|
|
38
40
|
{ pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: '[redacted]' },
|
|
39
41
|
{ pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: '[redacted]' },
|
|
40
42
|
{ pattern: new RegExp(String.raw `\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, 'gi'), replacement: '$1[redacted]@' },
|
|
41
|
-
{ pattern:
|
|
42
|
-
{ pattern: new RegExp(String.raw `\bauthorization
|
|
43
|
+
{ pattern: new RegExp(String.raw `\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, 'gi'), replacement: 'bearer [redacted]' },
|
|
44
|
+
{ pattern: new RegExp(String.raw `\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, 'gi'), replacement: 'authorization: [redacted]' },
|
|
43
45
|
shapes.credentialAssignment,
|
|
44
46
|
];
|
|
45
47
|
export const SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
|
|
@@ -196,7 +196,7 @@ into the agent configuration files it wires, not into `~/.pushary/config.json`.
|
|
|
196
196
|
machine the app set up therefore prints `mac-app` and nothing else. Treat it as
|
|
197
197
|
ready.
|
|
198
198
|
|
|
199
|
-
Check it with `npx
|
|
199
|
+
Check it with `npx pushary@latest status --json`. The exit code is the answer:
|
|
200
200
|
|
|
201
201
|
| Code | Meaning |
|
|
202
202
|
| --- | --- |
|
|
@@ -207,7 +207,7 @@ Check it with `npx @pushary/agent-hooks@latest status --json`. The exit code is
|
|
|
207
207
|
| 6 | No device can answer |
|
|
208
208
|
| 8 | Pushary could not be reached |
|
|
209
209
|
|
|
210
|
-
On 6, the user needs to connect a phone: `npx
|
|
210
|
+
On 6, the user needs to connect a phone: `npx pushary@latest connect`. That adds a phone and rewrites no agent configuration.
|
|
211
211
|
|
|
212
212
|
If `mac-app` printed, the Mac app is installed here and it may also own the hooks. Read the hook command to know, because the command is the record:
|
|
213
213
|
|
|
@@ -234,7 +234,7 @@ The command line works on macOS too. Offer it if the user prefers the terminal,
|
|
|
234
234
|
There is no Mac app for these machines. Use the command line. It is fully supported.
|
|
235
235
|
|
|
236
236
|
```bash
|
|
237
|
-
npx
|
|
237
|
+
npx pushary@latest setup
|
|
238
238
|
```
|
|
239
239
|
|
|
240
240
|
Node 20.17+, 22.13+ or 23.5+ is necessary. Then the user needs a phone to answer on:
|
|
@@ -251,7 +251,7 @@ Run `setup`. It reads the key the app signed in with, so it mints no second key,
|
|
|
251
251
|
### What setup does
|
|
252
252
|
|
|
253
253
|
```bash
|
|
254
|
-
npx
|
|
254
|
+
npx pushary@latest setup
|
|
255
255
|
```
|
|
256
256
|
|
|
257
257
|
Setup pairs first and configures MCP, hooks, permissions and the skill only once pairing succeeds. Until someone completes the steps below, nothing is written and this machine has no Pushary. Treat pairing as the task, not as a prompt to wait out.
|
|
@@ -274,7 +274,7 @@ If `PUSHARY_API_KEY` is already in the environment or in an existing MCP config,
|
|
|
274
274
|
No app on their phone yet? They can get it at https://pushary.com/download. Or answer through the browser instead:
|
|
275
275
|
|
|
276
276
|
```bash
|
|
277
|
-
npx
|
|
277
|
+
npx pushary@latest setup --connect browser
|
|
278
278
|
```
|
|
279
279
|
|
|
280
280
|
This is web push, not a login tab. It prints a QR for the user's own subscribe page, and it waits for a browser on that page to subscribe. On iOS the user must first add that page to the Home Screen, because iOS sends web push only from an installed page.
|
|
@@ -284,7 +284,7 @@ Manual MCP configuration also works, but it needs a key, so the user signs up fi
|
|
|
284
284
|
After setup, verify with:
|
|
285
285
|
|
|
286
286
|
```bash
|
|
287
|
-
npx
|
|
287
|
+
npx pushary@latest doctor
|
|
288
288
|
```
|
|
289
289
|
|
|
290
290
|
## Answer surfaces and account boundaries
|
|
@@ -296,7 +296,7 @@ npx @pushary/agent-hooks@latest doctor
|
|
|
296
296
|
| Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
|
|
297
297
|
| Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
|
|
298
298
|
|
|
299
|
-
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx
|
|
299
|
+
Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
|
|
300
300
|
|
|
301
301
|
Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
|
|
302
302
|
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleBell
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-HMNR7B2F.js";
|
|
5
5
|
import {
|
|
6
6
|
readHookInput
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-FLQPM2GQ.js";
|
|
8
|
+
import "../chunk-6TK4IY3A.js";
|
|
9
9
|
import "../chunk-SGZJ5LYH.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-GBNQXYN4.js";
|
|
11
|
+
import "../chunk-DLEKCAQL.js";
|
|
12
|
+
import "../chunk-MYHG7PX2.js";
|
|
13
|
+
import "../chunk-OCVVSRDA.js";
|
|
14
|
+
import "../chunk-EIGJYCOE.js";
|
|
15
|
+
import "../chunk-HTEGMMT3.js";
|
|
16
|
+
import "../chunk-HOEB6AKG.js";
|
|
17
|
+
import "../chunk-URNXU3FO.js";
|
|
18
|
+
import "../chunk-UMMCHS6P.js";
|
|
19
|
+
import "../chunk-72WOCX22.js";
|
|
20
20
|
import "../chunk-XHKBHWLX.js";
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-VFFHQC7W.js";
|
|
22
|
+
import "../chunk-KB2FTO4O.js";
|
|
23
23
|
import "../chunk-POFBE6ZY.js";
|
|
24
24
|
import "../chunk-GMXKITVA.js";
|
|
25
|
-
import "../chunk-
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-
|
|
25
|
+
import "../chunk-TJMAXQ5Q.js";
|
|
26
|
+
import "../chunk-2SLCHCVN.js";
|
|
27
|
+
import "../chunk-4A3UQERT.js";
|
|
28
28
|
import "../chunk-7QLSKOSU.js";
|
|
29
29
|
import "../chunk-KZERVKTD.js";
|
|
30
|
-
import "../chunk-
|
|
31
|
-
import "../chunk-
|
|
30
|
+
import "../chunk-5Y2DY6X4.js";
|
|
31
|
+
import "../chunk-UPLV5AJF.js";
|
|
32
32
|
import "../chunk-T7E75EKA.js";
|
|
33
|
-
import "../chunk-
|
|
34
|
-
import "../chunk-
|
|
35
|
-
import "../chunk-
|
|
33
|
+
import "../chunk-ON5JW2HP.js";
|
|
34
|
+
import "../chunk-35X5UDML.js";
|
|
35
|
+
import "../chunk-5YY3IJT4.js";
|
|
36
36
|
|
|
37
37
|
// bin/pushary-bell-hook.ts
|
|
38
38
|
var main = async () => {
|
package/dist/bin/pushary-bell.js
CHANGED
|
@@ -5,37 +5,37 @@ import {
|
|
|
5
5
|
liveAgentCount,
|
|
6
6
|
ring,
|
|
7
7
|
upgradeThreshold
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-HMNR7B2F.js";
|
|
9
9
|
import {
|
|
10
10
|
addBellHooks,
|
|
11
11
|
bellInstalled,
|
|
12
12
|
removeBellHooks
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-HOEB6AKG.js";
|
|
14
14
|
import {
|
|
15
15
|
createIo
|
|
16
16
|
} from "../chunk-U4TMAANR.js";
|
|
17
17
|
import {
|
|
18
18
|
exitOnHelpFlag
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-CB23AO4D.js";
|
|
20
20
|
import {
|
|
21
21
|
parseFlags
|
|
22
22
|
} from "../chunk-GMXKITVA.js";
|
|
23
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-TJMAXQ5Q.js";
|
|
24
24
|
import "../chunk-7QLSKOSU.js";
|
|
25
25
|
import {
|
|
26
26
|
EXIT
|
|
27
27
|
} from "../chunk-KZERVKTD.js";
|
|
28
|
-
import "../chunk-
|
|
28
|
+
import "../chunk-5Y2DY6X4.js";
|
|
29
29
|
import {
|
|
30
30
|
claudeSettings
|
|
31
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-UPLV5AJF.js";
|
|
32
32
|
import {
|
|
33
33
|
readJsonSafe,
|
|
34
34
|
writeJsonAtomic
|
|
35
35
|
} from "../chunk-T7E75EKA.js";
|
|
36
|
-
import "../chunk-
|
|
37
|
-
import "../chunk-
|
|
38
|
-
import "../chunk-
|
|
36
|
+
import "../chunk-ON5JW2HP.js";
|
|
37
|
+
import "../chunk-35X5UDML.js";
|
|
38
|
+
import "../chunk-5YY3IJT4.js";
|
|
39
39
|
|
|
40
40
|
// bin/pushary-bell.ts
|
|
41
41
|
exitOnHelpFlag("bell");
|