@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.
- 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/hooks/memb-inject.mjs +6 -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 +428 -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 +110 -11
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +48 -4
- 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
|
@@ -119,6 +119,16 @@ function checkAos() {
|
|
|
119
119
|
: 'no harness skill directory holds any skill',
|
|
120
120
|
'npx -y @hybridlabor-api/aos@latest and pick every harness you actually use.');
|
|
121
121
|
|
|
122
|
+
// AO's predecessor. Its repository is archived and the last version it
|
|
123
|
+
// published predates the archiving, so a copy still on disk is the build
|
|
124
|
+
// carrying the CDC loop defect — worth naming, because nothing else will.
|
|
125
|
+
const retired = findModule('bdb-os-agent-workspace');
|
|
126
|
+
if (retired) {
|
|
127
|
+
add('aos', 'retired AO module', false,
|
|
128
|
+
`${tilde(retired)} — the archived predecessor of AO`,
|
|
129
|
+
`Remove it: rm -rf ${tilde(retired)} — AO now comes from hybridlabor-api/bdb-agent-orchestrator.`);
|
|
130
|
+
}
|
|
131
|
+
|
|
122
132
|
// The optional modules are opt-in, so absence is not a failure — but a
|
|
123
133
|
// manifest that claims one is installed while its directory is gone is.
|
|
124
134
|
const claimed = new Set(manifest?.installedModules || []);
|
|
@@ -128,21 +138,55 @@ function checkAos() {
|
|
|
128
138
|
['remote', 'bdb-os-remote', 'OS Remote'],
|
|
129
139
|
['creator', 'bdb-dev-creator-extension', 'Creator Extension'],
|
|
130
140
|
['installer', 'bdb-dev-tool-installer', 'Tool Installer'],
|
|
141
|
+
['ao', 'bdb-agent-orchestrator', 'AO Orchestrator'],
|
|
131
142
|
]) {
|
|
132
143
|
if (!claimed.has(id)) continue;
|
|
133
144
|
const found = findModule(dir);
|
|
134
|
-
|
|
135
|
-
|
|
145
|
+
// AO is distributed on npm as @hybridlabor-api/bdb-agent-orchestrator, but only
|
|
146
|
+
// with a prebuilt binary for macOS arm64. On all other platforms, the installer
|
|
147
|
+
// deliberately skips it and directs you to build from source, so a missing module
|
|
148
|
+
// directory is expected rather than a broken install.
|
|
149
|
+
const aoNote = 'AO is published on npm as @hybridlabor-api/bdb-agent-orchestrator with a prebuilt binary for macOS arm64 only; the installer skips it on other platforms and directs you to build from source, so a missing module directory is expected there. `ao --version` is what says whether it is really present.';
|
|
150
|
+
add('aos', `module ${label}`, !!found || id === 'ao',
|
|
151
|
+
found ? tilde(found)
|
|
152
|
+
: id === 'ao' ? (existsSync(h('.local', 'bin', 'ao')) ? 'built from git — binary present at ~/.local/bin/ao' : 'no binary at ~/.local/bin/ao')
|
|
153
|
+
: 'the manifest claims it is installed, but its directory is gone',
|
|
154
|
+
id === 'ao' ? aoNote : 'npx -y @hybridlabor-api/aos@latest and re-enable the module.');
|
|
136
155
|
}
|
|
137
156
|
}
|
|
138
157
|
|
|
139
158
|
// ---------------------------------------------------------------- hooks
|
|
140
159
|
function checkHooks() {
|
|
141
160
|
const hooksDir = h('.claude', 'hooks');
|
|
161
|
+
|
|
162
|
+
// Existence is not enough: an older install leaves a stale copy behind, and
|
|
163
|
+
// the row would go green over a hook carrying a bug this version fixed.
|
|
164
|
+
// Hooks that carry an `aos-hook-version:` line are checked against what this
|
|
165
|
+
// release expects; the ones that do not are existence-only.
|
|
166
|
+
const EXPECTED_VERSION = { 'memb-inject.mjs': 2 };
|
|
167
|
+
const versionOf = (text) => {
|
|
168
|
+
const m = /^\/\/\s*aos-hook-version:\s*(\d+)/m.exec(text);
|
|
169
|
+
return m ? Number(m[1]) : null;
|
|
170
|
+
};
|
|
171
|
+
|
|
142
172
|
for (const file of ['go-gate.mjs', 'graph-gate.mjs', 'memb-inject.mjs']) {
|
|
143
173
|
const p = path.join(hooksDir, file);
|
|
144
|
-
|
|
145
|
-
'
|
|
174
|
+
if (!existsSync(p)) {
|
|
175
|
+
add('hooks', file, false, 'missing',
|
|
176
|
+
'npx -y @hybridlabor-api/aos@latest (the installer ships and wires all three).');
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const want = EXPECTED_VERSION[file];
|
|
180
|
+
if (!want) {
|
|
181
|
+
add('hooks', file, true, tilde(p), '');
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const got = versionOf(readFileSync(p, 'utf8'));
|
|
185
|
+
add('hooks', file, got === want,
|
|
186
|
+
got === want ? `${tilde(p)} (v${got})`
|
|
187
|
+
: got === null ? `${tilde(p)} — predates version stamping, so it is older than v${want}`
|
|
188
|
+
: `${tilde(p)} — v${got}, this release ships v${want}`,
|
|
189
|
+
'npx -y @hybridlabor-api/aos@latest — Quick Update refreshes hooks from v4.4.1 on; an older installer never replaced them.');
|
|
146
190
|
}
|
|
147
191
|
|
|
148
192
|
const settings = readJson(h('.claude', 'settings.json'));
|
|
@@ -270,14 +270,9 @@ Use these for raw problem solving and code hygiene.
|
|
|
270
270
|
|
|
271
271
|
Specific utilities for the BDB environment.
|
|
272
272
|
|
|
273
|
-
* **Top
|
|
273
|
+
* **Top Pick:** `memb-skill`
|
|
274
274
|
|
|
275
|
-
|
|
276
|
-
* **`bdbsaas-ops`**: Retired. Do not use.
|
|
277
|
-
* **`bdbsaashost`**: The active skill for managing the BDB Multi-Cloud Fleet (GCP, Oracle, Incus).
|
|
278
|
-
* **`bdbsaastraining`**: For onboarding/training staff on the host engine.
|
|
279
|
-
|
|
280
|
-
*Also see:* `bdb-ecosystem-health`, `bdb-dev-os-skill`, `memb-ingest`, `synapse-integration-skill`.
|
|
275
|
+
*Also see:* `memb-ingest`, `synapse-integration-skill`.
|
|
281
276
|
|
|
282
277
|
---
|
|
283
278
|
|
|
@@ -82,27 +82,80 @@ def log(msg):
|
|
|
82
82
|
pass
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
DISCOVERY_DEPTH = 4
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def discover_wikis(roots):
|
|
89
|
+
"""Every repository that already has a wiki, found rather than declared.
|
|
90
|
+
|
|
91
|
+
projects.json used to be a hand-maintained list seeded with a single entry,
|
|
92
|
+
and nothing ever added to it. A repo where someone ran `openwiki --init`
|
|
93
|
+
was simply never visited again: on the machine this was written for, 31
|
|
94
|
+
wikis existed and 3 were being refreshed, the oldest untouched for two
|
|
95
|
+
months. A wiki's own presence on disk is the only signal needed.
|
|
96
|
+
"""
|
|
97
|
+
found = []
|
|
98
|
+
for root in roots:
|
|
99
|
+
root = os.path.expanduser(root)
|
|
100
|
+
if not os.path.isdir(root):
|
|
101
|
+
continue
|
|
102
|
+
base_depth = root.rstrip(os.sep).count(os.sep)
|
|
103
|
+
for dirpath, dirnames, _ in os.walk(root):
|
|
104
|
+
if dirpath.count(os.sep) - base_depth >= DISCOVERY_DEPTH:
|
|
105
|
+
dirnames[:] = []
|
|
106
|
+
continue
|
|
107
|
+
dirnames[:] = [d for d in dirnames
|
|
108
|
+
if d not in ("node_modules", ".git", "venv", ".venv", "__pycache__")]
|
|
109
|
+
if ".openwiki" in dirnames:
|
|
110
|
+
found.append(os.path.abspath(dirpath))
|
|
111
|
+
dirnames.remove(".openwiki")
|
|
112
|
+
return sorted(set(found))
|
|
113
|
+
|
|
114
|
+
|
|
85
115
|
def get_projects():
|
|
86
116
|
config_file = os.path.join(LOG_DIR, "projects.json")
|
|
87
117
|
os.makedirs(LOG_DIR, exist_ok=True)
|
|
88
118
|
|
|
89
|
-
|
|
119
|
+
data = {}
|
|
120
|
+
if os.path.exists(config_file):
|
|
121
|
+
try:
|
|
122
|
+
with open(config_file, "r") as f:
|
|
123
|
+
data = json.load(f)
|
|
124
|
+
except Exception as e:
|
|
125
|
+
log(f"Error reading config: {e}")
|
|
126
|
+
data = {}
|
|
127
|
+
|
|
128
|
+
interval = data.get("interval_seconds", 7200)
|
|
129
|
+
pinned = [p for p in data.get("projects", []) if os.path.isdir(p)]
|
|
130
|
+
|
|
131
|
+
# `discovery_roots: []` in projects.json turns scanning off and keeps the
|
|
132
|
+
# list purely manual; anything explicitly listed is always kept.
|
|
133
|
+
roots = data.get("discovery_roots")
|
|
134
|
+
if roots is None:
|
|
135
|
+
roots = ["~/dev"]
|
|
90
136
|
repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../.."))
|
|
91
|
-
|
|
137
|
+
if os.path.isdir(repo_root):
|
|
138
|
+
pinned.append(repo_root)
|
|
139
|
+
|
|
140
|
+
discovered = discover_wikis(roots) if roots else []
|
|
141
|
+
projects = sorted(set(pinned) | set(discovered))
|
|
142
|
+
|
|
143
|
+
new_ones = set(projects) - set(data.get("projects", []))
|
|
144
|
+
if new_ones:
|
|
145
|
+
log(f"Discovered {len(new_ones)} wiki(s) not previously tracked: "
|
|
146
|
+
+ ", ".join(sorted(os.path.basename(p) for p in new_ones)))
|
|
147
|
+
|
|
148
|
+
if projects != data.get("projects") or "discovery_roots" not in data:
|
|
149
|
+
data["projects"] = projects
|
|
150
|
+
data["interval_seconds"] = interval
|
|
151
|
+
data.setdefault("discovery_roots", roots)
|
|
92
152
|
try:
|
|
93
153
|
with open(config_file, "w") as f:
|
|
94
|
-
json.dump(
|
|
154
|
+
json.dump(data, f, indent=2)
|
|
95
155
|
except Exception as e:
|
|
96
|
-
log(f"Error writing
|
|
97
|
-
return [], 7200
|
|
156
|
+
log(f"Error writing config: {e}")
|
|
98
157
|
|
|
99
|
-
|
|
100
|
-
with open(config_file, "r") as f:
|
|
101
|
-
data = json.load(f)
|
|
102
|
-
return data.get("projects", []), data.get("interval_seconds", 7200)
|
|
103
|
-
except Exception as e:
|
|
104
|
-
log(f"Error reading config: {e}")
|
|
105
|
-
return [], 7200
|
|
158
|
+
return projects, interval
|
|
106
159
|
|
|
107
160
|
|
|
108
161
|
def find_helper():
|