@series-inc/stowkit-cli 0.1.16 → 0.1.17

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.
@@ -72,6 +72,7 @@ export interface StowMetaGlbChild {
72
72
  sampleRate?: string;
73
73
  dracoQuality?: string;
74
74
  materialOverrides?: Record<string, string | null>;
75
+ sceneNodeNames?: string[];
75
76
  targetMeshId?: string | null;
76
77
  materialConfig?: {
77
78
  schemaId: string;
@@ -149,7 +149,15 @@ export async function fullBuild(projectDir, opts) {
149
149
  }
150
150
  for (const mesh of extract.meshes) {
151
151
  const typeName = mesh.hasSkeleton ? 'skinnedMesh' : 'staticMesh';
152
- childrenManifest.push(existingChildren.get(mesh.name) ?? generateDefaultGlbChild(mesh.name, typeName));
152
+ const meshChild = existingChildren.get(mesh.name) ?? generateDefaultGlbChild(mesh.name, typeName);
153
+ // Store scene node names so AI agents can see the hierarchy in the stowmeta
154
+ if (mesh.imported.nodes.length > 1) {
155
+ meshChild.sceneNodeNames = mesh.imported.nodes.map(n => n.name);
156
+ }
157
+ else {
158
+ delete meshChild.sceneNodeNames;
159
+ }
160
+ childrenManifest.push(meshChild);
153
161
  }
154
162
  for (const mat of extract.materials) {
155
163
  const matName = `${mat.name}.stowmat`;
package/dist/server.js CHANGED
@@ -240,8 +240,15 @@ async function processGlbContainer(containerId) {
240
240
  // Process meshes
241
241
  for (const mesh of extract.meshes) {
242
242
  const typeName = mesh.hasSkeleton ? 'skinnedMesh' : 'staticMesh';
243
- const existing = existingChildren.get(mesh.name);
244
- childrenManifest.push(existing ?? generateDefaultGlbChild(mesh.name, typeName));
243
+ const meshChild = existingChildren.get(mesh.name) ?? generateDefaultGlbChild(mesh.name, typeName);
244
+ // Store scene node names so AI agents can see the hierarchy in the stowmeta
245
+ if (mesh.imported.nodes.length > 1) {
246
+ meshChild.sceneNodeNames = mesh.imported.nodes.map(n => n.name);
247
+ }
248
+ else {
249
+ delete meshChild.sceneNodeNames;
250
+ }
251
+ childrenManifest.push(meshChild);
245
252
  }
246
253
  // Process materials
247
254
  for (const mat of extract.materials) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@series-inc/stowkit-cli",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "stowkit": "./dist/cli.js"
package/skill.md CHANGED
@@ -248,6 +248,19 @@ The build pipeline automatically:
248
248
 
249
249
  Set `"preserveHierarchy": true` on a GLB container to preserve the scene graph node hierarchy in extracted static meshes. When false (default), all mesh geometry is baked to world space and flattened. Skinned meshes are always excluded from hierarchy preservation.
250
250
 
251
+ When preserve hierarchy is enabled, mesh children in the `.stowmeta` will include a `sceneNodeNames` array listing all scene graph nodes in that mesh:
252
+
253
+ ```json
254
+ {
255
+ "name": "Environment",
256
+ "childType": "staticMesh",
257
+ "stringId": "environment",
258
+ "sceneNodeNames": ["Root", "Floor", "Wall_North", "Wall_South", "Ceiling", "Door_Frame"]
259
+ }
260
+ ```
261
+
262
+ This lets you see which nodes are in the hierarchy without reading the binary processed data. The array is automatically populated during extraction and only appears when the mesh has more than one node.
263
+
251
264
  ### GLB child settings
252
265
 
253
266
  Each child in the `children` array supports the same settings as its corresponding standalone asset type: