@jaimevalasek/aioson 1.5.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +729 -226
- package/docs/design-previews/aurora-command-ui-website.html +884 -0
- package/docs/design-previews/aurora-command-ui.html +682 -0
- package/docs/design-previews/bold-editorial-ui-website.html +658 -0
- package/docs/design-previews/bold-editorial-ui.html +717 -0
- package/docs/design-previews/clean-saas-ui-website.html +1202 -0
- package/docs/design-previews/clean-saas-ui.html +549 -0
- package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
- package/docs/design-previews/cognitive-core-ui.html +463 -0
- package/docs/design-previews/glassmorphism-ui-website.html +572 -0
- package/docs/design-previews/glassmorphism-ui.html +886 -0
- package/docs/design-previews/index.html +699 -0
- package/docs/design-previews/interface-design-website.html +1187 -0
- package/docs/design-previews/interface-design.html +513 -0
- package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
- package/docs/design-previews/neo-brutalist-ui.html +797 -0
- package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
- package/docs/design-previews/premium-command-center-ui.html +552 -0
- package/docs/design-previews/pt.squarespace.com-homepage.html +889 -0
- package/docs/design-previews/warm-craft-ui-website.html +684 -0
- package/docs/design-previews/warm-craft-ui.html +739 -0
- package/docs/en/cli-reference.md +20 -9
- package/docs/integrations/sdlc-genius-boundary.md +76 -0
- package/docs/integrations/sdlc-genius-eval-matrix.md +75 -0
- package/docs/integrations/sdlc-genius-install-checklist.md +93 -0
- package/docs/integrations/sdlc-genius-review-samples.md +86 -0
- package/docs/pt/README.md +10 -0
- package/docs/pt/agent-sharding.md +132 -0
- package/docs/pt/agentes.md +9 -2
- package/docs/pt/busca-de-contexto.md +129 -0
- package/docs/pt/cache-de-contexto.md +156 -0
- package/docs/pt/comandos-cli.md +915 -1
- package/docs/pt/design-hybrid-forge.md +356 -0
- package/docs/pt/devlog-pipeline.md +270 -0
- package/docs/pt/fluxo-artefatos.md +178 -0
- package/docs/pt/hooks-session-guard.md +454 -0
- package/docs/pt/inicio-rapido.md +54 -3
- package/docs/pt/inteligencia-adaptativa.md +324 -0
- package/docs/pt/monitor-de-contexto.md +158 -0
- package/docs/pt/recuperacao-de-sessao.md +125 -0
- package/docs/pt/sandbox.md +125 -0
- package/docs/pt/sdd-automation-scripts.md +557 -0
- package/docs/pt/site-forge.md +309 -0
- package/docs/pt/skills.md +98 -6
- package/docs/pt/spec-learnings-pipeline.md +265 -0
- package/package.json +1 -1
- package/src/a2a/client.js +165 -0
- package/src/a2a/server.js +223 -0
- package/src/agent-loader.js +280 -0
- package/src/cli.js +329 -1
- package/src/commands/agent-audit.js +397 -0
- package/src/commands/agent-export-skill.js +229 -0
- package/src/commands/agent-loader.js +85 -0
- package/src/commands/artifact-validate.js +189 -0
- package/src/commands/brief-gen.js +405 -0
- package/src/commands/brief-validate.js +65 -0
- package/src/commands/classify.js +256 -0
- package/src/commands/context-cache.js +90 -0
- package/src/commands/context-compact.js +49 -0
- package/src/commands/context-health.js +175 -0
- package/src/commands/context-monitor.js +163 -0
- package/src/commands/context-search.js +66 -0
- package/src/commands/context-trim.js +177 -0
- package/src/commands/design-hybrid-options.js +385 -0
- package/src/commands/detect-test-runner.js +55 -0
- package/src/commands/devlog-export-brains.js +27 -0
- package/src/commands/devlog-process.js +292 -0
- package/src/commands/devlog-watch.js +131 -0
- package/src/commands/feature-close.js +165 -0
- package/src/commands/gate-check.js +228 -0
- package/src/commands/health.js +214 -0
- package/src/commands/hooks-emit.js +253 -0
- package/src/commands/hooks-install.js +347 -0
- package/src/commands/init.js +54 -13
- package/src/commands/install.js +52 -13
- package/src/commands/learning-auto-promote.js +195 -0
- package/src/commands/learning-evolve.js +364 -0
- package/src/commands/learning-export.js +103 -0
- package/src/commands/learning-rollback.js +164 -0
- package/src/commands/live.js +59 -1
- package/src/commands/pattern-detect.js +33 -0
- package/src/commands/preflight-context.js +30 -0
- package/src/commands/preflight.js +208 -0
- package/src/commands/pulse-update.js +130 -0
- package/src/commands/recovery.js +43 -0
- package/src/commands/runner-daemon.js +274 -0
- package/src/commands/runner-plan.js +70 -0
- package/src/commands/runner-queue-from-plan.js +166 -0
- package/src/commands/runner-queue.js +189 -0
- package/src/commands/runner-run.js +129 -0
- package/src/commands/runtime.js +47 -1
- package/src/commands/sandbox.js +37 -0
- package/src/commands/self-implement-loop.js +256 -0
- package/src/commands/session-guard.js +218 -0
- package/src/commands/setup-context.js +22 -2
- package/src/commands/setup.js +178 -0
- package/src/commands/sizing.js +165 -0
- package/src/commands/skill.js +144 -32
- package/src/commands/spec-checkpoint.js +177 -0
- package/src/commands/spec-status.js +79 -0
- package/src/commands/spec-sync.js +190 -0
- package/src/commands/spec-tasks.js +288 -0
- package/src/commands/squad-autorun.js +1220 -0
- package/src/commands/squad-bus.js +217 -0
- package/src/commands/squad-card.js +149 -0
- package/src/commands/squad-daemon.js +134 -0
- package/src/commands/squad-dependency-graph.js +164 -0
- package/src/commands/squad-review.js +106 -0
- package/src/commands/squad-scaffold.js +55 -0
- package/src/commands/squad-tool-register.js +157 -0
- package/src/commands/state-save.js +122 -0
- package/src/commands/tool-registry-cmd.js +232 -0
- package/src/commands/update.js +9 -0
- package/src/commands/verify-gate.js +572 -0
- package/src/commands/workflow-execute.js +241 -0
- package/src/constants.js +18 -0
- package/src/context-cache.js +159 -0
- package/src/context-search.js +326 -0
- package/src/design-variation-catalog.js +503 -0
- package/src/i18n/messages/en.js +32 -2
- package/src/i18n/messages/es.js +30 -2
- package/src/i18n/messages/fr.js +30 -2
- package/src/i18n/messages/pt-BR.js +32 -2
- package/src/install-animation.js +260 -0
- package/src/install-profile.js +143 -0
- package/src/install-wizard.js +475 -0
- package/src/installer.js +44 -10
- package/src/lib/health-check.js +158 -0
- package/src/lib/hook-protocol.js +76 -0
- package/src/mcp/apps/squad-dashboard/app.js +163 -0
- package/src/mcp/apps/squad-dashboard/index.html +261 -0
- package/src/mcp/apps/squad-dashboard/mcp-manifest.json +23 -0
- package/src/mcp/resources/squad-state.js +130 -0
- package/src/parser.js +7 -1
- package/src/preflight-engine.js +443 -0
- package/src/recovery-context-session.js +154 -0
- package/src/runner/cascade.js +97 -0
- package/src/runner/cli-launcher.js +109 -0
- package/src/runner/plan-importer.js +63 -0
- package/src/runner/queue-store.js +159 -0
- package/src/runtime-store.js +158 -4
- package/src/sandbox.js +177 -0
- package/src/squad/agent-teams-adapter.js +264 -0
- package/src/squad/brief-validator.js +350 -0
- package/src/squad/bus-bridge.js +140 -0
- package/src/squad/context-compactor.js +265 -0
- package/src/squad/cross-ai-synthesizer.js +250 -0
- package/src/squad/hooks-generator.js +196 -0
- package/src/squad/inter-squad-events.js +175 -0
- package/src/squad/intra-bus.js +345 -0
- package/src/squad/learning-extractor.js +213 -0
- package/src/squad/pattern-detector.js +365 -0
- package/src/squad/preflight-context.js +296 -0
- package/src/squad/recovery-context.js +242 -71
- package/src/squad/reflection.js +365 -0
- package/src/squad/squad-scaffold.js +177 -0
- package/src/squad/state-manager.js +310 -0
- package/src/squad/task-decomposer.js +652 -0
- package/src/squad/verify-gate.js +303 -0
- package/src/tool-executor.js +94 -0
- package/src/updater.js +10 -3
- package/src/worker-runner.js +186 -1
- package/template/.aioson/agents/analyst.md +119 -3
- package/template/.aioson/agents/architect.md +98 -0
- package/template/.aioson/agents/design-hybrid-forge.md +141 -0
- package/template/.aioson/agents/dev.md +335 -14
- package/template/.aioson/agents/deyvin.md +117 -2
- package/template/.aioson/agents/discovery-design-doc.md +44 -0
- package/template/.aioson/agents/genome.md +14 -0
- package/template/.aioson/agents/neo.md +78 -1
- package/template/.aioson/agents/orache.md +50 -4
- package/template/.aioson/agents/orchestrator.md +197 -1
- package/template/.aioson/agents/pm.md +93 -0
- package/template/.aioson/agents/product.md +77 -4
- package/template/.aioson/agents/profiler-enricher.md +14 -0
- package/template/.aioson/agents/profiler-forge.md +14 -0
- package/template/.aioson/agents/profiler-researcher.md +14 -0
- package/template/.aioson/agents/qa.md +249 -19
- package/template/.aioson/agents/setup.md +144 -12
- package/template/.aioson/agents/sheldon.md +237 -11
- package/template/.aioson/agents/site-forge.md +1753 -0
- package/template/.aioson/agents/squad.md +162 -0
- package/template/.aioson/agents/tester.md +209 -0
- package/template/.aioson/agents/ux-ui.md +34 -1
- package/template/.aioson/brains/README.md +128 -0
- package/template/.aioson/brains/_index.json +16 -0
- package/template/.aioson/brains/scripts/query.js +103 -0
- package/template/.aioson/brains/site-forge/visual-patterns.brain.json +205 -0
- package/template/.aioson/config.md +158 -13
- package/template/.aioson/constitution.md +33 -0
- package/template/.aioson/context/forensics/.gitkeep +0 -0
- package/template/.aioson/context/project-pulse.md +34 -0
- package/template/.aioson/context/seeds/seed-example.md +27 -0
- package/template/.aioson/context/user-profile.md +42 -0
- package/template/.aioson/docs/LAYERS.md +79 -0
- package/template/.aioson/docs/README.md +76 -0
- package/template/.aioson/docs/example-external-api-context.md +72 -0
- package/template/.aioson/locales/en/agents/architect.md +17 -0
- package/template/.aioson/locales/en/agents/dev.md +79 -13
- package/template/.aioson/locales/en/agents/orache.md +6 -0
- package/template/.aioson/locales/en/agents/orchestrator.md +24 -0
- package/template/.aioson/locales/en/agents/product.md +50 -0
- package/template/.aioson/locales/en/agents/setup.md +33 -1
- package/template/.aioson/locales/en/agents/sheldon.md +115 -0
- package/template/.aioson/locales/en/agents/squad.md +14 -0
- package/template/.aioson/locales/en/agents/tester.md +6 -0
- package/template/.aioson/locales/es/agents/analyst.md +2 -0
- package/template/.aioson/locales/es/agents/architect.md +19 -0
- package/template/.aioson/locales/es/agents/dev.md +64 -4
- package/template/.aioson/locales/es/agents/deyvin.md +2 -0
- package/template/.aioson/locales/es/agents/discovery-design-doc.md +2 -0
- package/template/.aioson/locales/es/agents/genome.md +2 -0
- package/template/.aioson/locales/es/agents/neo.md +2 -0
- package/template/.aioson/locales/es/agents/orache.md +2 -0
- package/template/.aioson/locales/es/agents/orchestrator.md +26 -0
- package/template/.aioson/locales/es/agents/pair.md +2 -0
- package/template/.aioson/locales/es/agents/pm.md +2 -0
- package/template/.aioson/locales/es/agents/product.md +52 -0
- package/template/.aioson/locales/es/agents/profiler-enricher.md +2 -0
- package/template/.aioson/locales/es/agents/profiler-forge.md +2 -0
- package/template/.aioson/locales/es/agents/profiler-researcher.md +2 -0
- package/template/.aioson/locales/es/agents/qa.md +2 -0
- package/template/.aioson/locales/es/agents/setup.md +35 -1
- package/template/.aioson/locales/es/agents/sheldon.md +117 -0
- package/template/.aioson/locales/es/agents/squad.md +16 -0
- package/template/.aioson/locales/es/agents/tester.md +9 -0
- package/template/.aioson/locales/es/agents/ux-ui.md +2 -0
- package/template/.aioson/locales/fr/agents/analyst.md +2 -0
- package/template/.aioson/locales/fr/agents/architect.md +19 -0
- package/template/.aioson/locales/fr/agents/dev.md +64 -4
- package/template/.aioson/locales/fr/agents/deyvin.md +2 -0
- package/template/.aioson/locales/fr/agents/discovery-design-doc.md +2 -0
- package/template/.aioson/locales/fr/agents/genome.md +2 -0
- package/template/.aioson/locales/fr/agents/neo.md +2 -0
- package/template/.aioson/locales/fr/agents/orache.md +2 -0
- package/template/.aioson/locales/fr/agents/orchestrator.md +26 -0
- package/template/.aioson/locales/fr/agents/pair.md +2 -0
- package/template/.aioson/locales/fr/agents/pm.md +2 -0
- package/template/.aioson/locales/fr/agents/product.md +52 -0
- package/template/.aioson/locales/fr/agents/profiler-enricher.md +2 -0
- package/template/.aioson/locales/fr/agents/profiler-forge.md +2 -0
- package/template/.aioson/locales/fr/agents/profiler-researcher.md +2 -0
- package/template/.aioson/locales/fr/agents/qa.md +2 -0
- package/template/.aioson/locales/fr/agents/setup.md +35 -1
- package/template/.aioson/locales/fr/agents/sheldon.md +117 -0
- package/template/.aioson/locales/fr/agents/squad.md +16 -0
- package/template/.aioson/locales/fr/agents/tester.md +9 -0
- package/template/.aioson/locales/fr/agents/ux-ui.md +2 -0
- package/template/.aioson/locales/pt-BR/agents/analyst.md +64 -3
- package/template/.aioson/locales/pt-BR/agents/architect.md +42 -0
- package/template/.aioson/locales/pt-BR/agents/dev.md +147 -14
- package/template/.aioson/locales/pt-BR/agents/deyvin.md +47 -0
- package/template/.aioson/locales/pt-BR/agents/neo.md +62 -1
- package/template/.aioson/locales/pt-BR/agents/orchestrator.md +158 -2
- package/template/.aioson/locales/pt-BR/agents/pm.md +95 -1
- package/template/.aioson/locales/pt-BR/agents/product.md +145 -18
- package/template/.aioson/locales/pt-BR/agents/qa.md +16 -0
- package/template/.aioson/locales/pt-BR/agents/setup.md +134 -19
- package/template/.aioson/locales/pt-BR/agents/sheldon.md +132 -1
- package/template/.aioson/locales/pt-BR/agents/squad.md +14 -0
- package/template/.aioson/locales/pt-BR/agents/tester.md +449 -0
- package/template/.aioson/rules/README.md +69 -0
- package/template/.aioson/rules/data-format-convention.md +136 -0
- package/template/.aioson/rules/example-monetary-values.md +30 -0
- package/template/.aioson/schemas/squad-manifest.schema.json +124 -3
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
- package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -0
- package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +66 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +368 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +165 -0
- package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +46 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/analyst.md +30 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/architect.md +23 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/dev.md +47 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/deyvin.md +27 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +101 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/product.md +25 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/qa.md +30 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/sheldon.md +25 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
- package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +147 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +306 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +149 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +208 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
- package/template/.aioson/skills/process/simplify/SKILL.md +173 -0
- package/template/.aioson/skills/static/context-budget-guide.md +46 -0
- package/template/.aioson/skills/static/harness-sensors.md +74 -0
- package/template/.aioson/skills/static/multi-agent-patterns.md +43 -0
- package/template/.aioson/skills/static/react-motion-patterns.md +22 -0
- package/template/.aioson/skills/static/static-html-patterns/checklists.md +43 -0
- package/template/.aioson/skills/static/static-html-patterns/css-tokens.md +609 -0
- package/template/.aioson/skills/static/static-html-patterns/motion.md +193 -0
- package/template/.aioson/skills/static/static-html-patterns/premium.md +711 -0
- package/template/.aioson/skills/static/static-html-patterns/structure.md +209 -0
- package/template/.aioson/skills/static/static-html-patterns/utilities.md +190 -0
- package/template/.aioson/skills/static/static-html-patterns.md +58 -1913
- package/template/.aioson/skills/static/threejs-patterns.md +929 -0
- package/template/.aioson/skills/static/web-research-cache.md +112 -0
- package/template/.aioson/tasks/implementation-plan.md +21 -1
- package/template/.claude/commands/aioson/agent/design-hybrid-forge.md +5 -0
- package/template/.claude/commands/aioson/agent/orache.md +5 -0
- package/template/.claude/commands/aioson/agent/sheldon.md +5 -0
- package/template/.claude/commands/aioson/agent/site-forge.md +5 -0
- package/template/AGENTS.md +75 -1
- package/template/CLAUDE.md +31 -0
- package/template/OPENCODE.md +4 -0
- package/template/researchs/.gitkeep +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AIOSON Brain Query
|
|
4
|
+
* Cross-references pattern nodes across brain files by tags, quality, verdict, and agent.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node query.js --tags css,hover # nodes matching any of these tags
|
|
8
|
+
* node query.js --tags css,hover --match all # nodes matching ALL tags (AND)
|
|
9
|
+
* node query.js --min-quality 4 # quality >= 4 only
|
|
10
|
+
* node query.js --agent site-forge # brain files for this agent
|
|
11
|
+
* node query.js --verdict EXCELLENT,BEST_PRACTICE # filter by verdict
|
|
12
|
+
* node query.js --avoid # show only AVOID nodes (anti-patterns)
|
|
13
|
+
* node query.js --id css-001,css-002 # fetch specific node IDs
|
|
14
|
+
* node query.js --tags animation --format compact # one-line per node output
|
|
15
|
+
*
|
|
16
|
+
* Output: JSON array of matching nodes (default) or compact table (--format compact)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
const BRAINS_DIR = path.resolve(__dirname, '..');
|
|
23
|
+
const INDEX_PATH = path.join(BRAINS_DIR, '_index.json');
|
|
24
|
+
|
|
25
|
+
// --- Parse args ---
|
|
26
|
+
const args = process.argv.slice(2);
|
|
27
|
+
const get = (flag) => { const i = args.indexOf(flag); return i !== -1 ? args[i + 1] : null; };
|
|
28
|
+
const has = (flag) => args.includes(flag);
|
|
29
|
+
|
|
30
|
+
const tagsRaw = get('--tags');
|
|
31
|
+
const tags = tagsRaw ? tagsRaw.split(',').map(t => t.trim()) : [];
|
|
32
|
+
const matchMode = get('--match') || 'any'; // 'any' | 'all'
|
|
33
|
+
const minQ = parseInt(get('--min-quality') || '0', 10);
|
|
34
|
+
const agentFilter = get('--agent');
|
|
35
|
+
const verdictRaw = get('--verdict');
|
|
36
|
+
const verdicts = verdictRaw ? verdictRaw.split(',').map(v => v.trim().toUpperCase()) : [];
|
|
37
|
+
const idRaw = get('--id');
|
|
38
|
+
const ids = idRaw ? idRaw.split(',').map(i => i.trim()) : [];
|
|
39
|
+
const avoidOnly = has('--avoid');
|
|
40
|
+
const format = get('--format') || 'json';
|
|
41
|
+
|
|
42
|
+
// --- Load index ---
|
|
43
|
+
if (!fs.existsSync(INDEX_PATH)) {
|
|
44
|
+
console.error('No _index.json found at', INDEX_PATH);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const index = JSON.parse(fs.readFileSync(INDEX_PATH, 'utf8'));
|
|
48
|
+
|
|
49
|
+
// --- Determine which brain files to load ---
|
|
50
|
+
let brainFiles = index.brains;
|
|
51
|
+
if (agentFilter) {
|
|
52
|
+
brainFiles = brainFiles.filter(b => b.agents.includes(agentFilter));
|
|
53
|
+
}
|
|
54
|
+
if (tags.length > 0) {
|
|
55
|
+
brainFiles = brainFiles.filter(b => tags.some(t => b.tags.includes(t)));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// --- Load nodes ---
|
|
59
|
+
let nodes = [];
|
|
60
|
+
for (const brain of brainFiles) {
|
|
61
|
+
const brainPath = path.join(BRAINS_DIR, '..', brain.path);
|
|
62
|
+
if (!fs.existsSync(brainPath)) {
|
|
63
|
+
process.stderr.write(`Warning: brain file not found: ${brainPath}\n`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const data = JSON.parse(fs.readFileSync(brainPath, 'utf8'));
|
|
67
|
+
nodes.push(...(data.nodes || []).map(n => ({ ...n, _brain: brain.id })));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// --- Filter nodes ---
|
|
71
|
+
if (ids.length > 0) {
|
|
72
|
+
nodes = nodes.filter(n => ids.includes(n.id));
|
|
73
|
+
} else {
|
|
74
|
+
if (tags.length > 0) {
|
|
75
|
+
if (matchMode === 'all') {
|
|
76
|
+
nodes = nodes.filter(n => tags.every(t => (n.tags || []).includes(t)));
|
|
77
|
+
} else {
|
|
78
|
+
nodes = nodes.filter(n => tags.some(t => (n.tags || []).includes(t)));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (minQ > 0) {
|
|
82
|
+
nodes = nodes.filter(n => (n.q || 0) >= minQ);
|
|
83
|
+
}
|
|
84
|
+
if (verdicts.length > 0) {
|
|
85
|
+
nodes = nodes.filter(n => verdicts.includes((n.v || '').toUpperCase()));
|
|
86
|
+
}
|
|
87
|
+
if (avoidOnly) {
|
|
88
|
+
nodes = nodes.filter(n => n.v === 'AVOID' || n.v === 'BROKEN');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// --- Output ---
|
|
93
|
+
if (format === 'compact') {
|
|
94
|
+
const rows = nodes.map(n => `[${n.q}★ ${n.v}] ${n.id} — ${n.title}\n ${n.s}`);
|
|
95
|
+
console.log(rows.join('\n\n') || '(no matches)');
|
|
96
|
+
} else if (format === 'ids') {
|
|
97
|
+
console.log(nodes.map(n => n.id).join('\n'));
|
|
98
|
+
} else {
|
|
99
|
+
console.log(JSON.stringify(nodes, null, 2));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// --- Stats footer ---
|
|
103
|
+
process.stderr.write(`\n${nodes.length} node(s) matched across ${brainFiles.length} brain file(s)\n`);
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
{
|
|
2
|
+
"v": 1,
|
|
3
|
+
"agent": "site-forge",
|
|
4
|
+
"domain": "visual-patterns",
|
|
5
|
+
"desc": "CSS/animation/interaction patterns discovered while cloning real sites. Each node is a reusable lesson — quality-scored and anti-pattern aware. Use see[] to traverse related nodes.",
|
|
6
|
+
"updated": "2026-04-01",
|
|
7
|
+
"nodes": [
|
|
8
|
+
{
|
|
9
|
+
"id": "css-001",
|
|
10
|
+
"title": "CTA hover: mix-blend-mode:difference",
|
|
11
|
+
"tags": ["css", "hover", "cta", "button", "animation", "no-js", "blend-mode"],
|
|
12
|
+
"q": 5,
|
|
13
|
+
"v": "EXCELLENT",
|
|
14
|
+
"s": "White ::after pseudo-element with mix-blend-mode:difference creates color inversion on hover. Zero JS. Works on any background color automatically.",
|
|
15
|
+
"p": ".btn{position:relative;overflow:hidden} .btn::after{content:'';position:absolute;inset:0;background:white;mix-blend-mode:difference;transform:scaleX(0);transform-origin:0;transition:transform .3s cubic-bezier(.645,.045,.355,1)} .btn:hover::after{transform:scaleX(1)}",
|
|
16
|
+
"src": "pt.squarespace.com",
|
|
17
|
+
"date": "2026-04-01",
|
|
18
|
+
"not": "background-color color transition on hover — color swap is weak compared to inversion effect",
|
|
19
|
+
"warn": "parent needs overflow:hidden; does not work if parent has background:transparent",
|
|
20
|
+
"see": ["css-002", "css-008"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "css-002",
|
|
24
|
+
"title": "Mobile menu: clip-path polygon() swipe",
|
|
25
|
+
"tags": ["css", "animation", "mobile", "menu", "drawer", "keyframes", "clip-path"],
|
|
26
|
+
"q": 5,
|
|
27
|
+
"v": "EXCELLENT",
|
|
28
|
+
"s": "Mobile drawer wipes in from right using clip-path polygon animation — more cinematic than translateX slide. Requires @keyframes swipeIn/swipeOut.",
|
|
29
|
+
"p": "@keyframes swipeIn{0%{clip-path:polygon(101% 0%,100% 0%,101% 100%,116% 100%)}to{clip-path:polygon(0% 0%,101% 0%,101% 101%,0% 101%)}} .menu--open{animation:.6s cubic-bezier(.165,.84,.44,1) forwards swipeIn}",
|
|
30
|
+
"src": "pt.squarespace.com",
|
|
31
|
+
"date": "2026-04-01",
|
|
32
|
+
"not": "transform:translateX(-100%) — generic slide, no visual drama",
|
|
33
|
+
"warn": "Menu must be position:fixed with full viewport size for clip-path to work correctly",
|
|
34
|
+
"see": ["css-001", "css-007"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "css-003",
|
|
38
|
+
"title": "Accordion: grid-template-rows 0fr→1fr",
|
|
39
|
+
"tags": ["css", "accordion", "animation", "no-js", "grid", "mobile"],
|
|
40
|
+
"q": 5,
|
|
41
|
+
"v": "EXCELLENT",
|
|
42
|
+
"s": "CSS grid transition on grid-template-rows animates height without any JS height calculation. Modern and smooth.",
|
|
43
|
+
"p": ".accordion-content{display:grid;grid-template-rows:0fr;transition:grid-template-rows .7s cubic-bezier(.165,.84,.44,1)} .accordion-content--open{grid-template-rows:1fr} .accordion-inner{overflow:hidden}",
|
|
44
|
+
"src": "pt.squarespace.com",
|
|
45
|
+
"date": "2026-04-01",
|
|
46
|
+
"not": "max-height hack or JS getBoundingClientRect height calculation",
|
|
47
|
+
"warn": "Inner child needs overflow:hidden for the 0fr collapse to work",
|
|
48
|
+
"see": ["css-007"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "css-004",
|
|
52
|
+
"title": "Link underline: dual linear-gradient background-position",
|
|
53
|
+
"tags": ["css", "hover", "link", "underline", "animation", "keyframes"],
|
|
54
|
+
"q": 5,
|
|
55
|
+
"v": "EXCELLENT",
|
|
56
|
+
"s": "Two linear-gradients animated via background-position create a sliding underline that enters from left on hover and exits to right on mouse-leave. Pure CSS.",
|
|
57
|
+
"p": ".link{background-image:linear-gradient(currentColor,currentColor),linear-gradient(currentColor,currentColor);background-size:100% 1px,0% 1px;background-repeat:no-repeat;background-position:-200% 100%,-100% 100%;animation:.5s cubic-bezier(.645,.045,.355,1) forwards ctaUnderlineSlideOut} .link:hover{animation:.5s cubic-bezier(.645,.045,.355,1) forwards ctaUnderlineSlideIn}",
|
|
58
|
+
"src": "pt.squarespace.com",
|
|
59
|
+
"date": "2026-04-01",
|
|
60
|
+
"not": "text-decoration or border-bottom — no directional animation possible",
|
|
61
|
+
"warn": "Requires @keyframes ctaUnderlineSlideIn/Out; currentColor inherits from text color automatically",
|
|
62
|
+
"see": ["css-001", "css-007"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "css-005",
|
|
66
|
+
"title": "Scroll reveal: IntersectionObserver + CSS class toggle",
|
|
67
|
+
"tags": ["css", "scroll", "reveal", "animation", "no-js-lib", "intersection-observer"],
|
|
68
|
+
"q": 5,
|
|
69
|
+
"v": "EXCELLENT",
|
|
70
|
+
"s": "IntersectionObserver adds .in-view class at 15% threshold; CSS transition handles opacity+translateY. Zero third-party libraries needed.",
|
|
71
|
+
"p": "// JS: const obs=new IntersectionObserver(entries=>entries.forEach(e=>e.isIntersecting&&e.target.classList.add('in-view')),{threshold:.15}); document.querySelectorAll('.reveal').forEach(el=>obs.observe(el)); // CSS: .reveal{opacity:0;transform:translateY(16px);transition:opacity .8s cubic-bezier(.23,1,.32,1),transform .8s cubic-bezier(.23,1,.32,1)} .reveal.in-view{opacity:1;transform:none}",
|
|
72
|
+
"src": "pt.squarespace.com",
|
|
73
|
+
"date": "2026-04-01",
|
|
74
|
+
"not": "AOS library, ScrollReveal, GSAP ScrollTrigger for basic fade-up reveals — overkill",
|
|
75
|
+
"warn": "threshold:0.15 is the sweet spot; too low fires too early, too high never fires on short sections",
|
|
76
|
+
"see": ["css-007", "css-008"]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "css-006",
|
|
80
|
+
"title": "Staggered card reveals with nth-child delay",
|
|
81
|
+
"tags": ["css", "animation", "stagger", "cards", "scroll", "reveal"],
|
|
82
|
+
"q": 4,
|
|
83
|
+
"v": "GOOD",
|
|
84
|
+
"s": "Add transition-delay via nth-child selectors on .reveal-stagger children. 0.1s increments per card.",
|
|
85
|
+
"p": ".reveal-stagger>*:nth-child(1){transition-delay:0s} .reveal-stagger>*:nth-child(2){transition-delay:.1s} .reveal-stagger>*:nth-child(3){transition-delay:.2s} .reveal-stagger>*:nth-child(4){transition-delay:.3s} .reveal-stagger>*:nth-child(5){transition-delay:.4s}",
|
|
86
|
+
"src": "pt.squarespace.com",
|
|
87
|
+
"date": "2026-04-01",
|
|
88
|
+
"not": null,
|
|
89
|
+
"warn": "Keep delays short (0.1s increments); longer delays feel sluggish",
|
|
90
|
+
"see": ["css-005"]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "css-007",
|
|
94
|
+
"title": "Squarespace signature easing curves",
|
|
95
|
+
"tags": ["css", "easing", "animation", "cubic-bezier", "tokens"],
|
|
96
|
+
"q": 5,
|
|
97
|
+
"v": "EXCELLENT",
|
|
98
|
+
"s": "Three distinct easing curves used consistently: reveal=smooth deceleration, cta=power ease, menu=fast-in/slow-out. Gives a unified, professional motion feel.",
|
|
99
|
+
"p": "--ease-sqsp-reveal:cubic-bezier(.23,1,.32,1); --ease-sqsp-cta:cubic-bezier(.645,.045,.355,1); --ease-sqsp-menu:cubic-bezier(.165,.84,.44,1)",
|
|
100
|
+
"src": "pt.squarespace.com",
|
|
101
|
+
"date": "2026-04-01",
|
|
102
|
+
"not": "ease, ease-in-out, linear — generic curves flatten the personality of the site",
|
|
103
|
+
"warn": null,
|
|
104
|
+
"see": ["css-001", "css-002", "css-003", "css-004", "css-005"]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "css-008",
|
|
108
|
+
"title": "prefers-reduced-motion global override",
|
|
109
|
+
"tags": ["css", "accessibility", "animation", "best-practice"],
|
|
110
|
+
"q": 5,
|
|
111
|
+
"v": "BEST_PRACTICE",
|
|
112
|
+
"s": "Global @media prefers-reduced-motion override that collapses all durations to 0.01ms. Always include in globals.css — never skip.",
|
|
113
|
+
"p": "@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}",
|
|
114
|
+
"src": "pt.squarespace.com",
|
|
115
|
+
"date": "2026-04-01",
|
|
116
|
+
"not": null,
|
|
117
|
+
"warn": null,
|
|
118
|
+
"see": ["css-005"]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "css-009",
|
|
122
|
+
"title": "Video background: autoPlay muted loop playsInline",
|
|
123
|
+
"tags": ["css", "video", "background", "hero", "mobile"],
|
|
124
|
+
"q": 4,
|
|
125
|
+
"v": "GOOD",
|
|
126
|
+
"s": "Hero video must have all 4 attributes to autoplay cross-browser. WebM first, MP4 fallback. Dark rgba overlay on top. Mobile swap via useEffect.",
|
|
127
|
+
"p": "<video autoplay muted loop playsinline preload=auto><source src=desktop.webm type=video/webm><source src=desktop.mp4 type=video/mp4></video><div style=position:absolute;inset:0;background:rgba(0,0,0,.52)></div>",
|
|
128
|
+
"src": "pt.squarespace.com",
|
|
129
|
+
"date": "2026-04-01",
|
|
130
|
+
"not": "Using background-image: url() for video — use the real <video> element",
|
|
131
|
+
"warn": "Card carousel videos use preload=none; only hero is preload=auto",
|
|
132
|
+
"see": ["css-005"]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "js-001",
|
|
136
|
+
"title": "Extract @keyframes via document.styleSheets iteration",
|
|
137
|
+
"tags": ["js", "extraction", "keyframes", "css", "cloning", "analysis"],
|
|
138
|
+
"q": 5,
|
|
139
|
+
"v": "EXCELLENT",
|
|
140
|
+
"s": "Iterate document.styleSheets and cssRules to extract @keyframes verbatim. This is the ONLY way to get actual @keyframes — getComputedStyle never exposes them.",
|
|
141
|
+
"p": "const kf=[]; for(const s of document.styleSheets){try{for(const r of s.cssRules){if(r instanceof CSSKeyframesRule){kf.push({name:r.name,css:r.cssText})}}}catch(e){}} console.log(JSON.stringify(kf))",
|
|
142
|
+
"src": "research — pt.squarespace.com analysis",
|
|
143
|
+
"date": "2026-04-01",
|
|
144
|
+
"not": "getComputedStyle(el).animation — returns resolved shorthand, never exposes @keyframes definitions",
|
|
145
|
+
"warn": "CORS will throw on cross-origin stylesheets — wrap in try/catch per sheet",
|
|
146
|
+
"see": ["js-002", "js-003"]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "js-002",
|
|
150
|
+
"title": "MutationObserver scroll recording for DOM class changes",
|
|
151
|
+
"tags": ["js", "extraction", "cloning", "scroll", "animation", "mutationobserver"],
|
|
152
|
+
"q": 5,
|
|
153
|
+
"v": "EXCELLENT",
|
|
154
|
+
"s": "Attach MutationObserver BEFORE starting scroll; record mutations at 8 checkpoints (0%, 12%, 25%, 37%, 50%, 62%, 75%, 87%, 100%). Each record: scrollY + changed elements + class diffs.",
|
|
155
|
+
"p": "const mutations=[]; const obs=new MutationObserver(ms=>ms.forEach(m=>{mutations.push({scrollY:window.scrollY,target:m.target.className,added:[...m.addedNodes].map(n=>n.className),attr:m.attributeName,old:m.oldValue})})); obs.observe(document.body,{subtree:true,attributes:true,attributeOldValue:true,childList:true}); // then scroll to each % checkpoint with 600ms settle",
|
|
156
|
+
"src": "research — pt.squarespace.com analysis",
|
|
157
|
+
"date": "2026-04-01",
|
|
158
|
+
"not": "Manual screenshot comparison — misses class toggles and DOM mutations",
|
|
159
|
+
"warn": "600ms settle time needed after each scroll to let animations complete",
|
|
160
|
+
"see": ["js-001", "js-003"]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "js-003",
|
|
164
|
+
"title": "AVOID: getComputedStyle for animation detection",
|
|
165
|
+
"tags": ["js", "extraction", "animation", "anti-pattern"],
|
|
166
|
+
"q": 1,
|
|
167
|
+
"v": "AVOID",
|
|
168
|
+
"s": "getComputedStyle returns resolved property values — it NEVER exposes @keyframes definitions, animation timing functions are partially resolved, clip-path values may differ from source.",
|
|
169
|
+
"p": "// BAD: getComputedStyle(el).animationName → returns name only, not keyframes // BAD: getComputedStyle(el).clipPath → returns computed polygon(), but not the @keyframes that drives it",
|
|
170
|
+
"src": "research — pt.squarespace.com analysis",
|
|
171
|
+
"date": "2026-04-01",
|
|
172
|
+
"not": null,
|
|
173
|
+
"warn": "Use document.styleSheets iteration (js-001) to get real @keyframes definitions",
|
|
174
|
+
"see": ["js-001", "js-002"]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "js-004",
|
|
178
|
+
"title": "JS library detection before choosing animation strategy",
|
|
179
|
+
"tags": ["js", "cloning", "gsap", "framer-motion", "animation", "detection"],
|
|
180
|
+
"q": 5,
|
|
181
|
+
"v": "EXCELLENT",
|
|
182
|
+
"s": "Always check window.gsap, window.ScrollTrigger, data-framer-component-type before choosing animation implementation. Wrong library choice creates double-animation or no-animation bugs.",
|
|
183
|
+
"p": "const libs={gsap:!!window.gsap,scrollTrigger:!!window.ScrollTrigger,framer:!!document.querySelector('[data-framer-component-type]'),lottie:!!window.lottie,aos:!!window.AOS}",
|
|
184
|
+
"src": "research — pt.squarespace.com analysis",
|
|
185
|
+
"date": "2026-04-01",
|
|
186
|
+
"not": "Defaulting to IntersectionObserver when GSAP is detected on the source site",
|
|
187
|
+
"warn": "Site not using GSAP does NOT mean IntersectionObserver is the right choice — read the actual @keyframes first",
|
|
188
|
+
"see": ["js-001", "js-002", "css-005"]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "font-001",
|
|
192
|
+
"title": "Proprietary fonts: extract woff2 from saved site, serve locally",
|
|
193
|
+
"tags": ["font", "typography", "woff2", "cloning", "font-face"],
|
|
194
|
+
"q": 4,
|
|
195
|
+
"v": "GOOD",
|
|
196
|
+
"s": "When site uses proprietary font (CDN-blocked), extract woff2 files from the saved site's fonts/ directory. Serve via @font-face pointing to public/fonts/. Reference assets only — rewrite content.",
|
|
197
|
+
"p": "@font-face{font-family:'Clarkson';font-weight:300;font-display:swap;src:url('/fonts/clarkson-300.woff2') format('woff2')}",
|
|
198
|
+
"src": "pt.squarespace.com",
|
|
199
|
+
"date": "2026-04-01",
|
|
200
|
+
"not": "Trying to load proprietary fonts from CDN — 403 in production",
|
|
201
|
+
"warn": "Reference assets only — do not redistribute proprietary font files in public projects",
|
|
202
|
+
"see": []
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
}
|
|
@@ -25,6 +25,21 @@ Ranges:
|
|
|
25
25
|
- 2-3: SMALL
|
|
26
26
|
- 4-6: MEDIUM
|
|
27
27
|
|
|
28
|
+
## Context budget warning
|
|
29
|
+
|
|
30
|
+
Configuração: `context_warning_threshold` (padrão: 65%)
|
|
31
|
+
|
|
32
|
+
| Classificação | Threshold recomendado |
|
|
33
|
+
|---------------|-----------------------|
|
|
34
|
+
| MICRO | 75% (fases curtas, ok chegar mais alto) |
|
|
35
|
+
| SMALL | 65% (padrão) |
|
|
36
|
+
| MEDIUM | 55% (fases longas, aviso mais cedo) |
|
|
37
|
+
|
|
38
|
+
Quando o agente perceber que está próximo do threshold:
|
|
39
|
+
1. Escrever todos os artefatos em progresso (disk‑first)
|
|
40
|
+
2. Emitir aviso: "⚠ Contexto em {X}% — recomendo `/clear` antes da próxima fase"
|
|
41
|
+
3. Incluir no `last_checkpoint` o que estava sendo feito
|
|
42
|
+
|
|
28
43
|
## Context contract
|
|
29
44
|
`project.context.md` must contain YAML frontmatter with:
|
|
30
45
|
- `project_name`
|
|
@@ -89,34 +104,62 @@ In direct mode (LLM without CLI), agents call them manually following the rules
|
|
|
89
104
|
When the `aioson` CLI is **not available**, agents must write a devlog file at the end of the session (or when the user asks to save progress). This is the only way to preserve session history for the dashboard when the CLI is missing.
|
|
90
105
|
|
|
91
106
|
**Directory:** `aioson-logs/` (create if absent)
|
|
92
|
-
**Filename:** `devlog-{
|
|
93
|
-
**If a devlog from today already exists:** append to it instead of creating a new file.
|
|
107
|
+
**Filename:** `devlog-{agent}-{unix-timestamp}.md`
|
|
94
108
|
|
|
95
109
|
**Template:**
|
|
96
110
|
```markdown
|
|
97
111
|
---
|
|
98
|
-
agent:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
agent: dev
|
|
113
|
+
feature: {feature-slug or "project"}
|
|
114
|
+
session_key: direct-session:{unix-timestamp}:{agent}
|
|
115
|
+
started_at: {ISO 8601}
|
|
116
|
+
finished_at: {ISO 8601}
|
|
117
|
+
status: completed
|
|
118
|
+
verdict: null
|
|
119
|
+
plan_step: null
|
|
103
120
|
---
|
|
104
121
|
|
|
122
|
+
# Devlog: @{agent} — {feature} — {YYYY-MM-DD}
|
|
123
|
+
|
|
124
|
+
## Summary
|
|
125
|
+
{One sentence of what was accomplished.}
|
|
126
|
+
|
|
127
|
+
## Artifacts
|
|
128
|
+
- {path/to/file.ext}
|
|
129
|
+
|
|
105
130
|
## Decisions
|
|
106
131
|
- {decision} → {why}
|
|
107
132
|
|
|
108
|
-
##
|
|
109
|
-
-
|
|
133
|
+
## Learnings
|
|
134
|
+
- [process] {any process learning from this session}
|
|
135
|
+
- [domain] {any domain learning}
|
|
136
|
+
|
|
137
|
+
## Blockers
|
|
138
|
+
- {blocker or "None"}
|
|
139
|
+
```
|
|
110
140
|
|
|
111
|
-
|
|
112
|
-
|
|
141
|
+
**Minimum viable devlog (if session was cut short):**
|
|
142
|
+
```markdown
|
|
143
|
+
---
|
|
144
|
+
agent: {agent}
|
|
145
|
+
feature: {slug}
|
|
146
|
+
status: partial
|
|
147
|
+
started_at: {ISO 8601}
|
|
148
|
+
finished_at: {ISO 8601}
|
|
149
|
+
---
|
|
150
|
+
# Devlog: @{agent} — {feature} — {date}
|
|
151
|
+
## Summary
|
|
152
|
+
{one sentence of what was done}
|
|
153
|
+
## Learnings
|
|
154
|
+
- [process] {any process learning}
|
|
113
155
|
```
|
|
114
156
|
|
|
115
157
|
**Rules:**
|
|
116
|
-
-
|
|
158
|
+
- Frontmatter fields `agent`, `started_at`, `finished_at` are required. All others are optional.
|
|
159
|
+
- `[process]` / `[domain]` / `[quality]` / `[preference]` prefixes in Learnings enable automatic promotion to project memory.
|
|
117
160
|
- Record **why** decisions were made — the "what" is in the git diff.
|
|
118
161
|
- Skip the devlog for trivial sessions (quick questions, no code changes).
|
|
119
|
-
- When the CLI becomes available
|
|
162
|
+
- When the CLI becomes available: `aioson devlog:process .` imports devlogs into SQLite (learnings, artifacts, decisions, verdict).
|
|
120
163
|
|
|
121
164
|
## On-demand context layers
|
|
122
165
|
|
|
@@ -228,6 +271,108 @@ When a workflow stage completes or an agent finishes via `runtime-log --finish`,
|
|
|
228
271
|
|
|
229
272
|
Agents can read this file on activation to resume work without losing context between sessions.
|
|
230
273
|
|
|
274
|
+
## Context compaction template
|
|
275
|
+
|
|
276
|
+
When approaching context threshold, any agent can write a structured checkpoint to
|
|
277
|
+
`.aioson/context/last-handoff.json` before compacting:
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"agent": "<agent-name>",
|
|
282
|
+
"session_summary": {
|
|
283
|
+
"messages_processed": "<N>",
|
|
284
|
+
"tools_used": ["<tool1>", "<tool2>"],
|
|
285
|
+
"recent_requests": ["<last 3 user requests>"],
|
|
286
|
+
"pending_work": ["<item1>", "<item2>"],
|
|
287
|
+
"key_files": ["<path1>", "<path2>"],
|
|
288
|
+
"timeline": ["<step1 done>", "<step2 done>"]
|
|
289
|
+
},
|
|
290
|
+
"compacted_at": "<ISO 8601>",
|
|
291
|
+
"resume_instruction": "Continue from this summary. Do not acknowledge it."
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
After writing, prepend to the next response:
|
|
296
|
+
`[Context compacted — resuming from checkpoint]`
|
|
297
|
+
|
|
298
|
+
On resume: read `last-handoff.json` before loading any other context file.
|
|
299
|
+
|
|
300
|
+
Agents with dedicated compaction protocols (e.g. `@orache`) define additional
|
|
301
|
+
steps in their own files — this template is the shared baseline.
|
|
302
|
+
|
|
303
|
+
## Hook contract (PreToolUse / PostToolUse)
|
|
304
|
+
|
|
305
|
+
Hooks are shell scripts configured in `.claude/settings.json` under `hooks`.
|
|
306
|
+
The harness passes context via stdin (JSON) and environment variables.
|
|
307
|
+
|
|
308
|
+
### Exit codes
|
|
309
|
+
| Code | Meaning |
|
|
310
|
+
|------|---------|
|
|
311
|
+
| 0 | Allow — continue tool execution |
|
|
312
|
+
| 2 | Deny — block tool, return message to agent |
|
|
313
|
+
| other non-zero | Warn — log warning, continue execution |
|
|
314
|
+
|
|
315
|
+
### Environment variables
|
|
316
|
+
| Variable | Description |
|
|
317
|
+
|----------|-------------|
|
|
318
|
+
| `HOOK_EVENT` | `PreToolUse` or `PostToolUse` |
|
|
319
|
+
| `HOOK_TOOL_NAME` | Tool being executed (e.g. `Bash`, `Write`) |
|
|
320
|
+
| `HOOK_TOOL_INPUT` | JSON params of the tool call |
|
|
321
|
+
| `HOOK_TOOL_IS_ERROR` | `true`/`false` (PostToolUse only) |
|
|
322
|
+
| `HOOK_TOOL_OUTPUT` | Tool output (PostToolUse only) |
|
|
323
|
+
|
|
324
|
+
### Example: block rm -rf in Bash
|
|
325
|
+
```bash
|
|
326
|
+
#!/bin/bash
|
|
327
|
+
INPUT=$(cat)
|
|
328
|
+
if echo "$INPUT" | grep -q "rm -rf"; then
|
|
329
|
+
echo "Blocked: rm -rf not allowed in this project"
|
|
330
|
+
exit 2
|
|
331
|
+
fi
|
|
332
|
+
exit 0
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Agent file size guidelines
|
|
336
|
+
|
|
337
|
+
The Claude Code harness enforces a hard limit of ~4,000 chars per auto-loaded
|
|
338
|
+
instruction file (`CLAUDE.md` hierarchy). Files are truncated silently.
|
|
339
|
+
Agent files in `.aioson/agents/` are read manually (not auto-loaded) so they
|
|
340
|
+
are not subject to this truncation, but large files consume context budget.
|
|
341
|
+
|
|
342
|
+
Recommended targets:
|
|
343
|
+
|
|
344
|
+
| File type | Target | Notes |
|
|
345
|
+
|-----------|--------|-------|
|
|
346
|
+
| `CLAUDE.md` / `AGENTS.md` | ≤ 3,500 chars | Auto-loaded — hard truncation applies |
|
|
347
|
+
| Focused agents (analyst, qa, tester) | ≤ 8,000 chars | Keep lean |
|
|
348
|
+
| Generalist agents (dev, architect) | ≤ 15,000 chars | Move optional sections to `.aioson/docs/` |
|
|
349
|
+
| Orchestrator agents (orchestrator, squad) | ≤ 12,000 chars | Move boilerplate to `.aioson/rules/` |
|
|
350
|
+
|
|
351
|
+
When an agent file exceeds its target:
|
|
352
|
+
1. Move repeated boilerplate to a shared `.aioson/rules/` file
|
|
353
|
+
2. Split optional sections into `.aioson/docs/` files (loaded on demand)
|
|
354
|
+
3. Use the "On-demand context layers" pattern from this config
|
|
355
|
+
|
|
356
|
+
## Config tiers
|
|
357
|
+
|
|
358
|
+
AIOSON supports three config tiers (precedence: local > project > user):
|
|
359
|
+
|
|
360
|
+
| Tier | Location | Versioned | Purpose |
|
|
361
|
+
|------|----------|-----------|---------|
|
|
362
|
+
| User | `~/.aioson/config.md` | No | Personal defaults (model, locale, thresholds) |
|
|
363
|
+
| Project | `.aioson/config.md` | Yes | Team standards — source of truth |
|
|
364
|
+
| Local | `.aioson/config.local.md` | No | Machine overrides (local paths, env specifics) |
|
|
365
|
+
|
|
366
|
+
When the same setting exists in multiple tiers, the lower tier wins (local > project > user).
|
|
367
|
+
|
|
368
|
+
**Current support:**
|
|
369
|
+
- Project tier: fully supported (this file)
|
|
370
|
+
- Local tier: `config.local.md` is the convention — agents can read it if present
|
|
371
|
+
- User tier (`~/.aioson/config.md`): **backlog** — requires CLI support; not yet read automatically
|
|
372
|
+
|
|
373
|
+
Until the user tier is implemented in the CLI, use `CLAUDE.local.md` for personal
|
|
374
|
+
preferences that should not affect other team members.
|
|
375
|
+
|
|
231
376
|
## Agent locale packs
|
|
232
377
|
- Localized agent prompts are stored in `.aioson/locales/<locale>/agents/`.
|
|
233
378
|
- Active runtime prompts are in `.aioson/agents/`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
ratified: 2026-04-04
|
|
4
|
+
last_amended: 2026-04-04
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AIOSON Constitution
|
|
8
|
+
|
|
9
|
+
> Principles that govern all agents, all classifications, all sessions.
|
|
10
|
+
> Every agent may cite these articles. No agent may override them.
|
|
11
|
+
|
|
12
|
+
## Article I — Spec First
|
|
13
|
+
Features begin as specifications, not code. Implementation without a spec artifact is exploration, not development.
|
|
14
|
+
|
|
15
|
+
## Article II — Right-Sized Process
|
|
16
|
+
MICRO, SMALL, and MEDIUM must not receive the same process depth. Applying MEDIUM ceremony to a MICRO project wastes more than it protects.
|
|
17
|
+
|
|
18
|
+
## Article III — Observable Work
|
|
19
|
+
Important agent actions leave visible artifacts or runtime signals. Work that exists only in conversation history is work that can be lost.
|
|
20
|
+
|
|
21
|
+
## Article IV — Testable Behavior
|
|
22
|
+
Acceptance criteria must be independently verifiable. "Works correctly" is not a criterion. "Returns 403 when user A accesses user B's resource" is.
|
|
23
|
+
|
|
24
|
+
## Article V — Clean Handoffs
|
|
25
|
+
Artifacts must be self-contained enough for the next agent to start without re-reading the full discovery chain. If the next agent needs to ask "where do I start?", the handoff failed.
|
|
26
|
+
|
|
27
|
+
## Article VI — Simplicity Over Ceremony
|
|
28
|
+
Do not add layers, files, or workflows unless they reduce downstream ambiguity. Three similar lines of code is better than a premature abstraction. One well-written spec is better than five thin artifacts.
|
|
29
|
+
|
|
30
|
+
## Governance
|
|
31
|
+
- Amendments require explicit user approval
|
|
32
|
+
- Articles are numbered, not named — never renumber existing articles
|
|
33
|
+
- New articles are appended, never inserted
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
updated_at: null
|
|
3
|
+
last_agent: null
|
|
4
|
+
last_gate: null
|
|
5
|
+
active_features: 0
|
|
6
|
+
blocked: false
|
|
7
|
+
blocked_reason: null
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Project Pulse
|
|
11
|
+
|
|
12
|
+
> Global project state. Updated by every agent at session end.
|
|
13
|
+
> Read this FIRST when starting any session to orient quickly.
|
|
14
|
+
> Max 30 lines of content — trim older entries when growing beyond that.
|
|
15
|
+
|
|
16
|
+
## Active work
|
|
17
|
+
|
|
18
|
+
| Feature | Phase | Agent | Status | Last checkpoint |
|
|
19
|
+
|---------|-------|-------|--------|-----------------|
|
|
20
|
+
| — | — | — | — | — |
|
|
21
|
+
|
|
22
|
+
## Recent activity (last 3 sessions)
|
|
23
|
+
|
|
24
|
+
| Date | Agent | Action | Result |
|
|
25
|
+
|------|-------|--------|--------|
|
|
26
|
+
| — | — | — | — |
|
|
27
|
+
|
|
28
|
+
## Blockers
|
|
29
|
+
|
|
30
|
+
None.
|
|
31
|
+
|
|
32
|
+
## Next recommended action
|
|
33
|
+
|
|
34
|
+
No active work. Start with `@product` for a new feature or `@setup` for a new project.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
slug: example
|
|
3
|
+
title: Exemplo de seed — substitua com sua ideia
|
|
4
|
+
created: {ISO-date}
|
|
5
|
+
trigger: ao iniciar milestone de {feature relacionada}
|
|
6
|
+
scope_estimate: MICRO
|
|
7
|
+
status: dormant
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Ideia
|
|
11
|
+
|
|
12
|
+
Descreva a ideia em 2-5 linhas. O que seria implementado e qual valor entregaria.
|
|
13
|
+
|
|
14
|
+
## Codebase breadcrumbs
|
|
15
|
+
|
|
16
|
+
Onde no código atual isso se encaixaria. O que existiria ou seria modificado.
|
|
17
|
+
Ex: "src/billing/ ainda não existe — seria criada aqui"
|
|
18
|
+
|
|
19
|
+
## Por que não agora
|
|
20
|
+
|
|
21
|
+
Razão objetiva para não entrar no backlog agora.
|
|
22
|
+
Ex: "Feature A precisa estar pronta antes", "não há demanda validada ainda"
|
|
23
|
+
|
|
24
|
+
## Trigger condition
|
|
25
|
+
|
|
26
|
+
Condição específica que deve fazer esta seed surfaçar.
|
|
27
|
+
Ex: "quando iniciar milestone de pagamentos", "quando usuários pedirem 3+ vezes"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: {ISO-date}
|
|
3
|
+
last_updated: {ISO-date}
|
|
4
|
+
questionnaire_completed: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Developer Profile
|
|
8
|
+
|
|
9
|
+
## Communication style
|
|
10
|
+
<!-- direto | equilibrado | explicativo -->
|
|
11
|
+
preference: equilibrado
|
|
12
|
+
|
|
13
|
+
## Decision style
|
|
14
|
+
<!-- opções-com-tradeoffs | recomendacao-unica | depende-do-contexto -->
|
|
15
|
+
preference: depende-do-contexto
|
|
16
|
+
|
|
17
|
+
## Tech philosophy
|
|
18
|
+
<!-- explícito | convencional | pragmatico -->
|
|
19
|
+
preference: pragmatico
|
|
20
|
+
|
|
21
|
+
## Autonomy preference
|
|
22
|
+
<!-- aprovacao-por-step | aprovacao-em-gates | execucao-autonoma -->
|
|
23
|
+
preference: aprovacao-em-gates
|
|
24
|
+
|
|
25
|
+
## Feedback style
|
|
26
|
+
<!-- critica-direta | colaborativo | neutro -->
|
|
27
|
+
preference: neutro
|
|
28
|
+
|
|
29
|
+
## Scope tolerance
|
|
30
|
+
<!-- strict | sugestoes-ok | flexible -->
|
|
31
|
+
preference: sugestoes-ok
|
|
32
|
+
|
|
33
|
+
## Detail level
|
|
34
|
+
<!-- so-resultado | contexto-quando-relevante | sempre-explicar -->
|
|
35
|
+
preference: contexto-quando-relevante
|
|
36
|
+
|
|
37
|
+
## Risk tolerance
|
|
38
|
+
<!-- conservador | equilibrado | arrojado -->
|
|
39
|
+
preference: equilibrado
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
<!-- observações específicas do usuário sobre preferências -->
|