@hybridlabor-api/aos 4.4.1 → 4.4.2-beta.1
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 +471 -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
|
Binary file
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
# Minimal, ingestion-ready docs fetcher (md/html only)
|
|
5
|
-
|
|
6
|
-
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
-
DATA_DIR="${ROOT}/data"
|
|
8
|
-
mkdir -p "${DATA_DIR}"
|
|
9
|
-
|
|
10
|
-
echo "==> Clone: Vectorworks developer-scripting (GitHub)"
|
|
11
|
-
# Official scripting landing/how-to content (markdown/html)
|
|
12
|
-
# https://github.com/Vectorworks/developer-scripting
|
|
13
|
-
if [ ! -d "${DATA_DIR}/vw-dev-scripting" ]; then
|
|
14
|
-
git clone --depth=1 https://github.com/Vectorworks/developer-scripting "${DATA_DIR}/vw-dev-scripting"
|
|
15
|
-
else
|
|
16
|
-
git -C "${DATA_DIR}/vw-dev-scripting" pull --ff-only
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
echo "==> Fetch: App Help (core scripting pages 2022/2023/2024)"
|
|
20
|
-
APP_HELP="${DATA_DIR}/vw-app-help"
|
|
21
|
-
mkdir -p "${APP_HELP}"
|
|
22
|
-
|
|
23
|
-
UA_DEFAULT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0 Safari/537.36"
|
|
24
|
-
UA="${UA:-$UA_DEFAULT}"
|
|
25
|
-
|
|
26
|
-
fetch() {
|
|
27
|
-
local url="$1"
|
|
28
|
-
local out="$2"
|
|
29
|
-
echo "fetch ${url} -> ${out}"
|
|
30
|
-
curl -fsSL -H "User-Agent: ${UA}" "$url" -o "$out"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
fetch_optional() {
|
|
34
|
-
local url="$1"
|
|
35
|
-
local out="$2"
|
|
36
|
-
echo "fetch(optional) ${url} -> ${out}"
|
|
37
|
-
if ! curl -fsSL -H "User-Agent: ${UA}" "$url" -o "$out"; then
|
|
38
|
-
echo "WARN: Failed to fetch optional resource: ${url} (skipped)" >&2
|
|
39
|
-
fi
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
# 2022 Scripting top
|
|
43
|
-
fetch "https://app-help.vectorworks.net/2022/eng/VW2022_Guide/Scripts/Scripting.htm" \
|
|
44
|
-
"${APP_HELP}/VW2022_Scripting.htm"
|
|
45
|
-
|
|
46
|
-
# 2022 Script Editor / palettes
|
|
47
|
-
fetch "https://app-help.vectorworks.net/2022/eng/VW2022_Guide/Scripts/Creating_and_editing_script_palettes_and_scripts.htm" \
|
|
48
|
-
"${APP_HELP}/VW2022_ScriptEditor.htm"
|
|
49
|
-
|
|
50
|
-
# 2022 plug-in script specification
|
|
51
|
-
fetch "https://app-help.vectorworks.net/2022/eng/VW2022_Guide/Scripts/Specifying_the_plug-in_script.htm" \
|
|
52
|
-
"${APP_HELP}/VW2022_PluginScript.htm"
|
|
53
|
-
|
|
54
|
-
# 2023 Creating scripted plug-ins (explicit practical page)
|
|
55
|
-
fetch "https://app-help.vectorworks.net/2023/eng/VW2023_Guide/Scripts/Creating_scripted%20plug-ins.htm?agt=index" \
|
|
56
|
-
"${APP_HELP}/VW2023_CreatingScriptedPlugins.htm"
|
|
57
|
-
|
|
58
|
-
# 2024 Running scripts (how to run)
|
|
59
|
-
fetch "https://app-help.vectorworks.net/2024/eng/VW2024_Guide/Scripts/Running_scripts.htm" \
|
|
60
|
-
"${APP_HELP}/VW2024_RunningScripts.htm"
|
|
61
|
-
|
|
62
|
-
echo "==> Fetch: VectorScript reference (JP index + example page)"
|
|
63
|
-
JP_REF="${DATA_DIR}/vw-jp-ref"
|
|
64
|
-
mkdir -p "${JP_REF}"
|
|
65
|
-
|
|
66
|
-
# Function index (Japanese)
|
|
67
|
-
fetch "https://www.vectorworks.co.jp/develop/ScriptReference/ScriptFunctionReference.html" \
|
|
68
|
-
"${JP_REF}/ScriptFunctionReference.html"
|
|
69
|
-
|
|
70
|
-
# Example: Objects/Symbols API page
|
|
71
|
-
fetch "https://www.vectorworks.co.jp/develop/ScriptReference/Pages/ObjectsSymbols.html" \
|
|
72
|
-
"${JP_REF}/ObjectsSymbols.html"
|
|
73
|
-
|
|
74
|
-
echo "==> Fetch: Developer Wiki category page (EN)"
|
|
75
|
-
DEVWIKI="${DATA_DIR}/vw-devwiki"
|
|
76
|
-
mkdir -p "${DEVWIKI}"
|
|
77
|
-
|
|
78
|
-
# Category index sample page (HTML). Note: PDF not fetched (not ingested).
|
|
79
|
-
# Some endpoints may return 403 to generic clients; treat as optional.
|
|
80
|
-
fetch_optional "https://developer.vectorworks.net/index.php?pagefrom=SetDocDrpShadwByCls%0AVS%3ASetDocDrpShadwByCls&subcatfrom=VS+Function+Reference%3ADimensions&title=Category%3AVS_Function_Reference&until=VS+Function+Reference%3ADimensions" \
|
|
81
|
-
"${DEVWIKI}/VS_Function_Reference_category.html"
|
|
82
|
-
|
|
83
|
-
echo "==> Done. Saved under: ${DATA_DIR}"
|
|
84
|
-
echo "Files ready for ingestion: .md/.html under ${DATA_DIR}"
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
# Clone/update selected Vectorworks repos into:
|
|
5
|
-
# ${DATA_DIR:-data}/github/vectorworks/<repo>
|
|
6
|
-
#
|
|
7
|
-
# Optional env:
|
|
8
|
-
# DATA_DIR Base data dir (default: data)
|
|
9
|
-
# REPOS Space- or comma-separated owner/repo list
|
|
10
|
-
# Default:
|
|
11
|
-
# Vectorworks/developer-scripting \
|
|
12
|
-
# Vectorworks/developer-sdk \
|
|
13
|
-
# Vectorworks/developer-worksheets
|
|
14
|
-
|
|
15
|
-
DATA_DIR=${DATA_DIR:-data}
|
|
16
|
-
BASE_DIR="$DATA_DIR/github/vectorworks"
|
|
17
|
-
mkdir -p "$BASE_DIR"
|
|
18
|
-
|
|
19
|
-
DEFAULT_REPOS=(
|
|
20
|
-
"Vectorworks/developer-scripting"
|
|
21
|
-
"Vectorworks/developer-sdk"
|
|
22
|
-
"Vectorworks/developer-worksheets"
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
if [[ -n "${REPOS:-}" ]]; then
|
|
26
|
-
# allow comma or space separated
|
|
27
|
-
IFS=' ' read -r -a REPOS_LIST <<< "$(echo "$REPOS" | tr ',' ' ')"
|
|
28
|
-
else
|
|
29
|
-
REPOS_LIST=("${DEFAULT_REPOS[@]}")
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
echo "[info] Syncing ${#REPOS_LIST[@]} repositories"
|
|
33
|
-
for full in "${REPOS_LIST[@]}"; do
|
|
34
|
-
owner="${full%%/*}"
|
|
35
|
-
repo="${full##*/}"
|
|
36
|
-
url="https://github.com/$full.git"
|
|
37
|
-
dest="$BASE_DIR/$repo"
|
|
38
|
-
|
|
39
|
-
if [[ -d "$dest" && ! -d "$dest/.git" ]]; then
|
|
40
|
-
echo "[warn] $dest exists but is not a git repo. Skipped." >&2
|
|
41
|
-
continue
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
if [[ -d "$dest/.git" ]]; then
|
|
45
|
-
echo "[update] $full"
|
|
46
|
-
default_branch=$(git -C "$dest" remote show origin | awk '/HEAD branch/ {print $NF}')
|
|
47
|
-
# Ensure we are on the default branch
|
|
48
|
-
current_branch=$(git -C "$dest" rev-parse --abbrev-ref HEAD || echo "")
|
|
49
|
-
if [[ -n "$default_branch" && "$current_branch" != "$default_branch" ]]; then
|
|
50
|
-
git -C "$dest" checkout -B "$default_branch" --track "origin/$default_branch" 2>/dev/null || \
|
|
51
|
-
git -C "$dest" checkout "$default_branch" 2>/dev/null || true
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
if [[ "${UPDATE_MODE:-pull}" == "pull" ]]; then
|
|
55
|
-
# Prefer fast-forward pull with shallow fetch for speed
|
|
56
|
-
if [[ -n "$default_branch" ]]; then
|
|
57
|
-
git -C "$dest" pull --ff-only --depth=1 --prune origin "$default_branch" || {
|
|
58
|
-
echo "[warn] pull failed; falling back to fetch+reset" >&2
|
|
59
|
-
git -C "$dest" fetch --force --depth=1 origin "$default_branch"
|
|
60
|
-
git -C "$dest" reset --hard "origin/$default_branch"
|
|
61
|
-
}
|
|
62
|
-
else
|
|
63
|
-
git -C "$dest" pull --ff-only --depth=1 --prune origin || {
|
|
64
|
-
echo "[warn] pull failed; falling back to fetch+reset (HEAD)" >&2
|
|
65
|
-
git -C "$dest" fetch --force --depth=1 origin
|
|
66
|
-
git -C "$dest" reset --hard "origin/HEAD"
|
|
67
|
-
}
|
|
68
|
-
fi
|
|
69
|
-
else
|
|
70
|
-
# Clean, deterministic sync (discard local changes)
|
|
71
|
-
if [[ -n "$default_branch" ]]; then
|
|
72
|
-
git -C "$dest" fetch --force --depth=1 origin "$default_branch"
|
|
73
|
-
git -C "$dest" reset --hard "origin/$default_branch"
|
|
74
|
-
else
|
|
75
|
-
git -C "$dest" fetch --force --depth=1 origin
|
|
76
|
-
git -C "$dest" reset --hard "origin/HEAD"
|
|
77
|
-
fi
|
|
78
|
-
fi
|
|
79
|
-
else
|
|
80
|
-
echo "[clone] $full -> $dest"
|
|
81
|
-
git clone --depth=1 "$url" "$dest"
|
|
82
|
-
fi
|
|
83
|
-
done
|
|
84
|
-
|
|
85
|
-
echo "[done] Repositories synced under: $BASE_DIR"
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="ja">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>Vectorworks Docs 検索</title>
|
|
7
|
-
<style>
|
|
8
|
-
body { font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; margin: 2rem auto; max-width: 900px; line-height: 1.5; }
|
|
9
|
-
form { display: flex; gap: .5rem; }
|
|
10
|
-
input[type=text] { flex: 1; padding: .6rem .8rem; font-size: 1rem; }
|
|
11
|
-
button { padding: .6rem 1rem; font-size: 1rem; }
|
|
12
|
-
.card { border: 1px solid #ddd; border-radius: 8px; padding: .8rem 1rem; margin: 1rem 0; }
|
|
13
|
-
.meta { color: #444; font-size: .9rem; }
|
|
14
|
-
code { background: #f6f8fa; padding: 0 .2rem; border-radius: 3px; }
|
|
15
|
-
.score { float: right; color: #555; }
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
<body>
|
|
19
|
-
<h1>Vectorworks Docs 検索</h1>
|
|
20
|
-
<form method="get" action="/">
|
|
21
|
-
<input type="text" name="q" placeholder="API名や関数、キーワードで検索" value="{{ q }}" />
|
|
22
|
-
<button type="submit">検索</button>
|
|
23
|
-
</form>
|
|
24
|
-
|
|
25
|
-
{% if q and results|length == 0 %}
|
|
26
|
-
<p>該当する結果が見つかりませんでした。</p>
|
|
27
|
-
{% endif %}
|
|
28
|
-
|
|
29
|
-
{% for r in results %}
|
|
30
|
-
<div class="card">
|
|
31
|
-
<div class="meta">
|
|
32
|
-
<span>{{ r.doc_id }} #{{ r.chunk_id }}</span>
|
|
33
|
-
<span class="score">score: {{ '%.3f'|format(r.score) }}</span>
|
|
34
|
-
</div>
|
|
35
|
-
<pre style="white-space: pre-wrap;">{{ r.text }}</pre>
|
|
36
|
-
</div>
|
|
37
|
-
{% endfor %}
|
|
38
|
-
</body>
|
|
39
|
-
</html>
|
|
40
|
-
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const os = require('os');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const { execSync } = require('child_process');
|
|
6
|
-
|
|
7
|
-
const REPOS = [
|
|
8
|
-
{ id: 'bdb-dev-optimized-agent-skills', name: 'BDB Agent OS Kernel', type: 'kernel' },
|
|
9
|
-
{ id: 'bdb-dev-tool-installer', name: 'Tool Installer Hub', type: 'module' },
|
|
10
|
-
{ id: 'bdb-synapse', name: 'Synapse 3D', type: 'module' },
|
|
11
|
-
{ id: 'memB', name: 'memB Vector Engine', type: 'module' },
|
|
12
|
-
{ id: 'heimdall-token-saver', name: 'Heimdall Token Saver', type: 'module' },
|
|
13
|
-
{ id: 'bdb-os-remote', name: 'BDB OS Remote Gateway', type: 'module' },
|
|
14
|
-
{ id: 'bdb-os-agent-workspace', name: 'OS Agent Workspace', type: 'module' },
|
|
15
|
-
{ id: 'bdb-dev-creator-extension', name: 'Creator Extension', type: 'module' }
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
const BASE_PATH = path.join(os.homedir(), 'dev', 'bdb-dev');
|
|
19
|
-
const REPORT_DIR = path.join(BASE_PATH, 'marketing-intern', 'reports');
|
|
20
|
-
const REPORT_FILE = path.join(REPORT_DIR, 'ecosystem_health_latest.html');
|
|
21
|
-
|
|
22
|
-
if (!fs.existsSync(REPORT_DIR)) {
|
|
23
|
-
fs.mkdirSync(REPORT_DIR, { recursive: true });
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
console.log('🔍 Running BDB Ecosystem Health Audit...');
|
|
27
|
-
|
|
28
|
-
const results = [];
|
|
29
|
-
let totalIssues = 0;
|
|
30
|
-
const remediationPlan = [];
|
|
31
|
-
|
|
32
|
-
for (const item of REPOS) {
|
|
33
|
-
const repoDir = path.join(BASE_PATH, item.id);
|
|
34
|
-
const pkgPath = path.join(repoDir, 'package.json');
|
|
35
|
-
|
|
36
|
-
let pkgName = 'N/A';
|
|
37
|
-
let localVer = 'N/A';
|
|
38
|
-
let npmVer = 'N/A';
|
|
39
|
-
let gitBranch = 'unknown';
|
|
40
|
-
let gitDirty = false;
|
|
41
|
-
let unpushedCommits = 0;
|
|
42
|
-
let ciStatus = 'unknown';
|
|
43
|
-
let ciWorkflow = '';
|
|
44
|
-
let issues = [];
|
|
45
|
-
|
|
46
|
-
if (fs.existsSync(pkgPath)) {
|
|
47
|
-
try {
|
|
48
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
49
|
-
pkgName = pkg.name;
|
|
50
|
-
localVer = pkg.version;
|
|
51
|
-
try {
|
|
52
|
-
npmVer = execSync(`npm view ${pkg.name} version 2>/dev/null`, { encoding: 'utf8' }).trim();
|
|
53
|
-
} catch (e) {
|
|
54
|
-
npmVer = 'NOT FOUND / ERROR';
|
|
55
|
-
issues.push('Package not found on NPM registry');
|
|
56
|
-
}
|
|
57
|
-
} catch (e) {
|
|
58
|
-
issues.push('Invalid package.json format');
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
issues.push('Missing package.json');
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Version Match Check
|
|
65
|
-
if (localVer !== 'N/A' && npmVer !== 'N/A' && localVer !== npmVer) {
|
|
66
|
-
issues.push(`Version drift: Local (${localVer}) != NPM (${npmVer})`);
|
|
67
|
-
remediationPlan.push(`[${item.name}] Sync version: Publish ${localVer} to NPM or update package.json`);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Git Status Check
|
|
71
|
-
if (fs.existsSync(repoDir)) {
|
|
72
|
-
try {
|
|
73
|
-
gitBranch = execSync(`git -C "${repoDir}" rev-parse --abbrev-ref HEAD 2>/dev/null`, { encoding: 'utf8' }).trim();
|
|
74
|
-
const statusOut = execSync(`git -C "${repoDir}" status --porcelain 2>/dev/null`, { encoding: 'utf8' }).trim();
|
|
75
|
-
gitDirty = statusOut.length > 0;
|
|
76
|
-
if (gitDirty) {
|
|
77
|
-
issues.push('Uncommitted local changes');
|
|
78
|
-
remediationPlan.push(`[${item.name}] Commit or stash uncommitted changes on branch ${gitBranch}`);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const unpushed = execSync(`git -C "${repoDir}" log @{u}.. 2>/dev/null | grep "^commit" | wc -l`, { encoding: 'utf8' }).trim();
|
|
82
|
-
unpushedCommits = parseInt(unpushed, 10) || 0;
|
|
83
|
-
if (unpushedCommits > 0) {
|
|
84
|
-
issues.push(`${unpushedCommits} unpushed commit(s)`);
|
|
85
|
-
remediationPlan.push(`[${item.name}] Push ${unpushedCommits} commit(s) to remote origin/${gitBranch}`);
|
|
86
|
-
}
|
|
87
|
-
} catch (e) {
|
|
88
|
-
issues.push('Git status check failed');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// GitHub Actions Status Check
|
|
92
|
-
try {
|
|
93
|
-
const ghOut = execSync(`gh run list --repo hybridlabor-api/${item.id} -L 1 --json conclusion,name,status 2>/dev/null`, { encoding: 'utf8' });
|
|
94
|
-
const runs = JSON.parse(ghOut);
|
|
95
|
-
if (runs.length > 0) {
|
|
96
|
-
const r = runs[0];
|
|
97
|
-
ciStatus = r.conclusion || r.status || 'unknown';
|
|
98
|
-
ciWorkflow = r.name;
|
|
99
|
-
if (ciStatus === 'failure' || ciStatus === 'cancelled') {
|
|
100
|
-
issues.push(`Latest CI run failed: ${ciWorkflow}`);
|
|
101
|
-
remediationPlan.push(`[${item.name}] Inspect failed GitHub Action workflow '${ciWorkflow}' via 'gh run view'`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
} catch (e) {
|
|
105
|
-
ciStatus = 'N/A';
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
issues.push('Local directory does not exist');
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (issues.length > 0) totalIssues += issues.length;
|
|
112
|
-
|
|
113
|
-
results.push({
|
|
114
|
-
...item,
|
|
115
|
-
pkgName,
|
|
116
|
-
localVer,
|
|
117
|
-
npmVer,
|
|
118
|
-
gitBranch,
|
|
119
|
-
gitDirty,
|
|
120
|
-
unpushedCommits,
|
|
121
|
-
ciStatus,
|
|
122
|
-
ciWorkflow,
|
|
123
|
-
issues,
|
|
124
|
-
status: issues.length === 0 ? 'HEALTHY' : 'WARNING'
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Generate HTML Report
|
|
129
|
-
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
|
|
130
|
-
const allHealthy = totalIssues === 0;
|
|
131
|
-
|
|
132
|
-
const rowsHtml = results.map(r => {
|
|
133
|
-
const statusBadge = r.status === 'HEALTHY'
|
|
134
|
-
? '<span style="background:#065f46; color:#34d399; padding:4px 10px; border-radius:999px; font-weight:700; font-size:12px;">HEALTHY</span>'
|
|
135
|
-
: '<span style="background:#831843; color:#f43f5e; padding:4px 10px; border-radius:999px; font-weight:700; font-size:12px;">ATTENTION</span>';
|
|
136
|
-
|
|
137
|
-
const ciBadge = r.ciStatus === 'success'
|
|
138
|
-
? '<span style="color:#10b981; font-weight:600;">✓ success</span>'
|
|
139
|
-
: r.ciStatus === 'failure'
|
|
140
|
-
? '<span style="color:#ef4444; font-weight:700;">✗ failed</span>'
|
|
141
|
-
: `<span style="color:#94a3b8;">${r.ciStatus}</span>`;
|
|
142
|
-
|
|
143
|
-
const issuesList = r.issues.length === 0
|
|
144
|
-
? '<span style="color:#10b981;">No issues detected</span>'
|
|
145
|
-
: r.issues.map(i => `<div style="color:#fbbf24; font-size:12px;">⚠️ ${i}</div>`).join('');
|
|
146
|
-
|
|
147
|
-
return `
|
|
148
|
-
<tr style="border-bottom:1px solid #23273c;">
|
|
149
|
-
<td style="padding:16px 18px;">
|
|
150
|
-
<div style="font-weight:700; color:#ffffff; font-size:15px;">${r.name}</div>
|
|
151
|
-
<div style="font-family:monospace; color:#94a3b8; font-size:12px;">${r.pkgName}</div>
|
|
152
|
-
</td>
|
|
153
|
-
<td style="padding:16px 18px; font-family:monospace; color:#38bdf8;">${r.localVer}</td>
|
|
154
|
-
<td style="padding:16px 18px; font-family:monospace; color:#a78bfa;">${r.npmVer}</td>
|
|
155
|
-
<td style="padding:16px 18px;">${r.gitDirty ? '<span style="color:#ef4444;">Dirty</span>' : '<span style="color:#10b981;">Clean</span>'}</td>
|
|
156
|
-
<td style="padding:16px 18px;">${ciBadge}</td>
|
|
157
|
-
<td style="padding:16px 18px;">${statusBadge}</td>
|
|
158
|
-
<td style="padding:16px 18px;">${issuesList}</td>
|
|
159
|
-
</tr>
|
|
160
|
-
`;
|
|
161
|
-
}).join('');
|
|
162
|
-
|
|
163
|
-
const planHtml = remediationPlan.length > 0
|
|
164
|
-
? `
|
|
165
|
-
<div style="margin-top:32px; background:#1e1b4b; border:1px solid #4338ca; border-radius:12px; padding:24px;">
|
|
166
|
-
<h3 style="color:#facc15; margin:0 0 12px 0;">🛠️ Automated Remediation Plan</h3>
|
|
167
|
-
<ol style="margin:0; padding-left:20px; color:#cbd5e1; font-size:14px; line-height:1.8;">
|
|
168
|
-
${remediationPlan.map(p => `<li>${p}</li>`).join('')}
|
|
169
|
-
</ol>
|
|
170
|
-
</div>
|
|
171
|
-
`
|
|
172
|
-
: `
|
|
173
|
-
<div style="margin-top:32px; background:#064e3b; border:1px solid #059669; border-radius:12px; padding:20px; text-align:center;">
|
|
174
|
-
<h3 style="color:#34d399; margin:0 0 4px 0;">🎉 All Systems 100% Operational</h3>
|
|
175
|
-
<p style="color:#a7f3d0; margin:0; font-size:14px;">All repositories, NPM registries, and CI/CD pipelines are fully synchronized and error-free.</p>
|
|
176
|
-
</div>
|
|
177
|
-
`;
|
|
178
|
-
|
|
179
|
-
const fullHtml = `<!DOCTYPE html>
|
|
180
|
-
<html lang="en">
|
|
181
|
-
<head>
|
|
182
|
-
<meta charset="UTF-8">
|
|
183
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
184
|
-
<title>BDB Ecosystem Health Audit</title>
|
|
185
|
-
<style>
|
|
186
|
-
body { margin:0; padding:40px 20px; background:#090a0f; color:#f0f2f8; font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
|
187
|
-
.container { max-width:1100px; margin:0 auto; background:#12141e; border:1px solid #23273c; border-radius:16px; padding:32px; box-shadow:0 20px 40px rgba(0,0,0,0.6); }
|
|
188
|
-
table { width:100%; border-collapse:collapse; text-align:left; margin-top:24px; }
|
|
189
|
-
th { padding:14px 18px; color:#94a3b8; font-size:12px; text-transform:uppercase; letter-spacing:0.05em; border-bottom:2px solid #23273c; background:#18132b; }
|
|
190
|
-
</style>
|
|
191
|
-
</head>
|
|
192
|
-
<body>
|
|
193
|
-
<div class="container">
|
|
194
|
-
<div style="display:flex; justify-content:space-between; align-items:center; border-bottom:1px solid #23273c; padding-bottom:20px;">
|
|
195
|
-
<div>
|
|
196
|
-
<h1 style="margin:0 0 6px 0; color:#facc15; font-size:26px;">🛡️ BDB Ecosystem Health Audit</h1>
|
|
197
|
-
<div style="color:#94a3b8; font-size:14px;">Live Verification & Drift Monitor across Kernel + 7 Modules</div>
|
|
198
|
-
</div>
|
|
199
|
-
<div style="text-align:right;">
|
|
200
|
-
<div style="font-size:12px; color:#64748b;">AUDIT TIMESTAMP</div>
|
|
201
|
-
<div style="font-weight:700; color:#38bdf8; font-size:14px;">${timestamp} UTC</div>
|
|
202
|
-
</div>
|
|
203
|
-
</div>
|
|
204
|
-
|
|
205
|
-
<table>
|
|
206
|
-
<thead>
|
|
207
|
-
<tr>
|
|
208
|
-
<th>Repository</th>
|
|
209
|
-
<th>Local</th>
|
|
210
|
-
<th>NPM</th>
|
|
211
|
-
<th>Git</th>
|
|
212
|
-
<th>CI Pipeline</th>
|
|
213
|
-
<th>Health</th>
|
|
214
|
-
<th>Diagnostics</th>
|
|
215
|
-
</tr>
|
|
216
|
-
</thead>
|
|
217
|
-
<tbody>
|
|
218
|
-
${rowsHtml}
|
|
219
|
-
</tbody>
|
|
220
|
-
</table>
|
|
221
|
-
|
|
222
|
-
${planHtml}
|
|
223
|
-
|
|
224
|
-
<div style="margin-top:32px; text-align:center; color:#64748b; font-size:12px;">
|
|
225
|
-
BDB Agent OS • Automated Health Monitor • Generated via <code>ecosystem-health-audit.js</code>
|
|
226
|
-
</div>
|
|
227
|
-
</div>
|
|
228
|
-
</body>
|
|
229
|
-
</html>`;
|
|
230
|
-
|
|
231
|
-
fs.writeFileSync(REPORT_FILE, fullHtml, 'utf8');
|
|
232
|
-
console.log(`✅ HTML Report generated at: ${REPORT_FILE}`);
|
|
233
|
-
|
|
234
|
-
// Auto-open in browser if requested or by default
|
|
235
|
-
if (process.argv.includes('--open') || !process.argv.includes('--no-open')) {
|
|
236
|
-
try {
|
|
237
|
-
execSync(`open "${REPORT_FILE}"`);
|
|
238
|
-
console.log('🌐 Opened report in Chrome/Default Browser.');
|
|
239
|
-
} catch (e) {}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Print Terminal Summary
|
|
243
|
-
console.log('\n================ AUDIT SUMMARY ================');
|
|
244
|
-
results.forEach(r => {
|
|
245
|
-
const icon = r.status === 'HEALTHY' ? '🟢' : '🔴';
|
|
246
|
-
console.log(`${icon} ${r.name.padEnd(28)} | Local: ${r.localVer.padEnd(6)} | NPM: ${r.npmVer.padEnd(6)} | Git: ${r.gitDirty ? 'Dirty' : 'Clean'} | CI: ${r.ciStatus}`);
|
|
247
|
-
});
|
|
248
|
-
console.log('================================================\n');
|
|
249
|
-
|
|
250
|
-
if (remediationPlan.length > 0) {
|
|
251
|
-
console.log('⚠️ Remediation Steps:');
|
|
252
|
-
remediationPlan.forEach((p, idx) => console.log(` ${idx + 1}. ${p}`));
|
|
253
|
-
process.exit(1);
|
|
254
|
-
} else {
|
|
255
|
-
console.log('✨ All modules are clean and green!');
|
|
256
|
-
process.exit(0);
|
|
257
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: bdb-dev-os-skill
|
|
3
|
-
description: Use when internal maintainer rules for the BDB Agent OS Ecosystem (Tim & Noah only).
|
|
4
|
-
category: bdb-core
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# BDB Ecosystem Release Rules
|
|
8
|
-
|
|
9
|
-
1. **Private by Default:** All GitHub repositories are private. Distribution is strictly via NPM Tarballs.
|
|
10
|
-
2. **Version Pinning:** The installer must pin exact, validated semantic versions. No `latest`.
|
|
11
|
-
3. **Cross-Commit Awareness:** Always audit ecosystem modules when the Kernel updates, and vice versa.
|
|
12
|
-
4. **Sub-Modul Liste:**
|
|
13
|
-
- `bdb-synapse`
|
|
14
|
-
- `memB`
|
|
15
|
-
- `heimdall-token-saver`
|
|
16
|
-
- `bdb-os-agent-workspace`
|
|
17
|
-
- `creator-extension`
|
|
18
|
-
- `bdb-os-remote`
|
|
19
|
-
|
|
20
|
-
## 1. Overview
|
|
21
|
-
This skill provides domain-specific logic and rules for its respective BDB pipeline component to ensure standardization across multi-agent workflows.
|
|
22
|
-
|
|
23
|
-
## 2. When to Use
|
|
24
|
-
- Use when specifically requested by the user or triggered by an orchestration agent.
|
|
25
|
-
- Use when the current task aligns with the skill's domain.
|
|
26
|
-
- Exclude when standard tool execution is sufficient.
|
|
27
|
-
|
|
28
|
-
## 3. Core Process
|
|
29
|
-
1. Read the provided context and ensure preconditions are met.
|
|
30
|
-
2. Run the required script or tool and confirm the state change.
|
|
31
|
-
3. Verify exit codes, file modifications, or DB counts to guarantee success before reporting completion.
|
|
32
|
-
|
|
33
|
-
## 4. Common Rationalizations
|
|
34
|
-
| Rationalization | Reality |
|
|
35
|
-
|---|---|
|
|
36
|
-
| "The code change was small, so I skipped updating OpenWiki docs." | Every state change must be reflected in the relevant system records. |
|
|
37
|
-
| "The ingest script exited without an error, so the memB index must be updated." | Silent failures happen; explicit verification of the side effect is mandatory. |
|
|
38
|
-
| "I'll let the /startcycle proceed without a defined rollback path." | Proceeding without a rollback path corrupts the workflow integrity and safety. |
|
|
39
|
-
| "I trust the cached agent registry instead of rescanning after a skill change." | Caches stale out quickly; explicit rescans prevent ghost failures. |
|
|
40
|
-
|
|
41
|
-
## 5. Red Flags
|
|
42
|
-
- Bypassing the verification step after a script execution.
|
|
43
|
-
- Proceeding to the next pipeline stage without confirming the previous stage's side effects.
|
|
44
|
-
- Ignoring domain-specific constraints listed in this skill.
|
|
45
|
-
|
|
46
|
-
## 6. Verification
|
|
47
|
-
- [ ] Verified script exit codes are explicitly checked.
|
|
48
|
-
- [ ] Confirmed target files or database records reflect the expected change.
|
|
49
|
-
- [ ] Ensured no silent failures were ignored before reporting success.
|