@hybridlabor-api/aos 4.6.6 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/.agents/agents.md +9 -3
  2. package/.agents/nodes.json +7 -2
  3. package/.agents/state.schema.json +26 -1
  4. package/.agents/vendor-manifest.json +56 -0
  5. package/.agents/workflows/startcycle-graph.md +2 -2
  6. package/.claude/agents/architect.md +7 -2
  7. package/.claude/agents/security-reviewer.md +1 -1
  8. package/.claude/agents/techlead.md +2 -0
  9. package/.claude/hooks/memb-inject.mjs +257 -135
  10. package/.claude/hooks/trail-relay.mjs +18 -0
  11. package/.claude/settings.json +70 -0
  12. package/.claude/workflows/startcycle-dispatch.mjs +203 -17
  13. package/.opencode/agents/architect.md +7 -2
  14. package/.opencode/agents/techlead.md +2 -0
  15. package/.opencode/plugins/bdb-aos.js +75 -0
  16. package/THIRD_PARTY_NOTICES.md +57 -1
  17. package/bin/aos-doctor.mjs +366 -0
  18. package/bin/aos-store.mjs +167 -0
  19. package/bin/aos-uninstall.mjs +55 -1
  20. package/docs/AUDIT_BRIEF_ECC_STORE.md +122 -0
  21. package/docs/PLAN_AOS_STORE_PHASE1.md +190 -0
  22. package/docs/handover/agenttrail-for-ao.md +58 -0
  23. package/docs/handover/deja-for-ao.md +51 -0
  24. package/installer.js +182 -38
  25. package/lib/aos-archify-contract.mjs +277 -0
  26. package/lib/ecc-store-index.json +1 -0
  27. package/mcp_config.json +8 -0
  28. package/mcps/mcsc/README.md +24 -0
  29. package/mcps/mcsc/package-lock.json +1234 -0
  30. package/mcps/mcsc/package.json +14 -0
  31. package/mcps/mcsc/packages/core/bin/mcsc.js +162 -0
  32. package/mcps/mcsc/packages/core/rulebook.default.yaml +49 -0
  33. package/mcps/mcsc/packages/core/schema/rulebook.schema.json +56 -0
  34. package/mcps/mcsc/packages/core/src/adapters/agy.js +107 -0
  35. package/mcps/mcsc/packages/core/src/adapters/codex.js +179 -0
  36. package/mcps/mcsc/packages/core/src/adapters/native.js +14 -0
  37. package/mcps/mcsc/packages/core/src/adapters/opencode.js +183 -0
  38. package/mcps/mcsc/packages/core/src/adapters/types.js +21 -0
  39. package/mcps/mcsc/packages/core/src/capabilities/buildOfferTable.js +34 -0
  40. package/mcps/mcsc/packages/core/src/capabilities/registry.js +99 -0
  41. package/mcps/mcsc/packages/core/src/capabilities/types.js +24 -0
  42. package/mcps/mcsc/packages/core/src/detect/cache.js +47 -0
  43. package/mcps/mcsc/packages/core/src/detect/inventory.js +73 -0
  44. package/mcps/mcsc/packages/core/src/detect/probes.js +158 -0
  45. package/mcps/mcsc/packages/core/src/detect/types.js +26 -0
  46. package/mcps/mcsc/packages/core/src/rulebook/load.js +53 -0
  47. package/mcps/mcsc/packages/core/src/rulebook/resolve.js +227 -0
  48. package/mcps/mcsc/packages/core/src/rulebook/rulebook.types.js +89 -0
  49. package/mcps/mcsc/packages/core/src/trail.js +17 -0
  50. package/mcps/mcsc/packages/mcp/server.js +302 -0
  51. package/mcps/mcsc/server.js +2 -0
  52. package/package.json +8 -2
  53. package/scripts/build-ecc-store-index.mjs +147 -0
  54. package/skills/basic/bdbmediastorm/SKILL.md +1 -1
  55. package/skills/basic/godmode-ui-ux/SKILL.md +2 -2
  56. package/skills/basic/godmode-ui-ux/references/anti-slop-rules.md +44 -40
  57. package/skills/basic/godmode-ui-ux/references/taste-archetypes.md +49 -0
  58. package/skills/basic/startcycle/SKILL.md +7 -0
  59. package/skills/basic/startcycle-graph/SKILL.md +25 -0
  60. package/skills/basic/startcycle-graph-user/SKILL.md +3 -0
  61. package/skills/basic/teamwork-preview/SKILL.md +2 -0
  62. package/skills/bdbrainstorm/SKILL.md +1 -0
  63. package/skills/global_config/agenttrail/LICENSE +21 -0
  64. package/skills/global_config/agenttrail/SKILL.md +48 -0
  65. package/skills/global_config/agenttrail/bin/agenttrail.mjs +1113 -0
  66. package/skills/global_config/agenttrail/public/index.html +662 -0
  67. package/skills/global_config/aos-project-init/SKILL.md +25 -5
  68. package/skills/global_config/aos-setup/SKILL.md +34 -1
  69. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +115 -1
  70. package/skills/global_config/archify/LICENSE +22 -0
  71. package/skills/global_config/archify/SKILL.md +140 -0
  72. package/skills/global_config/archify/THIRD_PARTY_NOTICES.md +69 -0
  73. package/skills/global_config/archify/assets/JetBrainsMono-OFL.txt +93 -0
  74. package/skills/global_config/archify/assets/template.html +14937 -0
  75. package/skills/global_config/archify/bin/archify.mjs +2139 -0
  76. package/skills/global_config/archify/bin/open-artifact.mjs +86 -0
  77. package/skills/global_config/archify/bin/preview.mjs +653 -0
  78. package/skills/global_config/archify/bin/visual-check.mjs +829 -0
  79. package/skills/global_config/archify/brand-marks/README.md +31 -0
  80. package/skills/global_config/archify/brand-marks/catalog.json +131 -0
  81. package/skills/global_config/archify/delta/architecture-delta.mjs +1232 -0
  82. package/skills/global_config/archify/examples/agent-run.lifecycle.json +60 -0
  83. package/skills/global_config/archify/examples/agent-tool-call.workflow.json +94 -0
  84. package/skills/global_config/archify/examples/async-job-roundtrip.sequence.json +61 -0
  85. package/skills/global_config/archify/examples/brand-aware-delivery.architecture.json +47 -0
  86. package/skills/global_config/archify/examples/cache-miss-request.sequence.json +82 -0
  87. package/skills/global_config/archify/examples/checkout-platform.base.architecture.json +31 -0
  88. package/skills/global_config/archify/examples/checkout-platform.head.architecture.json +31 -0
  89. package/skills/global_config/archify/examples/dataflow-product-analytics.html +15048 -0
  90. package/skills/global_config/archify/examples/deployment-release.lifecycle.json +49 -0
  91. package/skills/global_config/archify/examples/event-stream.dataflow.json +57 -0
  92. package/skills/global_config/archify/examples/incident-response.workflow.json +64 -0
  93. package/skills/global_config/archify/examples/lifecycle-agent-run.html +14983 -0
  94. package/skills/global_config/archify/examples/product-analytics.dataflow.json +76 -0
  95. package/skills/global_config/archify/examples/production-deployment.architecture.json +71 -0
  96. package/skills/global_config/archify/examples/release-delivery.workflow.json +62 -0
  97. package/skills/global_config/archify/examples/sequence-cache-miss-request.html +15063 -0
  98. package/skills/global_config/archify/examples/web-app-rendered.html +15012 -0
  99. package/skills/global_config/archify/examples/web-app.architecture.json +46 -0
  100. package/skills/global_config/archify/examples/workflow-agent-tool-call-rendered.html +15054 -0
  101. package/skills/global_config/archify/migrations/workflow-v2.mjs +279 -0
  102. package/skills/global_config/archify/package.json +39 -0
  103. package/skills/global_config/archify/recipes/scenarios.mjs +391 -0
  104. package/skills/global_config/archify/references/authoring-contract.md +247 -0
  105. package/skills/global_config/archify/references/brand-marks.md +65 -0
  106. package/skills/global_config/archify/references/delivery-contract.md +138 -0
  107. package/skills/global_config/archify/references/viewer-runtime.md +45 -0
  108. package/skills/global_config/archify/renderers/architecture/grid.mjs +62 -0
  109. package/skills/global_config/archify/renderers/architecture/render-architecture.mjs +1078 -0
  110. package/skills/global_config/archify/renderers/dataflow/README.md +104 -0
  111. package/skills/global_config/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  112. package/skills/global_config/archify/renderers/lifecycle/README.md +115 -0
  113. package/skills/global_config/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  114. package/skills/global_config/archify/renderers/sequence/README.md +114 -0
  115. package/skills/global_config/archify/renderers/sequence/render-sequence.mjs +464 -0
  116. package/skills/global_config/archify/renderers/shared/brand-marks.mjs +563 -0
  117. package/skills/global_config/archify/renderers/shared/cli.mjs +218 -0
  118. package/skills/global_config/archify/renderers/shared/desktop-readability.mjs +26 -0
  119. package/skills/global_config/archify/renderers/shared/diagnostics.mjs +160 -0
  120. package/skills/global_config/archify/renderers/shared/engineering-profiles.mjs +157 -0
  121. package/skills/global_config/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  122. package/skills/global_config/archify/renderers/shared/generated-validators.mjs +13 -0
  123. package/skills/global_config/archify/renderers/shared/geometry.mjs +1423 -0
  124. package/skills/global_config/archify/renderers/shared/i18n.mjs +595 -0
  125. package/skills/global_config/archify/renderers/shared/layout-report.mjs +40 -0
  126. package/skills/global_config/archify/renderers/shared/legend.mjs +217 -0
  127. package/skills/global_config/archify/renderers/shared/output-path.mjs +340 -0
  128. package/skills/global_config/archify/renderers/shared/repository-evidence.mjs +239 -0
  129. package/skills/global_config/archify/renderers/shared/repository-location.mjs +58 -0
  130. package/skills/global_config/archify/renderers/shared/text-fit.mjs +49 -0
  131. package/skills/global_config/archify/renderers/shared/utils.mjs +232 -0
  132. package/skills/global_config/archify/renderers/shared/validator.mjs +86 -0
  133. package/skills/global_config/archify/renderers/workflow/README.md +223 -0
  134. package/skills/global_config/archify/renderers/workflow/render-workflow.mjs +35 -0
  135. package/skills/global_config/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  136. package/skills/global_config/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  137. package/skills/global_config/archify/schemas/README.md +211 -0
  138. package/skills/global_config/archify/schemas/architecture.schema.json +178 -0
  139. package/skills/global_config/archify/schemas/common.schema.json +115 -0
  140. package/skills/global_config/archify/schemas/dataflow.schema.json +243 -0
  141. package/skills/global_config/archify/schemas/lifecycle.schema.json +266 -0
  142. package/skills/global_config/archify/schemas/sequence.schema.json +223 -0
  143. package/skills/global_config/archify/schemas/workflow.schema.json +428 -0
  144. package/skills/global_config/archify/scripts/check-render-output.mjs +916 -0
  145. package/skills/global_config/archify/scripts/generate-brand-marks.mjs +141 -0
  146. package/skills/global_config/archify/scripts/generate-validators.mjs +66 -0
  147. package/skills/global_config/archify/scripts/render-examples.mjs +26 -0
  148. package/skills/global_config/archify/skill-release.json +10 -0
  149. package/skills/global_config/ask-tim/SKILL.md +10 -0
  150. package/skills/global_config/bdb-security-audit/SKILL.md +109 -0
  151. package/skills/global_config/bdb-security-audit/references/audit-checklists.md +172 -0
  152. package/skills/global_config/bdb-security-audit/references/skylos-guide.md +139 -0
  153. package/skills/global_config/bdb-security-audit/references/xalgorix-bridge.md +110 -0
  154. package/skills/global_config/bdbdesignpro/SKILL.md +4 -4
  155. package/skills/global_config/bdbdesignpro/references/bdb-motion-tokens.md +52 -31
  156. package/skills/global_config/bdbresilience/SKILL.md +10 -0
  157. package/skills/global_config/brag/SKILL.md +179 -0
  158. package/skills/global_config/brag/assets/music/README.md +20 -0
  159. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
  160. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
  161. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
  162. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
  163. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
  164. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
  165. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
  166. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
  167. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
  168. package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
  169. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
  170. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
  171. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
  172. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
  173. package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
  174. package/skills/global_config/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
  175. package/skills/global_config/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
  176. package/skills/global_config/brag/assets/sfx/casino/card-place-1.ogg +0 -0
  177. package/skills/global_config/brag/assets/sfx/casino/card-place-2.ogg +0 -0
  178. package/skills/global_config/brag/assets/sfx/casino/card-place-3.ogg +0 -0
  179. package/skills/global_config/brag/assets/sfx/casino/card-place-4.ogg +0 -0
  180. package/skills/global_config/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
  181. package/skills/global_config/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
  182. package/skills/global_config/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
  183. package/skills/global_config/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
  184. package/skills/global_config/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
  185. package/skills/global_config/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
  186. package/skills/global_config/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
  187. package/skills/global_config/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
  188. package/skills/global_config/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
  189. package/skills/global_config/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
  190. package/skills/global_config/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
  191. package/skills/global_config/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
  192. package/skills/global_config/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
  193. package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
  194. package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
  195. package/skills/global_config/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
  196. package/skills/global_config/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
  197. package/skills/global_config/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
  198. package/skills/global_config/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
  199. package/skills/global_config/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
  200. package/skills/global_config/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
  201. package/skills/global_config/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
  202. package/skills/global_config/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
  203. package/skills/global_config/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
  204. package/skills/global_config/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
  205. package/skills/global_config/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
  206. package/skills/global_config/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
  207. package/skills/global_config/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
  208. package/skills/global_config/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
  209. package/skills/global_config/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
  210. package/skills/global_config/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
  211. package/skills/global_config/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
  212. package/skills/global_config/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
  213. package/skills/global_config/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
  214. package/skills/global_config/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
  215. package/skills/global_config/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
  216. package/skills/global_config/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
  217. package/skills/global_config/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
  218. package/skills/global_config/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
  219. package/skills/global_config/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
  220. package/skills/global_config/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
  221. package/skills/global_config/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
  222. package/skills/global_config/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
  223. package/skills/global_config/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
  224. package/skills/global_config/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
  225. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
  226. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
  227. package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
  228. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
  229. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
  230. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
  231. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
  232. package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
  233. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
  234. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
  235. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
  236. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
  237. package/skills/global_config/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
  238. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
  239. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
  240. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
  241. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
  242. package/skills/global_config/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
  243. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
  244. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
  245. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
  246. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
  247. package/skills/global_config/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
  248. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
  249. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
  250. package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
  251. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
  252. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
  253. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
  254. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
  255. package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
  256. package/skills/global_config/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
  257. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
  258. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
  259. package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
  260. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
  261. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
  262. package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
  263. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
  264. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
  265. package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
  266. package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
  267. package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
  268. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
  269. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
  270. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
  271. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
  272. package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
  273. package/skills/global_config/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
  274. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
  275. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
  276. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
  277. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
  278. package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
  279. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
  280. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
  281. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
  282. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
  283. package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
  284. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
  285. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
  286. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
  287. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
  288. package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
  289. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
  290. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
  291. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
  292. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
  293. package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
  294. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
  295. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
  296. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
  297. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
  298. package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
  299. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
  300. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
  301. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
  302. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
  303. package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
  304. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
  305. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
  306. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
  307. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
  308. package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
  309. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
  310. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
  311. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
  312. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
  313. package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
  314. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
  315. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
  316. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
  317. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
  318. package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
  319. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
  320. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
  321. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
  322. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
  323. package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
  324. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
  325. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
  326. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
  327. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
  328. package/skills/global_config/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
  329. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
  330. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
  331. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
  332. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
  333. package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
  334. package/skills/global_config/brag/assets/sfx/interface/bong_001.ogg +0 -0
  335. package/skills/global_config/brag/assets/sfx/interface/click_001.ogg +0 -0
  336. package/skills/global_config/brag/assets/sfx/interface/click_002.ogg +0 -0
  337. package/skills/global_config/brag/assets/sfx/interface/click_003.ogg +0 -0
  338. package/skills/global_config/brag/assets/sfx/interface/click_004.ogg +0 -0
  339. package/skills/global_config/brag/assets/sfx/interface/click_005.ogg +0 -0
  340. package/skills/global_config/brag/assets/sfx/interface/drop_001.ogg +0 -0
  341. package/skills/global_config/brag/assets/sfx/interface/drop_002.ogg +0 -0
  342. package/skills/global_config/brag/assets/sfx/interface/drop_003.ogg +0 -0
  343. package/skills/global_config/brag/assets/sfx/interface/error_005.ogg +0 -0
  344. package/skills/global_config/brag/assets/sfx/interface/error_006.ogg +0 -0
  345. package/skills/global_config/brag/assets/sfx/interface/glitch_002.ogg +0 -0
  346. package/skills/global_config/brag/assets/sfx/interface/glitch_004.ogg +0 -0
  347. package/skills/global_config/brag/assets/sfx/interface/select_008.ogg +0 -0
  348. package/skills/global_config/brag/assets/sfx/interface/switch_001.ogg +0 -0
  349. package/skills/global_config/brag/assets/sfx/interface/switch_002.ogg +0 -0
  350. package/skills/global_config/brag/assets/sfx/interface/switch_004.ogg +0 -0
  351. package/skills/global_config/brag/assets/sfx/interface/switch_005.ogg +0 -0
  352. package/skills/global_config/brag/assets/sfx/interface/switch_006.ogg +0 -0
  353. package/skills/global_config/brag/assets/sfx/interface/switch_007.ogg +0 -0
  354. package/skills/global_config/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
  355. package/skills/global_config/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
  356. package/skills/global_config/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
  357. package/skills/global_config/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
  358. package/skills/global_config/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
  359. package/skills/global_config/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
  360. package/skills/global_config/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
  361. package/skills/global_config/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
  362. package/skills/global_config/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
  363. package/skills/global_config/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
  364. package/skills/global_config/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
  365. package/skills/global_config/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
  366. package/skills/global_config/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
  367. package/skills/global_config/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
  368. package/skills/global_config/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
  369. package/skills/global_config/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
  370. package/skills/global_config/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
  371. package/skills/global_config/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
  372. package/skills/global_config/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
  373. package/skills/global_config/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
  374. package/skills/global_config/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
  375. package/skills/global_config/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
  376. package/skills/global_config/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
  377. package/skills/global_config/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
  378. package/skills/global_config/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
  379. package/skills/global_config/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
  380. package/skills/global_config/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
  381. package/skills/global_config/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
  382. package/skills/global_config/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
  383. package/skills/global_config/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
  384. package/skills/global_config/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
  385. package/skills/global_config/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
  386. package/skills/global_config/brag/assets/sfx/sfx-analysis.json +15584 -0
  387. package/skills/global_config/brag/assets/sfx/sfx-analysis.md +75 -0
  388. package/skills/global_config/brag/assets/sfx/ui/click1.ogg +0 -0
  389. package/skills/global_config/brag/assets/sfx/ui/click2.ogg +0 -0
  390. package/skills/global_config/brag/assets/sfx/ui/click3.ogg +0 -0
  391. package/skills/global_config/brag/assets/sfx/ui/click4.ogg +0 -0
  392. package/skills/global_config/brag/assets/sfx/ui/click5.ogg +0 -0
  393. package/skills/global_config/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
  394. package/skills/global_config/brag/assets/sfx/ui/rollover1.ogg +0 -0
  395. package/skills/global_config/brag/assets/sfx/ui/rollover2.ogg +0 -0
  396. package/skills/global_config/brag/assets/sfx/ui/rollover4.ogg +0 -0
  397. package/skills/global_config/brag/assets/sfx/ui/rollover5.ogg +0 -0
  398. package/skills/global_config/brag/assets/sfx/ui/switch1.ogg +0 -0
  399. package/skills/global_config/brag/assets/sfx/ui/switch10.ogg +0 -0
  400. package/skills/global_config/brag/assets/sfx/ui/switch11.ogg +0 -0
  401. package/skills/global_config/brag/assets/sfx/ui/switch12.ogg +0 -0
  402. package/skills/global_config/brag/assets/sfx/ui/switch13.ogg +0 -0
  403. package/skills/global_config/brag/assets/sfx/ui/switch14.ogg +0 -0
  404. package/skills/global_config/brag/assets/sfx/ui/switch15.ogg +0 -0
  405. package/skills/global_config/brag/assets/sfx/ui/switch16.ogg +0 -0
  406. package/skills/global_config/brag/assets/sfx/ui/switch17.ogg +0 -0
  407. package/skills/global_config/brag/assets/sfx/ui/switch18.ogg +0 -0
  408. package/skills/global_config/brag/assets/sfx/ui/switch19.ogg +0 -0
  409. package/skills/global_config/brag/assets/sfx/ui/switch2.ogg +0 -0
  410. package/skills/global_config/brag/assets/sfx/ui/switch20.ogg +0 -0
  411. package/skills/global_config/brag/assets/sfx/ui/switch21.ogg +0 -0
  412. package/skills/global_config/brag/assets/sfx/ui/switch22.ogg +0 -0
  413. package/skills/global_config/brag/assets/sfx/ui/switch23.ogg +0 -0
  414. package/skills/global_config/brag/assets/sfx/ui/switch24.ogg +0 -0
  415. package/skills/global_config/brag/assets/sfx/ui/switch25.ogg +0 -0
  416. package/skills/global_config/brag/assets/sfx/ui/switch26.ogg +0 -0
  417. package/skills/global_config/brag/assets/sfx/ui/switch27.ogg +0 -0
  418. package/skills/global_config/brag/assets/sfx/ui/switch28.ogg +0 -0
  419. package/skills/global_config/brag/assets/sfx/ui/switch29.ogg +0 -0
  420. package/skills/global_config/brag/assets/sfx/ui/switch3.ogg +0 -0
  421. package/skills/global_config/brag/assets/sfx/ui/switch30.ogg +0 -0
  422. package/skills/global_config/brag/assets/sfx/ui/switch31.ogg +0 -0
  423. package/skills/global_config/brag/assets/sfx/ui/switch32.ogg +0 -0
  424. package/skills/global_config/brag/assets/sfx/ui/switch33.ogg +0 -0
  425. package/skills/global_config/brag/assets/sfx/ui/switch34.ogg +0 -0
  426. package/skills/global_config/brag/assets/sfx/ui/switch35.ogg +0 -0
  427. package/skills/global_config/brag/assets/sfx/ui/switch36.ogg +0 -0
  428. package/skills/global_config/brag/assets/sfx/ui/switch37.ogg +0 -0
  429. package/skills/global_config/brag/assets/sfx/ui/switch38.ogg +0 -0
  430. package/skills/global_config/brag/assets/sfx/ui/switch4.ogg +0 -0
  431. package/skills/global_config/brag/assets/sfx/ui/switch5.ogg +0 -0
  432. package/skills/global_config/brag/assets/sfx/ui/switch6.ogg +0 -0
  433. package/skills/global_config/brag/assets/sfx/ui/switch7.ogg +0 -0
  434. package/skills/global_config/brag/assets/sfx/ui/switch8.ogg +0 -0
  435. package/skills/global_config/brag/assets/sfx/ui/switch9.ogg +0 -0
  436. package/skills/global_config/brag/references/audio.md +307 -0
  437. package/skills/global_config/brag/references/step-1-inspect.md +133 -0
  438. package/skills/global_config/brag/references/step-2-plan.md +234 -0
  439. package/skills/global_config/brag/references/step-3-compose.md +210 -0
  440. package/skills/global_config/brag/references/step-4-deliver.md +168 -0
  441. package/skills/global_config/brag/references/tones.md +231 -0
  442. package/skills/global_config/brag/scripts/analyze_music_cues.py +309 -0
  443. package/skills/global_config/brag/scripts/pyproject.toml +14 -0
  444. package/skills/global_config/brag/scripts/uv.lock +819 -0
  445. package/skills/global_config/deja-memory/SKILL.md +42 -0
  446. package/skills/global_config/editable-design/LICENSE +202 -0
  447. package/skills/global_config/editable-design/README.md +34 -0
  448. package/skills/global_config/editable-design/SKILL.md +630 -0
  449. package/skills/global_config/editable-design/THIRD_PARTY_NOTICES.md +10 -0
  450. package/skills/global_config/editable-design/agents/openai.yaml +4 -0
  451. package/skills/global_config/editable-design/assets/editor/layer-editor.css +262 -0
  452. package/skills/global_config/editable-design/assets/editor/layer-editor.js +1929 -0
  453. package/skills/global_config/editable-design/assets/poster-starter/README.md +92 -0
  454. package/skills/global_config/editable-design/assets/poster-starter/assets/.gitkeep +0 -0
  455. package/skills/global_config/editable-design/assets/poster-starter/index.html +91 -0
  456. package/skills/global_config/editable-design/assets/poster-starter/poster.json +6 -0
  457. package/skills/global_config/editable-design/assets/poster-starter/reference/.gitkeep +1 -0
  458. package/skills/global_config/editable-design/assets/replay/icons/assets.png +0 -0
  459. package/skills/global_config/editable-design/assets/replay/icons/html.png +0 -0
  460. package/skills/global_config/editable-design/assets/replay/icons/input.png +0 -0
  461. package/skills/global_config/editable-design/assets/replay/icons/layers.png +0 -0
  462. package/skills/global_config/editable-design/assets/replay/icons/plan.png +0 -0
  463. package/skills/global_config/editable-design/assets/replay/icons/reference.png +0 -0
  464. package/skills/global_config/editable-design/assets/replay/icons/review.png +0 -0
  465. package/skills/global_config/editable-design/assets/replay/index.html +59 -0
  466. package/skills/global_config/editable-design/assets/replay/replay-motion.js +410 -0
  467. package/skills/global_config/editable-design/assets/replay/replay.css +380 -0
  468. package/skills/global_config/editable-design/assets/replay/replay.js +374 -0
  469. package/skills/global_config/editable-design/font-kit/package-lock.json +115 -0
  470. package/skills/global_config/editable-design/font-kit/package.json +19 -0
  471. package/skills/global_config/editable-design/pack.sh +20 -0
  472. package/skills/global_config/editable-design/references/asset-architecture.md +72 -0
  473. package/skills/global_config/editable-design/references/editor-pitfalls.md +70 -0
  474. package/skills/global_config/editable-design/references/editor-runtime.md +131 -0
  475. package/skills/global_config/editable-design/references/font-system.md +89 -0
  476. package/skills/global_config/editable-design/references/imagery.md +145 -0
  477. package/skills/global_config/editable-design/references/layout-typography.md +116 -0
  478. package/skills/global_config/editable-design/references/replay-contract.md +169 -0
  479. package/skills/global_config/editable-design/scripts/_browser.mjs +247 -0
  480. package/skills/global_config/editable-design/scripts/bake.mjs +87 -0
  481. package/skills/global_config/editable-design/scripts/build-replay.mjs +316 -0
  482. package/skills/global_config/editable-design/scripts/check-contract.mjs +293 -0
  483. package/skills/global_config/editable-design/scripts/check-fonts.sh +252 -0
  484. package/skills/global_config/editable-design/scripts/check-poster.sh +70 -0
  485. package/skills/global_config/editable-design/scripts/doctor.sh +78 -0
  486. package/skills/global_config/editable-design/scripts/explode.mjs +115 -0
  487. package/skills/global_config/editable-design/scripts/font-kit.mjs +187 -0
  488. package/skills/global_config/editable-design/scripts/import-asset.sh +23 -0
  489. package/skills/global_config/editable-design/scripts/init-poster.sh +64 -0
  490. package/skills/global_config/editable-design/scripts/install-font-kit.sh +13 -0
  491. package/skills/global_config/editable-design/scripts/package-lock.json +334 -0
  492. package/skills/global_config/editable-design/scripts/package.json +14 -0
  493. package/skills/global_config/editable-design/scripts/remove-chroma-key.py +201 -0
  494. package/skills/global_config/editable-design/scripts/render-poster.sh +202 -0
  495. package/skills/global_config/editable-design/scripts/trace.sh +159 -0
  496. package/skills/global_config/editable-design/scripts/verify-replay.mjs +97 -0
  497. package/skills/global_config/editable-design/scripts/verify.mjs +782 -0
  498. package/skills/global_config/editable-design/scripts/wire-editor.mjs +104 -0
  499. package/skills/global_config/editable-design/tests/fixtures/small-explode/index.html +86 -0
  500. package/skills/global_config/mcsc/SKILL.md +60 -0
  501. package/skills/global_config/plan-canvas/SKILL.md +8 -0
  502. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +31 -6
  503. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +4 -2
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@hybridlabor-api/mcsc",
3
+ "version": "0.1.0",
4
+ "description": "Multi-CLI Subagent Configurator (MCSC) MCP Server for local subagent delegation",
5
+ "type": "module",
6
+ "main": "server.js",
7
+ "bin": {
8
+ "mcsc": "./packages/core/bin/mcsc.js"
9
+ },
10
+ "dependencies": {
11
+ "@modelcontextprotocol/sdk": "^1.30.0",
12
+ "js-yaml": "^5.4.1"
13
+ }
14
+ }
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+
3
+ // NOTE: an earlier draft of this file used a `node:module` loader hook
4
+ // (`register()`) to monkey-patch detect/inventory.js and detect/cache.js at
5
+ // import time instead of fixing their actual bugs (a dead `CliHealth` runtime
6
+ // import, and wrong-module imports for `homedir`/`performance`). That hack
7
+ // is gone — those files are fixed directly (they're our own code, not a
8
+ // vendor CLI wrapper, so "wrap don't patch" §7 doesn't apply here).
9
+
10
+ async function run() {
11
+ const fs = (await import('fs')).default;
12
+ const path = (await import('path')).default;
13
+ const os = (await import('os')).default;
14
+ const { fileURLToPath } = await import('url');
15
+
16
+ const { loadRulebook } = await import('../src/rulebook/load.js');
17
+ const { decide } = await import('../src/rulebook/resolve.js');
18
+ const { runInventory } = await import('../src/detect/inventory.js');
19
+ const { getCached, setCached } = await import('../src/detect/cache.js');
20
+ const { buildOfferTable } = await import('../src/capabilities/buildOfferTable.js');
21
+
22
+ const { delegate: agyDelegate } = await import('../src/adapters/agy.js');
23
+ const { delegate: opencodeDelegate } = await import('../src/adapters/opencode.js');
24
+ const { delegate: nativeDelegate } = await import('../src/adapters/native.js');
25
+
26
+ const __filename = fileURLToPath(import.meta.url);
27
+ const __dirname = path.dirname(__filename);
28
+
29
+ const CLI_IDS = ['agy', 'opencode', 'codex', 'native'];
30
+ const TTL_MS = 24 * 60 * 60 * 1000;
31
+
32
+ async function getInventory() {
33
+ const cliHealthMap = new Map();
34
+ const missingCliIds = [];
35
+
36
+ for (const cliId of CLI_IDS) {
37
+ const cached = await getCached(cliId);
38
+ if (cached) {
39
+ cliHealthMap.set(cliId, cached);
40
+ } else {
41
+ missingCliIds.push(cliId);
42
+ }
43
+ }
44
+
45
+ if (missingCliIds.length > 0) {
46
+ const newHealthMap = await runInventory({ cliIds: missingCliIds, maxAgeMs: TTL_MS });
47
+ for (const [cliId, health] of newHealthMap.entries()) {
48
+ cliHealthMap.set(cliId, health);
49
+ await setCached(cliId, health, TTL_MS);
50
+ }
51
+ }
52
+
53
+ return cliHealthMap;
54
+ }
55
+
56
+ const argv = process.argv;
57
+ const subcommand = argv[2];
58
+
59
+ let taskType = null;
60
+ let promptText = null;
61
+ let isJson = false;
62
+
63
+ for (let i = 3; i < argv.length; i++) {
64
+ if (argv[i] === '--task-type' && i + 1 < argv.length) {
65
+ taskType = argv[++i];
66
+ } else if (argv[i] === '--prompt' && i + 1 < argv.length) {
67
+ promptText = argv[++i];
68
+ } else if (argv[i] === '--json') {
69
+ isJson = true;
70
+ }
71
+ }
72
+
73
+ if (subcommand === 'detect') {
74
+ const inventoryMap = await getInventory();
75
+ const inventoryObj = Object.fromEntries(inventoryMap);
76
+ if (isJson) {
77
+ console.log(JSON.stringify(inventoryObj, null, 2));
78
+ } else {
79
+ console.log(inventoryObj);
80
+ }
81
+ return;
82
+ }
83
+
84
+ if (subcommand === 'route' || subcommand === 'exec') {
85
+ const inventoryMap = await getInventory();
86
+
87
+ const defaultsPath = path.resolve(__dirname, '../rulebook.default.yaml');
88
+ const overridePath = path.resolve(os.homedir(), '.config/mcsc/rulebook.yaml');
89
+
90
+ let rules = [];
91
+ try {
92
+ rules = await loadRulebook({
93
+ defaultsPath,
94
+ overridePath: fs.existsSync(overridePath) ? overridePath : undefined
95
+ });
96
+ } catch (e) {
97
+ console.error('Failed to load rulebook:', e);
98
+ process.exit(1);
99
+ }
100
+
101
+ const now = Date.now();
102
+ const offerTable = await buildOfferTable(rules, inventoryMap, now);
103
+
104
+ const inventorySnapshot = { cliHealth: Object.fromEntries(inventoryMap) };
105
+ const taskDescriptor = { task_type: taskType };
106
+
107
+ const decision = decide(taskDescriptor, rules, inventorySnapshot, offerTable, now);
108
+
109
+ if (subcommand === 'route') {
110
+ if (isJson) {
111
+ console.log(JSON.stringify(decision, null, 2));
112
+ } else {
113
+ console.log(decision);
114
+ }
115
+ if (decision.kind === 'refuse') {
116
+ process.exit(1);
117
+ }
118
+ return;
119
+ }
120
+
121
+ if (subcommand === 'exec') {
122
+ if (decision.kind === 'refuse') {
123
+ console.error(JSON.stringify(decision, null, 2));
124
+ process.exit(1);
125
+ }
126
+
127
+ if (decision.kind === 'route') {
128
+ const delegateReq = {
129
+ taskType,
130
+ prompt: promptText,
131
+ model: decision.offer.modelId,
132
+ cwd: process.cwd()
133
+ };
134
+
135
+ let result;
136
+ try {
137
+ if (decision.cliId === 'agy') {
138
+ result = await agyDelegate(delegateReq);
139
+ } else if (decision.cliId === 'opencode') {
140
+ result = await opencodeDelegate(delegateReq);
141
+ } else if (decision.cliId === 'native') {
142
+ result = await nativeDelegate(delegateReq);
143
+ } else {
144
+ console.error('No adapter for CLI:', decision.cliId);
145
+ process.exit(1);
146
+ }
147
+
148
+ console.log(result.output);
149
+ process.exit(result.exit);
150
+ } catch (e) {
151
+ console.error(e);
152
+ process.exit(1);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ run().catch(e => {
160
+ console.error(e);
161
+ process.exit(1);
162
+ });
@@ -0,0 +1,49 @@
1
+ version: 1
2
+ # Model ids are the SHORT ids agy reports in `agy models` (left column) --
3
+ # e.g. "gemini-3.8-flash-medium", not "Gemini 3.8 Flash (Medium)" and not
4
+ # "gemini-flash-3.8". Verify with `agy models` after any agy upgrade; the
5
+ # ids carry both the version AND the effort suffix (-low/-medium/-high),
6
+ # so dropping the suffix does not resolve.
7
+ rules:
8
+ # Media + fast/mechanical coding -> newest Flash. Cheap, quick, and the
9
+ # tier that actually has media capability.
10
+ - id: media-generation
11
+ match: {task_type: [image-gen, video-gen, media]}
12
+ candidates:
13
+ - {cli: agy, model: "gemini-3.8-flash-medium"}
14
+ - {cli: native}
15
+
16
+ - id: fast-coding
17
+ match: {task_type: [boilerplate, quick-check, scaffold, mechanical-edit]}
18
+ candidates:
19
+ - {cli: agy, model: "gemini-3.8-flash-medium"}
20
+ - {cli: opencode, model_select: {provider: opencode, prefer: [free]}}
21
+ - {cli: native}
22
+
23
+ # Research reads a lot and distils -- same family, more effort headroom.
24
+ - id: deep-research
25
+ match: {task_type: [research, web-search, docs-survey]}
26
+ candidates:
27
+ - {cli: agy, model: "gemini-3.8-flash-high"}
28
+ - {cli: opencode, model_select: {provider: opencode, prefer: [free], match: "*gemini*"}}
29
+ - {cli: native}
30
+
31
+ # Review needs real judgment to be adversarial rather than agreeable --
32
+ # Sonnet, not a Flash tier.
33
+ - id: review
34
+ match: {task_type: [review, code-review, adversarial-review]}
35
+ candidates:
36
+ - {cli: agy, model: "claude-sonnet-4-6"}
37
+ - {cli: native}
38
+
39
+ # Architecture/refactor planning: mistakes here propagate to every
40
+ # downstream worker, so this is the one place worth the top tier.
41
+ - id: complex-code
42
+ match: {task_type: [architecture, refactor-plan], min_complexity: high}
43
+ candidates:
44
+ - {cli: agy, model: "claude-opus-4-6-thinking"}
45
+ - {cli: agy, model: "claude-sonnet-4-6"}
46
+ - {cli: codex, model: "gpt-5-codex"}
47
+ - {cli: native}
48
+
49
+ defaults: {fallback: native, on_unresolvable: native}
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Rulebook Schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "version": {
7
+ "type": "integer",
8
+ "const": 1
9
+ },
10
+ "rules": {
11
+ "type": "array",
12
+ "minItems": 1,
13
+ "items": {
14
+ "type": "object",
15
+ "properties": {
16
+ "id": {
17
+ "type": "string"
18
+ },
19
+ "match": {
20
+ "type": "object"
21
+ },
22
+ "candidates": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "items": {
26
+ "type": "object",
27
+ "properties": {
28
+ "cli": {
29
+ "type": "string",
30
+ "enum": ["agy", "opencode", "codex", "native"]
31
+ }
32
+ },
33
+ "required": ["cli"]
34
+ }
35
+ }
36
+ },
37
+ "required": ["id", "match", "candidates"]
38
+ }
39
+ },
40
+ "defaults": {
41
+ "type": "object",
42
+ "properties": {
43
+ "fallback": {
44
+ "type": "string",
45
+ "enum": ["native"]
46
+ },
47
+ "on_unresolvable": {
48
+ "type": "string",
49
+ "enum": ["native"]
50
+ }
51
+ },
52
+ "required": ["fallback", "on_unresolvable"]
53
+ }
54
+ },
55
+ "required": ["version", "rules", "defaults"]
56
+ }
@@ -0,0 +1,107 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { emitTrail } from '../trail.js';
4
+ const execFileAsync = promisify(execFile);
5
+
6
+ /**
7
+ * CliAdapter shelling out DIRECTLY to the vendor 'agy' binary.
8
+ *
9
+ * @param {import('../types.js').DelegationRequest} req
10
+ * @returns {Promise<{ exit: number; output: string; attestation: { kind: 'confirmed' | 'unavailable'; modelId?: string; sessionRef?: string } }>}
11
+ */
12
+ export async function delegate(req) {
13
+ const trailEvent = {
14
+ session_id: `mcsc-agy-${process.pid}-${Date.now()}`,
15
+ cwd: req.cwd || process.cwd(),
16
+ agent:
17
+ typeof req.label === 'string' && req.label.length > 0
18
+ ? `agy:${req.label}`
19
+ : 'agy',
20
+ };
21
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionStart' });
22
+ try {
23
+ const args = [];
24
+ if (req.model) args.push('--model', req.model);
25
+ args.push(
26
+ '--print-timeout',
27
+ '15m',
28
+ '--output-format',
29
+ 'json',
30
+ '--project',
31
+ 'mcsc-delegate',
32
+ '--print',
33
+ req.prompt
34
+ );
35
+
36
+ const env = { ...process.env, MCSC_CALLER: 'agy' };
37
+
38
+ const run = execFileAsync(
39
+ 'agy',
40
+ args,
41
+ {
42
+ cwd: req.cwd,
43
+ encoding: 'utf-8',
44
+ maxBuffer: 1024 * 1024 * 50,
45
+ env,
46
+ signal: req.signal
47
+ }
48
+ );
49
+ // An open stdin pipe makes the CLI wait for input forever.
50
+ run.child.stdin.end();
51
+ const { stdout, stderr } = await run;
52
+
53
+ const raw = stdout || stderr;
54
+ let parsed;
55
+ try {
56
+ parsed = JSON.parse(raw);
57
+ } catch {
58
+ // If we can't parse JSON, we cannot attest the model.
59
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
60
+ return {
61
+ exit: 0,
62
+ output: raw.trim(),
63
+ attestation: { kind: 'unavailable' },
64
+ };
65
+ }
66
+
67
+ if (parsed && typeof parsed === 'object') {
68
+ const modelId = parsed.modelId || parsed.model || parsed.cli_model || parsed.id;
69
+ const sessionRef = parsed.conversation_id || parsed.session || parsed.sessionId || parsed.id;
70
+
71
+ if (modelId) {
72
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
73
+ return {
74
+ exit: 0,
75
+ output: raw.trim(),
76
+ attestation: {
77
+ kind: 'confirmed',
78
+ modelId: String(modelId),
79
+ sessionRef: String(sessionRef || ''),
80
+ },
81
+ };
82
+ }
83
+ }
84
+
85
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
86
+ return {
87
+ exit: 0,
88
+ output: raw.trim(),
89
+ attestation: { kind: 'unavailable' },
90
+ };
91
+ } catch (e) {
92
+ if (e.name === 'AbortError') {
93
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
94
+ return {
95
+ exit: 1,
96
+ output: 'Cancelled by orchestrator',
97
+ attestation: { kind: 'unavailable' }
98
+ };
99
+ }
100
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
101
+ return {
102
+ exit: 1,
103
+ output: (e.stderr || e.message || '').trim(),
104
+ attestation: { kind: 'unavailable' },
105
+ };
106
+ }
107
+ }
@@ -0,0 +1,179 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { emitTrail } from '../trail.js';
3
+
4
+ const MAX_OUTPUT = 1024 * 1024 * 50; // 50MB, mirrors the old execFile maxBuffer
5
+
6
+ /**
7
+ * Adapter für die Codex CLI.
8
+ * Implementiert die DelegationRequest Schnittstelle.
9
+ *
10
+ * Uses `codex exec --json` (confirmed present: `codex exec --help` lists
11
+ * `--json Print events to stdout as JSONL`) instead of a blind exec, so a
12
+ * delegated Codex run gets the same mid-run tool-call visibility on
13
+ * agenttrail's board as the opencode adapter already has. The envelope shape
14
+ * below (`thread.started` / `turn.started` / `item.completed` / `turn.failed`,
15
+ * `item.completed` items carrying `{id, type, ...}`) was confirmed live
16
+ * against the installed CLI (codex-cli 0.154.0). The exact `item.type` string
17
+ * for a real tool call (e.g. shell exec, patch apply, the plan/todo tool)
18
+ * was NOT confirmed live — every probe run in this environment hit a 401
19
+ * auth error before Codex executed anything. `buildToolInput` below is
20
+ * therefore deliberately generic/defensive rather than keyed to guessed
21
+ * field names, and Codex's plan/todo tool is not mapped into a
22
+ * `PostToolUse` with `tool_name: 'update_plan'` here — doing that from
23
+ * unverified field names would silently ship a wrong mapping. Re-verify
24
+ * with authenticated Codex and tighten this once the real item shape for a
25
+ * tool call (and for its plan/todo tool specifically) is known.
26
+ *
27
+ * @param {import('./types.js').DelegationRequest} req
28
+ * @returns {Promise<{ exit: number; output: string }>}
29
+ */
30
+ export async function delegate(req) {
31
+ const cwd = req.cwd || process.cwd();
32
+ const trailEvent = {
33
+ session_id: `mcsc-codex-${process.pid}-${Date.now()}`,
34
+ cwd,
35
+ agent:
36
+ typeof req.label === 'string' && req.label.length > 0
37
+ ? `codex:${req.label}`
38
+ : 'codex',
39
+ };
40
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionStart' });
41
+
42
+ const env = { ...process.env, MCSC_CALLER: 'codex' };
43
+ const args = ['exec', '--json', '--skip-git-repo-check'];
44
+ if (req.model) args.push('-m', req.model);
45
+ args.push(req.prompt);
46
+
47
+ const child = spawn('codex', args, {
48
+ cwd,
49
+ env,
50
+ stdio: ['ignore', 'pipe', 'pipe'],
51
+ });
52
+
53
+ return new Promise((resolve) => {
54
+ let lastAgentMessage = '';
55
+ let stdoutBuf = '';
56
+ let stderrBuf = '';
57
+ let stdoutBytes = 0;
58
+ let stderrBytes = 0;
59
+ let overflowed = false;
60
+ let aborted = false;
61
+ let settled = false;
62
+ let turnFailed = false;
63
+
64
+ const onAbort = () => {
65
+ aborted = true;
66
+ child.kill('SIGKILL');
67
+ };
68
+ if (req.signal) {
69
+ if (req.signal.aborted) onAbort();
70
+ else req.signal.addEventListener('abort', onAbort, { once: true });
71
+ }
72
+
73
+ const finalize = (result) => {
74
+ if (settled) return;
75
+ settled = true;
76
+ if (req.signal) req.signal.removeEventListener('abort', onAbort);
77
+ emitTrail({ ...trailEvent, hook_event_name: 'SessionEnd' });
78
+ resolve(result);
79
+ };
80
+
81
+ // Defensive/generic: no confirmed field names for a real tool-call item
82
+ // (see the doc comment above), so this only forwards what's plausibly
83
+ // present rather than asserting a specific Codex item shape.
84
+ const buildToolInput = (item) => {
85
+ const toolInput = {};
86
+ if (!item || typeof item !== 'object') return toolInput;
87
+ const rawCommand = item.command || item.cmd;
88
+ if (typeof rawCommand === 'string' && rawCommand.length > 0) toolInput.command = rawCommand;
89
+ else if (Array.isArray(rawCommand)) toolInput.command = rawCommand.join(' ');
90
+ const rawPath = item.file_path || item.path;
91
+ if (typeof rawPath === 'string' && rawPath.length > 0) toolInput.file_path = rawPath;
92
+ return toolInput;
93
+ };
94
+
95
+ const handleLine = (line) => {
96
+ if (!line) return;
97
+ let evt;
98
+ try {
99
+ evt = JSON.parse(line);
100
+ } catch {
101
+ return; // Not valid JSON — ignore.
102
+ }
103
+ if (!evt || typeof evt !== 'object') return;
104
+
105
+ if (evt.type === 'turn.completed' && typeof evt.last_agent_message === 'string') {
106
+ lastAgentMessage = evt.last_agent_message;
107
+ return;
108
+ }
109
+ if (evt.type === 'turn.failed') {
110
+ turnFailed = true;
111
+ return;
112
+ }
113
+ if (evt.type === 'item.completed' && evt.item && typeof evt.item === 'object') {
114
+ const itemType = evt.item.type;
115
+ // Informational item types carry no tool call — skip them so the
116
+ // board doesn't show a fake "tool" for plain error/text output.
117
+ if (itemType === 'error' || itemType === 'reasoning' || itemType === 'agent_message') return;
118
+ emitTrail({
119
+ ...trailEvent,
120
+ hook_event_name: 'PostToolUse',
121
+ tool_name: String(itemType || 'codex_item')
122
+ .replace(/(^|_)([a-z])/g, (_, sep, c) => c.toUpperCase()),
123
+ tool_input: buildToolInput(evt.item),
124
+ });
125
+ }
126
+ };
127
+
128
+ child.stdout.setEncoding('utf8');
129
+ child.stdout.on('data', (chunk) => {
130
+ stdoutBytes += Buffer.byteLength(chunk);
131
+ if (stdoutBytes > MAX_OUTPUT) {
132
+ if (!overflowed) {
133
+ overflowed = true;
134
+ child.kill('SIGKILL');
135
+ }
136
+ return;
137
+ }
138
+ stdoutBuf += chunk;
139
+ let idx;
140
+ while ((idx = stdoutBuf.indexOf('\n')) !== -1) {
141
+ const line = stdoutBuf.slice(0, idx).trim();
142
+ stdoutBuf = stdoutBuf.slice(idx + 1);
143
+ handleLine(line);
144
+ }
145
+ });
146
+
147
+ child.stderr.setEncoding('utf8');
148
+ child.stderr.on('data', (chunk) => {
149
+ stderrBytes += Buffer.byteLength(chunk);
150
+ if (stderrBytes > MAX_OUTPUT) return; // cap stderr, never fail on it
151
+ stderrBuf += chunk;
152
+ });
153
+
154
+ child.on('error', (err) => {
155
+ finalize({ exit: 1, output: (stderrBuf || err.message || '').trim() });
156
+ });
157
+
158
+ child.on('close', (code) => {
159
+ const rest = stdoutBuf.trim();
160
+ if (rest) handleLine(rest); // flush a trailing line without newline
161
+ if (aborted) {
162
+ finalize({ exit: 1, output: 'Cancelled by orchestrator' });
163
+ return;
164
+ }
165
+ if (overflowed) {
166
+ finalize({ exit: 1, output: 'stdout maxBuffer length exceeded' });
167
+ return;
168
+ }
169
+ if (code === 0 && !turnFailed) {
170
+ finalize({ exit: 0, output: lastAgentMessage || stderrBuf });
171
+ return;
172
+ }
173
+ finalize({ exit: 1, output: (lastAgentMessage || stderrBuf || `codex exited with code ${code}`).trim() });
174
+ });
175
+
176
+ // An open stdin pipe makes the CLI wait for input forever.
177
+ child.stdin.end();
178
+ });
179
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * CliAdapter for 'native'.
3
+ *
4
+ * Native delegation happens at the orchestrator level (Agent tool),
5
+ * not by shelling out. This adapter is a no-op that signals
6
+ * unattested delegation — the orchestrator should handle the
7
+ * native Claude Code subagent lifecycle itself.
8
+ *
9
+ * @param {import('../adapters/types.js').DelegationRequest} req
10
+ * @returns {Promise<{ exit: number; output: string; attestation: { kind: 'unavailable'; } }>}
11
+ */
12
+ export async function delegate(req) {
13
+ throw new Error("Task requires native handling by the current orchestrator. Do not use delegate tools for this.");
14
+ }