@pascal-app/mcp 0.2.0

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 (249) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +330 -0
  3. package/dist/bin/pascal-mcp.d.ts +3 -0
  4. package/dist/bin/pascal-mcp.d.ts.map +1 -0
  5. package/dist/bin/pascal-mcp.js +91 -0
  6. package/dist/bridge/index.d.ts +3 -0
  7. package/dist/bridge/index.d.ts.map +1 -0
  8. package/dist/bridge/index.js +1 -0
  9. package/dist/bridge/node-shims.d.ts +16 -0
  10. package/dist/bridge/node-shims.d.ts.map +1 -0
  11. package/dist/bridge/node-shims.js +25 -0
  12. package/dist/bridge/scene-bridge.d.ts +158 -0
  13. package/dist/bridge/scene-bridge.d.ts.map +1 -0
  14. package/dist/bridge/scene-bridge.js +482 -0
  15. package/dist/index.d.ts +5 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +4 -0
  18. package/dist/lib/rehydrate-site-children.d.ts +12 -0
  19. package/dist/lib/rehydrate-site-children.d.ts.map +1 -0
  20. package/dist/lib/rehydrate-site-children.js +40 -0
  21. package/dist/lib/safe-fetch.d.ts +19 -0
  22. package/dist/lib/safe-fetch.d.ts.map +1 -0
  23. package/dist/lib/safe-fetch.js +221 -0
  24. package/dist/operations/index.d.ts +2 -0
  25. package/dist/operations/index.d.ts.map +1 -0
  26. package/dist/operations/index.js +1 -0
  27. package/dist/operations/scene-operations.d.ts +67 -0
  28. package/dist/operations/scene-operations.d.ts.map +1 -0
  29. package/dist/operations/scene-operations.js +192 -0
  30. package/dist/prompts/from-brief.d.ts +11 -0
  31. package/dist/prompts/from-brief.d.ts.map +1 -0
  32. package/dist/prompts/from-brief.js +48 -0
  33. package/dist/prompts/index.d.ts +10 -0
  34. package/dist/prompts/index.d.ts.map +1 -0
  35. package/dist/prompts/index.js +14 -0
  36. package/dist/prompts/iterate-on-feedback.d.ts +11 -0
  37. package/dist/prompts/iterate-on-feedback.d.ts.map +1 -0
  38. package/dist/prompts/iterate-on-feedback.js +41 -0
  39. package/dist/prompts/renovation-from-photos.d.ts +24 -0
  40. package/dist/prompts/renovation-from-photos.d.ts.map +1 -0
  41. package/dist/prompts/renovation-from-photos.js +135 -0
  42. package/dist/prompts/scene-guidance.d.ts +2 -0
  43. package/dist/prompts/scene-guidance.d.ts.map +1 -0
  44. package/dist/prompts/scene-guidance.js +24 -0
  45. package/dist/resources/agent-guide.d.ts +5 -0
  46. package/dist/resources/agent-guide.d.ts.map +1 -0
  47. package/dist/resources/agent-guide.js +85 -0
  48. package/dist/resources/catalog-items.d.ts +10 -0
  49. package/dist/resources/catalog-items.d.ts.map +1 -0
  50. package/dist/resources/catalog-items.js +29 -0
  51. package/dist/resources/constraints.d.ts +9 -0
  52. package/dist/resources/constraints.d.ts.map +1 -0
  53. package/dist/resources/constraints.js +69 -0
  54. package/dist/resources/index.d.ts +15 -0
  55. package/dist/resources/index.d.ts.map +1 -0
  56. package/dist/resources/index.js +23 -0
  57. package/dist/resources/scene-current.d.ts +9 -0
  58. package/dist/resources/scene-current.d.ts.map +1 -0
  59. package/dist/resources/scene-current.js +20 -0
  60. package/dist/resources/scene-summary.d.ts +10 -0
  61. package/dist/resources/scene-summary.d.ts.map +1 -0
  62. package/dist/resources/scene-summary.js +196 -0
  63. package/dist/server.d.ts +14 -0
  64. package/dist/server.d.ts.map +1 -0
  65. package/dist/server.js +18 -0
  66. package/dist/storage/index.d.ts +13 -0
  67. package/dist/storage/index.d.ts.map +1 -0
  68. package/dist/storage/index.js +14 -0
  69. package/dist/storage/slug.d.ts +21 -0
  70. package/dist/storage/slug.d.ts.map +1 -0
  71. package/dist/storage/slug.js +62 -0
  72. package/dist/storage/sqlite-driver.d.ts +18 -0
  73. package/dist/storage/sqlite-driver.d.ts.map +1 -0
  74. package/dist/storage/sqlite-driver.js +32 -0
  75. package/dist/storage/sqlite-scene-store.d.ts +51 -0
  76. package/dist/storage/sqlite-scene-store.d.ts.map +1 -0
  77. package/dist/storage/sqlite-scene-store.js +526 -0
  78. package/dist/storage/types.d.ts +136 -0
  79. package/dist/storage/types.d.ts.map +1 -0
  80. package/dist/storage/types.js +28 -0
  81. package/dist/templates/empty-studio.d.ts +8 -0
  82. package/dist/templates/empty-studio.d.ts.map +1 -0
  83. package/dist/templates/empty-studio.js +230 -0
  84. package/dist/templates/garden-house.d.ts +8 -0
  85. package/dist/templates/garden-house.d.ts.map +1 -0
  86. package/dist/templates/garden-house.js +242 -0
  87. package/dist/templates/index.d.ts +23 -0
  88. package/dist/templates/index.d.ts.map +1 -0
  89. package/dist/templates/index.js +20 -0
  90. package/dist/templates/two-bedroom.d.ts +8 -0
  91. package/dist/templates/two-bedroom.d.ts.map +1 -0
  92. package/dist/templates/two-bedroom.js +270 -0
  93. package/dist/tools/apply-patch.d.ts +25 -0
  94. package/dist/tools/apply-patch.d.ts.map +1 -0
  95. package/dist/tools/apply-patch.js +59 -0
  96. package/dist/tools/asset-catalog.d.ts +16 -0
  97. package/dist/tools/asset-catalog.d.ts.map +1 -0
  98. package/dist/tools/asset-catalog.js +308 -0
  99. package/dist/tools/check-collisions.d.ts +15 -0
  100. package/dist/tools/check-collisions.d.ts.map +1 -0
  101. package/dist/tools/check-collisions.js +61 -0
  102. package/dist/tools/construction-tools.d.ts +93 -0
  103. package/dist/tools/construction-tools.d.ts.map +1 -0
  104. package/dist/tools/construction-tools.js +369 -0
  105. package/dist/tools/create-level.d.ts +14 -0
  106. package/dist/tools/create-level.d.ts.map +1 -0
  107. package/dist/tools/create-level.js +48 -0
  108. package/dist/tools/create-wall.d.ts +15 -0
  109. package/dist/tools/create-wall.d.ts.map +1 -0
  110. package/dist/tools/create-wall.js +50 -0
  111. package/dist/tools/cut-opening.d.ts +18 -0
  112. package/dist/tools/cut-opening.d.ts.map +1 -0
  113. package/dist/tools/cut-opening.js +57 -0
  114. package/dist/tools/delete-node.d.ts +12 -0
  115. package/dist/tools/delete-node.d.ts.map +1 -0
  116. package/dist/tools/delete-node.js +37 -0
  117. package/dist/tools/describe-node.d.ts +17 -0
  118. package/dist/tools/describe-node.d.ts.map +1 -0
  119. package/dist/tools/describe-node.js +86 -0
  120. package/dist/tools/duplicate-level.d.ts +12 -0
  121. package/dist/tools/duplicate-level.d.ts.map +1 -0
  122. package/dist/tools/duplicate-level.js +56 -0
  123. package/dist/tools/errors.d.ts +20 -0
  124. package/dist/tools/errors.d.ts.map +1 -0
  125. package/dist/tools/errors.js +25 -0
  126. package/dist/tools/export-glb.d.ts +10 -0
  127. package/dist/tools/export-glb.d.ts.map +1 -0
  128. package/dist/tools/export-glb.js +24 -0
  129. package/dist/tools/export-json.d.ts +11 -0
  130. package/dist/tools/export-json.d.ts.map +1 -0
  131. package/dist/tools/export-json.js +23 -0
  132. package/dist/tools/find-nodes.d.ts +32 -0
  133. package/dist/tools/find-nodes.d.ts.map +1 -0
  134. package/dist/tools/find-nodes.js +105 -0
  135. package/dist/tools/geometry.d.ts +24 -0
  136. package/dist/tools/geometry.d.ts.map +1 -0
  137. package/dist/tools/geometry.js +94 -0
  138. package/dist/tools/get-node.d.ts +11 -0
  139. package/dist/tools/get-node.d.ts.map +1 -0
  140. package/dist/tools/get-node.js +27 -0
  141. package/dist/tools/get-scene.d.ts +11 -0
  142. package/dist/tools/get-scene.d.ts.map +1 -0
  143. package/dist/tools/get-scene.js +26 -0
  144. package/dist/tools/index.d.ts +12 -0
  145. package/dist/tools/index.d.ts.map +1 -0
  146. package/dist/tools/index.js +64 -0
  147. package/dist/tools/live-sync.d.ts +11 -0
  148. package/dist/tools/live-sync.d.ts.map +1 -0
  149. package/dist/tools/live-sync.js +62 -0
  150. package/dist/tools/measure.d.ts +14 -0
  151. package/dist/tools/measure.d.ts.map +1 -0
  152. package/dist/tools/measure.js +137 -0
  153. package/dist/tools/photo-to-scene/index.d.ts +11 -0
  154. package/dist/tools/photo-to-scene/index.d.ts.map +1 -0
  155. package/dist/tools/photo-to-scene/index.js +11 -0
  156. package/dist/tools/photo-to-scene/photo-to-scene.d.ts +26 -0
  157. package/dist/tools/photo-to-scene/photo-to-scene.d.ts.map +1 -0
  158. package/dist/tools/photo-to-scene/photo-to-scene.js +323 -0
  159. package/dist/tools/place-item.d.ts +15 -0
  160. package/dist/tools/place-item.d.ts.map +1 -0
  161. package/dist/tools/place-item.js +84 -0
  162. package/dist/tools/redo.d.ts +11 -0
  163. package/dist/tools/redo.d.ts.map +1 -0
  164. package/dist/tools/redo.js +25 -0
  165. package/dist/tools/room-tools.d.ts +97 -0
  166. package/dist/tools/room-tools.d.ts.map +1 -0
  167. package/dist/tools/room-tools.js +510 -0
  168. package/dist/tools/scene-lifecycle/create-project.d.ts +33 -0
  169. package/dist/tools/scene-lifecycle/create-project.d.ts.map +1 -0
  170. package/dist/tools/scene-lifecycle/create-project.js +70 -0
  171. package/dist/tools/scene-lifecycle/delete-scene.d.ts +12 -0
  172. package/dist/tools/scene-lifecycle/delete-scene.d.ts.map +1 -0
  173. package/dist/tools/scene-lifecycle/delete-scene.js +42 -0
  174. package/dist/tools/scene-lifecycle/get-project-status.d.ts +31 -0
  175. package/dist/tools/scene-lifecycle/get-project-status.d.ts.map +1 -0
  176. package/dist/tools/scene-lifecycle/get-project-status.js +69 -0
  177. package/dist/tools/scene-lifecycle/index.d.ts +17 -0
  178. package/dist/tools/scene-lifecycle/index.d.ts.map +1 -0
  179. package/dist/tools/scene-lifecycle/index.js +29 -0
  180. package/dist/tools/scene-lifecycle/list-scenes.d.ts +27 -0
  181. package/dist/tools/scene-lifecycle/list-scenes.d.ts.map +1 -0
  182. package/dist/tools/scene-lifecycle/list-scenes.js +49 -0
  183. package/dist/tools/scene-lifecycle/load-scene.d.ts +31 -0
  184. package/dist/tools/scene-lifecycle/load-scene.d.ts.map +1 -0
  185. package/dist/tools/scene-lifecycle/load-scene.js +55 -0
  186. package/dist/tools/scene-lifecycle/metadata.d.ts +49 -0
  187. package/dist/tools/scene-lifecycle/metadata.d.ts.map +1 -0
  188. package/dist/tools/scene-lifecycle/metadata.js +68 -0
  189. package/dist/tools/scene-lifecycle/rename-scene.d.ts +22 -0
  190. package/dist/tools/scene-lifecycle/rename-scene.d.ts.map +1 -0
  191. package/dist/tools/scene-lifecycle/rename-scene.js +63 -0
  192. package/dist/tools/scene-lifecycle/save-scene.d.ts +42 -0
  193. package/dist/tools/scene-lifecycle/save-scene.d.ts.map +1 -0
  194. package/dist/tools/scene-lifecycle/save-scene.js +130 -0
  195. package/dist/tools/scene-lifecycle/test-utils.d.ts +39 -0
  196. package/dist/tools/scene-lifecycle/test-utils.d.ts.map +1 -0
  197. package/dist/tools/scene-lifecycle/test-utils.js +211 -0
  198. package/dist/tools/scene-query.d.ts +57 -0
  199. package/dist/tools/scene-query.d.ts.map +1 -0
  200. package/dist/tools/scene-query.js +645 -0
  201. package/dist/tools/schemas.d.ts +52 -0
  202. package/dist/tools/schemas.d.ts.map +1 -0
  203. package/dist/tools/schemas.js +42 -0
  204. package/dist/tools/set-zone.d.ts +14 -0
  205. package/dist/tools/set-zone.d.ts.map +1 -0
  206. package/dist/tools/set-zone.js +48 -0
  207. package/dist/tools/templates/create-from-template.d.ts +54 -0
  208. package/dist/tools/templates/create-from-template.d.ts.map +1 -0
  209. package/dist/tools/templates/create-from-template.js +145 -0
  210. package/dist/tools/templates/create-house-from-brief.d.ts +35 -0
  211. package/dist/tools/templates/create-house-from-brief.d.ts.map +1 -0
  212. package/dist/tools/templates/create-house-from-brief.js +170 -0
  213. package/dist/tools/templates/index.d.ts +14 -0
  214. package/dist/tools/templates/index.d.ts.map +1 -0
  215. package/dist/tools/templates/index.js +18 -0
  216. package/dist/tools/templates/list-templates.d.ts +18 -0
  217. package/dist/tools/templates/list-templates.d.ts.map +1 -0
  218. package/dist/tools/templates/list-templates.js +36 -0
  219. package/dist/tools/undo.d.ts +11 -0
  220. package/dist/tools/undo.d.ts.map +1 -0
  221. package/dist/tools/undo.js +25 -0
  222. package/dist/tools/validate-scene.d.ts +14 -0
  223. package/dist/tools/validate-scene.d.ts.map +1 -0
  224. package/dist/tools/validate-scene.js +24 -0
  225. package/dist/tools/variants/generate-variants.d.ts +30 -0
  226. package/dist/tools/variants/generate-variants.d.ts.map +1 -0
  227. package/dist/tools/variants/generate-variants.js +160 -0
  228. package/dist/tools/variants/index.d.ts +9 -0
  229. package/dist/tools/variants/index.d.ts.map +1 -0
  230. package/dist/tools/variants/index.js +9 -0
  231. package/dist/tools/variants/mutations.d.ts +18 -0
  232. package/dist/tools/variants/mutations.d.ts.map +1 -0
  233. package/dist/tools/variants/mutations.js +324 -0
  234. package/dist/tools/vision/analyze-floorplan-image.d.ts +33 -0
  235. package/dist/tools/vision/analyze-floorplan-image.d.ts.map +1 -0
  236. package/dist/tools/vision/analyze-floorplan-image.js +146 -0
  237. package/dist/tools/vision/analyze-room-photo.d.ts +29 -0
  238. package/dist/tools/vision/analyze-room-photo.d.ts.map +1 -0
  239. package/dist/tools/vision/analyze-room-photo.js +130 -0
  240. package/dist/tools/vision/index.d.ts +12 -0
  241. package/dist/tools/vision/index.d.ts.map +1 -0
  242. package/dist/tools/vision/index.js +14 -0
  243. package/dist/transports/http.d.ts +36 -0
  244. package/dist/transports/http.d.ts.map +1 -0
  245. package/dist/transports/http.js +203 -0
  246. package/dist/transports/stdio.d.ts +14 -0
  247. package/dist/transports/stdio.d.ts.map +1 -0
  248. package/dist/transports/stdio.js +16 -0
  249. package/package.json +86 -0
@@ -0,0 +1,31 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { SceneOperations } from '../../operations';
4
+ export declare const getProjectStatusInput: {
5
+ id: z.ZodString;
6
+ };
7
+ export declare const getProjectStatusOutput: {
8
+ id: z.ZodString;
9
+ projectId: z.ZodString;
10
+ name: z.ZodString;
11
+ editorUrl: z.ZodString;
12
+ url: z.ZodString;
13
+ ownerId: z.ZodNullable<z.ZodString>;
14
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
15
+ publishedVersion: z.ZodNullable<z.ZodNumber>;
16
+ latestVersion: z.ZodNullable<z.ZodNumber>;
17
+ draftVersion: z.ZodNullable<z.ZodNumber>;
18
+ browserVisibleVersion: z.ZodNullable<z.ZodNumber>;
19
+ version: z.ZodNumber;
20
+ isEmpty: z.ZodBoolean;
21
+ sizeBytes: z.ZodNumber;
22
+ nodeCount: z.ZodNumber;
23
+ graphHash: z.ZodNullable<z.ZodString>;
24
+ createdAt: z.ZodString;
25
+ updatedAt: z.ZodString;
26
+ levelIds: z.ZodArray<z.ZodString>;
27
+ defaultLevelId: z.ZodNullable<z.ZodString>;
28
+ nextStep: z.ZodString;
29
+ };
30
+ export declare function registerGetProjectStatus(server: McpServer, operations: SceneOperations): void;
31
+ //# sourceMappingURL=get-project-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-status.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/get-project-status.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,kBAAkB,CAAA;AAIvD,eAAO,MAAM,qBAAqB;;CAEjC,CAAA;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;CAsBlC,CAAA;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA2C7F"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { ErrorCode, McpError, throwMcpError } from '../errors';
3
+ import { currentLevelContext, projectStatusPayload } from './metadata';
4
+ export const getProjectStatusInput = {
5
+ id: z.string().min(1).max(64),
6
+ };
7
+ export const getProjectStatusOutput = {
8
+ id: z.string(),
9
+ projectId: z.string(),
10
+ name: z.string(),
11
+ editorUrl: z.string(),
12
+ url: z.string(),
13
+ ownerId: z.string().nullable(),
14
+ thumbnailUrl: z.string().nullable(),
15
+ publishedVersion: z.number().nullable(),
16
+ latestVersion: z.number().nullable(),
17
+ draftVersion: z.number().nullable(),
18
+ browserVisibleVersion: z.number().nullable(),
19
+ version: z.number(),
20
+ isEmpty: z.boolean(),
21
+ sizeBytes: z.number(),
22
+ nodeCount: z.number(),
23
+ graphHash: z.string().nullable(),
24
+ createdAt: z.string(),
25
+ updatedAt: z.string(),
26
+ levelIds: z.array(z.string()),
27
+ defaultLevelId: z.string().nullable(),
28
+ nextStep: z.string(),
29
+ };
30
+ export function registerGetProjectStatus(server, operations) {
31
+ server.registerTool('get_project_status', {
32
+ title: 'Get project status',
33
+ description: 'Authoritative status/debug call for a Pascal project: editor URL, browser-visible version, latest saved version, published version, node count, and graph hash.',
34
+ inputSchema: getProjectStatusInput,
35
+ outputSchema: getProjectStatusOutput,
36
+ }, async ({ id }) => {
37
+ try {
38
+ const status = await operations.getProjectStatus(id);
39
+ if (!status) {
40
+ throwMcpError(ErrorCode.InvalidParams, 'project_not_found', { id });
41
+ }
42
+ const activeScene = operations.getActiveScene();
43
+ if (activeScene?.id !== status.id) {
44
+ const scene = await operations.loadStoredScene(status.id);
45
+ if (scene) {
46
+ operations.loadJSON(scene.graph);
47
+ operations.setActiveScene(scene);
48
+ }
49
+ }
50
+ const nextStep = status.nodeCount > 0
51
+ ? 'Open editorUrl or continue editing, then save_scene again.'
52
+ : 'Project is empty. Build a scene with semantic tools or create_from_template, then save_scene.';
53
+ const payload = {
54
+ ...projectStatusPayload(status, nextStep),
55
+ ...currentLevelContext(operations),
56
+ };
57
+ return {
58
+ content: [{ type: 'text', text: JSON.stringify(payload) }],
59
+ structuredContent: payload,
60
+ };
61
+ }
62
+ catch (err) {
63
+ if (err instanceof McpError)
64
+ throw err;
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ throwMcpError(ErrorCode.InternalError, msg);
67
+ }
68
+ });
69
+ }
@@ -0,0 +1,17 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { SceneOperations } from '../../operations';
3
+ /**
4
+ * Register the scene-lifecycle MCP tools (`save_scene`, `load_scene`,
5
+ * `list_scenes`, `delete_scene`, `rename_scene`) against the given server.
6
+ * All tools operate against shared scene operations so MCP, REST, and future CLI
7
+ * entry points share the same storage boundary.
8
+ */
9
+ export declare function registerSceneLifecycleTools(server: McpServer, operations: SceneOperations): void;
10
+ export { createProjectInput, createProjectOutput, registerCreateProject } from './create-project';
11
+ export { deleteSceneInput, deleteSceneOutput, registerDeleteScene } from './delete-scene';
12
+ export { getProjectStatusInput, getProjectStatusOutput, registerGetProjectStatus, } from './get-project-status';
13
+ export { listScenesInput, listScenesOutput, registerListScenes } from './list-scenes';
14
+ export { loadSceneInput, loadSceneOutput, registerLoadScene } from './load-scene';
15
+ export { registerRenameScene, renameSceneInput, renameSceneOutput } from './rename-scene';
16
+ export { registerSaveScene, saveSceneInput, saveSceneOutput } from './save-scene';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AASvD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAQhG;AAED,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACrF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { registerCreateProject } from './create-project';
2
+ import { registerDeleteScene } from './delete-scene';
3
+ import { registerGetProjectStatus } from './get-project-status';
4
+ import { registerListScenes } from './list-scenes';
5
+ import { registerLoadScene } from './load-scene';
6
+ import { registerRenameScene } from './rename-scene';
7
+ import { registerSaveScene } from './save-scene';
8
+ /**
9
+ * Register the scene-lifecycle MCP tools (`save_scene`, `load_scene`,
10
+ * `list_scenes`, `delete_scene`, `rename_scene`) against the given server.
11
+ * All tools operate against shared scene operations so MCP, REST, and future CLI
12
+ * entry points share the same storage boundary.
13
+ */
14
+ export function registerSceneLifecycleTools(server, operations) {
15
+ registerCreateProject(server, operations);
16
+ registerGetProjectStatus(server, operations);
17
+ registerSaveScene(server, operations);
18
+ registerLoadScene(server, operations);
19
+ registerListScenes(server, operations);
20
+ registerDeleteScene(server, operations);
21
+ registerRenameScene(server, operations);
22
+ }
23
+ export { createProjectInput, createProjectOutput, registerCreateProject } from './create-project';
24
+ export { deleteSceneInput, deleteSceneOutput, registerDeleteScene } from './delete-scene';
25
+ export { getProjectStatusInput, getProjectStatusOutput, registerGetProjectStatus, } from './get-project-status';
26
+ export { listScenesInput, listScenesOutput, registerListScenes } from './list-scenes';
27
+ export { loadSceneInput, loadSceneOutput, registerLoadScene } from './load-scene';
28
+ export { registerRenameScene, renameSceneInput, renameSceneOutput } from './rename-scene';
29
+ export { registerSaveScene, saveSceneInput, saveSceneOutput } from './save-scene';
@@ -0,0 +1,27 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { SceneOperations } from '../../operations';
4
+ export declare const listScenesInput: {
5
+ projectId: z.ZodOptional<z.ZodString>;
6
+ limit: z.ZodOptional<z.ZodNumber>;
7
+ };
8
+ export declare const listScenesOutput: {
9
+ scenes: z.ZodArray<z.ZodObject<{
10
+ id: z.ZodString;
11
+ name: z.ZodString;
12
+ projectId: z.ZodNullable<z.ZodString>;
13
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
14
+ version: z.ZodNumber;
15
+ createdAt: z.ZodString;
16
+ updatedAt: z.ZodString;
17
+ ownerId: z.ZodNullable<z.ZodString>;
18
+ sizeBytes: z.ZodNumber;
19
+ nodeCount: z.ZodNumber;
20
+ editorUrl: z.ZodOptional<z.ZodString>;
21
+ url: z.ZodOptional<z.ZodString>;
22
+ published: z.ZodOptional<z.ZodBoolean>;
23
+ graphHash: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>>;
25
+ };
26
+ export declare function registerListScenes(server: McpServer, operations: SceneOperations): void;
27
+ //# sourceMappingURL=list-scenes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-scenes.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/list-scenes.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,kBAAkB,CAAA;AAKvD,eAAO,MAAM,eAAe;;;CAG3B,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAmB5B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA2BvF"}
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+ import { ErrorCode, throwMcpError } from '../errors';
3
+ const DEFAULT_LIMIT = 100;
4
+ export const listScenesInput = {
5
+ projectId: z.string().optional(),
6
+ limit: z.number().int().positive().max(1000).optional(),
7
+ };
8
+ export const listScenesOutput = {
9
+ scenes: z.array(z.object({
10
+ id: z.string(),
11
+ name: z.string(),
12
+ projectId: z.string().nullable(),
13
+ thumbnailUrl: z.string().nullable(),
14
+ version: z.number(),
15
+ createdAt: z.string(),
16
+ updatedAt: z.string(),
17
+ ownerId: z.string().nullable(),
18
+ sizeBytes: z.number(),
19
+ nodeCount: z.number(),
20
+ editorUrl: z.string().optional(),
21
+ url: z.string().optional(),
22
+ published: z.boolean().optional(),
23
+ graphHash: z.string().optional(),
24
+ })),
25
+ };
26
+ export function registerListScenes(server, operations) {
27
+ server.registerTool('list_scenes', {
28
+ title: 'List scenes',
29
+ description: 'List scenes in the SceneStore. Optionally filter by `projectId` and cap results with `limit` (default 100).',
30
+ inputSchema: listScenesInput,
31
+ outputSchema: listScenesOutput,
32
+ }, async ({ projectId, limit }) => {
33
+ try {
34
+ const scenes = await operations.listScenes({
35
+ ...(projectId !== undefined ? { projectId } : {}),
36
+ limit: limit ?? DEFAULT_LIMIT,
37
+ });
38
+ const payload = { scenes };
39
+ return {
40
+ content: [{ type: 'text', text: JSON.stringify(payload) }],
41
+ structuredContent: payload,
42
+ };
43
+ }
44
+ catch (err) {
45
+ const msg = err instanceof Error ? err.message : String(err);
46
+ throwMcpError(ErrorCode.InternalError, msg);
47
+ }
48
+ });
49
+ }
@@ -0,0 +1,31 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { SceneOperations } from '../../operations';
4
+ export declare const loadSceneInput: {
5
+ id: z.ZodString;
6
+ };
7
+ export declare const loadSceneOutput: {
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ projectId: z.ZodNullable<z.ZodString>;
11
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
12
+ version: z.ZodNumber;
13
+ createdAt: z.ZodString;
14
+ updatedAt: z.ZodString;
15
+ ownerId: z.ZodNullable<z.ZodString>;
16
+ sizeBytes: z.ZodNumber;
17
+ nodeCount: z.ZodNumber;
18
+ url: z.ZodString;
19
+ editorUrl: z.ZodString;
20
+ published: z.ZodBoolean;
21
+ isDraft: z.ZodBoolean;
22
+ saveMode: z.ZodEnum<{
23
+ draft: "draft";
24
+ checkpoint: "checkpoint";
25
+ }>;
26
+ graphHash: z.ZodOptional<z.ZodString>;
27
+ levelIds: z.ZodArray<z.ZodString>;
28
+ defaultLevelId: z.ZodNullable<z.ZodString>;
29
+ };
30
+ export declare function registerLoadScene(server: McpServer, bridge: SceneOperations): void;
31
+ //# sourceMappingURL=load-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/load-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,kBAAkB,CAAA;AAIvD,eAAO,MAAM,cAAc;;CAE1B,CAAA;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAmB3B,CAAA;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAgClF"}
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ import { ErrorCode, throwMcpError } from '../errors';
3
+ import { currentLevelContext, sceneMetaPayload } from './metadata';
4
+ export const loadSceneInput = {
5
+ id: z.string().min(1).max(64),
6
+ };
7
+ export const loadSceneOutput = {
8
+ id: z.string(),
9
+ name: z.string(),
10
+ projectId: z.string().nullable(),
11
+ thumbnailUrl: z.string().nullable(),
12
+ version: z.number(),
13
+ createdAt: z.string(),
14
+ updatedAt: z.string(),
15
+ ownerId: z.string().nullable(),
16
+ sizeBytes: z.number(),
17
+ nodeCount: z.number(),
18
+ url: z.string(),
19
+ editorUrl: z.string(),
20
+ published: z.boolean(),
21
+ isDraft: z.boolean(),
22
+ saveMode: z.enum(['draft', 'checkpoint']),
23
+ graphHash: z.string().optional(),
24
+ levelIds: z.array(z.string()),
25
+ defaultLevelId: z.string().nullable(),
26
+ };
27
+ export function registerLoadScene(server, bridge) {
28
+ server.registerTool('load_scene', {
29
+ title: 'Load scene',
30
+ description: 'Load a scene from the SceneStore into the bridge. Returns the scene metadata. Throws `scene_not_found` if the id does not exist.',
31
+ inputSchema: loadSceneInput,
32
+ outputSchema: loadSceneOutput,
33
+ }, async ({ id }) => {
34
+ const result = await bridge.loadStoredScene(id);
35
+ if (!result) {
36
+ throwMcpError(ErrorCode.InvalidParams, 'scene_not_found', { id });
37
+ }
38
+ try {
39
+ bridge.loadJSON(result.graph);
40
+ bridge.setActiveScene(result);
41
+ }
42
+ catch (err) {
43
+ const msg = err instanceof Error ? err.message : String(err);
44
+ throwMcpError(ErrorCode.InvalidRequest, `load_failed: ${msg}`, { id });
45
+ }
46
+ const payload = {
47
+ ...sceneMetaPayload(result, result.graph),
48
+ ...currentLevelContext(bridge),
49
+ };
50
+ return {
51
+ content: [{ type: 'text', text: JSON.stringify(payload) }],
52
+ structuredContent: payload,
53
+ };
54
+ });
55
+ }
@@ -0,0 +1,49 @@
1
+ import type { SceneGraph } from '@pascal-app/core/clone-scene-graph';
2
+ import type { SceneOperations } from '../../operations';
3
+ import type { ProjectStatus, SceneMeta } from '../../storage/types';
4
+ export declare function computeGraphHash(graph: SceneGraph): string;
5
+ export declare function editorUrlFor(meta: Pick<SceneMeta, 'id' | 'editorUrl' | 'url'>): string;
6
+ export declare function sceneMetaPayload(meta: SceneMeta, graph?: SceneGraph): {
7
+ id: string;
8
+ name: string;
9
+ projectId: string | null;
10
+ thumbnailUrl: string | null;
11
+ version: number;
12
+ createdAt: string;
13
+ updatedAt: string;
14
+ ownerId: string | null;
15
+ sizeBytes: number;
16
+ nodeCount: number;
17
+ editorUrl: string;
18
+ url: string;
19
+ published: boolean;
20
+ isDraft: boolean;
21
+ saveMode: import("../../storage").SceneSaveMode;
22
+ graphHash: string | undefined;
23
+ };
24
+ export declare function projectStatusPayload(status: ProjectStatus, nextStep?: string): {
25
+ nextStep?: string | undefined;
26
+ id: string;
27
+ projectId: string;
28
+ name: string;
29
+ editorUrl: string;
30
+ url: string;
31
+ ownerId: string | null;
32
+ thumbnailUrl: string | null;
33
+ publishedVersion: number | null;
34
+ latestVersion: number | null;
35
+ draftVersion: number | null;
36
+ browserVisibleVersion: number | null;
37
+ version: number;
38
+ isEmpty: boolean;
39
+ sizeBytes: number;
40
+ nodeCount: number;
41
+ graphHash: string | null;
42
+ createdAt: string;
43
+ updatedAt: string;
44
+ };
45
+ export declare function currentLevelContext(operations: SceneOperations): {
46
+ levelIds: string[];
47
+ defaultLevelId: string | null;
48
+ };
49
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEnE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAO1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,GAAG,KAAK,CAAC,GAAG,MAAM,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;EAoBnE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;EAsB5E;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,eAAe;;;EAW9D"}
@@ -0,0 +1,68 @@
1
+ import { createHash } from 'node:crypto';
2
+ export function computeGraphHash(graph) {
3
+ const normalized = JSON.stringify({
4
+ nodes: graph.nodes ?? {},
5
+ rootNodeIds: graph.rootNodeIds ?? [],
6
+ collections: graph.collections ?? {},
7
+ });
8
+ return createHash('sha256').update(normalized).digest('hex');
9
+ }
10
+ export function editorUrlFor(meta) {
11
+ return meta.editorUrl ?? meta.url ?? `/editor/${meta.id}`;
12
+ }
13
+ export function sceneMetaPayload(meta, graph) {
14
+ const editorUrl = editorUrlFor(meta);
15
+ return {
16
+ id: meta.id,
17
+ name: meta.name,
18
+ projectId: meta.projectId,
19
+ thumbnailUrl: meta.thumbnailUrl,
20
+ version: meta.version,
21
+ createdAt: meta.createdAt,
22
+ updatedAt: meta.updatedAt,
23
+ ownerId: meta.ownerId,
24
+ sizeBytes: meta.sizeBytes,
25
+ nodeCount: meta.nodeCount,
26
+ editorUrl,
27
+ url: editorUrl,
28
+ published: meta.published ?? true,
29
+ isDraft: meta.isDraft ?? false,
30
+ saveMode: meta.saveMode ?? (meta.isDraft ? 'draft' : 'checkpoint'),
31
+ graphHash: meta.graphHash ?? (graph ? computeGraphHash(graph) : undefined),
32
+ };
33
+ }
34
+ export function projectStatusPayload(status, nextStep) {
35
+ return {
36
+ id: status.id,
37
+ projectId: status.projectId,
38
+ name: status.name,
39
+ editorUrl: status.editorUrl,
40
+ url: status.url,
41
+ ownerId: status.ownerId,
42
+ thumbnailUrl: status.thumbnailUrl,
43
+ publishedVersion: status.publishedVersion,
44
+ latestVersion: status.latestVersion,
45
+ draftVersion: status.draftVersion,
46
+ browserVisibleVersion: status.browserVisibleVersion,
47
+ version: status.version,
48
+ isEmpty: status.isEmpty,
49
+ sizeBytes: status.sizeBytes,
50
+ nodeCount: status.nodeCount,
51
+ graphHash: status.graphHash,
52
+ createdAt: status.createdAt,
53
+ updatedAt: status.updatedAt,
54
+ ...(nextStep ? { nextStep } : {}),
55
+ };
56
+ }
57
+ export function currentLevelContext(operations) {
58
+ const levels = operations.findNodes({ type: 'level' }).sort((a, b) => {
59
+ const aa = a.type === 'level' ? a.level : 0;
60
+ const bb = b.type === 'level' ? b.level : 0;
61
+ return aa - bb;
62
+ });
63
+ const levelIds = levels.map((level) => level.id);
64
+ return {
65
+ levelIds,
66
+ defaultLevelId: levelIds[0] ?? null,
67
+ };
68
+ }
@@ -0,0 +1,22 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { SceneOperations } from '../../operations';
4
+ export declare const renameSceneInput: {
5
+ id: z.ZodString;
6
+ newName: z.ZodString;
7
+ expectedVersion: z.ZodOptional<z.ZodNumber>;
8
+ };
9
+ export declare const renameSceneOutput: {
10
+ id: z.ZodString;
11
+ name: z.ZodString;
12
+ projectId: z.ZodNullable<z.ZodString>;
13
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
14
+ version: z.ZodNumber;
15
+ createdAt: z.ZodString;
16
+ updatedAt: z.ZodString;
17
+ ownerId: z.ZodNullable<z.ZodString>;
18
+ sizeBytes: z.ZodNumber;
19
+ nodeCount: z.ZodNumber;
20
+ };
21
+ export declare function registerRenameScene(server: McpServer, operations: SceneOperations): void;
22
+ //# sourceMappingURL=rename-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/rename-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,kBAAkB,CAAA;AAIvD,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;CAW7B,CAAA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA8CxF"}
@@ -0,0 +1,63 @@
1
+ import { z } from 'zod';
2
+ import { SceneNotFoundError, SceneVersionConflictError } from '../../storage/types';
3
+ import { ErrorCode, throwMcpError } from '../errors';
4
+ export const renameSceneInput = {
5
+ id: z.string().min(1).max(64),
6
+ newName: z.string().min(1).max(200),
7
+ expectedVersion: z.number().int().positive().optional(),
8
+ };
9
+ export const renameSceneOutput = {
10
+ id: z.string(),
11
+ name: z.string(),
12
+ projectId: z.string().nullable(),
13
+ thumbnailUrl: z.string().nullable(),
14
+ version: z.number(),
15
+ createdAt: z.string(),
16
+ updatedAt: z.string(),
17
+ ownerId: z.string().nullable(),
18
+ sizeBytes: z.number(),
19
+ nodeCount: z.number(),
20
+ };
21
+ export function registerRenameScene(server, operations) {
22
+ server.registerTool('rename_scene', {
23
+ title: 'Rename scene',
24
+ description: 'Rename a scene in the SceneStore. Returns the updated SceneMeta. Optionally pass `expectedVersion` for optimistic concurrency.',
25
+ inputSchema: renameSceneInput,
26
+ outputSchema: renameSceneOutput,
27
+ }, async ({ id, newName, expectedVersion }) => {
28
+ try {
29
+ const meta = await operations.renameStoredScene(id, newName, {
30
+ ...(expectedVersion !== undefined ? { expectedVersion } : {}),
31
+ });
32
+ const payload = {
33
+ id: meta.id,
34
+ name: meta.name,
35
+ projectId: meta.projectId,
36
+ thumbnailUrl: meta.thumbnailUrl,
37
+ version: meta.version,
38
+ createdAt: meta.createdAt,
39
+ updatedAt: meta.updatedAt,
40
+ ownerId: meta.ownerId,
41
+ sizeBytes: meta.sizeBytes,
42
+ nodeCount: meta.nodeCount,
43
+ };
44
+ return {
45
+ content: [{ type: 'text', text: JSON.stringify(payload) }],
46
+ structuredContent: payload,
47
+ };
48
+ }
49
+ catch (err) {
50
+ if (err instanceof SceneNotFoundError) {
51
+ throwMcpError(ErrorCode.InvalidParams, 'scene_not_found', { id });
52
+ }
53
+ if (err instanceof SceneVersionConflictError) {
54
+ throwMcpError(ErrorCode.InvalidRequest, 'version_conflict', {
55
+ id,
56
+ expectedVersion,
57
+ });
58
+ }
59
+ const msg = err instanceof Error ? err.message : String(err);
60
+ throwMcpError(ErrorCode.InternalError, msg);
61
+ }
62
+ });
63
+ }
@@ -0,0 +1,42 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { SceneOperations } from '../../operations';
4
+ export declare const saveSceneInput: {
5
+ id: z.ZodOptional<z.ZodString>;
6
+ name: z.ZodString;
7
+ projectId: z.ZodOptional<z.ZodString>;
8
+ expectedVersion: z.ZodOptional<z.ZodNumber>;
9
+ saveMode: z.ZodDefault<z.ZodEnum<{
10
+ draft: "draft";
11
+ checkpoint: "checkpoint";
12
+ }>>;
13
+ publish: z.ZodOptional<z.ZodBoolean>;
14
+ thumbnail: z.ZodOptional<z.ZodString>;
15
+ includeCurrentScene: z.ZodDefault<z.ZodBoolean>;
16
+ graph: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
17
+ };
18
+ export declare const saveSceneOutput: {
19
+ id: z.ZodString;
20
+ name: z.ZodString;
21
+ projectId: z.ZodNullable<z.ZodString>;
22
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
23
+ version: z.ZodNumber;
24
+ createdAt: z.ZodString;
25
+ updatedAt: z.ZodString;
26
+ ownerId: z.ZodNullable<z.ZodString>;
27
+ sizeBytes: z.ZodNumber;
28
+ nodeCount: z.ZodNumber;
29
+ url: z.ZodString;
30
+ editorUrl: z.ZodString;
31
+ published: z.ZodBoolean;
32
+ isDraft: z.ZodBoolean;
33
+ saveMode: z.ZodEnum<{
34
+ draft: "draft";
35
+ checkpoint: "checkpoint";
36
+ }>;
37
+ graphHash: z.ZodOptional<z.ZodString>;
38
+ levelIds: z.ZodArray<z.ZodString>;
39
+ defaultLevelId: z.ZodNullable<z.ZodString>;
40
+ };
41
+ export declare function registerSaveScene(server: McpServer, bridge: SceneOperations): void;
42
+ //# sourceMappingURL=save-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/save-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAMvD,eAAO,MAAM,cAAc;;;;;;;;;;;;;CA0B1B,CAAA;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAmB3B,CAAA;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAiGlF"}