@vcad/mcp 0.10.0-main.130 → 0.10.0-main.131

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 (3) hide show
  1. package/README.md +1 -1
  2. package/index.mjs +181 -4
  3. package/package.json +3 -3
package/README.md CHANGED
@@ -6,4 +6,4 @@ vcad's MCP server as a self-contained bundle (server + BRep kernel WASM).
6
6
  { "mcpServers": { "vcad": { "command": "npx", "args": ["-y", "@vcad/mcp"] } } }
7
7
  ```
8
8
 
9
- Built from 86e01dfe3474a2c82f179c81edd92f1efa97340b at 2026-10-21T16:21:11.937Z. Source: https://github.com/ecto/vcad
9
+ Built from 5ba01b5a98082b32c94a94415030e2581bf3288e at 2026-10-21T16:56:57.309Z. Source: https://github.com/ecto/vcad
package/index.mjs CHANGED
@@ -10867,6 +10867,173 @@ var init_delta = __esm({
10867
10867
  }
10868
10868
  });
10869
10869
 
10870
+ // ../engine/dist/engine-host.js
10871
+ function handleEngineRequest(host, req) {
10872
+ try {
10873
+ let envelope;
10874
+ let bytes;
10875
+ switch (req.op) {
10876
+ case "init":
10877
+ host.engine?.free();
10878
+ host.engine = req.replica !== void 0 && host.Engine.withReplica ? host.Engine.withReplica(req.replica) : new host.Engine();
10879
+ envelope = host.engine.stateEnvelope();
10880
+ break;
10881
+ case "load":
10882
+ host.engine?.free();
10883
+ host.engine = host.Engine.load(req.bytes);
10884
+ envelope = host.engine.stateEnvelope();
10885
+ break;
10886
+ default: {
10887
+ const engine2 = host.engine;
10888
+ if (!engine2)
10889
+ return { ok: false, message: "engine not initialized" };
10890
+ if (req.op === "apply")
10891
+ envelope = engine2.applyDelta(JSON.stringify(req.command));
10892
+ else if (req.op === "applyTool")
10893
+ envelope = engine2.applyToolDelta(req.tool, JSON.stringify(req.args));
10894
+ else if (req.op === "state")
10895
+ envelope = engine2.stateEnvelope();
10896
+ else
10897
+ bytes = engine2.save();
10898
+ }
10899
+ }
10900
+ const engine = host.engine;
10901
+ return {
10902
+ ok: true,
10903
+ envelope,
10904
+ bytes,
10905
+ hash: engine.stateHash(),
10906
+ canUndo: engine.can_undo(),
10907
+ canRedo: engine.can_redo()
10908
+ };
10909
+ } catch (e) {
10910
+ return { ok: false, message: e instanceof Error ? e.message : String(e) };
10911
+ }
10912
+ }
10913
+ function inProcessTransport(Engine2) {
10914
+ const host = { Engine: Engine2, engine: null };
10915
+ return {
10916
+ request: async (req) => handleEngineRequest(host, req),
10917
+ dispose: () => {
10918
+ host.engine?.free();
10919
+ host.engine = null;
10920
+ }
10921
+ };
10922
+ }
10923
+ function workerTransport(worker) {
10924
+ let next = 0;
10925
+ const pending2 = /* @__PURE__ */ new Map();
10926
+ worker.addEventListener("message", (e) => {
10927
+ const { id, response } = e.data;
10928
+ pending2.get(id)?.(response);
10929
+ pending2.delete(id);
10930
+ });
10931
+ return {
10932
+ request: (req) => new Promise((resolve7) => {
10933
+ const id = next++;
10934
+ pending2.set(id, resolve7);
10935
+ worker.postMessage({ id, req });
10936
+ }),
10937
+ dispose: () => worker.terminate()
10938
+ };
10939
+ }
10940
+ var EngineHostError, DocumentEngineClient;
10941
+ var init_engine_host = __esm({
10942
+ "../engine/dist/engine-host.js"() {
10943
+ "use strict";
10944
+ init_delta();
10945
+ EngineHostError = class extends Error {
10946
+ constructor(message) {
10947
+ super(message);
10948
+ this.name = "EngineHostError";
10949
+ }
10950
+ };
10951
+ DocumentEngineClient = class {
10952
+ transport;
10953
+ view = null;
10954
+ queue = Promise.resolve();
10955
+ flags = { hash: "", canUndo: false, canRedo: false };
10956
+ constructor(transport) {
10957
+ this.transport = transport;
10958
+ }
10959
+ /** The current view (null before `init`/`load`). */
10960
+ get state() {
10961
+ return this.view;
10962
+ }
10963
+ get stateHash() {
10964
+ return this.flags.hash;
10965
+ }
10966
+ get canUndo() {
10967
+ return this.flags.canUndo;
10968
+ }
10969
+ get canRedo() {
10970
+ return this.flags.canRedo;
10971
+ }
10972
+ /** Start an empty document. */
10973
+ init(replica) {
10974
+ return this.full({ op: "init", replica });
10975
+ }
10976
+ /** Restore a `save()` snapshot. */
10977
+ load(bytes) {
10978
+ return this.full({ op: "load", bytes });
10979
+ }
10980
+ /** Re-read the whole state (resynchronizes the view). */
10981
+ refresh() {
10982
+ return this.full({ op: "state" });
10983
+ }
10984
+ /** Apply a command; rejects with `EngineRefusal` when the engine refuses. */
10985
+ apply(command) {
10986
+ return this.delta({ op: "apply", command });
10987
+ }
10988
+ /** Lower and apply an AI tool call. */
10989
+ applyTool(tool, args) {
10990
+ return this.delta({ op: "applyTool", tool, args });
10991
+ }
10992
+ /** Snapshot the engine (document + history). */
10993
+ save() {
10994
+ return this.enqueue(async () => {
10995
+ const r = this.check(await this.transport.request({ op: "save" }));
10996
+ return r.bytes ?? new Uint8Array();
10997
+ });
10998
+ }
10999
+ dispose() {
11000
+ this.transport.dispose();
11001
+ this.view = null;
11002
+ }
11003
+ full(req) {
11004
+ return this.enqueue(async () => {
11005
+ const r = this.check(await this.transport.request(req));
11006
+ this.view = stateFromEnvelope(r.envelope);
11007
+ return this.view;
11008
+ });
11009
+ }
11010
+ delta(req) {
11011
+ return this.enqueue(async () => {
11012
+ const base = this.view;
11013
+ if (!base)
11014
+ throw new EngineHostError("engine not initialized");
11015
+ const r = this.check(await this.transport.request(req));
11016
+ const delta = parseDeltaEnvelope(r.envelope);
11017
+ const { state, changes } = applyEngineDelta(base, delta);
11018
+ this.view = state;
11019
+ return { state, changes, createdFeatureId: delta.createdFeatureId, warnings: delta.warnings };
11020
+ });
11021
+ }
11022
+ check(r) {
11023
+ if (!r.ok)
11024
+ throw new EngineHostError(r.message);
11025
+ this.flags = { hash: r.hash, canUndo: r.canUndo, canRedo: r.canRedo };
11026
+ return r;
11027
+ }
11028
+ enqueue(f) {
11029
+ const run = this.queue.then(f, f);
11030
+ this.queue = run.catch(() => void 0);
11031
+ return run;
11032
+ }
11033
+ };
11034
+ }
11035
+ });
11036
+
10870
11037
  // ../engine/dist/sequence.js
10871
11038
  function requireWasm2() {
10872
11039
  const mod = getKernelWasmSync();
@@ -12023,7 +12190,9 @@ __export(dist_exports, {
12023
12190
  DEFAULT_NESTING_PARAMS: () => DEFAULT_NESTING_PARAMS,
12024
12191
  DEFAULT_SHOP_PROFILE: () => DEFAULT_SHOP_PROFILE,
12025
12192
  DependencyGraph: () => DependencyGraph,
12193
+ DocumentEngineClient: () => DocumentEngineClient,
12026
12194
  Engine: () => Engine,
12195
+ EngineHostError: () => EngineHostError,
12027
12196
  EngineRefusal: () => EngineRefusal,
12028
12197
  ExpressionEvalError: () => EvalError,
12029
12198
  ExpressionParseError: () => ParseError,
@@ -12055,6 +12224,7 @@ __export(dist_exports, {
12055
12224
  computeRatsnest: () => computeRatsnest,
12056
12225
  connectorsFromPcb: () => connectorsFromPcb,
12057
12226
  createCircuitSim: () => createCircuitSim,
12227
+ createEngineWorker: () => createEngineWorker,
12058
12228
  critiqueRoute: () => critiqueRoute,
12059
12229
  decimateMeshGpu: () => decimateMeshGpu2,
12060
12230
  defaultParamsFor: () => defaultParamsFor,
@@ -12081,8 +12251,10 @@ __export(dist_exports, {
12081
12251
  getKernelWasmSync: () => getKernelWasmSync,
12082
12252
  getPcbDfmPack: () => getPcbDfmPack,
12083
12253
  getRayTracer: () => getRayTracer,
12254
+ handleEngineRequest: () => handleEngineRequest,
12084
12255
  hashCsgOp: () => hashCsgOp,
12085
12256
  homogenizeMaterial: () => homogenizeMaterial,
12257
+ inProcessTransport: () => inProcessTransport,
12086
12258
  initializeGpu: () => initializeGpu,
12087
12259
  initializeRayTracer: () => initializeRayTracer,
12088
12260
  inspectMolecule: () => inspectMolecule,
@@ -12150,8 +12322,12 @@ __export(dist_exports, {
12150
12322
  tryRunDrc: () => tryRunDrc,
12151
12323
  verifyReceipt: () => verifyReceipt,
12152
12324
  verifySubstitution: () => verifySubstitution,
12325
+ workerTransport: () => workerTransport,
12153
12326
  writeXyz: () => writeXyz
12154
12327
  });
12328
+ function createEngineWorker() {
12329
+ return new Worker(new URL("./engine-worker.js", import.meta.url), { type: "module" });
12330
+ }
12155
12331
  var SCENE_CACHE_MAX, Engine;
12156
12332
  var init_dist = __esm({
12157
12333
  "../engine/dist/index.js"() {
@@ -12168,6 +12344,7 @@ var init_dist = __esm({
12168
12344
  init_diff();
12169
12345
  init_solid_cache();
12170
12346
  init_delta();
12347
+ init_engine_host();
12171
12348
  init_mesh_cache();
12172
12349
  init_dependency_graph();
12173
12350
  init_evaluate();
@@ -86876,8 +87053,8 @@ var init_server3 = __esm({
86876
87053
  init_order_feed();
86877
87054
  init_animate();
86878
87055
  PKG_VERSION = (() => {
86879
- if ("0.10.0-main.130") {
86880
- return "0.10.0-main.130";
87056
+ if ("0.10.0-main.131") {
87057
+ return "0.10.0-main.131";
86881
87058
  }
86882
87059
  try {
86883
87060
  const req = createRequire2(import.meta.url);
@@ -86886,8 +87063,8 @@ var init_server3 = __esm({
86886
87063
  return "0.0.0";
86887
87064
  }
86888
87065
  })();
86889
- BUILD_SHA = "86e01dfe3474a2c82f179c81edd92f1efa97340b";
86890
- BUILD_TIME = "2026-10-21T16:21:11.937Z";
87066
+ BUILD_SHA = "5ba01b5a98082b32c94a94415030e2581bf3288e";
87067
+ BUILD_TIME = "2026-10-21T16:56:57.309Z";
86891
87068
  SHORT_SHA = BUILD_SHA === "unknown" ? "unknown" : BUILD_SHA.slice(0, 7);
86892
87069
  VERSION_WITH_BUILD = SHORT_SHA === "unknown" ? PKG_VERSION : `${PKG_VERSION}+${SHORT_SHA}`;
86893
87070
  INSTANCE_ID = randomUUID7().slice(0, 8);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcad/mcp",
3
- "version": "0.10.0-main.130",
3
+ "version": "0.10.0-main.131",
4
4
  "description": "vcad MCP server — parametric CAD + PCB design tools for AI agents (self-contained: bundled server + kernel WASM)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "homepage": "https://vcad.io",
21
21
  "vcadBuild": {
22
- "sha": "86e01dfe3474a2c82f179c81edd92f1efa97340b",
23
- "builtAt": "2026-10-21T16:21:11.937Z"
22
+ "sha": "5ba01b5a98082b32c94a94415030e2581bf3288e",
23
+ "builtAt": "2026-10-21T16:56:57.309Z"
24
24
  }
25
25
  }