@pascal-app/mcp 1.0.4 → 1.0.6

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.
Files changed (244) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +166 -62
  3. package/dist/bin/pascal-mcp.js +1 -1
  4. package/dist/bridge/agent-session.d.ts +18 -0
  5. package/dist/bridge/agent-session.d.ts.map +1 -0
  6. package/dist/bridge/agent-session.js +15 -0
  7. package/dist/bridge/index.d.ts +1 -1
  8. package/dist/bridge/index.d.ts.map +1 -1
  9. package/dist/bridge/scene-bridge.d.ts +3 -0
  10. package/dist/bridge/scene-bridge.d.ts.map +1 -1
  11. package/dist/bridge/scene-bridge.js +7 -0
  12. package/dist/lib/safe-fetch.d.ts +22 -4
  13. package/dist/lib/safe-fetch.d.ts.map +1 -1
  14. package/dist/lib/safe-fetch.js +233 -134
  15. package/dist/operations/scene-operations.d.ts +18 -0
  16. package/dist/operations/scene-operations.d.ts.map +1 -1
  17. package/dist/operations/scene-operations.js +11 -0
  18. package/dist/prompts/from-brief.d.ts +1 -1
  19. package/dist/prompts/from-brief.d.ts.map +1 -1
  20. package/dist/prompts/from-brief.js +3 -3
  21. package/dist/prompts/index.d.ts +1 -1
  22. package/dist/prompts/index.d.ts.map +1 -1
  23. package/dist/prompts/iterate-on-feedback.d.ts +1 -1
  24. package/dist/prompts/iterate-on-feedback.d.ts.map +1 -1
  25. package/dist/prompts/iterate-on-feedback.js +2 -2
  26. package/dist/prompts/renovation-from-photos.d.ts +1 -1
  27. package/dist/prompts/renovation-from-photos.d.ts.map +1 -1
  28. package/dist/prompts/renovation-from-photos.js +2 -2
  29. package/dist/prompts/scene-guidance.d.ts.map +1 -1
  30. package/dist/prompts/scene-guidance.js +10 -3
  31. package/dist/resources/agent-guide.d.ts +1 -1
  32. package/dist/resources/agent-guide.d.ts.map +1 -1
  33. package/dist/resources/agent-guide.js +52 -44
  34. package/dist/resources/catalog-items.d.ts +1 -1
  35. package/dist/resources/catalog-items.d.ts.map +1 -1
  36. package/dist/resources/constraints.d.ts +1 -1
  37. package/dist/resources/constraints.d.ts.map +1 -1
  38. package/dist/resources/constraints.js +1 -1
  39. package/dist/resources/design-schema.d.ts +1 -1
  40. package/dist/resources/design-schema.d.ts.map +1 -1
  41. package/dist/resources/index.d.ts +1 -1
  42. package/dist/resources/index.d.ts.map +1 -1
  43. package/dist/resources/scene-current.d.ts +1 -1
  44. package/dist/resources/scene-current.d.ts.map +1 -1
  45. package/dist/resources/scene-summary.d.ts +1 -1
  46. package/dist/resources/scene-summary.d.ts.map +1 -1
  47. package/dist/server.d.ts +7 -2
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +59 -21
  50. package/dist/storage/disk-artifact-store.d.ts.map +1 -1
  51. package/dist/storage/sqlite-scene-store.d.ts +1 -1
  52. package/dist/storage/sqlite-scene-store.d.ts.map +1 -1
  53. package/dist/storage/types.d.ts +4 -4
  54. package/dist/storage/types.d.ts.map +1 -1
  55. package/dist/templates/empty-studio.d.ts +3 -3
  56. package/dist/templates/empty-studio.d.ts.map +1 -1
  57. package/dist/templates/garden-house.d.ts +3 -3
  58. package/dist/templates/garden-house.d.ts.map +1 -1
  59. package/dist/templates/index.d.ts.map +1 -1
  60. package/dist/templates/two-bedroom.d.ts +3 -3
  61. package/dist/templates/two-bedroom.d.ts.map +1 -1
  62. package/dist/tools/add-column.d.ts +1 -1
  63. package/dist/tools/add-column.d.ts.map +1 -1
  64. package/dist/tools/add-column.js +3 -2
  65. package/dist/tools/add-object.d.ts +19 -3
  66. package/dist/tools/add-object.d.ts.map +1 -1
  67. package/dist/tools/add-object.js +66 -35
  68. package/dist/tools/annotations.d.ts.map +1 -1
  69. package/dist/tools/apply-patch.d.ts +6 -2
  70. package/dist/tools/apply-patch.d.ts.map +1 -1
  71. package/dist/tools/apply-patch.js +13 -8
  72. package/dist/tools/asset-catalog.d.ts.map +1 -1
  73. package/dist/tools/asset-catalog.js +23 -0
  74. package/dist/tools/author-scene.d.ts +10 -0
  75. package/dist/tools/author-scene.d.ts.map +1 -0
  76. package/dist/tools/author-scene.js +140 -0
  77. package/dist/tools/check-collisions.d.ts +6 -6
  78. package/dist/tools/check-collisions.d.ts.map +1 -1
  79. package/dist/tools/check-collisions.js +6 -6
  80. package/dist/tools/clear-scene.d.ts +1 -1
  81. package/dist/tools/clear-scene.d.ts.map +1 -1
  82. package/dist/tools/clear-scene.js +3 -3
  83. package/dist/tools/collections.d.ts +1 -1
  84. package/dist/tools/collections.d.ts.map +1 -1
  85. package/dist/tools/collections.js +3 -2
  86. package/dist/tools/construction-tools.d.ts +6 -49
  87. package/dist/tools/construction-tools.d.ts.map +1 -1
  88. package/dist/tools/construction-tools.js +9 -158
  89. package/dist/tools/create-unit.d.ts +3 -3
  90. package/dist/tools/create-unit.d.ts.map +1 -1
  91. package/dist/tools/create-unit.js +2 -2
  92. package/dist/tools/errors.d.ts +5 -5
  93. package/dist/tools/errors.d.ts.map +1 -1
  94. package/dist/tools/errors.js +4 -4
  95. package/dist/tools/export-glb.d.ts +1 -1
  96. package/dist/tools/export-glb.d.ts.map +1 -1
  97. package/dist/tools/export-glb.js +2 -2
  98. package/dist/tools/export-json.d.ts +1 -1
  99. package/dist/tools/export-json.d.ts.map +1 -1
  100. package/dist/tools/export-json.js +2 -2
  101. package/dist/tools/get-scene.d.ts +1 -1
  102. package/dist/tools/get-scene.d.ts.map +1 -1
  103. package/dist/tools/get-scene.js +2 -2
  104. package/dist/tools/hosted-services.d.ts +1 -1
  105. package/dist/tools/hosted-services.d.ts.map +1 -1
  106. package/dist/tools/hosted-services.js +13 -3
  107. package/dist/tools/index.d.ts +4 -3
  108. package/dist/tools/index.d.ts.map +1 -1
  109. package/dist/tools/index.js +8 -13
  110. package/dist/tools/level-height-guard.d.ts +2 -0
  111. package/dist/tools/level-height-guard.d.ts.map +1 -0
  112. package/dist/tools/level-height-guard.js +11 -0
  113. package/dist/tools/list-units.d.ts +2 -2
  114. package/dist/tools/list-units.d.ts.map +1 -1
  115. package/dist/tools/list-units.js +2 -2
  116. package/dist/tools/live-sync.d.ts +1 -1
  117. package/dist/tools/live-sync.d.ts.map +1 -1
  118. package/dist/tools/live-sync.js +4 -4
  119. package/dist/tools/measure.d.ts +1 -1
  120. package/dist/tools/measure.d.ts.map +1 -1
  121. package/dist/tools/measure.js +7 -7
  122. package/dist/tools/node-world-point.d.ts +1 -1
  123. package/dist/tools/node-world-point.d.ts.map +1 -1
  124. package/dist/tools/normalize-schema-dialect.d.ts +1 -1
  125. package/dist/tools/normalize-schema-dialect.d.ts.map +1 -1
  126. package/dist/tools/normalize-schema-dialect.js +2 -3
  127. package/dist/tools/patch-guards.d.ts +6 -4
  128. package/dist/tools/patch-guards.d.ts.map +1 -1
  129. package/dist/tools/patch-guards.js +5 -2
  130. package/dist/tools/photo-to-scene/index.d.ts +1 -1
  131. package/dist/tools/photo-to-scene/index.d.ts.map +1 -1
  132. package/dist/tools/photo-to-scene/photo-to-scene.d.ts +3 -3
  133. package/dist/tools/photo-to-scene/photo-to-scene.d.ts.map +1 -1
  134. package/dist/tools/photo-to-scene/photo-to-scene.js +7 -7
  135. package/dist/tools/project-files.d.ts +4 -0
  136. package/dist/tools/project-files.d.ts.map +1 -0
  137. package/dist/tools/project-files.js +30 -0
  138. package/dist/tools/redo.d.ts +2 -2
  139. package/dist/tools/redo.d.ts.map +1 -1
  140. package/dist/tools/redo.js +2 -2
  141. package/dist/tools/retired-tools.d.ts +10 -0
  142. package/dist/tools/retired-tools.d.ts.map +1 -0
  143. package/dist/tools/retired-tools.js +22 -0
  144. package/dist/tools/roof-level-guard.d.ts +2 -0
  145. package/dist/tools/roof-level-guard.d.ts.map +1 -0
  146. package/dist/tools/roof-level-guard.js +22 -0
  147. package/dist/tools/room-tools.d.ts +47 -46
  148. package/dist/tools/room-tools.d.ts.map +1 -1
  149. package/dist/tools/room-tools.js +6 -5
  150. package/dist/tools/scene-lifecycle/create-project.d.ts +1 -1
  151. package/dist/tools/scene-lifecycle/create-project.d.ts.map +1 -1
  152. package/dist/tools/scene-lifecycle/create-project.js +5 -5
  153. package/dist/tools/scene-lifecycle/delete-scene.d.ts +1 -1
  154. package/dist/tools/scene-lifecycle/delete-scene.d.ts.map +1 -1
  155. package/dist/tools/scene-lifecycle/delete-scene.js +6 -6
  156. package/dist/tools/scene-lifecycle/get-project-status.d.ts +1 -1
  157. package/dist/tools/scene-lifecycle/get-project-status.d.ts.map +1 -1
  158. package/dist/tools/scene-lifecycle/get-project-status.js +6 -6
  159. package/dist/tools/scene-lifecycle/index.d.ts +1 -1
  160. package/dist/tools/scene-lifecycle/index.d.ts.map +1 -1
  161. package/dist/tools/scene-lifecycle/list-scenes.d.ts +1 -1
  162. package/dist/tools/scene-lifecycle/list-scenes.d.ts.map +1 -1
  163. package/dist/tools/scene-lifecycle/list-scenes.js +4 -4
  164. package/dist/tools/scene-lifecycle/load-scene.d.ts +2 -2
  165. package/dist/tools/scene-lifecycle/load-scene.d.ts.map +1 -1
  166. package/dist/tools/scene-lifecycle/load-scene.js +5 -5
  167. package/dist/tools/scene-lifecycle/metadata.d.ts +1 -1
  168. package/dist/tools/scene-lifecycle/rename-scene.d.ts +1 -1
  169. package/dist/tools/scene-lifecycle/rename-scene.d.ts.map +1 -1
  170. package/dist/tools/scene-lifecycle/rename-scene.js +6 -6
  171. package/dist/tools/scene-lifecycle/save-scene.d.ts +5 -3
  172. package/dist/tools/scene-lifecycle/save-scene.d.ts.map +1 -1
  173. package/dist/tools/scene-lifecycle/save-scene.js +80 -12
  174. package/dist/tools/scene-lifecycle/test-utils.d.ts +1 -1
  175. package/dist/tools/scene-lifecycle/test-utils.d.ts.map +1 -1
  176. package/dist/tools/set-unit-members.d.ts +2 -2
  177. package/dist/tools/set-unit-members.d.ts.map +1 -1
  178. package/dist/tools/set-unit-members.js +6 -6
  179. package/dist/tools/set-zone.d.ts +2 -2
  180. package/dist/tools/set-zone.d.ts.map +1 -1
  181. package/dist/tools/set-zone.js +30 -18
  182. package/dist/tools/shared-tools.d.ts +15 -5
  183. package/dist/tools/shared-tools.d.ts.map +1 -1
  184. package/dist/tools/shared-tools.js +242 -29
  185. package/dist/tools/structure-tools.d.ts +3 -3
  186. package/dist/tools/templates/create-from-template.d.ts +2 -2
  187. package/dist/tools/templates/create-from-template.d.ts.map +1 -1
  188. package/dist/tools/templates/create-from-template.js +6 -6
  189. package/dist/tools/templates/create-house-from-brief.d.ts +1 -1
  190. package/dist/tools/templates/create-house-from-brief.d.ts.map +1 -1
  191. package/dist/tools/templates/create-house-from-brief.js +6 -6
  192. package/dist/tools/templates/index.d.ts +1 -1
  193. package/dist/tools/templates/index.d.ts.map +1 -1
  194. package/dist/tools/templates/list-templates.d.ts +1 -1
  195. package/dist/tools/templates/list-templates.d.ts.map +1 -1
  196. package/dist/tools/templates/list-templates.js +2 -2
  197. package/dist/tools/undo.d.ts +2 -2
  198. package/dist/tools/undo.d.ts.map +1 -1
  199. package/dist/tools/undo.js +2 -2
  200. package/dist/tools/unit-members.d.ts.map +1 -1
  201. package/dist/tools/unit-members.js +6 -6
  202. package/dist/tools/variants/generate-variants.d.ts +6 -6
  203. package/dist/tools/variants/generate-variants.d.ts.map +1 -1
  204. package/dist/tools/variants/generate-variants.js +6 -6
  205. package/dist/tools/variants/index.d.ts +1 -1
  206. package/dist/tools/variants/index.d.ts.map +1 -1
  207. package/dist/tools/view-scene.d.ts +8 -2
  208. package/dist/tools/view-scene.d.ts.map +1 -1
  209. package/dist/tools/view-scene.js +17 -5
  210. package/dist/tools/vision/analyze-floorplan-image.d.ts +1 -1
  211. package/dist/tools/vision/analyze-floorplan-image.d.ts.map +1 -1
  212. package/dist/tools/vision/analyze-floorplan-image.js +7 -7
  213. package/dist/tools/vision/analyze-room-photo.d.ts +1 -1
  214. package/dist/tools/vision/analyze-room-photo.d.ts.map +1 -1
  215. package/dist/tools/vision/analyze-room-photo.js +7 -7
  216. package/dist/tools/vision/index.d.ts +1 -1
  217. package/dist/tools/vision/index.d.ts.map +1 -1
  218. package/dist/transports/http.d.ts +8 -2
  219. package/dist/transports/http.d.ts.map +1 -1
  220. package/dist/transports/http.js +9 -3
  221. package/dist/transports/stdio.d.ts +15 -9
  222. package/dist/transports/stdio.d.ts.map +1 -1
  223. package/dist/transports/stdio.js +18 -11
  224. package/examples/coordinate-conventions-demo.md +12 -13
  225. package/examples/embed-in-agent.ts +5 -6
  226. package/examples/generate-apartment.md +4 -4
  227. package/examples/photo-to-scene.md +2 -3
  228. package/examples/renovate-from-photos.md +3 -5
  229. package/package.json +13 -9
  230. package/dist/tools/describe-node.d.ts +0 -17
  231. package/dist/tools/describe-node.d.ts.map +0 -1
  232. package/dist/tools/describe-node.js +0 -99
  233. package/dist/tools/find-nodes.d.ts +0 -16
  234. package/dist/tools/find-nodes.d.ts.map +0 -1
  235. package/dist/tools/find-nodes.js +0 -204
  236. package/dist/tools/place-design.d.ts +0 -34
  237. package/dist/tools/place-design.d.ts.map +0 -1
  238. package/dist/tools/place-design.js +0 -91
  239. package/dist/tools/validate-design.d.ts +0 -136
  240. package/dist/tools/validate-design.d.ts.map +0 -1
  241. package/dist/tools/validate-design.js +0 -28
  242. package/dist/tools/validate-scene.d.ts +0 -19
  243. package/dist/tools/validate-scene.d.ts.map +0 -1
  244. package/dist/tools/validate-scene.js +0 -28
@@ -1,91 +0,0 @@
1
- import { DesignPlacementError, planDesignPlacement } from '@pascal-app/core/procedural-items';
2
- import { z } from 'zod';
3
- import { ADDITIVE_TOOL_ANNOTATIONS } from './annotations.js';
4
- import { liveSyncOutput, persistencePayload, publishLiveSceneSnapshot } from './live-sync.js';
5
- import { measurement } from './measurement.js';
6
- import { NodeIdSchema, Vec3Schema } from './schemas.js';
7
- import { validateDesignInput } from './validate-design.js';
8
- export const placeDesignInput = {
9
- design: validateDesignInput.design,
10
- hostId: NodeIdSchema.describe('Floor designs: a level, or a slab or zone on it, or a placed design with surfaceId. Wall-side designs: a straight wall. Ceiling designs: a ceiling.'),
11
- position: Vec3Schema.describe('Metres. Floor: level-local [x, y, z], y above the floor. Wall-side: [along, height, offset] of the mounting reference from the wall start. Ceiling: plan [x, 0, z] of the reference. Surface: [x, 0, z] in the surface frame.'),
12
- rotation: measurement('angle', 'rad', {
13
- description: 'Yaw. Not for wall-side designs; use side to face the other way.',
14
- }).optional(),
15
- side: z.enum(['front', 'back']).optional().describe('Wall face for wall-side designs.'),
16
- surfaceId: z
17
- .string()
18
- .optional()
19
- .describe('Named surface of the host design to rest on (see validate_design measurements.surfaces).'),
20
- parameters: validateDesignInput.parameters,
21
- slots: z
22
- .record(z.string(), z.string())
23
- .optional()
24
- .describe('Slot id to "#rrggbb" or a scene:/library: material reference.'),
25
- name: z.string().optional(),
26
- id: z
27
- .string()
28
- .optional()
29
- .describe('Optional new id ("procedural-item_…"). Refused if it exists: this tool only creates.'),
30
- };
31
- export const placeDesignOutput = {
32
- designId: z.string(),
33
- parentId: z.string(),
34
- surfaceId: z.string().nullable(),
35
- ...liveSyncOutput,
36
- };
37
- export function registerPlaceDesign(server, bridge) {
38
- server.registerTool('place_design', {
39
- title: 'Place design',
40
- description: 'Create one instance of a design (procedural item recipe, object or JSON string) in the scene. The design must pass validate_design. Its mounting picks the host: floor designs go on a level (or a slab or zone of it) or on a named surface of a placed design; wall-side designs on a straight wall face; ceiling designs under a ceiling. Only creates: refusals are tool errors whose JSON carries a code (invalid_design with diagnostics, design_version_not_enabled for version 2 designs until the next release, design_too_large above 24 KiB, invalid_placement, node_exists, host_not_found, wrong_host, unknown_surface, does_not_fit) and change nothing.',
41
- inputSchema: placeDesignInput,
42
- outputSchema: placeDesignOutput,
43
- annotations: ADDITIVE_TOOL_ANNOTATIONS,
44
- }, async (args) => {
45
- const refuse = (refusal) => ({
46
- content: [{ type: 'text', text: JSON.stringify(refusal) }],
47
- isError: true,
48
- });
49
- let placement;
50
- try {
51
- placement = planDesignPlacement(bridge.getNodes(), {
52
- ...args,
53
- position: args.position,
54
- });
55
- }
56
- catch (error) {
57
- if (!(error instanceof DesignPlacementError))
58
- throw error;
59
- return refuse({
60
- code: error.code,
61
- message: error.message,
62
- ...(error.diagnostics.length > 0 && { diagnostics: error.diagnostics.slice(0, 8) }),
63
- });
64
- }
65
- const { node, parentId, hostUpdate } = placement;
66
- const patches = [
67
- { op: 'create', node: node, parentId: parentId },
68
- ...(hostUpdate
69
- ? [
70
- {
71
- op: 'update',
72
- id: hostUpdate.id,
73
- data: { attachments: hostUpdate.attachments },
74
- },
75
- ]
76
- : []),
77
- ];
78
- bridge.applyPatch(patches);
79
- const persistence = await publishLiveSceneSnapshot(bridge, 'place_design');
80
- const payload = {
81
- designId: node.id,
82
- parentId,
83
- surfaceId: args.surfaceId ?? null,
84
- ...persistencePayload(persistence),
85
- };
86
- return {
87
- content: [{ type: 'text', text: JSON.stringify(payload) }],
88
- structuredContent: payload,
89
- };
90
- });
91
- }
@@ -1,136 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { z } from 'zod';
3
- import type { SceneOperations } from '../operations/index.js';
4
- export declare const validateDesignInput: {
5
- design: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
6
- parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
7
- };
8
- export declare const validateDesignOutput: {
9
- valid: z.ZodBoolean;
10
- diagnostics: z.ZodArray<z.ZodObject<{
11
- severity: z.ZodEnum<{
12
- error: "error";
13
- warning: "warning";
14
- }>;
15
- code: z.ZodEnum<{
16
- schema: "schema";
17
- parameters: "parameters";
18
- invalid_json: "invalid_json";
19
- rule: "rule";
20
- sweep: "sweep";
21
- floating_component: "floating_component";
22
- unbalanced: "unbalanced";
23
- behind_wall: "behind_wall";
24
- draw_budget: "draw_budget";
25
- design_version_not_enabled: "design_version_not_enabled";
26
- design_too_large: "design_too_large";
27
- }>;
28
- path: z.ZodOptional<z.ZodString>;
29
- message: z.ZodString;
30
- hint: z.ZodOptional<z.ZodString>;
31
- }, z.core.$strip>>;
32
- design: z.ZodNullable<z.ZodObject<{
33
- name: z.ZodString;
34
- mounting: z.ZodEnum<{
35
- ceiling: "ceiling";
36
- "wall-side": "wall-side";
37
- floor: "floor";
38
- }>;
39
- parameters: z.ZodArray<z.ZodObject<{
40
- id: z.ZodString;
41
- default: z.ZodNumber;
42
- min: z.ZodNumber;
43
- max: z.ZodNumber;
44
- step: z.ZodNumber;
45
- unit: z.ZodString;
46
- }, z.core.$strip>>;
47
- slots: z.ZodArray<z.ZodString>;
48
- }, z.core.$strip>>;
49
- sweep: z.ZodNullable<z.ZodObject<{
50
- cases: z.ZodNumber;
51
- failed: z.ZodNumber;
52
- failures: z.ZodArray<z.ZodObject<{
53
- values: z.ZodRecord<z.ZodString, z.ZodNumber>;
54
- error: z.ZodString;
55
- }, z.core.$strip>>;
56
- }, z.core.$strip>>;
57
- measurements: z.ZodNullable<z.ZodObject<{
58
- parameters: z.ZodRecord<z.ZodString, z.ZodNumber>;
59
- bounds: z.ZodObject<{
60
- min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
61
- max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
62
- dimensions: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
63
- }, z.core.$strip>;
64
- shapes: z.ZodNumber;
65
- triangles: z.ZodObject<{
66
- actual: z.ZodNumber;
67
- budget: z.ZodNumber;
68
- limit: z.ZodNumber;
69
- }, z.core.$strip>;
70
- drawBudget: z.ZodNumber;
71
- drawGroups: z.ZodArray<z.ZodObject<{
72
- slot: z.ZodString;
73
- motionGroup: z.ZodNullable<z.ZodString>;
74
- shapes: z.ZodNumber;
75
- triangles: z.ZodNumber;
76
- }, z.core.$strip>>;
77
- parts: z.ZodArray<z.ZodObject<{
78
- id: z.ZodString;
79
- instances: z.ZodNumber;
80
- shapes: z.ZodNumber;
81
- triangles: z.ZodNumber;
82
- slots: z.ZodArray<z.ZodString>;
83
- motion: z.ZodNullable<z.ZodEnum<{
84
- hinge: "hinge";
85
- slide: "slide";
86
- spin: "spin";
87
- }>>;
88
- lights: z.ZodNumber;
89
- bounds: z.ZodNullable<z.ZodObject<{
90
- min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
91
- max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
92
- dimensions: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
93
- }, z.core.$strip>>;
94
- }, z.core.$strip>>;
95
- datum: z.ZodObject<{
96
- kind: z.ZodEnum<{
97
- wall: "wall";
98
- ceiling: "ceiling";
99
- floor: "floor";
100
- }>;
101
- axis: z.ZodEnum<{
102
- z: "z";
103
- y: "y";
104
- }>;
105
- value: z.ZodNumber;
106
- gap: z.ZodNumber;
107
- contact: z.ZodNullable<z.ZodObject<{
108
- parts: z.ZodArray<z.ZodString>;
109
- shapes: z.ZodNumber;
110
- min: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
111
- max: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
112
- }, z.core.$strip>>;
113
- balanced: z.ZodNullable<z.ZodBoolean>;
114
- }, z.core.$strip>;
115
- components: z.ZodObject<{
116
- count: z.ZodNumber;
117
- list: z.ZodArray<z.ZodObject<{
118
- parts: z.ZodArray<z.ZodString>;
119
- shapes: z.ZodNumber;
120
- bounds: z.ZodObject<{
121
- min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
122
- max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
123
- dimensions: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
124
- }, z.core.$strip>;
125
- touchesDatum: z.ZodBoolean;
126
- datumGap: z.ZodNumber;
127
- nearestGap: z.ZodNullable<z.ZodNumber>;
128
- }, z.core.$strip>>;
129
- }, z.core.$strip>;
130
- surfaces: z.ZodArray<z.ZodString>;
131
- motions: z.ZodNumber;
132
- lights: z.ZodNumber;
133
- }, z.core.$strip>>;
134
- };
135
- export declare function registerValidateDesign(server: McpServer, _bridge: SceneOperations): void;
136
- //# sourceMappingURL=validate-design.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-design.d.ts","sourceRoot":"","sources":["../../src/tools/validate-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,eAAO,MAAM,mBAAmB;;;CAU/B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAA;AAEhE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAmBxF"}
@@ -1,28 +0,0 @@
1
- import { DesignValidationSchema, validateDesign } from '@pascal-app/core/procedural-items';
2
- import { z } from 'zod';
3
- import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
4
- export const validateDesignInput = {
5
- design: z
6
- .union([z.string(), z.record(z.string(), z.unknown())])
7
- .describe('The design (procedural recipe, version 1 or 2) as an object, or as a JSON string for clients that cannot send recursive objects. Schema: pascal://schema/design.'),
8
- parameters: z
9
- .record(z.string(), z.number())
10
- .optional()
11
- .describe('Parameter values to measure at, by parameter id. Defaults otherwise.'),
12
- };
13
- export const validateDesignOutput = DesignValidationSchema.shape;
14
- export function registerValidateDesign(server, _bridge) {
15
- server.registerTool('validate_design', {
16
- title: 'Validate design',
17
- description: 'Check a design (procedural item recipe) without changing the scene. Returns `valid`, coded `diagnostics` with paths (errors block placement, warnings flag floating or unbalanced parts), the parameter `sweep`, and `measurements` at the given parameters: bounds, per-part bounds and instances, true triangle counts, draw groups per slot, datum contact and connected components. It is the authority: some rules are not expressible in pascal://schema/design. Repair and re-validate until `valid` is true. Version 2 designs validate fully but carry a design_version_not_enabled warning: placement accepts version 1 only until the next release.',
18
- inputSchema: validateDesignInput,
19
- outputSchema: validateDesignOutput,
20
- annotations: READ_ONLY_TOOL_ANNOTATIONS,
21
- }, async ({ design, parameters }) => {
22
- const result = validateDesign(design, { parameters });
23
- return {
24
- content: [{ type: 'text', text: JSON.stringify(result) }],
25
- structuredContent: result,
26
- };
27
- });
28
- }
@@ -1,19 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { z } from 'zod';
3
- import type { SceneOperations } from '../operations/index.js';
4
- export declare const validateSceneInput: {};
5
- export declare const validateSceneOutput: {
6
- valid: z.ZodBoolean;
7
- errors: z.ZodArray<z.ZodObject<{
8
- nodeId: z.ZodString;
9
- path: z.ZodString;
10
- message: z.ZodString;
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>>;
17
- };
18
- export declare function registerValidateScene(server: McpServer, bridge: SceneOperations): void;
19
- //# sourceMappingURL=validate-scene.d.ts.map
@@ -1 +0,0 @@
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,28 +0,0 @@
1
- import { z } from 'zod';
2
- import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
3
- export const validateSceneInput = {};
4
- const validationIssue = z.object({
5
- nodeId: z.string(),
6
- path: z.string(),
7
- message: z.string(),
8
- });
9
- export const validateSceneOutput = {
10
- valid: z.boolean(),
11
- errors: z.array(validationIssue),
12
- warnings: z.array(validationIssue),
13
- };
14
- export function registerValidateScene(server, bridge) {
15
- server.registerTool('validate_scene', {
16
- title: 'Validate scene',
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.',
18
- inputSchema: validateSceneInput,
19
- outputSchema: validateSceneOutput,
20
- annotations: READ_ONLY_TOOL_ANNOTATIONS,
21
- }, async () => {
22
- const result = bridge.validateScene();
23
- return {
24
- content: [{ type: 'text', text: JSON.stringify(result) }],
25
- structuredContent: result,
26
- };
27
- });
28
- }