@knocklabs/agent-toolkit 0.1.2 → 0.1.4
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/ai-sdk/index.d.ts +1 -4
- package/dist/ai-sdk/index.js +7 -1076
- package/dist/ai-sdk/index.js.map +1 -1
- package/dist/{modelcontextprotocol/adapter.js → chunk-B6DIDKFY.js} +15 -2
- package/dist/chunk-B6DIDKFY.js.map +1 -0
- package/dist/{lib/tools/index.js → chunk-RPKDXX4O.js} +4 -3
- package/dist/{lib/utils.js.map → chunk-RPKDXX4O.js.map} +1 -1
- package/dist/chunk-ZV2SOIO7.js +91 -0
- package/dist/chunk-ZV2SOIO7.js.map +1 -0
- package/dist/modelcontextprotocol/index.d.ts +47 -6
- package/dist/modelcontextprotocol/index.js +4 -976
- package/dist/modelcontextprotocol/index.js.map +1 -1
- package/dist/modelcontextprotocol/local-server.js +10 -1041
- package/dist/modelcontextprotocol/local-server.js.map +1 -1
- package/dist/openai/index.d.ts +1 -4
- package/dist/openai/index.js +7 -1076
- package/dist/openai/index.js.map +1 -1
- package/dist/types-DyB12-Gk.d.ts +73 -0
- package/package.json +4 -4
- package/dist/ai-sdk/tool-converter.d.ts +0 -12
- package/dist/ai-sdk/tool-converter.js +0 -14
- package/dist/ai-sdk/tool-converter.js.map +0 -1
- package/dist/lib/knock-client.d.ts +0 -4
- package/dist/lib/knock-client.js +0 -28
- package/dist/lib/knock-client.js.map +0 -1
- package/dist/lib/knock-tool.d.ts +0 -4
- package/dist/lib/knock-tool.js +0 -29
- package/dist/lib/knock-tool.js.map +0 -1
- package/dist/lib/tools/channels.d.ts +0 -13
- package/dist/lib/tools/channels.js +0 -54
- package/dist/lib/tools/channels.js.map +0 -1
- package/dist/lib/tools/commits.d.ts +0 -16
- package/dist/lib/tools/commits.js +0 -98
- package/dist/lib/tools/commits.js.map +0 -1
- package/dist/lib/tools/email-layouts.d.ts +0 -13
- package/dist/lib/tools/email-layouts.js +0 -60
- package/dist/lib/tools/email-layouts.js.map +0 -1
- package/dist/lib/tools/environments.d.ts +0 -13
- package/dist/lib/tools/environments.js +0 -52
- package/dist/lib/tools/environments.js.map +0 -1
- package/dist/lib/tools/index.d.ts +0 -4
- package/dist/lib/tools/index.js.map +0 -1
- package/dist/lib/tools/message-types.d.ts +0 -15
- package/dist/lib/tools/message-types.js +0 -214
- package/dist/lib/tools/message-types.js.map +0 -1
- package/dist/lib/tools/messages.d.ts +0 -13
- package/dist/lib/tools/messages.js +0 -55
- package/dist/lib/tools/messages.js.map +0 -1
- package/dist/lib/tools/objects.d.ts +0 -19
- package/dist/lib/tools/objects.js +0 -163
- package/dist/lib/tools/objects.js.map +0 -1
- package/dist/lib/tools/partials.d.ts +0 -13
- package/dist/lib/tools/partials.js +0 -60
- package/dist/lib/tools/partials.js.map +0 -1
- package/dist/lib/tools/tenants.d.ts +0 -16
- package/dist/lib/tools/tenants.js +0 -98
- package/dist/lib/tools/tenants.js.map +0 -1
- package/dist/lib/tools/users.d.ts +0 -19
- package/dist/lib/tools/users.js +0 -233
- package/dist/lib/tools/users.js.map +0 -1
- package/dist/lib/tools/workflows.d.ts +0 -18
- package/dist/lib/tools/workflows.js +0 -207
- package/dist/lib/tools/workflows.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -33
- package/dist/lib/utils.js +0 -1077
- package/dist/modelcontextprotocol/adapter.d.ts +0 -11
- package/dist/modelcontextprotocol/adapter.js.map +0 -1
- package/dist/openai/tool-converter.d.ts +0 -15
- package/dist/openai/tool-converter.js +0 -18
- package/dist/openai/tool-converter.js.map +0 -1
- package/dist/types-B-9pppCQ.d.ts +0 -199
- package/dist/types.d.ts +0 -4
- package/dist/types.js +0 -1
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toolPermissions,
|
|
3
|
+
tools
|
|
4
|
+
} from "./chunk-RPKDXX4O.js";
|
|
5
|
+
|
|
6
|
+
// src/lib/utils.ts
|
|
7
|
+
function filterTools(tools2, pattern) {
|
|
8
|
+
if (!pattern) {
|
|
9
|
+
throw new Error("No pattern provided");
|
|
10
|
+
}
|
|
11
|
+
if (pattern === "*") {
|
|
12
|
+
return Object.values(tools2).flatMap((category2) => Object.values(category2));
|
|
13
|
+
}
|
|
14
|
+
const [category, tool] = pattern.split(".");
|
|
15
|
+
if (category === "*" && tool === "*") {
|
|
16
|
+
return Object.values(tools2).flatMap((category2) => Object.values(category2));
|
|
17
|
+
}
|
|
18
|
+
if (category && !tools2[category]) {
|
|
19
|
+
throw new Error(`Tool category ${category} not found`);
|
|
20
|
+
}
|
|
21
|
+
if (category && tool === "*") {
|
|
22
|
+
return Object.values(tools2[category]);
|
|
23
|
+
}
|
|
24
|
+
if (category && tool && !tools2[category][tool]) {
|
|
25
|
+
throw new Error(`Tool ${pattern} not found`);
|
|
26
|
+
}
|
|
27
|
+
return [tools2[category][tool]];
|
|
28
|
+
}
|
|
29
|
+
function getToolsWithPermissions(category, categoryPermissions) {
|
|
30
|
+
const toolsInCategory = tools[category];
|
|
31
|
+
const toolPermissionsInCategory = toolPermissions[category];
|
|
32
|
+
return Object.entries(categoryPermissions).reduce(
|
|
33
|
+
(acc, [permissionType, hasPermission]) => {
|
|
34
|
+
if (hasPermission) {
|
|
35
|
+
return acc.concat(
|
|
36
|
+
toolPermissionsInCategory[permissionType].map(
|
|
37
|
+
(toolName) => toolsInCategory[toolName]
|
|
38
|
+
)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return acc;
|
|
42
|
+
},
|
|
43
|
+
[]
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
function getToolsByPermissionsInCategories(config) {
|
|
47
|
+
return Object.keys(config.permissions).reduce(
|
|
48
|
+
(acc, category) => {
|
|
49
|
+
const categoryKey = category;
|
|
50
|
+
const categoryPermissions = config.permissions[categoryKey];
|
|
51
|
+
if (tools[categoryKey] && categoryPermissions) {
|
|
52
|
+
const tools2 = getToolsWithPermissions(categoryKey, categoryPermissions);
|
|
53
|
+
return { ...acc, [categoryKey]: tools2 };
|
|
54
|
+
}
|
|
55
|
+
return acc;
|
|
56
|
+
},
|
|
57
|
+
{}
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// src/lib/knock-client.ts
|
|
62
|
+
import { Knock } from "@knocklabs/node";
|
|
63
|
+
import KnockMgmt from "@knocklabs/mgmt";
|
|
64
|
+
var serviceTokensToApiClients = {};
|
|
65
|
+
var createKnockClient = (config) => {
|
|
66
|
+
const client = new KnockMgmt({
|
|
67
|
+
serviceToken: config.serviceToken
|
|
68
|
+
});
|
|
69
|
+
return Object.assign(client, {
|
|
70
|
+
publicApi: async (_environment) => {
|
|
71
|
+
const environment = _environment ?? config.environment ?? "development";
|
|
72
|
+
if (serviceTokensToApiClients?.[config.serviceToken]?.[environment]) {
|
|
73
|
+
return serviceTokensToApiClients[config.serviceToken][environment];
|
|
74
|
+
}
|
|
75
|
+
const { api_key } = await client.apiKeys.exchange({ environment });
|
|
76
|
+
const knock = new Knock(api_key);
|
|
77
|
+
if (!serviceTokensToApiClients[config.serviceToken]) {
|
|
78
|
+
serviceTokensToApiClients[config.serviceToken] = {};
|
|
79
|
+
}
|
|
80
|
+
serviceTokensToApiClients[config.serviceToken][environment] = knock;
|
|
81
|
+
return knock;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export {
|
|
87
|
+
filterTools,
|
|
88
|
+
getToolsByPermissionsInCategories,
|
|
89
|
+
createKnockClient
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=chunk-ZV2SOIO7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/lib/knock-client.ts"],"sourcesContent":["import { KnockTool } from \"./knock-tool.js\";\nimport { toolPermissions, tools } from \"../lib/tools/index.js\";\nimport { ToolkitConfig } from \"../types.js\";\nimport { ToolCategory } from \"../types.js\";\n\n/**\n * Given a list of tools, and some config may describe the tools that should be provided to the LLM,\n * returns a filtered list of tools that match the config.\n *\n * Options:\n * `*` - All tools\n * `users.*` - All tools that start with `users.`\n * `users.getUser` - A specific tool\n *\n */\nexport function filterTools(\n tools: Record<string, Record<string, KnockTool>>,\n pattern: string | undefined\n): KnockTool[] {\n if (!pattern) {\n throw new Error(\"No pattern provided\");\n }\n\n // If the pattern is `*`, return all tools\n if (pattern === \"*\") {\n return Object.values(tools).flatMap((category) => Object.values(category));\n }\n\n const [category, tool] = pattern.split(\".\");\n\n // If the pattern is `*.*`, return all tools\n if (category === \"*\" && tool === \"*\") {\n return Object.values(tools).flatMap((category) => Object.values(category));\n }\n\n if (category && !tools[category]) {\n throw new Error(`Tool category ${category} not found`);\n }\n\n // If the pattern is `users.*`, return all tools that start with `users.`\n if (category && tool === \"*\") {\n return Object.values(tools[category]);\n }\n\n // If the pattern is `users.getUser`, return the `getUser` tool\n if (category && tool && !tools[category][tool]) {\n throw new Error(`Tool ${pattern} not found`);\n }\n\n return [tools[category][tool]];\n}\n\n/**\n * Given a category and a list of permissions, return a list of tools that the user has permission to use.\n *\n * @param category - The category to get tools for\n * @param categoryPermissions - The permissions to use\n * @returns A list of tools that the user has permission to use\n */\nexport function getToolsWithPermissions(\n category: keyof typeof toolPermissions,\n categoryPermissions: Record<string, boolean | undefined>\n) {\n // Return all of the tools for the category that have permission\n const toolsInCategory = tools[category] as Record<string, KnockTool>;\n const toolPermissionsInCategory = toolPermissions[category] as Record<\n string,\n string[]\n >;\n\n // Look over each permission type, like `read: true`\n // If it's `true`, then find all of the tools that have that permission\n return Object.entries(categoryPermissions).reduce(\n (acc: KnockTool[], [permissionType, hasPermission]) => {\n if (hasPermission) {\n return acc.concat(\n toolPermissionsInCategory[permissionType].map(\n (toolName) => toolsInCategory[toolName]\n )\n );\n }\n return acc;\n },\n []\n );\n}\n\n/**\n * Given a config, return a list of tools for each category that the user has permission to use.\n *\n * @param config - The config to use\n * @returns A list of tools for each category that the user has permission to use\n */\nexport function getToolsByPermissionsInCategories(\n config: ToolkitConfig\n): Record<ToolCategory, KnockTool[]> {\n return Object.keys(config.permissions).reduce(\n (acc, category) => {\n const categoryKey = category as ToolCategory;\n const categoryPermissions = config.permissions[categoryKey];\n\n if (tools[categoryKey] && categoryPermissions) {\n const tools = getToolsWithPermissions(categoryKey, categoryPermissions);\n\n return { ...acc, [categoryKey]: tools };\n }\n\n return acc;\n },\n {} as Record<ToolCategory, KnockTool[]>\n );\n}\n","import { Knock } from \"@knocklabs/node\";\nimport KnockMgmt from \"@knocklabs/mgmt\";\nimport { Config } from \"../types.js\";\n\nconst serviceTokensToApiClients: Record<string, Record<string, Knock>> = {};\n\ntype KnockClient = ReturnType<typeof createKnockClient>;\n\nconst createKnockClient = (config: Config) => {\n const client = new KnockMgmt({\n serviceToken: config.serviceToken,\n });\n\n return Object.assign(client, {\n publicApi: async (_environment?: string): Promise<Knock> => {\n const environment = _environment ?? config.environment ?? \"development\";\n\n // If the client already exists for this service token and environment, return it\n if (serviceTokensToApiClients?.[config.serviceToken]?.[environment]) {\n return serviceTokensToApiClients[config.serviceToken][environment];\n }\n\n // Otherwise, fetch a public API key for this service token and environment\n const { api_key } = await client.apiKeys.exchange({ environment });\n\n // Create a new Knock client with the public API key\n const knock = new Knock(api_key);\n\n // Store the client in the cache\n if (!serviceTokensToApiClients[config.serviceToken]) {\n serviceTokensToApiClients[config.serviceToken] = {};\n }\n\n serviceTokensToApiClients[config.serviceToken][environment] = knock;\n\n return knock;\n },\n });\n};\n\nexport { createKnockClient, type KnockClient };\n"],"mappings":";;;;;;AAeO,SAAS,YACdA,QACA,SACa;AACb,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAGA,MAAI,YAAY,KAAK;AACnB,WAAO,OAAO,OAAOA,MAAK,EAAE,QAAQ,CAACC,cAAa,OAAO,OAAOA,SAAQ,CAAC;AAAA,EAC3E;AAEA,QAAM,CAAC,UAAU,IAAI,IAAI,QAAQ,MAAM,GAAG;AAG1C,MAAI,aAAa,OAAO,SAAS,KAAK;AACpC,WAAO,OAAO,OAAOD,MAAK,EAAE,QAAQ,CAACC,cAAa,OAAO,OAAOA,SAAQ,CAAC;AAAA,EAC3E;AAEA,MAAI,YAAY,CAACD,OAAM,QAAQ,GAAG;AAChC,UAAM,IAAI,MAAM,iBAAiB,QAAQ,YAAY;AAAA,EACvD;AAGA,MAAI,YAAY,SAAS,KAAK;AAC5B,WAAO,OAAO,OAAOA,OAAM,QAAQ,CAAC;AAAA,EACtC;AAGA,MAAI,YAAY,QAAQ,CAACA,OAAM,QAAQ,EAAE,IAAI,GAAG;AAC9C,UAAM,IAAI,MAAM,QAAQ,OAAO,YAAY;AAAA,EAC7C;AAEA,SAAO,CAACA,OAAM,QAAQ,EAAE,IAAI,CAAC;AAC/B;AASO,SAAS,wBACd,UACA,qBACA;AAEA,QAAM,kBAAkB,MAAM,QAAQ;AACtC,QAAM,4BAA4B,gBAAgB,QAAQ;AAO1D,SAAO,OAAO,QAAQ,mBAAmB,EAAE;AAAA,IACzC,CAAC,KAAkB,CAAC,gBAAgB,aAAa,MAAM;AACrD,UAAI,eAAe;AACjB,eAAO,IAAI;AAAA,UACT,0BAA0B,cAAc,EAAE;AAAA,YACxC,CAAC,aAAa,gBAAgB,QAAQ;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAQO,SAAS,kCACd,QACmC;AACnC,SAAO,OAAO,KAAK,OAAO,WAAW,EAAE;AAAA,IACrC,CAAC,KAAK,aAAa;AACjB,YAAM,cAAc;AACpB,YAAM,sBAAsB,OAAO,YAAY,WAAW;AAE1D,UAAI,MAAM,WAAW,KAAK,qBAAqB;AAC7C,cAAMA,SAAQ,wBAAwB,aAAa,mBAAmB;AAEtE,eAAO,EAAE,GAAG,KAAK,CAAC,WAAW,GAAGA,OAAM;AAAA,MACxC;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;AC/GA,SAAS,aAAa;AACtB,OAAO,eAAe;AAGtB,IAAM,4BAAmE,CAAC;AAI1E,IAAM,oBAAoB,CAAC,WAAmB;AAC5C,QAAM,SAAS,IAAI,UAAU;AAAA,IAC3B,cAAc,OAAO;AAAA,EACvB,CAAC;AAED,SAAO,OAAO,OAAO,QAAQ;AAAA,IAC3B,WAAW,OAAO,iBAA0C;AAC1D,YAAM,cAAc,gBAAgB,OAAO,eAAe;AAG1D,UAAI,4BAA4B,OAAO,YAAY,IAAI,WAAW,GAAG;AACnE,eAAO,0BAA0B,OAAO,YAAY,EAAE,WAAW;AAAA,MACnE;AAGA,YAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,QAAQ,SAAS,EAAE,YAAY,CAAC;AAGjE,YAAM,QAAQ,IAAI,MAAM,OAAO;AAG/B,UAAI,CAAC,0BAA0B,OAAO,YAAY,GAAG;AACnD,kCAA0B,OAAO,YAAY,IAAI,CAAC;AAAA,MACpD;AAEA,gCAA0B,OAAO,YAAY,EAAE,WAAW,IAAI;AAE9D,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;","names":["tools","category"]}
|
|
@@ -1,9 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import '
|
|
4
|
-
import '@knocklabs/
|
|
5
|
-
import '@
|
|
6
|
-
|
|
1
|
+
import { ZodObject } from 'zod';
|
|
2
|
+
import { C as Config } from '../types-DyB12-Gk.js';
|
|
3
|
+
import { Knock } from '@knocklabs/node';
|
|
4
|
+
import KnockMgmt from '@knocklabs/mgmt';
|
|
5
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
|
|
7
|
+
type KnockClient = ReturnType<typeof createKnockClient>;
|
|
8
|
+
declare const createKnockClient: (config: Config) => KnockMgmt & {
|
|
9
|
+
publicApi: (_environment?: string) => Promise<Knock>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
interface KnockToolDefinition {
|
|
13
|
+
/**
|
|
14
|
+
* The method name of the tool. This is a machine-readable string.
|
|
15
|
+
*/
|
|
16
|
+
method: string;
|
|
17
|
+
/**
|
|
18
|
+
* The name of the tool. This can be used to reference the tool in the code.
|
|
19
|
+
* A descriptive LLM-readable string.
|
|
20
|
+
*/
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* A descriptive prompt explaining the tool's purpose, including examples where useful.
|
|
24
|
+
*/
|
|
25
|
+
description: string;
|
|
26
|
+
/**
|
|
27
|
+
* A descriptive prompt explaining the tool's purpose, usage and input parameters.
|
|
28
|
+
* Ths is intended to be used by the underlying LLM.
|
|
29
|
+
*/
|
|
30
|
+
fullDescription: string;
|
|
31
|
+
/**
|
|
32
|
+
* The Zod schema for the input parameters of the tool
|
|
33
|
+
*/
|
|
34
|
+
parameters?: ZodObject<any>;
|
|
35
|
+
/**
|
|
36
|
+
* The actual implementation of the tool.
|
|
37
|
+
*/
|
|
38
|
+
execute: (knockClient: KnockClient, config: Config) => (input: any) => Promise<unknown>;
|
|
39
|
+
}
|
|
40
|
+
interface KnockTool extends Omit<KnockToolDefinition, "execute"> {
|
|
41
|
+
bindExecute: (knockClient: KnockClient, config: Config) => (input: any) => Promise<unknown>;
|
|
42
|
+
}
|
|
43
|
+
declare const KnockTool: (args: Omit<KnockToolDefinition, "fullDescription">) => KnockTool;
|
|
44
|
+
|
|
45
|
+
declare class KnockMcpServer extends McpServer {
|
|
46
|
+
constructor(knockClient: KnockClient, config: Config, tools: KnockTool[]);
|
|
47
|
+
}
|
|
7
48
|
|
|
8
49
|
type CreateKnockMcpServerParams = {
|
|
9
50
|
/**
|