@pushary/agent-hooks 1.1.0 → 1.3.0
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 +24 -0
- package/data/SKILL.md +20 -8
- package/data/cursor-plugin/skills/pushary/SKILL.md +19 -7
- package/data/vscode-plugin/skills/pushary/SKILL.md +19 -7
- package/dist/bin/pushary-bell-hook.js +18 -18
- package/dist/bin/pushary-bell.js +6 -6
- package/dist/bin/pushary-claude.js +18 -18
- package/dist/bin/pushary-clean.js +19 -19
- package/dist/bin/pushary-codex-bridge.js +10 -10
- package/dist/bin/pushary-codex-hook.js +22 -22
- package/dist/bin/pushary-codex.js +6 -6
- package/dist/bin/pushary-connect.js +6 -6
- package/dist/bin/pushary-cowork.js +3 -3
- package/dist/bin/pushary-daemon.js +22 -22
- package/dist/bin/pushary-disconnect.js +10 -10
- package/dist/bin/pushary-doctor.js +23 -23
- package/dist/bin/pushary-elicitation-hook.js +17 -17
- package/dist/bin/pushary-gemini-bridge.js +9 -9
- package/dist/bin/pushary-gemini-hook.js +19 -19
- package/dist/bin/pushary-hook.js +26 -26
- package/dist/bin/pushary-login.js +7 -7
- package/dist/bin/pushary-logout.js +4 -4
- package/dist/bin/pushary-mode.js +3 -3
- package/dist/bin/pushary-notification-hook.js +20 -20
- package/dist/bin/pushary-opencode-hook.js +19 -19
- package/dist/bin/pushary-permission-denied-hook.js +24 -24
- package/dist/bin/pushary-permission-hook.js +25 -25
- package/dist/bin/pushary-post-hook.js +20 -20
- package/dist/bin/pushary-prompt-hook.js +20 -20
- package/dist/bin/pushary-session-end-hook.js +20 -20
- package/dist/bin/pushary-session-start-hook.js +22 -22
- package/dist/bin/pushary-setup.js +26 -26
- package/dist/bin/pushary-stats.js +2 -2
- package/dist/bin/pushary-status.js +10 -10
- package/dist/bin/pushary-stop-hook.js +20 -20
- package/dist/bin/pushary-stopfailure-hook.js +20 -20
- package/dist/bin/pushary-transcript-register.js +16 -16
- package/dist/bin/pushary-transcripts.js +4 -4
- package/dist/bin/pushary-upgrade.js +14 -14
- package/dist/bin/pushary-wait.js +3 -3
- package/dist/{chunk-SA6UB3GD.js → chunk-2PLEJ7SY.js} +1 -1
- package/dist/{chunk-RZTH4MIY.js → chunk-3AIFWTVB.js} +2 -2
- package/dist/{chunk-MZUXTN7X.js → chunk-4V24U44H.js} +2 -2
- package/dist/{chunk-2MOQUNFL.js → chunk-A2URMNFM.js} +1 -1
- package/dist/{chunk-IH7YUPFN.js → chunk-A5ZWYQFV.js} +3 -3
- package/dist/{chunk-BBUZD7MU.js → chunk-B3S4SF3D.js} +1 -1
- package/dist/{chunk-76ZCJZBK.js → chunk-BL4SQNO6.js} +1 -1
- package/dist/{chunk-SM54HHVY.js → chunk-BNDHXPTQ.js} +21 -14
- package/dist/{chunk-OYYQHJAO.js → chunk-BYGEZI7B.js} +1 -1
- package/dist/{chunk-LUYYB6V2.js → chunk-DON24PNT.js} +1 -1
- package/dist/{chunk-AH5OO2YZ.js → chunk-DVO4SZMJ.js} +3 -3
- package/dist/{chunk-S2BNTXP6.js → chunk-E7WBNGJS.js} +1 -1
- package/dist/{chunk-XIHKSZHL.js → chunk-EJZCV5G4.js} +1 -1
- package/dist/{chunk-FO4HHPMO.js → chunk-EKQAKSGI.js} +1 -1
- package/dist/{chunk-PWIMJP4U.js → chunk-EU6JH7KU.js} +6 -6
- package/dist/{chunk-PQG6NTPT.js → chunk-EYMMU5HC.js} +1 -1
- package/dist/{chunk-PUDQJ772.js → chunk-FGVNU7XD.js} +1 -1
- package/dist/{chunk-INBTKFT6.js → chunk-IAEVVUXO.js} +1 -1
- package/dist/{chunk-SLEWDZOA.js → chunk-JYEGOYQC.js} +1 -1
- package/dist/{chunk-MR2PWE62.js → chunk-K4TAUYUJ.js} +7 -8
- package/dist/{chunk-J7PJALS2.js → chunk-K7UIAE7I.js} +1 -1
- package/dist/{chunk-QACXZYDA.js → chunk-KPNGPRYU.js} +4 -4
- package/dist/{chunk-6JUCFMSF.js → chunk-KS4P6F3R.js} +3 -3
- package/dist/{chunk-ISELLVBP.js → chunk-MU275U5A.js} +1 -1
- package/dist/{chunk-LQ3BHPPZ.js → chunk-N43EQPJK.js} +5 -1
- package/dist/{chunk-YM4G6CFN.js → chunk-OE6U2AXM.js} +3 -3
- package/dist/{chunk-E3WQMDCE.js → chunk-POAFXBNH.js} +1 -1
- package/dist/{chunk-EWQZISYV.js → chunk-RHLUJE4H.js} +1 -1
- package/dist/{chunk-PHJOSAXW.js → chunk-RVDHN2TJ.js} +2 -2
- package/dist/{chunk-EZ3GX3NS.js → chunk-UVXNYYHG.js} +5 -5
- package/dist/{chunk-VQYARC2K.js → chunk-WPJS3OZH.js} +109 -21
- package/dist/{chunk-WTT24AUA.js → chunk-WXXDHGTZ.js} +29 -5
- package/dist/{chunk-DKTFZCLQ.js → chunk-X3KIGNIP.js} +6 -6
- package/dist/{chunk-IPDBFJ2M.js → chunk-XBJW4MV5.js} +1 -1
- package/dist/{chunk-UP7NZXJU.js → chunk-XBO42HKH.js} +1 -1
- package/dist/{chunk-DZYIAMKR.js → chunk-XEXOHUJ6.js} +4 -4
- package/dist/{chunk-VACFOGF3.js → chunk-YF4JDCU4.js} +1 -1
- package/dist/{chunk-6T4OINZB.js → chunk-ZHL62DRA.js} +3 -3
- package/dist/{reapply-STSGYPF2.js → reapply-FUCAKR6Z.js} +8 -8
- package/dist/src/index.js +12 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
Nothing to run. These are the gate's own rules, tightened where they were guessing.
|
|
6
|
+
|
|
7
|
+
- A shell command Pushary cannot read is no longer judged on the loosest rule that fits. A tool whose command arrives under a key we do not recognise used to fall through to a bare `Bash` rule, which is always the permissive one; a path in the same position already refused to be judged. Both now say they have no opinion and let the agent ask you. An agent that names its command differently can declare the key instead of losing the gate.
|
|
8
|
+
- An `--agent` Pushary does not recognise stops the hook rather than turning it into Claude Code. A typo in a registered command used to fetch Claude's policy and file the session under Claude's name. Every hook now stands aside and says why, because acting as the wrong agent is worse than not acting.
|
|
9
|
+
- `pushary doctor` calls your hooks intact only when all of them are. It used to accept any single surviving hook as proof, so a config wiped down to one entry read as healthy.
|
|
10
|
+
- Setup no longer counts its own folder as proof you have an agent installed. The directory it writes the config into was being read back as evidence the vendor was there, so ticking an agent once made it look installed forever. Only the agent's own binary counts now.
|
|
11
|
+
- The slowest call we make to Stripe carries its own deadline. Every Stripe call was bounded at five seconds, which is right for the checkout path and too tight for an invoice preview.
|
|
12
|
+
|
|
13
|
+
## 1.1.0
|
|
14
|
+
|
|
15
|
+
Nothing to run if you are already set up. `pushary setup` writes the new skill;
|
|
16
|
+
so does opening the Mac app, which carries its own copy.
|
|
17
|
+
|
|
18
|
+
- A scope boundary now works for a run that changes no files. `propose_scope` takes `promises`: boundaries that are not paths, such as who you will not email, what you will not spend, and which systems you will not open. They are shown to the approver as "Promised, not checked", recorded in the ledger, and never enforced, because the gate judges a file path and these have none. Saying so is the point: the tool used to return `ratified: true` for a marketing or support run whose contract matched nothing.
|
|
19
|
+
- The tool now reports what it will actually check. `enforces` lists what the contract *contains* that can be checked, and an empty array means nothing in it is. `hookSeen: false` means no hook has ever reported that session id, so the contract is stored under a key the gate will never read. Both were previously invisible: a contract that enforced nothing looked exactly like one that enforced everything.
|
|
20
|
+
- Four glob rules that matched nothing are repaired when they are proposed. `customers`, `docs/`, `**/.env*` and `**/*.test.ts` each validated clean and matched no file. The last two shipped as our own documented examples, so anyone who copied them to protect a root `.env` protected nothing. The missing pattern is added at proposal time rather than by loosening the matcher, which would have widened every contract already live.
|
|
21
|
+
- The approval card is budgeted from the restrictive half outwards. The allow list is the only part that grows, so cutting one joined string at the end dropped the off-limits line, the definition of done and the promises first: exactly the half a person needs in order to say no. Agent-supplied text is flattened to one line, so a promise can no longer forge a row the server wrote.
|
|
22
|
+
- The editor gates carry the scope path again. The Cursor and VS Code gates contained no reference to it, so approving a breach never widened the contract and every further file in the same area asked again. An over-length value is dropped rather than sent, because `ask_user` caps it and a rejected call fails closed.
|
|
23
|
+
- A scope breach says so on the card. A breach judged by the server reached the person as a plain "Allow Edit foo.ts?", with nothing saying a boundary they personally ratified had been crossed.
|
|
24
|
+
- `pushary doctor` names a tool that can take your hooks away. cc-switch replaces `~/.claude/settings.json` wholesale when you switch provider, so Pushary stops firing with no error and nothing to see. Doctor says so while the hooks are still there, and says the mechanism rather than blaming it once they are gone. It diagnoses only: it never rewrites a config because somebody else's software is installed.
|
|
25
|
+
- The installed skill goes to 0.10.0. It breaks a task into steps before asking anything, settles every fork a file or a command can answer, and asks the rest as one numbered round. A question in the terminal is free and a push is not, so the whole round goes to the terminal when you are there and only the blocking one crosses to your phone. Setup now branches on the machine instead of assuming one path.
|
|
26
|
+
|
|
3
27
|
## 1.0.0
|
|
4
28
|
|
|
5
29
|
Run `pushary setup` and tick the agents you use. Five more are on the list: Qwen Code, CodeBuddy, Qoder, Droid and Devin CLI. Nothing changes for an agent you already had wired.
|
package/data/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pushary
|
|
3
|
-
version: 0.
|
|
3
|
+
version: 0.11.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 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.
|
|
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.
|
|
@@ -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.
|
|
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.
|
|
@@ -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.
|
|
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.
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleBell
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-EJZCV5G4.js";
|
|
5
5
|
import {
|
|
6
6
|
readHookInput
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-N43EQPJK.js";
|
|
8
|
+
import "../chunk-EU6JH7KU.js";
|
|
9
9
|
import "../chunk-YKLCWWEI.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-
|
|
10
|
+
import "../chunk-XEXOHUJ6.js";
|
|
11
|
+
import "../chunk-BYGEZI7B.js";
|
|
12
|
+
import "../chunk-JYEGOYQC.js";
|
|
13
|
+
import "../chunk-DVO4SZMJ.js";
|
|
14
|
+
import "../chunk-KS4P6F3R.js";
|
|
15
|
+
import "../chunk-OE6U2AXM.js";
|
|
16
|
+
import "../chunk-2PLEJ7SY.js";
|
|
17
|
+
import "../chunk-B3S4SF3D.js";
|
|
18
18
|
import "../chunk-EQRS3SGM.js";
|
|
19
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-A2URMNFM.js";
|
|
20
20
|
import "../chunk-XHKBHWLX.js";
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-IAEVVUXO.js";
|
|
22
|
+
import "../chunk-K7UIAE7I.js";
|
|
23
|
+
import "../chunk-RHLUJE4H.js";
|
|
24
24
|
import "../chunk-GMXKITVA.js";
|
|
25
25
|
import "../chunk-DINDL2CF.js";
|
|
26
|
-
import "../chunk-
|
|
26
|
+
import "../chunk-XBO42HKH.js";
|
|
27
27
|
import "../chunk-7QLSKOSU.js";
|
|
28
28
|
import "../chunk-KZERVKTD.js";
|
|
29
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-POAFXBNH.js";
|
|
30
30
|
import "../chunk-4LL6LG5X.js";
|
|
31
31
|
import "../chunk-2UMNXADU.js";
|
|
32
|
-
import "../chunk-
|
|
32
|
+
import "../chunk-WPJS3OZH.js";
|
|
33
33
|
|
|
34
34
|
// bin/pushary-bell-hook.ts
|
|
35
35
|
var main = async () => {
|
package/dist/bin/pushary-bell.js
CHANGED
|
@@ -5,15 +5,15 @@ import {
|
|
|
5
5
|
liveAgentCount,
|
|
6
6
|
ring,
|
|
7
7
|
upgradeThreshold
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-EJZCV5G4.js";
|
|
9
9
|
import {
|
|
10
10
|
addBellHooks,
|
|
11
11
|
bellInstalled,
|
|
12
12
|
removeBellHooks
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-2PLEJ7SY.js";
|
|
14
14
|
import {
|
|
15
15
|
claudeSettings
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-RHLUJE4H.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-
|
|
28
|
+
import "../chunk-XBO42HKH.js";
|
|
29
29
|
import "../chunk-7QLSKOSU.js";
|
|
30
30
|
import {
|
|
31
31
|
EXIT
|
|
32
32
|
} from "../chunk-KZERVKTD.js";
|
|
33
|
-
import "../chunk-
|
|
33
|
+
import "../chunk-POAFXBNH.js";
|
|
34
34
|
import {
|
|
35
35
|
readJsonSafe,
|
|
36
36
|
writeJsonAtomic
|
|
37
37
|
} from "../chunk-4LL6LG5X.js";
|
|
38
38
|
import "../chunk-2UMNXADU.js";
|
|
39
|
-
import "../chunk-
|
|
39
|
+
import "../chunk-WPJS3OZH.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-
|
|
11
|
+
} from "../chunk-MU275U5A.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-
|
|
20
|
+
} from "../chunk-EU6JH7KU.js";
|
|
21
21
|
import "../chunk-YKLCWWEI.js";
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
24
|
-
import "../chunk-
|
|
25
|
-
import "../chunk-
|
|
22
|
+
import "../chunk-XEXOHUJ6.js";
|
|
23
|
+
import "../chunk-BYGEZI7B.js";
|
|
24
|
+
import "../chunk-JYEGOYQC.js";
|
|
25
|
+
import "../chunk-DVO4SZMJ.js";
|
|
26
26
|
import {
|
|
27
27
|
ensureDaemonRunning
|
|
28
|
-
} from "../chunk-
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
28
|
+
} from "../chunk-KS4P6F3R.js";
|
|
29
|
+
import "../chunk-OE6U2AXM.js";
|
|
30
|
+
import "../chunk-2PLEJ7SY.js";
|
|
31
31
|
import {
|
|
32
32
|
encryptRecord
|
|
33
|
-
} from "../chunk-
|
|
33
|
+
} from "../chunk-B3S4SF3D.js";
|
|
34
34
|
import "../chunk-EQRS3SGM.js";
|
|
35
35
|
import {
|
|
36
36
|
transcriptsEnabled
|
|
37
|
-
} from "../chunk-
|
|
37
|
+
} from "../chunk-A2URMNFM.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-
|
|
60
|
-
import "../chunk-
|
|
59
|
+
} from "../chunk-WXXDHGTZ.js";
|
|
60
|
+
import "../chunk-IAEVVUXO.js";
|
|
61
61
|
import {
|
|
62
62
|
DECISION_STOP_REASON,
|
|
63
63
|
askUser,
|
|
@@ -70,16 +70,16 @@ import {
|
|
|
70
70
|
} from "../chunk-LGXUGYUH.js";
|
|
71
71
|
import {
|
|
72
72
|
getMachineId
|
|
73
|
-
} from "../chunk-
|
|
74
|
-
import "../chunk-
|
|
73
|
+
} from "../chunk-K7UIAE7I.js";
|
|
74
|
+
import "../chunk-RHLUJE4H.js";
|
|
75
75
|
import "../chunk-GMXKITVA.js";
|
|
76
76
|
import "../chunk-DINDL2CF.js";
|
|
77
|
-
import "../chunk-
|
|
77
|
+
import "../chunk-XBO42HKH.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-
|
|
82
|
+
import "../chunk-POAFXBNH.js";
|
|
83
83
|
import "../chunk-4LL6LG5X.js";
|
|
84
84
|
import {
|
|
85
85
|
getApiKey,
|
|
@@ -89,7 +89,7 @@ import {
|
|
|
89
89
|
KILL_REASON,
|
|
90
90
|
redactSecrets,
|
|
91
91
|
resolveGate
|
|
92
|
-
} from "../chunk-
|
|
92
|
+
} from "../chunk-WPJS3OZH.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-
|
|
8
|
+
} from "../chunk-FGVNU7XD.js";
|
|
9
9
|
import "../chunk-KBITFQST.js";
|
|
10
10
|
import {
|
|
11
11
|
removeInstructionBlock,
|
|
12
12
|
shortenHome,
|
|
13
13
|
unregisterPluginLocation,
|
|
14
14
|
vscodeSettingsTargets
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-K4TAUYUJ.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-
|
|
25
|
+
} from "../chunk-E7WBNGJS.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-
|
|
33
|
+
} from "../chunk-BNDHXPTQ.js";
|
|
34
34
|
import {
|
|
35
35
|
isClaudeMcpSnapshot,
|
|
36
36
|
removeClaudeMcpServers,
|
|
37
37
|
removePusharySettings,
|
|
38
38
|
removePusharyToolPermissions,
|
|
39
39
|
restoreClaudeMcpServer
|
|
40
|
-
} from "../chunk-
|
|
40
|
+
} from "../chunk-ZHL62DRA.js";
|
|
41
41
|
import {
|
|
42
42
|
hookOwnerOf,
|
|
43
43
|
isHookTakeoverReceipt,
|
|
44
44
|
restoreHookTakeover,
|
|
45
45
|
restoreMcpServer
|
|
46
|
-
} from "../chunk-
|
|
47
|
-
import "../chunk-
|
|
48
|
-
import "../chunk-
|
|
46
|
+
} from "../chunk-XEXOHUJ6.js";
|
|
47
|
+
import "../chunk-BYGEZI7B.js";
|
|
48
|
+
import "../chunk-JYEGOYQC.js";
|
|
49
49
|
import {
|
|
50
50
|
pusharyHookExecutable
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-DVO4SZMJ.js";
|
|
52
52
|
import {
|
|
53
53
|
disableDaemonService
|
|
54
|
-
} from "../chunk-
|
|
54
|
+
} from "../chunk-KS4P6F3R.js";
|
|
55
55
|
import {
|
|
56
56
|
removeGeminiSettings
|
|
57
|
-
} from "../chunk-
|
|
58
|
-
import "../chunk-
|
|
57
|
+
} from "../chunk-OE6U2AXM.js";
|
|
58
|
+
import "../chunk-2PLEJ7SY.js";
|
|
59
59
|
import "../chunk-XHKBHWLX.js";
|
|
60
|
-
import "../chunk-
|
|
61
|
-
import "../chunk-
|
|
60
|
+
import "../chunk-WXXDHGTZ.js";
|
|
61
|
+
import "../chunk-IAEVVUXO.js";
|
|
62
62
|
import "../chunk-LGXUGYUH.js";
|
|
63
|
-
import "../chunk-
|
|
63
|
+
import "../chunk-K7UIAE7I.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-
|
|
92
|
+
} from "../chunk-RHLUJE4H.js";
|
|
93
93
|
import {
|
|
94
94
|
exitOnHelpFlag
|
|
95
95
|
} from "../chunk-GOQHN2UH.js";
|
|
@@ -100,14 +100,14 @@ import {
|
|
|
100
100
|
import "../chunk-DINDL2CF.js";
|
|
101
101
|
import {
|
|
102
102
|
removeClaudeAlias
|
|
103
|
-
} from "../chunk-
|
|
103
|
+
} from "../chunk-XBO42HKH.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-
|
|
110
|
+
import "../chunk-POAFXBNH.js";
|
|
111
111
|
import "../chunk-4LL6LG5X.js";
|
|
112
112
|
import "../chunk-2UMNXADU.js";
|
|
113
113
|
import {
|
|
@@ -115,7 +115,7 @@ import {
|
|
|
115
115
|
HOOK_COMPATIBLE_PROFILES,
|
|
116
116
|
HOOK_LOCATOR_BINARY,
|
|
117
117
|
isValidApiKey
|
|
118
|
-
} from "../chunk-
|
|
118
|
+
} from "../chunk-WPJS3OZH.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-
|
|
2
|
+
import "../chunk-4V24U44H.js";
|
|
3
3
|
import {
|
|
4
4
|
LiveTranscriptRelay,
|
|
5
5
|
liveSessionSleep,
|
|
6
6
|
postLiveSession,
|
|
7
7
|
postLiveSessionUntilAccepted,
|
|
8
8
|
startLiveSessionHeartbeat
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-EKQAKSGI.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-
|
|
17
|
-
import "../chunk-
|
|
16
|
+
} from "../chunk-MU275U5A.js";
|
|
17
|
+
import "../chunk-B3S4SF3D.js";
|
|
18
18
|
import "../chunk-EQRS3SGM.js";
|
|
19
19
|
import {
|
|
20
20
|
transcriptsEnabled
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-A2URMNFM.js";
|
|
22
22
|
import {
|
|
23
23
|
spawnClaude
|
|
24
24
|
} from "../chunk-XHKBHWLX.js";
|
|
@@ -28,18 +28,18 @@ import {
|
|
|
28
28
|
} from "../chunk-LGXUGYUH.js";
|
|
29
29
|
import {
|
|
30
30
|
getMachineId
|
|
31
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-K7UIAE7I.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveBinary
|
|
34
|
-
} from "../chunk-
|
|
35
|
-
import "../chunk-
|
|
34
|
+
} from "../chunk-RHLUJE4H.js";
|
|
35
|
+
import "../chunk-XBO42HKH.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-
|
|
42
|
+
import "../chunk-POAFXBNH.js";
|
|
43
43
|
import "../chunk-4LL6LG5X.js";
|
|
44
44
|
import {
|
|
45
45
|
getApiKey,
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
import {
|
|
49
49
|
parseAgentQuestion,
|
|
50
50
|
parseAgentQuestionAnswers
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-WPJS3OZH.js";
|
|
52
52
|
|
|
53
53
|
// bin/pushary-codex-bridge.ts
|
|
54
54
|
import { existsSync } from "fs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
takeHookHoldBudget
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-EYMMU5HC.js";
|
|
5
5
|
import {
|
|
6
6
|
blockedActionFingerprint,
|
|
7
7
|
codexCallKey,
|
|
@@ -12,30 +12,30 @@ import {
|
|
|
12
12
|
recordBlockedActionHint,
|
|
13
13
|
recordCodexCallDecision,
|
|
14
14
|
userScope
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-A5ZWYQFV.js";
|
|
16
16
|
import {
|
|
17
17
|
isGatingMoment,
|
|
18
18
|
recordKeylessMoment
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-YF4JDCU4.js";
|
|
20
20
|
import {
|
|
21
21
|
readHookInput
|
|
22
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-N43EQPJK.js";
|
|
23
23
|
import {
|
|
24
24
|
denyReasonFrom,
|
|
25
25
|
isDeferAnswer
|
|
26
26
|
} from "../chunk-YHG74UFF.js";
|
|
27
|
-
import "../chunk-
|
|
27
|
+
import "../chunk-EU6JH7KU.js";
|
|
28
28
|
import "../chunk-YKLCWWEI.js";
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
31
|
-
import "../chunk-
|
|
32
|
-
import "../chunk-
|
|
33
|
-
import "../chunk-
|
|
34
|
-
import "../chunk-
|
|
35
|
-
import "../chunk-
|
|
36
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-XEXOHUJ6.js";
|
|
30
|
+
import "../chunk-BYGEZI7B.js";
|
|
31
|
+
import "../chunk-JYEGOYQC.js";
|
|
32
|
+
import "../chunk-DVO4SZMJ.js";
|
|
33
|
+
import "../chunk-KS4P6F3R.js";
|
|
34
|
+
import "../chunk-OE6U2AXM.js";
|
|
35
|
+
import "../chunk-2PLEJ7SY.js";
|
|
36
|
+
import "../chunk-B3S4SF3D.js";
|
|
37
37
|
import "../chunk-EQRS3SGM.js";
|
|
38
|
-
import "../chunk-
|
|
38
|
+
import "../chunk-A2URMNFM.js";
|
|
39
39
|
import "../chunk-XHKBHWLX.js";
|
|
40
40
|
import {
|
|
41
41
|
CODEX_AGENT,
|
|
@@ -72,8 +72,8 @@ import {
|
|
|
72
72
|
toCodexWire,
|
|
73
73
|
toPolicyLookup,
|
|
74
74
|
toPolicyLookups
|
|
75
|
-
} from "../chunk-
|
|
76
|
-
import "../chunk-
|
|
75
|
+
} from "../chunk-WXXDHGTZ.js";
|
|
76
|
+
import "../chunk-IAEVVUXO.js";
|
|
77
77
|
import {
|
|
78
78
|
DECISION_STOP_REASON,
|
|
79
79
|
askUser,
|
|
@@ -88,18 +88,18 @@ import {
|
|
|
88
88
|
} from "../chunk-LGXUGYUH.js";
|
|
89
89
|
import {
|
|
90
90
|
getMachineId
|
|
91
|
-
} from "../chunk-
|
|
91
|
+
} from "../chunk-K7UIAE7I.js";
|
|
92
92
|
import {
|
|
93
93
|
canonicalJson
|
|
94
|
-
} from "../chunk-
|
|
94
|
+
} from "../chunk-RHLUJE4H.js";
|
|
95
95
|
import "../chunk-GMXKITVA.js";
|
|
96
96
|
import "../chunk-DINDL2CF.js";
|
|
97
|
-
import "../chunk-
|
|
97
|
+
import "../chunk-XBO42HKH.js";
|
|
98
98
|
import "../chunk-EYRGBYZG.js";
|
|
99
99
|
import "../chunk-SAF6HGAA.js";
|
|
100
100
|
import "../chunk-7QLSKOSU.js";
|
|
101
101
|
import "../chunk-KZERVKTD.js";
|
|
102
|
-
import "../chunk-
|
|
102
|
+
import "../chunk-POAFXBNH.js";
|
|
103
103
|
import {
|
|
104
104
|
writeFileAtomic
|
|
105
105
|
} from "../chunk-4LL6LG5X.js";
|
|
@@ -118,7 +118,7 @@ import {
|
|
|
118
118
|
hookWaitClamped,
|
|
119
119
|
hookWaitDeadline,
|
|
120
120
|
resolveGate
|
|
121
|
-
} from "../chunk-
|
|
121
|
+
} from "../chunk-WPJS3OZH.js";
|
|
122
122
|
|
|
123
123
|
// bin/pushary-codex-hook.ts
|
|
124
124
|
import { basename } from "path";
|
|
@@ -734,7 +734,7 @@ var decidePreToolUse = async (input) => {
|
|
|
734
734
|
};
|
|
735
735
|
var repairCodexHoldsQuietly = async () => {
|
|
736
736
|
try {
|
|
737
|
-
const { repairCodexHolds } = await import("../reapply-
|
|
737
|
+
const { repairCodexHolds } = await import("../reapply-FUCAKR6Z.js");
|
|
738
738
|
repairCodexHolds();
|
|
739
739
|
} catch {
|
|
740
740
|
return;
|