@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.
- package/.agents/agents.md +9 -3
- package/.agents/nodes.json +7 -2
- package/.agents/state.schema.json +26 -1
- package/.agents/vendor-manifest.json +56 -0
- package/.agents/workflows/startcycle-graph.md +2 -2
- package/.claude/agents/architect.md +7 -2
- package/.claude/agents/security-reviewer.md +1 -1
- package/.claude/agents/techlead.md +2 -0
- package/.claude/hooks/memb-inject.mjs +257 -135
- package/.claude/hooks/trail-relay.mjs +18 -0
- package/.claude/settings.json +70 -0
- package/.claude/workflows/startcycle-dispatch.mjs +203 -17
- package/.opencode/agents/architect.md +7 -2
- package/.opencode/agents/techlead.md +2 -0
- package/.opencode/plugins/bdb-aos.js +75 -0
- package/THIRD_PARTY_NOTICES.md +57 -1
- package/bin/aos-doctor.mjs +366 -0
- package/bin/aos-store.mjs +167 -0
- package/bin/aos-uninstall.mjs +55 -1
- package/docs/AUDIT_BRIEF_ECC_STORE.md +122 -0
- package/docs/PLAN_AOS_STORE_PHASE1.md +190 -0
- package/docs/handover/agenttrail-for-ao.md +58 -0
- package/docs/handover/deja-for-ao.md +51 -0
- package/installer.js +182 -38
- package/lib/aos-archify-contract.mjs +277 -0
- package/lib/ecc-store-index.json +1 -0
- package/mcp_config.json +8 -0
- package/mcps/mcsc/README.md +24 -0
- package/mcps/mcsc/package-lock.json +1234 -0
- package/mcps/mcsc/package.json +14 -0
- package/mcps/mcsc/packages/core/bin/mcsc.js +162 -0
- package/mcps/mcsc/packages/core/rulebook.default.yaml +49 -0
- package/mcps/mcsc/packages/core/schema/rulebook.schema.json +56 -0
- package/mcps/mcsc/packages/core/src/adapters/agy.js +107 -0
- package/mcps/mcsc/packages/core/src/adapters/codex.js +179 -0
- package/mcps/mcsc/packages/core/src/adapters/native.js +14 -0
- package/mcps/mcsc/packages/core/src/adapters/opencode.js +183 -0
- package/mcps/mcsc/packages/core/src/adapters/types.js +21 -0
- package/mcps/mcsc/packages/core/src/capabilities/buildOfferTable.js +34 -0
- package/mcps/mcsc/packages/core/src/capabilities/registry.js +99 -0
- package/mcps/mcsc/packages/core/src/capabilities/types.js +24 -0
- package/mcps/mcsc/packages/core/src/detect/cache.js +47 -0
- package/mcps/mcsc/packages/core/src/detect/inventory.js +73 -0
- package/mcps/mcsc/packages/core/src/detect/probes.js +158 -0
- package/mcps/mcsc/packages/core/src/detect/types.js +26 -0
- package/mcps/mcsc/packages/core/src/rulebook/load.js +53 -0
- package/mcps/mcsc/packages/core/src/rulebook/resolve.js +227 -0
- package/mcps/mcsc/packages/core/src/rulebook/rulebook.types.js +89 -0
- package/mcps/mcsc/packages/core/src/trail.js +17 -0
- package/mcps/mcsc/packages/mcp/server.js +302 -0
- package/mcps/mcsc/server.js +2 -0
- package/package.json +8 -2
- package/scripts/build-ecc-store-index.mjs +147 -0
- package/skills/basic/bdbmediastorm/SKILL.md +1 -1
- package/skills/basic/godmode-ui-ux/SKILL.md +2 -2
- package/skills/basic/godmode-ui-ux/references/anti-slop-rules.md +44 -40
- package/skills/basic/godmode-ui-ux/references/taste-archetypes.md +49 -0
- package/skills/basic/startcycle/SKILL.md +7 -0
- package/skills/basic/startcycle-graph/SKILL.md +25 -0
- package/skills/basic/startcycle-graph-user/SKILL.md +3 -0
- package/skills/basic/teamwork-preview/SKILL.md +2 -0
- package/skills/bdbrainstorm/SKILL.md +1 -0
- package/skills/global_config/agenttrail/LICENSE +21 -0
- package/skills/global_config/agenttrail/SKILL.md +48 -0
- package/skills/global_config/agenttrail/bin/agenttrail.mjs +1113 -0
- package/skills/global_config/agenttrail/public/index.html +662 -0
- package/skills/global_config/aos-project-init/SKILL.md +25 -5
- package/skills/global_config/aos-setup/SKILL.md +34 -1
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +115 -1
- package/skills/global_config/archify/LICENSE +22 -0
- package/skills/global_config/archify/SKILL.md +140 -0
- package/skills/global_config/archify/THIRD_PARTY_NOTICES.md +69 -0
- package/skills/global_config/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/global_config/archify/assets/template.html +14937 -0
- package/skills/global_config/archify/bin/archify.mjs +2139 -0
- package/skills/global_config/archify/bin/open-artifact.mjs +86 -0
- package/skills/global_config/archify/bin/preview.mjs +653 -0
- package/skills/global_config/archify/bin/visual-check.mjs +829 -0
- package/skills/global_config/archify/brand-marks/README.md +31 -0
- package/skills/global_config/archify/brand-marks/catalog.json +131 -0
- package/skills/global_config/archify/delta/architecture-delta.mjs +1232 -0
- package/skills/global_config/archify/examples/agent-run.lifecycle.json +60 -0
- package/skills/global_config/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/global_config/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/global_config/archify/examples/brand-aware-delivery.architecture.json +47 -0
- package/skills/global_config/archify/examples/cache-miss-request.sequence.json +82 -0
- package/skills/global_config/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/global_config/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/global_config/archify/examples/dataflow-product-analytics.html +15048 -0
- package/skills/global_config/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/global_config/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/global_config/archify/examples/incident-response.workflow.json +64 -0
- package/skills/global_config/archify/examples/lifecycle-agent-run.html +14983 -0
- package/skills/global_config/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/global_config/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/global_config/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/global_config/archify/examples/sequence-cache-miss-request.html +15063 -0
- package/skills/global_config/archify/examples/web-app-rendered.html +15012 -0
- package/skills/global_config/archify/examples/web-app.architecture.json +46 -0
- package/skills/global_config/archify/examples/workflow-agent-tool-call-rendered.html +15054 -0
- package/skills/global_config/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/global_config/archify/package.json +39 -0
- package/skills/global_config/archify/recipes/scenarios.mjs +391 -0
- package/skills/global_config/archify/references/authoring-contract.md +247 -0
- package/skills/global_config/archify/references/brand-marks.md +65 -0
- package/skills/global_config/archify/references/delivery-contract.md +138 -0
- package/skills/global_config/archify/references/viewer-runtime.md +45 -0
- package/skills/global_config/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/global_config/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/global_config/archify/renderers/dataflow/README.md +104 -0
- package/skills/global_config/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/global_config/archify/renderers/lifecycle/README.md +115 -0
- package/skills/global_config/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/global_config/archify/renderers/sequence/README.md +114 -0
- package/skills/global_config/archify/renderers/sequence/render-sequence.mjs +464 -0
- package/skills/global_config/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/global_config/archify/renderers/shared/cli.mjs +218 -0
- package/skills/global_config/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/global_config/archify/renderers/shared/diagnostics.mjs +160 -0
- package/skills/global_config/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/global_config/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/global_config/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/global_config/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/global_config/archify/renderers/shared/i18n.mjs +595 -0
- package/skills/global_config/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/global_config/archify/renderers/shared/legend.mjs +217 -0
- package/skills/global_config/archify/renderers/shared/output-path.mjs +340 -0
- package/skills/global_config/archify/renderers/shared/repository-evidence.mjs +239 -0
- package/skills/global_config/archify/renderers/shared/repository-location.mjs +58 -0
- package/skills/global_config/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/global_config/archify/renderers/shared/utils.mjs +232 -0
- package/skills/global_config/archify/renderers/shared/validator.mjs +86 -0
- package/skills/global_config/archify/renderers/workflow/README.md +223 -0
- package/skills/global_config/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/global_config/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/global_config/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/global_config/archify/schemas/README.md +211 -0
- package/skills/global_config/archify/schemas/architecture.schema.json +178 -0
- package/skills/global_config/archify/schemas/common.schema.json +115 -0
- package/skills/global_config/archify/schemas/dataflow.schema.json +243 -0
- package/skills/global_config/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/global_config/archify/schemas/sequence.schema.json +223 -0
- package/skills/global_config/archify/schemas/workflow.schema.json +428 -0
- package/skills/global_config/archify/scripts/check-render-output.mjs +916 -0
- package/skills/global_config/archify/scripts/generate-brand-marks.mjs +141 -0
- package/skills/global_config/archify/scripts/generate-validators.mjs +66 -0
- package/skills/global_config/archify/scripts/render-examples.mjs +26 -0
- package/skills/global_config/archify/skill-release.json +10 -0
- package/skills/global_config/ask-tim/SKILL.md +10 -0
- package/skills/global_config/bdb-security-audit/SKILL.md +109 -0
- package/skills/global_config/bdb-security-audit/references/audit-checklists.md +172 -0
- package/skills/global_config/bdb-security-audit/references/skylos-guide.md +139 -0
- package/skills/global_config/bdb-security-audit/references/xalgorix-bridge.md +110 -0
- package/skills/global_config/bdbdesignpro/SKILL.md +4 -4
- package/skills/global_config/bdbdesignpro/references/bdb-motion-tokens.md +52 -31
- package/skills/global_config/bdbresilience/SKILL.md +10 -0
- package/skills/global_config/brag/SKILL.md +179 -0
- package/skills/global_config/brag/assets/music/README.md +20 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/global_config/brag/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/global_config/brag/assets/sfx/sfx-analysis.md +75 -0
- package/skills/global_config/brag/assets/sfx/ui/click1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/global_config/brag/references/audio.md +307 -0
- package/skills/global_config/brag/references/step-1-inspect.md +133 -0
- package/skills/global_config/brag/references/step-2-plan.md +234 -0
- package/skills/global_config/brag/references/step-3-compose.md +210 -0
- package/skills/global_config/brag/references/step-4-deliver.md +168 -0
- package/skills/global_config/brag/references/tones.md +231 -0
- package/skills/global_config/brag/scripts/analyze_music_cues.py +309 -0
- package/skills/global_config/brag/scripts/pyproject.toml +14 -0
- package/skills/global_config/brag/scripts/uv.lock +819 -0
- package/skills/global_config/deja-memory/SKILL.md +42 -0
- package/skills/global_config/editable-design/LICENSE +202 -0
- package/skills/global_config/editable-design/README.md +34 -0
- package/skills/global_config/editable-design/SKILL.md +630 -0
- package/skills/global_config/editable-design/THIRD_PARTY_NOTICES.md +10 -0
- package/skills/global_config/editable-design/agents/openai.yaml +4 -0
- package/skills/global_config/editable-design/assets/editor/layer-editor.css +262 -0
- package/skills/global_config/editable-design/assets/editor/layer-editor.js +1929 -0
- package/skills/global_config/editable-design/assets/poster-starter/README.md +92 -0
- package/skills/global_config/editable-design/assets/poster-starter/assets/.gitkeep +0 -0
- package/skills/global_config/editable-design/assets/poster-starter/index.html +91 -0
- package/skills/global_config/editable-design/assets/poster-starter/poster.json +6 -0
- package/skills/global_config/editable-design/assets/poster-starter/reference/.gitkeep +1 -0
- package/skills/global_config/editable-design/assets/replay/icons/assets.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/html.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/input.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/layers.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/plan.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/reference.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/review.png +0 -0
- package/skills/global_config/editable-design/assets/replay/index.html +59 -0
- package/skills/global_config/editable-design/assets/replay/replay-motion.js +410 -0
- package/skills/global_config/editable-design/assets/replay/replay.css +380 -0
- package/skills/global_config/editable-design/assets/replay/replay.js +374 -0
- package/skills/global_config/editable-design/font-kit/package-lock.json +115 -0
- package/skills/global_config/editable-design/font-kit/package.json +19 -0
- package/skills/global_config/editable-design/pack.sh +20 -0
- package/skills/global_config/editable-design/references/asset-architecture.md +72 -0
- package/skills/global_config/editable-design/references/editor-pitfalls.md +70 -0
- package/skills/global_config/editable-design/references/editor-runtime.md +131 -0
- package/skills/global_config/editable-design/references/font-system.md +89 -0
- package/skills/global_config/editable-design/references/imagery.md +145 -0
- package/skills/global_config/editable-design/references/layout-typography.md +116 -0
- package/skills/global_config/editable-design/references/replay-contract.md +169 -0
- package/skills/global_config/editable-design/scripts/_browser.mjs +247 -0
- package/skills/global_config/editable-design/scripts/bake.mjs +87 -0
- package/skills/global_config/editable-design/scripts/build-replay.mjs +316 -0
- package/skills/global_config/editable-design/scripts/check-contract.mjs +293 -0
- package/skills/global_config/editable-design/scripts/check-fonts.sh +252 -0
- package/skills/global_config/editable-design/scripts/check-poster.sh +70 -0
- package/skills/global_config/editable-design/scripts/doctor.sh +78 -0
- package/skills/global_config/editable-design/scripts/explode.mjs +115 -0
- package/skills/global_config/editable-design/scripts/font-kit.mjs +187 -0
- package/skills/global_config/editable-design/scripts/import-asset.sh +23 -0
- package/skills/global_config/editable-design/scripts/init-poster.sh +64 -0
- package/skills/global_config/editable-design/scripts/install-font-kit.sh +13 -0
- package/skills/global_config/editable-design/scripts/package-lock.json +334 -0
- package/skills/global_config/editable-design/scripts/package.json +14 -0
- package/skills/global_config/editable-design/scripts/remove-chroma-key.py +201 -0
- package/skills/global_config/editable-design/scripts/render-poster.sh +202 -0
- package/skills/global_config/editable-design/scripts/trace.sh +159 -0
- package/skills/global_config/editable-design/scripts/verify-replay.mjs +97 -0
- package/skills/global_config/editable-design/scripts/verify.mjs +782 -0
- package/skills/global_config/editable-design/scripts/wire-editor.mjs +104 -0
- package/skills/global_config/editable-design/tests/fixtures/small-explode/index.html +86 -0
- package/skills/global_config/mcsc/SKILL.md +60 -0
- package/skills/global_config/plan-canvas/SKILL.md +8 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +31 -6
- 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 =
|
|
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,
|
|
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
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
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
|
-
`
|
|
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: {
|
|
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
|
}
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -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
|
-
###
|
|
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
|