cbrowser 18.3.9 → 18.3.11
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/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +8 -1
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +4 -2
- package/dist/mcp-tools/base/index.d.ts.map +1 -1
- package/dist/mcp-tools/base/index.js +7 -2
- package/dist/mcp-tools/base/index.js.map +1 -1
- package/dist/mcp-tools/base/security-tools.d.ts +12 -0
- package/dist/mcp-tools/base/security-tools.d.ts.map +1 -0
- package/dist/mcp-tools/base/security-tools.js +85 -0
- package/dist/mcp-tools/base/security-tools.js.map +1 -0
- package/dist/security/audit-wrapper.d.ts +148 -0
- package/dist/security/audit-wrapper.d.ts.map +1 -0
- package/dist/security/audit-wrapper.js +433 -0
- package/dist/security/audit-wrapper.js.map +1 -0
- package/dist/security/description-scanner.d.ts +132 -0
- package/dist/security/description-scanner.d.ts.map +1 -0
- package/dist/security/description-scanner.js +408 -0
- package/dist/security/description-scanner.js.map +1 -0
- package/dist/security/index.d.ts +23 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +29 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/output-sanitizer.d.ts +132 -0
- package/dist/security/output-sanitizer.d.ts.map +1 -0
- package/dist/security/output-sanitizer.js +344 -0
- package/dist/security/output-sanitizer.js.map +1 -0
- package/dist/security/request-signing.d.ts +53 -0
- package/dist/security/request-signing.d.ts.map +1 -0
- package/dist/security/request-signing.js +142 -0
- package/dist/security/request-signing.js.map +1 -0
- package/dist/security/tool-permissions.d.ts +96 -0
- package/dist/security/tool-permissions.d.ts.map +1 -0
- package/dist/security/tool-permissions.js +317 -0
- package/dist/security/tool-permissions.js.map +1 -0
- package/dist/security/tool-pinning.d.ts +143 -0
- package/dist/security/tool-pinning.d.ts.map +1 -0
- package/dist/security/tool-pinning.js +302 -0
- package/dist/security/tool-pinning.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Tool Definition Pinning for CBrowser MCP Server
|
|
8
|
+
*
|
|
9
|
+
* Provides hash verification for MCP tool definitions to detect tampering.
|
|
10
|
+
* Creates a manifest of tool hashes on first use and verifies against it
|
|
11
|
+
* on subsequent uses.
|
|
12
|
+
*
|
|
13
|
+
* Security Model:
|
|
14
|
+
* - Tool definitions (name, description, schema) are hashed on registration
|
|
15
|
+
* - Hashes are stored in ~/.cbrowser/tool-manifest.json
|
|
16
|
+
* - On each startup, hashes are verified against the manifest
|
|
17
|
+
* - Changes are detected and reported (warn-only mode for now)
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* import { verifyToolDefinitions } from "./security/tool-pinning.js";
|
|
21
|
+
*
|
|
22
|
+
* const tools = collectToolDefinitions(server);
|
|
23
|
+
* const result = verifyToolDefinitions(tools);
|
|
24
|
+
* if (result.status === "changed") {
|
|
25
|
+
* console.warn("Tool definitions changed:", result.message);
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
import { createHash } from "node:crypto";
|
|
29
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
30
|
+
import { join } from "node:path";
|
|
31
|
+
import { getDataDir } from "../config.js";
|
|
32
|
+
import { VERSION } from "../version.js";
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Core Functions
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Get the path to the tool manifest file.
|
|
38
|
+
* Uses ~/.cbrowser/tool-manifest.json by default.
|
|
39
|
+
*/
|
|
40
|
+
export function getManifestPath() {
|
|
41
|
+
const dataDir = getDataDir();
|
|
42
|
+
return join(dataDir, "tool-manifest.json");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a SHA-256 hash of a tool definition.
|
|
46
|
+
*
|
|
47
|
+
* The hash includes:
|
|
48
|
+
* - Tool name
|
|
49
|
+
* - Tool description
|
|
50
|
+
* - JSON-stringified schema (sorted keys for consistency)
|
|
51
|
+
*
|
|
52
|
+
* @param name - Tool name
|
|
53
|
+
* @param description - Tool description
|
|
54
|
+
* @param schema - Tool schema object
|
|
55
|
+
* @returns 64-character hex SHA-256 hash
|
|
56
|
+
*/
|
|
57
|
+
export function hashToolDefinition(name, description, schema) {
|
|
58
|
+
// Use sorted JSON for consistent hashing
|
|
59
|
+
const payload = JSON.stringify({
|
|
60
|
+
name,
|
|
61
|
+
description,
|
|
62
|
+
schema: sortObjectKeys(schema),
|
|
63
|
+
});
|
|
64
|
+
return createHash("sha256").update(payload).digest("hex");
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Recursively sort object keys for consistent JSON stringification.
|
|
68
|
+
*/
|
|
69
|
+
function sortObjectKeys(obj) {
|
|
70
|
+
if (obj === null || typeof obj !== "object") {
|
|
71
|
+
return obj;
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(obj)) {
|
|
74
|
+
return obj.map(sortObjectKeys);
|
|
75
|
+
}
|
|
76
|
+
const sorted = {};
|
|
77
|
+
const keys = Object.keys(obj).sort();
|
|
78
|
+
for (const key of keys) {
|
|
79
|
+
sorted[key] = sortObjectKeys(obj[key]);
|
|
80
|
+
}
|
|
81
|
+
return sorted;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Count the number of parameters in a schema.
|
|
85
|
+
* Assumes top-level keys are parameters.
|
|
86
|
+
*/
|
|
87
|
+
function countParameters(schema) {
|
|
88
|
+
if (schema === null || typeof schema !== "object") {
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
return Object.keys(schema).length;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a new tool manifest from a list of tool definitions.
|
|
95
|
+
*
|
|
96
|
+
* @param tools - Array of tool definitions
|
|
97
|
+
* @returns Complete manifest ready for saving
|
|
98
|
+
*/
|
|
99
|
+
export function createToolManifest(tools) {
|
|
100
|
+
const now = new Date().toISOString();
|
|
101
|
+
const toolEntries = {};
|
|
102
|
+
for (const tool of tools) {
|
|
103
|
+
toolEntries[tool.name] = {
|
|
104
|
+
hash: hashToolDefinition(tool.name, tool.description, tool.schema),
|
|
105
|
+
descriptionLength: tool.description.length,
|
|
106
|
+
parameterCount: countParameters(tool.schema),
|
|
107
|
+
pinnedAt: now,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
server: "cbrowser",
|
|
112
|
+
version: VERSION,
|
|
113
|
+
pinnedAt: now,
|
|
114
|
+
tools: toolEntries,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load the tool manifest from disk.
|
|
119
|
+
*
|
|
120
|
+
* @returns Manifest if it exists and is valid, null otherwise
|
|
121
|
+
*/
|
|
122
|
+
export function loadToolManifest() {
|
|
123
|
+
const path = getManifestPath();
|
|
124
|
+
if (!existsSync(path)) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const content = readFileSync(path, "utf-8");
|
|
129
|
+
const manifest = JSON.parse(content);
|
|
130
|
+
// Basic validation
|
|
131
|
+
if (!manifest.server || !manifest.tools) {
|
|
132
|
+
console.error("[Tool Pinning] Invalid manifest structure");
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
return manifest;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error("[Tool Pinning] Failed to load manifest:", error.message);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Save a tool manifest to disk.
|
|
144
|
+
* Creates the directory if it doesn't exist.
|
|
145
|
+
*
|
|
146
|
+
* @param manifest - The manifest to save
|
|
147
|
+
*/
|
|
148
|
+
export function saveToolManifest(manifest) {
|
|
149
|
+
const path = getManifestPath();
|
|
150
|
+
const dir = join(path, "..");
|
|
151
|
+
if (!existsSync(dir)) {
|
|
152
|
+
mkdirSync(dir, { recursive: true });
|
|
153
|
+
}
|
|
154
|
+
const content = JSON.stringify(manifest, null, 2);
|
|
155
|
+
writeFileSync(path, content, "utf-8");
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Verify tool definitions against the pinned manifest.
|
|
159
|
+
*
|
|
160
|
+
* Behavior:
|
|
161
|
+
* - If no manifest exists: Creates one and returns status "created"
|
|
162
|
+
* - If all hashes match: Returns status "verified"
|
|
163
|
+
* - If any differences: Returns status "changed" with details
|
|
164
|
+
*
|
|
165
|
+
* @param tools - Current tool definitions from MCP server
|
|
166
|
+
* @returns Verification result
|
|
167
|
+
*/
|
|
168
|
+
export function verifyToolDefinitions(tools) {
|
|
169
|
+
const existingManifest = loadToolManifest();
|
|
170
|
+
// No manifest exists - create one
|
|
171
|
+
if (!existingManifest) {
|
|
172
|
+
const manifest = createToolManifest(tools);
|
|
173
|
+
saveToolManifest(manifest);
|
|
174
|
+
return {
|
|
175
|
+
status: "created",
|
|
176
|
+
message: `Tool manifest created with ${tools.length} tools`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Compare current tools against manifest
|
|
180
|
+
const currentToolNames = new Set(tools.map((t) => t.name));
|
|
181
|
+
const pinnedToolNames = new Set(Object.keys(existingManifest.tools));
|
|
182
|
+
const changedTools = [];
|
|
183
|
+
const newTools = [];
|
|
184
|
+
const removedTools = [];
|
|
185
|
+
// Check each current tool
|
|
186
|
+
for (const tool of tools) {
|
|
187
|
+
const pinEntry = existingManifest.tools[tool.name];
|
|
188
|
+
if (!pinEntry) {
|
|
189
|
+
// Tool exists in current but not in manifest
|
|
190
|
+
newTools.push(tool.name);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Tool exists in both - verify hash
|
|
194
|
+
const currentHash = hashToolDefinition(tool.name, tool.description, tool.schema);
|
|
195
|
+
if (currentHash !== pinEntry.hash) {
|
|
196
|
+
changedTools.push(tool.name);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Check for removed tools
|
|
201
|
+
for (const pinnedName of pinnedToolNames) {
|
|
202
|
+
if (!currentToolNames.has(pinnedName)) {
|
|
203
|
+
removedTools.push(pinnedName);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Determine overall status
|
|
207
|
+
const hasChanges = changedTools.length > 0 || newTools.length > 0 || removedTools.length > 0;
|
|
208
|
+
if (!hasChanges) {
|
|
209
|
+
return {
|
|
210
|
+
status: "verified",
|
|
211
|
+
message: `All ${tools.length} tool definitions verified successfully`,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// Build change message
|
|
215
|
+
const parts = [];
|
|
216
|
+
if (changedTools.length > 0) {
|
|
217
|
+
parts.push(`${changedTools.length} modified: ${changedTools.join(", ")}`);
|
|
218
|
+
}
|
|
219
|
+
if (newTools.length > 0) {
|
|
220
|
+
parts.push(`${newTools.length} new: ${newTools.join(", ")}`);
|
|
221
|
+
}
|
|
222
|
+
if (removedTools.length > 0) {
|
|
223
|
+
parts.push(`${removedTools.length} removed: ${removedTools.join(", ")}`);
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
status: "changed",
|
|
227
|
+
changedTools: changedTools.length > 0 ? changedTools : undefined,
|
|
228
|
+
newTools: newTools.length > 0 ? newTools : undefined,
|
|
229
|
+
removedTools: removedTools.length > 0 ? removedTools : undefined,
|
|
230
|
+
message: `Tool definition changes detected: ${parts.join("; ")}`,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Approve a tool change by updating its hash in the manifest.
|
|
235
|
+
* Used to re-approve a tool after intentional modification.
|
|
236
|
+
*
|
|
237
|
+
* @param toolName - Name of the tool to approve
|
|
238
|
+
* @param tool - Current tool definition
|
|
239
|
+
* @throws Error if no manifest exists
|
|
240
|
+
*/
|
|
241
|
+
export function approveToolChange(toolName, tool) {
|
|
242
|
+
const manifest = loadToolManifest();
|
|
243
|
+
if (!manifest) {
|
|
244
|
+
throw new Error("Cannot approve tool change: no manifest exists");
|
|
245
|
+
}
|
|
246
|
+
const now = new Date().toISOString();
|
|
247
|
+
manifest.tools[toolName] = {
|
|
248
|
+
hash: hashToolDefinition(tool.name, tool.description, tool.schema),
|
|
249
|
+
descriptionLength: tool.description.length,
|
|
250
|
+
parameterCount: countParameters(tool.schema),
|
|
251
|
+
pinnedAt: now,
|
|
252
|
+
};
|
|
253
|
+
saveToolManifest(manifest);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Remove a tool from the manifest.
|
|
257
|
+
* Used when a tool is intentionally removed.
|
|
258
|
+
*
|
|
259
|
+
* @param toolName - Name of the tool to remove
|
|
260
|
+
* @throws Error if no manifest exists
|
|
261
|
+
*/
|
|
262
|
+
export function removeToolFromManifest(toolName) {
|
|
263
|
+
const manifest = loadToolManifest();
|
|
264
|
+
if (!manifest) {
|
|
265
|
+
throw new Error("Cannot remove tool: no manifest exists");
|
|
266
|
+
}
|
|
267
|
+
if (manifest.tools[toolName]) {
|
|
268
|
+
delete manifest.tools[toolName];
|
|
269
|
+
saveToolManifest(manifest);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Approve all current tools, replacing the entire manifest.
|
|
274
|
+
* Use with caution - this trusts the current state completely.
|
|
275
|
+
*
|
|
276
|
+
* @param tools - Current tool definitions
|
|
277
|
+
*/
|
|
278
|
+
export function approveAllTools(tools) {
|
|
279
|
+
const manifest = createToolManifest(tools);
|
|
280
|
+
saveToolManifest(manifest);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get a summary of the current manifest for status display.
|
|
284
|
+
*/
|
|
285
|
+
export function getManifestSummary() {
|
|
286
|
+
const manifest = loadToolManifest();
|
|
287
|
+
if (!manifest) {
|
|
288
|
+
return {
|
|
289
|
+
exists: false,
|
|
290
|
+
toolCount: 0,
|
|
291
|
+
version: null,
|
|
292
|
+
pinnedAt: null,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
exists: true,
|
|
297
|
+
toolCount: Object.keys(manifest.tools).length,
|
|
298
|
+
version: manifest.version,
|
|
299
|
+
pinnedAt: manifest.pinnedAt,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=tool-pinning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-pinning.js","sourceRoot":"","sources":["../../src/security/tool-pinning.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA+DxC,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,WAAmB,EACnB,MAAe;IAEf,yCAAyC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAI;QACJ,WAAW;QACX,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAiC,CAAC,CAAC,MAAM,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAuB;IACxD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,WAAW,GAAiC,EAAE,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACvB,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;YAClE,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YAC1C,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,QAAQ,EAAE,GAAG;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,WAAW;KACnB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;QAErD,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAuB;IAC3D,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAE5C,kCAAkC;IAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,8BAA8B,KAAK,CAAC,MAAM,QAAQ;SAC5D,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAErE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,0BAA0B;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,6CAA6C;YAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjF,IAAI,WAAW,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GACd,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,OAAO,KAAK,CAAC,MAAM,yCAAyC;SACtE,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,cAAc,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,SAAS,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,aAAa,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAChE,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACpD,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAChE,OAAO,EAAE,qCAAqC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KACjE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,IAAoB;IACtE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;QACzB,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QAClE,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;QAC1C,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5C,QAAQ,EAAE,GAAG;KACd,CAAC;IAEF,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAMhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM;QAC7C,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1681,6 +1681,32 @@ export interface AuditEntry {
|
|
|
1681
1681
|
persona?: string;
|
|
1682
1682
|
duration?: number;
|
|
1683
1683
|
}
|
|
1684
|
+
/**
|
|
1685
|
+
* Tool invocation audit entry for MCP tool call logging.
|
|
1686
|
+
* Captures tool name, parameters, timing, and results for security auditing.
|
|
1687
|
+
*/
|
|
1688
|
+
export interface ToolInvocationEntry {
|
|
1689
|
+
/** ISO timestamp of when the tool was invoked */
|
|
1690
|
+
timestamp: string;
|
|
1691
|
+
/** Current MCP session ID */
|
|
1692
|
+
sessionId: string;
|
|
1693
|
+
/** Unique request ID for this invocation */
|
|
1694
|
+
requestId: string;
|
|
1695
|
+
/** Name of the tool that was invoked */
|
|
1696
|
+
tool: string;
|
|
1697
|
+
/** Parameters passed to the tool (sensitive values redacted) */
|
|
1698
|
+
parameters: Record<string, unknown>;
|
|
1699
|
+
/** Security zone of this action */
|
|
1700
|
+
zone: ActionZone;
|
|
1701
|
+
/** Result status of the invocation */
|
|
1702
|
+
result: "success" | "failure" | "blocked";
|
|
1703
|
+
/** Duration of the tool execution in milliseconds */
|
|
1704
|
+
duration: number;
|
|
1705
|
+
/** Error message if result is failure */
|
|
1706
|
+
error?: string;
|
|
1707
|
+
/** IDs of AuditEntry records triggered by this tool invocation */
|
|
1708
|
+
actionsTriggered: string[];
|
|
1709
|
+
}
|
|
1684
1710
|
export interface StoredCredential {
|
|
1685
1711
|
site: string;
|
|
1686
1712
|
username: string;
|