@hybridlabor-api/aos 4.4.0 → 4.4.2-beta.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 (306) hide show
  1. package/.agents/skills/firecrawl/SKILL.md +149 -0
  2. package/.agents/skills/firecrawl/rules/install.md +82 -0
  3. package/.agents/skills/firecrawl/rules/security.md +26 -0
  4. package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
  5. package/.agents/skills/firecrawl-build/SKILL.md +39 -0
  6. package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
  7. package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
  8. package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  9. package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  10. package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  11. package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
  12. package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
  13. package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
  14. package/.agents/skills/firecrawl-download/SKILL.md +70 -0
  15. package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
  16. package/.agents/skills/firecrawl-map/SKILL.md +51 -0
  17. package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
  18. package/.agents/skills/firecrawl-search/SKILL.md +60 -0
  19. package/.claude/hooks/memb-inject.mjs +6 -0
  20. package/CLAUDE.md +573 -0
  21. package/README.de.md +0 -8
  22. package/README.md +0 -8
  23. package/README.pt.md +0 -8
  24. package/assets/brand/ao-ant-mark.svg +91 -0
  25. package/assets/brand/bdb-core-mark.svg +34 -0
  26. package/assets/brand/heimdall-guardian-mark.svg +16 -0
  27. package/assets/brand/memb-crystal-mark.svg +18 -0
  28. package/bin/aos-config.mjs +89 -0
  29. package/bin/aos-dashboard.mjs +608 -0
  30. package/bin/aos-uninstall.mjs +227 -0
  31. package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
  32. package/docs/skills_table.md +0 -3
  33. package/installer.js +428 -237
  34. package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
  35. package/mcps/after-effects-mcp/build/index.js +840 -0
  36. package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
  37. package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
  38. package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
  39. package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
  40. package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
  41. package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
  42. package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
  43. package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
  44. package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
  45. package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
  46. package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
  47. package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
  48. package/mcps/computer-use-mcp/dist/client.js +136 -0
  49. package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
  50. package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
  51. package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
  52. package/mcps/computer-use-mcp/dist/native.js +50 -0
  53. package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
  54. package/mcps/computer-use-mcp/dist/server.js +342 -0
  55. package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
  56. package/mcps/computer-use-mcp/dist/session.js +2372 -0
  57. package/package.json +13 -4
  58. package/skills/global_config/aos-project-init/SKILL.md +97 -130
  59. package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
  60. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
  61. package/skills/global_config/aos-setup/SKILL.md +110 -11
  62. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +48 -4
  63. package/skills/global_config/ask-tim/SKILL.md +2 -7
  64. package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
  65. package/bin/setup-saas.mjs +0 -792
  66. package/mcps/blender-mcp-server/.dockerignore +0 -19
  67. package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
  68. package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
  69. package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
  70. package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
  71. package/mcps/blender-mcp-server/Dockerfile +0 -19
  72. package/mcps/blender-mcp-server/LICENSE +0 -21
  73. package/mcps/blender-mcp-server/README.md +0 -409
  74. package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
  75. package/mcps/blender-mcp-server/addon/models.py +0 -223
  76. package/mcps/blender-mcp-server/pyproject.toml +0 -120
  77. package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
  78. package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
  79. package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
  80. package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
  81. package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
  82. package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
  83. package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
  84. package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
  85. package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
  86. package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
  87. package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
  88. package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
  89. package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
  90. package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
  91. package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
  92. package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
  93. package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
  94. package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
  95. package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
  96. package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
  97. package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
  98. package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
  99. package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
  100. package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
  101. package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
  102. package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
  103. package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
  104. package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
  105. package/mcps/davinci-mcp-professional/.bandit +0 -35
  106. package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
  107. package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
  108. package/mcps/davinci-mcp-professional/.editorconfig +0 -27
  109. package/mcps/davinci-mcp-professional/.gitattributes +0 -207
  110. package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
  111. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
  112. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  113. package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
  114. package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
  115. package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
  116. package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
  117. package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
  118. package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
  119. package/mcps/davinci-mcp-professional/BUGS.md +0 -55
  120. package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
  121. package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
  122. package/mcps/davinci-mcp-professional/COPYING.md +0 -228
  123. package/mcps/davinci-mcp-professional/Doxyfile +0 -379
  124. package/mcps/davinci-mcp-professional/README.md +0 -143
  125. package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
  126. package/mcps/davinci-mcp-professional/USING.md +0 -301
  127. package/mcps/davinci-mcp-professional/VERSION.md +0 -13
  128. package/mcps/davinci-mcp-professional/build.py +0 -169
  129. package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
  130. package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
  131. package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
  132. package/mcps/davinci-mcp-professional/main.py +0 -40
  133. package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
  134. package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
  135. package/mcps/davinci-mcp-professional/security_audit.py +0 -379
  136. package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
  137. package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
  138. package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
  139. package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
  140. package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
  141. package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
  142. package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
  143. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
  144. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
  145. package/mcps/davinci-mcp-professional/test.py +0 -186
  146. package/mcps/davinci-mcp-professional/uv.lock +0 -2073
  147. package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
  148. package/mcps/davinci-resolve-mcp/.clinerules +0 -17
  149. package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
  150. package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
  151. package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
  152. package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
  153. package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
  154. package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
  155. package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
  156. package/mcps/davinci-resolve-mcp/LICENSE +0 -21
  157. package/mcps/davinci-resolve-mcp/README.md +0 -173
  158. package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
  159. package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
  160. package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
  161. package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
  162. package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
  163. package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
  164. package/mcps/davinci-resolve-mcp/install.py +0 -1687
  165. package/mcps/davinci-resolve-mcp/package.json +0 -52
  166. package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
  167. package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
  168. package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
  169. package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
  170. package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
  171. package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
  172. package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
  173. package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
  174. package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
  175. package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
  176. package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
  177. package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
  178. package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
  179. package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
  180. package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
  181. package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
  182. package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
  183. package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
  184. package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
  185. package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
  186. package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
  187. package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
  188. package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
  189. package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
  190. package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
  191. package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
  192. package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
  193. package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
  194. package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
  195. package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
  196. package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
  197. package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
  198. package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
  199. package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
  200. package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
  201. package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
  202. package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
  203. package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
  204. package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
  205. package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
  206. package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
  207. package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
  208. package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
  209. package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
  210. package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
  211. package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
  212. package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
  213. package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
  214. package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
  215. package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
  216. package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
  217. package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
  218. package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
  219. package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
  220. package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
  221. package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
  222. package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
  223. package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
  224. package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
  225. package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
  226. package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
  227. package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
  228. package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
  229. package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
  230. package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
  231. package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
  232. package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
  233. package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
  234. package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
  235. package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
  236. package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
  237. package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
  238. package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
  239. package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
  240. package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
  241. package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
  242. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
  243. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
  244. package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
  245. package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
  246. package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
  247. package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
  248. package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
  249. package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
  250. package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
  251. package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
  252. package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
  253. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
  254. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
  255. package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
  256. package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
  257. package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
  258. package/mcps/vectorworks-mcp/.dockerignore +0 -8
  259. package/mcps/vectorworks-mcp/Dockerfile +0 -28
  260. package/mcps/vectorworks-mcp/README.md +0 -156
  261. package/mcps/vectorworks-mcp/app/__init__.py +0 -2
  262. package/mcps/vectorworks-mcp/app/api.py +0 -52
  263. package/mcps/vectorworks-mcp/app/chunking.py +0 -56
  264. package/mcps/vectorworks-mcp/app/config.py +0 -29
  265. package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
  266. package/mcps/vectorworks-mcp/app/indexer.py +0 -106
  267. package/mcps/vectorworks-mcp/app/main.py +0 -33
  268. package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
  269. package/mcps/vectorworks-mcp/app/search.py +0 -54
  270. package/mcps/vectorworks-mcp/app/utils.py +0 -14
  271. package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
  272. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
  273. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
  274. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
  275. package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
  276. package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
  277. package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
  278. package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
  279. package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
  280. package/mcps/vectorworks-mcp/design.md +0 -57
  281. package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
  282. package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
  283. package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
  284. package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
  285. package/mcps/vectorworks-mcp/requirements.txt +0 -10
  286. package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
  287. package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
  288. package/mcps/vectorworks-mcp/templates/index.html +0 -40
  289. package/scripts/ecosystem-health-audit.js +0 -257
  290. package/skills/bdb-dev-os-skill/SKILL.md +0 -49
  291. package/skills/bdb-dev-os-skill/package.json +0 -11
  292. package/skills/bdbsaastraining/SKILL.md +0 -316
  293. package/skills/bdbsaastraining/references/exam-pool.md +0 -313
  294. package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
  295. package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
  296. package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
  297. package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
  298. package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
  299. package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
  300. package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
  301. package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
  302. package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
  303. package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
  304. package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
  305. package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
  306. package/skills/global_config/bdbsaashost/SKILL.md +0 -125
@@ -0,0 +1,153 @@
1
+ // applyEffect.jsx
2
+ // Applies an effect to a specified layer in a composition
3
+
4
+ function applyEffect(args) {
5
+ try {
6
+ // Extract parameters
7
+ var compIndex = args.compIndex || 1; // Default to first comp
8
+ var layerIndex = args.layerIndex || 1; // Default to first layer
9
+ var effectName = args.effectName; // Name of the effect to apply
10
+ var effectMatchName = args.effectMatchName; // After Effects internal name (more reliable)
11
+ var effectCategory = args.effectCategory || ""; // Optional category for filtering
12
+ var presetPath = args.presetPath; // Optional path to an effect preset
13
+ var effectSettings = args.effectSettings || {}; // Optional effect parameters
14
+
15
+ if (!effectName && !effectMatchName && !presetPath) {
16
+ throw new Error("You must specify either effectName, effectMatchName, or presetPath");
17
+ }
18
+
19
+ // Find the composition by index
20
+ var comp = app.project.item(compIndex);
21
+ if (!comp || !(comp instanceof CompItem)) {
22
+ throw new Error("Composition not found at index " + compIndex);
23
+ }
24
+
25
+ // Find the layer by index
26
+ var layer = comp.layer(layerIndex);
27
+ if (!layer) {
28
+ throw new Error("Layer not found at index " + layerIndex + " in composition '" + comp.name + "'");
29
+ }
30
+
31
+ var effectResult;
32
+
33
+ // Apply preset if a path is provided
34
+ if (presetPath) {
35
+ var presetFile = new File(presetPath);
36
+ if (!presetFile.exists) {
37
+ throw new Error("Effect preset file not found: " + presetPath);
38
+ }
39
+
40
+ // Apply the preset to the layer
41
+ layer.applyPreset(presetFile);
42
+ effectResult = {
43
+ type: "preset",
44
+ name: presetPath.split('/').pop().split('\\').pop(),
45
+ applied: true
46
+ };
47
+ }
48
+ // Apply effect by match name (more reliable method)
49
+ else if (effectMatchName) {
50
+ var effect = layer.Effects.addProperty(effectMatchName);
51
+ effectResult = {
52
+ type: "effect",
53
+ name: effect.name,
54
+ matchName: effect.matchName,
55
+ index: effect.propertyIndex
56
+ };
57
+
58
+ // Apply settings if provided
59
+ applyEffectSettings(effect, effectSettings);
60
+ }
61
+ // Apply effect by display name
62
+ else {
63
+ // Get the effect from the Effect menu
64
+ var effect = layer.Effects.addProperty(effectName);
65
+ effectResult = {
66
+ type: "effect",
67
+ name: effect.name,
68
+ matchName: effect.matchName,
69
+ index: effect.propertyIndex
70
+ };
71
+
72
+ // Apply settings if provided
73
+ applyEffectSettings(effect, effectSettings);
74
+ }
75
+
76
+ return JSON.stringify({
77
+ status: "success",
78
+ message: "Effect applied successfully",
79
+ effect: effectResult,
80
+ layer: {
81
+ name: layer.name,
82
+ index: layerIndex
83
+ },
84
+ composition: {
85
+ name: comp.name,
86
+ index: compIndex
87
+ }
88
+ }, null, 2);
89
+ } catch (error) {
90
+ return JSON.stringify({
91
+ status: "error",
92
+ message: error.toString()
93
+ }, null, 2);
94
+ }
95
+ }
96
+
97
+ // Helper function to apply effect settings
98
+ function applyEffectSettings(effect, settings) {
99
+ // Skip if no settings are provided
100
+ if (!settings || Object.keys(settings).length === 0) {
101
+ return;
102
+ }
103
+
104
+ // Iterate through all provided settings
105
+ for (var propName in settings) {
106
+ if (settings.hasOwnProperty(propName)) {
107
+ try {
108
+ // Find the property in the effect
109
+ var property = null;
110
+
111
+ // Try direct property access first
112
+ try {
113
+ property = effect.property(propName);
114
+ } catch (e) {
115
+ // If direct access fails, search through all properties
116
+ for (var i = 1; i <= effect.numProperties; i++) {
117
+ var prop = effect.property(i);
118
+ if (prop.name === propName) {
119
+ property = prop;
120
+ break;
121
+ }
122
+ }
123
+ }
124
+
125
+ // Set the property value if found
126
+ if (property && property.setValue) {
127
+ property.setValue(settings[propName]);
128
+ }
129
+ } catch (e) {
130
+ // Log error but continue with other properties
131
+ $.writeln("Error setting effect property '" + propName + "': " + e.toString());
132
+ }
133
+ }
134
+ }
135
+ }
136
+
137
+ // Read arguments from the temp args file written by the launcher
138
+ var argsFile = new File($.fileName.replace(/[^\\\/]*$/, '') + "../temp/args.json");
139
+ var args = {};
140
+ if (argsFile.exists) {
141
+ argsFile.open("r");
142
+ var _content = argsFile.read();
143
+ argsFile.close();
144
+ if (_content) {
145
+ try { args = JSON.parse(_content); } catch (_e) { args = {}; }
146
+ }
147
+ }
148
+
149
+ // Run the function and write the result
150
+ var result = applyEffect(args);
151
+
152
+ // Write the result so it can be captured by the Node.js process
153
+ $.write(result);
@@ -0,0 +1,218 @@
1
+ // applyEffectTemplate.jsx
2
+ // Applies predefined effect templates to layers
3
+
4
+ function applyEffectTemplate(args) {
5
+ try {
6
+ // Extract parameters
7
+ var compIndex = args.compIndex || 1; // Default to first comp
8
+ var layerIndex = args.layerIndex || 1; // Default to first layer
9
+ var templateName = args.templateName; // Name of the template to apply
10
+ var customSettings = args.customSettings || {}; // Optional customizations
11
+
12
+ if (!templateName) {
13
+ throw new Error("You must specify a templateName");
14
+ }
15
+
16
+ // Find the composition by index
17
+ var comp = app.project.item(compIndex);
18
+ if (!comp || !(comp instanceof CompItem)) {
19
+ throw new Error("Composition not found at index " + compIndex);
20
+ }
21
+
22
+ // Find the layer by index
23
+ var layer = comp.layer(layerIndex);
24
+ if (!layer) {
25
+ throw new Error("Layer not found at index " + layerIndex + " in composition '" + comp.name + "'");
26
+ }
27
+
28
+ // Template definitions
29
+ var templates = {
30
+ // Blur effects
31
+ "gaussian-blur": {
32
+ effectMatchName: "ADBE Gaussian Blur 2",
33
+ settings: {
34
+ "Blurriness": customSettings.blurriness || 20
35
+ }
36
+ },
37
+ "directional-blur": {
38
+ effectMatchName: "ADBE Directional Blur",
39
+ settings: {
40
+ "Direction": customSettings.direction || 0,
41
+ "Blur Length": customSettings.length || 10
42
+ }
43
+ },
44
+
45
+ // Color correction effects
46
+ "color-balance": {
47
+ effectMatchName: "ADBE Color Balance (HLS)",
48
+ settings: {
49
+ "Hue": customSettings.hue || 0,
50
+ "Lightness": customSettings.lightness || 0,
51
+ "Saturation": customSettings.saturation || 0
52
+ }
53
+ },
54
+ "brightness-contrast": {
55
+ effectMatchName: "ADBE Brightness & Contrast 2",
56
+ settings: {
57
+ "Brightness": customSettings.brightness || 0,
58
+ "Contrast": customSettings.contrast || 0,
59
+ "Use Legacy": false
60
+ }
61
+ },
62
+ "curves": {
63
+ effectMatchName: "ADBE CurvesCustom",
64
+ // Curves are complex and would need special handling
65
+ },
66
+
67
+ // Stylistic effects
68
+ "glow": {
69
+ effectMatchName: "ADBE Glow",
70
+ settings: {
71
+ "Glow Threshold": customSettings.threshold || 50,
72
+ "Glow Radius": customSettings.radius || 15,
73
+ "Glow Intensity": customSettings.intensity || 1
74
+ }
75
+ },
76
+ "drop-shadow": {
77
+ effectMatchName: "ADBE Drop Shadow",
78
+ settings: {
79
+ "Shadow Color": customSettings.color || [0, 0, 0, 1],
80
+ "Opacity": customSettings.opacity || 50,
81
+ "Direction": customSettings.direction || 135,
82
+ "Distance": customSettings.distance || 10,
83
+ "Softness": customSettings.softness || 10
84
+ }
85
+ },
86
+
87
+ // Common effect chains
88
+ "cinematic-look": {
89
+ effects: [
90
+ {
91
+ effectMatchName: "ADBE CurvesCustom",
92
+ settings: {}
93
+ },
94
+ {
95
+ effectMatchName: "ADBE Vibrance",
96
+ settings: {
97
+ "Vibrance": 15,
98
+ "Saturation": -5
99
+ }
100
+ }
101
+ ]
102
+ },
103
+ "text-pop": {
104
+ effects: [
105
+ {
106
+ effectMatchName: "ADBE Drop Shadow",
107
+ settings: {
108
+ "Shadow Color": [0, 0, 0, 1],
109
+ "Opacity": 75,
110
+ "Distance": 5,
111
+ "Softness": 10
112
+ }
113
+ },
114
+ {
115
+ effectMatchName: "ADBE Glow",
116
+ settings: {
117
+ "Glow Threshold": 50,
118
+ "Glow Radius": 10,
119
+ "Glow Intensity": 1.5
120
+ }
121
+ }
122
+ ]
123
+ }
124
+ };
125
+
126
+ // Check if the requested template exists
127
+ var template = templates[templateName];
128
+ if (!template) {
129
+ var availableTemplates = Object.keys(templates).join(", ");
130
+ throw new Error("Template '" + templateName + "' not found. Available templates: " + availableTemplates);
131
+ }
132
+
133
+ var appliedEffects = [];
134
+
135
+ // Apply single effect or multiple effects based on template structure
136
+ if (template.effectMatchName) {
137
+ // Single effect template
138
+ var effect = layer.Effects.addProperty(template.effectMatchName);
139
+
140
+ // Apply settings
141
+ for (var propName in template.settings) {
142
+ try {
143
+ var property = effect.property(propName);
144
+ if (property) {
145
+ property.setValue(template.settings[propName]);
146
+ }
147
+ } catch (e) {
148
+ $.writeln("Warning: Could not set " + propName + " on effect " + effect.name + ": " + e);
149
+ }
150
+ }
151
+
152
+ appliedEffects.push({
153
+ name: effect.name,
154
+ matchName: effect.matchName
155
+ });
156
+ } else if (template.effects) {
157
+ // Multiple effects template
158
+ for (var i = 0; i < template.effects.length; i++) {
159
+ var effectData = template.effects[i];
160
+ var effect = layer.Effects.addProperty(effectData.effectMatchName);
161
+
162
+ // Apply settings
163
+ for (var propName in effectData.settings) {
164
+ try {
165
+ var property = effect.property(propName);
166
+ if (property) {
167
+ property.setValue(effectData.settings[propName]);
168
+ }
169
+ } catch (e) {
170
+ $.writeln("Warning: Could not set " + propName + " on effect " + effect.name + ": " + e);
171
+ }
172
+ }
173
+
174
+ appliedEffects.push({
175
+ name: effect.name,
176
+ matchName: effect.matchName
177
+ });
178
+ }
179
+ }
180
+
181
+ return JSON.stringify({
182
+ status: "success",
183
+ message: "Effect template '" + templateName + "' applied successfully",
184
+ appliedEffects: appliedEffects,
185
+ layer: {
186
+ name: layer.name,
187
+ index: layerIndex
188
+ },
189
+ composition: {
190
+ name: comp.name,
191
+ index: compIndex
192
+ }
193
+ }, null, 2);
194
+ } catch (error) {
195
+ return JSON.stringify({
196
+ status: "error",
197
+ message: error.toString()
198
+ }, null, 2);
199
+ }
200
+ }
201
+
202
+ // Read arguments from the temp args file written by the launcher
203
+ var argsFile = new File($.fileName.replace(/[^\\\/]*$/, '') + "../temp/args.json");
204
+ var args = {};
205
+ if (argsFile.exists) {
206
+ argsFile.open("r");
207
+ var _content = argsFile.read();
208
+ argsFile.close();
209
+ if (_content) {
210
+ try { args = JSON.parse(_content); } catch (_e) { args = {}; }
211
+ }
212
+ }
213
+
214
+ // Run the function and write the result
215
+ var result = applyEffectTemplate(args);
216
+
217
+ // Write the result so it can be captured by the Node.js process
218
+ $.write(result);
@@ -0,0 +1,71 @@
1
+ // createComposition.jsx
2
+ // Creates a new composition with the specified settings
3
+
4
+ function createComposition(args) {
5
+ try {
6
+ // Extract parameters from args
7
+ var name = args.name || "New Composition";
8
+ var width = parseInt(args.width) || 1920;
9
+ var height = parseInt(args.height) || 1080;
10
+ var pixelAspect = parseFloat(args.pixelAspect) || 1.0;
11
+ var duration = parseFloat(args.duration) || 10.0;
12
+ var frameRate = parseFloat(args.frameRate) || 30.0;
13
+ var bgColor = args.backgroundColor ? [args.backgroundColor.r/255, args.backgroundColor.g/255, args.backgroundColor.b/255] : [0, 0, 0];
14
+
15
+ // Create the composition
16
+ var newComp = app.project.items.addComp(name, width, height, pixelAspect, duration, frameRate);
17
+
18
+ // Set background color if provided
19
+ if (args.backgroundColor) {
20
+ newComp.bgColor = bgColor;
21
+ }
22
+
23
+ // Return success with composition details
24
+ return JSON.stringify({
25
+ status: "success",
26
+ message: "Composition created successfully",
27
+ composition: {
28
+ name: newComp.name,
29
+ id: newComp.id,
30
+ width: newComp.width,
31
+ height: newComp.height,
32
+ pixelAspect: newComp.pixelAspect,
33
+ duration: newComp.duration,
34
+ frameRate: newComp.frameRate,
35
+ bgColor: newComp.bgColor
36
+ }
37
+ }, null, 2);
38
+ } catch (error) {
39
+ // Return error message
40
+ return JSON.stringify({
41
+ status: "error",
42
+ message: error.toString()
43
+ }, null, 2);
44
+ }
45
+ }
46
+
47
+ // Read arguments from the file (passed by the Node.js script)
48
+ var argsFile = new File($.fileName.replace(/[^\\\/]*$/, '') + "../temp/args.json");
49
+ var args = {};
50
+ if (argsFile.exists) {
51
+ argsFile.open("r");
52
+ var content = argsFile.read();
53
+ argsFile.close();
54
+ if (content) {
55
+ try {
56
+ args = JSON.parse(content);
57
+ } catch (e) {
58
+ // Handle parsing error
59
+ $.write(JSON.stringify({
60
+ status: "error",
61
+ message: "Failed to parse arguments: " + e.toString()
62
+ }, null, 2));
63
+ }
64
+ }
65
+ }
66
+
67
+ // Run the function and write the result
68
+ var result = createComposition(args);
69
+
70
+ // Write the result so it can be captured by the Node.js process
71
+ $.write(result);
@@ -0,0 +1,147 @@
1
+ // createShapeLayer.jsx
2
+ // Creates a new shape layer in the specified composition
3
+
4
+ function createShapeLayer(args) {
5
+ try {
6
+ // Extract parameters from args
7
+ var compName = args.compName || "";
8
+ var shapeType = args.shapeType || "rectangle"; // rectangle, ellipse, polygon
9
+ var position = args.position || [960, 540]; // Default to center
10
+ var size = args.size || [200, 200]; // Width, Height
11
+ var fillColor = args.fillColor || [1, 0, 0]; // Default to red
12
+ var strokeColor = args.strokeColor || [0, 0, 0]; // Default to black
13
+ var strokeWidth = args.strokeWidth || 0; // Default to no stroke
14
+ var startTime = args.startTime || 0;
15
+ var duration = args.duration || 5; // Default 5 seconds
16
+ var name = args.name || "Shape Layer";
17
+ var points = args.points || 5; // For polygon, number of points
18
+
19
+ // Find the composition by name
20
+ var comp = null;
21
+ for (var i = 1; i <= app.project.numItems; i++) {
22
+ var item = app.project.item(i);
23
+ if (item instanceof CompItem && item.name === compName) {
24
+ comp = item;
25
+ break;
26
+ }
27
+ }
28
+
29
+ // If no composition was found by name, use the active composition
30
+ if (!comp) {
31
+ if (app.project.activeItem instanceof CompItem) {
32
+ comp = app.project.activeItem;
33
+ } else {
34
+ throw new Error("No composition found with name '" + compName + "' and no active composition");
35
+ }
36
+ }
37
+
38
+ // Create a shape layer
39
+ var shapeLayer = comp.layers.addShape();
40
+ shapeLayer.name = name;
41
+
42
+ // Get the root content property group
43
+ var contents = shapeLayer.property("Contents"); // Changed from "ADBE Root Vectors Group" for simplicity
44
+
45
+ // Add a shape group (e.g., "Group 1")
46
+ var shapeGroup = contents.addProperty("ADBE Vector Group");
47
+ // Get the Contents property group WITHIN the new shape group
48
+ var groupContents = shapeGroup.property("Contents");
49
+
50
+ // Add the appropriate shape path based on type TO THE GROUP'S CONTENTS
51
+ var shapePathProperty;
52
+ if (shapeType === "rectangle") {
53
+ shapePathProperty = groupContents.addProperty("ADBE Vector Shape - Rect");
54
+ var rectSizeProp = shapePathProperty.property("Size");
55
+ rectSizeProp.setValue(size);
56
+ } else if (shapeType === "ellipse") {
57
+ shapePathProperty = groupContents.addProperty("ADBE Vector Shape - Ellipse");
58
+ var ellipseSizeProp = shapePathProperty.property("Size");
59
+ ellipseSizeProp.setValue(size);
60
+ } else if (shapeType === "polygon" || shapeType === "star") { // Combine polygon/star logic
61
+ shapePathProperty = groupContents.addProperty("ADBE Vector Shape - Star");
62
+ shapePathProperty.property("Type").setValue(shapeType === "polygon" ? 1 : 2); // 1=Polygon, 2=Star
63
+ shapePathProperty.property("Points").setValue(points);
64
+ shapePathProperty.property("Outer Radius").setValue(size[0] / 2);
65
+ // For stars, set inner radius; for polygons, maybe outer roundness if needed
66
+ if (shapeType === "star") {
67
+ shapePathProperty.property("Inner Radius").setValue(size[0] / 3);
68
+ }
69
+ }
70
+
71
+ // Add fill TO THE GROUP'S CONTENTS
72
+ var fill = groupContents.addProperty("ADBE Vector Graphic - Fill");
73
+ fill.property("Color").setValue(fillColor);
74
+ fill.property("Opacity").setValue(100);
75
+
76
+ // Add stroke TO THE GROUP'S CONTENTS if width > 0
77
+ if (strokeWidth > 0) {
78
+ var stroke = groupContents.addProperty("ADBE Vector Graphic - Stroke");
79
+ stroke.property("Color").setValue(strokeColor);
80
+ stroke.property("Stroke Width").setValue(strokeWidth);
81
+ stroke.property("Opacity").setValue(100);
82
+ }
83
+
84
+ // Add transform properties TO THE GROUP (not the layer's main transform initially)
85
+ var groupTransform = shapeGroup.property("Transform");
86
+ // Note: Position is relative to the layer anchor point,
87
+ // Layer position sets the anchor point relative to the comp.
88
+ // Setting group position might be more intuitive for simple shapes.
89
+ // groupTransform.property("Position").setValue([0,0]); // Keep group centered initially
90
+
91
+ // Set layer's main transform properties
92
+ shapeLayer.property("Position").setValue(position);
93
+
94
+ // Set timing
95
+ shapeLayer.startTime = startTime;
96
+ if (duration > 0) {
97
+ shapeLayer.outPoint = startTime + duration;
98
+ }
99
+
100
+ // Return success with layer details
101
+ return JSON.stringify({
102
+ status: "success",
103
+ message: "Shape layer created successfully",
104
+ layer: {
105
+ name: shapeLayer.name,
106
+ index: shapeLayer.index,
107
+ type: "shape",
108
+ shapeType: shapeType,
109
+ inPoint: shapeLayer.inPoint,
110
+ outPoint: shapeLayer.outPoint,
111
+ position: shapeLayer.property("Position").value
112
+ }
113
+ }, null, 2);
114
+ } catch (error) {
115
+ // Return error message
116
+ return JSON.stringify({
117
+ status: "error",
118
+ message: error.toString()
119
+ }, null, 2);
120
+ }
121
+ }
122
+
123
+ // Read arguments from the file (passed by the Node.js script)
124
+ var argsFile = new File($.fileName.replace(/[^\\\/]*$/, '') + "../temp/args.json");
125
+ var args = {};
126
+ if (argsFile.exists) {
127
+ argsFile.open("r");
128
+ var content = argsFile.read();
129
+ argsFile.close();
130
+ if (content) {
131
+ try {
132
+ args = JSON.parse(content);
133
+ } catch (e) {
134
+ // Handle parsing error
135
+ $.write(JSON.stringify({
136
+ status: "error",
137
+ message: "Failed to parse arguments: " + e.toString()
138
+ }, null, 2));
139
+ }
140
+ }
141
+ }
142
+
143
+ // Run the function and write the result
144
+ var result = createShapeLayer(args);
145
+
146
+ // Write the result so it can be captured by the Node.js process
147
+ $.write(result);