pushary 1.9.23 → 1.9.24
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 +7 -0
- package/data/cursor-plugin/.cursor-plugin/plugin.json +1 -1
- package/data/cursor-plugin/CHANGELOG.md +4 -0
- package/data/cursor-plugin/scripts/pushary-gate.mjs +4 -2
- package/data/cursor-plugin/scripts/pushary-gate.test.mjs +14 -1
- package/dist/bin/pushary-bell-hook.js +25 -25
- package/dist/bin/pushary-bell.js +9 -9
- package/dist/bin/pushary-claude.js +27 -26
- package/dist/bin/pushary-clean.js +41 -93
- package/dist/bin/pushary-codex-bridge.js +17 -17
- package/dist/bin/pushary-codex-hook.js +30 -30
- package/dist/bin/pushary-codex.js +12 -12
- package/dist/bin/pushary-connect.js +24 -24
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +31 -31
- package/dist/bin/pushary-disconnect.js +24 -24
- package/dist/bin/pushary-doctor.js +33 -33
- package/dist/bin/pushary-elicitation-hook.js +25 -25
- package/dist/bin/pushary-gemini-bridge.js +13 -13
- package/dist/bin/pushary-gemini-hook.js +27 -27
- package/dist/bin/pushary-hook.js +29 -29
- package/dist/bin/pushary-login.js +16 -16
- package/dist/bin/pushary-logout.js +77 -26
- package/dist/bin/pushary-mcp.js +9 -9
- package/dist/bin/pushary-mode.js +12 -12
- package/dist/bin/pushary-notification-hook.js +24 -24
- package/dist/bin/pushary-opencode-hook.js +26 -26
- package/dist/bin/pushary-permission-denied-hook.js +29 -29
- package/dist/bin/pushary-permission-hook.js +28 -28
- package/dist/bin/pushary-post-hook.js +24 -24
- package/dist/bin/pushary-prompt-hook.js +24 -24
- package/dist/bin/pushary-session-end-hook.js +24 -24
- package/dist/bin/pushary-session-start-hook.js +28 -28
- package/dist/bin/pushary-setup.js +41 -38
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +26 -26
- package/dist/bin/pushary-stop-hook.js +24 -24
- package/dist/bin/pushary-stopfailure-hook.js +24 -24
- package/dist/bin/pushary-suggestions.js +12 -12
- package/dist/bin/pushary-transcript-register.js +17 -17
- package/dist/bin/pushary-transcripts.js +7 -7
- package/dist/bin/pushary-upgrade.js +30 -30
- package/dist/bin/pushary-wait.js +12 -12
- package/dist/bin/pushary.js +6 -6
- package/dist/{chunk-FIYCICHC.js → chunk-264EOGIK.js} +2 -2
- package/dist/{chunk-XBETSM5T.js → chunk-2E6AWHV7.js} +3 -3
- package/dist/{chunk-YZPFJCFE.js → chunk-2F6UQ3YD.js} +1 -1
- package/dist/{chunk-6GHZAS7S.js → chunk-2JTJZ7VI.js} +4 -4
- package/dist/{chunk-CJTQNUUT.js → chunk-35U2QHH2.js} +2 -2
- package/dist/{chunk-QFNY4KUQ.js → chunk-3WRJU7KN.js} +1 -1
- package/dist/{chunk-HXZG5WHU.js → chunk-7JHYWFY6.js} +2 -2
- package/dist/{chunk-NHBPW6C4.js → chunk-7Z2DLAEE.js} +2 -2
- package/dist/{chunk-FBV2KS3Z.js → chunk-CLVU24OZ.js} +2 -2
- package/dist/{chunk-SLBO7PHS.js → chunk-CYGIJXAP.js} +2 -2
- package/dist/{chunk-M7DCI44L.js → chunk-E4B7TXVS.js} +1 -1
- package/dist/{chunk-S2R2U5W5.js → chunk-EE357RIP.js} +4 -4
- package/dist/{chunk-I46QTKYI.js → chunk-EKPAV33G.js} +5 -5
- package/dist/{chunk-SWQLZQE3.js → chunk-G6GFNKF7.js} +14 -13
- package/dist/{chunk-GN6BJXC7.js → chunk-GBD6G4TA.js} +1 -1
- package/dist/{chunk-OH647UT3.js → chunk-GM2IFDVF.js} +24 -1
- package/dist/{chunk-6HT2TUZD.js → chunk-GXQVOKHJ.js} +2 -2
- package/dist/{chunk-Z4UDB7EC.js → chunk-H2RD5EMR.js} +3 -3
- package/dist/{chunk-SSWK2WYX.js → chunk-HBR6ZZHN.js} +5 -5
- package/dist/{chunk-2AUKCSLQ.js → chunk-HLXGEOX3.js} +4 -4
- package/dist/{chunk-ISAKLEKE.js → chunk-IO5ZDIHY.js} +7 -7
- package/dist/{chunk-EDN4F6GX.js → chunk-IS737HST.js} +1 -1
- package/dist/{chunk-M6R3SZZS.js → chunk-JDWOK6PE.js} +1 -1
- package/dist/{chunk-GYP6DLA4.js → chunk-KT5BH6GC.js} +8 -8
- package/dist/{chunk-7J2AX5T6.js → chunk-KX776UXN.js} +2 -2
- package/dist/chunk-L5MCJNSI.js +166 -0
- package/dist/{chunk-RHIKMNWJ.js → chunk-LHFK5F3T.js} +2 -2
- package/dist/{chunk-K2EYK5RL.js → chunk-LOERK6N3.js} +4 -4
- package/dist/{chunk-R5C3QCVT.js → chunk-NJK4MGXL.js} +1 -1
- package/dist/{chunk-QIODXPTP.js → chunk-NQICO3ES.js} +4 -4
- package/dist/{chunk-ZGYO6OQE.js → chunk-O3RRQTTV.js} +5 -5
- package/dist/{chunk-PFB7P4F3.js → chunk-OLWKCDK4.js} +6 -6
- package/dist/{chunk-A5U62Q6K.js → chunk-OSOCONIE.js} +5 -5
- package/dist/{chunk-OQPEHKH2.js → chunk-OY6NJWDD.js} +1 -1
- package/dist/{chunk-NSCETODW.js → chunk-P447F2RB.js} +1 -1
- package/dist/{chunk-RN5NRRHX.js → chunk-Q7IEFI7V.js} +2 -2
- package/dist/{chunk-LEQRIJ4H.js → chunk-QDKNLNCA.js} +3 -3
- package/dist/{chunk-KJA6IGOZ.js → chunk-RFK2WN6S.js} +1 -1
- package/dist/{chunk-N4DMADJM.js → chunk-RIBIEQHU.js} +1 -1
- package/dist/{chunk-E2LGKG75.js → chunk-RK7TDMQT.js} +3 -3
- package/dist/{chunk-DKBPNHAI.js → chunk-SBQCRQIP.js} +4 -4
- package/dist/{chunk-AXSHPFU3.js → chunk-SH2KK2ED.js} +3 -3
- package/dist/{chunk-OH6OGEOY.js → chunk-T5KM7J75.js} +4 -4
- package/dist/{chunk-73HGV4R6.js → chunk-T6TJA4RF.js} +2 -2
- package/dist/{chunk-AQ3TSQA2.js → chunk-U23XTMBF.js} +21 -8
- package/dist/{chunk-BY5EKA6W.js → chunk-URCSJZNU.js} +3 -3
- package/dist/{chunk-7RGEJOQS.js → chunk-VFIZFKZY.js} +3 -3
- package/dist/{chunk-AFP3HZVK.js → chunk-VICG46JC.js} +1 -1
- package/dist/{chunk-AV5VX7OK.js → chunk-W5NHIA4Y.js} +8 -8
- package/dist/{chunk-JCEUDLGW.js → chunk-WYLA6J43.js} +1 -1
- package/dist/{chunk-YXHVMZPR.js → chunk-XA2RGGNR.js} +4 -4
- package/dist/{chunk-USUI4P63.js → chunk-XQROISQB.js} +2 -2
- package/dist/{chunk-JNKHCGHR.js → chunk-Z5L4NQHC.js} +1 -1
- package/dist/{chunk-4GKQDFH6.js → chunk-ZVON5PCF.js} +5 -5
- package/dist/{global-upgrade-SKY7A3SI.js → global-upgrade-DZGLAARJ.js} +6 -6
- package/dist/{paths-XUUEK7OU.js → paths-JATF66FP.js} +2 -2
- package/dist/{reapply-WQDP26EA.js → reapply-7TDCFXNF.js} +20 -20
- package/dist/src/index.js +19 -19
- package/dist/{upgrade-lock-AYW3TB7X.js → upgrade-lock-LPIDFQEH.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-OYIN77HO.js +0 -72
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.24
|
|
4
|
+
|
|
5
|
+
- Under When I'm out, a call nobody answers is refused for every agent with no approval prompt of its own (Antigravity CLI, Cursor file edits, sessions started from your phone), even when your rule approves on timeout. The 1.9.17 notes said this; only Codex did it. Under Every time a rule that approves on timeout still runs the call after its full wait.
|
|
6
|
+
- After three approvals nobody answered in a session, an Every time call whose rule approves on timeout keeps reaching your phone instead of running at once with nothing shown. Antigravity CLI sessions are no longer paused at all: agy sends nothing that could lift the pause, so every later call was refused until a new conversation.
|
|
7
|
+
- "Allow for this session" is offered for an MCP tool only when its name says it reads, such as `get_issue` or `list_files`. A grant cannot see the arguments of later calls, so a tool such as `query` or `create_issue` asks every time. A session grant already given for such a tool stops applying.
|
|
8
|
+
- `pushary sign-out --revoke` and `pushary clean --everything` revoke only a key this CLI created by browser sign-in or pairing. The Pushary Mac app's key, a key you pasted or passed with `--key`, and a key from an `export PUSHARY_API_KEY` line are removed from this computer and not revoked, because the Mac app or another machine may still use them; the output says so and links to the dashboard to revoke it there. Since 1.9.8 `sign-out --revoke` could revoke the Mac app's own key. A key saved before 1.9.24 has no record of how it was made, so it is removed and not revoked until your next sign-in records one.
|
|
9
|
+
|
|
3
10
|
## 1.9.23
|
|
4
11
|
|
|
5
12
|
- A `printf` whose format has a numeric conversion, such as `%d`, `%x` or `%f`, is no longer approved as a read unless every argument is a plain number. zsh, the default shell on a Mac, evaluates those arguments as arithmetic, and an argument such as `'PWD[$(command)]'` ran the command while Pushary approved it without asking. `printf '%s\n' text`, `printf hello` and `printf '%d\n' 42` are still approved as reads.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "pushary",
|
|
3
3
|
"displayName": "Pushary — Control Panel for AI Agents",
|
|
4
4
|
"description": "Push notifications, human-in-the-loop questions, and permission gating for your AI coding agent. Get a push when a task finishes, answer the agent from your phone, and approve risky commands before they run.",
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.6",
|
|
6
6
|
"author": { "name": "Pushary", "email": "business@pushary.com" },
|
|
7
7
|
"homepage": "https://pushary.com",
|
|
8
8
|
"repository": "https://github.com/Pushary/cursor-plugin",
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.6
|
|
4
|
+
|
|
5
|
+
- Under When I'm out, a file change nobody answers is refused, even when your rule approves on timeout. Cursor's file hooks have no prompt of their own, so the change used to run once the wait ended. Under Every time a rule that approves on timeout still runs the change, as before.
|
|
6
|
+
|
|
3
7
|
## 0.2.5
|
|
4
8
|
|
|
5
9
|
- Under When I'm out, a file change asks your phone every time, also while you are at the keyboard, and waits for your policy's timeout. Cursor's file hooks cannot show a prompt of their own. Before, the change was refused with "Switch to Every time" and nobody was asked, or it was refused after the 10 second push window when you were away. Shell commands and MCP calls keep When I'm out as it was, because Cursor prompts for those itself.
|
|
@@ -37,6 +37,8 @@ const unresolved = (verdict) => genericToolHook && verdict?.reason === 'not_gate
|
|
|
37
37
|
|
|
38
38
|
const approvalModeWithoutLocalPrompt = (mode) => mode === 'push_first' ? 'push_only' : mode
|
|
39
39
|
const deliveryModeForThisHook = (mode) => genericToolHook ? approvalModeWithoutLocalPrompt(mode) : mode
|
|
40
|
+
const timeoutActionWithoutLocalPrompt = ({ mode, timeoutAction }) => mode !== 'push_only' && timeoutAction === 'approve' ? 'deny' : timeoutAction
|
|
41
|
+
const timeoutActionForThisHook = (tool) => genericToolHook ? timeoutActionWithoutLocalPrompt(tool) : tool.timeoutAction
|
|
40
42
|
const localSurfaceHint = () => genericToolHook ? { localSurfaceAvailable: false } : {}
|
|
41
43
|
|
|
42
44
|
let activeQuestion
|
|
@@ -705,7 +707,7 @@ setTimeout(async () => {
|
|
|
705
707
|
case 'notify_only':
|
|
706
708
|
return respond(await handleNotifyOnly(apiKey, request, project, ident))
|
|
707
709
|
case 'push_only':
|
|
708
|
-
return respond(await handlePushOnly(apiKey, request, project, ident, tool.timeoutSeconds, tool
|
|
710
|
+
return respond(await handlePushOnly(apiKey, request, project, ident, tool.timeoutSeconds, timeoutActionForThisHook(tool)))
|
|
709
711
|
case 'push_first':
|
|
710
712
|
default:
|
|
711
713
|
return respond(await handlePushFirst(apiKey, request, project, ident, tool.pushFirstSeconds))
|
|
@@ -718,7 +720,7 @@ setTimeout(async () => {
|
|
|
718
720
|
|
|
719
721
|
// Exported for scripts/pushary-gate.test.mjs. main() only runs when the gate is
|
|
720
722
|
// executed directly, so importing this file for a test does not read stdin.
|
|
721
|
-
export { normalizeRepoRemote, deriveRepoKey, describeRequest, handlePushOnly, handlePushFirst, withdraw, approvalModeWithoutLocalPrompt }
|
|
723
|
+
export { normalizeRepoRemote, deriveRepoKey, describeRequest, handlePushOnly, handlePushFirst, withdraw, approvalModeWithoutLocalPrompt, timeoutActionWithoutLocalPrompt }
|
|
722
724
|
|
|
723
725
|
const isDirectRun = process.argv[1] && import.meta.url === `file://${process.argv[1]}`
|
|
724
726
|
if (!isDirectRun) {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import assert from 'node:assert/strict'
|
|
16
16
|
import { describe, it } from 'node:test'
|
|
17
|
-
import { describeRequest, normalizeRepoRemote, redactSecrets } from './pushary-gate.mjs'
|
|
17
|
+
import { describeRequest, normalizeRepoRemote, redactSecrets, timeoutActionWithoutLocalPrompt } from './pushary-gate.mjs'
|
|
18
18
|
|
|
19
19
|
describe('repo identity', () => {
|
|
20
20
|
it('collapses the forms of one remote', () => {
|
|
@@ -135,3 +135,16 @@ describe('approval text redaction', () => {
|
|
|
135
135
|
assert.equal(redactSecrets('export API_KEY="abc123" && rm -rf build'), 'export API_KEY="[redacted]" && rm -rf build')
|
|
136
136
|
})
|
|
137
137
|
})
|
|
138
|
+
|
|
139
|
+
describe('a rule that approves on timeout, for a file hook with no prompt of its own', () => {
|
|
140
|
+
it('approves only under Every time, and is refused under When I am out', () => {
|
|
141
|
+
assert.equal(timeoutActionWithoutLocalPrompt({ mode: 'push_only', timeoutAction: 'approve' }), 'approve')
|
|
142
|
+
assert.equal(timeoutActionWithoutLocalPrompt({ mode: 'push_first', timeoutAction: 'approve' }), 'deny')
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it('leaves every other timeout action as the rule wrote it', () => {
|
|
146
|
+
for (const timeoutAction of ['deny', 'escalate', 'wait']) {
|
|
147
|
+
assert.equal(timeoutActionWithoutLocalPrompt({ mode: 'push_first', timeoutAction }), timeoutAction)
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
})
|
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleBell
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-2F6UQ3YD.js";
|
|
5
5
|
import {
|
|
6
6
|
readHookInput
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-T5KM7J75.js";
|
|
8
|
+
import "../chunk-W5NHIA4Y.js";
|
|
9
9
|
import "../chunk-VTR4VRL2.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-HBR6ZZHN.js";
|
|
11
|
+
import "../chunk-RIBIEQHU.js";
|
|
12
|
+
import "../chunk-3WRJU7KN.js";
|
|
13
|
+
import "../chunk-JDWOK6PE.js";
|
|
14
14
|
import "../chunk-XHKBHWLX.js";
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
15
|
+
import "../chunk-LOERK6N3.js";
|
|
16
|
+
import "../chunk-OSOCONIE.js";
|
|
17
|
+
import "../chunk-VFIZFKZY.js";
|
|
18
|
+
import "../chunk-NJK4MGXL.js";
|
|
19
|
+
import "../chunk-VICG46JC.js";
|
|
20
20
|
import "../chunk-GMXKITVA.js";
|
|
21
21
|
import "../chunk-6ICPEJY5.js";
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
24
|
-
import "../chunk-
|
|
25
|
-
import "../chunk-
|
|
22
|
+
import "../chunk-U23XTMBF.js";
|
|
23
|
+
import "../chunk-KT5BH6GC.js";
|
|
24
|
+
import "../chunk-RFK2WN6S.js";
|
|
25
|
+
import "../chunk-ZVON5PCF.js";
|
|
26
26
|
import "../chunk-POFBE6ZY.js";
|
|
27
|
-
import "../chunk-
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
27
|
+
import "../chunk-RK7TDMQT.js";
|
|
28
|
+
import "../chunk-H2RD5EMR.js";
|
|
29
|
+
import "../chunk-2E6AWHV7.js";
|
|
30
|
+
import "../chunk-IS737HST.js";
|
|
31
31
|
import "../chunk-7QLSKOSU.js";
|
|
32
32
|
import "../chunk-KZERVKTD.js";
|
|
33
|
-
import "../chunk-
|
|
34
|
-
import "../chunk-
|
|
33
|
+
import "../chunk-GXQVOKHJ.js";
|
|
34
|
+
import "../chunk-NQICO3ES.js";
|
|
35
35
|
import "../chunk-AQFEP65J.js";
|
|
36
|
-
import "../chunk-
|
|
37
|
-
import "../chunk-
|
|
38
|
-
import "../chunk-
|
|
36
|
+
import "../chunk-OY6NJWDD.js";
|
|
37
|
+
import "../chunk-QDKNLNCA.js";
|
|
38
|
+
import "../chunk-GM2IFDVF.js";
|
|
39
39
|
|
|
40
40
|
// bin/pushary-bell-hook.ts
|
|
41
41
|
var main = async () => {
|
package/dist/bin/pushary-bell.js
CHANGED
|
@@ -5,39 +5,39 @@ import {
|
|
|
5
5
|
liveAgentCount,
|
|
6
6
|
ring,
|
|
7
7
|
upgradeThreshold
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-2F6UQ3YD.js";
|
|
9
9
|
import {
|
|
10
10
|
createIo
|
|
11
11
|
} from "../chunk-FO3MDD26.js";
|
|
12
12
|
import {
|
|
13
13
|
exitOnHelpFlag
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-264EOGIK.js";
|
|
15
15
|
import {
|
|
16
16
|
addBellHooks,
|
|
17
17
|
bellInstalled,
|
|
18
18
|
removeBellHooks
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-VICG46JC.js";
|
|
20
20
|
import {
|
|
21
21
|
parseFlags
|
|
22
22
|
} from "../chunk-GMXKITVA.js";
|
|
23
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-U23XTMBF.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-GXQVOKHJ.js";
|
|
29
29
|
import {
|
|
30
30
|
claudeSettings
|
|
31
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-NQICO3ES.js";
|
|
32
32
|
import {
|
|
33
33
|
readJsonSafe,
|
|
34
34
|
writeJsonAtomic
|
|
35
35
|
} from "../chunk-AQFEP65J.js";
|
|
36
|
-
import "../chunk-
|
|
37
|
-
import "../chunk-
|
|
36
|
+
import "../chunk-OY6NJWDD.js";
|
|
37
|
+
import "../chunk-QDKNLNCA.js";
|
|
38
38
|
import {
|
|
39
39
|
isRecord
|
|
40
|
-
} from "../chunk-
|
|
40
|
+
} from "../chunk-GM2IFDVF.js";
|
|
41
41
|
|
|
42
42
|
// bin/pushary-bell.ts
|
|
43
43
|
exitOnHelpFlag("bell");
|
|
@@ -8,39 +8,39 @@ import {
|
|
|
8
8
|
describeIdleWindow,
|
|
9
9
|
startProcessOwnership,
|
|
10
10
|
withSpawnProcessOwnership
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-35U2QHH2.js";
|
|
12
12
|
import {
|
|
13
13
|
announceSubscriptionRequired,
|
|
14
14
|
isDeferAnswer
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-E4B7TXVS.js";
|
|
16
16
|
import {
|
|
17
17
|
claudeTranscriptPath,
|
|
18
18
|
loadSessionKey,
|
|
19
19
|
registerTranscript,
|
|
20
20
|
registeredTranscriptEnabled
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-W5NHIA4Y.js";
|
|
22
22
|
import "../chunk-VTR4VRL2.js";
|
|
23
23
|
import {
|
|
24
24
|
ensureDaemonRunning
|
|
25
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-HBR6ZZHN.js";
|
|
26
26
|
import {
|
|
27
27
|
encryptRecord
|
|
28
|
-
} from "../chunk-
|
|
29
|
-
import "../chunk-
|
|
28
|
+
} from "../chunk-RIBIEQHU.js";
|
|
29
|
+
import "../chunk-3WRJU7KN.js";
|
|
30
30
|
import {
|
|
31
31
|
transcriptsEnabled
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-JDWOK6PE.js";
|
|
33
33
|
import {
|
|
34
34
|
needsShell,
|
|
35
35
|
spawnClaude
|
|
36
36
|
} from "../chunk-XHKBHWLX.js";
|
|
37
|
-
import "../chunk-
|
|
38
|
-
import "../chunk-
|
|
39
|
-
import "../chunk-
|
|
40
|
-
import "../chunk-
|
|
37
|
+
import "../chunk-OSOCONIE.js";
|
|
38
|
+
import "../chunk-VFIZFKZY.js";
|
|
39
|
+
import "../chunk-NJK4MGXL.js";
|
|
40
|
+
import "../chunk-VICG46JC.js";
|
|
41
41
|
import "../chunk-GMXKITVA.js";
|
|
42
42
|
import "../chunk-6ICPEJY5.js";
|
|
43
|
-
import "../chunk-
|
|
43
|
+
import "../chunk-U23XTMBF.js";
|
|
44
44
|
import {
|
|
45
45
|
DEFAULT_SESSION,
|
|
46
46
|
UNNAMED_ACTION,
|
|
@@ -58,8 +58,8 @@ import {
|
|
|
58
58
|
reportEvent,
|
|
59
59
|
savePendingCommand,
|
|
60
60
|
scopePathFor
|
|
61
|
-
} from "../chunk-
|
|
62
|
-
import "../chunk-
|
|
61
|
+
} from "../chunk-KT5BH6GC.js";
|
|
62
|
+
import "../chunk-RFK2WN6S.js";
|
|
63
63
|
import {
|
|
64
64
|
askUser,
|
|
65
65
|
cancelQuestion,
|
|
@@ -69,35 +69,36 @@ import {
|
|
|
69
69
|
waitForAnswer,
|
|
70
70
|
waitsForThePhone,
|
|
71
71
|
withdrawQuestion
|
|
72
|
-
} from "../chunk-
|
|
72
|
+
} from "../chunk-ZVON5PCF.js";
|
|
73
73
|
import "../chunk-POFBE6ZY.js";
|
|
74
74
|
import {
|
|
75
75
|
SubscriptionRequiredError
|
|
76
|
-
} from "../chunk-
|
|
77
|
-
import "../chunk-
|
|
78
|
-
import "../chunk-
|
|
76
|
+
} from "../chunk-RK7TDMQT.js";
|
|
77
|
+
import "../chunk-H2RD5EMR.js";
|
|
78
|
+
import "../chunk-2E6AWHV7.js";
|
|
79
79
|
import {
|
|
80
80
|
getMachineId
|
|
81
|
-
} from "../chunk-
|
|
81
|
+
} from "../chunk-IS737HST.js";
|
|
82
82
|
import "../chunk-7QLSKOSU.js";
|
|
83
83
|
import "../chunk-KZERVKTD.js";
|
|
84
|
-
import "../chunk-
|
|
85
|
-
import "../chunk-
|
|
84
|
+
import "../chunk-GXQVOKHJ.js";
|
|
85
|
+
import "../chunk-NQICO3ES.js";
|
|
86
86
|
import "../chunk-AQFEP65J.js";
|
|
87
87
|
import {
|
|
88
88
|
getApiKey,
|
|
89
89
|
getBaseUrl
|
|
90
|
-
} from "../chunk-
|
|
90
|
+
} from "../chunk-OY6NJWDD.js";
|
|
91
91
|
import {
|
|
92
92
|
NPX_LATEST_COMMAND
|
|
93
|
-
} from "../chunk-
|
|
93
|
+
} from "../chunk-QDKNLNCA.js";
|
|
94
94
|
import {
|
|
95
95
|
DECISION_STOP_REASON,
|
|
96
96
|
KILL_REASON,
|
|
97
97
|
UNVERIFIABLE_APPROVAL_REASON,
|
|
98
98
|
redactSecretsFromContent,
|
|
99
|
-
resolveGate
|
|
100
|
-
|
|
99
|
+
resolveGate,
|
|
100
|
+
timeoutActionWithoutLocalPrompt
|
|
101
|
+
} from "../chunk-GM2IFDVF.js";
|
|
101
102
|
|
|
102
103
|
// src/wrapper/localPassthrough.ts
|
|
103
104
|
var SIGNAL_NUMBERS = {
|
|
@@ -454,7 +455,7 @@ var createRemoteApprover = (deps) => {
|
|
|
454
455
|
const ceiling = policy.timeoutAction === "wait" ? MAX_APPROVAL_WINDOW_MS : base;
|
|
455
456
|
return Math.min(Math.max(base, 15e3), Math.max(ceiling, 15e3));
|
|
456
457
|
};
|
|
457
|
-
const applyTimeout = (policy, input) => policy
|
|
458
|
+
const applyTimeout = (policy, input) => timeoutActionWithoutLocalPrompt(policy) === "approve" ? allow(input) : deny("No approval received in time");
|
|
458
459
|
const waitForPhone = async (entry, correlationId, windowMs) => {
|
|
459
460
|
const deadline = now() + windowMs;
|
|
460
461
|
while (now() < deadline && !entry.controller.signal.aborted) {
|
|
@@ -5,15 +5,16 @@ import {
|
|
|
5
5
|
createGuards
|
|
6
6
|
} from "../chunk-EUW7JL2K.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
describeCliKeyRevocation,
|
|
9
|
+
planCliKeyRevocations,
|
|
10
|
+
readCliHeldKeys,
|
|
11
|
+
revokeCliKeys
|
|
12
|
+
} from "../chunk-L5MCJNSI.js";
|
|
12
13
|
import {
|
|
13
14
|
isCursorPluginLeftover,
|
|
14
15
|
releaseSoleGate,
|
|
15
16
|
withoutPusharyCursorHooks
|
|
16
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-HLXGEOX3.js";
|
|
17
18
|
import {
|
|
18
19
|
HERMES_PIP_PACKAGE,
|
|
19
20
|
readHermesStatus,
|
|
@@ -22,27 +23,25 @@ import {
|
|
|
22
23
|
shortenHome,
|
|
23
24
|
unregisterPluginLocation,
|
|
24
25
|
vscodeSettingsTargets
|
|
25
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-SH2KK2ED.js";
|
|
26
27
|
import {
|
|
27
28
|
planFxRemoval,
|
|
28
29
|
removeInstructionBlock
|
|
29
|
-
} from "../chunk-
|
|
30
|
-
import "../chunk-
|
|
30
|
+
} from "../chunk-XA2RGGNR.js";
|
|
31
|
+
import "../chunk-Q7IEFI7V.js";
|
|
31
32
|
import {
|
|
32
33
|
disableDaemonService
|
|
33
|
-
} from "../chunk-
|
|
34
|
+
} from "../chunk-HBR6ZZHN.js";
|
|
34
35
|
import "../chunk-XHKBHWLX.js";
|
|
35
|
-
import
|
|
36
|
-
APPROVAL_SETTINGS_PATH
|
|
37
|
-
} from "../chunk-S2R2U5W5.js";
|
|
36
|
+
import "../chunk-EE357RIP.js";
|
|
38
37
|
import {
|
|
39
38
|
macAppKeepsMcpEntry,
|
|
40
39
|
mcpServerBearer,
|
|
41
40
|
pusharyKey,
|
|
42
41
|
readMacAppAgentKey,
|
|
43
42
|
setupReceiptKey
|
|
44
|
-
} from "../chunk-
|
|
45
|
-
import "../chunk-
|
|
43
|
+
} from "../chunk-2JTJZ7VI.js";
|
|
44
|
+
import "../chunk-CYGIJXAP.js";
|
|
46
45
|
import {
|
|
47
46
|
OPENCODE_PLUGIN_SIBLING,
|
|
48
47
|
OPENCODE_PLUGIN_SIBLING_CONTENTS,
|
|
@@ -54,14 +53,14 @@ import {
|
|
|
54
53
|
openCodePluginDir,
|
|
55
54
|
openCodePluginFile,
|
|
56
55
|
removeOpenCodeMcpServer
|
|
57
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-O3RRQTTV.js";
|
|
58
57
|
import {
|
|
59
58
|
ansiPainter,
|
|
60
59
|
useColor
|
|
61
60
|
} from "../chunk-FO3MDD26.js";
|
|
62
61
|
import {
|
|
63
62
|
exitOnHelpFlag
|
|
64
|
-
} from "../chunk-
|
|
63
|
+
} from "../chunk-264EOGIK.js";
|
|
65
64
|
import {
|
|
66
65
|
compatibleConfigFile,
|
|
67
66
|
compatibleInstructionsFile,
|
|
@@ -74,7 +73,7 @@ import {
|
|
|
74
73
|
removePusharySettings,
|
|
75
74
|
removePusharyToolPermissions,
|
|
76
75
|
restoreClaudeMcpServer
|
|
77
|
-
} from "../chunk-
|
|
76
|
+
} from "../chunk-LOERK6N3.js";
|
|
78
77
|
import {
|
|
79
78
|
hookOwnerOf,
|
|
80
79
|
isHookTakeoverReceipt,
|
|
@@ -82,42 +81,35 @@ import {
|
|
|
82
81
|
resolveBridgeStub,
|
|
83
82
|
restoreHookTakeover,
|
|
84
83
|
restoreMcpServer
|
|
85
|
-
} from "../chunk-
|
|
84
|
+
} from "../chunk-OSOCONIE.js";
|
|
86
85
|
import {
|
|
87
86
|
removeGeminiSettings
|
|
88
|
-
} from "../chunk-
|
|
89
|
-
import "../chunk-
|
|
90
|
-
import "../chunk-
|
|
87
|
+
} from "../chunk-VFIZFKZY.js";
|
|
88
|
+
import "../chunk-NJK4MGXL.js";
|
|
89
|
+
import "../chunk-VICG46JC.js";
|
|
91
90
|
import {
|
|
92
91
|
rejectUnknownFlags
|
|
93
92
|
} from "../chunk-GMXKITVA.js";
|
|
94
93
|
import "../chunk-6ICPEJY5.js";
|
|
95
94
|
import {
|
|
96
95
|
CANDIDATE_RCS,
|
|
97
|
-
findExportedKeyLines,
|
|
98
|
-
isAdoptedMacAppKey,
|
|
99
96
|
isDisabledExport,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
import "../chunk-GYP6DLA4.js";
|
|
107
|
-
import "../chunk-KJA6IGOZ.js";
|
|
108
|
-
import "../chunk-4GKQDFH6.js";
|
|
97
|
+
removeClaudeAlias,
|
|
98
|
+
shellProfileCandidates
|
|
99
|
+
} from "../chunk-U23XTMBF.js";
|
|
100
|
+
import "../chunk-KT5BH6GC.js";
|
|
101
|
+
import "../chunk-RFK2WN6S.js";
|
|
102
|
+
import "../chunk-ZVON5PCF.js";
|
|
109
103
|
import "../chunk-POFBE6ZY.js";
|
|
110
|
-
import "../chunk-
|
|
111
|
-
import
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
import "../chunk-XBETSM5T.js";
|
|
115
|
-
import "../chunk-EDN4F6GX.js";
|
|
104
|
+
import "../chunk-RK7TDMQT.js";
|
|
105
|
+
import "../chunk-H2RD5EMR.js";
|
|
106
|
+
import "../chunk-2E6AWHV7.js";
|
|
107
|
+
import "../chunk-IS737HST.js";
|
|
116
108
|
import "../chunk-7QLSKOSU.js";
|
|
117
109
|
import {
|
|
118
110
|
EXIT
|
|
119
111
|
} from "../chunk-KZERVKTD.js";
|
|
120
|
-
import "../chunk-
|
|
112
|
+
import "../chunk-GXQVOKHJ.js";
|
|
121
113
|
import {
|
|
122
114
|
claudeJson,
|
|
123
115
|
claudeMcpReceipt,
|
|
@@ -154,14 +146,14 @@ import {
|
|
|
154
146
|
restoreCodexHookTrust,
|
|
155
147
|
vscodePluginDir,
|
|
156
148
|
vscodePluginMcp
|
|
157
|
-
} from "../chunk-
|
|
149
|
+
} from "../chunk-NQICO3ES.js";
|
|
158
150
|
import "../chunk-AQFEP65J.js";
|
|
159
151
|
import {
|
|
160
152
|
getBaseUrl
|
|
161
|
-
} from "../chunk-
|
|
153
|
+
} from "../chunk-OY6NJWDD.js";
|
|
162
154
|
import {
|
|
163
155
|
NPX_LATEST_COMMAND
|
|
164
|
-
} from "../chunk-
|
|
156
|
+
} from "../chunk-QDKNLNCA.js";
|
|
165
157
|
import {
|
|
166
158
|
CLI_PACKAGE_NAMES,
|
|
167
159
|
HOOK_COMPATIBLE_PROFILES,
|
|
@@ -173,7 +165,7 @@ import {
|
|
|
173
165
|
globalRootFor,
|
|
174
166
|
isValidApiKey,
|
|
175
167
|
redactSecrets
|
|
176
|
-
} from "../chunk-
|
|
168
|
+
} from "../chunk-GM2IFDVF.js";
|
|
177
169
|
|
|
178
170
|
// bin/pushary-clean.ts
|
|
179
171
|
import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
|
|
@@ -599,43 +591,6 @@ var cleanCompatibleAgent = (profile, scope, io, home) => {
|
|
|
599
591
|
};
|
|
600
592
|
};
|
|
601
593
|
|
|
602
|
-
// src/cli/clean-key-revocation.ts
|
|
603
|
-
var isMacAppCurrentOrAdoptedKey = (key, keys) => key === keys.macAppKey || isAdoptedMacAppKey(key, keys.macAppKeyPrefix);
|
|
604
|
-
var revocationFor = (keys) => (key) => isMacAppCurrentOrAdoptedKey(key, keys) ? { kind: "mac_app_key", keyPrefix: keyPrefix(key) } : { kind: "revoke", key };
|
|
605
|
-
var validKeys = (keys) => [...new Set(keys)].filter((key) => key !== null && isValidApiKey(key));
|
|
606
|
-
var environmentOnlyKey = (keys, written) => validKeys([keys.envKey]).filter((key) => !written.includes(key)).map((key) => ({ kind: "environment_only", keyPrefix: keyPrefix(key) }));
|
|
607
|
-
var planCliKeyRevocations = (keys) => {
|
|
608
|
-
const written = validKeys([keys.configKey, ...keys.profileKeys]);
|
|
609
|
-
return [...written.map(revocationFor(keys)), ...environmentOnlyKey(keys, written)];
|
|
610
|
-
};
|
|
611
|
-
var runRevocation = async (revocation, run) => {
|
|
612
|
-
if (revocation.kind !== "revoke") return revocation;
|
|
613
|
-
if (run.dryRun) return { kind: "would_revoke", keyPrefix: keyPrefix(revocation.key) };
|
|
614
|
-
return { kind: "attempted", keyPrefix: keyPrefix(revocation.key), attempt: await revokeOwnKey(revocation.key, run.baseUrl) };
|
|
615
|
-
};
|
|
616
|
-
var revokeCliKeys = async (revocations, run) => {
|
|
617
|
-
const outcomes = [];
|
|
618
|
-
for (const revocation of revocations) outcomes.push(await runRevocation(revocation, run));
|
|
619
|
-
return outcomes;
|
|
620
|
-
};
|
|
621
|
-
var describeCliKeyRevocation = (outcome, baseUrl) => {
|
|
622
|
-
const label = `API key ${outcome.keyPrefix}`;
|
|
623
|
-
switch (outcome.kind) {
|
|
624
|
-
case "would_revoke":
|
|
625
|
-
return { tone: "skipped", line: `${label} (would revoke it on pushary.com)`, next: null };
|
|
626
|
-
case "mac_app_key":
|
|
627
|
-
return { tone: "skipped", line: `${label} (not revoked: it is the Pushary Mac app's key)`, next: null };
|
|
628
|
-
case "environment_only":
|
|
629
|
-
return { tone: "skipped", line: `${label} in PUSHARY_API_KEY (left alone: Pushary did not write it)`, next: null };
|
|
630
|
-
case "attempted":
|
|
631
|
-
return keyNoLongerAccepted(outcome.attempt) ? { tone: "done", line: `${label}: ${describeRevokeAttempt(outcome.attempt)}`, next: null } : {
|
|
632
|
-
tone: "warning",
|
|
633
|
-
line: `${label}: ${describeRevokeAttempt(outcome.attempt)}`,
|
|
634
|
-
next: `It may still be valid. Revoke it at ${absoluteUrl(baseUrl, APPROVAL_SETTINGS_PATH)}`
|
|
635
|
-
};
|
|
636
|
-
}
|
|
637
|
-
};
|
|
638
|
-
|
|
639
594
|
// bin/pushary-clean.ts
|
|
640
595
|
exitOnHelpFlag("clean");
|
|
641
596
|
var paint = ansiPainter(() => useColor());
|
|
@@ -870,18 +825,11 @@ var printKeyRevocation = (report) => {
|
|
|
870
825
|
console.log(` ${KEY_REVOCATION_ICONS[report.tone]} ${report.line}`);
|
|
871
826
|
if (report.next) console.log(` ${dim(report.next)}`);
|
|
872
827
|
};
|
|
873
|
-
var
|
|
874
|
-
const
|
|
875
|
-
const
|
|
876
|
-
const
|
|
877
|
-
|
|
878
|
-
profileKeys: findExportedKeyLines().map((line) => line.key),
|
|
879
|
-
envKey: source.kind === "env" ? source.key : null,
|
|
880
|
-
macAppKey: readMacAppAgentKey(),
|
|
881
|
-
macAppKeyPrefix: readMacAppKeyPrefix()
|
|
882
|
-
});
|
|
883
|
-
const outcomes = await revokeCliKeys(revocations, { dryRun, baseUrl });
|
|
884
|
-
for (const outcome of outcomes) printKeyRevocation(describeCliKeyRevocation(outcome, baseUrl));
|
|
828
|
+
var revokeKeysThisCliCreated = async () => {
|
|
829
|
+
const run = { dryRun, baseUrl: getBaseUrl() };
|
|
830
|
+
const revocations = planCliKeyRevocations(readCliHeldKeys(shellProfileCandidates()));
|
|
831
|
+
const outcomes = await revokeCliKeys(revocations, run);
|
|
832
|
+
for (const outcome of outcomes) printKeyRevocation(describeCliKeyRevocation(outcome, run));
|
|
885
833
|
};
|
|
886
834
|
var main = async () => {
|
|
887
835
|
console.log();
|
|
@@ -961,7 +909,7 @@ var main = async () => {
|
|
|
961
909
|
process.exit(EXIT.FAILED);
|
|
962
910
|
}
|
|
963
911
|
console.log(` ${check} Background service ${dim(did("uninstalled"))}`);
|
|
964
|
-
if (everything) await
|
|
912
|
+
if (everything) await revokeKeysThisCliCreated();
|
|
965
913
|
const claudeJson2 = readJson(CLAUDE_JSON);
|
|
966
914
|
const keepClaudeMcp = macAppKeeps("claude_code", mcpServerBearer(claudeJson2?.mcpServers));
|
|
967
915
|
const claudeHasPusharyEntry = () => Boolean(claudeJson2?.mcpServers?.pushary);
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
postLiveSession,
|
|
6
6
|
postLiveSessionUntilAccepted,
|
|
7
7
|
startLiveSessionHeartbeat
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-T6TJA4RF.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveProviderBinary
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-KX776UXN.js";
|
|
12
12
|
import "../chunk-RIVNNBEK.js";
|
|
13
13
|
import {
|
|
14
14
|
SESSION_IDLE_TIMEOUT_MS,
|
|
@@ -16,50 +16,50 @@ import {
|
|
|
16
16
|
idleDeadlinePassed,
|
|
17
17
|
startProcessOwnership,
|
|
18
18
|
withSpawnProcessOwnership
|
|
19
|
-
} from "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
19
|
+
} from "../chunk-35U2QHH2.js";
|
|
20
|
+
import "../chunk-RIBIEQHU.js";
|
|
21
|
+
import "../chunk-3WRJU7KN.js";
|
|
22
22
|
import {
|
|
23
23
|
transcriptsEnabled
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-JDWOK6PE.js";
|
|
25
25
|
import {
|
|
26
26
|
spawnClaude
|
|
27
27
|
} from "../chunk-XHKBHWLX.js";
|
|
28
28
|
import "../chunk-6ICPEJY5.js";
|
|
29
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-U23XTMBF.js";
|
|
30
30
|
import {
|
|
31
31
|
isAskUserResponse,
|
|
32
32
|
isDecisionStopped,
|
|
33
33
|
isWaitForAnswerResponse,
|
|
34
34
|
withdrawQuestion,
|
|
35
35
|
writeDegraded
|
|
36
|
-
} from "../chunk-
|
|
36
|
+
} from "../chunk-ZVON5PCF.js";
|
|
37
37
|
import "../chunk-POFBE6ZY.js";
|
|
38
38
|
import {
|
|
39
39
|
callMcpTool
|
|
40
|
-
} from "../chunk-
|
|
41
|
-
import "../chunk-
|
|
42
|
-
import "../chunk-
|
|
40
|
+
} from "../chunk-RK7TDMQT.js";
|
|
41
|
+
import "../chunk-H2RD5EMR.js";
|
|
42
|
+
import "../chunk-2E6AWHV7.js";
|
|
43
43
|
import {
|
|
44
44
|
getMachineId
|
|
45
|
-
} from "../chunk-
|
|
45
|
+
} from "../chunk-IS737HST.js";
|
|
46
46
|
import "../chunk-7QLSKOSU.js";
|
|
47
47
|
import "../chunk-KZERVKTD.js";
|
|
48
|
-
import "../chunk-
|
|
49
|
-
import "../chunk-
|
|
48
|
+
import "../chunk-GXQVOKHJ.js";
|
|
49
|
+
import "../chunk-NQICO3ES.js";
|
|
50
50
|
import "../chunk-AQFEP65J.js";
|
|
51
51
|
import {
|
|
52
52
|
getApiKey,
|
|
53
53
|
getBaseUrl
|
|
54
|
-
} from "../chunk-
|
|
55
|
-
import "../chunk-
|
|
54
|
+
} from "../chunk-OY6NJWDD.js";
|
|
55
|
+
import "../chunk-QDKNLNCA.js";
|
|
56
56
|
import {
|
|
57
57
|
elicitationContent,
|
|
58
58
|
parseAgentQuestion,
|
|
59
59
|
parseAgentQuestionAnswers,
|
|
60
60
|
planElicitationAsk,
|
|
61
61
|
readElicitationFields
|
|
62
|
-
} from "../chunk-
|
|
62
|
+
} from "../chunk-GM2IFDVF.js";
|
|
63
63
|
|
|
64
64
|
// bin/pushary-codex-bridge.ts
|
|
65
65
|
import { existsSync } from "fs";
|