@hybridlabor-api/aos 4.3.0 → 4.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 (1052) hide show
  1. package/.claude/hooks/memb-inject.mjs +121 -0
  2. package/.claude/settings.json +10 -0
  3. package/README.de.md +0 -2
  4. package/README.md +0 -2
  5. package/README.pt.md +0 -2
  6. package/THIRD_PARTY_NOTICES.md +1 -1
  7. package/docs/skills_table.md +0 -2
  8. package/installer.js +17 -6
  9. package/package.json +16 -2
  10. package/skills/global_config/aos-project-init/SKILL.md +194 -0
  11. package/skills/global_config/aos-project-init/assets/AGENTS.template.md +56 -0
  12. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +137 -0
  13. package/skills/global_config/aos-setup/SKILL.md +222 -0
  14. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +262 -0
  15. package/skills/global_config/ask-tim/SKILL.md +2 -2
  16. package/assets/Give_AI_Agents_Control_of_Creative_Software.mp4 +0 -0
  17. package/mcps/RhinoMCP/connector/icon-dark.png +0 -3
  18. package/mcps/RhinoMCP/connector/icon-light.png +0 -3
  19. package/mcps/RhinoMCP/connector/screenshots/casa-rhino.png +0 -3
  20. package/mcps/RhinoMCP/docs/assets/css/custom.css +0 -640
  21. package/mcps/RhinoMCP/docs/content/_index.md +0 -88
  22. package/mcps/RhinoMCP/docs/content/docs/_index.md +0 -35
  23. package/mcps/RhinoMCP/docs/content/docs/advanced/_index.md +0 -37
  24. package/mcps/RhinoMCP/docs/content/docs/advanced/bulk-file-processing.md +0 -70
  25. package/mcps/RhinoMCP/docs/content/docs/advanced/headless-render-farm.md +0 -60
  26. package/mcps/RhinoMCP/docs/content/docs/advanced/make-this-parametric.md +0 -56
  27. package/mcps/RhinoMCP/docs/content/docs/advanced/sketch-to-model.md +0 -58
  28. package/mcps/RhinoMCP/docs/content/docs/advanced/upgrade-gh1-to-gh2.md +0 -51
  29. package/mcps/RhinoMCP/docs/content/docs/developers/_index.md +0 -39
  30. package/mcps/RhinoMCP/docs/content/docs/developers/dev-troubleshooting.md +0 -15
  31. package/mcps/RhinoMCP/docs/content/docs/developers/plugin-prototyping.md +0 -56
  32. package/mcps/RhinoMCP/docs/content/docs/developers/upgrade-gh1-to-gh2.md +0 -98
  33. package/mcps/RhinoMCP/docs/content/docs/developers/upgrade-to-netcore.md +0 -53
  34. package/mcps/RhinoMCP/docs/content/docs/developers/windows-to-cross-platform.md +0 -58
  35. package/mcps/RhinoMCP/docs/content/docs/developers/wpf-to-eto.md +0 -64
  36. package/mcps/RhinoMCP/docs/content/docs/getting-started/_index.md +0 -45
  37. package/mcps/RhinoMCP/docs/content/docs/getting-started/cc-plugin.md +0 -116
  38. package/mcps/RhinoMCP/docs/content/docs/getting-started/connector.md +0 -65
  39. package/mcps/RhinoMCP/docs/content/docs/getting-started/copilot.md +0 -61
  40. package/mcps/RhinoMCP/docs/content/docs/getting-started/lm-studio.md +0 -62
  41. package/mcps/RhinoMCP/docs/content/docs/troubleshooting.md +0 -66
  42. package/mcps/RhinoMCP/docs/content/docs/try-it-out/_index.md +0 -39
  43. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/_index.md +0 -25
  44. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/build-grasshopper.md +0 -26
  45. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/generate-variations.md +0 -25
  46. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/inspect-and-report.md +0 -26
  47. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/layers.md +0 -28
  48. package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/model-from-image.md +0 -27
  49. package/mcps/RhinoMCP/docs/content/docs/try-it-out/recipes.md +0 -178
  50. package/mcps/RhinoMCP/docs/data/icons.yaml +0 -3
  51. package/mcps/RhinoMCP/docs/go.mod +0 -5
  52. package/mcps/RhinoMCP/docs/go.sum +0 -4
  53. package/mcps/RhinoMCP/docs/hugo.yaml +0 -78
  54. package/mcps/RhinoMCP/docs/layouts/_partials/sidebar.html +0 -333
  55. package/mcps/RhinoMCP/docs/layouts/docs/list.html +0 -29
  56. package/mcps/RhinoMCP/docs/layouts/docs/single.html +0 -29
  57. package/mcps/RhinoMCP/docs/layouts/partials/custom/head-end.html +0 -3
  58. package/mcps/RhinoMCP/docs/layouts/shortcodes/download-asset.html +0 -21
  59. package/mcps/RhinoMCP/docs/layouts/shortcodes/github.html +0 -21
  60. package/mcps/RhinoMCP/docs/layouts/shortcodes/prompt.html +0 -23
  61. package/mcps/RhinoMCP/docs/layouts/shortcodes/yak.html +0 -21
  62. package/mcps/RhinoMCP/docs/static/developer/sel-arc.png +0 -3
  63. package/mcps/RhinoMCP/docs/static/developer/voxelizer-gh2-conversion.png +0 -3
  64. package/mcps/RhinoMCP/docs/static/examples/ai-kettle.png +0 -3
  65. package/mcps/RhinoMCP/docs/static/examples/casa_rhino_shapes.png +0 -3
  66. package/mcps/RhinoMCP/docs/static/examples/kettle.jpg +0 -0
  67. package/mcps/RhinoMCP/docs/static/examples/raygun-layers.png +0 -3
  68. package/mcps/RhinoMCP/docs/static/examples/raygun-thumbnail.png +0 -3
  69. package/mcps/RhinoMCP/docs/static/examples/twisty-tower-gh.png +0 -3
  70. package/mcps/RhinoMCP/docs/static/favicon.svg +0 -26
  71. package/mcps/RhinoMCP/docs/static/images/landing-dark.png +0 -3
  72. package/mcps/RhinoMCP/docs/static/images/landing.png +0 -3
  73. package/mcps/RhinoMCP/docs/static/images/logo-dark.svg +0 -26
  74. package/mcps/RhinoMCP/docs/static/images/logo.svg +0 -26
  75. package/mcps/RhinoMCP/docs/static/local-llm.png +0 -3
  76. package/mcps/RhinoMCP/rhino/plugin/icon.png +0 -3
  77. package/mcps/RhinoMCP/tests/Acp.Tests/Acp.Tests.csproj +0 -29
  78. package/mcps/RhinoMCP/tests/Acp.Tests/CoverageTests.cs +0 -52
  79. package/mcps/RhinoMCP/tests/Acp.Tests/Fakes.cs +0 -90
  80. package/mcps/RhinoMCP/tests/Acp.Tests/GlobalUsings.cs +0 -1
  81. package/mcps/RhinoMCP/tests/Acp.Tests/LoopbackTests.cs +0 -59
  82. package/mcps/RhinoMCP/tests/Acp.Tests/RobustnessTests.cs +0 -124
  83. package/mcps/RhinoMCP/tests/Acp.Tests/SerializationTests.cs +0 -94
  84. package/mcps/RhinoMCP/tests/Integration.Tests/AdoptedSlotTests.cs +0 -136
  85. package/mcps/RhinoMCP/tests/Integration.Tests/AutoSpawnNotificationTests.cs +0 -63
  86. package/mcps/RhinoMCP/tests/Integration.Tests/CloseSlotAgentTests.cs +0 -56
  87. package/mcps/RhinoMCP/tests/Integration.Tests/CloseSlotTests.cs +0 -37
  88. package/mcps/RhinoMCP/tests/Integration.Tests/DocLifecycleTests.cs +0 -42
  89. package/mcps/RhinoMCP/tests/Integration.Tests/GlobalUsings.cs +0 -3
  90. package/mcps/RhinoMCP/tests/Integration.Tests/GrasshopperStartTests.cs +0 -56
  91. package/mcps/RhinoMCP/tests/Integration.Tests/Harness/ReturnResult.cs +0 -28
  92. package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoMcpFixture.cs +0 -90
  93. package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoMcpRouter.cs +0 -111
  94. package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoRouterPaths.cs +0 -83
  95. package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RouterFixture.cs +0 -50
  96. package/mcps/RhinoMCP/tests/Integration.Tests/Integration.Tests.csproj +0 -31
  97. package/mcps/RhinoMCP/tests/Integration.Tests/ListSlotsShapeTests.cs +0 -55
  98. package/mcps/RhinoMCP/tests/Integration.Tests/ListSlotsTests.cs +0 -19
  99. package/mcps/RhinoMCP/tests/Integration.Tests/MacSharedProcessTests.cs +0 -87
  100. package/mcps/RhinoMCP/tests/Integration.Tests/MultiRouterTests.cs +0 -74
  101. package/mcps/RhinoMCP/tests/Integration.Tests/PluginToolTests.cs +0 -115
  102. package/mcps/RhinoMCP/tests/Integration.Tests/README.md +0 -35
  103. package/mcps/RhinoMCP/tests/Integration.Tests/RhinoCrashHandlingTests.cs +0 -107
  104. package/mcps/RhinoMCP/tests/Integration.Tests/SlotReapingTests.cs +0 -84
  105. package/mcps/RhinoMCP/tests/Integration.Tests/SpawnErrorTests.cs +0 -52
  106. package/mcps/RhinoMCP/tests/Integration.Tests/SpawnSlotTests.cs +0 -66
  107. package/mcps/RhinoMCP/tests/Integration.Tests/ToolDispatchBySlotTests.cs +0 -53
  108. package/mcps/RhinoMCP/tests/Integration.Tests/WindowsProcessIsolationTests.cs +0 -62
  109. package/mcps/RhinoMCP/tests/Router.Tests/CodegenTests.cs +0 -125
  110. package/mcps/RhinoMCP/tests/Router.Tests/ReturnResultTests.cs +0 -90
  111. package/mcps/RhinoMCP/tests/Router.Tests/RhinoCrashReportFinderTests.cs +0 -207
  112. package/mcps/RhinoMCP/tests/Router.Tests/RhinoLocatorOverrideTests.cs +0 -61
  113. package/mcps/RhinoMCP/tests/Router.Tests/RhinoLocatorTests.cs +0 -38
  114. package/mcps/RhinoMCP/tests/Router.Tests/RhinoManagerResolutionTests.cs +0 -151
  115. package/mcps/RhinoMCP/tests/Router.Tests/Router.Tests.csproj +0 -31
  116. package/mcps/RhinoMCP/tests/Router.Tests/RouterConfigTests.cs +0 -92
  117. package/mcps/RhinoMCP/tests/Router.Tests/SlotStoreLaunchingAbsenceTests.cs +0 -70
  118. package/mcps/RhinoMCP/tests/Router.Tests/SlotStorePortReservationTests.cs +0 -92
  119. package/mcps/RhinoMCP/tests/Router.Tests/SpawnDiagnosticsTests.cs +0 -100
  120. package/mcps/RhinoMCP/tests/Router.Tests/SpawnSlotToolDiagnoseTests.cs +0 -66
  121. package/mcps/RhinoMCP/tests/Server.Tests/McpConfigEditTests.cs +0 -223
  122. package/mcps/RhinoMCP/tests/Server.Tests/ParameterBinderTests.cs +0 -208
  123. package/mcps/RhinoMCP/tests/Server.Tests/ProtocolTests.cs +0 -200
  124. package/mcps/RhinoMCP/tests/Server.Tests/ResourceRegistryTests.cs +0 -218
  125. package/mcps/RhinoMCP/tests/Server.Tests/ResultUnwrapperTests.cs +0 -53
  126. package/mcps/RhinoMCP/tests/Server.Tests/SchemaBuilderTests.cs +0 -166
  127. package/mcps/RhinoMCP/tests/Server.Tests/Server.Tests.csproj +0 -40
  128. package/mcps/RhinoMCP/tests/StreamJson.Tests/AcpMessageMapperTests.cs +0 -82
  129. package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentPromptsTests.cs +0 -56
  130. package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRegistryOverlayTests.cs +0 -88
  131. package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRegistryResolutionTests.cs +0 -152
  132. package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRunnerTurnTests.cs +0 -149
  133. package/mcps/RhinoMCP/tests/StreamJson.Tests/ClaudeStreamJsonParserTests.cs +0 -118
  134. package/mcps/RhinoMCP/tests/StreamJson.Tests/CodexStreamJsonParserTests.cs +0 -100
  135. package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationStorePruneTests.cs +0 -94
  136. package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationStoreRoundTripTests.cs +0 -70
  137. package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationTests.cs +0 -153
  138. package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationUsageTests.cs +0 -56
  139. package/mcps/RhinoMCP/tests/StreamJson.Tests/GlobalUsings.cs +0 -12
  140. package/mcps/RhinoMCP/tests/StreamJson.Tests/Shims.cs +0 -93
  141. package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJson.Tests.csproj +0 -56
  142. package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJsonAgentLoopbackTests.cs +0 -75
  143. package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJsonParserEdgeCaseTests.cs +0 -128
  144. package/mcps/RhinoMCP/tests/StreamJson.Tests/TokenUsageTests.cs +0 -40
  145. package/mcps/RhinoMCP/tests/launcher/launcher.test.mjs +0 -461
  146. package/mcps/RhinoMCP/tests/launcher/package.json +0 -8
  147. package/mcps/ae-mcp/docs/demo.png +0 -0
  148. package/mcps/ae-mcp/docs/demo1.png +0 -0
  149. package/mcps/ae-mcp/docs/demo3.png +0 -0
  150. package/mcps/ae-mcp/docs/video.png +0 -0
  151. package/mcps/after-effects-mcp/assets/MCP Auto Bridge.png +0 -0
  152. package/mcps/bdb-remoteos-mcp/tests/__init__.py +0 -1
  153. package/mcps/bdb-remoteos-mcp/tests/mock_incus.py +0 -60
  154. package/mcps/bdb-remoteos-mcp/tests/test_mcp_server.py +0 -27
  155. package/mcps/bdb-remoteos-mcp/tests/test_security_redteam.py +0 -349
  156. package/mcps/bdb-remoteos-mcp/tests/test_webhook.py +0 -61
  157. package/mcps/blender-mcp/assets/addon-instructions.png +0 -0
  158. package/mcps/blender-mcp/assets/hammer-icon.png +0 -0
  159. package/mcps/blender-mcp-server/docs/architecture.md +0 -209
  160. package/mcps/blender-mcp-server/docs/images/demo_render.png +0 -0
  161. package/mcps/blender-mcp-server/docs/python-execute-design.md +0 -515
  162. package/mcps/blender-mcp-server/tests/__init__.py +0 -0
  163. package/mcps/blender-mcp-server/tests/test_addon.py +0 -953
  164. package/mcps/blender-mcp-server/tests/test_server.py +0 -364
  165. package/mcps/davinci-mcp-professional/docs/README.md +0 -67
  166. package/mcps/davinci-mcp-professional/docs/html/README_8md.html +0 -113
  167. package/mcps/davinci-mcp-professional/docs/html/____init_____8py.html +0 -126
  168. package/mcps/davinci-mcp-professional/docs/html/____init_____8py.js +0 -6
  169. package/mcps/davinci-mcp-professional/docs/html/____init_____8py_source.html +0 -125
  170. package/mcps/davinci-mcp-professional/docs/html/__version_8py.html +0 -130
  171. package/mcps/davinci-mcp-professional/docs/html/__version_8py.js +0 -9
  172. package/mcps/davinci-mcp-professional/docs/html/__version_8py_source.html +0 -130
  173. package/mcps/davinci-mcp-professional/docs/html/annotated.html +0 -123
  174. package/mcps/davinci-mcp-professional/docs/html/annotated_dup.js +0 -21
  175. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient-members.html +0 -131
  176. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient.html +0 -706
  177. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient.js +0 -26
  178. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError.html +0 -143
  179. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.map +0 -7
  180. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.md5 +0 -1
  181. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.png +0 -0
  182. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.map +0 -7
  183. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.md5 +0 -1
  184. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.png +0 -0
  185. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError.html +0 -143
  186. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.map +0 -5
  187. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.md5 +0 -1
  188. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.png +0 -0
  189. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.map +0 -9
  190. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.md5 +0 -1
  191. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.png +0 -0
  192. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError.html +0 -143
  193. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.map +0 -7
  194. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.md5 +0 -1
  195. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.png +0 -0
  196. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.map +0 -7
  197. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.md5 +0 -1
  198. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.png +0 -0
  199. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer-members.html +0 -115
  200. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer.html +0 -325
  201. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer.js +0 -10
  202. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool-members.html +0 -110
  203. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool.html +0 -188
  204. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool.js +0 -5
  205. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.map +0 -5
  206. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.md5 +0 -1
  207. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.png +0 -0
  208. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.map +0 -5
  209. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.md5 +0 -1
  210. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.png +0 -0
  211. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject-members.html +0 -113
  212. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject.html +0 -248
  213. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject.js +0 -8
  214. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager-members.html +0 -113
  215. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager.html +0 -252
  216. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager.js +0 -8
  217. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.map +0 -5
  218. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.md5 +0 -1
  219. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.png +0 -0
  220. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.map +0 -5
  221. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.md5 +0 -1
  222. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.png +0 -0
  223. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.map +0 -5
  224. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.md5 +0 -1
  225. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.png +0 -0
  226. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.map +0 -5
  227. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.md5 +0 -1
  228. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.png +0 -0
  229. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp-members.html +0 -115
  230. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp.html +0 -288
  231. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp.js +0 -10
  232. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.map +0 -5
  233. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.md5 +0 -1
  234. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.png +0 -0
  235. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.map +0 -5
  236. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.md5 +0 -1
  237. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.png +0 -0
  238. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline-members.html +0 -110
  239. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline.html +0 -188
  240. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline.js +0 -5
  241. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.map +0 -5
  242. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.md5 +0 -1
  243. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.png +0 -0
  244. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.map +0 -5
  245. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.md5 +0 -1
  246. package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.png +0 -0
  247. package/mcps/davinci-mcp-professional/docs/html/classes.html +0 -111
  248. package/mcps/davinci-mcp-professional/docs/html/cli_8py.html +0 -135
  249. package/mcps/davinci-mcp-professional/docs/html/cli_8py.js +0 -11
  250. package/mcps/davinci-mcp-professional/docs/html/cli_8py_source.html +0 -249
  251. package/mcps/davinci-mcp-professional/docs/html/clipboard.js +0 -61
  252. package/mcps/davinci-mcp-professional/docs/html/cookie.js +0 -58
  253. package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe.html +0 -127
  254. package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe.js +0 -4
  255. package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.map +0 -4
  256. package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.md5 +0 -1
  257. package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.png +0 -0
  258. package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603.html +0 -128
  259. package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603.js +0 -5
  260. package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.map +0 -4
  261. package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.md5 +0 -1
  262. package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.png +0 -0
  263. package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef.html +0 -127
  264. package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef.js +0 -4
  265. package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.map +0 -4
  266. package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.md5 +0 -1
  267. package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.png +0 -0
  268. package/mcps/davinci-mcp-professional/docs/html/dir_f94b29b73815c35a8351f4403bcc4f74.html +0 -129
  269. package/mcps/davinci-mcp-professional/docs/html/dir_f94b29b73815c35a8351f4403bcc4f74.js +0 -12
  270. package/mcps/davinci-mcp-professional/docs/html/doxygen.css +0 -2540
  271. package/mcps/davinci-mcp-professional/docs/html/doxygen.svg +0 -28
  272. package/mcps/davinci-mcp-professional/docs/html/doxygen_crawl.html +0 -170
  273. package/mcps/davinci-mcp-professional/docs/html/dynsections.js +0 -198
  274. package/mcps/davinci-mcp-professional/docs/html/files.html +0 -123
  275. package/mcps/davinci-mcp-professional/docs/html/files_dup.js +0 -4
  276. package/mcps/davinci-mcp-professional/docs/html/functions.html +0 -190
  277. package/mcps/davinci-mcp-professional/docs/html/functions_func.html +0 -184
  278. package/mcps/davinci-mcp-professional/docs/html/functions_vars.html +0 -110
  279. package/mcps/davinci-mcp-professional/docs/html/graph_legend.html +0 -165
  280. package/mcps/davinci-mcp-professional/docs/html/graph_legend.md5 +0 -1
  281. package/mcps/davinci-mcp-professional/docs/html/graph_legend.png +0 -0
  282. package/mcps/davinci-mcp-professional/docs/html/hierarchy.html +0 -123
  283. package/mcps/davinci-mcp-professional/docs/html/hierarchy.js +0 -18
  284. package/mcps/davinci-mcp-professional/docs/html/index.html +0 -200
  285. package/mcps/davinci-mcp-professional/docs/html/index.js +0 -9
  286. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.map +0 -3
  287. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.md5 +0 -1
  288. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.png +0 -0
  289. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.map +0 -3
  290. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.md5 +0 -1
  291. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.png +0 -0
  292. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.map +0 -9
  293. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.md5 +0 -1
  294. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.png +0 -0
  295. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.map +0 -13
  296. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.md5 +0 -1
  297. package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.png +0 -0
  298. package/mcps/davinci-mcp-professional/docs/html/inherits.html +0 -145
  299. package/mcps/davinci-mcp-professional/docs/html/jquery.js +0 -204
  300. package/mcps/davinci-mcp-professional/docs/html/menu.js +0 -131
  301. package/mcps/davinci-mcp-professional/docs/html/menudata.js +0 -73
  302. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp.html +0 -209
  303. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp.js +0 -34
  304. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1__version.html +0 -260
  305. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1cli.html +0 -303
  306. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resolve__client.html +0 -147
  307. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resolve__client.js +0 -8
  308. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resources.html +0 -140
  309. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1server.html +0 -144
  310. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1server.js +0 -5
  311. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1tools.html +0 -140
  312. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1types.html +0 -216
  313. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1types.js +0 -13
  314. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils.html +0 -155
  315. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils.js +0 -11
  316. package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils_1_1platform.html +0 -232
  317. package/mcps/davinci-mcp-professional/docs/html/namespacemembers.html +0 -173
  318. package/mcps/davinci-mcp-professional/docs/html/namespacemembers_func.html +0 -114
  319. package/mcps/davinci-mcp-professional/docs/html/namespacemembers_vars.html +0 -121
  320. package/mcps/davinci-mcp-professional/docs/html/namespaces.html +0 -119
  321. package/mcps/davinci-mcp-professional/docs/html/namespaces_dup.js +0 -4
  322. package/mcps/davinci-mcp-professional/docs/html/navtree.css +0 -327
  323. package/mcps/davinci-mcp-professional/docs/html/navtree.js +0 -901
  324. package/mcps/davinci-mcp-professional/docs/html/navtreedata.js +0 -68
  325. package/mcps/davinci-mcp-professional/docs/html/navtreeindex0.js +0 -212
  326. package/mcps/davinci-mcp-professional/docs/html/platform_8py.html +0 -130
  327. package/mcps/davinci-mcp-professional/docs/html/platform_8py.js +0 -8
  328. package/mcps/davinci-mcp-professional/docs/html/platform_8py_source.html +0 -245
  329. package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py.html +0 -132
  330. package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py.js +0 -8
  331. package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py_source.html +0 -501
  332. package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py.html +0 -125
  333. package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py.js +0 -4
  334. package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py_source.html +0 -169
  335. package/mcps/davinci-mcp-professional/docs/html/search/all_0.js +0 -22
  336. package/mcps/davinci-mcp-professional/docs/html/search/all_1.js +0 -4
  337. package/mcps/davinci-mcp-professional/docs/html/search/all_10.js +0 -4
  338. package/mcps/davinci-mcp-professional/docs/html/search/all_11.js +0 -4
  339. package/mcps/davinci-mcp-professional/docs/html/search/all_12.js +0 -4
  340. package/mcps/davinci-mcp-professional/docs/html/search/all_13.js +0 -4
  341. package/mcps/davinci-mcp-professional/docs/html/search/all_2.js +0 -4
  342. package/mcps/davinci-mcp-professional/docs/html/search/all_3.js +0 -15
  343. package/mcps/davinci-mcp-professional/docs/html/search/all_4.js +0 -26
  344. package/mcps/davinci-mcp-professional/docs/html/search/all_5.js +0 -4
  345. package/mcps/davinci-mcp-professional/docs/html/search/all_6.js +0 -6
  346. package/mcps/davinci-mcp-professional/docs/html/search/all_7.js +0 -25
  347. package/mcps/davinci-mcp-professional/docs/html/search/all_8.js +0 -7
  348. package/mcps/davinci-mcp-professional/docs/html/search/all_9.js +0 -9
  349. package/mcps/davinci-mcp-professional/docs/html/search/all_a.js +0 -6
  350. package/mcps/davinci-mcp-professional/docs/html/search/all_b.js +0 -6
  351. package/mcps/davinci-mcp-professional/docs/html/search/all_c.js +0 -9
  352. package/mcps/davinci-mcp-professional/docs/html/search/all_d.js +0 -10
  353. package/mcps/davinci-mcp-professional/docs/html/search/all_e.js +0 -11
  354. package/mcps/davinci-mcp-professional/docs/html/search/all_f.js +0 -5
  355. package/mcps/davinci-mcp-professional/docs/html/search/classes_0.js +0 -13
  356. package/mcps/davinci-mcp-professional/docs/html/search/files_0.js +0 -5
  357. package/mcps/davinci-mcp-professional/docs/html/search/files_1.js +0 -4
  358. package/mcps/davinci-mcp-professional/docs/html/search/files_2.js +0 -4
  359. package/mcps/davinci-mcp-professional/docs/html/search/files_3.js +0 -5
  360. package/mcps/davinci-mcp-professional/docs/html/search/files_4.js +0 -4
  361. package/mcps/davinci-mcp-professional/docs/html/search/files_5.js +0 -4
  362. package/mcps/davinci-mcp-professional/docs/html/search/functions_0.js +0 -9
  363. package/mcps/davinci-mcp-professional/docs/html/search/functions_1.js +0 -4
  364. package/mcps/davinci-mcp-professional/docs/html/search/functions_2.js +0 -10
  365. package/mcps/davinci-mcp-professional/docs/html/search/functions_3.js +0 -4
  366. package/mcps/davinci-mcp-professional/docs/html/search/functions_4.js +0 -25
  367. package/mcps/davinci-mcp-professional/docs/html/search/functions_5.js +0 -6
  368. package/mcps/davinci-mcp-professional/docs/html/search/functions_6.js +0 -7
  369. package/mcps/davinci-mcp-professional/docs/html/search/functions_7.js +0 -4
  370. package/mcps/davinci-mcp-professional/docs/html/search/functions_8.js +0 -5
  371. package/mcps/davinci-mcp-professional/docs/html/search/functions_9.js +0 -4
  372. package/mcps/davinci-mcp-professional/docs/html/search/functions_a.js +0 -4
  373. package/mcps/davinci-mcp-professional/docs/html/search/functions_b.js +0 -6
  374. package/mcps/davinci-mcp-professional/docs/html/search/namespaces_0.js +0 -13
  375. package/mcps/davinci-mcp-professional/docs/html/search/pages_0.js +0 -4
  376. package/mcps/davinci-mcp-professional/docs/html/search/pages_1.js +0 -6
  377. package/mcps/davinci-mcp-professional/docs/html/search/pages_2.js +0 -5
  378. package/mcps/davinci-mcp-professional/docs/html/search/pages_3.js +0 -4
  379. package/mcps/davinci-mcp-professional/docs/html/search/pages_4.js +0 -5
  380. package/mcps/davinci-mcp-professional/docs/html/search/pages_5.js +0 -4
  381. package/mcps/davinci-mcp-professional/docs/html/search/pages_6.js +0 -4
  382. package/mcps/davinci-mcp-professional/docs/html/search/pages_7.js +0 -4
  383. package/mcps/davinci-mcp-professional/docs/html/search/pages_8.js +0 -5
  384. package/mcps/davinci-mcp-professional/docs/html/search/pages_9.js +0 -5
  385. package/mcps/davinci-mcp-professional/docs/html/search/pages_a.js +0 -6
  386. package/mcps/davinci-mcp-professional/docs/html/search/pages_b.js +0 -4
  387. package/mcps/davinci-mcp-professional/docs/html/search/pages_c.js +0 -4
  388. package/mcps/davinci-mcp-professional/docs/html/search/pages_d.js +0 -4
  389. package/mcps/davinci-mcp-professional/docs/html/search/search.css +0 -377
  390. package/mcps/davinci-mcp-professional/docs/html/search/search.js +0 -708
  391. package/mcps/davinci-mcp-professional/docs/html/search/searchdata.js +0 -33
  392. package/mcps/davinci-mcp-professional/docs/html/search/variables_0.js +0 -14
  393. package/mcps/davinci-mcp-professional/docs/html/search/variables_1.js +0 -4
  394. package/mcps/davinci-mcp-professional/docs/html/search/variables_2.js +0 -4
  395. package/mcps/davinci-mcp-professional/docs/html/search/variables_3.js +0 -5
  396. package/mcps/davinci-mcp-professional/docs/html/search/variables_4.js +0 -4
  397. package/mcps/davinci-mcp-professional/docs/html/search/variables_5.js +0 -5
  398. package/mcps/davinci-mcp-professional/docs/html/search/variables_6.js +0 -5
  399. package/mcps/davinci-mcp-professional/docs/html/search/variables_7.js +0 -4
  400. package/mcps/davinci-mcp-professional/docs/html/search/variables_8.js +0 -4
  401. package/mcps/davinci-mcp-professional/docs/html/search/variables_9.js +0 -4
  402. package/mcps/davinci-mcp-professional/docs/html/server_8py.html +0 -129
  403. package/mcps/davinci-mcp-professional/docs/html/server_8py.js +0 -5
  404. package/mcps/davinci-mcp-professional/docs/html/server_8py_source.html +0 -318
  405. package/mcps/davinci-mcp-professional/docs/html/tabs.css +0 -1
  406. package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py.html +0 -125
  407. package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py.js +0 -4
  408. package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py_source.html +0 -253
  409. package/mcps/davinci-mcp-professional/docs/html/types_8py.html +0 -137
  410. package/mcps/davinci-mcp-professional/docs/html/types_8py.js +0 -13
  411. package/mcps/davinci-mcp-professional/docs/html/types_8py_source.html +0 -309
  412. package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py.html +0 -125
  413. package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py.js +0 -4
  414. package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py_source.html +0 -123
  415. package/mcps/davinci-mcp-professional/tests/README.md +0 -49
  416. package/mcps/davinci-mcp-professional/tests/__init__.py +0 -1
  417. package/mcps/davinci-mcp-professional/tests/conftest.py +0 -75
  418. package/mcps/davinci-mcp-professional/tests/test_security.py +0 -251
  419. package/mcps/davinci-resolve-mcp/docs/README.md +0 -56
  420. package/mcps/davinci-resolve-mcp/docs/SKILL.md +0 -1635
  421. package/mcps/davinci-resolve-mcp/docs/authoring/fuse-dctl-authoring.md +0 -242
  422. package/mcps/davinci-resolve-mcp/docs/authoring/script-plugin-authoring.md +0 -195
  423. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/README.md +0 -152
  424. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/category-patterns.md +0 -780
  425. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/controls.md +0 -259
  426. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/format.md +0 -568
  427. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/gotchas.md +0 -168
  428. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/thumbnails.md +0 -106
  429. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Blur.setting +0 -46
  430. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Color Tint.setting +0 -78
  431. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Cross Dissolve.setting +0 -57
  432. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Fade Title.setting +0 -111
  433. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Glow.setting +0 -55
  434. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Gradient.setting +0 -52
  435. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Iris.setting +0 -127
  436. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Lower Third.setting +0 -192
  437. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Noise.setting +0 -74
  438. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Solid Color.setting +0 -55
  439. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Title.setting +0 -105
  440. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Vignette.setting +0 -98
  441. package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Wipe.setting +0 -98
  442. package/mcps/davinci-resolve-mcp/docs/contributing.md +0 -82
  443. package/mcps/davinci-resolve-mcp/docs/guides/color-decision-guide.md +0 -427
  444. package/mcps/davinci-resolve-mcp/docs/guides/control-panel.md +0 -234
  445. package/mcps/davinci-resolve-mcp/docs/guides/editorial-decision-guide.md +0 -165
  446. package/mcps/davinci-resolve-mcp/docs/guides/media-analysis-guide.md +0 -763
  447. package/mcps/davinci-resolve-mcp/docs/guides/multicam-setup-guide.md +0 -138
  448. package/mcps/davinci-resolve-mcp/docs/images/control-panel/01-overview.png +0 -0
  449. package/mcps/davinci-resolve-mcp/docs/images/control-panel/02-review-bin-grid.png +0 -0
  450. package/mcps/davinci-resolve-mcp/docs/images/control-panel/03-clip-detail.png +0 -0
  451. package/mcps/davinci-resolve-mcp/docs/images/control-panel/04-transcript.png +0 -0
  452. package/mcps/davinci-resolve-mcp/docs/images/control-panel/05-shot-detail.png +0 -0
  453. package/mcps/davinci-resolve-mcp/docs/images/control-panel/06-inventory.png +0 -0
  454. package/mcps/davinci-resolve-mcp/docs/images/control-panel/07-diagnostics-resolve.png +0 -0
  455. package/mcps/davinci-resolve-mcp/docs/images/control-panel/08-preferences-analysis.png +0 -0
  456. package/mcps/davinci-resolve-mcp/docs/images/control-panel/09-ai-console.png +0 -0
  457. package/mcps/davinci-resolve-mcp/docs/images/control-panel/10-history.png +0 -0
  458. package/mcps/davinci-resolve-mcp/docs/images/control-panel/11-edit-plans.png +0 -0
  459. package/mcps/davinci-resolve-mcp/docs/install.md +0 -208
  460. package/mcps/davinci-resolve-mcp/docs/integrations/workflow-integrations.md +0 -120
  461. package/mcps/davinci-resolve-mcp/docs/kernels/README.md +0 -28
  462. package/mcps/davinci-resolve-mcp/docs/kernels/audio-fairlight-kernel.md +0 -86
  463. package/mcps/davinci-resolve-mcp/docs/kernels/color-grade-kernel.md +0 -103
  464. package/mcps/davinci-resolve-mcp/docs/kernels/extension-authoring-kernel.md +0 -101
  465. package/mcps/davinci-resolve-mcp/docs/kernels/fusion-composition-kernel.md +0 -121
  466. package/mcps/davinci-resolve-mcp/docs/kernels/media-pool-ingest-kernel.md +0 -147
  467. package/mcps/davinci-resolve-mcp/docs/kernels/project-lifecycle-kernel.md +0 -120
  468. package/mcps/davinci-resolve-mcp/docs/kernels/render-deliver-kernel.md +0 -92
  469. package/mcps/davinci-resolve-mcp/docs/kernels/review-annotation-kernel.md +0 -110
  470. package/mcps/davinci-resolve-mcp/docs/kernels/timeline-conform-interchange-kernel.md +0 -102
  471. package/mcps/davinci-resolve-mcp/docs/kernels/timeline-edit-kernel.md +0 -189
  472. package/mcps/davinci-resolve-mcp/docs/notes/codec-plugin-notes.md +0 -136
  473. package/mcps/davinci-resolve-mcp/docs/notes/dctl-notes.md +0 -234
  474. package/mcps/davinci-resolve-mcp/docs/notes/fusion-template-notes.md +0 -136
  475. package/mcps/davinci-resolve-mcp/docs/notes/lut-notes.md +0 -136
  476. package/mcps/davinci-resolve-mcp/docs/notes/openfx-notes.md +0 -120
  477. package/mcps/davinci-resolve-mcp/docs/process/release-process.md +0 -180
  478. package/mcps/davinci-resolve-mcp/docs/reference/api-coverage.md +0 -521
  479. package/mcps/davinci-resolve-mcp/docs/reference/api-limitations.md +0 -259
  480. package/mcps/davinci-resolve-mcp/docs/reference/readwrite-symmetry.md +0 -25
  481. package/mcps/davinci-resolve-mcp/docs/reference/resolve_scripting_api.txt +0 -1024
  482. package/mcps/davinci-resolve-mcp/tests/_error_envelope_helpers.py +0 -35
  483. package/mcps/davinci-resolve-mcp/tests/benchmark_server.py +0 -270
  484. package/mcps/davinci-resolve-mcp/tests/create_test_timeline.py +0 -177
  485. package/mcps/davinci-resolve-mcp/tests/live_api_gap_verification.py +0 -274
  486. package/mcps/davinci-resolve-mcp/tests/live_audio_fairlight_validation.py +0 -77
  487. package/mcps/davinci-resolve-mcp/tests/live_auto_sync_settings_check.py +0 -76
  488. package/mcps/davinci-resolve-mcp/tests/live_color_grade_validation.py +0 -89
  489. package/mcps/davinci-resolve-mcp/tests/live_delete_governance_check.py +0 -71
  490. package/mcps/davinci-resolve-mcp/tests/live_duplicate_clips_validation.py +0 -831
  491. package/mcps/davinci-resolve-mcp/tests/live_edit_engine_validation.py +0 -277
  492. package/mcps/davinci-resolve-mcp/tests/live_enum_settings_check.py +0 -89
  493. package/mcps/davinci-resolve-mcp/tests/live_extension_authoring_validation.py +0 -77
  494. package/mcps/davinci-resolve-mcp/tests/live_fuse_diagnose.py +0 -230
  495. package/mcps/davinci-resolve-mcp/tests/live_fuse_smoke.py +0 -250
  496. package/mcps/davinci-resolve-mcp/tests/live_fusion_composition_validation.py +0 -82
  497. package/mcps/davinci-resolve-mcp/tests/live_fusion_keyframe_validation.py +0 -116
  498. package/mcps/davinci-resolve-mcp/tests/live_fusion_mask_title_validation.py +0 -286
  499. package/mcps/davinci-resolve-mcp/tests/live_marker_validation.py +0 -439
  500. package/mcps/davinci-resolve-mcp/tests/live_media_pool_ingest_validation.py +0 -98
  501. package/mcps/davinci-resolve-mcp/tests/live_metadata_field_inventory_validation.py +0 -379
  502. package/mcps/davinci-resolve-mcp/tests/live_metadata_publish_validation.py +0 -192
  503. package/mcps/davinci-resolve-mcp/tests/live_multicam_setup_validation.py +0 -198
  504. package/mcps/davinci-resolve-mcp/tests/live_path_probe.py +0 -119
  505. package/mcps/davinci-resolve-mcp/tests/live_project_lifecycle_validation.py +0 -77
  506. package/mcps/davinci-resolve-mcp/tests/live_render_deliver_validation.py +0 -82
  507. package/mcps/davinci-resolve-mcp/tests/live_review_annotation_validation.py +0 -91
  508. package/mcps/davinci-resolve-mcp/tests/live_script_smoke.py +0 -141
  509. package/mcps/davinci-resolve-mcp/tests/live_sync_event_validation.py +0 -165
  510. package/mcps/davinci-resolve-mcp/tests/live_timeline_conform_validation.py +0 -77
  511. package/mcps/davinci-resolve-mcp/tests/live_v233_validation.py +0 -282
  512. package/mcps/davinci-resolve-mcp/tests/test-after-restart.bat +0 -83
  513. package/mcps/davinci-resolve-mcp/tests/test-after-restart.sh +0 -87
  514. package/mcps/davinci-resolve-mcp/tests/test_action_help.py +0 -47
  515. package/mcps/davinci-resolve-mcp/tests/test_action_list_drift.py +0 -163
  516. package/mcps/davinci-resolve-mcp/tests/test_ai_console_dispatch.py +0 -91
  517. package/mcps/davinci-resolve-mcp/tests/test_analysis_caps.py +0 -210
  518. package/mcps/davinci-resolve-mcp/tests/test_analysis_runs.py +0 -157
  519. package/mcps/davinci-resolve-mcp/tests/test_analysis_store.py +0 -366
  520. package/mcps/davinci-resolve-mcp/tests/test_api_limitations_doc.py +0 -56
  521. package/mcps/davinci-resolve-mcp/tests/test_api_truth.py +0 -64
  522. package/mcps/davinci-resolve-mcp/tests/test_api_truth_mitigations.py +0 -45
  523. package/mcps/davinci-resolve-mcp/tests/test_append_clip_infos_result_handling.py +0 -679
  524. package/mcps/davinci-resolve-mcp/tests/test_audio_fairlight_probe.py +0 -216
  525. package/mcps/davinci-resolve-mcp/tests/test_auto_run.py +0 -76
  526. package/mcps/davinci-resolve-mcp/tests/test_auto_sync_audio.py +0 -171
  527. package/mcps/davinci-resolve-mcp/tests/test_batch_cli.py +0 -253
  528. package/mcps/davinci-resolve-mcp/tests/test_brain_edits.py +0 -218
  529. package/mcps/davinci-resolve-mcp/tests/test_bridge_metrics.py +0 -52
  530. package/mcps/davinci-resolve-mcp/tests/test_bulk_match_to_hero.py +0 -219
  531. package/mcps/davinci-resolve-mcp/tests/test_caps_events_and_history.py +0 -147
  532. package/mcps/davinci-resolve-mcp/tests/test_caps_integration.py +0 -315
  533. package/mcps/davinci-resolve-mcp/tests/test_cdl_and_install_config.py +0 -372
  534. package/mcps/davinci-resolve-mcp/tests/test_clip_query.py +0 -57
  535. package/mcps/davinci-resolve-mcp/tests/test_cloud_settings.py +0 -62
  536. package/mcps/davinci-resolve-mcp/tests/test_color_grade_probe.py +0 -230
  537. package/mcps/davinci-resolve-mcp/tests/test_confirm_token.py +0 -85
  538. package/mcps/davinci-resolve-mcp/tests/test_confirm_token_preferences.py +0 -22
  539. package/mcps/davinci-resolve-mcp/tests/test_contracts.py +0 -81
  540. package/mcps/davinci-resolve-mcp/tests/test_create_subtitles_settings.py +0 -111
  541. package/mcps/davinci-resolve-mcp/tests/test_custom_timeline.py +0 -137
  542. package/mcps/davinci-resolve-mcp/tests/test_cut_executor.py +0 -87
  543. package/mcps/davinci-resolve-mcp/tests/test_cut_ir.py +0 -82
  544. package/mcps/davinci-resolve-mcp/tests/test_dashboard_transport.py +0 -47
  545. package/mcps/davinci-resolve-mcp/tests/test_deep_vision.py +0 -311
  546. package/mcps/davinci-resolve-mcp/tests/test_description_xml_shape.py +0 -71
  547. package/mcps/davinci-resolve-mcp/tests/test_destructive_decorator_coverage.py +0 -92
  548. package/mcps/davinci-resolve-mcp/tests/test_destructive_hook.py +0 -245
  549. package/mcps/davinci-resolve-mcp/tests/test_destructive_registry_drift.py +0 -108
  550. package/mcps/davinci-resolve-mcp/tests/test_edit_engine.py +0 -574
  551. package/mcps/davinci-resolve-mcp/tests/test_embeddings.py +0 -302
  552. package/mcps/davinci-resolve-mcp/tests/test_entities.py +0 -225
  553. package/mcps/davinci-resolve-mcp/tests/test_error_envelope.py +0 -179
  554. package/mcps/davinci-resolve-mcp/tests/test_exhaustive_wave_a.py +0 -101
  555. package/mcps/davinci-resolve-mcp/tests/test_extension_authoring_probe.py +0 -77
  556. package/mcps/davinci-resolve-mcp/tests/test_extract_frames.py +0 -42
  557. package/mcps/davinci-resolve-mcp/tests/test_extract_source_frame_ranges.py +0 -129
  558. package/mcps/davinci-resolve-mcp/tests/test_failure_tracker.py +0 -103
  559. package/mcps/davinci-resolve-mcp/tests/test_fuse_dctl_authoring.py +0 -596
  560. package/mcps/davinci-resolve-mcp/tests/test_fusion_comp_targeting.py +0 -269
  561. package/mcps/davinci-resolve-mcp/tests/test_fusion_composition_probe.py +0 -156
  562. package/mcps/davinci-resolve-mcp/tests/test_fusion_group_settings.py +0 -284
  563. package/mcps/davinci-resolve-mcp/tests/test_fusion_mask_title.py +0 -205
  564. package/mcps/davinci-resolve-mcp/tests/test_fusion_node_ops.py +0 -212
  565. package/mcps/davinci-resolve-mcp/tests/test_governance_identity.py +0 -155
  566. package/mcps/davinci-resolve-mcp/tests/test_grade_evidence_base.py +0 -132
  567. package/mcps/davinci-resolve-mcp/tests/test_import.py +0 -153
  568. package/mcps/davinci-resolve-mcp/tests/test_improvements.py +0 -334
  569. package/mcps/davinci-resolve-mcp/tests/test_inventory_exclude_bins.py +0 -139
  570. package/mcps/davinci-resolve-mcp/tests/test_live_api.py +0 -315
  571. package/mcps/davinci-resolve-mcp/tests/test_marker_params.py +0 -234
  572. package/mcps/davinci-resolve-mcp/tests/test_mcp_prompts.py +0 -77
  573. package/mcps/davinci-resolve-mcp/tests/test_mcp_resources.py +0 -117
  574. package/mcps/davinci-resolve-mcp/tests/test_mcp_transport.py +0 -74
  575. package/mcps/davinci-resolve-mcp/tests/test_media_analysis.py +0 -4637
  576. package/mcps/davinci-resolve-mcp/tests/test_media_pool_append_verification.py +0 -153
  577. package/mcps/davinci-resolve-mcp/tests/test_media_pool_changes.py +0 -105
  578. package/mcps/davinci-resolve-mcp/tests/test_media_pool_delete_governance.py +0 -69
  579. package/mcps/davinci-resolve-mcp/tests/test_media_pool_ingest_probe.py +0 -546
  580. package/mcps/davinci-resolve-mcp/tests/test_media_pool_walk.py +0 -79
  581. package/mcps/davinci-resolve-mcp/tests/test_multicam_setup.py +0 -178
  582. package/mcps/davinci-resolve-mcp/tests/test_object_inspection.py +0 -140
  583. package/mcps/davinci-resolve-mcp/tests/test_open_control_panel.py +0 -172
  584. package/mcps/davinci-resolve-mcp/tests/test_p1_param_validation.py +0 -57
  585. package/mcps/davinci-resolve-mcp/tests/test_p1_whitelist_and_delete.py +0 -81
  586. package/mcps/davinci-resolve-mcp/tests/test_page_lock.py +0 -52
  587. package/mcps/davinci-resolve-mcp/tests/test_panel_docs_drift.py +0 -77
  588. package/mcps/davinci-resolve-mcp/tests/test_partial_success_manifest.py +0 -113
  589. package/mcps/davinci-resolve-mcp/tests/test_persistence_safety.py +0 -147
  590. package/mcps/davinci-resolve-mcp/tests/test_prefer_handle.py +0 -89
  591. package/mcps/davinci-resolve-mcp/tests/test_project_cleanup.py +0 -111
  592. package/mcps/davinci-resolve-mcp/tests/test_project_lifecycle_probe.py +0 -256
  593. package/mcps/davinci-resolve-mcp/tests/test_project_lint.py +0 -79
  594. package/mcps/davinci-resolve-mcp/tests/test_project_spec.py +0 -246
  595. package/mcps/davinci-resolve-mcp/tests/test_propose_grade.py +0 -116
  596. package/mcps/davinci-resolve-mcp/tests/test_provenance.py +0 -88
  597. package/mcps/davinci-resolve-mcp/tests/test_readback.py +0 -77
  598. package/mcps/davinci-resolve-mcp/tests/test_readwrite_audit.py +0 -43
  599. package/mcps/davinci-resolve-mcp/tests/test_reel_name_writeback.py +0 -149
  600. package/mcps/davinci-resolve-mcp/tests/test_render_deliver_probe.py +0 -250
  601. package/mcps/davinci-resolve-mcp/tests/test_resolve20_api.py +0 -282
  602. package/mcps/davinci-resolve-mcp/tests/test_resolve21_actions.py +0 -386
  603. package/mcps/davinci-resolve-mcp/tests/test_resolve_ai_governance.py +0 -92
  604. package/mcps/davinci-resolve-mcp/tests/test_resolve_ai_ledger.py +0 -89
  605. package/mcps/davinci-resolve-mcp/tests/test_resolve_busy.py +0 -134
  606. package/mcps/davinci-resolve-mcp/tests/test_review_annotation_probe.py +0 -162
  607. package/mcps/davinci-resolve-mcp/tests/test_sampling_modes.py +0 -293
  608. package/mcps/davinci-resolve-mcp/tests/test_script_plugin.py +0 -750
  609. package/mcps/davinci-resolve-mcp/tests/test_shot_relationships.py +0 -254
  610. package/mcps/davinci-resolve-mcp/tests/test_spec_lint_wiring.py +0 -311
  611. package/mcps/davinci-resolve-mcp/tests/test_static_undefined_names.py +0 -45
  612. package/mcps/davinci-resolve-mcp/tests/test_structural_diff.py +0 -67
  613. package/mcps/davinci-resolve-mcp/tests/test_sync_detection.py +0 -213
  614. package/mcps/davinci-resolve-mcp/tests/test_thumbnail_image.py +0 -55
  615. package/mcps/davinci-resolve-mcp/tests/test_timeline_brain_db.py +0 -230
  616. package/mcps/davinci-resolve-mcp/tests/test_timeline_conform_probe.py +0 -229
  617. package/mcps/davinci-resolve-mcp/tests/test_timeline_editorial_helpers.py +0 -88
  618. package/mcps/davinci-resolve-mcp/tests/test_timeline_export_enum.py +0 -59
  619. package/mcps/davinci-resolve-mcp/tests/test_timeline_kernel_probe.py +0 -70
  620. package/mcps/davinci-resolve-mcp/tests/test_timeline_title_text_utils.py +0 -64
  621. package/mcps/davinci-resolve-mcp/tests/test_timeline_versioning.py +0 -419
  622. package/mcps/davinci-resolve-mcp/tests/test_tool_choice_hint.py +0 -42
  623. package/mcps/davinci-resolve-mcp/tests/test_tool_exposure.py +0 -159
  624. package/mcps/davinci-resolve-mcp/tests/test_tool_registration.py +0 -91
  625. package/mcps/davinci-resolve-mcp/tests/test_transcript_read.py +0 -74
  626. package/mcps/davinci-resolve-mcp/tests/test_update_check.py +0 -171
  627. package/mcps/davinci-resolve-mcp/tests/test_update_hardening.py +0 -171
  628. package/mcps/davinci-resolve-mcp/tests/test_update_history.py +0 -116
  629. package/mcps/davinci-resolve-mcp/tests/test_v232_helpers.py +0 -265
  630. package/mcps/davinci-resolve-mcp/tests/test_v233_helpers.py +0 -307
  631. package/mcps/davinci-resolve-mcp/tests/test_validation_guards.py +0 -108
  632. package/mcps/davinci-resolve-mcp/tests/test_verification_stats.py +0 -32
  633. package/mcps/davinci-resolve-mcp/tests/test_waveb_p2_p3.py +0 -65
  634. package/mcps/golem-rhino-mcp/Nexus-AI-Agents.png +0 -0
  635. package/mcps/golem-rhino-mcp/docs/ARCHITECTURE.md +0 -277
  636. package/mcps/golem-rhino-mcp/docs/PROTOCOL.md +0 -247
  637. package/mcps/golem-rhino-mcp/docs/TOOL_REFERENCE.md +0 -1571
  638. package/mcps/golem-rhino-mcp/docs/TROUBLESHOOTING.md +0 -396
  639. package/mcps/golem-rhino-mcp/mcp_server/Screenshot 2026-03-20 at 18.33.06.png +0 -0
  640. package/mcps/golem-rhino-mcp/mcp_server/Screenshot 2026-03-21 at 1.43.01.png +0 -0
  641. package/mcps/golem-rhino-mcp/nexus-pngs/CAIO.png +0 -0
  642. package/mcps/golem-rhino-mcp/nexus-pngs/CEO.png +0 -0
  643. package/mcps/golem-rhino-mcp/nexus-pngs/CFO.png +0 -0
  644. package/mcps/golem-rhino-mcp/nexus-pngs/CHRO.png +0 -0
  645. package/mcps/golem-rhino-mcp/nexus-pngs/CISO.png +0 -0
  646. package/mcps/golem-rhino-mcp/nexus-pngs/CLO.png +0 -0
  647. package/mcps/golem-rhino-mcp/nexus-pngs/CMO.png +0 -0
  648. package/mcps/golem-rhino-mcp/nexus-pngs/COO.png +0 -0
  649. package/mcps/golem-rhino-mcp/nexus-pngs/CPO.png +0 -0
  650. package/mcps/golem-rhino-mcp/nexus-pngs/CRO.png +0 -0
  651. package/mcps/golem-rhino-mcp/nexus-pngs/CTO.png +0 -0
  652. package/mcps/golem-rhino-mcp/nexus-pngs/king-hippo.png +0 -0
  653. package/mcps/golem-rhino-mcp/nexus-pngs/tier-0-csuite.png +0 -0
  654. package/mcps/golem-rhino-mcp/screenshots/city_monument.png +0 -0
  655. package/mcps/golem-rhino-mcp/screenshots/city_skyline.png +0 -0
  656. package/mcps/golem-rhino-mcp/screenshots/city_street.png +0 -0
  657. package/mcps/golem-rhino-mcp/screenshots/city_wide.png +0 -0
  658. package/mcps/golem-rhino-mcp/tests/__init__.py +0 -0
  659. package/mcps/golem-rhino-mcp/tests/conftest.py +0 -150
  660. package/mcps/golem-rhino-mcp/tests/test_connection.py +0 -543
  661. package/mcps/golem-rhino-mcp/tests/test_integration.py +0 -344
  662. package/mcps/golem-rhino-mcp/tests/test_models.py +0 -749
  663. package/mcps/golem-rhino-mcp/tests/test_protocol.py +0 -334
  664. package/mcps/golem-rhino-mcp/tests/test_tools_mock.py +0 -689
  665. package/mcps/tdmcp/.github/social-preview.png +0 -0
  666. package/mcps/tdmcp/docs/.vitepress/config.ts +0 -397
  667. package/mcps/tdmcp/docs/AI_PARTY_LLM_TRAINING_PLAN.md +0 -118
  668. package/mcps/tdmcp/docs/AI_PARTY_POC.md +0 -142
  669. package/mcps/tdmcp/docs/AI_PARTY_POC_PLAN.md +0 -112
  670. package/mcps/tdmcp/docs/CREATIVE_RAG.md +0 -346
  671. package/mcps/tdmcp/docs/DEPLOYMENT.md +0 -113
  672. package/mcps/tdmcp/docs/PROJECT_RAG.md +0 -477
  673. package/mcps/tdmcp/docs/ROADMAP.md +0 -1346
  674. package/mcps/tdmcp/docs/guide/ai-controlled-party.md +0 -215
  675. package/mcps/tdmcp/docs/guide/body-tracking.md +0 -169
  676. package/mcps/tdmcp/docs/guide/codex.md +0 -107
  677. package/mcps/tdmcp/docs/guide/components.md +0 -126
  678. package/mcps/tdmcp/docs/guide/dashboard-foh.md +0 -93
  679. package/mcps/tdmcp/docs/guide/faq.md +0 -62
  680. package/mcps/tdmcp/docs/guide/first-visual.md +0 -76
  681. package/mcps/tdmcp/docs/guide/generators.md +0 -230
  682. package/mcps/tdmcp/docs/guide/glossary.md +0 -123
  683. package/mcps/tdmcp/docs/guide/install.md +0 -200
  684. package/mcps/tdmcp/docs/guide/local-copilot.md +0 -154
  685. package/mcps/tdmcp/docs/guide/lops-integration.md +0 -133
  686. package/mcps/tdmcp/docs/guide/mcp-resources.md +0 -96
  687. package/mcps/tdmcp/docs/guide/mediapipe-adapters.md +0 -90
  688. package/mcps/tdmcp/docs/guide/physical-installations.md +0 -129
  689. package/mcps/tdmcp/docs/guide/prompt-cookbook.md +0 -2285
  690. package/mcps/tdmcp/docs/guide/recipes.md +0 -72
  691. package/mcps/tdmcp/docs/guide/session-profile.md +0 -90
  692. package/mcps/tdmcp/docs/guide/shader-park.md +0 -94
  693. package/mcps/tdmcp/docs/guide/show-timelines.md +0 -125
  694. package/mcps/tdmcp/docs/guide/troubleshooting.md +0 -121
  695. package/mcps/tdmcp/docs/guide/what-is-tdmcp.md +0 -62
  696. package/mcps/tdmcp/docs/index.md +0 -49
  697. package/mcps/tdmcp/docs/privacy.md +0 -85
  698. package/mcps/tdmcp/docs/pt/CREATIVE_RAG.md +0 -370
  699. package/mcps/tdmcp/docs/pt/PROJECT_RAG.md +0 -420
  700. package/mcps/tdmcp/docs/pt/guide/ai-controlled-party.md +0 -218
  701. package/mcps/tdmcp/docs/pt/guide/body-tracking.md +0 -175
  702. package/mcps/tdmcp/docs/pt/guide/codex.md +0 -113
  703. package/mcps/tdmcp/docs/pt/guide/components.md +0 -129
  704. package/mcps/tdmcp/docs/pt/guide/dashboard-foh.md +0 -95
  705. package/mcps/tdmcp/docs/pt/guide/faq.md +0 -62
  706. package/mcps/tdmcp/docs/pt/guide/first-visual.md +0 -81
  707. package/mcps/tdmcp/docs/pt/guide/generators.md +0 -243
  708. package/mcps/tdmcp/docs/pt/guide/glossary.md +0 -127
  709. package/mcps/tdmcp/docs/pt/guide/install.md +0 -196
  710. package/mcps/tdmcp/docs/pt/guide/local-copilot.md +0 -164
  711. package/mcps/tdmcp/docs/pt/guide/lops-integration.md +0 -143
  712. package/mcps/tdmcp/docs/pt/guide/mcp-resources.md +0 -96
  713. package/mcps/tdmcp/docs/pt/guide/mediapipe-adapters.md +0 -93
  714. package/mcps/tdmcp/docs/pt/guide/physical-installations.md +0 -135
  715. package/mcps/tdmcp/docs/pt/guide/prompt-cookbook.md +0 -2342
  716. package/mcps/tdmcp/docs/pt/guide/recipes.md +0 -59
  717. package/mcps/tdmcp/docs/pt/guide/session-profile.md +0 -92
  718. package/mcps/tdmcp/docs/pt/guide/shader-park.md +0 -95
  719. package/mcps/tdmcp/docs/pt/guide/show-timelines.md +0 -128
  720. package/mcps/tdmcp/docs/pt/guide/troubleshooting.md +0 -109
  721. package/mcps/tdmcp/docs/pt/guide/what-is-tdmcp.md +0 -61
  722. package/mcps/tdmcp/docs/pt/index.md +0 -49
  723. package/mcps/tdmcp/docs/pt/privacy.md +0 -91
  724. package/mcps/tdmcp/docs/pt/reference/architecture.md +0 -178
  725. package/mcps/tdmcp/docs/pt/reference/environment.md +0 -70
  726. package/mcps/tdmcp/docs/public/favicon.svg +0 -12
  727. package/mcps/tdmcp/docs/public/logo-400.png +0 -0
  728. package/mcps/tdmcp/docs/public/og-image.jpg +0 -0
  729. package/mcps/tdmcp/docs/public/robots.txt +0 -4
  730. package/mcps/tdmcp/docs/reference/API_STABILITY.md +0 -116
  731. package/mcps/tdmcp/docs/reference/architecture.md +0 -191
  732. package/mcps/tdmcp/docs/reference/bridge-api.md +0 -155
  733. package/mcps/tdmcp/docs/reference/cli.md +0 -288
  734. package/mcps/tdmcp/docs/reference/coverage-harness.md +0 -61
  735. package/mcps/tdmcp/docs/reference/environment.md +0 -116
  736. package/mcps/tdmcp/docs/reference/packages.md +0 -98
  737. package/mcps/tdmcp/docs/reference/tool-contract.md +0 -74
  738. package/mcps/tdmcp/docs/superpowers/plans/2026-05-29-shader-park-animus-integrations.md +0 -76
  739. package/mcps/tdmcp/docs/superpowers/plans/2026-06-02-doctor-fix-textport-auto-install.md +0 -131
  740. package/mcps/tdmcp/docs/superpowers/plans/2026-06-06-body-bubbles.md +0 -138
  741. package/mcps/tdmcp/docs/superpowers/plans/2026-06-08-deep-doppelganger-implementation.md +0 -201
  742. package/mcps/tdmcp/docs/superpowers/plans/2026-06-10-ai-party-ollama-integration.md +0 -55
  743. package/mcps/tdmcp/docs/superpowers/plans/2026-06-24-kinect-wall-harp-calibration-wizard.md +0 -53
  744. package/mcps/tdmcp/docs/superpowers/plans/2026-06-24-kinect-wall-harp-external-kinect.md +0 -286
  745. package/mcps/tdmcp/docs/superpowers/specs/2026-05-31-create-vector-lines-design.md +0 -308
  746. package/mcps/tdmcp/docs/superpowers/specs/2026-06-01-ai-controlled-party-plan.md +0 -461
  747. package/mcps/tdmcp/docs/superpowers/specs/2026-06-04-ai-party-ui24r-scene-arming-design.md +0 -296
  748. package/mcps/tdmcp/docs/superpowers/specs/2026-06-08-ai-controlled-party-producer-poc.md +0 -232
  749. package/mcps/tdmcp/docs/superpowers/specs/2026-06-08-deep-doppelganger-design.md +0 -136
  750. package/mcps/tdmcp/docs/superpowers/specs/2026-06-10-hermes-ai-party-poc.md +0 -383
  751. package/mcps/tdmcp/docs/superpowers/specs/2026-06-23-kinect-wall-harp-design.md +0 -340
  752. package/mcps/tdmcp/docs/superpowers/specs/2026-06-24-kinect-environment-diagnostic-design.md +0 -151
  753. package/mcps/tdmcp/docs/superpowers/specs/2026-06-24-kinect-wall-harp-external-kinect-design.md +0 -104
  754. package/mcps/tdmcp/training/showintent/data/curated/.gitkeep +0 -1
  755. package/mcps/tdmcp/training/showintent/data/curated/curated-approved.jsonl +0 -1
  756. package/mcps/tdmcp/training/showintent/data/curation_template.csv +0 -1
  757. package/mcps/tdmcp/training/showintent/data/generated/.gitkeep +0 -1
  758. package/mcps/tdmcp/training/showintent/data/generated/showintent-synthetic.jsonl +0 -2000
  759. package/mcps/tdmcp/training/showintent/data/raw/.gitkeep +0 -1
  760. package/mcps/tdmcp/training/showintent/data/splits/.gitkeep +0 -1
  761. package/mcps/tdmcp/training/showintent/data/splits/train-compact.jsonl +0 -1800
  762. package/mcps/tdmcp/training/showintent/data/splits/train.jsonl +0 -1800
  763. package/mcps/tdmcp/training/showintent/data/splits/validation-compact.jsonl +0 -200
  764. package/mcps/tdmcp/training/showintent/data/splits/validation.jsonl +0 -200
  765. package/mcps/touchdesigner-mcp/assets/import.png +0 -0
  766. package/mcps/touchdesigner-mcp/assets/nodes_list.png +0 -0
  767. package/mcps/touchdesigner-mcp/assets/particle_on_youtube.png +0 -0
  768. package/mcps/touchdesigner-mcp/assets/textport.png +0 -0
  769. package/mcps/touchdesigner-mcp/assets/tutorial.png +0 -0
  770. package/mcps/touchdesigner-mcp/assets/tutorial_docker.png +0 -0
  771. package/mcps/touchdesigner-mcp/docs/architecture.md +0 -1245
  772. package/mcps/touchdesigner-mcp/docs/development.ja.md +0 -197
  773. package/mcps/touchdesigner-mcp/docs/development.md +0 -212
  774. package/mcps/touchdesigner-mcp/docs/installation.ja.md +0 -370
  775. package/mcps/touchdesigner-mcp/docs/installation.md +0 -406
  776. package/mcps/unreal_mcp/Public/icon.png +0 -0
  777. package/mcps/unreal_mcp/docs/Engine-API-Reference.md +0 -2251
  778. package/mcps/unreal_mcp/docs/Roadmap.md +0 -2269
  779. package/mcps/unreal_mcp/docs/editor-plugin-extension.md +0 -373
  780. package/mcps/unreal_mcp/docs/handler-mapping.md +0 -1170
  781. package/mcps/unreal_mcp/docs/native-automation-progress.md +0 -431
  782. package/mcps/unreal_mcp/docs/testing-guide.md +0 -149
  783. package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Domains/Test/McpAutomationBridge_TestHandlers.cpp +0 -74
  784. package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpCustomHandlerAliasTests.cpp +0 -191
  785. package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpEnvironmentSnapshotSchemaTests.cpp +0 -192
  786. package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpPropertyReflectionImportTests.cpp +0 -269
  787. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpClientProtocolAutomation.cpp +0 -152
  788. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpProtocolTestHelpers.cpp +0 -136
  789. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpProtocolTestHelpers.h +0 -49
  790. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationTestDelegates.h +0 -12
  791. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationTests.cpp +0 -34
  792. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationWidgetHelpers.cpp +0 -116
  793. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationWidgetHelpers.h +0 -15
  794. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentFakeAcpScript.cpp +0 -76
  795. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelAutomation.h +0 -35
  796. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelAutomationFixture.cpp +0 -118
  797. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelHistoryChecks.cpp +0 -162
  798. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelLayoutChecks.cpp +0 -158
  799. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelTranscriptChecks.cpp +0 -117
  800. package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentStudioKitAutomationChecks.cpp +0 -155
  801. package/mcps/unreal_mcp/tests/AGENTS.md +0 -73
  802. package/mcps/unreal_mcp/tests/expectation-utils.mjs +0 -29
  803. package/mcps/unreal_mcp/tests/heartbeat-progress.test.mjs +0 -143
  804. package/mcps/unreal_mcp/tests/integration/get_ai_info_characterization.mjs +0 -216
  805. package/mcps/unreal_mcp/tests/integration.mjs +0 -94
  806. package/mcps/unreal_mcp/tests/mcp-tools/core/control-actor.test.mjs +0 -114
  807. package/mcps/unreal_mcp/tests/mcp-tools/core/control-editor.test.mjs +0 -86
  808. package/mcps/unreal_mcp/tests/mcp-tools/core/inspect.test.mjs +0 -85
  809. package/mcps/unreal_mcp/tests/mcp-tools/core/manage-asset.test.mjs +0 -302
  810. package/mcps/unreal_mcp/tests/mcp-tools/core/manage-blueprint.test.mjs +0 -331
  811. package/mcps/unreal_mcp/tests/mcp-tools/core/manage-level.test.mjs +0 -73
  812. package/mcps/unreal_mcp/tests/mcp-tools/core/manage-tools.test.mjs +0 -30
  813. package/mcps/unreal_mcp/tests/mcp-tools/core/system-control.test.mjs +0 -205
  814. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/animation-physics.test.mjs +0 -277
  815. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-ai.test.mjs +0 -299
  816. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-character.test.mjs +0 -85
  817. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-combat.test.mjs +0 -106
  818. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-effect.test.mjs +0 -108
  819. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-gas.test.mjs +0 -96
  820. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-interaction.test.mjs +0 -122
  821. package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-inventory.test.mjs +0 -146
  822. package/mcps/unreal_mcp/tests/mcp-tools/utility/behavior-tree-get-tree.test.mjs +0 -233
  823. package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-audio.test.mjs +0 -160
  824. package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-behavior-tree.test.mjs +0 -223
  825. package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-networking.test.mjs +0 -635
  826. package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-sequence.test.mjs +0 -95
  827. package/mcps/unreal_mcp/tests/mcp-tools/world/build-environment.test.mjs +0 -282
  828. package/mcps/unreal_mcp/tests/mcp-tools/world/manage-geometry.test.mjs +0 -130
  829. package/mcps/unreal_mcp/tests/mcp-tools/world/manage-level-structure.test.mjs +0 -149
  830. package/mcps/unreal_mcp/tests/mcp-tools/world/manage-pcg.test.mjs +0 -471
  831. package/mcps/unreal_mcp/tests/mcp-tools/world/rendering-cases.cjs +0 -775
  832. package/mcps/unreal_mcp/tests/mcp-tools/world/rendering.test.mjs +0 -15
  833. package/mcps/unreal_mcp/tests/native-mcp-parity-audit.mjs +0 -260
  834. package/mcps/unreal_mcp/tests/native-mcp-source-parser.mjs +0 -229
  835. package/mcps/unreal_mcp/tests/native-mcp-typescript-parity-parser.mjs +0 -121
  836. package/mcps/unreal_mcp/tests/parameter-audit-cli.mjs +0 -23
  837. package/mcps/unreal_mcp/tests/parameter-audit-context.mjs +0 -14
  838. package/mcps/unreal_mcp/tests/parameter-audit-coverage.mjs +0 -164
  839. package/mcps/unreal_mcp/tests/parameter-audit-schema.mjs +0 -190
  840. package/mcps/unreal_mcp/tests/parameter-audit-suites.mjs +0 -218
  841. package/mcps/unreal_mcp/tests/parameter-combination-audit.mjs +0 -37
  842. package/mcps/unreal_mcp/tests/test-runner-response-utils.mjs +0 -132
  843. package/mcps/unreal_mcp/tests/test-runner.mjs +0 -1798
  844. package/mcps/unreal_mcp/tests/unit/automation/bridge_host_validation.test.ts +0 -165
  845. package/mcps/unreal_mcp/tests/unit/config.test.ts +0 -205
  846. package/mcps/unreal_mcp/tests/unit/native_mcp_parity_audit.test.ts +0 -281
  847. package/mcps/unreal_mcp/tests/unit/native_mcp_parity_comment_filtering.test.ts +0 -175
  848. package/mcps/unreal_mcp/tests/unit/parameter_audit_schema.test.ts +0 -273
  849. package/mcps/unreal_mcp/tests/unit/plugin/automation_event_stream_contracts.test.ts +0 -195
  850. package/mcps/unreal_mcp/tests/unit/plugin/environment_asset_name_contracts.test.ts +0 -115
  851. package/mcps/unreal_mcp/tests/unit/plugin/environment_build_adapter_contracts.test.ts +0 -377
  852. package/mcps/unreal_mcp/tests/unit/plugin/environment_snapshot_path_contracts.test.ts +0 -122
  853. package/mcps/unreal_mcp/tests/unit/plugin/handler_routing_contracts.test.ts +0 -120
  854. package/mcps/unreal_mcp/tests/unit/plugin/level_lighting_contracts.test.ts +0 -125
  855. package/mcps/unreal_mcp/tests/unit/plugin/plugin_manifest_contracts.test.ts +0 -154
  856. package/mcps/unreal_mcp/tests/unit/plugin/plugin_packaging_contracts.test.ts +0 -124
  857. package/mcps/unreal_mcp/tests/unit/plugin/runtime_behavior_contracts.test.ts +0 -372
  858. package/mcps/unreal_mcp/tests/unit/plugin/security_contracts.test.ts +0 -81
  859. package/mcps/unreal_mcp/tests/unit/plugin/source_structure.test.ts +0 -101
  860. package/mcps/unreal_mcp/tests/unit/plugin/source_structure_contracts.test.ts +0 -103
  861. package/mcps/unreal_mcp/tests/unit/plugin/websocket_origin_contracts.test.ts +0 -25
  862. package/mcps/unreal_mcp/tests/unit/server_shutdown_contracts.test.ts +0 -33
  863. package/mcps/unreal_mcp/tests/unit/source_structure.test.ts +0 -79
  864. package/mcps/unreal_mcp/tests/unit/test_runner.test.ts +0 -342
  865. package/mcps/unreal_mcp/tests/unit/test_runner_response_utils.test.ts +0 -105
  866. package/mcps/unreal_mcp/tests/unit/tools/asset_handlers_security.test.ts +0 -246
  867. package/mcps/unreal_mcp/tests/unit/tools/behavior_tree_get_tree.test.ts +0 -20
  868. package/mcps/unreal_mcp/tests/unit/tools/blueprint_handlers.test.ts +0 -122
  869. package/mcps/unreal_mcp/tests/unit/tools/editor.test.ts +0 -56
  870. package/mcps/unreal_mcp/tests/unit/tools/handler_structure.test.ts +0 -59
  871. package/mcps/unreal_mcp/tests/unit/tools/inspect_handlers.test.ts +0 -231
  872. package/mcps/unreal_mcp/tests/unit/tools/level.test.ts +0 -56
  873. package/mcps/unreal_mcp/tests/unit/tools/level_security.test.ts +0 -45
  874. package/mcps/unreal_mcp/tests/unit/tools/lighting_timeout_propagation.test.ts +0 -123
  875. package/mcps/windows-computer-use-mcp/cua-reports/app-1781542686.png +0 -0
  876. package/mcps/windows-computer-use-mcp/cua-reports/bridge-1781542694.png +0 -0
  877. package/mcps/windows-computer-use-mcp/cua-reports/bridge-ok-1781442393.png +0 -0
  878. package/mcps/windows-computer-use-mcp/cua-reports/bridge-ok-1781442915.png +0 -0
  879. package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781444105.png +0 -0
  880. package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781444214.png +0 -0
  881. package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781457035.png +0 -0
  882. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781440024.png +0 -0
  883. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781440234.png +0 -0
  884. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781442383.png +0 -0
  885. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781442906.png +0 -0
  886. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781444096.png +0 -0
  887. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781444209.png +0 -0
  888. package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781457029.png +0 -0
  889. package/mcps/windows-computer-use-mcp/cua-reports/nav/dashboard-1781542713.png +0 -0
  890. package/mcps/windows-computer-use-mcp/cua-reports/nav/help-1781542738.png +0 -0
  891. package/mcps/windows-computer-use-mcp/cua-reports/nav/logging-1781542722.png +0 -0
  892. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-dashboard-1781444225.png +0 -0
  893. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-dashboard-1781457051.png +0 -0
  894. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-help-1781444245.png +0 -0
  895. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-help-1781457075.png +0 -0
  896. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-logging-1781444232.png +0 -0
  897. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-logging-1781457059.png +0 -0
  898. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-settings-1781444239.png +0 -0
  899. package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-settings-1781457067.png +0 -0
  900. package/mcps/windows-computer-use-mcp/cua-reports/nav/settings-1781542730.png +0 -0
  901. package/mcps/windows-computer-use-mcp/cua-reports/nav-dashboard-1781442925.png +0 -0
  902. package/mcps/windows-computer-use-mcp/cua-reports/nav-help-1781442941.png +0 -0
  903. package/mcps/windows-computer-use-mcp/cua-reports/nav-logging-1781442930.png +0 -0
  904. package/mcps/windows-computer-use-mcp/cua-reports/nav-settings-1781442936.png +0 -0
  905. package/mcps/windows-computer-use-mcp/docs/ARCHITECTURE.md +0 -46
  906. package/mcps/windows-computer-use-mcp/docs/ASSESSMENT_BY_CURSOR_2026-06-14_CUA_NSIS.md +0 -383
  907. package/mcps/windows-computer-use-mcp/docs/AUTOMATION_ASSERT_SPEC.md +0 -202
  908. package/mcps/windows-computer-use-mcp/docs/CUA_PARITY.md +0 -39
  909. package/mcps/windows-computer-use-mcp/docs/DEVELOPMENT.md +0 -51
  910. package/mcps/windows-computer-use-mcp/docs/MEMOPS_CUA.md +0 -147
  911. package/mcps/windows-computer-use-mcp/docs/PRD.md +0 -93
  912. package/mcps/windows-computer-use-mcp/docs/README.md +0 -34
  913. package/mcps/windows-computer-use-mcp/docs/ROADMAP.md +0 -142
  914. package/mcps/windows-computer-use-mcp/docs/SAFETY.md +0 -138
  915. package/mcps/windows-computer-use-mcp/docs/TESTING.md +0 -90
  916. package/mcps/windows-computer-use-mcp/docs/TOOLS.md +0 -80
  917. package/mcps/windows-computer-use-mcp/docs/TOOL_DOCSTRING_STANDARD.md +0 -538
  918. package/mcps/windows-computer-use-mcp/docs/_stale/AHK_VS_PYWINAUTO_COMPARISON.md +0 -353
  919. package/mcps/windows-computer-use-mcp/docs/_stale/ASSESSMENT.md +0 -54
  920. package/mcps/windows-computer-use-mcp/docs/_stale/ASSESSMENT_2026-06-08.md +0 -309
  921. package/mcps/windows-computer-use-mcp/docs/_stale/COMPLETE_DOCUMENTATION_STRUCTURE.md +0 -5
  922. package/mcps/windows-computer-use-mcp/docs/_stale/CUA_ASSISTANT_TODO.md +0 -84
  923. package/mcps/windows-computer-use-mcp/docs/_stale/CUA_PARITY_ROADMAP.md +0 -81
  924. package/mcps/windows-computer-use-mcp/docs/_stale/CUA_ROADMAP.md +0 -306
  925. package/mcps/windows-computer-use-mcp/docs/_stale/DESKTOP_APP.md +0 -125
  926. package/mcps/windows-computer-use-mcp/docs/_stale/DOCUMENTATION_INDEX.md +0 -59
  927. package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_CRITICISM_ANALYSIS.md +0 -259
  928. package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_PLATFORM.md +0 -175
  929. package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_RESCAN_GUIDE.md +0 -216
  930. package/mcps/windows-computer-use-mcp/docs/_stale/GOLD_STATUS_ACHIEVEMENT.md +0 -197
  931. package/mcps/windows-computer-use-mcp/docs/_stale/LLM_REPO_CONTEXT.md +0 -7
  932. package/mcps/windows-computer-use-mcp/docs/_stale/MCP_PRODUCTION_CHECKLIST.md +0 -105
  933. package/mcps/windows-computer-use-mcp/docs/_stale/OFFICE_BACKGROUND_MATRIX.md +0 -19
  934. package/mcps/windows-computer-use-mcp/docs/_stale/OPERATOR_PROTOCOL.md +0 -37
  935. package/mcps/windows-computer-use-mcp/docs/_stale/ORGANIZATION_SUMMARY.md +0 -305
  936. package/mcps/windows-computer-use-mcp/docs/_stale/RENAME-TO-AUTOMATION-MCP.md +0 -191
  937. package/mcps/windows-computer-use-mcp/docs/_stale/STATUS_REPORT.md +0 -288
  938. package/mcps/windows-computer-use-mcp/docs/_stale/TARGETS_PAGE_SKETCH.md +0 -977
  939. package/mcps/windows-computer-use-mcp/docs/_stale/TOOL_DOCSTRING_MIGRATION.md +0 -365
  940. package/mcps/windows-computer-use-mcp/docs/_stale/USAGE_SCENARIOS.md +0 -697
  941. package/mcps/windows-computer-use-mcp/docs/_stale/desktop-state-tool.md +0 -464
  942. package/mcps/windows-computer-use-mcp/docs/_stale/development/README.md +0 -18
  943. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/AI_DEVELOPMENT_RULES.md +0 -928
  944. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/AI_DEVELOPMENT_TOOLS_COMPARISON.md +0 -364
  945. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/BULLETPROOF_MCP_GUIDE.md +0 -793
  946. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/DEBUGGING_LESSONS_LEARNED.md +0 -635
  947. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/DEVELOPMENT_PAIN_POINTS.md +0 -699
  948. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/FILE_VALIDATION_COMPLETE.md +0 -410
  949. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/FILE_VALIDATION_GUIDE.md +0 -575
  950. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/LINK_PARSER_FIX.md +0 -769
  951. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/MCP_SYNC_DEBUGGING_GUIDE.md +0 -512
  952. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/PYTHON_DEPENDENCY_HELL_FIX.md +0 -568
  953. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/PYTHON_SNIPPETS_USAGE_GUIDE.md +0 -717
  954. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/README.md +0 -25
  955. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYNC_HEALTH_IMPROVEMENTS_SUMMARY.md +0 -496
  956. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYNC_HEALTH_INTEGRATION.md +0 -381
  957. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYSTEMATIC_PROJECT_UPDATES.md +0 -532
  958. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-prompt-templates-vs-docstrings.md +0 -657
  959. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-tool-docstring-best-practices.md +0 -439
  960. package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-tool-documentation-standards.md +0 -1153
  961. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/CI_CD_GLAMA_OPTIMIZATION_GUIDE.md +0 -850
  962. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_CRITICISM_ANALYSIS.md +0 -259
  963. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_OPTIMIZATION_SUMMARY.md +0 -204
  964. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_PLATFORM.md +0 -175
  965. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_RESCAN_GUIDE.md +0 -216
  966. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_GITHUB_APP_SETUP.md +0 -199
  967. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_INTEGRATION.md +0 -181
  968. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_RESCAN_EMAIL.txt +0 -43
  969. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GOLD_STATUS_ACHIEVEMENT.md +0 -197
  970. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GOLD_STATUS_UPDATE_2025_10_08.md +0 -378
  971. package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/README.md +0 -632
  972. package/mcps/windows-computer-use-mcp/docs/_stale/legacy/requirements-fastmcp.txt +0 -8
  973. package/mcps/windows-computer-use-mcp/docs/_stale/legacy/requirements_minimal.txt +0 -4
  974. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/CLAUDE_DESKTOP_DEBUGGING.md +0 -561
  975. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/CONTAINERIZATION_GUIDELINES.md +0 -707
  976. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/MCP_PRODUCTION_CHECKLIST.md +0 -101
  977. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/MONITORING_STACK_DEPLOYMENT.md +0 -532
  978. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/README.md +0 -266
  979. package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/TROUBLESHOOTING_FASTMCP_2.12.md +0 -670
  980. package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/MCPB_BUILDING_GUIDE.md +0 -1921
  981. package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/MCPB_IMPLEMENTATION_SUMMARY.md +0 -387
  982. package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/PYPI_PUBLISHING_GUIDE.md +0 -789
  983. package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/README.md +0 -404
  984. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/COMMUNITY_AND_SUPPORT.md +0 -976
  985. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/LANGUAGE_SERVER_PROTOCOL_EXPLAINED.md +0 -416
  986. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/MCP_TOOL_CORRUPTION_ISSUE.md +0 -279
  987. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_ALTERNATIVES.md +0 -308
  988. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_COLOR_FIX_2025_10_08.md +0 -187
  989. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_COMPLETE_GUIDE.md +0 -1259
  990. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_NUCLEAR_REINSTALL_2025_10_08.md +0 -196
  991. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NPP_WHITE_ON_WHITE_BATTLE_PLAN.md +0 -336
  992. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/PLUGIN_ECOSYSTEM_COMPREHENSIVE.md +0 -887
  993. package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/README.md +0 -472
  994. package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BACKUP_AND_RECOVERY_GUIDE.md +0 -455
  995. package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BRANCH_PROTECTION_SETTINGS.md +0 -236
  996. package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BRANCH_STRATEGY_AND_AI_WORKFLOW.md +0 -616
  997. package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/README.md +0 -333
  998. package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_COPY_TO_OTHER_REPOS.md +0 -159
  999. package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_GUIDE.md +0 -632
  1000. package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_INSTALL_AND_TEST.md +0 -569
  1001. package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_NEXT_STEPS.md +0 -351
  1002. package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_QUICK_INSTALL.md +0 -195
  1003. package/mcps/windows-computer-use-mcp/docs/_stale/state-tool-implementation.md +0 -498
  1004. package/mcps/windows-computer-use-mcp/docs/composing-with-playwright.md +0 -55
  1005. package/mcps/windows-computer-use-mcp/docs/cua-nsis-certification.md +0 -101
  1006. package/mcps/windows-computer-use-mcp/docs/ocr.md +0 -107
  1007. package/mcps/windows-computer-use-mcp/docs/py-stack.md +0 -47
  1008. package/mcps/windows-computer-use-mcp/native/icons/icon.png +0 -0
  1009. package/mcps/windows-computer-use-mcp/screenshot_demo.png +0 -0
  1010. package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/export_complete_toast.png +0 -0
  1011. package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/export_dialog_title.png +0 -0
  1012. package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/file_dialog_path_field.png +0 -0
  1013. package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/sample_tile_female.png +0 -0
  1014. package/mcps/windows-computer-use-mcp/tests/README.md +0 -155
  1015. package/mcps/windows-computer-use-mcp/tests/__init__.py +0 -1
  1016. package/mcps/windows-computer-use-mcp/tests/conftest.py +0 -281
  1017. package/mcps/windows-computer-use-mcp/tests/conftest_env.py +0 -116
  1018. package/mcps/windows-computer-use-mcp/tests/e2e/conftest.py +0 -96
  1019. package/mcps/windows-computer-use-mcp/tests/e2e/test_libreoffice_cua_loop.py +0 -72
  1020. package/mcps/windows-computer-use-mcp/tests/test_app_integration.py +0 -83
  1021. package/mcps/windows-computer-use-mcp/tests/test_app_profiles.py +0 -28
  1022. package/mcps/windows-computer-use-mcp/tests/test_automation_assert.py +0 -185
  1023. package/mcps/windows-computer-use-mcp/tests/test_automation_dialog.py +0 -43
  1024. package/mcps/windows-computer-use-mcp/tests/test_automation_elements.py +0 -138
  1025. package/mcps/windows-computer-use-mcp/tests/test_automation_keyboard.py +0 -57
  1026. package/mcps/windows-computer-use-mcp/tests/test_automation_mouse.py +0 -57
  1027. package/mcps/windows-computer-use-mcp/tests/test_automation_shortcut.py +0 -41
  1028. package/mcps/windows-computer-use-mcp/tests/test_automation_task.py +0 -115
  1029. package/mcps/windows-computer-use-mcp/tests/test_automation_windows.py +0 -105
  1030. package/mcps/windows-computer-use-mcp/tests/test_cameras_api.py +0 -43
  1031. package/mcps/windows-computer-use-mcp/tests/test_cua_parity.py +0 -51
  1032. package/mcps/windows-computer-use-mcp/tests/test_dependency_failures.py +0 -39
  1033. package/mcps/windows-computer-use-mcp/tests/test_desktop_state.py +0 -99
  1034. package/mcps/windows-computer-use-mcp/tests/test_face_recognition.py +0 -238
  1035. package/mcps/windows-computer-use-mcp/tests/test_face_recognition_api.py +0 -161
  1036. package/mcps/windows-computer-use-mcp/tests/test_images/README.md +0 -28
  1037. package/mcps/windows-computer-use-mcp/tests/test_mission.py +0 -42
  1038. package/mcps/windows-computer-use-mcp/tests/test_portmanteau_windows_mock.py +0 -173
  1039. package/mcps/windows-computer-use-mcp/tests/test_portmanteau_windows_real.py +0 -139
  1040. package/mcps/windows-computer-use-mcp/tests/test_retry.py +0 -26
  1041. package/mcps/windows-computer-use-mcp/tests/test_safety_api.py +0 -24
  1042. package/mcps/windows-computer-use-mcp/tests/test_template_library.py +0 -53
  1043. package/mcps/windows-computer-use-mcp/tests/test_utils.py +0 -185
  1044. package/mcps/windows-computer-use-mcp/web_sota/src-tauri/icons/icon.png +0 -0
  1045. package/skills/global_config/google-sheets-automation/SKILL.md +0 -150
  1046. package/skills/global_config/senior-fullstack/SKILL.md +0 -221
  1047. package/skills/global_config/senior-fullstack/references/architecture_patterns.md +0 -103
  1048. package/skills/global_config/senior-fullstack/references/development_workflows.md +0 -103
  1049. package/skills/global_config/senior-fullstack/references/tech_stack_guide.md +0 -103
  1050. package/skills/global_config/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
  1051. package/skills/global_config/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
  1052. package/skills/global_config/senior-fullstack/scripts/project_scaffolder.py +0 -114
@@ -1,953 +0,0 @@
1
- """Tests for the Blender add-on command handler using mocked bpy."""
2
-
3
- import os
4
- import sys
5
- import tempfile
6
- import threading
7
- import types
8
- from unittest.mock import MagicMock, patch
9
-
10
- import pytest
11
-
12
-
13
- def _create_mock_bpy():
14
- """Create a mock bpy module for testing outside Blender."""
15
- bpy = MagicMock()
16
- handlers_module = types.ModuleType("bpy.app.handlers")
17
- handlers_module.load_post = []
18
- handlers_module.persistent = lambda fn: fn
19
- bpy.app.handlers = handlers_module
20
-
21
- # Mock scene
22
- scene = MagicMock()
23
- scene.name = "Scene"
24
- scene.frame_current = 1
25
- scene.frame_start = 1
26
- scene.frame_end = 250
27
- scene.render.engine = "BLENDER_EEVEE"
28
- scene.render.resolution_x = 1920
29
- scene.render.resolution_y = 1080
30
- scene.frame_set = MagicMock()
31
-
32
- # Mock objects
33
- cube = MagicMock()
34
- cube.name = "Cube"
35
- cube.type = "MESH"
36
- cube.location = MagicMock()
37
- cube.location.__iter__ = lambda self: iter([0.0, 0.0, 0.0])
38
- cube.location.__getitem__ = lambda self, i: [0.0, 0.0, 0.0][i]
39
- cube.location.x = 0.0
40
- cube.location.y = 0.0
41
- cube.location.z = 0.0
42
- cube.rotation_euler = MagicMock()
43
- cube.rotation_euler.__iter__ = lambda self: iter([0.0, 0.0, 0.0])
44
- cube.scale = MagicMock()
45
- cube.scale.__iter__ = lambda self: iter([1.0, 1.0, 1.0])
46
- cube.visible_get.return_value = True
47
- cube.parent = None
48
- cube.children = []
49
-
50
- camera = MagicMock()
51
- camera.name = "Camera"
52
- camera.type = "CAMERA"
53
- camera.location = MagicMock()
54
- camera.location.__iter__ = lambda self: iter([7.0, -6.0, 5.0])
55
- camera.visible_get.return_value = True
56
- camera.parent = None
57
- camera.children = []
58
-
59
- scene.objects = [cube, camera]
60
-
61
- bpy.context.scene = scene
62
- bpy.context.collection = MagicMock()
63
- bpy.context.preferences = MagicMock()
64
- bpy.context.preferences.addons = {}
65
- bpy.app.timers.register = MagicMock()
66
- bpy.app.timers.is_registered = MagicMock(return_value=False)
67
- bpy.ops.ed.undo_push.poll.return_value = False
68
- bpy.path.abspath = lambda path: path
69
-
70
- # Mock data — use MagicMock for Blender collections (they support .get() and iteration)
71
- objects_collection = MagicMock()
72
- objects_collection.keys = lambda: ["Cube", "Camera"]
73
- objects_collection.get = lambda name: {"Cube": cube, "Camera": camera}.get(name)
74
-
75
- materials_collection = MagicMock()
76
- materials_collection.__iter__ = lambda self: iter([])
77
- materials_collection.get = MagicMock(return_value=None)
78
- materials_collection.new = MagicMock()
79
-
80
- bpy.data.objects = objects_collection
81
- bpy.data.materials = materials_collection
82
- bpy.data.filepath = "/tmp/mock_scene.blend"
83
-
84
- return bpy
85
-
86
-
87
- @pytest.fixture(autouse=True)
88
- def mock_bpy():
89
- """Install mock bpy before importing the addon."""
90
- mock = _create_mock_bpy()
91
- app_module = types.ModuleType("bpy.app")
92
- app_module.handlers = mock.app.handlers
93
- app_module.timers = mock.app.timers
94
- sys.modules["bpy"] = mock
95
- sys.modules["bpy.app"] = app_module
96
- sys.modules["bpy.app.handlers"] = mock.app.handlers
97
- # Also mock mathutils since it's used in the execution namespace
98
- if "mathutils" not in sys.modules:
99
- sys.modules["mathutils"] = MagicMock()
100
- yield mock
101
- del sys.modules["bpy"]
102
- del sys.modules["bpy.app"]
103
- del sys.modules["bpy.app.handlers"]
104
- if "mathutils" in sys.modules and isinstance(sys.modules["mathutils"], MagicMock):
105
- del sys.modules["mathutils"]
106
-
107
-
108
- @pytest.fixture
109
- def addon_module(mock_bpy):
110
- # Force reimport with mocked bpy
111
- if "addon" in sys.modules:
112
- del sys.modules["addon"]
113
- # We need to import the addon's __init__ as a module
114
- import importlib.util
115
-
116
- spec = importlib.util.spec_from_file_location("addon", "addon/__init__.py")
117
- addon = importlib.util.module_from_spec(spec)
118
- spec.loader.exec_module(addon)
119
- return addon
120
-
121
-
122
- @pytest.fixture
123
- def handler(addon_module):
124
- return addon_module.CommandHandler()
125
-
126
-
127
- class TestSceneCommands:
128
- def test_scene_get_info(self, handler):
129
- result = handler.handle("scene.get_info", {})
130
- assert result["name"] == "Scene"
131
- assert result["frame_current"] == 1
132
- assert result["render_engine"] == "BLENDER_EEVEE"
133
- assert result["object_count"] == 2
134
-
135
- def test_scene_list_objects(self, handler):
136
- result = handler.handle("scene.list_objects", {})
137
- assert len(result["objects"]) == 2
138
- names = [o["name"] for o in result["objects"]]
139
- assert "Cube" in names
140
- assert "Camera" in names
141
-
142
- def test_scene_list_objects_type_filter(self, handler):
143
- result = handler.handle("scene.list_objects", {"type": "MESH"})
144
- assert len(result["objects"]) == 1
145
- assert result["objects"][0]["name"] == "Cube"
146
-
147
-
148
- class TestObjectCommands:
149
- def test_build_primitive_pydata_cube(self, addon_module):
150
- verts, faces = addon_module._build_primitive_pydata("cube", 2.0)
151
- assert len(verts) == 8
152
- assert len(faces) == 6
153
-
154
- def test_build_primitive_pydata_sphere(self, addon_module):
155
- verts, faces = addon_module._build_primitive_pydata("sphere", 2.0)
156
- assert len(verts) > 10
157
- assert len(faces) > 10
158
-
159
- def test_build_primitive_pydata_rejects_unknown_shape(self, addon_module):
160
- with pytest.raises(ValueError, match="Unknown mesh type"):
161
- addon_module._build_primitive_pydata("bad-shape", 2.0)
162
-
163
- def test_get_transform(self, handler):
164
- result = handler.handle("object.get_transform", {"name": "Cube"})
165
- assert result["name"] == "Cube"
166
- assert "location" in result
167
- assert "rotation_euler" in result
168
- assert "scale" in result
169
-
170
- def test_get_transform_missing_object(self, handler):
171
- with pytest.raises(ValueError, match="not found"):
172
- handler.handle("object.get_transform", {"name": "NonExistent"})
173
-
174
- def test_unknown_command(self, handler):
175
- with pytest.raises(ValueError, match="Unknown command"):
176
- handler.handle("nonexistent.command", {})
177
-
178
- def test_get_hierarchy_full_scene(self, handler):
179
- result = handler.handle("object.get_hierarchy", {})
180
- assert "roots" in result
181
- assert len(result["roots"]) == 2
182
-
183
-
184
- class TestMaterialCommands:
185
- def test_material_list_empty(self, handler, mock_bpy):
186
- mock_bpy.data.materials = []
187
- result = handler.handle("material.list", {})
188
- assert result["materials"] == []
189
-
190
-
191
- class TestServerExecution:
192
- def test_mutation_request_skips_undo_when_poll_fails(self, addon_module, mock_bpy):
193
- server = addon_module.BlenderMCPServer()
194
- request = {
195
- "id": "1",
196
- "command": "object.translate",
197
- "params": {"name": "Cube", "offset": [1, 2, 3]},
198
- }
199
-
200
- result = server._process_request(request)
201
-
202
- assert result["success"] is True
203
- mock_bpy.ops.ed.undo_push.assert_not_called()
204
-
205
- def test_submit_request_runs_through_queue(self, addon_module):
206
- server = addon_module.BlenderMCPServer()
207
- request = {"id": "abc", "command": "scene.get_info", "params": {}}
208
- expected = {"id": "abc", "success": True, "result": {"ok": True}}
209
- response_holder = {}
210
-
211
- with patch.object(server, "_process_request", return_value=expected) as process:
212
- worker = threading.Thread(
213
- target=lambda: response_holder.setdefault("response", server._submit_request(request))
214
- )
215
- worker.start()
216
- server._drain_request_queue()
217
- worker.join(timeout=1)
218
-
219
- assert response_holder["response"] == expected
220
- process.assert_called_once_with(request)
221
-
222
- def test_request_queue_timer_is_registered_persistent(self, addon_module, mock_bpy):
223
- server = addon_module.BlenderMCPServer()
224
-
225
- server._register_request_queue_timer()
226
-
227
- mock_bpy.app.timers.register.assert_called_once_with(
228
- server._drain_timer_callback,
229
- first_interval=0.01,
230
- persistent=True,
231
- )
232
-
233
- def test_ensure_server_running_reregisters_timer_for_healthy_server(self, addon_module):
234
- server = addon_module.BlenderMCPServer()
235
- server._running = True
236
- server._server_socket = object()
237
- server._thread = MagicMock()
238
- server._thread.is_alive.return_value = True
239
- server._register_request_queue_timer = MagicMock()
240
- addon_module._server = server
241
-
242
- result = addon_module._ensure_server_running()
243
-
244
- assert result is None
245
- server._register_request_queue_timer.assert_called_once_with()
246
-
247
- def test_python_execute_does_not_auto_push_undo(self, addon_module, mock_bpy):
248
- server = addon_module.BlenderMCPServer()
249
- request = {
250
- "id": "2",
251
- "command": "python.execute",
252
- "params": {"code": "__result__ = 1"},
253
- }
254
-
255
- result = server._process_request(request)
256
-
257
- assert result["success"] is True
258
- mock_bpy.ops.ed.undo_push.assert_not_called()
259
-
260
-
261
- class TestPythonExecute:
262
- """Tests for the python.execute command handler."""
263
-
264
- def test_execution_namespace_exposes_safe_mesh_helper(self, handler):
265
- result = handler.handle(
266
- "python.execute",
267
- {
268
- "code": "__result__ = callable(mcp_create_mesh) and math.pi > 3",
269
- },
270
- )
271
- assert result["result"] is True
272
-
273
- def test_inline_code_returns_result(self, handler):
274
- result = handler.handle(
275
- "python.execute",
276
- {
277
- "code": "__result__ = {'answer': 42}",
278
- },
279
- )
280
- assert result["result"] == {"answer": 42}
281
- assert result["error"] is None
282
- assert "duration_seconds" in result
283
-
284
- def test_inline_code_captures_stdout(self, handler):
285
- result = handler.handle(
286
- "python.execute",
287
- {
288
- "code": "print('hello world')",
289
- },
290
- )
291
- assert "hello world" in result["stdout"]
292
- assert result["error"] is None
293
-
294
- def test_inline_code_captures_stderr(self, handler):
295
- result = handler.handle(
296
- "python.execute",
297
- {
298
- "code": "import sys; sys.stderr.write('warn\\n')",
299
- },
300
- )
301
- assert "warn" in result["stderr"]
302
-
303
- def test_inline_code_exception_returns_error(self, handler):
304
- result = handler.handle(
305
- "python.execute",
306
- {
307
- "code": "raise ValueError('boom')",
308
- },
309
- )
310
- assert result["error"] is not None
311
- assert "ValueError" in result["error"]
312
- assert "boom" in result["error"]
313
- assert result["result"] is None
314
-
315
- def test_args_passed_to_namespace(self, handler):
316
- result = handler.handle(
317
- "python.execute",
318
- {
319
- "code": "__result__ = args['x'] + args['y']",
320
- "args": {"x": 10, "y": 20},
321
- },
322
- )
323
- assert result["result"] == 30
324
-
325
- def test_bpy_available_in_namespace(self, handler):
326
- result = handler.handle(
327
- "python.execute",
328
- {
329
- "code": "__result__ = bpy.context.scene.name",
330
- },
331
- )
332
- assert result["result"] == "Scene"
333
-
334
- def test_no_result_set_returns_null(self, handler):
335
- result = handler.handle(
336
- "python.execute",
337
- {
338
- "code": "x = 1 + 1",
339
- },
340
- )
341
- assert result["result"] is None
342
- assert result["error"] is None
343
-
344
- def test_non_json_result_falls_back_to_repr(self, handler):
345
- result = handler.handle(
346
- "python.execute",
347
- {
348
- "code": "__result__ = {1, 2, 3}",
349
- },
350
- )
351
- # Sets aren't JSON-serializable, should get repr
352
- assert result["result"] is not None
353
- assert result["error"] is None
354
-
355
- def test_missing_code_and_script_raises(self, handler):
356
- with pytest.raises(ValueError, match="Either"):
357
- handler.handle("python.execute", {})
358
-
359
- def test_both_code_and_script_raises(self, handler):
360
- with pytest.raises(ValueError, match="not both"):
361
- handler.handle(
362
- "python.execute",
363
- {
364
- "code": "pass",
365
- "script_path": "/some/file.py",
366
- },
367
- )
368
-
369
- def test_script_path_execution(self, handler, addon_module):
370
- with tempfile.TemporaryDirectory() as tmpdir:
371
- script = os.path.join(tmpdir, "test_script.py")
372
- with open(script, "w") as f:
373
- f.write("__result__ = args['name'] + ' executed'\n")
374
-
375
- # Set the approved roots to include tmpdir
376
- addon_module.APPROVED_SCRIPT_ROOTS = [tmpdir]
377
- try:
378
- result = handler.handle(
379
- "python.execute",
380
- {
381
- "script_path": script,
382
- "args": {"name": "test"},
383
- },
384
- )
385
- assert result["result"] == "test executed"
386
- assert result["error"] is None
387
- finally:
388
- addon_module.APPROVED_SCRIPT_ROOTS = []
389
-
390
- def test_script_path_not_found_raises(self, handler, addon_module):
391
- addon_module.APPROVED_SCRIPT_ROOTS = ["/tmp"]
392
- try:
393
- with pytest.raises(FileNotFoundError, match="not found"):
394
- handler.handle(
395
- "python.execute",
396
- {
397
- "script_path": "/tmp/nonexistent_script_abc123.py",
398
- },
399
- )
400
- finally:
401
- addon_module.APPROVED_SCRIPT_ROOTS = []
402
-
403
- def test_blocked_module_import(self, handler):
404
- result = handler.handle(
405
- "python.execute",
406
- {
407
- "code": "import subprocess",
408
- },
409
- )
410
- assert result["error"] is not None
411
- assert "blocked" in result["error"].lower() or "ImportError" in result["error"]
412
-
413
- def test_shutil_import_is_allowed(self, handler):
414
- result = handler.handle(
415
- "python.execute",
416
- {
417
- "code": "import shutil\n__result__ = hasattr(shutil, 'rmtree')",
418
- },
419
- )
420
- assert result["error"] is None
421
- assert result["result"] is True
422
-
423
- def test_blocked_import_hook_does_not_mutate_global_builtins(self, handler):
424
- import builtins as pybuiltins
425
-
426
- original_import = pybuiltins.__import__
427
- handler.handle("python.execute", {"code": "import subprocess"})
428
- assert pybuiltins.__import__ is original_import
429
-
430
- def test_allowed_module_import(self, handler):
431
- result = handler.handle(
432
- "python.execute",
433
- {
434
- "code": "import json; __result__ = json.dumps({'ok': True})",
435
- },
436
- )
437
- assert result["error"] is None
438
- assert result["result"] == '{"ok": true}'
439
-
440
-
441
- class TestPythonSandbox:
442
- """Tests for MCP-103 sandbox and path restrictions."""
443
-
444
- def test_script_outside_roots_rejected(self, handler, addon_module):
445
- with tempfile.TemporaryDirectory() as allowed_dir, tempfile.TemporaryDirectory() as forbidden_dir:
446
- script = os.path.join(forbidden_dir, "evil.py")
447
- with open(script, "w") as f:
448
- f.write("pass\n")
449
-
450
- addon_module.APPROVED_SCRIPT_ROOTS = [allowed_dir]
451
- try:
452
- with pytest.raises(PermissionError, match="outside approved"):
453
- handler.handle("python.execute", {"script_path": script})
454
- finally:
455
- addon_module.APPROVED_SCRIPT_ROOTS = []
456
-
457
- def test_script_inside_roots_accepted(self, handler, addon_module):
458
- with tempfile.TemporaryDirectory() as tmpdir:
459
- script = os.path.join(tmpdir, "good.py")
460
- with open(script, "w") as f:
461
- f.write("__result__ = 'ok'\n")
462
-
463
- addon_module.APPROVED_SCRIPT_ROOTS = [tmpdir]
464
- try:
465
- result = handler.handle("python.execute", {"script_path": script})
466
- assert result["result"] == "ok"
467
- finally:
468
- addon_module.APPROVED_SCRIPT_ROOTS = []
469
-
470
- def test_inline_code_disabled_rejects(self, handler, addon_module):
471
- addon_module.ALLOW_INLINE_CODE = False
472
- try:
473
- with pytest.raises(PermissionError, match="disabled"):
474
- handler.handle("python.execute", {"code": "pass"})
475
- finally:
476
- addon_module.ALLOW_INLINE_CODE = True
477
-
478
- def test_inline_code_enabled_allows(self, handler, addon_module):
479
- addon_module.ALLOW_INLINE_CODE = True
480
- result = handler.handle("python.execute", {"code": "__result__ = True"})
481
- assert result["result"] is True
482
-
483
- def test_runtime_preferences_are_applied(self, handler, addon_module, mock_bpy):
484
- prefs = MagicMock()
485
- prefs.safe_mode = True
486
- prefs.port = 9988
487
- prefs.allow_inline_code = False
488
- prefs.approved_script_roots = "/tmp/a;/tmp/b"
489
- mock_bpy.context.preferences.addons["addon"] = MagicMock(preferences=prefs)
490
-
491
- with pytest.raises(PermissionError, match="disabled"):
492
- handler.handle("python.execute", {"code": "pass"})
493
-
494
- assert addon_module.SAFE_MODE is True
495
- assert addon_module.PORT == 9988
496
- assert addon_module.ALLOW_INLINE_CODE is False
497
- assert addon_module.APPROVED_SCRIPT_ROOTS == ["/tmp/a", "/tmp/b"]
498
- assert addon_module.ALLOWED_PATHS == ["/tmp/a", "/tmp/b"]
499
-
500
- def test_non_py_script_rejected(self, handler, addon_module):
501
- with tempfile.TemporaryDirectory() as tmpdir:
502
- script = os.path.join(tmpdir, "script.txt")
503
- with open(script, "w") as f:
504
- f.write("pass\n")
505
-
506
- addon_module.APPROVED_SCRIPT_ROOTS = [tmpdir]
507
- try:
508
- with pytest.raises(ValueError, match=".py"):
509
- handler.handle("python.execute", {"script_path": script})
510
- finally:
511
- addon_module.APPROVED_SCRIPT_ROOTS = []
512
-
513
-
514
- class TestJobLifecycle:
515
- """Tests for MCP-104 async job support."""
516
-
517
- def test_execute_async_returns_job_id(self, handler):
518
- result = handler.handle(
519
- "python.execute_async",
520
- {
521
- "code": "__result__ = 'done'",
522
- },
523
- )
524
- assert "job_id" in result
525
- assert result["job_id"].startswith("job-")
526
-
527
- def test_job_status_for_unknown_job(self, handler):
528
- with pytest.raises(ValueError, match="Unknown job"):
529
- handler.handle("job.status", {"job_id": "job-nonexistent"})
530
-
531
- def test_job_list_returns_jobs(self, handler):
532
- result1 = handler.handle("python.execute_async", {"code": "pass"})
533
- listing = handler.handle("job.list", {})
534
- job_ids = [j["job_id"] for j in listing["jobs"]]
535
- assert result1["job_id"] in job_ids
536
-
537
- def test_job_cancel_sets_cancelled(self, handler, addon_module):
538
- result = handler.handle(
539
- "python.execute_async",
540
- {
541
- "code": "import time; time.sleep(10)",
542
- },
543
- )
544
- job_id = result["job_id"]
545
- cancel_result = handler.handle("job.cancel", {"job_id": job_id})
546
- assert cancel_result["status"] == "cancelled"
547
- assert cancel_result["cancellation_requested"] is True
548
-
549
- def test_job_cancel_running_marks_request_only(self, handler, addon_module):
550
- result = handler.handle("python.execute_async", {"code": "pass"})
551
- job_id = result["job_id"]
552
- with addon_module._job_manager._lock:
553
- addon_module._job_manager._jobs[job_id]["status"] = "running"
554
-
555
- cancel_result = handler.handle("job.cancel", {"job_id": job_id})
556
-
557
- assert cancel_result["status"] == "running"
558
- assert cancel_result["cancellation_requested"] is True
559
-
560
- status = handler.handle("job.status", {"job_id": job_id})
561
- assert status["status"] == "running"
562
- assert status["cancellation_requested"] is True
563
-
564
- def test_job_cancel_unknown_raises(self, handler):
565
- with pytest.raises(ValueError, match="Unknown job"):
566
- handler.handle("job.cancel", {"job_id": "job-nope"})
567
-
568
- def test_job_status_after_sync_execution(self, handler, addon_module):
569
- """Run the job via the timer callback and verify completion."""
570
- result = handler.handle(
571
- "python.execute_async",
572
- {
573
- "code": "__result__ = 'async_done'",
574
- },
575
- )
576
- job_id = result["job_id"]
577
-
578
- # Manually trigger the timer callback that executes the job
579
- addon_module._job_manager._execute_job(job_id)
580
-
581
- status = handler.handle("job.status", {"job_id": job_id})
582
- assert status["status"] == "succeeded"
583
- assert status["result"] == "async_done"
584
- assert status["error"] is None
585
-
586
- def test_failed_job_captures_error(self, handler, addon_module):
587
- result = handler.handle(
588
- "python.execute_async",
589
- {
590
- "code": "raise RuntimeError('async boom')",
591
- },
592
- )
593
- job_id = result["job_id"]
594
-
595
- addon_module._job_manager._execute_job(job_id)
596
-
597
- status = handler.handle("job.status", {"job_id": job_id})
598
- assert status["status"] == "failed"
599
- assert "RuntimeError" in status["error"]
600
- assert "async boom" in status["error"]
601
-
602
- def test_job_status_missing_id_raises(self, handler):
603
- with pytest.raises(ValueError, match="job_id"):
604
- handler.handle("job.status", {})
605
-
606
-
607
- class TestOutputBounding:
608
- """Tests for MCP-106 output size limits and diagnostics."""
609
-
610
- def test_stdout_is_capped(self, handler, addon_module):
611
- limit = addon_module.MAX_OUTPUT_SIZE
612
- result = handler.handle(
613
- "python.execute",
614
- {
615
- "code": f"print('x' * {limit + 1000})",
616
- },
617
- )
618
- assert len(result["stdout"]) <= limit + 200 # Allow for truncation message
619
- assert "truncated" in result["stdout"]
620
-
621
- def test_stderr_is_capped(self, handler, addon_module):
622
- limit = addon_module.MAX_OUTPUT_SIZE
623
- result = handler.handle(
624
- "python.execute",
625
- {
626
- "code": f"import sys; sys.stderr.write('e' * {limit + 500})",
627
- },
628
- )
629
- assert len(result["stderr"]) <= limit + 200
630
- assert "truncated" in result["stderr"]
631
-
632
- def test_short_output_not_capped(self, handler):
633
- result = handler.handle(
634
- "python.execute",
635
- {
636
- "code": "print('short')",
637
- },
638
- )
639
- assert "truncated" not in result["stdout"]
640
- assert "short" in result["stdout"]
641
-
642
- def test_last_execution_updated_on_success(self, handler, addon_module):
643
- handler.handle("python.execute", {"code": "__result__ = 1"})
644
- last = addon_module._last_execution
645
- assert last["status"] == "ok"
646
- assert last["request_id"] is not None
647
- assert last["request_id"].startswith("exec-")
648
- assert last["error_summary"] is None
649
-
650
- def test_last_execution_updated_on_error(self, handler, addon_module):
651
- handler.handle("python.execute", {"code": "raise RuntimeError('oops')"})
652
- last = addon_module._last_execution
653
- assert last["status"] == "error"
654
- assert "oops" in last["error_summary"]
655
-
656
- def test_last_execution_updated_by_job(self, handler, addon_module):
657
- result = handler.handle(
658
- "python.execute_async",
659
- {
660
- "code": "__result__ = 'job_done'",
661
- },
662
- )
663
- addon_module._job_manager._execute_job(result["job_id"])
664
- last = addon_module._last_execution
665
- assert last["status"] == "succeeded"
666
- assert last["request_id"] == result["job_id"]
667
-
668
- def test_truncate_helper(self, addon_module):
669
- assert addon_module._truncate("short", 100) == "short"
670
- assert addon_module._truncate("a" * 200, 10) == "a" * 10 + "…"
671
-
672
- def test_request_id_in_execution_result(self, handler, addon_module):
673
- """Every execution should track a request_id."""
674
- handler.handle("python.execute", {"code": "pass"})
675
- last = addon_module._last_execution
676
- assert last["request_id"] is not None
677
- assert last["duration_seconds"] is not None
678
-
679
-
680
- class TestExecutionControl:
681
- def test_sync_timeout_is_enforced(self, handler):
682
- result = handler.handle(
683
- "python.execute",
684
- {
685
- "code": "while True:\n pass",
686
- "timeout_seconds": 0.01,
687
- },
688
- )
689
- assert result["timed_out"] is True
690
- assert result["cancelled"] is False
691
- assert "timeout" in result["error"].lower()
692
-
693
- def test_async_cancellation_propagates_to_final_status(self, handler, addon_module):
694
- result = handler.handle(
695
- "python.execute_async",
696
- {
697
- "code": (
698
- "while True:\n if __cancel_event__.is_set():\n raise RuntimeError('stop requested')\n"
699
- ),
700
- "timeout_seconds": 1,
701
- },
702
- )
703
- job_id = result["job_id"]
704
- addon_module._job_manager.cancel(job_id)
705
- addon_module._job_manager._execute_job(job_id)
706
-
707
- status = handler.handle("job.status", {"job_id": job_id})
708
- assert status["status"] == "cancelled"
709
- assert status["cancellation_requested"] is True
710
-
711
-
712
- class TestResultSerialization:
713
- """Additional tests for JSON-safe result handling."""
714
-
715
- def test_nested_dict_result(self, handler):
716
- result = handler.handle(
717
- "python.execute",
718
- {
719
- "code": "__result__ = {'a': {'b': [1, 2, 3]}}",
720
- },
721
- )
722
- assert result["result"] == {"a": {"b": [1, 2, 3]}}
723
-
724
- def test_list_result(self, handler):
725
- result = handler.handle(
726
- "python.execute",
727
- {
728
- "code": "__result__ = [1, 'two', 3.0, None, True]",
729
- },
730
- )
731
- assert result["result"] == [1, "two", 3.0, None, True]
732
-
733
- def test_string_result(self, handler):
734
- result = handler.handle(
735
- "python.execute",
736
- {
737
- "code": "__result__ = 'hello'",
738
- },
739
- )
740
- assert result["result"] == "hello"
741
-
742
- def test_numeric_result(self, handler):
743
- result = handler.handle(
744
- "python.execute",
745
- {
746
- "code": "__result__ = 3.14159",
747
- },
748
- )
749
- assert result["result"] == 3.14159
750
-
751
- def test_bool_result(self, handler):
752
- result = handler.handle(
753
- "python.execute",
754
- {
755
- "code": "__result__ = False",
756
- },
757
- )
758
- assert result["result"] is False
759
-
760
- def test_object_result_uses_repr(self, handler):
761
- result = handler.handle(
762
- "python.execute",
763
- {
764
- "code": "class Foo: pass\n__result__ = Foo()",
765
- },
766
- )
767
- # Custom objects can't be JSON serialized, should get repr
768
- assert result["result"] is not None
769
- assert isinstance(result["result"], str)
770
-
771
-
772
- class TestAsyncInlineDisabled:
773
- """Verify inline code toggle works for async path too."""
774
-
775
- def test_async_inline_disabled_rejects(self, handler, addon_module):
776
- addon_module.ALLOW_INLINE_CODE = False
777
- try:
778
- with pytest.raises(PermissionError, match="disabled"):
779
- handler.handle("python.execute_async", {"code": "pass"})
780
- finally:
781
- addon_module.ALLOW_INLINE_CODE = True
782
-
783
- def test_async_script_path_outside_roots_rejected(self, handler, addon_module):
784
- with tempfile.TemporaryDirectory() as allowed_dir, tempfile.TemporaryDirectory() as forbidden_dir:
785
- script = os.path.join(forbidden_dir, "bad.py")
786
- with open(script, "w") as f:
787
- f.write("pass\n")
788
-
789
- addon_module.APPROVED_SCRIPT_ROOTS = [allowed_dir]
790
- try:
791
- with pytest.raises(PermissionError, match="outside approved"):
792
- handler.handle("python.execute_async", {"script_path": script})
793
- finally:
794
- addon_module.APPROVED_SCRIPT_ROOTS = []
795
-
796
- def test_async_missing_code_and_script_raises(self, handler):
797
- with pytest.raises(ValueError, match="Either"):
798
- handler.handle("python.execute_async", {})
799
-
800
- def test_async_both_code_and_script_raises(self, handler):
801
- with pytest.raises(ValueError, match="not both"):
802
- handler.handle(
803
- "python.execute_async",
804
- {
805
- "code": "pass",
806
- "script_path": "/some/file.py",
807
- },
808
- )
809
-
810
-
811
- class TestDamBreakDemo:
812
- """Validate the dam-break demo scripts."""
813
-
814
- DEMOS_DIR = os.path.join(os.path.dirname(__file__), os.pardir, "scripts", "demos")
815
- LIBRARY_DIR = os.path.join(os.path.dirname(__file__), os.pardir, "scripts", "library")
816
-
817
- def test_dam_break_scene_parses(self):
818
- """The monolithic demo script must be syntactically valid Python."""
819
- import ast
820
-
821
- path = os.path.join(self.DEMOS_DIR, "dam_break_scene.py")
822
- with open(path) as f:
823
- ast.parse(f.read(), filename=path)
824
-
825
- def test_run_dam_break_parses(self):
826
- """The bridge caller script must be syntactically valid."""
827
- import ast
828
-
829
- path = os.path.join(self.DEMOS_DIR, "run_dam_break.py")
830
- with open(path) as f:
831
- ast.parse(f.read(), filename=path)
832
-
833
- def test_demo_scripts_avoid_mesh_primitive_operators(self):
834
- """Bridge-driven demo geometry should use data-API helpers, not bpy.ops primitives."""
835
- for filename in ("dam_break_scene.py", "run_dam_break.py"):
836
- path = os.path.join(self.DEMOS_DIR, filename)
837
- with open(path) as f:
838
- contents = f.read()
839
- assert "bpy.ops.mesh.primitive_" not in contents
840
-
841
- def test_run_dam_break_builds_correct_steps(self):
842
- """build_steps() returns expected step count and uses library scripts."""
843
- sys.path.insert(0, self.DEMOS_DIR)
844
- try:
845
- import run_dam_break
846
-
847
- steps = run_dam_break.build_steps(self.LIBRARY_DIR)
848
- finally:
849
- sys.path.pop(0)
850
- sys.modules.pop("run_dam_break", None)
851
-
852
- assert len(steps) >= 11
853
- labels = [s["label"] for s in steps]
854
- assert any("frame range" in label.lower() for label in labels)
855
- assert any("fluid domain" in label.lower() for label in labels)
856
- assert any("camera" in label.lower() for label in labels)
857
- assert any("collider" in label.lower() for label in labels)
858
- assert any("rigid" in label.lower() for label in labels)
859
- assert any("keyframe" in label.lower() or "dolly" in label.lower() for label in labels)
860
-
861
- def test_run_dam_break_script_paths_exist(self):
862
- """Every library script referenced by build_steps must exist."""
863
- sys.path.insert(0, self.DEMOS_DIR)
864
- try:
865
- import run_dam_break
866
-
867
- steps = run_dam_break.build_steps(self.LIBRARY_DIR)
868
- finally:
869
- sys.path.pop(0)
870
- sys.modules.pop("run_dam_break", None)
871
-
872
- for step in steps:
873
- if step["method"] == "script":
874
- assert os.path.isfile(step["script_path"]), f"Missing library script: {step['script_path']}"
875
-
876
- def test_run_dam_break_stops_on_inner_script_error(self):
877
- """run_demo() must fail fast if python.execute returns an inner script error."""
878
- sys.path.insert(0, self.DEMOS_DIR)
879
- try:
880
- import run_dam_break
881
-
882
- with patch.object(
883
- run_dam_break,
884
- "exec_inline",
885
- return_value={"success": True, "result": {"error": "boom"}},
886
- ):
887
- exit_code = run_dam_break.run_demo(
888
- "127.0.0.1",
889
- 9876,
890
- self.LIBRARY_DIR,
891
- dry_run=False,
892
- )
893
- finally:
894
- sys.path.pop(0)
895
- sys.modules.pop("run_dam_break", None)
896
-
897
- assert exit_code == 1
898
-
899
- def test_exec_script_sends_inline_code(self):
900
- """The step runner should inline local library scripts, not rely on script_path."""
901
- sys.path.insert(0, self.DEMOS_DIR)
902
- try:
903
- import run_dam_break
904
-
905
- with tempfile.TemporaryDirectory() as tmpdir:
906
- script_path = os.path.join(tmpdir, "sample.py")
907
- with open(script_path, "w") as f:
908
- f.write("__result__ = {'ok': True}\n")
909
-
910
- with patch.object(run_dam_break, "send_command", return_value={"success": True}) as send:
911
- run_dam_break.exec_script(script_path, {"x": 1})
912
- finally:
913
- sys.path.pop(0)
914
- sys.modules.pop("run_dam_break", None)
915
-
916
- send.assert_called_once()
917
- command, params = send.call_args.args
918
- assert command == "python.execute"
919
- assert "code" in params
920
- assert "script_path" not in params
921
- assert params["args"] == {"x": 1}
922
-
923
- def test_dam_break_scene_executes_in_mock(self, handler, addon_module):
924
- """The monolithic script should execute without import errors
925
- in the mocked bpy environment (logic errors from mocks are OK)."""
926
- path = os.path.realpath(os.path.join(self.DEMOS_DIR, "dam_break_scene.py"))
927
- addon_module.APPROVED_SCRIPT_ROOTS = [os.path.dirname(path)]
928
- try:
929
- result = handler.handle(
930
- "python.execute",
931
- {
932
- "script_path": path,
933
- "args": {"resolution": 16, "frame_end": 10},
934
- },
935
- )
936
- # With mocked bpy the script may error on mock attribute access,
937
- # but it should not raise an import or syntax error.
938
- # If it succeeds, validate the result structure.
939
- if result.get("error") is None:
940
- assert "fluid_domain" in result["result"]
941
- assert "camera" in result["result"]
942
- assert "debris" in result["result"]
943
- finally:
944
- addon_module.APPROVED_SCRIPT_ROOTS = []
945
-
946
- def test_all_library_scripts_parse(self):
947
- """Every .py in scripts/library/ must be syntactically valid."""
948
- import ast
949
- import glob as globmod
950
-
951
- for path in sorted(globmod.glob(os.path.join(self.LIBRARY_DIR, "*.py"))):
952
- with open(path) as f:
953
- ast.parse(f.read(), filename=path)