@uluops/registry-mcp 0.1.0 → 0.2.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/CHANGELOG.md +131 -4
- package/LICENSE +21 -0
- package/README.md +100 -93
- package/dist/client/sdk-error-mapper.d.ts +29 -0
- package/dist/client/sdk-error-mapper.d.ts.map +1 -1
- package/dist/client/sdk-error-mapper.js +122 -20
- package/dist/client/sdk-error-mapper.js.map +1 -1
- package/dist/config/index.d.ts +7 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +91 -14
- package/dist/config/index.js.map +1 -1
- package/dist/config/tool-registry.d.ts.map +1 -1
- package/dist/config/tool-registry.js +0 -8
- package/dist/config/tool-registry.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/tools/batch-publish.js +8 -8
- package/dist/tools/batch-publish.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/{check-forkable.d.ts → is-forkable.d.ts} +1 -1
- package/dist/tools/is-forkable.d.ts.map +1 -0
- package/dist/tools/{check-forkable.js → is-forkable.js} +1 -1
- package/dist/tools/is-forkable.js.map +1 -0
- package/dist/tools/render-definition.d.ts +3 -0
- package/dist/tools/render-definition.d.ts.map +1 -1
- package/dist/tools/render-definition.js +15 -1
- package/dist/tools/render-definition.js.map +1 -1
- package/dist/tools/update-and-publish.d.ts.map +1 -1
- package/dist/tools/update-and-publish.js +22 -10
- package/dist/tools/update-and-publish.js.map +1 -1
- package/dist/tools/update-definition.d.ts.map +1 -1
- package/dist/tools/update-definition.js +2 -7
- package/dist/tools/update-definition.js.map +1 -1
- package/dist/types/config.d.ts +6 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/error-guards.d.ts +21 -0
- package/dist/utils/error-guards.d.ts.map +1 -0
- package/dist/utils/error-guards.js +26 -0
- package/dist/utils/error-guards.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +28 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/read-yaml-file.d.ts.map +1 -1
- package/dist/utils/read-yaml-file.js +16 -1
- package/dist/utils/read-yaml-file.js.map +1 -1
- package/dist/utils/tool-handler.d.ts.map +1 -1
- package/dist/utils/tool-handler.js +20 -8
- package/dist/utils/tool-handler.js.map +1 -1
- package/package.json +21 -20
- package/dist/tools/check-forkable.d.ts.map +0 -1
- package/dist/tools/check-forkable.js.map +0 -1
- package/dist/tools/sync-models.d.ts +0 -12
- package/dist/tools/sync-models.d.ts.map +0 -1
- package/dist/tools/sync-models.js +0 -32
- package/dist/tools/sync-models.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAe,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAe,MAAM,mBAAmB,CAAC;AAkFhF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CAyDN"}
|
package/dist/tools/index.js
CHANGED
|
@@ -51,7 +51,7 @@ import { registerGetExecutionStatsTool } from './get-execution-stats.js';
|
|
|
51
51
|
import { registerListForksTool } from './list-forks.js';
|
|
52
52
|
// P2 Admin/Specialized Tools
|
|
53
53
|
import { registerForkDefinitionTool } from './fork-definition.js';
|
|
54
|
-
import { registerIsForkableTool } from './
|
|
54
|
+
import { registerIsForkableTool } from './is-forkable.js';
|
|
55
55
|
import { registerGetForkLineageTool } from './get-fork-lineage.js';
|
|
56
56
|
import { registerRecordExecutionTool } from './record-execution.js';
|
|
57
57
|
import { registerRetranslateDefinitionTool } from './retranslate-definition.js';
|
|
@@ -60,7 +60,6 @@ import { registerGetModelTool } from './get-model.js';
|
|
|
60
60
|
import { registerListProvidersTool } from './list-providers.js';
|
|
61
61
|
import { registerListAliasesTool } from './list-aliases.js';
|
|
62
62
|
import { registerGetTranslatorVersionTool } from './get-translator-version.js';
|
|
63
|
-
import { registerSyncModelsTool } from './sync-models.js';
|
|
64
63
|
import { registerGetUserTool } from './get-user.js';
|
|
65
64
|
import { registerBatchUsersTool } from './batch-users.js';
|
|
66
65
|
import { registerListLanguagesTool } from './list-languages.js';
|
|
@@ -75,7 +74,7 @@ import { registerGetTranslationAnalyticsTool } from './get-translation-analytics
|
|
|
75
74
|
import { registerCompareEffectivenessTool } from './compare-effectiveness.js';
|
|
76
75
|
import { registerGetDiffImpactTool } from './get-diff-impact.js';
|
|
77
76
|
/**
|
|
78
|
-
* Register all
|
|
77
|
+
* Register all 44 MCP tools with the server.
|
|
79
78
|
* @param server - MCP server instance to register tools on.
|
|
80
79
|
* @param registryClient - Registry SDK client for API calls.
|
|
81
80
|
*/
|
|
@@ -118,7 +117,6 @@ export function registerAllTools(server, registryClient) {
|
|
|
118
117
|
registerListProvidersTool(s, registryClient);
|
|
119
118
|
registerListAliasesTool(s, registryClient);
|
|
120
119
|
registerGetTranslatorVersionTool(s, registryClient);
|
|
121
|
-
registerSyncModelsTool(s);
|
|
122
120
|
registerGetUserTool(s, registryClient);
|
|
123
121
|
registerBatchUsersTool(s, registryClient);
|
|
124
122
|
registerListLanguagesTool(s, registryClient);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC;KACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjB,QAAQ,EAAE;KACV,QAAQ,CACP,uJAAuJ,CACxJ,CAAC;AAEJ;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAiC;IACxD,OAAO;QACL,IAAI,CAAC,IAAY,EAAE,WAAmB,EAAE,MAAmB,EAAE,OAAoB;YAC/E,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qBAAqB;AACrB,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,gBAAgB;AAChB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,oBAAoB;AACpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,6BAA6B;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,4 +20,4 @@ export declare const IsForkableInputSchema: z.ZodObject<{
|
|
|
20
20
|
version: string;
|
|
21
21
|
}>;
|
|
22
22
|
export declare function registerIsForkableTool(server: McpServerToolRegistration, registryClient: RegistryClient): void;
|
|
23
|
-
//# sourceMappingURL=
|
|
23
|
+
//# sourceMappingURL=is-forkable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-forkable.d.ts","sourceRoot":"","sources":["../../src/tools/is-forkable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGzF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CASN"}
|
|
@@ -14,4 +14,4 @@ export const IsForkableInputSchema = z.object({
|
|
|
14
14
|
export function registerIsForkableTool(server, registryClient) {
|
|
15
15
|
server.tool('is_forkable', 'Check if a definition version can be forked.', IsForkableInputSchema.shape, createToolHandler(IsForkableInputSchema, (n) => registryClient.forks.isForkable(n.type, n.name, n.version)));
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=
|
|
17
|
+
//# sourceMappingURL=is-forkable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-forkable.js","sourceRoot":"","sources":["../../src/tools/is-forkable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAkC,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CACpC,MAAiC,EACjC,cAA8B;IAE9B,MAAM,CAAC,IAAI,CACT,aAAa,EACb,8CAA8C,EAC9C,qBAAqB,CAAC,KAAK,EAC3B,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAC3D,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -14,10 +14,12 @@ export declare const RenderDefinitionInputSchema: z.ZodObject<{
|
|
|
14
14
|
target: z.ZodOptional<z.ZodString>;
|
|
15
15
|
model: z.ZodOptional<z.ZodString>;
|
|
16
16
|
output_path: z.ZodOptional<z.ZodString>;
|
|
17
|
+
overwrite: z.ZodDefault<z.ZodBoolean>;
|
|
17
18
|
}, "strip", z.ZodTypeAny, {
|
|
18
19
|
name: string;
|
|
19
20
|
type: "agent" | "command" | "workflow" | "pipeline";
|
|
20
21
|
version: string;
|
|
22
|
+
overwrite: boolean;
|
|
21
23
|
target?: string | undefined;
|
|
22
24
|
model?: string | undefined;
|
|
23
25
|
output_path?: string | undefined;
|
|
@@ -28,6 +30,7 @@ export declare const RenderDefinitionInputSchema: z.ZodObject<{
|
|
|
28
30
|
target?: string | undefined;
|
|
29
31
|
model?: string | undefined;
|
|
30
32
|
output_path?: string | undefined;
|
|
33
|
+
overwrite?: boolean | undefined;
|
|
31
34
|
}>;
|
|
32
35
|
export declare function registerRenderDefinitionTool(server: McpServerToolRegistration, registryClient: RegistryClient): void;
|
|
33
36
|
//# sourceMappingURL=render-definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-definition.d.ts","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"render-definition.d.ts","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAuBtC,CAAC;AAEH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CA0FN"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Get rendered markdown for a definition.
|
|
5
5
|
* Optionally write the markdown directly to a file via output_path.
|
|
6
6
|
*/
|
|
7
|
-
import { writeFile, mkdir, lstat } from 'node:fs/promises';
|
|
7
|
+
import { writeFile, mkdir, lstat, access } from 'node:fs/promises';
|
|
8
8
|
import { dirname, resolve, relative } from 'node:path';
|
|
9
9
|
import { z } from 'zod';
|
|
10
10
|
import { DefinitionTypeSchema, createSuccessResponse, createErrorResponse, } from '../types/index.js';
|
|
@@ -38,6 +38,10 @@ export const RenderDefinitionInputSchema = z.object({
|
|
|
38
38
|
.min(1)
|
|
39
39
|
.describe('Write rendered output to this file path instead of returning it in the response.')
|
|
40
40
|
.optional(),
|
|
41
|
+
overwrite: z
|
|
42
|
+
.boolean()
|
|
43
|
+
.describe('When true, allow output_path to overwrite an existing file. Defaults to false — an existing file at output_path produces an error response rather than being silently replaced.')
|
|
44
|
+
.default(false),
|
|
41
45
|
});
|
|
42
46
|
export function registerRenderDefinitionTool(server, registryClient) {
|
|
43
47
|
const baseHandler = createToolHandler(RenderDefinitionInputSchema, (n) => registryClient.render.get(n.type, n.name, n.version, {
|
|
@@ -60,6 +64,16 @@ export function registerRenderDefinitionTool(server, registryClient) {
|
|
|
60
64
|
if (pathStat?.isSymbolicLink() === true) {
|
|
61
65
|
return createErrorResponse('output_path must not be a symbolic link');
|
|
62
66
|
}
|
|
67
|
+
// Refuse to silently overwrite an existing regular file unless the
|
|
68
|
+
// caller has opted in with overwrite: true. Default-deny matches
|
|
69
|
+
// `cp --no-clobber` semantics and prevents agent-driven hallucinated
|
|
70
|
+
// paths from destroying user work without a clear signal.
|
|
71
|
+
if (!parsed.data.overwrite) {
|
|
72
|
+
const exists = await access(absPath).then(() => true).catch(() => false);
|
|
73
|
+
if (exists) {
|
|
74
|
+
return createErrorResponse(`output_path '${absPath}' already exists. Pass overwrite: true to replace it.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
63
77
|
// Verify no symlink in ancestor directories resolves outside the base dir
|
|
64
78
|
const rel = relative(outputBaseDir, absPath);
|
|
65
79
|
const segments = rel.split('/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-definition.js","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"render-definition.js","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,oBAAoB,EAEpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEnF;;;;;GAKG;AACH,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5C,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,+FAA+F,CAAC;SACzG,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uEAAuE,CAAC;SACjF,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kFAAkF,CAAC;SAC5F,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,CAAC,iLAAiL,CAAC;SAC3L,OAAO,CAAC,KAAK,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,UAAU,4BAA4B,CAC1C,MAAiC,EACjC,cAA8B;IAE9B,MAAM,WAAW,GAAG,iBAAiB,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CACvE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;QACnD,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,+KAA+K,EAC/K,2BAA2B,CAAC,KAAK,EACjC,KAAK,EAAE,IAAa,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,oDAAoD;QACpD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC1E,OAAO,mBAAmB,CACxB,mCAAmC,aAAa,UAAU,OAAO,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,mBAAmB,CAAC,yCAAyC,CAAC,CAAC;QACxE,CAAC;QAED,mEAAmE;QACnE,iEAAiE;QACjE,qEAAqE;QACrE,0DAA0D;QAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YACzE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,mBAAmB,CACxB,gBAAgB,OAAO,uDAAuD,CAC/E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAG,aAAa,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;gBACvC,OAAO,mBAAmB,CAAC,4DAA4D,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,EAChB,MAAM,CAAC,IAAI,CAAC,IAAI,EAChB,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CACzD,CAAC;YAEF,+CAA+C;YAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,mBAAmB,CACxB,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE5C,OAAO,qBAAqB,CAAC;gBAC3B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,OAAO;gBACpB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-and-publish.d.ts","sourceRoot":"","sources":["../../src/tools/update-and-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-and-publish.d.ts","sourceRoot":"","sources":["../../src/tools/update-and-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAIL,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAY3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUtC,CAAC;AAsBH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CA+EN"}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* automatically creates a new draft version before publishing.
|
|
8
8
|
*/
|
|
9
9
|
import { z } from 'zod';
|
|
10
|
-
import { isNotFoundError
|
|
10
|
+
import { isNotFoundError } from '@uluops/registry-sdk/errors';
|
|
11
|
+
import { isPublishedStatusError } from '../utils/error-guards.js';
|
|
11
12
|
import { DefinitionTypeSchema, VisibilitySchema, ChangeTypeSchema, createSuccessResponse, } from '../types/index.js';
|
|
12
13
|
import { mapSdkErrorToMcp, mapZodErrorToMcp } from '../client/sdk-error-mapper.js';
|
|
13
14
|
import { resolveYamlInput } from '../utils/read-yaml-file.js';
|
|
@@ -28,12 +29,6 @@ export const UpdateAndPublishInputSchema = z.object({
|
|
|
28
29
|
tags: z.array(z.string()).optional(),
|
|
29
30
|
change_type: ChangeTypeSchema.optional(),
|
|
30
31
|
});
|
|
31
|
-
/** Check if an error is a "published status" validation error from the API. */
|
|
32
|
-
function isPublishedStatusError(error) {
|
|
33
|
-
return isValidationError(error) &&
|
|
34
|
-
error instanceof Error &&
|
|
35
|
-
error.message.includes("'published' status");
|
|
36
|
-
}
|
|
37
32
|
/**
|
|
38
33
|
* Patch the version field in definition YAML to match the requested version.
|
|
39
34
|
* When update_and_publish falls back to create (because the target version is
|
|
@@ -42,8 +37,13 @@ function isPublishedStatusError(error) {
|
|
|
42
37
|
* the YAML version matches the requested version before calling create.
|
|
43
38
|
*/
|
|
44
39
|
function patchYamlVersion(yaml, newVersion) {
|
|
45
|
-
// Replace the first
|
|
46
|
-
|
|
40
|
+
// Replace the first `version:` line value. Matches both root-level (e.g.
|
|
41
|
+
// `version: 1.0.0` in an ADL document) and indented (e.g.
|
|
42
|
+
// ` version: 1.0.0` nested under `interface:`) forms. `\s*` matches any
|
|
43
|
+
// leading whitespace including none. Accepts unquoted or single/double
|
|
44
|
+
// quoted version values, with optional prerelease (-rc.1, -beta.2) and
|
|
45
|
+
// build metadata (+build.5) suffixes per semver 2.0.0.
|
|
46
|
+
return yaml.replace(/^(\s*version:\s+)["']?\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?["']?/m, `$1"${newVersion}"`);
|
|
47
47
|
}
|
|
48
48
|
export function registerUpdateAndPublishTool(server, registryClient) {
|
|
49
49
|
server.tool('update_and_publish', 'Update a definition and publish it in one step. Accepts yaml or file_path. Auto-creates a new draft if the version is published or missing.', UpdateAndPublishInputSchema.shape, async (args) => {
|
|
@@ -83,7 +83,19 @@ export function registerUpdateAndPublishTool(server, registryClient) {
|
|
|
83
83
|
yaml: patchedYaml,
|
|
84
84
|
...(visibility !== undefined && { visibility }),
|
|
85
85
|
});
|
|
86
|
-
|
|
86
|
+
// Defensive guard against malformed SDK response — the SDK
|
|
87
|
+
// types declare `created.version` as a non-nullable string, but
|
|
88
|
+
// a runtime contract violation (network proxy mangling, SDK
|
|
89
|
+
// regression) would silently pass `undefined` through to the
|
|
90
|
+
// publish URL builder, producing /versions/undefined and a
|
|
91
|
+
// confusing 404 for a draft that was just successfully created.
|
|
92
|
+
// The `as unknown` cast intentionally bypasses the declared
|
|
93
|
+
// type so the runtime check has somewhere to live.
|
|
94
|
+
const runtimeVersion = created.version;
|
|
95
|
+
if (runtimeVersion === undefined || runtimeVersion === '') {
|
|
96
|
+
throw new Error(`Definitions create() returned no version field for ${type}/${name}. Cannot continue to publish step.`);
|
|
97
|
+
}
|
|
98
|
+
publishVersion = runtimeVersion;
|
|
87
99
|
note = isNotFoundError(error)
|
|
88
100
|
? `Version '${version}' not found. Created new draft '${created.version}' and published.`
|
|
89
101
|
: `Version '${version}' is published. Created new draft '${created.version}' and published.`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-and-publish.js","sourceRoot":"","sources":["../../src/tools/update-and-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"update-and-publish.js","sourceRoot":"","sources":["../../src/tools/update-and-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-definition.d.ts","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-definition.d.ts","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAOL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAK3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAatC,CAAC;AAEH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CA8CN"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* of failing. The API server extracts the version from the YAML content.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
-
import { isNotFoundError
|
|
12
|
+
import { isNotFoundError } from '@uluops/registry-sdk/errors';
|
|
13
|
+
import { isPublishedStatusError } from '../utils/error-guards.js';
|
|
13
14
|
import { DefinitionTypeSchema, VisibilitySchema, TierSchema, SubscriptionTierSchema, ChangeTypeSchema, ProvenanceInputSchema, } from '../types/index.js';
|
|
14
15
|
import { createToolHandler } from '../utils/tool-handler.js';
|
|
15
16
|
import { resolveYamlInput } from '../utils/read-yaml-file.js';
|
|
@@ -28,12 +29,6 @@ export const UpdateDefinitionInputSchema = z.object({
|
|
|
28
29
|
change_type: ChangeTypeSchema.optional(),
|
|
29
30
|
provenance: ProvenanceInputSchema.optional().describe('Authorship provenance. Merges with existing provenance if present.'),
|
|
30
31
|
});
|
|
31
|
-
/** Check if an error is a "published status" validation error from the API. */
|
|
32
|
-
function isPublishedStatusError(error) {
|
|
33
|
-
return isValidationError(error) &&
|
|
34
|
-
error instanceof Error &&
|
|
35
|
-
error.message.includes("'published' status");
|
|
36
|
-
}
|
|
37
32
|
export function registerUpdateDefinitionTool(server, registryClient) {
|
|
38
33
|
server.tool('update_definition', 'Update a draft definition version with new YAML, visibility, description, or tags.', UpdateDefinitionInputSchema.shape, createToolHandler(UpdateDefinitionInputSchema, async (n) => {
|
|
39
34
|
const body = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-definition.js","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"update-definition.js","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
5
|
export interface ApiClientConfig {
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Base URL for the registry API. Optional — when undefined, the SDK's
|
|
8
|
+
* `DEFAULT_BASE_URL` is used (prod by default; localhost when
|
|
9
|
+
* `NODE_ENV=development`).
|
|
10
|
+
*/
|
|
11
|
+
baseUrl?: string;
|
|
8
12
|
/** API key for authentication */
|
|
9
13
|
apiKey?: string;
|
|
10
14
|
/** Org slug for multi-tenancy — sets X-Org-Slug header on all requests */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0BAA0B;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,eAAe,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;CAC1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error-classification helpers for tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* These guards exist so individual tools don't reimplement substring-match
|
|
5
|
+
* heuristics that need to stay aligned with the registry API's error
|
|
6
|
+
* messaging. Centralizing them here means a single update site if the API
|
|
7
|
+
* error wording changes.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Detects the "cannot modify in 'published' status" validation error
|
|
11
|
+
* returned by the registry API when the caller targets an already-published
|
|
12
|
+
* version. Used by tools that implement smart-version-up-and-create
|
|
13
|
+
* fallback behavior (update_definition, update_and_publish).
|
|
14
|
+
*
|
|
15
|
+
* NOTE: this is substring-coupled to the API error message format. If the
|
|
16
|
+
* API changes that wording, this guard goes silent and the affected fallback
|
|
17
|
+
* paths stop triggering. Keep this in sync with uluops-registry-api's
|
|
18
|
+
* status-transition validator.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isPublishedStatusError(error: unknown): boolean;
|
|
21
|
+
//# sourceMappingURL=error-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-guards.d.ts","sourceRoot":"","sources":["../../src/utils/error-guards.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM9D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error-classification helpers for tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* These guards exist so individual tools don't reimplement substring-match
|
|
5
|
+
* heuristics that need to stay aligned with the registry API's error
|
|
6
|
+
* messaging. Centralizing them here means a single update site if the API
|
|
7
|
+
* error wording changes.
|
|
8
|
+
*/
|
|
9
|
+
import { isValidationError } from '@uluops/registry-sdk/errors';
|
|
10
|
+
/**
|
|
11
|
+
* Detects the "cannot modify in 'published' status" validation error
|
|
12
|
+
* returned by the registry API when the caller targets an already-published
|
|
13
|
+
* version. Used by tools that implement smart-version-up-and-create
|
|
14
|
+
* fallback behavior (update_definition, update_and_publish).
|
|
15
|
+
*
|
|
16
|
+
* NOTE: this is substring-coupled to the API error message format. If the
|
|
17
|
+
* API changes that wording, this guard goes silent and the affected fallback
|
|
18
|
+
* paths stop triggering. Keep this in sync with uluops-registry-api's
|
|
19
|
+
* status-transition validator.
|
|
20
|
+
*/
|
|
21
|
+
export function isPublishedStatusError(error) {
|
|
22
|
+
return (isValidationError(error) &&
|
|
23
|
+
error instanceof Error &&
|
|
24
|
+
error.message.includes("'published' status"));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=error-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-guards.js","sourceRoot":"","sources":["../../src/utils/error-guards.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,iBAAiB,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE;AAiFD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAmDpE"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Logs to stderr (for MCP compatibility) and optionally to files.
|
|
5
5
|
*/
|
|
6
|
-
import { appendFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
6
|
+
import { appendFileSync, mkdirSync, existsSync, realpathSync } from 'node:fs';
|
|
7
7
|
import { join, resolve, isAbsolute } from 'node:path';
|
|
8
8
|
const LOG_LEVELS = {
|
|
9
9
|
debug: 0,
|
|
@@ -27,20 +27,45 @@ function getLogFilePath(logDir) {
|
|
|
27
27
|
/**
|
|
28
28
|
* Validate that a log directory path is safe to write to.
|
|
29
29
|
* Rejects paths containing traversal sequences or pointing outside the working tree.
|
|
30
|
+
* Dereferences symlinks before the containment check (CWE-59) so a symlink
|
|
31
|
+
* named e.g. './logs' pointing to /etc cannot escape the cwd/tmp constraint.
|
|
30
32
|
*/
|
|
31
33
|
function validateLogDir(logDir) {
|
|
32
34
|
const resolved = resolve(logDir);
|
|
33
|
-
const cwd = process.cwd();
|
|
34
35
|
// Reject path traversal patterns
|
|
35
36
|
if (logDir.includes('..')) {
|
|
36
37
|
throw new Error(`LOG_DIR must not contain path traversal sequences: ${logDir}`);
|
|
37
38
|
}
|
|
39
|
+
// If the path already exists, dereference symlinks before the containment
|
|
40
|
+
// check (CWE-59). If it doesn't exist yet, mkdir below will create a real
|
|
41
|
+
// directory and the literal resolved path is the right comparison.
|
|
42
|
+
let real = resolved;
|
|
43
|
+
try {
|
|
44
|
+
real = realpathSync(resolved);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Path doesn't exist; ensureLogDir() will create a regular directory.
|
|
48
|
+
}
|
|
49
|
+
// Dereference the comparison anchors too — on macOS /tmp is a symlink to
|
|
50
|
+
// /private/tmp, so a realpathSync'd `real` of /tmp/foo becomes
|
|
51
|
+
// /private/tmp/foo and would otherwise fail a literal startsWith('/tmp/')
|
|
52
|
+
// check.
|
|
53
|
+
const cwd = safeRealpath(process.cwd());
|
|
54
|
+
const tmpPrefixes = ['/tmp/', safeRealpath('/tmp') + '/'];
|
|
38
55
|
// Absolute paths must be under cwd or a well-known logs location
|
|
39
|
-
if (isAbsolute(logDir) && !
|
|
56
|
+
if (isAbsolute(logDir) && !real.startsWith(cwd) && !tmpPrefixes.some((p) => real.startsWith(p))) {
|
|
40
57
|
throw new Error(`LOG_DIR absolute path must be under the working directory or /tmp/: ${logDir}`);
|
|
41
58
|
}
|
|
42
59
|
return resolved;
|
|
43
60
|
}
|
|
61
|
+
function safeRealpath(p) {
|
|
62
|
+
try {
|
|
63
|
+
return realpathSync(p);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return p;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
44
69
|
function ensureLogDir(logDir) {
|
|
45
70
|
if (!existsSync(logDir)) {
|
|
46
71
|
mkdirSync(logDir, { recursive: true });
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-yaml-file.d.ts","sourceRoot":"","sources":["../../src/utils/read-yaml-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAe5E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"read-yaml-file.d.ts","sourceRoot":"","sources":["../../src/utils/read-yaml-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAe5E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsErD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,KAAK,EAAE,CAAC,EACR,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7B,CAAC,GAAG,eAAe,CAWrB"}
|
|
@@ -26,7 +26,22 @@ function getWorkspaceDir() {
|
|
|
26
26
|
*/
|
|
27
27
|
export function readYamlFile(filePath) {
|
|
28
28
|
const resolved = resolve(filePath);
|
|
29
|
-
|
|
29
|
+
// realpathSync throws ENOENT synchronously if WORKSPACE_DIR points to a
|
|
30
|
+
// path that doesn't exist (typo, mount not ready, fresh container).
|
|
31
|
+
// Wrap with a descriptive error so the user sees the WORKSPACE_DIR
|
|
32
|
+
// misconfiguration rather than a confusing 'no such file or directory'
|
|
33
|
+
// for the workspace root that they didn't realize they had to create.
|
|
34
|
+
const rawWorkspaceDir = getWorkspaceDir();
|
|
35
|
+
let workspaceDir;
|
|
36
|
+
try {
|
|
37
|
+
workspaceDir = realpathSync(rawWorkspaceDir);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
41
|
+
throw new Error(`WORKSPACE_DIR '${rawWorkspaceDir}' is not accessible. ` +
|
|
42
|
+
`Set the env var to an existing directory, or unset it to use cwd. ` +
|
|
43
|
+
`Underlying error: ${reason}`);
|
|
44
|
+
}
|
|
30
45
|
// First check: catch obvious traversal before touching the filesystem
|
|
31
46
|
if (!resolved.startsWith(workspaceDir + '/') && resolved !== workspaceDir) {
|
|
32
47
|
throw new Error(`file_path must resolve within ${workspaceDir} — got ${resolved}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-yaml-file.js","sourceRoot":"","sources":["../../src/utils/read-yaml-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAE5E,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACtD,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAEpD;;;;;GAKG;AACH,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"read-yaml-file.js","sourceRoot":"","sources":["../../src/utils/read-yaml-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAoDhF;;;;;;;;;;;GAWG;AACH,KAAK,eAAe,GAAG,GAAG,CAAC;AAE3B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,CAIP,UAAU,EAAE,eAAe,KACxB,OAAO,CAAC,OAAO,CAAC,EACrB,OAAO,CAAC,EAAE;IACR,sIAAsI;IACtI,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,eAAe,CAAC;IACzD,0FAA0F;IAC1F,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C,GACA,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,eAAe,CAAC,CAkD7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAWxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9B,CAiBA;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CA+B7E"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Eliminates boilerplate across tool implementations.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { mapSdkErrorToMcp, mapZodErrorToMcp } from '../client/sdk-error-mapper.js';
|
|
8
|
+
import { mapSdkErrorToMcp, mapZodErrorToMcp, sanitizeErrorMessage } from '../client/sdk-error-mapper.js';
|
|
9
9
|
import { normalizeKeys } from './normalize-keys.js';
|
|
10
10
|
import { createSuccessResponse } from '../types/index.js';
|
|
11
11
|
import { getDefaultType } from './session-state.js';
|
|
@@ -33,13 +33,21 @@ function coerceNumericFields(args, schema) {
|
|
|
33
33
|
}
|
|
34
34
|
return obj;
|
|
35
35
|
}
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Check if a Zod schema (possibly wrapped in optional/nullable/default) expects a number.
|
|
38
|
+
* Uses Zod's public unwrap()/removeDefault() API rather than `_def.innerType`
|
|
39
|
+
* to avoid coupling to Zod's private internals — those can rename across
|
|
40
|
+
* minor Zod versions and break numeric coercion without compile-time warning.
|
|
41
|
+
*/
|
|
37
42
|
function isNumericSchema(schema) {
|
|
38
43
|
if (schema instanceof z.ZodNumber)
|
|
39
44
|
return true;
|
|
40
|
-
if (schema instanceof z.ZodOptional
|
|
41
|
-
return isNumericSchema(schema.
|
|
42
|
-
|
|
45
|
+
if (schema instanceof z.ZodOptional)
|
|
46
|
+
return isNumericSchema(schema.unwrap());
|
|
47
|
+
if (schema instanceof z.ZodNullable)
|
|
48
|
+
return isNumericSchema(schema.unwrap());
|
|
49
|
+
if (schema instanceof z.ZodDefault)
|
|
50
|
+
return isNumericSchema(schema.removeDefault());
|
|
43
51
|
return false;
|
|
44
52
|
}
|
|
45
53
|
/** Type guard: checks if a value is a complete MCP tool response (has content array). */
|
|
@@ -90,11 +98,15 @@ export function createToolHandler(schema, sdkCall, options) {
|
|
|
90
98
|
return createSuccessResponse(result);
|
|
91
99
|
}
|
|
92
100
|
catch (error) {
|
|
93
|
-
// Log errors to stderr for debugging (MCP transport uses stdout)
|
|
94
|
-
|
|
101
|
+
// Log errors to stderr for debugging (MCP transport uses stdout).
|
|
102
|
+
// Sanitize through the same credential-redaction filter used for MCP
|
|
103
|
+
// responses — SDK errors may embed API keys, session tokens, or URL
|
|
104
|
+
// userinfo in their messages, and stderr is captured by the harness.
|
|
105
|
+
const rawMsg = error instanceof Error ? error.message : String(error);
|
|
106
|
+
const errorMsg = sanitizeErrorMessage(rawMsg).slice(0, 200);
|
|
95
107
|
const errorType = error instanceof z.ZodError ? 'validation' :
|
|
96
108
|
error instanceof Error ? error.constructor.name : 'unknown';
|
|
97
|
-
process.stderr.write(`[mcp-tool-error] type=${errorType} message=${errorMsg
|
|
109
|
+
process.stderr.write(`[mcp-tool-error] type=${errorType} message=${errorMsg}\n`);
|
|
98
110
|
if (error instanceof z.ZodError) {
|
|
99
111
|
return mapZodErrorToMcp(error);
|
|
100
112
|
}
|