pushary 1.9.69 → 1.9.71
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/dist/{api-KUJYE5YZ.js → api-HEIRLMTZ.js} +10 -10
- package/dist/bin/pushary-bell-hook.js +25 -25
- package/dist/bin/pushary-bell.js +10 -10
- package/dist/bin/pushary-claude.js +26 -26
- package/dist/bin/pushary-clean.js +33 -33
- package/dist/bin/pushary-codex-bridge.js +21 -21
- package/dist/bin/pushary-codex-hook.js +30 -30
- package/dist/bin/pushary-codex-session.js +8 -8
- package/dist/bin/pushary-codex.js +13 -13
- package/dist/bin/pushary-connect.js +26 -26
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +38 -38
- package/dist/bin/pushary-disconnect.js +25 -25
- package/dist/bin/pushary-doctor.js +41 -41
- package/dist/bin/pushary-elicitation-hook.js +25 -25
- package/dist/bin/pushary-gemini-bridge.js +15 -15
- package/dist/bin/pushary-gemini-hook.js +27 -27
- package/dist/bin/pushary-hook.js +29 -29
- package/dist/bin/pushary-login.js +20 -20
- package/dist/bin/pushary-logout.js +24 -24
- package/dist/bin/pushary-mcp.js +11 -11
- package/dist/bin/pushary-mode.js +15 -15
- 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 +29 -29
- 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 +26 -26
- package/dist/bin/pushary-session-start-hook.js +34 -34
- package/dist/bin/pushary-setup.js +45 -45
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +31 -31
- package/dist/bin/pushary-stop-hook.js +24 -24
- package/dist/bin/pushary-stopfailure-hook.js +24 -24
- package/dist/bin/pushary-suggestions.js +15 -15
- package/dist/bin/pushary-transcript-register.js +16 -16
- package/dist/bin/pushary-transcripts.js +18 -18
- package/dist/bin/pushary-upgrade.js +39 -39
- package/dist/bin/pushary-wait.js +15 -15
- package/dist/bin/pushary.js +7 -7
- package/dist/{chunk-KVXX5M5A.js → chunk-25W6AD3W.js} +6 -6
- package/dist/{chunk-SCKZVTFV.js → chunk-2XD4TTUM.js} +10 -10
- package/dist/{chunk-SKTZKAGH.js → chunk-3CN2EFKK.js} +1 -1
- package/dist/{chunk-XZKSUJ55.js → chunk-3FY5ZPIZ.js} +1 -1
- package/dist/{chunk-7FWZNWIO.js → chunk-4QPF4BGP.js} +6 -6
- package/dist/{chunk-3HWDWR42.js → chunk-4XFFGFHN.js} +13 -13
- package/dist/{chunk-HZNZJTGH.js → chunk-5NQ3SMVP.js} +9 -9
- package/dist/{chunk-VKZ3RJ5U.js → chunk-5WHSFMV2.js} +1 -1
- package/dist/{chunk-Z3FMJ567.js → chunk-6W2ASRZO.js} +38 -48
- package/dist/{chunk-EAJUFO7Q.js → chunk-7OYWCOVC.js} +4 -4
- package/dist/{chunk-METUT7V4.js → chunk-AERRQEWZ.js} +2 -2
- package/dist/{chunk-72ILLFCY.js → chunk-AN26S5DC.js} +6 -6
- package/dist/{chunk-OYFGZARB.js → chunk-AUOVB62W.js} +3 -3
- package/dist/{chunk-X2MTVD4W.js → chunk-AZ56FPRG.js} +1 -1
- package/dist/{chunk-PK6WI4HH.js → chunk-B3KPRSCM.js} +5 -5
- package/dist/{chunk-YSOZVBFW.js → chunk-BJRLJJS2.js} +1 -1
- package/dist/{chunk-UC2J5RR4.js → chunk-BZ7XGS5L.js} +1 -1
- package/dist/{chunk-2REVIFLS.js → chunk-C3YAMEO2.js} +2 -2
- package/dist/{chunk-GZHQQP7J.js → chunk-D536PHXF.js} +4 -4
- package/dist/{chunk-SSJDAX4E.js → chunk-DOMDCMGC.js} +5 -5
- package/dist/{chunk-C4EDAHXI.js → chunk-EBOGB7JR.js} +1 -1
- package/dist/{chunk-ZK5WYAMI.js → chunk-EVJRITSI.js} +1 -1
- package/dist/{chunk-7XS44DQX.js → chunk-EZHM6I2V.js} +4 -4
- package/dist/{chunk-7CW63ZK3.js → chunk-FA6INGK7.js} +3 -3
- package/dist/{chunk-QZPRCMPV.js → chunk-FTOKESSK.js} +1 -1
- package/dist/{chunk-TXRV7AOA.js → chunk-G3J5JKEJ.js} +6 -6
- package/dist/{chunk-VIQ5OS5E.js → chunk-GIE7PLZD.js} +4 -4
- package/dist/{chunk-WOJW23ZD.js → chunk-HR6M44CX.js} +7 -7
- package/dist/{chunk-4BXI6WJI.js → chunk-IPSO7DUB.js} +3 -3
- package/dist/{chunk-JWRDCANS.js → chunk-ITKAMUHG.js} +3 -3
- package/dist/{chunk-N2WAXSJY.js → chunk-IYMYGKFB.js} +9 -9
- package/dist/{chunk-AUYMNTUX.js → chunk-J7BLYQ7Z.js} +4 -4
- package/dist/{chunk-PIGBU7D3.js → chunk-JEZGDP55.js} +5 -5
- package/dist/{chunk-RQOT6QL3.js → chunk-JGEPODEP.js} +453 -16
- package/dist/{chunk-QE22XDUK.js → chunk-JMACQEPU.js} +2 -2
- package/dist/{chunk-5UIA5GLL.js → chunk-KGZH5RTB.js} +6 -6
- package/dist/{chunk-NWN6GGJL.js → chunk-LA3MMHLO.js} +2 -2
- package/dist/{chunk-YAA6MT6O.js → chunk-LKAO35SY.js} +3 -3
- package/dist/{chunk-VHMZPN3N.js → chunk-LKKIFFUC.js} +1 -1
- package/dist/{chunk-NSR6IFA6.js → chunk-LMP2FAS6.js} +3 -3
- package/dist/{chunk-DJPNVVJQ.js → chunk-LRS4TJU2.js} +4 -4
- package/dist/{chunk-FZ2SHXUE.js → chunk-LWAYXE7G.js} +2 -2
- package/dist/{chunk-CPYVVEJP.js → chunk-MGF7D2ZL.js} +6 -6
- package/dist/{chunk-CJ3W7XRU.js → chunk-MZ6GL46A.js} +1 -1
- package/dist/{chunk-AVKD5QS4.js → chunk-NHC5YUH6.js} +5 -5
- package/dist/{chunk-GMHQYX3D.js → chunk-NPO3ZTR4.js} +1 -1
- package/dist/{chunk-FULXDMAP.js → chunk-OJFOIKRM.js} +3 -3
- package/dist/{chunk-D5G2HSQ6.js → chunk-ONZ3UGNY.js} +2 -2
- package/dist/{chunk-5LQCADHK.js → chunk-QSZQCKPB.js} +5 -5
- package/dist/{chunk-N2FDORN6.js → chunk-QWCOMSDH.js} +3 -3
- package/dist/{chunk-274CV7IW.js → chunk-SMIU5URV.js} +2 -2
- package/dist/{chunk-BRWU4NT4.js → chunk-SWQTCKLM.js} +6 -6
- package/dist/{chunk-OXOYS3UG.js → chunk-T7FPZN5V.js} +3 -3
- package/dist/{chunk-DTENGECG.js → chunk-TATE22GH.js} +1 -1
- package/dist/{chunk-XLKO2XEG.js → chunk-VMQEB56V.js} +2 -2
- package/dist/{chunk-LWFSXSRG.js → chunk-VSQDVH43.js} +1 -1
- package/dist/{chunk-NFWZVY25.js → chunk-WOZLV3LN.js} +4 -4
- package/dist/{chunk-32OSSYGZ.js → chunk-X2KK42JA.js} +1 -1
- package/dist/{chunk-HGXWC4WT.js → chunk-X6CSZSSQ.js} +4 -4
- package/dist/{chunk-7YJSDXLM.js → chunk-XJMUEOXT.js} +1 -1
- package/dist/{chunk-KHOWMC57.js → chunk-XSUWXBHF.js} +3 -3
- package/dist/{chunk-54O76CMR.js → chunk-XZTFYFC7.js} +2 -2
- package/dist/{chunk-FD6KOIT2.js → chunk-YG3NFC5N.js} +5 -5
- package/dist/{chunk-2LI3DF7Q.js → chunk-YMBJU4CT.js} +2 -2
- package/dist/{chunk-77L2TNJW.js → chunk-YRWGCYHH.js} +1 -1
- package/dist/{chunk-JQMERLQS.js → chunk-YX6VQGLG.js} +2 -2
- package/dist/{chunk-UXN73YAE.js → chunk-ZBPBX656.js} +3 -3
- package/dist/{chunk-AQA63ZWO.js → chunk-ZZ7VB6QC.js} +3 -3
- package/dist/{codex-app-cards-switch-GBTS3OQW.js → codex-app-cards-switch-A77HUVKT.js} +11 -11
- package/dist/{codex-desktop-launch-S6OULJDZ.js → codex-desktop-launch-FSHKRCRL.js} +1 -1
- package/dist/{codex-session-launch-K2KE3AD5.js → codex-session-launch-VAXYRXK6.js} +18 -18
- package/dist/{config-OBGYURFX.js → config-SMJ2QWQF.js} +3 -3
- package/dist/{global-upgrade-ZMWRPO5G.js → global-upgrade-63X4UFFP.js} +10 -10
- package/dist/{identity-OLRKDYFR.js → identity-3L2YHAZP.js} +4 -4
- package/dist/{live-capabilities-LZECCGFQ.js → live-capabilities-QBQX7RFM.js} +5 -5
- package/dist/{paths-YUF2TFTA.js → paths-5VPGINSP.js} +3 -3
- package/dist/{reapply-5SZSMZJJ.js → reapply-MSIZJULX.js} +27 -27
- package/dist/src/index.js +28 -28
- package/dist/{upgrade-lock-MSBKXUKM.js → upgrade-lock-KKW6XZ7B.js} +4 -4
- package/dist/{usage-KX2HN47E.js → usage-ICF3NG4F.js} +3 -3
- package/package.json +1 -1
|
@@ -4073,6 +4073,7 @@ var changesProduction = (invocation) => {
|
|
|
4073
4073
|
const words = wordsOfInvocation(invocation);
|
|
4074
4074
|
return words.some((word, index) => wordSelectsProduction(word, words[index - 1])) && (deployCliChangesSomething(words) || SCHEMA_CHANGE_WORD.test(normalizedInvocation(invocation)));
|
|
4075
4075
|
};
|
|
4076
|
+
var SQL_WORDS_THAT_CAN_FOLLOW_A_COLUMN = String.raw`(?:from|is|in|and|or|asc|desc|between|like|then|else|end|when|having|union|order\s+by|group\s+by|limit\s+\d+|offset\s+\d+)`;
|
|
4076
4077
|
var SQL_WRITE_STATEMENT = new RegExp([
|
|
4077
4078
|
String.raw`\b(?:insert|update|delete|merge|upsert|alter|create|drop|truncate|grant|revoke|copy|vacuum|reindex|rename|attach|detach)\b`,
|
|
4078
4079
|
String.raw`\breplace\s+into\b`,
|
|
@@ -4081,9 +4082,17 @@ var SQL_WRITE_STATEMENT = new RegExp([
|
|
|
4081
4082
|
String.raw`\bset\s+(?:global|persist)\b`,
|
|
4082
4083
|
String.raw`\bkill\s+(?:query|connection|\d)`,
|
|
4083
4084
|
String.raw`\bcall\b`,
|
|
4084
|
-
String.raw`\
|
|
4085
|
+
String.raw`\bexec(?:ute)?(?:\s*\(|\s+(?!(?:${SQL_WORDS_THAT_CAN_FOLLOW_A_COLUMN}|as(?!\s+(?:login|user|caller|owner|self)\b))\b)[\w@\["])`,
|
|
4086
|
+
String.raw`(?:^|;|\b(?:then|else|do|loop|declare|as|is)\b)\s*begin\s+(?!(?:transaction|work|isolation|deferred|immediate|exclusive|read\s+(?:only|write)|as|${SQL_WORDS_THAT_CAN_FOLLOW_A_COLUMN})\b)[^\s;,)]`,
|
|
4087
|
+
String.raw`\bset\s+@@(?:global|persist)`,
|
|
4088
|
+
String.raw`\brefresh\s+materialized\b`,
|
|
4089
|
+
String.raw`\bcomment\s+(?:if\s+exists\s+)?on\s+(?:table|foreign\s+table|column|schema|database|catalog|warehouse|function|procedure|routine|procedural\s+language|aggregate|view|materialized\s+view|index|type|role|extension|trigger|event\s+trigger|constraint|sequence|policy|domain|server|foreign\s+data\s+wrapper|large\s+object|tablespace|publication|subscription|macro|collation|conversion|operator|cast|language|rule|statistics|text\s+search|transform|access\s+method)\b`,
|
|
4090
|
+
String.raw`\bexport\s+database\b`,
|
|
4091
|
+
String.raw`\bload_extension\b`,
|
|
4092
|
+
String.raw`\blo_(?:export|import|unlink)\b`,
|
|
4093
|
+
String.raw`\bdblink_exec\b`,
|
|
4094
|
+
String.raw`\bpg_drop_replication_slot\b`,
|
|
4085
4095
|
String.raw`\bprepare\s+\S+\s+from\b`,
|
|
4086
|
-
String.raw`\bselect\b[^;]*\binto\b(?!\s*@)`,
|
|
4087
4096
|
String.raw`(?:^|;)\s*lock\b`,
|
|
4088
4097
|
String.raw`(?:^|;)\s*do\b`,
|
|
4089
4098
|
String.raw`\bpg_terminate_backend\b`,
|
|
@@ -4092,9 +4101,17 @@ var SQL_WRITE_STATEMENT = new RegExp([
|
|
|
4092
4101
|
String.raw`\.(?:insert|update|delete|replace|remove|drop|rename|create|bulkwrite|findoneand)\w*\s*\(`
|
|
4093
4102
|
].join("|"), "i");
|
|
4094
4103
|
var SQL_READ_PHRASE = /\bshow\s+create\b/gi;
|
|
4104
|
+
var SQL_SELECT = /\bselect\b/i;
|
|
4105
|
+
var SQL_INTO_A_TABLE = /\binto\b(?!\s*@)/i;
|
|
4106
|
+
var SQL_STATEMENT_SEPARATOR = ";";
|
|
4107
|
+
var statementSelectsIntoATable = (statement) => {
|
|
4108
|
+
const select = statement.search(SQL_SELECT);
|
|
4109
|
+
return select !== -1 && SQL_INTO_A_TABLE.test(statement.slice(select));
|
|
4110
|
+
};
|
|
4111
|
+
var selectsIntoATable = (sql) => sql.split(SQL_STATEMENT_SEPARATOR).some(statementSelectsIntoATable);
|
|
4095
4112
|
var sqlTextWrites = (text2) => {
|
|
4096
4113
|
const statement = text2.replace(SQL_READ_PHRASE, "");
|
|
4097
|
-
return SQL_WRITE_STATEMENT.test(statement) || SQL_CLIENT_FILE_COMMAND.test(statement);
|
|
4114
|
+
return SQL_WRITE_STATEMENT.test(statement) || selectsIntoATable(statement) || SQL_CLIENT_FILE_COMMAND.test(statement);
|
|
4098
4115
|
};
|
|
4099
4116
|
var writesThroughSql = (sql, lexicon) => {
|
|
4100
4117
|
const parsed = sqlOutsideLiterals(sql, lexicon);
|
|
@@ -5042,9 +5059,13 @@ var parseMcpToolName = (toolName) => {
|
|
|
5042
5059
|
if (split <= 0 || split + 2 >= rest.length) return void 0;
|
|
5043
5060
|
return { server: rest.slice(0, split), tool: rest.slice(split + 2) };
|
|
5044
5061
|
};
|
|
5062
|
+
var INVISIBLE_CHARACTERS = /[\u200B-\u200D\u2060\uFEFF]/g;
|
|
5063
|
+
var readableText = (text2) => text2.normalize("NFKC").replace(INVISIBLE_CHARACTERS, "");
|
|
5064
|
+
var ACRONYM_BOUNDARY = /([A-Z]{1,63})([A-Z][a-z])/g;
|
|
5045
5065
|
var CAMEL_CASE_BOUNDARY = /([a-z0-9])([A-Z])/g;
|
|
5046
|
-
var
|
|
5047
|
-
var
|
|
5066
|
+
var IDENTIFIER_WORD_SEPARATOR = /[^a-z0-9]+/;
|
|
5067
|
+
var wordsOfAnIdentifierAsWritten = (identifier3) => readableText(identifier3).toLowerCase().split(IDENTIFIER_WORD_SEPARATOR).filter((word) => word.length > 0);
|
|
5068
|
+
var wordsOfIdentifier = (identifier3) => readableText(identifier3).replace(ACRONYM_BOUNDARY, "$1 $2").replace(CAMEL_CASE_BOUNDARY, "$1 $2").toLowerCase().split(IDENTIFIER_WORD_SEPARATOR).filter((word) => word.length > 0);
|
|
5048
5069
|
var MCP_TOOL_WORDS_THAT_MOVE_MONEY = /* @__PURE__ */ new Set([
|
|
5049
5070
|
"pay",
|
|
5050
5071
|
"payment",
|
|
@@ -5100,11 +5121,6 @@ var MCP_TOOL_WORDS_THAT_REACH_OTHERS = /* @__PURE__ */ new Set([
|
|
|
5100
5121
|
"share"
|
|
5101
5122
|
]);
|
|
5102
5123
|
var mcpToolWordNeedsAPerson = (word) => DESTRUCTIVE_SUBCOMMANDS.has(word) || MCP_TOOL_WORDS_THAT_MOVE_MONEY.has(word) || MCP_TOOL_WORDS_THAT_RUN_CODE.has(word) || MCP_TOOL_WORDS_THAT_REACH_OTHERS.has(word);
|
|
5103
|
-
var mcpToolNameNeedsAPerson = (toolName) => {
|
|
5104
|
-
const words = wordsOfMcpToolName(toolName);
|
|
5105
|
-
const phrase = words.join(" ");
|
|
5106
|
-
return words.some(mcpToolWordNeedsAPerson) || classifyDecisionRisk(phrase, phrase) !== "standard";
|
|
5107
|
-
};
|
|
5108
5124
|
var MCP_TOOL_VERBS_THAT_ONLY_READ = /* @__PURE__ */ new Set([
|
|
5109
5125
|
"get",
|
|
5110
5126
|
"list",
|
|
@@ -5121,11 +5137,429 @@ var MCP_TOOL_VERBS_THAT_ONLY_READ = /* @__PURE__ */ new Set([
|
|
|
5121
5137
|
"browse",
|
|
5122
5138
|
"count"
|
|
5123
5139
|
]);
|
|
5124
|
-
var
|
|
5125
|
-
|
|
5126
|
-
|
|
5140
|
+
var MCP_TOOL_VERBS_THAT_CHANGE = /* @__PURE__ */ new Set([
|
|
5141
|
+
"create",
|
|
5142
|
+
"update",
|
|
5143
|
+
"add",
|
|
5144
|
+
"insert",
|
|
5145
|
+
"upsert",
|
|
5146
|
+
"edit",
|
|
5147
|
+
"modify",
|
|
5148
|
+
"replace",
|
|
5149
|
+
"put",
|
|
5150
|
+
"apply",
|
|
5151
|
+
"approve",
|
|
5152
|
+
"reject",
|
|
5153
|
+
"archive",
|
|
5154
|
+
"assign",
|
|
5155
|
+
"toggle",
|
|
5156
|
+
"enable",
|
|
5157
|
+
"disable",
|
|
5158
|
+
"activate",
|
|
5159
|
+
"deactivate",
|
|
5160
|
+
"save",
|
|
5161
|
+
"submit",
|
|
5162
|
+
"trigger",
|
|
5163
|
+
"invoke",
|
|
5164
|
+
"reply",
|
|
5165
|
+
"forward",
|
|
5166
|
+
"react",
|
|
5167
|
+
"append",
|
|
5168
|
+
"attach",
|
|
5169
|
+
"mute",
|
|
5170
|
+
"unblock",
|
|
5171
|
+
"unlock",
|
|
5172
|
+
"grant",
|
|
5173
|
+
"accept",
|
|
5174
|
+
"decline",
|
|
5175
|
+
"install",
|
|
5176
|
+
"navigate",
|
|
5177
|
+
"click",
|
|
5178
|
+
"fill",
|
|
5179
|
+
"generate",
|
|
5180
|
+
"subscribe",
|
|
5181
|
+
"unsubscribe",
|
|
5182
|
+
"notify",
|
|
5183
|
+
"tweet",
|
|
5184
|
+
"sms",
|
|
5185
|
+
"dm",
|
|
5186
|
+
"sell",
|
|
5187
|
+
"trade",
|
|
5188
|
+
"shutdown",
|
|
5189
|
+
"reboot",
|
|
5190
|
+
"restart",
|
|
5191
|
+
"revert",
|
|
5192
|
+
"rollback",
|
|
5193
|
+
"sign",
|
|
5194
|
+
"authorize",
|
|
5195
|
+
"evaluate",
|
|
5196
|
+
"unpublish",
|
|
5197
|
+
"close",
|
|
5198
|
+
"reopen",
|
|
5199
|
+
"mark",
|
|
5200
|
+
"pin",
|
|
5201
|
+
"unpin",
|
|
5202
|
+
"star",
|
|
5203
|
+
"unstar",
|
|
5204
|
+
"snooze",
|
|
5205
|
+
"copy",
|
|
5206
|
+
"duplicate",
|
|
5207
|
+
"join",
|
|
5208
|
+
"rsvp",
|
|
5209
|
+
"checkout",
|
|
5210
|
+
"vote",
|
|
5211
|
+
"kick",
|
|
5212
|
+
"ban",
|
|
5213
|
+
"unfollow"
|
|
5214
|
+
]);
|
|
5215
|
+
var MCP_TOOL_NOUNS_THAT_ALSO_ACT = /* @__PURE__ */ new Set(["email", "post", "merge", "push", "run"]);
|
|
5216
|
+
var MCP_TOOL_VERB_MODIFIERS = /* @__PURE__ */ new Set(["batch", "bulk"]);
|
|
5217
|
+
var MCP_TOOL_CLAUSE_JOINERS = /* @__PURE__ */ new Set(["and", "or", "then"]);
|
|
5218
|
+
var MCP_TOOL_WORDS_THAT_NAME_A_SECRET = /* @__PURE__ */ new Set([
|
|
5219
|
+
"password",
|
|
5220
|
+
"passwords",
|
|
5221
|
+
"passcode",
|
|
5222
|
+
"passkey",
|
|
5223
|
+
"passphrase",
|
|
5224
|
+
"secret",
|
|
5225
|
+
"secrets",
|
|
5226
|
+
"credential",
|
|
5227
|
+
"credentials",
|
|
5228
|
+
"token",
|
|
5229
|
+
"tokens",
|
|
5230
|
+
"apikey",
|
|
5231
|
+
"otp",
|
|
5232
|
+
"totp",
|
|
5233
|
+
"cookie",
|
|
5234
|
+
"cookies",
|
|
5235
|
+
"keychain",
|
|
5236
|
+
"vault",
|
|
5237
|
+
"1password",
|
|
5238
|
+
"onepassword",
|
|
5239
|
+
"bitwarden",
|
|
5240
|
+
"lastpass",
|
|
5241
|
+
"dashlane",
|
|
5242
|
+
"keepass",
|
|
5243
|
+
"env",
|
|
5244
|
+
"envs",
|
|
5245
|
+
"envvar",
|
|
5246
|
+
"envvars",
|
|
5247
|
+
"dotenv",
|
|
5248
|
+
"ssh",
|
|
5249
|
+
"sshkey",
|
|
5250
|
+
"sshkeys",
|
|
5251
|
+
"key",
|
|
5252
|
+
"keys",
|
|
5253
|
+
"privatekey",
|
|
5254
|
+
"certificate",
|
|
5255
|
+
"cert",
|
|
5256
|
+
"certs",
|
|
5257
|
+
"jwt",
|
|
5258
|
+
"bearer",
|
|
5259
|
+
"oauth",
|
|
5260
|
+
"mnemonic",
|
|
5261
|
+
"seed",
|
|
5262
|
+
"recovery",
|
|
5263
|
+
"mfa",
|
|
5264
|
+
"2fa",
|
|
5265
|
+
"cvv",
|
|
5266
|
+
"logins",
|
|
5267
|
+
"signed",
|
|
5268
|
+
"presigned"
|
|
5269
|
+
]);
|
|
5270
|
+
var MCP_TOOL_NAMESPACE_SEPARATOR = "__";
|
|
5271
|
+
var LONGEST_MCP_TOOL_NAME_READ = 256;
|
|
5272
|
+
var CODEX_CONNECTOR_SERVER = "codex_apps";
|
|
5273
|
+
var segmentsAfterTheConnector = (server, segments) => server === CODEX_CONNECTOR_SERVER && segments.length > 1 ? segments.slice(1) : segments;
|
|
5274
|
+
var mcpToolWordsOf = (toolName) => {
|
|
5275
|
+
if (toolName.length > LONGEST_MCP_TOOL_NAME_READ) return void 0;
|
|
5276
|
+
const parsed = parseMcpToolName(toolName);
|
|
5277
|
+
if (parsed === void 0) return void 0;
|
|
5278
|
+
const segments = parsed.tool.split(MCP_TOOL_NAMESPACE_SEPARATOR);
|
|
5279
|
+
const action = segments[segments.length - 1] ?? "";
|
|
5280
|
+
const namespace = [parsed.server, ...segments.slice(0, -1)];
|
|
5281
|
+
return {
|
|
5282
|
+
name: wordsOfIdentifier(toolName),
|
|
5283
|
+
nameAsWritten: wordsOfAnIdentifierAsWritten(toolName),
|
|
5284
|
+
namespace: new Set(namespace.flatMap(wordsOfIdentifier)),
|
|
5285
|
+
namespaceAsWritten: namespace.flatMap(wordsOfAnIdentifierAsWritten),
|
|
5286
|
+
afterTheConnector: segmentsAfterTheConnector(parsed.server, segments).flatMap(wordsOfIdentifier),
|
|
5287
|
+
namesAConnector: parsed.server === CODEX_CONNECTOR_SERVER && segments.length > 1,
|
|
5288
|
+
action: wordsOfIdentifier(action)
|
|
5289
|
+
};
|
|
5127
5290
|
};
|
|
5128
|
-
var
|
|
5291
|
+
var isMcpReadVerb = (word) => MCP_TOOL_VERBS_THAT_ONLY_READ.has(word);
|
|
5292
|
+
var leadingVerbOf = ({ namespace, action }) => action.find((word) => isMcpReadVerb(word) || !namespace.has(word) && !MCP_TOOL_VERB_MODIFIERS.has(word));
|
|
5293
|
+
var joinsASecondAction = (action) => action.some((word) => MCP_TOOL_CLAUSE_JOINERS.has(word));
|
|
5294
|
+
var mcpToolWordNeedsAPersonWherever = (word) => !MCP_TOOL_NOUNS_THAT_ALSO_ACT.has(word) && mcpToolWordNeedsAPerson(word);
|
|
5295
|
+
var mcpToolActionWordChanges = (word) => !MCP_TOOL_NOUNS_THAT_ALSO_ACT.has(word) && MCP_TOOL_VERBS_THAT_CHANGE.has(word);
|
|
5296
|
+
var MCP_TOOL_PHRASE_THAT_NAMES_A_SECRET = /\benvironment (?:variables?|vars?|values?|secrets?)\b/;
|
|
5297
|
+
var mcpToolNameNamesASecret = ({ name, nameAsWritten }) => [...name, ...nameAsWritten].some((word) => MCP_TOOL_WORDS_THAT_NAME_A_SECRET.has(word)) || MCP_TOOL_PHRASE_THAT_NAMES_A_SECRET.test(name.join(" "));
|
|
5298
|
+
var mcpToolNameIsSensitive = (toolName) => {
|
|
5299
|
+
const phrase = wordsOfIdentifier(toolName).join(" ");
|
|
5300
|
+
return classifyDecisionRisk(phrase, phrase) !== "standard";
|
|
5301
|
+
};
|
|
5302
|
+
var mcpToolOnlyReads = (toolName) => {
|
|
5303
|
+
const words = isPusharyOwnTool(toolName.toLowerCase()) ? void 0 : mcpToolWordsOf(toolName);
|
|
5304
|
+
if (words === void 0) return false;
|
|
5305
|
+
const verb = leadingVerbOf(words);
|
|
5306
|
+
return verb !== void 0 && isMcpReadVerb(verb) && !joinsASecondAction(words.action) && !words.name.some(mcpToolWordNeedsAPersonWherever) && !words.afterTheConnector.some(mcpToolActionWordChanges) && !mcpToolNameNamesASecret(words) && !mcpToolNameIsSensitive(toolName);
|
|
5307
|
+
};
|
|
5308
|
+
var MCP_TOOL_WORDS_THAT_NAME_A_DATABASE = /* @__PURE__ */ new Set([
|
|
5309
|
+
"sqlite",
|
|
5310
|
+
"postgres",
|
|
5311
|
+
"postgresql",
|
|
5312
|
+
"psql",
|
|
5313
|
+
"pg",
|
|
5314
|
+
"mysql",
|
|
5315
|
+
"mariadb",
|
|
5316
|
+
"mssql",
|
|
5317
|
+
"sqlserver",
|
|
5318
|
+
"oracle",
|
|
5319
|
+
"supabase",
|
|
5320
|
+
"neon",
|
|
5321
|
+
"planetscale",
|
|
5322
|
+
"turso",
|
|
5323
|
+
"libsql",
|
|
5324
|
+
"cockroach",
|
|
5325
|
+
"cockroachdb",
|
|
5326
|
+
"bigquery",
|
|
5327
|
+
"snowflake",
|
|
5328
|
+
"redshift",
|
|
5329
|
+
"databricks",
|
|
5330
|
+
"duckdb",
|
|
5331
|
+
"motherduck",
|
|
5332
|
+
"clickhouse",
|
|
5333
|
+
"athena",
|
|
5334
|
+
"trino",
|
|
5335
|
+
"presto",
|
|
5336
|
+
"timescale",
|
|
5337
|
+
"timescaledb",
|
|
5338
|
+
"mongo",
|
|
5339
|
+
"mongodb",
|
|
5340
|
+
"db",
|
|
5341
|
+
"database",
|
|
5342
|
+
"databases",
|
|
5343
|
+
"dbhub",
|
|
5344
|
+
"metabase",
|
|
5345
|
+
"redash",
|
|
5346
|
+
"superset",
|
|
5347
|
+
"looker"
|
|
5348
|
+
]);
|
|
5349
|
+
var someWordNamesADatabase = (words) => [...words].some((word) => MCP_TOOL_WORDS_THAT_NAME_A_DATABASE.has(word));
|
|
5350
|
+
var mcpToolNamesADatabase = (toolName) => {
|
|
5351
|
+
const words = mcpToolWordsOf(toolName);
|
|
5352
|
+
return words !== void 0 && someWordNamesADatabase([...words.name, ...words.nameAsWritten]);
|
|
5353
|
+
};
|
|
5354
|
+
var wordsThatNameTheApp = (words) => words.namesAConnector ? [...words.namespace, ...words.namespaceAsWritten] : [...words.name, ...words.nameAsWritten];
|
|
5355
|
+
var mcpToolAppNamesADatabase = (toolName) => {
|
|
5356
|
+
const words = mcpToolWordsOf(toolName);
|
|
5357
|
+
return words !== void 0 && someWordNamesADatabase(wordsThatNameTheApp(words));
|
|
5358
|
+
};
|
|
5359
|
+
var isCodexConnectorTool = (toolName) => parseMcpToolName(toolName)?.server === CODEX_CONNECTOR_SERVER;
|
|
5360
|
+
var DEEPEST_TOOL_INPUT_READ = 16;
|
|
5361
|
+
var LONGEST_TOOL_INPUT_TEXT_READ = 32768;
|
|
5362
|
+
var LONGEST_TOOL_INPUT_FIELD_NAME_READ = 256;
|
|
5363
|
+
var LARGEST_TOOL_INPUT_READ = 1048576;
|
|
5364
|
+
var TOOL_INPUT_COST_OF_EACH_VALUE = 32;
|
|
5365
|
+
var LONGEST_COMBINING_MARK_RUN_ANY_LANGUAGE_WRITES = 30;
|
|
5366
|
+
var COMBINING_MARKS = String.raw`[\p{M}\uFF9E\uFF9F]`;
|
|
5367
|
+
var COMBINING_MARK_RUN_LONGER_THAN_ANY_LANGUAGE_WRITES = new RegExp(`${COMBINING_MARKS}{${LONGEST_COMBINING_MARK_RUN_ANY_LANGUAGE_WRITES + 1}}`, "u");
|
|
5368
|
+
var UNNAMED_TOOL_INPUT_FIELD = {
|
|
5369
|
+
holdsAnAddress: false,
|
|
5370
|
+
holdsANamedAddress: false,
|
|
5371
|
+
namesAnHttpMethod: false,
|
|
5372
|
+
holdsSql: false,
|
|
5373
|
+
holdsGraphql: false
|
|
5374
|
+
};
|
|
5375
|
+
var UNREADABLE_TOOL_INPUT_TEXT = { kind: "unreadable" };
|
|
5376
|
+
var FIELD_WORDS_THAT_HOLD_AN_ADDRESS = /* @__PURE__ */ new Set([
|
|
5377
|
+
"url",
|
|
5378
|
+
"urls",
|
|
5379
|
+
"uri",
|
|
5380
|
+
"uris",
|
|
5381
|
+
"href",
|
|
5382
|
+
"link",
|
|
5383
|
+
"links",
|
|
5384
|
+
"host",
|
|
5385
|
+
"hosts",
|
|
5386
|
+
"hostname",
|
|
5387
|
+
"domain",
|
|
5388
|
+
"domains",
|
|
5389
|
+
"endpoint",
|
|
5390
|
+
"endpoints",
|
|
5391
|
+
"webhook",
|
|
5392
|
+
"webhooks",
|
|
5393
|
+
"callback",
|
|
5394
|
+
"website",
|
|
5395
|
+
"redirect"
|
|
5396
|
+
]);
|
|
5397
|
+
var FIELD_WORDS_FOR_THE_FORM_A_VALUE_TAKES = /* @__PURE__ */ new Set(["list", "string", "str", "value", "values", "text"]);
|
|
5398
|
+
var ADDRESS_WORDS_A_NAME_CAN_FOLLOW = /* @__PURE__ */ new Set(["host", "hosts", "hostname", "domain", "domains"]);
|
|
5399
|
+
var FIELD_WORDS_FOR_A_NAME = /* @__PURE__ */ new Set(["name", "names"]);
|
|
5400
|
+
var FIELD_WORDS_THAT_NAME_AN_HTTP_METHOD = /* @__PURE__ */ new Set(["method", "verb"]);
|
|
5401
|
+
var FIELD_WORDS_THAT_QUALIFY_AN_HTTP_METHOD = /* @__PURE__ */ new Set(["http", "request", "x", "override"]);
|
|
5402
|
+
var FIELD_WORDS_THAT_NAME_SQL = /* @__PURE__ */ new Set(["sql", "statement", "statements"]);
|
|
5403
|
+
var FIELD_WORDS_THAT_NAME_GRAPHQL = /* @__PURE__ */ new Set(["graphql", "gql"]);
|
|
5404
|
+
var FIELD_WORDS_THAT_QUALIFY_A_QUERY = /* @__PURE__ */ new Set(["query", "raw", "text", "string", "document"]);
|
|
5405
|
+
var NO_ADDRESS_WORD = -1;
|
|
5406
|
+
var lastAddressWordOf = (words) => words.reduce((last, word, index) => FIELD_WORDS_THAT_HOLD_AN_ADDRESS.has(word) ? index : last, NO_ADDRESS_WORD);
|
|
5407
|
+
var saysTheFormOfAValue = (word) => FIELD_WORDS_FOR_THE_FORM_A_VALUE_TAKES.has(word);
|
|
5408
|
+
var wordAfterAnAddressSaysItsForm = (addressWord) => (word) => saysTheFormOfAValue(word) || ADDRESS_WORDS_A_NAME_CAN_FOLLOW.has(addressWord) && FIELD_WORDS_FOR_A_NAME.has(word);
|
|
5409
|
+
var fieldWordsHoldAnAddress = (words) => {
|
|
5410
|
+
const lastAddressWord = lastAddressWordOf(words);
|
|
5411
|
+
const addressWord = words[lastAddressWord];
|
|
5412
|
+
return addressWord !== void 0 && words.slice(lastAddressWord + 1).every(wordAfterAnAddressSaysItsForm(addressWord));
|
|
5413
|
+
};
|
|
5414
|
+
var fieldWordsHoldANamedAddress = (words) => {
|
|
5415
|
+
const addressWord = words[lastAddressWordOf(words)];
|
|
5416
|
+
return addressWord !== void 0 && ADDRESS_WORDS_A_NAME_CAN_FOLLOW.has(addressWord) && fieldWordsHoldAnAddress(words);
|
|
5417
|
+
};
|
|
5418
|
+
var fieldWordsNameOnly = (words, names, qualifiers) => words.some((word) => names.has(word)) && words.every((word) => names.has(word) || qualifiers.has(word));
|
|
5419
|
+
var describesOnlyTheValue = (words, describes) => words.length > 0 && words.every(describes);
|
|
5420
|
+
var namesTheValue = (word) => FIELD_WORDS_FOR_A_NAME.has(word);
|
|
5421
|
+
var toolInputFieldNamed = (fieldName, parent) => {
|
|
5422
|
+
const words = wordsOfIdentifier(fieldName);
|
|
5423
|
+
const inherited = describesOnlyTheValue(words, saysTheFormOfAValue) ? parent : UNNAMED_TOOL_INPUT_FIELD;
|
|
5424
|
+
const namesTheParentsAddress = parent.holdsANamedAddress && describesOnlyTheValue(words, namesTheValue);
|
|
5425
|
+
return {
|
|
5426
|
+
holdsAnAddress: inherited.holdsAnAddress || namesTheParentsAddress || fieldWordsHoldAnAddress(words),
|
|
5427
|
+
holdsANamedAddress: inherited.holdsANamedAddress || fieldWordsHoldANamedAddress(words),
|
|
5428
|
+
namesAnHttpMethod: fieldWordsNameOnly(words, FIELD_WORDS_THAT_NAME_AN_HTTP_METHOD, FIELD_WORDS_THAT_QUALIFY_AN_HTTP_METHOD),
|
|
5429
|
+
holdsSql: inherited.holdsSql || fieldWordsNameOnly(words, FIELD_WORDS_THAT_NAME_SQL, FIELD_WORDS_THAT_QUALIFY_A_QUERY),
|
|
5430
|
+
holdsGraphql: inherited.holdsGraphql || fieldWordsNameOnly(words, FIELD_WORDS_THAT_NAME_GRAPHQL, FIELD_WORDS_THAT_QUALIFY_A_QUERY)
|
|
5431
|
+
};
|
|
5432
|
+
};
|
|
5433
|
+
var readableToolInputText = (text2) => {
|
|
5434
|
+
if (text2.length > LONGEST_TOOL_INPUT_TEXT_READ || COMBINING_MARK_RUN_LONGER_THAN_ANY_LANGUAGE_WRITES.test(text2)) {
|
|
5435
|
+
return UNREADABLE_TOOL_INPUT_TEXT;
|
|
5436
|
+
}
|
|
5437
|
+
const readable = readableText(text2);
|
|
5438
|
+
return readable.length > LONGEST_TOOL_INPUT_TEXT_READ ? UNREADABLE_TOOL_INPUT_TEXT : { kind: "readable", text: readable };
|
|
5439
|
+
};
|
|
5440
|
+
var toolInputTextMatches = (field, text2, test) => {
|
|
5441
|
+
const readable = readableToolInputText(text2);
|
|
5442
|
+
return readable.kind === "unreadable" || test(field, readable.text);
|
|
5443
|
+
};
|
|
5444
|
+
var fieldNameTooLongToRead = (fieldName) => fieldName.length > LONGEST_TOOL_INPUT_FIELD_NAME_READ;
|
|
5445
|
+
var anyToolInputText = (value, field, depth, test) => {
|
|
5446
|
+
if (typeof value === "string") return toolInputTextMatches(field, value, test);
|
|
5447
|
+
if (!Array.isArray(value) && !isRecord(value)) return false;
|
|
5448
|
+
if (depth >= DEEPEST_TOOL_INPUT_READ) return true;
|
|
5449
|
+
if (Array.isArray(value)) return value.some((child) => anyToolInputText(child, field, depth + 1, test));
|
|
5450
|
+
return Object.entries(value).some(([fieldName, child]) => fieldNameTooLongToRead(fieldName) || toolInputTextMatches(UNNAMED_TOOL_INPUT_FIELD, fieldName, test) || anyToolInputText(child, toolInputFieldNamed(fieldName, field), depth + 1, test));
|
|
5451
|
+
};
|
|
5452
|
+
var toolInputCostFrom = (value, depth, counted) => {
|
|
5453
|
+
if (counted > LARGEST_TOOL_INPUT_READ) return counted;
|
|
5454
|
+
const charged = counted + TOOL_INPUT_COST_OF_EACH_VALUE;
|
|
5455
|
+
if (typeof value === "string") return charged + value.length;
|
|
5456
|
+
if (depth >= DEEPEST_TOOL_INPUT_READ || !Array.isArray(value) && !isRecord(value)) return charged;
|
|
5457
|
+
const children = Array.isArray(value) ? value : Object.entries(value).flat();
|
|
5458
|
+
return children.reduce((sum, child) => toolInputCostFrom(child, depth + 1, sum), charged);
|
|
5459
|
+
};
|
|
5460
|
+
var toolInputTooLargeToRead = (toolInput) => toolInputCostFrom(toolInput, 0, 0) > LARGEST_TOOL_INPUT_READ;
|
|
5461
|
+
var LINE_BREAKS_A_URL_PARSER_DROPS = /[\t\n\r]/g;
|
|
5462
|
+
var WRITTEN_WEB_ADDRESSES = [
|
|
5463
|
+
/[a-z][a-z0-9+.-]{0,31}:\/\//i,
|
|
5464
|
+
/\b(?:https?|wss?|ftp|mailto):(?=\S)/i,
|
|
5465
|
+
/\bfile:\//i,
|
|
5466
|
+
/(?:^|[\s"'(=<[,])\/\/[a-z0-9-]+\./i,
|
|
5467
|
+
/(?:^|[\s"'(=<[,])\\\\[a-z0-9-]+/i,
|
|
5468
|
+
/%3a(?:%2f|\/){2}|%2f%2f/i,
|
|
5469
|
+
/\b\d{1,3}(?:\.\d{1,3}){3}(?::\d+|\/)/,
|
|
5470
|
+
/(?<![\w\]])\[(?=[0-9a-f.]{0,45}:[0-9a-f.]{0,45}:)(?=[0-9a-f:.]{0,45}(?:::|[a-f]))[0-9a-f:.]{2,45}\]/i,
|
|
5471
|
+
/(?<![\w\]])\[[0-9a-f:.]{2,45}\]:\d/i,
|
|
5472
|
+
/\blocalhost(?::\d|\/)/i
|
|
5473
|
+
];
|
|
5474
|
+
var WHOLE_VALUE_HOST_THAT_CARRIES_DATA_IN_ITS_QUERY = /^[<"'(\[]?(?:[^@\s/]{1,64}@)?(?:[a-z0-9-]{1,63}\.)+[a-z]{2,63}(?::\d{1,5})?(?:\/[^\s?#]*)?\?[^\s#]\S*$/i;
|
|
5475
|
+
var textNamesAWebAddress = (field, text2) => {
|
|
5476
|
+
const unbroken = text2.replace(LINE_BREAKS_A_URL_PARSER_DROPS, "");
|
|
5477
|
+
return field.holdsAnAddress && text2.trim().length > 0 || WRITTEN_WEB_ADDRESSES.some((pattern) => pattern.test(unbroken)) || WHOLE_VALUE_HOST_THAT_CARRIES_DATA_IN_ITS_QUERY.test(unbroken.trim());
|
|
5478
|
+
};
|
|
5479
|
+
var HTTP_METHODS_THAT_WRITE = /* @__PURE__ */ new Set([
|
|
5480
|
+
"POST",
|
|
5481
|
+
"PUT",
|
|
5482
|
+
"PATCH",
|
|
5483
|
+
"DELETE",
|
|
5484
|
+
"CONNECT",
|
|
5485
|
+
"PURGE",
|
|
5486
|
+
"ACL",
|
|
5487
|
+
"BASELINE-CONTROL",
|
|
5488
|
+
"BIND",
|
|
5489
|
+
"CHECKIN",
|
|
5490
|
+
"CHECKOUT",
|
|
5491
|
+
"COPY",
|
|
5492
|
+
"LABEL",
|
|
5493
|
+
"LINK",
|
|
5494
|
+
"LOCK",
|
|
5495
|
+
"MERGE",
|
|
5496
|
+
"MKACTIVITY",
|
|
5497
|
+
"MKCALENDAR",
|
|
5498
|
+
"MKCOL",
|
|
5499
|
+
"MKREDIRECTREF",
|
|
5500
|
+
"MKWORKSPACE",
|
|
5501
|
+
"MOVE",
|
|
5502
|
+
"ORDERPATCH",
|
|
5503
|
+
"PROPPATCH",
|
|
5504
|
+
"REBIND",
|
|
5505
|
+
"UNBIND",
|
|
5506
|
+
"UNCHECKOUT",
|
|
5507
|
+
"UNLINK",
|
|
5508
|
+
"UNLOCK",
|
|
5509
|
+
"UPDATE",
|
|
5510
|
+
"UPDATEREDIRECTREF",
|
|
5511
|
+
"VERSION-CONTROL"
|
|
5512
|
+
]);
|
|
5513
|
+
var SQL_COMMENT = /\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$)|--[^\n]*/g;
|
|
5514
|
+
var SQL_NAME = String.raw`(?:"[^"\n]{1,128}"|[\w.\x60[\]]{1,128})`;
|
|
5515
|
+
var SQL_USER = String.raw`(?:'[^'\n]{1,128}'(?:@'[^'\n]{1,128}')?|${SQL_NAME})`;
|
|
5516
|
+
var SQL_ALIAS = String.raw`(?:\s+(?:as\s+)?\w{1,64})?`;
|
|
5517
|
+
var SQL_STATEMENT_THAT_LEADS_A_SCRIPT = String.raw`(?:select|with|explain|analyze|describe|pragma|start|begin|commit|rollback|savepoint|prepare|declare|exec|execute|vacuum|reindex|attach|detach|abort)`;
|
|
5518
|
+
var STATEMENTS_THAT_CHANGE = [
|
|
5519
|
+
String.raw`\binsert\s+(?:ignore\s+)?(?:into\s+)?${SQL_NAME}\s*(?:\([^)]{0,512}\)\s*)?(?:values\s*\(|select\b|default\s+values\b|set\s+${SQL_NAME}\s*=)`,
|
|
5520
|
+
String.raw`\bdelete\s+from\s+(?:only\s+)?${SQL_NAME}${SQL_ALIAS}\s*(?:;|\b(?:where|using|returning|limit|order\s+by)\b)`,
|
|
5521
|
+
String.raw`\bdelete\s+${SQL_NAME}\s+where\b`,
|
|
5522
|
+
String.raw`\bupdate\s+(?:only\s+)?${SQL_NAME}${SQL_ALIAS}\s+set\s+(?:${SQL_NAME}|\([^)]{1,512}\))\s*=`,
|
|
5523
|
+
String.raw`\b(?:replace|upsert)\s+into\s+${SQL_NAME}\s*(?:\(|values\b|select\b|set\s+${SQL_NAME}\s*=)`,
|
|
5524
|
+
String.raw`\bmerge\s+into\s+${SQL_NAME}${SQL_ALIAS}\s+using\s*(?:\(|${SQL_NAME}${SQL_ALIAS}\s+on\b)`,
|
|
5525
|
+
String.raw`\bdrop\s+(?:materialized\s+view|table|view|function|procedure|trigger|sequence)\s+(?:if\s+exists\s+)?${SQL_NAME}`,
|
|
5526
|
+
String.raw`\bdrop\s+(?:user|role|index|schema|database)\s+(?:if\s+exists\s+${SQL_USER}|${SQL_USER}\s*(?:;|\b(?:cascade|restrict)\b))`,
|
|
5527
|
+
String.raw`\balter\s+(?:table|view|materialized\s+view|sequence|index|database|schema)\s+(?:if\s+exists\s+)?(?:only\s+)?${SQL_NAME}\s+(?:add|drop|alter|rename|set|owner|enable|disable|attach|detach)\b`,
|
|
5528
|
+
String.raw`\balter\s+(?:user|role)\s+${SQL_USER}\s+(?:with|superuser|nosuperuser|login|nologin|identified|password|rename|set)\b`,
|
|
5529
|
+
String.raw`\btruncate\s+table\s+${SQL_NAME}`,
|
|
5530
|
+
String.raw`^\s*\(*\s*${SQL_STATEMENT_THAT_LEADS_A_SCRIPT}\b[\s\S]*?;\s*(?:delete\s+from\s+(?:only\s+)?${SQL_NAME}|drop\s+(?:user|role|index|schema|database)\s+(?:if\s+exists\s+)?${SQL_USER}|truncate\s+(?:table\s+)?${SQL_NAME}|create\s+(?:user|role|database|schema)\s+(?:if\s+not\s+exists\s+)?${SQL_USER}|grant\s+${SQL_NAME}\s+to\s+${SQL_USER}|call\s+${SQL_NAME}\s*\()`,
|
|
5531
|
+
String.raw`(?:^|;)\s*truncate\s+${SQL_NAME}\s*;`,
|
|
5532
|
+
String.raw`\bcreate\s+(?:temp(?:orary)?\s+)?table\s+(?:if\s+not\s+exists\s+)?${SQL_NAME}\s*(?:\(|\bas\b|\blike\b)`,
|
|
5533
|
+
String.raw`\bcreate\s+(?:or\s+replace\s+)?(?:materialized\s+)?view\s+(?:if\s+not\s+exists\s+)?${SQL_NAME}\s+as\b`,
|
|
5534
|
+
String.raw`\bcreate\s+(?:or\s+replace\s+)?(?:function|procedure)\s+${SQL_NAME}\s*\(`,
|
|
5535
|
+
String.raw`\bcreate\s+(?:or\s+replace\s+)?trigger\s+${SQL_NAME}\s+(?:before|after|instead)\b`,
|
|
5536
|
+
String.raw`\bcreate\s+(?:unique\s+)?index\s+(?:concurrently\s+)?(?:if\s+not\s+exists\s+)?${SQL_NAME}\s+on\s+${SQL_NAME}`,
|
|
5537
|
+
String.raw`\bcreate\s+(?:unique\s+)?index\s+(?:concurrently\s+)?on\s+${SQL_NAME}\s*\(`,
|
|
5538
|
+
String.raw`\bcreate\s+(?:user|role)\s+(?:if\s+not\s+exists\s+)?${SQL_USER}\s*(?:;|\b(?:with|superuser|login|password|identified)\b)`,
|
|
5539
|
+
String.raw`\bcreate\s+(?:database|schema)\s+(?:if\s+not\s+exists\s+${SQL_NAME}|${SQL_NAME}\s*;)`,
|
|
5540
|
+
String.raw`\b(?:grant|revoke)\s+(?:all(?:\s+privileges)?|select|insert|update|delete|usage|execute|create|connect|references|trigger|truncate)(?:\s*,\s*\w{1,32})*\s+on\b`,
|
|
5541
|
+
String.raw`\bexec(?:ute)?\s+(?:sp|xp)_\w+`,
|
|
5542
|
+
String.raw`\bexecute\s+immediate\b`,
|
|
5543
|
+
String.raw`\bcopy\s+${SQL_NAME}\s+(?:to|from)\s+(?:program\b|stdout\b|stdin\b|')`,
|
|
5544
|
+
String.raw`\bpg_(?:terminate|cancel)_backend\b`,
|
|
5545
|
+
String.raw`\bmutation\b(?:\s+[a-z_]\w{0,127})?\s*(?:\{|@[a-z_]|\(\s*\$)`
|
|
5546
|
+
].map((source) => new RegExp(source, "i"));
|
|
5547
|
+
var fieldSetsAnHttpMethodThatWrites = (field, text2) => field.namesAnHttpMethod && HTTP_METHODS_THAT_WRITE.has(text2.trim().toUpperCase());
|
|
5548
|
+
var sqlTextWritesAsAClientReadsIt = (text2) => writesThroughSql(text2, UNVERIFIED_SQL_LEXICON);
|
|
5549
|
+
var fieldHoldsSqlThatWrites = (field, text2) => field.holdsSql && sqlTextWritesAsAClientReadsIt(text2);
|
|
5550
|
+
var fieldHoldsAGraphqlMutation = (field, text2) => field.holdsGraphql && GRAPHQL_MUTATION.test(text2);
|
|
5551
|
+
var COPY_OF_A_SUBQUERY = /\bcopy\s*\((?:\s*\()*\s*(?:select|with|values|table|insert|update|delete|merge)\b/i;
|
|
5552
|
+
var COPY_TO_A_PROGRAM_OR_A_FILE = /\)\s*to\s+(?:program\b|')/i;
|
|
5553
|
+
var copiesASubqueryOut = (text2) => {
|
|
5554
|
+
const copy = text2.search(COPY_OF_A_SUBQUERY);
|
|
5555
|
+
return copy !== -1 && COPY_TO_A_PROGRAM_OR_A_FILE.test(text2.slice(copy));
|
|
5556
|
+
};
|
|
5557
|
+
var carriesAStatementThatChanges = (text2) => STATEMENTS_THAT_CHANGE.some((pattern) => pattern.test(text2)) || copiesASubqueryOut(text2);
|
|
5558
|
+
var textCarriesAStatementThatChanges = (text2) => carriesAStatementThatChanges(text2) || carriesAStatementThatChanges(text2.replace(SQL_COMMENT, " "));
|
|
5559
|
+
var textAsksToChange = (field, text2) => fieldSetsAnHttpMethodThatWrites(field, text2) || fieldHoldsSqlThatWrites(field, text2) || fieldHoldsAGraphqlMutation(field, text2) || textCarriesAStatementThatChanges(text2);
|
|
5560
|
+
var textNeedsAPersonFor = (toolNamesADatabase) => (field, text2) => textNamesAWebAddress(field, text2) || textAsksToChange(field, text2) || toolNamesADatabase && sqlTextWritesAsAClientReadsIt(text2);
|
|
5561
|
+
var mcpToolInputOnlyReads = (toolName, toolInput) => !toolInputTooLargeToRead(toolInput) && !anyToolInputText(toolInput, UNNAMED_TOOL_INPUT_FIELD, 0, textNeedsAPersonFor(mcpToolNamesADatabase(toolName)));
|
|
5562
|
+
var allowsSessionToolGrant = (toolName) => SESSION_TOOL_GRANT_TOOLS.has(toolName) || mcpToolOnlyReads(toolName);
|
|
5129
5563
|
var isSessionToolGrant = (policy) => Boolean(policy.sessionId) && allowsSessionToolGrant(policy.tool) && isAutoApprove(policy);
|
|
5130
5564
|
var API_KEY_PREFIX_SHAPE = "pk_[a-f0-9]+";
|
|
5131
5565
|
var API_KEY_PREFIX_PATTERN = new RegExp(`^${API_KEY_PREFIX_SHAPE}$`);
|
|
@@ -5681,6 +6115,7 @@ var unmatchedPolicyOf = (config, toolName) => ({
|
|
|
5681
6115
|
mode: config.defaultMode ?? "push_first",
|
|
5682
6116
|
pushFirstSeconds: config.defaultPushFirstSeconds ?? 20
|
|
5683
6117
|
});
|
|
6118
|
+
var sessionToolGrantCannotCover = (toolName, arg, toolInput) => typeof arg === "string" && commandNeedsAPerson(toolName, arg) || parseMcpToolName(toolName) !== void 0 && (toolInput === void 0 || !mcpToolInputOnlyReads(toolName, toolInput));
|
|
5684
6119
|
var stricterOfTheReadings = (asWritten, asSpelled, unmatched) => comparePolicyStrictness(asWritten?.policy ?? unmatched, asSpelled?.policy ?? unmatched) > 0 ? asWritten : asSpelled;
|
|
5685
6120
|
var resolvePolicy = (config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId) => {
|
|
5686
6121
|
const args = toolInput ? policyArgForms(toolName, toolInput, cwd) : [];
|
|
@@ -5696,7 +6131,7 @@ var resolvePolicy = (config, toolName, modeOverride, toolInput, cwd, repoKey, se
|
|
|
5696
6131
|
const governingMode = base.mode;
|
|
5697
6132
|
const aRuleNamesASpelling = isSpecificArgumentRank(asSpelled?.rank);
|
|
5698
6133
|
const approvedByReadOnlyFloor = !isAutoDeny(base) && (shellReadOnlyFloorApplies(toolName, arg, match?.rank) && !aRuleNamesASpelling || coordinationFloorApplies(toolName, match?.rank));
|
|
5699
|
-
if (governedBySessionToolGrant && !approvedByReadOnlyFloor &&
|
|
6134
|
+
if (governedBySessionToolGrant && !approvedByReadOnlyFloor && sessionToolGrantCannotCover(toolName, arg, toolInput)) {
|
|
5700
6135
|
return resolvePolicy(withoutSessionToolGrants(config), toolName, modeOverride, toolInput, cwd, repoKey, sessionId);
|
|
5701
6136
|
}
|
|
5702
6137
|
if (approvedByReadOnlyFloor) {
|
|
@@ -5935,7 +6370,9 @@ var runsADestructiveCommand = ({ toolName, toolInputs }) => SHELL_DIALECT_BY_TOO
|
|
|
5935
6370
|
return command !== void 0 && commandIsDestructive(toolName, command);
|
|
5936
6371
|
});
|
|
5937
6372
|
var codexCallIsDestructive = (input, call) => call.deletesFiles || runsADestructiveCommand(input);
|
|
5938
|
-
var
|
|
6373
|
+
var connectorCallOnlyReads = ({ toolName, toolInputs }) => isCodexConnectorTool(toolName) && mcpToolOnlyReads(toolName) && !mcpToolAppNamesADatabase(toolName) && toolInputs.length > 0 && toolInputs.every((toolInput) => mcpToolInputOnlyReads(toolName, toolInput));
|
|
6374
|
+
var fullAccessRunsThisConnectorReadUnasked = (input, verdict, call) => !codexRaisesItsOwnPrompts(call.permissionMode) && scopeBreachReasonOf(verdict) === void 0 && noModeOverrideIsActive(input) && connectorCallOnlyReads(input);
|
|
6375
|
+
var codexCallNeedsAPerson = (input, verdict, call) => onlyCodexPreToolUseCanAsk(verdict, call.permissionMode) && !fullAccessRunsThisConnectorReadUnasked(input, verdict, call) || verdict.kind === "gate" && (aChosenRuleGoverns(input) || call.deletesFiles || runsACommandThatNeedsAPerson(input) || editsAFileThatNeedsAPerson(input));
|
|
5939
6376
|
var CODEX_PRE_TOOL_USE_PASSES = { kind: "pass" };
|
|
5940
6377
|
var codexPreToolUseDelivery = (input, verdict, call) => {
|
|
5941
6378
|
if (verdict.kind !== "gate" || !codexCallNeedsAPerson(input, verdict, call)) return CODEX_PRE_TOOL_USE_PASSES;
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
keyPrefix,
|
|
5
5
|
readConfigFileKey,
|
|
6
6
|
readMacAppKeyPrefix
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-D536PHXF.js";
|
|
8
8
|
import {
|
|
9
9
|
NPX_LATEST_COMMAND
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AZ56FPRG.js";
|
|
11
11
|
|
|
12
12
|
// src/key-signed-out.ts
|
|
13
13
|
var VERDICT_BY_CHECK = {
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
forkFinishWithUpgradeLock,
|
|
4
4
|
installWithUpgradeLock,
|
|
5
5
|
releaseAutoUpdateLock
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-C3YAMEO2.js";
|
|
7
7
|
import {
|
|
8
8
|
phoneStartIsRequired
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7OYWCOVC.js";
|
|
10
10
|
import {
|
|
11
11
|
describeAutoUpdateCheck,
|
|
12
12
|
globalInstallLocation,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
readAutoUpdateState,
|
|
19
19
|
updateAutoUpdateState,
|
|
20
20
|
upgradeEntryFor
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-IPSO7DUB.js";
|
|
22
22
|
import {
|
|
23
23
|
EXIT
|
|
24
24
|
} from "./chunk-KZERVKTD.js";
|
|
@@ -26,17 +26,17 @@ import {
|
|
|
26
26
|
autoUpdateLock,
|
|
27
27
|
autoUpdateLog,
|
|
28
28
|
autoUpdateState
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-SMIU5URV.js";
|
|
30
30
|
import {
|
|
31
31
|
execNpm,
|
|
32
32
|
fetchLatestPublishedVersion,
|
|
33
33
|
npmErrorMessage,
|
|
34
34
|
readGlobalCliInstallAt,
|
|
35
35
|
readGlobalPrefix
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-T7FPZN5V.js";
|
|
37
37
|
import {
|
|
38
38
|
NPX_LATEST_COMMAND
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-AZ56FPRG.js";
|
|
40
40
|
import {
|
|
41
41
|
commandsPackage,
|
|
42
42
|
globalUpgradeEntry,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getBaseUrl
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-X2KK42JA.js";
|
|
4
4
|
import {
|
|
5
5
|
compressTranscriptRecord,
|
|
6
6
|
redactSecretsFromContent
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JGEPODEP.js";
|
|
8
8
|
|
|
9
9
|
// src/transcript-api.ts
|
|
10
10
|
var fetchTranscriptRecipients = async (apiKey, baseUrl = getBaseUrl()) => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findNativeClaudeInstall
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BJRLJJS2.js";
|
|
4
4
|
import {
|
|
5
5
|
parseVersion
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-T7FPZN5V.js";
|
|
7
7
|
import {
|
|
8
8
|
isRecord
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JGEPODEP.js";
|
|
10
10
|
|
|
11
11
|
// src/setup/agent-probe.ts
|
|
12
12
|
import { execSync } from "child_process";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readJsonSafe,
|
|
3
3
|
writeJsonAtomic
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-T7FPZN5V.js";
|
|
5
5
|
import {
|
|
6
6
|
configFilePath
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-X2KK42JA.js";
|
|
8
8
|
import {
|
|
9
9
|
readSetupOutcomeProperties
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JGEPODEP.js";
|
|
11
11
|
|
|
12
12
|
// src/diagnostics/service-runtime.ts
|
|
13
13
|
var unescapeXml = (value) => value.replaceAll(""", '"').replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&");
|