@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
@@ -92,6 +92,42 @@ if (!fs && typeof process !== 'undefined') {
92
92
  } catch {}
93
93
  }
94
94
 
95
+ let archifyContractPromise;
96
+ async function loadArchifyContract() {
97
+ if (!archifyContractPromise) {
98
+ archifyContractPromise = (async () => {
99
+ if (typeof process === 'undefined') return null;
100
+ try {
101
+ return await import(new URL('../../lib/aos-archify-contract.mjs', import.meta.url).href);
102
+ } catch {
103
+ return null;
104
+ }
105
+ })();
106
+ }
107
+ return archifyContractPromise;
108
+ }
109
+
110
+ function readStdinSync() {
111
+ const chunks = [];
112
+ const buffer = Buffer.alloc(64 * 1024);
113
+ const sleeper = new Int32Array(new SharedArrayBuffer(4));
114
+ for (;;) {
115
+ let bytes;
116
+ try {
117
+ bytes = fs.readSync(0, buffer, 0, buffer.length, null);
118
+ } catch (error) {
119
+ if (error?.code === 'EAGAIN' || error?.code === 'EWOULDBLOCK') {
120
+ Atomics.wait(sleeper, 0, 0, 2);
121
+ continue;
122
+ }
123
+ throw error;
124
+ }
125
+ if (bytes === 0) break;
126
+ chunks.push(Buffer.from(buffer.subarray(0, bytes)));
127
+ }
128
+ return Buffer.concat(chunks).toString('utf8');
129
+ }
130
+
95
131
  let inputGoal = null;
96
132
  let inputSkills = [];
97
133
  let isHookInvocation = false;
@@ -100,7 +136,7 @@ let isHookInvocation = false;
100
136
  if (typeof process !== 'undefined' && process.stdin && !process.stdin.isTTY && fs) {
101
137
  try {
102
138
  let stdinRaw = '';
103
- try { stdinRaw = fs.readFileSync(0, 'utf8').trim(); } catch {}
139
+ try { stdinRaw = readStdinSync().trim(); } catch {}
104
140
  if (stdinRaw) {
105
141
  isHookInvocation = true;
106
142
  let payload = null;
@@ -325,12 +361,54 @@ if (typeof globalThis.agent === 'undefined') {
325
361
  return { phase: 'escalated' };
326
362
  }
327
363
 
364
+ if (label.startsWith('archify-verify')) {
365
+ const failVerify = (error) => ({ validateOk: false, deliverOk: false, checksPassed: 0, checkCount: 9, error: String(error).slice(0, 400) });
366
+ if (!fs || !path || !child_process) return failVerify('archify verify has no process runtime in this environment');
367
+ const contract = await loadArchifyContract();
368
+ if (!contract || typeof contract.runArchifyBoundary !== 'function') return failVerify('archify contract unavailable');
369
+ const repoRoot = process.cwd();
370
+ const spec = contract.ARCHITECTURE_SPEC_PATH;
371
+ const html = contract.ARCHITECTURE_HTML_PATH;
372
+ const localBin = typeof contract.resolveArchifyBin === 'function' ? contract.resolveArchifyBin(repoRoot) : null;
373
+ const run = (args, options) => child_process.spawnSync(
374
+ localBin ? process.execPath : 'aos-archify',
375
+ [...(localBin ? [localBin] : []), ...args],
376
+ {
377
+ cwd: options.cwd,
378
+ encoding: 'utf8',
379
+ timeout: options.timeoutMs,
380
+ maxBuffer: options.maxBuffer,
381
+ shell: false,
382
+ }
383
+ );
384
+ try {
385
+ const result = await contract.runArchifyBoundary({
386
+ bin: localBin,
387
+ cwd: repoRoot,
388
+ specPath: spec,
389
+ htmlPath: html,
390
+ run,
391
+ });
392
+ if (!result || result.ok !== true) return failVerify((result && result.error) || 'archify boundary failed');
393
+ return {
394
+ validateOk: result.validate?.status === 0,
395
+ deliverOk: result.deliver?.status === 0,
396
+ checksPassed: result.receipt?.checksPassed ?? 0,
397
+ checkCount: result.receipt?.checkCount ?? contract.ARCHITECTURE_CHECK_COUNT ?? 9,
398
+ error: '',
399
+ };
400
+ } catch (error) {
401
+ return failVerify((error && error.message) || 'archify boundary executor failed');
402
+ }
403
+ }
404
+
328
405
  // LLM Agent Steps: runner adapter / graceful execution
329
406
  if (child_process) {
330
407
  try {
331
408
  const agyRes = child_process.spawnSync('agy', ['--print', prompt, '--output-format', 'json', '--print-timeout', '30s'], {
332
409
  encoding: 'utf8',
333
410
  timeout: 35000,
411
+ shell: false,
334
412
  });
335
413
  if (agyRes.status === 0 && agyRes.stdout) {
336
414
  const jsonMatch = agyRes.stdout.match(/\{[\s\S]*\}/);
@@ -550,6 +628,38 @@ async function mergeStateD() {
550
628
  );
551
629
  }
552
630
 
631
+ async function verifyArchifyArtifacts() {
632
+ return await agent(
633
+ 'You are the dedicated /startcycle-graph archify-verify step -- a deterministic check, not a reasoning task. ' +
634
+ 'Working directory is the repository root. Run exactly these two commands in this order, ' +
635
+ 'each as an argument array with no shell and no string interpolation: ' +
636
+ 'first ["validate", "architecture", "production_artifacts/00_architecture.json", "--quality", "showcase", "--json"], ' +
637
+ 'then ["deliver", "architecture", "production_artifacts/00_architecture.json", "production_artifacts/00_architecture.html", "--quality", "showcase", "--json"], ' +
638
+ 'both via the node archify binary at skills/global_config/archify/bin/archify.mjs with a 120 second timeout each. ' +
639
+ 'Only run deliver when validate exits 0. Read at most 65536 bytes of each command output. ' +
640
+ 'Deliver passes only on a showcase receipt with 9 of 9 checks and 0 errors plus sha256 evidence for specification and artifact. ' +
641
+ 'On any non-zero exit, oversized output, or invalid receipt, report failure and preserve the previous HTML artifact untouched -- ' +
642
+ 'never invent success and never write state.artifacts.architecture yourself. ' +
643
+ 'Keep any logged output bounded to 400 characters with home directories and long hashes redacted.\n\n' +
644
+ 'Return only: { "validateOk": boolean, "deliverOk": boolean, "checksPassed": number, "checkCount": number, "error": string }.',
645
+ {
646
+ label: `archify-verify-${iteration}`,
647
+ model: 'haiku',
648
+ schema: {
649
+ type: 'object',
650
+ required: ['validateOk', 'deliverOk', 'checksPassed', 'checkCount', 'error'],
651
+ properties: {
652
+ validateOk: { type: 'boolean' },
653
+ deliverOk: { type: 'boolean' },
654
+ checksPassed: { type: 'number' },
655
+ checkCount: { type: 'number' },
656
+ error: { type: 'string' },
657
+ },
658
+ },
659
+ }
660
+ );
661
+ }
662
+
553
663
  // ---------------------------------------------------------------------
554
664
  // Load the node registry. First thing this run does, per comment block
555
665
  // item #4 -- everything below is derived from this, nothing is hardcoded.
@@ -685,20 +795,22 @@ if (mandatorySkillNames.length > 0) {
685
795
  'this workflow may be driven from a harness whose directory is not ~/.claude. ' +
686
796
  'If this project has its own skills/ directory, also accept skills/<name>/SKILL.md or skills/<container>/<name>/SKILL.md. ' +
687
797
  'This is a read-only lookup, not a reasoning task -- do not invent a path that does not exist, and never report a close match as `found`.\n\n' +
688
- 'For any name that does NOT resolve, list up to five installed skills whose directory names are plausible near-misses ' +
798
+ 'For any name that does NOT resolve, read lib/ecc-store-index.json and list exact available store item names in `store_matches`. ' +
799
+ 'Also list up to five installed skills whose directory names are plausible near-misses ' +
689
800
  '(substring, obvious typo, or the same words in another order) in `suggestions`. Read the real directory listing to do this -- ' +
690
801
  'suggest only names that actually exist on disk. `--skill=` requires an exact directory name, and a user who mistyped one ' +
691
802
  'has no way to discover the right spelling from an error that only says "not found".\n\n' +
692
- 'Return only: { "found": string[], "missing": string[], "suggestions": string[] }.',
803
+ 'Return only: { "found": string[], "missing": string[], "store_matches": string[], "suggestions": string[] }.',
693
804
  {
694
805
  label: 'validate-mandatory-skills',
695
806
  model: 'haiku',
696
807
  schema: {
697
808
  type: 'object',
698
- required: ['found', 'missing'],
809
+ required: ['found', 'missing', 'store_matches'],
699
810
  properties: {
700
811
  found: { type: 'array', items: { type: 'string' } },
701
812
  missing: { type: 'array', items: { type: 'string' } },
813
+ store_matches: { type: 'array', items: { type: 'string' } },
702
814
  suggestions: { type: 'array', items: { type: 'string' } },
703
815
  },
704
816
  },
@@ -706,15 +818,21 @@ if (mandatorySkillNames.length > 0) {
706
818
  );
707
819
  const missing = skillCheckResult?.missing ?? [];
708
820
  if (missing.length > 0) {
821
+ const storeMatches = skillCheckResult?.store_matches ?? [];
709
822
  const near = skillCheckResult?.suggestions ?? [];
710
- return await escalate(
711
- `--skill named skill(s) that could not be found on this machine: ${missing.join(', ')}. ` +
712
- (near.length
713
- ? `Did you mean: ${near.join(', ')}? `
714
- : 'No installed skill has a similar name. ') +
715
- '--skill= takes the exact skill directory name; run /ask-tim to find the one you want. ' +
716
- 'Refusing to silently proceed without a mandated skill.'
717
- );
823
+ let message = `--skill named skill(s) that could not be found on this machine: ${missing.join(', ')}. `;
824
+ if (storeMatches.length > 0) {
825
+ message += `Found in the AOS / ECC Store: ${storeMatches.join(', ')}. ` +
826
+ `Run: aos store install ${storeMatches.join(' ')} ` +
827
+ 'Then re-run your startcycle command. ';
828
+ } else if (near.length > 0) {
829
+ message += `Did you mean: ${near.join(', ')}? `;
830
+ } else {
831
+ message += 'No installed or store skill has a similar name. ';
832
+ }
833
+ message += '--skill= takes the exact skill directory name; run /ask-tim to find the one you want. ' +
834
+ 'Refusing to silently proceed without a mandated skill.';
835
+ return await escalate(message);
718
836
  }
719
837
  mandatorySkills = skillCheckResult?.found ?? mandatorySkillNames;
720
838
  }
@@ -738,9 +856,14 @@ while (!approved) {
738
856
  : '') +
739
857
  `Turn this goal into a system plan with an explicit capability map (module boundaries, ` +
740
858
  `dependency direction, build order). Write it to production_artifacts/00_execution_plan.md. ` +
741
- `Set state.goal, state.phase = "plan", state.artifacts.plan to that path, and state.mandatory_skills to ${JSON.stringify(mandatorySkills)}. ` +
859
+ `Author the architecture as Archify architecture JSON to production_artifacts/00_architecture.json, ` +
860
+ `run aos-archify validate architecture production_artifacts/00_architecture.json --quality showcase --json during repair and ` +
861
+ `aos-archify deliver architecture production_artifacts/00_architecture.json production_artifacts/00_architecture.html --quality showcase --json once for final acceptance, ` +
862
+ `link it from the relevant plan component with a url: production_artifacts/00_architecture.html line, ` +
863
+ `and set state.goal, state.phase = "plan", state.artifacts.plan to the plan path, state.artifacts.architecture to production_artifacts/00_architecture.html only on a passing showcase receipt (9/9 checks, 0 errors), and state.mandatory_skills to ${JSON.stringify(mandatorySkills)}. ` +
864
+ `On a failed validate/deliver preserve the previous HTML and report deliverOk false instead of proceeding silently. ` +
742
865
  `Decide whether the goal needs the Media_EventTech build node (TouchDesigner/show-control/3D/media work) -- most goals don't.\n\n` +
743
- `Return only: { "planPath": string, "needsMedia": boolean }.`,
866
+ `Return only: { "planPath": string, "needsMedia": boolean, "architectureSpec": string, "architectureHtml": string, "deliverOk": boolean }.`,
744
867
  {
745
868
  label: `architect-${iteration}`,
746
869
  agentType: architectNode.agentType,
@@ -748,22 +871,78 @@ while (!approved) {
748
871
  schema: {
749
872
  type: 'object',
750
873
  required: ['planPath', 'needsMedia'],
751
- properties: { planPath: { type: 'string' }, needsMedia: { type: 'boolean' } },
874
+ properties: {
875
+ planPath: { type: 'string' },
876
+ needsMedia: { type: 'boolean' },
877
+ architectureSpec: { type: 'string' },
878
+ architectureHtml: { type: 'string' },
879
+ deliverOk: { type: 'boolean' },
880
+ },
752
881
  },
753
882
  }
754
883
  );
755
884
 
756
885
  planPath = architectResult?.planPath;
757
886
  needsMedia = !!architectResult?.needsMedia;
887
+ const architectureSpec = architectResult?.architectureSpec || 'production_artifacts/00_architecture.json';
888
+ const architectureHtml = architectResult?.architectureHtml || 'production_artifacts/00_architecture.html';
889
+ const deliverOk = architectResult?.deliverOk !== false;
758
890
 
759
891
  if (!planPath) {
760
892
  return await escalate('Architect did not return a plan path.');
761
893
  }
894
+ if (!deliverOk) {
895
+ iteration++;
896
+ if (iteration >= MAX_ITERATIONS) {
897
+ return await escalate(
898
+ 'Archify deliver reported failure at the Architect step; previous HTML preserved.',
899
+ { planPath }
900
+ );
901
+ }
902
+ lastRejectionReason = 'Archify deliver/validate failed; previous HTML preserved. Repair the spec and deliver again.';
903
+ continue;
904
+ }
905
+ if (architectureSpec !== 'production_artifacts/00_architecture.json' || architectureHtml !== 'production_artifacts/00_architecture.html') {
906
+ iteration++;
907
+ if (iteration >= MAX_ITERATIONS) {
908
+ return await escalate(
909
+ 'Archify boundary rejected untrusted artifact paths; previous HTML preserved.',
910
+ { planPath }
911
+ );
912
+ }
913
+ lastRejectionReason = 'Archify boundary rejected untrusted artifact paths; previous HTML preserved. Use production_artifacts/00_architecture.json and production_artifacts/00_architecture.html.';
914
+ continue;
915
+ }
916
+ const boundaryResult = await verifyArchifyArtifacts();
917
+ if (!boundaryResult || boundaryResult.validateOk !== true || boundaryResult.deliverOk !== true) {
918
+ iteration++;
919
+ const boundaryError = typeof boundaryResult?.error === 'string' && boundaryResult.error
920
+ ? boundaryResult.error.slice(0, 400)
921
+ : 'archify validate/deliver failed';
922
+ if (iteration >= MAX_ITERATIONS) {
923
+ return await escalate(
924
+ `Archify boundary verification failed; previous HTML preserved: ${boundaryError}`,
925
+ { planPath }
926
+ );
927
+ }
928
+ lastRejectionReason = `Archify boundary verification failed; previous HTML preserved: ${boundaryError}. Repair the spec and deliver again.`;
929
+ continue;
930
+ }
931
+ try {
932
+ if (fs && fs.existsSync && fs.existsSync(architectureHtml) && child_process) {
933
+ const canvas = child_process.spawn('aos-plan-canvas', ['open', architectureHtml, '--no-open'], { cwd: process.cwd(), timeout: 15000, stdio: 'ignore', shell: false, detached: true });
934
+ if (canvas && typeof canvas.on === 'function') canvas.on('error', () => {});
935
+ if (canvas && typeof canvas.unref === 'function') canvas.unref();
936
+ }
937
+ } catch {}
762
938
 
763
939
  const techLeadResult = await agent(
764
940
  `You are acting as the ${techleadNode.label} agent (${techleadNode.personaFile}). ${dispatchNote(techleadNode)}${skillsNote(techleadNode)}\n\n` +
765
941
  `Read the plan at ${planPath}. Approve it only if it has an explicit capability map: ` +
766
942
  `module boundaries, dependency direction, and build order are all stated, not implicit. ` +
943
+ `Apply the architecture gate: reject unless ${architectureSpec} and ${architectureHtml} both exist, ` +
944
+ `the plan links the diagram with a url: ${architectureHtml} line, ` +
945
+ `and the deliver receipt is a passing showcase receipt (9/9 checks, 0 errors, failure preserves the previous HTML). ` +
767
946
  (mandatorySkills.length > 0
768
947
  ? `The user also required this run to use the following skill(s) via /startcycle-graph's --skill flag: ${mandatorySkills.join(', ')}. ` +
769
948
  `Reject the plan if it does not actually account for them — catching that here costs one planning round, ` +
@@ -818,6 +997,13 @@ if (BUILD_NODES.length === 0) {
818
997
  const NODE_ENUM = BUILD_NODES.map((n) => n.id);
819
998
  const NODE_NAMES = humanList(NODE_ENUM);
820
999
 
1000
+ // Live map (agenttrail skill, Trigger B): best-effort, never blocks or fails the run.
1001
+ // aos-trail exits on its own when a map for this repo is already running.
1002
+ try {
1003
+ child_process?.spawn('aos-trail', [process.cwd(), '--plan', 'production_artifacts/00_execution_plan.md', '--no-open'],
1004
+ { detached: true, stdio: 'ignore', shell: false }).on('error', () => {}).unref();
1005
+ } catch { /* no child_process in this runtime: run without the map */ }
1006
+
821
1007
  let findings = [];
822
1008
  let reviewedClean = false;
823
1009
  let nodesToRun = BUILD_NODES; // first pass: everyone applicable
@@ -983,7 +1169,7 @@ while (!reviewedClean) {
983
1169
  // state.d + merge treatment as the build/review loop above.
984
1170
  // ---------------------------------------------------------------------
985
1171
 
986
- const GATE_KEYS = ['lint', 'typecheck', 'tests', 'a11y', 'seo'];
1172
+ const GATE_KEYS = ['lint', 'typecheck', 'tests', 'a11y', 'seo', 'security'];
987
1173
  const GATE_VALUE_ENUM = ['pass', 'fail', 'skip'];
988
1174
  let allGatesPass = false;
989
1175
  let lastGate = null;
@@ -992,7 +1178,7 @@ while (!allGatesPass) {
992
1178
  const shipResult = await agent(
993
1179
  `You are acting as the ${shippingNode.label} agent (${shippingNode.personaFile}). ${dispatchNote(shippingNode)}${skillsNote(shippingNode)}\n\n` +
994
1180
  `Run the automated quality gate against the artifacts from the plan at ${planPath}: lint, typecheck, ` +
995
- `tests, a11y, seo. Use the repository's own commands (npm test / pytest / tsc --noEmit / etc -- detect ` +
1181
+ `tests, a11y, seo, security. Use the repository's own commands (npm test / pytest / tsc --noEmit / etc -- detect ` +
996
1182
  `which apply; use "skip" only for a check that genuinely doesn't apply to this repo, not for one you didn't run). ` +
997
1183
  `Write production_artifacts/04_release_report.md and update state.gate. ` +
998
1184
  `If every gate check is 'pass' or 'skip', you must also set state.phase = "ready_to_ship" in state.json.\n\n` +
@@ -5,8 +5,13 @@ model: opus
5
5
  ---
6
6
  Turns the user's goal (or `/bdbrainstorm` / `/grill-me` output) into a system plan. Reads existing architecture before proposing changes. Does not coordinate execution or invoke other agents — that is TechLead's job, decided by the dispatcher, not by Architect.
7
7
 
8
- **Primary skills:** bdbrainstorm, planning-with-files, concise-planning
8
+ **Primary skills:** bdbrainstorm, planning-with-files, concise-planning, archify
9
9
 
10
10
  **MCP servers used:** openwiki-skill, memb_mcp
11
11
 
12
- **Output artifact(s):** `production_artifacts/00_execution_plan.md`
12
+ **Output artifact(s):** `production_artifacts/00_execution_plan.md`, `production_artifacts/00_architecture.json`, `production_artifacts/00_architecture.html`
13
+
14
+ - The plan uses the agenttrail component convention (`## Name {#id}`, `needs:`, `files:`, tasks `- [ ] ... {#id}`).
15
+ - The Architect authors the architecture as Archify `architecture` JSON to `production_artifacts/00_architecture.json`, runs `aos-archify validate architecture <spec> --quality showcase --json` during repair and `aos-archify deliver architecture <spec> production_artifacts/00_architecture.html --quality showcase --json` once for final acceptance, and records `state.artifacts.architecture` only on a passing showcase receipt (9/9 checks, 0 errors). A failed validate/deliver preserves the previous HTML and escalates at the Architect→TechLead boundary.
16
+ - The relevant plan component links the delivered diagram with a `url: production_artifacts/00_architecture.html` line so the live map opens it from the card.
17
+ - Plan-canvas reviews that HTML too via the existing path as fixed argv `aos-plan-canvas open production_artifacts/00_architecture.html --no-open` with `shell: false` from the repo root (no new port, single open, no shell interpolation). A missing or unavailable canvas never invalidates the verified architecture; the `url:` line and the `aos-trail . --plan production_artifacts/00_execution_plan.md --no-open` map stay authoritative.
@@ -10,3 +10,5 @@ Reviews Architect's plan for a capability map (module boundaries, dependency dir
10
10
  **MCP servers used:** memb_mcp
11
11
 
12
12
  **Output artifact(s):** capability-map approval recorded in `state.json` (no separate markdown file — this is a gate, not a deliverable)
13
+
14
+ - TechLead rejects the plan when the architecture gate fails: `production_artifacts/00_architecture.json` and `production_artifacts/00_architecture.html` are missing, the `url: production_artifacts/00_architecture.html` link is absent from the plan, or the deliver receipt is not a passing showcase receipt (9/9 checks, 0 errors). A failed receipt preserves the previous HTML and sends the run back to Architect.
@@ -7,6 +7,8 @@
7
7
  * unless the user explicitly authorized it with the literal word "GO".
8
8
  * 2. chat.message: Ambient memory injection (memB). Injects relevant project & user
9
9
  * memories as ephemeral context from ~/.MemBDB/memb.db via node:sqlite.
10
+ * 3. tool.execute.before/after: Best-effort live-map telemetry for the AOS
11
+ * agenttrail daemon (PreToolUse/PostToolUse, fire-and-forget).
10
12
  *
11
13
  * Zero external runtime dependencies. Fails open on memory lookup, fails closed
12
14
  * on unguarded destructive actions.
@@ -35,6 +37,50 @@ function verifyGoAuthorized(lastPrompt) {
35
37
  return trimmed.toUpperCase() === 'GO';
36
38
  }
37
39
 
40
+ // Best-effort fire-and-forget telemetry for the AOS live map (agenttrail daemon).
41
+ // 300 ms timeout per request, all errors swallowed, never throws. Self-contained
42
+ // on purpose: the plugin must not import from mcps/.
43
+ const pendingArgs = new Map();
44
+
45
+ async function postTrail(event) {
46
+ const body = JSON.stringify(event);
47
+ const ports = process.env.AGENTTRAIL_PORT
48
+ ? [Number(process.env.AGENTTRAIL_PORT)]
49
+ : Array.from({ length: 15 }, (_, i) => 5330 + i);
50
+ await Promise.allSettled(
51
+ ports.map((port) =>
52
+ fetch(`http://127.0.0.1:${port}/hook`, {
53
+ method: 'POST',
54
+ headers: { 'content-type': 'application/json' },
55
+ body,
56
+ signal: AbortSignal.timeout(300),
57
+ }).catch(() => {})
58
+ )
59
+ );
60
+ }
61
+
62
+ function mapTrailToolName(name) {
63
+ const lower = (name || '').toLowerCase();
64
+ if (lower === 'edit') return 'Edit';
65
+ if (lower === 'write') return 'Write';
66
+ if (lower === 'bash') return 'Bash';
67
+ if (lower === 'read') return 'Read';
68
+ return lower ? lower.charAt(0).toUpperCase() + lower.slice(1) : '';
69
+ }
70
+
71
+ function mapTrailToolInput(args, directory) {
72
+ const mapped = {};
73
+ if (args && typeof args === 'object') {
74
+ if (typeof args.filePath === 'string' && args.filePath) {
75
+ mapped.file_path = path.resolve(directory, args.filePath);
76
+ }
77
+ if (typeof args.command === 'string') {
78
+ mapped.command = args.command;
79
+ }
80
+ }
81
+ return mapped;
82
+ }
83
+
38
84
  // Extract ambient memory from local memB database
39
85
  async function getMembContext(prompt, currentDir) {
40
86
  const home = os.homedir();
@@ -133,6 +179,20 @@ export default async function bdbAosPlugin(input) {
133
179
  },
134
180
 
135
181
  'tool.execute.before': async (toolInput, toolOutput) => {
182
+ // Live-map telemetry first; must never affect the go-gate logic below.
183
+ try {
184
+ const tool_name = mapTrailToolName(toolInput.tool);
185
+ const tool_input = mapTrailToolInput(toolOutput?.args, directory);
186
+ pendingArgs.set(toolInput.callID, tool_input);
187
+ postTrail({
188
+ hook_event_name: 'PreToolUse',
189
+ session_id: toolInput.sessionID,
190
+ cwd: directory,
191
+ agent: 'opencode',
192
+ tool_name,
193
+ tool_input,
194
+ });
195
+ } catch {}
136
196
  const toolName = (toolInput.tool || '').toLowerCase();
137
197
  // Intercept bash, terminal, or command execution tools
138
198
  if (toolName === 'bash' || toolName === 'terminal' || toolName === 'shell' || toolName === 'exec' || toolName === 'run_command') {
@@ -167,5 +227,20 @@ export default async function bdbAosPlugin(input) {
167
227
  }
168
228
  }
169
229
  },
230
+
231
+ 'tool.execute.after': async (toolInput) => {
232
+ try {
233
+ const tool_input = pendingArgs.get(toolInput.callID);
234
+ pendingArgs.delete(toolInput.callID);
235
+ postTrail({
236
+ hook_event_name: 'PostToolUse',
237
+ session_id: toolInput.sessionID,
238
+ cwd: directory,
239
+ agent: 'opencode',
240
+ tool_name: mapTrailToolName(toolInput.tool),
241
+ tool_input,
242
+ });
243
+ } catch {}
244
+ },
170
245
  };
171
246
  }
@@ -99,7 +99,15 @@ browser-internal identifiers private to the served page
99
99
  No ECC tests, hooks (`scripts/hooks/plan-canvas-*.js`), or the
100
100
  `commands/plan-canvas.md` wrapper were ported.
101
101
 
102
- ### License text
102
+ ### 3. Store index
103
+
104
+ The AOS Store exposes selected ECC Markdown capabilities through
105
+ `lib/ecc-store-index.json` at pinned commit
106
+ `e482e579415fde18357cafce70f177ae19fd7f03`. The index contains only
107
+ `skills/**/SKILL.md` and `agents/*.md` metadata. Installation verifies the raw
108
+ Markdown SHA-256 before writing it. Scripts, hooks, rules, and non-entrypoint
109
+ Markdown files are excluded from the Phase 1 store.
110
+
103
111
 
104
112
  ```
105
113
  MIT License
@@ -231,6 +239,54 @@ redistributable.
231
239
  | `CloudAI-X/threejs-skills` | No `LICENSE` file; README claims MIT. | `threejs-skills` |
232
240
  | `Shpigford/skills` | Repository returns **404** — deleted, renamed, or made private. Provenance cannot be verified at all. | `readme` |
233
241
 
242
+ ## tt-a1i/archify
243
+
244
+ <https://github.com/tt-a1i/archify> — MIT. Copyright (c) 2026 tt-a1i (Archify),
245
+ Copyright (c) 2025 Cocoon AI (based on Cocoon-AI/architecture-diagram-generator, MIT).
246
+
247
+ `skills/global_config/archify/` is upstream `archify/` at commit `9e35d2b`,
248
+ without `test/`, rendered example HTML, and the remote update check
249
+ (`scripts/check-update.mjs`, `scripts/update-contract.mjs`); AOS pins the version.
250
+ The skill's own `LICENSE` and `THIRD_PARTY_NOTICES.md` ship alongside it.
251
+
252
+ ---
253
+
254
+ ## sodiumsun/agenttrail
255
+
256
+ <https://github.com/sodiumsun/agenttrail> — MIT.
257
+
258
+ `skills/global_config/agenttrail/` carries the Map runtime only
259
+ (`bin/agenttrail.mjs`, `public/index.html`) at commit `e4ba2da`, with its
260
+ `LICENSE`. Kitchen is not included. Four patches, each marked `// AOS patch:`:
261
+ a `--plan <path>` flag, a `hook --agent <name>` flag, serving files under
262
+ `production_artifacts/` so a card's relative `url:` opens, and AOS wording in
263
+ the page when `--plan` is set (real plan path, no upstream init/backfill hints).
264
+
265
+ ---
266
+
267
+ ## duriantaco/skylos
268
+
269
+ <https://github.com/duriantaco/skylos> — Apache-2.0. Copyright duriantaco.
270
+
271
+ Tracked in `.agents/vendor-manifest.json` at pinned commit
272
+ `0c95b002424453983d5c96708cf7865939745d98`. Diff-based AST and static security
273
+ analyzer feeding the shipping gate, for `bdb-security-audit` and
274
+ `godmode-shipping`.
275
+
276
+ ---
277
+
278
+ ## SnailSploit/claude-red
279
+
280
+ <https://github.com/SnailSploit/claude-red> — MIT.
281
+ Copyright (c) 2024-2025 SnailSploit / Kai Aizen.
282
+
283
+ Tracked in `.agents/vendor-manifest.json` at pinned commit
284
+ `739512a8588b28ff3b554e669391c22508602878`. Defensive audit heuristics and
285
+ vulnerability checklists for `bdb-security-audit` and `security-reviewer`;
286
+ the upstream offensive exploit content is stripped and not carried over.
287
+
288
+ ---
289
+
234
290
  ## Note on `mcps/`
235
291
 
236
292
  Sub-repositories vendored under `mcps/` carry their own `LICENSE` files in