@codemcp/workflows 3.1.21

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 (159) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.vibe/conversation-state.sqlite +0 -0
  3. package/LICENSE +674 -0
  4. package/dist/index.d.ts +9 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +74 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/notification-service.d.ts +14 -0
  9. package/dist/notification-service.d.ts.map +1 -0
  10. package/dist/notification-service.js +18 -0
  11. package/dist/notification-service.js.map +1 -0
  12. package/dist/resource-handlers/conversation-state.d.ts +15 -0
  13. package/dist/resource-handlers/conversation-state.d.ts.map +1 -0
  14. package/dist/resource-handlers/conversation-state.js +40 -0
  15. package/dist/resource-handlers/conversation-state.js.map +1 -0
  16. package/dist/resource-handlers/development-plan.d.ts +14 -0
  17. package/dist/resource-handlers/development-plan.d.ts.map +1 -0
  18. package/dist/resource-handlers/development-plan.js +31 -0
  19. package/dist/resource-handlers/development-plan.js.map +1 -0
  20. package/dist/resource-handlers/index.d.ts +24 -0
  21. package/dist/resource-handlers/index.d.ts.map +1 -0
  22. package/dist/resource-handlers/index.js +62 -0
  23. package/dist/resource-handlers/index.js.map +1 -0
  24. package/dist/resource-handlers/system-prompt.d.ts +15 -0
  25. package/dist/resource-handlers/system-prompt.d.ts.map +1 -0
  26. package/dist/resource-handlers/system-prompt.js +40 -0
  27. package/dist/resource-handlers/system-prompt.js.map +1 -0
  28. package/dist/resource-handlers/workflow-resource.d.ts +15 -0
  29. package/dist/resource-handlers/workflow-resource.d.ts.map +1 -0
  30. package/dist/resource-handlers/workflow-resource.js +85 -0
  31. package/dist/resource-handlers/workflow-resource.js.map +1 -0
  32. package/dist/response-renderer.d.ts +30 -0
  33. package/dist/response-renderer.d.ts.map +1 -0
  34. package/dist/response-renderer.js +94 -0
  35. package/dist/response-renderer.js.map +1 -0
  36. package/dist/server-config.d.ts +34 -0
  37. package/dist/server-config.d.ts.map +1 -0
  38. package/dist/server-config.js +486 -0
  39. package/dist/server-config.js.map +1 -0
  40. package/dist/server-helpers.d.ts +62 -0
  41. package/dist/server-helpers.d.ts.map +1 -0
  42. package/dist/server-helpers.js +156 -0
  43. package/dist/server-helpers.js.map +1 -0
  44. package/dist/server-implementation.d.ts +74 -0
  45. package/dist/server-implementation.d.ts.map +1 -0
  46. package/dist/server-implementation.js +201 -0
  47. package/dist/server-implementation.js.map +1 -0
  48. package/dist/server.d.ts +6 -0
  49. package/dist/server.d.ts.map +1 -0
  50. package/dist/server.js +5 -0
  51. package/dist/server.js.map +1 -0
  52. package/dist/tool-handlers/base-tool-handler.d.ts +50 -0
  53. package/dist/tool-handlers/base-tool-handler.d.ts.map +1 -0
  54. package/dist/tool-handlers/base-tool-handler.js +74 -0
  55. package/dist/tool-handlers/base-tool-handler.js.map +1 -0
  56. package/dist/tool-handlers/conduct-review.d.ts +49 -0
  57. package/dist/tool-handlers/conduct-review.d.ts.map +1 -0
  58. package/dist/tool-handlers/conduct-review.js +105 -0
  59. package/dist/tool-handlers/conduct-review.js.map +1 -0
  60. package/dist/tool-handlers/get-tool-info.d.ts +76 -0
  61. package/dist/tool-handlers/get-tool-info.d.ts.map +1 -0
  62. package/dist/tool-handlers/get-tool-info.js +168 -0
  63. package/dist/tool-handlers/get-tool-info.js.map +1 -0
  64. package/dist/tool-handlers/index.d.ts +42 -0
  65. package/dist/tool-handlers/index.d.ts.map +1 -0
  66. package/dist/tool-handlers/index.js +74 -0
  67. package/dist/tool-handlers/index.js.map +1 -0
  68. package/dist/tool-handlers/install-workflow.d.ts +48 -0
  69. package/dist/tool-handlers/install-workflow.d.ts.map +1 -0
  70. package/dist/tool-handlers/install-workflow.js +131 -0
  71. package/dist/tool-handlers/install-workflow.js.map +1 -0
  72. package/dist/tool-handlers/list-workflows.d.ts +47 -0
  73. package/dist/tool-handlers/list-workflows.d.ts.map +1 -0
  74. package/dist/tool-handlers/list-workflows.js +58 -0
  75. package/dist/tool-handlers/list-workflows.js.map +1 -0
  76. package/dist/tool-handlers/no-idea.d.ts +41 -0
  77. package/dist/tool-handlers/no-idea.d.ts.map +1 -0
  78. package/dist/tool-handlers/no-idea.js +29 -0
  79. package/dist/tool-handlers/no-idea.js.map +1 -0
  80. package/dist/tool-handlers/proceed-to-phase.d.ts +39 -0
  81. package/dist/tool-handlers/proceed-to-phase.d.ts.map +1 -0
  82. package/dist/tool-handlers/proceed-to-phase.js +109 -0
  83. package/dist/tool-handlers/proceed-to-phase.js.map +1 -0
  84. package/dist/tool-handlers/reset-development.d.ts +31 -0
  85. package/dist/tool-handlers/reset-development.d.ts.map +1 -0
  86. package/dist/tool-handlers/reset-development.js +48 -0
  87. package/dist/tool-handlers/reset-development.js.map +1 -0
  88. package/dist/tool-handlers/resume-workflow.d.ts +88 -0
  89. package/dist/tool-handlers/resume-workflow.d.ts.map +1 -0
  90. package/dist/tool-handlers/resume-workflow.js +213 -0
  91. package/dist/tool-handlers/resume-workflow.js.map +1 -0
  92. package/dist/tool-handlers/setup-project-docs.d.ts +36 -0
  93. package/dist/tool-handlers/setup-project-docs.d.ts.map +1 -0
  94. package/dist/tool-handlers/setup-project-docs.js +136 -0
  95. package/dist/tool-handlers/setup-project-docs.js.map +1 -0
  96. package/dist/tool-handlers/start-development.d.ts +82 -0
  97. package/dist/tool-handlers/start-development.d.ts.map +1 -0
  98. package/dist/tool-handlers/start-development.js +448 -0
  99. package/dist/tool-handlers/start-development.js.map +1 -0
  100. package/dist/tool-handlers/whats-next.d.ts +42 -0
  101. package/dist/tool-handlers/whats-next.d.ts.map +1 -0
  102. package/dist/tool-handlers/whats-next.js +118 -0
  103. package/dist/tool-handlers/whats-next.js.map +1 -0
  104. package/dist/types.d.ts +114 -0
  105. package/dist/types.d.ts.map +1 -0
  106. package/dist/types.js +5 -0
  107. package/dist/types.js.map +1 -0
  108. package/package.json +29 -0
  109. package/src/index.ts +93 -0
  110. package/src/notification-service.ts +23 -0
  111. package/src/resource-handlers/conversation-state.ts +55 -0
  112. package/src/resource-handlers/development-plan.ts +48 -0
  113. package/src/resource-handlers/index.ts +73 -0
  114. package/src/resource-handlers/system-prompt.ts +55 -0
  115. package/src/resource-handlers/workflow-resource.ts +126 -0
  116. package/src/response-renderer.ts +116 -0
  117. package/src/server-config.ts +744 -0
  118. package/src/server-helpers.ts +225 -0
  119. package/src/server-implementation.ts +277 -0
  120. package/src/server.ts +9 -0
  121. package/src/tool-handlers/base-tool-handler.ts +141 -0
  122. package/src/tool-handlers/conduct-review.ts +191 -0
  123. package/src/tool-handlers/get-tool-info.ts +274 -0
  124. package/src/tool-handlers/index.ts +117 -0
  125. package/src/tool-handlers/install-workflow.ts +185 -0
  126. package/src/tool-handlers/list-workflows.ts +94 -0
  127. package/src/tool-handlers/no-idea.ts +47 -0
  128. package/src/tool-handlers/proceed-to-phase.ts +205 -0
  129. package/src/tool-handlers/reset-development.ts +90 -0
  130. package/src/tool-handlers/resume-workflow.ts +380 -0
  131. package/src/tool-handlers/setup-project-docs.ts +226 -0
  132. package/src/tool-handlers/start-development.ts +685 -0
  133. package/src/tool-handlers/whats-next.ts +235 -0
  134. package/src/types.ts +130 -0
  135. package/test/e2e/core-functionality.test.ts +176 -0
  136. package/test/e2e/mcp-contract.test.ts +540 -0
  137. package/test/e2e/plan-management.test.ts +331 -0
  138. package/test/e2e/state-management.test.ts +392 -0
  139. package/test/e2e/workflow-integration.test.ts +506 -0
  140. package/test/unit/commit-behaviour-interface.test.ts +244 -0
  141. package/test/unit/conduct-review.test.ts +151 -0
  142. package/test/unit/reset-functionality.test.ts +72 -0
  143. package/test/unit/resume-workflow.test.ts +192 -0
  144. package/test/unit/server-tools.test.ts +311 -0
  145. package/test/unit/setup-project-docs-handler.test.ts +267 -0
  146. package/test/unit/start-development-artifact-detection.test.ts +387 -0
  147. package/test/unit/start-development-gitignore.test.ts +178 -0
  148. package/test/unit/system-prompt-resource.test.ts +101 -0
  149. package/test/unit/tool-handlers/no-idea.test.ts +40 -0
  150. package/test/utils/e2e-test-setup.ts +453 -0
  151. package/test/utils/run-server-in-dir.sh +27 -0
  152. package/test/utils/temp-files.ts +308 -0
  153. package/test/utils/test-access.ts +79 -0
  154. package/test/utils/test-helpers.ts +286 -0
  155. package/test/utils/test-setup.ts +78 -0
  156. package/tsconfig.build.json +9 -0
  157. package/tsconfig.build.tsbuildinfo +1 -0
  158. package/tsconfig.json +12 -0
  159. package/vitest.config.ts +17 -0
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Vibe Feature MCP Server Entry Point
4
+ *
5
+ * Starts the MCP server with stdio transport for process-based usage.
6
+ * The core server logic is in server.ts for better testability.
7
+ */
8
+ export { ResponsibleVibeMCPServer, createResponsibleVibeMCPServer, } from './server.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAMH,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Vibe Feature MCP Server Entry Point
4
+ *
5
+ * Starts the MCP server with stdio transport for process-based usage.
6
+ * The core server logic is in server.ts for better testability.
7
+ */
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { createResponsibleVibeMCPServer } from './server.js';
10
+ // Re-export for external use
11
+ export { ResponsibleVibeMCPServer, createResponsibleVibeMCPServer, } from './server.js';
12
+ import { createLogger } from '@codemcp/workflows-core';
13
+ const logger = createLogger('Main');
14
+ /**
15
+ * Parse command line arguments and handle special flags
16
+ */
17
+ function parseCliArgs() {
18
+ // Since routing is handled at root level, always start server when this module is loaded
19
+ return { shouldStartServer: true };
20
+ }
21
+ /**
22
+ * Main entry point for the MCP server process
23
+ */
24
+ async function main() {
25
+ // Parse CLI arguments first
26
+ const { shouldStartServer } = parseCliArgs();
27
+ // If special flags were handled, exit gracefully
28
+ if (!shouldStartServer) {
29
+ return;
30
+ }
31
+ // Normal MCP server startup
32
+ try {
33
+ const projectPath = process.env.PROJECT_PATH;
34
+ // Create server instance with project path configuration
35
+ const server = await createResponsibleVibeMCPServer({
36
+ projectPath: projectPath,
37
+ });
38
+ // Initialize server
39
+ await server.initialize();
40
+ // Create stdio transport
41
+ const transport = new StdioServerTransport();
42
+ // Connect server to transport
43
+ await server.getMcpServer().connect(transport);
44
+ // Note: No logging here to ensure compatibility with Amazon Q CLI
45
+ // Amazon Q CLI expects no logging notifications before MCP initialization completes
46
+ // Handle graceful shutdown
47
+ process.on('SIGINT', async () => {
48
+ logger.info('Shutting down Vibe Feature MCP Server...');
49
+ await server.cleanup();
50
+ process.exit(0);
51
+ });
52
+ process.on('SIGTERM', async () => {
53
+ logger.info('Shutting down Vibe Feature MCP Server...');
54
+ await server.cleanup();
55
+ process.exit(0);
56
+ });
57
+ }
58
+ catch (error) {
59
+ logger.error('Failed to start server', error);
60
+ process.exit(1);
61
+ }
62
+ }
63
+ // Start the server if this file is run directly
64
+ // More robust check that works with npx and direct execution
65
+ const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
66
+ process.argv[1]?.endsWith('responsible-vibe-mcp') ||
67
+ process.argv[1]?.endsWith('index.js');
68
+ if (isMainModule) {
69
+ main().catch(error => {
70
+ logger.error('Unhandled error in main', error);
71
+ process.exit(1);
72
+ });
73
+ }
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAE7D,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpC;;GAEG;AACH,SAAS,YAAY;IACnB,yFAAyF;IACzF,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,4BAA4B;IAC5B,MAAM,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;IAE7C,iDAAiD;IACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAE7C,yDAAyD;QACzD,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC;YAClD,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7C,8BAA8B;QAC9B,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE/C,kEAAkE;QAClE,oFAAoF;QAEpF,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACxD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACxD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAc,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,6DAA6D;AAC7D,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAExC,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACnB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Notification Service
3
+ *
4
+ * Simple event system for notifying MCP client of changes
5
+ */
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ declare class NotificationService {
8
+ private mcpServer?;
9
+ setMcpServer(server: McpServer): void;
10
+ notifyToolListChanged(): Promise<void>;
11
+ }
12
+ export declare const notificationService: NotificationService;
13
+ export {};
14
+ //# sourceMappingURL=notification-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-service.d.ts","sourceRoot":"","sources":["../src/notification-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,cAAM,mBAAmB;IACvB,OAAO,CAAC,SAAS,CAAC,CAAY;IAE9B,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAI/B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7C;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Notification Service
3
+ *
4
+ * Simple event system for notifying MCP client of changes
5
+ */
6
+ class NotificationService {
7
+ mcpServer;
8
+ setMcpServer(server) {
9
+ this.mcpServer = server;
10
+ }
11
+ async notifyToolListChanged() {
12
+ if (this.mcpServer) {
13
+ this.mcpServer.sendToolListChanged();
14
+ }
15
+ }
16
+ }
17
+ export const notificationService = new NotificationService();
18
+ //# sourceMappingURL=notification-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-service.js","sourceRoot":"","sources":["../src/notification-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,mBAAmB;IACf,SAAS,CAAa;IAE9B,YAAY,CAAC,MAAiB;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Conversation State Resource Handler
3
+ *
4
+ * Handles the conversation-state resource which provides access to current
5
+ * conversation state and phase information including conversation ID, project context,
6
+ * current development phase, and plan file location.
7
+ */
8
+ import { ResourceHandler, ServerContext, HandlerResult, ResourceContent } from '../types.js';
9
+ /**
10
+ * Conversation State resource handler implementation
11
+ */
12
+ export declare class ConversationStateResourceHandler implements ResourceHandler {
13
+ handle(uri: URL, context: ServerContext): Promise<HandlerResult<ResourceContent>>;
14
+ }
15
+ //# sourceMappingURL=conversation-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../../src/resource-handlers/conversation-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AAKrB;;GAEG;AACH,qBAAa,gCAAiC,YAAW,eAAe;IAChE,MAAM,CACV,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;CA4B3C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Conversation State Resource Handler
3
+ *
4
+ * Handles the conversation-state resource which provides access to current
5
+ * conversation state and phase information including conversation ID, project context,
6
+ * current development phase, and plan file location.
7
+ */
8
+ import { createLogger } from '@codemcp/workflows-core';
9
+ import { safeExecute } from '../server-helpers.js';
10
+ const logger = createLogger('ConversationStateResourceHandler');
11
+ /**
12
+ * Conversation State resource handler implementation
13
+ */
14
+ export class ConversationStateResourceHandler {
15
+ async handle(uri, context) {
16
+ logger.debug('Processing conversation state resource request', {
17
+ uri: uri.href,
18
+ });
19
+ return safeExecute(async () => {
20
+ // Get conversation context
21
+ const conversationContext = await context.conversationManager.getConversationContext();
22
+ // Build state information
23
+ const stateInfo = {
24
+ conversationId: conversationContext.conversationId,
25
+ projectPath: conversationContext.projectPath,
26
+ gitBranch: conversationContext.gitBranch,
27
+ currentPhase: conversationContext.currentPhase,
28
+ planFilePath: conversationContext.planFilePath,
29
+ timestamp: new Date().toISOString(),
30
+ description: 'Current state of the development workflow conversation',
31
+ };
32
+ return {
33
+ uri: uri.href,
34
+ text: JSON.stringify(stateInfo, null, 2),
35
+ mimeType: 'application/json',
36
+ };
37
+ }, 'Failed to retrieve conversation state resource');
38
+ }
39
+ }
40
+ //# sourceMappingURL=conversation-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-state.js","sourceRoot":"","sources":["../../src/resource-handlers/conversation-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAOvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,kCAAkC,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,OAAO,gCAAgC;IAC3C,KAAK,CAAC,MAAM,CACV,GAAQ,EACR,OAAsB;QAEtB,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE;YAC7D,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,KAAK,IAAI,EAAE;YAC5B,2BAA2B;YAC3B,MAAM,mBAAmB,GACvB,MAAM,OAAO,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC;YAE7D,0BAA0B;YAC1B,MAAM,SAAS,GAAG;gBAChB,cAAc,EAAE,mBAAmB,CAAC,cAAc;gBAClD,WAAW,EAAE,mBAAmB,CAAC,WAAW;gBAC5C,SAAS,EAAE,mBAAmB,CAAC,SAAS;gBACxC,YAAY,EAAE,mBAAmB,CAAC,YAAY;gBAC9C,YAAY,EAAE,mBAAmB,CAAC,YAAY;gBAC9C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,WAAW,EAAE,wDAAwD;aACtE,CAAC;YAEF,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,QAAQ,EAAE,kBAAkB;aAC7B,CAAC;QACJ,CAAC,EAAE,gDAAgD,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Development Plan Resource Handler
3
+ *
4
+ * Handles the development-plan resource which provides access to the current
5
+ * development plan document (markdown) that tracks project progress, tasks, and decisions.
6
+ */
7
+ import { ResourceHandler, ServerContext, HandlerResult, ResourceContent } from '../types.js';
8
+ /**
9
+ * Development Plan resource handler implementation
10
+ */
11
+ export declare class DevelopmentPlanResourceHandler implements ResourceHandler {
12
+ handle(uri: URL, context: ServerContext): Promise<HandlerResult<ResourceContent>>;
13
+ }
14
+ //# sourceMappingURL=development-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-plan.d.ts","sourceRoot":"","sources":["../../src/resource-handlers/development-plan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AAKrB;;GAEG;AACH,qBAAa,8BAA+B,YAAW,eAAe;IAC9D,MAAM,CACV,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;CAsB3C"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Development Plan Resource Handler
3
+ *
4
+ * Handles the development-plan resource which provides access to the current
5
+ * development plan document (markdown) that tracks project progress, tasks, and decisions.
6
+ */
7
+ import { createLogger } from '@codemcp/workflows-core';
8
+ import { safeExecute } from '../server-helpers.js';
9
+ const logger = createLogger('DevelopmentPlanResourceHandler');
10
+ /**
11
+ * Development Plan resource handler implementation
12
+ */
13
+ export class DevelopmentPlanResourceHandler {
14
+ async handle(uri, context) {
15
+ logger.debug('Processing development plan resource request', {
16
+ uri: uri.href,
17
+ });
18
+ return safeExecute(async () => {
19
+ // Get conversation context
20
+ const conversationContext = await context.conversationManager.getConversationContext();
21
+ // Get plan file content
22
+ const planContent = await context.planManager.getPlanFileContent(conversationContext.planFilePath);
23
+ return {
24
+ uri: uri.href,
25
+ text: planContent,
26
+ mimeType: 'text/markdown',
27
+ };
28
+ }, 'Failed to retrieve development plan resource');
29
+ }
30
+ }
31
+ //# sourceMappingURL=development-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-plan.js","sourceRoot":"","sources":["../../src/resource-handlers/development-plan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAOvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,8BAA8B;IACzC,KAAK,CAAC,MAAM,CACV,GAAQ,EACR,OAAsB;QAEtB,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;YAC3D,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,KAAK,IAAI,EAAE;YAC5B,2BAA2B;YAC3B,MAAM,mBAAmB,GACvB,MAAM,OAAO,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC;YAE7D,wBAAwB;YACxB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAC9D,mBAAmB,CAAC,YAAY,CACjC,CAAC;YAEF,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,eAAe;aAC1B,CAAC;QACJ,CAAC,EAAE,8CAA8C,CAAC,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Resource Handler Registry
3
+ *
4
+ * Central registry for all resource handlers. Provides registration and lookup
5
+ * functionality for resource handlers used by the MCP server.
6
+ */
7
+ import { ResourceHandler, ResourceRegistry } from '../types.js';
8
+ /**
9
+ * Default implementation of ResourceRegistry
10
+ */
11
+ export declare class DefaultResourceRegistry implements ResourceRegistry {
12
+ private handlers;
13
+ register(pattern: string, handler: ResourceHandler): void;
14
+ resolve(uri: string): ResourceHandler | undefined;
15
+ }
16
+ /**
17
+ * Create and configure the default resource registry with all standard handlers
18
+ */
19
+ export declare function createResourceRegistry(): ResourceRegistry;
20
+ export { DevelopmentPlanResourceHandler } from './development-plan.js';
21
+ export { ConversationStateResourceHandler } from './conversation-state.js';
22
+ export { WorkflowResourceHandler } from './workflow-resource.js';
23
+ export { SystemPromptResourceHandler } from './system-prompt.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resource-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIhE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,QAAQ,CAAsC;IAEtD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAQzD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;CAYlD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAmBzD;AAGD,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Resource Handler Registry
3
+ *
4
+ * Central registry for all resource handlers. Provides registration and lookup
5
+ * functionality for resource handlers used by the MCP server.
6
+ */
7
+ import { createLogger } from '@codemcp/workflows-core';
8
+ import { DevelopmentPlanResourceHandler } from './development-plan.js';
9
+ import { ConversationStateResourceHandler } from './conversation-state.js';
10
+ import { WorkflowResourceHandler } from './workflow-resource.js';
11
+ import { SystemPromptResourceHandler } from './system-prompt.js';
12
+ const logger = createLogger('ResourceRegistry');
13
+ /**
14
+ * Default implementation of ResourceRegistry
15
+ */
16
+ export class DefaultResourceRegistry {
17
+ handlers = new Map();
18
+ register(pattern, handler) {
19
+ logger.debug('Registering resource handler', {
20
+ pattern,
21
+ handlerType: handler.constructor.name,
22
+ });
23
+ this.handlers.set(pattern, handler);
24
+ }
25
+ resolve(uri) {
26
+ // Simple pattern matching - could be enhanced with regex patterns
27
+ for (const [pattern, handler] of this.handlers.entries()) {
28
+ if (uri.includes(pattern)) {
29
+ logger.debug('Resolved resource handler', { uri, pattern });
30
+ return handler;
31
+ }
32
+ }
33
+ logger.debug('No resource handler found for URI', { uri });
34
+ return undefined;
35
+ }
36
+ }
37
+ /**
38
+ * Create and configure the default resource registry with all standard handlers
39
+ */
40
+ export function createResourceRegistry() {
41
+ const registry = new DefaultResourceRegistry();
42
+ // Register all standard resource handlers
43
+ registry.register('plan://current', new DevelopmentPlanResourceHandler());
44
+ registry.register('state://current', new ConversationStateResourceHandler());
45
+ registry.register('workflow://', new WorkflowResourceHandler());
46
+ registry.register('system-prompt://', new SystemPromptResourceHandler());
47
+ logger.info('Resource registry created with handlers', {
48
+ patterns: [
49
+ 'plan://current',
50
+ 'state://current',
51
+ 'workflow://',
52
+ 'system-prompt://',
53
+ ],
54
+ });
55
+ return registry;
56
+ }
57
+ // Export all handler types for external use
58
+ export { DevelopmentPlanResourceHandler } from './development-plan.js';
59
+ export { ConversationStateResourceHandler } from './conversation-state.js';
60
+ export { WorkflowResourceHandler } from './workflow-resource.js';
61
+ export { SystemPromptResourceHandler } from './system-prompt.js';
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resource-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAC1B,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEtD,QAAQ,CAAC,OAAe,EAAE,OAAwB;QAChD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI;SACtC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,kEAAkE;QAClE,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAE/C,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,8BAA8B,EAAE,CAAC,CAAC;IAC1E,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,gCAAgC,EAAE,CAAC,CAAC;IAC7E,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,uBAAuB,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,2BAA2B,EAAE,CAAC,CAAC;IAEzE,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;QACrD,QAAQ,EAAE;YACR,gBAAgB;YAChB,iBAAiB;YACjB,aAAa;YACb,kBAAkB;SACnB;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4CAA4C;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * System Prompt Resource Handler
3
+ *
4
+ * Handles the system-prompt resource which provides access to the complete
5
+ * system prompt for LLM integration. This allows programmatic access to the
6
+ * system prompt through the MCP protocol. The system prompt is workflow-independent.
7
+ */
8
+ import { ResourceHandler, ServerContext, HandlerResult, ResourceContent } from '../types.js';
9
+ /**
10
+ * System Prompt resource handler implementation
11
+ */
12
+ export declare class SystemPromptResourceHandler implements ResourceHandler {
13
+ handle(uri: URL, _context: ServerContext): Promise<HandlerResult<ResourceContent>>;
14
+ }
15
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/resource-handlers/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,qBAAa,2BAA4B,YAAW,eAAe;IAC3D,MAAM,CACV,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;CA0B3C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * System Prompt Resource Handler
3
+ *
4
+ * Handles the system-prompt resource which provides access to the complete
5
+ * system prompt for LLM integration. This allows programmatic access to the
6
+ * system prompt through the MCP protocol. The system prompt is workflow-independent.
7
+ */
8
+ import { createLogger } from '@codemcp/workflows-core';
9
+ import { safeExecute } from '../server-helpers.js';
10
+ import { generateSystemPrompt } from '@codemcp/workflows-core';
11
+ import { StateMachineLoader } from '@codemcp/workflows-core';
12
+ const logger = createLogger('SystemPromptResourceHandler');
13
+ /**
14
+ * System Prompt resource handler implementation
15
+ */
16
+ export class SystemPromptResourceHandler {
17
+ async handle(uri, _context) {
18
+ logger.debug('Processing system prompt resource request', {
19
+ uri: uri.href,
20
+ });
21
+ return safeExecute(async () => {
22
+ // Use the default waterfall workflow for system prompt generation
23
+ // The system prompt is workflow-independent and uses a standard workflow
24
+ const loader = new StateMachineLoader();
25
+ const stateMachine = loader.loadStateMachine(process.cwd()); // Uses default waterfall workflow
26
+ // Generate the system prompt
27
+ const systemPrompt = generateSystemPrompt(stateMachine);
28
+ logger.debug('Generated system prompt for resource', {
29
+ promptLength: systemPrompt.length,
30
+ workflowName: stateMachine.name,
31
+ });
32
+ return {
33
+ uri: uri.href,
34
+ text: systemPrompt,
35
+ mimeType: 'text/plain',
36
+ };
37
+ }, 'Failed to retrieve system prompt resource');
38
+ }
39
+ }
40
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/resource-handlers/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAOvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,2BAA2B;IACtC,KAAK,CAAC,MAAM,CACV,GAAQ,EACR,QAAuB;QAEvB,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;YACxD,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,KAAK,IAAI,EAAE;YAC5B,kEAAkE;YAClE,yEAAyE;YACzE,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAE/F,6BAA6B;YAC7B,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACnD,YAAY,EAAE,YAAY,CAAC,MAAM;gBACjC,YAAY,EAAE,YAAY,CAAC,IAAI;aAChC,CAAC,CAAC;YAEH,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,YAAY;aACvB,CAAC;QACJ,CAAC,EAAE,2CAA2C,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Workflow Resource Handler
3
+ *
4
+ * Handles MCP resources for individual workflows, returning the raw YAML content
5
+ * from workflow definition files.
6
+ */
7
+ import { ResourceHandler, ServerContext, HandlerResult, ResourceContent } from '../types.js';
8
+ /**
9
+ * Resource handler for workflow:// URIs
10
+ * Returns raw YAML content from workflow definition files
11
+ */
12
+ export declare class WorkflowResourceHandler implements ResourceHandler {
13
+ handle(uri: URL, context: ServerContext): Promise<HandlerResult<ResourceContent>>;
14
+ }
15
+ //# sourceMappingURL=workflow-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-resource.d.ts","sourceRoot":"","sources":["../../src/resource-handlers/workflow-resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IACvD,MAAM,CACV,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;CAgG3C"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Workflow Resource Handler
3
+ *
4
+ * Handles MCP resources for individual workflows, returning the raw YAML content
5
+ * from workflow definition files.
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { createLogger } from '@codemcp/workflows-core';
11
+ import { safeExecute } from '../server-helpers.js';
12
+ const logger = createLogger('WorkflowResourceHandler');
13
+ /**
14
+ * Resource handler for workflow:// URIs
15
+ * Returns raw YAML content from workflow definition files
16
+ */
17
+ export class WorkflowResourceHandler {
18
+ async handle(uri, context) {
19
+ logger.debug('Processing workflow resource request', { uri: uri.href });
20
+ return safeExecute(async () => {
21
+ // Extract workflow name from URI (workflow://workflow-name)
22
+ const workflowName = uri.hostname;
23
+ if (!workflowName) {
24
+ throw new Error('Invalid workflow URI: missing workflow name. Expected: workflow://workflow-name');
25
+ }
26
+ logger.info('Loading workflow resource', { workflowName, uri: uri.href });
27
+ let yamlContent;
28
+ let filePath;
29
+ // Try to get workflow from workflow manager
30
+ const workflow = context.workflowManager.getWorkflow(workflowName);
31
+ if (!workflow) {
32
+ throw new Error(`Workflow '${workflowName}' not found`);
33
+ }
34
+ // Handle predefined workflows
35
+ // Get the workflows directory path - more reliable approach
36
+ const currentFileUrl = import.meta.url;
37
+ const currentFilePath = fileURLToPath(currentFileUrl);
38
+ // Navigate from the compiled location to the project root
39
+ // From dist/server/resource-handlers/workflow-resource.js -> project root
40
+ let projectRoot;
41
+ if (currentFilePath.includes('/dist/')) {
42
+ // Running from compiled code - dist is one level down from project root
43
+ projectRoot = path.resolve(path.dirname(currentFilePath), '../../../');
44
+ }
45
+ else {
46
+ // Running from source (development) - src is one level down from project root
47
+ projectRoot = path.resolve(path.dirname(currentFilePath), '../../../');
48
+ }
49
+ const workflowFile = path.join(projectRoot, 'resources', 'workflows', `${workflowName}.yaml`);
50
+ if (!fs.existsSync(workflowFile)) {
51
+ // Try .yml extension
52
+ const workflowFileYml = path.join(projectRoot, 'resources', 'workflows', `${workflowName}.yml`);
53
+ if (!fs.existsSync(workflowFileYml)) {
54
+ // Log debug info to help troubleshoot
55
+ logger.error('Workflow file not found', new Error(`Workflow '${workflowName}' not found`), {
56
+ workflowName,
57
+ currentFilePath,
58
+ projectRoot,
59
+ workflowFile,
60
+ workflowFileYml,
61
+ workflowsDir: path.join(projectRoot, 'resources', 'workflows'),
62
+ workflowsDirExists: fs.existsSync(path.join(projectRoot, 'resources', 'workflows')),
63
+ });
64
+ throw new Error(`Workflow '${workflowName}' not found in resources/workflows/`);
65
+ }
66
+ filePath = workflowFileYml;
67
+ }
68
+ else {
69
+ filePath = workflowFile;
70
+ }
71
+ yamlContent = fs.readFileSync(filePath, 'utf-8');
72
+ logger.info('Successfully loaded workflow resource', {
73
+ workflowName,
74
+ filePath,
75
+ contentLength: yamlContent.length,
76
+ });
77
+ return {
78
+ uri: uri.href,
79
+ text: yamlContent,
80
+ mimeType: 'application/x-yaml',
81
+ };
82
+ }, `Failed to load workflow resource: ${uri.href}`);
83
+ }
84
+ }
85
+ //# sourceMappingURL=workflow-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-resource.js","sourceRoot":"","sources":["../../src/resource-handlers/workflow-resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Response Renderer
3
+ *
4
+ * Handles translation between domain handler results and MCP protocol responses.
5
+ * This provides clean separation between business logic and protocol concerns.
6
+ */
7
+ import { ResponseRenderer, HandlerResult, ResourceContent, McpToolResponse, McpResourceResponse } from './types.js';
8
+ /**
9
+ * Default implementation of ResponseRenderer
10
+ * Converts domain results to MCP protocol format
11
+ */
12
+ export declare class DefaultResponseRenderer implements ResponseRenderer {
13
+ /**
14
+ * Render a tool handler result as an MCP tool response
15
+ */
16
+ renderToolResponse<T>(result: HandlerResult<T>): McpToolResponse;
17
+ /**
18
+ * Render a resource handler result as an MCP resource response
19
+ */
20
+ renderResourceResponse(result: HandlerResult<ResourceContent>): McpResourceResponse;
21
+ /**
22
+ * Render an error as an MCP tool response
23
+ */
24
+ renderError(error: Error | string): McpToolResponse;
25
+ }
26
+ /**
27
+ * Create a default response renderer instance
28
+ */
29
+ export declare function createResponseRenderer(): ResponseRenderer;
30
+ //# sourceMappingURL=response-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-renderer.d.ts","sourceRoot":"","sources":["../src/response-renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,eAAe,EACf,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D;;OAEG;IACH,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe;IA0BhE;;OAEG;IACH,sBAAsB,CACpB,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GACrC,mBAAmB;IAiCtB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,eAAe;CAepD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}