@brxce/mcp-server 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +6 -7
- package/dist/config/environment.js.map +1 -1
- package/dist/constants/enums.d.ts +11 -0
- package/dist/constants/enums.d.ts.map +1 -0
- package/dist/constants/enums.js +39 -0
- package/dist/constants/enums.js.map +1 -0
- package/dist/http-server.d.ts +5 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +154 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/worknode-prompts.d.ts.map +1 -1
- package/dist/prompts/worknode-prompts.js +5 -4
- package/dist/prompts/worknode-prompts.js.map +1 -1
- package/dist/prompts/workspace-context-prompt.d.ts.map +1 -1
- package/dist/prompts/workspace-context-prompt.js +2 -1
- package/dist/prompts/workspace-context-prompt.js.map +1 -1
- package/dist/resources/user-resource.d.ts.map +1 -1
- package/dist/resources/user-resource.js +2 -1
- package/dist/resources/user-resource.js.map +1 -1
- package/dist/resources/workspace-members-resource.d.ts.map +1 -1
- package/dist/resources/workspace-members-resource.js +6 -3
- package/dist/resources/workspace-members-resource.js.map +1 -1
- package/dist/resources/workspace-resource.d.ts.map +1 -1
- package/dist/resources/workspace-resource.js +2 -1
- package/dist/resources/workspace-resource.js.map +1 -1
- package/dist/server.d.ts +24 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +212 -0
- package/dist/server.js.map +1 -0
- package/dist/services/api-client.d.ts +36 -2
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +153 -64
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/workspace-context.d.ts +56 -0
- package/dist/services/workspace-context.d.ts.map +1 -0
- package/dist/services/workspace-context.js +104 -0
- package/dist/services/workspace-context.js.map +1 -0
- package/dist/tools/comment-tool.d.ts +4 -0
- package/dist/tools/comment-tool.d.ts.map +1 -0
- package/dist/tools/comment-tool.js +154 -0
- package/dist/tools/comment-tool.js.map +1 -0
- package/dist/tools/criteria-tool.d.ts +4 -0
- package/dist/tools/criteria-tool.d.ts.map +1 -0
- package/dist/tools/criteria-tool.js +208 -0
- package/dist/tools/criteria-tool.js.map +1 -0
- package/dist/tools/invitation-tool.d.ts +19 -0
- package/dist/tools/invitation-tool.d.ts.map +1 -0
- package/dist/tools/invitation-tool.js +501 -0
- package/dist/tools/invitation-tool.js.map +1 -0
- package/dist/tools/meeting-agenda-notes-tool.d.ts +7 -0
- package/dist/tools/meeting-agenda-notes-tool.d.ts.map +1 -0
- package/dist/tools/meeting-agenda-notes-tool.js +326 -0
- package/dist/tools/meeting-agenda-notes-tool.js.map +1 -0
- package/dist/tools/meeting-agenda-tool.d.ts.map +1 -1
- package/dist/tools/meeting-agenda-tool.js +12 -11
- package/dist/tools/meeting-agenda-tool.js.map +1 -1
- package/dist/tools/meeting-create-tool.d.ts.map +1 -1
- package/dist/tools/meeting-create-tool.js +74 -139
- package/dist/tools/meeting-create-tool.js.map +1 -1
- package/dist/tools/meeting-decisions-tool.d.ts.map +1 -1
- package/dist/tools/meeting-decisions-tool.js +12 -11
- package/dist/tools/meeting-decisions-tool.js.map +1 -1
- package/dist/tools/meeting-delete-tool.d.ts +7 -0
- package/dist/tools/meeting-delete-tool.d.ts.map +1 -0
- package/dist/tools/meeting-delete-tool.js +58 -0
- package/dist/tools/meeting-delete-tool.js.map +1 -0
- package/dist/tools/meeting-list-tool.d.ts.map +1 -1
- package/dist/tools/meeting-list-tool.js +14 -100
- package/dist/tools/meeting-list-tool.js.map +1 -1
- package/dist/tools/meeting-notes-tool.d.ts.map +1 -1
- package/dist/tools/meeting-notes-tool.js +12 -11
- package/dist/tools/meeting-notes-tool.js.map +1 -1
- package/dist/tools/meeting-update-tool.d.ts.map +1 -1
- package/dist/tools/meeting-update-tool.js +8 -135
- package/dist/tools/meeting-update-tool.js.map +1 -1
- package/dist/tools/my-work-tool.d.ts +7 -0
- package/dist/tools/my-work-tool.d.ts.map +1 -0
- package/dist/tools/my-work-tool.js +283 -0
- package/dist/tools/my-work-tool.js.map +1 -0
- package/dist/tools/notification-tool.d.ts +23 -0
- package/dist/tools/notification-tool.d.ts.map +1 -0
- package/dist/tools/notification-tool.js +330 -0
- package/dist/tools/notification-tool.js.map +1 -0
- package/dist/tools/tag-category-tool.d.ts.map +1 -1
- package/dist/tools/tag-category-tool.js +15 -6
- package/dist/tools/tag-category-tool.js.map +1 -1
- package/dist/tools/tag-changes-tool.d.ts +4 -0
- package/dist/tools/tag-changes-tool.d.ts.map +1 -0
- package/dist/tools/tag-changes-tool.js +79 -0
- package/dist/tools/tag-changes-tool.js.map +1 -0
- package/dist/tools/tag-search-tool.d.ts.map +1 -1
- package/dist/tools/tag-search-tool.js +13 -6
- package/dist/tools/tag-search-tool.js.map +1 -1
- package/dist/tools/tag-tool.d.ts.map +1 -1
- package/dist/tools/tag-tool.js +26 -15
- package/dist/tools/tag-tool.js.map +1 -1
- package/dist/tools/user-search-tool.d.ts +8 -0
- package/dist/tools/user-search-tool.d.ts.map +1 -0
- package/dist/tools/user-search-tool.js +164 -0
- package/dist/tools/user-search-tool.js.map +1 -0
- package/dist/tools/worknode-archive-tool.d.ts.map +1 -1
- package/dist/tools/worknode-archive-tool.js +15 -52
- package/dist/tools/worknode-archive-tool.js.map +1 -1
- package/dist/tools/worknode-batch-tool.d.ts +4 -0
- package/dist/tools/worknode-batch-tool.d.ts.map +1 -0
- package/dist/tools/worknode-batch-tool.js +117 -0
- package/dist/tools/worknode-batch-tool.js.map +1 -0
- package/dist/tools/worknode-by-member-tool.d.ts +4 -0
- package/dist/tools/worknode-by-member-tool.d.ts.map +1 -0
- package/dist/tools/worknode-by-member-tool.js +171 -0
- package/dist/tools/worknode-by-member-tool.js.map +1 -0
- package/dist/tools/worknode-complete-tool.d.ts +4 -0
- package/dist/tools/worknode-complete-tool.d.ts.map +1 -0
- package/dist/tools/worknode-complete-tool.js +95 -0
- package/dist/tools/worknode-complete-tool.js.map +1 -0
- package/dist/tools/worknode-create-tool.d.ts.map +1 -1
- package/dist/tools/worknode-create-tool.js +40 -126
- package/dist/tools/worknode-create-tool.js.map +1 -1
- package/dist/tools/worknode-delete-tool.d.ts +4 -0
- package/dist/tools/worknode-delete-tool.d.ts.map +1 -0
- package/dist/tools/worknode-delete-tool.js +64 -0
- package/dist/tools/worknode-delete-tool.js.map +1 -0
- package/dist/tools/worknode-history-tool.d.ts +4 -0
- package/dist/tools/worknode-history-tool.d.ts.map +1 -0
- package/dist/tools/worknode-history-tool.js +103 -0
- package/dist/tools/worknode-history-tool.js.map +1 -0
- package/dist/tools/worknode-move-tool.d.ts +4 -0
- package/dist/tools/worknode-move-tool.d.ts.map +1 -0
- package/dist/tools/worknode-move-tool.js +80 -0
- package/dist/tools/worknode-move-tool.js.map +1 -0
- package/dist/tools/worknode-permanent-delete-tool.d.ts +10 -0
- package/dist/tools/worknode-permanent-delete-tool.d.ts.map +1 -0
- package/dist/tools/worknode-permanent-delete-tool.js +131 -0
- package/dist/tools/worknode-permanent-delete-tool.js.map +1 -0
- package/dist/tools/worknode-plan-organize-tool.d.ts.map +1 -1
- package/dist/tools/worknode-plan-organize-tool.js +10 -118
- package/dist/tools/worknode-plan-organize-tool.js.map +1 -1
- package/dist/tools/worknode-read-tool.d.ts.map +1 -1
- package/dist/tools/worknode-read-tool.js +23 -117
- package/dist/tools/worknode-read-tool.js.map +1 -1
- package/dist/tools/worknode-subtree-tool.d.ts.map +1 -1
- package/dist/tools/worknode-subtree-tool.js +153 -99
- package/dist/tools/worknode-subtree-tool.js.map +1 -1
- package/dist/tools/worknode-tag-relations-tool.d.ts +4 -0
- package/dist/tools/worknode-tag-relations-tool.d.ts.map +1 -0
- package/dist/tools/worknode-tag-relations-tool.js +143 -0
- package/dist/tools/worknode-tag-relations-tool.js.map +1 -0
- package/dist/tools/worknode-tag-tool.d.ts.map +1 -1
- package/dist/tools/worknode-tag-tool.js +17 -8
- package/dist/tools/worknode-tag-tool.js.map +1 -1
- package/dist/tools/worknode-update-tool.d.ts.map +1 -1
- package/dist/tools/worknode-update-tool.js +37 -120
- package/dist/tools/worknode-update-tool.js.map +1 -1
- package/dist/tools/workspace-ascii-export-tool.d.ts +4 -0
- package/dist/tools/workspace-ascii-export-tool.d.ts.map +1 -0
- package/dist/tools/workspace-ascii-export-tool.js +99 -0
- package/dist/tools/workspace-ascii-export-tool.js.map +1 -0
- package/dist/tools/workspace-inbox-tool.d.ts.map +1 -1
- package/dist/tools/workspace-inbox-tool.js +8 -77
- package/dist/tools/workspace-inbox-tool.js.map +1 -1
- package/dist/tools/workspace-list-tool.d.ts.map +1 -1
- package/dist/tools/workspace-list-tool.js +5 -50
- package/dist/tools/workspace-list-tool.js.map +1 -1
- package/dist/tools/workspace-member-tool.d.ts +15 -0
- package/dist/tools/workspace-member-tool.d.ts.map +1 -0
- package/dist/tools/workspace-member-tool.js +518 -0
- package/dist/tools/workspace-member-tool.js.map +1 -0
- package/dist/tools/workspace-members-list-tool.d.ts.map +1 -1
- package/dist/tools/workspace-members-list-tool.js +10 -87
- package/dist/tools/workspace-members-list-tool.js.map +1 -1
- package/dist/tools/workspace-statistics-tool.d.ts.map +1 -1
- package/dist/tools/workspace-statistics-tool.js +8 -172
- package/dist/tools/workspace-statistics-tool.js.map +1 -1
- package/dist/tools/workspace-tree-tool.d.ts.map +1 -1
- package/dist/tools/workspace-tree-tool.js +37 -185
- package/dist/tools/workspace-tree-tool.js.map +1 -1
- package/dist/utils/error-utils.d.ts +58 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +118 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +13 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worknode-move-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-move-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { ApiClient } from '../services/api-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register Permanent Delete Tool for WorkNode
|
|
5
|
+
*
|
|
6
|
+
* This tool provides permanent (irreversible) deletion of WorkNodes,
|
|
7
|
+
* matching the Electron app's `permanentDeleteWorkNode` functionality.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerWorknodePermanentDeleteTool(server: McpServer, apiClient: ApiClient): void;
|
|
10
|
+
//# sourceMappingURL=worknode-permanent-delete-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worknode-permanent-delete-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-permanent-delete-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA+I1F"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getErrorMessage } from '../utils/error-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register Permanent Delete Tool for WorkNode
|
|
5
|
+
*
|
|
6
|
+
* This tool provides permanent (irreversible) deletion of WorkNodes,
|
|
7
|
+
* matching the Electron app's `permanentDeleteWorkNode` functionality.
|
|
8
|
+
*/
|
|
9
|
+
export function registerWorknodePermanentDeleteTool(server, apiClient) {
|
|
10
|
+
server.registerTool('brxce_permanent_delete_worknode', {
|
|
11
|
+
description: `Permanently delete a WorkNode from the database. This action is IRREVERSIBLE.
|
|
12
|
+
|
|
13
|
+
**When to use:**
|
|
14
|
+
- When user explicitly requests permanent deletion of a WorkNode
|
|
15
|
+
- For cleaning up test/dummy data that should never be recovered
|
|
16
|
+
- When user wants to completely remove a WorkNode and all its history
|
|
17
|
+
|
|
18
|
+
**WARNING: This is IRREVERSIBLE**
|
|
19
|
+
- The WorkNode will be permanently removed from the database
|
|
20
|
+
- All associated data (comments, criteria, history) will be deleted
|
|
21
|
+
- This cannot be undone - there is no recovery option
|
|
22
|
+
- Child nodes may become orphaned or also be deleted
|
|
23
|
+
|
|
24
|
+
**Access Control:**
|
|
25
|
+
- Only workspace admin or owner can perform permanent deletion
|
|
26
|
+
- Regular members cannot use this operation
|
|
27
|
+
- The user must have appropriate permissions in the workspace
|
|
28
|
+
|
|
29
|
+
**Confirmation required:**
|
|
30
|
+
- The \`confirm\` parameter MUST be set to \`true\`
|
|
31
|
+
- Always ask the user for explicit confirmation before calling this tool
|
|
32
|
+
- Example: "Are you sure you want to PERMANENTLY delete WorkNode #123? This cannot be undone."
|
|
33
|
+
|
|
34
|
+
**Example usage:**
|
|
35
|
+
User: "Permanently delete task #456"
|
|
36
|
+
LLM:
|
|
37
|
+
1. Ask user for confirmation: "This will permanently delete WorkNode #456. This cannot be undone. Are you sure?"
|
|
38
|
+
2. If user confirms, call: brxce_permanent_delete_worknode(nodeId: 456, confirm: true)`,
|
|
39
|
+
inputSchema: {
|
|
40
|
+
nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123) to permanently delete'),
|
|
41
|
+
workspaceId: z.string().uuid().optional().describe('Workspace ID (for access validation and displayId resolution)'),
|
|
42
|
+
confirm: z.boolean().describe('Must be true to proceed with permanent deletion. Always ask user for explicit confirmation first.'),
|
|
43
|
+
},
|
|
44
|
+
}, async (args) => {
|
|
45
|
+
const { nodeId, workspaceId, confirm } = args;
|
|
46
|
+
// Safety check: confirm must be true
|
|
47
|
+
if (confirm !== true) {
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: `## Permanent Delete Blocked
|
|
53
|
+
|
|
54
|
+
**Confirmation required.** The \`confirm\` parameter must be set to \`true\`.
|
|
55
|
+
|
|
56
|
+
Before proceeding, please:
|
|
57
|
+
1. Ask the user to explicitly confirm: "Are you sure you want to PERMANENTLY delete WorkNode #${nodeId}? This action cannot be undone."
|
|
58
|
+
2. Only call this tool with \`confirm: true\` after receiving explicit user confirmation.
|
|
59
|
+
|
|
60
|
+
**This is an irreversible operation.**`,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
// Build URL with optional workspaceId query parameter
|
|
68
|
+
let url = `/mcp/worknodes/${encodeURIComponent(nodeId)}/permanent`;
|
|
69
|
+
if (workspaceId) {
|
|
70
|
+
url += `?workspaceId=${encodeURIComponent(workspaceId)}`;
|
|
71
|
+
}
|
|
72
|
+
// Call backend API with confirmation body (matching Electron implementation)
|
|
73
|
+
const response = await apiClient.delete(url, { confirmation: 'PERMANENTLY DELETE' });
|
|
74
|
+
if (!response.success) {
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: `## Permanent Delete Failed
|
|
80
|
+
|
|
81
|
+
**Error:** ${response.message || 'Unknown error'}
|
|
82
|
+
|
|
83
|
+
Possible reasons:
|
|
84
|
+
- WorkNode not found
|
|
85
|
+
- Insufficient permissions (admin/owner required)
|
|
86
|
+
- WorkNode is protected or locked
|
|
87
|
+
- Backend service unavailable`,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const { data } = response;
|
|
94
|
+
const nodeTitle = data?.title ? ` "${data.title}"` : '';
|
|
95
|
+
return {
|
|
96
|
+
content: [
|
|
97
|
+
{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: `## WorkNode Permanently Deleted
|
|
100
|
+
|
|
101
|
+
**WorkNode #${data?.nodeId || nodeId}${nodeTitle}** has been permanently deleted.
|
|
102
|
+
|
|
103
|
+
- **Deleted At:** ${data?.deletedAt || new Date().toISOString()}
|
|
104
|
+
- **Status:** Irreversibly removed from database
|
|
105
|
+
|
|
106
|
+
**Note:** This action cannot be undone. The WorkNode and all associated data have been permanently removed.`,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return {
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: 'text',
|
|
116
|
+
text: `## Permanent Delete Error
|
|
117
|
+
|
|
118
|
+
**Error:** ${getErrorMessage(error)}
|
|
119
|
+
|
|
120
|
+
Please check:
|
|
121
|
+
- WorkNode ID is valid
|
|
122
|
+
- You have admin/owner permissions in the workspace
|
|
123
|
+
- Backend service is running`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
isError: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=worknode-permanent-delete-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worknode-permanent-delete-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-permanent-delete-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC,CAAC,MAAiB,EAAE,SAAoB;IACzF,MAAM,CAAC,YAAY,CACjB,iCAAiC,EACjC;QACE,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;yFA2BsE;QAEnF,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;YAC9F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YACnH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,mGAAmG,CAAC;SACnI;KACF,EACD,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAIxC,CAAC;QAEF,qCAAqC;QACrC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;;;;gGAK4E,MAAM;;;uCAG/D;qBAC1B;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,sDAAsD;YACtD,IAAI,GAAG,GAAG,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC;YACnE,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,CAAC;YAED,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAQpC,GAAG,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAEhD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE;;aAET,QAAQ,CAAC,OAAO,IAAI,eAAe;;;;;;8BAMlB;yBACf;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAExD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;cAEN,IAAI,EAAE,MAAM,IAAI,MAAM,GAAG,SAAS;;oBAE5B,IAAI,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;4GAG6C;qBAC/F;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;aAEP,eAAe,CAAC,KAAK,CAAC;;;;;6BAKN;qBAChB;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worknode-plan-organize-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-plan-organize-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"worknode-plan-organize-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-plan-organize-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA2ItD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAkMvF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { getErrorMessage } from '../utils/error-utils.js';
|
|
2
3
|
const PlanOrganizeRequestSchema = z.object({
|
|
3
4
|
workspaceId: z.string().uuid().describe('The workspace ID to analyze'),
|
|
4
5
|
targetNodeIds: z
|
|
@@ -84,122 +85,13 @@ function suggestParents(node, potentialParents, allNodes, maxSuggestions = 3, mi
|
|
|
84
85
|
.slice(0, maxSuggestions);
|
|
85
86
|
}
|
|
86
87
|
export function registerWorknodePlanOrganizeTool(server, apiClient) {
|
|
87
|
-
server.tool('brxce_plan_organize', `Analyze workspace
|
|
88
|
+
server.tool('brxce_plan_organize', `Analyze workspace and suggest WorkNode reorganization. ONLY analyzes - does NOT execute changes!
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
Params: workspaceId, targetNodeIds[]?, parentNodeId?, includeAll?, keywords[]?
|
|
91
|
+
Scope: targetNodeIds > parentNodeId descendants > includeAll > inbox only (default)
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
1. Analyzing current workspace structure
|
|
94
|
-
2. Finding suitable parent nodes for orphaned/misplaced items
|
|
95
|
-
3. Calculating confidence scores based on keyword matching
|
|
96
|
-
4. Generating execution plan using existing tools
|
|
97
|
-
|
|
98
|
-
**When to use:**
|
|
99
|
-
- User asks to "organize", "clean up", or "restructure" WorkNodes
|
|
100
|
-
- User says "inbox를 정리해줘" or "MCP 관련 작업 정리해줘"
|
|
101
|
-
- User wants to move multiple items to appropriate locations
|
|
102
|
-
|
|
103
|
-
**What this tool does:**
|
|
104
|
-
1. Fetches workspace tree and inbox items
|
|
105
|
-
2. Extracts keywords from titles and descriptions
|
|
106
|
-
3. Matches orphaned items with potential parent projects/subprojects
|
|
107
|
-
4. Calculates similarity scores (Jaccard similarity)
|
|
108
|
-
5. Returns top 3 suggestions per item with confidence scores
|
|
109
|
-
6. Provides ready-to-execute plan for brxce_update_worknodes
|
|
110
|
-
|
|
111
|
-
**What this tool does NOT do:**
|
|
112
|
-
- Does NOT modify any data
|
|
113
|
-
- Does NOT change parentNodeId, title, status, assignee, or any other field
|
|
114
|
-
- Does NOT archive, delete, or create nodes
|
|
115
|
-
- Only returns analysis and suggestions
|
|
116
|
-
|
|
117
|
-
**Execution workflow:**
|
|
118
|
-
1. Call this tool to get suggestions
|
|
119
|
-
2. Present suggestions to user with confidence scores and reasoning
|
|
120
|
-
3. Ask user for confirmation
|
|
121
|
-
4. Execute using:
|
|
122
|
-
- brxce_create_worknodes (if intermediate nodes needed)
|
|
123
|
-
- brxce_update_worknodes (to move nodes)
|
|
124
|
-
|
|
125
|
-
**Safety rules:**
|
|
126
|
-
✅ ONLY suggests parentNodeId changes
|
|
127
|
-
✅ ONLY suggests nodeType changes (when hierarchy rules require)
|
|
128
|
-
❌ NEVER suggests title, description, status, assignee, priority, tags, or date changes
|
|
129
|
-
❌ NEVER archives or deletes nodes
|
|
130
|
-
❌ User must confirm before execution
|
|
131
|
-
|
|
132
|
-
**Example usage:**
|
|
133
|
-
|
|
134
|
-
Example 1: Organize inbox items
|
|
135
|
-
\`\`\`
|
|
136
|
-
User: "Inbox에 있는 MCP 관련 작업들 정리해줘"
|
|
137
|
-
|
|
138
|
-
await brxce_plan_organize({
|
|
139
|
-
workspaceId: 138,
|
|
140
|
-
keywords: ["MCP"]
|
|
141
|
-
})
|
|
142
|
-
\`\`\`
|
|
143
|
-
|
|
144
|
-
Example 2: Organize all items under a project
|
|
145
|
-
\`\`\`
|
|
146
|
-
User: "MVP 프로젝트 하위 작업들 정리해줘"
|
|
147
|
-
|
|
148
|
-
Step 1: Find project ID (e.g., 856)
|
|
149
|
-
Step 2: Call this tool
|
|
150
|
-
await brxce_plan_organize({
|
|
151
|
-
workspaceId: 138,
|
|
152
|
-
parentNodeId: 856
|
|
153
|
-
})
|
|
154
|
-
\`\`\`
|
|
155
|
-
|
|
156
|
-
Example 3: Organize entire workspace
|
|
157
|
-
\`\`\`
|
|
158
|
-
User: "workspace 전체를 정리해줘"
|
|
159
|
-
|
|
160
|
-
await brxce_plan_organize({
|
|
161
|
-
workspaceId: 138,
|
|
162
|
-
includeAll: true
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
Step 2: Review suggestions
|
|
166
|
-
- Shows inbox items matching "MCP"
|
|
167
|
-
- Suggests parent nodes with confidence scores
|
|
168
|
-
- Provides execution plan
|
|
169
|
-
|
|
170
|
-
Step 3: Present to user
|
|
171
|
-
"다음과 같이 정리하겠습니다:
|
|
172
|
-
1. #3872 'brxce_read_worknodes 500 에러'
|
|
173
|
-
→ #2719 'MCP 툴 개선' 하위로 이동 (신뢰도 92%)
|
|
174
|
-
|
|
175
|
-
진행하시겠습니까?"
|
|
176
|
-
|
|
177
|
-
Step 4: Execute (after confirmation)
|
|
178
|
-
await brxce_update_worknodes({
|
|
179
|
-
updates: [
|
|
180
|
-
{ nodeId: 3872, changes: { parentNodeId: 2719 }}
|
|
181
|
-
],
|
|
182
|
-
preview: false
|
|
183
|
-
})
|
|
184
|
-
\`\`\`
|
|
185
|
-
|
|
186
|
-
**Parameters:**
|
|
187
|
-
- workspaceId: Required workspace ID
|
|
188
|
-
- targetNodeIds: Optional specific nodes to analyze
|
|
189
|
-
- parentNodeId: Optional - analyze all descendants of this node
|
|
190
|
-
- includeAll: Optional - analyze ALL workspace nodes (default: false)
|
|
191
|
-
- keywords: Optional keyword filter (e.g., ["MCP", "backend"])
|
|
192
|
-
|
|
193
|
-
**Scope Selection (priority order):**
|
|
194
|
-
1. If targetNodeIds provided → Analyze those specific nodes
|
|
195
|
-
2. Else if parentNodeId provided → Analyze all descendants
|
|
196
|
-
3. Else if includeAll=true → Analyze all active workspace nodes
|
|
197
|
-
4. Else (default) → Analyze inbox items only
|
|
198
|
-
|
|
199
|
-
**Returns:**
|
|
200
|
-
- summary: Analysis statistics
|
|
201
|
-
- suggestions: Parent suggestions per node with confidence scores
|
|
202
|
-
- executionPlan: Ready-to-use plan for brxce_update_worknodes`, PlanOrganizeRequestSchema.shape, async (args) => {
|
|
93
|
+
Returns: summary, suggestions[{nodeId, suggestedParents with confidence scores}], executionPlan
|
|
94
|
+
Execute via brxce_update_worknodes after user confirmation. ONLY suggests parentNodeId changes.`, PlanOrganizeRequestSchema.shape, async (args) => {
|
|
203
95
|
const { workspaceId, targetNodeIds, parentNodeId, includeAll, keywords } = args;
|
|
204
96
|
try {
|
|
205
97
|
// Step 1: Fetch workspace tree
|
|
@@ -248,9 +140,9 @@ await brxce_update_worknodes({
|
|
|
248
140
|
});
|
|
249
141
|
}
|
|
250
142
|
else if (includeAll) {
|
|
251
|
-
// All nodes in workspace (excluding completed/
|
|
143
|
+
// All nodes in workspace (excluding completed/archived)
|
|
252
144
|
targetNodes = allNodes.filter(n => n.status !== 'completed' &&
|
|
253
|
-
n.status !== '
|
|
145
|
+
n.status !== 'archived');
|
|
254
146
|
}
|
|
255
147
|
else {
|
|
256
148
|
// Default: inbox items only
|
|
@@ -267,7 +159,7 @@ await brxce_update_worknodes({
|
|
|
267
159
|
// Step 4: Find potential parents (projects and subprojects only)
|
|
268
160
|
const potentialParents = allNodes.filter(n => ['project', 'subproject'].includes(n.nodeType) &&
|
|
269
161
|
n.status !== 'completed' &&
|
|
270
|
-
n.status !== '
|
|
162
|
+
n.status !== 'archived');
|
|
271
163
|
// Step 5: Generate suggestions
|
|
272
164
|
const suggestions = targetNodes.map(node => {
|
|
273
165
|
const parentSuggestions = suggestParents(node, potentialParents, allNodes, 3, // maxSuggestions
|
|
@@ -343,7 +235,7 @@ await brxce_update_worknodes({
|
|
|
343
235
|
type: 'text',
|
|
344
236
|
text: JSON.stringify({
|
|
345
237
|
error: 'Failed to analyze workspace',
|
|
346
|
-
message: error
|
|
238
|
+
message: getErrorMessage(error),
|
|
347
239
|
workspaceId
|
|
348
240
|
}, null, 2),
|
|
349
241
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worknode-plan-organize-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-plan-organize-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"worknode-plan-organize-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-plan-organize-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtE,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;IACrF,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IAC9G,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CACnG,CAAC,CAAC;AAsBH;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,OAAO,IAAI;SACR,WAAW,EAAE;SACb,KAAK,CAAC,mBAAmB,CAAC;SAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,YAAsB,EACtB,iBAA2B,EAC3B,cAAsB;IAEtB,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,yBAAyB;IACzB,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAc,EAAE,QAAoB;IACrD,MAAM,IAAI,GAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM;YAAE,MAAM;QACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,IAAc,EACd,gBAA4B,EAC5B,QAAoB,EACpB,iBAAyB,CAAC,EAC1B,gBAAwB,GAAG;IAE3B,MAAM,YAAY,GAAG,eAAe,CAClC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CACpD,CAAC;IAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC9C,MAAM,iBAAiB,GAAG,eAAe,CACvC,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAC9D,CAAC;QAEF,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,mBAAmB,CACpD,YAAY,EACZ,iBAAiB,EACjB,SAAS,CAAC,KAAK,CAChB,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;YACpC,KAAK;YACL,eAAe;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC;SACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAiB,EAAE,SAAoB;IACtF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB;;;;;;gGAM4F,EAC5F,yBAAyB,CAAC,KAAK,EAC/B,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAiD,CAAC;QAE7H,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,UAAU,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAC/C,UAAU,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,CACtC,mBAAmB,WAAW,aAAa,UAAU,CAAC,QAAQ,EAAE,EAAE,CACnE,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,QAAQ,GAAe,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAE1D,4BAA4B;YAC5B,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;YAC1C,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAElC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,GAAG,CACvC,wBAAwB,WAAW,CAAC,QAAQ,EAAE,EAAE,CACjD,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;YAEhD,8BAA8B;YAC9B,IAAI,WAAuB,CAAC;YAE5B,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,0BAA0B;gBAC1B,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtC,uCAAuC;gBACvC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;oBAChC,qDAAqD;oBACrD,IAAI,CAAC,CAAC,EAAE,KAAK,YAAY;wBAAE,OAAO,KAAK,CAAC,CAAC,8BAA8B;oBAEvE,sDAAsD;oBACtD,IAAI,OAAO,GAAG,CAAC,CAAC;oBAChB,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;wBAC5B,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY;4BAAE,OAAO,IAAI,CAAC;wBACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;wBACvE,IAAI,CAAC,MAAM;4BAAE,MAAM;wBACnB,OAAO,GAAG,MAAM,CAAC;oBACnB,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,wDAAwD;gBACxD,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC,CAAC,MAAM,KAAK,WAAW;oBACxB,CAAC,CAAC,MAAM,KAAK,UAAU,CACxB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,WAAW,GAAG,UAAU,CAAC;YAC3B,CAAC;YAED,oCAAoC;YACpC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACzD,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBACjF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC;YAED,iEAAiE;YACjE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3C,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC9C,CAAC,CAAC,MAAM,KAAK,WAAW;gBACxB,CAAC,CAAC,MAAM,KAAK,UAAU,CACxB,CAAC;YAEF,+BAA+B;YAC/B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,iBAAiB,GAAG,cAAc,CACtC,IAAI,EACJ,gBAAgB,EAChB,QAAQ,EACR,CAAC,EAAE,iBAAiB;gBACpB,GAAG,CAAC,gBAAgB;iBACrB,CAAC;gBAEF,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,YAAY,EAAE,IAAI,CAAC,KAAK;oBACxB,eAAe,EAAE,IAAI,CAAC,YAAY;wBAChC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;wBAC3B,CAAC,CAAC,cAAc;oBAClB,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC5C,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACd,WAAW,EAAE,CAAC,CAAC,KAAK;wBACpB,UAAU,EAAE,CAAC,CAAC,IAAI;wBAClB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;wBAC3C,eAAe,EAAE,CAAC,CAAC,eAAe;wBAClC,MAAM,EAAE,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;4BAClC,CAAC,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAClD,CAAC,CAAC,UAAU;qBACf,CAAC,CAAC;iBACJ,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,+CAA+C;YAC/C,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjF,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAEpE,kCAAkC;YAClC,MAAM,aAAa,GAAG;gBACpB,WAAW,EAAE,iBAAiB;qBAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACT,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,OAAO,EAAE;wBACP,YAAY,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ;qBAC9C;oBACD,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC;oBAClD,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE;iBAC5C,CAAC,CAAC;aACN,CAAC;YAEF,0BAA0B;YAC1B,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,WAAW,CAAC,MAAM;oBACjC,iBAAiB,EAAE,iBAAiB,CAAC,MAAM;oBAC3C,aAAa;oBACb,aAAa,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;wBACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CACR,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAClC,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CAClD,GAAG,iBAAiB,CAAC,MAAM,GAAG,GAAG,CACnC,GAAG,GAAG;wBACT,CAAC,CAAC,CAAC;iBACN;gBACD,WAAW,EAAE,iBAAiB;gBAC9B,aAAa;gBACb,YAAY,EAAE;oBACZ,KAAK,EAAE,0BAA0B;oBACjC,KAAK,EAAE,wCAAwC;oBAC/C,KAAK,EAAE,uBAAuB;oBAC9B,KAAK,EAAE,qEAAqE;oBAC5E,OAAO,EAAE,6CAA6C;iBACvD;aACF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,6BAA6B;4BACpC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;4BAC/B,WAAW;yBACZ,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worknode-read-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-read-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"worknode-read-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-read-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA8Q/E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { getErrorMessage } from '../utils/error-utils.js';
|
|
2
3
|
export function registerWorknodeReadTool(server, apiClient) {
|
|
3
4
|
const userIdentifierSchema = z.union([z.literal('me'), z.string().min(1)]);
|
|
4
5
|
const createdByFilterSchema = z.object({
|
|
@@ -33,121 +34,18 @@ export function registerWorknodeReadTool(server, apiClient) {
|
|
|
33
34
|
* Search WorkNodes by keyword
|
|
34
35
|
*/
|
|
35
36
|
server.registerTool('brxce_read_worknodes', {
|
|
36
|
-
description: `
|
|
37
|
+
description: `Search WorkNodes by keyword and filters.
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
1. Read the \`user://me\` resource to get available workspaces
|
|
41
|
-
2. Identify the correct workspaceId from the resource data
|
|
42
|
-
3. If user mentions a specific workspace, verify it exists in user://me
|
|
43
|
-
4. NEVER assume or guess workspaceId values
|
|
44
|
-
5. If workspaceId is omitted, searches across ALL user's accessible workspaces
|
|
39
|
+
Params: query, workspaceId, nodeTypes[], statuses[], priorities[], assignee, limit, offset
|
|
40
|
+
Filters: createdBy, createdByFilter, assigneeFilter (has/notHas/isEmpty/hasOnly/anyOf)
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
\`\`\`
|
|
48
|
-
User: "Find all MCP related tasks in BRXCE Development"
|
|
49
|
-
LLM:
|
|
50
|
-
1. Reads user://me resource
|
|
51
|
-
2. Finds workspace: {id: 138, name: "BRXCE Development"}
|
|
52
|
-
3. Calls brxce_read_worknodes with query="MCP", workspaceId=138, nodeTypes=["task"]
|
|
53
|
-
\`\`\`
|
|
54
|
-
|
|
55
|
-
**When to use this tool:**
|
|
56
|
-
The LLM should automatically call this tool when the user asks about:
|
|
57
|
-
- "Find tasks about X" → Use query="X", nodeTypes=["task"]
|
|
58
|
-
- "Search for AI projects" → Use query="AI", nodeTypes=["project"]
|
|
59
|
-
- "Find all MCP-related work" → Use query="MCP"
|
|
60
|
-
- "Show me critical priority items" → Use priorities=["critical"]
|
|
61
|
-
- "Find completed tasks about backend" → Use query="backend", statuses=["completed"]
|
|
62
|
-
|
|
63
|
-
**Response Format:**
|
|
64
|
-
- Returns 11 essential fields: id, title, nodeType, status, priority, parentNodeId, nodeLevel, workspaceId, assignee, dueDate, tags
|
|
65
|
-
- **Tags**: Array of tag names (string[]) for token efficiency
|
|
66
|
-
- **Optimized for LLM token usage**
|
|
67
|
-
|
|
68
|
-
**Search Features:**
|
|
69
|
-
- Keyword search: Searches in both title and description fields (case-insensitive)
|
|
70
|
-
- Filter by workspace: Limit search to specific workspace
|
|
71
|
-
- Filter by nodeType: goal, project, subproject, task, subtask
|
|
72
|
-
- Filter by status: backlog, not_started, in_progress, in_review, completed, cancelled
|
|
73
|
-
- Filter by priority: critical, urgent, high, medium, low
|
|
74
|
-
- Ownership filters: Combine createdBy/createdByFilter with assignee/assigneeFilter (has/notHas/isEmpty/isNotEmpty/hasOnly/hasOthersThan/anyOf, supports "me")
|
|
75
|
-
- Pagination: Use limit and offset for large result sets
|
|
76
|
-
|
|
77
|
-
**Access Control:**
|
|
78
|
-
- Only searches WorkNodes in workspaces the user has access to
|
|
79
|
-
- If workspaceId specified, validates user membership before searching
|
|
80
|
-
|
|
81
|
-
**Best Practices:**
|
|
82
|
-
1. Combine multiple filters for precise searches (e.g., query + nodeTypes + statuses)
|
|
83
|
-
2. Use pagination (limit 50-100) for initial searches
|
|
84
|
-
3. Filter by workspace when user mentions a specific workspace
|
|
85
|
-
4. Use appropriate nodeTypes filter when user asks about specific levels (goals, projects, tasks)
|
|
86
|
-
|
|
87
|
-
**Example Searches:**
|
|
88
|
-
|
|
89
|
-
1. Find all MCP-related work across all workspaces:
|
|
90
|
-
\`\`\`typescript
|
|
91
|
-
brxce_read_worknodes({
|
|
92
|
-
query: "MCP",
|
|
93
|
-
limit: 50
|
|
94
|
-
})
|
|
95
|
-
\`\`\`
|
|
96
|
-
|
|
97
|
-
2. Find high-priority tasks in specific workspace:
|
|
98
|
-
\`\`\`typescript
|
|
99
|
-
brxce_read_worknodes({
|
|
100
|
-
workspaceId: 138,
|
|
101
|
-
nodeTypes: ["task", "subtask"],
|
|
102
|
-
priorities: ["high", "critical"],
|
|
103
|
-
statuses: ["not_started", "in_progress"]
|
|
104
|
-
})
|
|
105
|
-
\`\`\`
|
|
106
|
-
|
|
107
|
-
3. Search for AI-related projects:
|
|
108
|
-
\`\`\`typescript
|
|
109
|
-
brxce_read_worknodes({
|
|
110
|
-
query: "AI",
|
|
111
|
-
nodeTypes: ["project", "subproject"],
|
|
112
|
-
limit: 20
|
|
113
|
-
})
|
|
114
|
-
\`\`\`
|
|
115
|
-
|
|
116
|
-
4. Find all backlog items (inbox) about API:
|
|
117
|
-
\`\`\`typescript
|
|
118
|
-
brxce_read_worknodes({
|
|
119
|
-
query: "API",
|
|
120
|
-
statuses: ["backlog"]
|
|
121
|
-
})
|
|
122
|
-
\`\`\`
|
|
123
|
-
|
|
124
|
-
**Output Format:**
|
|
125
|
-
Returns JSON with:
|
|
126
|
-
- nodes: Array of WorkNode objects (11 fields each)
|
|
127
|
-
- total: Total count of matching WorkNodes
|
|
128
|
-
- limit, offset: Pagination info
|
|
129
|
-
|
|
130
|
-
⏰ **TIMEZONE HANDLING:**
|
|
131
|
-
ALL date/time fields in the response are in UTC (ISO 8601 format):
|
|
132
|
-
- completedAt, createdAt, updatedAt, dueDate, startDate
|
|
133
|
-
|
|
134
|
-
When presenting results to the user, you MUST convert UTC timestamps to the user's local timezone:
|
|
135
|
-
1. Check the current date/time from the <env> tag in the system prompt
|
|
136
|
-
2. Identify the user's timezone (e.g., Asia/Seoul = UTC+9)
|
|
137
|
-
3. Convert ALL displayed timestamps from UTC to local time
|
|
138
|
-
4. Format dates in a user-friendly way (e.g., "오후 5:16" not "08:16 UTC")
|
|
139
|
-
|
|
140
|
-
Example conversion (Korea Time, UTC+9):
|
|
141
|
-
- API returns: "completedAt": "2025-10-20T08:16:25.556Z" (UTC)
|
|
142
|
-
- Display to user: "완료: 2025-10-20 오후 5:16" (KST)
|
|
143
|
-
|
|
144
|
-
The LLM should format this data into a readable summary for the user.`,
|
|
42
|
+
Returns: nodes (11 fields), total, pagination info. Dates in UTC.`,
|
|
145
43
|
inputSchema: {
|
|
146
44
|
query: z.string().optional().describe('Search keyword for title/description (case-insensitive)'),
|
|
147
45
|
workspaceId: z.string().uuid().optional().describe('Filter by workspace ID (validates user access)'),
|
|
148
|
-
nodeTypes: z.array(z.enum(['goal', 'project', 'subproject', 'task', 'subtask'])).optional()
|
|
46
|
+
nodeTypes: z.array(z.enum(['goal', 'project', 'subproject', 'task', 'subtask', 'note'])).optional()
|
|
149
47
|
.describe('Filter by node types'),
|
|
150
|
-
statuses: z.array(z.enum(['backlog', 'not_started', 'in_progress', '
|
|
48
|
+
statuses: z.array(z.enum(['backlog', 'not_started', 'in_progress', 'completed', 'pause', 'archived', 'static'])).optional()
|
|
151
49
|
.describe('Filter by statuses'),
|
|
152
50
|
priorities: z.array(z.enum(['critical', 'urgent', 'high', 'medium', 'low'])).optional()
|
|
153
51
|
.describe('Filter by priorities'),
|
|
@@ -225,7 +123,7 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
225
123
|
acc[node.nodeType].push(node);
|
|
226
124
|
return acc;
|
|
227
125
|
}, {});
|
|
228
|
-
const typeOrder = ['goal', 'project', 'subproject', 'task', 'subtask'];
|
|
126
|
+
const typeOrder = ['goal', 'project', 'subproject', 'task', 'subtask', 'note'];
|
|
229
127
|
typeOrder.forEach((type) => {
|
|
230
128
|
const typeNodes = byType[type];
|
|
231
129
|
if (!typeNodes || typeNodes.length === 0)
|
|
@@ -235,7 +133,8 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
235
133
|
project: '📁',
|
|
236
134
|
subproject: '📂',
|
|
237
135
|
task: '✅',
|
|
238
|
-
subtask: '☑️'
|
|
136
|
+
subtask: '☑️',
|
|
137
|
+
note: '📝'
|
|
239
138
|
}[type] || '📄';
|
|
240
139
|
resultText += `### ${typeEmoji} ${type.charAt(0).toUpperCase() + type.slice(1)}s (${typeNodes.length})\n\n`;
|
|
241
140
|
typeNodes.forEach((node) => {
|
|
@@ -243,9 +142,10 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
243
142
|
backlog: '📥',
|
|
244
143
|
not_started: '⭕',
|
|
245
144
|
in_progress: '🔄',
|
|
246
|
-
in_review: '👀',
|
|
247
145
|
completed: '✅',
|
|
248
|
-
|
|
146
|
+
pause: '⏸️',
|
|
147
|
+
archived: '📦',
|
|
148
|
+
static: '📌'
|
|
249
149
|
};
|
|
250
150
|
const statusEmoji = statusEmojiMap[node.status] || '❓';
|
|
251
151
|
const priorityEmojiMap = {
|
|
@@ -256,14 +156,16 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
256
156
|
low: '🟢'
|
|
257
157
|
};
|
|
258
158
|
const priorityEmoji = priorityEmojiMap[node.priority] || '';
|
|
259
|
-
|
|
159
|
+
// Use displayId if available, otherwise UUID
|
|
160
|
+
const nodeIdDisplay = node.displayId != null ? `#${node.displayId}` : node.id;
|
|
161
|
+
resultText += `**${node.title}** (${nodeIdDisplay})\n`;
|
|
260
162
|
resultText += ` ${statusEmoji} ${node.status}`;
|
|
261
163
|
if (priorityEmoji)
|
|
262
164
|
resultText += ` | ${priorityEmoji} ${node.priority}`;
|
|
263
165
|
if (node.workspaceId)
|
|
264
|
-
resultText += ` |
|
|
166
|
+
resultText += ` | ws: ${node.workspaceId}`;
|
|
265
167
|
if (node.parentNodeId)
|
|
266
|
-
resultText += ` | Parent:
|
|
168
|
+
resultText += ` | Parent: ${node.parentNodeId}`;
|
|
267
169
|
// Show additional fields
|
|
268
170
|
if (node.assignee && Array.isArray(node.assignee) && node.assignee.length > 0) {
|
|
269
171
|
resultText += ` | 👤 ${node.assignee.join(', ')}`;
|
|
@@ -286,6 +188,10 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
286
188
|
resultText += `💡 **Tip**: Use \`offset: ${offset + limit}\` to see next ${Math.min(remaining, limit)} results\n`;
|
|
287
189
|
}
|
|
288
190
|
}
|
|
191
|
+
// Add workspaceId hint for displayId usage
|
|
192
|
+
if (workspaceId) {
|
|
193
|
+
resultText += `\n**Important:** When using displayId (e.g., #123) for operations, include \`workspaceId: "${workspaceId}"\`\n`;
|
|
194
|
+
}
|
|
289
195
|
}
|
|
290
196
|
return {
|
|
291
197
|
content: [
|
|
@@ -301,7 +207,7 @@ The LLM should format this data into a readable summary for the user.`,
|
|
|
301
207
|
content: [
|
|
302
208
|
{
|
|
303
209
|
type: 'text',
|
|
304
|
-
text: `Error searching WorkNodes: ${error
|
|
210
|
+
text: `Error searching WorkNodes: ${getErrorMessage(error)}`,
|
|
305
211
|
},
|
|
306
212
|
],
|
|
307
213
|
isError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worknode-read-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-read-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"worknode-read-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-read-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;
|
|
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"}
|