@kelpi/mcp 0.1.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.
Files changed (195) hide show
  1. package/README.md +312 -0
  2. package/bin/kelpi-mcp +3 -0
  3. package/dist/__tests__/integration-api/fixtures.d.ts +382 -0
  4. package/dist/__tests__/integration-api/fixtures.d.ts.map +1 -0
  5. package/dist/__tests__/integration-api/fixtures.js +478 -0
  6. package/dist/__tests__/integration-api/fixtures.js.map +1 -0
  7. package/dist/__tests__/integration-api/index.d.ts +19 -0
  8. package/dist/__tests__/integration-api/index.d.ts.map +1 -0
  9. package/dist/__tests__/integration-api/index.js +33 -0
  10. package/dist/__tests__/integration-api/index.js.map +1 -0
  11. package/dist/__tests__/integration-api/setup.d.ts +176 -0
  12. package/dist/__tests__/integration-api/setup.d.ts.map +1 -0
  13. package/dist/__tests__/integration-api/setup.js +329 -0
  14. package/dist/__tests__/integration-api/setup.js.map +1 -0
  15. package/dist/__tests__/setup.d.ts +2 -0
  16. package/dist/__tests__/setup.d.ts.map +1 -0
  17. package/dist/__tests__/setup.js +11 -0
  18. package/dist/__tests__/setup.js.map +1 -0
  19. package/dist/__tests__/unit/test-utils.d.ts +46 -0
  20. package/dist/__tests__/unit/test-utils.d.ts.map +1 -0
  21. package/dist/__tests__/unit/test-utils.js +50 -0
  22. package/dist/__tests__/unit/test-utils.js.map +1 -0
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +34 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/api-client.d.ts +17 -0
  28. package/dist/lib/api-client.d.ts.map +1 -0
  29. package/dist/lib/api-client.js +169 -0
  30. package/dist/lib/api-client.js.map +1 -0
  31. package/dist/lib/auth-state.d.ts +54 -0
  32. package/dist/lib/auth-state.d.ts.map +1 -0
  33. package/dist/lib/auth-state.js +131 -0
  34. package/dist/lib/auth-state.js.map +1 -0
  35. package/dist/lib/config.d.ts +39 -0
  36. package/dist/lib/config.d.ts.map +1 -0
  37. package/dist/lib/config.js +170 -0
  38. package/dist/lib/config.js.map +1 -0
  39. package/dist/lib/error-formatter.d.ts +40 -0
  40. package/dist/lib/error-formatter.d.ts.map +1 -0
  41. package/dist/lib/error-formatter.js +149 -0
  42. package/dist/lib/error-formatter.js.map +1 -0
  43. package/dist/lib/errors.d.ts +44 -0
  44. package/dist/lib/errors.d.ts.map +1 -0
  45. package/dist/lib/errors.js +56 -0
  46. package/dist/lib/errors.js.map +1 -0
  47. package/dist/lib/tool-helpers.d.ts +49 -0
  48. package/dist/lib/tool-helpers.d.ts.map +1 -0
  49. package/dist/lib/tool-helpers.js +101 -0
  50. package/dist/lib/tool-helpers.js.map +1 -0
  51. package/dist/lib/tool-registry.d.ts +111 -0
  52. package/dist/lib/tool-registry.d.ts.map +1 -0
  53. package/dist/lib/tool-registry.js +112 -0
  54. package/dist/lib/tool-registry.js.map +1 -0
  55. package/dist/lib/version.d.ts +13 -0
  56. package/dist/lib/version.d.ts.map +1 -0
  57. package/dist/lib/version.js +13 -0
  58. package/dist/lib/version.js.map +1 -0
  59. package/dist/prompts/flow-generator.d.ts +45 -0
  60. package/dist/prompts/flow-generator.d.ts.map +1 -0
  61. package/dist/prompts/flow-generator.js +177 -0
  62. package/dist/prompts/flow-generator.js.map +1 -0
  63. package/dist/prompts/index.d.ts +7 -0
  64. package/dist/prompts/index.d.ts.map +1 -0
  65. package/dist/prompts/index.js +7 -0
  66. package/dist/prompts/index.js.map +1 -0
  67. package/dist/server.d.ts +66 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +140 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/tools/auth/index.d.ts +18 -0
  72. package/dist/tools/auth/index.d.ts.map +1 -0
  73. package/dist/tools/auth/index.js +50 -0
  74. package/dist/tools/auth/index.js.map +1 -0
  75. package/dist/tools/auth/login.d.ts +37 -0
  76. package/dist/tools/auth/login.d.ts.map +1 -0
  77. package/dist/tools/auth/login.js +257 -0
  78. package/dist/tools/auth/login.js.map +1 -0
  79. package/dist/tools/auth/schemas.d.ts +69 -0
  80. package/dist/tools/auth/schemas.d.ts.map +1 -0
  81. package/dist/tools/auth/schemas.js +36 -0
  82. package/dist/tools/auth/schemas.js.map +1 -0
  83. package/dist/tools/auth/status.d.ts +11 -0
  84. package/dist/tools/auth/status.d.ts.map +1 -0
  85. package/dist/tools/auth/status.js +50 -0
  86. package/dist/tools/auth/status.js.map +1 -0
  87. package/dist/tools/contacts/create.d.ts +11 -0
  88. package/dist/tools/contacts/create.d.ts.map +1 -0
  89. package/dist/tools/contacts/create.js +47 -0
  90. package/dist/tools/contacts/create.js.map +1 -0
  91. package/dist/tools/contacts/index.d.ts +10 -0
  92. package/dist/tools/contacts/index.d.ts.map +1 -0
  93. package/dist/tools/contacts/index.js +40 -0
  94. package/dist/tools/contacts/index.js.map +1 -0
  95. package/dist/tools/contacts/schemas.d.ts +37 -0
  96. package/dist/tools/contacts/schemas.d.ts.map +1 -0
  97. package/dist/tools/contacts/schemas.js +15 -0
  98. package/dist/tools/contacts/schemas.js.map +1 -0
  99. package/dist/tools/events/index.d.ts +10 -0
  100. package/dist/tools/events/index.d.ts.map +1 -0
  101. package/dist/tools/events/index.js +42 -0
  102. package/dist/tools/events/index.js.map +1 -0
  103. package/dist/tools/events/schemas.d.ts +37 -0
  104. package/dist/tools/events/schemas.d.ts.map +1 -0
  105. package/dist/tools/events/schemas.js +17 -0
  106. package/dist/tools/events/schemas.js.map +1 -0
  107. package/dist/tools/events/track.d.ts +11 -0
  108. package/dist/tools/events/track.d.ts.map +1 -0
  109. package/dist/tools/events/track.js +41 -0
  110. package/dist/tools/events/track.js.map +1 -0
  111. package/dist/tools/flows/activate.d.ts +11 -0
  112. package/dist/tools/flows/activate.d.ts.map +1 -0
  113. package/dist/tools/flows/activate.js +46 -0
  114. package/dist/tools/flows/activate.js.map +1 -0
  115. package/dist/tools/flows/create.d.ts +11 -0
  116. package/dist/tools/flows/create.d.ts.map +1 -0
  117. package/dist/tools/flows/create.js +72 -0
  118. package/dist/tools/flows/create.js.map +1 -0
  119. package/dist/tools/flows/index.d.ts +24 -0
  120. package/dist/tools/flows/index.d.ts.map +1 -0
  121. package/dist/tools/flows/index.js +183 -0
  122. package/dist/tools/flows/index.js.map +1 -0
  123. package/dist/tools/flows/list.d.ts +11 -0
  124. package/dist/tools/flows/list.d.ts.map +1 -0
  125. package/dist/tools/flows/list.js +34 -0
  126. package/dist/tools/flows/list.js.map +1 -0
  127. package/dist/tools/flows/schemas.d.ts +621 -0
  128. package/dist/tools/flows/schemas.d.ts.map +1 -0
  129. package/dist/tools/flows/schemas.js +135 -0
  130. package/dist/tools/flows/schemas.js.map +1 -0
  131. package/dist/tools/flows/transform.d.ts +39 -0
  132. package/dist/tools/flows/transform.d.ts.map +1 -0
  133. package/dist/tools/flows/transform.js +139 -0
  134. package/dist/tools/flows/transform.js.map +1 -0
  135. package/dist/tools/index.d.ts +34 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +46 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/sdk/index.d.ts +18 -0
  140. package/dist/tools/sdk/index.d.ts.map +1 -0
  141. package/dist/tools/sdk/index.js +69 -0
  142. package/dist/tools/sdk/index.js.map +1 -0
  143. package/dist/tools/sdk/public-key.d.ts +11 -0
  144. package/dist/tools/sdk/public-key.d.ts.map +1 -0
  145. package/dist/tools/sdk/public-key.js +24 -0
  146. package/dist/tools/sdk/public-key.js.map +1 -0
  147. package/dist/tools/sdk/schemas.d.ts +48 -0
  148. package/dist/tools/sdk/schemas.d.ts.map +1 -0
  149. package/dist/tools/sdk/schemas.js +35 -0
  150. package/dist/tools/sdk/schemas.js.map +1 -0
  151. package/dist/tools/sdk/snippet.d.ts +11 -0
  152. package/dist/tools/sdk/snippet.d.ts.map +1 -0
  153. package/dist/tools/sdk/snippet.js +50 -0
  154. package/dist/tools/sdk/snippet.js.map +1 -0
  155. package/dist/tools/sdk/templates/index.d.ts +5 -0
  156. package/dist/tools/sdk/templates/index.d.ts.map +1 -0
  157. package/dist/tools/sdk/templates/index.js +5 -0
  158. package/dist/tools/sdk/templates/index.js.map +1 -0
  159. package/dist/tools/sdk/templates/nextjs.d.ts +5 -0
  160. package/dist/tools/sdk/templates/nextjs.d.ts.map +1 -0
  161. package/dist/tools/sdk/templates/nextjs.js +71 -0
  162. package/dist/tools/sdk/templates/nextjs.js.map +1 -0
  163. package/dist/tools/sdk/templates/node.d.ts +9 -0
  164. package/dist/tools/sdk/templates/node.d.ts.map +1 -0
  165. package/dist/tools/sdk/templates/node.js +170 -0
  166. package/dist/tools/sdk/templates/node.js.map +1 -0
  167. package/dist/tools/sdk/templates/react.d.ts +5 -0
  168. package/dist/tools/sdk/templates/react.d.ts.map +1 -0
  169. package/dist/tools/sdk/templates/react.js +54 -0
  170. package/dist/tools/sdk/templates/react.js.map +1 -0
  171. package/dist/tools/sdk/templates/vanilla.d.ts +5 -0
  172. package/dist/tools/sdk/templates/vanilla.d.ts.map +1 -0
  173. package/dist/tools/sdk/templates/vanilla.js +61 -0
  174. package/dist/tools/sdk/templates/vanilla.js.map +1 -0
  175. package/dist/tools/templates/create.d.ts +11 -0
  176. package/dist/tools/templates/create.d.ts.map +1 -0
  177. package/dist/tools/templates/create.js +39 -0
  178. package/dist/tools/templates/create.js.map +1 -0
  179. package/dist/tools/templates/index.d.ts +17 -0
  180. package/dist/tools/templates/index.d.ts.map +1 -0
  181. package/dist/tools/templates/index.js +68 -0
  182. package/dist/tools/templates/index.js.map +1 -0
  183. package/dist/tools/templates/list.d.ts +11 -0
  184. package/dist/tools/templates/list.d.ts.map +1 -0
  185. package/dist/tools/templates/list.js +31 -0
  186. package/dist/tools/templates/list.js.map +1 -0
  187. package/dist/tools/templates/schemas.d.ts +90 -0
  188. package/dist/tools/templates/schemas.d.ts.map +1 -0
  189. package/dist/tools/templates/schemas.js +37 -0
  190. package/dist/tools/templates/schemas.js.map +1 -0
  191. package/dist/types.d.ts +55 -0
  192. package/dist/types.d.ts.map +1 -0
  193. package/dist/types.js +2 -0
  194. package/dist/types.js.map +1 -0
  195. package/package.json +76 -0
@@ -0,0 +1,112 @@
1
+ import { zodToJsonSchema } from 'zod-to-json-schema';
2
+ /**
3
+ * Custom error class for tool registry operations
4
+ */
5
+ export class ToolRegistryError extends Error {
6
+ code;
7
+ constructor(message, code) {
8
+ super(message);
9
+ this.name = 'ToolRegistryError';
10
+ this.code = code;
11
+ // Maintains proper stack trace for where our error was thrown (only available on V8)
12
+ if (Error.captureStackTrace) {
13
+ Error.captureStackTrace(this, ToolRegistryError);
14
+ }
15
+ }
16
+ }
17
+ /**
18
+ * Registry for managing MCP tools with Zod validation
19
+ */
20
+ export class ToolRegistry {
21
+ tools = new Map();
22
+ /**
23
+ * Register a tool with its definition and handler
24
+ */
25
+ register(definition, handler) {
26
+ if (this.tools.has(definition.name)) {
27
+ throw new ToolRegistryError(`Tool already registered: ${definition.name}`, 'DUPLICATE_TOOL');
28
+ }
29
+ this.tools.set(definition.name, { definition, handler });
30
+ }
31
+ /**
32
+ * Get a registered tool by name
33
+ */
34
+ get(name) {
35
+ return this.tools.get(name);
36
+ }
37
+ /**
38
+ * List all registered tools in MCP-compatible format
39
+ */
40
+ list() {
41
+ return Array.from(this.tools.values()).map(({ definition }) => {
42
+ // Convert Zod schema to JSON Schema
43
+ // Use jsonSchema7 target which produces JSON Schema draft-07 format
44
+ // This is compatible with JSON Schema draft 2020-12 that Claude expects
45
+ // Note: 'openApi3' produces boolean exclusiveMinimum/exclusiveMaximum which is invalid
46
+ const jsonSchema = zodToJsonSchema(definition.inputSchema, {
47
+ $refStrategy: 'none',
48
+ target: 'jsonSchema7',
49
+ });
50
+ // Extract just the schema properties we need
51
+ const schemaObj = jsonSchema;
52
+ return {
53
+ name: definition.name,
54
+ description: definition.description,
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: schemaObj.properties || {},
58
+ ...(schemaObj.required && { required: schemaObj.required }),
59
+ },
60
+ };
61
+ });
62
+ }
63
+ /**
64
+ * Validate input against a tool's schema
65
+ */
66
+ validateInput(toolName, input) {
67
+ const tool = this.tools.get(toolName);
68
+ if (!tool) {
69
+ throw new ToolRegistryError(`Tool not found: ${toolName}`, 'TOOL_NOT_FOUND');
70
+ }
71
+ const result = tool.definition.inputSchema.safeParse(input);
72
+ if (result.success) {
73
+ return { success: true, data: result.data };
74
+ }
75
+ return { success: false, error: result.error };
76
+ }
77
+ /**
78
+ * Execute a tool with validated input
79
+ */
80
+ async execute(toolName, input) {
81
+ const tool = this.tools.get(toolName);
82
+ if (!tool) {
83
+ throw new ToolRegistryError(`Tool not found: ${toolName}`, 'TOOL_NOT_FOUND');
84
+ }
85
+ // Validate input
86
+ const validation = this.validateInput(toolName, input);
87
+ if (!validation.success) {
88
+ throw new ToolRegistryError(`Invalid input for tool ${toolName}: ${validation.error.message}`, 'INVALID_INPUT');
89
+ }
90
+ // Execute handler with validated input
91
+ return tool.handler(validation.data);
92
+ }
93
+ /**
94
+ * Check if a tool is registered
95
+ */
96
+ has(name) {
97
+ return this.tools.has(name);
98
+ }
99
+ /**
100
+ * Get the number of registered tools
101
+ */
102
+ get size() {
103
+ return this.tools.size;
104
+ }
105
+ /**
106
+ * Clear all registered tools
107
+ */
108
+ clear() {
109
+ this.tools.clear();
110
+ }
111
+ }
112
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/lib/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared version constant for the MCP package.
3
+ *
4
+ * This constant is used in User-Agent headers across the package.
5
+ * Update this when releasing a new version to ensure consistent
6
+ * version reporting in API requests.
7
+ *
8
+ * Note: Reading from package.json at runtime is intentionally avoided
9
+ * to prevent file system dependencies that could cause issues in
10
+ * bundled environments.
11
+ */
12
+ export declare const MCP_VERSION = "0.1.0";
13
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared version constant for the MCP package.
3
+ *
4
+ * This constant is used in User-Agent headers across the package.
5
+ * Update this when releasing a new version to ensure consistent
6
+ * version reporting in API requests.
7
+ *
8
+ * Note: Reading from package.json at runtime is intentionally avoided
9
+ * to prevent file system dependencies that could cause issues in
10
+ * bundled environments.
11
+ */
12
+ export const MCP_VERSION = '0.1.0';
13
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Flow Generator Prompt
3
+ *
4
+ * A system prompt that helps users create automation flows conversationally.
5
+ * This can be used to guide AI assistants in creating well-structured flows.
6
+ */
7
+ export declare const FLOW_GENERATOR_SYSTEM_PROMPT = "You are a Kelpi Flow Generator assistant. Your role is to help users create automation flows for customer engagement.\n\n## Understanding Flows\n\nA Kelpi flow is an automated sequence of actions triggered by an event. Flows consist of:\n\n1. **Trigger**: What starts the flow\n - event: Triggered by a specific event (e.g., \"user.signup\", \"purchase.completed\")\n - segment: Triggered when a contact enters a segment\n - manual: Triggered manually via API\n\n2. **Steps**: Actions to perform in sequence\n - delay: Wait for a specified time before continuing\n - email: Send an email using a template\n - condition: Branch based on contact properties\n - webhook: Call an external API\n\n## Flow Definition Structure\n\n{\n \"name\": \"Flow Name\",\n \"trigger_type\": \"event\",\n \"trigger_event\": \"user.signup\",\n \"steps\": [\n {\n \"step_order\": 0,\n \"action_type\": \"delay\",\n \"delay_seconds\": 3600\n },\n {\n \"step_order\": 1,\n \"action_type\": \"email\",\n \"template_id\": \"template-uuid\"\n }\n ]\n}\n\n## Common Patterns\n\n### Welcome Series\n- Trigger: user.signup\n- Step 1: Immediate welcome email\n- Step 2: 24-hour delay\n- Step 3: Getting started email\n- Step 4: 3-day delay\n- Step 5: Feature highlight email\n\n### Abandoned Cart\n- Trigger: cart.abandoned\n- Step 1: 1-hour delay\n- Step 2: Reminder email\n- Step 3: 24-hour delay\n- Step 4: Discount offer email\n\n### Re-engagement\n- Trigger: segment (inactive users)\n- Step 1: \"We miss you\" email\n- Step 2: 3-day delay\n- Step 3: Special offer email\n\n## Guidelines\n\n1. Ask clarifying questions to understand the user's goals\n2. Suggest best practices for email timing\n3. Create templates first if needed using kelpi_create_template\n4. Validate before creating and confirm with user\n\n## Time Conversion Reference\n\nCommon delays in seconds:\n- 1 hour = 3600 seconds\n- 24 hours = 86400 seconds\n- 3 days = 259200 seconds\n- 7 days = 604800 seconds\n- 30 days = 2592000 seconds\n";
8
+ /**
9
+ * Template suggestions for common use cases
10
+ */
11
+ export declare const TEMPLATE_SUGGESTIONS: {
12
+ readonly welcome: {
13
+ readonly slug: "welcome-email";
14
+ readonly name: "Welcome Email";
15
+ readonly subject: "Welcome to {{company_name}}!";
16
+ readonly body_html: "<h1>Welcome, {{name}}!</h1>\n<p>We're thrilled to have you join us.</p>\n<p>Here's what you can do next:</p>\n<ul>\n <li>Complete your profile</li>\n <li>Explore our features</li>\n <li>Join our community</li>\n</ul>\n<p>Best regards,<br>The {{company_name}} Team</p>";
17
+ };
18
+ readonly gettingStarted: {
19
+ readonly slug: "getting-started-email";
20
+ readonly name: "Getting Started Guide";
21
+ readonly subject: "Getting started with {{company_name}}";
22
+ readonly body_html: "<h1>Let's get you started, {{name}}</h1>\n<p>Here are some tips to help you get the most out of {{company_name}}:</p>\n<ol>\n <li><strong>Set up your workspace</strong> - Customize your settings</li>\n <li><strong>Invite your team</strong> - Collaborate with others</li>\n <li><strong>Try key features</strong> - Explore what we offer</li>\n</ol>\n<p>Need help? <a href=\"{{support_url}}\">Contact our support team</a></p>";
23
+ };
24
+ readonly abandoned: {
25
+ readonly slug: "cart-reminder-email";
26
+ readonly name: "Cart Reminder";
27
+ readonly subject: "You left something behind!";
28
+ readonly body_html: "<h1>Hi {{name}},</h1>\n<p>Looks like you left some items in your cart.</p>\n<p>Don't worry, we saved them for you!</p>\n<p><a href=\"{{cart_url}}\">Complete your purchase</a></p>\n<p>Questions? Reply to this email and we'll help.</p>";
29
+ };
30
+ readonly reengagement: {
31
+ readonly slug: "we-miss-you-email";
32
+ readonly name: "Re-engagement Email";
33
+ readonly subject: "We miss you, {{name}}!";
34
+ readonly body_html: "<h1>It's been a while!</h1>\n<p>Hi {{name}},</p>\n<p>We noticed you haven't logged in recently. Here's what's new:</p>\n<ul>\n <li>New features you might love</li>\n <li>Improvements based on feedback</li>\n <li>Special offer just for you</li>\n</ul>\n<p><a href=\"{{login_url}}\">Come back and explore</a></p>";
35
+ };
36
+ };
37
+ /**
38
+ * Get a template suggestion by use case
39
+ */
40
+ export declare function getTemplateSuggestion(useCase: keyof typeof TEMPLATE_SUGGESTIONS): (typeof TEMPLATE_SUGGESTIONS)[typeof useCase];
41
+ /**
42
+ * Convert human-readable duration to seconds
43
+ */
44
+ export declare function durationToSeconds(duration: string): number;
45
+ //# sourceMappingURL=flow-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-generator.d.ts","sourceRoot":"","sources":["../../src/prompts/flow-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,4BAA4B,igEA2ExC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAoDvB,CAAC;AAEX;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,OAAO,oBAAoB,GACzC,CAAC,OAAO,oBAAoB,CAAC,CAAC,OAAO,OAAO,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8B1D"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Flow Generator Prompt
3
+ *
4
+ * A system prompt that helps users create automation flows conversationally.
5
+ * This can be used to guide AI assistants in creating well-structured flows.
6
+ */
7
+ export const FLOW_GENERATOR_SYSTEM_PROMPT = `You are a Kelpi Flow Generator assistant. Your role is to help users create automation flows for customer engagement.
8
+
9
+ ## Understanding Flows
10
+
11
+ A Kelpi flow is an automated sequence of actions triggered by an event. Flows consist of:
12
+
13
+ 1. **Trigger**: What starts the flow
14
+ - event: Triggered by a specific event (e.g., "user.signup", "purchase.completed")
15
+ - segment: Triggered when a contact enters a segment
16
+ - manual: Triggered manually via API
17
+
18
+ 2. **Steps**: Actions to perform in sequence
19
+ - delay: Wait for a specified time before continuing
20
+ - email: Send an email using a template
21
+ - condition: Branch based on contact properties
22
+ - webhook: Call an external API
23
+
24
+ ## Flow Definition Structure
25
+
26
+ {
27
+ "name": "Flow Name",
28
+ "trigger_type": "event",
29
+ "trigger_event": "user.signup",
30
+ "steps": [
31
+ {
32
+ "step_order": 0,
33
+ "action_type": "delay",
34
+ "delay_seconds": 3600
35
+ },
36
+ {
37
+ "step_order": 1,
38
+ "action_type": "email",
39
+ "template_id": "template-uuid"
40
+ }
41
+ ]
42
+ }
43
+
44
+ ## Common Patterns
45
+
46
+ ### Welcome Series
47
+ - Trigger: user.signup
48
+ - Step 1: Immediate welcome email
49
+ - Step 2: 24-hour delay
50
+ - Step 3: Getting started email
51
+ - Step 4: 3-day delay
52
+ - Step 5: Feature highlight email
53
+
54
+ ### Abandoned Cart
55
+ - Trigger: cart.abandoned
56
+ - Step 1: 1-hour delay
57
+ - Step 2: Reminder email
58
+ - Step 3: 24-hour delay
59
+ - Step 4: Discount offer email
60
+
61
+ ### Re-engagement
62
+ - Trigger: segment (inactive users)
63
+ - Step 1: "We miss you" email
64
+ - Step 2: 3-day delay
65
+ - Step 3: Special offer email
66
+
67
+ ## Guidelines
68
+
69
+ 1. Ask clarifying questions to understand the user's goals
70
+ 2. Suggest best practices for email timing
71
+ 3. Create templates first if needed using kelpi_create_template
72
+ 4. Validate before creating and confirm with user
73
+
74
+ ## Time Conversion Reference
75
+
76
+ Common delays in seconds:
77
+ - 1 hour = 3600 seconds
78
+ - 24 hours = 86400 seconds
79
+ - 3 days = 259200 seconds
80
+ - 7 days = 604800 seconds
81
+ - 30 days = 2592000 seconds
82
+ `;
83
+ /**
84
+ * Template suggestions for common use cases
85
+ */
86
+ export const TEMPLATE_SUGGESTIONS = {
87
+ welcome: {
88
+ slug: 'welcome-email',
89
+ name: 'Welcome Email',
90
+ subject: 'Welcome to {{company_name}}!',
91
+ body_html: `<h1>Welcome, {{name}}!</h1>
92
+ <p>We're thrilled to have you join us.</p>
93
+ <p>Here's what you can do next:</p>
94
+ <ul>
95
+ <li>Complete your profile</li>
96
+ <li>Explore our features</li>
97
+ <li>Join our community</li>
98
+ </ul>
99
+ <p>Best regards,<br>The {{company_name}} Team</p>`,
100
+ },
101
+ gettingStarted: {
102
+ slug: 'getting-started-email',
103
+ name: 'Getting Started Guide',
104
+ subject: 'Getting started with {{company_name}}',
105
+ body_html: `<h1>Let's get you started, {{name}}</h1>
106
+ <p>Here are some tips to help you get the most out of {{company_name}}:</p>
107
+ <ol>
108
+ <li><strong>Set up your workspace</strong> - Customize your settings</li>
109
+ <li><strong>Invite your team</strong> - Collaborate with others</li>
110
+ <li><strong>Try key features</strong> - Explore what we offer</li>
111
+ </ol>
112
+ <p>Need help? <a href="{{support_url}}">Contact our support team</a></p>`,
113
+ },
114
+ abandoned: {
115
+ slug: 'cart-reminder-email',
116
+ name: 'Cart Reminder',
117
+ subject: 'You left something behind!',
118
+ body_html: `<h1>Hi {{name}},</h1>
119
+ <p>Looks like you left some items in your cart.</p>
120
+ <p>Don't worry, we saved them for you!</p>
121
+ <p><a href="{{cart_url}}">Complete your purchase</a></p>
122
+ <p>Questions? Reply to this email and we'll help.</p>`,
123
+ },
124
+ reengagement: {
125
+ slug: 'we-miss-you-email',
126
+ name: 'Re-engagement Email',
127
+ subject: 'We miss you, {{name}}!',
128
+ body_html: `<h1>It's been a while!</h1>
129
+ <p>Hi {{name}},</p>
130
+ <p>We noticed you haven't logged in recently. Here's what's new:</p>
131
+ <ul>
132
+ <li>New features you might love</li>
133
+ <li>Improvements based on feedback</li>
134
+ <li>Special offer just for you</li>
135
+ </ul>
136
+ <p><a href="{{login_url}}">Come back and explore</a></p>`,
137
+ },
138
+ };
139
+ /**
140
+ * Get a template suggestion by use case
141
+ */
142
+ export function getTemplateSuggestion(useCase) {
143
+ return TEMPLATE_SUGGESTIONS[useCase];
144
+ }
145
+ /**
146
+ * Convert human-readable duration to seconds
147
+ */
148
+ export function durationToSeconds(duration) {
149
+ const match = duration.match(/^(\d+)\s*(h|hour|hours|d|day|days|m|min|minute|minutes|w|week|weeks)$/i);
150
+ if (!match) {
151
+ throw new Error(`Invalid duration format: ${duration}. Use format like "1h", "24 hours", "3 days", "1 week"`);
152
+ }
153
+ const value = parseInt(match[1], 10);
154
+ const unit = match[2].toLowerCase();
155
+ switch (unit) {
156
+ case 'm':
157
+ case 'min':
158
+ case 'minute':
159
+ case 'minutes':
160
+ return value * 60;
161
+ case 'h':
162
+ case 'hour':
163
+ case 'hours':
164
+ return value * 3600;
165
+ case 'd':
166
+ case 'day':
167
+ case 'days':
168
+ return value * 86400;
169
+ case 'w':
170
+ case 'week':
171
+ case 'weeks':
172
+ return value * 604800;
173
+ default:
174
+ throw new Error(`Unknown time unit: ${unit}`);
175
+ }
176
+ }
177
+ //# sourceMappingURL=flow-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-generator.js","sourceRoot":"","sources":["../../src/prompts/flow-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,8BAA8B;QACvC,SAAS,EAAE;;;;;;;;kDAQmC;KAC/C;IACD,cAAc,EAAE;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,uCAAuC;QAChD,SAAS,EAAE;;;;;;;yEAO0D;KACtE;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,4BAA4B;QACrC,SAAS,EAAE;;;;sDAIuC;KACnD;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,wBAAwB;QACjC,SAAS,EAAE;;;;;;;;yDAQ0C;KACtD;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA0C;IAE1C,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACvG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,wDAAwD,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG,CAAC;QACT,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,GAAG,IAAI,CAAC;QACtB,KAAK,GAAG,CAAC;QACT,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,GAAG,MAAM,CAAC;QACxB;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Prompts module
3
+ *
4
+ * Exports system prompts and utilities for AI-assisted flow creation
5
+ */
6
+ export { FLOW_GENERATOR_SYSTEM_PROMPT, TEMPLATE_SUGGESTIONS, getTemplateSuggestion, durationToSeconds, } from './flow-generator.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Prompts module
3
+ *
4
+ * Exports system prompts and utilities for AI-assisted flow creation
5
+ */
6
+ export { FLOW_GENERATOR_SYSTEM_PROMPT, TEMPLATE_SUGGESTIONS, getTemplateSuggestion, durationToSeconds, } from './flow-generator.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { type McpTool, type ToolResult } from './lib/tool-registry.js';
2
+ /**
3
+ * Server configuration options
4
+ */
5
+ export interface ServerOptions {
6
+ name?: string;
7
+ version?: string;
8
+ }
9
+ /**
10
+ * Server capabilities returned during initialization
11
+ */
12
+ export interface ServerCapabilities {
13
+ tools: Record<string, never>;
14
+ }
15
+ /**
16
+ * Kelpi MCP Server
17
+ *
18
+ * Provides MCP-compatible tools for managing Kelpi customer engagement automation
19
+ */
20
+ export declare class KelpiMcpServer {
21
+ private readonly name;
22
+ private readonly version;
23
+ private readonly registry;
24
+ private server;
25
+ private transport;
26
+ private isShuttingDown;
27
+ constructor(options?: ServerOptions);
28
+ /**
29
+ * Register all Kelpi tools with the registry
30
+ */
31
+ private registerTools;
32
+ /**
33
+ * Get the server name
34
+ */
35
+ getName(): string;
36
+ /**
37
+ * Get the server version
38
+ */
39
+ getVersion(): string;
40
+ /**
41
+ * Get server capabilities for MCP initialization
42
+ */
43
+ getCapabilities(): ServerCapabilities;
44
+ /**
45
+ * List all available tools in MCP format
46
+ */
47
+ listTools(): McpTool[];
48
+ /**
49
+ * Call a tool by name with given arguments
50
+ */
51
+ callTool(name: string, args: Record<string, unknown>): Promise<ToolResult>;
52
+ /**
53
+ * Start the MCP server with stdio transport
54
+ */
55
+ start(): Promise<void>;
56
+ /**
57
+ * Gracefully shutdown the server
58
+ */
59
+ shutdown(): Promise<void>;
60
+ }
61
+ /**
62
+ * Create and export a default server instance factory
63
+ */
64
+ export declare function createServer(options?: ServerOptions): KelpiMcpServer;
65
+ export { TOOL_DEFINITIONS } from './tools/index.js';
66
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGrF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,GAAE,aAAkB;IASvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAMrC;;OAEG;IACH,SAAS,IAAI,OAAO,EAAE;IAItB;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC;IAQtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBhC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAEpE;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,140 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { ToolRegistry } from './lib/tool-registry.js';
5
+ import { ALL_TOOLS } from './tools/index.js';
6
+ /**
7
+ * Kelpi MCP Server
8
+ *
9
+ * Provides MCP-compatible tools for managing Kelpi customer engagement automation
10
+ */
11
+ export class KelpiMcpServer {
12
+ name;
13
+ version;
14
+ registry;
15
+ server = null;
16
+ transport = null;
17
+ isShuttingDown = false;
18
+ constructor(options = {}) {
19
+ this.name = options.name ?? 'kelpi-mcp';
20
+ this.version = options.version ?? '0.1.0';
21
+ this.registry = new ToolRegistry();
22
+ // Register all tools
23
+ this.registerTools();
24
+ }
25
+ /**
26
+ * Register all Kelpi tools with the registry
27
+ */
28
+ registerTools() {
29
+ for (const tool of ALL_TOOLS) {
30
+ this.registry.register(tool.definition, tool.handler);
31
+ }
32
+ }
33
+ /**
34
+ * Get the server name
35
+ */
36
+ getName() {
37
+ return this.name;
38
+ }
39
+ /**
40
+ * Get the server version
41
+ */
42
+ getVersion() {
43
+ return this.version;
44
+ }
45
+ /**
46
+ * Get server capabilities for MCP initialization
47
+ */
48
+ getCapabilities() {
49
+ return {
50
+ tools: {},
51
+ };
52
+ }
53
+ /**
54
+ * List all available tools in MCP format
55
+ */
56
+ listTools() {
57
+ return this.registry.list();
58
+ }
59
+ /**
60
+ * Call a tool by name with given arguments
61
+ */
62
+ async callTool(name, args) {
63
+ if (!this.registry.has(name)) {
64
+ throw new Error(`Unknown tool: ${name}`);
65
+ }
66
+ return this.registry.execute(name, args);
67
+ }
68
+ /**
69
+ * Start the MCP server with stdio transport
70
+ */
71
+ async start() {
72
+ this.server = new Server({
73
+ name: this.name,
74
+ version: this.version,
75
+ }, {
76
+ capabilities: {
77
+ tools: {},
78
+ },
79
+ });
80
+ // Handle tools/list request
81
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
82
+ const tools = this.listTools();
83
+ return {
84
+ tools: tools,
85
+ };
86
+ });
87
+ // Handle tools/call request
88
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
89
+ const { name, arguments: args } = request.params;
90
+ try {
91
+ const result = await this.callTool(name, args ?? {});
92
+ return result;
93
+ }
94
+ catch (error) {
95
+ const message = error instanceof Error ? error.message : String(error);
96
+ return {
97
+ content: [
98
+ {
99
+ type: 'text',
100
+ text: `Error: ${message}`,
101
+ },
102
+ ],
103
+ isError: true,
104
+ };
105
+ }
106
+ });
107
+ // Create and connect transport
108
+ this.transport = new StdioServerTransport();
109
+ await this.server.connect(this.transport);
110
+ }
111
+ /**
112
+ * Gracefully shutdown the server
113
+ */
114
+ async shutdown() {
115
+ if (this.isShuttingDown) {
116
+ return;
117
+ }
118
+ this.isShuttingDown = true;
119
+ if (this.server) {
120
+ try {
121
+ await this.server.close();
122
+ }
123
+ catch {
124
+ // Ignore errors during shutdown
125
+ }
126
+ this.server = null;
127
+ }
128
+ this.transport = null;
129
+ this.isShuttingDown = false;
130
+ }
131
+ }
132
+ /**
133
+ * Create and export a default server instance factory
134
+ */
135
+ export function createServer(options) {
136
+ return new KelpiMcpServer(options);
137
+ }
138
+ // Re-export tool definitions for external use
139
+ export { TOOL_DEFINITIONS } from './tools/index.js';
140
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAiC,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiB7C;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACR,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,QAAQ,CAAe;IAChC,MAAM,GAAkB,IAAI,CAAC;IAC7B,SAAS,GAAgC,IAAI,CAAC;IAC9C,cAAc,GAAG,KAAK,CAAC;IAE/B,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAEnC,qBAAqB;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,IAA6B;QAE7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,OAAO;gBACL,KAAK,EAAE,KAAe;aACvB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,MAAwB,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,OAAO,EAAE;yBAC1B;qBACF;oBACD,OAAO,EAAE,IAAI;iBACI,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ToolWithHandler } from '../../lib/tool-registry.js';
2
+ /**
3
+ * kelpi_login tool definition and handler
4
+ *
5
+ * Initiates browser-based authentication using device code flow.
6
+ * Returns verification URL and user code for the user to complete authentication.
7
+ */
8
+ export declare const kelpiLogin: ToolWithHandler;
9
+ /**
10
+ * kelpi_status tool definition and handler
11
+ *
12
+ * Checks current authentication status and returns workspace information.
13
+ */
14
+ export declare const kelpiStatus: ToolWithHandler;
15
+ export * from './schemas.js';
16
+ export { createLoginHandler, validateVerificationUrl } from './login.js';
17
+ export { createStatusHandler } from './status.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKlE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,eAexB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,eAazB,CAAC;AAGF,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}