pushary 1.9.135 → 1.9.136
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 +6 -0
- package/dist/{api-WEDLFKUE.js → api-5H25QRNM.js} +11 -11
- package/dist/bin/pushary-audit.js +3 -3
- package/dist/bin/pushary-bell-hook.js +28 -28
- package/dist/bin/pushary-bell.js +10 -10
- package/dist/bin/pushary-claude.js +27 -27
- package/dist/bin/pushary-clean.js +35 -35
- package/dist/bin/pushary-codex-bridge.js +23 -23
- package/dist/bin/pushary-codex-hook.js +58 -42
- package/dist/bin/pushary-codex-session.js +8 -8
- package/dist/bin/pushary-codex.js +16 -16
- package/dist/bin/pushary-connect.js +29 -29
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +43 -43
- package/dist/bin/pushary-disconnect.js +28 -28
- package/dist/bin/pushary-display-hook.js +21 -7
- package/dist/bin/pushary-doctor.js +43 -43
- package/dist/bin/pushary-elicitation-hook.js +28 -28
- package/dist/bin/pushary-gemini-bridge.js +17 -17
- package/dist/bin/pushary-gemini-hook.js +32 -32
- package/dist/bin/pushary-hook.js +35 -34
- package/dist/bin/pushary-login.js +21 -21
- package/dist/bin/pushary-logout.js +27 -27
- package/dist/bin/pushary-mcp.js +12 -12
- package/dist/bin/pushary-mode.js +15 -15
- package/dist/bin/pushary-notification-hook.js +27 -27
- package/dist/bin/pushary-opencode-hook.js +31 -31
- package/dist/bin/pushary-permission-denied-hook.js +35 -34
- package/dist/bin/pushary-permission-hook.js +39 -36
- package/dist/bin/pushary-post-hook.js +33 -28
- package/dist/bin/pushary-prompt-hook.js +27 -27
- package/dist/bin/pushary-session-end-hook.js +27 -27
- package/dist/bin/pushary-session-start-hook.js +36 -36
- package/dist/bin/pushary-setup.js +50 -50
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +33 -33
- package/dist/bin/pushary-stop-hook.js +27 -27
- package/dist/bin/pushary-stopfailure-hook.js +27 -27
- package/dist/bin/pushary-suggestions.js +15 -15
- package/dist/bin/pushary-transcript-register.js +17 -17
- package/dist/bin/pushary-transcripts.js +25 -25
- package/dist/bin/pushary-upgrade.js +41 -41
- package/dist/bin/pushary-wait.js +15 -15
- package/dist/bin/pushary.js +7 -7
- package/dist/{chunk-LIXCHEDJ.js → chunk-2E46RALI.js} +6 -6
- package/dist/{chunk-4YBDKFU2.js → chunk-2MVKT7KH.js} +2 -2
- package/dist/{chunk-7JXYR4TC.js → chunk-2R4OVJHS.js} +5 -5
- package/dist/{chunk-WPPTHRBO.js → chunk-2XDVEBHI.js} +5 -5
- package/dist/{chunk-5GQLZ46V.js → chunk-3HXOR6E5.js} +8 -8
- package/dist/{chunk-VND6LN6X.js → chunk-3QBI5C6P.js} +2 -2
- package/dist/{chunk-7ASHS5VR.js → chunk-43DT3QWZ.js} +18 -5
- package/dist/{chunk-AEOITMCS.js → chunk-4T72AHIA.js} +4 -4
- package/dist/{chunk-V7KBG7XH.js → chunk-54TZGPZP.js} +3 -3
- package/dist/{chunk-WVOMK2HW.js → chunk-5XDFQ6E3.js} +1 -1
- package/dist/{chunk-JDAX2HVS.js → chunk-62GD26OE.js} +2 -2
- package/dist/{chunk-VCMJLNEP.js → chunk-6SWFS4GU.js} +2 -2
- package/dist/{chunk-UXPRMNH2.js → chunk-A2YJ2FBR.js} +3 -2
- package/dist/{chunk-QUMPSMZN.js → chunk-A4YOXS24.js} +3 -3
- package/dist/{chunk-MGTMXF3T.js → chunk-A7R43KOX.js} +3 -3
- package/dist/{chunk-RGRPDJG3.js → chunk-D7AAAD6W.js} +163 -108
- package/dist/{chunk-6RSAOA2P.js → chunk-DBIPNY7J.js} +3 -3
- package/dist/{chunk-H4226UC7.js → chunk-DL67HX3D.js} +32 -9
- package/dist/{chunk-SULQKUPJ.js → chunk-EJHD44ZN.js} +2 -2
- package/dist/{chunk-MYMADZRU.js → chunk-EQZB5P6I.js} +2 -2
- package/dist/{chunk-RCZ5ZER4.js → chunk-FAF5RDWT.js} +6 -6
- package/dist/{chunk-OUMH4UTT.js → chunk-G73ACPR2.js} +2 -2
- package/dist/{chunk-N2DYYXQI.js → chunk-GACQSKNG.js} +2 -2
- package/dist/{chunk-ACI4PZ5N.js → chunk-GS5FH3C2.js} +3 -3
- package/dist/{chunk-64QLX4ZC.js → chunk-H2RE3IPK.js} +1 -1
- package/dist/{chunk-KUAS2DGZ.js → chunk-HKJLPVPZ.js} +5 -5
- package/dist/{chunk-7DWERNHQ.js → chunk-HY4ATVCT.js} +3 -3
- package/dist/{chunk-UDSJKRRI.js → chunk-ICCM3DLT.js} +2 -2
- package/dist/{chunk-AXQFLLOB.js → chunk-IHAKBLW2.js} +4 -4
- package/dist/{chunk-FP6ZVMF2.js → chunk-IKBTG3OT.js} +1 -1
- package/dist/{chunk-DMK3U7GG.js → chunk-IRIXOH4U.js} +1 -1
- package/dist/{chunk-U5W3MKPU.js → chunk-JZJ5CM6X.js} +5 -5
- package/dist/{chunk-4VVDRMVE.js → chunk-K7YJBVR3.js} +1 -1
- package/dist/{chunk-GLAGHQPB.js → chunk-KLV2NQVT.js} +4 -4
- package/dist/{chunk-FSLV5FIE.js → chunk-KTVMIG32.js} +4 -4
- package/dist/{chunk-Q5GPXYDG.js → chunk-KYD3LHFB.js} +1 -1
- package/dist/{chunk-XRO6NRBO.js → chunk-L2GADKFL.js} +6 -6
- package/dist/{chunk-65ZWYA5L.js → chunk-L7Q57R4J.js} +10 -10
- package/dist/{chunk-IOUCIJ56.js → chunk-LAWI6NQK.js} +1 -1
- package/dist/{chunk-IABPEGAA.js → chunk-LNF36PTF.js} +2 -2
- package/dist/{chunk-E4RMOK4A.js → chunk-MENTZJHA.js} +1 -1
- package/dist/{chunk-TKOALSA5.js → chunk-MQ3I5OIC.js} +8 -8
- package/dist/{chunk-BGXXWLS5.js → chunk-MQMVJDII.js} +1 -1
- package/dist/{chunk-WTLQMJZ3.js → chunk-N3VCBXI6.js} +3 -3
- package/dist/{chunk-EWJXECUK.js → chunk-NN43KGTN.js} +4 -4
- package/dist/{chunk-WNPZGHHU.js → chunk-NZD6ISCL.js} +3 -3
- package/dist/{chunk-3KPPXZCO.js → chunk-O5T53LZ5.js} +42 -25
- package/dist/{chunk-6UARD3WA.js → chunk-PHA6AFOR.js} +3 -3
- package/dist/{chunk-LTY5DSWT.js → chunk-PNVTPEO5.js} +3 -3
- package/dist/{chunk-G3YIGTFS.js → chunk-POV2TBFA.js} +11 -11
- package/dist/{chunk-SFN72Q7W.js → chunk-Q2VV77IY.js} +3 -3
- package/dist/{chunk-GRCX2FGD.js → chunk-QXATIKHQ.js} +1 -1
- package/dist/{chunk-6QZGKKQS.js → chunk-R7CQF2P3.js} +1 -1
- package/dist/{chunk-ZJKWDM3S.js → chunk-R7KC57PC.js} +2 -2
- package/dist/{chunk-UCGWTMQD.js → chunk-RPFSVNH6.js} +3 -3
- package/dist/{chunk-VXYGYCNR.js → chunk-RRUP72V6.js} +1 -1
- package/dist/{chunk-ORZ7H3AQ.js → chunk-TLK5YLIE.js} +4 -4
- package/dist/{chunk-NBMK6T6R.js → chunk-U3OLXV5Z.js} +2 -2
- package/dist/chunk-UP5QXEUU.js +31 -0
- package/dist/{chunk-X3NYMHLG.js → chunk-V7ZY7P2X.js} +6 -6
- package/dist/{chunk-CGROOSWT.js → chunk-VBWJ756P.js} +5 -5
- package/dist/{chunk-OEIU6BNH.js → chunk-VO77WHK4.js} +6 -6
- package/dist/{chunk-NWNUS2ET.js → chunk-VV7WRIQT.js} +4 -4
- package/dist/{chunk-2K7MZRPH.js → chunk-VVN3RPV6.js} +1 -1
- package/dist/{chunk-35RCY4LB.js → chunk-WM7OY63L.js} +1 -1
- package/dist/{chunk-RLNJNRYP.js → chunk-WNT4JHK3.js} +1 -1
- package/dist/{chunk-ZNST34QH.js → chunk-WXUEOHYY.js} +5 -5
- package/dist/{chunk-XB75IJ3G.js → chunk-Y47BMZUR.js} +1 -1
- package/dist/{chunk-4XTB74D3.js → chunk-YHX5YF77.js} +4 -4
- package/dist/{chunk-4PPSXQQ6.js → chunk-YOV3LHOL.js} +3 -3
- package/dist/{chunk-7KWOR2T2.js → chunk-YQQGIDBC.js} +1 -1
- package/dist/{chunk-7GEMAKQL.js → chunk-YURIU333.js} +5 -5
- package/dist/{chunk-QLIG4PMT.js → chunk-ZWIJJYN3.js} +4 -4
- package/dist/{chunk-UCDPJHZT.js → chunk-ZWLSXECG.js} +2 -2
- package/dist/{chunk-UQCVVN7K.js → chunk-ZWURBNA3.js} +1 -1
- package/dist/{codex-app-cards-switch-C6DXLVAM.js → codex-app-cards-switch-Z7TMF2OR.js} +11 -11
- package/dist/{codex-card-routing-ZMMS4RIR.js → codex-card-routing-LQJEJNTS.js} +2 -2
- package/dist/{codex-desktop-launch-DIUFMA45.js → codex-desktop-launch-HKXGKL3T.js} +1 -1
- package/dist/{codex-session-launch-S4WTGKRY.js → codex-session-launch-DTGH7ZKM.js} +20 -20
- package/dist/{config-BV5FQ536.js → config-34VUNHK6.js} +3 -3
- package/dist/{global-upgrade-JZWB67EU.js → global-upgrade-5UAH5DCG.js} +9 -9
- package/dist/{identity-G6FQTONT.js → identity-UFJEWGEU.js} +4 -4
- package/dist/{live-capabilities-YHMOXY5E.js → live-capabilities-BL3SHFWX.js} +4 -4
- package/dist/{paths-XTEJ5LI2.js → paths-YA5ROXGC.js} +3 -3
- package/dist/{reapply-MVZKPXIQ.js → reapply-OPQF4DPQ.js} +29 -29
- package/dist/src/index.js +34 -33
- package/dist/{upgrade-lock-YPAQEEJA.js → upgrade-lock-AZLOOGKV.js} +4 -4
- package/dist/{usage-R6PZTIEH.js → usage-ZSV4LFDL.js} +3 -3
- package/package.json +1 -1
|
@@ -1,33 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
forgetPhoneApproval,
|
|
3
|
+
rememberPhoneApproval,
|
|
4
|
+
takePhoneApproval
|
|
5
|
+
} from "./chunk-UP5QXEUU.js";
|
|
1
6
|
import {
|
|
2
7
|
claudeSettingsLocationFor,
|
|
3
8
|
readClaudePermissionRules
|
|
4
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-G73ACPR2.js";
|
|
5
10
|
import {
|
|
6
11
|
askAgentQuestions,
|
|
7
12
|
defersToNativeMode,
|
|
8
13
|
outcomeOfFailedAsk,
|
|
9
14
|
storedWaitDeadline
|
|
10
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2R4OVJHS.js";
|
|
11
16
|
import {
|
|
12
17
|
reportMachineDenial
|
|
13
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-HY4ATVCT.js";
|
|
14
19
|
import {
|
|
15
20
|
isGatingMoment,
|
|
16
21
|
recordKeylessMoment
|
|
17
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-YQQGIDBC.js";
|
|
18
23
|
import {
|
|
19
24
|
isAdmitted,
|
|
20
25
|
readAdmissionRules
|
|
21
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-YURIU333.js";
|
|
22
27
|
import {
|
|
23
28
|
isDeferAnswer,
|
|
24
29
|
oncePerSession
|
|
25
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-H2RE3IPK.js";
|
|
26
31
|
import {
|
|
27
32
|
activeHookSource,
|
|
28
33
|
activeIdentity,
|
|
29
34
|
namedSource
|
|
30
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-43DT3QWZ.js";
|
|
31
36
|
import {
|
|
32
37
|
DEFAULT_SESSION,
|
|
33
38
|
approvalAwaitingRetry,
|
|
@@ -48,7 +53,7 @@ import {
|
|
|
48
53
|
settleQuestionsForToolUse,
|
|
49
54
|
sweepFilesOlderThan,
|
|
50
55
|
userScope
|
|
51
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-D7AAAD6W.js";
|
|
52
57
|
import {
|
|
53
58
|
UNNAMED_ACTION,
|
|
54
59
|
deriveAction,
|
|
@@ -59,12 +64,12 @@ import {
|
|
|
59
64
|
patchDeletesFiles,
|
|
60
65
|
permissionDeniedAction,
|
|
61
66
|
scopePathFor
|
|
62
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-A2YJ2FBR.js";
|
|
63
68
|
import {
|
|
64
69
|
branchFor,
|
|
65
70
|
repoKeyFor,
|
|
66
71
|
repositoryScopeFor
|
|
67
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-IRIXOH4U.js";
|
|
68
73
|
import {
|
|
69
74
|
askUser,
|
|
70
75
|
cancelQuestion,
|
|
@@ -81,20 +86,20 @@ import {
|
|
|
81
86
|
waitForQuestion,
|
|
82
87
|
waitsForThePhone,
|
|
83
88
|
withdrawQuestion
|
|
84
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-L2GADKFL.js";
|
|
85
90
|
import {
|
|
86
91
|
getMachineId
|
|
87
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-WNT4JHK3.js";
|
|
88
93
|
import {
|
|
89
94
|
getApiKey,
|
|
90
95
|
getBaseUrl
|
|
91
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-IKBTG3OT.js";
|
|
92
97
|
import {
|
|
93
98
|
writeFileAtomic
|
|
94
99
|
} from "./chunk-TODDEIYG.js";
|
|
95
100
|
import {
|
|
96
101
|
NPX_LATEST_COMMAND
|
|
97
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-MQMVJDII.js";
|
|
98
103
|
import {
|
|
99
104
|
AGENT_QUESTION_STRATEGY,
|
|
100
105
|
AGENT_QUESTION_TOOL,
|
|
@@ -163,7 +168,7 @@ import {
|
|
|
163
168
|
timeoutActionWithoutLocalPrompt,
|
|
164
169
|
unansweredRefusalReason,
|
|
165
170
|
unapprovedScopeReason
|
|
166
|
-
} from "./chunk-
|
|
171
|
+
} from "./chunk-DL67HX3D.js";
|
|
167
172
|
|
|
168
173
|
// src/terminal-answer-watch.ts
|
|
169
174
|
import { closeSync, openSync, readSync, statSync } from "fs";
|
|
@@ -448,7 +453,9 @@ var ACTIVE_AGENT = activeIdentity(process.argv);
|
|
|
448
453
|
var ACTIVE_SOURCE = activeHookSource(process.argv);
|
|
449
454
|
var HANDED_DOWN_BY_THE_MAC_BRIDGE = namedSource(process.argv) !== void 0;
|
|
450
455
|
var CLAUDE_SESSION_ATTENDED_ENV = "CLAUDE_CODE_SESSION_ATTENDED";
|
|
451
|
-
var
|
|
456
|
+
var ACTIVE_PROFILE = ACTIVE_SOURCE === null ? void 0 : hookCompatibleProfileBySource(ACTIVE_SOURCE);
|
|
457
|
+
var PUSHARY_IS_SOLE_GATE = ACTIVE_PROFILE?.soleGate != null;
|
|
458
|
+
var PHONE_APPROVAL_SOURCE = ACTIVE_PROFILE?.promptFollowsPreToolUseAllow ? ACTIVE_PROFILE.source : null;
|
|
452
459
|
var agentNameIn = (projectName) => `${ACTIVE_AGENT.label} - ${projectName}`;
|
|
453
460
|
var allowWithInput = (updatedInput) => claudePreToolUseOutput("allow", void 0, updatedInput);
|
|
454
461
|
var undecidedCall = (reason) => PUSHARY_IS_SOLE_GATE ? deny(reason) : void 0;
|
|
@@ -554,7 +561,7 @@ var emitDecisionEpisode = (apiKey, input, toolPolicy, machineId, toolTarget, dec
|
|
|
554
561
|
machineId
|
|
555
562
|
});
|
|
556
563
|
};
|
|
557
|
-
var
|
|
564
|
+
var dispatchModeDecision = async (apiKey, input, toolPolicy, machineId, trainingConsent = false, scopeReason, scopePath, terminalLive, askReason, matchedRoute) => {
|
|
558
565
|
const description = describeToolCall(input.tool_name, input.tool_input, "hook");
|
|
559
566
|
const projectName = basename(input.cwd ?? process.cwd());
|
|
560
567
|
const sessionId = input.session_id;
|
|
@@ -622,8 +629,10 @@ var dispatchModeHandler = async (apiKey, input, toolPolicy, machineId, trainingC
|
|
|
622
629
|
if (trainingConsent && signals.humanDecision) {
|
|
623
630
|
emitDecisionEpisode(apiKey, input, toolPolicy, machineId, toolTarget, decision, result);
|
|
624
631
|
}
|
|
625
|
-
return result;
|
|
632
|
+
return { result, humanDecision: signals.humanDecision === true };
|
|
626
633
|
};
|
|
634
|
+
var dispatchModeHandler = async (...args) => (await dispatchModeDecision(...args)).result;
|
|
635
|
+
var isPhoneApproval = (decided) => decided.humanDecision && decided.result?.hookSpecificOutput.permissionDecision === "allow";
|
|
627
636
|
var CURSOR_SCOPE_TIMEOUT_ACTION = "escalate";
|
|
628
637
|
var cursorScopeWaitSeconds = ({ timeoutSeconds, timeoutAction }) => Math.min(effectiveWaitSeconds(timeoutAction, timeoutSeconds, "cursor"), hookMaxWaitSeconds("cursor"));
|
|
629
638
|
var hasItsOwnApprovalPrompt = (source) => source === null || hasNativeApprovalPrompt(source, "PreToolUse");
|
|
@@ -865,6 +874,7 @@ var standingRefusalOf = async (input) => {
|
|
|
865
874
|
}
|
|
866
875
|
};
|
|
867
876
|
var handlePreToolUse = async (input, canonical) => {
|
|
877
|
+
if (PHONE_APPROVAL_SOURCE) forgetPhoneApproval(PHONE_APPROVAL_SOURCE, input);
|
|
868
878
|
if (isPusharyOwnTool(input.tool_name)) return void 0;
|
|
869
879
|
if (isRefusalsOnlyCallInClaudeCode(input) && !mcpCallWaitsForSomeoneElse(input)) {
|
|
870
880
|
return isPusharyConnectorTool(input.tool_name) ? void 0 : standingRefusalOf(input);
|
|
@@ -917,13 +927,12 @@ var handlePreToolUse = async (input, canonical) => {
|
|
|
917
927
|
// opinion, so Claude Code's own flow runs as if the hook were absent.
|
|
918
928
|
case "defer":
|
|
919
929
|
return undecidedCall(SOLE_GATE_UNDECIDED_REASON);
|
|
920
|
-
default:
|
|
930
|
+
default: {
|
|
921
931
|
if (preToolUseHandsOff(input, gateInput, verdict)) return ask(TERMINAL_AND_PHONE_REASON);
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
);
|
|
932
|
+
const decided = await dispatchModeDecision(apiKey, input, verdict.policy, getMachineId(), modeState.trainingConsent, verdict.scopeReason, verdict.scopePath, void 0, permissionsOffAskReason(gateInput, verdict), matchedRouteOf(gateInput));
|
|
933
|
+
if (PHONE_APPROVAL_SOURCE && isPhoneApproval(decided)) rememberPhoneApproval(PHONE_APPROVAL_SOURCE, input);
|
|
934
|
+
return rememberHandbackToThePrompt(input, heldForMcpRoute, decided.result);
|
|
935
|
+
}
|
|
927
936
|
}
|
|
928
937
|
} catch (error) {
|
|
929
938
|
await reportHookFailure("pre_tool_use_failed", error);
|
|
@@ -940,6 +949,7 @@ var toPermissionRequestOutput = (hookOutput) => {
|
|
|
940
949
|
if (d.permissionDecision === "deny") return permReqDeny(d.permissionDecisionReason);
|
|
941
950
|
return void 0;
|
|
942
951
|
};
|
|
952
|
+
var answerOfTheReplay = (replayed) => replayed.humanDecision ? toPermissionRequestOutput(replayed.result) : void 0;
|
|
943
953
|
var handlePermissionRequest = async (input, canonical, holdBudgetSeconds) => {
|
|
944
954
|
const claudeRules = claudePermissionRulesFor(input);
|
|
945
955
|
if (canonical === void 0 && !claudeRulesMayCover(input, claudeRules) && isPermissionRequestOwnedByPreToolUse(input.tool_name, input.permission_mode, shouldDeferToNativeMode) && !terminalStaysLiveForTheCall(terminalLiveFactsOf(input))) return void 0;
|
|
@@ -967,12 +977,14 @@ var handlePermissionRequest = async (input, canonical, holdBudgetSeconds) => {
|
|
|
967
977
|
if (isMcpCallInClaudeCode(input) && claimMcpHoldHandback(blockedActionFingerprintFor(input))) return void 0;
|
|
968
978
|
if (agentQuestionStrategy(ACTIVE_SOURCE, "PermissionRequest", input.tool_name) === AGENT_QUESTION_STRATEGY.native) return void 0;
|
|
969
979
|
if (verdict.kind === "gate" && verdict.scopeReason && (canonical?.toolInputs.length ?? 0) > 1) return permReqDeny(SCOPE_BATCH_REASON);
|
|
980
|
+
const approvedCall = PHONE_APPROVAL_SOURCE ? takePhoneApproval(PHONE_APPROVAL_SOURCE, input) : void 0;
|
|
981
|
+
const preToolUseAllowLeftThePrompt = PHONE_APPROVAL_SOURCE !== null && (verdict.kind === "allow" || approvedCall !== void 0);
|
|
970
982
|
const handedOff = preToolUseHandsOff(input, gateInput, verdict);
|
|
971
983
|
const terminalLive = terminalStaysLiveForTheCall(terminalLiveFactsOf(input));
|
|
972
984
|
const scopeQuestion = verdict.kind === "gate" && Boolean(verdict.scopeReason);
|
|
973
985
|
const preToolUseRanForTheCall = PRETOOLUSE_HANDLED_TOOLS.has(input.tool_name) && isAdmitted(readAdmissionRules(), "claude", "PreToolUse");
|
|
974
986
|
const preToolUseAskedTheScopeQuestion = scopeQuestion && terminalLive && preToolUseRanForTheCall;
|
|
975
|
-
const preToolUseOwnsTheCall = !scopeQuestion && !claudeAllowlistOwnsCall(gateInput, verdict, input.permission_mode, claudeRules) && (isPermissionRequestOwnedByPreToolUse(input.tool_name, input.permission_mode, shouldDeferToNativeMode) || preToolUseRanForTheCall && approvalRouteOutranksAutoMode(gateInput, verdict, input.permission_mode));
|
|
987
|
+
const preToolUseOwnsTheCall = !scopeQuestion && !preToolUseAllowLeftThePrompt && !claudeAllowlistOwnsCall(gateInput, verdict, input.permission_mode, claudeRules) && (isPermissionRequestOwnedByPreToolUse(input.tool_name, input.permission_mode, shouldDeferToNativeMode) || preToolUseRanForTheCall && approvalRouteOutranksAutoMode(gateInput, verdict, input.permission_mode));
|
|
976
988
|
if (!handedOff && (preToolUseAskedTheScopeQuestion || preToolUseOwnsTheCall)) return void 0;
|
|
977
989
|
const terminalLiveDispatch = handedOff ? { holdBudgetSeconds } : void 0;
|
|
978
990
|
switch (verdict.kind) {
|
|
@@ -982,6 +994,11 @@ var handlePermissionRequest = async (input, canonical, holdBudgetSeconds) => {
|
|
|
982
994
|
case "defer":
|
|
983
995
|
return void 0;
|
|
984
996
|
default:
|
|
997
|
+
if (approvedCall) {
|
|
998
|
+
return answerOfTheReplay(
|
|
999
|
+
await dispatchModeDecision(apiKey, approvedCall, verdict.policy, getMachineId(), false, verdict.scopeReason, verdict.scopePath, terminalLiveDispatch, permissionsOffAskReason(gateInput, verdict), matchedRouteOf(gateInput))
|
|
1000
|
+
);
|
|
1001
|
+
}
|
|
985
1002
|
return toPermissionRequestOutput(
|
|
986
1003
|
await dispatchModeHandler(apiKey, input, verdict.policy, getMachineId(), modeState.trainingConsent, verdict.scopeReason, verdict.scopePath, terminalLiveDispatch, permissionsOffAskReason(gateInput, verdict), matchedRouteOf(gateInput))
|
|
987
1004
|
);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readExistingMachineId
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WNT4JHK3.js";
|
|
4
4
|
import {
|
|
5
5
|
getBaseUrl
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IKBTG3OT.js";
|
|
7
7
|
import {
|
|
8
8
|
NetworkError
|
|
9
9
|
} from "./chunk-YU2EUD7O.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
clientContextHeaders,
|
|
15
15
|
redactSecretsFromContent
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-DL67HX3D.js";
|
|
17
17
|
|
|
18
18
|
// src/cli/net.ts
|
|
19
19
|
import { createRequire } from "module";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveInstallSourceFor
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LNF36PTF.js";
|
|
4
4
|
import {
|
|
5
5
|
configFilePath
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IKBTG3OT.js";
|
|
7
7
|
import {
|
|
8
8
|
backupFile,
|
|
9
9
|
readJsonSafe,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
API_KEY_PREFIX_PATTERN,
|
|
15
15
|
isRecord,
|
|
16
16
|
isValidApiKey
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-DL67HX3D.js";
|
|
18
18
|
|
|
19
19
|
// src/shell-alias.ts
|
|
20
20
|
import { homedir } from "os";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureCodexTrustsPusharyHooks
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6SWFS4GU.js";
|
|
4
4
|
import {
|
|
5
5
|
hermesReceiptPaths,
|
|
6
6
|
hermesSetupPredatesThePluginFolder,
|
|
7
7
|
installHermesPlugin,
|
|
8
8
|
refreshHermesPluginFiles,
|
|
9
9
|
shippedHermesPlugin
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-A7R43KOX.js";
|
|
11
11
|
import {
|
|
12
12
|
fxIgnoresInstructionsFile,
|
|
13
13
|
fxInstructionsBody,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
macAppFxBridge,
|
|
17
17
|
refreshClineKey,
|
|
18
18
|
switchFxHttpEntryToBridge
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-2XDVEBHI.js";
|
|
20
20
|
import {
|
|
21
21
|
OPENCODE_HOOK_BINARY,
|
|
22
22
|
agentHookOwner,
|
|
@@ -28,16 +28,16 @@ import {
|
|
|
28
28
|
openCodePluginDir,
|
|
29
29
|
openCodeWired,
|
|
30
30
|
withOpenCodeAskRules
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-VBWJ756P.js";
|
|
32
32
|
import {
|
|
33
33
|
detectClaudeVersion
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-EJHD44ZN.js";
|
|
35
35
|
import {
|
|
36
36
|
addCompatibleHooks,
|
|
37
37
|
compatibleConfigFile,
|
|
38
38
|
compatibleInstructionsFile,
|
|
39
39
|
hasCompatibleHooks
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-43DT3QWZ.js";
|
|
41
41
|
import {
|
|
42
42
|
GEMINI_HOOK_BINARY,
|
|
43
43
|
addGeminiHooks,
|
|
@@ -49,10 +49,10 @@ import {
|
|
|
49
49
|
geminiWired,
|
|
50
50
|
hasGeminiHooks,
|
|
51
51
|
planHooks
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-TLK5YLIE.js";
|
|
53
53
|
import {
|
|
54
54
|
KEY_FILE_MODE
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-PNVTPEO5.js";
|
|
56
56
|
import {
|
|
57
57
|
CLAUDE_HOOK_BINARY,
|
|
58
58
|
CLAUDE_HOOK_EVENTS,
|
|
@@ -99,13 +99,13 @@ import {
|
|
|
99
99
|
renderAgentInstructions,
|
|
100
100
|
supportedClaudeEvents,
|
|
101
101
|
vscodePluginMcp
|
|
102
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-R7KC57PC.js";
|
|
103
103
|
import {
|
|
104
104
|
formatVersion,
|
|
105
105
|
hookCommandsUseBareNames,
|
|
106
106
|
resolveGlobalBinDir,
|
|
107
107
|
resolveGlobalBinary
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-GS5FH3C2.js";
|
|
109
109
|
import {
|
|
110
110
|
readJsonSafe,
|
|
111
111
|
writeFileAtomic,
|
|
@@ -115,7 +115,7 @@ import {
|
|
|
115
115
|
HOOK_COMPATIBLE_PROFILES,
|
|
116
116
|
isCompatibleAgentType,
|
|
117
117
|
isRecord
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-DL67HX3D.js";
|
|
119
119
|
|
|
120
120
|
// src/reapply.ts
|
|
121
121
|
import { dirname, join } from "path";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pusharyFetch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PHA6AFOR.js";
|
|
4
4
|
import {
|
|
5
5
|
getBaseUrl
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IKBTG3OT.js";
|
|
7
7
|
import {
|
|
8
8
|
NetworkError
|
|
9
9
|
} from "./chunk-YU2EUD7O.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
isValidApiKey,
|
|
15
15
|
normalizeKeyScope
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-DL67HX3D.js";
|
|
17
17
|
|
|
18
18
|
// src/session.ts
|
|
19
19
|
var samePusharyAccount = (left, right) => left.kind === "ok" && right.kind === "ok" && left.identity.workspaceId !== "" && left.identity.workspaceId === right.identity.workspaceId && left.identity.siteId === right.identity.siteId;
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
formatVersion,
|
|
4
4
|
quoteIfNeeded,
|
|
5
5
|
shellDoubleQuoted
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GS5FH3C2.js";
|
|
7
7
|
import {
|
|
8
8
|
writeFileAtomic
|
|
9
9
|
} from "./chunk-TODDEIYG.js";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
PRETOOLUSE_GATED_TOOLS,
|
|
21
21
|
PUSHARY_TOOL_PREFIX,
|
|
22
22
|
withHookHoldBudget
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-DL67HX3D.js";
|
|
24
24
|
|
|
25
25
|
// src/setup/paths.ts
|
|
26
26
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -531,8 +531,8 @@ var loadedOnce = (load) => {
|
|
|
531
531
|
};
|
|
532
532
|
|
|
533
533
|
// src/codex-desktop-proxy.ts
|
|
534
|
-
var loadThePhone = () => import("./api-
|
|
535
|
-
var loadTheCardRouting = () => import("./codex-card-routing-
|
|
534
|
+
var loadThePhone = () => import("./api-5H25QRNM.js");
|
|
535
|
+
var loadTheCardRouting = () => import("./codex-card-routing-LQJEJNTS.js");
|
|
536
536
|
var theFirstCardLoadsAgain = () => {
|
|
537
537
|
};
|
|
538
538
|
var ASKS_WITHOUT_ROUTING = {};
|
|
@@ -1085,7 +1085,7 @@ var codexDesktopCommand = async (args, entry, readAccount) => {
|
|
|
1085
1085
|
return runCodexDesktopProxy(engine2, args.slice(3), readAccount, { watchesForCards: layoutIsKnown });
|
|
1086
1086
|
}
|
|
1087
1087
|
if (args[0] === APP_CARDS_FLAG) {
|
|
1088
|
-
const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-
|
|
1088
|
+
const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-Z7TMF2OR.js");
|
|
1089
1089
|
return codexAppCardsCommandOnThisMac(args.slice(1), entry, readAccount);
|
|
1090
1090
|
}
|
|
1091
1091
|
if (args.length > 2) throw new Error("Usage: pushary codex --desktop [path/to/Codex.app]");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AGENT_CHOICES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5XDFQ6E3.js";
|
|
4
4
|
import {
|
|
5
5
|
BELL_HOOK_BINARY
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LAWI6NQK.js";
|
|
7
7
|
import {
|
|
8
8
|
CLAUDE_HOOK_EVENTS,
|
|
9
9
|
CODEX_HOOK_EVENTS,
|
|
@@ -16,13 +16,13 @@ import {
|
|
|
16
16
|
isBridgeLocator,
|
|
17
17
|
isProtectedByScope,
|
|
18
18
|
registerHookEntry
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-R7KC57PC.js";
|
|
20
20
|
import {
|
|
21
21
|
CURSOR_GATE_EVENTS,
|
|
22
22
|
HOOK_BUDGETS,
|
|
23
23
|
HOOK_LOCATOR_BINARY,
|
|
24
24
|
hookCommandHoldBudget
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-DL67HX3D.js";
|
|
26
26
|
|
|
27
27
|
// src/gemini-config.ts
|
|
28
28
|
var GEMINI_HOOK_BINARY = "pushary-gemini-hook";
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
keyPrefix,
|
|
5
5
|
readConfigFileKey,
|
|
6
6
|
readMacAppKeyPrefix
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PNVTPEO5.js";
|
|
8
8
|
import {
|
|
9
9
|
NPX_LATEST_COMMAND
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MQMVJDII.js";
|
|
11
11
|
|
|
12
12
|
// src/key-signed-out.ts
|
|
13
13
|
var VERDICT_BY_CHECK = {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
callDecisionStore,
|
|
3
|
+
identifyingToolInput
|
|
4
|
+
} from "./chunk-D7AAAD6W.js";
|
|
5
|
+
import {
|
|
6
|
+
canonicalJson
|
|
7
|
+
} from "./chunk-R7KC57PC.js";
|
|
8
|
+
|
|
9
|
+
// src/phone-approval.ts
|
|
10
|
+
import { createHash } from "crypto";
|
|
11
|
+
var PHONE_APPROVAL_TTL_MS = 60 * 60 * 1e3;
|
|
12
|
+
var promptedCallKey = (source, call) => {
|
|
13
|
+
if (!call.session_id || !call.tool_name) return null;
|
|
14
|
+
const material = canonicalJson([source, call.session_id, call.cwd ?? "", call.tool_name, identifyingToolInput(call.tool_input)]);
|
|
15
|
+
return createHash("sha256").update(material, "utf-8").digest("hex").slice(0, 32);
|
|
16
|
+
};
|
|
17
|
+
var phoneApprovals = callDecisionStore("phone-approval", PHONE_APPROVAL_TTL_MS);
|
|
18
|
+
var forgetPhoneApproval = (source, call) => phoneApprovals.forget(promptedCallKey(source, call));
|
|
19
|
+
var rememberPhoneApproval = (source, call) => {
|
|
20
|
+
if (call.tool_use_id) phoneApprovals.record(promptedCallKey(source, call), { kind: "approved", toolUseId: call.tool_use_id });
|
|
21
|
+
};
|
|
22
|
+
var takePhoneApproval = (source, call) => {
|
|
23
|
+
const recorded = phoneApprovals.consume(promptedCallKey(source, call));
|
|
24
|
+
return recorded?.kind === "approved" ? { ...call, tool_use_id: recorded.toolUseId } : void 0;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
forgetPhoneApproval,
|
|
29
|
+
rememberPhoneApproval,
|
|
30
|
+
takePhoneApproval
|
|
31
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
APPROVAL_RULES_PATH,
|
|
3
3
|
canChangeApprovalSettings
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3QBI5C6P.js";
|
|
5
5
|
import {
|
|
6
6
|
callMcpTool
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WXUEOHYY.js";
|
|
8
8
|
import {
|
|
9
9
|
absoluteUrl
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Q2VV77IY.js";
|
|
11
11
|
import {
|
|
12
12
|
getBaseUrl
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IKBTG3OT.js";
|
|
14
14
|
import {
|
|
15
15
|
NPX_LATEST_COMMAND
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MQMVJDII.js";
|
|
17
17
|
import {
|
|
18
18
|
AGENT_STOP_DEFAULT_SECONDS,
|
|
19
19
|
APPROVAL_MODE_META,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
classifyConfirmResponse,
|
|
22
22
|
isAnswerSource,
|
|
23
23
|
roundTripAsk
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-DL67HX3D.js";
|
|
25
25
|
|
|
26
26
|
// src/reach.ts
|
|
27
27
|
var reachVerdict = (channels) => {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compatibleConfigFile
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-43DT3QWZ.js";
|
|
4
4
|
import {
|
|
5
5
|
hookOwnerOf,
|
|
6
6
|
hookOwnerOfCommands
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TLK5YLIE.js";
|
|
8
8
|
import {
|
|
9
9
|
AGENT_CHOICES
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5XDFQ6E3.js";
|
|
11
11
|
import {
|
|
12
12
|
bridgeStub,
|
|
13
13
|
claudeSettings,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
resolveBridgeStub,
|
|
20
20
|
vscodePluginDir,
|
|
21
21
|
windowsNodeLauncherFor
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-R7KC57PC.js";
|
|
23
23
|
import {
|
|
24
24
|
readJsonSafe
|
|
25
25
|
} from "./chunk-TODDEIYG.js";
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
OPENCODE_APPROVAL_EVENT,
|
|
30
30
|
hookCompatibleProfile,
|
|
31
31
|
isRecord
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-DL67HX3D.js";
|
|
33
33
|
|
|
34
34
|
// src/opencode-plugin.ts
|
|
35
35
|
var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
forkFinishWithUpgradeLock,
|
|
4
4
|
installWithUpgradeLock,
|
|
5
5
|
releaseAutoUpdateLock
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-62GD26OE.js";
|
|
7
7
|
import {
|
|
8
8
|
phoneStartIsRequired
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DBIPNY7J.js";
|
|
10
10
|
import {
|
|
11
11
|
describeAutoUpdateCheck,
|
|
12
12
|
globalInstallLocation,
|
|
@@ -18,25 +18,25 @@ import {
|
|
|
18
18
|
readAutoUpdateState,
|
|
19
19
|
updateAutoUpdateState,
|
|
20
20
|
upgradeEntryFor
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-ICCM3DLT.js";
|
|
22
22
|
import {
|
|
23
23
|
autoUpdateLock,
|
|
24
24
|
autoUpdateLog,
|
|
25
25
|
autoUpdateState
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-R7KC57PC.js";
|
|
27
27
|
import {
|
|
28
28
|
execNpm,
|
|
29
29
|
fetchLatestPublishedVersion,
|
|
30
30
|
npmErrorMessage,
|
|
31
31
|
readGlobalCliInstallAt,
|
|
32
32
|
readGlobalPrefix
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-GS5FH3C2.js";
|
|
34
34
|
import {
|
|
35
35
|
EXIT
|
|
36
36
|
} from "./chunk-BG4HHB7E.js";
|
|
37
37
|
import {
|
|
38
38
|
NPX_LATEST_COMMAND
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-MQMVJDII.js";
|
|
40
40
|
import {
|
|
41
41
|
commandsPackage,
|
|
42
42
|
globalUpgradeEntry,
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UNNAMED_ACTION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A2YJ2FBR.js";
|
|
4
4
|
import {
|
|
5
5
|
askUser,
|
|
6
6
|
isAwayPaused,
|
|
7
7
|
isLocalQuestionHandoff,
|
|
8
8
|
unavailableQuestionUnlessRefused,
|
|
9
9
|
waitForQuestion
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-L2GADKFL.js";
|
|
11
11
|
import {
|
|
12
12
|
getMachineId
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WNT4JHK3.js";
|
|
14
14
|
import {
|
|
15
15
|
hookWaitClamped,
|
|
16
16
|
hookWaitDeadline,
|
|
17
17
|
scopeBreachReasonOf
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-DL67HX3D.js";
|
|
19
19
|
|
|
20
20
|
// src/pushed-question.ts
|
|
21
21
|
var scopeQuestionOf = (verdict) => {
|