@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.
Files changed (74) hide show
  1. package/dist/ai-sdk/index.d.ts +1 -4
  2. package/dist/ai-sdk/index.js +7 -1076
  3. package/dist/ai-sdk/index.js.map +1 -1
  4. package/dist/{modelcontextprotocol/adapter.js → chunk-B6DIDKFY.js} +15 -2
  5. package/dist/chunk-B6DIDKFY.js.map +1 -0
  6. package/dist/{lib/tools/index.js → chunk-RPKDXX4O.js} +4 -3
  7. package/dist/{lib/utils.js.map → chunk-RPKDXX4O.js.map} +1 -1
  8. package/dist/chunk-ZV2SOIO7.js +91 -0
  9. package/dist/chunk-ZV2SOIO7.js.map +1 -0
  10. package/dist/modelcontextprotocol/index.d.ts +47 -6
  11. package/dist/modelcontextprotocol/index.js +4 -976
  12. package/dist/modelcontextprotocol/index.js.map +1 -1
  13. package/dist/modelcontextprotocol/local-server.js +10 -1041
  14. package/dist/modelcontextprotocol/local-server.js.map +1 -1
  15. package/dist/openai/index.d.ts +1 -4
  16. package/dist/openai/index.js +7 -1076
  17. package/dist/openai/index.js.map +1 -1
  18. package/dist/types-DyB12-Gk.d.ts +73 -0
  19. package/package.json +4 -4
  20. package/dist/ai-sdk/tool-converter.d.ts +0 -12
  21. package/dist/ai-sdk/tool-converter.js +0 -14
  22. package/dist/ai-sdk/tool-converter.js.map +0 -1
  23. package/dist/lib/knock-client.d.ts +0 -4
  24. package/dist/lib/knock-client.js +0 -28
  25. package/dist/lib/knock-client.js.map +0 -1
  26. package/dist/lib/knock-tool.d.ts +0 -4
  27. package/dist/lib/knock-tool.js +0 -29
  28. package/dist/lib/knock-tool.js.map +0 -1
  29. package/dist/lib/tools/channels.d.ts +0 -13
  30. package/dist/lib/tools/channels.js +0 -54
  31. package/dist/lib/tools/channels.js.map +0 -1
  32. package/dist/lib/tools/commits.d.ts +0 -16
  33. package/dist/lib/tools/commits.js +0 -98
  34. package/dist/lib/tools/commits.js.map +0 -1
  35. package/dist/lib/tools/email-layouts.d.ts +0 -13
  36. package/dist/lib/tools/email-layouts.js +0 -60
  37. package/dist/lib/tools/email-layouts.js.map +0 -1
  38. package/dist/lib/tools/environments.d.ts +0 -13
  39. package/dist/lib/tools/environments.js +0 -52
  40. package/dist/lib/tools/environments.js.map +0 -1
  41. package/dist/lib/tools/index.d.ts +0 -4
  42. package/dist/lib/tools/index.js.map +0 -1
  43. package/dist/lib/tools/message-types.d.ts +0 -15
  44. package/dist/lib/tools/message-types.js +0 -214
  45. package/dist/lib/tools/message-types.js.map +0 -1
  46. package/dist/lib/tools/messages.d.ts +0 -13
  47. package/dist/lib/tools/messages.js +0 -55
  48. package/dist/lib/tools/messages.js.map +0 -1
  49. package/dist/lib/tools/objects.d.ts +0 -19
  50. package/dist/lib/tools/objects.js +0 -163
  51. package/dist/lib/tools/objects.js.map +0 -1
  52. package/dist/lib/tools/partials.d.ts +0 -13
  53. package/dist/lib/tools/partials.js +0 -60
  54. package/dist/lib/tools/partials.js.map +0 -1
  55. package/dist/lib/tools/tenants.d.ts +0 -16
  56. package/dist/lib/tools/tenants.js +0 -98
  57. package/dist/lib/tools/tenants.js.map +0 -1
  58. package/dist/lib/tools/users.d.ts +0 -19
  59. package/dist/lib/tools/users.js +0 -233
  60. package/dist/lib/tools/users.js.map +0 -1
  61. package/dist/lib/tools/workflows.d.ts +0 -18
  62. package/dist/lib/tools/workflows.js +0 -207
  63. package/dist/lib/tools/workflows.js.map +0 -1
  64. package/dist/lib/utils.d.ts +0 -33
  65. package/dist/lib/utils.js +0 -1077
  66. package/dist/modelcontextprotocol/adapter.d.ts +0 -11
  67. package/dist/modelcontextprotocol/adapter.js.map +0 -1
  68. package/dist/openai/tool-converter.d.ts +0 -15
  69. package/dist/openai/tool-converter.js +0 -18
  70. package/dist/openai/tool-converter.js.map +0 -1
  71. package/dist/types-B-9pppCQ.d.ts +0 -199
  72. package/dist/types.d.ts +0 -4
  73. package/dist/types.js +0 -1
  74. 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 { a as KnockTool, K as KnockClient, C as Config } from '../types-B-9pppCQ.js';
2
- import { KnockMcpServer } from './adapter.js';
3
- import 'zod';
4
- import '@knocklabs/node';
5
- import '@knocklabs/mgmt';
6
- import '@modelcontextprotocol/sdk/server/mcp.js';
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
  /**