@edicarlos.lds/businessmap-mcp 1.7.0 → 2.0.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 (118) hide show
  1. package/README.md +11 -7
  2. package/dist/client/modules/index.d.ts +2 -1
  3. package/dist/client/modules/index.d.ts.map +1 -1
  4. package/dist/client/modules/index.js.map +1 -1
  5. package/dist/config/environment.d.ts +3 -1
  6. package/dist/config/environment.d.ts.map +1 -1
  7. package/dist/config/environment.js +37 -6
  8. package/dist/config/environment.js.map +1 -1
  9. package/dist/index.js +40 -32
  10. package/dist/index.js.map +1 -1
  11. package/dist/schemas/board-schemas.d.ts +1 -1
  12. package/dist/schemas/board-schemas.d.ts.map +1 -1
  13. package/dist/schemas/board-schemas.js +1 -1
  14. package/dist/schemas/board-schemas.js.map +1 -1
  15. package/dist/schemas/card-schemas.d.ts +1 -1
  16. package/dist/schemas/card-schemas.d.ts.map +1 -1
  17. package/dist/schemas/card-schemas.js +1 -1
  18. package/dist/schemas/card-schemas.js.map +1 -1
  19. package/dist/schemas/common-schemas.d.ts +1 -1
  20. package/dist/schemas/common-schemas.d.ts.map +1 -1
  21. package/dist/schemas/common-schemas.js +1 -1
  22. package/dist/schemas/common-schemas.js.map +1 -1
  23. package/dist/schemas/custom-field-schemas.d.ts +1 -1
  24. package/dist/schemas/custom-field-schemas.d.ts.map +1 -1
  25. package/dist/schemas/custom-field-schemas.js +1 -1
  26. package/dist/schemas/custom-field-schemas.js.map +1 -1
  27. package/dist/schemas/user-schemas.d.ts +1 -1
  28. package/dist/schemas/user-schemas.d.ts.map +1 -1
  29. package/dist/schemas/user-schemas.js +1 -1
  30. package/dist/schemas/user-schemas.js.map +1 -1
  31. package/dist/schemas/utility-schemas.d.ts +1 -1
  32. package/dist/schemas/utility-schemas.d.ts.map +1 -1
  33. package/dist/schemas/utility-schemas.js +1 -1
  34. package/dist/schemas/utility-schemas.js.map +1 -1
  35. package/dist/schemas/workflow-schemas.d.ts +1 -1
  36. package/dist/schemas/workflow-schemas.d.ts.map +1 -1
  37. package/dist/schemas/workflow-schemas.js +1 -1
  38. package/dist/schemas/workflow-schemas.js.map +1 -1
  39. package/dist/schemas/workspace-schemas.d.ts +1 -1
  40. package/dist/schemas/workspace-schemas.d.ts.map +1 -1
  41. package/dist/schemas/workspace-schemas.js +1 -1
  42. package/dist/schemas/workspace-schemas.js.map +1 -1
  43. package/dist/server/http.d.ts +1 -2
  44. package/dist/server/http.d.ts.map +1 -1
  45. package/dist/server/http.js +82 -42
  46. package/dist/server/http.js.map +1 -1
  47. package/dist/server/mcp-server.d.ts +3 -2
  48. package/dist/server/mcp-server.d.ts.map +1 -1
  49. package/dist/server/mcp-server.js +21 -2
  50. package/dist/server/mcp-server.js.map +1 -1
  51. package/dist/server/prompts/base-prompt.d.ts +14 -0
  52. package/dist/server/prompts/base-prompt.d.ts.map +1 -0
  53. package/dist/server/prompts/base-prompt.js +2 -0
  54. package/dist/server/prompts/base-prompt.js.map +1 -0
  55. package/dist/server/prompts/board-prompts.d.ts +9 -0
  56. package/dist/server/prompts/board-prompts.d.ts.map +1 -0
  57. package/dist/server/prompts/board-prompts.js +101 -0
  58. package/dist/server/prompts/board-prompts.js.map +1 -0
  59. package/dist/server/prompts/card-prompts.d.ts +8 -0
  60. package/dist/server/prompts/card-prompts.d.ts.map +1 -0
  61. package/dist/server/prompts/card-prompts.js +47 -0
  62. package/dist/server/prompts/card-prompts.js.map +1 -0
  63. package/dist/server/prompts/index.d.ts +5 -0
  64. package/dist/server/prompts/index.d.ts.map +1 -0
  65. package/dist/server/prompts/index.js +4 -0
  66. package/dist/server/prompts/index.js.map +1 -0
  67. package/dist/server/prompts/workspace-prompts.d.ts +8 -0
  68. package/dist/server/prompts/workspace-prompts.d.ts.map +1 -0
  69. package/dist/server/prompts/workspace-prompts.js +59 -0
  70. package/dist/server/prompts/workspace-prompts.js.map +1 -0
  71. package/dist/server/resources/base-resource.d.ts +18 -0
  72. package/dist/server/resources/base-resource.d.ts.map +1 -0
  73. package/dist/server/resources/base-resource.js +10 -0
  74. package/dist/server/resources/base-resource.js.map +1 -0
  75. package/dist/server/resources/board-resources.d.ts +7 -0
  76. package/dist/server/resources/board-resources.d.ts.map +1 -0
  77. package/dist/server/resources/board-resources.js +31 -0
  78. package/dist/server/resources/board-resources.js.map +1 -0
  79. package/dist/server/resources/card-resources.d.ts +7 -0
  80. package/dist/server/resources/card-resources.d.ts.map +1 -0
  81. package/dist/server/resources/card-resources.js +34 -0
  82. package/dist/server/resources/card-resources.js.map +1 -0
  83. package/dist/server/resources/index.d.ts +5 -0
  84. package/dist/server/resources/index.d.ts.map +1 -0
  85. package/dist/server/resources/index.js +5 -0
  86. package/dist/server/resources/index.js.map +1 -0
  87. package/dist/server/resources/workspace-resources.d.ts +7 -0
  88. package/dist/server/resources/workspace-resources.d.ts.map +1 -0
  89. package/dist/server/resources/workspace-resources.js +17 -0
  90. package/dist/server/resources/workspace-resources.js.map +1 -0
  91. package/dist/server/tools/base-tool.d.ts +1 -1
  92. package/dist/server/tools/base-tool.d.ts.map +1 -1
  93. package/dist/server/tools/base-tool.js.map +1 -1
  94. package/dist/server/tools/board-tools.d.ts.map +1 -1
  95. package/dist/server/tools/board-tools.js +8 -0
  96. package/dist/server/tools/board-tools.js.map +1 -1
  97. package/dist/server/tools/card-tools.d.ts.map +1 -1
  98. package/dist/server/tools/card-tools.js +23 -0
  99. package/dist/server/tools/card-tools.js.map +1 -1
  100. package/dist/server/tools/custom-field-tools.d.ts.map +1 -1
  101. package/dist/server/tools/custom-field-tools.js +1 -0
  102. package/dist/server/tools/custom-field-tools.js.map +1 -1
  103. package/dist/server/tools/user-tools.d.ts.map +1 -1
  104. package/dist/server/tools/user-tools.js +3 -0
  105. package/dist/server/tools/user-tools.js.map +1 -1
  106. package/dist/server/tools/utility-tools.d.ts.map +1 -1
  107. package/dist/server/tools/utility-tools.js +2 -0
  108. package/dist/server/tools/utility-tools.js.map +1 -1
  109. package/dist/server/tools/workflow-tools.d.ts.map +1 -1
  110. package/dist/server/tools/workflow-tools.js +2 -0
  111. package/dist/server/tools/workflow-tools.js.map +1 -1
  112. package/dist/server/tools/workspace-tools.d.ts.map +1 -1
  113. package/dist/server/tools/workspace-tools.js +3 -0
  114. package/dist/server/tools/workspace-tools.js.map +1 -1
  115. package/dist/utils/logger.d.ts +5 -5
  116. package/dist/utils/logger.d.ts.map +1 -1
  117. package/dist/utils/logger.js.map +1 -1
  118. package/package.json +4 -5
@@ -1,3 +1,2 @@
1
- import { BusinessMapMcpServer } from './mcp-server.js';
2
- export declare function startHttpServer(mcpServer: BusinessMapMcpServer): Promise<void>;
1
+ export declare function startHttpServer(): Promise<void>;
3
2
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIvD,wBAAsB,eAAe,CAAC,SAAS,EAAE,oBAAoB,iBAuEpE"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAaA,wBAAsB,eAAe,kBA4GpC"}
@@ -1,61 +1,101 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import express from 'express';
2
3
  import cors from 'cors';
3
- import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
4
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
5
+ import { BusinessMapMcpServer } from './mcp-server.js';
4
6
  import { config } from '../config/environment.js';
5
7
  import { logger } from '../utils/logger.js';
6
- export async function startHttpServer(mcpServer) {
8
+ export async function startHttpServer() {
7
9
  const app = express();
8
- const transports = new Map();
9
- // Enable CORS
10
- app.use(cors());
11
- // Set up SSE endpoint
12
- app.get('/sse', async (req, res) => {
13
- logger.info('New SSE connection request');
14
- const transport = new SSEServerTransport('/message', res);
15
- const sessionId = transport.sessionId;
16
- transports.set(sessionId, transport);
17
- logger.info(`Created new transport with session ID: ${sessionId}`);
18
- // Clean up on close
19
- res.on('close', () => {
20
- logger.info(`SSE connection closed for session ${sessionId}`);
21
- transports.delete(sessionId);
22
- });
23
- try {
24
- await mcpServer.server.connect(transport);
25
- await transport.start();
26
- }
27
- catch (error) {
28
- logger.error(`Failed to start transport for session ${sessionId}:`, error);
29
- transports.delete(sessionId);
30
- if (!res.headersSent) {
31
- res.status(500).send('Failed to start SSE transport');
10
+ // Parse JSON bodies (required for StreamableHTTP transport)
11
+ app.use(express.json());
12
+ // Enable CORS with configured allowed origins
13
+ app.use(cors({
14
+ origin: config.server.allowedOrigins,
15
+ methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
16
+ allowedHeaders: ['Content-Type', 'mcp-session-id', 'last-event-id'],
17
+ exposedHeaders: ['mcp-session-id'],
18
+ }));
19
+ const sessions = new Map();
20
+ // Single /mcp endpoint handles GET, POST and DELETE (Streamable HTTP spec 2025-03-26)
21
+ const handleMcpRequest = async (req, res) => {
22
+ const sessionId = req.headers['mcp-session-id'];
23
+ if (req.method === 'POST' && !sessionId) {
24
+ const sessionServer = new BusinessMapMcpServer();
25
+ // New session: create a fresh transport
26
+ const transport = new StreamableHTTPServerTransport({
27
+ sessionIdGenerator: () => randomUUID(),
28
+ onsessioninitialized: (id) => {
29
+ sessions.set(id, { transport, server: sessionServer });
30
+ logger.info(`New MCP session initialized: ${id}`);
31
+ },
32
+ onsessionclosed: async (id) => {
33
+ const session = sessions.get(id);
34
+ sessions.delete(id);
35
+ try {
36
+ await session?.server.server.close();
37
+ }
38
+ catch (error) {
39
+ logger.warn(`Error while closing MCP session ${id}:`, error);
40
+ }
41
+ logger.info(`MCP session closed: ${id}`);
42
+ },
43
+ allowedHosts: config.server.allowedHosts,
44
+ allowedOrigins: config.server.allowedOrigins,
45
+ enableDnsRebindingProtection: true,
46
+ });
47
+ try {
48
+ await sessionServer.server.connect(transport);
49
+ await transport.handleRequest(req, res, req.body);
50
+ }
51
+ catch (error) {
52
+ logger.error('Failed to handle new MCP session:', error);
53
+ try {
54
+ await sessionServer.server.close();
55
+ }
56
+ catch (closeError) {
57
+ logger.warn('Error while cleaning up failed session:', closeError);
58
+ }
59
+ if (!res.headersSent) {
60
+ res.status(500).json({ error: 'Failed to initialize MCP session' });
61
+ }
32
62
  }
33
- }
34
- });
35
- // Set up message endpoint
36
- app.post('/message', async (req, res) => {
37
- const sessionId = req.query.sessionId;
38
- if (!sessionId) {
39
- res.status(400).send('Missing sessionId query parameter');
40
63
  return;
41
64
  }
42
- const transport = transports.get(sessionId);
43
- if (!transport) {
44
- res.status(404).send(`Session not found: ${sessionId}`);
65
+ // Existing session
66
+ if (sessionId) {
67
+ const session = sessions.get(sessionId);
68
+ if (!session) {
69
+ res.status(404).json({ error: `Session not found: ${sessionId}` });
70
+ return;
71
+ }
72
+ try {
73
+ await session.transport.handleRequest(req, res, req.body);
74
+ }
75
+ catch (error) {
76
+ logger.error(`Error handling request for session ${sessionId}:`, error);
77
+ if (!res.headersSent) {
78
+ res.status(500).json({ error: 'Internal server error' });
79
+ }
80
+ }
45
81
  return;
46
82
  }
47
- logger.debug(`Received JSON-RPC message for session ${sessionId}`);
48
- await transport.handlePostMessage(req, res);
49
- });
83
+ res.status(400).json({ error: 'Missing mcp-session-id header' });
84
+ };
85
+ app.get('/mcp', handleMcpRequest);
86
+ app.post('/mcp', handleMcpRequest);
87
+ app.delete('/mcp', handleMcpRequest);
50
88
  // Health check endpoint
51
- app.get('/health', (req, res) => {
89
+ app.get('/health', (_req, res) => {
52
90
  res.json({ status: 'ok', version: config.server.version });
53
91
  });
54
92
  const port = config.server.port;
55
93
  app.listen(port, () => {
56
94
  logger.success(`HTTP Server running on port ${port}`);
57
- logger.info(`SSE Endpoint: http://localhost:${port}/sse`);
58
- logger.info(`Message Endpoint: http://localhost:${port}/message`);
95
+ logger.info(`MCP Endpoint: http://localhost:${port}/mcp`);
96
+ logger.info(`Health Check: http://localhost:${port}/health`);
97
+ logger.info(`Allowed origins: ${config.server.allowedOrigins.join(', ')}`);
98
+ logger.info(`Allowed hosts: ${config.server.allowedHosts.join(', ')}`);
59
99
  });
60
100
  }
61
101
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  export declare class BusinessMapMcpServer {
3
- private mcpServer;
4
- private businessMapClient;
3
+ private readonly mcpServer;
4
+ private readonly businessMapClient;
5
5
  constructor();
6
6
  /**
7
7
  * Initialize the server by verifying the BusinessMap API connection
@@ -9,6 +9,7 @@ export declare class BusinessMapMcpServer {
9
9
  initialize(): Promise<void>;
10
10
  private setupTools;
11
11
  private setupResources;
12
+ private setupPrompts;
12
13
  get server(): McpServer;
13
14
  }
14
15
  //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;;IAa7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,cAAc;IAKtB,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBpE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IActD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAYpB,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
@@ -2,6 +2,8 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { BusinessMapClient } from '../client/businessmap-client.js';
3
3
  import { config } from '../config/environment.js';
4
4
  import { BoardToolHandler, CardToolHandler, CustomFieldToolHandler, UserToolHandler, UtilityToolHandler, WorkflowToolHandler, WorkspaceToolHandler, } from './tools/index.js';
5
+ import { BoardResourceHandler, CardResourceHandler, WorkspaceResourceHandler, } from './resources/index.js';
6
+ import { BoardPromptHandler, CardPromptHandler, WorkspacePromptHandler, } from './prompts/index.js';
5
7
  export class BusinessMapMcpServer {
6
8
  mcpServer;
7
9
  businessMapClient;
@@ -13,6 +15,7 @@ export class BusinessMapMcpServer {
13
15
  this.businessMapClient = new BusinessMapClient(config.businessMap);
14
16
  this.setupTools();
15
17
  this.setupResources();
18
+ this.setupPrompts();
16
19
  }
17
20
  /**
18
21
  * Initialize the server by verifying the BusinessMap API connection
@@ -44,8 +47,24 @@ export class BusinessMapMcpServer {
44
47
  });
45
48
  }
46
49
  setupResources() {
47
- // TODO: Implement resource endpoints for reading workspace/board/card data
48
- // This would allow LLMs to access current state without performing actions
50
+ const resourceHandlers = [
51
+ new WorkspaceResourceHandler(),
52
+ new BoardResourceHandler(),
53
+ new CardResourceHandler(),
54
+ ];
55
+ resourceHandlers.forEach((handler) => {
56
+ handler.registerResources(this.mcpServer, this.businessMapClient);
57
+ });
58
+ }
59
+ setupPrompts() {
60
+ const promptHandlers = [
61
+ new BoardPromptHandler(),
62
+ new CardPromptHandler(),
63
+ new WorkspacePromptHandler(),
64
+ ];
65
+ promptHandlers.forEach((handler) => {
66
+ handler.registerPrompts(this.mcpServer, this.businessMapClient);
67
+ });
49
68
  }
50
69
  get server() {
51
70
  return this.mcpServer;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,OAAO,oBAAoB;IACvB,SAAS,CAAY;IACrB,iBAAiB,CAAoB;IAE7C;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;QACvJ,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC;QAE9D,2BAA2B;QAC3B,MAAM,YAAY,GAAG;YACnB,IAAI,oBAAoB,EAAE;YAC1B,IAAI,gBAAgB,EAAE;YACtB,IAAI,eAAe,EAAE;YACrB,IAAI,sBAAsB,EAAE;YAC5B,IAAI,eAAe,EAAE;YACrB,IAAI,kBAAkB,EAAE;YACxB,IAAI,mBAAmB,EAAE;SAC1B,CAAC;QAEF,mCAAmC;QACnC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACpB,2EAA2E;QAC3E,2EAA2E;IAC7E,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ /**
4
+ * Base interface for prompt handlers
5
+ */
6
+ export interface BasePromptHandler {
7
+ /**
8
+ * Register all prompts provided by this handler
9
+ * @param server The MCP server instance
10
+ * @param client The BusinessMap client instance
11
+ */
12
+ registerPrompts(server: McpServer, client: BusinessMapClient): void;
13
+ }
14
+ //# sourceMappingURL=base-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-prompt.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/base-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-prompt.js","sourceRoot":"","sources":["../../../src/server/prompts/base-prompt.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ import { BasePromptHandler } from './base-prompt.js';
4
+ export declare class BoardPromptHandler implements BasePromptHandler {
5
+ registerPrompts(server: McpServer, _client: BusinessMapClient): void;
6
+ private registerAnalyzeBoardPerformance;
7
+ private registerGenerateBoardReport;
8
+ }
9
+ //# sourceMappingURL=board-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/board-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAKpE,OAAO,CAAC,+BAA+B;IAmDvC,OAAO,CAAC,2BAA2B;CAqDpC"}
@@ -0,0 +1,101 @@
1
+ import { z } from 'zod/v3';
2
+ export class BoardPromptHandler {
3
+ registerPrompts(server, _client) {
4
+ this.registerAnalyzeBoardPerformance(server);
5
+ this.registerGenerateBoardReport(server);
6
+ }
7
+ registerAnalyzeBoardPerformance(server) {
8
+ server.registerPrompt('analyze-board-performance', {
9
+ title: 'Analyze Board Performance',
10
+ description: 'Analyze a board\'s performance: flow efficiency, bottlenecks, cycle time and workload distribution across columns and lanes.',
11
+ argsSchema: {
12
+ board_id: z.string().describe('The board ID to analyze'),
13
+ },
14
+ }, ({ board_id }) => ({
15
+ messages: [
16
+ {
17
+ role: 'user',
18
+ content: {
19
+ type: 'text',
20
+ text: `Please analyze the performance of board ID ${board_id} in BusinessMap.
21
+
22
+ Follow these steps:
23
+ 1. Use \`get_current_board_structure\` to retrieve the full board structure (workflows, columns, lanes).
24
+ 2. Use \`list_cards\` to retrieve all active cards on the board.
25
+ 3. Use \`get_workflow_cycle_time_columns\` for each workflow to understand which columns count for cycle time.
26
+
27
+ Based on the data collected, provide a structured analysis including:
28
+
29
+ **Flow Analysis**
30
+ - Number of cards per column and lane
31
+ - Columns with the highest accumulation (bottlenecks)
32
+ - WIP distribution
33
+
34
+ **Cycle Time**
35
+ - Average cycle time estimation per column
36
+ - Columns that are cycle time columns vs. buffer columns
37
+
38
+ **Workload Distribution**
39
+ - Cards per assignee (if available)
40
+ - Lanes with the most blocked/overdue items
41
+
42
+ **Recommendations**
43
+ - Top 3 actionable improvements to increase flow efficiency
44
+ - Any WIP limit violations or risks identified
45
+
46
+ Format the response as a clear executive report with sections and bullet points.`,
47
+ },
48
+ },
49
+ ],
50
+ }));
51
+ }
52
+ registerGenerateBoardReport(server) {
53
+ server.registerPrompt('generate-board-report', {
54
+ title: 'Generate Board Report',
55
+ description: 'Generate a comprehensive status report for a board, including cards summary, progress, and highlights.',
56
+ argsSchema: {
57
+ board_id: z.string().describe('The board ID to report on'),
58
+ },
59
+ }, ({ board_id }) => ({
60
+ messages: [
61
+ {
62
+ role: 'user',
63
+ content: {
64
+ type: 'text',
65
+ text: `Generate a comprehensive status report for board ID ${board_id}.
66
+
67
+ Steps to gather data:
68
+ 1. Use \`get_current_board_structure\` to get the board structure.
69
+ 2. Use \`list_cards\` to get all cards (use filters as needed for active cards).
70
+ 3. For a sample of cards (up to 10), use \`get_card\` to get detailed information.
71
+
72
+ Report structure:
73
+ # Board Status Report — [Board Name]
74
+ **Date:** [Today's date]
75
+
76
+ ## Executive Summary
77
+ - Total cards in progress
78
+ - Total cards completed (if available)
79
+ - Key highlights and risks
80
+
81
+ ## Column Breakdown
82
+ For each column: card count, key items, blockers
83
+
84
+ ## Recently Updated Cards
85
+ List the 5 most recently updated cards with status
86
+
87
+ ## Risks & Blockers
88
+ - Cards that appear stuck or overdue
89
+ - Any notable concerns
90
+
91
+ ## Next Steps
92
+ - Suggested actions based on current board state
93
+
94
+ Keep the report concise, factual, and actionable.`,
95
+ },
96
+ },
97
+ ],
98
+ }));
99
+ }
100
+ }
101
+ //# sourceMappingURL=board-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/board-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,kBAAkB;IAC7B,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEO,+BAA+B,CAAC,MAAiB;QACvD,MAAM,CAAC,cAAc,CACnB,2BAA2B,EAC3B;YACE,KAAK,EAAE,2BAA2B;YAClC,WAAW,EACT,8HAA8H;YAChI,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;aACzD;SACF,EACD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8CAA8C,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;iFA0BO;qBACpE;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,MAAiB;QACnD,MAAM,CAAC,cAAc,CACnB,uBAAuB,EACvB;YACE,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,wGAAwG;YAC1G,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;aAC3D;SACF,EACD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uDAAuD,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA6BjC;qBACrC;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ import { BasePromptHandler } from './base-prompt.js';
4
+ export declare class CardPromptHandler implements BasePromptHandler {
5
+ registerPrompts(server: McpServer, _client: BusinessMapClient): void;
6
+ private registerCreateCardFromDescription;
7
+ }
8
+ //# sourceMappingURL=card-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/card-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIpE,OAAO,CAAC,iCAAiC;CA6C1C"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod/v3';
2
+ export class CardPromptHandler {
3
+ registerPrompts(server, _client) {
4
+ this.registerCreateCardFromDescription(server);
5
+ }
6
+ registerCreateCardFromDescription(server) {
7
+ server.registerPrompt('create-card-from-description', {
8
+ title: 'Create Card from Description',
9
+ description: 'Guide the creation of a well-structured card from a natural language description.',
10
+ argsSchema: {
11
+ description: z.string().describe('Natural language description of what the card should be'),
12
+ board_id: z.string().describe('The board ID where the card should be created'),
13
+ },
14
+ }, ({ description, board_id }) => ({
15
+ messages: [
16
+ {
17
+ role: 'user',
18
+ content: {
19
+ type: 'text',
20
+ text: `Help me create a well-structured card in BusinessMap based on the following description:
21
+
22
+ "${description}"
23
+
24
+ Target board ID: ${board_id}
25
+
26
+ Steps to follow:
27
+ 1. Use \`get_current_board_structure\` to understand the available columns, lanes, and workflows on board ${board_id}.
28
+ 2. Use \`get_card_types\` to list available card types.
29
+ 3. Based on the description and board structure, determine the best:
30
+ - Card title (concise, action-oriented)
31
+ - Card description (detailed, with acceptance criteria if applicable)
32
+ - Card type (story, task, bug, etc.)
33
+ - Target column (most appropriate initial stage)
34
+ - Lane (if applicable)
35
+ - Size/priority estimate (if inferable)
36
+
37
+ 4. Use \`create_card\` to create the card with the determined values.
38
+ 5. Confirm the card was created and provide its ID and a link summary.
39
+
40
+ Make the card title clear and actionable. Include acceptance criteria in the description if the request is a feature or user story.`,
41
+ },
42
+ },
43
+ ],
44
+ }));
45
+ }
46
+ }
47
+ //# sourceMappingURL=card-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/card-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,iBAAiB;IAC5B,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEO,iCAAiC,CAAC,MAAiB;QACzD,MAAM,CAAC,cAAc,CACnB,8BAA8B,EAC9B;YACE,KAAK,EAAE,8BAA8B;YACrC,WAAW,EACT,mFAAmF;YACrF,UAAU,EAAE;gBACV,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;gBAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;aAC/E;SACF,EACD,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;GAEjB,WAAW;;mBAEK,QAAQ;;;4GAGiF,QAAQ;;;;;;;;;;;;;oIAagB;qBACvH;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { BasePromptHandler } from './base-prompt.js';
2
+ export { BoardPromptHandler } from './board-prompts.js';
3
+ export { CardPromptHandler } from './card-prompts.js';
4
+ export { WorkspacePromptHandler } from './workspace-prompts.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { BoardPromptHandler } from './board-prompts.js';
2
+ export { CardPromptHandler } from './card-prompts.js';
3
+ export { WorkspacePromptHandler } from './workspace-prompts.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ import { BasePromptHandler } from './base-prompt.js';
4
+ export declare class WorkspacePromptHandler implements BasePromptHandler {
5
+ registerPrompts(server: McpServer, _client: BusinessMapClient): void;
6
+ private registerWorkspaceStatusOverview;
7
+ }
8
+ //# sourceMappingURL=workspace-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/workspace-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIpE,OAAO,CAAC,+BAA+B;CAyDxC"}
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod/v3';
2
+ export class WorkspacePromptHandler {
3
+ registerPrompts(server, _client) {
4
+ this.registerWorkspaceStatusOverview(server);
5
+ }
6
+ registerWorkspaceStatusOverview(server) {
7
+ server.registerPrompt('workspace-status-overview', {
8
+ title: 'Workspace Status Overview',
9
+ description: 'Generate a high-level status overview of a workspace, including all boards and their key metrics.',
10
+ argsSchema: {
11
+ workspace_id: z.string().describe('The workspace ID to generate an overview for'),
12
+ },
13
+ }, ({ workspace_id }) => ({
14
+ messages: [
15
+ {
16
+ role: 'user',
17
+ content: {
18
+ type: 'text',
19
+ text: `Generate a high-level status overview for workspace ID ${workspace_id}.
20
+
21
+ Steps:
22
+ 1. Use \`get_workspace\` to get workspace details.
23
+ 2. Use \`list_boards\` with workspace_id filter to list all boards in this workspace.
24
+ 3. For each board (up to 5 boards), use \`list_cards\` to get a count of active cards.
25
+ 4. For up to 3 boards, use \`get_current_board_structure\` for column distribution.
26
+
27
+ Deliver a structured overview:
28
+
29
+ # Workspace Overview — [Workspace Name]
30
+ **Date:** [Today's date]
31
+
32
+ ## Workspace Summary
33
+ - Total boards
34
+ - Total active cards (estimate)
35
+ - Overall health status (Green/Yellow/Red based on workload)
36
+
37
+ ## Board Summaries
38
+ For each board:
39
+ - Board name and ID
40
+ - Active card count
41
+ - Columns with most cards (top 2-3)
42
+ - Any notable concerns (high WIP, empty boards, etc.)
43
+
44
+ ## Highlights
45
+ - Most active board
46
+ - Any boards with potential bottlenecks
47
+ - Boards with no activity
48
+
49
+ ## Recommendations
50
+ - Top 2-3 areas to focus attention on
51
+
52
+ Keep it concise — this is a management-level overview.`,
53
+ },
54
+ },
55
+ ],
56
+ }));
57
+ }
58
+ }
59
+ //# sourceMappingURL=workspace-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/workspace-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,sBAAsB;IACjC,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,+BAA+B,CAAC,MAAiB;QACvD,MAAM,CAAC,cAAc,CACnB,2BAA2B,EAC3B;YACE,KAAK,EAAE,2BAA2B;YAClC,WAAW,EACT,mGAAmG;YACrG,UAAU,EAAE;gBACV,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;aAClF;SACF,EACD,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0DAA0D,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAiCnC;qBAC1C;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ /**
4
+ * Base interface for resource handlers
5
+ */
6
+ export interface BaseResourceHandler {
7
+ /**
8
+ * Register all resources provided by this handler
9
+ * @param server The MCP server instance
10
+ * @param client The BusinessMap client instance
11
+ */
12
+ registerResources(server: McpServer, client: BusinessMapClient): void;
13
+ }
14
+ /**
15
+ * Standard error handler for resource responses
16
+ */
17
+ export declare function createErrorResourceResponse(error: unknown): void;
18
+ //# sourceMappingURL=base-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-resource.d.ts","sourceRoot":"","sources":["../../../src/server/resources/base-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,QAKzD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Standard error handler for resource responses
3
+ */
4
+ export function createErrorResourceResponse(error) {
5
+ // Resources typically return content, but if there's an error reading,
6
+ // we might want to return an error message in the content or throw.
7
+ // For MCP resources, throwing an error is often the right way to signal failure to read.
8
+ throw error instanceof Error ? error : new Error(String(error));
9
+ }
10
+ //# sourceMappingURL=base-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-resource.js","sourceRoot":"","sources":["../../../src/server/resources/base-resource.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACtD,uEAAuE;IACvE,oEAAoE;IACpE,yFAAyF;IACzF,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { BusinessMapClient } from '../../client/businessmap-client.js';
3
+ import { BaseResourceHandler } from './base-resource.js';
4
+ export declare class BoardResourceHandler implements BaseResourceHandler {
5
+ registerResources(server: McpServer, client: BusinessMapClient): void;
6
+ }
7
+ //# sourceMappingURL=board-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/board-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,oBAAqB,YAAW,mBAAmB;IAC5D,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAsCxE"}