pushary 1.9.91 → 1.9.92
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 +12 -0
- package/data/cursor-plugin/scripts/pushary-gate.mjs +34 -9
- package/data/vscode-plugin/scripts/pushary-gate.mjs +34 -9
- package/dist/{api-SXS2T6QU.js → api-QUARGXSY.js} +10 -10
- package/dist/bin/pushary-bell-hook.js +26 -26
- package/dist/bin/pushary-bell.js +10 -10
- package/dist/bin/pushary-claude.js +30 -29
- package/dist/bin/pushary-clean.js +34 -34
- package/dist/bin/pushary-codex-bridge.js +21 -21
- package/dist/bin/pushary-codex-hook.js +35 -34
- package/dist/bin/pushary-codex-session.js +8 -8
- package/dist/bin/pushary-codex.js +14 -14
- package/dist/bin/pushary-connect.js +27 -27
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +39 -39
- package/dist/bin/pushary-disconnect.js +26 -26
- package/dist/bin/pushary-display-hook.js +17 -17
- package/dist/bin/pushary-doctor.js +42 -42
- package/dist/bin/pushary-elicitation-hook.js +26 -26
- package/dist/bin/pushary-gemini-bridge.js +15 -15
- package/dist/bin/pushary-gemini-hook.js +28 -28
- package/dist/bin/pushary-hook.js +30 -30
- package/dist/bin/pushary-login.js +20 -20
- package/dist/bin/pushary-logout.js +25 -25
- package/dist/bin/pushary-mcp.js +11 -11
- package/dist/bin/pushary-mode.js +15 -15
- package/dist/bin/pushary-notification-hook.js +25 -25
- package/dist/bin/pushary-opencode-hook.js +27 -27
- package/dist/bin/pushary-permission-denied-hook.js +30 -30
- package/dist/bin/pushary-permission-hook.js +30 -30
- package/dist/bin/pushary-post-hook.js +25 -25
- package/dist/bin/pushary-prompt-hook.js +25 -25
- package/dist/bin/pushary-session-end-hook.js +27 -27
- package/dist/bin/pushary-session-start-hook.js +35 -35
- package/dist/bin/pushary-setup.js +48 -48
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +32 -32
- package/dist/bin/pushary-stop-hook.js +25 -25
- package/dist/bin/pushary-stopfailure-hook.js +25 -25
- package/dist/bin/pushary-suggestions.js +15 -15
- package/dist/bin/pushary-transcript-register.js +18 -18
- package/dist/bin/pushary-transcripts.js +26 -26
- package/dist/bin/pushary-upgrade.js +40 -40
- package/dist/bin/pushary-wait.js +15 -15
- package/dist/bin/pushary.js +7 -7
- package/dist/{chunk-KDN7AMAQ.js → chunk-2BVVMWVF.js} +47 -8
- package/dist/{chunk-L2ZV2R56.js → chunk-2BXWBKVN.js} +3 -3
- package/dist/{chunk-KFJAVZQ4.js → chunk-2FL5PLA4.js} +2 -2
- package/dist/{chunk-CEFWJUMO.js → chunk-373552A3.js} +4 -4
- package/dist/{chunk-ZH7GIWNY.js → chunk-3CJFBWID.js} +3 -3
- package/dist/{chunk-CIS6AR32.js → chunk-3JVV6PMG.js} +5 -5
- package/dist/{chunk-7M2XBZ5B.js → chunk-4HQTZQ4D.js} +2 -2
- package/dist/{chunk-27232B7Y.js → chunk-4PD7FP55.js} +2 -2
- package/dist/{chunk-R6XUBZXX.js → chunk-5TQC2LS6.js} +4 -4
- package/dist/{chunk-KRNY5Z6I.js → chunk-66VEUAN5.js} +1 -1
- package/dist/{chunk-PX56WF4C.js → chunk-6QH4MWCW.js} +3 -3
- package/dist/{chunk-FVLMKRSH.js → chunk-76ROCOWD.js} +7 -7
- package/dist/{chunk-ESUZQNA4.js → chunk-7DOSRSRU.js} +9 -14
- package/dist/{chunk-HF5PQTRW.js → chunk-7PQ66CB3.js} +1 -1
- package/dist/{chunk-3R2FRFVO.js → chunk-7S3LH5AX.js} +11 -11
- package/dist/{chunk-INHSF76N.js → chunk-7YB2XRY7.js} +3 -3
- package/dist/{chunk-5UTJHR7L.js → chunk-ANDG4PUV.js} +6 -6
- package/dist/{chunk-BANK74ZZ.js → chunk-B6WYXY32.js} +7 -7
- package/dist/{chunk-RR2T2R2Z.js → chunk-BETKU76V.js} +3 -3
- package/dist/{chunk-BGJ3SXTZ.js → chunk-CA4PS7XT.js} +5 -5
- package/dist/{chunk-OBRDREJD.js → chunk-CFD3IESN.js} +6 -6
- package/dist/{chunk-LLVX57ZC.js → chunk-CHVXLS7U.js} +2 -2
- package/dist/{chunk-QFTLJDUE.js → chunk-CI6VDIHW.js} +10 -10
- package/dist/{chunk-OAWIPPYH.js → chunk-CO6TQ44W.js} +3 -3
- package/dist/{chunk-RD2WTV72.js → chunk-CSUO5YJG.js} +2 -2
- package/dist/{chunk-NRK3RNWF.js → chunk-DV7LLH25.js} +1 -1
- package/dist/{chunk-24JXCTST.js → chunk-DYNMKVNO.js} +5 -5
- package/dist/{chunk-XMKJ3UEC.js → chunk-F2CWT6Y6.js} +6 -6
- package/dist/{chunk-XNX6P2J5.js → chunk-FCBFWXPE.js} +5 -5
- package/dist/{chunk-GSV75E67.js → chunk-FTJ5DQL7.js} +2 -2
- package/dist/{chunk-CPEITTYS.js → chunk-GDVS6J4R.js} +1 -1
- package/dist/{chunk-ZAXB2CFU.js → chunk-GLA6MCOG.js} +1 -1
- package/dist/{chunk-46MZBPY3.js → chunk-H4MIOBC6.js} +2 -2
- package/dist/{chunk-2GYHJE4R.js → chunk-HUNGCBCF.js} +3 -3
- package/dist/{chunk-IAMH6L23.js → chunk-INSLGCGD.js} +18 -17
- package/dist/{chunk-SF3FHCJJ.js → chunk-ITGPUTFV.js} +4 -4
- package/dist/{chunk-SVE32G6W.js → chunk-JJWZIPDL.js} +4 -4
- package/dist/{chunk-DCILU6SS.js → chunk-JZ2MRWC4.js} +3 -3
- package/dist/{chunk-JQ37ZJJQ.js → chunk-KJ752DUH.js} +6 -6
- package/dist/{chunk-PETLGHDR.js → chunk-LANGH7UF.js} +4 -4
- package/dist/{chunk-7JF57OPF.js → chunk-LTMMFZHG.js} +1 -1
- package/dist/{chunk-BFXTO23L.js → chunk-N7CPX5S5.js} +5 -5
- package/dist/{chunk-7ECQUETY.js → chunk-NDPOESVW.js} +1 -1
- package/dist/{chunk-QAXQ33SA.js → chunk-NHGOCUX7.js} +1 -1
- package/dist/{chunk-KU2FFKWS.js → chunk-NPZ5L2WQ.js} +1 -1
- package/dist/{chunk-Q37ESQSL.js → chunk-NZKH2RMQ.js} +1 -1
- package/dist/{chunk-PRH7XNAT.js → chunk-OC47FGOY.js} +1 -1
- package/dist/{chunk-Q2PKD73S.js → chunk-OFQJHWAS.js} +12 -10
- package/dist/{chunk-ABAIOLV5.js → chunk-OMN5UCMW.js} +102 -69
- package/dist/{chunk-2GSRRZ6B.js → chunk-PFHU3CW4.js} +1 -1
- package/dist/{chunk-4QQDACWU.js → chunk-PS2K6ZQ3.js} +12 -11
- package/dist/{chunk-36LCF2YG.js → chunk-R3EUVK3A.js} +4 -4
- package/dist/{chunk-B3K3752V.js → chunk-RXAQOAZI.js} +3 -3
- package/dist/{chunk-CEUWBQF2.js → chunk-RXQT5FTX.js} +52 -11
- package/dist/{chunk-UOBUESLS.js → chunk-SPPMPM7F.js} +1 -1
- package/dist/{chunk-2YFTIQM5.js → chunk-SR44ZNZF.js} +5 -5
- package/dist/{chunk-TJMSJDRS.js → chunk-UGGACQMD.js} +3 -3
- package/dist/{chunk-YHOMFTLQ.js → chunk-UHS3JZLN.js} +2 -2
- package/dist/{chunk-IL67TUP3.js → chunk-UNPDFIPQ.js} +2 -2
- package/dist/{chunk-GVEIAGZ5.js → chunk-UZRKR6NZ.js} +3 -3
- package/dist/{chunk-EJEAHC7H.js → chunk-V3LBQFQM.js} +1 -1
- package/dist/{chunk-62KQLGEP.js → chunk-V7TNHTHH.js} +1 -1
- package/dist/{chunk-OGRGVEWA.js → chunk-VMIWR724.js} +1 -1
- package/dist/{chunk-PKM6S4XN.js → chunk-VTCSUU4R.js} +5 -5
- package/dist/{chunk-I5M2KWB3.js → chunk-WW4OMRZX.js} +1 -1
- package/dist/{chunk-QAKTIVCT.js → chunk-X3AHEUQ5.js} +3 -3
- package/dist/{chunk-EX76IRRF.js → chunk-XTNCXIYR.js} +4 -4
- package/dist/{chunk-D4A277IY.js → chunk-Y7AX6BS4.js} +3 -3
- package/dist/{chunk-HEFRK3YI.js → chunk-YLCNW7YN.js} +2 -2
- package/dist/{chunk-B3IAV5CZ.js → chunk-YT3ENXBT.js} +2 -2
- package/dist/{codex-app-cards-switch-CCPJNIO3.js → codex-app-cards-switch-XP2H2CZO.js} +11 -11
- package/dist/{codex-desktop-launch-K435NZMM.js → codex-desktop-launch-QRFE2GHZ.js} +1 -1
- package/dist/{codex-session-launch-TFFGMVQQ.js → codex-session-launch-EUUWALWW.js} +18 -18
- package/dist/{config-T354BRNE.js → config-WBDMUTD4.js} +3 -3
- package/dist/{global-upgrade-PUHR6IUT.js → global-upgrade-ZXFLRGGV.js} +10 -10
- package/dist/{identity-SKMA72SN.js → identity-NUQ75BP7.js} +4 -4
- package/dist/{live-capabilities-OBNZ57FR.js → live-capabilities-SIQ25SSK.js} +5 -5
- package/dist/{paths-HXV4TRDG.js → paths-BGO6PZFZ.js} +3 -3
- package/dist/{reapply-2HEDTSBK.js → reapply-QOXNSRFA.js} +28 -28
- package/dist/src/index.js +29 -29
- package/dist/{upgrade-lock-DMC66XTA.js → upgrade-lock-B5HTMEWT.js} +4 -4
- package/dist/{usage-MBT3U2VX.js → usage-YHFALPKW.js} +3 -3
- package/package.json +1 -1
|
@@ -1,3 +1,67 @@
|
|
|
1
|
+
// ../contracts/src/redaction.ts
|
|
2
|
+
var CREDENTIAL_NAME = String.raw`(?:authorization|secret|token|password|passwd|api[_-]?key|access[_-]?key|client[_-]?secret|private[_-]?key)["']?`;
|
|
3
|
+
var CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}\s*[=:]\s*`;
|
|
4
|
+
var DISPLAYED_CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}(?:[ \t]*:[ \t]*|[ \t]+=[ \t]*|=)`;
|
|
5
|
+
var SHELL_INERT_UNIT = String.raw`(?:[A-Za-z0-9_\-./+=:@%^!#]|\\[^\s'"])`;
|
|
6
|
+
var SHELL_INERT_SINGLE_QUOTED_UNIT = String.raw`[A-Za-z0-9_\-./+=:@%^!#\\]`;
|
|
7
|
+
var SHELL_INERT_URL_PASSWORD_UNIT = String.raw`(?:[A-Za-z0-9_\-.+=:%^!#]|\\[^\s'"@/])`;
|
|
8
|
+
var PEM_LINE_BREAK = String.raw`(?:\r?\n|(?:\\r)?\\n)`;
|
|
9
|
+
var credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
|
|
10
|
+
pattern: new RegExp(String.raw`(${key})(?:(")${doubleQuoted}|(')${singleQuoted}|(["']?)${bare})`, "gi"),
|
|
11
|
+
replacement: "$1$2$3$4[redacted]$2$3"
|
|
12
|
+
});
|
|
13
|
+
var DISPLAYED_SECRET_SHAPES = {
|
|
14
|
+
separator: String.raw`[ \t]`,
|
|
15
|
+
privateKeyBody: String.raw`${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
|
|
16
|
+
urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
|
|
17
|
+
authorizationValue: `${SHELL_INERT_UNIT}+`,
|
|
18
|
+
credentialAssignment: credentialAssignmentRule(
|
|
19
|
+
DISPLAYED_CREDENTIAL_KEY,
|
|
20
|
+
`${SHELL_INERT_UNIT}*"`,
|
|
21
|
+
`${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`,
|
|
22
|
+
`${SHELL_INERT_UNIT}+`
|
|
23
|
+
)
|
|
24
|
+
};
|
|
25
|
+
var CUT_OFF_SECRET_SHAPES = {
|
|
26
|
+
separator: String.raw`\s`,
|
|
27
|
+
privateKeyBody: String.raw`[\s\S]*?`,
|
|
28
|
+
urlPassword: String.raw`[^\s@/]+`,
|
|
29
|
+
authorizationValue: String.raw`\S+`,
|
|
30
|
+
credentialAssignment: credentialAssignmentRule(
|
|
31
|
+
CREDENTIAL_KEY,
|
|
32
|
+
String.raw`(?:\\[\s\S]|[^"\\])*(?:"|\\?$)`,
|
|
33
|
+
"[^']*(?:'|$)",
|
|
34
|
+
String.raw`\S+`
|
|
35
|
+
)
|
|
36
|
+
};
|
|
37
|
+
var secretRedactionRules = (shapes) => [
|
|
38
|
+
{ pattern: /\bpk_[A-Za-z0-9_]+\.[A-Za-z0-9_]+/g, replacement: "[redacted]" },
|
|
39
|
+
{ pattern: new RegExp(String.raw`-----BEGIN[A-Z0-9 ]*PRIVATE KEY-----${shapes.privateKeyBody}-----END[A-Z0-9 ]*PRIVATE KEY-----`, "g"), replacement: "[redacted key]" },
|
|
40
|
+
{ pattern: /\bsk-[A-Za-z0-9_-]{16,}\b/g, replacement: "[redacted]" },
|
|
41
|
+
{ pattern: /\b[spr]k_(?:live|test)_[A-Za-z0-9]{8,}\b/g, replacement: "[redacted]" },
|
|
42
|
+
{ pattern: /\bwhsec_[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
|
|
43
|
+
{ pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g, replacement: "[redacted]" },
|
|
44
|
+
{ pattern: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g, replacement: "[redacted]" },
|
|
45
|
+
{ pattern: /\bglpat-[A-Za-z0-9_-]{20,}\b/g, replacement: "[redacted]" },
|
|
46
|
+
{ pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, replacement: "[redacted]" },
|
|
47
|
+
{ pattern: /\bAIza[A-Za-z0-9_-]{35}\b/g, replacement: "[redacted]" },
|
|
48
|
+
{ pattern: /\bAKIA[0-9A-Z]{16}\b/g, replacement: "[redacted]" },
|
|
49
|
+
{ pattern: /\bnpm_[A-Za-z0-9]{36}\b/g, replacement: "[redacted]" },
|
|
50
|
+
{ pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
|
|
51
|
+
{ pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: "[redacted]" },
|
|
52
|
+
{ pattern: new RegExp(String.raw`\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, "gi"), replacement: "$1[redacted]@" },
|
|
53
|
+
{ pattern: new RegExp(String.raw`\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, "gi"), replacement: "bearer [redacted]" },
|
|
54
|
+
{ pattern: new RegExp(String.raw`\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, "gi"), replacement: "authorization: [redacted]" },
|
|
55
|
+
shapes.credentialAssignment
|
|
56
|
+
];
|
|
57
|
+
var SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
|
|
58
|
+
var CUT_OFF_TEXT_REDACTION_RULES = secretRedactionRules(CUT_OFF_SECRET_SHAPES);
|
|
59
|
+
var HIGH_ENTROPY_RULE = { pattern: /[A-Za-z0-9+/]{40,}={0,2}/g, replacement: "[redacted]" };
|
|
60
|
+
var applyRedactionRules = (rules, text3) => rules.reduce((acc, rule) => acc.replace(rule.pattern, rule.replacement), text3);
|
|
61
|
+
var redactSecrets = (text3) => applyRedactionRules(SECRET_REDACTION_RULES, text3);
|
|
62
|
+
var redactSecretsFromContent = (text3) => applyRedactionRules(CUT_OFF_TEXT_REDACTION_RULES, text3);
|
|
63
|
+
var redactSecretsDeep = (text3) => redactSecrets(text3).replace(HIGH_ENTROPY_RULE.pattern, HIGH_ENTROPY_RULE.replacement);
|
|
64
|
+
|
|
1
65
|
// ../contracts/src/json-record.ts
|
|
2
66
|
var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
67
|
|
|
@@ -139,7 +203,8 @@ var CLAUDE_CONNECTOR_STEPS = [
|
|
|
139
203
|
"For proactive Cowork use, install the Pushary Cowork plugin/skill or paste the standing instructions into Settings > Cowork.",
|
|
140
204
|
"Ask Claude to send the test question below, answer it from Pushary, and confirm Claude receives your answer."
|
|
141
205
|
];
|
|
142
|
-
var
|
|
206
|
+
var CONNECTOR_SETUP_QUESTION = "Did this setup question reach you?";
|
|
207
|
+
var CLAUDE_CONNECTOR_TEST = `Use Pushary ask_user to ask \u201C${CONNECTOR_SETUP_QUESTION}\u201D with type \u201Cconfirm\u201D. Use agentName \u201CClaude Cowork - Setup check\u201D in Cowork or \u201CClaude Chat - Setup check\u201D in Chat. Wait for my answer and tell me which answer you received. Do not run a command or change any files.`;
|
|
143
208
|
var COWORK_STANDING_INSTRUCTIONS = `Pushary is connected as a connector. Use it proactively to reach me on my phone or Mac notch.
|
|
144
209
|
|
|
145
210
|
- When you need a decision or clarifying answer, call ask_user. Use type "confirm", "select", or "input" as appropriate. Ask once on one channel.
|
|
@@ -930,70 +995,6 @@ var compatibleTargetFiles = (profile) => {
|
|
|
930
995
|
return [...seen.values()];
|
|
931
996
|
};
|
|
932
997
|
|
|
933
|
-
// ../contracts/src/redaction.ts
|
|
934
|
-
var CREDENTIAL_NAME = String.raw`(?:authorization|secret|token|password|passwd|api[_-]?key|access[_-]?key|client[_-]?secret|private[_-]?key)["']?`;
|
|
935
|
-
var CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}\s*[=:]\s*`;
|
|
936
|
-
var DISPLAYED_CREDENTIAL_KEY = String.raw`${CREDENTIAL_NAME}(?:[ \t]*:[ \t]*|[ \t]+=[ \t]*|=)`;
|
|
937
|
-
var SHELL_INERT_UNIT = String.raw`(?:[A-Za-z0-9_\-./+=:@%^!#]|\\[^\s'"])`;
|
|
938
|
-
var SHELL_INERT_SINGLE_QUOTED_UNIT = String.raw`[A-Za-z0-9_\-./+=:@%^!#\\]`;
|
|
939
|
-
var SHELL_INERT_URL_PASSWORD_UNIT = String.raw`(?:[A-Za-z0-9_\-.+=:%^!#]|\\[^\s'"@/])`;
|
|
940
|
-
var PEM_LINE_BREAK = String.raw`(?:\r?\n|(?:\\r)?\\n)`;
|
|
941
|
-
var credentialAssignmentRule = (key, doubleQuoted, singleQuoted, bare) => ({
|
|
942
|
-
pattern: new RegExp(String.raw`(${key})(?:(")${doubleQuoted}|(')${singleQuoted}|(["']?)${bare})`, "gi"),
|
|
943
|
-
replacement: "$1$2$3$4[redacted]$2$3"
|
|
944
|
-
});
|
|
945
|
-
var DISPLAYED_SECRET_SHAPES = {
|
|
946
|
-
separator: String.raw`[ \t]`,
|
|
947
|
-
privateKeyBody: String.raw`${PEM_LINE_BREAK}?(?:(?:Proc-Type|DEK-Info): [A-Za-z0-9,-]+${PEM_LINE_BREAK})*(?:[A-Za-z0-9+/=\r\n]|\\[rn])*?`,
|
|
948
|
-
urlPassword: `${SHELL_INERT_URL_PASSWORD_UNIT}+`,
|
|
949
|
-
authorizationValue: `${SHELL_INERT_UNIT}+`,
|
|
950
|
-
credentialAssignment: credentialAssignmentRule(
|
|
951
|
-
DISPLAYED_CREDENTIAL_KEY,
|
|
952
|
-
`${SHELL_INERT_UNIT}*"`,
|
|
953
|
-
`${SHELL_INERT_SINGLE_QUOTED_UNIT}*'`,
|
|
954
|
-
`${SHELL_INERT_UNIT}+`
|
|
955
|
-
)
|
|
956
|
-
};
|
|
957
|
-
var CUT_OFF_SECRET_SHAPES = {
|
|
958
|
-
separator: String.raw`\s`,
|
|
959
|
-
privateKeyBody: String.raw`[\s\S]*?`,
|
|
960
|
-
urlPassword: String.raw`[^\s@/]+`,
|
|
961
|
-
authorizationValue: String.raw`\S+`,
|
|
962
|
-
credentialAssignment: credentialAssignmentRule(
|
|
963
|
-
CREDENTIAL_KEY,
|
|
964
|
-
String.raw`(?:\\[\s\S]|[^"\\])*(?:"|\\?$)`,
|
|
965
|
-
"[^']*(?:'|$)",
|
|
966
|
-
String.raw`\S+`
|
|
967
|
-
)
|
|
968
|
-
};
|
|
969
|
-
var secretRedactionRules = (shapes) => [
|
|
970
|
-
{ pattern: /\bpk_[A-Za-z0-9_]+\.[A-Za-z0-9_]+/g, replacement: "[redacted]" },
|
|
971
|
-
{ pattern: new RegExp(String.raw`-----BEGIN[A-Z0-9 ]*PRIVATE KEY-----${shapes.privateKeyBody}-----END[A-Z0-9 ]*PRIVATE KEY-----`, "g"), replacement: "[redacted key]" },
|
|
972
|
-
{ pattern: /\bsk-[A-Za-z0-9_-]{16,}\b/g, replacement: "[redacted]" },
|
|
973
|
-
{ pattern: /\b[spr]k_(?:live|test)_[A-Za-z0-9]{8,}\b/g, replacement: "[redacted]" },
|
|
974
|
-
{ pattern: /\bwhsec_[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
|
|
975
|
-
{ pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g, replacement: "[redacted]" },
|
|
976
|
-
{ pattern: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g, replacement: "[redacted]" },
|
|
977
|
-
{ pattern: /\bglpat-[A-Za-z0-9_-]{20,}\b/g, replacement: "[redacted]" },
|
|
978
|
-
{ pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, replacement: "[redacted]" },
|
|
979
|
-
{ pattern: /\bAIza[A-Za-z0-9_-]{35}\b/g, replacement: "[redacted]" },
|
|
980
|
-
{ pattern: /\bAKIA[0-9A-Z]{16}\b/g, replacement: "[redacted]" },
|
|
981
|
-
{ pattern: /\bnpm_[A-Za-z0-9]{36}\b/g, replacement: "[redacted]" },
|
|
982
|
-
{ pattern: /\bxai-[A-Za-z0-9]{16,}\b/g, replacement: "[redacted]" },
|
|
983
|
-
{ pattern: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g, replacement: "[redacted]" },
|
|
984
|
-
{ pattern: new RegExp(String.raw`\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)${shapes.urlPassword}@`, "gi"), replacement: "$1[redacted]@" },
|
|
985
|
-
{ pattern: new RegExp(String.raw`\bbearer${shapes.separator}+[A-Za-z0-9._~+/=-]+`, "gi"), replacement: "bearer [redacted]" },
|
|
986
|
-
{ pattern: new RegExp(String.raw`\bauthorization:${shapes.separator}*${shapes.authorizationValue}`, "gi"), replacement: "authorization: [redacted]" },
|
|
987
|
-
shapes.credentialAssignment
|
|
988
|
-
];
|
|
989
|
-
var SECRET_REDACTION_RULES = secretRedactionRules(DISPLAYED_SECRET_SHAPES);
|
|
990
|
-
var CUT_OFF_TEXT_REDACTION_RULES = secretRedactionRules(CUT_OFF_SECRET_SHAPES);
|
|
991
|
-
var HIGH_ENTROPY_RULE = { pattern: /[A-Za-z0-9+/]{40,}={0,2}/g, replacement: "[redacted]" };
|
|
992
|
-
var applyRedactionRules = (rules, text3) => rules.reduce((acc, rule) => acc.replace(rule.pattern, rule.replacement), text3);
|
|
993
|
-
var redactSecrets = (text3) => applyRedactionRules(SECRET_REDACTION_RULES, text3);
|
|
994
|
-
var redactSecretsFromContent = (text3) => applyRedactionRules(CUT_OFF_TEXT_REDACTION_RULES, text3);
|
|
995
|
-
var redactSecretsDeep = (text3) => redactSecrets(text3).replace(HIGH_ENTROPY_RULE.pattern, HIGH_ENTROPY_RULE.replacement);
|
|
996
|
-
|
|
997
998
|
// ../contracts/src/cursor.ts
|
|
998
999
|
var CURSOR_GATE_EVENTS = ["beforeShellExecution", "beforeMCPExecution", "preToolUse"];
|
|
999
1000
|
var CURSOR_GATE_SCRIPT = "pushary-gate.mjs";
|
|
@@ -1028,6 +1029,19 @@ var toolsCoveredByGateEntry = (coverage, matcher) => {
|
|
|
1028
1029
|
var toolMatches = (match, toolName) => match.kind === "named" ? match.tools.includes(toolName) : toolName.startsWith(match.prefix);
|
|
1029
1030
|
var cursorGateOwnsToolCall = (registration, toolName) => typeof toolName === "string" && registration.some((match) => toolMatches(match, toolName));
|
|
1030
1031
|
|
|
1032
|
+
// ../contracts/src/receipt-evidence.ts
|
|
1033
|
+
var RECEIPT_TARGET_MAX_LENGTH = 256;
|
|
1034
|
+
var GIT_BRANCH_MAX_LENGTH = 256;
|
|
1035
|
+
function isGitBranch(value) {
|
|
1036
|
+
return typeof value === "string" && value.length > 0 && value.length <= GIT_BRANCH_MAX_LENGTH && !/[\x00-\x20\x7f]/.test(value);
|
|
1037
|
+
}
|
|
1038
|
+
function parseGitBranch(value) {
|
|
1039
|
+
return isGitBranch(value) && redactSecrets(value) === value ? value : void 0;
|
|
1040
|
+
}
|
|
1041
|
+
function parseCommitId(value) {
|
|
1042
|
+
return typeof value === "string" && /^[a-f\d]{7,64}$/i.test(value) ? value.toLowerCase() : void 0;
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1031
1045
|
// ../contracts/src/conversation-text.ts
|
|
1032
1046
|
var INTERNAL_ENVELOPE = /(^|\n) {0,3}(?:<(total_tokens|task-notification)>[\s\S]*?(?:<\/\2>|$)[\t ]*)+/g;
|
|
1033
1047
|
var INCOMPLETE_ENVELOPE = /(^|\n) {0,3}<(?:total_tokens|task-notification)$/g;
|
|
@@ -2864,6 +2878,9 @@ var shellCommandStringOf = (shell, args) => {
|
|
|
2864
2878
|
return operand === void 0 || operand.expands ? UNREADABLE2 : { kind: "readable", script: operand.text };
|
|
2865
2879
|
};
|
|
2866
2880
|
|
|
2881
|
+
// ../contracts/src/chatgpt-plugin.ts
|
|
2882
|
+
var CHATGPT_CONNECTOR_TEST = `@Pushary use ask_user to ask \u201C${CONNECTOR_SETUP_QUESTION}\u201D with type \u201Cconfirm\u201D and agentName \u201CChatGPT - Setup check\u201D. Wait for my answer and tell me which answer you received.`;
|
|
2883
|
+
|
|
2867
2884
|
// ../contracts/src/partner-developer-guide.ts
|
|
2868
2885
|
var PARTNER_API_KEYS_URL = "https://pushary.com/dashboard/agent/settings";
|
|
2869
2886
|
var PARTNER_INSTALL_COMMAND = "npm i @pushary/server";
|
|
@@ -3487,6 +3504,12 @@ var SETUP_VERIFICATION_SENDER_THROUGH_0_95_5 = {
|
|
|
3487
3504
|
...SETUP_VERIFICATION_SENDER,
|
|
3488
3505
|
body: "Your AI agent can now reach you right here."
|
|
3489
3506
|
};
|
|
3507
|
+
var ROUND_TRIP_QUESTION = "Pushary delivery test. Answer either way to test returning an answer. This does not test your agent hooks.";
|
|
3508
|
+
var ROUND_TRIP_SENDER_NAMES = [
|
|
3509
|
+
SETUP_VERIFICATION_SENDER.agentName,
|
|
3510
|
+
DOCTOR_VERIFICATION_SENDER.agentName
|
|
3511
|
+
];
|
|
3512
|
+
var roundTripAsk = (agentName) => ({ question: ROUND_TRIP_QUESTION, type: "confirm", agentName, wait: false });
|
|
3490
3513
|
var AGENT_STOP_DEFAULT_SECONDS = 3600;
|
|
3491
3514
|
var TIMEOUT_ACTIONS = ["approve", "deny", "escalate", "wait"];
|
|
3492
3515
|
var isTimeoutAction = (value) => typeof value === "string" && TIMEOUT_ACTIONS.includes(value);
|
|
@@ -6638,7 +6661,8 @@ var PRETOOLUSE_HANDLED_TOOLS = /* @__PURE__ */ new Set([...PRETOOLUSE_GATED_TOOL
|
|
|
6638
6661
|
var isPermissionRequestOwnedByPreToolUse = (toolName, permissionMode, defers = shouldDeferToNativeMode) => PRETOOLUSE_HANDLED_TOOLS.has(toolName) && (isAskedInEveryMode(toolName) || !defers(permissionMode, toolName));
|
|
6639
6662
|
var CLAUDE_PRETOOLUSE_MATCHER = [...PRETOOLUSE_HANDLED_TOOLS].join("|");
|
|
6640
6663
|
var resolveGate = (input) => {
|
|
6641
|
-
const { modeState, config, toolName, toolInputs, cwd,
|
|
6664
|
+
const { modeState, config, toolName, toolInputs, cwd, sessionId } = input;
|
|
6665
|
+
const repoKey = input.sharedRepoKey ?? input.repoKey;
|
|
6642
6666
|
if (isPusharyOwnTool(toolName)) {
|
|
6643
6667
|
return {
|
|
6644
6668
|
kind: "defer",
|
|
@@ -6647,6 +6671,10 @@ var resolveGate = (input) => {
|
|
|
6647
6671
|
};
|
|
6648
6672
|
}
|
|
6649
6673
|
if (modeState.kill) return { kind: "kill", reason: KILL_REASON };
|
|
6674
|
+
if (input.sharedRepoKey && input.repoKey && input.sharedRepoKey !== input.repoKey) {
|
|
6675
|
+
const legacyPolicy = (toolInputs.length ? toolInputs : [void 0]).map((toolInput) => resolvePolicy(config, toolName, modeState.mode, toolInput, cwd, input.repoKey, sessionId)).find((policy2) => policy2.repoKey === input.repoKey && verdictForPolicy(policy2) === "deny");
|
|
6676
|
+
if (legacyPolicy) return { kind: "deny", policy: legacyPolicy, reason: `Denied by policy for ${legacyPolicy.tool}` };
|
|
6677
|
+
}
|
|
6650
6678
|
const policy = resolvePolicyAcross(config, toolName, modeState.mode, toolInputs, cwd, repoKey, sessionId);
|
|
6651
6679
|
const verdict = verdictForPolicy(policy);
|
|
6652
6680
|
const autoApproves = verdict === "allow";
|
|
@@ -7128,6 +7156,12 @@ var hookActivationResult = (report) => {
|
|
|
7128
7156
|
};
|
|
7129
7157
|
|
|
7130
7158
|
export {
|
|
7159
|
+
redactSecrets,
|
|
7160
|
+
redactSecretsFromContent,
|
|
7161
|
+
redactSecretsDeep,
|
|
7162
|
+
RECEIPT_TARGET_MAX_LENGTH,
|
|
7163
|
+
parseGitBranch,
|
|
7164
|
+
parseCommitId,
|
|
7131
7165
|
conversationText,
|
|
7132
7166
|
extractMessageText,
|
|
7133
7167
|
NativeInputAgent,
|
|
@@ -7195,9 +7229,6 @@ export {
|
|
|
7195
7229
|
hookCompatibleProfile,
|
|
7196
7230
|
hookCompatibleProfileBySource,
|
|
7197
7231
|
compatibleTargetFiles,
|
|
7198
|
-
redactSecrets,
|
|
7199
|
-
redactSecretsFromContent,
|
|
7200
|
-
redactSecretsDeep,
|
|
7201
7232
|
CURSOR_GATE_EVENTS,
|
|
7202
7233
|
CURSOR_GATE_SCRIPT,
|
|
7203
7234
|
CURSOR_GATE_COVERAGE,
|
|
@@ -7261,6 +7292,7 @@ export {
|
|
|
7261
7292
|
timeoutActionWithoutLocalPrompt,
|
|
7262
7293
|
SETUP_VERIFICATION_SENDER,
|
|
7263
7294
|
DOCTOR_VERIFICATION_SENDER,
|
|
7295
|
+
roundTripAsk,
|
|
7264
7296
|
AGENT_STOP_DEFAULT_SECONDS,
|
|
7265
7297
|
isTimeoutAction,
|
|
7266
7298
|
plainAskOf,
|
|
@@ -7303,6 +7335,7 @@ export {
|
|
|
7303
7335
|
isAnswerSource,
|
|
7304
7336
|
denyReasonFrom,
|
|
7305
7337
|
classifyConfirmResponse,
|
|
7338
|
+
classifyDecisionRisk,
|
|
7306
7339
|
buildDecisionEpisodeFeatures,
|
|
7307
7340
|
resolveAutoResolveOrigin,
|
|
7308
7341
|
resolvePolicy,
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
postLiveSession,
|
|
5
5
|
postLiveSessionUntilAccepted,
|
|
6
6
|
startLiveSessionHeartbeat
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-SPPMPM7F.js";
|
|
8
8
|
import {
|
|
9
9
|
CommandReceipts,
|
|
10
10
|
controllerCommandSchema
|
|
@@ -14,24 +14,24 @@ import {
|
|
|
14
14
|
describeIdleWindow,
|
|
15
15
|
idleDeadlinePassed,
|
|
16
16
|
startProcessOwnership
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2BXWBKVN.js";
|
|
18
18
|
import {
|
|
19
19
|
spawnClaude
|
|
20
20
|
} from "./chunk-XHKBHWLX.js";
|
|
21
21
|
import {
|
|
22
|
-
|
|
23
|
-
} from "./chunk-
|
|
22
|
+
repositoryScopeFor
|
|
23
|
+
} from "./chunk-RXQT5FTX.js";
|
|
24
24
|
import {
|
|
25
25
|
isAskUserResponse,
|
|
26
26
|
isDecisionStopped,
|
|
27
27
|
isWaitForAnswerResponse,
|
|
28
28
|
withdrawQuestion,
|
|
29
29
|
writeDegraded
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-SR44ZNZF.js";
|
|
31
31
|
import {
|
|
32
32
|
callMcpTool,
|
|
33
33
|
isRetryable
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-XTNCXIYR.js";
|
|
35
35
|
import {
|
|
36
36
|
AGENT_QUESTION_DESCRIPTION_MAX,
|
|
37
37
|
AGENT_QUESTION_HEADER_MAX,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
parseCodexQuestions,
|
|
53
53
|
planElicitationAsk,
|
|
54
54
|
readElicitationFields
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-OMN5UCMW.js";
|
|
56
56
|
|
|
57
57
|
// src/codex-question-owner.ts
|
|
58
58
|
import { createHash } from "crypto";
|
|
@@ -114,8 +114,8 @@ var CodexNativeApprovals = class {
|
|
|
114
114
|
const changes = this.patches.get(this.patchKey(p));
|
|
115
115
|
const approval = parseCodexNativeApproval({ method: message.method, params: p, ...changes ? { changes } : {} });
|
|
116
116
|
if (!approval || approval.threadId !== threadId) return false;
|
|
117
|
-
const repoKey =
|
|
118
|
-
const subjectHash = createHash2("sha256").update(canonicalJsonText({ request: approval.request, cwd, repoKey })).digest("hex");
|
|
117
|
+
const { repoKey, sharedRepoKey } = repositoryScopeFor(approval.cwd ?? cwd);
|
|
118
|
+
const subjectHash = createHash2("sha256").update(canonicalJsonText({ request: approval.request, cwd, repoKey, ...sharedRepoKey ? { sharedRepoKey } : {} })).digest("hex");
|
|
119
119
|
const existing = this.pending.get(message.id);
|
|
120
120
|
if (existing) {
|
|
121
121
|
if (existing.owner.subjectHash !== subjectHash) this.retire(message.id, existing, false);
|
|
@@ -131,7 +131,7 @@ var CodexNativeApprovals = class {
|
|
|
131
131
|
subjectHash,
|
|
132
132
|
method: approval.request.method
|
|
133
133
|
};
|
|
134
|
-
const pending = { owner, approval, repoKey, cwd, controller: new AbortController(), replied: false, creating: true, correlationId: randomUUID() };
|
|
134
|
+
const pending = { owner, approval, repoKey, sharedRepoKey, cwd, controller: new AbortController(), replied: false, creating: true, correlationId: randomUUID() };
|
|
135
135
|
this.pending.set(message.id, pending);
|
|
136
136
|
const task = this.answer(pending).finally(() => {
|
|
137
137
|
this.tasks.delete(task);
|
|
@@ -191,7 +191,8 @@ var CodexNativeApprovals = class {
|
|
|
191
191
|
localSurfaceAvailable: this.options.shared,
|
|
192
192
|
acceptsAllowReply: true,
|
|
193
193
|
cwd: pending.cwd,
|
|
194
|
-
repoKey: pending.repoKey
|
|
194
|
+
repoKey: pending.repoKey,
|
|
195
|
+
sharedRepoKey: pending.sharedRepoKey
|
|
195
196
|
});
|
|
196
197
|
const body = await response.json();
|
|
197
198
|
if (!response.ok || !record(body)) throw new Error("Native approval service unavailable");
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compatibleConfigFile,
|
|
3
3
|
hasCompatibleHooks
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CA4PS7XT.js";
|
|
5
5
|
import {
|
|
6
6
|
pusharyHookExecutable
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ITGPUTFV.js";
|
|
8
8
|
import {
|
|
9
9
|
isProtectedByScope,
|
|
10
10
|
registerHookEntry
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CHVXLS7U.js";
|
|
12
12
|
import {
|
|
13
13
|
isRecord
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OMN5UCMW.js";
|
|
15
15
|
|
|
16
16
|
// src/cursor-config.ts
|
|
17
17
|
var hookCommandOf = (entry) => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findNativeClaudeInstall
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-66VEUAN5.js";
|
|
4
4
|
import {
|
|
5
5
|
parseVersion
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Y7AX6BS4.js";
|
|
7
7
|
import {
|
|
8
8
|
isRecord
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OMN5UCMW.js";
|
|
10
10
|
|
|
11
11
|
// src/setup/agent-probe.ts
|
|
12
12
|
import { execSync } from "child_process";
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
localRepoKey,
|
|
3
|
-
normalizeRepoRemote
|
|
4
|
-
|
|
3
|
+
normalizeRepoRemote,
|
|
4
|
+
parseGitBranch
|
|
5
|
+
} from "./chunk-OMN5UCMW.js";
|
|
5
6
|
|
|
6
7
|
// src/repo.ts
|
|
7
8
|
import { existsSync, readFileSync, statSync } from "fs";
|
|
8
9
|
import { basename, dirname, isAbsolute, join, resolve } from "path";
|
|
9
10
|
var MAX_PARENT_WALK = 64;
|
|
10
11
|
var GIT_FILE_PREFIX = "gitdir:";
|
|
12
|
+
var GIT_DIR_NAME = ".git";
|
|
11
13
|
var findGitDir = (startDir) => {
|
|
12
14
|
let current = resolve(startDir);
|
|
13
15
|
for (let depth = 0; depth < MAX_PARENT_WALK; depth += 1) {
|
|
14
|
-
const candidate = join(current,
|
|
16
|
+
const candidate = join(current, GIT_DIR_NAME);
|
|
15
17
|
try {
|
|
16
18
|
if (existsSync(candidate)) {
|
|
17
19
|
if (statSync(candidate).isDirectory()) return candidate;
|
|
@@ -29,16 +31,28 @@ var findGitDir = (startDir) => {
|
|
|
29
31
|
}
|
|
30
32
|
return void 0;
|
|
31
33
|
};
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
var COMMON_DIR_FILE = "commondir";
|
|
35
|
+
var mainGitDirOf = (gitDir) => {
|
|
36
|
+
try {
|
|
37
|
+
const pointer = readFileSync(join(gitDir, COMMON_DIR_FILE), "utf-8").trim();
|
|
38
|
+
if (pointer.length === 0) return gitDir;
|
|
39
|
+
return isAbsolute(pointer) ? pointer : resolve(gitDir, pointer);
|
|
40
|
+
} catch {
|
|
41
|
+
return gitDir;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var configPathFor = (gitDir) => join(mainGitDirOf(gitDir), "config");
|
|
45
|
+
var GIT_DIR_SUFFIX = ".git";
|
|
46
|
+
var projectRootOf = (gitDir, cwd) => {
|
|
47
|
+
const mainGitDir = mainGitDirOf(gitDir);
|
|
48
|
+
if (basename(mainGitDir) === GIT_DIR_NAME) return dirname(mainGitDir);
|
|
49
|
+
return gitDir.endsWith(GIT_DIR_SUFFIX) ? dirname(gitDir) : cwd;
|
|
35
50
|
};
|
|
36
51
|
var ORIGIN_SECTION = /^\[remote "origin"\]/;
|
|
37
52
|
var SECTION_HEADER = /^\[/;
|
|
38
53
|
var URL_LINE = /^url\s*=\s*(.+)$/;
|
|
39
|
-
var
|
|
54
|
+
var readConfiguredOrigin = (configPath) => {
|
|
40
55
|
try {
|
|
41
|
-
const configPath = configPathFor(gitDir);
|
|
42
56
|
if (!existsSync(configPath)) return void 0;
|
|
43
57
|
let inOrigin = false;
|
|
44
58
|
for (const rawLine of readFileSync(configPath, "utf-8").split("\n")) {
|
|
@@ -55,6 +69,7 @@ var readOriginRemote = (gitDir) => {
|
|
|
55
69
|
}
|
|
56
70
|
return void 0;
|
|
57
71
|
};
|
|
72
|
+
var readOriginRemote = (gitDir) => readConfiguredOrigin(configPathFor(gitDir));
|
|
58
73
|
var deriveRepoKey = (cwd) => {
|
|
59
74
|
const dir = cwd && cwd.length > 0 ? cwd : process.cwd();
|
|
60
75
|
try {
|
|
@@ -63,8 +78,7 @@ var deriveRepoKey = (cwd) => {
|
|
|
63
78
|
const remote = readOriginRemote(gitDir);
|
|
64
79
|
const normalized = remote ? normalizeRepoRemote(remote) : void 0;
|
|
65
80
|
if (normalized) return normalized;
|
|
66
|
-
|
|
67
|
-
return localRepoKey(basename(root));
|
|
81
|
+
return localRepoKey(basename(projectRootOf(gitDir, dir)));
|
|
68
82
|
}
|
|
69
83
|
return localRepoKey(basename(resolve(dir)));
|
|
70
84
|
} catch {
|
|
@@ -86,7 +100,34 @@ var repoKeyFor = (cwd) => {
|
|
|
86
100
|
repoKeyCache.set(dir, derived);
|
|
87
101
|
return derived;
|
|
88
102
|
};
|
|
103
|
+
function branchFor(cwd) {
|
|
104
|
+
try {
|
|
105
|
+
const gitDir = findGitDir(cwd || process.cwd());
|
|
106
|
+
if (!gitDir) return void 0;
|
|
107
|
+
const headPath = join(gitDir, "HEAD");
|
|
108
|
+
if (statSync(headPath).size > 1024) return void 0;
|
|
109
|
+
const head = readFileSync(headPath, "utf8").trim();
|
|
110
|
+
const prefix = "ref: refs/heads/";
|
|
111
|
+
return head.startsWith(prefix) ? parseGitBranch(head.slice(prefix.length)) : void 0;
|
|
112
|
+
} catch {
|
|
113
|
+
return void 0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
var repositoryScopeFor = (cwd) => {
|
|
117
|
+
const sharedRepoKey = repoKeyFor(cwd);
|
|
118
|
+
if (process.env[REPO_KEY_ENV]?.trim()) return { repoKey: sharedRepoKey };
|
|
119
|
+
const dir = cwd || process.cwd();
|
|
120
|
+
const gitDir = findGitDir(dir);
|
|
121
|
+
if (!gitDir) return { repoKey: sharedRepoKey };
|
|
122
|
+
const index = gitDir.replace(/\\/g, "/").indexOf("/worktrees/");
|
|
123
|
+
const path = index === -1 ? join(gitDir, "config") : join(gitDir.slice(0, index), "config");
|
|
124
|
+
const remote = readConfiguredOrigin(path);
|
|
125
|
+
const repoKey = (remote ? normalizeRepoRemote(remote) : void 0) ?? localRepoKey(basename(gitDir.endsWith(".git") ? dirname(gitDir) : dir));
|
|
126
|
+
return { repoKey, ...sharedRepoKey && repoKey !== sharedRepoKey ? { sharedRepoKey } : {} };
|
|
127
|
+
};
|
|
89
128
|
|
|
90
129
|
export {
|
|
91
|
-
repoKeyFor
|
|
130
|
+
repoKeyFor,
|
|
131
|
+
branchFor,
|
|
132
|
+
repositoryScopeFor
|
|
92
133
|
};
|
|
@@ -6,18 +6,18 @@ import {
|
|
|
6
6
|
McpToolError,
|
|
7
7
|
SubscriptionRequiredError,
|
|
8
8
|
callMcpTool
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XTNCXIYR.js";
|
|
10
10
|
import {
|
|
11
11
|
installNetworkDefaults,
|
|
12
12
|
isNetworkFailure
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CO6TQ44W.js";
|
|
14
14
|
import {
|
|
15
15
|
clientReportClaims
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-CHVXLS7U.js";
|
|
17
17
|
import {
|
|
18
18
|
getApiKey,
|
|
19
19
|
getBaseUrl
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-NPZ5L2WQ.js";
|
|
21
21
|
import {
|
|
22
22
|
ASK_AGENT_NAME_MAX,
|
|
23
23
|
CLIENT_REPORT_PATH,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
TOOL_FAILURE_CODES,
|
|
27
27
|
degradedLine,
|
|
28
28
|
truncateLine
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-OMN5UCMW.js";
|
|
30
30
|
|
|
31
31
|
// src/api.ts
|
|
32
32
|
import { randomUUID } from "crypto";
|
|
@@ -9,20 +9,20 @@ import {
|
|
|
9
9
|
installedCodexApp,
|
|
10
10
|
readCodexAppRuntime,
|
|
11
11
|
shellQuoted
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YT3ENXBT.js";
|
|
13
13
|
import {
|
|
14
14
|
writeHuman
|
|
15
15
|
} from "./chunk-QCGNGEGE.js";
|
|
16
16
|
import {
|
|
17
17
|
xml
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-CFD3IESN.js";
|
|
19
19
|
import {
|
|
20
20
|
CODEX_APP_LAUNCH_AT_LOGIN_VERB,
|
|
21
21
|
CODEX_APP_LAUNCH_VARIABLE
|
|
22
22
|
} from "./chunk-E46NE7FB.js";
|
|
23
23
|
import {
|
|
24
24
|
writeFileAtomic
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-Y7AX6BS4.js";
|
|
26
26
|
|
|
27
27
|
// src/codex-app-cards-switch.ts
|
|
28
28
|
import { execFileSync as execFileSync2 } from "child_process";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoUpdateLock
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CHVXLS7U.js";
|
|
4
4
|
import {
|
|
5
5
|
installPackageGlobally,
|
|
6
6
|
npmErrorMessage,
|
|
7
7
|
writeJsonAtomic
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Y7AX6BS4.js";
|
|
9
9
|
|
|
10
10
|
// src/upgrade-lock.ts
|
|
11
11
|
import { fork } from "child_process";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pusharyFetch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CO6TQ44W.js";
|
|
4
4
|
import {
|
|
5
5
|
getBaseUrl
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NPZ5L2WQ.js";
|
|
7
7
|
import {
|
|
8
8
|
NetworkError
|
|
9
9
|
} from "./chunk-PPY5N2E6.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
isValidApiKey,
|
|
15
15
|
normalizeKeyScope
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-OMN5UCMW.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;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readMacAppAgentKey
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DYNMKVNO.js";
|
|
4
4
|
import {
|
|
5
5
|
API_KEYS_PATH
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-FTJ5DQL7.js";
|
|
7
7
|
import {
|
|
8
8
|
findExportedKeyLines,
|
|
9
9
|
isAdoptedMacAppKey,
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
readConfigFileKey,
|
|
14
14
|
readKeySource,
|
|
15
15
|
readMacAppKeyPrefix
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LANGH7UF.js";
|
|
17
17
|
import {
|
|
18
18
|
absoluteUrl
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-UZRKR6NZ.js";
|
|
20
20
|
import {
|
|
21
21
|
isValidApiKey
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-OMN5UCMW.js";
|
|
23
23
|
|
|
24
24
|
// src/key-revocation.ts
|
|
25
25
|
var SELF_REVOKE_PATH = "/api/v1/server/keys/self/revoke";
|