@yinuo-ngm/mcp-server 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -208
- package/lib/audit/audit-event.d.ts +14 -0
- package/lib/audit/audit-event.js +2 -0
- package/lib/audit/audit-log.service.d.ts +7 -0
- package/lib/audit/audit-log.service.js +187 -0
- package/lib/audit/redact.d.ts +3 -0
- package/lib/audit/redact.js +28 -0
- package/lib/catalog/capabilities/blocked-local-actions.d.ts +1 -0
- package/lib/catalog/capabilities/blocked-local-actions.js +18 -0
- package/lib/catalog/capabilities/frontend-standard.d.ts +2 -0
- package/lib/catalog/capabilities/frontend-standard.js +36 -0
- package/lib/catalog/capabilities/hub-v2.d.ts +2 -0
- package/lib/catalog/capabilities/hub-v2.js +34 -0
- package/lib/catalog/capabilities/nginx.d.ts +2 -0
- package/lib/catalog/capabilities/nginx.js +23 -0
- package/lib/catalog/capabilities/project.d.ts +2 -0
- package/lib/catalog/capabilities/project.js +23 -0
- package/lib/catalog/capabilities/router.d.ts +2 -0
- package/lib/catalog/capabilities/router.js +11 -0
- package/lib/catalog/capabilities/runtime.d.ts +2 -0
- package/lib/catalog/capabilities/runtime.js +17 -0
- package/lib/catalog/capabilities/workspace.d.ts +2 -0
- package/lib/catalog/capabilities/workspace.js +23 -0
- package/lib/catalog/helpers.d.ts +3 -0
- package/lib/catalog/helpers.js +42 -0
- package/lib/catalog/index.d.ts +4 -0
- package/lib/catalog/index.js +23 -0
- package/lib/catalog/tools/frontend-standard.d.ts +2 -0
- package/lib/catalog/tools/frontend-standard.js +166 -0
- package/lib/catalog/tools/hub-v2-api.d.ts +2 -0
- package/lib/catalog/tools/hub-v2-api.js +124 -0
- package/lib/catalog/tools/hub-v2-docs.d.ts +2 -0
- package/lib/catalog/tools/hub-v2-docs.js +40 -0
- package/lib/catalog/tools/nginx.d.ts +2 -0
- package/lib/catalog/tools/nginx.js +96 -0
- package/lib/catalog/tools/project.d.ts +2 -0
- package/lib/catalog/tools/project.js +138 -0
- package/lib/catalog/tools/router.d.ts +2 -0
- package/lib/catalog/tools/router.js +26 -0
- package/lib/catalog/tools/runtime.d.ts +2 -0
- package/lib/catalog/tools/runtime.js +47 -0
- package/lib/catalog/tools/workspace.d.ts +2 -0
- package/lib/catalog/tools/workspace.js +75 -0
- package/lib/catalog/types.d.ts +15 -0
- package/lib/catalog/types.js +2 -0
- package/lib/context/create-tool-context.js +11 -10
- package/lib/context/local-server-client.d.ts +2 -0
- package/lib/context/local-server-client.js +174 -0
- package/lib/context/tool-context.d.ts +36 -0
- package/lib/doctor.d.ts +8 -0
- package/lib/doctor.js +221 -0
- package/lib/errors/error-codes.d.ts +12 -0
- package/lib/errors/error-codes.js +14 -0
- package/lib/errors/mcp-tool-error.d.ts +8 -0
- package/lib/errors/mcp-tool-error.js +14 -0
- package/lib/filesystem/project-files.d.ts +18 -0
- package/lib/filesystem/project-files.js +112 -0
- package/lib/git/local-git-read-service.d.ts +2 -0
- package/lib/git/local-git-read-service.js +96 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -0
- package/lib/policy/assert-tool-policy.js +10 -1
- package/lib/register-tools.js +67 -10
- package/lib/registry/tool-names.d.ts +95 -0
- package/lib/registry/tool-names.js +97 -0
- package/lib/services/path-guard.service.d.ts +4 -0
- package/lib/services/path-guard.service.js +75 -0
- package/lib/services/permission.service.d.ts +5 -0
- package/lib/services/permission.service.js +38 -0
- package/lib/services/project-resolver.service.d.ts +32 -0
- package/lib/services/project-resolver.service.js +95 -0
- package/lib/standard/frontend-standard.default.d.ts +2 -0
- package/lib/standard/frontend-standard.default.js +51 -0
- package/lib/standard/frontend-standard.schema.d.ts +196 -0
- package/lib/standard/frontend-standard.schema.js +61 -0
- package/lib/standard/frontend-standard.service.d.ts +79 -0
- package/lib/standard/frontend-standard.service.js +115 -0
- package/lib/standard/project-scan.d.ts +9 -0
- package/lib/standard/project-scan.js +91 -0
- package/lib/standard/validators/angular-structure.validator.d.ts +4 -0
- package/lib/standard/validators/angular-structure.validator.js +75 -0
- package/lib/standard/validators/component.validator.d.ts +4 -0
- package/lib/standard/validators/component.validator.js +94 -0
- package/lib/standard/validators/git.validator.d.ts +8 -0
- package/lib/standard/validators/git.validator.js +32 -0
- package/lib/standard/validators/review.validator.d.ts +15 -0
- package/lib/standard/validators/review.validator.js +67 -0
- package/lib/standard/validators/test.validator.d.ts +19 -0
- package/lib/standard/validators/test.validator.js +89 -0
- package/lib/tool-catalog.d.ts +2 -0
- package/lib/tool-catalog.js +6 -0
- package/lib/tools/angular/angular-standard.tools.d.ts +2 -0
- package/lib/tools/angular/angular-standard.tools.js +53 -0
- package/lib/tools/angular/index.d.ts +1 -0
- package/lib/tools/angular/index.js +5 -0
- package/lib/tools/capability.tools.d.ts +2 -0
- package/lib/tools/capability.tools.js +205 -0
- package/lib/tools/controlled/index.d.ts +2 -0
- package/lib/tools/controlled/index.js +13 -0
- package/lib/tools/controlled/local-server.d.ts +6 -0
- package/lib/tools/controlled/local-server.js +17 -0
- package/lib/tools/controlled/operation-policy.d.ts +22 -0
- package/lib/tools/controlled/operation-policy.js +50 -0
- package/lib/tools/controlled/operation-result.d.ts +30 -0
- package/lib/tools/controlled/operation-result.js +33 -0
- package/lib/tools/controlled/schemas.d.ts +159 -0
- package/lib/tools/controlled/schemas.js +49 -0
- package/lib/tools/controlled.tools.d.ts +1 -0
- package/lib/tools/controlled.tools.js +5 -0
- package/lib/tools/file-write.tools.d.ts +2 -0
- package/lib/tools/file-write.tools.js +70 -0
- package/lib/tools/git.tools.js +109 -8
- package/lib/tools/hub-v2/client.d.ts +6 -1
- package/lib/tools/hub-v2/client.js +15 -0
- package/lib/tools/hub-v2/config/config-paths.d.ts +2 -0
- package/lib/tools/hub-v2/config/config-paths.js +17 -0
- package/lib/tools/hub-v2/config/env.d.ts +1 -0
- package/lib/tools/hub-v2/config/env.js +12 -0
- package/lib/tools/hub-v2/config/index.d.ts +8 -0
- package/lib/tools/hub-v2/config/index.js +18 -0
- package/lib/tools/hub-v2/config/jsonc.d.ts +5 -0
- package/lib/tools/hub-v2/config/jsonc.js +86 -0
- package/lib/tools/hub-v2/config/load-config.d.ts +18 -0
- package/lib/tools/hub-v2/config/load-config.js +93 -0
- package/lib/tools/hub-v2/config/project-selector.d.ts +5 -0
- package/lib/tools/hub-v2/config/project-selector.js +92 -0
- package/lib/tools/hub-v2/config/resolve-context.d.ts +13 -0
- package/lib/tools/hub-v2/config/resolve-context.js +33 -0
- package/lib/tools/hub-v2/docs.tools.js +138 -4
- package/lib/tools/hub-v2/index.js +2 -0
- package/lib/tools/hub-v2/issues-workflow.tools.d.ts +2 -0
- package/lib/tools/hub-v2/issues-workflow.tools.js +199 -0
- package/lib/tools/hub-v2/issues.tools.js +96 -6
- package/lib/tools/hub-v2/projects.tools.js +16 -3
- package/lib/tools/hub-v2/raw.d.ts +8 -0
- package/lib/tools/hub-v2/raw.js +33 -0
- package/lib/tools/hub-v2/rd.tools.js +167 -8
- package/lib/tools/hub-v2/schemas.d.ts +668 -71
- package/lib/tools/hub-v2/schemas.js +152 -1
- package/lib/tools/hub-v2/upload.tools.js +53 -5
- package/lib/tools/index.d.ts +1 -0
- package/lib/tools/index.js +22 -0
- package/lib/tools/log.tools.js +33 -6
- package/lib/tools/nginx/index.d.ts +1 -0
- package/lib/tools/nginx/index.js +5 -0
- package/lib/tools/nginx/nginx-control.tools.d.ts +2 -0
- package/lib/tools/nginx/nginx-control.tools.js +133 -0
- package/lib/tools/nginx/nginx-proxy.d.ts +24 -0
- package/lib/tools/nginx/nginx-proxy.js +154 -0
- package/lib/tools/nginx.tools.d.ts +2 -0
- package/lib/tools/nginx.tools.js +111 -0
- package/lib/tools/project/index.d.ts +2 -0
- package/lib/tools/project/index.js +7 -0
- package/lib/tools/project/launch-status.d.ts +10 -0
- package/lib/tools/project/launch-status.js +78 -0
- package/lib/tools/project/local-diagnostics.d.ts +19 -0
- package/lib/tools/project/local-diagnostics.js +97 -0
- package/lib/tools/project/observe-redaction.d.ts +3 -0
- package/lib/tools/project/observe-redaction.js +25 -0
- package/lib/tools/project/observe-runtime.d.ts +72 -0
- package/lib/tools/project/observe-runtime.js +147 -0
- package/lib/tools/project/project-control.tools.d.ts +2 -0
- package/lib/tools/project/project-control.tools.js +216 -0
- package/lib/tools/project/project-observe.tools.d.ts +2 -0
- package/lib/tools/project/project-observe.tools.js +191 -0
- package/lib/tools/project/runtime-config.d.ts +7 -0
- package/lib/tools/project/runtime-config.js +50 -0
- package/lib/tools/project-observe.tools.d.ts +1 -0
- package/lib/tools/project-observe.tools.js +5 -0
- package/lib/tools/project.tools.d.ts +8 -0
- package/lib/tools/project.tools.js +97 -6
- package/lib/tools/proxy.tools.js +4 -4
- package/lib/tools/review/index.d.ts +1 -0
- package/lib/tools/review/index.js +5 -0
- package/lib/tools/review/review.tools.d.ts +2 -0
- package/lib/tools/review/review.tools.js +152 -0
- package/lib/tools/runtime/index.d.ts +1 -0
- package/lib/tools/runtime/index.js +5 -0
- package/lib/tools/runtime/runtime-control.tools.d.ts +2 -0
- package/lib/tools/runtime/runtime-control.tools.js +89 -0
- package/lib/tools/runtime.tools.js +41 -4
- package/lib/tools/standard/index.d.ts +1 -0
- package/lib/tools/standard/index.js +5 -0
- package/lib/tools/standard/standard.tools.d.ts +2 -0
- package/lib/tools/standard/standard.tools.js +91 -0
- package/lib/tools/task.tools.js +44 -9
- package/lib/tools/test/index.d.ts +1 -0
- package/lib/tools/test/index.js +5 -0
- package/lib/tools/test/test-standard.tools.d.ts +2 -0
- package/lib/tools/test/test-standard.tools.js +51 -0
- package/lib/tools/tool-catalog.d.ts +2 -0
- package/lib/tools/tool-catalog.js +7 -0
- package/lib/tools/workflow/frontend-workflow.tools.d.ts +2 -0
- package/lib/tools/workflow/frontend-workflow.tools.js +364 -0
- package/lib/tools/workflow/index.d.ts +1 -0
- package/lib/tools/workflow/index.js +5 -0
- package/lib/tools/workspace-package.d.ts +22 -0
- package/lib/tools/workspace-package.js +130 -0
- package/lib/tools/workspace.tools.d.ts +7 -0
- package/lib/tools/workspace.tools.js +336 -0
- package/lib/utils/errors.js +6 -1
- package/lib/utils/result.d.ts +9 -0
- package/lib/utils/result.js +9 -0
- package/lib/workflow/frontend-task.schema.d.ts +83 -0
- package/lib/workflow/frontend-task.schema.js +25 -0
- package/lib/workflow/frontend-task.service.d.ts +57 -0
- package/lib/workflow/frontend-task.service.js +195 -0
- package/lib/workflow/workflow-status.d.ts +2 -0
- package/lib/workflow/workflow-status.js +14 -0
- package/lib/workflow/workflow-transition.d.ts +9 -0
- package/lib/workflow/workflow-transition.js +38 -0
- package/package.json +5 -3
- package/lib/tools/hub-v2/config.d.ts +0 -34
- package/lib/tools/hub-v2/config.js +0 -297
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envValue = envValue;
|
|
4
|
+
function envValue(...names) {
|
|
5
|
+
for (const name of names) {
|
|
6
|
+
const value = process.env[name];
|
|
7
|
+
if (value !== undefined && value !== null && String(value).trim()) {
|
|
8
|
+
return String(value).trim();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { resolveAgentConnectionsPath } from "./config-paths";
|
|
2
|
+
export { envValue } from "./env";
|
|
3
|
+
export { loadConfig, normalizeConfig } from "./load-config";
|
|
4
|
+
export type { HubV2Config, HubV2ProjectConfig } from "./load-config";
|
|
5
|
+
export { loadJsonFile, parseJsonObject } from "./jsonc";
|
|
6
|
+
export { getConfiguredProject, listConfiguredProjects } from "./project-selector";
|
|
7
|
+
export { resolveHubV2Context } from "./resolve-context";
|
|
8
|
+
export type { HubV2ResolvedContext, HubV2ResolveOptions } from "./resolve-context";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveHubV2Context = exports.listConfiguredProjects = exports.getConfiguredProject = exports.parseJsonObject = exports.loadJsonFile = exports.normalizeConfig = exports.loadConfig = exports.envValue = exports.resolveAgentConnectionsPath = void 0;
|
|
4
|
+
var config_paths_1 = require("./config-paths");
|
|
5
|
+
Object.defineProperty(exports, "resolveAgentConnectionsPath", { enumerable: true, get: function () { return config_paths_1.resolveAgentConnectionsPath; } });
|
|
6
|
+
var env_1 = require("./env");
|
|
7
|
+
Object.defineProperty(exports, "envValue", { enumerable: true, get: function () { return env_1.envValue; } });
|
|
8
|
+
var load_config_1 = require("./load-config");
|
|
9
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return load_config_1.loadConfig; } });
|
|
10
|
+
Object.defineProperty(exports, "normalizeConfig", { enumerable: true, get: function () { return load_config_1.normalizeConfig; } });
|
|
11
|
+
var jsonc_1 = require("./jsonc");
|
|
12
|
+
Object.defineProperty(exports, "loadJsonFile", { enumerable: true, get: function () { return jsonc_1.loadJsonFile; } });
|
|
13
|
+
Object.defineProperty(exports, "parseJsonObject", { enumerable: true, get: function () { return jsonc_1.parseJsonObject; } });
|
|
14
|
+
var project_selector_1 = require("./project-selector");
|
|
15
|
+
Object.defineProperty(exports, "getConfiguredProject", { enumerable: true, get: function () { return project_selector_1.getConfiguredProject; } });
|
|
16
|
+
Object.defineProperty(exports, "listConfiguredProjects", { enumerable: true, get: function () { return project_selector_1.listConfiguredProjects; } });
|
|
17
|
+
var resolve_context_1 = require("./resolve-context");
|
|
18
|
+
Object.defineProperty(exports, "resolveHubV2Context", { enumerable: true, get: function () { return resolve_context_1.resolveHubV2Context; } });
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function asRecord(value: unknown): Record<string, unknown>;
|
|
2
|
+
export declare function getString(record: Record<string, unknown>, ...keys: string[]): string | undefined;
|
|
3
|
+
export declare function putIfValue(target: Record<string, unknown>, key: string, value: unknown): void;
|
|
4
|
+
export declare function parseJsonObject(content: string): Record<string, unknown>;
|
|
5
|
+
export declare function loadJsonFile(path: string): Record<string, unknown>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asRecord = asRecord;
|
|
4
|
+
exports.getString = getString;
|
|
5
|
+
exports.putIfValue = putIfValue;
|
|
6
|
+
exports.parseJsonObject = parseJsonObject;
|
|
7
|
+
exports.loadJsonFile = loadJsonFile;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
function asRecord(value) {
|
|
10
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
11
|
+
? value
|
|
12
|
+
: {};
|
|
13
|
+
}
|
|
14
|
+
function getString(record, ...keys) {
|
|
15
|
+
for (const key of keys) {
|
|
16
|
+
const value = record[key];
|
|
17
|
+
if (value !== undefined && value !== null && String(value).trim()) {
|
|
18
|
+
return String(value).trim();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function putIfValue(target, key, value) {
|
|
24
|
+
if (value !== undefined && value !== null && String(value).trim()) {
|
|
25
|
+
target[key] = String(value).trim();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function stripJsonComments(input) {
|
|
29
|
+
let output = "";
|
|
30
|
+
let inString = false;
|
|
31
|
+
let stringQuote = "";
|
|
32
|
+
let escaped = false;
|
|
33
|
+
for (let index = 0; index < input.length; index += 1) {
|
|
34
|
+
const char = input[index];
|
|
35
|
+
const next = input[index + 1];
|
|
36
|
+
if (inString) {
|
|
37
|
+
output += char;
|
|
38
|
+
if (escaped) {
|
|
39
|
+
escaped = false;
|
|
40
|
+
}
|
|
41
|
+
else if (char === "\\") {
|
|
42
|
+
escaped = true;
|
|
43
|
+
}
|
|
44
|
+
else if (char === stringQuote) {
|
|
45
|
+
inString = false;
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (char === '"' || char === "'") {
|
|
50
|
+
inString = true;
|
|
51
|
+
stringQuote = char;
|
|
52
|
+
output += char;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (char === "/" && next === "/") {
|
|
56
|
+
while (index < input.length && input[index] !== "\n") {
|
|
57
|
+
index += 1;
|
|
58
|
+
}
|
|
59
|
+
output += "\n";
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (char === "/" && next === "*") {
|
|
63
|
+
index += 2;
|
|
64
|
+
while (index < input.length && !(input[index] === "*" && input[index + 1] === "/")) {
|
|
65
|
+
index += 1;
|
|
66
|
+
}
|
|
67
|
+
index += 1;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
output += char;
|
|
71
|
+
}
|
|
72
|
+
return output;
|
|
73
|
+
}
|
|
74
|
+
function parseJsonObject(content) {
|
|
75
|
+
if (!content.trim()) {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
const parsed = JSON.parse(stripJsonComments(content));
|
|
79
|
+
return asRecord(parsed);
|
|
80
|
+
}
|
|
81
|
+
function loadJsonFile(path) {
|
|
82
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
return parseJsonObject((0, fs_1.readFileSync)(path, "utf8"));
|
|
86
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type HubV2ProjectConfig = {
|
|
2
|
+
name?: string;
|
|
3
|
+
alias?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
base_url?: string;
|
|
6
|
+
project_key?: string;
|
|
7
|
+
project_name?: string;
|
|
8
|
+
project_token?: string;
|
|
9
|
+
personal_token?: string;
|
|
10
|
+
source?: string;
|
|
11
|
+
};
|
|
12
|
+
export type HubV2Config = HubV2ProjectConfig & {
|
|
13
|
+
default_project?: string;
|
|
14
|
+
projects?: Record<string, HubV2ProjectConfig>;
|
|
15
|
+
};
|
|
16
|
+
export declare function normalizeConfig(rawValue: unknown): HubV2Config;
|
|
17
|
+
export declare function loadConfig(pathValue?: string): HubV2Config;
|
|
18
|
+
export declare function configEnvValue(name: string): string | undefined;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeConfig = normalizeConfig;
|
|
4
|
+
exports.loadConfig = loadConfig;
|
|
5
|
+
exports.configEnvValue = configEnvValue;
|
|
6
|
+
const config_paths_1 = require("./config-paths");
|
|
7
|
+
const env_1 = require("./env");
|
|
8
|
+
const jsonc_1 = require("./jsonc");
|
|
9
|
+
function mergeHubObject(target, value) {
|
|
10
|
+
const source = (0, jsonc_1.asRecord)(value);
|
|
11
|
+
(0, jsonc_1.putIfValue)(target, "base_url", (0, jsonc_1.getString)(source, "base_url", "baseUrl"));
|
|
12
|
+
(0, jsonc_1.putIfValue)(target, "project_key", (0, jsonc_1.getString)(source, "project_key", "projectKey"));
|
|
13
|
+
(0, jsonc_1.putIfValue)(target, "project_name", (0, jsonc_1.getString)(source, "project_name", "projectName"));
|
|
14
|
+
(0, jsonc_1.putIfValue)(target, "project_token", (0, jsonc_1.getString)(source, "project_token", "projectToken", "token"));
|
|
15
|
+
(0, jsonc_1.putIfValue)(target, "personal_token", (0, jsonc_1.getString)(source, "personal_token", "personalToken"));
|
|
16
|
+
(0, jsonc_1.putIfValue)(target, "source", (0, jsonc_1.getString)(source, "source"));
|
|
17
|
+
(0, jsonc_1.putIfValue)(target, "default_project", (0, jsonc_1.getString)(source, "default_project", "defaultProject", "project"));
|
|
18
|
+
}
|
|
19
|
+
function mergeEnvObject(target, value) {
|
|
20
|
+
const env = (0, jsonc_1.asRecord)(value);
|
|
21
|
+
(0, jsonc_1.putIfValue)(target, "base_url", (0, jsonc_1.getString)(env, "HUB_V2_BASE_URL"));
|
|
22
|
+
(0, jsonc_1.putIfValue)(target, "project_key", (0, jsonc_1.getString)(env, "HUB_V2_PROJECT_KEY"));
|
|
23
|
+
(0, jsonc_1.putIfValue)(target, "project_token", (0, jsonc_1.getString)(env, "HUB_V2_PROJECT_TOKEN"));
|
|
24
|
+
(0, jsonc_1.putIfValue)(target, "personal_token", (0, jsonc_1.getString)(env, "HUB_V2_PERSONAL_TOKEN"));
|
|
25
|
+
(0, jsonc_1.putIfValue)(target, "source", (0, jsonc_1.getString)(env, "HUB_V2_SOURCE"));
|
|
26
|
+
(0, jsonc_1.putIfValue)(target, "default_project", (0, jsonc_1.getString)(env, "HUB_V2_PROJECT"));
|
|
27
|
+
}
|
|
28
|
+
function normalizeProject(raw) {
|
|
29
|
+
const config = normalizeConfig(raw);
|
|
30
|
+
const record = (0, jsonc_1.asRecord)(raw);
|
|
31
|
+
(0, jsonc_1.putIfValue)(config, "name", record.name);
|
|
32
|
+
(0, jsonc_1.putIfValue)(config, "alias", record.alias);
|
|
33
|
+
(0, jsonc_1.putIfValue)(config, "id", record.id);
|
|
34
|
+
delete config.projects;
|
|
35
|
+
delete config.default_project;
|
|
36
|
+
return config;
|
|
37
|
+
}
|
|
38
|
+
function normalizeProjects(raw) {
|
|
39
|
+
const value = raw.projects;
|
|
40
|
+
const projects = {};
|
|
41
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
42
|
+
for (const [name, projectValue] of Object.entries(value)) {
|
|
43
|
+
const project = normalizeProject(projectValue);
|
|
44
|
+
const projectName = project.name ?? project.alias ?? name.trim();
|
|
45
|
+
if (projectName) {
|
|
46
|
+
projects[projectName] = project;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (Array.isArray(value)) {
|
|
51
|
+
for (const projectValue of value) {
|
|
52
|
+
const project = normalizeProject(projectValue);
|
|
53
|
+
const projectName = project.name ?? project.alias ?? project.id;
|
|
54
|
+
if (projectName) {
|
|
55
|
+
projects[projectName] = project;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return projects;
|
|
60
|
+
}
|
|
61
|
+
function mergeProjects(...maps) {
|
|
62
|
+
const merged = {};
|
|
63
|
+
for (const map of maps) {
|
|
64
|
+
for (const [name, project] of Object.entries(map)) {
|
|
65
|
+
merged[name] = { ...(merged[name] ?? {}), ...project };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return merged;
|
|
69
|
+
}
|
|
70
|
+
function normalizeConfig(rawValue) {
|
|
71
|
+
const raw = (0, jsonc_1.asRecord)(rawValue);
|
|
72
|
+
const normalized = {};
|
|
73
|
+
mergeHubObject(normalized, raw);
|
|
74
|
+
mergeHubObject(normalized, raw.hubV2);
|
|
75
|
+
mergeEnvObject(normalized, raw.env);
|
|
76
|
+
const projects = mergeProjects(normalizeProjects(raw), normalizeProjects((0, jsonc_1.asRecord)(raw.hubV2)));
|
|
77
|
+
if (Object.keys(projects).length) {
|
|
78
|
+
normalized.projects = projects;
|
|
79
|
+
}
|
|
80
|
+
return normalized;
|
|
81
|
+
}
|
|
82
|
+
function loadConfig(pathValue) {
|
|
83
|
+
for (const path of (0, config_paths_1.configSearchPaths)(pathValue)) {
|
|
84
|
+
const config = normalizeConfig((0, jsonc_1.loadJsonFile)(path));
|
|
85
|
+
if (Object.keys(config).length) {
|
|
86
|
+
return config;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
function configEnvValue(name) {
|
|
92
|
+
return (0, env_1.envValue)(name);
|
|
93
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HubV2Config, HubV2ProjectConfig, HubV2ResolveOptions } from "./resolve-context";
|
|
2
|
+
export declare function selectedProjectConfig(config: HubV2Config, options: HubV2ResolveOptions): HubV2ProjectConfig;
|
|
3
|
+
export declare function configValue(config: HubV2Config, projectConfig: HubV2ProjectConfig, key: keyof HubV2ProjectConfig): string | undefined;
|
|
4
|
+
export declare function listConfiguredProjects(project?: string, pathValue?: string): Record<string, unknown>;
|
|
5
|
+
export declare function getConfiguredProject(options: HubV2ResolveOptions, pathValue?: string): Record<string, unknown>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectedProjectConfig = selectedProjectConfig;
|
|
4
|
+
exports.configValue = configValue;
|
|
5
|
+
exports.listConfiguredProjects = listConfiguredProjects;
|
|
6
|
+
exports.getConfiguredProject = getConfiguredProject;
|
|
7
|
+
const env_1 = require("./env");
|
|
8
|
+
const load_config_1 = require("./load-config");
|
|
9
|
+
function selectedProjectConfig(config, options) {
|
|
10
|
+
const projects = config.projects ?? {};
|
|
11
|
+
const entries = Object.entries(projects);
|
|
12
|
+
if (!entries.length) {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
const selected = options.project ?? (0, env_1.envValue)("HUB_V2_PROJECT") ?? config.default_project;
|
|
16
|
+
if (selected) {
|
|
17
|
+
const project = projects[selected];
|
|
18
|
+
if (!project) {
|
|
19
|
+
throw new Error(`project config not found: ${selected}. Available projects: ${entries.map(([name]) => name).sort().join(", ")}`);
|
|
20
|
+
}
|
|
21
|
+
return project;
|
|
22
|
+
}
|
|
23
|
+
if (entries.length === 1) {
|
|
24
|
+
return entries[0][1];
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`multiple projects configured; pass project. Available projects: ${entries.map(([name]) => name).sort().join(", ")}`);
|
|
27
|
+
}
|
|
28
|
+
function configValue(config, projectConfig, key) {
|
|
29
|
+
return projectConfig[key] ?? config[key];
|
|
30
|
+
}
|
|
31
|
+
function projectSummary(name, config, project) {
|
|
32
|
+
return {
|
|
33
|
+
name,
|
|
34
|
+
projectName: project.project_name,
|
|
35
|
+
projectKey: project.project_key,
|
|
36
|
+
baseUrl: project.base_url ?? config.base_url,
|
|
37
|
+
hasProjectToken: Boolean(project.project_token ?? config.project_token),
|
|
38
|
+
hasPersonalToken: Boolean(project.personal_token ?? config.personal_token),
|
|
39
|
+
isDefault: name === config.default_project,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function listConfiguredProjects(project, pathValue) {
|
|
43
|
+
const config = (0, load_config_1.loadConfig)(pathValue);
|
|
44
|
+
const envProjectKey = (0, env_1.envValue)("HUB_V2_PROJECT_KEY") ?? config.project_key;
|
|
45
|
+
let items;
|
|
46
|
+
if (envProjectKey) {
|
|
47
|
+
items = [
|
|
48
|
+
{
|
|
49
|
+
name: (0, env_1.envValue)("HUB_V2_PROJECT") ?? config.default_project ?? "default",
|
|
50
|
+
projectName: config.project_name,
|
|
51
|
+
projectKey: envProjectKey,
|
|
52
|
+
baseUrl: (0, env_1.envValue)("HUB_V2_BASE_URL") ?? config.base_url,
|
|
53
|
+
hasProjectToken: Boolean((0, env_1.envValue)("HUB_V2_PROJECT_TOKEN") ?? config.project_token),
|
|
54
|
+
hasPersonalToken: Boolean((0, env_1.envValue)("HUB_V2_PERSONAL_TOKEN") ?? config.personal_token),
|
|
55
|
+
isDefault: true,
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const projects = config.projects ?? {};
|
|
61
|
+
items = Object.entries(projects).map(([name, item]) => projectSummary(name, config, item));
|
|
62
|
+
}
|
|
63
|
+
const filtered = project
|
|
64
|
+
? items.filter((item) => item.name === project || item.projectName === project || item.projectKey === project)
|
|
65
|
+
: items;
|
|
66
|
+
return {
|
|
67
|
+
items: filtered,
|
|
68
|
+
total: filtered.length,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function getConfiguredProject(options, pathValue) {
|
|
72
|
+
const config = (0, load_config_1.loadConfig)(pathValue);
|
|
73
|
+
const selected = options.project ?? options.projectKey ?? (0, env_1.envValue)("HUB_V2_PROJECT") ?? config.default_project;
|
|
74
|
+
if (selected) {
|
|
75
|
+
const projects = listConfiguredProjects(selected, pathValue).items;
|
|
76
|
+
if (projects.length === 1) {
|
|
77
|
+
return projects[0];
|
|
78
|
+
}
|
|
79
|
+
if (!projects.length) {
|
|
80
|
+
throw new Error("Hub V2 project config not found");
|
|
81
|
+
}
|
|
82
|
+
throw new Error("multiple Hub V2 project configs matched");
|
|
83
|
+
}
|
|
84
|
+
const projects = listConfiguredProjects(options.project ?? options.projectKey, pathValue).items;
|
|
85
|
+
if (projects.length === 1) {
|
|
86
|
+
return projects[0];
|
|
87
|
+
}
|
|
88
|
+
if (!projects.length) {
|
|
89
|
+
throw new Error("Hub V2 project config not found");
|
|
90
|
+
}
|
|
91
|
+
throw new Error("multiple Hub V2 project configs matched");
|
|
92
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { HubV2Config, HubV2ProjectConfig } from "./load-config";
|
|
2
|
+
export type HubV2ResolveOptions = {
|
|
3
|
+
project?: string;
|
|
4
|
+
projectKey?: string;
|
|
5
|
+
};
|
|
6
|
+
export type HubV2ResolvedContext = {
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
projectKey: string;
|
|
9
|
+
token: string;
|
|
10
|
+
source: string;
|
|
11
|
+
};
|
|
12
|
+
type TokenKind = "project" | "personal";
|
|
13
|
+
export declare function resolveHubV2Context(options: HubV2ResolveOptions, tokenKind: TokenKind, pathValue?: string): HubV2ResolvedContext;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveHubV2Context = resolveHubV2Context;
|
|
4
|
+
const env_1 = require("./env");
|
|
5
|
+
const load_config_1 = require("./load-config");
|
|
6
|
+
const project_selector_1 = require("./project-selector");
|
|
7
|
+
function resolveHubV2Context(options, tokenKind, pathValue) {
|
|
8
|
+
const config = (0, load_config_1.loadConfig)(pathValue);
|
|
9
|
+
const projectConfig = (0, project_selector_1.selectedProjectConfig)(config, options);
|
|
10
|
+
const baseUrl = ((0, env_1.envValue)("HUB_V2_BASE_URL") ??
|
|
11
|
+
(0, project_selector_1.configValue)(config, projectConfig, "base_url"))?.replace(/\/+$/, "");
|
|
12
|
+
const projectKey = options.projectKey ??
|
|
13
|
+
(0, env_1.envValue)("HUB_V2_PROJECT_KEY") ??
|
|
14
|
+
(0, project_selector_1.configValue)(config, projectConfig, "project_key");
|
|
15
|
+
const projectToken = (0, env_1.envValue)("HUB_V2_PROJECT_TOKEN") ??
|
|
16
|
+
(0, project_selector_1.configValue)(config, projectConfig, "project_token");
|
|
17
|
+
const personalToken = (0, env_1.envValue)("HUB_V2_PERSONAL_TOKEN") ??
|
|
18
|
+
(0, project_selector_1.configValue)(config, projectConfig, "personal_token");
|
|
19
|
+
const source = (0, env_1.envValue)("HUB_V2_SOURCE") ??
|
|
20
|
+
(0, project_selector_1.configValue)(config, projectConfig, "source") ??
|
|
21
|
+
"ngm-mcp";
|
|
22
|
+
if (!baseUrl) {
|
|
23
|
+
throw new Error("HUB_V2_BASE_URL is required");
|
|
24
|
+
}
|
|
25
|
+
if (!projectKey) {
|
|
26
|
+
throw new Error("HUB_V2_PROJECT_KEY is required");
|
|
27
|
+
}
|
|
28
|
+
const token = tokenKind === "project" ? projectToken : personalToken;
|
|
29
|
+
if (!token) {
|
|
30
|
+
throw new Error(tokenKind === "project" ? "HUB_V2_PROJECT_TOKEN is required" : "HUB_V2_PERSONAL_TOKEN is required");
|
|
31
|
+
}
|
|
32
|
+
return { baseUrl, projectKey, token, source };
|
|
33
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hubV2DocsTools = hubV2DocsTools;
|
|
4
4
|
const client_1 = require("./client");
|
|
5
|
-
const
|
|
5
|
+
const index_1 = require("./config/index");
|
|
6
6
|
const schemas_1 = require("./schemas");
|
|
7
7
|
const result_1 = require("../../utils/result");
|
|
8
8
|
function hubV2DocsTools() {
|
|
@@ -13,7 +13,7 @@ function hubV2DocsTools() {
|
|
|
13
13
|
riskLevel: "read",
|
|
14
14
|
inputSchema: schemas_1.docsListSchema,
|
|
15
15
|
async handler(args) {
|
|
16
|
-
const ctx = (0,
|
|
16
|
+
const ctx = (0, index_1.resolveHubV2Context)(args, "project");
|
|
17
17
|
const client = new client_1.HubV2Client(ctx);
|
|
18
18
|
const status = args.status;
|
|
19
19
|
const data = await client.request("GET", client.tokenUrl("/docs", {
|
|
@@ -34,7 +34,7 @@ function hubV2DocsTools() {
|
|
|
34
34
|
riskLevel: "read",
|
|
35
35
|
inputSchema: schemas_1.docsGetSchema,
|
|
36
36
|
async handler(args) {
|
|
37
|
-
const ctx = (0,
|
|
37
|
+
const ctx = (0, index_1.resolveHubV2Context)(args, "project");
|
|
38
38
|
const client = new client_1.HubV2Client(ctx);
|
|
39
39
|
const data = await client.request("GET", client.tokenUrl(`/docs/${encodeURIComponent(args.docId)}`));
|
|
40
40
|
return (0, result_1.ok)("hub_v2_docs_get", data);
|
|
@@ -46,7 +46,7 @@ function hubV2DocsTools() {
|
|
|
46
46
|
riskLevel: "read",
|
|
47
47
|
inputSchema: schemas_1.docsGetBySlugSchema,
|
|
48
48
|
async handler(args) {
|
|
49
|
-
const ctx = (0,
|
|
49
|
+
const ctx = (0, index_1.resolveHubV2Context)(args, "project");
|
|
50
50
|
const client = new client_1.HubV2Client(ctx);
|
|
51
51
|
const payload = await client.request("GET", client.tokenUrl(`/docs/by-slug/${encodeURIComponent(args.slug)}`));
|
|
52
52
|
if (args.contentOnly) {
|
|
@@ -65,6 +65,127 @@ function hubV2DocsTools() {
|
|
|
65
65
|
return (0, result_1.ok)("hub_v2_docs_get_by_slug", payload);
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
|
+
{
|
|
69
|
+
name: "hub_v2_docs_create",
|
|
70
|
+
description: "Preview or create a Hub V2 project document draft with Personal Token.",
|
|
71
|
+
riskLevel: "write",
|
|
72
|
+
inputSchema: schemas_1.docsCreateSchema,
|
|
73
|
+
allowPreviewWhenBlocked: true,
|
|
74
|
+
isConfirmed: (args) => args.confirm === true,
|
|
75
|
+
async handler(args) {
|
|
76
|
+
const path = "/docs";
|
|
77
|
+
if (!hasDocumentContent(args)) {
|
|
78
|
+
return (0, result_1.fail)("hub_v2_docs_create", "content or contentMd is required", {
|
|
79
|
+
code: "VALIDATION_ERROR",
|
|
80
|
+
detail: { field: "content" },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const ctx = args.confirm ? (0, index_1.resolveHubV2Context)(args, "personal") : undefined;
|
|
84
|
+
const body = (0, client_1.compact)({
|
|
85
|
+
title: args.title,
|
|
86
|
+
content: args.content,
|
|
87
|
+
contentMd: args.contentMd,
|
|
88
|
+
slug: args.slug,
|
|
89
|
+
category: args.category,
|
|
90
|
+
categoryId: args.categoryId,
|
|
91
|
+
summary: args.summary,
|
|
92
|
+
tags: args.tags,
|
|
93
|
+
status: args.status ?? "draft",
|
|
94
|
+
source: args.source ?? ctx?.source,
|
|
95
|
+
version: args.version,
|
|
96
|
+
});
|
|
97
|
+
if (!args.confirm) {
|
|
98
|
+
return (0, result_1.ok)("hub_v2_docs_create", {
|
|
99
|
+
code: "PREVIEW",
|
|
100
|
+
message: "set confirm=true to execute this write operation",
|
|
101
|
+
data: {
|
|
102
|
+
method: "POST",
|
|
103
|
+
path,
|
|
104
|
+
requiredScope: "doc:create:write",
|
|
105
|
+
body,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const client = new client_1.HubV2Client(ctx);
|
|
110
|
+
const data = await client.request("POST", client.personalUrl(path), body);
|
|
111
|
+
return (0, result_1.ok)("hub_v2_docs_create", data);
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "hub_v2_docs_update",
|
|
116
|
+
description: "Preview or update a Hub V2 project document with Personal Token.",
|
|
117
|
+
riskLevel: "write",
|
|
118
|
+
inputSchema: schemas_1.docsUpdateSchema,
|
|
119
|
+
allowPreviewWhenBlocked: true,
|
|
120
|
+
isConfirmed: (args) => args.confirm === true,
|
|
121
|
+
async handler(args) {
|
|
122
|
+
const path = `/docs/${encodeURIComponent(args.docId)}`;
|
|
123
|
+
if (!hasDocumentUpdateField(args)) {
|
|
124
|
+
return (0, result_1.fail)("hub_v2_docs_update", "at least one document field is required", {
|
|
125
|
+
code: "VALIDATION_ERROR",
|
|
126
|
+
detail: { field: "title" },
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const ctx = args.confirm ? (0, index_1.resolveHubV2Context)(args, "personal") : undefined;
|
|
130
|
+
const body = (0, client_1.compactUndefined)({
|
|
131
|
+
title: args.title,
|
|
132
|
+
content: args.content,
|
|
133
|
+
contentMd: args.contentMd,
|
|
134
|
+
slug: args.slug,
|
|
135
|
+
category: args.category,
|
|
136
|
+
categoryId: args.categoryId,
|
|
137
|
+
summary: args.summary,
|
|
138
|
+
tags: args.tags,
|
|
139
|
+
source: args.source ?? ctx?.source,
|
|
140
|
+
version: args.version,
|
|
141
|
+
});
|
|
142
|
+
if (!args.confirm) {
|
|
143
|
+
return (0, result_1.ok)("hub_v2_docs_update", {
|
|
144
|
+
code: "PREVIEW",
|
|
145
|
+
message: "set confirm=true to execute this write operation",
|
|
146
|
+
data: {
|
|
147
|
+
method: "PATCH",
|
|
148
|
+
path,
|
|
149
|
+
requiredScope: "doc:update:write",
|
|
150
|
+
body,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const client = new client_1.HubV2Client(ctx);
|
|
155
|
+
const data = await client.request("PATCH", client.personalUrl(path), body, { preserveNull: true });
|
|
156
|
+
return (0, result_1.ok)("hub_v2_docs_update", data);
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "hub_v2_docs_publish",
|
|
161
|
+
description: "Preview or publish a Hub V2 project document with Personal Token.",
|
|
162
|
+
riskLevel: "write",
|
|
163
|
+
inputSchema: schemas_1.docsPublishSchema,
|
|
164
|
+
allowPreviewWhenBlocked: true,
|
|
165
|
+
isConfirmed: (args) => args.confirm === true,
|
|
166
|
+
async handler(args) {
|
|
167
|
+
const path = `/docs/${encodeURIComponent(args.docId)}/publish`;
|
|
168
|
+
const ctx = args.confirm ? (0, index_1.resolveHubV2Context)(args, "personal") : undefined;
|
|
169
|
+
const body = (0, client_1.compact)({
|
|
170
|
+
source: args.source ?? ctx?.source,
|
|
171
|
+
});
|
|
172
|
+
if (!args.confirm) {
|
|
173
|
+
return (0, result_1.ok)("hub_v2_docs_publish", {
|
|
174
|
+
code: "PREVIEW",
|
|
175
|
+
message: "set confirm=true to execute this write operation",
|
|
176
|
+
data: {
|
|
177
|
+
method: "POST",
|
|
178
|
+
path,
|
|
179
|
+
requiredScope: "doc:publish:write",
|
|
180
|
+
body,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const client = new client_1.HubV2Client(ctx);
|
|
185
|
+
const data = await client.request("POST", client.personalUrl(path), body);
|
|
186
|
+
return (0, result_1.ok)("hub_v2_docs_publish", data);
|
|
187
|
+
},
|
|
188
|
+
},
|
|
68
189
|
];
|
|
69
190
|
}
|
|
70
191
|
function extractDocumentContent(payload) {
|
|
@@ -79,3 +200,16 @@ function extractDocumentContent(payload) {
|
|
|
79
200
|
: undefined;
|
|
80
201
|
return typeof item?.contentMd === "string" ? item.contentMd : undefined;
|
|
81
202
|
}
|
|
203
|
+
function hasDocumentContent(args) {
|
|
204
|
+
return Boolean(args.content?.trim() || args.contentMd?.trim());
|
|
205
|
+
}
|
|
206
|
+
function hasDocumentUpdateField(args) {
|
|
207
|
+
return (args.title !== undefined ||
|
|
208
|
+
args.content !== undefined ||
|
|
209
|
+
args.contentMd !== undefined ||
|
|
210
|
+
args.slug !== undefined ||
|
|
211
|
+
args.category !== undefined ||
|
|
212
|
+
args.categoryId !== undefined ||
|
|
213
|
+
args.summary !== undefined ||
|
|
214
|
+
args.version !== undefined);
|
|
215
|
+
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.hubV2Tools = hubV2Tools;
|
|
4
4
|
const docs_tools_1 = require("./docs.tools");
|
|
5
5
|
const issues_tools_1 = require("./issues.tools");
|
|
6
|
+
const issues_workflow_tools_1 = require("./issues-workflow.tools");
|
|
6
7
|
const projects_tools_1 = require("./projects.tools");
|
|
7
8
|
const rd_tools_1 = require("./rd.tools");
|
|
8
9
|
const upload_tools_1 = require("./upload.tools");
|
|
@@ -11,6 +12,7 @@ function hubV2Tools() {
|
|
|
11
12
|
...(0, projects_tools_1.hubV2ProjectsTools)(),
|
|
12
13
|
...(0, docs_tools_1.hubV2DocsTools)(),
|
|
13
14
|
...(0, issues_tools_1.hubV2IssuesTools)(),
|
|
15
|
+
...(0, issues_workflow_tools_1.hubV2IssueWorkflowTools)(),
|
|
14
16
|
...(0, rd_tools_1.hubV2RdTools)(),
|
|
15
17
|
...(0, upload_tools_1.hubV2UploadTools)(),
|
|
16
18
|
];
|