@pascal-app/mcp 1.0.1 → 1.0.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.
|
@@ -12,6 +12,8 @@ export type ValidationError = {
|
|
|
12
12
|
export type ValidationResult = {
|
|
13
13
|
valid: boolean;
|
|
14
14
|
errors: ValidationError[];
|
|
15
|
+
/** Advisories that do not fail validation, such as a hidden Site. */
|
|
16
|
+
warnings: ValidationError[];
|
|
15
17
|
};
|
|
16
18
|
export type CreatePatch = {
|
|
17
19
|
op: 'create';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-bridge.d.ts","sourceRoot":"","sources":["../../src/bridge/scene-bridge.ts"],"names":[],"mappings":"AACA,OAAO,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,QAAQ,MAAM,wBAAwB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAC/E,MAAM,MAAM,gBAAgB,GAAG;
|
|
1
|
+
{"version":3,"file":"scene-bridge.d.ts","sourceRoot":"","sources":["../../src/bridge/scene-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Side-effect import MUST come first: installs RAF polyfill before core loads.
|
|
2
2
|
import './node-shims.js';
|
|
3
|
+
import { HIDDEN_SITE_NOTE } from '@pascal-app/core';
|
|
3
4
|
import { AnyNode as AnyNodeSchema, parseNode, } from '@pascal-app/core/schema';
|
|
4
5
|
// Per PLAN §0.6: `useScene` is the DEFAULT export from `@pascal-app/core/store`.
|
|
5
6
|
import useScene from '@pascal-app/core/store';
|
|
@@ -407,8 +408,12 @@ export class SceneBridge {
|
|
|
407
408
|
*/
|
|
408
409
|
validateScene() {
|
|
409
410
|
const errors = [];
|
|
411
|
+
const warnings = [];
|
|
410
412
|
const nodes = useScene.getState().nodes;
|
|
411
413
|
for (const [id, node] of Object.entries(nodes)) {
|
|
414
|
+
if (node.type === 'site' && node.visible === false) {
|
|
415
|
+
warnings.push({ nodeId: id, path: 'visible', message: HIDDEN_SITE_NOTE });
|
|
416
|
+
}
|
|
412
417
|
const res = AnyNodeSchema.safeParse(node);
|
|
413
418
|
if (res.success)
|
|
414
419
|
continue;
|
|
@@ -420,7 +425,7 @@ export class SceneBridge {
|
|
|
420
425
|
});
|
|
421
426
|
}
|
|
422
427
|
}
|
|
423
|
-
return { valid: errors.length === 0, errors };
|
|
428
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
424
429
|
}
|
|
425
430
|
/**
|
|
426
431
|
* Drain the dirtyNodes set. Returns the ids that were present. No-op for
|
|
@@ -9,6 +9,11 @@ export declare const validateSceneOutput: {
|
|
|
9
9
|
path: z.ZodString;
|
|
10
10
|
message: z.ZodString;
|
|
11
11
|
}, z.core.$strip>>;
|
|
12
|
+
warnings: z.ZodArray<z.ZodObject<{
|
|
13
|
+
nodeId: z.ZodString;
|
|
14
|
+
path: z.ZodString;
|
|
15
|
+
message: z.ZodString;
|
|
16
|
+
}, z.core.$strip>>;
|
|
12
17
|
};
|
|
13
18
|
export declare function registerValidateScene(server: McpServer, bridge: SceneOperations): void;
|
|
14
19
|
//# sourceMappingURL=validate-scene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-scene.d.ts","sourceRoot":"","sources":["../../src/tools/validate-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,eAAO,MAAM,kBAAkB,IAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"validate-scene.d.ts","sourceRoot":"","sources":["../../src/tools/validate-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,eAAO,MAAM,kBAAkB,IAAK,CAAA;AAQpC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAI/B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAmBtF"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
|
|
3
3
|
export const validateSceneInput = {};
|
|
4
|
+
const validationIssue = z.object({
|
|
5
|
+
nodeId: z.string(),
|
|
6
|
+
path: z.string(),
|
|
7
|
+
message: z.string(),
|
|
8
|
+
});
|
|
4
9
|
export const validateSceneOutput = {
|
|
5
10
|
valid: z.boolean(),
|
|
6
|
-
errors: z.array(
|
|
7
|
-
|
|
8
|
-
path: z.string(),
|
|
9
|
-
message: z.string(),
|
|
10
|
-
})),
|
|
11
|
+
errors: z.array(validationIssue),
|
|
12
|
+
warnings: z.array(validationIssue),
|
|
11
13
|
};
|
|
12
14
|
export function registerValidateScene(server, bridge) {
|
|
13
15
|
server.registerTool('validate_scene', {
|
|
14
16
|
title: 'Validate scene',
|
|
15
|
-
description: 'Run Zod validation against every node in the scene. Returns `{ valid, errors }` where each
|
|
17
|
+
description: 'Run Zod validation against every node in the scene. Returns `{ valid, errors, warnings }` where each entry has `{ nodeId, path, message }`. Warnings do not fail validation; for example a hidden Site, whose flag hides only its own ground and boundary while the buildings on it stay visible and exported.',
|
|
16
18
|
inputSchema: validateSceneInput,
|
|
17
19
|
outputSchema: validateSceneOutput,
|
|
18
20
|
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pascal-app/mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Model Context Protocol server for Pascal 3D editor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"bin": {
|
|
41
|
-
"pascal-mcp": "
|
|
41
|
+
"pascal-mcp": "dist/bin/pascal-mcp.js"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"dist",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"prepublishOnly": "bun run build && bun test && bun run smoke:node"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@pascal-app/core": "^1.0.
|
|
59
|
+
"@pascal-app/core": "^1.0.3"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"zod": ">=4.5.4 <4.6"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@pascal-app/core": "^1.0.
|
|
67
|
+
"@pascal-app/core": "^1.0.3",
|
|
68
68
|
"@pascal/typescript-config": "*",
|
|
69
69
|
"@types/node": "^22.19.20",
|
|
70
70
|
"typescript": "6.0.3"
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
],
|
|
81
81
|
"repository": {
|
|
82
82
|
"type": "git",
|
|
83
|
-
"url": "https://github.com/pascalorg/editor.git",
|
|
83
|
+
"url": "git+https://github.com/pascalorg/editor.git",
|
|
84
84
|
"directory": "packages/mcp"
|
|
85
85
|
},
|
|
86
86
|
"license": "MIT",
|