@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.
Files changed (305) hide show
  1. package/.agents/skills/firecrawl/SKILL.md +149 -0
  2. package/.agents/skills/firecrawl/rules/install.md +82 -0
  3. package/.agents/skills/firecrawl/rules/security.md +26 -0
  4. package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
  5. package/.agents/skills/firecrawl-build/SKILL.md +39 -0
  6. package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
  7. package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
  8. package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  9. package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  10. package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  11. package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
  12. package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
  13. package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
  14. package/.agents/skills/firecrawl-download/SKILL.md +70 -0
  15. package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
  16. package/.agents/skills/firecrawl-map/SKILL.md +51 -0
  17. package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
  18. package/.agents/skills/firecrawl-search/SKILL.md +60 -0
  19. package/CLAUDE.md +573 -0
  20. package/README.de.md +0 -8
  21. package/README.md +0 -8
  22. package/README.pt.md +0 -8
  23. package/assets/brand/ao-ant-mark.svg +91 -0
  24. package/assets/brand/bdb-core-mark.svg +34 -0
  25. package/assets/brand/heimdall-guardian-mark.svg +16 -0
  26. package/assets/brand/memb-crystal-mark.svg +18 -0
  27. package/bin/aos-config.mjs +89 -0
  28. package/bin/aos-dashboard.mjs +608 -0
  29. package/bin/aos-uninstall.mjs +227 -0
  30. package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
  31. package/docs/skills_table.md +0 -3
  32. package/installer.js +471 -237
  33. package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
  34. package/mcps/after-effects-mcp/build/index.js +840 -0
  35. package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
  36. package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
  37. package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
  38. package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
  39. package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
  40. package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
  41. package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
  42. package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
  43. package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
  44. package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
  45. package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
  46. package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
  47. package/mcps/computer-use-mcp/dist/client.js +136 -0
  48. package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
  49. package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
  50. package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
  51. package/mcps/computer-use-mcp/dist/native.js +50 -0
  52. package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
  53. package/mcps/computer-use-mcp/dist/server.js +342 -0
  54. package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
  55. package/mcps/computer-use-mcp/dist/session.js +2372 -0
  56. package/package.json +13 -4
  57. package/skills/global_config/aos-project-init/SKILL.md +97 -130
  58. package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
  59. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
  60. package/skills/global_config/aos-setup/SKILL.md +98 -8
  61. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +21 -2
  62. package/skills/global_config/ask-tim/SKILL.md +2 -7
  63. package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
  64. package/bin/setup-saas.mjs +0 -792
  65. package/mcps/blender-mcp-server/.dockerignore +0 -19
  66. package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
  67. package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
  68. package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
  69. package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
  70. package/mcps/blender-mcp-server/Dockerfile +0 -19
  71. package/mcps/blender-mcp-server/LICENSE +0 -21
  72. package/mcps/blender-mcp-server/README.md +0 -409
  73. package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
  74. package/mcps/blender-mcp-server/addon/models.py +0 -223
  75. package/mcps/blender-mcp-server/pyproject.toml +0 -120
  76. package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
  77. package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
  78. package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
  79. package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
  80. package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
  81. package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
  82. package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
  83. package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
  84. package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
  85. package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
  86. package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
  87. package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
  88. package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
  89. package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
  90. package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
  91. package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
  92. package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
  93. package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
  94. package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
  95. package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
  96. package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
  97. package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
  98. package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
  99. package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
  100. package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
  101. package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
  102. package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
  103. package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
  104. package/mcps/davinci-mcp-professional/.bandit +0 -35
  105. package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
  106. package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
  107. package/mcps/davinci-mcp-professional/.editorconfig +0 -27
  108. package/mcps/davinci-mcp-professional/.gitattributes +0 -207
  109. package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
  110. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
  111. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  112. package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
  113. package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
  114. package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
  115. package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
  116. package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
  117. package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
  118. package/mcps/davinci-mcp-professional/BUGS.md +0 -55
  119. package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
  120. package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
  121. package/mcps/davinci-mcp-professional/COPYING.md +0 -228
  122. package/mcps/davinci-mcp-professional/Doxyfile +0 -379
  123. package/mcps/davinci-mcp-professional/README.md +0 -143
  124. package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
  125. package/mcps/davinci-mcp-professional/USING.md +0 -301
  126. package/mcps/davinci-mcp-professional/VERSION.md +0 -13
  127. package/mcps/davinci-mcp-professional/build.py +0 -169
  128. package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
  129. package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
  130. package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
  131. package/mcps/davinci-mcp-professional/main.py +0 -40
  132. package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
  133. package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
  134. package/mcps/davinci-mcp-professional/security_audit.py +0 -379
  135. package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
  136. package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
  137. package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
  138. package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
  139. package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
  140. package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
  141. package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
  142. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
  143. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
  144. package/mcps/davinci-mcp-professional/test.py +0 -186
  145. package/mcps/davinci-mcp-professional/uv.lock +0 -2073
  146. package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
  147. package/mcps/davinci-resolve-mcp/.clinerules +0 -17
  148. package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
  149. package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
  150. package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
  151. package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
  152. package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
  153. package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
  154. package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
  155. package/mcps/davinci-resolve-mcp/LICENSE +0 -21
  156. package/mcps/davinci-resolve-mcp/README.md +0 -173
  157. package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
  158. package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
  159. package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
  160. package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
  161. package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
  162. package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
  163. package/mcps/davinci-resolve-mcp/install.py +0 -1687
  164. package/mcps/davinci-resolve-mcp/package.json +0 -52
  165. package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
  166. package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
  167. package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
  168. package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
  169. package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
  170. package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
  171. package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
  172. package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
  173. package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
  174. package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
  175. package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
  176. package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
  177. package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
  178. package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
  179. package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
  180. package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
  181. package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
  182. package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
  183. package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
  184. package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
  185. package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
  186. package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
  187. package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
  188. package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
  189. package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
  190. package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
  191. package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
  192. package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
  193. package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
  194. package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
  195. package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
  196. package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
  197. package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
  198. package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
  199. package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
  200. package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
  201. package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
  202. package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
  203. package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
  204. package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
  205. package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
  206. package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
  207. package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
  208. package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
  209. package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
  210. package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
  211. package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
  212. package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
  213. package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
  214. package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
  215. package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
  216. package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
  217. package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
  218. package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
  219. package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
  220. package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
  221. package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
  222. package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
  223. package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
  224. package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
  225. package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
  226. package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
  227. package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
  228. package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
  229. package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
  230. package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
  231. package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
  232. package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
  233. package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
  234. package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
  235. package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
  236. package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
  237. package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
  238. package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
  239. package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
  240. package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
  241. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
  242. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
  243. package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
  244. package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
  245. package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
  246. package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
  247. package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
  248. package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
  249. package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
  250. package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
  251. package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
  252. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
  253. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
  254. package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
  255. package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
  256. package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
  257. package/mcps/vectorworks-mcp/.dockerignore +0 -8
  258. package/mcps/vectorworks-mcp/Dockerfile +0 -28
  259. package/mcps/vectorworks-mcp/README.md +0 -156
  260. package/mcps/vectorworks-mcp/app/__init__.py +0 -2
  261. package/mcps/vectorworks-mcp/app/api.py +0 -52
  262. package/mcps/vectorworks-mcp/app/chunking.py +0 -56
  263. package/mcps/vectorworks-mcp/app/config.py +0 -29
  264. package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
  265. package/mcps/vectorworks-mcp/app/indexer.py +0 -106
  266. package/mcps/vectorworks-mcp/app/main.py +0 -33
  267. package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
  268. package/mcps/vectorworks-mcp/app/search.py +0 -54
  269. package/mcps/vectorworks-mcp/app/utils.py +0 -14
  270. package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
  271. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
  272. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
  273. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
  274. package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
  275. package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
  276. package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
  277. package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
  278. package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
  279. package/mcps/vectorworks-mcp/design.md +0 -57
  280. package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
  281. package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
  282. package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
  283. package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
  284. package/mcps/vectorworks-mcp/requirements.txt +0 -10
  285. package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
  286. package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
  287. package/mcps/vectorworks-mcp/templates/index.html +0 -40
  288. package/scripts/ecosystem-health-audit.js +0 -257
  289. package/skills/bdb-dev-os-skill/SKILL.md +0 -49
  290. package/skills/bdb-dev-os-skill/package.json +0 -11
  291. package/skills/bdbsaastraining/SKILL.md +0 -316
  292. package/skills/bdbsaastraining/references/exam-pool.md +0 -313
  293. package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
  294. package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
  295. package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
  296. package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
  297. package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
  298. package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
  299. package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
  300. package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
  301. package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
  302. package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
  303. package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
  304. package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
  305. package/skills/global_config/bdbsaashost/SKILL.md +0 -125
@@ -1,150 +0,0 @@
1
- #!/usr/bin/env bash
2
- # BDB SaaS Host Bootcamp — Station 0.5 Preflight Check
3
- #
4
- # Usage: bash preflight_check.sh <lldap_username> [gateway_domain]
5
- #
6
- # Prüft die lokale Workstation, BEVOR das Training mit Station 1 startet.
7
- # Jeder fehlgeschlagene Check gibt einen konkreten Fix-Befehl aus.
8
- # Exit 0 = alle Pflicht-Checks grün.
9
-
10
- set -u
11
-
12
- TRAINEE_USER="${1:-}"
13
- # Domain kommt aus dem 2. Argument oder $PROJECT_DOMAIN — kein Default.
14
- GATEWAY_DOMAIN="${2:-${PROJECT_DOMAIN:-}}"
15
- if [ -z "$GATEWAY_DOMAIN" ]; then
16
- echo "Fehlt: Fleet-Domain. Aus deiner Onboarding-E-Mail übergeben:" >&2
17
- echo " bash $0 <lldap_user> <deine-fleet-domain> (oder: export PROJECT_DOMAIN=…)" >&2
18
- exit 2
19
- fi
20
- GATEWAY_HOST="gateway.${GATEWAY_DOMAIN#gateway.}"
21
- CA_URL="${STEP_CA_URL:-https://ca.${GATEWAY_DOMAIN#gateway.}}"
22
-
23
- # Autoritativer Fingerprint: Aus STEP_CA_FINGERPRINT (ENV) oder dynamisch aus lokalem root_ca.crt
24
- EXPECTED_FP="${STEP_CA_FINGERPRINT:-}"
25
-
26
- GREEN=$'\033[0;32m'; RED=$'\033[0;31m'; YEL=$'\033[0;33m'; NC=$'\033[0m'
27
- FAIL=0; WARN=0
28
-
29
- pass() { printf ' %s✔%s %s\n' "$GREEN" "$NC" "$1"; }
30
- fail() { printf ' %s✗%s %s\n %s→ Fix:%s %s\n' "$RED" "$NC" "$1" "$YEL" "$NC" "$2"; FAIL=$((FAIL+1)); }
31
- warn() { printf ' %s!%s %s\n %s→%s %s\n' "$YEL" "$NC" "$1" "$YEL" "$NC" "$2"; WARN=$((WARN+1)); }
32
-
33
- echo
34
- echo "── BDB SaaS Host Bootcamp · Preflight ─────────────────────────────"
35
- echo " Trainee : ${TRAINEE_USER:-<nicht angegeben>}"
36
- echo " Gateway : https://${GATEWAY_HOST}"
37
- echo " CA : ${CA_URL}"
38
- echo "──────────────────────────────────────────────────────────────────"
39
- echo
40
-
41
- if [ -z "$TRAINEE_USER" ]; then
42
- fail "Kein LLDAP-Username übergeben." "bash preflight_check.sh <dein_lldap_user>"
43
- fi
44
-
45
- # 1) step CLI
46
- if command -v step >/dev/null 2>&1; then
47
- pass "step CLI installiert ($(step version 2>/dev/null | head -1))"
48
- else
49
- fail "step CLI fehlt." "macOS: brew install step | Debian/Ubuntu: sudo apt-get install -y step-cli"
50
- fi
51
-
52
- # 2) CA bootstrap vorhanden?
53
- STEP_ROOT="$(step path 2>/dev/null || echo "$HOME/.step")"
54
- if [ -f "${STEP_ROOT}/certs/root_ca.crt" ]; then
55
- pass "Step-CA gebootstrappt (${STEP_ROOT}/certs/root_ca.crt)"
56
- # 3) Fingerprint-Prüfung
57
- ACTUAL_FP="$(step certificate fingerprint "${STEP_ROOT}/certs/root_ca.crt" 2>/dev/null | tr -d '[:space:]')"
58
- if [ -n "$EXPECTED_FP" ]; then
59
- if [ "$ACTUAL_FP" = "$EXPECTED_FP" ]; then
60
- pass "CA-Fingerprint stimmt mit STEP_CA_FINGERPRINT überein"
61
- else
62
- fail "CA-Fingerprint weicht ab (lokal: ${ACTUAL_FP:0:16}… / erwartet: ${EXPECTED_FP:0:16}…)." \
63
- "step ca bootstrap --ca-url ${CA_URL} --fingerprint ${EXPECTED_FP} --force"
64
- fi
65
- elif [ -n "$ACTUAL_FP" ]; then
66
- pass "Lokale Root-CA verifiziert (Fingerprint: ${ACTUAL_FP:0:16}…)"
67
- else
68
- warn "Fingerprint konnte nicht berechnet werden." "step certificate fingerprint ${STEP_ROOT}/certs/root_ca.crt"
69
- fi
70
- else
71
- fail "Step-CA nicht gebootstrappt." "step ca bootstrap --ca-url ${CA_URL} --fingerprint ${EXPECTED_FP} --force"
72
- fi
73
-
74
- # 4) ~/.ssh/config Fleet-Block
75
- if [ -f "$HOME/.ssh/config" ] && grep -q "BDB SAAS HOST FLEET RULES" "$HOME/.ssh/config" 2>/dev/null; then
76
- pass "~/.ssh/config enthält den BDB Fleet-Block"
77
- if [ -n "$TRAINEE_USER" ] && ! grep -qE "^[[:space:]]*User[[:space:]]+${TRAINEE_USER}\b" "$HOME/.ssh/config"; then
78
- warn "Fleet-Block nutzt nicht 'User ${TRAINEE_USER}'." "npm run setup:workstation (setzt User + CertificateFile neu)"
79
- fi
80
- else
81
- fail "Kein BDB Fleet-Block in ~/.ssh/config." \
82
- "npx @hybridlabor-api/bdb-dev-optimized-agent-skills setup-saas --gateway ${GATEWAY_HOST} (oder 'npm run setup:workstation' im geklonten Engine-Repo)"
83
- fi
84
-
85
- # 5) SSH-Zertifikat vorhanden & gültig?
86
- CERT="${STEP_ROOT}/ssh/id_ecdsa-cert.pub"
87
- if [ -f "$CERT" ]; then
88
- if command -v step >/dev/null 2>&1 && step ssh inspect "$CERT" >/dev/null 2>&1; then
89
- VALID_TO="$(step ssh inspect "$CERT" 2>/dev/null | awk -F': *' '/Valid:/ {print $2}')"
90
- pass "SSH-Zertifikat vorhanden (${VALID_TO:-TTL siehe 'step ssh inspect'})"
91
- else
92
- warn "SSH-Zertifikat vorhanden, aber nicht lesbar/abgelaufen." "step ssh login ${TRAINEE_USER}"
93
- fi
94
- else
95
- warn "Noch kein SSH-Zertifikat — wird in Station 1 erzeugt." "step ssh login ${TRAINEE_USER} (kommt in Station 1)"
96
- fi
97
-
98
- # 6) FastMCP-Client-Config
99
- MCP_FOUND=0
100
- for f in \
101
- "$HOME/.cursor/mcp.json" \
102
- "$HOME/Library/Application Support/Claude/claude_desktop_config.json" \
103
- "$HOME/.config/Claude/claude_desktop_config.json" \
104
- "$HOME/.gemini/antigravity-cli/mcp/bdb_remoteos_gateway/config.json" \
105
- "$HOME/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json"
106
- do
107
- if [ -f "$f" ] && grep -q "gateway.${GATEWAY_DOMAIN#gateway.}" "$f" 2>/dev/null; then
108
- pass "FastMCP-Gateway in $(basename "$(dirname "$f")")/$(basename "$f")"
109
- MCP_FOUND=1
110
- fi
111
- done
112
- [ "$MCP_FOUND" -eq 0 ] && warn "Kein Client mit FastMCP-Gateway-Eintrag gefunden." \
113
- "npm run setup:workstation (injiziert das SSE-Gateway in alle erkannten Editoren)"
114
-
115
- # 7) Gateway erreichbar
116
- if command -v curl >/dev/null 2>&1; then
117
- CODE="$(curl -sS -o /dev/null -w '%{http_code}' --max-time 8 "https://${GATEWAY_HOST}/health" 2>/dev/null || echo 000)"
118
- case "$CODE" in
119
- 200) pass "Gateway /health erreichbar (200)";;
120
- 30[0-9]|401|403) pass "Gateway erreichbar (HTTP ${CODE} — Authelia davor, das ist ok)";;
121
- 000) warn "Gateway https://${GATEWAY_HOST} nicht erreichbar." "Netzwerk/VPN prüfen; Domain korrekt? Argument 2 = gateway_domain";;
122
- *) warn "Gateway antwortet mit HTTP ${CODE}." "Später in Station 4 erneut prüfen";;
123
- esac
124
- else
125
- warn "curl nicht installiert — Gateway-Check übersprungen." "brew install curl / apt-get install curl"
126
- fi
127
-
128
- # 8) Machine Identity (OIDC Credential im OS Keychain)
129
- KEYCHAIN_FOUND=0
130
- if [[ "$OSTYPE" == "darwin"* ]] && command -v security >/dev/null 2>&1; then
131
- if security find-generic-password -s "bdb-saas-host-machine-key" >/dev/null 2>&1; then
132
- pass "OIDC Machine Key im macOS Keychain vorhanden (bdb-saas-host-machine-key)"
133
- KEYCHAIN_FOUND=1
134
- fi
135
- fi
136
- if [ "$KEYCHAIN_FOUND" -eq 0 ]; then
137
- warn "Kein Machine-Key im Keychain — für autonome Agenten (Station 1b) erforderlich." \
138
- "npm run setup:workstation (generiert RSA-Keypair und registriert Machine Identity)"
139
- fi
140
-
141
- echo
142
- echo "──────────────────────────────────────────────────────────────────"
143
- if [ "$FAIL" -eq 0 ]; then
144
- printf ' %sPreflight bestanden%s (%d Hinweise). Weiter mit Station 1.\n' "$GREEN" "$NC" "$WARN"
145
- exit 0
146
- else
147
- printf ' %s%d Pflicht-Check(s) fehlgeschlagen%s, %d Hinweise.\n' "$RED" "$FAIL" "$NC" "$WARN"
148
- printf ' Fixes ausführen, dann erneut: bash %s %s\n' "$0" "$TRAINEE_USER"
149
- exit 1
150
- fi
@@ -1,508 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="de">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>BDB SaaS Host Administrator Certificate - {{ candidate_name }}</title>
6
- <style>
7
- @page {
8
- size: A4 landscape;
9
- margin: 0;
10
- }
11
- * {
12
- box-sizing: border-box;
13
- margin: 0;
14
- padding: 0;
15
- }
16
- body {
17
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
18
- background: #04060a;
19
- color: #f8fafc;
20
- width: 297mm;
21
- height: 210mm;
22
- padding: 7mm 9mm;
23
- display: flex;
24
- justify-content: center;
25
- align-items: center;
26
- -webkit-print-color-adjust: exact;
27
- }
28
- .cert-container {
29
- width: 100%;
30
- height: 100%;
31
- background: radial-gradient(circle at 50% 10%, #0f1324 0%, #080b16 50%, #030408 100%);
32
- border: 2px solid #1c243c;
33
- border-radius: 18px;
34
- padding: 8mm 12mm 7mm 12mm;
35
- position: relative;
36
- display: flex;
37
- flex-direction: column;
38
- justify-content: space-between;
39
- box-shadow: inset 0 0 120px rgba(56, 189, 248, 0.04);
40
- overflow: hidden;
41
- }
42
-
43
- /* Fixed Perfectly Centered Watermark */
44
- .watermark {
45
- position: absolute;
46
- top: 54%;
47
- left: 50%;
48
- transform: translate(-50%, -50%);
49
- width: 460px;
50
- height: 460px;
51
- opacity: 0.038;
52
- pointer-events: none;
53
- z-index: 1;
54
- }
55
-
56
- /* Guilloche Corner Accents */
57
- .corner-decor {
58
- position: absolute;
59
- width: 32px;
60
- height: 32px;
61
- border: 2px solid #38bdf8;
62
- opacity: 0.75;
63
- z-index: 3;
64
- }
65
- .top-left { top: 8px; left: 8px; border-right: none; border-bottom: none; }
66
- .top-right { top: 8px; right: 8px; border-left: none; border-bottom: none; }
67
- .bottom-left { bottom: 8px; left: 8px; border-right: none; border-top: none; }
68
- .bottom-right { bottom: 8px; right: 8px; border-left: none; border-top: none; }
69
-
70
- .content-layer {
71
- position: relative;
72
- z-index: 2;
73
- display: flex;
74
- flex-direction: column;
75
- justify-content: space-between;
76
- height: 100%;
77
- }
78
-
79
- /* ==========================================================================
80
- ENTERPRISE HEADER CARD (bdb-enterprise-header layout)
81
- ========================================================================== */
82
- .enterprise-header-card {
83
- background: linear-gradient(135deg, #090514 0%, #170a28 50%, #07030e 100%);
84
- border: 1px solid rgba(155, 48, 196, 0.45);
85
- border-radius: 14px;
86
- padding: 12px 20px;
87
- position: relative;
88
- box-shadow: 0 6px 24px rgba(0, 0, 0, 0.45);
89
- }
90
- .header-grid-lines {
91
- position: absolute;
92
- inset: 0;
93
- border-radius: 14px;
94
- background-image:
95
- linear-gradient(to right, rgba(255, 255, 255, 0.03) 1px, transparent 1px),
96
- linear-gradient(to bottom, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
97
- background-size: 32px 32px;
98
- pointer-events: none;
99
- }
100
- .header-main-row {
101
- position: relative;
102
- z-index: 2;
103
- display: flex;
104
- justify-content: space-between;
105
- align-items: center;
106
- }
107
- .header-left-group {
108
- display: flex;
109
- align-items: center;
110
- gap: 16px;
111
- }
112
- .bdb-coin-box {
113
- width: 56px;
114
- height: 56px;
115
- filter: drop-shadow(0 0 12px rgba(155, 48, 196, 0.6));
116
- flex-shrink: 0;
117
- }
118
- .header-title-box {
119
- display: flex;
120
- flex-direction: column;
121
- }
122
- .header-main-title {
123
- font-size: 26px;
124
- font-weight: 900;
125
- letter-spacing: -0.5px;
126
- color: #ffffff;
127
- line-height: 1.1;
128
- display: flex;
129
- align-items: baseline;
130
- gap: 4px;
131
- }
132
- .header-main-title span.purple {
133
- color: #c084fc;
134
- font-size: 19px;
135
- font-weight: 800;
136
- }
137
- .header-tagline {
138
- font-size: 11px;
139
- font-weight: 700;
140
- letter-spacing: 2px;
141
- color: #ffffff;
142
- margin-top: 3px;
143
- }
144
- .header-tagline span.gray {
145
- color: #94a3b8;
146
- font-weight: 500;
147
- }
148
-
149
- /* Live Status Badge */
150
- .header-right-group {
151
- display: flex;
152
- align-items: center;
153
- }
154
- .live-status-pill {
155
- display: flex;
156
- align-items: center;
157
- gap: 8px;
158
- padding: 6px 16px;
159
- background: rgba(24, 5, 36, 0.85);
160
- border: 1.2px solid rgba(255, 255, 255, 0.6);
161
- border-radius: 999px;
162
- box-shadow: 0 0 12px rgba(16, 185, 129, 0.15);
163
- }
164
- .live-dot {
165
- width: 8px;
166
- height: 8px;
167
- background-color: #10b981;
168
- border-radius: 50%;
169
- box-shadow: 0 0 8px #10b981;
170
- }
171
- .live-text {
172
- font-size: 11px;
173
- font-weight: 800;
174
- letter-spacing: 1.5px;
175
- color: #ffffff;
176
- text-transform: uppercase;
177
- }
178
-
179
- /* Tech Badges Row */
180
- .header-badges-row {
181
- position: relative;
182
- z-index: 2;
183
- display: flex;
184
- gap: 10px;
185
- margin-top: 10px;
186
- }
187
- .tech-pill {
188
- background: #140d22;
189
- border: 1px solid #51116F;
190
- border-radius: 5px;
191
- padding: 3px 10px;
192
- font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
193
- font-size: 10px;
194
- font-weight: 700;
195
- letter-spacing: 0.6px;
196
- color: #e2e8f0;
197
- }
198
- .tech-pill.highlight {
199
- color: #c084fc;
200
- border-color: #9b30c4;
201
- background: rgba(155, 48, 196, 0.15);
202
- }
203
-
204
- /* ==========================================================================
205
- MIDDLE: CERTIFICATE AWARD BODY
206
- ========================================================================== */
207
- .award-section {
208
- text-align: center;
209
- margin: 12px 0 8px 0;
210
- }
211
- .award-header-badge {
212
- display: inline-block;
213
- padding: 4px 16px;
214
- background: rgba(56, 189, 248, 0.1);
215
- border: 1px solid rgba(56, 189, 248, 0.35);
216
- border-radius: 9999px;
217
- font-size: 10px;
218
- font-weight: 700;
219
- letter-spacing: 2px;
220
- color: #38bdf8;
221
- text-transform: uppercase;
222
- margin-bottom: 6px;
223
- }
224
- h1.cert-title {
225
- font-size: 28px;
226
- font-weight: 900;
227
- letter-spacing: 2.5px;
228
- background: linear-gradient(135deg, #ffffff 0%, #cbd5e1 100%);
229
- -webkit-background-clip: text;
230
- -webkit-text-fill-color: transparent;
231
- margin-bottom: 4px;
232
- text-transform: uppercase;
233
- }
234
- .track-pill-badge {
235
- display: inline-block;
236
- margin-top: 2px;
237
- padding: 4px 16px;
238
- background: rgba(56, 189, 248, 0.12);
239
- border: 1px solid rgba(56, 189, 248, 0.4);
240
- border-radius: 6px;
241
- font-size: 12.5px;
242
- font-weight: 700;
243
- color: #38bdf8;
244
- letter-spacing: 0.5px;
245
- }
246
-
247
- .certifies-line {
248
- font-size: 11.5px;
249
- color: #64748b;
250
- margin-top: 10px;
251
- margin-bottom: 4px;
252
- text-transform: uppercase;
253
- letter-spacing: 1.5px;
254
- }
255
- .candidate-name {
256
- font-size: 36px;
257
- font-weight: 900;
258
- letter-spacing: 1px;
259
- color: #ffffff;
260
- text-shadow: 0 0 24px rgba(56, 189, 248, 0.45);
261
- margin-bottom: 6px;
262
- }
263
- .statement-text {
264
- font-size: 12px;
265
- color: #cbd5e1;
266
- max-width: 800px;
267
- margin: 0 auto;
268
- line-height: 1.5;
269
- }
270
-
271
- /* Skills Grid (3x2) */
272
- .skills-grid {
273
- display: grid;
274
- grid-template-columns: repeat(3, 1fr);
275
- gap: 8px;
276
- background: rgba(13, 18, 32, 0.7);
277
- border: 1px solid rgba(40, 52, 85, 0.7);
278
- border-radius: 10px;
279
- padding: 10px 18px;
280
- margin: 10px 0 8px 0;
281
- }
282
- .skill-item {
283
- font-size: 11px;
284
- color: #e2e8f0;
285
- display: flex;
286
- align-items: center;
287
- gap: 7px;
288
- }
289
- .check {
290
- color: #10b981;
291
- font-weight: bold;
292
- font-size: 13px;
293
- }
294
-
295
- /* ==========================================================================
296
- FOOTER SECTION: METADATA, GOLD SEAL & SIGNATURE
297
- ========================================================================== */
298
- .footer {
299
- display: flex;
300
- justify-content: space-between;
301
- align-items: flex-end;
302
- border-top: 1px solid rgba(40, 52, 85, 0.7);
303
- padding-top: 10px;
304
- margin-top: 4px;
305
- }
306
- .meta-col {
307
- font-size: 10.5px;
308
- color: #64748b;
309
- line-height: 1.55;
310
- }
311
- .meta-col strong {
312
- color: #94a3b8;
313
- }
314
-
315
- /* Authentic Gold Verified Seal Stamp (Correctly Transformed) */
316
- .seal-col {
317
- display: flex;
318
- flex-direction: column;
319
- align-items: center;
320
- gap: 3px;
321
- }
322
- .seal-circle-outer {
323
- width: 52px;
324
- height: 52px;
325
- border-radius: 50%;
326
- border: 2px solid #eab308;
327
- background: radial-gradient(circle, #3d2305 0%, #150d03 100%);
328
- display: flex;
329
- justify-content: center;
330
- align-items: center;
331
- box-shadow: 0 0 16px rgba(234, 179, 8, 0.4);
332
- }
333
- .seal-label {
334
- font-size: 8.5px;
335
- font-weight: 800;
336
- letter-spacing: 1.2px;
337
- color: #eab308;
338
- text-transform: uppercase;
339
- }
340
-
341
- .sig-col {
342
- text-align: right;
343
- }
344
- .sig-line {
345
- font-size: 13px;
346
- font-weight: 700;
347
- color: #f1f5f9;
348
- border-top: 1px solid #475569;
349
- padding-top: 4px;
350
- display: inline-block;
351
- min-width: 190px;
352
- text-align: center;
353
- }
354
- .sig-title {
355
- font-size: 9.5px;
356
- color: #64748b;
357
- margin-top: 2px;
358
- text-align: center;
359
- }
360
- </style>
361
- </head>
362
- <body>
363
- <div class="cert-container">
364
- <!-- Guilloche Corners -->
365
- <div class="corner-decor top-left"></div>
366
- <div class="corner-decor top-right"></div>
367
- <div class="corner-decor bottom-left"></div>
368
- <div class="corner-decor bottom-right"></div>
369
-
370
- <!-- Complete Centered Vector Watermark (Mathematically Centered at 256, 256) -->
371
- <div class="watermark">
372
- <svg viewBox="0 0 512 512" width="100%" height="100%">
373
- <circle cx="256" cy="256" r="220" fill="none" stroke="#38bdf8" stroke-width="4"/>
374
- <circle cx="256" cy="256" r="200" fill="none" stroke="#38bdf8" stroke-width="2"/>
375
- <g transform="translate(70, 68)" fill="#38bdf8">
376
- <path d="M181.63.05c101.39-2.47,184.56,80.09,190.14,179.93,5.53,99.03-66.16,185.42-165.11,195.46-87.39,8.86-171.1-45.56-197.67-128.96C-28.74,128.03,56.78,3.1,181.63.05h0ZM177.5,21.3C69.09,25.31-7.16,129.62,21.76,234.52c18.72,67.88,81.56,116.7,151.53,121.32,106.21,7.03,195.6-81.63,179.68-189.06-12.54-84.65-89.81-148.66-175.47-145.49h0Z"/>
377
- <path d="M147.69,120.05c12.04.36,24.64-.72,36.62-.07,24.29,1.32,41.37,20.13,42.91,43.99-.69,16.35.57,33.42-.28,49.69-1.31,25.42-18.55,43.75-44.02,45.64-9.59.72-20.14.69-29.78.84-4.97.08-9.9.68-10.37-5.66s.43-9.41.34-14.03c12.65-11.84,14.75-31.17,4.75-45.41-.63-.9-2.26-2.34-2.62-3.17s-.46-12.58-.26-14.37,1.1-3.52,1.46-5.16c1.21-5.42,1.06-11.26-.39-16.62-.41-1.54-1.48-3.56-1.63-4.99-.47-4.28-.14-9.67-.26-14.08-.11-3.56-.84-8.43-.57-11.86s1.32-4.35,4.08-4.75h0ZM162.03,135.5c-4.32.73-3.34,6.65-3.26,10.01.17,6.21.91,12.51,1.13,18.73.83,23.13-1.03,45.49-1.41,68.42-.07,3.93-1.27,10.87,4.01,11.46,10.36-.51,21.39,1.89,31.38-1.45,13.74-4.59,20.43-17.79,19.81-31.81-1.77-14.46-1.19-29.09-1.94-43.58-.52-10.12-3.97-20.33-12.44-26.46-10.8-7.82-24.82-4.88-37.29-5.34h0Z"/>
378
- <path d="M232.66,132.46c9.53.36,19.74-.72,29.19-.08,22.64,1.52,33.92,28.58,21.93,47.05-1.49,2.3-4.32,4.47-3.85,7.42.47,2.95,5.64,6.21,7.42,8.3,11.88,13.96,8.41,35.69-6.91,45.49-7.85,5.02-14.69,4.43-23.56,4.86-7.67.37-16.24,1.05-23.91.66-1.66-.08-2.98-.73-3.68-2.32s-.52-7.28-.43-9.26c.36-6.63,3.52-13.04,3.89-20.39.58-11.38-.1-23.12-.3-34.49-.1-5.68.32-11.44-.3-17.08-.41-3.82-1.64-7.52-1.89-11.35-.25-3.85-.18-7.99-.26-11.88-.07-2.84-1.26-6.03,2.68-6.95h-.01ZM243.68,144.59c-3.41.77-2.55,6.7-2.66,9.2-.28,6.08-.58,12.36-.29,18.47.1,2.06.36,6.36.9,8.21.54,1.85.84,1.79,1.66,2.19,1.66.83,8-.68,10.26-.88,4.22-.39,8.12.03,12.28-1.24,16.76-5.12,16.53-26.53,1.01-33.02-15.52-6.5-13.5-2.7-18.82-2.98-5.31-.28-3.37-.17-4.36.06h.03ZM243.68,194.52c-3.49.79-2.58,8.66-2.68,11.39-.26,7.05-1.06,17.41.07,24.21,1.13,6.8,2.63,3.38,5.32,3.26,3.96-.19,8.36-1.32,12.4-1.67,5.85-.5,10.68.22,16.24-2.25,13.6-6.04,12.62-25.27-.46-31.46-5.63-2.66-9.89-1.97-15.78-2.43-3.57-.28-7.2-.92-10.76-1.1-1.12-.06-3.35-.17-4.36.06h0Z"/>
379
- <path d="M90.59,133.03c8.84-.44,25.24-1.08,33.23,1.92,18.07,6.77,23.99,29.96,13.56,45.7-1.6,2.41-4.52,4.44-3.28,7.75.69,1.85,5.41,5.42,7.03,7.31,11.86,13.82,8.77,35.23-6.25,45.33-15.02,10.1-23.31,5.27-34.44,5.56-4.12.11-10.36.88-14.32.28-2.22-.34-3.45-2.79-3.48-4.83-.11-7.84.77-15.89,1.1-23.71.99-23.09,1.31-45.33.57-68.43-.14-4.15-1.05-9.79-.57-13.79.43-3.52,4.1-2.95,6.84-3.09h0ZM98.3,145.15c-1.71.29-2.98,1.7-3.21,3.41-.15,1.19-.23,3.13-.3,4.39-.39,8.01-.9,19.53.58,27.27.23,1.24.57,2.55,1.82,3.15,1.81.84,7.03-.55,9.32-.76,3.3-.3,6.62-.1,9.89-.59,21.2-3.21,21.02-29.7,1.28-34.86-4.36-1.14-13.16-1.92-17.79-2.07-.55-.01-1.03-.03-1.59.07h0ZM98.03,195.09c-4.25.88-2.46,6.76-3.24,9.72-.06,7.92-.55,15.86,0,23.75.22,3.21.77,5.75,4.57,5.67,3.82-.08,8.46-1.32,12.41-1.67,5.55-.48,11.21.12,16.48-2,14.62-5.88,13.53-26.13-.52-32.17-5.13-2.21-8.25-1.59-13.48-1.97-4.69-.34-9.7-1.23-14.35-1.38-.62-.01-1.26-.07-1.86.06h-.01Z"/>
380
- </g>
381
- </svg>
382
- </div>
383
-
384
- <div class="content-layer">
385
- <!-- 1. BDB ENTERPRISE SAAS HOST HEADER CARD -->
386
- <div class="enterprise-header-card">
387
- <div class="header-grid-lines"></div>
388
- <div class="header-main-row">
389
- <div class="header-left-group">
390
- <!-- Authentic BDB 3D Metallic Seal Coin -->
391
- <div class="bdb-coin-box">
392
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="100%" height="100%">
393
- <defs>
394
- <linearGradient id="bdbPlateLight" x1="0%" y1="0%" x2="100%" y2="100%">
395
- <stop offset="0%" stop-color="#FFFFFF"/>
396
- <stop offset="60%" stop-color="#FFFFFF"/>
397
- <stop offset="100%" stop-color="#E7E7EA"/>
398
- </linearGradient>
399
- <linearGradient id="bdbPlateDark" x1="0%" y1="0%" x2="0%" y2="100%">
400
- <stop offset="0%" stop-color="#1C1C1F"/>
401
- <stop offset="100%" stop-color="#050505"/>
402
- </linearGradient>
403
- </defs>
404
- <circle cx="256" cy="256" r="195" fill="url(#bdbPlateDark)" stroke="#FFFFFF" stroke-width="2" stroke-opacity="0.6"/>
405
- <circle cx="256" cy="256" r="175" fill="#0a0a0a"/>
406
- <g transform="translate(70, 68)">
407
- <path fill="url(#bdbPlateLight)" d="M181.63.05c101.39-2.47,184.56,80.09,190.14,179.93,5.53,99.03-66.16,185.42-165.11,195.46-87.39,8.86-171.1-45.56-197.67-128.96C-28.74,128.03,56.78,3.1,181.63.05h0ZM177.5,21.3C69.09,25.31-7.16,129.62,21.76,234.52c18.72,67.88,81.56,116.7,151.53,121.32,106.21,7.03,195.6-81.63,179.68-189.06-12.54-84.65-89.81-148.66-175.47-145.49h0Z"/>
408
- <g fill="#FFFFFF">
409
- <path d="M147.69,120.05c12.04.36,24.64-.72,36.62-.07,24.29,1.32,41.37,20.13,42.91,43.99-.69,16.35.57,33.42-.28,49.69-1.31,25.42-18.55,43.75-44.02,45.64-9.59.72-20.14.69-29.78.84-4.97.08-9.9.68-10.37-5.66s.43-9.41.34-14.03c12.65-11.84,14.75-31.17,4.75-45.41-.63-.9-2.26-2.34-2.62-3.17s-.46-12.58-.26-14.37,1.1-3.52,1.46-5.16c1.21-5.42,1.06-11.26-.39-16.62-.41-1.54-1.48-3.56-1.63-4.99-.47-4.28-.14-9.67-.26-14.08-.11-3.56-.84-8.43-.57-11.86s1.32-4.35,4.08-4.75h0ZM162.03,135.5c-4.32.73-3.34,6.65-3.26,10.01.17,6.21.91,12.51,1.13,18.73.83,23.13-1.03,45.49-1.41,68.42-.07,3.93-1.27,10.87,4.01,11.46,10.36-.51,21.39,1.89,31.38-1.45,13.74-4.59,20.43-17.79,19.81-31.81-1.77-14.46-1.19-29.09-1.94-43.58-.52-10.12-3.97-20.33-12.44-26.46-10.8-7.82-24.82-4.88-37.29-5.34h0Z"/>
410
- <path d="M232.66,132.46c9.53.36,19.74-.72,29.19-.08,22.64,1.52,33.92,28.58,21.93,47.05-1.49,2.3-4.32,4.47-3.85,7.42.47,2.95,5.64,6.21,7.42,8.3,11.88,13.96,8.41,35.69-6.91,45.49-7.85,5.02-14.69,4.43-23.56,4.86-7.67.37-16.24,1.05-23.91.66-1.66-.08-2.98-.73-3.68-2.32s-.52-7.28-.43-9.26c.36-6.63,3.52-13.04,3.89-20.39.58-11.38-.1-23.12-.3-34.49-.1-5.68.32-11.44-.3-17.08-.41-3.82-1.64-7.52-1.89-11.35-.25-3.85-.18-7.99-.26-11.88-.07-2.84-1.26-6.03,2.68-6.95h-.01ZM243.68,144.59c-3.41.77-2.55,6.7-2.66,9.2-.28,6.08-.58,12.36-.29,18.47.1,2.06.36,6.36.9,8.21.54,1.85.84,1.79,1.66,2.19,1.66.83,8-.68,10.26-.88,4.22-.39,8.12.03,12.28-1.24,16.76-5.12,16.53-26.53,1.01-33.02-15.52-6.5-13.5-2.7-18.82-2.98-5.31-.28-3.37-.17-4.36.06h.03ZM243.68,194.52c-3.49.79-2.58,8.66-2.68,11.39-.26,7.05-1.06,17.41.07,24.21,1.13,6.8,2.63,3.38,5.32,3.26,3.96-.19,8.36-1.32,12.4-1.67,5.85-.5,10.68.22,16.24-2.25,13.6-6.04,12.62-25.27-.46-31.46-5.63-2.66-9.89-1.97-15.78-2.43-3.57-.28-7.2-.92-10.76-1.1-1.12-.06-3.35-.17-4.36.06h0Z"/>
411
- <path d="M90.59,133.03c8.84-.44,25.24-1.08,33.23,1.92,18.07,6.77,23.99,29.96,13.56,45.7-1.6,2.41-4.52,4.44-3.28,7.75.69,1.85,5.41,5.42,7.03,7.31,11.86,13.82,8.77,35.23-6.25,45.33-15.02,10.1-23.31,5.27-34.44,5.56-4.12.11-10.36.88-14.32.28-2.22-.34-3.45-2.79-3.48-4.83-.11-7.84.77-15.89,1.1-23.71.99-23.09,1.31-45.33.57-68.43-.14-4.15-1.05-9.79-.57-13.79.43-3.52,4.1-2.95,6.84-3.09h0ZM98.3,145.15c-1.71.29-2.98,1.7-3.21,3.41-.15,1.19-.23,3.13-.3,4.39-.39,8.01-.9,19.53.58,27.27.23,1.24.57,2.55,1.82,3.15,1.81.84,7.03-.55,9.32-.76,3.3-.3,6.62-.1,9.89-.59,21.2-3.21,21.02-29.7,1.28-34.86-4.36-1.14-13.16-1.92-17.79-2.07-.55-.01-1.03-.03-1.59.07h0ZM98.03,195.09c-4.25.88-2.46,6.76-3.24,9.72-.06,7.92-.55,15.86,0,23.75.22,3.21.77,5.75,4.57,5.67,3.82-.08,8.46-1.32,12.41-1.67,5.55-.48,11.21.12,16.48-2,14.62-5.88,13.53-26.13-.52-32.17-5.13-2.21-8.25-1.59-13.48-1.97-4.69-.34-9.7-1.23-14.35-1.38-.62-.01-1.26-.07-1.86.06h-.01Z"/>
412
- </g>
413
- </g>
414
- </svg>
415
- </div>
416
-
417
- <div class="header-title-box">
418
- <div class="header-main-title">
419
- BDB SAAS HOST<span class="purple"> . OS</span>
420
- </div>
421
- <div class="header-tagline">
422
- BRANCH • DEVELOP • BUMP <span class="gray">| HYBRIDLABOR GLOBAL LLC</span>
423
- </div>
424
- </div>
425
- </div>
426
-
427
- <div class="header-right-group">
428
- <div class="live-status-pill">
429
- <div class="live-dot"></div>
430
- <div class="live-text">FLEET CERTIFIED</div>
431
- </div>
432
- </div>
433
- </div>
434
-
435
- <div class="header-badges-row">
436
- <div class="tech-pill highlight">INCUS HYPERVISOR</div>
437
- <div class="tech-pill">STEP-CA 2FA</div>
438
- <div class="tech-pill highlight">FASTMCP GATEWAY</div>
439
- <div class="tech-pill">4-EYES GUARD</div>
440
- <div class="tech-pill">memB VAULT</div>
441
- </div>
442
- </div>
443
-
444
- <!-- 2. CERTIFICATE AWARD BODY -->
445
- <div class="award-section">
446
- <div class="award-header-badge">OFFICIAL TECHNICAL ACCREDITATION</div>
447
- <h1 class="cert-title">CERTIFICATE OF EXCELLENCE</h1>
448
- <div class="track-pill-badge">{{ track_line }}</div>
449
-
450
- <div class="certifies-line">This is to officially certify that</div>
451
- <div class="candidate-name">{{ candidate_name }}</div>
452
- <div class="statement-text">
453
- has successfully completed the intensive hands-on SysAdmin bootcamp and demonstrated verified technical competence in container virtualization, zero-trust security, and autonomous AI-agent operations across the BDB Multi-Cloud Fleet.
454
- </div>
455
- </div>
456
-
457
- <!-- 3. VERIFIED TECHNICAL COMPETENCIES (3x2 Grid) -->
458
- <div class="skills-grid">
459
- <div class="skill-item"><span class="check">&#10003;</span> Zero-Trust Step-CA 2FA SSH</div>
460
- <div class="skill-item"><span class="check">&#10003;</span> Incus Custom Profile Engineering</div>
461
- <div class="skill-item"><span class="check">&#10003;</span> Autonomous AI-Agent Sandboxing</div>
462
- <div class="skill-item"><span class="check">&#10003;</span> FastMCP Remote Gateway Operations</div>
463
- <div class="skill-item"><span class="check">&#10003;</span> 4-Eyes HMAC Authorization</div>
464
- <div class="skill-item"><span class="check">&#10003;</span> Caddy 2FA &amp; Cloudflare Governance</div>
465
- </div>
466
-
467
- <!-- 4. FOOTER: METADATA, GOLD SEAL & SIGNATURE -->
468
- <div class="footer">
469
- <div class="meta-col">
470
- <div><strong>Issue Date:</strong> {{ issue_date }}</div>
471
- <div><strong>Final Exam Score:</strong> {{ score }}/10 ({{ percentage }}%)</div>
472
- <div><strong>Certificate ID:</strong> {{ cert_id }}</div>
473
- </div>
474
-
475
- <!-- Authentic Gold Seal Stamp (Correctly Transformed & Scaled) -->
476
- <div class="seal-col">
477
- <div class="seal-circle-outer">
478
- <svg viewBox="0 0 512 512" width="34" height="34">
479
- <defs>
480
- <linearGradient id="sealGold" x1="0%" y1="0%" x2="100%" y2="100%">
481
- <stop offset="0%" stop-color="#FEF08A"/>
482
- <stop offset="50%" stop-color="#EAB308"/>
483
- <stop offset="100%" stop-color="#CA8A04"/>
484
- </linearGradient>
485
- </defs>
486
- <circle cx="256" cy="256" r="230" fill="none" stroke="url(#sealGold)" stroke-width="12"/>
487
- <circle cx="256" cy="256" r="200" fill="none" stroke="url(#sealGold)" stroke-width="4" stroke-dasharray="8 6"/>
488
- <g transform="translate(70, 68)" fill="url(#sealGold)">
489
- <path d="M181.63.05c101.39-2.47,184.56,80.09,190.14,179.93,5.53,99.03-66.16,185.42-165.11,195.46-87.39,8.86-171.1-45.56-197.67-128.96C-28.74,128.03,56.78,3.1,181.63.05h0ZM177.5,21.3C69.09,25.31-7.16,129.62,21.76,234.52c18.72,67.88,81.56,116.7,151.53,121.32,106.21,7.03,195.6-81.63,179.68-189.06-12.54-84.65-89.81-148.66-175.47-145.49h0Z"/>
490
- <path d="M147.69,120.05c12.04.36,24.64-.72,36.62-.07,24.29,1.32,41.37,20.13,42.91,43.99-.69,16.35.57,33.42-.28,49.69-1.31,25.42-18.55,43.75-44.02,45.64-9.59.72-20.14.69-29.78.84-4.97.08-9.9.68-10.37-5.66s.43-9.41.34-14.03c12.65-11.84,14.75-31.17,4.75-45.41-.63-.9-2.26-2.34-2.62-3.17s-.46-12.58-.26-14.37,1.1-3.52,1.46-5.16c1.21-5.42,1.06-11.26-.39-16.62-.41-1.54-1.48-3.56-1.63-4.99-.47-4.28-.14-9.67-.26-14.08-.11-3.56-.84-8.43-.57-11.86s1.32-4.35,4.08-4.75h0ZM162.03,135.5c-4.32.73-3.34,6.65-3.26,10.01.17,6.21.91,12.51,1.13,18.73.83,23.13-1.03,45.49-1.41,68.42-.07,3.93-1.27,10.87,4.01,11.46,10.36-.51,21.39,1.89,31.38-1.45,13.74-4.59,20.43-17.79,19.81-31.81-1.77-14.46-1.19-29.09-1.94-43.58-.52-10.12-3.97-20.33-12.44-26.46-10.8-7.82-24.82-4.88-37.29-5.34h0Z"/>
491
- <path d="M232.66,132.46c9.53.36,19.74-.72,29.19-.08,22.64,1.52,33.92,28.58,21.93,47.05-1.49,2.3-4.32,4.47-3.85,7.42.47,2.95,5.64,6.21,7.42,8.3,11.88,13.96,8.41,35.69-6.91,45.49-7.85,5.02-14.69,4.43-23.56,4.86-7.67.37-16.24,1.05-23.91.66-1.66-.08-2.98-.73-3.68-2.32s-.52-7.28-.43-9.26c.36-6.63,3.52-13.04,3.89-20.39.58-11.38-.1-23.12-.3-34.49-.1-5.68.32-11.44-.3-17.08-.41-3.82-1.64-7.52-1.89-11.35-.25-3.85-.18-7.99-.26-11.88-.07-2.84-1.26-6.03,2.68-6.95h-.01ZM243.68,144.59c-3.41.77-2.55,6.7-2.66,9.2-.28,6.08-.58,12.36-.29,18.47.1,2.06.36,6.36.9,8.21.54,1.85.84,1.79,1.66,2.19,1.66.83,8-.68,10.26-.88,4.22-.39,8.12.03,12.28-1.24,16.76-5.12,16.53-26.53,1.01-33.02-15.52-6.5-13.5-2.7-18.82-2.98-5.31-.28-3.37-.17-4.36.06h.03ZM243.68,194.52c-3.49.79-2.58,8.66-2.68,11.39-.26,7.05-1.06,17.41.07,24.21,1.13,6.8,2.63,3.38,5.32,3.26,3.96-.19,8.36-1.32,12.4-1.67,5.85-.5,10.68.22,16.24-2.25,13.6-6.04,12.62-25.27-.46-31.46-5.63-2.66-9.89-1.97-15.78-2.43-3.57-.28-7.2-.92-10.76-1.1-1.12-.06-3.35-.17-4.36.06h0Z"/>
492
- <path d="M90.59,133.03c8.84-.44,25.24-1.08,33.23,1.92,18.07,6.77,23.99,29.96,13.56,45.7-1.6,2.41-4.52,4.44-3.28,7.75.69,1.85,5.41,5.42,7.03,7.31,11.86,13.82,8.77,35.23-6.25,45.33-15.02,10.1-23.31,5.27-34.44,5.56-4.12.11-10.36.88-14.32.28-2.22-.34-3.45-2.79-3.48-4.83-.11-7.84.77-15.89,1.1-23.71.99-23.09,1.31-45.33.57-68.43-.14-4.15-1.05-9.79-.57-13.79.43-3.52,4.1-2.95,6.84-3.09h0ZM98.3,145.15c-1.71.29-2.98,1.7-3.21,3.41-.15,1.19-.23,3.13-.3,4.39-.39,8.01-.9,19.53.58,27.27.23,1.24.57,2.55,1.82,3.15,1.81.84,7.03-.55,9.32-.76,3.3-.3,6.62-.1,9.89-.59,21.2-3.21,21.02-29.7,1.28-34.86-4.36-1.14-13.16-1.92-17.79-2.07-.55-.01-1.03-.03-1.59.07h0ZM98.03,195.09c-4.25.88-2.46,6.76-3.24,9.72-.06,7.92-.55,15.86,0,23.75.22,3.21.77,5.75,4.57,5.67,3.82-.08,8.46-1.32,12.41-1.67,5.55-.48,11.21.12,16.48-2,14.62-5.88,13.53-26.13-.52-32.17-5.13-2.21-8.25-1.59-13.48-1.97-4.69-.34-9.7-1.23-14.35-1.38-.62-.01-1.26-.07-1.86.06h-.01Z"/>
493
- </g>
494
- </svg>
495
- </div>
496
- <div class="seal-label">OFFICIAL SEAL</div>
497
- </div>
498
-
499
- <!-- Signature -->
500
- <div class="sig-col">
501
- <div class="sig-line">Tim Rennings</div>
502
- <div class="sig-title">Lead Architect &bull; Hybridlabor Global LLC</div>
503
- </div>
504
- </div>
505
- </div>
506
- </div>
507
- </body>
508
- </html>