huly-mcp-selfhost 2.1.0 → 3.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/.env.example +29 -2
- package/README.md +435 -15
- package/dist/connection.js.map +1 -1
- package/dist/env.d.ts +1 -0
- package/dist/env.js +17 -0
- package/dist/env.js.map +1 -0
- package/dist/guard.d.ts +28 -0
- package/dist/guard.js +152 -0
- package/dist/guard.js.map +1 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/junit-cli.d.ts +8 -0
- package/dist/junit-cli.js +106 -0
- package/dist/junit-cli.js.map +1 -0
- package/dist/registry.d.ts +18 -0
- package/dist/registry.js +316 -0
- package/dist/registry.js.map +1 -0
- package/dist/resources.d.ts +12 -0
- package/dist/resources.js +212 -0
- package/dist/resources.js.map +1 -0
- package/dist/schemas.d.ts +1246 -17
- package/dist/schemas.js +866 -96
- package/dist/schemas.js.map +1 -1
- package/dist/server.d.ts +14 -1
- package/dist/server.js +141 -128
- package/dist/server.js.map +1 -1
- package/dist/tools/activity.d.ts +10 -0
- package/dist/tools/activity.js +62 -0
- package/dist/tools/activity.js.map +1 -0
- package/dist/tools/agent.d.ts +121 -0
- package/dist/tools/agent.js +400 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/attachments.d.ts +4 -4
- package/dist/tools/calendar.d.ts +49 -0
- package/dist/tools/calendar.js +116 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/cards.d.ts +87 -0
- package/dist/tools/cards.js +246 -0
- package/dist/tools/cards.js.map +1 -0
- package/dist/tools/channels.d.ts +76 -7
- package/dist/tools/channels.js +86 -5
- package/dist/tools/channels.js.map +1 -1
- package/dist/tools/comments.d.ts +16 -4
- package/dist/tools/comments.js +26 -9
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/components.d.ts +5 -5
- package/dist/tools/components.js +4 -22
- package/dist/tools/components.js.map +1 -1
- package/dist/tools/contacts.d.ts +69 -0
- package/dist/tools/contacts.js +130 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/crm.d.ts +61 -0
- package/dist/tools/crm.js +117 -0
- package/dist/tools/crm.js.map +1 -0
- package/dist/tools/documents.d.ts +35 -12
- package/dist/tools/documents.js +105 -21
- package/dist/tools/documents.js.map +1 -1
- package/dist/tools/drive.d.ts +107 -0
- package/dist/tools/drive.js +277 -0
- package/dist/tools/drive.js.map +1 -0
- package/dist/tools/fields.d.ts +33 -0
- package/dist/tools/fields.js +124 -0
- package/dist/tools/fields.js.map +1 -0
- package/dist/tools/generic.d.ts +72 -0
- package/dist/tools/generic.js +242 -0
- package/dist/tools/generic.js.map +1 -0
- package/dist/tools/github.d.ts +21 -0
- package/dist/tools/github.js +80 -0
- package/dist/tools/github.js.map +1 -0
- package/dist/tools/hr.d.ts +97 -0
- package/dist/tools/hr.js +150 -0
- package/dist/tools/hr.js.map +1 -0
- package/dist/tools/inbox.d.ts +23 -0
- package/dist/tools/inbox.js +76 -0
- package/dist/tools/inbox.js.map +1 -0
- package/dist/tools/inventory.d.ts +61 -0
- package/dist/tools/inventory.js +103 -0
- package/dist/tools/inventory.js.map +1 -0
- package/dist/tools/issues.d.ts +60 -12
- package/dist/tools/issues.js +231 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/labels.d.ts +52 -4
- package/dist/tools/labels.js +86 -4
- package/dist/tools/labels.js.map +1 -1
- package/dist/tools/log-time.d.ts +15 -1
- package/dist/tools/log-time.js +70 -6
- package/dist/tools/log-time.js.map +1 -1
- package/dist/tools/meetings.d.ts +30 -0
- package/dist/tools/meetings.js +78 -0
- package/dist/tools/meetings.js.map +1 -0
- package/dist/tools/members.d.ts +1 -1
- package/dist/tools/members.js +17 -1
- package/dist/tools/members.js.map +1 -1
- package/dist/tools/message-templates.d.ts +54 -0
- package/dist/tools/message-templates.js +88 -0
- package/dist/tools/message-templates.js.map +1 -0
- package/dist/tools/milestones.d.ts +9 -9
- package/dist/tools/organizations.d.ts +5 -5
- package/dist/tools/overview.d.ts +55 -0
- package/dist/tools/overview.js +395 -0
- package/dist/tools/overview.js.map +1 -0
- package/dist/tools/planner.d.ts +60 -0
- package/dist/tools/planner.js +145 -0
- package/dist/tools/planner.js.map +1 -0
- package/dist/tools/process.d.ts +50 -0
- package/dist/tools/process.js +137 -0
- package/dist/tools/process.js.map +1 -0
- package/dist/tools/products.d.ts +17 -0
- package/dist/tools/products.js +45 -0
- package/dist/tools/products.js.map +1 -0
- package/dist/tools/projects.d.ts +17 -4
- package/dist/tools/projects.js +31 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/qms.d.ts +57 -0
- package/dist/tools/qms.js +171 -0
- package/dist/tools/qms.js.map +1 -0
- package/dist/tools/recruiting.d.ts +112 -0
- package/dist/tools/recruiting.js +203 -0
- package/dist/tools/recruiting.js.map +1 -0
- package/dist/tools/relations.d.ts +45 -3
- package/dist/tools/relations.js +128 -39
- package/dist/tools/relations.js.map +1 -1
- package/dist/tools/search.d.ts +14 -1
- package/dist/tools/search.js +29 -1
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/sharing.d.ts +62 -0
- package/dist/tools/sharing.js +149 -0
- package/dist/tools/sharing.js.map +1 -0
- package/dist/tools/statuses.d.ts +3 -3
- package/dist/tools/surveys.d.ts +22 -0
- package/dist/tools/surveys.js +53 -0
- package/dist/tools/surveys.js.map +1 -0
- package/dist/tools/templates.d.ts +95 -0
- package/dist/tools/templates.js +260 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/test-automation.d.ts +81 -0
- package/dist/tools/test-automation.js +225 -0
- package/dist/tools/test-automation.js.map +1 -0
- package/dist/tools/testing.d.ts +234 -0
- package/dist/tools/testing.js +401 -0
- package/dist/tools/testing.js.map +1 -0
- package/dist/tools/workspace-admin.d.ts +55 -0
- package/dist/tools/workspace-admin.js +117 -0
- package/dist/tools/workspace-admin.js.map +1 -0
- package/dist/tools/workspaces.d.ts +1 -1
- package/dist/utils/attributes.d.ts +37 -0
- package/dist/utils/attributes.js +188 -0
- package/dist/utils/attributes.js.map +1 -0
- package/dist/utils/classes.d.ts +51 -0
- package/dist/utils/classes.js +73 -0
- package/dist/utils/classes.js.map +1 -0
- package/dist/utils/content.d.ts +6 -0
- package/dist/utils/content.js +54 -0
- package/dist/utils/content.js.map +1 -0
- package/dist/utils/errors.js +1 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/files.d.ts +5 -0
- package/dist/utils/files.js +50 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/format.d.ts +2 -0
- package/dist/utils/format.js +7 -13
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/junit.d.ts +13 -0
- package/dist/utils/junit.js +81 -0
- package/dist/utils/junit.js.map +1 -0
- package/dist/utils/markdown.js +9 -4
- package/dist/utils/markdown.js.map +1 -1
- package/dist/utils/people.d.ts +25 -0
- package/dist/utils/people.js +80 -0
- package/dist/utils/people.js.map +1 -0
- package/dist/utils/resolve.d.ts +17 -0
- package/dist/utils/resolve.js +54 -0
- package/dist/utils/resolve.js.map +1 -0
- package/dist/utils/storage.js.map +1 -1
- package/dist/utils/tasks.d.ts +22 -0
- package/dist/utils/tasks.js +81 -0
- package/dist/utils/tasks.js.map +1 -0
- package/dist/watch.d.ts +62 -0
- package/dist/watch.js +405 -0
- package/dist/watch.js.map +1 -0
- package/package.json +4 -3
- package/scripts/setup.js +3 -1
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function normalizeEnv(env?: NodeJS.ProcessEnv): void;
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeEnv = normalizeEnv;
|
|
4
|
+
// Clients such as Claude Code plugins pass every configured variable, also the ones the user
|
|
5
|
+
// left empty (or as an unresolved "${…}" placeholder). Treat those as not set, so defaults apply.
|
|
6
|
+
function normalizeEnv(env = process.env) {
|
|
7
|
+
for (const [key, value] of Object.entries(env)) {
|
|
8
|
+
if (!key.startsWith('HULY_') || value == null)
|
|
9
|
+
continue;
|
|
10
|
+
const v = value.trim();
|
|
11
|
+
if (v === '' || /^\$\{[^}]*\}$/.test(v))
|
|
12
|
+
delete env[key];
|
|
13
|
+
else if (v !== value)
|
|
14
|
+
env[key] = v;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":";;;AAAA,6FAA6F;AAC7F,kGAAkG;AAClG,sBAA8B,GAAG,GAAsB,OAAO,CAAC,GAAG;IAChE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI;YAAE,SAAQ;QACvD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;aACnD,IAAI,CAAC,KAAK,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;AACH,CAAC"}
|
package/dist/guard.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ToolDef } from './registry';
|
|
2
|
+
/** A tool changes data when its workspace argument is mandatory (reads may omit it). */
|
|
3
|
+
export declare function isMutation(tool: ToolDef): boolean;
|
|
4
|
+
/** Project keys an argument object refers to: project fields plus every "PROJ-12"-style value. */
|
|
5
|
+
export declare function projectsIn(args: unknown, key?: string): Set<string>;
|
|
6
|
+
export declare function parseWriteProjects(value: string | undefined): Set<string> | undefined;
|
|
7
|
+
export declare function assertWriteAllowed(tool: ToolDef, args: unknown, allowed: Set<string> | undefined): void;
|
|
8
|
+
export declare function audit(path: string | undefined, tool: ToolDef, args: unknown, outcome: {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
text: string;
|
|
11
|
+
}): void;
|
|
12
|
+
/** Deletes and bulk/structural changes that are hard to undo. */
|
|
13
|
+
export declare function isRisky(name: string): boolean;
|
|
14
|
+
export type ConfirmMode = 'auto' | 'off' | 'strict';
|
|
15
|
+
export declare function parseConfirmMode(value: string | undefined): ConfirmMode;
|
|
16
|
+
/** What the confirm callback can do with the connected client. */
|
|
17
|
+
export interface Asker {
|
|
18
|
+
/** True when the client can show a form (MCP elicitation). */
|
|
19
|
+
canAsk: () => boolean;
|
|
20
|
+
/** Shows the question; resolves true only on an explicit yes. */
|
|
21
|
+
ask: (message: string) => Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
/** One readable line per argument, without the workspace and with long values cut. */
|
|
24
|
+
export declare function describeCall(tool: ToolDef, args: Record<string, unknown>): string;
|
|
25
|
+
/** MCP elicitation on top of an McpServer. */
|
|
26
|
+
export declare function elicitationAsker(server: any): Asker;
|
|
27
|
+
/** Wraps a handler with the write scope check, the confirmation for risky tools and the audit log. */
|
|
28
|
+
export declare function guard(tool: ToolDef, env?: NodeJS.ProcessEnv, asker?: Asker): ToolDef['handler'];
|
package/dist/guard.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMutation = isMutation;
|
|
4
|
+
exports.projectsIn = projectsIn;
|
|
5
|
+
exports.parseWriteProjects = parseWriteProjects;
|
|
6
|
+
exports.assertWriteAllowed = assertWriteAllowed;
|
|
7
|
+
exports.audit = audit;
|
|
8
|
+
exports.isRisky = isRisky;
|
|
9
|
+
exports.parseConfirmMode = parseConfirmMode;
|
|
10
|
+
exports.describeCall = describeCall;
|
|
11
|
+
exports.elicitationAsker = elicitationAsker;
|
|
12
|
+
exports.guard = guard;
|
|
13
|
+
// Cross-cutting checks around every tool call:
|
|
14
|
+
// - HULY_WRITE_PROJECTS: changes are only allowed in the listed projects
|
|
15
|
+
// - HULY_AUDIT_LOG: every change is appended as one JSON line to this file
|
|
16
|
+
// - HULY_CONFIRM: destructive tools ask the user first (MCP elicitation) when the client can ask
|
|
17
|
+
const node_fs_1 = require("node:fs");
|
|
18
|
+
const TASK_ID = /^([A-Z][A-Z0-9]*)-\d+$/;
|
|
19
|
+
const PROJECT_KEYS = new Set(['projectIdentifier', 'targetProjectIdentifier', 'projectIdentifiers']);
|
|
20
|
+
/** A tool changes data when its workspace argument is mandatory (reads may omit it). */
|
|
21
|
+
function isMutation(tool) {
|
|
22
|
+
const ws = tool.schema.shape.workspace;
|
|
23
|
+
return ws != null && !ws.isOptional();
|
|
24
|
+
}
|
|
25
|
+
/** Project keys an argument object refers to: project fields plus every "PROJ-12"-style value. */
|
|
26
|
+
function projectsIn(args, key = '') {
|
|
27
|
+
const out = new Set();
|
|
28
|
+
const visit = (value, k) => {
|
|
29
|
+
if (typeof value === 'string') {
|
|
30
|
+
if (PROJECT_KEYS.has(k))
|
|
31
|
+
out.add(value.toUpperCase());
|
|
32
|
+
const m = TASK_ID.exec(value);
|
|
33
|
+
if (m != null)
|
|
34
|
+
out.add(m[1]);
|
|
35
|
+
}
|
|
36
|
+
else if (Array.isArray(value)) {
|
|
37
|
+
for (const v of value)
|
|
38
|
+
visit(v, k);
|
|
39
|
+
}
|
|
40
|
+
else if (value != null && typeof value === 'object') {
|
|
41
|
+
for (const [ck, cv] of Object.entries(value))
|
|
42
|
+
visit(cv, ck);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
visit(args, key);
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
function parseWriteProjects(value) {
|
|
49
|
+
const list = (value ?? '').split(',').map((p) => p.trim().toUpperCase()).filter((p) => p !== '');
|
|
50
|
+
return list.length > 0 ? new Set(list) : undefined;
|
|
51
|
+
}
|
|
52
|
+
function assertWriteAllowed(tool, args, allowed) {
|
|
53
|
+
if (allowed == null || !isMutation(tool))
|
|
54
|
+
return;
|
|
55
|
+
const denied = [...projectsIn(args)].filter((p) => !allowed.has(p));
|
|
56
|
+
if (denied.length > 0) {
|
|
57
|
+
throw new Error(`Huly MCP: ${tool.name} touches project(s) ${denied.join(', ')}, but HULY_WRITE_PROJECTS only allows ${[...allowed].join(', ')}.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function shorten(value, depth = 0) {
|
|
61
|
+
if (typeof value === 'string')
|
|
62
|
+
return value.length > 200 ? `${value.slice(0, 200)}… (${value.length} chars)` : value;
|
|
63
|
+
if (Array.isArray(value))
|
|
64
|
+
return depth > 3 ? `[${value.length} items]` : value.map((v) => shorten(v, depth + 1));
|
|
65
|
+
if (value != null && typeof value === 'object') {
|
|
66
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, /base64/i.test(k) ? `[${String(v).length} chars]` : shorten(v, depth + 1)]));
|
|
67
|
+
}
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
function audit(path, tool, args, outcome) {
|
|
71
|
+
if (path == null || path === '' || !isMutation(tool))
|
|
72
|
+
return;
|
|
73
|
+
const entry = { ts: new Date().toISOString(), tool: tool.name, args: shorten(args), ok: outcome.ok, result: outcome.text.split('\n')[0].slice(0, 300) };
|
|
74
|
+
try {
|
|
75
|
+
(0, node_fs_1.appendFileSync)(path, JSON.stringify(entry) + '\n');
|
|
76
|
+
}
|
|
77
|
+
catch { /* auditing must never break a tool call */ }
|
|
78
|
+
}
|
|
79
|
+
// ── Confirmation for destructive tools ───────────────────────────────────────
|
|
80
|
+
const RISKY = new Set(['bulk_update_issues', 'move_issue', 'generic_update', 'generic_delete', 'revoke_public_link', 'restore_file_version', 'send_invite', 'set_member_role', 'cancel_execution']);
|
|
81
|
+
/** Deletes and bulk/structural changes that are hard to undo. */
|
|
82
|
+
function isRisky(name) {
|
|
83
|
+
return name.startsWith('delete_') || RISKY.has(name);
|
|
84
|
+
}
|
|
85
|
+
function parseConfirmMode(value) {
|
|
86
|
+
const v = (value ?? 'auto').trim().toLowerCase();
|
|
87
|
+
if (v === 'auto' || v === 'off' || v === 'strict')
|
|
88
|
+
return v;
|
|
89
|
+
throw new Error(`HULY_CONFIRM must be auto, off or strict (got '${value ?? ''}').`);
|
|
90
|
+
}
|
|
91
|
+
/** One readable line per argument, without the workspace and with long values cut. */
|
|
92
|
+
function describeCall(tool, args) {
|
|
93
|
+
const parts = Object.entries(args ?? {})
|
|
94
|
+
.filter(([k, v]) => k !== 'workspace' && v != null && k !== 'confirm')
|
|
95
|
+
.map(([k, v]) => `${k}: ${JSON.stringify(shorten(v)).slice(0, 160)}`);
|
|
96
|
+
const ws = typeof args?.workspace === 'string' ? ` in workspace ${args.workspace}` : '';
|
|
97
|
+
return `Huly: ${tool.name.replace(/_/g, ' ')}${ws}?\n${parts.join('\n')}`;
|
|
98
|
+
}
|
|
99
|
+
/** MCP elicitation on top of an McpServer. */
|
|
100
|
+
function elicitationAsker(server) {
|
|
101
|
+
return {
|
|
102
|
+
canAsk: () => server.server.getClientCapabilities()?.elicitation?.form != null,
|
|
103
|
+
ask: async (message) => {
|
|
104
|
+
const res = await server.server.elicitInput({
|
|
105
|
+
mode: 'form',
|
|
106
|
+
message,
|
|
107
|
+
requestedSchema: { type: 'object', properties: { confirm: { type: 'boolean', title: 'Yes, do it', default: false } }, required: ['confirm'] }
|
|
108
|
+
});
|
|
109
|
+
return res.action === 'accept' && res.content?.confirm === true;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Wraps a handler with the write scope check, the confirmation for risky tools and the audit log. */
|
|
114
|
+
function guard(tool, env = process.env, asker) {
|
|
115
|
+
const allowed = parseWriteProjects(env.HULY_WRITE_PROJECTS);
|
|
116
|
+
const auditPath = env.HULY_AUDIT_LOG;
|
|
117
|
+
const confirm = parseConfirmMode(env.HULY_CONFIRM);
|
|
118
|
+
return async (args) => {
|
|
119
|
+
assertWriteAllowed(tool, args, allowed);
|
|
120
|
+
if (confirm !== 'off' && isRisky(tool.name) && args?.dryRun !== true) {
|
|
121
|
+
const canAsk = asker?.canAsk() === true;
|
|
122
|
+
if (!canAsk && confirm === 'strict') {
|
|
123
|
+
audit(auditPath, tool, args, { ok: false, text: 'refused: HULY_CONFIRM=strict and the client cannot ask' });
|
|
124
|
+
throw new Error(`Huly MCP: ${tool.name} needs a human confirmation (HULY_CONFIRM=strict), but this client cannot ask. Leave it to a person.`);
|
|
125
|
+
}
|
|
126
|
+
if (canAsk) {
|
|
127
|
+
let yes = false;
|
|
128
|
+
try {
|
|
129
|
+
yes = await asker.ask(describeCall(tool, args));
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
audit(auditPath, tool, args, { ok: false, text: `confirmation failed: ${e.message}` });
|
|
133
|
+
throw new Error(`Huly MCP: could not ask for confirmation of ${tool.name} (${e.message}). Nothing was changed.`);
|
|
134
|
+
}
|
|
135
|
+
if (!yes) {
|
|
136
|
+
audit(auditPath, tool, args, { ok: false, text: 'declined by the user' });
|
|
137
|
+
return { content: [{ type: 'text', text: `Cancelled: the user declined ${tool.name}. Nothing was changed — do not retry unless they ask.` }] };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const result = await tool.handler(args);
|
|
143
|
+
audit(auditPath, tool, args, { ok: true, text: result.content[0]?.text ?? '' });
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
audit(auditPath, tool, args, { ok: false, text: e.message });
|
|
148
|
+
throw e;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
5
5
|
const server_1 = require("./server");
|
|
6
6
|
const connection_1 = require("./connection");
|
|
7
|
+
const env_1 = require("./env");
|
|
8
|
+
const watch_1 = require("./watch");
|
|
9
|
+
const junit_cli_1 = require("./junit-cli");
|
|
7
10
|
async function main() {
|
|
11
|
+
if (process.argv[2] === 'watch') {
|
|
12
|
+
await (0, watch_1.runWatch)(process.argv.slice(3));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (process.argv[2] === 'junit') {
|
|
16
|
+
await (0, junit_cli_1.runJUnit)(process.argv.slice(3));
|
|
17
|
+
process.exit();
|
|
18
|
+
}
|
|
19
|
+
(0, env_1.normalizeEnv)();
|
|
8
20
|
const server = (0, server_1.createServer)();
|
|
9
21
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
10
22
|
process.on('SIGINT', async () => {
|
|
@@ -19,7 +31,7 @@ async function main() {
|
|
|
19
31
|
// Process stays alive — connection maintained until shutdown
|
|
20
32
|
}
|
|
21
33
|
main().catch((err) => {
|
|
22
|
-
console.error('Fatal error starting huly-mcp:', err);
|
|
34
|
+
console.error('Fatal error starting huly-mcp:', err instanceof Error ? err.message : err);
|
|
23
35
|
process.exit(1);
|
|
24
36
|
});
|
|
25
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,wEAAgF;AAChF,qCAAuC;AACvC,6CAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,wEAAgF;AAChF,qCAAuC;AACvC,6CAA8C;AAC9C,+BAAoC;AACpC,mCAAkC;AAClC,2CAAsC;AAEtC,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAA,gBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAA,oBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;IACD,IAAA,kBAAY,GAAE,CAAA;IACd,MAAM,MAAM,GAAG,IAAA,qBAAY,GAAE,CAAA;IAC7B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAA;IAE5C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,IAAA,4BAAe,GAAE,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAA,4BAAe,GAAE,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,6DAA6D;AAC/D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ImportOptions } from './tools/test-automation';
|
|
2
|
+
export declare const JUNIT_HELP = "Usage: huly-mcp junit <report.xml> --project <test project> [options]\n\nImports a JUnit XML report (Jest, Vitest, pytest, Go, Gradle, Maven, xcpretty \u2026) as a Huly test\nrun. Suites and cases that do not exist yet are created. Credentials come from the usual HULY_*\nenvironment variables.\n\nOptions:\n --project <name> Test project (required)\n --workspace <slug> Workspace (needed when the account has several)\n --run <name> Run name (default: \"CI <date time>\")\n --parent-suite <name> Put the report's suites under this suite\n --no-create Only record results for cases that already exist\n --fail-on-failures Exit with code 1 when the report has failed tests\n --dry-run Show what would happen, change nothing\n";
|
|
3
|
+
export interface JUnitCliOptions extends Omit<ImportOptions, 'xml'> {
|
|
4
|
+
file: string;
|
|
5
|
+
failOnFailures: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseJUnitArgs(argv: string[]): JUnitCliOptions;
|
|
8
|
+
export declare function runJUnit(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JUNIT_HELP = void 0;
|
|
4
|
+
exports.parseJUnitArgs = parseJUnitArgs;
|
|
5
|
+
exports.runJUnit = runJUnit;
|
|
6
|
+
// `huly-mcp junit <report.xml>`: push a CI test report into Huly as a test run.
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const env_1 = require("./env");
|
|
9
|
+
const connection_1 = require("./connection");
|
|
10
|
+
const test_automation_1 = require("./tools/test-automation");
|
|
11
|
+
exports.JUNIT_HELP = `Usage: huly-mcp junit <report.xml> --project <test project> [options]
|
|
12
|
+
|
|
13
|
+
Imports a JUnit XML report (Jest, Vitest, pytest, Go, Gradle, Maven, xcpretty …) as a Huly test
|
|
14
|
+
run. Suites and cases that do not exist yet are created. Credentials come from the usual HULY_*
|
|
15
|
+
environment variables.
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
--project <name> Test project (required)
|
|
19
|
+
--workspace <slug> Workspace (needed when the account has several)
|
|
20
|
+
--run <name> Run name (default: "CI <date time>")
|
|
21
|
+
--parent-suite <name> Put the report's suites under this suite
|
|
22
|
+
--no-create Only record results for cases that already exist
|
|
23
|
+
--fail-on-failures Exit with code 1 when the report has failed tests
|
|
24
|
+
--dry-run Show what would happen, change nothing
|
|
25
|
+
`;
|
|
26
|
+
function parseJUnitArgs(argv) {
|
|
27
|
+
const o = { failOnFailures: false };
|
|
28
|
+
const value = (i, flag) => {
|
|
29
|
+
const v = argv[i + 1];
|
|
30
|
+
if (v == null || v.startsWith('--'))
|
|
31
|
+
throw new Error(`${flag} needs a value.`);
|
|
32
|
+
return v;
|
|
33
|
+
};
|
|
34
|
+
for (let i = 0; i < argv.length; i++) {
|
|
35
|
+
const a = argv[i];
|
|
36
|
+
switch (a) {
|
|
37
|
+
case '--project':
|
|
38
|
+
o.project = value(i, a);
|
|
39
|
+
i++;
|
|
40
|
+
break;
|
|
41
|
+
case '--workspace':
|
|
42
|
+
o.workspace = value(i, a);
|
|
43
|
+
i++;
|
|
44
|
+
break;
|
|
45
|
+
case '--run':
|
|
46
|
+
o.runName = value(i, a);
|
|
47
|
+
i++;
|
|
48
|
+
break;
|
|
49
|
+
case '--parent-suite':
|
|
50
|
+
o.parentSuite = value(i, a);
|
|
51
|
+
i++;
|
|
52
|
+
break;
|
|
53
|
+
case '--no-create':
|
|
54
|
+
o.createMissing = false;
|
|
55
|
+
break;
|
|
56
|
+
case '--fail-on-failures':
|
|
57
|
+
o.failOnFailures = true;
|
|
58
|
+
break;
|
|
59
|
+
case '--dry-run':
|
|
60
|
+
o.dryRun = true;
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
if (a.startsWith('--'))
|
|
64
|
+
throw new Error(`Unknown option ${a}.`);
|
|
65
|
+
if (o.file != null)
|
|
66
|
+
throw new Error('Only one report file.');
|
|
67
|
+
o.file = a;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (o.file == null)
|
|
71
|
+
throw new Error('Missing report file.');
|
|
72
|
+
if (o.project == null)
|
|
73
|
+
throw new Error('Missing --project.');
|
|
74
|
+
return o;
|
|
75
|
+
}
|
|
76
|
+
async function runJUnit(argv) {
|
|
77
|
+
if (argv.includes('--help') || argv.includes('-h') || argv.length === 0) {
|
|
78
|
+
process.stdout.write(exports.JUNIT_HELP);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let opts;
|
|
82
|
+
try {
|
|
83
|
+
opts = parseJUnitArgs(argv);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
process.stderr.write(`${e.message}\n\n${exports.JUNIT_HELP}`);
|
|
87
|
+
process.exitCode = 2;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
(0, env_1.normalizeEnv)();
|
|
91
|
+
try {
|
|
92
|
+
const xml = await (0, promises_1.readFile)(opts.file, 'utf8');
|
|
93
|
+
const summary = await (0, test_automation_1.importJUnit)({ ...opts, xml });
|
|
94
|
+
process.stdout.write(summary.text.replace(/\*\*/g, '') + '\n');
|
|
95
|
+
if (opts.failOnFailures && summary.failed > 0)
|
|
96
|
+
process.exitCode = 1;
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
process.stderr.write(`huly-mcp junit: ${e.message}\n`);
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await (0, connection_1.closeConnection)();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=junit-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"junit-cli.js","sourceRoot":"","sources":["../src/junit-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
export declare const TOOLSETS: readonly ['core', 'agent', 'tracker', 'tracker-admin', 'documents', 'chat', 'contacts', 'inbox', 'activity', 'planner', 'calendar', 'github', 'generic', 'generic-write', 'collaboration', 'cards', 'fields', 'drive', 'templates', 'testing', 'products', 'members', 'recruiting', 'crm', 'hr', 'inventory', 'meetings', 'qms', 'process', 'surveys'];
|
|
3
|
+
export type Toolset = typeof TOOLSETS[number];
|
|
4
|
+
/** Enabled when HULY_TOOLSETS is not set. 'core' is always enabled. */
|
|
5
|
+
export declare const DEFAULT_TOOLSETS: Toolset[];
|
|
6
|
+
export interface ToolDef {
|
|
7
|
+
name: string;
|
|
8
|
+
toolset: Toolset;
|
|
9
|
+
description: string;
|
|
10
|
+
schema: z.ZodObject<any>;
|
|
11
|
+
handler: (args: any) => Promise<{
|
|
12
|
+
content: Array<{
|
|
13
|
+
type: 'text';
|
|
14
|
+
text: string;
|
|
15
|
+
}>;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
export declare const TOOLS: ToolDef[];
|