@brxce/mcp-server 1.1.4 β†’ 1.1.6

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 (43) hide show
  1. package/dist/config/bot-tool-scope.d.ts +15 -0
  2. package/dist/config/bot-tool-scope.d.ts.map +1 -0
  3. package/dist/config/bot-tool-scope.js +74 -0
  4. package/dist/config/bot-tool-scope.js.map +1 -0
  5. package/dist/config/environment.d.ts +2 -0
  6. package/dist/config/environment.d.ts.map +1 -1
  7. package/dist/config/environment.js +3 -1
  8. package/dist/config/environment.js.map +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +88 -63
  11. package/dist/index.js.map +1 -1
  12. package/dist/tools/bot-tool.d.ts +8 -0
  13. package/dist/tools/bot-tool.d.ts.map +1 -0
  14. package/dist/tools/bot-tool.js +191 -0
  15. package/dist/tools/bot-tool.js.map +1 -0
  16. package/dist/tools/worknode-detail-tool.d.ts +8 -0
  17. package/dist/tools/worknode-detail-tool.d.ts.map +1 -0
  18. package/dist/tools/worknode-detail-tool.js +227 -0
  19. package/dist/tools/worknode-detail-tool.js.map +1 -0
  20. package/dist/tools/worknode-subtree-tool.d.ts.map +1 -1
  21. package/dist/tools/worknode-subtree-tool.js +34 -12
  22. package/dist/tools/worknode-subtree-tool.js.map +1 -1
  23. package/dist/utils/bot-scoped-server.d.ts +13 -0
  24. package/dist/utils/bot-scoped-server.d.ts.map +1 -0
  25. package/dist/utils/bot-scoped-server.js +30 -0
  26. package/dist/utils/bot-scoped-server.js.map +1 -0
  27. package/dist/utils/index.d.ts +1 -0
  28. package/dist/utils/index.d.ts.map +1 -1
  29. package/dist/utils/index.js +1 -0
  30. package/dist/utils/index.js.map +1 -1
  31. package/dist/utils/param-parser.d.ts +47 -0
  32. package/dist/utils/param-parser.d.ts.map +1 -0
  33. package/dist/utils/param-parser.js +124 -0
  34. package/dist/utils/param-parser.js.map +1 -0
  35. package/package.json +12 -11
  36. package/dist/prompts/worknode-prompts.d.ts +0 -7
  37. package/dist/prompts/worknode-prompts.d.ts.map +0 -1
  38. package/dist/prompts/worknode-prompts.js +0 -398
  39. package/dist/prompts/worknode-prompts.js.map +0 -1
  40. package/dist/prompts/workspace-context-prompt.d.ts +0 -4
  41. package/dist/prompts/workspace-context-prompt.d.ts.map +0 -1
  42. package/dist/prompts/workspace-context-prompt.js +0 -102
  43. package/dist/prompts/workspace-context-prompt.js.map +0 -1
@@ -0,0 +1,227 @@
1
+ import { z } from 'zod';
2
+ import { getErrorMessage, isNotFoundError } from '../utils/error-utils.js';
3
+ import { workspaceContext } from '../services/workspace-context.js';
4
+ // Emoji mappings
5
+ const NODE_TYPE_EMOJI = {
6
+ goal: '🎯',
7
+ project: 'πŸ“',
8
+ subproject: 'πŸ“‚',
9
+ task: 'βœ…',
10
+ subtask: 'β˜‘οΈ',
11
+ note: 'πŸ“',
12
+ };
13
+ const STATUS_EMOJI = {
14
+ backlog: 'πŸ“₯',
15
+ not_started: 'β­•',
16
+ in_progress: 'πŸ”„',
17
+ completed: 'βœ…',
18
+ pause: '⏸️',
19
+ archived: 'πŸ“¦',
20
+ };
21
+ const PRIORITY_EMOJI = {
22
+ critical: 'πŸ”₯',
23
+ urgent: '⚑',
24
+ high: 'πŸ”΄',
25
+ medium: '🟑',
26
+ low: '🟒',
27
+ };
28
+ /**
29
+ * Register WorkNode Detail tool
30
+ * Provides detailed view of a worknode including description and direct children summary
31
+ */
32
+ export function registerWorknodeDetailTool(server, apiClient) {
33
+ server.registerTool('brxce_worknode_detail', {
34
+ description: `Get detailed WorkNode information including description and direct children summary.
35
+
36
+ Use this when you need:
37
+ - Full description/context of a worknode
38
+ - Summary of immediate child tasks
39
+ - Quick overview before starting work
40
+
41
+ Returns: Full node details + children summary + status breakdown. For full subtree, use brxce_worknode_subtree.`,
42
+ inputSchema: {
43
+ nodeId: z.string().describe('The WorkNode ID (UUID or displayId like #123 or 123)'),
44
+ workspaceId: z.string().uuid().optional().describe('Workspace ID (required when using displayId format)'),
45
+ },
46
+ }, async (args) => {
47
+ const { nodeId, workspaceId: providedWorkspaceId } = args;
48
+ if (!nodeId) {
49
+ throw new Error('nodeId is required');
50
+ }
51
+ // Auto-resolve workspaceId from context if using displayId
52
+ const resolvedWorkspaceId = workspaceContext.resolveWorkspaceId(providedWorkspaceId, nodeId);
53
+ try {
54
+ // 1. Fetch single node with full description via read API
55
+ const readResponse = await apiClient.post('/mcp/worknodes/read', {
56
+ query: nodeId,
57
+ workspaceId: resolvedWorkspaceId,
58
+ limit: 1,
59
+ });
60
+ if (!readResponse.success || !readResponse.data?.nodes?.length) {
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: `Failed to fetch worknode: ${readResponse.message || 'Node not found'}`,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ const node = readResponse.data.nodes[0];
71
+ // 2. Fetch children via subtree API
72
+ const queryParams = new URLSearchParams();
73
+ if (resolvedWorkspaceId) {
74
+ queryParams.append('workspaceId', resolvedWorkspaceId);
75
+ }
76
+ queryParams.append('maxDepth', '1');
77
+ queryParams.append('compact', 'true');
78
+ queryParams.append('limit', '100');
79
+ const queryString = queryParams.toString();
80
+ const encodedNodeId = encodeURIComponent(node.id); // Use resolved UUID
81
+ const subtreeUrl = `/mcp/worknodes/${encodedNodeId}/subtree${queryString ? `?${queryString}` : ''}`;
82
+ const subtreeResponse = await apiClient.get(subtreeUrl);
83
+ let children = [];
84
+ let stats = { byStatus: {}, byPriority: {} };
85
+ if (subtreeResponse.success && subtreeResponse.data) {
86
+ children = subtreeResponse.data.children || [];
87
+ stats = subtreeResponse.data.stats || { byStatus: {}, byPriority: {} };
88
+ }
89
+ // Build detailed Markdown response
90
+ const nodeDisplayId = node.displayId ?? node.id;
91
+ const typeEmoji = NODE_TYPE_EMOJI[node.nodeType] || 'πŸ“„';
92
+ const statusEmoji = STATUS_EMOJI[node.status] || '❓';
93
+ const priorityEmoji = PRIORITY_EMOJI[node.priority] || '';
94
+ let resultText = `## ${typeEmoji} ${node.title} (#${nodeDisplayId})\n\n`;
95
+ // Status & Priority
96
+ resultText += `**Status:** ${statusEmoji} ${node.status}`;
97
+ if (priorityEmoji)
98
+ resultText += ` | **Priority:** ${priorityEmoji} ${node.priority}`;
99
+ if (node.progress > 0)
100
+ resultText += ` | **Progress:** ${node.progress}%`;
101
+ resultText += '\n\n';
102
+ // Dates
103
+ const dates = [];
104
+ if (node.dueDate) {
105
+ dates.push(`πŸ“… Due: ${new Date(node.dueDate).toLocaleDateString()}`);
106
+ }
107
+ if (node.startDate) {
108
+ dates.push(`πŸ—“οΈ Start: ${new Date(node.startDate).toLocaleDateString()}`);
109
+ }
110
+ if (dates.length > 0) {
111
+ resultText += dates.join(' | ') + '\n\n';
112
+ }
113
+ // Assignees
114
+ if (node.assignee && node.assignee.length > 0) {
115
+ const assigneeNames = node.assignee.map((a) => typeof a === 'string' ? a : (a.name || a.id));
116
+ resultText += `**Assignees:** πŸ‘€ ${assigneeNames.join(', ')}\n\n`;
117
+ }
118
+ // Tags
119
+ if (node.tags && node.tags.length > 0) {
120
+ const tagNames = node.tags.map((t) => typeof t === 'string' ? t : t.name);
121
+ resultText += `**Tags:** 🏷️ ${tagNames.join(', ')}\n\n`;
122
+ }
123
+ // Description
124
+ resultText += `### πŸ“ Description\n\n`;
125
+ if (node.description && node.description.trim()) {
126
+ resultText += node.description + '\n\n';
127
+ }
128
+ else {
129
+ resultText += '_No description_\n\n';
130
+ }
131
+ // Children Summary
132
+ resultText += `### πŸ“Š ν•˜μœ„ 업무 μš”μ•½\n\n`;
133
+ if (children.length === 0) {
134
+ resultText += '_ν•˜μœ„ 업무 μ—†μŒ_\n\n';
135
+ }
136
+ else {
137
+ // Status breakdown
138
+ const statusBreakdown = stats?.byStatus || {};
139
+ const inProgress = statusBreakdown['in_progress'] || 0;
140
+ const notStarted = statusBreakdown['not_started'] || 0;
141
+ const backlog = statusBreakdown['backlog'] || 0;
142
+ const completed = statusBreakdown['completed'] || 0;
143
+ const total = children.length;
144
+ resultText += `| μƒνƒœ | 개수 |\n`;
145
+ resultText += `|------|------|\n`;
146
+ if (inProgress > 0)
147
+ resultText += `| πŸ”„ 진행쀑 | ${inProgress} |\n`;
148
+ if (notStarted > 0)
149
+ resultText += `| β­• λŒ€κΈ° | ${notStarted} |\n`;
150
+ if (backlog > 0)
151
+ resultText += `| πŸ“₯ 백둜그 | ${backlog} |\n`;
152
+ if (completed > 0)
153
+ resultText += `| βœ… μ™„λ£Œ | ${completed} |\n`;
154
+ resultText += `| **합계** | **${total}** |\n\n`;
155
+ // Progress bar
156
+ if (total > 0) {
157
+ const completedRatio = completed / total;
158
+ const progressBar = 'β–ˆ'.repeat(Math.floor(completedRatio * 10)) +
159
+ 'β–‘'.repeat(10 - Math.floor(completedRatio * 10));
160
+ resultText += `**μ§„ν–‰λ₯ :** ${progressBar} ${Math.round(completedRatio * 100)}% (${completed}/${total})\n\n`;
161
+ }
162
+ // Direct children list (non-completed only)
163
+ const activeChildren = children.filter((c) => c.status !== 'completed' && c.status !== 'archived');
164
+ if (activeChildren.length > 0) {
165
+ resultText += `### πŸ“‹ ν™œμ„± ν•˜μœ„ 업무 (${activeChildren.length}개)\n\n`;
166
+ activeChildren.slice(0, 10).forEach((child) => {
167
+ const childDisplayId = child.displayId ?? child.id;
168
+ const childTypeEmoji = NODE_TYPE_EMOJI[child.nodeType] || 'πŸ“„';
169
+ const childStatusEmoji = STATUS_EMOJI[child.status] || '';
170
+ const childPriorityEmoji = PRIORITY_EMOJI[child.priority] || '';
171
+ resultText += `- ${childTypeEmoji} **${child.title}** (#${childDisplayId}) ${childStatusEmoji} ${childPriorityEmoji}`;
172
+ if (child.dueDate) {
173
+ resultText += ` πŸ“… ${new Date(child.dueDate).toLocaleDateString()}`;
174
+ }
175
+ resultText += '\n';
176
+ });
177
+ if (activeChildren.length > 10) {
178
+ resultText += `\n_... and ${activeChildren.length - 10} more_\n`;
179
+ }
180
+ }
181
+ }
182
+ resultText += `\n---\n`;
183
+ if (resolvedWorkspaceId) {
184
+ resultText += `**Workspace ID:** \`${resolvedWorkspaceId}\`\n`;
185
+ }
186
+ return {
187
+ content: [
188
+ {
189
+ type: 'text',
190
+ text: resultText,
191
+ },
192
+ ],
193
+ };
194
+ }
195
+ catch (error) {
196
+ if (isNotFoundError(error)) {
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: JSON.stringify({
202
+ error: 'WorkNode not found',
203
+ message: `WorkNode with ID ${nodeId} does not exist or you don't have access to it.`,
204
+ nodeId,
205
+ }),
206
+ },
207
+ ],
208
+ isError: true,
209
+ };
210
+ }
211
+ return {
212
+ content: [
213
+ {
214
+ type: 'text',
215
+ text: JSON.stringify({
216
+ error: 'Failed to fetch worknode detail',
217
+ message: getErrorMessage(error),
218
+ nodeId,
219
+ }),
220
+ },
221
+ ],
222
+ isError: true,
223
+ };
224
+ }
225
+ });
226
+ }
227
+ //# sourceMappingURL=worknode-detail-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-detail-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-detail-tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"worknode-subtree-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-subtree-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAqG3D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAyLlF"}
1
+ {"version":3,"file":"worknode-subtree-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-subtree-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA+H3D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAyLlF"}
@@ -46,7 +46,7 @@ function formatNodeLine(node, depth) {
46
46
  }
47
47
  if (node.dueDate) {
48
48
  const dueDate = new Date(node.dueDate);
49
- metadata.push(`due: ${dueDate.toISOString().split('T')[0]}`);
49
+ metadata.push(`πŸ“… ${dueDate.toISOString().split('T')[0]}`);
50
50
  }
51
51
  if (metadata.length > 0) {
52
52
  line += ` (${metadata.join(', ')})`;
@@ -54,15 +54,37 @@ function formatNodeLine(node, depth) {
54
54
  return line;
55
55
  }
56
56
  /**
57
- * Build tree structure from flat children array
57
+ * Build tree structure from flat children array using depth-based approach
58
58
  */
59
- function buildChildrenTree(children, parentId, depth) {
59
+ function buildTreeByDepth(children, rootId) {
60
+ if (children.length === 0)
61
+ return '';
60
62
  let result = '';
61
- const directChildren = children.filter(c => c.parentNodeId === parentId);
62
- for (const child of directChildren) {
63
- result += formatNodeLine(child, depth) + '\\n';
64
- // Recursively add grandchildren
65
- result += buildChildrenTree(children, child.id, depth + 1);
63
+ // Sort children by depth first, then by their order
64
+ const sortedChildren = [...children].sort((a, b) => {
65
+ const depthDiff = (a.depth ?? 0) - (b.depth ?? 0);
66
+ if (depthDiff !== 0)
67
+ return depthDiff;
68
+ return 0;
69
+ });
70
+ // Build tree recursively using parentNodeId
71
+ function buildSubtree(parentId, depth) {
72
+ let subtree = '';
73
+ const directChildren = sortedChildren.filter(c => c.parentNodeId === parentId);
74
+ for (const child of directChildren) {
75
+ subtree += formatNodeLine(child, depth) + '\n';
76
+ // Recursively add grandchildren
77
+ subtree += buildSubtree(child.id, depth + 1);
78
+ }
79
+ return subtree;
80
+ }
81
+ result = buildSubtree(rootId, 1);
82
+ // If no children found via parentNodeId, fallback to depth-based display
83
+ if (result === '' && sortedChildren.length > 0) {
84
+ for (const child of sortedChildren) {
85
+ const nodeDepth = child.depth ?? 1;
86
+ result += formatNodeLine(child, nodeDepth) + '\n';
87
+ }
66
88
  }
67
89
  return result;
68
90
  }
@@ -163,12 +185,12 @@ Returns: Markdown formatted tree with statistics. Dates in UTC.`,
163
185
  resultText += `\\n`;
164
186
  }
165
187
  // Tree structure
166
- resultText += `**Subtree Structure:**\\n\\n`;
188
+ resultText += `**Subtree Structure:**\n\n`;
167
189
  // Root node (depth 0)
168
- resultText += formatNodeLine(node, 0) + '\\n';
169
- // Children (recursively)
190
+ resultText += formatNodeLine(node, 0) + '\n';
191
+ // Children (recursively using depth-based tree building)
170
192
  if (children.length > 0) {
171
- resultText += buildChildrenTree(children, node.id, 1);
193
+ resultText += buildTreeByDepth(children, node.id);
172
194
  }
173
195
  resultText += `\\n---\\n`;
174
196
  resultText += `**Note:** This subtree shows the node and all its descendants.\\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"worknode-subtree-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-subtree-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAwBpE,2CAA2C;AAC3C,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,GAAG;IAChB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,IAAS,EAAE,KAAa;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACzD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACrD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE1D,yEAAyE;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;IAChD,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,SAAS,MAAM,IAAI,CAAC,KAAK,QAAQ,aAAa,KAAK,WAAW,EAAE,CAAC;IACxF,IAAI,aAAa;QAAE,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;IAE/C,eAAe;IACf,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAe,EAAE,QAAgB,EAAE,KAAa;IACzE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QAC/C,gCAAgC;QAChC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,SAAoB;IACjF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EAAE;;;gEAG6C;QAC1D,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YACzG,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YACnG,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACjG,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,+EAA+E,CAAC;YAC5F,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YACpG,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACpH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;SACrG;KACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAK3D,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,2DAA2D;QAC3D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAE7F,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,MAAM,cAAc,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAExD,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;YAE1C,gEAAgE;YAChE,IAAI,mBAAmB,EAAE,CAAC;gBACxB,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;YACzD,CAAC;YAED,sEAAsE;YACtE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACxD,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAEpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC3C,wDAAwD;YACxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,kBAAkB,aAAa,WAAW,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7F,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAkB,GAAG,CAAC,CAAC;YAE3D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,qCAAqC,QAAQ,CAAC,OAAO,IAAI,eAAe,EAAE;yBACjF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;YAEhD,oCAAoC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,GAAG,yBAAyB,aAAa,SAAS,CAAC;YAEjE,qBAAqB;YACrB,UAAU,IAAI,oBAAoB,CAAC;YACnC,UAAU,IAAI,wBAAwB,KAAK,CAAC,gBAAgB,KAAK,CAAC;YAClE,UAAU,IAAI,gBAAgB,KAAK,CAAC,QAAQ,KAAK,CAAC;YAClD,UAAU,IAAI,KAAK,CAAC;YAEpB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,UAAU,IAAI,mBAAmB,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACzC,UAAU,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,CAAC;gBACpD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,UAAU,IAAI,iBAAiB,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC1C,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;gBAClD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,UAAU,IAAI,qBAAqB,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7C,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,CAAC;gBACtD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,iBAAiB;YACjB,UAAU,IAAI,8BAA8B,CAAC;YAE7C,sBAAsB;YACtB,UAAU,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;YAE9C,yBAAyB;YACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,UAAU,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,UAAU,IAAI,WAAW,CAAC;YAC1B,UAAU,IAAI,mEAAmE,CAAC;YAClF,UAAU,IAAI,2FAA2F,CAAC;YAE1G,2CAA2C;YAC3C,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,IAAI,+FAA+F,mBAAmB,QAAQ,CAAC;YAC3I,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,UAAU,IAAI,+FAA+F,IAAI,CAAC,WAAW,QAAQ,CAAC;YACxI,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,uBAAuB;YACvB,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,oBAAoB;gCAC3B,OAAO,EAAE,oBAAoB,MAAM,iDAAiD;gCACpF,MAAM;6BACP,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,kCAAkC;4BACzC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;4BAC/B,MAAM;yBACP,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"worknode-subtree-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-subtree-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAwBpE,2CAA2C;AAC3C,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,GAAG;IAChB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;CACV,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,IAAS,EAAE,KAAa;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACzD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACrD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE1D,yEAAyE;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;IAChD,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,SAAS,MAAM,IAAI,CAAC,KAAK,QAAQ,aAAa,KAAK,WAAW,EAAE,CAAC;IACxF,IAAI,aAAa;QAAE,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;IAE/C,eAAe;IACf,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAe,EAAE,MAAc;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,oDAAoD;IACpD,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,SAAS,YAAY,CAAC,QAAgB,EAAE,KAAa;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;QAE/E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YAC/C,gCAAgC;YAChC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjC,yEAAyE;IACzE,IAAI,MAAM,KAAK,EAAE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACnC,MAAM,IAAI,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,SAAoB;IACjF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EAAE;;;gEAG6C;QAC1D,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YACzG,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YACnG,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACjG,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,+EAA+E,CAAC;YAC5F,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YACpG,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACpH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;SACrG;KACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAK3D,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,2DAA2D;QAC3D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAE7F,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,MAAM,cAAc,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAExD,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;YAE1C,gEAAgE;YAChE,IAAI,mBAAmB,EAAE,CAAC;gBACxB,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;YACzD,CAAC;YAED,sEAAsE;YACtE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACxD,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAEpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC3C,wDAAwD;YACxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,kBAAkB,aAAa,WAAW,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7F,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAkB,GAAG,CAAC,CAAC;YAE3D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,qCAAqC,QAAQ,CAAC,OAAO,IAAI,eAAe,EAAE;yBACjF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;YAEhD,oCAAoC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,GAAG,yBAAyB,aAAa,SAAS,CAAC;YAEjE,qBAAqB;YACrB,UAAU,IAAI,oBAAoB,CAAC;YACnC,UAAU,IAAI,wBAAwB,KAAK,CAAC,gBAAgB,KAAK,CAAC;YAClE,UAAU,IAAI,gBAAgB,KAAK,CAAC,QAAQ,KAAK,CAAC;YAClD,UAAU,IAAI,KAAK,CAAC;YAEpB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,UAAU,IAAI,mBAAmB,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACzC,UAAU,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,CAAC;gBACpD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,UAAU,IAAI,iBAAiB,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC1C,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;gBAClD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,UAAU,IAAI,qBAAqB,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7C,UAAU,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,CAAC;gBACtD,CAAC,CAAC,CAAC;gBACH,UAAU,IAAI,KAAK,CAAC;YACtB,CAAC;YAED,iBAAiB;YACjB,UAAU,IAAI,4BAA4B,CAAC;YAE3C,sBAAsB;YACtB,UAAU,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YAE7C,yDAAyD;YACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,UAAU,IAAI,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,UAAU,IAAI,WAAW,CAAC;YAC1B,UAAU,IAAI,mEAAmE,CAAC;YAClF,UAAU,IAAI,2FAA2F,CAAC;YAE1G,2CAA2C;YAC3C,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,IAAI,+FAA+F,mBAAmB,QAAQ,CAAC;YAC3I,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,UAAU,IAAI,+FAA+F,IAAI,CAAC,WAAW,QAAQ,CAAC;YACxI,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,uBAAuB;YACvB,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,oBAAoB;gCAC3B,OAAO,EAAE,oBAAoB,MAAM,iDAAiD;gCACpF,MAAM;6BACP,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,kCAAkC;4BACzC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;4BAC/B,MAAM;yBACP,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Bot-scoped MCP Server wrapper.
3
+ *
4
+ * Creates a proxy around McpServer that filters out tools
5
+ * not allowed for bot sessions during registration.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ /**
9
+ * Wrap an McpServer to filter tool registrations for bot sessions.
10
+ * Non-allowed tools are silently skipped during registration.
11
+ */
12
+ export declare function createBotScopedServer(server: McpServer): McpServer;
13
+ //# sourceMappingURL=bot-scoped-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-scoped-server.d.ts","sourceRoot":"","sources":["../../src/utils/bot-scoped-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAiBlE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Bot-scoped MCP Server wrapper.
3
+ *
4
+ * Creates a proxy around McpServer that filters out tools
5
+ * not allowed for bot sessions during registration.
6
+ */
7
+ import { isBotAllowedTool } from '../config/bot-tool-scope.js';
8
+ /**
9
+ * Wrap an McpServer to filter tool registrations for bot sessions.
10
+ * Non-allowed tools are silently skipped during registration.
11
+ */
12
+ export function createBotScopedServer(server) {
13
+ return new Proxy(server, {
14
+ get(target, prop, receiver) {
15
+ if (prop === 'tool' || prop === 'registerTool') {
16
+ const originalMethod = Reflect.get(target, prop, receiver);
17
+ return function (nameOrConfig, ...args) {
18
+ const toolName = typeof nameOrConfig === 'string' ? nameOrConfig : nameOrConfig?.name;
19
+ if (toolName && !isBotAllowedTool(toolName)) {
20
+ // Skip registration for disallowed tools
21
+ return;
22
+ }
23
+ return originalMethod.call(target, nameOrConfig, ...args);
24
+ };
25
+ }
26
+ return Reflect.get(target, prop, receiver);
27
+ },
28
+ });
29
+ }
30
+ //# sourceMappingURL=bot-scoped-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-scoped-server.js","sourceRoot":"","sources":["../../src/utils/bot-scoped-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAa,CAAC;gBACvE,OAAO,UAAyB,YAAuC,EAAE,GAAG,IAAe;oBACzF,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC;oBACtF,IAAI,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC5C,yCAAyC;wBACzC,OAAO;oBACT,CAAC;oBACD,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC5D,CAAC,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './error-utils.js';
2
+ export * from './param-parser.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './error-utils.js';
2
+ export * from './param-parser.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * MCP νŒŒλΌλ―Έν„° μ „μ²˜λ¦¬ μœ ν‹Έλ¦¬ν‹°
3
+ * Claude Codeκ°€ λ³΅μž‘ν•œ νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ μ „μ†‘ν•˜λŠ” 경우 처리
4
+ */
5
+ export type ParamType = 'array' | 'boolean' | 'object' | 'string' | 'number';
6
+ export type ParamSchema<T extends Record<string, unknown>> = {
7
+ [K in keyof T]?: ParamType;
8
+ };
9
+ /**
10
+ * MCP νŒŒλΌλ―Έν„°λ₯Ό μ •κ·œν™”ν•©λ‹ˆλ‹€.
11
+ * Claude Codeκ°€ array, boolean, object 등을 λ¬Έμžμ—΄λ‘œ μ§λ ¬ν™”ν•˜μ—¬ μ „μ†‘ν•˜λŠ” 경우,
12
+ * 이λ₯Ό μ›λž˜ νƒ€μž…μœΌλ‘œ νŒŒμ‹±ν•©λ‹ˆλ‹€.
13
+ *
14
+ * @param args - MCP λ„κ΅¬μ—μ„œ 받은 원본 νŒŒλΌλ―Έν„°
15
+ * @param schema - 각 νŒŒλΌλ―Έν„°μ˜ μ˜ˆμƒ νƒ€μž…μ„ μ •μ˜ν•œ μŠ€ν‚€λ§ˆ
16
+ * @returns μ •κ·œν™”λœ νŒŒλΌλ―Έν„° 객체
17
+ *
18
+ * @example
19
+ * const args = {
20
+ * updates: '[{"nodeId": "123", "changes": {"status": "completed"}}]',
21
+ * preview: 'true',
22
+ * title: 'My Title'
23
+ * };
24
+ *
25
+ * const normalized = normalizeParams(args, {
26
+ * updates: 'array',
27
+ * preview: 'boolean',
28
+ * title: 'string'
29
+ * });
30
+ *
31
+ * // Result:
32
+ * // {
33
+ * // updates: [{ nodeId: '123', changes: { status: 'completed' } }],
34
+ * // preview: true,
35
+ * // title: 'My Title'
36
+ * // }
37
+ */
38
+ export declare function normalizeParams<T extends Record<string, unknown>>(args: Record<string, unknown>, schema: ParamSchema<T>): T;
39
+ /**
40
+ * 단일 값을 νŠΉμ • νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
41
+ *
42
+ * @param value - λ³€ν™˜ν•  κ°’
43
+ * @param expectedType - μ˜ˆμƒ νƒ€μž…
44
+ * @returns λ³€ν™˜λœ κ°’
45
+ */
46
+ export declare function normalizeValue<T>(value: unknown, expectedType: ParamType): T;
47
+ //# sourceMappingURL=param-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-parser.d.ts","sourceRoot":"","sources":["../../src/utils/param-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GACrB,CAAC,CAgDH;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,CAAC,CA0B5E"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * MCP νŒŒλΌλ―Έν„° μ „μ²˜λ¦¬ μœ ν‹Έλ¦¬ν‹°
3
+ * Claude Codeκ°€ λ³΅μž‘ν•œ νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ μ „μ†‘ν•˜λŠ” 경우 처리
4
+ */
5
+ /**
6
+ * MCP νŒŒλΌλ―Έν„°λ₯Ό μ •κ·œν™”ν•©λ‹ˆλ‹€.
7
+ * Claude Codeκ°€ array, boolean, object 등을 λ¬Έμžμ—΄λ‘œ μ§λ ¬ν™”ν•˜μ—¬ μ „μ†‘ν•˜λŠ” 경우,
8
+ * 이λ₯Ό μ›λž˜ νƒ€μž…μœΌλ‘œ νŒŒμ‹±ν•©λ‹ˆλ‹€.
9
+ *
10
+ * @param args - MCP λ„κ΅¬μ—μ„œ 받은 원본 νŒŒλΌλ―Έν„°
11
+ * @param schema - 각 νŒŒλΌλ―Έν„°μ˜ μ˜ˆμƒ νƒ€μž…μ„ μ •μ˜ν•œ μŠ€ν‚€λ§ˆ
12
+ * @returns μ •κ·œν™”λœ νŒŒλΌλ―Έν„° 객체
13
+ *
14
+ * @example
15
+ * const args = {
16
+ * updates: '[{"nodeId": "123", "changes": {"status": "completed"}}]',
17
+ * preview: 'true',
18
+ * title: 'My Title'
19
+ * };
20
+ *
21
+ * const normalized = normalizeParams(args, {
22
+ * updates: 'array',
23
+ * preview: 'boolean',
24
+ * title: 'string'
25
+ * });
26
+ *
27
+ * // Result:
28
+ * // {
29
+ * // updates: [{ nodeId: '123', changes: { status: 'completed' } }],
30
+ * // preview: true,
31
+ * // title: 'My Title'
32
+ * // }
33
+ */
34
+ export function normalizeParams(args, schema) {
35
+ const result = {};
36
+ for (const [key, expectedType] of Object.entries(schema)) {
37
+ const value = args[key];
38
+ if (value === undefined)
39
+ continue;
40
+ if (typeof value === 'string' && expectedType !== 'string') {
41
+ try {
42
+ const parsed = JSON.parse(value);
43
+ if (expectedType === 'boolean') {
44
+ result[key] = typeof parsed === 'boolean' ? parsed : Boolean(parsed);
45
+ }
46
+ else if (expectedType === 'number') {
47
+ result[key] = typeof parsed === 'number' ? parsed : Number(parsed);
48
+ }
49
+ else if (expectedType === 'array') {
50
+ result[key] = Array.isArray(parsed) ? parsed : [parsed];
51
+ }
52
+ else if (expectedType === 'object') {
53
+ result[key] = typeof parsed === 'object' && parsed !== null ? parsed : value;
54
+ }
55
+ else {
56
+ result[key] = parsed;
57
+ }
58
+ }
59
+ catch {
60
+ // JSON νŒŒμ‹± μ‹€νŒ¨ μ‹œ booleanκ³Ό numberλŠ” λ¬Έμžμ—΄μ—μ„œ 직접 λ³€ν™˜ μ‹œλ„
61
+ if (expectedType === 'boolean') {
62
+ result[key] = value === 'true';
63
+ }
64
+ else if (expectedType === 'number') {
65
+ const num = Number(value);
66
+ result[key] = isNaN(num) ? value : num;
67
+ }
68
+ else {
69
+ // arrayλ‚˜ object νƒ€μž…μΈλ° νŒŒμ‹± μ‹€νŒ¨ν•˜λ©΄ 원본 μœ μ§€
70
+ result[key] = value;
71
+ }
72
+ }
73
+ }
74
+ else {
75
+ result[key] = value;
76
+ }
77
+ }
78
+ // μŠ€ν‚€λ§ˆμ— μ •μ˜λ˜μ§€ μ•Šμ€ ν•„λ“œλ„ 볡사
79
+ for (const [key, value] of Object.entries(args)) {
80
+ if (!(key in result)) {
81
+ result[key] = value;
82
+ }
83
+ }
84
+ return result;
85
+ }
86
+ /**
87
+ * 단일 값을 νŠΉμ • νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
88
+ *
89
+ * @param value - λ³€ν™˜ν•  κ°’
90
+ * @param expectedType - μ˜ˆμƒ νƒ€μž…
91
+ * @returns λ³€ν™˜λœ κ°’
92
+ */
93
+ export function normalizeValue(value, expectedType) {
94
+ if (typeof value === 'string' && expectedType !== 'string') {
95
+ try {
96
+ const parsed = JSON.parse(value);
97
+ if (expectedType === 'boolean') {
98
+ return (typeof parsed === 'boolean' ? parsed : Boolean(parsed));
99
+ }
100
+ else if (expectedType === 'number') {
101
+ return (typeof parsed === 'number' ? parsed : Number(parsed));
102
+ }
103
+ else if (expectedType === 'array') {
104
+ return (Array.isArray(parsed) ? parsed : [parsed]);
105
+ }
106
+ else if (expectedType === 'object') {
107
+ return (typeof parsed === 'object' && parsed !== null ? parsed : value);
108
+ }
109
+ return parsed;
110
+ }
111
+ catch {
112
+ if (expectedType === 'boolean') {
113
+ return (value === 'true');
114
+ }
115
+ else if (expectedType === 'number') {
116
+ const num = Number(value);
117
+ return (isNaN(num) ? value : num);
118
+ }
119
+ return value;
120
+ }
121
+ }
122
+ return value;
123
+ }
124
+ //# sourceMappingURL=param-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-parser.js","sourceRoot":"","sources":["../../src/utils/param-parser.ts"],"names":[],"mappings":"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"}