huly-mcp-selfhost 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +16 -0
- package/README.md +522 -0
- package/dist/connection.d.ts +9 -0
- package/dist/connection.js +122 -0
- package/dist/connection.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +459 -0
- package/dist/schemas.js +196 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +87 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/attachments.d.ts +28 -0
- package/dist/tools/attachments.js +61 -0
- package/dist/tools/attachments.js.map +1 -0
- package/dist/tools/channels.d.ts +44 -0
- package/dist/tools/channels.js +130 -0
- package/dist/tools/channels.js.map +1 -0
- package/dist/tools/comments.d.ts +27 -0
- package/dist/tools/comments.js +60 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/components.d.ts +19 -0
- package/dist/tools/components.js +57 -0
- package/dist/tools/components.js.map +1 -0
- package/dist/tools/documents.d.ts +68 -0
- package/dist/tools/documents.js +207 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/issues.d.ts +56 -0
- package/dist/tools/issues.js +262 -0
- package/dist/tools/issues.js.map +1 -0
- package/dist/tools/labels.d.ts +35 -0
- package/dist/tools/labels.js +150 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/log-time.d.ts +10 -0
- package/dist/tools/log-time.js +31 -0
- package/dist/tools/log-time.js.map +1 -0
- package/dist/tools/members.d.ts +6 -0
- package/dist/tools/members.js +17 -0
- package/dist/tools/members.js.map +1 -0
- package/dist/tools/milestones.d.ts +19 -0
- package/dist/tools/milestones.js +80 -0
- package/dist/tools/milestones.js.map +1 -0
- package/dist/tools/organizations.d.ts +32 -0
- package/dist/tools/organizations.js +86 -0
- package/dist/tools/organizations.js.map +1 -0
- package/dist/tools/projects.d.ts +24 -0
- package/dist/tools/projects.js +64 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/relations.d.ts +27 -0
- package/dist/tools/relations.js +103 -0
- package/dist/tools/relations.js.map +1 -0
- package/dist/tools/search.d.ts +9 -0
- package/dist/tools/search.js +32 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/statuses.d.ts +16 -0
- package/dist/tools/statuses.js +93 -0
- package/dist/tools/statuses.js.map +1 -0
- package/dist/utils/errors.d.ts +11 -0
- package/dist/utils/errors.js +24 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/format.d.ts +4 -0
- package/dist/utils/format.js +28 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/markdown.d.ts +14 -0
- package/dist/utils/markdown.js +144 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/storage.d.ts +7 -0
- package/dist/utils/storage.js +82 -0
- package/dist/utils/storage.js.map +1 -0
- package/package.json +68 -0
- package/scripts/cleanup-issues.js +132 -0
- package/scripts/demo.js +193 -0
- package/scripts/import-csv.js +242 -0
- package/scripts/sample-tasks.csv +11 -0
- package/scripts/setup.js +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
package/dist/server.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
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 log_time_1 = require("./tools/log-time");
|
|
9
|
+
const members_1 = require("./tools/members");
|
|
10
|
+
const milestones_1 = require("./tools/milestones");
|
|
11
|
+
const documents_1 = require("./tools/documents");
|
|
12
|
+
const search_1 = require("./tools/search");
|
|
13
|
+
const labels_1 = require("./tools/labels");
|
|
14
|
+
const relations_1 = require("./tools/relations");
|
|
15
|
+
const components_1 = require("./tools/components");
|
|
16
|
+
const channels_1 = require("./tools/channels");
|
|
17
|
+
const attachments_1 = require("./tools/attachments");
|
|
18
|
+
const statuses_1 = require("./tools/statuses");
|
|
19
|
+
const organizations_1 = require("./tools/organizations");
|
|
20
|
+
const schemas_1 = require("./schemas");
|
|
21
|
+
function createServer() {
|
|
22
|
+
const server = new mcp_js_1.McpServer({ name: 'huly-mcp-selfhost', version: '1.0.0' });
|
|
23
|
+
// Projects
|
|
24
|
+
server.tool('list_projects', 'List all projects in the Huly workspace', {}, projects_1.listProjects);
|
|
25
|
+
server.tool('get_project', 'Get a project by its identifier (e.g. "PROJ")', schemas_1.GetProjectSchema.shape, projects_1.getProject);
|
|
26
|
+
server.tool('create_project', 'Create a new tracker project with a unique ALL-CAPS identifier', schemas_1.CreateProjectSchema.shape, projects_1.createProject);
|
|
27
|
+
// Issues
|
|
28
|
+
server.tool('list_issues', 'List issues in a project with optional filters', schemas_1.ListIssuesSchema.shape, issues_1.listIssues);
|
|
29
|
+
server.tool('get_issue', 'Get full details of an issue by identifier (e.g. "PROJ-123")', schemas_1.GetIssueSchema.shape, issues_1.getIssue);
|
|
30
|
+
server.tool('create_issue', 'Create a new issue in a project', schemas_1.CreateIssueSchema.shape, issues_1.createIssue);
|
|
31
|
+
server.tool('update_issue', 'Update an existing issue (title, status, priority, due date, assignee, component, milestone)', schemas_1.UpdateIssueSchema.shape, issues_1.updateIssue);
|
|
32
|
+
server.tool('delete_issue', 'Permanently delete an issue by identifier (e.g. "PROJ-123")', schemas_1.DeleteIssueSchema.shape, issues_1.deleteIssue);
|
|
33
|
+
// Comments
|
|
34
|
+
server.tool('add_comment', 'Add a comment to an issue', schemas_1.AddCommentSchema.shape, comments_1.addComment);
|
|
35
|
+
server.tool('list_comments', 'List all comments on an issue (includes comment IDs for use with delete_comment)', schemas_1.ListCommentsSchema.shape, comments_1.listComments);
|
|
36
|
+
server.tool('delete_comment', 'Delete a specific comment from an issue by its ID (get IDs from list_comments)', schemas_1.DeleteCommentSchema.shape, comments_1.deleteComment);
|
|
37
|
+
// Time tracking
|
|
38
|
+
server.tool('log_time', 'Log hours spent on an issue', schemas_1.LogTimeSchema.shape, log_time_1.logTime);
|
|
39
|
+
// Labels
|
|
40
|
+
server.tool('list_labels', 'List all labels in the workspace', schemas_1.ListLabelsSchema.shape, labels_1.listLabels);
|
|
41
|
+
server.tool('create_label', 'Create a new label with an optional hex color', schemas_1.CreateLabelSchema.shape, labels_1.createLabel);
|
|
42
|
+
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);
|
|
43
|
+
server.tool('remove_label', 'Remove a label from an issue', schemas_1.RemoveLabelSchema.shape, labels_1.removeLabel);
|
|
44
|
+
// Relations
|
|
45
|
+
server.tool('add_relation', 'Mark two issues as related to each other (bidirectional)', schemas_1.AddRelationSchema.shape, relations_1.addRelation);
|
|
46
|
+
server.tool('add_blocked_by', 'Mark an issue as blocked by another issue', schemas_1.AddBlockedBySchema.shape, relations_1.addBlockedBy);
|
|
47
|
+
server.tool('set_parent', 'Set or clear the parent (epic) of an issue', schemas_1.SetParentSchema.shape, relations_1.setParent);
|
|
48
|
+
// Members
|
|
49
|
+
server.tool('list_members', 'List all members in the workspace', {}, members_1.listMembers);
|
|
50
|
+
// Milestones
|
|
51
|
+
server.tool('list_milestones', 'List milestones for a project', schemas_1.ListMilestonesSchema.shape, milestones_1.listMilestones);
|
|
52
|
+
server.tool('create_milestone', 'Create a new milestone in a project with a target date', schemas_1.CreateMilestoneSchema.shape, milestones_1.createMilestone);
|
|
53
|
+
// Components
|
|
54
|
+
server.tool('list_components', 'List components (sub-areas) in a project', schemas_1.ListComponentsSchema.shape, components_1.listComponents);
|
|
55
|
+
server.tool('create_component', 'Create a new component in a project', schemas_1.CreateComponentSchema.shape, components_1.createComponent);
|
|
56
|
+
// Documents
|
|
57
|
+
server.tool('list_teamspaces', 'List all document teamspaces in the workspace', {}, documents_1.listTeamspaces);
|
|
58
|
+
server.tool('create_teamspace', 'Create a new document teamspace (a top-level folder for documents)', schemas_1.CreateTeamspaceSchema.shape, documents_1.createTeamspace);
|
|
59
|
+
server.tool('list_documents', 'List documents in a teamspace', schemas_1.ListDocumentsSchema.shape, documents_1.listDocuments);
|
|
60
|
+
server.tool('get_document', 'Get metadata and content of a document (content requires HULY_FRONT_URL env)', schemas_1.GetDocumentSchema.shape, documents_1.getDocument);
|
|
61
|
+
server.tool('create_document', 'Create a new document in a teamspace', schemas_1.CreateDocumentSchema.shape, documents_1.createDocument);
|
|
62
|
+
server.tool('delete_document', 'Permanently delete a document by its ID', schemas_1.DeleteDocumentSchema.shape, documents_1.deleteDocument);
|
|
63
|
+
server.tool('update_document', 'Set or replace the content of a document from Markdown (supports headings, paragraphs, code blocks, tables, bullet lists)', schemas_1.UpdateDocumentSchema.shape, documents_1.updateDocument);
|
|
64
|
+
server.tool('link_document', 'Link a Huly document to an issue — appears in the Relations panel on the issue', schemas_1.LinkDocumentSchema.shape, documents_1.linkDocument);
|
|
65
|
+
// Search
|
|
66
|
+
server.tool('search_issues', 'Full-text search across all issues', schemas_1.SearchIssuesSchema.shape, search_1.searchIssues);
|
|
67
|
+
// Chat (Channels & Direct Messages)
|
|
68
|
+
server.tool('list_channels', 'List all channels in the workspace', schemas_1.ListChannelsSchema.shape, channels_1.listChannels);
|
|
69
|
+
server.tool('create_channel', 'Create a new channel', schemas_1.CreateChannelSchema.shape, channels_1.createChannel);
|
|
70
|
+
server.tool('start_direct_message', 'Start (or find) a 1:1 direct message with a workspace member', schemas_1.StartDirectMessageSchema.shape, channels_1.startDirectMessage);
|
|
71
|
+
server.tool('send_message', 'Send a message to a channel or direct message', schemas_1.SendMessageSchema.shape, channels_1.sendMessage);
|
|
72
|
+
server.tool('list_messages', 'List messages in a channel or direct message', schemas_1.ListMessagesSchema.shape, channels_1.listMessages);
|
|
73
|
+
// Attachments
|
|
74
|
+
server.tool('attach_file', 'Attach a file to an issue (base64-encoded content)', schemas_1.AttachFileSchema.shape, attachments_1.attachFile);
|
|
75
|
+
server.tool('list_attachments', 'List files attached to an issue', schemas_1.ListAttachmentsSchema.shape, attachments_1.listAttachments);
|
|
76
|
+
server.tool('delete_attachment', 'Delete a file attachment from an issue', schemas_1.DeleteAttachmentSchema.shape, attachments_1.deleteAttachment);
|
|
77
|
+
// Issue Statuses (custom workflow states)
|
|
78
|
+
server.tool('list_issue_statuses', 'List all issue statuses (workflow states), grouped by phase', {}, statuses_1.listIssueStatuses);
|
|
79
|
+
server.tool('create_issue_status', 'Create a new issue status — becomes available in every project immediately', schemas_1.CreateIssueStatusSchema.shape, statuses_1.createIssueStatus);
|
|
80
|
+
// Organizations (contacts/CRM)
|
|
81
|
+
server.tool('list_organizations', 'List all organizations (companies) in the workspace', {}, organizations_1.listOrganizations);
|
|
82
|
+
server.tool('get_organization', 'Get details of an organization, including description', schemas_1.GetOrganizationSchema.shape, organizations_1.getOrganization);
|
|
83
|
+
server.tool('create_organization', 'Create a new organization (company contact)', schemas_1.CreateOrganizationSchema.shape, organizations_1.createOrganization);
|
|
84
|
+
server.tool('update_organization', 'Set the description of an organization from Markdown', schemas_1.UpdateOrganizationSchema.shape, organizations_1.updateOrganization);
|
|
85
|
+
return server;
|
|
86
|
+
}
|
|
87
|
+
//# 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,28 @@
|
|
|
1
|
+
export declare const attachFile: (args: {
|
|
2
|
+
identifier: string;
|
|
3
|
+
filename: string;
|
|
4
|
+
contentBase64: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
}) => Promise<{
|
|
7
|
+
content: Array<{
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
export declare const listAttachments: (args: {
|
|
13
|
+
identifier: string;
|
|
14
|
+
}) => Promise<{
|
|
15
|
+
content: Array<{
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const deleteAttachment: (args: {
|
|
21
|
+
identifier: string;
|
|
22
|
+
attachmentId: string;
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
@@ -0,0 +1,61 @@
|
|
|
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.deleteAttachment = exports.listAttachments = exports.attachFile = void 0;
|
|
7
|
+
const attachment_1 = __importDefault(require("@hcengineering/attachment"));
|
|
8
|
+
const tracker_1 = __importDefault(require("@hcengineering/tracker"));
|
|
9
|
+
const core_1 = require("@hcengineering/core");
|
|
10
|
+
const connection_1 = require("../connection");
|
|
11
|
+
const errors_1 = require("../utils/errors");
|
|
12
|
+
const storage_1 = require("../utils/storage");
|
|
13
|
+
const format_1 = require("../utils/format");
|
|
14
|
+
function base64ToBlob(base64, mimeType) {
|
|
15
|
+
const binary = Buffer.from(base64, 'base64');
|
|
16
|
+
return new Blob([binary], { type: mimeType });
|
|
17
|
+
}
|
|
18
|
+
exports.attachFile = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
19
|
+
const client = await (0, connection_1.getConnection)();
|
|
20
|
+
const { wsToken, workspaceUuid } = await (0, connection_1.getWorkspaceInfo)();
|
|
21
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
22
|
+
if (issue == null)
|
|
23
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
24
|
+
const blob = base64ToBlob(args.contentBase64, args.mimeType);
|
|
25
|
+
const blobId = `${issue._id}-attachment-${Date.now()}-${args.filename}`;
|
|
26
|
+
const uploaded = await (0, storage_1.uploadBlob)(wsToken, workspaceUuid, blobId, blob);
|
|
27
|
+
const attachmentId = (0, core_1.generateId)();
|
|
28
|
+
await client.addCollection(attachment_1.default.class.Attachment, issue.space, issue._id, tracker_1.default.class.Issue, 'attachments', {
|
|
29
|
+
name: args.filename,
|
|
30
|
+
file: uploaded.id,
|
|
31
|
+
size: uploaded.size,
|
|
32
|
+
type: args.mimeType,
|
|
33
|
+
lastModified: Date.now()
|
|
34
|
+
}, attachmentId);
|
|
35
|
+
return `✅ File **"${args.filename}"** (${uploaded.size} bytes) attached to **${args.identifier}** (attachment id: \`${attachmentId}\`).`;
|
|
36
|
+
});
|
|
37
|
+
exports.listAttachments = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
38
|
+
const client = await (0, connection_1.getConnection)();
|
|
39
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
40
|
+
if (issue == null)
|
|
41
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
42
|
+
const attachments = await client.findAll(attachment_1.default.class.Attachment, { attachedTo: issue._id });
|
|
43
|
+
if (attachments.length === 0)
|
|
44
|
+
return `No attachments found on **${args.identifier}**.`;
|
|
45
|
+
const lines = attachments.map((a) => `- **${a.name}** (id: \`${a._id}\`, ${a.size} bytes, ${a.type}) — added ${(0, format_1.formatDate)(a.modifiedOn)}`);
|
|
46
|
+
return `## Attachments on ${args.identifier} (${attachments.length})\n\n${lines.join('\n')}`;
|
|
47
|
+
});
|
|
48
|
+
exports.deleteAttachment = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
49
|
+
const client = await (0, connection_1.getConnection)();
|
|
50
|
+
const { wsToken, workspaceUuid } = await (0, connection_1.getWorkspaceInfo)();
|
|
51
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
52
|
+
if (issue == null)
|
|
53
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
54
|
+
const att = await client.findOne(attachment_1.default.class.Attachment, { _id: args.attachmentId });
|
|
55
|
+
if (att == null)
|
|
56
|
+
throw new Error(`Attachment '${args.attachmentId}' not found.`);
|
|
57
|
+
await client.removeCollection(attachment_1.default.class.Attachment, issue.space, att._id, issue._id, tracker_1.default.class.Issue, 'attachments');
|
|
58
|
+
await (0, storage_1.deleteBlob)(wsToken, workspaceUuid, String(att.file));
|
|
59
|
+
return `✅ Attachment **"${att.name}"** deleted from **${args.identifier}**.`;
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const listChannels: (args: {
|
|
2
|
+
includeArchived: boolean;
|
|
3
|
+
}) => Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: "text";
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const createChannel: (args: {
|
|
10
|
+
name: string;
|
|
11
|
+
isPrivate: boolean;
|
|
12
|
+
topic?: string | undefined;
|
|
13
|
+
}) => Promise<{
|
|
14
|
+
content: Array<{
|
|
15
|
+
type: "text";
|
|
16
|
+
text: string;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const startDirectMessage: (args: {
|
|
20
|
+
member: string;
|
|
21
|
+
}) => Promise<{
|
|
22
|
+
content: Array<{
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}>;
|
|
26
|
+
}>;
|
|
27
|
+
export declare const sendMessage: (args: {
|
|
28
|
+
message: string;
|
|
29
|
+
spaceId: string;
|
|
30
|
+
}) => Promise<{
|
|
31
|
+
content: Array<{
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}>;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const listMessages: (args: {
|
|
37
|
+
limit: number;
|
|
38
|
+
spaceId: string;
|
|
39
|
+
}) => Promise<{
|
|
40
|
+
content: Array<{
|
|
41
|
+
type: "text";
|
|
42
|
+
text: string;
|
|
43
|
+
}>;
|
|
44
|
+
}>;
|
|
@@ -0,0 +1,130 @@
|
|
|
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.listMessages = exports.sendMessage = exports.startDirectMessage = exports.createChannel = exports.listChannels = void 0;
|
|
40
|
+
const chunter_1 = __importDefault(require("@hcengineering/chunter"));
|
|
41
|
+
const contact_1 = __importDefault(require("@hcengineering/contact"));
|
|
42
|
+
const core_1 = __importStar(require("@hcengineering/core"));
|
|
43
|
+
const connection_1 = require("../connection");
|
|
44
|
+
const errors_1 = require("../utils/errors");
|
|
45
|
+
const format_1 = require("../utils/format");
|
|
46
|
+
exports.listChannels = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
47
|
+
const client = await (0, connection_1.getConnection)();
|
|
48
|
+
const query = {};
|
|
49
|
+
if (!args.includeArchived)
|
|
50
|
+
query.archived = false;
|
|
51
|
+
const channels = await client.findAll(chunter_1.default.class.Channel, query);
|
|
52
|
+
if (channels.length === 0)
|
|
53
|
+
return 'No channels found in this workspace.';
|
|
54
|
+
const lines = channels.map((c) => `- **#${c.name}** (id: \`${c._id}\`)${c.topic != null && c.topic !== '' ? ` — ${c.topic}` : ''}${c.private === true ? ' 🔒' : ''} — ${c.messages ?? 0} messages`);
|
|
55
|
+
return `## Channels (${channels.length})\n\n${lines.join('\n')}`;
|
|
56
|
+
});
|
|
57
|
+
exports.createChannel = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
58
|
+
const client = await (0, connection_1.getConnection)();
|
|
59
|
+
const existing = await client.findOne(chunter_1.default.class.Channel, { name: args.name });
|
|
60
|
+
if (existing != null)
|
|
61
|
+
return `ℹ️ Channel **#${args.name}** already exists (id: \`${existing._id}\`).`;
|
|
62
|
+
const channelId = (0, core_1.generateId)();
|
|
63
|
+
await client.createDoc(chunter_1.default.class.Channel, core_1.default.space.Space, {
|
|
64
|
+
name: args.name,
|
|
65
|
+
topic: args.topic ?? '',
|
|
66
|
+
description: args.topic ?? '',
|
|
67
|
+
private: args.isPrivate,
|
|
68
|
+
members: [client.user],
|
|
69
|
+
owners: [client.user],
|
|
70
|
+
autoJoin: false,
|
|
71
|
+
archived: false,
|
|
72
|
+
messages: 0
|
|
73
|
+
}, channelId);
|
|
74
|
+
return `✅ Channel **#${args.name}** created (id: \`${channelId}\`).`;
|
|
75
|
+
});
|
|
76
|
+
exports.startDirectMessage = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
77
|
+
const client = await (0, connection_1.getConnection)();
|
|
78
|
+
const persons = await client.findAll(contact_1.default.class.Person, {});
|
|
79
|
+
const match = persons.find((p) => (p.name ?? '').toLowerCase().includes(args.member.toLowerCase()));
|
|
80
|
+
if (match == null || match.personUuid == null)
|
|
81
|
+
throw new Error(`Member '${args.member}' not found.`);
|
|
82
|
+
const targetAccount = match.personUuid;
|
|
83
|
+
const matchName = match.name;
|
|
84
|
+
const selfAccount = client.user;
|
|
85
|
+
// A DM is identified by its exact member set — look for an existing one first.
|
|
86
|
+
const existingDms = await client.findAll(chunter_1.default.class.DirectMessage, {});
|
|
87
|
+
const existing = existingDms.find((dm) => {
|
|
88
|
+
const dmMembers = (dm.members ?? []);
|
|
89
|
+
return dmMembers.length === 2 && dmMembers.includes(String(targetAccount)) && dmMembers.includes(String(selfAccount));
|
|
90
|
+
});
|
|
91
|
+
if (existing != null)
|
|
92
|
+
return `ℹ️ Direct message with **${matchName}** already exists (id: \`${existing._id}\`).`;
|
|
93
|
+
const dmId = (0, core_1.generateId)();
|
|
94
|
+
await client.createDoc(chunter_1.default.class.DirectMessage, core_1.default.space.Space, {
|
|
95
|
+
name: '',
|
|
96
|
+
description: '',
|
|
97
|
+
private: true,
|
|
98
|
+
members: [selfAccount, targetAccount],
|
|
99
|
+
owners: [selfAccount, targetAccount],
|
|
100
|
+
autoJoin: false,
|
|
101
|
+
archived: false,
|
|
102
|
+
messages: 0
|
|
103
|
+
}, dmId);
|
|
104
|
+
return `✅ Direct message with **${matchName}** started (id: \`${dmId}\`).`;
|
|
105
|
+
});
|
|
106
|
+
async function resolveChatSpace(client, spaceId) {
|
|
107
|
+
const channel = await client.findOne(chunter_1.default.class.Channel, { _id: spaceId });
|
|
108
|
+
if (channel != null)
|
|
109
|
+
return { space: channel, spaceClass: chunter_1.default.class.Channel };
|
|
110
|
+
const dm = await client.findOne(chunter_1.default.class.DirectMessage, { _id: spaceId });
|
|
111
|
+
if (dm != null)
|
|
112
|
+
return { space: dm, spaceClass: chunter_1.default.class.DirectMessage };
|
|
113
|
+
throw new Error(`Channel or direct message '${spaceId}' not found.`);
|
|
114
|
+
}
|
|
115
|
+
exports.sendMessage = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
116
|
+
const client = await (0, connection_1.getConnection)();
|
|
117
|
+
const { space, spaceClass } = await resolveChatSpace(client, args.spaceId);
|
|
118
|
+
await client.addCollection(chunter_1.default.class.ChatMessage, space._id, space._id, spaceClass, 'messages', { message: args.message });
|
|
119
|
+
return `✅ Message sent to \`${args.spaceId}\`.`;
|
|
120
|
+
});
|
|
121
|
+
exports.listMessages = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
122
|
+
const client = await (0, connection_1.getConnection)();
|
|
123
|
+
const { space } = await resolveChatSpace(client, args.spaceId);
|
|
124
|
+
const messages = await client.findAll(chunter_1.default.class.ChatMessage, { attachedTo: space._id }, { limit: args.limit, sort: { createdOn: core_1.SortingOrder.Ascending } });
|
|
125
|
+
if (messages.length === 0)
|
|
126
|
+
return 'No messages found in this channel.';
|
|
127
|
+
const lines = messages.map((m) => `**[${(0, format_1.formatDate)(m.createdOn)}]** ${m.message}`);
|
|
128
|
+
return `## Messages (${messages.length})\n\n${lines.join('\n')}`;
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/tools/channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
}>;
|
|
10
|
+
export declare const listComments: (args: {
|
|
11
|
+
identifier: string;
|
|
12
|
+
limit: number;
|
|
13
|
+
}) => Promise<{
|
|
14
|
+
content: Array<{
|
|
15
|
+
type: "text";
|
|
16
|
+
text: string;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const deleteComment: (args: {
|
|
20
|
+
identifier: string;
|
|
21
|
+
commentId: string;
|
|
22
|
+
}) => Promise<{
|
|
23
|
+
content: Array<{
|
|
24
|
+
type: "text";
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,60 @@
|
|
|
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.deleteComment = exports.listComments = exports.addComment = void 0;
|
|
7
|
+
const tracker_1 = __importDefault(require("@hcengineering/tracker"));
|
|
8
|
+
const chunter_1 = __importDefault(require("@hcengineering/chunter"));
|
|
9
|
+
const contact_1 = __importDefault(require("@hcengineering/contact"));
|
|
10
|
+
const connection_1 = require("../connection");
|
|
11
|
+
const errors_1 = require("../utils/errors");
|
|
12
|
+
const format_1 = require("../utils/format");
|
|
13
|
+
const core_1 = require("@hcengineering/core");
|
|
14
|
+
exports.addComment = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
15
|
+
const client = await (0, connection_1.getConnection)();
|
|
16
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
17
|
+
if (issue == null)
|
|
18
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
19
|
+
await client.addCollection(chunter_1.default.class.ChatMessage, issue.space, issue._id, tracker_1.default.class.Issue, 'comments', { message: args.message });
|
|
20
|
+
return `✅ Comment added to **${args.identifier}**.`;
|
|
21
|
+
});
|
|
22
|
+
exports.listComments = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
23
|
+
const client = await (0, connection_1.getConnection)();
|
|
24
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
25
|
+
if (issue == null)
|
|
26
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
27
|
+
const comments = await client.findAll(chunter_1.default.class.ChatMessage, { attachedTo: issue._id }, { limit: args.limit, sort: { createdOn: core_1.SortingOrder.Ascending } });
|
|
28
|
+
if (comments.length === 0)
|
|
29
|
+
return `No comments found on **${args.identifier}**.`;
|
|
30
|
+
// Filter comments with valid authors
|
|
31
|
+
const commentsWithAuthors = comments.filter((c) => c.createdBy != null);
|
|
32
|
+
// Resolve author details
|
|
33
|
+
const authorIds = [...new Set(commentsWithAuthors.map((c) => c.createdBy))];
|
|
34
|
+
const members = authorIds.length > 0
|
|
35
|
+
? await client.findAll(contact_1.default.class.Member, { _id: { $in: authorIds } })
|
|
36
|
+
: [];
|
|
37
|
+
const memberMap = new Map(members.map((m) => [m._id, m.name ?? m._id]));
|
|
38
|
+
const lines = commentsWithAuthors.map((comment) => {
|
|
39
|
+
const author = memberMap.get(comment.createdBy) ?? 'Unknown';
|
|
40
|
+
const date = (0, format_1.formatDate)(comment.createdOn);
|
|
41
|
+
const message = comment.message ?? '';
|
|
42
|
+
return `**${author}** @ ${date} (id: \`${comment._id}\`):\n> ${message.split('\n').join('\n> ')}`;
|
|
43
|
+
});
|
|
44
|
+
return `## Comments on ${args.identifier} (${comments.length})\n\n${lines.join('\n\n')}`;
|
|
45
|
+
});
|
|
46
|
+
exports.deleteComment = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
47
|
+
const client = await (0, connection_1.getConnection)();
|
|
48
|
+
const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
|
|
49
|
+
if (issue == null)
|
|
50
|
+
throw new Error(`Issue '${args.identifier}' not found.`);
|
|
51
|
+
const comment = await client.findOne(chunter_1.default.class.ChatMessage, {
|
|
52
|
+
_id: args.commentId,
|
|
53
|
+
attachedTo: issue._id
|
|
54
|
+
});
|
|
55
|
+
if (comment == null)
|
|
56
|
+
throw new Error(`Comment '${args.commentId}' not found on ${args.identifier}.`);
|
|
57
|
+
await client.removeCollection(chunter_1.default.class.ChatMessage, issue.space, comment._id, issue._id, tracker_1.default.class.Issue, 'comments');
|
|
58
|
+
return `✅ Comment \`${args.commentId}\` deleted from **${args.identifier}**.`;
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const listComponents: (args: {
|
|
2
|
+
projectIdentifier: string;
|
|
3
|
+
}) => Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: "text";
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const createComponent: (args: {
|
|
10
|
+
label: string;
|
|
11
|
+
projectIdentifier: string;
|
|
12
|
+
description?: string | undefined;
|
|
13
|
+
lead?: string | undefined;
|
|
14
|
+
}) => Promise<{
|
|
15
|
+
content: Array<{
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,57 @@
|
|
|
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.createComponent = exports.listComponents = void 0;
|
|
7
|
+
const tracker_1 = __importDefault(require("@hcengineering/tracker"));
|
|
8
|
+
const contact_1 = __importDefault(require("@hcengineering/contact"));
|
|
9
|
+
const core_1 = require("@hcengineering/core");
|
|
10
|
+
const connection_1 = require("../connection");
|
|
11
|
+
const errors_1 = require("../utils/errors");
|
|
12
|
+
exports.listComponents = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
13
|
+
const client = await (0, connection_1.getConnection)();
|
|
14
|
+
const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
|
|
15
|
+
if (project == null)
|
|
16
|
+
throw new Error(`Project '${args.projectIdentifier}' not found.`);
|
|
17
|
+
const components = await client.findAll(tracker_1.default.class.Component, { space: project._id });
|
|
18
|
+
if (components.length === 0)
|
|
19
|
+
return `No components found in project ${args.projectIdentifier}.`;
|
|
20
|
+
// Resolve lead names
|
|
21
|
+
const leadIds = components.map((c) => c.lead).filter((id) => id != null);
|
|
22
|
+
const leads = leadIds.length > 0
|
|
23
|
+
? await client.findAll(contact_1.default.class.Member, { _id: { $in: leadIds } })
|
|
24
|
+
: [];
|
|
25
|
+
const leadMap = new Map(leads.map((l) => [l._id, l.name ?? l._id]));
|
|
26
|
+
const lines = components.map((c) => {
|
|
27
|
+
const lead = c.lead != null ? ` — Lead: ${leadMap.get(c.lead) ?? c.lead}` : '';
|
|
28
|
+
const desc = c.description != null && c.description !== '' ? `\n ${c.description}` : '';
|
|
29
|
+
return `- **${c.label}** (id: \`${c._id}\`)${lead}${desc}`;
|
|
30
|
+
});
|
|
31
|
+
return `## Components in ${args.projectIdentifier} (${components.length})\n\n${lines.join('\n')}`;
|
|
32
|
+
});
|
|
33
|
+
exports.createComponent = (0, errors_1.wrapToolHandler)(async (args) => {
|
|
34
|
+
const client = await (0, connection_1.getConnection)();
|
|
35
|
+
const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
|
|
36
|
+
if (project == null)
|
|
37
|
+
throw new Error(`Project '${args.projectIdentifier}' not found.`);
|
|
38
|
+
let leadRef = null;
|
|
39
|
+
if (args.lead != null) {
|
|
40
|
+
const employees = await client.findAll(contact_1.default.class.Member, {});
|
|
41
|
+
const match = employees.find((e) => {
|
|
42
|
+
const name = e.name ?? '';
|
|
43
|
+
return name.toLowerCase().includes(args.lead.toLowerCase());
|
|
44
|
+
});
|
|
45
|
+
if (match == null)
|
|
46
|
+
throw new Error(`Member '${args.lead}' not found.`);
|
|
47
|
+
leadRef = match._id;
|
|
48
|
+
}
|
|
49
|
+
await client.createDoc(tracker_1.default.class.Component, project._id, {
|
|
50
|
+
label: args.label,
|
|
51
|
+
description: args.description,
|
|
52
|
+
lead: leadRef,
|
|
53
|
+
comments: 0
|
|
54
|
+
}, (0, core_1.generateId)());
|
|
55
|
+
return `Component **${args.label}** created in project ${args.projectIdentifier}.`;
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/tools/components.ts"],"names":[],"mappings":"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"}
|