@opengeni/contracts 1.2.1-canary.37222965366001 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-config.d.ts +1 -0
- package/dist/atlassian.js +4 -3
- package/dist/chunk-TCXCRBPF.js +267 -0
- package/dist/chunk-TCXCRBPF.js.map +1 -0
- package/dist/{chunk-QZPIUG3I.js → chunk-UDKWSRES.js} +2 -2
- package/dist/{chunk-L73LKLKP.js → chunk-YFEAAOBX.js} +5080 -4701
- package/dist/chunk-YFEAAOBX.js.map +1 -0
- package/dist/client-error-report.d.ts +1 -1
- package/dist/client-error-report.js +1 -0
- package/dist/client-error-report.js.map +1 -1
- package/dist/connect.js +4 -3
- package/dist/connect.js.map +1 -1
- package/dist/connection-authority.js +5 -4
- package/dist/connector-tool-permissions.d.ts +68 -4
- package/dist/google-drive.js +4 -3
- package/dist/google-drive.js.map +1 -1
- package/dist/host-mcp-bindings.js +5 -4
- package/dist/host-mcp-bindings.js.map +1 -1
- package/dist/index.d.ts +96 -4
- package/dist/index.js +63 -23
- package/dist/mcp-structured-content.d.ts +25 -0
- package/dist/personal-github.js +4 -3
- package/dist/personal-github.js.map +1 -1
- package/dist/tool-action-review.d.ts +132 -0
- package/dist/tool-catalog.d.ts +8 -0
- package/dist/tool-policy.d.ts +5 -0
- package/dist/tool-review-presentation.d.ts +12 -0
- package/dist/tool-review-presentation.js +17 -0
- package/dist/tool-review-presentation.js.map +1 -0
- package/dist/transcription-recordings.d.ts +21 -0
- package/package.json +5 -1
- package/src/agent-config.ts +4 -1
- package/src/client-error-report.ts +1 -0
- package/src/connector-tool-permissions.ts +50 -2
- package/src/index.ts +51 -5
- package/src/mcp-structured-content.ts +81 -0
- package/src/tool-action-review.ts +247 -0
- package/src/tool-catalog.ts +6 -0
- package/src/tool-policy.ts +82 -0
- package/src/tool-review-presentation.ts +385 -0
- package/src/transcription-recordings.ts +3 -0
- package/dist/chunk-L73LKLKP.js.map +0 -1
- /package/dist/{chunk-QZPIUG3I.js.map → chunk-UDKWSRES.js.map} +0 -0
package/dist/agent-config.d.ts
CHANGED
|
@@ -500,6 +500,7 @@ export type AgentFunctionToolClass = AgentCapabilityId | "runtime" | "sandbox";
|
|
|
500
500
|
/** Tools served outside the first-party MCP catalog, by the name the model sees. */
|
|
501
501
|
export declare const AGENT_FUNCTION_TOOL_CAPABILITIES: {
|
|
502
502
|
readonly web_search: "webSearch";
|
|
503
|
+
readonly web_fetch: "webSearch";
|
|
503
504
|
readonly x_search: "webSearch";
|
|
504
505
|
readonly image_generation: "media";
|
|
505
506
|
readonly request_human_input: "humanInput";
|
package/dist/atlassian.js
CHANGED
|
@@ -17,11 +17,12 @@ import {
|
|
|
17
17
|
AtlassianSyncCadence,
|
|
18
18
|
SaveAtlassianSourcesRequest,
|
|
19
19
|
atlassianScopesAllowRead
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-YFEAAOBX.js";
|
|
21
|
+
import "./chunk-4JGHSSB7.js";
|
|
21
22
|
import "./chunk-5IXYF6XN.js";
|
|
22
23
|
import "./chunk-NRMCVHAU.js";
|
|
23
24
|
import "./chunk-WYBDERIY.js";
|
|
24
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-FZ6BXQHL.js";
|
|
25
26
|
import "./chunk-EK7NDGFR.js";
|
|
26
27
|
import "./chunk-XSBEB2HQ.js";
|
|
27
28
|
import "./chunk-O77VSFYZ.js";
|
|
@@ -29,9 +30,9 @@ import "./chunk-NVJMJWLL.js";
|
|
|
29
30
|
import "./chunk-SIOU2K4U.js";
|
|
30
31
|
import "./chunk-YRKRZ6OF.js";
|
|
31
32
|
import "./chunk-2VORLN2R.js";
|
|
32
|
-
import "./chunk-FZ6BXQHL.js";
|
|
33
33
|
import "./chunk-GRG7PHWQ.js";
|
|
34
34
|
import "./chunk-YRXAWWCU.js";
|
|
35
|
+
import "./chunk-TCXCRBPF.js";
|
|
35
36
|
import "./chunk-2ACYHZFB.js";
|
|
36
37
|
import "./chunk-KHHZTBP7.js";
|
|
37
38
|
import "./chunk-YBW5JSA3.js";
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// src/tool-review-presentation.ts
|
|
2
|
+
var protectedName = /password|passwd|secret|credential|authorization|cookie|(^|[_-])token($|[_-])|api[_-]?key|accessToken|refreshToken|privateKey/i;
|
|
3
|
+
var protectedReviewField = (key, fields = []) => protectedName.test(key) || fields.includes(key) || fields.includes("*");
|
|
4
|
+
var bound = (value, limit) => value.length > limit ? `${value.slice(0, limit)}\u2026` : value;
|
|
5
|
+
function toolReviewFieldLabel(key) {
|
|
6
|
+
const label = key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").replace(/\bids?\b/gi, (word) => word.length === 3 ? "IDs" : "ID").replace(
|
|
7
|
+
/\b(api|url|uri|http|https|ip|sql|json|html)(s?)\b/gi,
|
|
8
|
+
(_word, name, plural) => `${name.toUpperCase()}${plural}`
|
|
9
|
+
).replace(
|
|
10
|
+
/(?<=\S\s+)([A-Z])([a-z]+)\b/g,
|
|
11
|
+
(_word, first, rest) => `${first.toLowerCase()}${rest}`
|
|
12
|
+
).trim();
|
|
13
|
+
return label.charAt(0).toUpperCase() + label.slice(1);
|
|
14
|
+
}
|
|
15
|
+
function decodeReviewArguments(value) {
|
|
16
|
+
let decoded = value;
|
|
17
|
+
if (typeof decoded === "string") {
|
|
18
|
+
try {
|
|
19
|
+
decoded = JSON.parse(decoded);
|
|
20
|
+
} catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return decoded && typeof decoded === "object" && !Array.isArray(decoded) ? decoded : null;
|
|
25
|
+
}
|
|
26
|
+
function safeReviewValue(value, key = "", protectedFields = [], depth = 0) {
|
|
27
|
+
if (protectedReviewField(key, protectedFields)) return "[Protected value]";
|
|
28
|
+
if (depth > 20) return "[Nested value; open this field for details]";
|
|
29
|
+
if (Array.isArray(value))
|
|
30
|
+
return value.map((entry) => safeReviewValue(entry, "", protectedFields, depth + 1));
|
|
31
|
+
if (value && typeof value === "object")
|
|
32
|
+
return Object.fromEntries(
|
|
33
|
+
Object.entries(value).map(([name, entry]) => [
|
|
34
|
+
name,
|
|
35
|
+
safeReviewValue(entry, name, protectedFields, depth + 1)
|
|
36
|
+
])
|
|
37
|
+
);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function valueText(value) {
|
|
41
|
+
return typeof value === "string" ? value : value === null ? "None" : typeof value === "boolean" ? value ? "Yes" : "No" : JSON.stringify(value) ?? "Unavailable";
|
|
42
|
+
}
|
|
43
|
+
var pointer = (name) => `/${name.replaceAll("~", "~0").replaceAll("/", "~1")}`;
|
|
44
|
+
var fieldPointer = (key, index, parent = "") => pointer(key).length > 256 || parent.length + pointer(key).length > 1024 ? `/~2${index}` : pointer(key);
|
|
45
|
+
function toolReviewFields(argumentsValue, context) {
|
|
46
|
+
const args = decodeReviewArguments(argumentsValue);
|
|
47
|
+
if (!args) return { fields: [], moreFields: 0 };
|
|
48
|
+
const entries = Object.entries(args);
|
|
49
|
+
if (context?.email) {
|
|
50
|
+
const email = toolReviewFields(context.email);
|
|
51
|
+
const original = toolReviewFields(args, { ...context, email: void 0 });
|
|
52
|
+
const fields = [
|
|
53
|
+
...email.fields.filter(
|
|
54
|
+
(field) => field.path !== "/contentSha256" && field.path !== "/htmlBody" && field.preview !== ""
|
|
55
|
+
).map((field) => ({
|
|
56
|
+
...field,
|
|
57
|
+
label: field.path === "/textBody" ? "Message" : field.label,
|
|
58
|
+
path: `/$email${field.path}`,
|
|
59
|
+
...field.path === "/attachments" ? {
|
|
60
|
+
preview: context.email.attachments.map((attachment) => attachment.name).join(", ").slice(0, 240)
|
|
61
|
+
} : {}
|
|
62
|
+
})),
|
|
63
|
+
...original.fields.filter(
|
|
64
|
+
(field) => ![
|
|
65
|
+
"/raw",
|
|
66
|
+
"/expectedContentSha256",
|
|
67
|
+
"/from",
|
|
68
|
+
"/to",
|
|
69
|
+
"/cc",
|
|
70
|
+
"/bcc",
|
|
71
|
+
"/subject",
|
|
72
|
+
"/body",
|
|
73
|
+
"/textBody",
|
|
74
|
+
"/htmlBody",
|
|
75
|
+
"/attachments"
|
|
76
|
+
].includes(field.path)
|
|
77
|
+
)
|
|
78
|
+
];
|
|
79
|
+
return {
|
|
80
|
+
fields: fields.slice(0, 16),
|
|
81
|
+
moreFields: original.moreFields + Math.max(0, fields.length - 16)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
moreFields: Math.max(0, entries.length - 16),
|
|
86
|
+
fields: entries.slice(0, 16).map(([key, value], index) => {
|
|
87
|
+
const hidden = protectedReviewField(key, context?.protectedFields);
|
|
88
|
+
const safe = hidden ? "[Protected value]" : value;
|
|
89
|
+
const count = !hidden && Array.isArray(value) ? value.length : void 0;
|
|
90
|
+
const compactList = !hidden && Array.isArray(value) && value.length > 0 && value.length <= 4 && value.every(
|
|
91
|
+
(entry) => typeof entry === "string" || typeof entry === "number" || typeof entry === "boolean"
|
|
92
|
+
) ? value.map(valueText).join(", ") : void 0;
|
|
93
|
+
const text = compactList !== void 0 ? compactList : count !== void 0 ? `${count.toLocaleString("en-US")} item${count === 1 ? "" : "s"}` : safe && typeof safe === "object" ? `${Object.keys(safe).length} field${Object.keys(safe).length === 1 ? "" : "s"}` : valueText(safe);
|
|
94
|
+
return {
|
|
95
|
+
path: fieldPointer(key, index),
|
|
96
|
+
label: bound(
|
|
97
|
+
(context?.fieldLabels && Object.hasOwn(context.fieldLabels, key) ? context.fieldLabels[key] : void 0) ?? toolReviewFieldLabel(key),
|
|
98
|
+
256
|
|
99
|
+
),
|
|
100
|
+
preview: bound(text, 240),
|
|
101
|
+
...count !== void 0 ? { count } : {},
|
|
102
|
+
truncated: !hidden && (text.length > 240 || compactList === void 0 && typeof value === "object" && value !== null),
|
|
103
|
+
...hidden ? { protected: true } : {}
|
|
104
|
+
};
|
|
105
|
+
})
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function toolReviewAction(toolName, argumentsValue, context) {
|
|
109
|
+
const fallback = {
|
|
110
|
+
title: context?.title ?? bound(
|
|
111
|
+
toolReviewFieldLabel(
|
|
112
|
+
toolName.replace(/^mcp_[^_]+__/, "").replace(/^batch[_-](?=[a-z])/i, "")
|
|
113
|
+
),
|
|
114
|
+
256
|
|
115
|
+
),
|
|
116
|
+
approveLabel: "Approve action",
|
|
117
|
+
effects: []
|
|
118
|
+
};
|
|
119
|
+
if (context?.kind !== "gmail") return fallback;
|
|
120
|
+
const args = decodeReviewArguments(argumentsValue);
|
|
121
|
+
if (!args) return fallback;
|
|
122
|
+
const thread = toolName.endsWith("_thread");
|
|
123
|
+
const selectionKind = thread ? "threads" : "messages";
|
|
124
|
+
const ids = thread && typeof args.threadId === "string" ? [args.threadId] : Array.isArray(args.messageIds) ? args.messageIds : typeof args.messageId === "string" ? [args.messageId] : null;
|
|
125
|
+
const selectionCount = ids?.every((id) => typeof id === "string") ? new Set(ids).size : void 0;
|
|
126
|
+
const noun = selectionCount === void 0 ? thread ? "conversations" : "messages" : `${selectionCount.toLocaleString("en-US")} ${thread ? "conversation" : "message"}${selectionCount === 1 ? "" : "s"}`;
|
|
127
|
+
const addValues = toolName.startsWith("label_") ? args.labelIds : args.addLabelIds;
|
|
128
|
+
const adds = Array.isArray(addValues) ? addValues.filter((v) => typeof v === "string") : [];
|
|
129
|
+
const removeValues = toolName.startsWith("unlabel_") ? args.labelIds : args.removeLabelIds;
|
|
130
|
+
const removes = Array.isArray(removeValues) ? removeValues.filter((v) => typeof v === "string") : [];
|
|
131
|
+
const labelEffect = (label, adding) => {
|
|
132
|
+
const known = {
|
|
133
|
+
TRASH: ["Move to Trash", "Remove from Trash"],
|
|
134
|
+
INBOX: ["Move to Inbox", "Remove from Inbox"],
|
|
135
|
+
UNREAD: ["Mark as unread", "Mark as read"],
|
|
136
|
+
STARRED: ["Add star", "Remove star"],
|
|
137
|
+
SPAM: ["Mark as spam", "Remove from Spam"],
|
|
138
|
+
IMPORTANT: ["Mark as important", "Remove importance"]
|
|
139
|
+
};
|
|
140
|
+
return (Object.hasOwn(known, label) ? known[label]?.[adding ? 0 : 1] : void 0) ?? `${adding ? "Add" : "Remove"} label ${bound(label, 120)}`;
|
|
141
|
+
};
|
|
142
|
+
const effects = [
|
|
143
|
+
...adds.map((id) => labelEffect(id, true)),
|
|
144
|
+
...removes.map((id) => labelEffect(id, false))
|
|
145
|
+
];
|
|
146
|
+
if ([
|
|
147
|
+
"batch_modify_messages",
|
|
148
|
+
"modify_message",
|
|
149
|
+
"modify_thread",
|
|
150
|
+
"label_message",
|
|
151
|
+
"label_thread",
|
|
152
|
+
"unlabel_message",
|
|
153
|
+
"unlabel_thread"
|
|
154
|
+
].includes(toolName)) {
|
|
155
|
+
const trash = adds.includes("TRASH");
|
|
156
|
+
return {
|
|
157
|
+
title: trash ? `Move ${noun} to Trash` : `Update ${noun}`,
|
|
158
|
+
approveLabel: trash ? "Move to Trash" : "Apply changes",
|
|
159
|
+
effects,
|
|
160
|
+
...selectionCount === void 0 ? {} : { selectionCount, selectionKind },
|
|
161
|
+
...trash ? { consequence: "Messages stay recoverable in Trash until Gmail deletes them." } : thread ? { consequence: "Applies to every message in the conversation." } : {}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (["trash_message", "restore_message", "trash_thread", "restore_thread"].includes(toolName))
|
|
165
|
+
return {
|
|
166
|
+
title: toolName.startsWith("trash_") ? `Move ${noun} to Trash` : `Remove ${noun} from Trash`,
|
|
167
|
+
approveLabel: toolName.startsWith("trash_") ? "Move to Trash" : "Remove from Trash",
|
|
168
|
+
effects,
|
|
169
|
+
...selectionCount === void 0 ? {} : { selectionCount, selectionKind }
|
|
170
|
+
};
|
|
171
|
+
const named = {
|
|
172
|
+
send_message: ["Send email", "Send email"],
|
|
173
|
+
send_draft: ["Send draft", "Send draft"],
|
|
174
|
+
create_draft: ["Create email draft", "Create draft"],
|
|
175
|
+
update_draft: ["Update email draft", "Update draft"],
|
|
176
|
+
delete_draft: ["Delete email draft", "Delete draft"],
|
|
177
|
+
create_label: ["Create label", "Create label"],
|
|
178
|
+
update_label: ["Update label", "Update label"],
|
|
179
|
+
delete_label: ["Delete label", "Delete label"]
|
|
180
|
+
};
|
|
181
|
+
const action = Object.hasOwn(named, toolName) ? named[toolName] : void 0;
|
|
182
|
+
return action ? { title: action[0], approveLabel: action[1], effects } : fallback;
|
|
183
|
+
}
|
|
184
|
+
function toolReviewDetails(argumentsValue, context, path, offset, limit = 25) {
|
|
185
|
+
if (!Number.isSafeInteger(offset) || offset < 0 || !Number.isSafeInteger(limit) || limit < 1 || limit > 50)
|
|
186
|
+
throw new Error("Invalid review page");
|
|
187
|
+
const args = decodeReviewArguments(argumentsValue);
|
|
188
|
+
let value = context?.email ? { ...args, $email: context.email } : args;
|
|
189
|
+
if (path !== "") {
|
|
190
|
+
if (!path.startsWith("/")) throw new Error("Invalid review field");
|
|
191
|
+
for (const escaped of path.slice(1).split("/")) {
|
|
192
|
+
if (/^~2\d+$/.test(escaped)) {
|
|
193
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
194
|
+
throw new Error("Review field not found");
|
|
195
|
+
const selected = Object.entries(value)[Number(escaped.slice(2))];
|
|
196
|
+
if (!selected) throw new Error("Review field not found");
|
|
197
|
+
value = {
|
|
198
|
+
fieldName: selected[0],
|
|
199
|
+
value: protectedReviewField(selected[0], context?.protectedFields) ? "[Protected value]" : selected[1]
|
|
200
|
+
};
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const key = escaped.replaceAll("~1", "/").replaceAll("~0", "~");
|
|
204
|
+
if (protectedReviewField(key, context?.protectedFields)) {
|
|
205
|
+
value = "[Protected value]";
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
if (!value || typeof value !== "object" || !Object.hasOwn(value, key))
|
|
209
|
+
throw new Error("Review field not found");
|
|
210
|
+
value = value[key];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const preview = (entry, key, childPath) => {
|
|
214
|
+
const hidden = protectedReviewField(key, context?.protectedFields);
|
|
215
|
+
if (!hidden && entry !== null && typeof entry === "object") {
|
|
216
|
+
const count = Array.isArray(entry) ? entry.length : Object.keys(entry).length;
|
|
217
|
+
return {
|
|
218
|
+
value: `${count.toLocaleString("en-US")} ${Array.isArray(entry) ? count === 1 ? "item" : "items" : count === 1 ? "field" : "fields"}`,
|
|
219
|
+
path: childPath,
|
|
220
|
+
truncated: true
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const text = valueText(safeReviewValue(entry, key, context?.protectedFields));
|
|
224
|
+
return {
|
|
225
|
+
value: bound(text, 4e3),
|
|
226
|
+
...hidden ? {} : { path: childPath },
|
|
227
|
+
truncated: !hidden && text.length > 4e3
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
let total;
|
|
231
|
+
let items;
|
|
232
|
+
if (Array.isArray(value)) {
|
|
233
|
+
total = value.length;
|
|
234
|
+
items = value.slice(offset, offset + limit).map((entry, index) => ({
|
|
235
|
+
label: `${offset + index + 1}`,
|
|
236
|
+
...preview(entry, "", `${path}/${offset + index}`)
|
|
237
|
+
}));
|
|
238
|
+
} else if (value && typeof value === "object") {
|
|
239
|
+
const entries = Object.entries(value);
|
|
240
|
+
total = entries.length;
|
|
241
|
+
items = entries.slice(offset, offset + limit).map(([key, entry], index) => ({
|
|
242
|
+
label: bound(
|
|
243
|
+
(context?.fieldLabels && Object.hasOwn(context.fieldLabels, key) ? context.fieldLabels[key] : void 0) ?? toolReviewFieldLabel(key),
|
|
244
|
+
256
|
|
245
|
+
),
|
|
246
|
+
...preview(entry, key, `${path}${fieldPointer(key, offset + index, path)}`)
|
|
247
|
+
}));
|
|
248
|
+
} else {
|
|
249
|
+
const text = valueText(value);
|
|
250
|
+
total = Math.max(1, Math.ceil(text.length / 4e3));
|
|
251
|
+
items = Array.from({ length: Math.max(0, Math.min(limit, total - offset)) }, (_, index) => ({
|
|
252
|
+
label: `Part ${offset + index + 1}`,
|
|
253
|
+
value: text.slice((offset + index) * 4e3, (offset + index + 1) * 4e3)
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
return { path, items, total, nextOffset: offset + limit < total ? offset + limit : null };
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export {
|
|
260
|
+
toolReviewFieldLabel,
|
|
261
|
+
decodeReviewArguments,
|
|
262
|
+
safeReviewValue,
|
|
263
|
+
toolReviewFields,
|
|
264
|
+
toolReviewAction,
|
|
265
|
+
toolReviewDetails
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=chunk-TCXCRBPF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tool-review-presentation.ts"],"sourcesContent":["import type {\n ToolActionReview,\n ToolReviewContext,\n ToolReviewDetailsPage,\n} from \"./tool-action-review\";\n\nconst protectedName =\n /password|passwd|secret|credential|authorization|cookie|(^|[_-])token($|[_-])|api[_-]?key|accessToken|refreshToken|privateKey/i;\nconst protectedReviewField = (key: string, fields: readonly string[] = []) =>\n protectedName.test(key) || fields.includes(key) || fields.includes(\"*\");\nconst bound = (value: string, limit: number) =>\n value.length > limit ? `${value.slice(0, limit)}…` : value;\nexport function toolReviewFieldLabel(key: string): string {\n const label = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\bids?\\b/gi, (word) => (word.length === 3 ? \"IDs\" : \"ID\"))\n .replace(\n /\\b(api|url|uri|http|https|ip|sql|json|html)(s?)\\b/gi,\n (_word, name: string, plural: string) => `${name.toUpperCase()}${plural}`,\n )\n // Sentence case, keeping acronyms: \"Working Directory\" → \"Working directory\".\n .replace(\n /(?<=\\S\\s+)([A-Z])([a-z]+)\\b/g,\n (_word, first: string, rest: string) => `${first.toLowerCase()}${rest}`,\n )\n .trim();\n return label.charAt(0).toUpperCase() + label.slice(1);\n}\nexport function decodeReviewArguments(value: unknown): Record<string, unknown> | null {\n // Historical SDK entries sometimes wrapped arguments in JSON. Decode only once.\n let decoded = value;\n if (typeof decoded === \"string\") {\n try {\n decoded = JSON.parse(decoded);\n } catch {\n return null;\n }\n }\n return decoded && typeof decoded === \"object\" && !Array.isArray(decoded)\n ? (decoded as Record<string, unknown>)\n : null;\n}\nexport function safeReviewValue(\n value: unknown,\n key = \"\",\n protectedFields: readonly string[] = [],\n depth = 0,\n): unknown {\n if (protectedReviewField(key, protectedFields)) return \"[Protected value]\";\n if (depth > 20) return \"[Nested value; open this field for details]\";\n if (Array.isArray(value))\n return value.map((entry) => safeReviewValue(entry, \"\", protectedFields, depth + 1));\n if (value && typeof value === \"object\")\n return Object.fromEntries(\n Object.entries(value).map(([name, entry]) => [\n name,\n safeReviewValue(entry, name, protectedFields, depth + 1),\n ]),\n );\n return value;\n}\nfunction valueText(value: unknown): string {\n return typeof value === \"string\"\n ? value\n : value === null\n ? \"None\"\n : typeof value === \"boolean\"\n ? value\n ? \"Yes\"\n : \"No\"\n : (JSON.stringify(value) ?? \"Unavailable\");\n}\nconst pointer = (name: string) => `/${name.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\")}`;\n// Long arbitrary property names remain readable without placing them in every\n// preview or URL. An indexed segment opens their saved name and value together.\nconst fieldPointer = (key: string, index: number, parent = \"\") =>\n pointer(key).length > 256 || parent.length + pointer(key).length > 1024\n ? `/~2${index}`\n : pointer(key);\n\nexport function toolReviewFields(\n argumentsValue: unknown,\n context?: ToolReviewContext,\n): { fields: ToolActionReview[\"fields\"]; moreFields: number } {\n const args = decodeReviewArguments(argumentsValue);\n if (!args) return { fields: [], moreFields: 0 };\n const entries = Object.entries(args);\n if (context?.email) {\n const email = toolReviewFields(context.email);\n const original = toolReviewFields(args, { ...context, email: undefined });\n const fields = [\n ...email.fields\n .filter(\n (field) =>\n field.path !== \"/contentSha256\" && field.path !== \"/htmlBody\" && field.preview !== \"\",\n )\n .map((field) => ({\n ...field,\n label: field.path === \"/textBody\" ? \"Message\" : field.label,\n path: `/$email${field.path}`,\n ...(field.path === \"/attachments\"\n ? {\n preview: context\n .email!.attachments.map((attachment) => attachment.name)\n .join(\", \")\n .slice(0, 240),\n }\n : {}),\n })),\n ...original.fields.filter(\n (field) =>\n ![\n \"/raw\",\n \"/expectedContentSha256\",\n \"/from\",\n \"/to\",\n \"/cc\",\n \"/bcc\",\n \"/subject\",\n \"/body\",\n \"/textBody\",\n \"/htmlBody\",\n \"/attachments\",\n ].includes(field.path),\n ),\n ];\n return {\n fields: fields.slice(0, 16),\n moreFields: original.moreFields + Math.max(0, fields.length - 16),\n };\n }\n return {\n moreFields: Math.max(0, entries.length - 16),\n fields: entries.slice(0, 16).map(([key, value], index) => {\n const hidden = protectedReviewField(key, context?.protectedFields);\n const safe = hidden ? \"[Protected value]\" : value;\n const count = !hidden && Array.isArray(value) ? value.length : undefined;\n const compactList =\n !hidden &&\n Array.isArray(value) &&\n value.length > 0 &&\n value.length <= 4 &&\n value.every(\n (entry) =>\n typeof entry === \"string\" || typeof entry === \"number\" || typeof entry === \"boolean\",\n )\n ? value.map(valueText).join(\", \")\n : undefined;\n const text =\n compactList !== undefined\n ? compactList\n : count !== undefined\n ? `${count.toLocaleString(\"en-US\")} item${count === 1 ? \"\" : \"s\"}`\n : safe && typeof safe === \"object\"\n ? `${Object.keys(safe).length} field${Object.keys(safe).length === 1 ? \"\" : \"s\"}`\n : valueText(safe);\n return {\n path: fieldPointer(key, index),\n label: bound(\n (context?.fieldLabels && Object.hasOwn(context.fieldLabels, key)\n ? context.fieldLabels[key]\n : undefined) ?? toolReviewFieldLabel(key),\n 256,\n ),\n preview: bound(text, 240),\n ...(count !== undefined ? { count } : {}),\n truncated:\n !hidden &&\n (text.length > 240 ||\n (compactList === undefined && typeof value === \"object\" && value !== null)),\n ...(hidden ? { protected: true } : {}),\n };\n }),\n };\n}\n\n/** Deterministic consequences from the reviewed bytes. Unknown fields remain visible. */\nexport function toolReviewAction(\n toolName: string,\n argumentsValue: unknown,\n context?: ToolReviewContext,\n): Pick<\n ToolActionReview,\n \"title\" | \"approveLabel\" | \"effects\" | \"consequence\" | \"selectionCount\" | \"selectionKind\"\n> {\n const fallback = {\n title:\n context?.title ??\n bound(\n toolReviewFieldLabel(\n toolName.replace(/^mcp_[^_]+__/, \"\").replace(/^batch[_-](?=[a-z])/i, \"\"),\n ),\n 256,\n ),\n approveLabel: \"Approve action\",\n effects: [] as string[],\n };\n if (context?.kind !== \"gmail\") return fallback;\n const args = decodeReviewArguments(argumentsValue);\n if (!args) return fallback;\n const thread = toolName.endsWith(\"_thread\");\n const selectionKind = thread ? (\"threads\" as const) : (\"messages\" as const);\n const ids =\n thread && typeof args.threadId === \"string\"\n ? [args.threadId]\n : Array.isArray(args.messageIds)\n ? args.messageIds\n : typeof args.messageId === \"string\"\n ? [args.messageId]\n : null;\n const selectionCount = ids?.every((id) => typeof id === \"string\") ? new Set(ids).size : undefined;\n const noun =\n selectionCount === undefined\n ? thread\n ? \"conversations\"\n : \"messages\"\n : `${selectionCount.toLocaleString(\"en-US\")} ${thread ? \"conversation\" : \"message\"}${selectionCount === 1 ? \"\" : \"s\"}`;\n const addValues = toolName.startsWith(\"label_\") ? args.labelIds : args.addLabelIds;\n const adds = Array.isArray(addValues)\n ? addValues.filter((v): v is string => typeof v === \"string\")\n : [];\n const removeValues = toolName.startsWith(\"unlabel_\") ? args.labelIds : args.removeLabelIds;\n const removes = Array.isArray(removeValues)\n ? removeValues.filter((v): v is string => typeof v === \"string\")\n : [];\n const labelEffect = (label: string, adding: boolean): string => {\n const known: Record<string, [string, string]> = {\n TRASH: [\"Move to Trash\", \"Remove from Trash\"],\n INBOX: [\"Move to Inbox\", \"Remove from Inbox\"],\n UNREAD: [\"Mark as unread\", \"Mark as read\"],\n STARRED: [\"Add star\", \"Remove star\"],\n SPAM: [\"Mark as spam\", \"Remove from Spam\"],\n IMPORTANT: [\"Mark as important\", \"Remove importance\"],\n };\n return (\n (Object.hasOwn(known, label) ? known[label]?.[adding ? 0 : 1] : undefined) ??\n `${adding ? \"Add\" : \"Remove\"} label ${bound(label, 120)}`\n );\n };\n const effects = [\n ...adds.map((id) => labelEffect(id, true)),\n ...removes.map((id) => labelEffect(id, false)),\n ];\n if (\n [\n \"batch_modify_messages\",\n \"modify_message\",\n \"modify_thread\",\n \"label_message\",\n \"label_thread\",\n \"unlabel_message\",\n \"unlabel_thread\",\n ].includes(toolName)\n ) {\n const trash = adds.includes(\"TRASH\");\n return {\n title: trash ? `Move ${noun} to Trash` : `Update ${noun}`,\n approveLabel: trash ? \"Move to Trash\" : \"Apply changes\",\n effects,\n ...(selectionCount === undefined ? {} : { selectionCount, selectionKind }),\n ...(trash\n ? { consequence: \"Messages stay recoverable in Trash until Gmail deletes them.\" }\n : thread\n ? { consequence: \"Applies to every message in the conversation.\" }\n : {}),\n };\n }\n if ([\"trash_message\", \"restore_message\", \"trash_thread\", \"restore_thread\"].includes(toolName))\n return {\n title: toolName.startsWith(\"trash_\") ? `Move ${noun} to Trash` : `Remove ${noun} from Trash`,\n approveLabel: toolName.startsWith(\"trash_\") ? \"Move to Trash\" : \"Remove from Trash\",\n effects,\n ...(selectionCount === undefined ? {} : { selectionCount, selectionKind }),\n };\n const named: Record<string, [string, string]> = {\n send_message: [\"Send email\", \"Send email\"],\n send_draft: [\"Send draft\", \"Send draft\"],\n create_draft: [\"Create email draft\", \"Create draft\"],\n update_draft: [\"Update email draft\", \"Update draft\"],\n delete_draft: [\"Delete email draft\", \"Delete draft\"],\n create_label: [\"Create label\", \"Create label\"],\n update_label: [\"Update label\", \"Update label\"],\n delete_label: [\"Delete label\", \"Delete label\"],\n };\n const action = Object.hasOwn(named, toolName) ? named[toolName] : undefined;\n return action ? { title: action[0], approveLabel: action[1], effects } : fallback;\n}\n\n/** A bounded slice of the immutable saved arguments; never evaluates a fresh provider query. */\nexport function toolReviewDetails(\n argumentsValue: unknown,\n context: ToolReviewContext | undefined,\n path: string,\n offset: number,\n limit = 25,\n): Omit<ToolReviewDetailsPage, \"id\" | \"actionDigest\" | \"version\"> {\n if (\n !Number.isSafeInteger(offset) ||\n offset < 0 ||\n !Number.isSafeInteger(limit) ||\n limit < 1 ||\n limit > 50\n )\n throw new Error(\"Invalid review page\");\n const args = decodeReviewArguments(argumentsValue);\n let value: unknown = context?.email ? { ...args, $email: context.email } : args;\n if (path !== \"\") {\n if (!path.startsWith(\"/\")) throw new Error(\"Invalid review field\");\n for (const escaped of path.slice(1).split(\"/\")) {\n if (/^~2\\d+$/.test(escaped)) {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n throw new Error(\"Review field not found\");\n const selected = Object.entries(value)[Number(escaped.slice(2))];\n if (!selected) throw new Error(\"Review field not found\");\n value = {\n fieldName: selected[0],\n value: protectedReviewField(selected[0], context?.protectedFields)\n ? \"[Protected value]\"\n : selected[1],\n };\n continue;\n }\n const key = escaped.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n if (protectedReviewField(key, context?.protectedFields)) {\n value = \"[Protected value]\";\n break;\n }\n if (!value || typeof value !== \"object\" || !Object.hasOwn(value, key))\n throw new Error(\"Review field not found\");\n value = (value as Record<string, unknown>)[key];\n }\n }\n type DetailItem = ToolReviewDetailsPage[\"items\"][number];\n const preview = (\n entry: unknown,\n key: string,\n childPath: string,\n ): Pick<DetailItem, \"value\" | \"truncated\" | \"path\"> => {\n const hidden = protectedReviewField(key, context?.protectedFields);\n if (!hidden && entry !== null && typeof entry === \"object\") {\n const count = Array.isArray(entry) ? entry.length : Object.keys(entry).length;\n return {\n value: `${count.toLocaleString(\"en-US\")} ${Array.isArray(entry) ? (count === 1 ? \"item\" : \"items\") : count === 1 ? \"field\" : \"fields\"}`,\n path: childPath,\n truncated: true,\n };\n }\n const text = valueText(safeReviewValue(entry, key, context?.protectedFields));\n return {\n value: bound(text, 4000),\n ...(hidden ? {} : { path: childPath }),\n truncated: !hidden && text.length > 4000,\n };\n };\n let total: number;\n let items: DetailItem[];\n if (Array.isArray(value)) {\n total = value.length;\n items = value.slice(offset, offset + limit).map((entry, index) => ({\n label: `${offset + index + 1}`,\n ...preview(entry, \"\", `${path}/${offset + index}`),\n }));\n } else if (value && typeof value === \"object\") {\n const entries = Object.entries(value);\n total = entries.length;\n items = entries.slice(offset, offset + limit).map(([key, entry], index) => ({\n label: bound(\n (context?.fieldLabels && Object.hasOwn(context.fieldLabels, key)\n ? context.fieldLabels[key]\n : undefined) ?? toolReviewFieldLabel(key),\n 256,\n ),\n ...preview(entry, key, `${path}${fieldPointer(key, offset + index, path)}`),\n }));\n } else {\n const text = valueText(value);\n total = Math.max(1, Math.ceil(text.length / 4000));\n items = Array.from({ length: Math.max(0, Math.min(limit, total - offset)) }, (_, index) => ({\n label: `Part ${offset + index + 1}`,\n value: text.slice((offset + index) * 4000, (offset + index + 1) * 4000),\n }));\n }\n return { path, items, total, nextOffset: offset + limit < total ? offset + limit : null };\n}\n"],"mappings":";AAMA,IAAM,gBACJ;AACF,IAAM,uBAAuB,CAAC,KAAa,SAA4B,CAAC,MACtE,cAAc,KAAK,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AACxE,IAAM,QAAQ,CAAC,OAAe,UAC5B,MAAM,SAAS,QAAQ,GAAG,MAAM,MAAM,GAAG,KAAK,CAAC,WAAM;AAChD,SAAS,qBAAqB,KAAqB;AACxD,QAAM,QAAQ,IACX,QAAQ,sBAAsB,OAAO,EACrC,QAAQ,UAAU,GAAG,EACrB,QAAQ,cAAc,CAAC,SAAU,KAAK,WAAW,IAAI,QAAQ,IAAK,EAClE;AAAA,IACC;AAAA,IACA,CAAC,OAAO,MAAc,WAAmB,GAAG,KAAK,YAAY,CAAC,GAAG,MAAM;AAAA,EACzE,EAEC;AAAA,IACC;AAAA,IACA,CAAC,OAAO,OAAe,SAAiB,GAAG,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,EACvE,EACC,KAAK;AACR,SAAO,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AACtD;AACO,SAAS,sBAAsB,OAAgD;AAEpF,MAAI,UAAU;AACd,MAAI,OAAO,YAAY,UAAU;AAC/B,QAAI;AACF,gBAAU,KAAK,MAAM,OAAO;AAAA,IAC9B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,WAAW,OAAO,YAAY,YAAY,CAAC,MAAM,QAAQ,OAAO,IAClE,UACD;AACN;AACO,SAAS,gBACd,OACA,MAAM,IACN,kBAAqC,CAAC,GACtC,QAAQ,GACC;AACT,MAAI,qBAAqB,KAAK,eAAe,EAAG,QAAO;AACvD,MAAI,QAAQ,GAAI,QAAO;AACvB,MAAI,MAAM,QAAQ,KAAK;AACrB,WAAO,MAAM,IAAI,CAAC,UAAU,gBAAgB,OAAO,IAAI,iBAAiB,QAAQ,CAAC,CAAC;AACpF,MAAI,SAAS,OAAO,UAAU;AAC5B,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AAAA,QAC3C;AAAA,QACA,gBAAgB,OAAO,MAAM,iBAAiB,QAAQ,CAAC;AAAA,MACzD,CAAC;AAAA,IACH;AACF,SAAO;AACT;AACA,SAAS,UAAU,OAAwB;AACzC,SAAO,OAAO,UAAU,WACpB,QACA,UAAU,OACR,SACA,OAAO,UAAU,YACf,QACE,QACA,OACD,KAAK,UAAU,KAAK,KAAK;AACpC;AACA,IAAM,UAAU,CAAC,SAAiB,IAAI,KAAK,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;AAGtF,IAAM,eAAe,CAAC,KAAa,OAAe,SAAS,OACzD,QAAQ,GAAG,EAAE,SAAS,OAAO,OAAO,SAAS,QAAQ,GAAG,EAAE,SAAS,OAC/D,MAAM,KAAK,KACX,QAAQ,GAAG;AAEV,SAAS,iBACd,gBACA,SAC4D;AAC5D,QAAM,OAAO,sBAAsB,cAAc;AACjD,MAAI,CAAC,KAAM,QAAO,EAAE,QAAQ,CAAC,GAAG,YAAY,EAAE;AAC9C,QAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,MAAI,SAAS,OAAO;AAClB,UAAM,QAAQ,iBAAiB,QAAQ,KAAK;AAC5C,UAAM,WAAW,iBAAiB,MAAM,EAAE,GAAG,SAAS,OAAO,OAAU,CAAC;AACxE,UAAM,SAAS;AAAA,MACb,GAAG,MAAM,OACN;AAAA,QACC,CAAC,UACC,MAAM,SAAS,oBAAoB,MAAM,SAAS,eAAe,MAAM,YAAY;AAAA,MACvF,EACC,IAAI,CAAC,WAAW;AAAA,QACf,GAAG;AAAA,QACH,OAAO,MAAM,SAAS,cAAc,YAAY,MAAM;AAAA,QACtD,MAAM,UAAU,MAAM,IAAI;AAAA,QAC1B,GAAI,MAAM,SAAS,iBACf;AAAA,UACE,SAAS,QACN,MAAO,YAAY,IAAI,CAAC,eAAe,WAAW,IAAI,EACtD,KAAK,IAAI,EACT,MAAM,GAAG,GAAG;AAAA,QACjB,IACA,CAAC;AAAA,MACP,EAAE;AAAA,MACJ,GAAG,SAAS,OAAO;AAAA,QACjB,CAAC,UACC,CAAC;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,SAAS,MAAM,IAAI;AAAA,MACzB;AAAA,IACF;AACA,WAAO;AAAA,MACL,QAAQ,OAAO,MAAM,GAAG,EAAE;AAAA,MAC1B,YAAY,SAAS,aAAa,KAAK,IAAI,GAAG,OAAO,SAAS,EAAE;AAAA,IAClE;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY,KAAK,IAAI,GAAG,QAAQ,SAAS,EAAE;AAAA,IAC3C,QAAQ,QAAQ,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,UAAU;AACxD,YAAM,SAAS,qBAAqB,KAAK,SAAS,eAAe;AACjE,YAAM,OAAO,SAAS,sBAAsB;AAC5C,YAAM,QAAQ,CAAC,UAAU,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS;AAC/D,YAAM,cACJ,CAAC,UACD,MAAM,QAAQ,KAAK,KACnB,MAAM,SAAS,KACf,MAAM,UAAU,KAChB,MAAM;AAAA,QACJ,CAAC,UACC,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,MAC/E,IACI,MAAM,IAAI,SAAS,EAAE,KAAK,IAAI,IAC9B;AACN,YAAM,OACJ,gBAAgB,SACZ,cACA,UAAU,SACR,GAAG,MAAM,eAAe,OAAO,CAAC,QAAQ,UAAU,IAAI,KAAK,GAAG,KAC9D,QAAQ,OAAO,SAAS,WACtB,GAAG,OAAO,KAAK,IAAI,EAAE,MAAM,SAAS,OAAO,KAAK,IAAI,EAAE,WAAW,IAAI,KAAK,GAAG,KAC7E,UAAU,IAAI;AACxB,aAAO;AAAA,QACL,MAAM,aAAa,KAAK,KAAK;AAAA,QAC7B,OAAO;AAAA,WACJ,SAAS,eAAe,OAAO,OAAO,QAAQ,aAAa,GAAG,IAC3D,QAAQ,YAAY,GAAG,IACvB,WAAc,qBAAqB,GAAG;AAAA,UAC1C;AAAA,QACF;AAAA,QACA,SAAS,MAAM,MAAM,GAAG;AAAA,QACxB,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,QACvC,WACE,CAAC,WACA,KAAK,SAAS,OACZ,gBAAgB,UAAa,OAAO,UAAU,YAAY,UAAU;AAAA,QACzE,GAAI,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGO,SAAS,iBACd,UACA,gBACA,SAIA;AACA,QAAM,WAAW;AAAA,IACf,OACE,SAAS,SACT;AAAA,MACE;AAAA,QACE,SAAS,QAAQ,gBAAgB,EAAE,EAAE,QAAQ,wBAAwB,EAAE;AAAA,MACzE;AAAA,MACA;AAAA,IACF;AAAA,IACF,cAAc;AAAA,IACd,SAAS,CAAC;AAAA,EACZ;AACA,MAAI,SAAS,SAAS,QAAS,QAAO;AACtC,QAAM,OAAO,sBAAsB,cAAc;AACjD,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,SAAS,SAAS,SAAS,SAAS;AAC1C,QAAM,gBAAgB,SAAU,YAAuB;AACvD,QAAM,MACJ,UAAU,OAAO,KAAK,aAAa,WAC/B,CAAC,KAAK,QAAQ,IACd,MAAM,QAAQ,KAAK,UAAU,IAC3B,KAAK,aACL,OAAO,KAAK,cAAc,WACxB,CAAC,KAAK,SAAS,IACf;AACV,QAAM,iBAAiB,KAAK,MAAM,CAAC,OAAO,OAAO,OAAO,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE,OAAO;AACxF,QAAM,OACJ,mBAAmB,SACf,SACE,kBACA,aACF,GAAG,eAAe,eAAe,OAAO,CAAC,IAAI,SAAS,iBAAiB,SAAS,GAAG,mBAAmB,IAAI,KAAK,GAAG;AACxH,QAAM,YAAY,SAAS,WAAW,QAAQ,IAAI,KAAK,WAAW,KAAK;AACvE,QAAM,OAAO,MAAM,QAAQ,SAAS,IAChC,UAAU,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ,IAC1D,CAAC;AACL,QAAM,eAAe,SAAS,WAAW,UAAU,IAAI,KAAK,WAAW,KAAK;AAC5E,QAAM,UAAU,MAAM,QAAQ,YAAY,IACtC,aAAa,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ,IAC7D,CAAC;AACL,QAAM,cAAc,CAAC,OAAe,WAA4B;AAC9D,UAAM,QAA0C;AAAA,MAC9C,OAAO,CAAC,iBAAiB,mBAAmB;AAAA,MAC5C,OAAO,CAAC,iBAAiB,mBAAmB;AAAA,MAC5C,QAAQ,CAAC,kBAAkB,cAAc;AAAA,MACzC,SAAS,CAAC,YAAY,aAAa;AAAA,MACnC,MAAM,CAAC,gBAAgB,kBAAkB;AAAA,MACzC,WAAW,CAAC,qBAAqB,mBAAmB;AAAA,IACtD;AACA,YACG,OAAO,OAAO,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,SAAS,IAAI,CAAC,IAAI,WAChE,GAAG,SAAS,QAAQ,QAAQ,UAAU,MAAM,OAAO,GAAG,CAAC;AAAA,EAE3D;AACA,QAAM,UAAU;AAAA,IACd,GAAG,KAAK,IAAI,CAAC,OAAO,YAAY,IAAI,IAAI,CAAC;AAAA,IACzC,GAAG,QAAQ,IAAI,CAAC,OAAO,YAAY,IAAI,KAAK,CAAC;AAAA,EAC/C;AACA,MACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ,GACnB;AACA,UAAM,QAAQ,KAAK,SAAS,OAAO;AACnC,WAAO;AAAA,MACL,OAAO,QAAQ,QAAQ,IAAI,cAAc,UAAU,IAAI;AAAA,MACvD,cAAc,QAAQ,kBAAkB;AAAA,MACxC;AAAA,MACA,GAAI,mBAAmB,SAAY,CAAC,IAAI,EAAE,gBAAgB,cAAc;AAAA,MACxE,GAAI,QACA,EAAE,aAAa,+DAA+D,IAC9E,SACE,EAAE,aAAa,gDAAgD,IAC/D,CAAC;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,iBAAiB,mBAAmB,gBAAgB,gBAAgB,EAAE,SAAS,QAAQ;AAC1F,WAAO;AAAA,MACL,OAAO,SAAS,WAAW,QAAQ,IAAI,QAAQ,IAAI,cAAc,UAAU,IAAI;AAAA,MAC/E,cAAc,SAAS,WAAW,QAAQ,IAAI,kBAAkB;AAAA,MAChE;AAAA,MACA,GAAI,mBAAmB,SAAY,CAAC,IAAI,EAAE,gBAAgB,cAAc;AAAA,IAC1E;AACF,QAAM,QAA0C;AAAA,IAC9C,cAAc,CAAC,cAAc,YAAY;AAAA,IACzC,YAAY,CAAC,cAAc,YAAY;AAAA,IACvC,cAAc,CAAC,sBAAsB,cAAc;AAAA,IACnD,cAAc,CAAC,sBAAsB,cAAc;AAAA,IACnD,cAAc,CAAC,sBAAsB,cAAc;AAAA,IACnD,cAAc,CAAC,gBAAgB,cAAc;AAAA,IAC7C,cAAc,CAAC,gBAAgB,cAAc;AAAA,IAC7C,cAAc,CAAC,gBAAgB,cAAc;AAAA,EAC/C;AACA,QAAM,SAAS,OAAO,OAAO,OAAO,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAClE,SAAO,SAAS,EAAE,OAAO,OAAO,CAAC,GAAG,cAAc,OAAO,CAAC,GAAG,QAAQ,IAAI;AAC3E;AAGO,SAAS,kBACd,gBACA,SACA,MACA,QACA,QAAQ,IACwD;AAChE,MACE,CAAC,OAAO,cAAc,MAAM,KAC5B,SAAS,KACT,CAAC,OAAO,cAAc,KAAK,KAC3B,QAAQ,KACR,QAAQ;AAER,UAAM,IAAI,MAAM,qBAAqB;AACvC,QAAM,OAAO,sBAAsB,cAAc;AACjD,MAAI,QAAiB,SAAS,QAAQ,EAAE,GAAG,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAC3E,MAAI,SAAS,IAAI;AACf,QAAI,CAAC,KAAK,WAAW,GAAG,EAAG,OAAM,IAAI,MAAM,sBAAsB;AACjE,eAAW,WAAW,KAAK,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG;AAC9C,UAAI,UAAU,KAAK,OAAO,GAAG;AAC3B,YAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC5D,gBAAM,IAAI,MAAM,wBAAwB;AAC1C,cAAM,WAAW,OAAO,QAAQ,KAAK,EAAE,OAAO,QAAQ,MAAM,CAAC,CAAC,CAAC;AAC/D,YAAI,CAAC,SAAU,OAAM,IAAI,MAAM,wBAAwB;AACvD,gBAAQ;AAAA,UACN,WAAW,SAAS,CAAC;AAAA,UACrB,OAAO,qBAAqB,SAAS,CAAC,GAAG,SAAS,eAAe,IAC7D,sBACA,SAAS,CAAC;AAAA,QAChB;AACA;AAAA,MACF;AACA,YAAM,MAAM,QAAQ,WAAW,MAAM,GAAG,EAAE,WAAW,MAAM,GAAG;AAC9D,UAAI,qBAAqB,KAAK,SAAS,eAAe,GAAG;AACvD,gBAAQ;AACR;AAAA,MACF;AACA,UAAI,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,OAAO,OAAO,OAAO,GAAG;AAClE,cAAM,IAAI,MAAM,wBAAwB;AAC1C,cAAS,MAAkC,GAAG;AAAA,IAChD;AAAA,EACF;AAEA,QAAM,UAAU,CACd,OACA,KACA,cACqD;AACrD,UAAM,SAAS,qBAAqB,KAAK,SAAS,eAAe;AACjE,QAAI,CAAC,UAAU,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC1D,YAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,OAAO,KAAK,KAAK,EAAE;AACvE,aAAO;AAAA,QACL,OAAO,GAAG,MAAM,eAAe,OAAO,CAAC,IAAI,MAAM,QAAQ,KAAK,IAAK,UAAU,IAAI,SAAS,UAAW,UAAU,IAAI,UAAU,QAAQ;AAAA,QACrI,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF;AACA,UAAM,OAAO,UAAU,gBAAgB,OAAO,KAAK,SAAS,eAAe,CAAC;AAC5E,WAAO;AAAA,MACL,OAAO,MAAM,MAAM,GAAI;AAAA,MACvB,GAAI,SAAS,CAAC,IAAI,EAAE,MAAM,UAAU;AAAA,MACpC,WAAW,CAAC,UAAU,KAAK,SAAS;AAAA,IACtC;AAAA,EACF;AACA,MAAI;AACJ,MAAI;AACJ,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAQ,MAAM;AACd,YAAQ,MAAM,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,CAAC,OAAO,WAAW;AAAA,MACjE,OAAO,GAAG,SAAS,QAAQ,CAAC;AAAA,MAC5B,GAAG,QAAQ,OAAO,IAAI,GAAG,IAAI,IAAI,SAAS,KAAK,EAAE;AAAA,IACnD,EAAE;AAAA,EACJ,WAAW,SAAS,OAAO,UAAU,UAAU;AAC7C,UAAM,UAAU,OAAO,QAAQ,KAAK;AACpC,YAAQ,QAAQ;AAChB,YAAQ,QAAQ,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,WAAW;AAAA,MAC1E,OAAO;AAAA,SACJ,SAAS,eAAe,OAAO,OAAO,QAAQ,aAAa,GAAG,IAC3D,QAAQ,YAAY,GAAG,IACvB,WAAc,qBAAqB,GAAG;AAAA,QAC1C;AAAA,MACF;AAAA,MACA,GAAG,QAAQ,OAAO,KAAK,GAAG,IAAI,GAAG,aAAa,KAAK,SAAS,OAAO,IAAI,CAAC,EAAE;AAAA,IAC5E,EAAE;AAAA,EACJ,OAAO;AACL,UAAM,OAAO,UAAU,KAAK;AAC5B,YAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,SAAS,GAAI,CAAC;AACjD,YAAQ,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,QAAQ,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,WAAW;AAAA,MAC1F,OAAO,QAAQ,SAAS,QAAQ,CAAC;AAAA,MACjC,OAAO,KAAK,OAAO,SAAS,SAAS,MAAO,SAAS,QAAQ,KAAK,GAAI;AAAA,IACxE,EAAE;AAAA,EACJ;AACA,SAAO,EAAE,MAAM,OAAO,OAAO,YAAY,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAK;AAC1F;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConnectionKind,
|
|
3
3
|
SessionTenancyVisibility
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YFEAAOBX.js";
|
|
5
5
|
|
|
6
6
|
// src/connection-authority.ts
|
|
7
7
|
import { z } from "zod";
|
|
@@ -183,4 +183,4 @@ export {
|
|
|
183
183
|
ConnectionUseAuditFact,
|
|
184
184
|
ConnectionUseAuthorizationResult
|
|
185
185
|
};
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# sourceMappingURL=chunk-UDKWSRES.js.map
|