huly-mcp-selfhost 2.0.0 → 2.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.
@@ -17,8 +17,8 @@ export declare const getProject: (args: {
17
17
  }>;
18
18
  export declare const createProject: (args: {
19
19
  workspace: string;
20
- identifier: string;
21
20
  name: string;
21
+ identifier: string;
22
22
  description?: string | undefined;
23
23
  }) => Promise<{
24
24
  content: Array<{
@@ -1,6 +1,6 @@
1
1
  export declare const searchIssues: (args: {
2
- limit: number;
3
2
  query: string;
3
+ limit: number;
4
4
  workspace?: string | undefined;
5
5
  }) => Promise<{
6
6
  content: Array<{
@@ -1,4 +1,4 @@
1
- export declare const listWorkspaces: (args: {}) => Promise<{
1
+ export declare const listWorkspaces: (args: Record<string, never>) => Promise<{
2
2
  content: Array<{
3
3
  type: "text";
4
4
  text: string;
@@ -2,3 +2,5 @@ export declare const PRIORITY_LABELS: Record<number, string>;
2
2
  export declare const MILESTONE_STATUS_LABELS: Record<number, string>;
3
3
  export declare function formatDate(ts: number | null | undefined): string;
4
4
  export declare function priorityLabel(priority: number): string;
5
+ export declare function markupToText(markup: string | null | undefined): string;
6
+ export declare function textToMarkup(text: string | null): string;
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MILESTONE_STATUS_LABELS = exports.PRIORITY_LABELS = void 0;
4
4
  exports.formatDate = formatDate;
5
5
  exports.priorityLabel = priorityLabel;
6
+ exports.markupToText = markupToText;
7
+ exports.textToMarkup = textToMarkup;
8
+ const markdown_1 = require("./markdown");
6
9
  const tracker_1 = require("@hcengineering/tracker");
7
10
  exports.PRIORITY_LABELS = {
8
11
  [tracker_1.IssuePriority.NoPriority]: 'No Priority',
@@ -25,4 +28,36 @@ function formatDate(ts) {
25
28
  function priorityLabel(priority) {
26
29
  return exports.PRIORITY_LABELS[priority] ?? 'Unknown';
27
30
  }
31
+ // Inline Markup fields (milestone/component description) hold ProseMirror JSON as a
32
+ // string. Older data or create_component may have stored plain text — accept both.
33
+ function markupToText(markup) {
34
+ if (markup == null || markup === '')
35
+ return '';
36
+ if (!markup.trimStart().startsWith('{'))
37
+ return markup;
38
+ try {
39
+ return blockText(JSON.parse(markup)).trim();
40
+ }
41
+ catch {
42
+ return markup;
43
+ }
44
+ }
45
+ function textToMarkup(text) {
46
+ if (text == null || text === '')
47
+ return '';
48
+ return JSON.stringify((0, markdown_1.markdownToProseMirror)(text));
49
+ }
50
+ // Inline nodes (text, marks) are concatenated; block nodes are separated by newlines.
51
+ const BLOCK_TYPES = new Set(['doc', 'paragraph', 'heading', 'bulletList', 'orderedList', 'listItem', 'codeBlock', 'blockquote', 'table', 'tableRow', 'tableCell', 'tableHeader']);
52
+ function blockText(node) {
53
+ if (node == null || typeof node !== 'object')
54
+ return '';
55
+ if (node.type === 'text')
56
+ return typeof node.text === 'string' ? node.text : '';
57
+ if (node.type === 'hardBreak')
58
+ return '\n';
59
+ const children = Array.isArray(node.content) ? node.content : [];
60
+ const hasBlocks = children.some((c) => BLOCK_TYPES.has(c?.type));
61
+ return children.map(blockText).join(hasBlocks ? '\n' : '');
62
+ }
28
63
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":";;;AAiBA,gCAGC;AAED,sCAEC;AAxBD,oDAAsD;AAEzC,QAAA,eAAe,GAA2B;IACrD,CAAC,uBAAa,CAAC,UAAU,CAAC,EAAE,aAAa;IACzC,CAAC,uBAAa,CAAC,MAAM,CAAC,EAAE,QAAQ;IAChC,CAAC,uBAAa,CAAC,IAAI,CAAC,EAAE,MAAM;IAC5B,CAAC,uBAAa,CAAC,MAAM,CAAC,EAAE,QAAQ;IAChC,CAAC,uBAAa,CAAC,GAAG,CAAC,EAAE,KAAK;CAC3B,CAAA;AAEY,QAAA,uBAAuB,GAA2B;IAC7D,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,aAAa;IAChB,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,UAAU;CACd,CAAA;AAED,SAAgB,UAAU,CAAE,EAA6B;IACvD,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,MAAM,CAAA;IAC7B,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,SAAgB,aAAa,CAAE,QAAgB;IAC7C,OAAO,uBAAe,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "huly-mcp-selfhost",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "MCP server for Huly (self-hosted + cloud) — connect Claude Desktop to your Huly workspace via the native WebSocket SDK. Fork of huly-mcp-sdk with self-hosted document/description support, chat, attachments, custom issue statuses, and organizations.",
5
5
  "keywords": [
6
6
  "huly",
@@ -57,14 +57,17 @@
57
57
  "@hcengineering/tags": "^0.7.0",
58
58
  "@hcengineering/task": "^0.7.0",
59
59
  "@hcengineering/tracker": "^0.7.0",
60
- "@modelcontextprotocol/sdk": "^1.10.0",
61
- "ws": "^8.18.0",
62
- "zod": "^3.23.0"
60
+ "@modelcontextprotocol/sdk": "^1.32.2",
61
+ "ws": "^8.22.1",
62
+ "zod": "^4.6.7"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@types/node": "^22.0.0",
66
66
  "@types/ws": "^8.5.0",
67
67
  "tsx": "^4.19.0",
68
68
  "typescript": "^5.7.0"
69
+ },
70
+ "overrides": {
71
+ "dompurify": "^3.4.17"
69
72
  }
70
73
  }