@pushary/agent-hooks 0.69.0 → 0.71.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 +67 -0
- package/README.md +3 -2
- package/data/cursor-plugin/scripts/pushary-gate.mjs +34 -5
- package/data/vscode-plugin/scripts/pushary-gate.mjs +27 -2
- package/dist/bin/pushary-claude.js +2 -2
- package/dist/bin/pushary-clean.js +2 -2
- package/dist/bin/pushary-codex-hook.js +2 -2
- package/dist/bin/pushary-codex.js +1 -1
- package/dist/bin/pushary-connect.js +6 -4
- package/dist/bin/pushary-daemon.js +3 -3
- package/dist/bin/pushary-doctor.js +8 -29
- package/dist/bin/pushary-gemini-hook.js +2 -2
- package/dist/bin/pushary-hook.js +5 -5
- package/dist/bin/pushary-login.js +2 -2
- package/dist/bin/pushary-logout.js +2 -2
- package/dist/bin/pushary-mode.js +2 -2
- package/dist/bin/pushary-notification-hook.js +1 -1
- package/dist/bin/pushary-permission-denied-hook.js +3 -3
- package/dist/bin/pushary-permission-hook.js +3 -3
- package/dist/bin/pushary-post-hook.js +1 -1
- package/dist/bin/pushary-prompt-hook.js +1 -1
- package/dist/bin/pushary-session-end-hook.js +1 -1
- package/dist/bin/pushary-session-start-hook.js +1 -1
- package/dist/bin/pushary-setup.js +175 -34
- package/dist/bin/pushary-stats.js +2 -2
- package/dist/bin/pushary-status.js +4 -4
- package/dist/bin/pushary-stop-hook.js +1 -1
- package/dist/bin/pushary-stopfailure-hook.js +1 -1
- package/dist/bin/pushary-suggestions.js +2 -2
- package/dist/bin/pushary-upgrade.js +2 -2
- package/dist/bin/pushary-wait.js +2 -2
- package/dist/bin/pushary.js +1 -1
- package/dist/{chunk-JGH37QRB.js → chunk-7OYGFJYZ.js} +1 -1
- package/dist/chunk-B7R4YSAB.js +38 -0
- package/dist/{chunk-ATP6UQPH.js → chunk-BBK3TTU2.js} +1 -1
- package/dist/{chunk-H46LSQRT.js → chunk-FZIQSDTQ.js} +27 -12
- package/dist/{chunk-3USMXNVB.js → chunk-GD275GEX.js} +5 -3
- package/dist/{chunk-C5I2RAMT.js → chunk-HU43EZ5Q.js} +2 -2
- package/dist/{chunk-P7VBAYQO.js → chunk-MGFZXUUR.js} +32 -4
- package/dist/{chunk-YZT2CBC3.js → chunk-NQTRA7H5.js} +1 -1
- package/dist/src/index.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,72 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.71.0
|
|
4
|
+
|
|
5
|
+
### Setting up Codex no longer gets Codex deleted by macOS
|
|
6
|
+
|
|
7
|
+
Setup ran `codex --version` to decide whether your Codex was new enough for
|
|
8
|
+
native hooks. On macOS, executing a binary hands it to XProtect, and current
|
|
9
|
+
definitions false-positive on the Codex CLI: macOS killed it and moved it to the
|
|
10
|
+
Trash. Reading a version number destroyed the tool it was asking, mid-setup, and
|
|
11
|
+
the only thing you saw was "codex was not opened because it contains malware".
|
|
12
|
+
|
|
13
|
+
Setup no longer runs Codex, or any other agent's binary, to learn something about
|
|
14
|
+
it. The version now comes from the package manifest next to the binary, which
|
|
15
|
+
covers npm, bun, pnpm and yarn installs, and from `brew list` for the Homebrew
|
|
16
|
+
cask, which ships no manifest. Same result, nothing launched.
|
|
17
|
+
|
|
18
|
+
If your Codex was already quarantined, reinstall it: `npm install -g @openai/codex`
|
|
19
|
+
or `brew install --cask codex`.
|
|
20
|
+
|
|
21
|
+
## 0.70.0
|
|
22
|
+
|
|
23
|
+
### A key you name is the key you get
|
|
24
|
+
|
|
25
|
+
Passing `--key` with a malformed value did not fail. Setup read it as no key at
|
|
26
|
+
all, went looking elsewhere, and used whichever key it found: one already stored
|
|
27
|
+
on the machine, one in your environment, or a brand new one it created by pairing.
|
|
28
|
+
You named a credential and quietly got a different one. It now stops and says the
|
|
29
|
+
key is not valid.
|
|
30
|
+
|
|
31
|
+
### setup --json no longer stops to ask a question nobody can see
|
|
32
|
+
|
|
33
|
+
Asking for machine-readable output says plainly that no human is watching, but
|
|
34
|
+
setup could still reach an agent-selection prompt. Piped into a script it waited
|
|
35
|
+
for a keypress that was never coming, and the prompt drew itself onto the same
|
|
36
|
+
output a program was trying to read as JSON. It now selects the agents it detects,
|
|
37
|
+
which is exactly what pressing Enter on that prompt would have chosen.
|
|
38
|
+
|
|
39
|
+
`--json` also promises a single object of output, and every failing exit used to
|
|
40
|
+
print nothing at all. A refused key, a cancelled pairing and a crash were
|
|
41
|
+
indistinguishable to anything reading the output. Each now says which it was.
|
|
42
|
+
|
|
43
|
+
### Setup checks its own work
|
|
44
|
+
|
|
45
|
+
An agent installer that finished without an error was reported as configured,
|
|
46
|
+
even if nothing had been written. Doctor would then contradict setup minutes
|
|
47
|
+
later. Setup now confirms the configuration is really there, using the same check
|
|
48
|
+
doctor uses, so the two cannot disagree.
|
|
49
|
+
|
|
50
|
+
### connect points at the fix that matches your situation
|
|
51
|
+
|
|
52
|
+
`pushary connect --app` gave one answer for every way a phone can be out of
|
|
53
|
+
reach: open the app and allow notifications. That is right when the app is signed
|
|
54
|
+
in and the permission was declined, and wrong otherwise. A terminal that was
|
|
55
|
+
never paired needs setup. A phone signed in to a colleague's account needs your
|
|
56
|
+
account, not a permission toggle. It now says which applies, and when it cannot
|
|
57
|
+
tell the two apart it says both rather than sounding certain about the wrong one.
|
|
58
|
+
|
|
59
|
+
### The editor gates say when a proxy is in the way
|
|
60
|
+
|
|
61
|
+
The Cursor and VS Code gates cannot route through a corporate proxy. They still
|
|
62
|
+
hand the decision safely to the editor's own prompt, so nothing is blocked, but
|
|
63
|
+
every approval quietly stopped reaching your phone with no explanation. When a
|
|
64
|
+
proxy is configured they now name it as the likely cause, and on Node 24 or newer
|
|
65
|
+
they name the setting that fixes it.
|
|
66
|
+
|
|
67
|
+
VS Code is also now listed among the supported agents, which it has been since
|
|
68
|
+
its plugin shipped.
|
|
69
|
+
|
|
3
70
|
## 0.69.0
|
|
4
71
|
|
|
5
72
|
### An approval is never granted on a state Pushary could not confirm
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@pushary/agent-hooks)
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
|
|
7
|
-
Push notifications, questions, and permission approvals for AI coding 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, Gemini CLI, and Hermes.
|
|
7
|
+
Push notifications, questions, and permission approvals for AI coding 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, Gemini CLI, and Hermes.
|
|
8
8
|
|
|
9
9
|
Your agent froze waiting for a yes. This is how it reaches you.
|
|
10
10
|
|
|
@@ -53,6 +53,7 @@ npx @pushary/agent-hooks@latest doctor
|
|
|
53
53
|
| Cursor | yes | yes | yes |
|
|
54
54
|
| Gemini CLI | yes | yes | yes |
|
|
55
55
|
| Hermes | yes | yes | yes |
|
|
56
|
+
| VS Code | yes | yes | yes |
|
|
56
57
|
|
|
57
58
|
Any other MCP client can use notify and ask by pointing at the Pushary MCP endpoint directly.
|
|
58
59
|
|
|
@@ -62,7 +63,7 @@ Any other MCP client can use notify and ask by pointing at the Pushary MCP endpo
|
|
|
62
63
|
asserts this list matches it. Do not edit one without the other. -->
|
|
63
64
|
|
|
64
65
|
```
|
|
65
|
-
setup Configure Claude Code, Codex, Gemini CLI, Hermes, or
|
|
66
|
+
setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, or VS Code with Pushary
|
|
66
67
|
claude Run Claude Code through Pushary, reachable from your phone even when idle
|
|
67
68
|
daemon Keep this machine reachable so your phone can START a new session
|
|
68
69
|
status One screen: which key is in force, whether the server accepts it, what can receive an approval
|
|
@@ -271,6 +271,31 @@ const capActionBody = (text) =>
|
|
|
271
271
|
text.length <= ACTION_BODY_MAX ? text : `${text.slice(0, ACTION_BODY_MAX - ACTION_BODY_TRUNCATION_MARKER.length)}${ACTION_BODY_TRUNCATION_MARKER}`
|
|
272
272
|
const deriveActionBody = (command) => capActionBody(redactSecretsDeep(command))
|
|
273
273
|
|
|
274
|
+
// ── network diagnosis ────────────────────────────────────────────────────────
|
|
275
|
+
//
|
|
276
|
+
// This gate is a dependency-free .mjs, so unlike the CLI it cannot install
|
|
277
|
+
// undici's EnvHttpProxyAgent and its fetch ignores HTTP_PROXY entirely. Node
|
|
278
|
+
// gained a native equivalent in 24 (NODE_USE_ENV_PROXY), but that is read at
|
|
279
|
+
// startup, so a script cannot switch it on for itself.
|
|
280
|
+
//
|
|
281
|
+
// The gate already fails safe: any error here hands the decision to the editor's
|
|
282
|
+
// own prompt. The cost is therefore not a blocked command, it is SILENCE. On a
|
|
283
|
+
// corporate network every approval quietly stops reaching the phone and the only
|
|
284
|
+
// trace is one stderr line nobody reads. So when a proxy is configured and the
|
|
285
|
+
// network call fails, say which of those two it is.
|
|
286
|
+
export const PROXY_VARS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy']
|
|
287
|
+
|
|
288
|
+
export const proxyConfigured = (env = process.env) =>
|
|
289
|
+
PROXY_VARS.some(name => (env[name] ?? '').trim() !== '')
|
|
290
|
+
|
|
291
|
+
export const describeNetworkFailure = (error, env = process.env) => {
|
|
292
|
+
const detail = error?.message ?? String(error)
|
|
293
|
+
if (!proxyConfigured(env)) return detail
|
|
294
|
+
const enabled = (env.NODE_USE_ENV_PROXY ?? '').trim() !== ''
|
|
295
|
+
if (enabled) return detail
|
|
296
|
+
return `${detail} (a proxy is set in HTTP_PROXY/HTTPS_PROXY and this hook cannot use it; on Node 24+ set NODE_USE_ENV_PROXY=1 in the editor's environment)`
|
|
297
|
+
}
|
|
298
|
+
|
|
274
299
|
// ── ask / wait ───────────────────────────────────────────────────────────────
|
|
275
300
|
// Redacted, not raw. This is the text a human reads on a lock screen and in
|
|
276
301
|
// Slack, and it used to be the command verbatim: `curl -H "Authorization:
|
|
@@ -447,12 +472,16 @@ const main = async () => {
|
|
|
447
472
|
return respond(await handlePushFirst(apiKey, command, project, ident, tool.pushFirstSeconds))
|
|
448
473
|
}
|
|
449
474
|
} catch (error) {
|
|
450
|
-
process.stderr.write(`[pushary-gate] ${error
|
|
475
|
+
process.stderr.write(`[pushary-gate] ${describeNetworkFailure(error)}\n`)
|
|
451
476
|
return respond(ask())
|
|
452
477
|
}
|
|
453
478
|
}
|
|
454
479
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
480
|
+
// Guarded like the VS Code gate: importing this file to unit-test its pure
|
|
481
|
+
// helpers must not start a hook run that reads stdin and writes a decision.
|
|
482
|
+
if (!process.env.PUSHARY_GATE_IMPORT) {
|
|
483
|
+
main().catch((error) => {
|
|
484
|
+
process.stderr.write(`[pushary-gate] fatal: ${describeNetworkFailure(error)}\n`)
|
|
485
|
+
respond(ask())
|
|
486
|
+
})
|
|
487
|
+
}
|
|
@@ -345,6 +345,31 @@ export const shouldGate = (toolName, toolInput) => {
|
|
|
345
345
|
return command
|
|
346
346
|
}
|
|
347
347
|
|
|
348
|
+
// ── network diagnosis ────────────────────────────────────────────────────────
|
|
349
|
+
//
|
|
350
|
+
// This gate is a dependency-free .mjs, so unlike the CLI it cannot install
|
|
351
|
+
// undici's EnvHttpProxyAgent and its fetch ignores HTTP_PROXY entirely. Node
|
|
352
|
+
// gained a native equivalent in 24 (NODE_USE_ENV_PROXY), but that is read at
|
|
353
|
+
// startup, so a script cannot switch it on for itself.
|
|
354
|
+
//
|
|
355
|
+
// The gate already fails safe: any error here hands the decision to the editor's
|
|
356
|
+
// own prompt. The cost is therefore not a blocked command, it is SILENCE. On a
|
|
357
|
+
// corporate network every approval quietly stops reaching the phone and the only
|
|
358
|
+
// trace is one stderr line nobody reads. So when a proxy is configured and the
|
|
359
|
+
// network call fails, say which of those two it is.
|
|
360
|
+
export const PROXY_VARS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy']
|
|
361
|
+
|
|
362
|
+
export const proxyConfigured = (env = process.env) =>
|
|
363
|
+
PROXY_VARS.some(name => (env[name] ?? '').trim() !== '')
|
|
364
|
+
|
|
365
|
+
export const describeNetworkFailure = (error, env = process.env) => {
|
|
366
|
+
const detail = error?.message ?? String(error)
|
|
367
|
+
if (!proxyConfigured(env)) return detail
|
|
368
|
+
const enabled = (env.NODE_USE_ENV_PROXY ?? '').trim() !== ''
|
|
369
|
+
if (enabled) return detail
|
|
370
|
+
return `${detail} (a proxy is set in HTTP_PROXY/HTTPS_PROXY and this hook cannot use it; on Node 24+ set NODE_USE_ENV_PROXY=1 in the editor's environment)`
|
|
371
|
+
}
|
|
372
|
+
|
|
348
373
|
// ── ask / wait ────────────────────────────────────────────────────────────────
|
|
349
374
|
// Redacted, not raw. This is the text a human reads on a lock screen and in
|
|
350
375
|
// Slack, and it used to be the command verbatim: `curl -H "Authorization:
|
|
@@ -517,7 +542,7 @@ const main = async () => {
|
|
|
517
542
|
return respond(await handlePushFirst(apiKey, command, project, ident, tool.pushFirstSeconds))
|
|
518
543
|
}
|
|
519
544
|
} catch (error) {
|
|
520
|
-
diag(
|
|
545
|
+
diag(describeNetworkFailure(error))
|
|
521
546
|
return respond(ask())
|
|
522
547
|
}
|
|
523
548
|
}
|
|
@@ -525,7 +550,7 @@ const main = async () => {
|
|
|
525
550
|
// Importing this file for its testable helpers must not consume stdin or exit.
|
|
526
551
|
if (!process.env.PUSHARY_GATE_IMPORT) {
|
|
527
552
|
main().catch((error) => {
|
|
528
|
-
diag(`fatal: ${error
|
|
553
|
+
diag(`fatal: ${describeNetworkFailure(error)}`)
|
|
529
554
|
respond(ask())
|
|
530
555
|
})
|
|
531
556
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
KILL_REASON,
|
|
8
8
|
isDeferAnswer,
|
|
9
9
|
resolveGate
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-GD275GEX.js";
|
|
11
11
|
import {
|
|
12
12
|
askUser,
|
|
13
13
|
cancelQuestion,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
reportEvent,
|
|
20
20
|
scopePathFor,
|
|
21
21
|
waitForAnswer
|
|
22
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-FZIQSDTQ.js";
|
|
23
23
|
import "../chunk-BSZYIAZL.js";
|
|
24
24
|
import "../chunk-SAF6HGAA.js";
|
|
25
25
|
import "../chunk-7QLSKOSU.js";
|
|
@@ -41,8 +41,8 @@ import {
|
|
|
41
41
|
} from "../chunk-MUEW424A.js";
|
|
42
42
|
import {
|
|
43
43
|
exitOnHelpFlag
|
|
44
|
-
} from "../chunk-
|
|
45
|
-
import "../chunk-
|
|
44
|
+
} from "../chunk-BBK3TTU2.js";
|
|
45
|
+
import "../chunk-7OYGFJYZ.js";
|
|
46
46
|
import "../chunk-7QLSKOSU.js";
|
|
47
47
|
import "../chunk-DQAN3JQP.js";
|
|
48
48
|
import {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
denyReasonFrom,
|
|
5
5
|
isDeferAnswer,
|
|
6
6
|
resolveGate
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-GD275GEX.js";
|
|
8
8
|
import {
|
|
9
9
|
CODEX_AGENT,
|
|
10
10
|
DEFAULT_SESSION,
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
toPolicyLookup,
|
|
36
36
|
toPolicyLookups,
|
|
37
37
|
waitForAnswer
|
|
38
|
-
} from "../chunk-
|
|
38
|
+
} from "../chunk-FZIQSDTQ.js";
|
|
39
39
|
import {
|
|
40
40
|
isGatingMoment,
|
|
41
41
|
recordKeylessMoment
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
confirmAppConnection,
|
|
7
7
|
connectDevice,
|
|
8
8
|
printConnectInstructions
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-MGFZXUUR.js";
|
|
10
10
|
import "../chunk-3EGEA4KH.js";
|
|
11
11
|
import {
|
|
12
12
|
readKeySource
|
|
@@ -24,8 +24,8 @@ import {
|
|
|
24
24
|
} from "../chunk-GMXKITVA.js";
|
|
25
25
|
import {
|
|
26
26
|
exitOnHelpFlag
|
|
27
|
-
} from "../chunk-
|
|
28
|
-
import "../chunk-
|
|
27
|
+
} from "../chunk-BBK3TTU2.js";
|
|
28
|
+
import "../chunk-7OYGFJYZ.js";
|
|
29
29
|
import "../chunk-BSZYIAZL.js";
|
|
30
30
|
import "../chunk-SAF6HGAA.js";
|
|
31
31
|
import {
|
|
@@ -84,7 +84,9 @@ var main = async () => {
|
|
|
84
84
|
console.log();
|
|
85
85
|
process.exit(EXIT.OK);
|
|
86
86
|
}
|
|
87
|
-
console.log(` ${dim("No device of yours can answer yet.
|
|
87
|
+
console.log(` ${dim("No device of yours can answer yet.")}`);
|
|
88
|
+
for (const line of result.repair ?? []) console.log(` ${dim(line)}`);
|
|
89
|
+
console.log(` ${dim("Then run")} ${cyan("pushary connect")} ${dim("again.")}`);
|
|
88
90
|
console.log();
|
|
89
91
|
process.exit(EXIT.NO_DEVICE);
|
|
90
92
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
HEARTBEAT_INTERVAL_MS,
|
|
4
4
|
sendHeartbeat
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-NQTRA7H5.js";
|
|
6
6
|
import {
|
|
7
7
|
spawnClaude
|
|
8
8
|
} from "../chunk-XHKBHWLX.js";
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from "../chunk-MUEW424A.js";
|
|
12
12
|
import {
|
|
13
13
|
exitOnHelpFlag
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
14
|
+
} from "../chunk-BBK3TTU2.js";
|
|
15
|
+
import "../chunk-7OYGFJYZ.js";
|
|
16
16
|
import {
|
|
17
17
|
getMachineId
|
|
18
18
|
} from "../chunk-RN3NOEJF.js";
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
describeWaitLadder
|
|
4
4
|
} from "../chunk-IIENZE2J.js";
|
|
5
|
+
import {
|
|
6
|
+
claudeWired,
|
|
7
|
+
codexWired,
|
|
8
|
+
geminiWired
|
|
9
|
+
} from "../chunk-B7R4YSAB.js";
|
|
5
10
|
import {
|
|
6
11
|
agentProbes,
|
|
7
12
|
detectAgent,
|
|
@@ -39,7 +44,7 @@ import {
|
|
|
39
44
|
describeReach,
|
|
40
45
|
fetchChannels,
|
|
41
46
|
reachVerdict
|
|
42
|
-
} from "../chunk-
|
|
47
|
+
} from "../chunk-MGFZXUUR.js";
|
|
43
48
|
import "../chunk-3EGEA4KH.js";
|
|
44
49
|
import {
|
|
45
50
|
keyPrefix,
|
|
@@ -62,10 +67,10 @@ import {
|
|
|
62
67
|
} from "../chunk-MUEW424A.js";
|
|
63
68
|
import {
|
|
64
69
|
exitOnHelpFlag
|
|
65
|
-
} from "../chunk-
|
|
70
|
+
} from "../chunk-BBK3TTU2.js";
|
|
66
71
|
import {
|
|
67
72
|
getPackageVersion
|
|
68
|
-
} from "../chunk-
|
|
73
|
+
} from "../chunk-7OYGFJYZ.js";
|
|
69
74
|
import {
|
|
70
75
|
readLedgerSummary
|
|
71
76
|
} from "../chunk-WLGEY4UX.js";
|
|
@@ -149,32 +154,6 @@ var resolveDoctorExit = ({ keyExit, failures }) => {
|
|
|
149
154
|
return EXIT.PROBLEMS_FOUND;
|
|
150
155
|
};
|
|
151
156
|
|
|
152
|
-
// src/diagnostics/wiring.ts
|
|
153
|
-
var record = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
154
|
-
var CLAUDE_HOOK_BINARY = /pushary-[a-z-]*hook/;
|
|
155
|
-
var claudeWired = ({ claudeJson: claudeJson2, settings, skillExists }) => {
|
|
156
|
-
if (record(record(claudeJson2)?.mcpServers)?.pushary) return true;
|
|
157
|
-
const s = record(settings);
|
|
158
|
-
if (s) {
|
|
159
|
-
if (CLAUDE_HOOK_BINARY.test(JSON.stringify(s.hooks ?? {}))) return true;
|
|
160
|
-
const allow = record(s.permissions)?.allow;
|
|
161
|
-
if (Array.isArray(allow) && allow.some((rule) => String(rule).includes("mcp__pushary__"))) return true;
|
|
162
|
-
}
|
|
163
|
-
return skillExists;
|
|
164
|
-
};
|
|
165
|
-
var codexWired = ({ config, hooks, skillExists }) => {
|
|
166
|
-
if (record(record(config)?.mcp_servers)?.pushary) return true;
|
|
167
|
-
const h = record(hooks);
|
|
168
|
-
if (h && hasCodexHooks(h)) return true;
|
|
169
|
-
return skillExists;
|
|
170
|
-
};
|
|
171
|
-
var geminiWired = ({ settings }) => {
|
|
172
|
-
const s = record(settings);
|
|
173
|
-
if (!s) return false;
|
|
174
|
-
if (record(s.mcpServers)?.pushary) return true;
|
|
175
|
-
return hasGeminiHooks(s);
|
|
176
|
-
};
|
|
177
|
-
|
|
178
157
|
// bin/pushary-doctor.ts
|
|
179
158
|
exitOnHelpFlag("doctor");
|
|
180
159
|
var parseDoctorOptions = (argv) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
denyReasonFrom,
|
|
5
5
|
isDeferAnswer,
|
|
6
6
|
resolveGate
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-GD275GEX.js";
|
|
8
8
|
import {
|
|
9
9
|
DEFAULT_SESSION,
|
|
10
10
|
askUser,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
scopePathFor,
|
|
27
27
|
sendNotification,
|
|
28
28
|
waitForAnswer
|
|
29
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-FZIQSDTQ.js";
|
|
30
30
|
import {
|
|
31
31
|
isGatingMoment,
|
|
32
32
|
recordKeylessMoment
|
package/dist/bin/pushary-hook.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handlePreToolUse
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-HU43EZ5Q.js";
|
|
5
5
|
import "../chunk-CAJZAFVS.js";
|
|
6
6
|
import {
|
|
7
7
|
exitOnHelpFlag
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
8
|
+
} from "../chunk-BBK3TTU2.js";
|
|
9
|
+
import "../chunk-7OYGFJYZ.js";
|
|
10
|
+
import "../chunk-GD275GEX.js";
|
|
11
|
+
import "../chunk-FZIQSDTQ.js";
|
|
12
12
|
import "../chunk-WLGEY4UX.js";
|
|
13
13
|
import "../chunk-BSZYIAZL.js";
|
|
14
14
|
import "../chunk-SAF6HGAA.js";
|
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
} from "../chunk-GMXKITVA.js";
|
|
22
22
|
import {
|
|
23
23
|
exitOnHelpFlag
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-BBK3TTU2.js";
|
|
25
25
|
import {
|
|
26
26
|
getPackageVersion
|
|
27
|
-
} from "../chunk-
|
|
27
|
+
} from "../chunk-7OYGFJYZ.js";
|
|
28
28
|
import "../chunk-SAF6HGAA.js";
|
|
29
29
|
import {
|
|
30
30
|
UsageError
|
|
@@ -19,8 +19,8 @@ import {
|
|
|
19
19
|
} from "../chunk-GMXKITVA.js";
|
|
20
20
|
import {
|
|
21
21
|
exitOnHelpFlag
|
|
22
|
-
} from "../chunk-
|
|
23
|
-
import "../chunk-
|
|
22
|
+
} from "../chunk-BBK3TTU2.js";
|
|
23
|
+
import "../chunk-7OYGFJYZ.js";
|
|
24
24
|
import {
|
|
25
25
|
UsageError
|
|
26
26
|
} from "../chunk-7QLSKOSU.js";
|
package/dist/bin/pushary-mode.js
CHANGED
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from "../chunk-GMXKITVA.js";
|
|
12
12
|
import {
|
|
13
13
|
exitOnHelpFlag
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
14
|
+
} from "../chunk-BBK3TTU2.js";
|
|
15
|
+
import "../chunk-7OYGFJYZ.js";
|
|
16
16
|
import "../chunk-SAF6HGAA.js";
|
|
17
17
|
import {
|
|
18
18
|
UsageError
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handlePermissionDenied
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-HU43EZ5Q.js";
|
|
5
5
|
import "../chunk-CAJZAFVS.js";
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-GD275GEX.js";
|
|
7
|
+
import "../chunk-FZIQSDTQ.js";
|
|
8
8
|
import "../chunk-WLGEY4UX.js";
|
|
9
9
|
import "../chunk-BSZYIAZL.js";
|
|
10
10
|
import "../chunk-SAF6HGAA.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handlePermissionRequest
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-HU43EZ5Q.js";
|
|
5
5
|
import "../chunk-CAJZAFVS.js";
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-GD275GEX.js";
|
|
7
|
+
import "../chunk-FZIQSDTQ.js";
|
|
8
8
|
import "../chunk-WLGEY4UX.js";
|
|
9
9
|
import "../chunk-BSZYIAZL.js";
|
|
10
10
|
import "../chunk-SAF6HGAA.js";
|