@womp/spark-agent 4.1.2 → 4.2.1

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.
@@ -34,7 +34,8 @@ export declare const LightTypeValue: {
34
34
  readonly Sphere: 1;
35
35
  readonly Distant: 2;
36
36
  };
37
- type Color3 = {
37
+ /** A color in the engine's 0-255 domain per channel, not 0-1. */
38
+ type Color255 = {
38
39
  r: number;
39
40
  g: number;
40
41
  b: number;
@@ -154,8 +155,8 @@ export declare function createWompSceneApi(context: WompSceneApiContext): {
154
155
  nodeSetBlend: (id: number, blend: number) => void;
155
156
  nodeGetRound: (id: number) => number;
156
157
  nodeSetRound: (id: number, round: number) => void;
157
- nodeGetColor: (id: number) => Color3;
158
- nodeSetColor: (id: number, color: Color3 | Vec3) => void;
158
+ nodeGetColor: (id: number) => Color255;
159
+ nodeSetColor: (id: number, rgb255: Color255 | Vec3) => void;
159
160
  nodeGetMaterialId: (id: number) => number | null;
160
161
  nodeSetMaterialId: (id: number, materialId: number) => void;
161
162
  nodeGetResolution: (id: number) => number;
@@ -225,12 +226,12 @@ export declare function createWompSceneApi(context: WompSceneApiContext): {
225
226
  materialSetName: (id: number, name: string) => void;
226
227
  materialGetTier: (id: number) => number;
227
228
  materialSetTier: (id: number, tier: number) => void;
228
- materialGetColor: (id: number) => Color3;
229
- materialSetColor: (id: number, color: Color3) => void;
230
- materialGetSecondaryColor: (id: number) => Color3;
231
- materialSetSecondaryColor: (id: number, color: Color3) => void;
232
- materialGetSubsurfaceColor: (id: number) => Color3;
233
- materialSetSubsurfaceColor: (id: number, color: Color3) => void;
229
+ materialGetColor: (id: number) => Color255;
230
+ materialSetColor: (id: number, rgb255: Color255) => void;
231
+ materialGetSecondaryColor: (id: number) => Color255;
232
+ materialSetSecondaryColor: (id: number, rgb255: Color255) => void;
233
+ materialGetSubsurfaceColor: (id: number) => Color255;
234
+ materialSetSubsurfaceColor: (id: number, rgb255: Color255) => void;
234
235
  materialGetRoughness: (id: number) => number;
235
236
  materialSetRoughness: (id: number, value: number) => void;
236
237
  materialGetMetalness: (id: number) => number;
@@ -285,7 +286,7 @@ export declare function createWompSceneApi(context: WompSceneApiContext): {
285
286
  setHdrName: (name: string) => void;
286
287
  setHdrMultiplier: (multiplier: number) => void;
287
288
  setHdrOrientation: (orientation: Vec2) => void;
288
- setBackgroundColor: (color: {
289
+ setBackgroundColor: (rgb255: {
289
290
  r: number;
290
291
  g: number;
291
292
  b: number;
@@ -1,6 +1,7 @@
1
1
  import { xyzRotationFromMatrix, MAX_BLEND_RADIUS_MM, MAX_MIRROR_BLEND_RADIUS_MM } from "@womp/kakapo-sdk";
2
2
  import { metadataObject, readMaterialMetadata, removeMaterialMetadata, shiftCurvePointMetadata, writeMaterialMetadata, } from "./scene-metadata.js";
3
3
  import { createSceneEnvironment } from "./scene-environment.js";
4
+ import { assertColor255 } from "./color.js";
4
5
  import { convertRotationBasis, sceneUnitMultiplier, fromEngineDimensions, fromEngineMirrorRotation, fromEnginePosition, toEngineDimensions, toEngineMirrorRotation, toEnginePosition, } from "./coordinates.js";
5
6
  export const NodeType = {
6
7
  Primitive: 0,
@@ -100,13 +101,14 @@ function color255(value) {
100
101
  b: Math.round(value.z * 255),
101
102
  };
102
103
  }
104
+ /** 0-255 per channel, refusing a 0-1 color rather than rounding it to black (./color.ts). */
103
105
  function color1(value) {
104
106
  const input = value;
105
- return {
106
- x: clamp(finite(input.r ?? input.x, "color.r"), 0, 255) / 255,
107
- y: clamp(finite(input.g ?? input.y, "color.g"), 0, 255) / 255,
108
- z: clamp(finite(input.b ?? input.z, "color.b"), 0, 255) / 255,
109
- };
107
+ const r = finite(input.r ?? input.x, "color.r");
108
+ const g = finite(input.g ?? input.y, "color.g");
109
+ const b = finite(input.b ?? input.z, "color.b");
110
+ assertColor255([r, g, b]);
111
+ return { x: clamp(r, 0, 255) / 255, y: clamp(g, 0, 255) / 255, z: clamp(b, 0, 255) / 255 };
110
112
  }
111
113
  function runtimeEnum(values) {
112
114
  const names = {};
@@ -677,7 +679,7 @@ export function createWompSceneApi(context) {
677
679
  const node = requireNode(id);
678
680
  return color255(node.kind === "primitive" || node.kind === "light" ? node.color : { x: 0, y: 0, z: 0 });
679
681
  },
680
- nodeSetColor: (id, color) => update(id, { color: color1(color) }),
682
+ nodeSetColor: (id, rgb255) => update(id, { color: color1(rgb255) }),
681
683
  nodeGetMaterialId: (id) => {
682
684
  const node = requireNode(id);
683
685
  return "materialId" in node ? node.materialId : null;
@@ -919,11 +921,11 @@ export function createWompSceneApi(context) {
919
921
  writeMaterialMetadata(scene, id, { tier: value });
920
922
  },
921
923
  materialGetColor: (id) => color255(material(id).data.color),
922
- materialSetColor: (id, color) => writeMaterial(id, { color: color1(color) }),
924
+ materialSetColor: (id, rgb255) => writeMaterial(id, { color: color1(rgb255) }),
923
925
  materialGetSecondaryColor: (id) => color255(material(id).data.secondaryColor),
924
- materialSetSecondaryColor: (id, color) => writeMaterial(id, { secondaryColor: color1(color) }),
926
+ materialSetSecondaryColor: (id, rgb255) => writeMaterial(id, { secondaryColor: color1(rgb255) }),
925
927
  materialGetSubsurfaceColor: (id) => color255(material(id).data.subsurface),
926
- materialSetSubsurfaceColor: (id, color) => writeMaterial(id, { subsurface: color1(color) }),
928
+ materialSetSubsurfaceColor: (id, rgb255) => writeMaterial(id, { subsurface: color1(rgb255) }),
927
929
  materialGetRoughness: (id) => material(id).data.roughness,
928
930
  materialSetRoughness: (id, value) => writeMaterial(id, { roughness: clamp(finite(value, "roughness"), 0, 1) }),
929
931
  materialGetMetalness: (id) => material(id).data.metalness,
package/package.json CHANGED
@@ -1,139 +1,139 @@
1
- {
2
- "name": "@womp/spark-agent",
3
- "version": "4.1.2",
4
- "description": "Portable skills-based AI agent with local and durable chat transports for Womp",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "bin": {
9
- "spark-agent": "dist/cli.js",
10
- "simple-bench": "dist/simple-bench-cli.js",
11
- "agent-run": "dist/agent-run-cli.js"
12
- },
13
- "exports": {
14
- "./browser": {
15
- "types": "./dist/browser.d.ts",
16
- "import": "./dist/browser.js",
17
- "default": "./dist/browser.js"
18
- },
19
- "./capabilities": {
20
- "types": "./dist/capabilities.d.ts",
21
- "import": "./dist/capabilities.js",
22
- "default": "./dist/capabilities.js"
23
- },
24
- "./kakapo": {
25
- "types": "./dist/kakapo.d.ts",
26
- "import": "./dist/kakapo.js",
27
- "default": "./dist/kakapo.js"
28
- },
29
- "./geometry": {
30
- "types": "./dist/geometry.d.ts",
31
- "import": "./dist/geometry.js",
32
- "default": "./dist/geometry.js"
33
- },
34
- "./openscad": {
35
- "types": "./dist/openscad.d.ts",
36
- "import": "./dist/openscad.js",
37
- "default": "./dist/openscad.js"
38
- },
39
- "./quickjs": {
40
- "types": "./dist/quickjs-executor.d.ts",
41
- "import": "./dist/quickjs-executor.js",
42
- "default": "./dist/quickjs-executor.js"
43
- },
44
- ".": {
45
- "types": "./dist/index.d.ts",
46
- "import": "./dist/index.js",
47
- "default": "./dist/index.js"
48
- },
49
- "./ui": {
50
- "types": "./dist/ui.d.ts",
51
- "import": "./dist/ui.js",
52
- "default": "./dist/ui.js"
53
- },
54
- "./client": {
55
- "types": "./dist/client.d.ts",
56
- "import": "./dist/client.js",
57
- "default": "./dist/client.js"
58
- },
59
- "./server": {
60
- "types": "./dist/server/index.d.ts",
61
- "import": "./dist/server/index.js",
62
- "default": "./dist/server/index.js"
63
- },
64
- "./express": {
65
- "types": "./dist/server/express.d.ts",
66
- "import": "./dist/server/express.js",
67
- "default": "./dist/server/express.js"
68
- },
69
- "./package.json": "./package.json"
70
- },
71
- "files": [
72
- "dist/**/*.js",
73
- "dist/**/*.d.ts",
74
- "dist/server/fixtures/**/*.json",
75
- "dist/geometry/schemas/**/*.json",
76
- "README.md"
77
- ],
78
- "sideEffects": false,
79
- "engines": {
80
- "node": ">=22.13"
81
- },
82
- "repository": {
83
- "type": "git",
84
- "url": "git+https://github.com/wompxyz/spark-agent.git"
85
- },
86
- "publishConfig": {
87
- "access": "public"
88
- },
89
- "license": "MIT",
90
- "scripts": {
91
- "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
92
- "build": "yarn clean && node scripts/generate-skill-declarations.mjs && tsc -p tsconfig.json && node scripts/copy-fixtures.mjs",
93
- "typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p web/tsconfig.json",
94
- "lint": "yarn typecheck",
95
- "dev": "yarn build && concurrently --kill-others \"yarn dev:server\" \"yarn dev:web\"",
96
- "dev:server": "tsx src/cli.ts",
97
- "simple-bench": "tsx src/simple-bench-cli.ts",
98
- "agent-run": "tsx src/agent-run-cli.ts",
99
- "dev:demo-account": "yarn build && concurrently --kill-others \"yarn dev:server --profile demo-account\" \"yarn dev:web\"",
100
- "dev:web": "vite --config web/vite.config.ts",
101
- "start": "node dist/cli.js",
102
- "web:build": "yarn build && tsc --noEmit -p web/tsconfig.json && vite build --config web/vite.config.ts",
103
- "test": "yarn build && tsx --tsconfig tsconfig.json --test test/**/*.test.ts && node --input-type=module -e \"await Promise.all([import('@womp/spark-agent'), import('@womp/spark-agent/ui'), import('@womp/spark-agent/client'), import('@womp/spark-agent/server'), import('@womp/spark-agent/express'), import('@womp/spark-agent/kakapo'), import('@womp/spark-agent/geometry'), import('@womp/spark-agent/openscad')])\"",
104
- "test:live": "tsx --tsconfig tsconfig.json test/womp-scene-api.live.ts",
105
- "prepack": "yarn build"
106
- },
107
- "dependencies": {
108
- "@ai-sdk/anthropic": "4.0.50",
109
- "@ai-sdk/google": "4.0.69",
110
- "@ai-sdk/openai": "4.0.63",
111
- "@jitl/quickjs-wasmfile-release-sync": "0.32.0",
112
- "@womp/flowir": "0.3.0",
113
- "@womp/kakapo-sdk": "0.4.0",
114
- "ai": "7.0.95",
115
- "eventsource-parser": "^3.0.6",
116
- "express": "^5.2.1",
117
- "lodash": "4.18.1",
118
- "quickjs-emscripten-core": "0.32.0",
119
- "zod": "4.5.4"
120
- },
121
- "devDependencies": {
122
- "@ai-sdk/react": "^4.0.77",
123
- "@types/express": "^5.0.5",
124
- "@types/lodash": "4.17.24",
125
- "@types/node": "^24.0.0",
126
- "@types/react": "^19.2.17",
127
- "@types/react-dom": "^19.2.3",
128
- "@vitejs/plugin-react": "^6.0.4",
129
- "concurrently": "^9.2.1",
130
- "lucide-react": "^1.26.0",
131
- "react": "^19.2.8",
132
- "react-dom": "^19.2.8",
133
- "react-markdown": "^10.1.0",
134
- "remark-gfm": "^4.0.1",
135
- "tsx": "^4.23.1",
136
- "typescript": "^5.9.3",
137
- "vite": "^8.1.5"
138
- }
139
- }
1
+ {
2
+ "name": "@womp/spark-agent",
3
+ "version": "4.2.1",
4
+ "description": "Portable skills-based AI agent with local and durable chat transports for Womp",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "spark-agent": "dist/cli.js",
10
+ "simple-bench": "dist/simple-bench-cli.js",
11
+ "agent-run": "dist/agent-run-cli.js"
12
+ },
13
+ "exports": {
14
+ "./browser": {
15
+ "types": "./dist/browser.d.ts",
16
+ "import": "./dist/browser.js",
17
+ "default": "./dist/browser.js"
18
+ },
19
+ "./capabilities": {
20
+ "types": "./dist/capabilities.d.ts",
21
+ "import": "./dist/capabilities.js",
22
+ "default": "./dist/capabilities.js"
23
+ },
24
+ "./kakapo": {
25
+ "types": "./dist/kakapo.d.ts",
26
+ "import": "./dist/kakapo.js",
27
+ "default": "./dist/kakapo.js"
28
+ },
29
+ "./geometry": {
30
+ "types": "./dist/geometry.d.ts",
31
+ "import": "./dist/geometry.js",
32
+ "default": "./dist/geometry.js"
33
+ },
34
+ "./openscad": {
35
+ "types": "./dist/openscad.d.ts",
36
+ "import": "./dist/openscad.js",
37
+ "default": "./dist/openscad.js"
38
+ },
39
+ "./quickjs": {
40
+ "types": "./dist/quickjs-executor.d.ts",
41
+ "import": "./dist/quickjs-executor.js",
42
+ "default": "./dist/quickjs-executor.js"
43
+ },
44
+ ".": {
45
+ "types": "./dist/index.d.ts",
46
+ "import": "./dist/index.js",
47
+ "default": "./dist/index.js"
48
+ },
49
+ "./ui": {
50
+ "types": "./dist/ui.d.ts",
51
+ "import": "./dist/ui.js",
52
+ "default": "./dist/ui.js"
53
+ },
54
+ "./client": {
55
+ "types": "./dist/client.d.ts",
56
+ "import": "./dist/client.js",
57
+ "default": "./dist/client.js"
58
+ },
59
+ "./server": {
60
+ "types": "./dist/server/index.d.ts",
61
+ "import": "./dist/server/index.js",
62
+ "default": "./dist/server/index.js"
63
+ },
64
+ "./express": {
65
+ "types": "./dist/server/express.d.ts",
66
+ "import": "./dist/server/express.js",
67
+ "default": "./dist/server/express.js"
68
+ },
69
+ "./package.json": "./package.json"
70
+ },
71
+ "files": [
72
+ "dist/**/*.js",
73
+ "dist/**/*.d.ts",
74
+ "dist/server/fixtures/**/*.json",
75
+ "dist/geometry/schemas/**/*.json",
76
+ "README.md"
77
+ ],
78
+ "sideEffects": false,
79
+ "engines": {
80
+ "node": ">=22.13"
81
+ },
82
+ "repository": {
83
+ "type": "git",
84
+ "url": "git+https://github.com/wompxyz/spark-agent.git"
85
+ },
86
+ "publishConfig": {
87
+ "access": "public"
88
+ },
89
+ "license": "MIT",
90
+ "scripts": {
91
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
92
+ "build": "yarn clean && node scripts/generate-skill-declarations.mjs && tsc -p tsconfig.json && node scripts/copy-fixtures.mjs",
93
+ "typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p web/tsconfig.json",
94
+ "lint": "yarn typecheck",
95
+ "dev": "yarn build && concurrently --kill-others \"yarn dev:server\" \"yarn dev:web\"",
96
+ "dev:server": "tsx src/cli.ts",
97
+ "simple-bench": "tsx src/simple-bench-cli.ts",
98
+ "agent-run": "tsx src/agent-run-cli.ts",
99
+ "dev:demo-account": "yarn build && concurrently --kill-others \"yarn dev:server --profile demo-account\" \"yarn dev:web\"",
100
+ "dev:web": "vite --config web/vite.config.ts",
101
+ "start": "node dist/cli.js",
102
+ "web:build": "yarn build && tsc --noEmit -p web/tsconfig.json && vite build --config web/vite.config.ts",
103
+ "test": "yarn build && tsx --tsconfig tsconfig.json --test test/**/*.test.ts && node --input-type=module -e \"await Promise.all([import('@womp/spark-agent'), import('@womp/spark-agent/ui'), import('@womp/spark-agent/client'), import('@womp/spark-agent/server'), import('@womp/spark-agent/express'), import('@womp/spark-agent/kakapo'), import('@womp/spark-agent/geometry'), import('@womp/spark-agent/openscad')])\"",
104
+ "test:live": "tsx --tsconfig tsconfig.json test/womp-scene-api.live.ts",
105
+ "prepack": "yarn build"
106
+ },
107
+ "dependencies": {
108
+ "@ai-sdk/anthropic": "4.0.50",
109
+ "@ai-sdk/google": "4.0.69",
110
+ "@ai-sdk/openai": "4.0.63",
111
+ "@jitl/quickjs-wasmfile-release-sync": "0.32.0",
112
+ "@womp/flowir": "0.3.0",
113
+ "@womp/kakapo-sdk": "0.4.0",
114
+ "ai": "7.0.95",
115
+ "eventsource-parser": "^3.0.6",
116
+ "express": "^5.2.1",
117
+ "lodash": "4.18.1",
118
+ "quickjs-emscripten-core": "0.32.0",
119
+ "zod": "4.5.4"
120
+ },
121
+ "devDependencies": {
122
+ "@ai-sdk/react": "^4.0.77",
123
+ "@types/express": "^5.0.5",
124
+ "@types/lodash": "4.17.24",
125
+ "@types/node": "^24.0.0",
126
+ "@types/react": "^19.2.17",
127
+ "@types/react-dom": "^19.2.3",
128
+ "@vitejs/plugin-react": "^6.0.4",
129
+ "concurrently": "^9.2.1",
130
+ "lucide-react": "^1.26.0",
131
+ "react": "^19.2.8",
132
+ "react-dom": "^19.2.8",
133
+ "react-markdown": "^10.1.0",
134
+ "remark-gfm": "^4.0.1",
135
+ "tsx": "^4.23.1",
136
+ "typescript": "^5.9.3",
137
+ "vite": "^8.1.5"
138
+ }
139
+ }