@hybridlabor-api/aos 4.6.6 → 4.7.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 (484) hide show
  1. package/.agents/agents.md +1 -0
  2. package/.agents/nodes.json +5 -1
  3. package/.agents/state.schema.json +2 -1
  4. package/.agents/vendor-manifest.json +50 -0
  5. package/.claude/agents/architect.md +4 -0
  6. package/.claude/agents/security-reviewer.md +1 -1
  7. package/.claude/hooks/memb-inject.mjs +257 -135
  8. package/.claude/hooks/trail-relay.mjs +18 -0
  9. package/.claude/settings.json +70 -0
  10. package/.claude/workflows/startcycle-dispatch.mjs +29 -1
  11. package/.opencode/agents/architect.md +4 -0
  12. package/.opencode/plugins/bdb-aos.js +75 -0
  13. package/THIRD_PARTY_NOTICES.md +48 -0
  14. package/bin/aos-uninstall.mjs +55 -1
  15. package/docs/handover/agenttrail-for-ao.md +58 -0
  16. package/docs/handover/deja-for-ao.md +51 -0
  17. package/installer.js +141 -37
  18. package/mcp_config.json +4 -0
  19. package/mcps/mcsc/README.md +24 -0
  20. package/mcps/mcsc/package-lock.json +1234 -0
  21. package/mcps/mcsc/package.json +14 -0
  22. package/mcps/mcsc/packages/core/bin/mcsc.js +162 -0
  23. package/mcps/mcsc/packages/core/rulebook.default.yaml +49 -0
  24. package/mcps/mcsc/packages/core/schema/rulebook.schema.json +56 -0
  25. package/mcps/mcsc/packages/core/src/adapters/agy.js +107 -0
  26. package/mcps/mcsc/packages/core/src/adapters/codex.js +56 -0
  27. package/mcps/mcsc/packages/core/src/adapters/native.js +14 -0
  28. package/mcps/mcsc/packages/core/src/adapters/opencode.js +183 -0
  29. package/mcps/mcsc/packages/core/src/adapters/types.js +21 -0
  30. package/mcps/mcsc/packages/core/src/capabilities/buildOfferTable.js +34 -0
  31. package/mcps/mcsc/packages/core/src/capabilities/registry.js +99 -0
  32. package/mcps/mcsc/packages/core/src/capabilities/types.js +24 -0
  33. package/mcps/mcsc/packages/core/src/detect/cache.js +47 -0
  34. package/mcps/mcsc/packages/core/src/detect/inventory.js +73 -0
  35. package/mcps/mcsc/packages/core/src/detect/probes.js +158 -0
  36. package/mcps/mcsc/packages/core/src/detect/types.js +26 -0
  37. package/mcps/mcsc/packages/core/src/rulebook/load.js +53 -0
  38. package/mcps/mcsc/packages/core/src/rulebook/resolve.js +227 -0
  39. package/mcps/mcsc/packages/core/src/rulebook/rulebook.types.js +89 -0
  40. package/mcps/mcsc/packages/core/src/trail.js +17 -0
  41. package/mcps/mcsc/packages/mcp/server.js +302 -0
  42. package/mcps/mcsc/server.js +2 -0
  43. package/package.json +3 -1
  44. package/skills/basic/bdbmediastorm/SKILL.md +1 -1
  45. package/skills/basic/godmode-ui-ux/SKILL.md +2 -2
  46. package/skills/basic/godmode-ui-ux/references/anti-slop-rules.md +44 -40
  47. package/skills/basic/godmode-ui-ux/references/taste-archetypes.md +49 -0
  48. package/skills/basic/startcycle/SKILL.md +7 -0
  49. package/skills/basic/startcycle-graph/SKILL.md +12 -0
  50. package/skills/basic/startcycle-graph-user/SKILL.md +3 -0
  51. package/skills/basic/teamwork-preview/SKILL.md +2 -0
  52. package/skills/bdbrainstorm/SKILL.md +1 -0
  53. package/skills/global_config/agenttrail/LICENSE +21 -0
  54. package/skills/global_config/agenttrail/SKILL.md +48 -0
  55. package/skills/global_config/agenttrail/bin/agenttrail.mjs +1002 -0
  56. package/skills/global_config/agenttrail/public/index.html +661 -0
  57. package/skills/global_config/aos-project-init/SKILL.md +25 -5
  58. package/skills/global_config/aos-setup/SKILL.md +34 -1
  59. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +115 -1
  60. package/skills/global_config/archify/LICENSE +22 -0
  61. package/skills/global_config/archify/SKILL.md +140 -0
  62. package/skills/global_config/archify/THIRD_PARTY_NOTICES.md +69 -0
  63. package/skills/global_config/archify/assets/JetBrainsMono-OFL.txt +93 -0
  64. package/skills/global_config/archify/assets/template.html +14937 -0
  65. package/skills/global_config/archify/bin/archify.mjs +2139 -0
  66. package/skills/global_config/archify/bin/open-artifact.mjs +86 -0
  67. package/skills/global_config/archify/bin/preview.mjs +653 -0
  68. package/skills/global_config/archify/bin/visual-check.mjs +829 -0
  69. package/skills/global_config/archify/brand-marks/README.md +31 -0
  70. package/skills/global_config/archify/brand-marks/catalog.json +131 -0
  71. package/skills/global_config/archify/delta/architecture-delta.mjs +1232 -0
  72. package/skills/global_config/archify/examples/agent-run.lifecycle.json +60 -0
  73. package/skills/global_config/archify/examples/agent-tool-call.workflow.json +94 -0
  74. package/skills/global_config/archify/examples/async-job-roundtrip.sequence.json +61 -0
  75. package/skills/global_config/archify/examples/brand-aware-delivery.architecture.json +47 -0
  76. package/skills/global_config/archify/examples/cache-miss-request.sequence.json +82 -0
  77. package/skills/global_config/archify/examples/checkout-platform.base.architecture.json +31 -0
  78. package/skills/global_config/archify/examples/checkout-platform.head.architecture.json +31 -0
  79. package/skills/global_config/archify/examples/deployment-release.lifecycle.json +49 -0
  80. package/skills/global_config/archify/examples/event-stream.dataflow.json +57 -0
  81. package/skills/global_config/archify/examples/incident-response.workflow.json +64 -0
  82. package/skills/global_config/archify/examples/product-analytics.dataflow.json +76 -0
  83. package/skills/global_config/archify/examples/production-deployment.architecture.json +71 -0
  84. package/skills/global_config/archify/examples/release-delivery.workflow.json +62 -0
  85. package/skills/global_config/archify/examples/web-app.architecture.json +46 -0
  86. package/skills/global_config/archify/migrations/workflow-v2.mjs +279 -0
  87. package/skills/global_config/archify/package.json +39 -0
  88. package/skills/global_config/archify/recipes/scenarios.mjs +391 -0
  89. package/skills/global_config/archify/references/authoring-contract.md +247 -0
  90. package/skills/global_config/archify/references/brand-marks.md +65 -0
  91. package/skills/global_config/archify/references/delivery-contract.md +138 -0
  92. package/skills/global_config/archify/references/viewer-runtime.md +45 -0
  93. package/skills/global_config/archify/renderers/architecture/grid.mjs +62 -0
  94. package/skills/global_config/archify/renderers/architecture/render-architecture.mjs +1078 -0
  95. package/skills/global_config/archify/renderers/dataflow/README.md +104 -0
  96. package/skills/global_config/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  97. package/skills/global_config/archify/renderers/lifecycle/README.md +115 -0
  98. package/skills/global_config/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  99. package/skills/global_config/archify/renderers/sequence/README.md +114 -0
  100. package/skills/global_config/archify/renderers/sequence/render-sequence.mjs +464 -0
  101. package/skills/global_config/archify/renderers/shared/brand-marks.mjs +563 -0
  102. package/skills/global_config/archify/renderers/shared/cli.mjs +218 -0
  103. package/skills/global_config/archify/renderers/shared/desktop-readability.mjs +26 -0
  104. package/skills/global_config/archify/renderers/shared/diagnostics.mjs +160 -0
  105. package/skills/global_config/archify/renderers/shared/engineering-profiles.mjs +157 -0
  106. package/skills/global_config/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  107. package/skills/global_config/archify/renderers/shared/generated-validators.mjs +13 -0
  108. package/skills/global_config/archify/renderers/shared/geometry.mjs +1423 -0
  109. package/skills/global_config/archify/renderers/shared/i18n.mjs +595 -0
  110. package/skills/global_config/archify/renderers/shared/layout-report.mjs +40 -0
  111. package/skills/global_config/archify/renderers/shared/legend.mjs +217 -0
  112. package/skills/global_config/archify/renderers/shared/output-path.mjs +340 -0
  113. package/skills/global_config/archify/renderers/shared/repository-evidence.mjs +239 -0
  114. package/skills/global_config/archify/renderers/shared/repository-location.mjs +58 -0
  115. package/skills/global_config/archify/renderers/shared/text-fit.mjs +49 -0
  116. package/skills/global_config/archify/renderers/shared/utils.mjs +232 -0
  117. package/skills/global_config/archify/renderers/shared/validator.mjs +86 -0
  118. package/skills/global_config/archify/renderers/workflow/README.md +223 -0
  119. package/skills/global_config/archify/renderers/workflow/render-workflow.mjs +35 -0
  120. package/skills/global_config/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  121. package/skills/global_config/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  122. package/skills/global_config/archify/schemas/README.md +211 -0
  123. package/skills/global_config/archify/schemas/architecture.schema.json +178 -0
  124. package/skills/global_config/archify/schemas/common.schema.json +115 -0
  125. package/skills/global_config/archify/schemas/dataflow.schema.json +243 -0
  126. package/skills/global_config/archify/schemas/lifecycle.schema.json +266 -0
  127. package/skills/global_config/archify/schemas/sequence.schema.json +223 -0
  128. package/skills/global_config/archify/schemas/workflow.schema.json +428 -0
  129. package/skills/global_config/archify/scripts/check-render-output.mjs +916 -0
  130. package/skills/global_config/archify/scripts/generate-brand-marks.mjs +141 -0
  131. package/skills/global_config/archify/scripts/generate-validators.mjs +66 -0
  132. package/skills/global_config/archify/scripts/render-examples.mjs +26 -0
  133. package/skills/global_config/archify/skill-release.json +10 -0
  134. package/skills/global_config/bdb-security-audit/SKILL.md +109 -0
  135. package/skills/global_config/bdb-security-audit/references/audit-checklists.md +172 -0
  136. package/skills/global_config/bdb-security-audit/references/skylos-guide.md +139 -0
  137. package/skills/global_config/bdb-security-audit/references/xalgorix-bridge.md +110 -0
  138. package/skills/global_config/bdbdesignpro/SKILL.md +4 -4
  139. package/skills/global_config/bdbdesignpro/references/bdb-motion-tokens.md +52 -31
  140. package/skills/global_config/bdbresilience/SKILL.md +10 -0
  141. package/skills/global_config/brag/SKILL.md +179 -0
  142. package/skills/global_config/brag/assets/music/README.md +20 -0
  143. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
  144. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
  145. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
  146. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
  147. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
  148. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
  149. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
  150. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
  151. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
  152. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
  153. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
  154. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
  155. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
  156. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
  157. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
  158. package/skills/global_config/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
  159. package/skills/global_config/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
  160. package/skills/global_config/brag/assets/sfx/casino/card-place-1.ogg +0 -0
  161. package/skills/global_config/brag/assets/sfx/casino/card-place-2.ogg +0 -0
  162. package/skills/global_config/brag/assets/sfx/casino/card-place-3.ogg +0 -0
  163. package/skills/global_config/brag/assets/sfx/casino/card-place-4.ogg +0 -0
  164. package/skills/global_config/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
  165. package/skills/global_config/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
  166. package/skills/global_config/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
  167. package/skills/global_config/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
  168. package/skills/global_config/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
  169. package/skills/global_config/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
  170. package/skills/global_config/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
  171. package/skills/global_config/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
  172. package/skills/global_config/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
  173. package/skills/global_config/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
  174. package/skills/global_config/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
  175. package/skills/global_config/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
  176. package/skills/global_config/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
  177. package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
  178. package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
  179. package/skills/global_config/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
  180. package/skills/global_config/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
  181. package/skills/global_config/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
  182. package/skills/global_config/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
  183. package/skills/global_config/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
  184. package/skills/global_config/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
  185. package/skills/global_config/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
  186. package/skills/global_config/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
  187. package/skills/global_config/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
  188. package/skills/global_config/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
  189. package/skills/global_config/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
  190. package/skills/global_config/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
  191. package/skills/global_config/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
  192. package/skills/global_config/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
  193. package/skills/global_config/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
  194. package/skills/global_config/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
  195. package/skills/global_config/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
  196. package/skills/global_config/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
  197. package/skills/global_config/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
  198. package/skills/global_config/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
  199. package/skills/global_config/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
  200. package/skills/global_config/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
  201. package/skills/global_config/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
  202. package/skills/global_config/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
  203. package/skills/global_config/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
  204. package/skills/global_config/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
  205. package/skills/global_config/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
  206. package/skills/global_config/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
  207. package/skills/global_config/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
  208. package/skills/global_config/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
  209. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
  210. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
  211. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
  212. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
  213. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
  214. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
  215. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
  216. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
  217. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
  218. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
  219. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
  220. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
  221. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
  222. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
  223. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
  224. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
  225. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
  226. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
  227. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
  228. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
  229. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
  230. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
  231. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
  232. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
  233. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
  234. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
  235. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
  236. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
  237. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
  238. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
  239. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
  240. package/skills/global_config/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
  241. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
  242. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
  243. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
  244. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
  245. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
  246. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
  247. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
  248. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
  249. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
  250. package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
  251. package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
  252. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
  253. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
  254. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
  255. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
  256. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
  257. package/skills/global_config/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
  258. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
  259. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
  260. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
  261. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
  262. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
  263. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
  264. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
  265. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
  266. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
  267. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
  268. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
  269. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
  270. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
  271. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
  272. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
  273. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
  274. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
  275. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
  276. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
  277. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
  278. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
  279. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
  280. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
  281. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
  282. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
  283. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
  284. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
  285. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
  286. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
  287. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
  288. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
  289. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
  290. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
  291. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
  292. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
  293. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
  294. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
  295. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
  296. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
  297. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
  298. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
  299. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
  300. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
  301. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
  302. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
  303. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
  304. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
  305. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
  306. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
  307. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
  308. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
  309. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
  310. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
  311. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
  312. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
  313. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
  314. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
  315. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
  316. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
  317. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
  318. package/skills/global_config/brag/assets/sfx/interface/bong_001.ogg +0 -0
  319. package/skills/global_config/brag/assets/sfx/interface/click_001.ogg +0 -0
  320. package/skills/global_config/brag/assets/sfx/interface/click_002.ogg +0 -0
  321. package/skills/global_config/brag/assets/sfx/interface/click_003.ogg +0 -0
  322. package/skills/global_config/brag/assets/sfx/interface/click_004.ogg +0 -0
  323. package/skills/global_config/brag/assets/sfx/interface/click_005.ogg +0 -0
  324. package/skills/global_config/brag/assets/sfx/interface/drop_001.ogg +0 -0
  325. package/skills/global_config/brag/assets/sfx/interface/drop_002.ogg +0 -0
  326. package/skills/global_config/brag/assets/sfx/interface/drop_003.ogg +0 -0
  327. package/skills/global_config/brag/assets/sfx/interface/error_005.ogg +0 -0
  328. package/skills/global_config/brag/assets/sfx/interface/error_006.ogg +0 -0
  329. package/skills/global_config/brag/assets/sfx/interface/glitch_002.ogg +0 -0
  330. package/skills/global_config/brag/assets/sfx/interface/glitch_004.ogg +0 -0
  331. package/skills/global_config/brag/assets/sfx/interface/select_008.ogg +0 -0
  332. package/skills/global_config/brag/assets/sfx/interface/switch_001.ogg +0 -0
  333. package/skills/global_config/brag/assets/sfx/interface/switch_002.ogg +0 -0
  334. package/skills/global_config/brag/assets/sfx/interface/switch_004.ogg +0 -0
  335. package/skills/global_config/brag/assets/sfx/interface/switch_005.ogg +0 -0
  336. package/skills/global_config/brag/assets/sfx/interface/switch_006.ogg +0 -0
  337. package/skills/global_config/brag/assets/sfx/interface/switch_007.ogg +0 -0
  338. package/skills/global_config/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
  339. package/skills/global_config/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
  340. package/skills/global_config/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
  341. package/skills/global_config/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
  342. package/skills/global_config/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
  343. package/skills/global_config/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
  344. package/skills/global_config/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
  345. package/skills/global_config/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
  346. package/skills/global_config/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
  347. package/skills/global_config/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
  348. package/skills/global_config/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
  349. package/skills/global_config/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
  350. package/skills/global_config/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
  351. package/skills/global_config/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
  352. package/skills/global_config/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
  353. package/skills/global_config/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
  354. package/skills/global_config/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
  355. package/skills/global_config/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
  356. package/skills/global_config/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
  357. package/skills/global_config/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
  358. package/skills/global_config/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
  359. package/skills/global_config/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
  360. package/skills/global_config/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
  361. package/skills/global_config/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
  362. package/skills/global_config/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
  363. package/skills/global_config/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
  364. package/skills/global_config/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
  365. package/skills/global_config/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
  366. package/skills/global_config/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
  367. package/skills/global_config/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
  368. package/skills/global_config/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
  369. package/skills/global_config/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
  370. package/skills/global_config/brag/assets/sfx/sfx-analysis.json +15584 -0
  371. package/skills/global_config/brag/assets/sfx/sfx-analysis.md +75 -0
  372. package/skills/global_config/brag/assets/sfx/ui/click1.ogg +0 -0
  373. package/skills/global_config/brag/assets/sfx/ui/click2.ogg +0 -0
  374. package/skills/global_config/brag/assets/sfx/ui/click3.ogg +0 -0
  375. package/skills/global_config/brag/assets/sfx/ui/click4.ogg +0 -0
  376. package/skills/global_config/brag/assets/sfx/ui/click5.ogg +0 -0
  377. package/skills/global_config/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
  378. package/skills/global_config/brag/assets/sfx/ui/rollover1.ogg +0 -0
  379. package/skills/global_config/brag/assets/sfx/ui/rollover2.ogg +0 -0
  380. package/skills/global_config/brag/assets/sfx/ui/rollover4.ogg +0 -0
  381. package/skills/global_config/brag/assets/sfx/ui/rollover5.ogg +0 -0
  382. package/skills/global_config/brag/assets/sfx/ui/switch1.ogg +0 -0
  383. package/skills/global_config/brag/assets/sfx/ui/switch10.ogg +0 -0
  384. package/skills/global_config/brag/assets/sfx/ui/switch11.ogg +0 -0
  385. package/skills/global_config/brag/assets/sfx/ui/switch12.ogg +0 -0
  386. package/skills/global_config/brag/assets/sfx/ui/switch13.ogg +0 -0
  387. package/skills/global_config/brag/assets/sfx/ui/switch14.ogg +0 -0
  388. package/skills/global_config/brag/assets/sfx/ui/switch15.ogg +0 -0
  389. package/skills/global_config/brag/assets/sfx/ui/switch16.ogg +0 -0
  390. package/skills/global_config/brag/assets/sfx/ui/switch17.ogg +0 -0
  391. package/skills/global_config/brag/assets/sfx/ui/switch18.ogg +0 -0
  392. package/skills/global_config/brag/assets/sfx/ui/switch19.ogg +0 -0
  393. package/skills/global_config/brag/assets/sfx/ui/switch2.ogg +0 -0
  394. package/skills/global_config/brag/assets/sfx/ui/switch20.ogg +0 -0
  395. package/skills/global_config/brag/assets/sfx/ui/switch21.ogg +0 -0
  396. package/skills/global_config/brag/assets/sfx/ui/switch22.ogg +0 -0
  397. package/skills/global_config/brag/assets/sfx/ui/switch23.ogg +0 -0
  398. package/skills/global_config/brag/assets/sfx/ui/switch24.ogg +0 -0
  399. package/skills/global_config/brag/assets/sfx/ui/switch25.ogg +0 -0
  400. package/skills/global_config/brag/assets/sfx/ui/switch26.ogg +0 -0
  401. package/skills/global_config/brag/assets/sfx/ui/switch27.ogg +0 -0
  402. package/skills/global_config/brag/assets/sfx/ui/switch28.ogg +0 -0
  403. package/skills/global_config/brag/assets/sfx/ui/switch29.ogg +0 -0
  404. package/skills/global_config/brag/assets/sfx/ui/switch3.ogg +0 -0
  405. package/skills/global_config/brag/assets/sfx/ui/switch30.ogg +0 -0
  406. package/skills/global_config/brag/assets/sfx/ui/switch31.ogg +0 -0
  407. package/skills/global_config/brag/assets/sfx/ui/switch32.ogg +0 -0
  408. package/skills/global_config/brag/assets/sfx/ui/switch33.ogg +0 -0
  409. package/skills/global_config/brag/assets/sfx/ui/switch34.ogg +0 -0
  410. package/skills/global_config/brag/assets/sfx/ui/switch35.ogg +0 -0
  411. package/skills/global_config/brag/assets/sfx/ui/switch36.ogg +0 -0
  412. package/skills/global_config/brag/assets/sfx/ui/switch37.ogg +0 -0
  413. package/skills/global_config/brag/assets/sfx/ui/switch38.ogg +0 -0
  414. package/skills/global_config/brag/assets/sfx/ui/switch4.ogg +0 -0
  415. package/skills/global_config/brag/assets/sfx/ui/switch5.ogg +0 -0
  416. package/skills/global_config/brag/assets/sfx/ui/switch6.ogg +0 -0
  417. package/skills/global_config/brag/assets/sfx/ui/switch7.ogg +0 -0
  418. package/skills/global_config/brag/assets/sfx/ui/switch8.ogg +0 -0
  419. package/skills/global_config/brag/assets/sfx/ui/switch9.ogg +0 -0
  420. package/skills/global_config/brag/references/audio.md +307 -0
  421. package/skills/global_config/brag/references/step-1-inspect.md +133 -0
  422. package/skills/global_config/brag/references/step-2-plan.md +234 -0
  423. package/skills/global_config/brag/references/step-3-compose.md +210 -0
  424. package/skills/global_config/brag/references/step-4-deliver.md +168 -0
  425. package/skills/global_config/brag/references/tones.md +231 -0
  426. package/skills/global_config/brag/scripts/analyze_music_cues.py +309 -0
  427. package/skills/global_config/brag/scripts/pyproject.toml +14 -0
  428. package/skills/global_config/brag/scripts/uv.lock +819 -0
  429. package/skills/global_config/deja-memory/SKILL.md +42 -0
  430. package/skills/global_config/editable-design/LICENSE +202 -0
  431. package/skills/global_config/editable-design/README.md +34 -0
  432. package/skills/global_config/editable-design/SKILL.md +630 -0
  433. package/skills/global_config/editable-design/THIRD_PARTY_NOTICES.md +10 -0
  434. package/skills/global_config/editable-design/agents/openai.yaml +4 -0
  435. package/skills/global_config/editable-design/assets/editor/layer-editor.css +262 -0
  436. package/skills/global_config/editable-design/assets/editor/layer-editor.js +1929 -0
  437. package/skills/global_config/editable-design/assets/poster-starter/README.md +92 -0
  438. package/skills/global_config/editable-design/assets/poster-starter/assets/.gitkeep +0 -0
  439. package/skills/global_config/editable-design/assets/poster-starter/index.html +91 -0
  440. package/skills/global_config/editable-design/assets/poster-starter/poster.json +6 -0
  441. package/skills/global_config/editable-design/assets/poster-starter/reference/.gitkeep +1 -0
  442. package/skills/global_config/editable-design/assets/replay/icons/assets.png +0 -0
  443. package/skills/global_config/editable-design/assets/replay/icons/html.png +0 -0
  444. package/skills/global_config/editable-design/assets/replay/icons/input.png +0 -0
  445. package/skills/global_config/editable-design/assets/replay/icons/layers.png +0 -0
  446. package/skills/global_config/editable-design/assets/replay/icons/plan.png +0 -0
  447. package/skills/global_config/editable-design/assets/replay/icons/reference.png +0 -0
  448. package/skills/global_config/editable-design/assets/replay/icons/review.png +0 -0
  449. package/skills/global_config/editable-design/assets/replay/index.html +59 -0
  450. package/skills/global_config/editable-design/assets/replay/replay-motion.js +410 -0
  451. package/skills/global_config/editable-design/assets/replay/replay.css +380 -0
  452. package/skills/global_config/editable-design/assets/replay/replay.js +374 -0
  453. package/skills/global_config/editable-design/font-kit/package-lock.json +115 -0
  454. package/skills/global_config/editable-design/font-kit/package.json +19 -0
  455. package/skills/global_config/editable-design/pack.sh +20 -0
  456. package/skills/global_config/editable-design/references/asset-architecture.md +72 -0
  457. package/skills/global_config/editable-design/references/editor-pitfalls.md +70 -0
  458. package/skills/global_config/editable-design/references/editor-runtime.md +131 -0
  459. package/skills/global_config/editable-design/references/font-system.md +89 -0
  460. package/skills/global_config/editable-design/references/imagery.md +145 -0
  461. package/skills/global_config/editable-design/references/layout-typography.md +116 -0
  462. package/skills/global_config/editable-design/references/replay-contract.md +169 -0
  463. package/skills/global_config/editable-design/scripts/_browser.mjs +247 -0
  464. package/skills/global_config/editable-design/scripts/bake.mjs +87 -0
  465. package/skills/global_config/editable-design/scripts/build-replay.mjs +316 -0
  466. package/skills/global_config/editable-design/scripts/check-contract.mjs +293 -0
  467. package/skills/global_config/editable-design/scripts/check-fonts.sh +252 -0
  468. package/skills/global_config/editable-design/scripts/check-poster.sh +70 -0
  469. package/skills/global_config/editable-design/scripts/doctor.sh +78 -0
  470. package/skills/global_config/editable-design/scripts/explode.mjs +115 -0
  471. package/skills/global_config/editable-design/scripts/font-kit.mjs +187 -0
  472. package/skills/global_config/editable-design/scripts/import-asset.sh +23 -0
  473. package/skills/global_config/editable-design/scripts/init-poster.sh +64 -0
  474. package/skills/global_config/editable-design/scripts/install-font-kit.sh +13 -0
  475. package/skills/global_config/editable-design/scripts/package-lock.json +334 -0
  476. package/skills/global_config/editable-design/scripts/package.json +14 -0
  477. package/skills/global_config/editable-design/scripts/remove-chroma-key.py +201 -0
  478. package/skills/global_config/editable-design/scripts/render-poster.sh +202 -0
  479. package/skills/global_config/editable-design/scripts/trace.sh +159 -0
  480. package/skills/global_config/editable-design/scripts/verify-replay.mjs +97 -0
  481. package/skills/global_config/editable-design/scripts/verify.mjs +782 -0
  482. package/skills/global_config/editable-design/scripts/wire-editor.mjs +104 -0
  483. package/skills/global_config/editable-design/tests/fixtures/small-explode/index.html +86 -0
  484. package/skills/global_config/plan-canvas/SKILL.md +8 -0
@@ -0,0 +1,227 @@
1
+ /**
2
+ * PURE function: routing decision implementing the Rulebook §3 Decision logic
3
+ * and the §6 fallback/degradation contract.
4
+ *
5
+ * Synchronous, side-effect free, no Date.now() inside — the `attemptTrace`
6
+ * records resolutions but never calls `Date.now()` at the top level; the TTL
7
+ * check inside uses the offered `resolvedAt` timestamps only.
8
+ *
9
+ * @param {Object} taskDescriptor - { task_type: string, complexity?: string }
10
+ * @param {import('./rulebook.types.js').Rule[]} rules - Merged rule list from loadRulebook()
11
+ * @param {import('./rulebook.types.js').InventorySnapshot} inventorySnapshot - CLI health snapshot
12
+ * @param {import('./rulebook.types.js').OfferTable} offerTable - Model offer registry per CLI per rule
13
+ * @returns {import('./rulebook.types.js').Decision} Route or refuse decision
14
+ */
15
+ export function decide(taskDescriptor, rules, inventorySnapshot, offerTable, now) {
16
+ // Step 0: Find the first rule whose match criteria the taskDescriptor satisfies
17
+ const matchingRule = rules.find(rule => matchesMatch(rule.match, taskDescriptor));
18
+
19
+ if (!matchingRule) {
20
+ return {
21
+ kind: 'refuse',
22
+ reason: 'no matching rule for task descriptor',
23
+ attempted: []
24
+ };
25
+ }
26
+
27
+ const candidates = matchingRule.candidates;
28
+ const attemptTrace = [];
29
+ const taskTier = inferTier(taskDescriptor, matchingRule);
30
+
31
+ // --- Helper: find offer for a CLI within this rule ---
32
+ function findOffer(cliId) {
33
+ const ruleOffers = offerTable[cliId]?.[matchingRule.id];
34
+ if (!ruleOffers) return null;
35
+ return ruleOffers;
36
+ }
37
+
38
+ // --- Step 1: Preferred CLI, live registry offer ---
39
+ // The "preferred CLI" is the first candidate in the rule's chain that is not 'native'
40
+ const preferredCandidate = candidates.find(c => c.cli !== 'native');
41
+ const preferredCliId = preferredCandidate ? preferredCandidate.cli : null;
42
+
43
+ if (preferredCliId) {
44
+ const cliHealth = inventorySnapshot.cliHealth?.[preferredCliId];
45
+ if (cliHealth && (cliHealth.status === 'ready' || cliHealth.status === 'degraded')) {
46
+ const offer = findOffer(preferredCliId);
47
+
48
+ // Step 1: Preferred CLI has a live registry offer
49
+ if (offer && offer.source === 'live-list') {
50
+ return {
51
+ kind: 'route',
52
+ cliId: preferredCliId,
53
+ offer: {
54
+ cliId: preferredCliId,
55
+ modelId: offer.modelId,
56
+ tier: offer.tier,
57
+ resolvedAt: offer.resolvedAt,
58
+ source: offer.source
59
+ },
60
+ degraded: cliHealth.status === 'degraded' ? ['cli-degraded'] : []
61
+ };
62
+ }
63
+
64
+ // Step 2: Preferred CLI, cached offer ≤ TTL
65
+ if (offer && offer.source !== 'live-list') {
66
+ const ttlMs = preferredCliId === 'opencode' ? 3_600_000 : 86_400_000; // 1h vs 24h
67
+ if (offer.resolvedAt != null && (now - offer.resolvedAt) <= ttlMs) {
68
+ return {
69
+ kind: 'route',
70
+ cliId: preferredCliId,
71
+ offer: {
72
+ cliId: preferredCliId,
73
+ modelId: offer.modelId,
74
+ tier: offer.tier,
75
+ resolvedAt: offer.resolvedAt,
76
+ source: offer.source
77
+ },
78
+ degraded: ['stale-offer']
79
+ };
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ // --- Steps 3 & 4: Fallback to other CLIs ---
86
+ // Identify non-native candidates in their declared order
87
+ const nonNativeCandidates = candidates.filter(c => c.cli !== 'native');
88
+
89
+ const checkedNonNative = new Set();
90
+ if (preferredCliId) checkedNonNative.add(preferredCliId);
91
+
92
+ // Step 3: Next CLI in the rule's candidates order, same tier
93
+ // Try each subsequent non-native candidate after the preferred one
94
+ // Skip index 0 (the preferred CLI already checked in steps 1-2)
95
+ for (let i = 1; i < nonNativeCandidates.length; i += 1) {
96
+ const cliId = nonNativeCandidates[i].cli;
97
+ const cliHealth = inventorySnapshot.cliHealth?.[cliId];
98
+
99
+ if (!cliHealth || cliHealth.status !== 'ready') {
100
+ attemptTrace.push({
101
+ step: `step3-${i}`,
102
+ cli: cliId,
103
+ reason: cliHealth?.status === 'unusable' ? 'cli-unusable' : 'cli-absent',
104
+ offered: false
105
+ });
106
+ checkedNonNative.add(cliId);
107
+ continue;
108
+ }
109
+
110
+ const offer = findOffer(cliId);
111
+ if (offer && offer.tier === taskTier) {
112
+ // Step 3: Next CLI in the rule's candidates order, same tier
113
+ return {
114
+ kind: 'route',
115
+ cliId,
116
+ offer: {
117
+ cliId,
118
+ modelId: offer.modelId,
119
+ tier: offer.tier,
120
+ resolvedAt: offer.resolvedAt,
121
+ source: offer.source
122
+ },
123
+ degraded: ['cli-substituted']
124
+ };
125
+ }
126
+
127
+ attemptTrace.push({
128
+ step: `step3-${i}`,
129
+ cli: cliId,
130
+ reason: 'tier-mismatch',
131
+ offered: false
132
+ });
133
+ checkedNonNative.add(cliId);
134
+ }
135
+
136
+ // Step 4: Any healthy CLI at the same tier (outside preference chain)
137
+ // Check all CLIs in the inventory, including those not in the candidate chain
138
+ for (const [cliId, health] of Object.entries(inventorySnapshot.cliHealth || {})) {
139
+ if (health.status !== 'ready' || cliId === 'native' || checkedNonNative.has(cliId)) continue;
140
+ checkedNonNative.add(cliId);
141
+
142
+ const offer = findOffer(cliId);
143
+ if (offer && offer.tier === taskTier) {
144
+ // Step 4: Any healthy CLI at the same tier, outside preference
145
+ return {
146
+ kind: 'route',
147
+ cliId,
148
+ offer: {
149
+ cliId,
150
+ modelId: offer.modelId,
151
+ tier: offer.tier,
152
+ resolvedAt: offer.resolvedAt,
153
+ source: offer.source
154
+ },
155
+ degraded: ['cli-substituted', 'outside-preference']
156
+ };
157
+ }
158
+
159
+ attemptTrace.push({
160
+ step: `step4-${cliId}`,
161
+ cli: cliId,
162
+ reason: 'tier-mismatch',
163
+ offered: false
164
+ });
165
+ }
166
+
167
+ // --- Step 5: Tier downgrade (if fail-open policy) ---
168
+ const rulePolicy = matchingRule.policy || (matchingRule.id === 'media-generation' ? 'fail-open' : 'fail-closed');
169
+ if (rulePolicy === 'fail-open') {
170
+ // Deterministic downgrade target: use 'quick-review' as the fallback tier
171
+ const downgradeTier = taskTier === 'complex-code' ? 'quick-review' : taskTier;
172
+ return {
173
+ kind: 'route',
174
+ cliId: 'native',
175
+ offer: {
176
+ cliId: 'native',
177
+ modelId: 'native',
178
+ tier: downgradeTier,
179
+ resolvedAt: now,
180
+ source: 'pinned'
181
+ },
182
+ degraded: ['tier-downgraded']
183
+ };
184
+ }
185
+
186
+ // --- Step 6: Otherwise refuse ---
187
+ return {
188
+ kind: 'refuse',
189
+ reason: 'no suitable CLI available after full fallback chain',
190
+ attempted: attemptTrace
191
+ };
192
+ }
193
+
194
+ /**
195
+ * Infer the task tier from the taskDescriptor and rule match criteria.
196
+ */
197
+ function inferTier(taskDescriptor, rule) {
198
+ const { task_type, complexity } = taskDescriptor;
199
+ const { task_type: ruleTaskTypes, min_complexity } = rule.match;
200
+
201
+ if (ruleTaskTypes && Array.isArray(ruleTaskTypes) && ruleTaskTypes.includes(task_type)) {
202
+ return task_type;
203
+ }
204
+
205
+ if (min_complexity && complexity) {
206
+ return complexity;
207
+ }
208
+
209
+ // Default: media-generation falls to quick-review; others default quick-review too
210
+ return 'quick-review';
211
+ }
212
+
213
+ /**
214
+ * Check whether a taskDescriptor satisfies a rule's match criteria.
215
+ */
216
+ function matchesMatch(matchCriteria, taskDescriptor) {
217
+ if (!matchCriteria.task_type) return true;
218
+
219
+ const descriptorTaskTypes = taskDescriptor.task_type;
220
+ const ruleTaskTypes = matchCriteria.task_type;
221
+
222
+ if (!Array.isArray(ruleTaskTypes)) {
223
+ return ruleTaskTypes === descriptorTaskTypes;
224
+ }
225
+
226
+ return ruleTaskTypes.some(rt => descriptorTaskTypes.includes(rt));
227
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @typedef {Object} CliId
3
+ * @type {string}
4
+ * @readonly */
5
+ export const CliId = {
6
+ AGY: 'agy',
7
+ OPENCODE: 'opencode',
8
+ CODEX: 'codex',
9
+ NATIVE: 'native'
10
+ };
11
+
12
+ /** @readonly */ export const Tier = {
13
+ DEEP_RESEARCH: 'deep-research',
14
+ COMPLEX_CODE: 'complex-code',
15
+ QUICK_REVIEW: 'quick-review',
16
+ MEDIA_GENERATION: 'media-generation'
17
+ };
18
+
19
+ /**
20
+ * @typedef {Object} ProbeResult
21
+ * @property {boolean} pass
22
+ * @property {string} evidence
23
+ * @property {string} reason
24
+ */
25
+
26
+ /**
27
+ * @typedef {Object} CliHealth
28
+ * @property {('ready'|'degraded'|'unusable'|'absent')} status
29
+ * @property {string} binary
30
+ * @property {string} version
31
+ * @property {ProbeResult[]} probes
32
+ */
33
+
34
+ /**
35
+ * @typedef {Object} ModelOffer
36
+ * @property {string} cliId
37
+ * @property {string} modelId
38
+ * @property {string} tier
39
+ * @property {string} resolvedAt
40
+ * @property {'live-list'|'pinned'|'stale-cache'} source
41
+ */
42
+
43
+ /** @typedef {('stale-offer'|'cli-substituted'|'outside-preference'|'tier-downgraded')} DegradationNote */
44
+
45
+ /**
46
+ * @typedef {Object} AttemptTrace
47
+ * @property {number} step
48
+ * @property {string} cli
49
+ * @property {string} reason
50
+ * @property {boolean} offered
51
+ */
52
+
53
+ /**
54
+ * @typedef {Object} Rule
55
+ * @property {string} id
56
+ * @property {Object} match - { task_type: string[], min_complexity?: string }
57
+ * @property {Array<{cli: string, model?: string, model_select?: Object}>} candidates
58
+ * @property {('fail-open'|'fail-closed')} policy
59
+ */
60
+
61
+ /**
62
+ * @typedef {Object} InventorySnapshot
63
+ * @property {{[cliId: string]: CliHealth}} cliHealth
64
+ */
65
+
66
+ /**
67
+ * @typedef {Object} OfferTableEntry
68
+ * @property {string} modelId
69
+ * @property {string} tier
70
+ * @property {string} resolvedAt
71
+ * @property {'live-list'|'pinned'|'stale-cache'} source
72
+ */
73
+
74
+ /**
75
+ * @typedef {Object} OfferTable
76
+ * @property {{[ruleId: string]: OfferTableEntry}} [ruleId]
77
+ * @property {{[cliId: string]: OfferTableEntry}} [cliId]
78
+ */
79
+
80
+ /**
81
+ * @typedef {Object} Decision
82
+ * @property {('route'|'refuse')} kind
83
+ * @property {string} kind
84
+ * @property {string} cliId
85
+ * @property {ModelOffer} offer
86
+ * @property {DegradationNote[]} degraded
87
+ * @property {string} reason
88
+ * @property {AttemptTrace[]} attempted
89
+ */
@@ -0,0 +1,17 @@
1
+ // Best-effort fire-and-forget telemetry for the AOS live map (agenttrail daemon).
2
+ export async function emitTrail(event) {
3
+ const body = JSON.stringify(event);
4
+ const ports = process.env.AGENTTRAIL_PORT
5
+ ? [Number(process.env.AGENTTRAIL_PORT)]
6
+ : Array.from({ length: 15 }, (_, i) => 5330 + i);
7
+ await Promise.allSettled(
8
+ ports.map((port) =>
9
+ fetch(`http://127.0.0.1:${port}/hook`, {
10
+ method: 'POST',
11
+ headers: { 'content-type': 'application/json' },
12
+ body,
13
+ signal: AbortSignal.timeout(300),
14
+ }).catch(() => {})
15
+ )
16
+ );
17
+ }
@@ -0,0 +1,302 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import {
6
+ CallToolRequestSchema,
7
+ ListToolsRequestSchema,
8
+ } from "@modelcontextprotocol/sdk/types.js";
9
+ import { runInventory } from "../core/src/detect/inventory.js";
10
+ import { getCached, setCached } from "../core/src/detect/cache.js";
11
+ import { delegate as agyDelegate } from "../core/src/adapters/agy.js";
12
+ import { delegate as opencodeDelegate } from "../core/src/adapters/opencode.js";
13
+ import { delegate as codexDelegate } from "../core/src/adapters/codex.js";
14
+ import { decide } from "../core/src/rulebook/resolve.js";
15
+ import { loadRulebook } from "../core/src/rulebook/load.js";
16
+ import { buildOfferTable } from "../core/src/capabilities/buildOfferTable.js";
17
+ import * as path from 'node:path';
18
+ import * as fs from 'node:fs';
19
+ import { fileURLToPath } from 'node:url';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = path.dirname(__filename);
23
+
24
+ // --- Global State ---
25
+ let inventory = new Map();
26
+ let rules = [];
27
+ let offerTable = {};
28
+
29
+ const caller = process.env.MCSC_CALLER || 'none';
30
+ const CLI_IDS = ['agy', 'opencode', 'codex'];
31
+ const TTL_MS = 24 * 60 * 60 * 1000;
32
+
33
+ async function getInventory() {
34
+ const cliHealthMap = new Map();
35
+ const missingCliIds = [];
36
+
37
+ for (const cliId of CLI_IDS) {
38
+ const cached = await getCached(cliId);
39
+ if (cached) {
40
+ cliHealthMap.set(cliId, cached);
41
+ } else {
42
+ missingCliIds.push(cliId);
43
+ }
44
+ }
45
+
46
+ if (missingCliIds.length > 0) {
47
+ try {
48
+ const newHealthMap = await runInventory({ cliIds: missingCliIds, maxAgeMs: TTL_MS });
49
+ for (const [cliId, health] of newHealthMap.entries()) {
50
+ cliHealthMap.set(cliId, health);
51
+ await setCached(cliId, health, TTL_MS);
52
+ }
53
+ } catch (e) {
54
+ console.error(`[mcsc-mcp] Warning: inventory run failed: ${e.message}`);
55
+ }
56
+ }
57
+
58
+ return cliHealthMap;
59
+ }
60
+
61
+ // --- Initialization ---
62
+ async function init() {
63
+ inventory = await getInventory();
64
+
65
+ const customRulebook = path.resolve(process.cwd(), 'rulebook.yaml');
66
+ const defaultRulebook = path.resolve(__dirname, '../core/rulebook.default.yaml');
67
+ const rulebookPath = fs.existsSync(customRulebook) ? customRulebook : defaultRulebook;
68
+
69
+ try {
70
+ if (fs.existsSync(rulebookPath)) {
71
+ rules = loadRulebook(rulebookPath);
72
+ const now = Date.now();
73
+ offerTable = await buildOfferTable(rules, inventory, now);
74
+ }
75
+ } catch (e) {
76
+ console.error(`[mcsc-mcp] Warning: could not load rulebook from ${rulebookPath}: ${e.message}`);
77
+ }
78
+ }
79
+
80
+ // --- MCP Server Definition ---
81
+ const server = new Server(
82
+ {
83
+ name: "mcsc-mcp",
84
+ version: "0.1.0",
85
+ },
86
+ {
87
+ capabilities: {
88
+ tools: {},
89
+ },
90
+ }
91
+ );
92
+
93
+ // --- Tool Registration ---
94
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
95
+ const tools = [];
96
+
97
+ // delegate_agy
98
+ const agyHealth = inventory.get('agy');
99
+ if (agyHealth && agyHealth.status === 'ready' && caller !== 'agy') {
100
+ tools.push({
101
+ name: "delegate_agy",
102
+ description: "Delegate a task to Antigravity CLI (Gemini 3.8 Flash or Claude 3.7 Sonnet). Provides full coding capabilities.",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ prompt: {
107
+ type: "string",
108
+ description: "The complete task description or objective for the subagent to accomplish."
109
+ },
110
+ model: {
111
+ type: "string",
112
+ description: "Optional model hint for the subagent (e.g., 'flash', 'pro'). Default varies by tool.",
113
+ default: "flash"
114
+ }
115
+ },
116
+ required: ["prompt"]
117
+ }
118
+ });
119
+ }
120
+
121
+ // delegate_opencode
122
+ const opencodeHealth = inventory.get('opencode');
123
+ if (opencodeHealth && opencodeHealth.status === 'ready' && caller !== 'opencode') {
124
+ tools.push({
125
+ name: "delegate_opencode",
126
+ description: "Delegate a task to OpenCode CLI.",
127
+ inputSchema: {
128
+ type: "object",
129
+ properties: {
130
+ prompt: {
131
+ type: "string",
132
+ description: "The complete task description."
133
+ },
134
+ model: {
135
+ type: "string",
136
+ description: "Optional model override."
137
+ },
138
+ variant: {
139
+ type: "string",
140
+ description: "Optional model variant (reasoning effort, e.g. high/max/minimal)."
141
+ }
142
+ },
143
+ required: ["prompt"]
144
+ }
145
+ });
146
+ }
147
+
148
+ // delegate_codex
149
+ const codexHealth = inventory.get('codex');
150
+ if (codexHealth && codexHealth.status === 'ready' && caller !== 'codex') {
151
+ tools.push({
152
+ name: "delegate_codex",
153
+ description: "Delegate a task to Codex CLI.",
154
+ inputSchema: {
155
+ type: "object",
156
+ properties: {
157
+ prompt: {
158
+ type: "string",
159
+ description: "The complete task description."
160
+ },
161
+ model: {
162
+ type: "string",
163
+ description: "Optional model override."
164
+ }
165
+ },
166
+ required: ["prompt"]
167
+ }
168
+ });
169
+ }
170
+
171
+ // delegate_smart (Routing Engine)
172
+ if (rules && rules.length > 0) {
173
+ tools.push({
174
+ name: "delegate_smart",
175
+ description: "Smart task delegation. Reads the rulebook to find the best CLI for the task type and delegates automatically.",
176
+ inputSchema: {
177
+ type: "object",
178
+ properties: {
179
+ task_type: {
180
+ type: "string",
181
+ description: "The type of task (e.g. 'review', 'architecture', 'media')."
182
+ },
183
+ prompt: {
184
+ type: "string",
185
+ description: "The exact prompt for the delegated CLI."
186
+ }
187
+ },
188
+ required: ["task_type", "prompt"]
189
+ }
190
+ });
191
+ }
192
+
193
+ return { tools };
194
+ });
195
+
196
+ // --- Tool Execution ---
197
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
198
+ const { name, arguments: args } = request.params;
199
+ const signal = extra.signal;
200
+
201
+ const req = {
202
+ cwd: process.cwd(),
203
+ prompt: args.prompt,
204
+ model: args.model,
205
+ variant: args.variant,
206
+ signal
207
+ };
208
+
209
+ try {
210
+ let result;
211
+
212
+ switch (name) {
213
+ case "delegate_agy":
214
+ result = await agyDelegate(req);
215
+ break;
216
+
217
+ case "delegate_opencode":
218
+ result = await opencodeDelegate(req);
219
+ break;
220
+
221
+ case "delegate_codex":
222
+ result = await codexDelegate(req);
223
+ break;
224
+
225
+ case "delegate_smart": {
226
+ const taskDescriptor = { task_type: args.task_type };
227
+ const snapshot = { cliHealth: Object.fromEntries(inventory) };
228
+ const decision = decide(taskDescriptor, rules, snapshot, offerTable, Date.now());
229
+
230
+ if (decision.kind === 'refuse') {
231
+ return {
232
+ content: [{ type: "text", text: `Smart Delegation refused: ${decision.reason}` }],
233
+ isError: true,
234
+ };
235
+ }
236
+
237
+ if (decision.offer && decision.offer.modelId) {
238
+ req.model = decision.offer.modelId;
239
+ }
240
+
241
+ switch (decision.cliId) {
242
+ case 'agy':
243
+ result = await agyDelegate(req);
244
+ break;
245
+ case 'opencode':
246
+ result = await opencodeDelegate(req);
247
+ break;
248
+ case 'codex':
249
+ result = await codexDelegate(req);
250
+ break;
251
+ case 'native':
252
+ throw new Error("Task requires native handling by the current orchestrator. Do not use delegate tools for this.");
253
+ default:
254
+ throw new Error(`Unknown CLI: ${decision.cliId}`);
255
+ }
256
+ break;
257
+ }
258
+
259
+ default:
260
+ return {
261
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
262
+ isError: true,
263
+ };
264
+ }
265
+
266
+ if (result.exit !== 0) {
267
+ return {
268
+ content: [{ type: "text", text: `Delegation failed (Exit ${result.exit}):\n${result.output}` }],
269
+ isError: true,
270
+ };
271
+ }
272
+
273
+ return {
274
+ content: [{ type: "text", text: result.output }],
275
+ };
276
+
277
+ } catch (error) {
278
+ if (error.name === 'AbortError') {
279
+ return {
280
+ content: [{ type: "text", text: "Tool execution was cancelled by the orchestrator." }],
281
+ isError: true,
282
+ };
283
+ }
284
+ return {
285
+ content: [{ type: "text", text: `Error executing ${name}: ${error.message}` }],
286
+ isError: true,
287
+ };
288
+ }
289
+ });
290
+
291
+ // --- Startup ---
292
+ async function main() {
293
+ await init();
294
+ const transport = new StdioServerTransport();
295
+ await server.connect(transport);
296
+ console.error("MCSC MCP Server running on stdio");
297
+ }
298
+
299
+ main().catch((error) => {
300
+ console.error("Server error:", error);
301
+ process.exit(1);
302
+ });
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import './packages/mcp/server.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hybridlabor-api/aos",
3
- "version": "4.6.6",
3
+ "version": "4.7.0",
4
4
  "description": "AOS — A Curated AI AGENT OS. Optimized agent skills and add-ons like memB, OpenWiki, Heimdall Token Saver, and Godmode architectures.",
5
5
  "main": "installer.js",
6
6
  "engines": {
@@ -12,6 +12,8 @@
12
12
  "bdb-agent-skills-pro": "installer.js",
13
13
  "bdb-agent-skills": "installer.js",
14
14
  "aos-plan-canvas": "skills/global_config/plan-canvas/scripts/plan-canvas.js",
15
+ "aos-trail": "skills/global_config/agenttrail/bin/agenttrail.mjs",
16
+ "aos-archify": "skills/global_config/archify/bin/archify.mjs",
15
17
  "aos-dashboard": "bin/aos-dashboard.mjs",
16
18
  "aos-config": "bin/aos-config.mjs",
17
19
  "aos-uninstall": "bin/aos-uninstall.mjs"
@@ -76,7 +76,7 @@ Define hardware and software nodes as strict bounded contexts:
76
76
 
77
77
  ## 5. Mandatory — Plan Canvas Review
78
78
 
79
- Before this session concludes, run `aos-plan-canvas open <file>` against `signal-flow.md` (or the combined show-control spec), then `aos-plan-canvas await <file>` and leave it running. The user reviews the signal flow diagram, hardware topology, and failover matrix in the browser (Mermaid renders live, click-to-annotate, chat rail). Do not consider the show architecture finalized before an `approve` verdict. A `request_changes` verdict means revise the artifact and reopen — it live-reloads. This is a plain CLI tool, identical regardless of which agent harness runs this skill. See the `plan-canvas` skill.
79
+ Before this session concludes, run `aos-plan-canvas open <file>` against `signal-flow.md` (or the combined show-control spec), then `aos-plan-canvas await <file>` and leave it running. The user reviews the signal flow diagram, hardware topology, and failover matrix in the browser (Mermaid renders live, click-to-annotate, chat rail). Do not consider the show architecture finalized before an `approve` verdict. A `request_changes` verdict means revise the artifact and reopen — it live-reloads. This is a plain CLI tool, identical regardless of which agent harness runs this skill. See the `plan-canvas` skill. If a build follows the approve, Trigger A starts the live map (`agenttrail` skill); `aos-archify` can render the signal flow as a workflow or architecture diagram for the review.
80
80
 
81
81
  ---
82
82
 
@@ -33,7 +33,7 @@ Generate a project-specific DESIGN.md containing:
33
33
  - IF brand colors defined → Color bans (Lila Ban, etc.) = SUSPENDED
34
34
  - IF brand fonts defined → Font bans (Inter Ban, etc.) = SUSPENDED
35
35
  - Pattern-level Anti-Slop (no generic dashboards, no emojis, no card overuse) = ALWAYS ACTIVE
36
- - IF no brand defined → Use defaults from design-tokens.json + all Anti-Slop bans ACTIVE
36
+ - IF no brand defined → Select ONE aesthetic archetype from `references/taste-archetypes.md` (Utilitarian Minimalist, Industrial Brutalist, High-End Tactile, Ethereal Modern) + all Anti-Slop bans ACTIVE
37
37
 
38
38
  ## 1. Anti-Slop Directive
39
39
 
@@ -135,7 +135,7 @@ Master orchestration skill for UI/UX design, enforcing high-agency design taste
135
135
  - Exclude when performing pure backend or DevOps tasks.
136
136
 
137
137
  ## Core Process
138
- 1. Analyze the requested UI against StyleSeed guidelines.
138
+ 1. Analyze the requested UI against project `DESIGN.md` and Anti-Slop guidelines.
139
139
  2. Ensure all spacing and colors utilize DTCG design tokens.
140
140
  3. Implement explicit loading, error, and empty states.
141
141
  4. Apply fluid motion physics for interactions.