@adiholick/nvstudio-mcp 2.2.3 → 2.4.0

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 (42) hide show
  1. package/README.md +57 -47
  2. package/agent-plugin/mcp_config.json +8 -0
  3. package/agent-plugin/plugin.json +6 -0
  4. package/agent-plugin/rules/AGENTS.md +118 -0
  5. package/agent-plugin/skills/nvstudio-animation-vfx/SKILL.md +120 -0
  6. package/agent-plugin/skills/nvstudio-assets-terrain-guide/SKILL.md +27 -0
  7. package/agent-plugin/skills/nvstudio-gui-standards/SKILL.md +419 -0
  8. package/agent-plugin/skills/nvstudio-mcp-guide/SKILL.md +83 -0
  9. package/agent-plugin/skills/nvstudio-rig-engine/SKILL.md +170 -0
  10. package/agent-plugin/skills/nvstudio-roblox-sync-guide/SKILL.md +16 -0
  11. package/dist/build-plugin.js +55 -0
  12. package/dist/index.js +841 -3
  13. package/dist/luau-validator.js +99 -34
  14. package/dist/roblox-bridge.js +152 -4
  15. package/dist/roblox-docs.js +264 -0
  16. package/dist/vfx-database.js +507 -0
  17. package/package.json +6 -4
  18. package/public/index.html +1590 -180
  19. package/studio-plugin/Main.server.lua +1 -1
  20. package/studio-plugin/animate_character.lua +36 -0
  21. package/studio-plugin/apply_vfx.lua +59 -0
  22. package/studio-plugin/batch_create_instances.lua +128 -0
  23. package/studio-plugin/batch_set_properties.lua +69 -0
  24. package/studio-plugin/edit_rig.lua +35 -0
  25. package/studio-plugin/insert_asset.lua +85 -12
  26. package/studio-plugin/nv_anim_dispatcher.lua +239 -0
  27. package/studio-plugin/nv_auto_rigger.lua +392 -0
  28. package/studio-plugin/nv_curves.lua +260 -0
  29. package/studio-plugin/nv_joint_math.lua +138 -0
  30. package/studio-plugin/nv_kinematics.lua +248 -0
  31. package/studio-plugin/nv_motion_generator.lua +279 -0
  32. package/studio-plugin/nv_rig_dispatcher.lua +319 -0
  33. package/studio-plugin/nv_vfx_serializer.lua +363 -0
  34. package/studio-plugin/nvstudio_mcp.rbxmx +3824 -60
  35. package/studio-plugin/preview_asset.lua +99 -0
  36. package/studio-plugin/scan_security.lua +81 -0
  37. package/studio-plugin/scan_vfx.lua +85 -0
  38. package/studio-plugin/scrub_timeline.lua +122 -0
  39. package/studio-plugin/security_scanner.lua +346 -0
  40. package/studio-plugin/set_properties.lua +83 -0
  41. package/studio-plugin/solve_limb_ik.lua +63 -0
  42. package/studio-plugin/ui_manager.lua +1 -1
@@ -117,5 +117,60 @@ function copyToRobloxPlugins() {
117
117
  }
118
118
  catch { }
119
119
  }
120
+ // Auto-sync dist, package.json, and agent-plugin to ~/.nvstudio-mcp & Antigravity
121
+ syncRuntimeAndPlugins();
122
+ }
123
+ function syncRuntimeAndPlugins() {
124
+ const homeDir = os_1.default.homedir();
125
+ const nvRuntimeDir = path_1.default.join(homeDir, '.nvstudio-mcp');
126
+ const antigravityPluginDir = path_1.default.join(homeDir, '.gemini', 'config', 'plugins', 'nvstudio-mcp');
127
+ // Sync to ~/.nvstudio-mcp
128
+ if (fs_1.default.existsSync(nvRuntimeDir)) {
129
+ try {
130
+ const rootDir = process.cwd();
131
+ const distSrc = path_1.default.join(rootDir, 'dist');
132
+ const distDest = path_1.default.join(nvRuntimeDir, 'dist');
133
+ if (fs_1.default.existsSync(distSrc)) {
134
+ fs_1.default.cpSync(distSrc, distDest, { recursive: true, force: true });
135
+ }
136
+ const pkgSrc = path_1.default.join(rootDir, 'package.json');
137
+ const pkgDest = path_1.default.join(nvRuntimeDir, 'package.json');
138
+ if (fs_1.default.existsSync(pkgSrc)) {
139
+ fs_1.default.copyFileSync(pkgSrc, pkgDest);
140
+ }
141
+ const pluginSrc = path_1.default.join(rootDir, 'studio-plugin');
142
+ const pluginDest = path_1.default.join(nvRuntimeDir, 'studio-plugin');
143
+ if (fs_1.default.existsSync(pluginSrc)) {
144
+ fs_1.default.cpSync(pluginSrc, pluginDest, { recursive: true, force: true });
145
+ }
146
+ const srcSrc = path_1.default.join(rootDir, 'src');
147
+ const srcDest = path_1.default.join(nvRuntimeDir, 'src');
148
+ if (fs_1.default.existsSync(srcSrc)) {
149
+ fs_1.default.cpSync(srcSrc, srcDest, { recursive: true, force: true });
150
+ }
151
+ const publicSrc = path_1.default.join(rootDir, 'public');
152
+ const publicDest = path_1.default.join(nvRuntimeDir, 'public');
153
+ if (fs_1.default.existsSync(publicSrc)) {
154
+ fs_1.default.cpSync(publicSrc, publicDest, { recursive: true, force: true });
155
+ }
156
+ console.log(`[Build] ✅ Berhasil menyinkronkan runtime ${nvRuntimeDir} (dist, public, studio-plugin, src)`);
157
+ }
158
+ catch (err) {
159
+ console.warn(`[Build] Gagal menyinkronkan ke ~/.nvstudio-mcp: ${err.message}`);
160
+ }
161
+ }
162
+ // Sync to ~/.gemini/config/plugins/nvstudio-mcp
163
+ if (fs_1.default.existsSync(antigravityPluginDir)) {
164
+ try {
165
+ const agentPluginSrc = path_1.default.join(process.cwd(), 'agent-plugin');
166
+ if (fs_1.default.existsSync(agentPluginSrc)) {
167
+ fs_1.default.cpSync(agentPluginSrc, antigravityPluginDir, { recursive: true, force: true });
168
+ console.log(`[Build] ✅ Berhasil menyinkronkan agent-plugin ke ${antigravityPluginDir}`);
169
+ }
170
+ }
171
+ catch (err) {
172
+ console.warn(`[Build] Gagal menyinkronkan ke agent-plugin Antigravity: ${err.message}`);
173
+ }
174
+ }
120
175
  }
121
176
  buildRbxmx();