mcp4openapi 0.3.1 → 0.3.4
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 +7 -0
- package/dist/src/auth/oauth-provider.d.ts +1 -0
- package/dist/src/auth/oauth-provider.d.ts.map +1 -1
- package/dist/src/auth/oauth-provider.js +17 -0
- package/dist/src/auth/oauth-provider.js.map +1 -1
- package/dist/src/core/cli-config.d.ts.map +1 -1
- package/dist/src/core/cli-config.js +2 -0
- package/dist/src/core/cli-config.js.map +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +18 -3
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/index.js +0 -0
- package/dist/src/profile/profile-allowlist.d.ts +18 -0
- package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
- package/dist/src/profile/profile-allowlist.js +68 -0
- package/dist/src/profile/profile-allowlist.js.map +1 -0
- package/dist/src/profile/profile-registry.d.ts +5 -0
- package/dist/src/profile/profile-registry.d.ts.map +1 -1
- package/dist/src/profile/profile-registry.js +38 -14
- package/dist/src/profile/profile-registry.js.map +1 -1
- package/dist/src/security/ssrf-validator.d.ts +31 -0
- package/dist/src/security/ssrf-validator.d.ts.map +1 -0
- package/dist/src/security/ssrf-validator.js +190 -0
- package/dist/src/security/ssrf-validator.js.map +1 -0
- package/package.json +2 -2
- package/profiles/gitlab/developer-profile-oauth.json +445 -81
- package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
- package/profiles/gitlab/openapi.yaml +1420 -165
- package/profiles/gitlab/profile-optimized-oauth.json +928 -0
- package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
- package/profiles/grafana/openapi.json +28078 -0
- package/profiles/grafana/profile.json +1083 -0
- package/profiles/grafana/profile.test.json +235 -0
- package/profiles/mattermost/openapi.yaml +27434 -0
- package/profiles/mattermost/profile.json +463 -0
- package/profiles/mattermost/profile.test.json +607 -0
- package/profiles/n8n/profile-optimized.json +1002 -364
- package/profiles/n8n/profile-optimized.test.json +43 -43
- package/dist/src/argument-normalizer.d.ts +0 -5
- package/dist/src/argument-normalizer.d.ts.map +0 -1
- package/dist/src/argument-normalizer.js +0 -61
- package/dist/src/argument-normalizer.js.map +0 -1
- package/dist/src/cli-config.d.ts +0 -9
- package/dist/src/cli-config.d.ts.map +0 -1
- package/dist/src/cli-config.js +0 -111
- package/dist/src/cli-config.js.map +0 -1
- package/dist/src/composite-executor.d.ts +0 -77
- package/dist/src/composite-executor.d.ts.map +0 -1
- package/dist/src/composite-executor.js +0 -193
- package/dist/src/composite-executor.js.map +0 -1
- package/dist/src/constants.d.ts +0 -85
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -85
- package/dist/src/constants.js.map +0 -1
- package/dist/src/dag-executor.d.ts +0 -49
- package/dist/src/dag-executor.d.ts.map +0 -1
- package/dist/src/dag-executor.js +0 -138
- package/dist/src/dag-executor.js.map +0 -1
- package/dist/src/errors.d.ts +0 -59
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js +0 -119
- package/dist/src/errors.js.map +0 -1
- package/dist/src/filtering.d.ts +0 -19
- package/dist/src/filtering.d.ts.map +0 -1
- package/dist/src/filtering.js +0 -292
- package/dist/src/filtering.js.map +0 -1
- package/dist/src/http-client-factory.d.ts +0 -62
- package/dist/src/http-client-factory.d.ts.map +0 -1
- package/dist/src/http-client-factory.js +0 -133
- package/dist/src/http-client-factory.js.map +0 -1
- package/dist/src/http-transport-config.d.ts +0 -6
- package/dist/src/http-transport-config.d.ts.map +0 -1
- package/dist/src/http-transport-config.js +0 -47
- package/dist/src/http-transport-config.js.map +0 -1
- package/dist/src/http-transport.d.ts +0 -316
- package/dist/src/http-transport.d.ts.map +0 -1
- package/dist/src/http-transport.js +0 -2412
- package/dist/src/http-transport.js.map +0 -1
- package/dist/src/interceptors.d.ts +0 -116
- package/dist/src/interceptors.d.ts.map +0 -1
- package/dist/src/interceptors.js +0 -392
- package/dist/src/interceptors.js.map +0 -1
- package/dist/src/jsonrpc-validator.d.ts +0 -27
- package/dist/src/jsonrpc-validator.d.ts.map +0 -1
- package/dist/src/jsonrpc-validator.js +0 -58
- package/dist/src/jsonrpc-validator.js.map +0 -1
- package/dist/src/logger.d.ts +0 -59
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -177
- package/dist/src/logger.js.map +0 -1
- package/dist/src/mcp-server-manager.d.ts +0 -20
- package/dist/src/mcp-server-manager.d.ts.map +0 -1
- package/dist/src/mcp-server-manager.js +0 -38
- package/dist/src/mcp-server-manager.js.map +0 -1
- package/dist/src/mcp-server.d.ts +0 -203
- package/dist/src/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp-server.js +0 -1369
- package/dist/src/mcp-server.js.map +0 -1
- package/dist/src/metrics.d.ts +0 -97
- package/dist/src/metrics.d.ts.map +0 -1
- package/dist/src/metrics.js +0 -273
- package/dist/src/metrics.js.map +0 -1
- package/dist/src/naming-warnings.d.ts +0 -23
- package/dist/src/naming-warnings.d.ts.map +0 -1
- package/dist/src/naming-warnings.js +0 -83
- package/dist/src/naming-warnings.js.map +0 -1
- package/dist/src/naming.d.ts +0 -58
- package/dist/src/naming.d.ts.map +0 -1
- package/dist/src/naming.js +0 -510
- package/dist/src/naming.js.map +0 -1
- package/dist/src/oauth-provider.d.ts +0 -131
- package/dist/src/oauth-provider.d.ts.map +0 -1
- package/dist/src/oauth-provider.js +0 -836
- package/dist/src/oauth-provider.js.map +0 -1
- package/dist/src/openapi-parser.d.ts +0 -70
- package/dist/src/openapi-parser.d.ts.map +0 -1
- package/dist/src/openapi-parser.js +0 -436
- package/dist/src/openapi-parser.js.map +0 -1
- package/dist/src/profile-loader.d.ts +0 -78
- package/dist/src/profile-loader.d.ts.map +0 -1
- package/dist/src/profile-loader.js +0 -483
- package/dist/src/profile-loader.js.map +0 -1
- package/dist/src/profile-registry.d.ts +0 -18
- package/dist/src/profile-registry.d.ts.map +0 -1
- package/dist/src/profile-registry.js +0 -26
- package/dist/src/profile-registry.js.map +0 -1
- package/dist/src/profile-resolver.d.ts +0 -19
- package/dist/src/profile-resolver.d.ts.map +0 -1
- package/dist/src/profile-resolver.js +0 -167
- package/dist/src/profile-resolver.js.map +0 -1
- package/dist/src/proxy-executor.d.ts +0 -86
- package/dist/src/proxy-executor.d.ts.map +0 -1
- package/dist/src/proxy-executor.js +0 -497
- package/dist/src/proxy-executor.js.map +0 -1
- package/dist/src/schema-validator.d.ts +0 -30
- package/dist/src/schema-validator.d.ts.map +0 -1
- package/dist/src/schema-validator.js +0 -128
- package/dist/src/schema-validator.js.map +0 -1
- package/dist/src/startup-profile.d.ts +0 -17
- package/dist/src/startup-profile.d.ts.map +0 -1
- package/dist/src/startup-profile.js +0 -30
- package/dist/src/startup-profile.js.map +0 -1
- package/dist/src/startup-validation.d.ts +0 -11
- package/dist/src/startup-validation.d.ts.map +0 -1
- package/dist/src/startup-validation.js +0 -21
- package/dist/src/startup-validation.js.map +0 -1
- package/dist/src/tool-filter.d.ts +0 -65
- package/dist/src/tool-filter.d.ts.map +0 -1
- package/dist/src/tool-filter.js +0 -471
- package/dist/src/tool-filter.js.map +0 -1
- package/dist/src/tool-generator.d.ts +0 -67
- package/dist/src/tool-generator.d.ts.map +0 -1
- package/dist/src/tool-generator.js +0 -182
- package/dist/src/tool-generator.js.map +0 -1
- package/dist/src/validation-utils.d.ts +0 -49
- package/dist/src/validation-utils.d.ts.map +0 -1
- package/dist/src/validation-utils.js +0 -138
- package/dist/src/validation-utils.js.map +0 -1
- package/profiles/gitlab/developer-profile.json +0 -1508
- package/profiles/gitlab/developer-profile.test.json +0 -3432
package/dist/src/naming.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool name shortening strategies
|
|
3
|
-
*
|
|
4
|
-
* Why: MCP tool names combined with server name must stay under limits.
|
|
5
|
-
* Different strategies offer trade-offs between readability and compactness.
|
|
6
|
-
*/
|
|
7
|
-
export declare enum NamingStrategy {
|
|
8
|
-
None = "none",
|
|
9
|
-
Balanced = "balanced",
|
|
10
|
-
Iterative = "iterative",
|
|
11
|
-
Hash = "hash",
|
|
12
|
-
Auto = "auto"
|
|
13
|
-
}
|
|
14
|
-
export interface OperationForNaming {
|
|
15
|
-
operationId: string;
|
|
16
|
-
method: string;
|
|
17
|
-
path: string;
|
|
18
|
-
tags?: string[];
|
|
19
|
-
}
|
|
20
|
-
export interface ShortenResult {
|
|
21
|
-
name: string;
|
|
22
|
-
truncated: boolean;
|
|
23
|
-
strategy: NamingStrategy;
|
|
24
|
-
originalLength: number;
|
|
25
|
-
partsUsed?: number;
|
|
26
|
-
}
|
|
27
|
-
export interface SimilarPair {
|
|
28
|
-
opA: OperationForNaming;
|
|
29
|
-
opB: OperationForNaming;
|
|
30
|
-
similarity: number;
|
|
31
|
-
}
|
|
32
|
-
export interface ShorteningOptions {
|
|
33
|
-
maxLength: number;
|
|
34
|
-
minParts?: number;
|
|
35
|
-
minLength?: number;
|
|
36
|
-
allOperations?: OperationForNaming[];
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Shorten tool name using specified strategy
|
|
40
|
-
*/
|
|
41
|
-
export declare function shortenToolName(op: OperationForNaming, strategy: NamingStrategy, maxLength: number, allOperations?: OperationForNaming[], options?: Partial<ShorteningOptions>): ShortenResult;
|
|
42
|
-
/**
|
|
43
|
-
* Generate stable short hash from string
|
|
44
|
-
*/
|
|
45
|
-
export declare function stableHash(str: string, length?: number): string;
|
|
46
|
-
/**
|
|
47
|
-
* Calculate Levenshtein distance between two strings
|
|
48
|
-
*/
|
|
49
|
-
export declare function levenshteinDistance(a: string, b: string): number;
|
|
50
|
-
/**
|
|
51
|
-
* Pick most similar pairs of operations
|
|
52
|
-
*/
|
|
53
|
-
export declare function pickMostSimilarPairs(operations: OperationForNaming[], topN: number, threshold?: number): SimilarPair[];
|
|
54
|
-
/**
|
|
55
|
-
* Detect potential collisions when shortening multiple operations
|
|
56
|
-
*/
|
|
57
|
-
export declare function detectCollisions(operations: OperationForNaming[], strategy: NamingStrategy, maxLength: number, options?: Partial<ShorteningOptions>): Map<string, OperationForNaming[]>;
|
|
58
|
-
//# sourceMappingURL=naming.d.ts.map
|
package/dist/src/naming.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/naming.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,kBAAkB,CAAC;IACxB,GAAG,EAAE,kBAAkB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,kBAAkB,EAAE,EACpC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,aAAa,CAoDf;AAiYD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAUlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBhE;AAaD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,kBAAkB,EAAE,EAChC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAa,GACvB,WAAW,EAAE,CA4Df;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAAE,EAChC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAmBnC"}
|
package/dist/src/naming.js
DELETED
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool name shortening strategies
|
|
3
|
-
*
|
|
4
|
-
* Why: MCP tool names combined with server name must stay under limits.
|
|
5
|
-
* Different strategies offer trade-offs between readability and compactness.
|
|
6
|
-
*/
|
|
7
|
-
export var NamingStrategy;
|
|
8
|
-
(function (NamingStrategy) {
|
|
9
|
-
NamingStrategy["None"] = "none";
|
|
10
|
-
NamingStrategy["Balanced"] = "balanced";
|
|
11
|
-
NamingStrategy["Iterative"] = "iterative";
|
|
12
|
-
NamingStrategy["Hash"] = "hash";
|
|
13
|
-
NamingStrategy["Auto"] = "auto";
|
|
14
|
-
})(NamingStrategy || (NamingStrategy = {}));
|
|
15
|
-
/**
|
|
16
|
-
* Shorten tool name using specified strategy
|
|
17
|
-
*/
|
|
18
|
-
export function shortenToolName(op, strategy, maxLength, allOperations, options) {
|
|
19
|
-
const originalLength = op.operationId.length;
|
|
20
|
-
if (strategy === NamingStrategy.None) {
|
|
21
|
-
return {
|
|
22
|
-
name: op.operationId,
|
|
23
|
-
truncated: false,
|
|
24
|
-
strategy,
|
|
25
|
-
originalLength,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
const opts = {
|
|
29
|
-
maxLength,
|
|
30
|
-
minParts: options?.minParts ?? 3,
|
|
31
|
-
minLength: options?.minLength ?? 20,
|
|
32
|
-
allOperations: allOperations || [op],
|
|
33
|
-
};
|
|
34
|
-
let result;
|
|
35
|
-
switch (strategy) {
|
|
36
|
-
case NamingStrategy.Balanced:
|
|
37
|
-
result = shortenWithBalanced(op, opts);
|
|
38
|
-
break;
|
|
39
|
-
case NamingStrategy.Iterative:
|
|
40
|
-
result = shortenWithIterative(op, opts);
|
|
41
|
-
break;
|
|
42
|
-
case NamingStrategy.Hash:
|
|
43
|
-
result = shortenWithHash(op, opts);
|
|
44
|
-
break;
|
|
45
|
-
case NamingStrategy.Auto:
|
|
46
|
-
// Try strategies in order: balanced → iterative → hash
|
|
47
|
-
result = shortenWithBalanced(op, opts);
|
|
48
|
-
if (result.name.length > maxLength) {
|
|
49
|
-
result = shortenWithIterative(op, opts);
|
|
50
|
-
}
|
|
51
|
-
if (result.name.length > maxLength) {
|
|
52
|
-
result = shortenWithHash(op, opts);
|
|
53
|
-
}
|
|
54
|
-
result.strategy = NamingStrategy.Auto;
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
result = {
|
|
58
|
-
name: op.operationId,
|
|
59
|
-
truncated: false,
|
|
60
|
-
strategy,
|
|
61
|
-
originalLength,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Split camelCase/snake_case into parts
|
|
68
|
-
*/
|
|
69
|
-
function splitCamelCase(str) {
|
|
70
|
-
return str
|
|
71
|
-
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
72
|
-
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
|
|
73
|
-
.split(/[_\-\/]/)
|
|
74
|
-
.filter(Boolean);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Sanitize name to valid identifier
|
|
78
|
-
*/
|
|
79
|
-
function sanitizeName(name) {
|
|
80
|
-
return name
|
|
81
|
-
.toLowerCase()
|
|
82
|
-
.replace(/[^a-z0-9_]/g, '_')
|
|
83
|
-
.replace(/_+/g, '_')
|
|
84
|
-
.replace(/^_|_$/g, '');
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Analyze part frequency across all operations
|
|
88
|
-
*/
|
|
89
|
-
function analyzeFrequency(operations) {
|
|
90
|
-
const partCounts = new Map();
|
|
91
|
-
operations.forEach(op => {
|
|
92
|
-
const parts = splitCamelCase(op.operationId);
|
|
93
|
-
const uniqueParts = new Set(parts.map(p => p.toLowerCase()));
|
|
94
|
-
uniqueParts.forEach(part => {
|
|
95
|
-
partCounts.set(part, (partCounts.get(part) || 0) + 1);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
return partCounts;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Check if candidate is unique across all operations
|
|
102
|
-
*/
|
|
103
|
-
function isUniqueCandidate(candidate, candidateName, op, allOps) {
|
|
104
|
-
return !allOps.some(other => {
|
|
105
|
-
if (other.operationId === op.operationId)
|
|
106
|
-
return false;
|
|
107
|
-
const otherParts = splitCamelCase(other.operationId);
|
|
108
|
-
const otherCandidate = candidate
|
|
109
|
-
.filter(c => c.index < otherParts.length)
|
|
110
|
-
.map(c => otherParts[c.index])
|
|
111
|
-
.filter(Boolean);
|
|
112
|
-
const otherCandidateName = sanitizeName(otherCandidate.join('_'));
|
|
113
|
-
return candidateName === otherCandidateName;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Extract path parameters from path
|
|
118
|
-
*/
|
|
119
|
-
function extractPathParams(path) {
|
|
120
|
-
return (path.match(/\{([^}]+)\}/g) || [])
|
|
121
|
-
.map(p => p.slice(1, -1).replace(/[^a-z0-9]/gi, '').toLowerCase());
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Balanced strategy: Add parts by importance until unique, meaningful, and under limit
|
|
125
|
-
*/
|
|
126
|
-
function shortenWithBalanced(op, opts) {
|
|
127
|
-
const parts = splitCamelCase(op.operationId);
|
|
128
|
-
const normalized = sanitizeName(parts.join('_'));
|
|
129
|
-
// If already under limit, don't shorten
|
|
130
|
-
if (normalized.length <= opts.maxLength) {
|
|
131
|
-
return {
|
|
132
|
-
name: normalized,
|
|
133
|
-
truncated: false,
|
|
134
|
-
strategy: NamingStrategy.Balanced,
|
|
135
|
-
originalLength: op.operationId.length,
|
|
136
|
-
partsUsed: parts.length,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const allOps = opts.allOperations || [op];
|
|
140
|
-
const total = allOps.length;
|
|
141
|
-
const partCounts = analyzeFrequency(allOps);
|
|
142
|
-
const verb = parts[0]?.toLowerCase();
|
|
143
|
-
const knownVerbs = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'];
|
|
144
|
-
const hasVerb = knownVerbs.includes(verb);
|
|
145
|
-
// Score each part by informativeness
|
|
146
|
-
const partScores = parts.map((part, index) => {
|
|
147
|
-
const lower = part.toLowerCase();
|
|
148
|
-
const count = partCounts.get(lower) || 0;
|
|
149
|
-
const frequency = count / total;
|
|
150
|
-
const rarityScore = 1 - frequency;
|
|
151
|
-
const verbBonus = (index === 0 && hasVerb) ? 2.0 : 0;
|
|
152
|
-
const commonPenalty = frequency > 0.5 ? -0.5 : 0;
|
|
153
|
-
return {
|
|
154
|
-
part,
|
|
155
|
-
index,
|
|
156
|
-
frequency,
|
|
157
|
-
score: rarityScore + verbBonus + commonPenalty,
|
|
158
|
-
};
|
|
159
|
-
});
|
|
160
|
-
const sortedParts = [...partScores].sort((a, b) => b.score - a.score);
|
|
161
|
-
let candidate = [];
|
|
162
|
-
let candidateName = '';
|
|
163
|
-
let bestValidCandidate = null;
|
|
164
|
-
// Add parts iteratively
|
|
165
|
-
for (const scored of sortedParts) {
|
|
166
|
-
candidate.push(scored);
|
|
167
|
-
candidate.sort((a, b) => a.index - b.index);
|
|
168
|
-
candidateName = sanitizeName(candidate.map(c => c.part).join('_'));
|
|
169
|
-
const isUnique = isUniqueCandidate(candidate, candidateName, op, allOps);
|
|
170
|
-
const underLimit = candidateName.length <= opts.maxLength;
|
|
171
|
-
const hasMinParts = candidate.length >= (opts.minParts || 3);
|
|
172
|
-
const hasMinLength = candidateName.length >= (opts.minLength || 20);
|
|
173
|
-
// Check if we've reached optimal
|
|
174
|
-
if (isUnique && underLimit && hasMinParts && hasMinLength) {
|
|
175
|
-
return {
|
|
176
|
-
name: candidateName,
|
|
177
|
-
truncated: true,
|
|
178
|
-
strategy: NamingStrategy.Balanced,
|
|
179
|
-
originalLength: op.operationId.length,
|
|
180
|
-
partsUsed: candidate.length,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
// Track best valid (unique + under limit)
|
|
184
|
-
if (isUnique && underLimit) {
|
|
185
|
-
bestValidCandidate = {
|
|
186
|
-
name: candidateName,
|
|
187
|
-
parts: candidate.length,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
// Stop if over limit or too many parts
|
|
191
|
-
if (candidateName.length > opts.maxLength || candidate.length >= Math.min(8, parts.length * 0.7)) {
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
// Use best valid candidate if found
|
|
196
|
-
if (bestValidCandidate) {
|
|
197
|
-
return {
|
|
198
|
-
name: bestValidCandidate.name,
|
|
199
|
-
truncated: true,
|
|
200
|
-
strategy: NamingStrategy.Balanced,
|
|
201
|
-
originalLength: op.operationId.length,
|
|
202
|
-
partsUsed: bestValidCandidate.parts,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
// Fallback: remove very common parts (≥95%)
|
|
206
|
-
const veryCommon = new Set();
|
|
207
|
-
partCounts.forEach((count, part) => {
|
|
208
|
-
if ((count / total) >= 0.95)
|
|
209
|
-
veryCommon.add(part);
|
|
210
|
-
});
|
|
211
|
-
const filtered = parts.filter((p, i) => {
|
|
212
|
-
if (i === 0 && hasVerb)
|
|
213
|
-
return true;
|
|
214
|
-
return !veryCommon.has(p.toLowerCase());
|
|
215
|
-
});
|
|
216
|
-
candidateName = sanitizeName(filtered.join('_'));
|
|
217
|
-
if (candidateName.length > opts.maxLength) {
|
|
218
|
-
candidateName = candidateName.substring(0, opts.maxLength);
|
|
219
|
-
}
|
|
220
|
-
return {
|
|
221
|
-
name: candidateName,
|
|
222
|
-
truncated: true,
|
|
223
|
-
strategy: NamingStrategy.Balanced,
|
|
224
|
-
originalLength: op.operationId.length,
|
|
225
|
-
partsUsed: filtered.length,
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Iterative strategy: Remove parts progressively until under limit
|
|
230
|
-
*/
|
|
231
|
-
function shortenWithIterative(op, opts) {
|
|
232
|
-
const originalParts = splitCamelCase(op.operationId);
|
|
233
|
-
let parts = [...originalParts];
|
|
234
|
-
const normalized = sanitizeName(parts.join('_'));
|
|
235
|
-
// If already under limit, don't shorten
|
|
236
|
-
if (normalized.length <= opts.maxLength) {
|
|
237
|
-
return {
|
|
238
|
-
name: normalized,
|
|
239
|
-
truncated: false,
|
|
240
|
-
strategy: NamingStrategy.Iterative,
|
|
241
|
-
originalLength: op.operationId.length,
|
|
242
|
-
partsUsed: parts.length,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
const allOps = opts.allOperations || [op];
|
|
246
|
-
const total = allOps.length;
|
|
247
|
-
const partCounts = analyzeFrequency(allOps);
|
|
248
|
-
const verb = parts[0]?.toLowerCase();
|
|
249
|
-
const knownVerbs = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'];
|
|
250
|
-
const hasVerb = knownVerbs.includes(verb);
|
|
251
|
-
const pathParams = extractPathParams(op.path);
|
|
252
|
-
const currentLength = () => sanitizeName(parts.join('_')).length;
|
|
253
|
-
// Step 1: Remove very common noise (≥95%)
|
|
254
|
-
if (currentLength() > opts.maxLength) {
|
|
255
|
-
const veryCommon = new Set();
|
|
256
|
-
partCounts.forEach((count, part) => {
|
|
257
|
-
if ((count / total) >= 0.95)
|
|
258
|
-
veryCommon.add(part);
|
|
259
|
-
});
|
|
260
|
-
if (veryCommon.size > 0) {
|
|
261
|
-
parts = parts.filter((p, i) => {
|
|
262
|
-
if (i === 0 && hasVerb)
|
|
263
|
-
return true;
|
|
264
|
-
return !veryCommon.has(p.toLowerCase());
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
// Step 2: Remove common noise (≥80%)
|
|
269
|
-
if (currentLength() > opts.maxLength) {
|
|
270
|
-
const common = new Set();
|
|
271
|
-
partCounts.forEach((count, part) => {
|
|
272
|
-
if ((count / total) >= 0.80 && (count / total) < 0.95) {
|
|
273
|
-
common.add(part);
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
if (common.size > 0) {
|
|
277
|
-
parts = parts.filter((p, i) => {
|
|
278
|
-
if (i === 0 && hasVerb)
|
|
279
|
-
return true;
|
|
280
|
-
return !common.has(p.toLowerCase());
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// Step 3: Remove path parameter suffixes
|
|
285
|
-
if (currentLength() > opts.maxLength) {
|
|
286
|
-
const paramSuffixes = ['id', 'iid'];
|
|
287
|
-
parts = parts.filter((p, i) => {
|
|
288
|
-
if (i === 0 && hasVerb)
|
|
289
|
-
return true;
|
|
290
|
-
const lower = p.toLowerCase();
|
|
291
|
-
if (paramSuffixes.includes(lower))
|
|
292
|
-
return false;
|
|
293
|
-
const normalized = lower.replace(/id$|iid$/i, '');
|
|
294
|
-
if (pathParams.includes(normalized) || pathParams.includes(lower)) {
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
return true;
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
// Step 4: Remove duplicates
|
|
301
|
-
if (currentLength() > opts.maxLength) {
|
|
302
|
-
const seen = new Set();
|
|
303
|
-
parts = parts.filter((p, i) => {
|
|
304
|
-
if (i === 0 && hasVerb)
|
|
305
|
-
return true;
|
|
306
|
-
const lower = p.toLowerCase();
|
|
307
|
-
if (seen.has(lower))
|
|
308
|
-
return false;
|
|
309
|
-
seen.add(lower);
|
|
310
|
-
return true;
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
// Step 5: Remove moderately common (≥50%)
|
|
314
|
-
if (currentLength() > opts.maxLength) {
|
|
315
|
-
const moderate = new Set();
|
|
316
|
-
partCounts.forEach((count, part) => {
|
|
317
|
-
if ((count / total) >= 0.50 && (count / total) < 0.80) {
|
|
318
|
-
moderate.add(part);
|
|
319
|
-
}
|
|
320
|
-
});
|
|
321
|
-
if (moderate.size > 0) {
|
|
322
|
-
parts = parts.filter((p, i) => {
|
|
323
|
-
if (i === 0 && hasVerb)
|
|
324
|
-
return true;
|
|
325
|
-
return !moderate.has(p.toLowerCase());
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
// Step 6: Keep only verb + last 2 parts
|
|
330
|
-
if (currentLength() > opts.maxLength) {
|
|
331
|
-
const keepCount = Math.min(3, parts.length);
|
|
332
|
-
if (parts.length > keepCount) {
|
|
333
|
-
const kept = hasVerb
|
|
334
|
-
? [parts[0], ...parts.slice(-2)]
|
|
335
|
-
: parts.slice(-keepCount);
|
|
336
|
-
parts = kept;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
let result = sanitizeName(parts.join('_'));
|
|
340
|
-
// Last resort: truncate
|
|
341
|
-
if (result.length > opts.maxLength) {
|
|
342
|
-
result = result.substring(0, opts.maxLength);
|
|
343
|
-
}
|
|
344
|
-
return {
|
|
345
|
-
name: result,
|
|
346
|
-
truncated: true,
|
|
347
|
-
strategy: NamingStrategy.Iterative,
|
|
348
|
-
originalLength: op.operationId.length,
|
|
349
|
-
partsUsed: parts.length,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Hash strategy: <verb>_<resource>_<hash4>
|
|
354
|
-
*/
|
|
355
|
-
function shortenWithHash(op, opts) {
|
|
356
|
-
const verb = op.method.toLowerCase();
|
|
357
|
-
const resource = extractResourceFromPath(op.path);
|
|
358
|
-
const hash = stableHash(op.operationId, 4);
|
|
359
|
-
let result = `${verb}_${resource}_${hash}`;
|
|
360
|
-
// Ensure under limit
|
|
361
|
-
if (result.length > opts.maxLength) {
|
|
362
|
-
// Try shortening resource
|
|
363
|
-
const shortResource = resource.substring(0, Math.max(3, opts.maxLength - verb.length - hash.length - 2));
|
|
364
|
-
result = `${verb}_${shortResource}_${hash}`;
|
|
365
|
-
// Last resort: truncate
|
|
366
|
-
if (result.length > opts.maxLength) {
|
|
367
|
-
result = result.substring(0, opts.maxLength);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
return {
|
|
371
|
-
name: sanitizeName(result),
|
|
372
|
-
truncated: true,
|
|
373
|
-
strategy: NamingStrategy.Hash,
|
|
374
|
-
originalLength: op.operationId.length,
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Extract main resource from path
|
|
379
|
-
*/
|
|
380
|
-
function extractResourceFromPath(path) {
|
|
381
|
-
const segments = path.split('/').filter(s => s && !s.startsWith('{'));
|
|
382
|
-
// Find last non-action meaningful segment
|
|
383
|
-
const actionWords = ['protect', 'unprotect', 'merge', 'approve', 'cancel', 'authorize'];
|
|
384
|
-
for (let i = segments.length - 1; i >= 0; i--) {
|
|
385
|
-
const segment = segments[i].toLowerCase();
|
|
386
|
-
if (!['api', 'v1', 'v2', 'v3', 'v4', 'repository'].includes(segment) &&
|
|
387
|
-
!actionWords.includes(segment)) {
|
|
388
|
-
return sanitizeName(segments[i]);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
return sanitizeName(segments[segments.length - 1] || 'resource');
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Generate stable short hash from string
|
|
395
|
-
*/
|
|
396
|
-
export function stableHash(str, length = 4) {
|
|
397
|
-
let hash = 0;
|
|
398
|
-
for (let i = 0; i < str.length; i++) {
|
|
399
|
-
const char = str.charCodeAt(i);
|
|
400
|
-
hash = ((hash << 5) - hash) + char;
|
|
401
|
-
hash = hash & hash; // Convert to 32-bit integer
|
|
402
|
-
}
|
|
403
|
-
// Convert to base36 and take first N characters
|
|
404
|
-
return Math.abs(hash).toString(36).substring(0, length).padEnd(length, '0');
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Calculate Levenshtein distance between two strings
|
|
408
|
-
*/
|
|
409
|
-
export function levenshteinDistance(a, b) {
|
|
410
|
-
const matrix = Array(b.length + 1)
|
|
411
|
-
.fill(null)
|
|
412
|
-
.map(() => Array(a.length + 1).fill(null));
|
|
413
|
-
for (let i = 0; i <= a.length; i++)
|
|
414
|
-
matrix[0][i] = i;
|
|
415
|
-
for (let j = 0; j <= b.length; j++)
|
|
416
|
-
matrix[j][0] = j;
|
|
417
|
-
for (let j = 1; j <= b.length; j++) {
|
|
418
|
-
for (let i = 1; i <= a.length; i++) {
|
|
419
|
-
const indicator = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
420
|
-
matrix[j][i] = Math.min(matrix[j][i - 1] + 1, matrix[j - 1][i] + 1, matrix[j - 1][i - 1] + indicator);
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return matrix[b.length][a.length];
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Normalize operation name for similarity comparison
|
|
427
|
-
*/
|
|
428
|
-
function normalizeForSimilarity(op) {
|
|
429
|
-
return op.operationId
|
|
430
|
-
.toLowerCase()
|
|
431
|
-
.replace(/^(get|post|put|delete|patch)/, '')
|
|
432
|
-
.replace(/^apiv[0-9]/, '')
|
|
433
|
-
.replace(/[^a-z0-9]/g, '');
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Pick most similar pairs of operations
|
|
437
|
-
*/
|
|
438
|
-
export function pickMostSimilarPairs(operations, topN, threshold = 0.75) {
|
|
439
|
-
if (operations.length < 2) {
|
|
440
|
-
return [];
|
|
441
|
-
}
|
|
442
|
-
const pairs = [];
|
|
443
|
-
const normalized = operations.map(op => normalizeForSimilarity(op));
|
|
444
|
-
// Calculate similarity for all pairs
|
|
445
|
-
for (let i = 0; i < operations.length; i++) {
|
|
446
|
-
for (let j = i + 1; j < operations.length; j++) {
|
|
447
|
-
const distance = levenshteinDistance(normalized[i], normalized[j]);
|
|
448
|
-
const maxLen = Math.max(normalized[i].length, normalized[j].length);
|
|
449
|
-
// Similarity: 1.0 (100%) = identical, 0.0 (0%) = completely different
|
|
450
|
-
const similarity = 1 - (distance / maxLen);
|
|
451
|
-
// Keep pairs with similarity >= threshold (high similarity)
|
|
452
|
-
if (similarity >= threshold) {
|
|
453
|
-
pairs.push({
|
|
454
|
-
opA: operations[i],
|
|
455
|
-
opB: operations[j],
|
|
456
|
-
similarity,
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
// Sort by similarity (highest = most similar)
|
|
462
|
-
pairs.sort((a, b) => b.similarity - a.similarity);
|
|
463
|
-
// Pick top N pairs, trying to avoid duplicate operations
|
|
464
|
-
const selected = [];
|
|
465
|
-
const usedOps = new Set();
|
|
466
|
-
for (const pair of pairs) {
|
|
467
|
-
if (selected.length >= topN)
|
|
468
|
-
break;
|
|
469
|
-
const aId = pair.opA.operationId;
|
|
470
|
-
const bId = pair.opB.operationId;
|
|
471
|
-
const isNew = !usedOps.has(aId) && !usedOps.has(bId);
|
|
472
|
-
if (isNew || selected.length < topN) {
|
|
473
|
-
selected.push(pair);
|
|
474
|
-
usedOps.add(aId);
|
|
475
|
-
usedOps.add(bId);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
// If we don't have enough, add pairs even with reused ops
|
|
479
|
-
if (selected.length < topN) {
|
|
480
|
-
for (const pair of pairs) {
|
|
481
|
-
if (selected.length >= topN)
|
|
482
|
-
break;
|
|
483
|
-
if (!selected.includes(pair)) {
|
|
484
|
-
selected.push(pair);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return selected.slice(0, topN);
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Detect potential collisions when shortening multiple operations
|
|
492
|
-
*/
|
|
493
|
-
export function detectCollisions(operations, strategy, maxLength, options) {
|
|
494
|
-
const nameMap = new Map();
|
|
495
|
-
for (const op of operations) {
|
|
496
|
-
const result = shortenToolName(op, strategy, maxLength, operations, options);
|
|
497
|
-
const existing = nameMap.get(result.name) || [];
|
|
498
|
-
existing.push(op);
|
|
499
|
-
nameMap.set(result.name, existing);
|
|
500
|
-
}
|
|
501
|
-
// Filter to only collisions
|
|
502
|
-
const collisions = new Map();
|
|
503
|
-
for (const [name, ops] of nameMap.entries()) {
|
|
504
|
-
if (ops.length > 1) {
|
|
505
|
-
collisions.set(name, ops);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
return collisions;
|
|
509
|
-
}
|
|
510
|
-
//# sourceMappingURL=naming.js.map
|
package/dist/src/naming.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/naming.ts"],"names":[],"mappings":"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"}
|