@hybridlabor-api/aos 4.4.1 → 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.
- package/.agents/skills/firecrawl/SKILL.md +149 -0
- package/.agents/skills/firecrawl/rules/install.md +82 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
- package/.agents/skills/firecrawl-build/SKILL.md +39 -0
- package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
- package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
- package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
- package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
- package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
- package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
- package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
- package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
- package/.agents/skills/firecrawl-download/SKILL.md +70 -0
- package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
- package/.agents/skills/firecrawl-map/SKILL.md +51 -0
- package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
- package/.agents/skills/firecrawl-search/SKILL.md +60 -0
- package/CLAUDE.md +573 -0
- package/README.de.md +0 -8
- package/README.md +0 -8
- package/README.pt.md +0 -8
- package/assets/brand/ao-ant-mark.svg +91 -0
- package/assets/brand/bdb-core-mark.svg +34 -0
- package/assets/brand/heimdall-guardian-mark.svg +16 -0
- package/assets/brand/memb-crystal-mark.svg +18 -0
- package/bin/aos-config.mjs +89 -0
- package/bin/aos-dashboard.mjs +608 -0
- package/bin/aos-uninstall.mjs +227 -0
- package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
- package/docs/skills_table.md +0 -3
- package/installer.js +387 -237
- package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
- package/mcps/after-effects-mcp/build/index.js +840 -0
- package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
- package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
- package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
- package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
- package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
- package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
- package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
- package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
- package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
- package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
- package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
- package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
- package/mcps/computer-use-mcp/dist/client.js +136 -0
- package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
- package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
- package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
- package/mcps/computer-use-mcp/dist/native.js +50 -0
- package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
- package/mcps/computer-use-mcp/dist/server.js +342 -0
- package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
- package/mcps/computer-use-mcp/dist/session.js +2372 -0
- package/package.json +13 -4
- package/skills/global_config/aos-project-init/SKILL.md +97 -130
- package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
- package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
- package/skills/global_config/aos-setup/SKILL.md +98 -8
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +21 -2
- package/skills/global_config/ask-tim/SKILL.md +2 -7
- package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
- package/bin/setup-saas.mjs +0 -792
- package/mcps/blender-mcp-server/.dockerignore +0 -19
- package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
- package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
- package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
- package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
- package/mcps/blender-mcp-server/Dockerfile +0 -19
- package/mcps/blender-mcp-server/LICENSE +0 -21
- package/mcps/blender-mcp-server/README.md +0 -409
- package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
- package/mcps/blender-mcp-server/addon/models.py +0 -223
- package/mcps/blender-mcp-server/pyproject.toml +0 -120
- package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
- package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
- package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
- package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
- package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
- package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
- package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
- package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
- package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
- package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
- package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
- package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
- package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
- package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
- package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
- package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
- package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
- package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
- package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
- package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
- package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
- package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
- package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
- package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
- package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
- package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
- package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
- package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
- package/mcps/davinci-mcp-professional/.bandit +0 -35
- package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
- package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
- package/mcps/davinci-mcp-professional/.editorconfig +0 -27
- package/mcps/davinci-mcp-professional/.gitattributes +0 -207
- package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
- package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
- package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
- package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
- package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
- package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
- package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
- package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
- package/mcps/davinci-mcp-professional/BUGS.md +0 -55
- package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
- package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
- package/mcps/davinci-mcp-professional/COPYING.md +0 -228
- package/mcps/davinci-mcp-professional/Doxyfile +0 -379
- package/mcps/davinci-mcp-professional/README.md +0 -143
- package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
- package/mcps/davinci-mcp-professional/USING.md +0 -301
- package/mcps/davinci-mcp-professional/VERSION.md +0 -13
- package/mcps/davinci-mcp-professional/build.py +0 -169
- package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
- package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
- package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
- package/mcps/davinci-mcp-professional/main.py +0 -40
- package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
- package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
- package/mcps/davinci-mcp-professional/security_audit.py +0 -379
- package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
- package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
- package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
- package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
- package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
- package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
- package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
- package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
- package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
- package/mcps/davinci-mcp-professional/test.py +0 -186
- package/mcps/davinci-mcp-professional/uv.lock +0 -2073
- package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
- package/mcps/davinci-resolve-mcp/.clinerules +0 -17
- package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
- package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
- package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
- package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
- package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
- package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
- package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
- package/mcps/davinci-resolve-mcp/LICENSE +0 -21
- package/mcps/davinci-resolve-mcp/README.md +0 -173
- package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
- package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
- package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
- package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
- package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
- package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
- package/mcps/davinci-resolve-mcp/install.py +0 -1687
- package/mcps/davinci-resolve-mcp/package.json +0 -52
- package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
- package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
- package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
- package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
- package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
- package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
- package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
- package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
- package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
- package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
- package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
- package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
- package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
- package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
- package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
- package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
- package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
- package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
- package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
- package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
- package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
- package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
- package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
- package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
- package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
- package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
- package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
- package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
- package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
- package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
- package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
- package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
- package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
- package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
- package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
- package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
- package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
- package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
- package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
- package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
- package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
- package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
- package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
- package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
- package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
- package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
- package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
- package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
- package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
- package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
- package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
- package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
- package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
- package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
- package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
- package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
- package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
- package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
- package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
- package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
- package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
- package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
- package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
- package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
- package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
- package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
- package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
- package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
- package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
- package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
- package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
- package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
- package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
- package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
- package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
- package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
- package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
- package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
- package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
- package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
- package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
- package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
- package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
- package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
- package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
- package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
- package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
- package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
- package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
- package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
- package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
- package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
- package/mcps/vectorworks-mcp/.dockerignore +0 -8
- package/mcps/vectorworks-mcp/Dockerfile +0 -28
- package/mcps/vectorworks-mcp/README.md +0 -156
- package/mcps/vectorworks-mcp/app/__init__.py +0 -2
- package/mcps/vectorworks-mcp/app/api.py +0 -52
- package/mcps/vectorworks-mcp/app/chunking.py +0 -56
- package/mcps/vectorworks-mcp/app/config.py +0 -29
- package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
- package/mcps/vectorworks-mcp/app/indexer.py +0 -106
- package/mcps/vectorworks-mcp/app/main.py +0 -33
- package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
- package/mcps/vectorworks-mcp/app/search.py +0 -54
- package/mcps/vectorworks-mcp/app/utils.py +0 -14
- package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
- package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
- package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
- package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
- package/mcps/vectorworks-mcp/design.md +0 -57
- package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
- package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
- package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
- package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
- package/mcps/vectorworks-mcp/requirements.txt +0 -10
- package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
- package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
- package/mcps/vectorworks-mcp/templates/index.html +0 -40
- package/scripts/ecosystem-health-audit.js +0 -257
- package/skills/bdb-dev-os-skill/SKILL.md +0 -49
- package/skills/bdb-dev-os-skill/package.json +0 -11
- package/skills/bdbsaastraining/SKILL.md +0 -316
- package/skills/bdbsaastraining/references/exam-pool.md +0 -313
- package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
- package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
- package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
- package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
- package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
- package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
- package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
- package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
- package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
- package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
- package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
- package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
- package/skills/global_config/bdbsaashost/SKILL.md +0 -125
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
# Developer Guide — DaVinci MCP Professional
|
|
2
|
-
|
|
3
|
-
This document covers everything needed to work on the project from source,
|
|
4
|
-
including setup, running, building, testing, and contributing.
|
|
5
|
-
|
|
6
|
-
For end-user installation, see [README.md](README.md).
|
|
7
|
-
For full API documentation, see `docs/html/index.html` or regenerate with
|
|
8
|
-
`doxygen Doxyfile`.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
- Python 3.10 or later, **installed system-wide** (the installer from
|
|
15
|
-
[python.org](https://www.python.org/downloads/) with "Add to PATH" and
|
|
16
|
-
"Install for all users" selected)
|
|
17
|
-
- [uv](https://docs.astral.sh/uv/getting-started/installation/)
|
|
18
|
-
- DaVinci Resolve Studio, installed and running when using the server
|
|
19
|
-
(the free edition does not support external scripting)
|
|
20
|
-
- Git, configured with GPG signing (required for commits — see CONTRIBUTING.md)
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Development Setup
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
git clone https://github.com/Positronikal/davinci-mcp-professional.git
|
|
28
|
-
cd davinci-mcp-professional
|
|
29
|
-
uv venv --python <system-python>
|
|
30
|
-
uv sync
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Windows — important:** The `--python` flag must point to the
|
|
34
|
-
system-installed Python executable. DaVinci Resolve's `fusionscript.dll`
|
|
35
|
-
discovers Python through the Windows registry
|
|
36
|
-
(`HKLM\SOFTWARE\Python\PythonCore`) and loads `python3.dll` by full path
|
|
37
|
-
from that installation. If the virtual environment uses a *different*
|
|
38
|
-
Python (e.g. one downloaded by `uv` automatically), two Python runtimes
|
|
39
|
-
end up in the same process and the server crashes.
|
|
40
|
-
|
|
41
|
-
To find your system Python, run:
|
|
42
|
-
|
|
43
|
-
```powershell
|
|
44
|
-
py -0p # Windows Python Launcher — lists installed versions and paths
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Then create the venv:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
uv venv --python "C:\Program Files\Python314\python.exe" # adjust to your version
|
|
51
|
-
uv sync
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
On **macOS / Linux**, `uv venv` with no `--python` flag works if the
|
|
55
|
-
default `python3` is a system-wide installation.
|
|
56
|
-
|
|
57
|
-
`uv sync` installs all runtime and dev dependencies from `uv.lock` into `.venv`.
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Running from Source
|
|
62
|
-
|
|
63
|
-
The project has two entry points that serve different purposes:
|
|
64
|
-
|
|
65
|
-
**`mcp_server.py` — MCP server (for AI clients)**
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
uv run python mcp_server.py
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
This is the entry point that MCP clients (Claude Desktop, Gemini CLI, etc.)
|
|
72
|
-
launch as a subprocess. It speaks the MCP stdio protocol with no console
|
|
73
|
-
output. Point your `claude_desktop_config.json` at this file.
|
|
74
|
-
|
|
75
|
-
**`main.py` — Interactive CLI (for humans)**
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
uv run python main.py
|
|
79
|
-
uv run python main.py --debug
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
This wraps the same MCP server with a human-friendly terminal interface:
|
|
83
|
-
a colored startup banner, prerequisite checks (is Resolve running? is
|
|
84
|
-
PYTHONPATH set?), and `--debug` / `--skip-checks` flags. Use this when
|
|
85
|
-
running the server manually to verify connectivity or troubleshoot issues.
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## MCP Client Configuration for Development
|
|
90
|
-
|
|
91
|
-
Point your MCP client at the venv interpreter and `mcp_server.py`. Example
|
|
92
|
-
for Claude Desktop (`claude_desktop_config.json`):
|
|
93
|
-
|
|
94
|
-
**Windows:**
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"mcpServers": {
|
|
98
|
-
"davinci-resolve": {
|
|
99
|
-
"name": "DaVinci MCP Professional",
|
|
100
|
-
"command": "C:\\path\\to\\davinci-mcp-professional\\.venv\\Scripts\\python.exe",
|
|
101
|
-
"args": ["C:\\path\\to\\davinci-mcp-professional\\mcp_server.py"]
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**macOS:**
|
|
108
|
-
```json
|
|
109
|
-
{
|
|
110
|
-
"mcpServers": {
|
|
111
|
-
"davinci-resolve": {
|
|
112
|
-
"name": "DaVinci MCP Professional",
|
|
113
|
-
"command": "/path/to/davinci-mcp-professional/.venv/bin/python",
|
|
114
|
-
"args": ["/path/to/davinci-mcp-professional/mcp_server.py"]
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
A ready-to-edit template is at `claude_desktop_config_template.json`.
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## PyInstaller Builds
|
|
125
|
-
|
|
126
|
-
Build standalone executables (single-directory bundles):
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
uv sync --extra build # install PyInstaller into the venv
|
|
130
|
-
uv run python build.py # build both targets
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Output:
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
dist/davinci-mcp-server/davinci-mcp-server.exe # MCP server (for AI clients)
|
|
137
|
-
dist/davinci-mcp/davinci-mcp.exe # Interactive CLI (for humans)
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
These mirror the two entry points described in **Running from Source** above:
|
|
141
|
-
|
|
142
|
-
- **`davinci-mcp-server.exe`** — the MCP stdio server. Use this in MCP client
|
|
143
|
-
configurations when distributing to end users who do not have Python
|
|
144
|
-
installed.
|
|
145
|
-
- **`davinci-mcp.exe`** — the interactive CLI with prerequisite checks and
|
|
146
|
-
colored output. Useful for manual testing and troubleshooting.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Project Structure
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
davinci-mcp-professional/
|
|
154
|
-
├── mcp_server.py # Pure MCP stdio server entry point
|
|
155
|
-
├── main.py # Interactive CLI entry point
|
|
156
|
-
├── build.py # PyInstaller build script
|
|
157
|
-
├── src/davinci_mcp/
|
|
158
|
-
│ ├── __init__.py # Package init; imports __version__ from hatch-vcs
|
|
159
|
-
│ ├── cli.py # click CLI, prerequisite checks, banner
|
|
160
|
-
│ ├── server.py # MCP server: registers tool/resource handlers
|
|
161
|
-
│ ├── resolve_client.py # DaVinci Resolve API wrapper
|
|
162
|
-
│ ├── types.py # runtime_checkable Protocol types for Resolve objects
|
|
163
|
-
│ ├── tools/__init__.py # All 13 MCP tool definitions (name, schema)
|
|
164
|
-
│ ├── resources/__init__.py # All 7 MCP resource definitions (URI, schema)
|
|
165
|
-
│ └── utils/
|
|
166
|
-
│ ├── __init__.py
|
|
167
|
-
│ └── platform.py # Platform detection, PYTHONPATH setup, process check
|
|
168
|
-
├── tests/
|
|
169
|
-
│ ├── conftest.py
|
|
170
|
-
│ └── test_security.py
|
|
171
|
-
├── docs/ # Doxygen-generated HTML (tracked in git)
|
|
172
|
-
├── pyproject.toml
|
|
173
|
-
├── uv.lock
|
|
174
|
-
└── Doxyfile
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Available Tools
|
|
180
|
-
|
|
181
|
-
| Tool | Description |
|
|
182
|
-
|---|---|
|
|
183
|
-
| `get_version` | DaVinci Resolve version string |
|
|
184
|
-
| `get_current_page` | Currently active page (Edit, Color, etc.) |
|
|
185
|
-
| `switch_page` | Navigate to a page (media/cut/edit/fusion/color/fairlight/deliver) |
|
|
186
|
-
| `list_projects` | All projects in the current database |
|
|
187
|
-
| `get_current_project` | Name of the open project |
|
|
188
|
-
| `open_project` | Open a project by name |
|
|
189
|
-
| `create_project` | Create a new project |
|
|
190
|
-
| `list_timelines` | All timelines in the current project |
|
|
191
|
-
| `get_current_timeline` | Name of the active timeline |
|
|
192
|
-
| `create_timeline` | Create a new empty timeline |
|
|
193
|
-
| `switch_timeline` | Switch to a timeline by name |
|
|
194
|
-
| `list_media_clips` | All clips in the media pool root folder |
|
|
195
|
-
| `import_media` | Import a media file into the media pool |
|
|
196
|
-
|
|
197
|
-
## Available Resources
|
|
198
|
-
|
|
199
|
-
| URI | MIME type | Content |
|
|
200
|
-
|---|---|---|
|
|
201
|
-
| `resolve://version` | text/plain | Resolve version string |
|
|
202
|
-
| `resolve://current-page` | text/plain | Active page name |
|
|
203
|
-
| `resolve://projects` | application/json | Project list |
|
|
204
|
-
| `resolve://current-project` | text/plain | Open project name |
|
|
205
|
-
| `resolve://timelines` | application/json | Timeline list |
|
|
206
|
-
| `resolve://current-timeline` | text/plain | Active timeline name |
|
|
207
|
-
| `resolve://media-clips` | application/json | Media pool clip list |
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## Extending the Server
|
|
212
|
-
|
|
213
|
-
### Adding a new tool
|
|
214
|
-
|
|
215
|
-
1. Add its definition to `src/davinci_mcp/tools/__init__.py` (name, description,
|
|
216
|
-
inputSchema).
|
|
217
|
-
2. Add a dispatch branch in `server.py` → `_call_tool()`.
|
|
218
|
-
3. Implement the method in `resolve_client.py`.
|
|
219
|
-
|
|
220
|
-
### Adding a new resource
|
|
221
|
-
|
|
222
|
-
1. Add its definition to `src/davinci_mcp/resources/__init__.py` (URI, mimeType).
|
|
223
|
-
2. Add a dispatch branch in `server.py` → `_read_resource()`.
|
|
224
|
-
3. Implement the method in `resolve_client.py`.
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Testing, Linting, and Type Checking
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
# Run all tests
|
|
232
|
-
uv run pytest
|
|
233
|
-
|
|
234
|
-
# Run a single test file
|
|
235
|
-
uv run pytest tests/test_security.py -v
|
|
236
|
-
|
|
237
|
-
# Skip integration tests (requires Resolve running)
|
|
238
|
-
uv run pytest -m "not integration"
|
|
239
|
-
|
|
240
|
-
# Coverage
|
|
241
|
-
uv run pytest --cov=src/davinci_mcp --cov-report=html
|
|
242
|
-
|
|
243
|
-
# Lint and format
|
|
244
|
-
uv run ruff check src/ tests/
|
|
245
|
-
uv run ruff format src/ tests/
|
|
246
|
-
|
|
247
|
-
# Type checking
|
|
248
|
-
uv run pyright
|
|
249
|
-
uv run mypy src/
|
|
250
|
-
|
|
251
|
-
# Security
|
|
252
|
-
uv run bandit -r src/
|
|
253
|
-
uv run safety check
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## API Documentation
|
|
259
|
-
|
|
260
|
-
Full Doxygen-generated API documentation is in `docs/html/`:
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
# View locally
|
|
264
|
-
open docs/html/index.html # macOS
|
|
265
|
-
start docs/html/index.html # Windows
|
|
266
|
-
|
|
267
|
-
# Serve with search support
|
|
268
|
-
cd docs/html
|
|
269
|
-
uv run python -m http.server 8000
|
|
270
|
-
# then open http://localhost:8000
|
|
271
|
-
|
|
272
|
-
# Regenerate after code changes
|
|
273
|
-
doxygen Doxyfile
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## Troubleshooting
|
|
279
|
-
|
|
280
|
-
**DaVinci Resolve not found**
|
|
281
|
-
- Confirm Resolve is installed in the default location for your OS.
|
|
282
|
-
- On Windows: `C:\Program Files\Blackmagic Design\DaVinci Resolve\`
|
|
283
|
-
- On macOS: `/Applications/DaVinci Resolve/`
|
|
284
|
-
|
|
285
|
-
**DaVinci Resolve not running**
|
|
286
|
-
- The server requires Resolve to be fully loaded before connecting.
|
|
287
|
-
- Start Resolve first, wait for the UI to appear, then start the server.
|
|
288
|
-
|
|
289
|
-
**Import errors after setup**
|
|
290
|
-
- Run `uv sync` to ensure all dependencies are installed.
|
|
291
|
-
- Confirm you are running via `uv run python ...` or have activated `.venv`.
|
|
292
|
-
|
|
293
|
-
**Debug mode**
|
|
294
|
-
```bash
|
|
295
|
-
uv run python main.py --debug
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
**Dependency conflicts**
|
|
299
|
-
```bash
|
|
300
|
-
uv sync --reinstall
|
|
301
|
-
```
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
PyInstaller build script for DaVinci MCP Professional.
|
|
4
|
-
|
|
5
|
-
Produces standalone single-directory bundles in dist/:
|
|
6
|
-
- davinci-mcp-server/ (pure MCP stdio server, no console noise)
|
|
7
|
-
- davinci-mcp/ (interactive CLI with prerequisite checks)
|
|
8
|
-
|
|
9
|
-
Usage:
|
|
10
|
-
uv run --extra build python build.py
|
|
11
|
-
|
|
12
|
-
The build extra installs PyInstaller. Alternatively install it manually:
|
|
13
|
-
uv add --optional build pyinstaller
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
import sys
|
|
17
|
-
import os
|
|
18
|
-
from pathlib import Path
|
|
19
|
-
|
|
20
|
-
try:
|
|
21
|
-
import PyInstaller.__main__
|
|
22
|
-
except ImportError:
|
|
23
|
-
print("[ERROR] PyInstaller not found.")
|
|
24
|
-
print(" Install with: uv run --extra build python build.py")
|
|
25
|
-
print(" Or manually: uv add --optional build pyinstaller")
|
|
26
|
-
sys.exit(1)
|
|
27
|
-
|
|
28
|
-
ROOT = Path(__file__).parent
|
|
29
|
-
SRC = ROOT / "src"
|
|
30
|
-
|
|
31
|
-
# ---------------------------------------------------------------------------
|
|
32
|
-
# Hidden imports
|
|
33
|
-
#
|
|
34
|
-
# PyInstaller's static analysis misses modules that are imported at runtime
|
|
35
|
-
# via importlib, __import__(), or behind try/except blocks.
|
|
36
|
-
# ---------------------------------------------------------------------------
|
|
37
|
-
HIDDEN_IMPORTS: list[str] = [
|
|
38
|
-
# anyio: backends are selected at runtime by the event-loop policy
|
|
39
|
-
"anyio._backends._asyncio",
|
|
40
|
-
"anyio._backends._trio",
|
|
41
|
-
# MCP internals used at connection time
|
|
42
|
-
"mcp.server.stdio",
|
|
43
|
-
"mcp.server.models",
|
|
44
|
-
"mcp.server.lowlevel",
|
|
45
|
-
"mcp.server.lowlevel.server",
|
|
46
|
-
"mcp.types",
|
|
47
|
-
# pydantic v2: validators and core are loaded dynamically
|
|
48
|
-
"pydantic.deprecated.class_validators",
|
|
49
|
-
"pydantic_core",
|
|
50
|
-
# click / colorama: usually auto-detected, listed for safety
|
|
51
|
-
"click",
|
|
52
|
-
"colorama",
|
|
53
|
-
"colorama.initialise",
|
|
54
|
-
# importlib.metadata: used by __init__.py version fallback
|
|
55
|
-
"importlib.metadata",
|
|
56
|
-
]
|
|
57
|
-
|
|
58
|
-
# On Windows, mcp pulls in pywin32 for named-pipe transport
|
|
59
|
-
if sys.platform == "win32":
|
|
60
|
-
HIDDEN_IMPORTS += ["win32api", "win32con", "win32process", "pywintypes"]
|
|
61
|
-
|
|
62
|
-
# ---------------------------------------------------------------------------
|
|
63
|
-
# Packages to collect in full (Python files + data files + submodules).
|
|
64
|
-
# Needed for packages that rely heavily on runtime discovery.
|
|
65
|
-
# ---------------------------------------------------------------------------
|
|
66
|
-
COLLECT_ALL: list[str] = [
|
|
67
|
-
"mcp",
|
|
68
|
-
"pydantic",
|
|
69
|
-
"pydantic_core",
|
|
70
|
-
"anyio",
|
|
71
|
-
"httpx",
|
|
72
|
-
"httpx_sse",
|
|
73
|
-
"starlette",
|
|
74
|
-
"sse_starlette",
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def _args(name: str, script: Path) -> list[str]:
|
|
79
|
-
"""Assemble the PyInstaller argument list for one target."""
|
|
80
|
-
args = [
|
|
81
|
-
str(script),
|
|
82
|
-
"--name", name,
|
|
83
|
-
"--onedir", # directory bundle — avoids AV false positives
|
|
84
|
-
"--noconfirm", # overwrite previous dist without prompting
|
|
85
|
-
"--distpath", str(ROOT / "dist"),
|
|
86
|
-
"--workpath", str(ROOT / "build"),
|
|
87
|
-
"--specpath", str(ROOT / "build"),
|
|
88
|
-
"--paths", str(SRC), # ensure src/ is on the analysis path
|
|
89
|
-
]
|
|
90
|
-
|
|
91
|
-
for imp in HIDDEN_IMPORTS:
|
|
92
|
-
args += ["--hidden-import", imp]
|
|
93
|
-
|
|
94
|
-
for pkg in COLLECT_ALL:
|
|
95
|
-
args += ["--collect-all", pkg]
|
|
96
|
-
|
|
97
|
-
return args
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def build_target(name: str, script_name: str) -> bool:
|
|
101
|
-
"""
|
|
102
|
-
Build one executable bundle. Returns True on success.
|
|
103
|
-
|
|
104
|
-
The MCP server communicates over stdio (JSON-RPC), so we deliberately
|
|
105
|
-
do NOT pass --noconsole / --windowed. Hiding the console on Windows
|
|
106
|
-
would break the stdio transport that Claude Desktop uses.
|
|
107
|
-
"""
|
|
108
|
-
script = ROOT / script_name
|
|
109
|
-
if not script.exists():
|
|
110
|
-
print(f"[ERROR] Entry point not found: {script}")
|
|
111
|
-
return False
|
|
112
|
-
|
|
113
|
-
print(f"\n{'=' * 60}")
|
|
114
|
-
print(f" Building: {name} ({script_name})")
|
|
115
|
-
print(f"{'=' * 60}\n")
|
|
116
|
-
|
|
117
|
-
args = _args(name, script)
|
|
118
|
-
|
|
119
|
-
try:
|
|
120
|
-
PyInstaller.__main__.run(args)
|
|
121
|
-
except SystemExit as exc:
|
|
122
|
-
if exc.code != 0:
|
|
123
|
-
print(f"\n[ERROR] PyInstaller exited with code {exc.code}")
|
|
124
|
-
return False
|
|
125
|
-
except Exception as exc: # noqa: BLE001
|
|
126
|
-
print(f"\n[ERROR] Build failed: {exc}")
|
|
127
|
-
return False
|
|
128
|
-
|
|
129
|
-
output_dir = ROOT / "dist" / name
|
|
130
|
-
if output_dir.exists():
|
|
131
|
-
print(f"\n[OK] Output directory: {output_dir}")
|
|
132
|
-
return True
|
|
133
|
-
|
|
134
|
-
print(f"\n[ERROR] Expected output not found: {output_dir}")
|
|
135
|
-
return False
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
def main() -> int:
|
|
139
|
-
targets = [
|
|
140
|
-
("davinci-mcp-server", "mcp_server.py"),
|
|
141
|
-
("davinci-mcp", "main.py"),
|
|
142
|
-
]
|
|
143
|
-
|
|
144
|
-
results: list[tuple[str, bool]] = []
|
|
145
|
-
for name, script in targets:
|
|
146
|
-
results.append((name, build_target(name, script)))
|
|
147
|
-
|
|
148
|
-
print(f"\n{'=' * 60}")
|
|
149
|
-
print(" Build Summary")
|
|
150
|
-
print(f"{'=' * 60}")
|
|
151
|
-
for name, ok in results:
|
|
152
|
-
tag = "[OK] " if ok else "[FAILED]"
|
|
153
|
-
print(f" {tag} dist/{name}/")
|
|
154
|
-
|
|
155
|
-
if all(ok for _, ok in results):
|
|
156
|
-
print(f"\nExecutables are inside their respective dist/ subdirectories.")
|
|
157
|
-
if sys.platform == "win32":
|
|
158
|
-
print(" dist/davinci-mcp-server/davinci-mcp-server.exe")
|
|
159
|
-
print(" dist/davinci-mcp/davinci-mcp.exe")
|
|
160
|
-
else:
|
|
161
|
-
print(" dist/davinci-mcp-server/davinci-mcp-server")
|
|
162
|
-
print(" dist/davinci-mcp/davinci-mcp")
|
|
163
|
-
return 0
|
|
164
|
-
|
|
165
|
-
return 1
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if __name__ == "__main__":
|
|
169
|
-
sys.exit(main())
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"davinci-resolve": {
|
|
4
|
-
"name": "DaVinci MCP Professional",
|
|
5
|
-
"command": "/path/to/repo/.venv/bin/python",
|
|
6
|
-
"args": ["/path/to/repo/mcp_server.py"],
|
|
7
|
-
"_comment_windows": "On Windows use .venv\\Scripts\\python.exe",
|
|
8
|
-
"_comment_uv": "Run 'uv venv && uv sync' in the repo to create .venv"
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Single source of truth for CI/code-quality checks.
|
|
3
|
-
# Invoked locally by hooks/pre-push (blocking) and by .github/workflows/ci.yml
|
|
4
|
-
# (confirmation only) — both run this exact script so local and CI cannot drift.
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
uv sync
|
|
8
|
-
|
|
9
|
-
echo "Running tests..."
|
|
10
|
-
uv run pytest
|
|
11
|
-
|
|
12
|
-
echo "Running pyright..."
|
|
13
|
-
uv run pyright
|
|
14
|
-
|
|
15
|
-
echo "Linting with Ruff..."
|
|
16
|
-
uv run ruff check src/
|
|
17
|
-
uv run ruff format src/ --check
|
|
18
|
-
|
|
19
|
-
echo "Security vulnerability scan (safety)..."
|
|
20
|
-
uv run safety check --json || echo "Safety check completed with warnings"
|
|
21
|
-
|
|
22
|
-
echo "SAST with Bandit..."
|
|
23
|
-
uv run bandit -r src/ -f json -o bandit-report.json || echo "Bandit scan completed"
|
|
24
|
-
|
|
25
|
-
echo "License compliance check..."
|
|
26
|
-
uv run pip-licenses --format=json --output-file=licenses.json
|
|
27
|
-
echo "License compliance check completed"
|
|
28
|
-
|
|
29
|
-
echo "ci-check passed."
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# pre-push: local CI/CD gate + informational security review
|
|
3
|
-
#
|
|
4
|
-
# 1. hooks/ci-check.sh — same checks as .github/workflows/ci.yml.
|
|
5
|
-
# BLOCKING: push aborts on failure. Local pass should reliably predict
|
|
6
|
-
# the CI verdict for the same commit; GitHub Actions runs are
|
|
7
|
-
# confirmation, not discovery.
|
|
8
|
-
# 2. Claude Code security review — semantic, informational only.
|
|
9
|
-
# Findings are advisory; review them but they do not block the push.
|
|
10
|
-
|
|
11
|
-
set -e
|
|
12
|
-
|
|
13
|
-
echo "Running local CI checks (hooks/ci-check.sh)..."
|
|
14
|
-
bash hooks/ci-check.sh
|
|
15
|
-
|
|
16
|
-
echo ""
|
|
17
|
-
echo "Local CI checks passed."
|
|
18
|
-
echo ""
|
|
19
|
-
|
|
20
|
-
if ! command -v claude >/dev/null 2>&1; then
|
|
21
|
-
echo "Claude Code not installed. Skipping security review."
|
|
22
|
-
echo " Install from: https://claude.ai/download"
|
|
23
|
-
exit 0
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
if [ ! -f ".claude/commands/security-review.md" ]; then
|
|
27
|
-
echo ".claude/commands/security-review.md not found. Skipping security review."
|
|
28
|
-
exit 0
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
DIFF=$(git diff --merge-base origin/HEAD 2>/dev/null || git diff HEAD~1 2>/dev/null)
|
|
32
|
-
|
|
33
|
-
if [ -z "$DIFF" ]; then
|
|
34
|
-
echo "No changes to review."
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
echo "Running security review..."
|
|
39
|
-
PROMPT="$(cat .claude/commands/security-review.md)
|
|
40
|
-
|
|
41
|
-
DIFF:"
|
|
42
|
-
printf '%s\n%s\n' "$PROMPT" "$DIFF" | claude -p 2>&1 || echo "Security review failed to run (non-blocking)."
|
|
43
|
-
|
|
44
|
-
echo ""
|
|
45
|
-
echo "Security review complete. Address any findings above before pushing."
|
|
46
|
-
exit 0
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Main entry point for DaVinci Resolve MCP Server.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import os
|
|
7
|
-
import sys
|
|
8
|
-
import subprocess
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
|
|
11
|
-
# Get the current directory and virtual environment
|
|
12
|
-
current_dir = Path(__file__).parent
|
|
13
|
-
venv_dir = current_dir / ".venv"
|
|
14
|
-
|
|
15
|
-
# Check if we're in the virtual environment (skip when running as a frozen executable)
|
|
16
|
-
if not getattr(sys, 'frozen', False) and not hasattr(sys, 'real_prefix') and not (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix):
|
|
17
|
-
# Not in virtual environment, run with the venv python
|
|
18
|
-
if os.name == "nt": # Windows
|
|
19
|
-
venv_python = venv_dir / "Scripts" / "python.exe"
|
|
20
|
-
else: # macOS/Linux
|
|
21
|
-
venv_python = venv_dir / "bin" / "python"
|
|
22
|
-
|
|
23
|
-
if venv_python.exists():
|
|
24
|
-
print(f"Starting with virtual environment: {venv_python}")
|
|
25
|
-
# Re-run this script with the virtual environment Python
|
|
26
|
-
result = subprocess.run([str(venv_python), __file__] + sys.argv[1:], check=False)
|
|
27
|
-
sys.exit(result.returncode)
|
|
28
|
-
else:
|
|
29
|
-
print(f"Virtual environment not found at {venv_dir}")
|
|
30
|
-
print("Please run 'python setup.py' first")
|
|
31
|
-
sys.exit(1)
|
|
32
|
-
|
|
33
|
-
# Add the src directory to Python path
|
|
34
|
-
src_dir = current_dir / "src"
|
|
35
|
-
sys.path.insert(0, str(src_dir))
|
|
36
|
-
|
|
37
|
-
from davinci_mcp.cli import main
|
|
38
|
-
|
|
39
|
-
if __name__ == "__main__":
|
|
40
|
-
main()
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Pure MCP server entry point for DaVinci Resolve.
|
|
4
|
-
This version outputs no console messages - only JSON-RPC.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import asyncio
|
|
8
|
-
import sys
|
|
9
|
-
import os
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
|
|
12
|
-
# Add the src directory to Python path
|
|
13
|
-
current_dir = Path(__file__).parent
|
|
14
|
-
src_dir = current_dir / "src"
|
|
15
|
-
sys.path.insert(0, str(src_dir))
|
|
16
|
-
|
|
17
|
-
from davinci_mcp.server import DaVinciMCPServer
|
|
18
|
-
|
|
19
|
-
async def main():
|
|
20
|
-
"""Run the MCP server with no console output."""
|
|
21
|
-
server = DaVinciMCPServer()
|
|
22
|
-
await server.run()
|
|
23
|
-
|
|
24
|
-
if __name__ == "__main__":
|
|
25
|
-
# Suppress all output except JSON-RPC
|
|
26
|
-
try:
|
|
27
|
-
asyncio.run(main())
|
|
28
|
-
except Exception:
|
|
29
|
-
# Exit silently on any error to avoid polluting JSON-RPC
|
|
30
|
-
sys.exit(1)
|