@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.
- package/CHANGELOG.md +76 -0
- package/README.md +166 -62
- package/dist/bin/pascal-mcp.js +1 -1
- package/dist/bridge/agent-session.d.ts +18 -0
- package/dist/bridge/agent-session.d.ts.map +1 -0
- package/dist/bridge/agent-session.js +15 -0
- package/dist/bridge/index.d.ts +1 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/scene-bridge.d.ts +3 -0
- package/dist/bridge/scene-bridge.d.ts.map +1 -1
- package/dist/bridge/scene-bridge.js +7 -0
- package/dist/lib/safe-fetch.d.ts +22 -4
- package/dist/lib/safe-fetch.d.ts.map +1 -1
- package/dist/lib/safe-fetch.js +233 -134
- package/dist/operations/scene-operations.d.ts +18 -0
- package/dist/operations/scene-operations.d.ts.map +1 -1
- package/dist/operations/scene-operations.js +11 -0
- package/dist/prompts/from-brief.d.ts +1 -1
- package/dist/prompts/from-brief.d.ts.map +1 -1
- package/dist/prompts/from-brief.js +3 -3
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/iterate-on-feedback.d.ts +1 -1
- package/dist/prompts/iterate-on-feedback.d.ts.map +1 -1
- package/dist/prompts/iterate-on-feedback.js +2 -2
- package/dist/prompts/renovation-from-photos.d.ts +1 -1
- package/dist/prompts/renovation-from-photos.d.ts.map +1 -1
- package/dist/prompts/renovation-from-photos.js +2 -2
- package/dist/prompts/scene-guidance.d.ts.map +1 -1
- package/dist/prompts/scene-guidance.js +10 -3
- package/dist/resources/agent-guide.d.ts +1 -1
- package/dist/resources/agent-guide.d.ts.map +1 -1
- package/dist/resources/agent-guide.js +52 -44
- package/dist/resources/catalog-items.d.ts +1 -1
- package/dist/resources/catalog-items.d.ts.map +1 -1
- package/dist/resources/constraints.d.ts +1 -1
- package/dist/resources/constraints.d.ts.map +1 -1
- package/dist/resources/constraints.js +1 -1
- package/dist/resources/design-schema.d.ts +1 -1
- package/dist/resources/design-schema.d.ts.map +1 -1
- package/dist/resources/index.d.ts +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/scene-current.d.ts +1 -1
- package/dist/resources/scene-current.d.ts.map +1 -1
- package/dist/resources/scene-summary.d.ts +1 -1
- package/dist/resources/scene-summary.d.ts.map +1 -1
- package/dist/server.d.ts +7 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +59 -21
- package/dist/storage/disk-artifact-store.d.ts.map +1 -1
- package/dist/storage/sqlite-scene-store.d.ts +1 -1
- package/dist/storage/sqlite-scene-store.d.ts.map +1 -1
- package/dist/storage/types.d.ts +4 -4
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/templates/empty-studio.d.ts +3 -3
- package/dist/templates/empty-studio.d.ts.map +1 -1
- package/dist/templates/garden-house.d.ts +3 -3
- package/dist/templates/garden-house.d.ts.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/two-bedroom.d.ts +3 -3
- package/dist/templates/two-bedroom.d.ts.map +1 -1
- package/dist/tools/add-column.d.ts +1 -1
- package/dist/tools/add-column.d.ts.map +1 -1
- package/dist/tools/add-column.js +3 -2
- package/dist/tools/add-object.d.ts +19 -3
- package/dist/tools/add-object.d.ts.map +1 -1
- package/dist/tools/add-object.js +66 -35
- package/dist/tools/annotations.d.ts.map +1 -1
- package/dist/tools/apply-patch.d.ts +6 -2
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +13 -8
- package/dist/tools/asset-catalog.d.ts.map +1 -1
- package/dist/tools/asset-catalog.js +23 -0
- package/dist/tools/author-scene.d.ts +10 -0
- package/dist/tools/author-scene.d.ts.map +1 -0
- package/dist/tools/author-scene.js +140 -0
- package/dist/tools/check-collisions.d.ts +6 -6
- package/dist/tools/check-collisions.d.ts.map +1 -1
- package/dist/tools/check-collisions.js +6 -6
- package/dist/tools/clear-scene.d.ts +1 -1
- package/dist/tools/clear-scene.d.ts.map +1 -1
- package/dist/tools/clear-scene.js +3 -3
- package/dist/tools/collections.d.ts +1 -1
- package/dist/tools/collections.d.ts.map +1 -1
- package/dist/tools/collections.js +3 -2
- package/dist/tools/construction-tools.d.ts +6 -49
- package/dist/tools/construction-tools.d.ts.map +1 -1
- package/dist/tools/construction-tools.js +9 -158
- package/dist/tools/create-unit.d.ts +3 -3
- package/dist/tools/create-unit.d.ts.map +1 -1
- package/dist/tools/create-unit.js +2 -2
- package/dist/tools/errors.d.ts +5 -5
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +4 -4
- package/dist/tools/export-glb.d.ts +1 -1
- package/dist/tools/export-glb.d.ts.map +1 -1
- package/dist/tools/export-glb.js +2 -2
- package/dist/tools/export-json.d.ts +1 -1
- package/dist/tools/export-json.d.ts.map +1 -1
- package/dist/tools/export-json.js +2 -2
- package/dist/tools/get-scene.d.ts +1 -1
- package/dist/tools/get-scene.d.ts.map +1 -1
- package/dist/tools/get-scene.js +2 -2
- package/dist/tools/hosted-services.d.ts +1 -1
- package/dist/tools/hosted-services.d.ts.map +1 -1
- package/dist/tools/hosted-services.js +13 -3
- package/dist/tools/index.d.ts +4 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -13
- package/dist/tools/level-height-guard.d.ts +2 -0
- package/dist/tools/level-height-guard.d.ts.map +1 -0
- package/dist/tools/level-height-guard.js +11 -0
- package/dist/tools/list-units.d.ts +2 -2
- package/dist/tools/list-units.d.ts.map +1 -1
- package/dist/tools/list-units.js +2 -2
- package/dist/tools/live-sync.d.ts +1 -1
- package/dist/tools/live-sync.d.ts.map +1 -1
- package/dist/tools/live-sync.js +4 -4
- package/dist/tools/measure.d.ts +1 -1
- package/dist/tools/measure.d.ts.map +1 -1
- package/dist/tools/measure.js +7 -7
- package/dist/tools/node-world-point.d.ts +1 -1
- package/dist/tools/node-world-point.d.ts.map +1 -1
- package/dist/tools/normalize-schema-dialect.d.ts +1 -1
- package/dist/tools/normalize-schema-dialect.d.ts.map +1 -1
- package/dist/tools/normalize-schema-dialect.js +2 -3
- package/dist/tools/patch-guards.d.ts +6 -4
- package/dist/tools/patch-guards.d.ts.map +1 -1
- package/dist/tools/patch-guards.js +5 -2
- package/dist/tools/photo-to-scene/index.d.ts +1 -1
- package/dist/tools/photo-to-scene/index.d.ts.map +1 -1
- package/dist/tools/photo-to-scene/photo-to-scene.d.ts +3 -3
- package/dist/tools/photo-to-scene/photo-to-scene.d.ts.map +1 -1
- package/dist/tools/photo-to-scene/photo-to-scene.js +7 -7
- package/dist/tools/project-files.d.ts +4 -0
- package/dist/tools/project-files.d.ts.map +1 -0
- package/dist/tools/project-files.js +30 -0
- package/dist/tools/redo.d.ts +2 -2
- package/dist/tools/redo.d.ts.map +1 -1
- package/dist/tools/redo.js +2 -2
- package/dist/tools/retired-tools.d.ts +10 -0
- package/dist/tools/retired-tools.d.ts.map +1 -0
- package/dist/tools/retired-tools.js +22 -0
- package/dist/tools/roof-level-guard.d.ts +2 -0
- package/dist/tools/roof-level-guard.d.ts.map +1 -0
- package/dist/tools/roof-level-guard.js +22 -0
- package/dist/tools/room-tools.d.ts +47 -46
- package/dist/tools/room-tools.d.ts.map +1 -1
- package/dist/tools/room-tools.js +6 -5
- package/dist/tools/scene-lifecycle/create-project.d.ts +1 -1
- package/dist/tools/scene-lifecycle/create-project.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/create-project.js +5 -5
- package/dist/tools/scene-lifecycle/delete-scene.d.ts +1 -1
- package/dist/tools/scene-lifecycle/delete-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/delete-scene.js +6 -6
- package/dist/tools/scene-lifecycle/get-project-status.d.ts +1 -1
- package/dist/tools/scene-lifecycle/get-project-status.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/get-project-status.js +6 -6
- package/dist/tools/scene-lifecycle/index.d.ts +1 -1
- package/dist/tools/scene-lifecycle/index.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.d.ts +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.js +4 -4
- package/dist/tools/scene-lifecycle/load-scene.d.ts +2 -2
- package/dist/tools/scene-lifecycle/load-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/load-scene.js +5 -5
- package/dist/tools/scene-lifecycle/metadata.d.ts +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.d.ts +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.js +6 -6
- package/dist/tools/scene-lifecycle/save-scene.d.ts +5 -3
- package/dist/tools/scene-lifecycle/save-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/save-scene.js +80 -12
- package/dist/tools/scene-lifecycle/test-utils.d.ts +1 -1
- package/dist/tools/scene-lifecycle/test-utils.d.ts.map +1 -1
- package/dist/tools/set-unit-members.d.ts +2 -2
- package/dist/tools/set-unit-members.d.ts.map +1 -1
- package/dist/tools/set-unit-members.js +6 -6
- package/dist/tools/set-zone.d.ts +2 -2
- package/dist/tools/set-zone.d.ts.map +1 -1
- package/dist/tools/set-zone.js +30 -18
- package/dist/tools/shared-tools.d.ts +15 -5
- package/dist/tools/shared-tools.d.ts.map +1 -1
- package/dist/tools/shared-tools.js +242 -29
- package/dist/tools/structure-tools.d.ts +3 -3
- package/dist/tools/templates/create-from-template.d.ts +2 -2
- package/dist/tools/templates/create-from-template.d.ts.map +1 -1
- package/dist/tools/templates/create-from-template.js +6 -6
- package/dist/tools/templates/create-house-from-brief.d.ts +1 -1
- package/dist/tools/templates/create-house-from-brief.d.ts.map +1 -1
- package/dist/tools/templates/create-house-from-brief.js +6 -6
- package/dist/tools/templates/index.d.ts +1 -1
- package/dist/tools/templates/index.d.ts.map +1 -1
- package/dist/tools/templates/list-templates.d.ts +1 -1
- package/dist/tools/templates/list-templates.d.ts.map +1 -1
- package/dist/tools/templates/list-templates.js +2 -2
- package/dist/tools/undo.d.ts +2 -2
- package/dist/tools/undo.d.ts.map +1 -1
- package/dist/tools/undo.js +2 -2
- package/dist/tools/unit-members.d.ts.map +1 -1
- package/dist/tools/unit-members.js +6 -6
- package/dist/tools/variants/generate-variants.d.ts +6 -6
- package/dist/tools/variants/generate-variants.d.ts.map +1 -1
- package/dist/tools/variants/generate-variants.js +6 -6
- package/dist/tools/variants/index.d.ts +1 -1
- package/dist/tools/variants/index.d.ts.map +1 -1
- package/dist/tools/view-scene.d.ts +8 -2
- package/dist/tools/view-scene.d.ts.map +1 -1
- package/dist/tools/view-scene.js +17 -5
- package/dist/tools/vision/analyze-floorplan-image.d.ts +1 -1
- package/dist/tools/vision/analyze-floorplan-image.d.ts.map +1 -1
- package/dist/tools/vision/analyze-floorplan-image.js +7 -7
- package/dist/tools/vision/analyze-room-photo.d.ts +1 -1
- package/dist/tools/vision/analyze-room-photo.d.ts.map +1 -1
- package/dist/tools/vision/analyze-room-photo.js +7 -7
- package/dist/tools/vision/index.d.ts +1 -1
- package/dist/tools/vision/index.d.ts.map +1 -1
- package/dist/transports/http.d.ts +8 -2
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +9 -3
- package/dist/transports/stdio.d.ts +15 -9
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +18 -11
- package/examples/coordinate-conventions-demo.md +12 -13
- package/examples/embed-in-agent.ts +5 -6
- package/examples/generate-apartment.md +4 -4
- package/examples/photo-to-scene.md +2 -3
- package/examples/renovate-from-photos.md +3 -5
- package/package.json +13 -9
- package/dist/tools/describe-node.d.ts +0 -17
- package/dist/tools/describe-node.d.ts.map +0 -1
- package/dist/tools/describe-node.js +0 -99
- package/dist/tools/find-nodes.d.ts +0 -16
- package/dist/tools/find-nodes.d.ts.map +0 -1
- package/dist/tools/find-nodes.js +0 -204
- package/dist/tools/place-design.d.ts +0 -34
- package/dist/tools/place-design.d.ts.map +0 -1
- package/dist/tools/place-design.js +0 -91
- package/dist/tools/validate-design.d.ts +0 -136
- package/dist/tools/validate-design.d.ts.map +0 -1
- package/dist/tools/validate-design.js +0 -28
- package/dist/tools/validate-scene.d.ts +0 -19
- package/dist/tools/validate-scene.d.ts.map +0 -1
- package/dist/tools/validate-scene.js +0 -28
package/dist/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import { McpServer, ProtocolError, ProtocolErrorCode, } from '@modelcontextprotocol/server';
|
|
2
|
+
import { recordMade, } from '@pascal-app/core/agent-operations';
|
|
2
3
|
import { createSceneOperations } from './operations/index.js';
|
|
3
4
|
import { registerPrompts } from './prompts/index.js';
|
|
4
5
|
import { registerResources } from './resources/index.js';
|
|
@@ -6,46 +7,83 @@ import { registerTools } from './tools/index.js';
|
|
|
6
7
|
import { cachedCatalog } from './tools/asset-catalog.js';
|
|
7
8
|
import { registerHostedServiceTools } from './tools/hosted-services.js';
|
|
8
9
|
import { normalizeToolSchemaDialect } from './tools/normalize-schema-dialect.js';
|
|
10
|
+
import { registerProjectFileTools } from './tools/project-files.js';
|
|
11
|
+
import { answerRetiredTools } from './tools/retired-tools.js';
|
|
9
12
|
import { registerVisionTools } from './tools/vision/index.js';
|
|
10
13
|
import { version } from './version.js';
|
|
11
14
|
export function createPascalMcpServer(opts) {
|
|
12
15
|
// A client shows these before the agent's first call.
|
|
13
|
-
const server = new McpServer({ name: opts.name ?? 'pascal-mcp-server', version: opts.version ?? version },
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
const server = new McpServer({ name: opts.name ?? 'pascal-mcp-server', version: opts.version ?? version }, {
|
|
17
|
+
instructions: `Pascal builds and edits 3D buildings; the agent guide is the resource pascal://agent-guide.${opts.instructions ? `\n${opts.instructions}` : ''}`,
|
|
18
|
+
});
|
|
19
|
+
answerInvalidInputWithCode(server);
|
|
16
20
|
const operations = opts.operations ?? createSceneOperations({ bridge: opts.bridge, store: opts.store });
|
|
21
|
+
const executeTool = recordingWhatToolsMake(operations, opts.executeTool);
|
|
22
|
+
if (executeTool)
|
|
23
|
+
installToolExecutor(server, executeTool);
|
|
17
24
|
const catalog = opts.catalog ? cachedCatalog(opts.catalog) : undefined;
|
|
18
25
|
registerTools(server, operations, {
|
|
19
26
|
catalog,
|
|
20
27
|
geometryScripts: opts.geometryScripts,
|
|
21
28
|
sceneViews: opts.sceneViews,
|
|
29
|
+
assetViews: opts.assetViews,
|
|
22
30
|
});
|
|
23
31
|
registerVisionTools(server, operations);
|
|
24
32
|
if (opts.services)
|
|
25
33
|
registerHostedServiceTools(server, opts.services);
|
|
34
|
+
if (opts.files)
|
|
35
|
+
registerProjectFileTools(server, opts.files);
|
|
26
36
|
registerResources(server, operations, catalog);
|
|
27
37
|
registerPrompts(server, operations);
|
|
28
38
|
normalizeToolSchemaDialect(server);
|
|
39
|
+
answerRetiredTools(server);
|
|
29
40
|
return server;
|
|
30
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Arguments a tool's schema rejects come back with the code `invalid_input`, as every other refusal
|
|
44
|
+
* names its code and as the chat answers them: the SDK's own answer is a bare message. The SDK
|
|
45
|
+
* checks the arguments in its server's validateToolInput and turns what it throws into the tool's
|
|
46
|
+
* error text, so a JSON message carries the code; `server-invalid-input.test` fails if an SDK upgrade
|
|
47
|
+
* moves that check.
|
|
48
|
+
*/
|
|
49
|
+
function answerInvalidInputWithCode(server) {
|
|
50
|
+
const sdk = server;
|
|
51
|
+
const validate = sdk.validateToolInput.bind(server);
|
|
52
|
+
sdk.validateToolInput = async (tool, args, name) => {
|
|
53
|
+
try {
|
|
54
|
+
return await validate(tool, args, name);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!(error instanceof ProtocolError && error.code === ProtocolErrorCode.InvalidParams))
|
|
58
|
+
throw error;
|
|
59
|
+
throw new Error(JSON.stringify({
|
|
60
|
+
error: error.message,
|
|
61
|
+
code: 'invalid_input',
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Inside the host's executor, so that what a call made is in the session by the time the host
|
|
68
|
+
* saves it: every tool that writes, however it writes, leaves what it created with the agent's
|
|
69
|
+
* session, and the first call of any kind begins it.
|
|
70
|
+
*/
|
|
71
|
+
function recordingWhatToolsMake(operations, outer) {
|
|
72
|
+
const session = operations.agentSession;
|
|
73
|
+
if (!session)
|
|
74
|
+
return outer;
|
|
75
|
+
const recording = (input) => recordMade({
|
|
76
|
+
getNodes: () => operations.getNodes(),
|
|
77
|
+
readSession: () => session.read(),
|
|
78
|
+
keep: (keep) => session.keep(keep),
|
|
79
|
+
}, input.execute);
|
|
80
|
+
return outer ? (input) => outer({ ...input, execute: () => recording(input) }) : recording;
|
|
81
|
+
}
|
|
31
82
|
function installToolExecutor(server, executeTool) {
|
|
32
83
|
const registerTool = server.registerTool.bind(server);
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
return wrapRegisteredTool(registration, name, runtimeCallback, executeTool);
|
|
37
|
-
};
|
|
38
|
-
server.registerTool = wrappedRegisterTool;
|
|
39
|
-
const tool = server.tool.bind(server);
|
|
40
|
-
server.tool = ((name, ...args) => {
|
|
41
|
-
const callback = args.at(-1);
|
|
42
|
-
if (typeof callback !== 'function') {
|
|
43
|
-
return Reflect.apply(tool, undefined, [name, ...args]);
|
|
44
|
-
}
|
|
45
|
-
const runtimeCallback = callback;
|
|
46
|
-
args[args.length - 1] = wrapToolCallback(name, runtimeCallback, executeTool);
|
|
47
|
-
const registration = Reflect.apply(tool, undefined, [name, ...args]);
|
|
48
|
-
return wrapRegisteredTool(registration, name, runtimeCallback, executeTool);
|
|
84
|
+
server.registerTool = ((name, config, callback) => {
|
|
85
|
+
const registration = registerTool(name, config, wrapToolCallback(name, callback, executeTool));
|
|
86
|
+
return wrapRegisteredTool(registration, name, callback, executeTool);
|
|
49
87
|
});
|
|
50
88
|
}
|
|
51
89
|
function wrapToolCallback(name, callback, executeTool) {
|
|
@@ -77,5 +115,5 @@ function wrapRegisteredTool(registration, initialName, initialCallback, executeT
|
|
|
77
115
|
return registration;
|
|
78
116
|
}
|
|
79
117
|
function toolRequestSignal(args) {
|
|
80
|
-
return args.at(-1).signal;
|
|
118
|
+
return args.at(-1).mcpReq.signal;
|
|
81
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disk-artifact-store.d.ts","sourceRoot":"","sources":["../../src/storage/disk-artifact-store.ts"],"names":[],"mappings":"AAIA,4DAA4D;AAC5D,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"disk-artifact-store.d.ts","sourceRoot":"","sources":["../../src/storage/disk-artifact-store.ts"],"names":[],"mappings":"AAIA,4DAA4D;AAC5D,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B,YAAY,WAAW,EAAE,MAAM,EAE9B;IAED,OAAO,CAAC,IAAI;IAKN,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBxE;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAOrD;CACF"}
|
|
@@ -25,7 +25,7 @@ export declare function resolveDefaultDatabasePath(env?: NodeJS.ProcessEnv): str
|
|
|
25
25
|
* so a local editor and MCP process can safely share scenes on one machine.
|
|
26
26
|
*/
|
|
27
27
|
export declare class SqliteSceneStore implements SceneStore {
|
|
28
|
-
readonly backend:
|
|
28
|
+
readonly backend: 'sqlite';
|
|
29
29
|
readonly databasePath: string;
|
|
30
30
|
private readonly maxSceneBytes;
|
|
31
31
|
private readonly projectPlaceholders;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-scene-store.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite-scene-store.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAE1B,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAGf,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAOhB,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAgDD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAmBvF;AAkKD;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAS;IAEpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,SAAS,CAAuC;
|
|
1
|
+
{"version":3,"file":"sqlite-scene-store.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite-scene-store.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAE1B,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAGf,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAOhB,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAgDD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAmBvF;AAkKD;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAS;IAEpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,SAAS,CAAuC;IAExD,YAAY,IAAI,GAAE,uBAA4B,EAM7C;IAEK,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBtE;IAEK,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAOhE;IAEK,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAuHrD;IAEK,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQrD;IAEK,IAAI,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA+B5D;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAalF;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAoC3F;IAEK,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BzE;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAiB9F;IAED,KAAK,IAAI,IAAI,CAIZ;YAEa,QAAQ;IAiBtB,OAAO,CAAC,OAAO;YAgDD,oBAAoB;IAiBlC,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,gBAAgB;CAOzB"}
|
package/dist/storage/types.d.ts
CHANGED
|
@@ -138,15 +138,15 @@ export interface SceneStore {
|
|
|
138
138
|
listSceneEvents?(sceneId: SceneId, opts?: SceneEventListOptions): Promise<SceneEvent[]>;
|
|
139
139
|
}
|
|
140
140
|
export declare class SceneNotFoundError extends Error {
|
|
141
|
-
readonly code:
|
|
141
|
+
readonly code: 'not_found';
|
|
142
142
|
constructor(message?: string);
|
|
143
143
|
}
|
|
144
144
|
export declare class SceneVersionConflictError extends Error {
|
|
145
|
-
readonly code:
|
|
145
|
+
readonly code: 'version_conflict';
|
|
146
146
|
constructor(message?: string);
|
|
147
147
|
}
|
|
148
148
|
export declare class SceneInvalidError extends Error {
|
|
149
|
-
readonly code:
|
|
149
|
+
readonly code: 'invalid';
|
|
150
150
|
constructor(message?: string);
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
@@ -159,7 +159,7 @@ export declare class SceneWipeBlockedError extends SceneInvalidError {
|
|
|
159
159
|
constructor(message?: string);
|
|
160
160
|
}
|
|
161
161
|
export declare class SceneTooLargeError extends Error {
|
|
162
|
-
readonly code:
|
|
162
|
+
readonly code: 'too_large';
|
|
163
163
|
constructor(message?: string);
|
|
164
164
|
}
|
|
165
165
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SceneGraph } from '@pascal-app/core/clone-scene-graph';
|
|
2
2
|
export declare const template: SceneGraph;
|
|
3
3
|
export declare const metadata: {
|
|
4
|
-
readonly id:
|
|
5
|
-
readonly name:
|
|
6
|
-
readonly description:
|
|
4
|
+
readonly id: 'empty-studio';
|
|
5
|
+
readonly name: 'Empty studio';
|
|
6
|
+
readonly description: '40 m² single-room studio apartment: 4 walls, 1 living/kitchen zone, 1 window, 1 front door.';
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=empty-studio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-studio.d.ts","sourceRoot":"","sources":["../../src/templates/empty-studio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAmPpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"empty-studio.d.ts","sourceRoot":"","sources":["../../src/templates/empty-studio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAmPpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ;aACnB,EAAE,EAAE,cAAc;aAClB,IAAI,EAAE,cAAc;aACpB,WAAW,EACT,6FAA6F;CACvF,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SceneGraph } from '@pascal-app/core/clone-scene-graph';
|
|
2
2
|
export declare const template: SceneGraph;
|
|
3
3
|
export declare const metadata: {
|
|
4
|
-
readonly id:
|
|
5
|
-
readonly name:
|
|
6
|
-
readonly description:
|
|
4
|
+
readonly id: 'garden-house';
|
|
5
|
+
readonly name: 'Garden house';
|
|
6
|
+
readonly description: '12 × 8 m single-level house with a fenced back-garden zone; 4 walls, 2 doors, 4 windows, 3 privacy fences.';
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=garden-house.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garden-house.d.ts","sourceRoot":"","sources":["../../src/templates/garden-house.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAkRpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"garden-house.d.ts","sourceRoot":"","sources":["../../src/templates/garden-house.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAkRpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ;aACnB,EAAE,EAAE,cAAc;aAClB,IAAI,EAAE,cAAc;aACpB,WAAW,EACT,4GAA4G;CACtG,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAKpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAWD,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAKpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAWD,eAAO,MAAM,SAAS;aACpB,cAAc;aACd,aAAa;aACb,cAAc;CACN,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,SAAS,CAAA;AAE/C,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,UAAU,CAEzD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SceneGraph } from '@pascal-app/core/clone-scene-graph';
|
|
2
2
|
export declare const template: SceneGraph;
|
|
3
3
|
export declare const metadata: {
|
|
4
|
-
readonly id:
|
|
5
|
-
readonly name:
|
|
6
|
-
readonly description:
|
|
4
|
+
readonly id: 'two-bedroom';
|
|
5
|
+
readonly name: 'Two-bedroom apartment';
|
|
6
|
+
readonly description: '80 m² two-bedroom flat: 9 walls, 4 zones (living/kitchen, 2 bedrooms, bath), 4 doors and 5 windows.';
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=two-bedroom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-bedroom.d.ts","sourceRoot":"","sources":["../../src/templates/two-bedroom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AA2SpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"two-bedroom.d.ts","sourceRoot":"","sources":["../../src/templates/two-bedroom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AA2SpE,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAA;AAEnD,eAAO,MAAM,QAAQ;aACnB,EAAE,EAAE,aAAa;aACjB,IAAI,EAAE,uBAAuB;aAC7B,WAAW,EACT,qGAAqG;CAC/F,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import type { SceneOperations } from '../operations/index.js';
|
|
3
3
|
import { type GeometryScriptHost } from './add-object.js';
|
|
4
4
|
export declare function registerAddColumn(server: McpServer, bridge: SceneOperations, host?: GeometryScriptHost): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-column.d.ts","sourceRoot":"","sources":["../../src/tools/add-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"add-column.d.ts","sourceRoot":"","sources":["../../src/tools/add-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAW7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAmB,KAAK,kBAAkB,EAAc,MAAM,cAAc,CAAA;AAMnF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,kBAAkB,QAqD1B"}
|
package/dist/tools/add-column.js
CHANGED
|
@@ -2,6 +2,7 @@ import { isScriptedNode, scriptedObjectMeta } from '@pascal-app/core';
|
|
|
2
2
|
import { addColumn, columnScriptParams, editedScriptLanguage, } from '@pascal-app/core/agent-operations';
|
|
3
3
|
import { addColumnTool, isAgentRefusal, refuse } from '@pascal-app/core/agent-tools';
|
|
4
4
|
import { GeometryReuseFields } from '@pascal-app/core/schema';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { compileAndStore, readScript } from './add-object.js';
|
|
6
7
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS } from './annotations.js';
|
|
7
8
|
import { refusalResult, toolError } from './errors.js';
|
|
@@ -11,7 +12,7 @@ export function registerAddColumn(server, bridge, host) {
|
|
|
11
12
|
server.registerTool(addColumnTool.name, {
|
|
12
13
|
title: addColumnTool.title,
|
|
13
14
|
description: addColumnTool.description,
|
|
14
|
-
inputSchema: addColumnTool.input,
|
|
15
|
+
inputSchema: z.object(addColumnTool.input),
|
|
15
16
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
16
17
|
}, async (input) => {
|
|
17
18
|
try {
|
|
@@ -35,7 +36,7 @@ export function registerAddColumn(server, bridge, host) {
|
|
|
35
36
|
},
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
|
-
const outcome = addColumn(nodes, { ...input, compiled }, { activeLevelId: null });
|
|
39
|
+
const outcome = addColumn(nodes, { ...input, compiled }, { activeLevelId: bridge.activeLevelId?.() ?? null });
|
|
39
40
|
if (outcome.changes)
|
|
40
41
|
bridge.applyPatch(toPatches(outcome.changes));
|
|
41
42
|
const payload = {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
+
import { type AddObjectInput } from '@pascal-app/core/agent-operations';
|
|
2
3
|
import { type CompiledGeometryScript, GeometryArtifactMetadata, type GeometryScriptLanguage, type GeometryScriptParamValue } from '@pascal-app/core/schema';
|
|
3
4
|
import type { SceneOperations } from '../operations/index.js';
|
|
4
5
|
/**
|
|
@@ -7,10 +8,15 @@ import type { SceneOperations } from '../operations/index.js';
|
|
|
7
8
|
* artifacts live for the active scene.
|
|
8
9
|
*/
|
|
9
10
|
export type GeometryScriptHost = {
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
/** Recheck the host's active authorization after a long compile and before scene mutation. */
|
|
13
|
+
assertActive?(): Promise<void>;
|
|
10
14
|
compile(input: {
|
|
11
15
|
code: string;
|
|
12
16
|
language: GeometryScriptLanguage;
|
|
13
17
|
params?: Record<string, GeometryScriptParamValue>;
|
|
18
|
+
/** What the host builds it for (a room's floor, a wall's face: `floorScriptInputs`, `wallFaceScriptInputs`), kept in the host's frame. */
|
|
19
|
+
inputs?: Record<string, unknown>;
|
|
14
20
|
}): Promise<CompiledGeometryScript & {
|
|
15
21
|
glb: Uint8Array;
|
|
16
22
|
}>;
|
|
@@ -36,23 +42,33 @@ export type GeometryScriptHost = {
|
|
|
36
42
|
code: string;
|
|
37
43
|
language: GeometryScriptLanguage;
|
|
38
44
|
params?: Record<string, GeometryScriptParamValue>;
|
|
45
|
+
inputs?: Record<string, unknown>;
|
|
39
46
|
/** What the script builds, for the host to name it to the user. */
|
|
40
47
|
kind: ScriptedKind;
|
|
41
48
|
nodeId: string;
|
|
42
49
|
metadata?: GeometryArtifactMetadata;
|
|
43
50
|
}): Promise<CompiledGeometryScript>;
|
|
44
51
|
};
|
|
45
|
-
export type ScriptedKind = 'object' | 'window' | 'door' | 'column';
|
|
52
|
+
export type ScriptedKind = 'object' | 'window' | 'door' | 'column' | 'floor' | 'wall-face';
|
|
46
53
|
/** Compiles a module on the host and stores its GLB and text for the scene: the step every scripted tool shares. */
|
|
47
|
-
export declare function compileAndStore(host: GeometryScriptHost, sceneId: string, { code, language, params, }: {
|
|
54
|
+
export declare function compileAndStore(host: GeometryScriptHost, sceneId: string, { code, language, params, inputs, }: {
|
|
48
55
|
code: string;
|
|
49
56
|
language: GeometryScriptLanguage;
|
|
50
57
|
params: Record<string, GeometryScriptParamValue> | undefined;
|
|
58
|
+
inputs?: Record<string, unknown>;
|
|
51
59
|
}, kind: ScriptedKind, context?: {
|
|
52
60
|
nodeId?: string;
|
|
53
61
|
metadata?: GeometryArtifactMetadata;
|
|
54
62
|
}): Promise<CompiledGeometryScript>;
|
|
55
63
|
export declare function readScript(host: GeometryScriptHost, sceneId: string, bridge: SceneOperations, nodeId: string): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* One object's module compiled and stored by the host: a new one from its code, an edit from its
|
|
66
|
+
* code or its stored script, with the params it keeps. The step a lone add_object and each
|
|
67
|
+
* add_object of a run_batch share.
|
|
68
|
+
*/
|
|
69
|
+
export declare function compileObject(host: GeometryScriptHost, sceneId: string, bridge: SceneOperations, args: Omit<AddObjectInput, 'compiled'>): Promise<CompiledGeometryScript>;
|
|
70
|
+
/** What a batch's add_object builds with: the host's compile, on the scene open now. */
|
|
71
|
+
export declare function compileObjectOnHost(host: GeometryScriptHost | undefined, bridge: SceneOperations, args: Omit<AddObjectInput, 'compiled'>): Promise<CompiledGeometryScript>;
|
|
56
72
|
/** `add_object` on the MCP: the shared contract and operation, with the host's compile in front. */
|
|
57
73
|
export declare function registerAddObject(server: McpServer, bridge: SceneOperations, host: GeometryScriptHost | undefined): void;
|
|
58
74
|
/** `get_source` on the MCP: the object's module text, read back through the host's store. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-object.d.ts","sourceRoot":"","sources":["../../src/tools/add-object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"add-object.d.ts","sourceRoot":"","sources":["../../src/tools/add-object.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/add-object.js
CHANGED
|
@@ -1,24 +1,34 @@
|
|
|
1
1
|
import { isScriptedNode, scriptedObjectMeta } from '@pascal-app/core';
|
|
2
|
-
import { achievedChanges, addObject, authoredObject, editedScriptLanguage, editedScriptParams, readSourceResult, requireAddObjectReason, } from '@pascal-app/core/agent-operations';
|
|
3
|
-
import { addObjectTool, getSourceTool, isAgentRefusal, refuse } from '@pascal-app/core/agent-tools';
|
|
2
|
+
import { achievedChanges, addObject, authoredObject, editedScriptLanguage, editedScriptParams, furnishingRefusal, readableScript, readSourceResult, requireAddObjectReason, } from '@pascal-app/core/agent-operations';
|
|
3
|
+
import { addObjectTool, CATALOG_SOURCE, getSourceTool, isAgentRefusal, refuse, } from '@pascal-app/core/agent-tools';
|
|
4
4
|
import { GEOMETRY_SCRIPT_MIME_TYPES, GeometryArtifactMetadata, GeometryReuseFields, generateId, } from '@pascal-app/core/schema';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS, READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
|
|
6
7
|
import { refusalResult, toolError } from './errors.js';
|
|
7
8
|
import { persistencePayload, publishLiveSceneSnapshot } from './live-sync.js';
|
|
8
|
-
import { toPatches } from './shared-tools.js';
|
|
9
|
+
import { briefInForce, toPatches } from './shared-tools.js';
|
|
10
|
+
/** The kind an artifact records; a room's floor finish and a wall face's are none of the node kinds. */
|
|
11
|
+
const ARTIFACT_KIND = {
|
|
12
|
+
object: 'item',
|
|
13
|
+
window: 'window',
|
|
14
|
+
door: 'door',
|
|
15
|
+
column: 'column',
|
|
16
|
+
floor: undefined,
|
|
17
|
+
'wall-face': undefined,
|
|
18
|
+
};
|
|
9
19
|
/** Compiles a module on the host and stores its GLB and text for the scene: the step every scripted tool shares. */
|
|
10
|
-
export async function compileAndStore(host, sceneId, { code, language, params, }, kind, context = {}) {
|
|
11
|
-
const nodeId = context.nodeId ?? generateId(kind
|
|
20
|
+
export async function compileAndStore(host, sceneId, { code, language, params, inputs, }, kind, context = {}) {
|
|
21
|
+
const nodeId = context.nodeId ?? generateId(ARTIFACT_KIND[kind] ?? 'item');
|
|
12
22
|
const metadata = GeometryArtifactMetadata.parse({
|
|
13
23
|
...context.metadata,
|
|
14
|
-
kind: kind
|
|
24
|
+
kind: ARTIFACT_KIND[kind],
|
|
15
25
|
});
|
|
16
26
|
if (host.build)
|
|
17
27
|
return {
|
|
18
|
-
...(await host.build({ sceneId, code, language, params, kind, nodeId, metadata })),
|
|
28
|
+
...(await host.build({ sceneId, code, language, params, inputs, kind, nodeId, metadata })),
|
|
19
29
|
nodeId,
|
|
20
30
|
};
|
|
21
|
-
const { glb, ...compiled } = await host.compile({ code, language, params });
|
|
31
|
+
const { glb, ...compiled } = await host.compile({ code, language, params, inputs });
|
|
22
32
|
metadata.mount = compiled.mount;
|
|
23
33
|
const [sha256] = await Promise.all([
|
|
24
34
|
host.storeArtifact({
|
|
@@ -40,21 +50,58 @@ export async function compileAndStore(host, sceneId, { code, language, params, }
|
|
|
40
50
|
]);
|
|
41
51
|
return { ...compiled, sha256, nodeId };
|
|
42
52
|
}
|
|
43
|
-
|
|
44
|
-
const node = authoredObject(bridge.getNodes(), nodeId);
|
|
53
|
+
async function scriptText(host, sceneId, node) {
|
|
45
54
|
const bytes = await host.readArtifact({ sceneId, sha256: node.source.script });
|
|
46
55
|
if (!bytes)
|
|
47
|
-
throw new Error(`The script of ${
|
|
56
|
+
throw new Error(`The script of ${node.id} could not be read`);
|
|
48
57
|
return new TextDecoder().decode(bytes);
|
|
49
58
|
}
|
|
59
|
+
export function readScript(host, sceneId, bridge, nodeId) {
|
|
60
|
+
return scriptText(host, sceneId, authoredObject(bridge.getNodes(), nodeId));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* One object's module compiled and stored by the host: a new one from its code, an edit from its
|
|
64
|
+
* code or its stored script, with the params it keeps. The step a lone add_object and each
|
|
65
|
+
* add_object of a run_batch share.
|
|
66
|
+
*/
|
|
67
|
+
export async function compileObject(host, sceneId, bridge, args) {
|
|
68
|
+
const code = args.code ??
|
|
69
|
+
(args.nodeId ? await readScript(host, sceneId, bridge, args.nodeId) : refuseMissingCode());
|
|
70
|
+
const nodes = bridge.getNodes();
|
|
71
|
+
const previous = args.nodeId ? nodes[args.nodeId] : undefined;
|
|
72
|
+
const language = editedScriptLanguage(previous, args);
|
|
73
|
+
const params = editedScriptParams(previous, args.params);
|
|
74
|
+
return compileAndStore(host, sceneId, { code, language, params }, 'object', {
|
|
75
|
+
nodeId: args.nodeId,
|
|
76
|
+
metadata: {
|
|
77
|
+
...(isScriptedNode(previous) ? scriptedObjectMeta(previous) : {}),
|
|
78
|
+
...GeometryReuseFields.parse(args),
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** What a batch's add_object builds with: the host's compile, on the scene open now. */
|
|
83
|
+
export async function compileObjectOnHost(host, bridge, args) {
|
|
84
|
+
if (!host)
|
|
85
|
+
refuse('scripts_unavailable', 'This Pascal server cannot run geometry scripts.');
|
|
86
|
+
const scene = bridge.getActiveScene();
|
|
87
|
+
if (!scene)
|
|
88
|
+
refuse('no_active_scene', 'Open or save a scene first: authored objects are stored with a scene.');
|
|
89
|
+
return compileObject(host, scene.id, bridge, args);
|
|
90
|
+
}
|
|
50
91
|
/** `add_object` on the MCP: the shared contract and operation, with the host's compile in front. */
|
|
51
92
|
export function registerAddObject(server, bridge, host) {
|
|
52
93
|
server.registerTool(addObjectTool.name, {
|
|
53
94
|
title: addObjectTool.title,
|
|
54
95
|
description: addObjectTool.description,
|
|
55
|
-
inputSchema: addObjectTool.input,
|
|
96
|
+
inputSchema: z.object(addObjectTool.input),
|
|
56
97
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
57
98
|
}, async (input) => {
|
|
99
|
+
const brief = briefInForce(bridge);
|
|
100
|
+
if (brief !== undefined) {
|
|
101
|
+
const refusal = furnishingRefusal(addObjectTool.name, input, brief);
|
|
102
|
+
if (refusal)
|
|
103
|
+
return refusalResult(refusal);
|
|
104
|
+
}
|
|
58
105
|
if (!host) {
|
|
59
106
|
return toolError('This Pascal server cannot run geometry scripts.', {
|
|
60
107
|
code: 'scripts_unavailable',
|
|
@@ -70,35 +117,19 @@ export function registerAddObject(server, bridge, host) {
|
|
|
70
117
|
let compiled;
|
|
71
118
|
try {
|
|
72
119
|
requireAddObjectReason(args);
|
|
73
|
-
|
|
74
|
-
(args.nodeId
|
|
75
|
-
? await readScript(host, scene.id, bridge, args.nodeId)
|
|
76
|
-
: refuseMissingCode());
|
|
77
|
-
const nodes = bridge.getNodes();
|
|
78
|
-
const previous = args.nodeId ? nodes[args.nodeId] : undefined;
|
|
79
|
-
const language = editedScriptLanguage(previous, args);
|
|
80
|
-
const params = editedScriptParams(previous, args.params);
|
|
81
|
-
compiled = await compileAndStore(host, scene.id, { code, language, params }, 'object', {
|
|
82
|
-
nodeId: args.nodeId,
|
|
83
|
-
metadata: {
|
|
84
|
-
...(isScriptedNode(previous) ? scriptedObjectMeta(previous) : {}),
|
|
85
|
-
...GeometryReuseFields.parse(args),
|
|
86
|
-
},
|
|
87
|
-
});
|
|
120
|
+
compiled = await compileObject(host, scene.id, bridge, args);
|
|
88
121
|
}
|
|
89
122
|
catch (error) {
|
|
90
123
|
if (isAgentRefusal(error))
|
|
91
124
|
return refusalResult(error);
|
|
92
|
-
return toolError(error instanceof Error ? error.message : String(error)
|
|
93
|
-
code: 'script_failed',
|
|
94
|
-
});
|
|
125
|
+
return toolError(`${error instanceof Error ? error.message : String(error)} ${CATALOG_SOURCE}`, { code: 'script_failed' });
|
|
95
126
|
}
|
|
96
127
|
// A copy: the hosted bridge writes its map in place, and a "before" that grows with the call
|
|
97
128
|
// reads every creation as unchanged.
|
|
98
129
|
const before = { ...bridge.getNodes() };
|
|
99
130
|
let outcome;
|
|
100
131
|
try {
|
|
101
|
-
outcome = addObject(before, { ...args, compiled }, { activeLevelId: null });
|
|
132
|
+
outcome = addObject(before, { ...args, compiled }, { activeLevelId: bridge.activeLevelId?.() ?? null });
|
|
102
133
|
}
|
|
103
134
|
catch (error) {
|
|
104
135
|
return refusalResult(error);
|
|
@@ -126,9 +157,9 @@ export function registerGetSource(server, bridge, host) {
|
|
|
126
157
|
server.registerTool(getSourceTool.name, {
|
|
127
158
|
title: getSourceTool.title,
|
|
128
159
|
description: getSourceTool.description,
|
|
129
|
-
inputSchema: getSourceTool.input,
|
|
160
|
+
inputSchema: z.object(getSourceTool.input),
|
|
130
161
|
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
131
|
-
}, async ({ nodeId }) => {
|
|
162
|
+
}, async ({ nodeId, face }) => {
|
|
132
163
|
if (!host) {
|
|
133
164
|
return toolError('This Pascal server cannot read geometry scripts.', {
|
|
134
165
|
code: 'scripts_unavailable',
|
|
@@ -138,8 +169,8 @@ export function registerGetSource(server, bridge, host) {
|
|
|
138
169
|
if (!scene)
|
|
139
170
|
return toolError('Open a scene first.', { code: 'no_active_scene' });
|
|
140
171
|
try {
|
|
141
|
-
const node =
|
|
142
|
-
const payload = readSourceResult(node, await
|
|
172
|
+
const node = readableScript(bridge.getNodes(), nodeId, face);
|
|
173
|
+
const payload = readSourceResult(node, await scriptText(host, scene.id, node));
|
|
143
174
|
return {
|
|
144
175
|
content: [{ type: 'text', text: JSON.stringify(payload) }],
|
|
145
176
|
structuredContent: payload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/tools/annotations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/tools/annotations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B;aACrC,YAAY;aACZ,eAAe;aACf,cAAc;aACd,aAAa;CACL,CAAA;AAEV,eAAO,MAAM,qCAAqC;aAChD,YAAY;aACZ,eAAe;aACf,cAAc;aACd,aAAa;CACL,CAAA;AAEV,eAAO,MAAM,yBAAyB;aACpC,YAAY;aACZ,eAAe;aACf,aAAa;CACL,CAAA;AAEV,eAAO,MAAM,4BAA4B;aACvC,YAAY;aACZ,eAAe;aACf,aAAa;CACL,CAAA;AAEV,eAAO,MAAM,uCAAuC;aAClD,YAAY;aACZ,eAAe;aACf,aAAa;CACL,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../operations/index.js';
|
|
4
4
|
import './honest-patch-guard.js';
|
|
5
|
+
import './level-height-guard.js';
|
|
6
|
+
import './roof-level-guard.js';
|
|
5
7
|
export declare const applyPatchInput: {
|
|
6
8
|
patches: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
7
9
|
op: z.ZodLiteral<"create">;
|
|
@@ -22,14 +24,16 @@ export declare const applyPatchOutput: {
|
|
|
22
24
|
unsaved: z.ZodOptional<z.ZodString>;
|
|
23
25
|
persistence: z.ZodOptional<z.ZodObject<{
|
|
24
26
|
status: z.ZodEnum<{
|
|
25
|
-
unbound: "unbound";
|
|
26
27
|
events_unsupported: "events_unsupported";
|
|
28
|
+
unbound: "unbound";
|
|
27
29
|
}>;
|
|
28
30
|
warning: z.ZodString;
|
|
29
31
|
}, z.core.$strip>>;
|
|
30
32
|
appliedOps: z.ZodNumber;
|
|
31
33
|
deletedIds: z.ZodArray<z.ZodString>;
|
|
32
34
|
createdIds: z.ZodArray<z.ZodString>;
|
|
35
|
+
/** What the server changed in the patch before writing it, one line each. */
|
|
36
|
+
notes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
37
|
};
|
|
34
38
|
export declare function registerApplyPatch(server: McpServer, bridge: SceneOperations): void;
|
|
35
39
|
//# sourceMappingURL=apply-patch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAG7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,OAAO,sBAAsB,CAAA;AAC7B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,oBAAoB,CAAA;AAK3B,eAAO,MAAM,eAAe;IAC1B,OAAO;;;;;;;;;;;;;CACR,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;IAI3B,6EAA6E;;CAG9E,CAAA;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAgFnF"}
|