diff --git a/data/tool-guides/local-asset-guide.md b/data/tool-guides/local-asset-guide.md index d53c186..b57435b 100644 --- a/data/tool-guides/local-asset-guide.md +++ b/data/tool-guides/local-asset-guide.md @@ -1,8 +1,8 @@ --- title: "Local Asset Library Guide" category: "assets" -tags: ["asset library", "catalog", "local assets", "curated assets", "import", "commodity props", "search_local_assets", "import_local_asset"] -triggered_by: ["get_local_asset_library_status", "search_local_assets", "import_local_asset"] +tags: ["asset library", "catalog", "local assets", "curated assets", "import", "commodity props", "search_local_assets", "import_local_asset", "polyhaven", "sketchfab", "external assets"] +triggered_by: ["get_local_asset_library_status", "search_local_assets", "import_local_asset", "get_polyhaven_status", "get_polyhaven_categories", "search_polyhaven_assets", "download_polyhaven_asset", "get_sketchfab_status", "search_sketchfab_models", "download_sketchfab_model"] description: "Guidance for using the curated local ViperMesh asset library before procedural modeling or external downloads." blender_version: "5.0+" --- diff --git a/data/tool-guides/materials-guide.md b/data/tool-guides/materials-guide.md index 5f9ac33..ae1a18e 100644 --- a/data/tool-guides/materials-guide.md +++ b/data/tool-guides/materials-guide.md @@ -2,7 +2,7 @@ title: "Materials & PBR Configuration Guide" category: "materials" tags: ["material", "PBR", "Principled BSDF", "metallic", "roughness", "color", "glass", "metal", "wood", "plastic", "create_material", "assign_material", "create_material_preset", "inspect_material_node_graph"] -triggered_by: ["create_material", "assign_material", "create_material_preset", "inspect_material_node_graph"] +triggered_by: ["list_materials", "create_material", "assign_material", "create_material_preset", "inspect_material_node_graph", "set_texture"] description: "Domain knowledge for Principled BSDF material setup, PBR parameter ranges, common surface presets, and Blender 5.x material API changes." blender_version: "4.0+" --- diff --git a/data/tool-guides/modifiers-guide.md b/data/tool-guides/modifiers-guide.md index d5774a9..cc2a2c9 100644 --- a/data/tool-guides/modifiers-guide.md +++ b/data/tool-guides/modifiers-guide.md @@ -2,7 +2,7 @@ title: "Modifier Usage & Configuration Guide" category: "modifiers" tags: ["modifier", "subdivision", "SubSurf", "bevel", "mirror", "boolean", "array", "smooth", "shade_smooth", "auto-smooth", "constraint", "stack", "mesh", "vertices", "faces", "create_mesh_from_data", "validate_mesh_geometry", "inspect_modifier_constraint_stack", "add_modifier", "apply_modifier", "apply_transforms", "shade_smooth"] -triggered_by: ["create_mesh_from_data", "validate_mesh_geometry", "inspect_modifier_constraint_stack", "add_modifier", "apply_modifier", "apply_transforms", "shade_smooth"] +triggered_by: ["create_mesh_from_data", "validate_mesh_geometry", "inspect_retopology_readiness", "inspect_modifier_constraint_stack", "add_modifier", "configure_modifier", "configure_constraint", "add_object_constraint", "remove_object_constraint", "apply_modifier", "apply_transforms", "shade_smooth"] description: "Domain knowledge for mesh modifier selection, configuration, stack ordering, and shading setup in Blender. Covers SubSurf, bevel, boolean, mirror, array, and auto-smooth." blender_version: "4.0+" --- diff --git a/data/tool-guides/render-guide.md b/data/tool-guides/render-guide.md index ffa308a..02a1bb5 100644 --- a/data/tool-guides/render-guide.md +++ b/data/tool-guides/render-guide.md @@ -2,7 +2,7 @@ title: "Render Settings & Output Guide" category: "render" tags: ["render", "EEVEE", "Cycles", "resolution", "samples", "denoising", "output", "PNG", "JPEG", "transparent", "setup_studio_scene", "validate_studio_scene", "set_render_settings", "render_image"] -triggered_by: ["setup_studio_scene", "validate_studio_scene", "set_render_settings", "render_image"] +triggered_by: ["setup_studio_scene", "validate_studio_scene", "set_render_settings", "render_image", "render_thumbnail_to_path"] description: "Domain knowledge for render engine selection, sample counts, resolution presets, output formats, and Blender 5.x EEVEE-Next changes." blender_version: "4.0+" --- diff --git a/data/tool-guides/rigging-guide.md b/data/tool-guides/rigging-guide.md index 7d994b5..96e77f8 100644 --- a/data/tool-guides/rigging-guide.md +++ b/data/tool-guides/rigging-guide.md @@ -2,6 +2,7 @@ title: "Rigging & Rigify Workflow Guide" category: "rigging" tags: ["rigging", "rigify", "armature", "skeleton", "metarig", "IK", "bone", "rig", "auto-rig", "mesh preparation", "edge loops", "joint", "weight cleanup"] +triggered_by: ["inspect_rigging_data", "inspect_weight_paint_readiness", "normalize_vertex_group_weights"] description: "Research-backed guide for Rigify rigging workflows including mesh preparation, per-bone metarig alignment, IK bend requirements, rig generation, and post-rigging weight cleanup. Based on NotebookLM research with 9 cited sources." blender_version: "4.0+ / 5.x" --- diff --git a/data/tool-guides/scene-composition-guide.md b/data/tool-guides/scene-composition-guide.md index 5b996d5..fd5fb2a 100644 --- a/data/tool-guides/scene-composition-guide.md +++ b/data/tool-guides/scene-composition-guide.md @@ -2,6 +2,7 @@ title: "Scene Composition & Interior Design Principles" category: "scene-design" tags: ["composition", "interior", "camera", "framing", "layout", "furniture", "placement", "spatial", "depth", "lamp", "lighting", "pendant", "shade", "light fixture"] +triggered_by: ["inspect_viewport_areas", "set_viewport_shading", "focus_viewport_on_objects", "get_viewport_screenshot", "render_viewport_to_path"] description: "General 3D engineering principles for composing visually balanced interior and exterior scenes. Covers furniture placement, camera framing, visual hierarchy, and spatial organization." blender_version: "5.0+" --- diff --git a/data/tool-guides/scene-management-guide.md b/data/tool-guides/scene-management-guide.md index ae2f5d2..df1619f 100644 --- a/data/tool-guides/scene-management-guide.md +++ b/data/tool-guides/scene-management-guide.md @@ -1,8 +1,8 @@ --- title: "Scene Management & Organization Guide" category: "scene-management" -tags: ["scene", "transform", "collection", "parent", "origin", "visibility", "duplicate", "join", "rename", "delete", "hierarchy", "organization", "set_object_transform", "rename_object", "duplicate_object", "join_objects", "parent_set", "parent_clear", "set_origin", "move_to_collection", "set_visibility", "delete_object"] -triggered_by: ["set_object_transform", "rename_object", "duplicate_object", "join_objects", "parent_set", "parent_clear", "set_origin", "move_to_collection", "set_visibility", "delete_object"] +tags: ["scene", "transform", "collection", "parent", "origin", "visibility", "duplicate", "join", "rename", "delete", "hierarchy", "organization", "set_object_transform", "rename_object", "duplicate_object", "join_objects", "parent_set", "parent_clear", "set_origin", "move_to_collection", "set_visibility", "delete_object", "select_scene_objects", "set_active_collection", "inspect_collection_hierarchy", "organize_collection_hierarchy"] +triggered_by: ["get_scene_info", "get_all_object_info", "select_scene_objects", "set_active_collection", "set_object_transform", "rename_object", "duplicate_object", "join_objects", "parent_set", "parent_clear", "set_origin", "move_to_collection", "set_visibility", "delete_object", "inspect_collection_hierarchy", "organize_collection_hierarchy"] description: "Domain knowledge for object transforms, hierarchy management, collection organization, origin placement, and scene cleanup in Blender." blender_version: "4.0+" --- diff --git a/data/tool-guides/weight-painting-guide.md b/data/tool-guides/weight-painting-guide.md index afd8901..713e049 100644 --- a/data/tool-guides/weight-painting-guide.md +++ b/data/tool-guides/weight-painting-guide.md @@ -1,8 +1,8 @@ --- title: "Weight Painting & Vertex Group Guide" category: "weight-painting" -tags: ["weight painting", "vertex groups", "deformation", "auto-weights", "bone heat", "normalize", "smooth weights", "limit total", "game engine", "export", "bmesh", "vertex group elements"] -triggered_by: [] +tags: ["weight painting", "vertex groups", "deformation", "auto-weights", "bone heat", "normalize", "smooth weights", "limit total", "game engine", "export", "bmesh", "vertex group elements", "inspect_weight_paint_readiness", "normalize_vertex_group_weights"] +triggered_by: ["inspect_weight_paint_readiness", "normalize_vertex_group_weights"] description: "Research-backed weight painting guide covering Python vertex group architecture, bmesh high-performance assignment, post-binding cleanup pipeline, game engine bone limits (4 max), smoothing techniques, and bone heat weighting troubleshooting. Based on NotebookLM research with 10 cited sources." blender_version: "4.0+ / 5.x" --- diff --git a/scripts/test/test-tool-guide-trigger-coverage.ts b/scripts/test/test-tool-guide-trigger-coverage.ts new file mode 100644 index 0000000..e3d6201 --- /dev/null +++ b/scripts/test/test-tool-guide-trigger-coverage.ts @@ -0,0 +1,75 @@ +import assert from "node:assert/strict" +import { readFileSync, readdirSync } from "node:fs" +import path from "node:path" + +const guidesDir = path.join(process.cwd(), "data", "tool-guides") + +const triggeredBy = new Map() + +for (const file of readdirSync(guidesDir).filter((name) => name.endsWith(".md"))) { + const raw = readFileSync(path.join(guidesDir, file), "utf8") + const match = raw.match(/triggered_by:\s*\[([^\]]*)\]/) + if (!match) continue + + const toolNames = match[1] + .split(",") + .map((value) => value.trim().replace(/^["']|["']$/g, "")) + .filter(Boolean) + + for (const toolName of toolNames) { + const files = triggeredBy.get(toolName) ?? [] + files.push(file) + triggeredBy.set(toolName, files) + } +} + +const requiredGuidedTools = [ + "get_scene_info", + "get_all_object_info", + "inspect_viewport_areas", + "set_viewport_shading", + "focus_viewport_on_objects", + "get_viewport_screenshot", + "render_viewport_to_path", + "select_scene_objects", + "set_active_collection", + "list_materials", + "set_texture", + "inspect_retopology_readiness", + "inspect_rigging_data", + "inspect_weight_paint_readiness", + "normalize_vertex_group_weights", + "configure_modifier", + "configure_constraint", + "add_object_constraint", + "remove_object_constraint", + "inspect_collection_hierarchy", + "organize_collection_hierarchy", + "render_thumbnail_to_path", + "get_polyhaven_status", + "get_polyhaven_categories", + "search_polyhaven_assets", + "download_polyhaven_asset", + "get_sketchfab_status", + "search_sketchfab_models", + "download_sketchfab_model", +] + +for (const toolName of requiredGuidedTools) { + assert.ok(triggeredBy.has(toolName), `${toolName} should be bound to at least one tool guide`) +} + +assert.ok( + triggeredBy.get("normalize_vertex_group_weights")?.includes("weight-painting-guide.md"), + "normalize_vertex_group_weights should load the weight-painting guide" +) +assert.ok( + triggeredBy.get("search_polyhaven_assets")?.includes("local-asset-guide.md"), + "PolyHaven search should load the asset selection guide" +) +assert.ok( + triggeredBy.get("focus_viewport_on_objects")?.includes("scene-composition-guide.md"), + "Viewport focus should load the scene-composition guide" +) + +console.log("Tool guide trigger coverage tests passed")