huly-mcp-sdk 0.2.1

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 (53) hide show
  1. package/.env.example +16 -0
  2. package/README.md +189 -0
  3. package/dist/connection.d.ts +5 -0
  4. package/dist/connection.js +111 -0
  5. package/dist/connection.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +25 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/schemas.d.ts +177 -0
  10. package/dist/schemas.js +78 -0
  11. package/dist/schemas.js.map +1 -0
  12. package/dist/server.d.ts +2 -0
  13. package/dist/server.js +48 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/tools/comments.d.ts +9 -0
  16. package/dist/tools/comments.js +19 -0
  17. package/dist/tools/comments.js.map +1 -0
  18. package/dist/tools/documents.d.ts +14 -0
  19. package/dist/tools/documents.js +27 -0
  20. package/dist/tools/documents.js.map +1 -0
  21. package/dist/tools/issues.d.ts +51 -0
  22. package/dist/tools/issues.js +179 -0
  23. package/dist/tools/issues.js.map +1 -0
  24. package/dist/tools/labels.d.ts +35 -0
  25. package/dist/tools/labels.js +150 -0
  26. package/dist/tools/labels.js.map +1 -0
  27. package/dist/tools/members.d.ts +6 -0
  28. package/dist/tools/members.js +17 -0
  29. package/dist/tools/members.js.map +1 -0
  30. package/dist/tools/milestones.d.ts +8 -0
  31. package/dist/tools/milestones.js +26 -0
  32. package/dist/tools/milestones.js.map +1 -0
  33. package/dist/tools/projects.d.ts +14 -0
  34. package/dist/tools/projects.js +33 -0
  35. package/dist/tools/projects.js.map +1 -0
  36. package/dist/tools/relations.d.ts +27 -0
  37. package/dist/tools/relations.js +103 -0
  38. package/dist/tools/relations.js.map +1 -0
  39. package/dist/tools/search.d.ts +9 -0
  40. package/dist/tools/search.js +32 -0
  41. package/dist/tools/search.js.map +1 -0
  42. package/dist/utils/errors.d.ts +11 -0
  43. package/dist/utils/errors.js +24 -0
  44. package/dist/utils/errors.js.map +1 -0
  45. package/dist/utils/format.d.ts +4 -0
  46. package/dist/utils/format.js +28 -0
  47. package/dist/utils/format.js.map +1 -0
  48. package/package.json +63 -0
  49. package/scripts/cleanup-issues.js +132 -0
  50. package/scripts/demo.js +193 -0
  51. package/scripts/import-csv.js +242 -0
  52. package/scripts/sample-tasks.csv +11 -0
  53. package/scripts/setup.js +103 -0
package/dist/server.js ADDED
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServer = createServer;
4
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
+ const projects_1 = require("./tools/projects");
6
+ const issues_1 = require("./tools/issues");
7
+ const comments_1 = require("./tools/comments");
8
+ const members_1 = require("./tools/members");
9
+ const milestones_1 = require("./tools/milestones");
10
+ const documents_1 = require("./tools/documents");
11
+ const search_1 = require("./tools/search");
12
+ const labels_1 = require("./tools/labels");
13
+ const relations_1 = require("./tools/relations");
14
+ const schemas_1 = require("./schemas");
15
+ function createServer() {
16
+ const server = new mcp_js_1.McpServer({ name: 'huly-mcp', version: '0.2.1' });
17
+ // Projects
18
+ server.tool('list_projects', 'List all projects in the Huly workspace', {}, projects_1.listProjects);
19
+ server.tool('get_project', 'Get a project by its identifier (e.g. "PROJ")', schemas_1.GetProjectSchema.shape, projects_1.getProject);
20
+ // Issues
21
+ server.tool('list_issues', 'List issues in a project with optional filters', schemas_1.ListIssuesSchema.shape, issues_1.listIssues);
22
+ server.tool('get_issue', 'Get full details of an issue by identifier (e.g. "PROJ-123")', schemas_1.GetIssueSchema.shape, issues_1.getIssue);
23
+ server.tool('create_issue', 'Create a new issue in a project', schemas_1.CreateIssueSchema.shape, issues_1.createIssue);
24
+ server.tool('update_issue', 'Update an existing issue (title, status, priority, due date)', schemas_1.UpdateIssueSchema.shape, issues_1.updateIssue);
25
+ server.tool('delete_issue', 'Permanently delete an issue by identifier (e.g. "PROJ-123")', schemas_1.DeleteIssueSchema.shape, issues_1.deleteIssue);
26
+ // Comments
27
+ server.tool('add_comment', 'Add a comment to an issue', schemas_1.AddCommentSchema.shape, comments_1.addComment);
28
+ // Labels
29
+ server.tool('list_labels', 'List all labels in the workspace', schemas_1.ListLabelsSchema.shape, labels_1.listLabels);
30
+ server.tool('create_label', 'Create a new label with an optional hex color', schemas_1.CreateLabelSchema.shape, labels_1.createLabel);
31
+ server.tool('add_label', 'Add a label to an issue (auto-creates the label if it does not exist)', schemas_1.AddLabelSchema.shape, labels_1.addLabel);
32
+ server.tool('remove_label', 'Remove a label from an issue', schemas_1.RemoveLabelSchema.shape, labels_1.removeLabel);
33
+ // Relations
34
+ server.tool('add_relation', 'Mark two issues as related to each other (bidirectional)', schemas_1.AddRelationSchema.shape, relations_1.addRelation);
35
+ server.tool('add_blocked_by', 'Mark an issue as blocked by another issue', schemas_1.AddBlockedBySchema.shape, relations_1.addBlockedBy);
36
+ server.tool('set_parent', 'Set or clear the parent (epic) of an issue', schemas_1.SetParentSchema.shape, relations_1.setParent);
37
+ // Members
38
+ server.tool('list_members', 'List all members in the workspace', {}, members_1.listMembers);
39
+ // Milestones
40
+ server.tool('list_milestones', 'List milestones for a project', schemas_1.ListMilestonesSchema.shape, milestones_1.listMilestones);
41
+ // Documents
42
+ server.tool('list_teamspaces', 'List all document teamspaces in the workspace', {}, documents_1.listTeamspaces);
43
+ server.tool('list_documents', 'List documents in a teamspace', schemas_1.ListDocumentsSchema.shape, documents_1.listDocuments);
44
+ // Search
45
+ server.tool('search_issues', 'Full-text search across all issues', schemas_1.SearchIssuesSchema.shape, search_1.searchIssues);
46
+ return server;
47
+ }
48
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const addComment: (args: {
2
+ message: string;
3
+ identifier: string;
4
+ }) => Promise<{
5
+ content: Array<{
6
+ type: "text";
7
+ text: string;
8
+ }>;
9
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addComment = void 0;
7
+ const tracker_1 = __importDefault(require("@hcengineering/tracker"));
8
+ const chunter_1 = __importDefault(require("@hcengineering/chunter"));
9
+ const connection_1 = require("../connection");
10
+ const errors_1 = require("../utils/errors");
11
+ exports.addComment = (0, errors_1.wrapToolHandler)(async (args) => {
12
+ const client = await (0, connection_1.getConnection)();
13
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
14
+ if (issue == null)
15
+ throw new Error(`Issue '${args.identifier}' not found.`);
16
+ await client.addCollection(chunter_1.default.class.ChatMessage, issue.space, issue._id, tracker_1.default.class.Issue, 'comments', { message: args.message });
17
+ return `✅ Comment added to **${args.identifier}**.`;
18
+ });
19
+ //# sourceMappingURL=comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":";;;;;;AAAA,qEAA4C;AAC5C,qEAA4C;AAC5C,8CAA6C;AAC7C,4CAAiD;AAIpC,QAAA,UAAU,GAAG,IAAA,wBAAe,EAAmC,KAAK,EAAE,IAAI,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,MAAM,MAAM,CAAC,aAAa,CACxB,iBAAO,CAAC,KAAK,CAAC,WAAW,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,UAAU,EACV,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAA;IAED,OAAO,wBAAwB,IAAI,CAAC,UAAU,KAAK,CAAA;AACrD,CAAC,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export declare const listTeamspaces: (args: Record<string, never>) => Promise<{
2
+ content: Array<{
3
+ type: "text";
4
+ text: string;
5
+ }>;
6
+ }>;
7
+ export declare const listDocuments: (args: {
8
+ teamspaceId: string;
9
+ }) => Promise<{
10
+ content: Array<{
11
+ type: "text";
12
+ text: string;
13
+ }>;
14
+ }>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.listDocuments = exports.listTeamspaces = void 0;
7
+ const document_1 = __importDefault(require("@hcengineering/document"));
8
+ const core_1 = require("@hcengineering/core");
9
+ const connection_1 = require("../connection");
10
+ const errors_1 = require("../utils/errors");
11
+ exports.listTeamspaces = (0, errors_1.wrapToolHandler)(async () => {
12
+ const client = await (0, connection_1.getConnection)();
13
+ const teamspaces = await client.findAll(document_1.default.class.Teamspace, {});
14
+ if (teamspaces.length === 0)
15
+ return 'No teamspaces found in this workspace.';
16
+ const lines = teamspaces.map((t) => `- **${t.name}** (id: \`${t._id}\`)${t.description != null && t.description !== '' ? `\n ${t.description}` : ''}`);
17
+ return `## Teamspaces (${teamspaces.length})\n\n${lines.join('\n')}`;
18
+ });
19
+ exports.listDocuments = (0, errors_1.wrapToolHandler)(async (args) => {
20
+ const client = await (0, connection_1.getConnection)();
21
+ const docs = await client.findAll(document_1.default.class.Document, { space: args.teamspaceId }, { sort: { rank: core_1.SortingOrder.Ascending }, limit: 100 });
22
+ if (docs.length === 0)
23
+ return 'No documents found in this teamspace.';
24
+ const lines = docs.map((d) => `- **${d.title}** (id: \`${d._id}\`)`);
25
+ return `## Documents (${docs.length})\n\n${lines.join('\n')}`;
26
+ });
27
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA8C;AAC9C,8CAA4D;AAC5D,8CAA6C;AAC7C,4CAAiD;AAKpC,QAAA,cAAc,GAAG,IAAA,wBAAe,EAAwB,KAAK,IAAI,EAAE;IAC9E,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IACpC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAErE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,wCAAwC,CAAA;IAE5E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACnH,CAAA;IAED,OAAO,kBAAkB,UAAU,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACtE,CAAC,CAAC,CAAA;AAEW,QAAA,aAAa,GAAG,IAAA,wBAAe,EAAsC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC/F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IACpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,kBAAQ,CAAC,KAAK,CAAC,QAAQ,EACvB,EAAE,KAAK,EAAE,IAAI,CAAC,WAA6B,EAAE,EAC7C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAY,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CACvD,CAAA;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,uCAAuC,CAAA;IAErE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;IACpE,OAAO,iBAAiB,IAAI,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAC/D,CAAC,CAAC,CAAA"}
@@ -0,0 +1,51 @@
1
+ export declare const listIssues: (args: {
2
+ projectIdentifier: string;
3
+ limit: number;
4
+ status?: string | undefined;
5
+ priority?: "Medium" | "NoPriority" | "Urgent" | "High" | "Low" | undefined;
6
+ }) => Promise<{
7
+ content: Array<{
8
+ type: "text";
9
+ text: string;
10
+ }>;
11
+ }>;
12
+ export declare const getIssue: (args: {
13
+ identifier: string;
14
+ }) => Promise<{
15
+ content: Array<{
16
+ type: "text";
17
+ text: string;
18
+ }>;
19
+ }>;
20
+ export declare const createIssue: (args: {
21
+ title: string;
22
+ projectIdentifier: string;
23
+ priority: "Medium" | "NoPriority" | "Urgent" | "High" | "Low";
24
+ statusName?: string | undefined;
25
+ dueDate?: string | undefined;
26
+ }) => Promise<{
27
+ content: Array<{
28
+ type: "text";
29
+ text: string;
30
+ }>;
31
+ }>;
32
+ export declare const deleteIssue: (args: {
33
+ identifier: string;
34
+ }) => Promise<{
35
+ content: Array<{
36
+ type: "text";
37
+ text: string;
38
+ }>;
39
+ }>;
40
+ export declare const updateIssue: (args: {
41
+ identifier: string;
42
+ title?: string | undefined;
43
+ priority?: "Medium" | "NoPriority" | "Urgent" | "High" | "Low" | undefined;
44
+ statusName?: string | undefined;
45
+ dueDate?: string | null | undefined;
46
+ }) => Promise<{
47
+ content: Array<{
48
+ type: "text";
49
+ text: string;
50
+ }>;
51
+ }>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.updateIssue = exports.deleteIssue = exports.createIssue = exports.getIssue = exports.listIssues = void 0;
40
+ const tracker_1 = __importStar(require("@hcengineering/tracker"));
41
+ const task_1 = __importDefault(require("@hcengineering/task"));
42
+ const core_1 = require("@hcengineering/core");
43
+ const rank_1 = require("@hcengineering/rank");
44
+ const connection_1 = require("../connection");
45
+ const errors_1 = require("../utils/errors");
46
+ const format_1 = require("../utils/format");
47
+ exports.listIssues = (0, errors_1.wrapToolHandler)(async (args) => {
48
+ const client = await (0, connection_1.getConnection)();
49
+ const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
50
+ if (project == null)
51
+ throw new Error(`Project '${args.projectIdentifier}' not found.`);
52
+ const query = { space: project._id };
53
+ if (args.status != null) {
54
+ const status = await client.findOne(tracker_1.default.class.IssueStatus, { space: project._id, name: args.status });
55
+ if (status == null)
56
+ throw new Error(`Status '${args.status}' not found in project '${args.projectIdentifier}'.`);
57
+ query.status = status._id;
58
+ }
59
+ if (args.priority != null) {
60
+ query.priority = tracker_1.IssuePriority[args.priority];
61
+ }
62
+ const issues = await client.findAll(tracker_1.default.class.Issue, query, { limit: args.limit, sort: { modifiedOn: core_1.SortingOrder.Descending } });
63
+ if (issues.length === 0)
64
+ return `No issues found in project ${args.projectIdentifier}.`;
65
+ // Resolve all statuses in one call
66
+ const statuses = await client.findAll(tracker_1.default.class.IssueStatus, { space: project._id });
67
+ const statusMap = new Map(statuses.map((s) => [s._id, s.name]));
68
+ const lines = issues.map((issue) => {
69
+ const statusName = statusMap.get(issue.status) ?? 'Unknown';
70
+ const due = issue.dueDate != null ? ` | Due: ${(0, format_1.formatDate)(issue.dueDate)}` : '';
71
+ return `- **${issue.identifier}** [${statusName}] [${(0, format_1.priorityLabel)(issue.priority)}]${due}\n ${issue.title}`;
72
+ });
73
+ return `## Issues in ${args.projectIdentifier} (${issues.length})\n\n${lines.join('\n')}`;
74
+ });
75
+ exports.getIssue = (0, errors_1.wrapToolHandler)(async (args) => {
76
+ const client = await (0, connection_1.getConnection)();
77
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
78
+ if (issue == null)
79
+ throw new Error(`Issue '${args.identifier}' not found.`);
80
+ const status = await client.findOne(tracker_1.default.class.IssueStatus, { _id: issue.status });
81
+ return [
82
+ `## ${issue.identifier}: ${issue.title}`,
83
+ `**Status:** ${status?.name ?? 'Unknown'}`,
84
+ `**Priority:** ${(0, format_1.priorityLabel)(issue.priority)}`,
85
+ `**Due date:** ${(0, format_1.formatDate)(issue.dueDate)}`,
86
+ `**Comments:** ${issue.comments ?? 0}`,
87
+ `**Sub-issues:** ${issue.subIssues ?? 0}`,
88
+ `**Estimation:** ${issue.estimation > 0 ? `${issue.estimation}h` : 'None'}`,
89
+ `**Reported time:** ${issue.reportedTime > 0 ? `${issue.reportedTime}h` : 'None'}`
90
+ ].join('\n');
91
+ });
92
+ exports.createIssue = (0, errors_1.wrapToolHandler)(async (args) => {
93
+ const client = await (0, connection_1.getConnection)();
94
+ // 1. Find project
95
+ const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
96
+ if (project == null)
97
+ throw new Error(`Project '${args.projectIdentifier}' not found.`);
98
+ // 2. Increment sequence counter
99
+ const incResult = await client.updateDoc(tracker_1.default.class.Project, project.space, project._id, { $inc: { sequence: 1 } }, true);
100
+ const issueNumber = incResult?.object?.sequence ?? project.sequence + 1;
101
+ const identifier = `${project.identifier}-${issueNumber}`;
102
+ // 3. Resolve status
103
+ const statuses = await client.findAll(tracker_1.default.class.IssueStatus, { space: project._id });
104
+ const status = args.statusName != null
105
+ ? (statuses.find((s) => s.name === args.statusName) ?? statuses[0])
106
+ : (project.defaultIssueStatus != null
107
+ ? (statuses.find((s) => s._id === project.defaultIssueStatus) ?? statuses[0])
108
+ : statuses[0]);
109
+ if (status == null)
110
+ throw new Error(`No statuses found in project '${args.projectIdentifier}'.`);
111
+ // 4. Find TaskType (kind field — required)
112
+ const kind = await client.findOne(task_1.default.class.TaskType, project.type != null ? { parent: project.type } : {});
113
+ if (kind == null)
114
+ throw new Error('Could not find a TaskType for this project.');
115
+ // 5. Compute rank (append after last issue)
116
+ const lastIssue = await client.findOne(tracker_1.default.class.Issue, { space: project._id }, { sort: { rank: core_1.SortingOrder.Descending } });
117
+ const rank = (0, rank_1.makeRank)(lastIssue?.rank, undefined);
118
+ // 6. Create via addCollection (issues are AttachedDoc)
119
+ const issueId = (0, core_1.generateId)();
120
+ await client.addCollection(tracker_1.default.class.Issue, project._id, tracker_1.default.ids.NoParent, tracker_1.default.class.Issue, 'subIssues', {
121
+ title: args.title,
122
+ description: null,
123
+ status: status._id,
124
+ priority: tracker_1.IssuePriority[args.priority],
125
+ number: issueNumber,
126
+ identifier,
127
+ rank,
128
+ kind: kind._id,
129
+ comments: 0,
130
+ subIssues: 0,
131
+ dueDate: args.dueDate != null ? new Date(args.dueDate).getTime() : null,
132
+ assignee: null,
133
+ component: null,
134
+ milestone: null,
135
+ parents: [],
136
+ remainingTime: 0,
137
+ estimation: 0,
138
+ reportedTime: 0,
139
+ reports: 0,
140
+ childInfo: [],
141
+ relations: []
142
+ }, issueId);
143
+ return `✅ Created **${identifier}**: ${args.title}\nStatus: ${status.name} | Priority: ${(0, format_1.priorityLabel)(tracker_1.IssuePriority[args.priority])}`;
144
+ });
145
+ exports.deleteIssue = (0, errors_1.wrapToolHandler)(async (args) => {
146
+ const client = await (0, connection_1.getConnection)();
147
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
148
+ if (issue == null)
149
+ throw new Error(`Issue '${args.identifier}' not found.`);
150
+ await client.removeCollection(tracker_1.default.class.Issue, issue.space, issue._id, issue.attachedTo, issue.attachedToClass, issue.collection);
151
+ return `✅ Deleted **${args.identifier}**: ${issue.title}`;
152
+ });
153
+ exports.updateIssue = (0, errors_1.wrapToolHandler)(async (args) => {
154
+ const client = await (0, connection_1.getConnection)();
155
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
156
+ if (issue == null)
157
+ throw new Error(`Issue '${args.identifier}' not found.`);
158
+ const updates = {};
159
+ if (args.title != null)
160
+ updates.title = args.title;
161
+ if (args.statusName != null) {
162
+ const status = await client.findOne(tracker_1.default.class.IssueStatus, { space: issue.space, name: args.statusName });
163
+ if (status == null)
164
+ throw new Error(`Status '${args.statusName}' not found.`);
165
+ updates.status = status._id;
166
+ }
167
+ if (args.priority != null) {
168
+ updates.priority = tracker_1.IssuePriority[args.priority];
169
+ }
170
+ if (args.dueDate !== undefined) {
171
+ updates.dueDate = args.dueDate != null ? new Date(args.dueDate).getTime() : null;
172
+ }
173
+ if (Object.keys(updates).length === 0)
174
+ return `No changes made to ${args.identifier}.`;
175
+ await client.updateDoc(tracker_1.default.class.Issue, issue.space, issue._id, updates);
176
+ const changed = Object.keys(updates).join(', ');
177
+ return `✅ Updated **${args.identifier}** — changed: ${changed}`;
178
+ });
179
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export declare const listLabels: (args: {
2
+ projectIdentifier?: string | undefined;
3
+ }) => Promise<{
4
+ content: Array<{
5
+ type: "text";
6
+ text: string;
7
+ }>;
8
+ }>;
9
+ export declare const createLabel: (args: {
10
+ title: string;
11
+ color?: string | undefined;
12
+ }) => Promise<{
13
+ content: Array<{
14
+ type: "text";
15
+ text: string;
16
+ }>;
17
+ }>;
18
+ export declare const addLabel: (args: {
19
+ identifier: string;
20
+ labelName: string;
21
+ }) => Promise<{
22
+ content: Array<{
23
+ type: "text";
24
+ text: string;
25
+ }>;
26
+ }>;
27
+ export declare const removeLabel: (args: {
28
+ identifier: string;
29
+ labelName: string;
30
+ }) => Promise<{
31
+ content: Array<{
32
+ type: "text";
33
+ text: string;
34
+ }>;
35
+ }>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.removeLabel = exports.addLabel = exports.createLabel = exports.listLabels = void 0;
40
+ const tags_1 = __importDefault(require("@hcengineering/tags"));
41
+ const tracker_1 = __importDefault(require("@hcengineering/tracker"));
42
+ const core_1 = __importStar(require("@hcengineering/core"));
43
+ const connection_1 = require("../connection");
44
+ const errors_1 = require("../utils/errors");
45
+ exports.listLabels = (0, errors_1.wrapToolHandler)(async (args) => {
46
+ const client = await (0, connection_1.getConnection)();
47
+ const query = args.projectIdentifier != null
48
+ ? { targetClass: tracker_1.default.class.Issue }
49
+ : { targetClass: tracker_1.default.class.Issue };
50
+ const allLabels = await client.findAll(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue });
51
+ if (allLabels.length === 0)
52
+ return 'No labels found in this workspace.';
53
+ const lines = allLabels.map((l) => {
54
+ const color = l.color != null ? ` (color: #${l.color.toString(16).padStart(6, '0')})` : '';
55
+ return `- **${l.title}**${color} — used ${l.refCount ?? 0} time(s) | id: \`${l._id}\``;
56
+ });
57
+ return `## Labels (${allLabels.length})\n\n${lines.join('\n')}`;
58
+ });
59
+ exports.createLabel = (0, errors_1.wrapToolHandler)(async (args) => {
60
+ const client = await (0, connection_1.getConnection)();
61
+ // Check if label already exists
62
+ const existing = await client.findOne(tags_1.default.class.TagElement, {
63
+ targetClass: tracker_1.default.class.Issue,
64
+ title: args.title
65
+ });
66
+ if (existing != null) {
67
+ return `Label **${args.title}** already exists (id: \`${existing._id}\`).`;
68
+ }
69
+ // Find or use the default no-category
70
+ const category = await client.findOne(tags_1.default.class.TagCategory, {
71
+ targetClass: tracker_1.default.class.Issue
72
+ });
73
+ const labelId = (0, core_1.generateId)();
74
+ await client.createDoc(tags_1.default.class.TagElement, core_1.default.space.Workspace, {
75
+ title: args.title,
76
+ targetClass: tracker_1.default.class.Issue,
77
+ description: '',
78
+ color: args.color != null ? parseInt(args.color.replace('#', ''), 16) : 8,
79
+ category: category?._id ?? tags_1.default.category.NoCategory,
80
+ refCount: 0
81
+ }, labelId);
82
+ return `✅ Created label **${args.title}** (id: \`${labelId}\`)`;
83
+ });
84
+ exports.addLabel = (0, errors_1.wrapToolHandler)(async (args) => {
85
+ const client = await (0, connection_1.getConnection)();
86
+ // Find issue
87
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
88
+ if (issue == null)
89
+ throw new Error(`Issue '${args.identifier}' not found.`);
90
+ // Find label by name or create it
91
+ let label = await client.findOne(tags_1.default.class.TagElement, {
92
+ targetClass: tracker_1.default.class.Issue,
93
+ title: args.labelName
94
+ });
95
+ if (label == null) {
96
+ // Auto-create label
97
+ const category = await client.findOne(tags_1.default.class.TagCategory, {
98
+ targetClass: tracker_1.default.class.Issue
99
+ });
100
+ const labelId = (0, core_1.generateId)();
101
+ await client.createDoc(tags_1.default.class.TagElement, core_1.default.space.Workspace, {
102
+ title: args.labelName,
103
+ targetClass: tracker_1.default.class.Issue,
104
+ description: '',
105
+ color: 8,
106
+ category: category?._id ?? tags_1.default.category.NoCategory,
107
+ refCount: 0
108
+ }, labelId);
109
+ label = await client.findOne(tags_1.default.class.TagElement, { _id: labelId });
110
+ if (label == null)
111
+ throw new Error(`Failed to create label '${args.labelName}'.`);
112
+ }
113
+ // Check if already attached
114
+ const existing = await client.findOne(tags_1.default.class.TagReference, {
115
+ attachedTo: issue._id,
116
+ tag: label._id
117
+ });
118
+ if (existing != null) {
119
+ return `Label **${args.labelName}** is already on **${args.identifier}**.`;
120
+ }
121
+ // Attach label via addCollection
122
+ await client.addCollection(tags_1.default.class.TagReference, issue.space, issue._id, tracker_1.default.class.Issue, 'labels', {
123
+ tag: label._id,
124
+ title: label.title,
125
+ color: label.color
126
+ });
127
+ return `✅ Added label **${args.labelName}** to **${args.identifier}**`;
128
+ });
129
+ exports.removeLabel = (0, errors_1.wrapToolHandler)(async (args) => {
130
+ const client = await (0, connection_1.getConnection)();
131
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
132
+ if (issue == null)
133
+ throw new Error(`Issue '${args.identifier}' not found.`);
134
+ const label = await client.findOne(tags_1.default.class.TagElement, {
135
+ targetClass: tracker_1.default.class.Issue,
136
+ title: args.labelName
137
+ });
138
+ if (label == null)
139
+ throw new Error(`Label '${args.labelName}' not found.`);
140
+ const ref = await client.findOne(tags_1.default.class.TagReference, {
141
+ attachedTo: issue._id,
142
+ tag: label._id
143
+ });
144
+ if (ref == null) {
145
+ return `Label **${args.labelName}** is not on **${args.identifier}**.`;
146
+ }
147
+ await client.removeCollection(tags_1.default.class.TagReference, issue.space, ref._id, issue._id, tracker_1.default.class.Issue, 'labels');
148
+ return `✅ Removed label **${args.labelName}** from **${args.identifier}**`;
149
+ });
150
+ //# sourceMappingURL=labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/tools/labels.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAsC;AACtC,qEAA4C;AAC5C,4DAAgE;AAEhE,8CAA6C;AAC7C,4CAAiD;AASpC,QAAA,UAAU,GAAG,IAAA,wBAAe,EAAmC,KAAK,EAAE,IAAI,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI;QAC1C,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE;QACtC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAExC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAEnG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oCAAoC,CAAA;IAEvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1F,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,WAAW,CAAC,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,IAAI,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF,OAAO,cAAc,SAAS,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACjE,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IAEpC,gCAAgC;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAC3D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAA;IACF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,WAAW,IAAI,CAAC,KAAK,4BAA4B,QAAQ,CAAC,GAAG,MAAM,CAAA;IAC5E,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC5D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;KACjC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAA,iBAAU,GAAc,CAAA;IACxC,MAAM,MAAM,CAAC,SAAS,CACpB,cAAI,CAAC,KAAK,CAAC,UAAU,EACrB,cAAI,CAAC,KAAK,CAAC,SAAS,EACpB;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,cAAI,CAAC,QAAQ,CAAC,UAAU;QACnD,QAAQ,EAAE,CAAC;KACZ,EACD,OAAO,CACR,CAAA;IAED,OAAO,qBAAqB,IAAI,CAAC,KAAK,aAAa,OAAO,KAAK,CAAA;AACjE,CAAC,CAAC,CAAA;AAEW,QAAA,QAAQ,GAAG,IAAA,wBAAe,EAAiC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IAEpC,aAAa;IACb,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,kCAAkC;IAClC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACtD,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,SAAS;KACtB,CAAC,CAAA;IAEF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAC5D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;SACjC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,IAAA,iBAAU,GAAc,CAAA;QACxC,MAAM,MAAM,CAAC,SAAS,CACpB,cAAI,CAAC,KAAK,CAAC,UAAU,EACrB,cAAI,CAAC,KAAK,CAAC,SAAS,EACpB;YACE,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;YAChC,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,cAAI,CAAC,QAAQ,CAAC,UAAU;YACnD,QAAQ,EAAE,CAAC;SACZ,EACD,OAAO,CACR,CAAA;QACD,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QACrE,IAAI,KAAK,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;IACnF,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAC7D,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAA;IACF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,WAAW,IAAI,CAAC,SAAS,sBAAsB,IAAI,CAAC,UAAU,KAAK,CAAA;IAC5E,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,CAAC,aAAa,CACxB,cAAI,CAAC,KAAK,CAAC,YAAY,EACvB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,QAAQ,EACR;QACE,GAAG,EAAE,KAAK,CAAC,GAAsB;QACjC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CACF,CAAA;IAED,OAAO,mBAAmB,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,UAAU,IAAI,CAAA;AACxE,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,GAAE,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxD,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,SAAS;KACtB,CAAC,CAAA;IACF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,cAAc,CAAC,CAAA;IAE1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QACxD,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAA;IACF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,WAAW,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC,UAAU,KAAK,CAAA;IACxE,CAAC;IAED,MAAM,MAAM,CAAC,gBAAgB,CAC3B,cAAI,CAAC,KAAK,CAAC,YAAY,EACvB,KAAK,CAAC,KAAK,EACX,GAAG,CAAC,GAAG,EACP,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,QAAQ,CACT,CAAA;IAED,OAAO,qBAAqB,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC,UAAU,IAAI,CAAA;AAC5E,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const listMembers: (args: Record<string, never>) => Promise<{
2
+ content: Array<{
3
+ type: "text";
4
+ text: string;
5
+ }>;
6
+ }>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listMembers = void 0;
4
+ const connection_1 = require("../connection");
5
+ const errors_1 = require("../utils/errors");
6
+ exports.listMembers = (0, errors_1.wrapToolHandler)(async () => {
7
+ const accountClient = await (0, connection_1.getAccountClient)();
8
+ const members = await accountClient.getWorkspaceMembers();
9
+ if (members.length === 0)
10
+ return 'No members found in this workspace.';
11
+ const lines = members.map((m) => {
12
+ const role = String(m.role ?? 'member');
13
+ return `- \`${m.person}\` — role: **${role}**`;
14
+ });
15
+ return `## Workspace Members (${members.length})\n\n${lines.join('\n')}`;
16
+ });
17
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":";;;AAAA,8CAAgD;AAChD,4CAAiD;AAEpC,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAwB,KAAK,IAAI,EAAE;IAC3E,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAgB,GAAE,CAAA;IAC9C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qCAAqC,CAAA;IAEtE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;QACvC,OAAO,OAAO,CAAC,CAAC,MAAM,gBAAgB,IAAI,IAAI,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,OAAO,yBAAyB,OAAO,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export declare const listMilestones: (args: {
2
+ projectIdentifier: string;
3
+ }) => Promise<{
4
+ content: Array<{
5
+ type: "text";
6
+ text: string;
7
+ }>;
8
+ }>;