@hybridlabor-api/aos 4.4.0 → 4.4.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/.agents/skills/firecrawl/SKILL.md +149 -0
  2. package/.agents/skills/firecrawl/rules/install.md +82 -0
  3. package/.agents/skills/firecrawl/rules/security.md +26 -0
  4. package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
  5. package/.agents/skills/firecrawl-build/SKILL.md +39 -0
  6. package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
  7. package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
  8. package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  9. package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  10. package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  11. package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
  12. package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
  13. package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
  14. package/.agents/skills/firecrawl-download/SKILL.md +70 -0
  15. package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
  16. package/.agents/skills/firecrawl-map/SKILL.md +51 -0
  17. package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
  18. package/.agents/skills/firecrawl-search/SKILL.md +60 -0
  19. package/.claude/hooks/memb-inject.mjs +6 -0
  20. package/CLAUDE.md +573 -0
  21. package/README.de.md +0 -8
  22. package/README.md +0 -8
  23. package/README.pt.md +0 -8
  24. package/assets/brand/ao-ant-mark.svg +91 -0
  25. package/assets/brand/bdb-core-mark.svg +34 -0
  26. package/assets/brand/heimdall-guardian-mark.svg +16 -0
  27. package/assets/brand/memb-crystal-mark.svg +18 -0
  28. package/bin/aos-config.mjs +89 -0
  29. package/bin/aos-dashboard.mjs +608 -0
  30. package/bin/aos-uninstall.mjs +227 -0
  31. package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
  32. package/docs/skills_table.md +0 -3
  33. package/installer.js +428 -237
  34. package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
  35. package/mcps/after-effects-mcp/build/index.js +840 -0
  36. package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
  37. package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
  38. package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
  39. package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
  40. package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
  41. package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
  42. package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
  43. package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
  44. package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
  45. package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
  46. package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
  47. package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
  48. package/mcps/computer-use-mcp/dist/client.js +136 -0
  49. package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
  50. package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
  51. package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
  52. package/mcps/computer-use-mcp/dist/native.js +50 -0
  53. package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
  54. package/mcps/computer-use-mcp/dist/server.js +342 -0
  55. package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
  56. package/mcps/computer-use-mcp/dist/session.js +2372 -0
  57. package/package.json +13 -4
  58. package/skills/global_config/aos-project-init/SKILL.md +97 -130
  59. package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
  60. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
  61. package/skills/global_config/aos-setup/SKILL.md +110 -11
  62. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +48 -4
  63. package/skills/global_config/ask-tim/SKILL.md +2 -7
  64. package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
  65. package/bin/setup-saas.mjs +0 -792
  66. package/mcps/blender-mcp-server/.dockerignore +0 -19
  67. package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
  68. package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
  69. package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
  70. package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
  71. package/mcps/blender-mcp-server/Dockerfile +0 -19
  72. package/mcps/blender-mcp-server/LICENSE +0 -21
  73. package/mcps/blender-mcp-server/README.md +0 -409
  74. package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
  75. package/mcps/blender-mcp-server/addon/models.py +0 -223
  76. package/mcps/blender-mcp-server/pyproject.toml +0 -120
  77. package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
  78. package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
  79. package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
  80. package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
  81. package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
  82. package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
  83. package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
  84. package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
  85. package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
  86. package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
  87. package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
  88. package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
  89. package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
  90. package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
  91. package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
  92. package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
  93. package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
  94. package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
  95. package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
  96. package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
  97. package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
  98. package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
  99. package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
  100. package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
  101. package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
  102. package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
  103. package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
  104. package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
  105. package/mcps/davinci-mcp-professional/.bandit +0 -35
  106. package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
  107. package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
  108. package/mcps/davinci-mcp-professional/.editorconfig +0 -27
  109. package/mcps/davinci-mcp-professional/.gitattributes +0 -207
  110. package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
  111. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
  112. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  113. package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
  114. package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
  115. package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
  116. package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
  117. package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
  118. package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
  119. package/mcps/davinci-mcp-professional/BUGS.md +0 -55
  120. package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
  121. package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
  122. package/mcps/davinci-mcp-professional/COPYING.md +0 -228
  123. package/mcps/davinci-mcp-professional/Doxyfile +0 -379
  124. package/mcps/davinci-mcp-professional/README.md +0 -143
  125. package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
  126. package/mcps/davinci-mcp-professional/USING.md +0 -301
  127. package/mcps/davinci-mcp-professional/VERSION.md +0 -13
  128. package/mcps/davinci-mcp-professional/build.py +0 -169
  129. package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
  130. package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
  131. package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
  132. package/mcps/davinci-mcp-professional/main.py +0 -40
  133. package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
  134. package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
  135. package/mcps/davinci-mcp-professional/security_audit.py +0 -379
  136. package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
  137. package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
  138. package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
  139. package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
  140. package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
  141. package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
  142. package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
  143. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
  144. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
  145. package/mcps/davinci-mcp-professional/test.py +0 -186
  146. package/mcps/davinci-mcp-professional/uv.lock +0 -2073
  147. package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
  148. package/mcps/davinci-resolve-mcp/.clinerules +0 -17
  149. package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
  150. package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
  151. package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
  152. package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
  153. package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
  154. package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
  155. package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
  156. package/mcps/davinci-resolve-mcp/LICENSE +0 -21
  157. package/mcps/davinci-resolve-mcp/README.md +0 -173
  158. package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
  159. package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
  160. package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
  161. package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
  162. package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
  163. package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
  164. package/mcps/davinci-resolve-mcp/install.py +0 -1687
  165. package/mcps/davinci-resolve-mcp/package.json +0 -52
  166. package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
  167. package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
  168. package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
  169. package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
  170. package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
  171. package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
  172. package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
  173. package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
  174. package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
  175. package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
  176. package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
  177. package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
  178. package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
  179. package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
  180. package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
  181. package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
  182. package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
  183. package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
  184. package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
  185. package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
  186. package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
  187. package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
  188. package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
  189. package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
  190. package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
  191. package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
  192. package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
  193. package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
  194. package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
  195. package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
  196. package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
  197. package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
  198. package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
  199. package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
  200. package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
  201. package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
  202. package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
  203. package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
  204. package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
  205. package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
  206. package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
  207. package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
  208. package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
  209. package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
  210. package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
  211. package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
  212. package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
  213. package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
  214. package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
  215. package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
  216. package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
  217. package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
  218. package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
  219. package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
  220. package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
  221. package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
  222. package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
  223. package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
  224. package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
  225. package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
  226. package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
  227. package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
  228. package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
  229. package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
  230. package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
  231. package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
  232. package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
  233. package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
  234. package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
  235. package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
  236. package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
  237. package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
  238. package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
  239. package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
  240. package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
  241. package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
  242. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
  243. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
  244. package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
  245. package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
  246. package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
  247. package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
  248. package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
  249. package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
  250. package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
  251. package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
  252. package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
  253. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
  254. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
  255. package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
  256. package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
  257. package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
  258. package/mcps/vectorworks-mcp/.dockerignore +0 -8
  259. package/mcps/vectorworks-mcp/Dockerfile +0 -28
  260. package/mcps/vectorworks-mcp/README.md +0 -156
  261. package/mcps/vectorworks-mcp/app/__init__.py +0 -2
  262. package/mcps/vectorworks-mcp/app/api.py +0 -52
  263. package/mcps/vectorworks-mcp/app/chunking.py +0 -56
  264. package/mcps/vectorworks-mcp/app/config.py +0 -29
  265. package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
  266. package/mcps/vectorworks-mcp/app/indexer.py +0 -106
  267. package/mcps/vectorworks-mcp/app/main.py +0 -33
  268. package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
  269. package/mcps/vectorworks-mcp/app/search.py +0 -54
  270. package/mcps/vectorworks-mcp/app/utils.py +0 -14
  271. package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
  272. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
  273. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
  274. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
  275. package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
  276. package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
  277. package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
  278. package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
  279. package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
  280. package/mcps/vectorworks-mcp/design.md +0 -57
  281. package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
  282. package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
  283. package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
  284. package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
  285. package/mcps/vectorworks-mcp/requirements.txt +0 -10
  286. package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
  287. package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
  288. package/mcps/vectorworks-mcp/templates/index.html +0 -40
  289. package/scripts/ecosystem-health-audit.js +0 -257
  290. package/skills/bdb-dev-os-skill/SKILL.md +0 -49
  291. package/skills/bdb-dev-os-skill/package.json +0 -11
  292. package/skills/bdbsaastraining/SKILL.md +0 -316
  293. package/skills/bdbsaastraining/references/exam-pool.md +0 -313
  294. package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
  295. package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
  296. package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
  297. package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
  298. package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
  299. package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
  300. package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
  301. package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
  302. package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
  303. package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
  304. package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
  305. package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
  306. package/skills/global_config/bdbsaashost/SKILL.md +0 -125
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/env node
2
+ // Remove AOS from this machine.
3
+ //
4
+ // aos-uninstall what AOS installed; your data stays
5
+ // aos-uninstall --purge also the memory store, wikis and credentials
6
+ // aos-uninstall --dry-run list everything, delete nothing
7
+ // aos-uninstall --yes skip the confirmations (CI only)
8
+ //
9
+ // The file-level install manifest records every path AOS wrote together with
10
+ // the sha256 it wrote. That is what makes a precise uninstall possible: a file
11
+ // still matching its recorded hash is ours and untouched, so it goes; a file
12
+ // that differs was edited after installation and is backed up rather than
13
+ // deleted; a file with no manifest entry was never ours and is not considered
14
+ // at all.
15
+
16
+ import { readFileSync, existsSync, rmSync, copyFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
17
+ import { execFileSync } from 'node:child_process';
18
+ import { createHash } from 'node:crypto';
19
+ import { createInterface } from 'node:readline/promises';
20
+ import os from 'node:os';
21
+ import path from 'node:path';
22
+
23
+ const HOME = os.homedir();
24
+ const h = (...p) => path.join(HOME, ...p);
25
+ const tilde = (p) => p.replace(HOME, '~');
26
+
27
+ const PURGE = process.argv.includes('--purge');
28
+ const DRY = process.argv.includes('--dry-run');
29
+ const YES = process.argv.includes('--yes');
30
+
31
+ const MANIFEST = h('.agents', '.bdb-install-manifest.json');
32
+
33
+ // Machine-global state AOS creates but does not own the contents of. Removed
34
+ // only under --purge, and each is named individually before anything happens —
35
+ // losing a memory store to a flag nobody read would be unforgivable.
36
+ const DATA_PATHS = [
37
+ { path: h('.MemBDB'), what: 'memB memory store — every memory on this machine' },
38
+ { path: h('.openwiki'), what: 'OpenWiki credentials, daemon config and the watch list' },
39
+ { path: h('.synapse'), what: 'Synapse logs and reports' },
40
+ { path: h('.memb'), what: 'memB WebUI logs' },
41
+ { path: h('.ao'), what: 'AO Orchestrator logs' },
42
+ ];
43
+
44
+ const AGENTS = [
45
+ 'com.bdb.memb.webui', 'com.bdb.synapse', 'com.bdb.openwiki.daemon',
46
+ 'com.bdb.ao.daemon', 'com.bdb.agent-workspace', 'com.hybridlabor.bdb-remote',
47
+ ];
48
+
49
+ const MODULE_DIRS = ['memB', 'bdb-synapse', 'bdb-os-remote', 'bdb-dev-creator-extension',
50
+ 'bdb-dev-tool-installer',
51
+ 'bdb-agent-orchestrator', // AO
52
+ 'bdb-os-agent-workspace', // AO's archived predecessor, if still lying around
53
+ ].map((m) => h('.agents', m));
54
+
55
+ const sha256 = (file) => {
56
+ try { return createHash('sha256').update(readFileSync(file)).digest('hex'); }
57
+ catch { return null; }
58
+ };
59
+
60
+ // --------------------------------------------------------------------- plan
61
+ function plan() {
62
+ const manifest = (() => {
63
+ try { return JSON.parse(readFileSync(MANIFEST, 'utf8')); } catch { return null; }
64
+ })();
65
+
66
+ const ours = []; // matches its recorded hash — delete
67
+ const edited = []; // differs — back up, then delete
68
+ const gone = []; // already absent
69
+
70
+ for (const [p, entry] of Object.entries(manifest || {})) {
71
+ if (!existsSync(p)) { gone.push(p); continue; }
72
+ (sha256(p) === entry.sha256 ? ours : edited).push(p);
73
+ }
74
+
75
+ const agents = AGENTS
76
+ .map((label) => ({ label, plist: h('Library', 'LaunchAgents', `${label}.plist`) }))
77
+ .filter((a) => existsSync(a.plist));
78
+
79
+ const modules = MODULE_DIRS.filter(existsSync);
80
+ const data = PURGE ? DATA_PATHS.filter((d) => existsSync(d.path)) : [];
81
+
82
+ return { manifest, ours, edited, gone, agents, modules, data };
83
+ }
84
+
85
+ function describe(p) {
86
+ const { manifest, ours, edited, gone, agents, modules, data } = p;
87
+
88
+ if (!manifest) {
89
+ console.log('Kein Installations-Manifest unter ' + tilde(MANIFEST) + '.');
90
+ console.log('Ohne das lässt sich nicht sagen, welche Datei von AOS stammt — es wird nichts gelöscht.');
91
+ console.log('Betroffen wären sonst: ~/.claude/skills, ~/.gemini/config/skills, ~/.codex/skills, ~/.agents/');
92
+ return false;
93
+ }
94
+
95
+ console.log(`\nManifest: ${Object.keys(manifest).length} Dateien erfasst`);
96
+ console.log(` ${String(ours.length).padStart(5)} unverändert seit der Installation → werden entfernt`);
97
+ console.log(` ${String(edited.length).padStart(5)} nach der Installation bearbeitet → erst .bak, dann entfernt`);
98
+ console.log(` ${String(gone.length).padStart(5)} bereits nicht mehr vorhanden`);
99
+
100
+ if (edited.length) {
101
+ console.log('\n bearbeitet:');
102
+ for (const f of edited.slice(0, 8)) console.log(` ${tilde(f)}`);
103
+ if (edited.length > 8) console.log(` … und ${edited.length - 8} weitere`);
104
+ }
105
+
106
+ if (agents.length) {
107
+ console.log(`\nHintergrunddienste (${agents.length}): ${agents.map((a) => a.label).join(', ')}`);
108
+ }
109
+ if (modules.length) {
110
+ console.log('\nModule:');
111
+ for (const m of modules) console.log(` ${tilde(m)}`);
112
+ }
113
+
114
+ console.log('\nBleibt erhalten:');
115
+ if (!PURGE) for (const d of DATA_PATHS.filter((d) => existsSync(d.path))) console.log(` ${tilde(d.path).padEnd(18)} ${d.what}`);
116
+ console.log(' jede Datei ohne Manifest-Eintrag — eigene Skills, fremde Hooks, alles Selbstgeschriebene');
117
+
118
+ if (data.length) {
119
+ console.log('\n\x1b[31mWIRD GELÖSCHT (--purge):\x1b[0m');
120
+ for (const d of data) {
121
+ let size = '';
122
+ try { size = ` (${(dirSize(d.path) / 1e6).toFixed(1)} MB)`; } catch { /* unreadable */ }
123
+ console.log(` \x1b[31m${tilde(d.path).padEnd(18)}\x1b[0m ${d.what}${size}`);
124
+ }
125
+ }
126
+ return true;
127
+ }
128
+
129
+ function dirSize(p) {
130
+ let total = 0;
131
+ const walk = (d) => {
132
+ for (const e of readdirSync(d, { withFileTypes: true })) {
133
+ const f = path.join(d, e.name);
134
+ try { e.isDirectory() ? walk(f) : (total += statSync(f).size); } catch { /* raced */ }
135
+ }
136
+ };
137
+ try { statSync(p).isDirectory() ? walk(p) : (total = statSync(p).size); } catch { /* gone */ }
138
+ return total;
139
+ }
140
+
141
+ // ------------------------------------------------------------------ execute
142
+ function execute(p) {
143
+ const { ours, edited, agents, modules, data } = p;
144
+ const stamp = new Date().toISOString().replace(/[:.]/g, '').slice(0, 15);
145
+ let removed = 0, backed = 0;
146
+
147
+ for (const a of agents) {
148
+ try { execFileSync('launchctl', ['unload', a.plist], { stdio: 'ignore' }); } catch { /* not loaded */ }
149
+ try { rmSync(a.plist); } catch { /* already gone */ }
150
+ }
151
+ if (agents.length) console.log(` ${agents.length} Dienste gestoppt und entfernt`);
152
+
153
+ for (const f of edited) {
154
+ try { copyFileSync(f, `${f}.${stamp}.bak`); backed++; } catch { /* unreadable */ }
155
+ }
156
+ for (const f of [...ours, ...edited]) {
157
+ try { rmSync(f); removed++; } catch { /* already gone */ }
158
+ }
159
+ console.log(` ${removed} Dateien entfernt, ${backed} vorher gesichert`);
160
+
161
+ for (const m of modules) { try { rmSync(m, { recursive: true, force: true }); } catch { /* in use */ } }
162
+ if (modules.length) console.log(` ${modules.length} Module entfernt`);
163
+
164
+ // Only the BDB hook entries leave settings.json; everything else in it is
165
+ // the user's and must survive an uninstall exactly as it survives an install.
166
+ const settings = h('.claude', 'settings.json');
167
+ if (existsSync(settings)) {
168
+ try {
169
+ const s = JSON.parse(readFileSync(settings, 'utf8'));
170
+ const bdb = ['go-gate.mjs', 'graph-gate.mjs', 'memb-inject.mjs'];
171
+ let touched = false;
172
+ for (const [event, entries] of Object.entries(s.hooks || {})) {
173
+ const kept = entries.filter((e) => !(e.hooks || []).some((x) => bdb.some((n) => String(x.command).includes(n))));
174
+ if (kept.length !== entries.length) { touched = true; s.hooks[event] = kept; }
175
+ if (!kept.length) delete s.hooks[event];
176
+ }
177
+ if (touched) {
178
+ writeFileSync(settings, JSON.stringify(s, null, 2) + '\n');
179
+ console.log(' BDB-Hooks aus settings.json entfernt, alles andere unverändert');
180
+ }
181
+ } catch { console.log(' settings.json nicht lesbar — von Hand prüfen'); }
182
+ }
183
+
184
+ for (const d of data) {
185
+ try { rmSync(d.path, { recursive: true, force: true }); console.log(` \x1b[31mgelöscht:\x1b[0m ${tilde(d.path)}`); }
186
+ catch (e) { console.log(` konnte ${tilde(d.path)} nicht löschen: ${e.message}`); }
187
+ }
188
+
189
+ for (const f of [MANIFEST, h('.agents', '.bdb-manifest.json')]) {
190
+ try { rmSync(f); } catch { /* already gone */ }
191
+ }
192
+ }
193
+
194
+ // ---------------------------------------------------------------------- main
195
+ const ask = async (q) => {
196
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
197
+ const a = (await rl.question(q)).trim();
198
+ rl.close();
199
+ return a;
200
+ };
201
+
202
+ const p = plan();
203
+ console.log(PURGE ? '\x1b[31mAOS UNINSTALL — PURGE\x1b[0m' : 'AOS Uninstall');
204
+ if (!describe(p)) process.exit(1);
205
+
206
+ if (DRY) {
207
+ console.log('\n[dry-run] Es wurde nichts verändert.');
208
+ process.exit(0);
209
+ }
210
+
211
+ if (!YES) {
212
+ if ((await ask('\nFortfahren? [ja/nein] ')).toLowerCase() !== 'ja') {
213
+ console.log('Abgebrochen. Nichts verändert.');
214
+ process.exit(0);
215
+ }
216
+ if (PURGE) {
217
+ console.log('\n\x1b[31mDer zweite Schritt löscht das Gedächtnis und die Zugangsdaten unwiderruflich.\x1b[0m');
218
+ if ((await ask('Zum Bestätigen PURGE eingeben: ')).trim() !== 'PURGE') {
219
+ console.log('Abgebrochen. Nichts verändert.');
220
+ process.exit(0);
221
+ }
222
+ }
223
+ }
224
+
225
+ console.log('');
226
+ execute(p);
227
+ console.log('\nFertig. Neu einrichten mit: npx -y @hybridlabor-api/aos@latest');
@@ -0,0 +1,114 @@
1
+ # Audit 2026-09-13/14 — the "reports success, does nothing" family
2
+
3
+ Every defect below was found in one session, and they are all the same shape:
4
+ **a component reports a state it is not in.** Not crashes, not exceptions — a
5
+ clean run, a green check, and nothing actually delivered. That is why they
6
+ survived so many releases: the installer's own output said it worked.
7
+
8
+ Read this before adding a check anywhere in this repo. The question that
9
+ catches this family is not "does the check pass" but **"does the check measure
10
+ the thing, or something the tool itself produced?"**
11
+
12
+ Numbers here are measurements taken on one machine on 2026-09-13/14; they are
13
+ evidence for the defect, not invariants.
14
+
15
+ ---
16
+
17
+ ## Fixed and tested
18
+
19
+ | # | Defect | Why it was invisible |
20
+ |---|---|---|
21
+ | 1 | `runQuickUpdate()` delivered no harness files — hooks, dispatcher workflows, compiled subagents, `GEMINI.md` | Quick Update is what an existing install is offered. Everything `injectHarnessRules()` does was fresh-install-only, so machines kept first-install agent definitions forever. Fixed once for hooks in 4.4.1; the rest recurred one layer up |
22
+ | 2 | `memb-inject.mjs` imported `node:sqlite` at top level, outside its own `try` | The file documents itself as fail-open. A top-level import that throws escapes the `try`, so a Node without unflagged `node:sqlite` got a hook error on every prompt |
23
+ | 3 | The same hook read `project_id` from `$.metadata.project_id` | memB stores it at the payload top level. The lookup matched nothing, ever — the injected block rendered as `- None` and nobody read it as a bug |
24
+ | 4 | `resolveFileConflict()` skipped files whose content it did not recognise | Only ever called for paths the payload owns, so "unknown content" almost always meant *our own older file*. Bootstrap adoption catches only byte-identical files, so anything changed in between froze permanently. 50 files on one machine, the oldest untouched since July |
25
+ | 5 | `detectPlatforms()` tested for config directories | `syncSkillsToGlobalHarnesses()` and `universalHarnessSync()` create those directories. The detector read back evidence the installer had planted: 7 harnesses reported, 5 installed |
26
+ | 6 | `tar -xzf` unpacked module updates over the installed tree | A merge, not a replacement. Files the new version dropped stayed forever while `package.json` reported the module current |
27
+ | 7 | Seven call sites ignored `downloadOrUpdateModule()`'s `false` | A failed download fell through into venv setup and daemon registration, and the run still ended in a success banner |
28
+ | 8 | A failed `npm view` was swallowed | Every module read "up to date" indefinitely on an offline or proxied machine, indistinguishable from a real answer |
29
+ | 9 | The Agent Workspace printed its WebUI URL unconditionally | Directly under a warning that the port had not answered, and on Linux where no daemon is registered at all |
30
+ | 10 | `--dry-run` created a venv | The global `fs.*` dry-run patch does not cover child processes; `uv venv` ran for real |
31
+ | 11 | A second run overwrote the first `.bak` | Backups were not timestamped, so the recovery copy was destroyed by the act of recovering |
32
+ | 12 | AO's LaunchAgent ran the binary with no subcommand | Bare `ao` prints help and exits; with `KeepAlive` launchd restarted it until throttled. On every machine that installed AO through AOS the daemon never ran — it only looked installed |
33
+ | 13 | AO pointed at `@hybridlabor-api/bdb-os-agent-workspace` | That repository is archived and its last npm release predates the archiving, so installing it hands out the build with the CDC loop defect |
34
+ | 14 | There was no uninstall | "Remove and reinstall cleanly" was not possible, which also makes a genuine fresh-install test impossible |
35
+ | 15 | The OpenWiki daemon discovered nothing | `get_projects()` seeded a list with one entry and read it back unchanged forever. 31 wikis existed, 3 were refreshed, the oldest untouched since 23 July |
36
+ | 16 | No repository had a `.openwikiignore` | OpenWiki's `load()` falls back to `parse("")` — with no file it loads **zero** rules and indexes `.venv`, build output and its own `.openwiki/` recursively. Measured on one repo: 33 of 145 graph nodes were junk, 0 false positives after applying the template |
37
+
38
+ `tests/installer-e2e.sh` covers 18 of these against a throwaway `$HOME`. It is
39
+ deliberately outside `npm test` — real network, minutes to run — and belongs
40
+ before a release. The unit tests cover the logic; this covers whether the
41
+ installer does anything at all.
42
+
43
+ ---
44
+
45
+ ## Found, not yet fixed
46
+
47
+ **Operational data one publish away from the public package — corrected.**
48
+ `mcps/bdb-remoteos-mcp/queue.db` holds 134 real approval rows and `npm pack`
49
+ included it. The first reading of this was that it had already shipped. That
50
+ was wrong, and the correction matters more than the original claim: the
51
+ published tarballs for 4.2.0, 4.3.0, 4.4.0 and 4.4.1 were each downloaded and
52
+ searched, and every one contains zero matches for `queue.db` and `.pyc`. The
53
+ file has never been in git; it is created at runtime by the MCP, so a release
54
+ built from a clean checkout cannot contain it. A release published from a
55
+ development machine would have — which is exactly what 4.4.2 was going to be.
56
+
57
+ So this was a near miss, not a leak, and the lesson is about the check rather
58
+ than the defect: `npm pack --dry-run` on a working tree answers "what would
59
+ ship from *here*", which is not the same question as "what did ship". Only the
60
+ published tarball answers the second one. Both fixes stay: the negation inside
61
+ `files` (`.npmignore` has no effect on a path `files` includes wholesale), and
62
+ `.gitignore`, so neither the store nor its `-shm`/`-wal` siblings can enter
63
+ either channel from any machine.
64
+
65
+ **~46 MB that has never worked.** `tdmcp`, `touchdesigner-mcp` and `unreal_mcp`
66
+ declare `main` as `dist/index.js`; `dist/` is in no tarball. It exists only if
67
+ `npm run build` succeeds at install time, and that result is discarded — so the
68
+ MCP config is written pointing at files that were never produced.
69
+
70
+ **A smoke test that is theatre.** Four of the six Python MCP prewarm entries
71
+ call `uv -m mcp_server --help` without the required `run` subcommand. They fail
72
+ before `uv` reaches the script, `stdio` is `ignore`, and the result is
73
+ discarded.
74
+
75
+ **Hardcoded versions.** `bdb-os-remote` serves `1.0.0` from
76
+ `src/server/sse-server.js:94,189` while its manifest says 2.0.1; memB serves
77
+ `1.0.0` from `src/backend/server.py:36` against a manifest of 2.3.2.
78
+
79
+ **AO is macOS-arm64 only on npm.** The package ships one prebuilt binary. The
80
+ upstream project publishes every platform through GitHub Releases
81
+ (`darwin-arm64`, `darwin-x64`, `linux-x64` as AppImage/deb/rpm, `win32-x64.exe`)
82
+ and the fork's own `build-artifacts.yml` already produces them — only the path
83
+ into the package is missing. Separately, `bin/ao.js`'s `findBinary()` returns
84
+ the first path that *exists* without checking it can execute, so on Windows the
85
+ shim dies with an exec-format error instead of printing the hint it means to.
86
+
87
+ **12 of 187 skills are filler.** Three identical "Red Flags" lines appear in
88
+ eleven skills, one identical sentence in ten. `synapse-integration-skill` is
89
+ 23 % unique content and 72 % identical to `bdb-dev-os-skill`. `bdbsaas-ops` is
90
+ 16 lines, marked retired, and carries no commands.
91
+
92
+ ---
93
+
94
+ ## What a check has to do here
95
+
96
+ 1. **Measure the thing, not a proxy.** A port that answers is not the right
97
+ process; a directory that exists is not an installed application; a
98
+ `package.json` version is not what the running service reports.
99
+ 2. **Never read back your own writes as evidence.** If the installer creates
100
+ the path, the path proves nothing.
101
+ 3. **Distinguish "checked, fine" from "could not check."** An offline
102
+ registry must not read as up to date.
103
+ 4. **A discarded return value is a swallowed failure.** `installStep()` only
104
+ catches throws; a function that signals failure by returning `false` needs
105
+ its result read.
106
+ 5. **Every code path, not just the fresh one.** Quick Update, `--project-harness`,
107
+ `-y`, `--dry-run` and the interactive path each need the step, or the step
108
+ does not exist for the people on that path.
109
+ 6. **Ask about the artefact people actually have.** A dry run on a working tree
110
+ describes a hypothetical release from that machine. What users installed is
111
+ the published tarball, and only downloading it answers that. This rule was
112
+ added after the `queue.db` finding above was reported as a live leak on the
113
+ strength of a local `npm pack --dry-run`, and turned out on inspection of
114
+ all four published versions never to have shipped.
@@ -199,9 +199,6 @@
199
199
  |------------|-------------|
200
200
  | `bdbmediastorm` | The ultimate creative-tech and show-control brainstorming engine. Orchestrates multi-agent ideation focused on signal flow, hardware constraints, protocols, and BDB MCP integrations. Now strictly governed by the 3 Core Godmodes (engineering, ui-ux, shipping). |
201
201
  | `bdbrainstorm` | Combines multi-agent brainstorming, the /grill-me slash command, and the 3 Core Godmodes (godmode-engineering, godmode-ui-ux, godmode-shipping) to force a comprehensive, multi-agent ideation and technical design workflow. |
202
- | `bdbsaas-ops` | Retired — superseded by bdbsaashost. Use /bdbsaashost instead; this skill's content was merged there (2026-09-05, plan production_artifacts/00_execution_plan.md item B2). |
203
- | `bdbsaashost` | Use when operating the BDB Multi-Cloud Fleet. Governs Primary Compute, GCP Identity, Oracle, FastMCP SSE Gateway, 4-Eyes Approvals, agent-sudo guardrails, Incus containers, and LLDAP/Authelia identity management. |
204
- | `bdbsaastraining` | Use when onboarding or training staff on the BDB SaaS Host Engine. Guides trainees via interactive workloads (WordPress, mail, agents) through SSH 2FA, Incus, and FastMCP guardrails, culminating in a PDF certificate. |
205
202
  | `github-repo` | Standards and workflows for writing, formatting, sanitizing, and publishing high-quality GitHub repositories, complementing openwiki-skill. |
206
203
  | `memb-ingest` | Deep scan and ingest project files (.md, .json, agent.md, .openwiki) and past conversation logs into the local memB vector memory engine. |
207
204