open-agent-sdk 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +284 -0
- package/README.zh.md +285 -0
- package/dist/agent/agent-definition.d.ts +107 -0
- package/dist/agent/agent-definition.d.ts.map +1 -0
- package/dist/agent/agent-definition.js +90 -0
- package/dist/agent/agent-definition.js.map +1 -0
- package/dist/agent/react-loop.d.ts +117 -0
- package/dist/agent/react-loop.d.ts.map +1 -0
- package/dist/agent/react-loop.js +674 -0
- package/dist/agent/react-loop.js.map +1 -0
- package/dist/agent/subagent-runner.d.ts +67 -0
- package/dist/agent/subagent-runner.d.ts.map +1 -0
- package/dist/agent/subagent-runner.js +168 -0
- package/dist/agent/subagent-runner.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +9 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inputs.d.ts +56 -0
- package/dist/hooks/inputs.d.ts.map +1 -0
- package/dist/hooks/inputs.js +150 -0
- package/dist/hooks/inputs.js.map +1 -0
- package/dist/hooks/manager.d.ts +63 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +137 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +191 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +26 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +43 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +50 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +170 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/server-registry.d.ts +48 -0
- package/dist/mcp/server-registry.d.ts.map +1 -0
- package/dist/mcp/server-registry.js +121 -0
- package/dist/mcp/server-registry.js.map +1 -0
- package/dist/mcp/tool-adapter.d.ts +42 -0
- package/dist/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/mcp/tool-adapter.js +89 -0
- package/dist/mcp/tool-adapter.js.map +1 -0
- package/dist/mcp/types.d.ts +74 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +21 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/permissions/index.d.ts +3 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +4 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/manager.d.ts +40 -0
- package/dist/permissions/manager.d.ts.map +1 -0
- package/dist/permissions/manager.js +115 -0
- package/dist/permissions/manager.js.map +1 -0
- package/dist/permissions/types.d.ts +124 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +25 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +18 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +126 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +85 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +36 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/google.d.ts +12 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +123 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/openai.d.ts +12 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +110 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/session/factory.d.ts +156 -0
- package/dist/session/factory.d.ts.map +1 -0
- package/dist/session/factory.js +311 -0
- package/dist/session/factory.js.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +7 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/session.d.ts +144 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +319 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/storage.d.ts +105 -0
- package/dist/session/storage.d.ts.map +1 -0
- package/dist/session/storage.js +148 -0
- package/dist/session/storage.js.map +1 -0
- package/dist/tools/ask-user-question.d.ts +31 -0
- package/dist/tools/ask-user-question.d.ts.map +1 -0
- package/dist/tools/ask-user-question.js +66 -0
- package/dist/tools/ask-user-question.js.map +1 -0
- package/dist/tools/bash-output.d.ts +22 -0
- package/dist/tools/bash-output.d.ts.map +1 -0
- package/dist/tools/bash-output.js +43 -0
- package/dist/tools/bash-output.js.map +1 -0
- package/dist/tools/bash.d.ts +36 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +161 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +24 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +83 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +22 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +248 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +39 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +312 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/kill-bash.d.ts +19 -0
- package/dist/tools/kill-bash.d.ts.map +1 -0
- package/dist/tools/kill-bash.js +64 -0
- package/dist/tools/kill-bash.js.map +1 -0
- package/dist/tools/read.d.ts +26 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +87 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +32 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +91 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/task-create.d.ts +22 -0
- package/dist/tools/task-create.d.ts.map +1 -0
- package/dist/tools/task-create.js +42 -0
- package/dist/tools/task-create.js.map +1 -0
- package/dist/tools/task-get.d.ts +19 -0
- package/dist/tools/task-get.d.ts.map +1 -0
- package/dist/tools/task-get.js +38 -0
- package/dist/tools/task-get.js.map +1 -0
- package/dist/tools/task-list.d.ts +18 -0
- package/dist/tools/task-list.d.ts.map +1 -0
- package/dist/tools/task-list.js +27 -0
- package/dist/tools/task-list.js.map +1 -0
- package/dist/tools/task-storage.d.ts +6 -0
- package/dist/tools/task-storage.d.ts.map +1 -0
- package/dist/tools/task-storage.js +83 -0
- package/dist/tools/task-storage.js.map +1 -0
- package/dist/tools/task-update.d.ts +28 -0
- package/dist/tools/task-update.d.ts.map +1 -0
- package/dist/tools/task-update.js +118 -0
- package/dist/tools/task-update.js.map +1 -0
- package/dist/tools/task.d.ts +80 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +99 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +21 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +124 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +20 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +127 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +22 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +46 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types/messages.d.ts +138 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +88 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/task.d.ts +29 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/tools.d.ts +56 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +25 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +5 -0
- package/dist/utils/uuid.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Registry
|
|
3
|
+
* Manages registration of MCP tools to SDK ToolRegistry
|
|
4
|
+
*/
|
|
5
|
+
import { McpToolAdapter } from './tool-adapter.js';
|
|
6
|
+
/**
|
|
7
|
+
* Manages registration of MCP server tools to SDK ToolRegistry
|
|
8
|
+
*/
|
|
9
|
+
export class McpServerRegistry {
|
|
10
|
+
toolRegistry;
|
|
11
|
+
registeredTools = new Map(); // serverName -> Set of tool names
|
|
12
|
+
constructor(toolRegistry) {
|
|
13
|
+
this.toolRegistry = toolRegistry;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Register all tools from an MCP server
|
|
17
|
+
* Returns list of registered tool names (with prefixes)
|
|
18
|
+
*/
|
|
19
|
+
async registerServer(name, client) {
|
|
20
|
+
const adapter = new McpToolAdapter(name, client);
|
|
21
|
+
const registeredNames = [];
|
|
22
|
+
try {
|
|
23
|
+
// Fetch tools from MCP server
|
|
24
|
+
const response = await client.listTools();
|
|
25
|
+
const tools = response.tools || [];
|
|
26
|
+
// Track tools for this server
|
|
27
|
+
const serverTools = new Set();
|
|
28
|
+
for (const tool of tools) {
|
|
29
|
+
// Convert to SDK tool format
|
|
30
|
+
const sdkTool = adapter.toSdkTool(tool);
|
|
31
|
+
// Register with ToolRegistry
|
|
32
|
+
this.toolRegistry.register(sdkTool);
|
|
33
|
+
// Track the registered tool
|
|
34
|
+
serverTools.add(sdkTool.name);
|
|
35
|
+
registeredNames.push(sdkTool.name);
|
|
36
|
+
}
|
|
37
|
+
// Store tracking info
|
|
38
|
+
this.registeredTools.set(name, serverTools);
|
|
39
|
+
return registeredNames;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.warn(`Failed to register MCP server "${name}" tools:`, error);
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Unregister all tools from a server
|
|
48
|
+
*/
|
|
49
|
+
unregisterServer(name) {
|
|
50
|
+
const serverTools = this.registeredTools.get(name);
|
|
51
|
+
if (!serverTools) {
|
|
52
|
+
return; // Server not registered
|
|
53
|
+
}
|
|
54
|
+
// Unregister each tool from ToolRegistry
|
|
55
|
+
for (const toolName of serverTools) {
|
|
56
|
+
this.toolRegistry.unregister(toolName);
|
|
57
|
+
}
|
|
58
|
+
// Remove tracking
|
|
59
|
+
this.registeredTools.delete(name);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if a tool name is an MCP tool
|
|
63
|
+
*/
|
|
64
|
+
isMcpTool(toolName) {
|
|
65
|
+
// Check if it's in our tracking
|
|
66
|
+
for (const serverTools of this.registeredTools.values()) {
|
|
67
|
+
if (serverTools.has(toolName)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse MCP tool name to extract server and tool name
|
|
75
|
+
* Format: mcp_<server>_<tool>
|
|
76
|
+
*/
|
|
77
|
+
parseMcpToolName(prefixedName) {
|
|
78
|
+
if (!prefixedName.startsWith('mcp_')) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const parts = prefixedName.slice(4).split('_'); // Remove 'mcp_' prefix
|
|
82
|
+
if (parts.length < 2) {
|
|
83
|
+
return null; // Need at least server name and tool name
|
|
84
|
+
}
|
|
85
|
+
const serverName = parts[0];
|
|
86
|
+
const toolName = parts.slice(1).join('_');
|
|
87
|
+
if (!serverName || !toolName) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return { serverName, toolName };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get server name for a registered MCP tool
|
|
94
|
+
*/
|
|
95
|
+
getServerForTool(toolName) {
|
|
96
|
+
const parsed = this.parseMcpToolName(toolName);
|
|
97
|
+
if (!parsed) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
// Verify it's actually registered
|
|
101
|
+
const serverTools = this.registeredTools.get(parsed.serverName);
|
|
102
|
+
if (serverTools && serverTools.has(toolName)) {
|
|
103
|
+
return parsed.serverName;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get all registered server names
|
|
109
|
+
*/
|
|
110
|
+
getRegisteredServers() {
|
|
111
|
+
return Array.from(this.registeredTools.keys());
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get tools registered for a specific server
|
|
115
|
+
*/
|
|
116
|
+
getServerTools(serverName) {
|
|
117
|
+
const tools = this.registeredTools.get(serverName);
|
|
118
|
+
return tools ? Array.from(tools) : [];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=server-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-registry.js","sourceRoot":"","sources":["../../src/mcp/server-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Adapter
|
|
3
|
+
* Converts MCP tool format to Open Agent SDK tool format
|
|
4
|
+
*/
|
|
5
|
+
import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
6
|
+
import type { McpTool } from './types.js';
|
|
7
|
+
import type { Tool } from '../types/tools.js';
|
|
8
|
+
/**
|
|
9
|
+
* Adapts MCP tools to SDK tool format
|
|
10
|
+
*/
|
|
11
|
+
export declare class McpToolAdapter {
|
|
12
|
+
private serverName;
|
|
13
|
+
private client;
|
|
14
|
+
private prefixSeparator;
|
|
15
|
+
constructor(serverName: string, client: Client);
|
|
16
|
+
/**
|
|
17
|
+
* Generate prefixed tool name to avoid conflicts
|
|
18
|
+
* Format: mcp_<server>_<tool>
|
|
19
|
+
*/
|
|
20
|
+
getPrefixedName(toolName: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Convert MCP tool to SDK Tool format
|
|
23
|
+
*/
|
|
24
|
+
toSdkTool(mcpTool: McpTool): Tool;
|
|
25
|
+
/**
|
|
26
|
+
* Create tool execution handler
|
|
27
|
+
*/
|
|
28
|
+
private createHandler;
|
|
29
|
+
/**
|
|
30
|
+
* Convert JSON schema to SDK JSONSchema format
|
|
31
|
+
*/
|
|
32
|
+
private convertSchema;
|
|
33
|
+
/**
|
|
34
|
+
* Get server name
|
|
35
|
+
*/
|
|
36
|
+
getServerName(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get client
|
|
39
|
+
*/
|
|
40
|
+
getClient(): Client;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=tool-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-adapter.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,mBAAmB,CAAC;AAEvE;;GAEG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,eAAe,CAAO;gBAGpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM;IAGxB;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAiBjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Adapter
|
|
3
|
+
* Converts MCP tool format to Open Agent SDK tool format
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Adapts MCP tools to SDK tool format
|
|
7
|
+
*/
|
|
8
|
+
export class McpToolAdapter {
|
|
9
|
+
serverName;
|
|
10
|
+
client;
|
|
11
|
+
prefixSeparator = '_';
|
|
12
|
+
constructor(serverName, client) {
|
|
13
|
+
this.serverName = serverName;
|
|
14
|
+
this.client = client;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate prefixed tool name to avoid conflicts
|
|
18
|
+
* Format: mcp_<server>_<tool>
|
|
19
|
+
*/
|
|
20
|
+
getPrefixedName(toolName) {
|
|
21
|
+
return `mcp${this.prefixSeparator}${this.serverName}${this.prefixSeparator}${toolName}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert MCP tool to SDK Tool format
|
|
25
|
+
*/
|
|
26
|
+
toSdkTool(mcpTool) {
|
|
27
|
+
const prefixedName = this.getPrefixedName(mcpTool.name);
|
|
28
|
+
const description = `[MCP:${this.serverName}] ${mcpTool.description || ''}`;
|
|
29
|
+
// Convert JSON schema to SDK format
|
|
30
|
+
const parameters = mcpTool.inputSchema
|
|
31
|
+
? this.convertSchema(mcpTool.inputSchema)
|
|
32
|
+
: { type: 'object', properties: {} };
|
|
33
|
+
return {
|
|
34
|
+
name: prefixedName,
|
|
35
|
+
description,
|
|
36
|
+
parameters,
|
|
37
|
+
handler: this.createHandler(mcpTool.name),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create tool execution handler
|
|
42
|
+
*/
|
|
43
|
+
createHandler(originalToolName) {
|
|
44
|
+
return async (input, _context) => {
|
|
45
|
+
const result = await this.client.callTool({
|
|
46
|
+
name: originalToolName,
|
|
47
|
+
arguments: input,
|
|
48
|
+
});
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert JSON schema to SDK JSONSchema format
|
|
54
|
+
*/
|
|
55
|
+
convertSchema(schema) {
|
|
56
|
+
// Default schema if conversion fails
|
|
57
|
+
const defaultSchema = {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {},
|
|
60
|
+
};
|
|
61
|
+
if (!schema || typeof schema !== 'object') {
|
|
62
|
+
return defaultSchema;
|
|
63
|
+
}
|
|
64
|
+
const s = schema;
|
|
65
|
+
// Ensure type is 'object'
|
|
66
|
+
if (s.type !== 'object') {
|
|
67
|
+
return defaultSchema;
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: s.properties || {},
|
|
72
|
+
required: Array.isArray(s.required) ? s.required : undefined,
|
|
73
|
+
additionalProperties: s.additionalProperties,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get server name
|
|
78
|
+
*/
|
|
79
|
+
getServerName() {
|
|
80
|
+
return this.serverName;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get client
|
|
84
|
+
*/
|
|
85
|
+
getClient() {
|
|
86
|
+
return this.client;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=tool-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-adapter.js","sourceRoot":"","sources":["../../src/mcp/tool-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,OAAO,cAAc;IAIf;IACA;IAJF,eAAe,GAAG,GAAG,CAAC;IAE9B,YACU,UAAkB,EAClB,MAAc;QADd,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;IACrB,CAAC;IAEJ;;;OAGG;IACH,eAAe,CAAC,QAAgB;QAC9B,OAAO,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,GAAG,QAAQ,EAAE,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAgB;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,QAAQ,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAE5E,oCAAoC;QACpC,MAAM,UAAU,GAAe,OAAO,CAAC,WAAW;YAChD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAEvC,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,WAAW;YACX,UAAU;YACV,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,gBAAwB;QAC5C,OAAO,KAAK,EAAE,KAAc,EAAE,QAAqB,EAA0B,EAAE;YAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACxC,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,KAAgC;aAC5C,CAAC,CAAC;YAEH,OAAO,MAAuB,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAe;QACnC,qCAAqC;QACrC,MAAM,aAAa,GAAe;YAChC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,CAAC,GAAG,MAAiC,CAAC;QAE5C,0BAA0B;QAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAG,CAAC,CAAC,UAAsC,IAAI,EAAE;YAC3D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC5D,oBAAoB,EAAE,CAAC,CAAC,oBAA2C;SACpE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) type definitions
|
|
3
|
+
* Aligned with Claude Agent SDK
|
|
4
|
+
*/
|
|
5
|
+
/** stdio transport configuration */
|
|
6
|
+
export interface McpStdioServerConfig {
|
|
7
|
+
type: 'stdio';
|
|
8
|
+
command: string;
|
|
9
|
+
args?: string[];
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
/** HTTP transport configuration */
|
|
13
|
+
export interface McpHttpServerConfig {
|
|
14
|
+
type: 'http';
|
|
15
|
+
url: string;
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
/** SSE transport configuration */
|
|
19
|
+
export interface McpSSEServerConfig {
|
|
20
|
+
type: 'sse';
|
|
21
|
+
url: string;
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
/** SDK transport configuration (direct instance) */
|
|
25
|
+
export interface McpSdkServerConfig {
|
|
26
|
+
type: 'sdk';
|
|
27
|
+
name: string;
|
|
28
|
+
instance: any;
|
|
29
|
+
}
|
|
30
|
+
/** Union type for all MCP server configurations */
|
|
31
|
+
export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig | McpSSEServerConfig | McpSdkServerConfig;
|
|
32
|
+
/** Configuration map for multiple MCP servers */
|
|
33
|
+
export type McpServersConfig = Record<string, McpServerConfig>;
|
|
34
|
+
/** MCP Server status */
|
|
35
|
+
export interface McpServerStatus {
|
|
36
|
+
name: string;
|
|
37
|
+
status: 'connected' | 'failed' | 'needs-auth' | 'pending';
|
|
38
|
+
serverInfo?: {
|
|
39
|
+
name: string;
|
|
40
|
+
version: string;
|
|
41
|
+
};
|
|
42
|
+
tools: string[];
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
/** MCP Tool definition from server */
|
|
46
|
+
export interface McpTool {
|
|
47
|
+
name: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
inputSchema?: any;
|
|
50
|
+
}
|
|
51
|
+
/** MCP Tool call result */
|
|
52
|
+
export interface McpToolResult {
|
|
53
|
+
content: Array<{
|
|
54
|
+
type: 'text' | 'image' | 'resource';
|
|
55
|
+
text?: string;
|
|
56
|
+
data?: any;
|
|
57
|
+
mimeType?: string;
|
|
58
|
+
resource?: {
|
|
59
|
+
uri: string;
|
|
60
|
+
mimeType?: string;
|
|
61
|
+
data: any;
|
|
62
|
+
};
|
|
63
|
+
}>;
|
|
64
|
+
isError?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/** Type guard for stdio config */
|
|
67
|
+
export declare function isStdioConfig(config: McpServerConfig): config is McpStdioServerConfig;
|
|
68
|
+
/** Type guard for HTTP config */
|
|
69
|
+
export declare function isHttpConfig(config: McpServerConfig): config is McpHttpServerConfig;
|
|
70
|
+
/** Type guard for SSE config */
|
|
71
|
+
export declare function isSseConfig(config: McpServerConfig): config is McpSSEServerConfig;
|
|
72
|
+
/** Type guard for SDK config */
|
|
73
|
+
export declare function isSdkConfig(config: McpServerConfig): config is McpSdkServerConfig;
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oCAAoC;AACpC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,GAAG,CAAC;CACf;AAED,mDAAmD;AACnD,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE/D,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1D,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE;YACT,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAElB,IAAI,EAAE,GAAG,CAAC;SACX,CAAC;KACH,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,oBAAoB,CAErF;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,mBAAmB,CAEnF;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,kBAAkB,CAEjF;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,kBAAkB,CAEjF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) type definitions
|
|
3
|
+
* Aligned with Claude Agent SDK
|
|
4
|
+
*/
|
|
5
|
+
/** Type guard for stdio config */
|
|
6
|
+
export function isStdioConfig(config) {
|
|
7
|
+
return config.type === 'stdio';
|
|
8
|
+
}
|
|
9
|
+
/** Type guard for HTTP config */
|
|
10
|
+
export function isHttpConfig(config) {
|
|
11
|
+
return config.type === 'http';
|
|
12
|
+
}
|
|
13
|
+
/** Type guard for SSE config */
|
|
14
|
+
export function isSseConfig(config) {
|
|
15
|
+
return config.type === 'sse';
|
|
16
|
+
}
|
|
17
|
+
/** Type guard for SDK config */
|
|
18
|
+
export function isSdkConfig(config) {
|
|
19
|
+
return config.type === 'sdk';
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgFH,kCAAkC;AAClC,MAAM,UAAU,aAAa,CAAC,MAAuB;IACnD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAChC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,WAAW,CAAC,MAAuB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AAC/B,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,WAAW,CAAC,MAAuB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { PermissionManager } from './manager';
|
|
2
|
+
export { type PermissionMode, type PermissionOptions, type PermissionResult, type CanUseTool, type PermissionCheckResult, type PlanLogEntry, SENSITIVE_TOOLS, EDIT_TOOLS, isSensitiveTool, isEditTool, } from './types';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,eAAe,EACf,UAAU,EACV,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAOL,eAAe,EACf,UAAU,EACV,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PermissionMode, PermissionOptions, PermissionCheckResult, PlanLogEntry } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Manages permission checks for tool execution
|
|
4
|
+
* Aligned with Claude Agent SDK behavior
|
|
5
|
+
*/
|
|
6
|
+
export declare class PermissionManager {
|
|
7
|
+
private mode;
|
|
8
|
+
private allowDangerouslySkipPermissions;
|
|
9
|
+
private canUseTool?;
|
|
10
|
+
private planLog;
|
|
11
|
+
constructor(options: PermissionOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Check if a tool is permitted to execute
|
|
14
|
+
* Aligned with Claude Agent SDK
|
|
15
|
+
*/
|
|
16
|
+
checkPermission(toolName: string, input: Record<string, unknown>, options: {
|
|
17
|
+
signal: AbortSignal;
|
|
18
|
+
}): Promise<PermissionCheckResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Get current permission mode
|
|
21
|
+
*/
|
|
22
|
+
getMode(): PermissionMode;
|
|
23
|
+
/**
|
|
24
|
+
* Set permission mode
|
|
25
|
+
*/
|
|
26
|
+
setMode(mode: PermissionMode): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get plan log (only used in plan mode)
|
|
29
|
+
*/
|
|
30
|
+
getPlanLog(): PlanLogEntry[];
|
|
31
|
+
/**
|
|
32
|
+
* Clear plan log
|
|
33
|
+
*/
|
|
34
|
+
clearPlanLog(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a PermissionResult to PermissionCheckResult
|
|
37
|
+
*/
|
|
38
|
+
private resolvePermissionResult;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/permissions/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EAGrB,YAAY,EAGb,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,+BAA+B,CAAU;IACjD,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,EAAE,iBAAiB;IAatC;;;OAGG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IAoDjC;;OAEG;IACH,OAAO,IAAI,cAAc;IAIzB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAUnC;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAahC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { isSensitiveTool, isEditTool, } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Manages permission checks for tool execution
|
|
4
|
+
* Aligned with Claude Agent SDK behavior
|
|
5
|
+
*/
|
|
6
|
+
export class PermissionManager {
|
|
7
|
+
mode;
|
|
8
|
+
allowDangerouslySkipPermissions;
|
|
9
|
+
canUseTool;
|
|
10
|
+
planLog = [];
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.mode = options.mode;
|
|
13
|
+
this.allowDangerouslySkipPermissions = options.allowDangerouslySkipPermissions ?? false;
|
|
14
|
+
this.canUseTool = options.canUseTool;
|
|
15
|
+
// Validate bypassPermissions mode
|
|
16
|
+
if (this.mode === 'bypassPermissions' && !this.allowDangerouslySkipPermissions) {
|
|
17
|
+
throw new Error('allowDangerouslySkipPermissions must be true to use bypassPermissions mode');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a tool is permitted to execute
|
|
22
|
+
* Aligned with Claude Agent SDK
|
|
23
|
+
*/
|
|
24
|
+
async checkPermission(toolName, input, options) {
|
|
25
|
+
switch (this.mode) {
|
|
26
|
+
case 'bypassPermissions':
|
|
27
|
+
return { approved: true };
|
|
28
|
+
case 'plan':
|
|
29
|
+
// Record tool call to plan log
|
|
30
|
+
this.planLog.push({
|
|
31
|
+
toolName,
|
|
32
|
+
input,
|
|
33
|
+
timestamp: Date.now(),
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
approved: false,
|
|
37
|
+
error: 'Tool execution blocked in plan mode',
|
|
38
|
+
};
|
|
39
|
+
case 'acceptEdits':
|
|
40
|
+
// Auto-approve edit tools
|
|
41
|
+
if (isEditTool(toolName)) {
|
|
42
|
+
return { approved: true };
|
|
43
|
+
}
|
|
44
|
+
// Fall through to default behavior for non-edit tools
|
|
45
|
+
break;
|
|
46
|
+
case 'default':
|
|
47
|
+
// Continue to default behavior
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
// Default behavior: check if tool is sensitive
|
|
51
|
+
if (isSensitiveTool(toolName)) {
|
|
52
|
+
// If canUseTool callback is provided, use it
|
|
53
|
+
if (this.canUseTool) {
|
|
54
|
+
const result = await this.canUseTool(toolName, input, {
|
|
55
|
+
signal: options.signal,
|
|
56
|
+
suggestions: [], // Could be populated based on context
|
|
57
|
+
});
|
|
58
|
+
return this.resolvePermissionResult(result);
|
|
59
|
+
}
|
|
60
|
+
// No callback provided, deny sensitive tools
|
|
61
|
+
return {
|
|
62
|
+
approved: false,
|
|
63
|
+
error: `Permission denied: ${toolName}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Non-sensitive tools are auto-approved
|
|
67
|
+
return { approved: true };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get current permission mode
|
|
71
|
+
*/
|
|
72
|
+
getMode() {
|
|
73
|
+
return this.mode;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set permission mode
|
|
77
|
+
*/
|
|
78
|
+
setMode(mode) {
|
|
79
|
+
// Validate bypassPermissions mode
|
|
80
|
+
if (mode === 'bypassPermissions' && !this.allowDangerouslySkipPermissions) {
|
|
81
|
+
throw new Error('allowDangerouslySkipPermissions must be true to use bypassPermissions mode');
|
|
82
|
+
}
|
|
83
|
+
this.mode = mode;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get plan log (only used in plan mode)
|
|
87
|
+
*/
|
|
88
|
+
getPlanLog() {
|
|
89
|
+
return [...this.planLog];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clear plan log
|
|
93
|
+
*/
|
|
94
|
+
clearPlanLog() {
|
|
95
|
+
this.planLog = [];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a PermissionResult to PermissionCheckResult
|
|
99
|
+
*/
|
|
100
|
+
resolvePermissionResult(result) {
|
|
101
|
+
if (result.behavior === 'allow') {
|
|
102
|
+
return {
|
|
103
|
+
approved: true,
|
|
104
|
+
updatedInput: result.updatedInput,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return {
|
|
109
|
+
approved: false,
|
|
110
|
+
error: result.message,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/permissions/manager.ts"],"names":[],"mappings":"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"}
|