aios-core 4.2.15 → 4.4.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/.aios-core/cli/commands/validate/index.js +1 -1
- package/.aios-core/core/code-intel/code-intel-client.js +19 -5
- package/.aios-core/core/code-intel/helpers/creation-helper.js +183 -0
- package/.aios-core/core/code-intel/helpers/devops-helper.js +166 -0
- package/.aios-core/core/code-intel/helpers/planning-helper.js +248 -0
- package/.aios-core/core/code-intel/helpers/qa-helper.js +187 -0
- package/.aios-core/core/code-intel/helpers/story-helper.js +146 -0
- package/.aios-core/core/code-intel/hook-runtime.js +186 -0
- package/.aios-core/core/code-intel/index.js +2 -0
- package/.aios-core/core/code-intel/providers/code-graph-provider.js +8 -0
- package/.aios-core/core/code-intel/providers/provider-interface.js +9 -0
- package/.aios-core/core/code-intel/providers/registry-provider.js +515 -0
- package/.aios-core/core/config/schemas/framework-config.schema.json +155 -7
- package/.aios-core/core/config/schemas/project-config.schema.json +329 -15
- package/.aios-core/core/config/template-overrides.js +84 -0
- package/.aios-core/core/docs/troubleshooting-guide.md +1 -1
- package/.aios-core/core/doctor/checks/agent-memory.js +63 -0
- package/.aios-core/core/doctor/checks/claude-md.js +56 -0
- package/.aios-core/core/doctor/checks/code-intel.js +131 -0
- package/.aios-core/core/doctor/checks/commands-count.js +81 -0
- package/.aios-core/core/doctor/checks/core-config.js +53 -0
- package/.aios-core/core/doctor/checks/entity-registry.js +53 -0
- package/.aios-core/core/doctor/checks/git-hooks.js +50 -0
- package/.aios-core/core/doctor/checks/graph-dashboard.js +48 -0
- package/.aios-core/core/doctor/checks/hooks-claude-count.js +118 -0
- package/.aios-core/core/doctor/checks/ide-sync.js +85 -0
- package/.aios-core/core/doctor/checks/index.js +46 -0
- package/.aios-core/core/doctor/checks/node-version.js +33 -0
- package/.aios-core/core/doctor/checks/npm-packages.js +35 -0
- package/.aios-core/core/doctor/checks/rules-files.js +61 -0
- package/.aios-core/core/doctor/checks/settings-json.js +121 -0
- package/.aios-core/core/doctor/checks/skills-count.js +72 -0
- package/.aios-core/core/doctor/fix-handler.js +165 -0
- package/.aios-core/core/doctor/formatters/json.js +14 -0
- package/.aios-core/core/doctor/formatters/text.js +59 -0
- package/.aios-core/core/doctor/index.js +94 -0
- package/.aios-core/core/graph-dashboard/cli.js +361 -0
- package/.aios-core/core/graph-dashboard/data-sources/code-intel-source.js +234 -0
- package/.aios-core/core/graph-dashboard/data-sources/metrics-source.js +95 -0
- package/.aios-core/core/graph-dashboard/data-sources/registry-source.js +106 -0
- package/.aios-core/core/graph-dashboard/formatters/dot-formatter.js +45 -0
- package/.aios-core/core/graph-dashboard/formatters/html-formatter.js +1437 -0
- package/.aios-core/core/graph-dashboard/formatters/json-formatter.js +13 -0
- package/.aios-core/core/graph-dashboard/formatters/mermaid-formatter.js +59 -0
- package/.aios-core/core/graph-dashboard/index.js +21 -0
- package/.aios-core/core/graph-dashboard/renderers/stats-renderer.js +217 -0
- package/.aios-core/core/graph-dashboard/renderers/status-renderer.js +125 -0
- package/.aios-core/core/graph-dashboard/renderers/tree-renderer.js +119 -0
- package/.aios-core/core/health-check/base-check.js +1 -1
- package/.aios-core/core/health-check/check-registry.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/build-config.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/ci-config.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/deployment-readiness.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/docker-config.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/env-file.js +1 -1
- package/.aios-core/core/health-check/checks/deployment/index.js +1 -1
- package/.aios-core/core/health-check/checks/index.js +1 -1
- package/.aios-core/core/health-check/checks/local/disk-space.js +1 -1
- package/.aios-core/core/health-check/checks/local/environment-vars.js +1 -1
- package/.aios-core/core/health-check/checks/local/git-install.js +1 -1
- package/.aios-core/core/health-check/checks/local/ide-detection.js +1 -1
- package/.aios-core/core/health-check/checks/local/index.js +1 -1
- package/.aios-core/core/health-check/checks/local/memory.js +1 -1
- package/.aios-core/core/health-check/checks/local/network.js +1 -1
- package/.aios-core/core/health-check/checks/local/npm-install.js +1 -1
- package/.aios-core/core/health-check/checks/local/shell-environment.js +1 -1
- package/.aios-core/core/health-check/checks/project/agent-config.js +1 -1
- package/.aios-core/core/health-check/checks/project/aios-directory.js +1 -1
- package/.aios-core/core/health-check/checks/project/dependencies.js +1 -1
- package/.aios-core/core/health-check/checks/project/framework-config.js +1 -1
- package/.aios-core/core/health-check/checks/project/index.js +1 -1
- package/.aios-core/core/health-check/checks/project/node-version.js +1 -1
- package/.aios-core/core/health-check/checks/project/package-json.js +1 -1
- package/.aios-core/core/health-check/checks/project/task-definitions.js +1 -1
- package/.aios-core/core/health-check/checks/project/workflow-dependencies.js +1 -1
- package/.aios-core/core/health-check/checks/repository/branch-protection.js +1 -1
- package/.aios-core/core/health-check/checks/repository/commit-history.js +1 -1
- package/.aios-core/core/health-check/checks/repository/conflicts.js +1 -1
- package/.aios-core/core/health-check/checks/repository/git-repo.js +1 -1
- package/.aios-core/core/health-check/checks/repository/git-status.js +1 -1
- package/.aios-core/core/health-check/checks/repository/gitignore.js +1 -1
- package/.aios-core/core/health-check/checks/repository/index.js +1 -1
- package/.aios-core/core/health-check/checks/repository/large-files.js +1 -1
- package/.aios-core/core/health-check/checks/repository/lockfile-integrity.js +1 -1
- package/.aios-core/core/health-check/checks/services/api-endpoints.js +1 -1
- package/.aios-core/core/health-check/checks/services/claude-code.js +1 -1
- package/.aios-core/core/health-check/checks/services/gemini-cli.js +1 -1
- package/.aios-core/core/health-check/checks/services/github-cli.js +1 -1
- package/.aios-core/core/health-check/checks/services/index.js +1 -1
- package/.aios-core/core/health-check/checks/services/mcp-integration.js +1 -1
- package/.aios-core/core/health-check/engine.js +1 -1
- package/.aios-core/core/health-check/healers/backup-manager.js +1 -1
- package/.aios-core/core/health-check/healers/index.js +1 -1
- package/.aios-core/core/health-check/index.js +9 -2
- package/.aios-core/core/health-check/reporters/console.js +1 -1
- package/.aios-core/core/health-check/reporters/index.js +1 -1
- package/.aios-core/core/health-check/reporters/json.js +1 -1
- package/.aios-core/core/health-check/reporters/markdown.js +1 -1
- package/.aios-core/core/ids/layer-classifier.js +65 -0
- package/.aios-core/core/ids/registry-updater.js +49 -0
- package/.aios-core/core/index.esm.js +1 -1
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/session/context-detector.js +2 -7
- package/.aios-core/core/synapse/context/context-tracker.js +9 -1
- package/.aios-core/core/synapse/engine.js +33 -13
- package/.aios-core/core/synapse/memory/memory-bridge.js +17 -43
- package/.aios-core/core/synapse/memory/synapse-memory-provider.js +201 -0
- package/.aios-core/core/synapse/runtime/hook-runtime.js +40 -2
- package/.aios-core/core/synapse/session/session-manager.js +3 -2
- package/.aios-core/core/synapse/utils/atomic-write.js +79 -0
- package/.aios-core/core-config.yaml +34 -1
- package/.aios-core/data/aios-kb.md +2 -2
- package/.aios-core/data/capability-detection.js +290 -0
- package/.aios-core/data/entity-registry.yaml +10450 -2129
- package/.aios-core/data/mcp-discipline.js +166 -0
- package/.aios-core/data/mcp-tool-examples.yaml +215 -0
- package/.aios-core/data/tok2-validation.js +168 -0
- package/.aios-core/data/tok3-token-comparison.js +123 -0
- package/.aios-core/data/tool-registry.yaml +648 -0
- package/.aios-core/data/tool-search-validation.js +174 -0
- package/.aios-core/data/workflow-chains.yaml +156 -0
- package/.aios-core/development/agents/aios-master.md +17 -10
- package/.aios-core/development/agents/analyst/MEMORY.md +33 -0
- package/.aios-core/development/agents/analyst.md +17 -10
- package/.aios-core/development/agents/architect/MEMORY.md +39 -0
- package/.aios-core/development/agents/architect.md +17 -10
- package/.aios-core/development/agents/data-engineer/MEMORY.md +32 -0
- package/.aios-core/development/agents/data-engineer.md +17 -10
- package/.aios-core/development/agents/dev/MEMORY.md +46 -0
- package/.aios-core/development/agents/dev.md +18 -11
- package/.aios-core/development/agents/devops/MEMORY.md +39 -0
- package/.aios-core/development/agents/devops.md +44 -10
- package/.aios-core/development/agents/pm/MEMORY.md +38 -0
- package/.aios-core/development/agents/pm.md +17 -10
- package/.aios-core/development/agents/po/MEMORY.md +45 -0
- package/.aios-core/development/agents/po.md +17 -10
- package/.aios-core/development/agents/qa/MEMORY.md +42 -0
- package/.aios-core/development/agents/qa.md +18 -11
- package/.aios-core/development/agents/sm/MEMORY.md +31 -0
- package/.aios-core/development/agents/sm.md +17 -10
- package/.aios-core/development/agents/squad-creator.md +18 -9
- package/.aios-core/development/agents/ux/MEMORY.md +31 -0
- package/.aios-core/development/agents/ux-design-expert.md +16 -9
- package/.aios-core/development/checklists/issue-triage-checklist.md +35 -0
- package/.aios-core/development/checklists/memory-audit-checklist.md +53 -0
- package/.aios-core/development/scripts/issue-triage.js +171 -0
- package/.aios-core/development/scripts/populate-entity-registry.js +412 -19
- package/.aios-core/development/scripts/unified-activation-pipeline.js +31 -10
- package/.aios-core/development/tasks/analyze-project-structure.md +48 -0
- package/.aios-core/development/tasks/apply-qa-fixes.md +7 -0
- package/.aios-core/development/tasks/architect-analyze-impact.md +8 -1
- package/.aios-core/development/tasks/brownfield-create-epic.md +41 -0
- package/.aios-core/development/tasks/brownfield-create-story.md +7 -0
- package/.aios-core/development/tasks/build-autonomous.md +7 -0
- package/.aios-core/development/tasks/create-deep-research-prompt.md +7 -0
- package/.aios-core/development/tasks/create-doc.md +44 -0
- package/.aios-core/development/tasks/create-next-story.md +17 -0
- package/.aios-core/development/tasks/create-suite.md +7 -0
- package/.aios-core/development/tasks/dev-develop-story.md +9 -1
- package/.aios-core/development/tasks/execute-checklist.md +7 -0
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +56 -0
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +70 -0
- package/.aios-core/development/tasks/github-issue-triage.md +118 -0
- package/.aios-core/development/tasks/health-check.yaml +206 -171
- package/.aios-core/development/tasks/kb-mode-interaction.md +3 -3
- package/.aios-core/development/tasks/plan-create-context.md +47 -1
- package/.aios-core/development/tasks/plan-create-implementation.md +55 -0
- package/.aios-core/development/tasks/po-close-story.md +7 -0
- package/.aios-core/development/tasks/pr-automation.md +5 -5
- package/.aios-core/development/tasks/qa-create-fix-request.md +7 -0
- package/.aios-core/development/tasks/qa-fix-issues.md +7 -0
- package/.aios-core/development/tasks/qa-gate.md +56 -0
- package/.aios-core/development/tasks/qa-review-story.md +32 -1
- package/.aios-core/development/tasks/release-management.md +7 -0
- package/.aios-core/development/tasks/resolve-github-issue.md +608 -0
- package/.aios-core/development/tasks/review-contributor-pr.md +152 -0
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/spec-critique.md +8 -0
- package/.aios-core/development/tasks/spec-gather-requirements.md +7 -0
- package/.aios-core/development/tasks/spec-research-dependencies.md +4 -0
- package/.aios-core/development/tasks/spec-write-spec.md +5 -0
- package/.aios-core/development/tasks/triage-github-issues.md +356 -0
- package/.aios-core/development/tasks/validate-agents.md +4 -0
- package/.aios-core/development/tasks/validate-next-story.md +17 -0
- package/.aios-core/development/templates/agent-handoff-tmpl.yaml +48 -0
- package/.aios-core/development/templates/code-intel-integration-pattern.md +199 -0
- package/.aios-core/development/templates/ptc-entity-validation.md +113 -0
- package/.aios-core/development/templates/ptc-qa-gate.md +100 -0
- package/.aios-core/development/templates/ptc-research-aggregation.md +94 -0
- package/.aios-core/development/templates/service-template/README.md.hbs +158 -158
- package/.aios-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
- package/.aios-core/development/templates/service-template/client.ts.hbs +403 -403
- package/.aios-core/development/templates/service-template/errors.ts.hbs +182 -182
- package/.aios-core/development/templates/service-template/index.ts.hbs +120 -120
- package/.aios-core/development/templates/service-template/package.json.hbs +87 -87
- package/.aios-core/development/templates/service-template/types.ts.hbs +145 -145
- package/.aios-core/development/templates/squad/agent-template.md +11 -0
- package/.aios-core/development/templates/squad/task-template.md +21 -0
- package/.aios-core/development/templates/squad-template/LICENSE +21 -21
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +1 -1
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1 -1
- package/.aios-core/framework-config.yaml +8 -0
- package/.aios-core/index.esm.js +1 -1
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/integrations/ai-providers/index.js +1 -1
- package/.aios-core/infrastructure/schemas/task-v3-schema.json +6 -0
- package/.aios-core/infrastructure/scripts/collect-tool-usage.js +311 -0
- package/.aios-core/infrastructure/scripts/generate-optimization-report.js +497 -0
- package/.aios-core/infrastructure/scripts/generate-settings-json.js +300 -0
- package/.aios-core/infrastructure/scripts/git-config-detector.js +65 -9
- package/.aios-core/infrastructure/scripts/ide-sync/index.js +3 -1
- package/.aios-core/infrastructure/scripts/ide-sync/transformers/github-copilot.js +184 -0
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/templates/aios-sync.yaml.template +182 -182
- package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -279
- package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
- package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
- package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -63
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
- package/.aios-core/install-manifest.yaml +613 -305
- package/.aios-core/lib/build.json +1 -0
- package/.aios-core/local-config.yaml.template +71 -71
- package/.aios-core/monitor/hooks/lib/__init__.py +1 -1
- package/.aios-core/monitor/hooks/lib/enrich.py +58 -58
- package/.aios-core/monitor/hooks/lib/send_event.py +47 -47
- package/.aios-core/monitor/hooks/notification.py +29 -29
- package/.aios-core/monitor/hooks/post_tool_use.py +45 -45
- package/.aios-core/monitor/hooks/pre_compact.py +29 -29
- package/.aios-core/monitor/hooks/pre_tool_use.py +40 -40
- package/.aios-core/monitor/hooks/stop.py +29 -29
- package/.aios-core/monitor/hooks/subagent_stop.py +29 -29
- package/.aios-core/monitor/hooks/user_prompt_submit.py +38 -38
- package/.aios-core/product/templates/adr.hbs +125 -125
- package/.aios-core/product/templates/dbdr.hbs +241 -241
- package/.aios-core/product/templates/epic.hbs +212 -212
- package/.aios-core/product/templates/ide-rules/claude-rules.md +125 -0
- package/.aios-core/product/templates/pmdr.hbs +186 -186
- package/.aios-core/product/templates/prd-v2.0.hbs +216 -216
- package/.aios-core/product/templates/prd.hbs +201 -201
- package/.aios-core/product/templates/story.hbs +263 -263
- package/.aios-core/product/templates/task.hbs +170 -170
- package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -158
- package/.aios-core/product/templates/tmpl-migration-script.sql +91 -91
- package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
- package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
- package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -135
- package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -77
- package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -152
- package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -77
- package/.aios-core/product/templates/tmpl-seed-data.sql +140 -140
- package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -16
- package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
- package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -140
- package/.aios-core/product/templates/tmpl-trigger.sql +152 -152
- package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -133
- package/.aios-core/product/templates/tmpl-view.sql +177 -177
- package/.aios-core/scripts/pm.sh +0 -0
- package/.aios-core/user-guide.md +15 -15
- package/.aios-core/utils/filters/constants.js +10 -0
- package/.aios-core/utils/filters/content-filter.js +223 -0
- package/.aios-core/utils/filters/field-filter.js +126 -0
- package/.aios-core/utils/filters/index.js +180 -0
- package/.aios-core/utils/filters/schema-filter.js +157 -0
- package/.claude/CLAUDE.md +62 -0
- package/.claude/hooks/enforce-architecture-first.py +196 -196
- package/.claude/hooks/enforce-git-push-authority.sh +33 -0
- package/.claude/hooks/mind-clone-governance.py +192 -192
- package/.claude/hooks/read-protection.py +151 -151
- package/.claude/hooks/slug-validation.py +176 -176
- package/.claude/hooks/sql-governance.py +182 -182
- package/.claude/hooks/synapse-engine.cjs +28 -5
- package/.claude/hooks/write-path-validation.py +194 -194
- package/.claude/rules/agent-authority.md +105 -0
- package/.claude/rules/agent-handoff.md +97 -0
- package/.claude/rules/agent-memory-imports.md +15 -0
- package/.claude/rules/coderabbit-integration.md +101 -0
- package/.claude/rules/ids-principles.md +119 -0
- package/.claude/rules/story-lifecycle.md +145 -0
- package/.claude/rules/tool-examples.md +64 -0
- package/.claude/rules/tool-response-filtering.md +57 -0
- package/.claude/rules/workflow-execution.md +150 -0
- package/LICENSE +33 -33
- package/bin/aios-graph.js +9 -0
- package/bin/aios-init.js +2 -2
- package/bin/aios-minimal.js +0 -0
- package/bin/aios.js +17 -221
- package/bin/utils/detect-fsmonitor.js +70 -0
- package/bin/utils/framework-guard.js +238 -0
- package/bin/utils/validate-publish.js +108 -0
- package/package.json +6 -3
- package/packages/aios-install/bin/aios-install.js +0 -0
- package/packages/aios-install/bin/edmcp.js +0 -0
- package/packages/aios-pro-cli/bin/aios-pro.js +2 -0
- package/packages/installer/src/config/templates/core-config-template.js +25 -0
- package/packages/installer/src/installer/brownfield-upgrader.js +68 -5
- package/packages/installer/src/merger/index.js +3 -0
- package/packages/installer/src/merger/strategies/index.js +6 -0
- package/packages/installer/src/merger/strategies/yaml-merger.js +181 -0
- package/packages/installer/src/updater/index.js +4 -4
- package/packages/installer/src/wizard/i18n.js +321 -3
- package/packages/installer/src/wizard/ide-config-generator.js +173 -25
- package/packages/installer/src/wizard/index.js +119 -1
- package/packages/installer/src/wizard/pro-setup.js +137 -121
- package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +271 -0
- package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +192 -0
- package/packages/installer/tests/unit/doctor/doctor-checks.test.js +610 -0
- package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +134 -0
- package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +186 -0
- package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +309 -0
- package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +230 -0
- package/packages/installer/tests/unit/merger/strategies.test.js +2 -2
- package/packages/installer/tests/unit/merger/yaml-merger.test.js +327 -0
- package/scripts/check-markdown-links.py +352 -352
- package/scripts/dashboard-parallel-dev.sh +0 -0
- package/scripts/dashboard-parallel-phase3.sh +0 -0
- package/scripts/dashboard-parallel-phase4.sh +0 -0
- package/scripts/install-monitor-hooks.sh +0 -0
- package/scripts/package-synapse.js +2 -1
- package/pro/README.md +0 -66
- package/pro/license/degradation.js +0 -220
- package/pro/license/errors.js +0 -450
- package/pro/license/feature-gate.js +0 -354
- package/pro/license/index.js +0 -181
- package/pro/license/license-api.js +0 -651
- package/pro/license/license-cache.js +0 -523
- package/pro/license/license-crypto.js +0 -303
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Hook: Write Path Validation
|
|
4
|
-
|
|
5
|
-
REGRA: Documentos devem ir para os paths corretos conforme convenções.
|
|
6
|
-
|
|
7
|
-
Este hook intercepta Write/Edit e AVISA (não bloqueia) quando o path
|
|
8
|
-
parece violar as convenções de organização de documentos.
|
|
9
|
-
|
|
10
|
-
Exit Codes:
|
|
11
|
-
- 0: Sempre (apenas avisa, nunca bloqueia)
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import json
|
|
15
|
-
import sys
|
|
16
|
-
import os
|
|
17
|
-
import re
|
|
18
|
-
from datetime import datetime
|
|
19
|
-
|
|
20
|
-
# =============================================================================
|
|
21
|
-
# CONFIGURAÇÃO: Regras de organização de documentos
|
|
22
|
-
# =============================================================================
|
|
23
|
-
|
|
24
|
-
PATH_RULES = [
|
|
25
|
-
# (pattern no nome/conteúdo, path esperado, descrição)
|
|
26
|
-
{
|
|
27
|
-
"name_patterns": [r"session", r"handoff", r"^2\d{3}-\d{2}-\d{2}"],
|
|
28
|
-
"expected_path": "docs/sessions/",
|
|
29
|
-
"description": "Session logs e handoffs → docs/sessions/YYYY-MM/",
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"name_patterns": [r"architecture", r"system-design", r"infra"],
|
|
33
|
-
"expected_path": "docs/architecture/",
|
|
34
|
-
"description": "Docs de arquitetura → docs/architecture/",
|
|
35
|
-
"exclude_patterns": [r"ARCHITECTURE_RULES"], # Exceção para MMOS
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"name_patterns": [r"guide", r"tutorial", r"how-to"],
|
|
39
|
-
"expected_path": "docs/guides/",
|
|
40
|
-
"description": "Guias e tutoriais → docs/guides/",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"name_patterns": [r"prd\.md$", r"epic.*\.md$", r"story.*\.md$"],
|
|
44
|
-
"expected_path": "docs/projects/",
|
|
45
|
-
"description": "PRDs, Epics, Stories → docs/projects/{project}/",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"name_patterns": [r"mind.*specific", r"mind.*validation"],
|
|
49
|
-
"expected_path": "outputs/minds/",
|
|
50
|
-
"description": "Docs específicos de mind → outputs/minds/{slug}/docs/",
|
|
51
|
-
},
|
|
52
|
-
]
|
|
53
|
-
|
|
54
|
-
# Paths que são sempre válidos (não avisar)
|
|
55
|
-
ALWAYS_VALID_PATHS = [
|
|
56
|
-
".claude/",
|
|
57
|
-
".aios-core/",
|
|
58
|
-
".aios-upstream/",
|
|
59
|
-
"squads/",
|
|
60
|
-
"node_modules/",
|
|
61
|
-
".git/",
|
|
62
|
-
"app/",
|
|
63
|
-
"supabase/",
|
|
64
|
-
"outputs/",
|
|
65
|
-
]
|
|
66
|
-
|
|
67
|
-
# =============================================================================
|
|
68
|
-
# LÓGICA DO HOOK
|
|
69
|
-
# =============================================================================
|
|
70
|
-
|
|
71
|
-
def get_project_root():
|
|
72
|
-
"""Obtém o root do projeto."""
|
|
73
|
-
return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
74
|
-
|
|
75
|
-
def normalize_path(file_path: str, project_root: str) -> str:
|
|
76
|
-
"""Normaliza path para relativo."""
|
|
77
|
-
if file_path.startswith(project_root):
|
|
78
|
-
return file_path[len(project_root):].lstrip("/")
|
|
79
|
-
return file_path
|
|
80
|
-
|
|
81
|
-
def is_always_valid(relative_path: str) -> bool:
|
|
82
|
-
"""Verifica se o path está em área sempre válida."""
|
|
83
|
-
for valid in ALWAYS_VALID_PATHS:
|
|
84
|
-
if relative_path.startswith(valid):
|
|
85
|
-
return True
|
|
86
|
-
return False
|
|
87
|
-
|
|
88
|
-
def is_documentation_file(relative_path: str) -> bool:
|
|
89
|
-
"""Verifica se é um arquivo de documentação."""
|
|
90
|
-
doc_extensions = [".md", ".mdx", ".txt", ".rst"]
|
|
91
|
-
return any(relative_path.endswith(ext) for ext in doc_extensions)
|
|
92
|
-
|
|
93
|
-
def check_path_rules(relative_path: str) -> list[dict]:
|
|
94
|
-
"""
|
|
95
|
-
Verifica se o path viola alguma regra.
|
|
96
|
-
|
|
97
|
-
Returns:
|
|
98
|
-
Lista de violações com sugestões
|
|
99
|
-
"""
|
|
100
|
-
violations = []
|
|
101
|
-
filename = os.path.basename(relative_path)
|
|
102
|
-
|
|
103
|
-
for rule in PATH_RULES:
|
|
104
|
-
# Verificar se o nome do arquivo corresponde ao pattern
|
|
105
|
-
matches_name = False
|
|
106
|
-
for pattern in rule["name_patterns"]:
|
|
107
|
-
if re.search(pattern, filename, re.IGNORECASE):
|
|
108
|
-
matches_name = True
|
|
109
|
-
break
|
|
110
|
-
|
|
111
|
-
if not matches_name:
|
|
112
|
-
continue
|
|
113
|
-
|
|
114
|
-
# Verificar exceções
|
|
115
|
-
if "exclude_patterns" in rule:
|
|
116
|
-
is_excluded = False
|
|
117
|
-
for exc_pattern in rule["exclude_patterns"]:
|
|
118
|
-
if re.search(exc_pattern, filename, re.IGNORECASE):
|
|
119
|
-
is_excluded = True
|
|
120
|
-
break
|
|
121
|
-
if is_excluded:
|
|
122
|
-
continue
|
|
123
|
-
|
|
124
|
-
# Verificar se está no path esperado
|
|
125
|
-
expected = rule["expected_path"]
|
|
126
|
-
if not relative_path.startswith(expected):
|
|
127
|
-
violations.append({
|
|
128
|
-
"current_path": relative_path,
|
|
129
|
-
"expected_path": expected,
|
|
130
|
-
"description": rule["description"],
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
return violations
|
|
134
|
-
|
|
135
|
-
def main():
|
|
136
|
-
# Ler input do stdin
|
|
137
|
-
try:
|
|
138
|
-
input_data = json.load(sys.stdin)
|
|
139
|
-
except json.JSONDecodeError:
|
|
140
|
-
sys.exit(0)
|
|
141
|
-
|
|
142
|
-
tool_name = input_data.get("tool_name", "")
|
|
143
|
-
tool_input = input_data.get("tool_input", {})
|
|
144
|
-
|
|
145
|
-
# Só processar Write e Edit
|
|
146
|
-
if tool_name not in ["Write", "Edit"]:
|
|
147
|
-
sys.exit(0)
|
|
148
|
-
|
|
149
|
-
file_path = tool_input.get("file_path", "")
|
|
150
|
-
if not file_path:
|
|
151
|
-
sys.exit(0)
|
|
152
|
-
|
|
153
|
-
# Normalizar path
|
|
154
|
-
project_root = get_project_root()
|
|
155
|
-
relative_path = normalize_path(file_path, project_root)
|
|
156
|
-
|
|
157
|
-
# Verificar se é área sempre válida
|
|
158
|
-
if is_always_valid(relative_path):
|
|
159
|
-
sys.exit(0)
|
|
160
|
-
|
|
161
|
-
# Só verificar arquivos de documentação
|
|
162
|
-
if not is_documentation_file(relative_path):
|
|
163
|
-
sys.exit(0)
|
|
164
|
-
|
|
165
|
-
# Verificar regras
|
|
166
|
-
violations = check_path_rules(relative_path)
|
|
167
|
-
|
|
168
|
-
if not violations:
|
|
169
|
-
sys.exit(0)
|
|
170
|
-
|
|
171
|
-
# AVISAR (não bloquear)
|
|
172
|
-
violation = violations[0] # Mostrar primeira violação
|
|
173
|
-
|
|
174
|
-
warning_message = f"""
|
|
175
|
-
┌──────────────────────────────────────────────────────────────────────────────┐
|
|
176
|
-
│ ⚠️ PATH WARNING: Documento pode estar no local errado │
|
|
177
|
-
├──────────────────────────────────────────────────────────────────────────────┤
|
|
178
|
-
│ │
|
|
179
|
-
│ Arquivo: {relative_path[:60]:<60} │
|
|
180
|
-
│ │
|
|
181
|
-
│ Convenção: {violation['description'][:56]:<56} │
|
|
182
|
-
│ Esperado: {violation['expected_path']:<57} │
|
|
183
|
-
│ │
|
|
184
|
-
│ NOTA: Este é apenas um AVISO, a operação será executada. │
|
|
185
|
-
│ Verifique se o path está correto antes de continuar. │
|
|
186
|
-
│ │
|
|
187
|
-
└──────────────────────────────────────────────────────────────────────────────┘
|
|
188
|
-
"""
|
|
189
|
-
# Imprimir warning mas NÃO bloquear (exit 0)
|
|
190
|
-
print(warning_message, file=sys.stderr)
|
|
191
|
-
sys.exit(0)
|
|
192
|
-
|
|
193
|
-
if __name__ == "__main__":
|
|
194
|
-
main()
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Hook: Write Path Validation
|
|
4
|
+
|
|
5
|
+
REGRA: Documentos devem ir para os paths corretos conforme convenções.
|
|
6
|
+
|
|
7
|
+
Este hook intercepta Write/Edit e AVISA (não bloqueia) quando o path
|
|
8
|
+
parece violar as convenções de organização de documentos.
|
|
9
|
+
|
|
10
|
+
Exit Codes:
|
|
11
|
+
- 0: Sempre (apenas avisa, nunca bloqueia)
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
import sys
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
from datetime import datetime
|
|
19
|
+
|
|
20
|
+
# =============================================================================
|
|
21
|
+
# CONFIGURAÇÃO: Regras de organização de documentos
|
|
22
|
+
# =============================================================================
|
|
23
|
+
|
|
24
|
+
PATH_RULES = [
|
|
25
|
+
# (pattern no nome/conteúdo, path esperado, descrição)
|
|
26
|
+
{
|
|
27
|
+
"name_patterns": [r"session", r"handoff", r"^2\d{3}-\d{2}-\d{2}"],
|
|
28
|
+
"expected_path": "docs/sessions/",
|
|
29
|
+
"description": "Session logs e handoffs → docs/sessions/YYYY-MM/",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name_patterns": [r"architecture", r"system-design", r"infra"],
|
|
33
|
+
"expected_path": "docs/architecture/",
|
|
34
|
+
"description": "Docs de arquitetura → docs/architecture/",
|
|
35
|
+
"exclude_patterns": [r"ARCHITECTURE_RULES"], # Exceção para MMOS
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name_patterns": [r"guide", r"tutorial", r"how-to"],
|
|
39
|
+
"expected_path": "docs/guides/",
|
|
40
|
+
"description": "Guias e tutoriais → docs/guides/",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name_patterns": [r"prd\.md$", r"epic.*\.md$", r"story.*\.md$"],
|
|
44
|
+
"expected_path": "docs/projects/",
|
|
45
|
+
"description": "PRDs, Epics, Stories → docs/projects/{project}/",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name_patterns": [r"mind.*specific", r"mind.*validation"],
|
|
49
|
+
"expected_path": "outputs/minds/",
|
|
50
|
+
"description": "Docs específicos de mind → outputs/minds/{slug}/docs/",
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
# Paths que são sempre válidos (não avisar)
|
|
55
|
+
ALWAYS_VALID_PATHS = [
|
|
56
|
+
".claude/",
|
|
57
|
+
".aios-core/",
|
|
58
|
+
".aios-upstream/",
|
|
59
|
+
"squads/",
|
|
60
|
+
"node_modules/",
|
|
61
|
+
".git/",
|
|
62
|
+
"app/",
|
|
63
|
+
"supabase/",
|
|
64
|
+
"outputs/",
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
# =============================================================================
|
|
68
|
+
# LÓGICA DO HOOK
|
|
69
|
+
# =============================================================================
|
|
70
|
+
|
|
71
|
+
def get_project_root():
|
|
72
|
+
"""Obtém o root do projeto."""
|
|
73
|
+
return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
74
|
+
|
|
75
|
+
def normalize_path(file_path: str, project_root: str) -> str:
|
|
76
|
+
"""Normaliza path para relativo."""
|
|
77
|
+
if file_path.startswith(project_root):
|
|
78
|
+
return file_path[len(project_root):].lstrip("/")
|
|
79
|
+
return file_path
|
|
80
|
+
|
|
81
|
+
def is_always_valid(relative_path: str) -> bool:
|
|
82
|
+
"""Verifica se o path está em área sempre válida."""
|
|
83
|
+
for valid in ALWAYS_VALID_PATHS:
|
|
84
|
+
if relative_path.startswith(valid):
|
|
85
|
+
return True
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
def is_documentation_file(relative_path: str) -> bool:
|
|
89
|
+
"""Verifica se é um arquivo de documentação."""
|
|
90
|
+
doc_extensions = [".md", ".mdx", ".txt", ".rst"]
|
|
91
|
+
return any(relative_path.endswith(ext) for ext in doc_extensions)
|
|
92
|
+
|
|
93
|
+
def check_path_rules(relative_path: str) -> list[dict]:
|
|
94
|
+
"""
|
|
95
|
+
Verifica se o path viola alguma regra.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Lista de violações com sugestões
|
|
99
|
+
"""
|
|
100
|
+
violations = []
|
|
101
|
+
filename = os.path.basename(relative_path)
|
|
102
|
+
|
|
103
|
+
for rule in PATH_RULES:
|
|
104
|
+
# Verificar se o nome do arquivo corresponde ao pattern
|
|
105
|
+
matches_name = False
|
|
106
|
+
for pattern in rule["name_patterns"]:
|
|
107
|
+
if re.search(pattern, filename, re.IGNORECASE):
|
|
108
|
+
matches_name = True
|
|
109
|
+
break
|
|
110
|
+
|
|
111
|
+
if not matches_name:
|
|
112
|
+
continue
|
|
113
|
+
|
|
114
|
+
# Verificar exceções
|
|
115
|
+
if "exclude_patterns" in rule:
|
|
116
|
+
is_excluded = False
|
|
117
|
+
for exc_pattern in rule["exclude_patterns"]:
|
|
118
|
+
if re.search(exc_pattern, filename, re.IGNORECASE):
|
|
119
|
+
is_excluded = True
|
|
120
|
+
break
|
|
121
|
+
if is_excluded:
|
|
122
|
+
continue
|
|
123
|
+
|
|
124
|
+
# Verificar se está no path esperado
|
|
125
|
+
expected = rule["expected_path"]
|
|
126
|
+
if not relative_path.startswith(expected):
|
|
127
|
+
violations.append({
|
|
128
|
+
"current_path": relative_path,
|
|
129
|
+
"expected_path": expected,
|
|
130
|
+
"description": rule["description"],
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
return violations
|
|
134
|
+
|
|
135
|
+
def main():
|
|
136
|
+
# Ler input do stdin
|
|
137
|
+
try:
|
|
138
|
+
input_data = json.load(sys.stdin)
|
|
139
|
+
except json.JSONDecodeError:
|
|
140
|
+
sys.exit(0)
|
|
141
|
+
|
|
142
|
+
tool_name = input_data.get("tool_name", "")
|
|
143
|
+
tool_input = input_data.get("tool_input", {})
|
|
144
|
+
|
|
145
|
+
# Só processar Write e Edit
|
|
146
|
+
if tool_name not in ["Write", "Edit"]:
|
|
147
|
+
sys.exit(0)
|
|
148
|
+
|
|
149
|
+
file_path = tool_input.get("file_path", "")
|
|
150
|
+
if not file_path:
|
|
151
|
+
sys.exit(0)
|
|
152
|
+
|
|
153
|
+
# Normalizar path
|
|
154
|
+
project_root = get_project_root()
|
|
155
|
+
relative_path = normalize_path(file_path, project_root)
|
|
156
|
+
|
|
157
|
+
# Verificar se é área sempre válida
|
|
158
|
+
if is_always_valid(relative_path):
|
|
159
|
+
sys.exit(0)
|
|
160
|
+
|
|
161
|
+
# Só verificar arquivos de documentação
|
|
162
|
+
if not is_documentation_file(relative_path):
|
|
163
|
+
sys.exit(0)
|
|
164
|
+
|
|
165
|
+
# Verificar regras
|
|
166
|
+
violations = check_path_rules(relative_path)
|
|
167
|
+
|
|
168
|
+
if not violations:
|
|
169
|
+
sys.exit(0)
|
|
170
|
+
|
|
171
|
+
# AVISAR (não bloquear)
|
|
172
|
+
violation = violations[0] # Mostrar primeira violação
|
|
173
|
+
|
|
174
|
+
warning_message = f"""
|
|
175
|
+
┌──────────────────────────────────────────────────────────────────────────────┐
|
|
176
|
+
│ ⚠️ PATH WARNING: Documento pode estar no local errado │
|
|
177
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
178
|
+
│ │
|
|
179
|
+
│ Arquivo: {relative_path[:60]:<60} │
|
|
180
|
+
│ │
|
|
181
|
+
│ Convenção: {violation['description'][:56]:<56} │
|
|
182
|
+
│ Esperado: {violation['expected_path']:<57} │
|
|
183
|
+
│ │
|
|
184
|
+
│ NOTA: Este é apenas um AVISO, a operação será executada. │
|
|
185
|
+
│ Verifique se o path está correto antes de continuar. │
|
|
186
|
+
│ │
|
|
187
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
188
|
+
"""
|
|
189
|
+
# Imprimir warning mas NÃO bloquear (exit 0)
|
|
190
|
+
print(warning_message, file=sys.stderr)
|
|
191
|
+
sys.exit(0)
|
|
192
|
+
|
|
193
|
+
if __name__ == "__main__":
|
|
194
|
+
main()
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Agent Authority — Detailed Rules
|
|
2
|
+
|
|
3
|
+
## Delegation Matrix
|
|
4
|
+
|
|
5
|
+
### @devops (Gage) — EXCLUSIVE Authority
|
|
6
|
+
|
|
7
|
+
| Operation | Exclusive? | Other Agents |
|
|
8
|
+
|-----------|-----------|--------------|
|
|
9
|
+
| `git push` / `git push --force` | YES | BLOCKED |
|
|
10
|
+
| `gh pr create` / `gh pr merge` | YES | BLOCKED |
|
|
11
|
+
| MCP add/remove/configure | YES | BLOCKED |
|
|
12
|
+
| CI/CD pipeline management | YES | BLOCKED |
|
|
13
|
+
| Release management | YES | BLOCKED |
|
|
14
|
+
|
|
15
|
+
### @pm (Morgan) — Epic Orchestration
|
|
16
|
+
|
|
17
|
+
| Operation | Exclusive? | Delegated From |
|
|
18
|
+
|-----------|-----------|---------------|
|
|
19
|
+
| `*execute-epic` | YES | — |
|
|
20
|
+
| `*create-epic` | YES | — |
|
|
21
|
+
| EPIC-{ID}-EXECUTION.yaml management | YES | — |
|
|
22
|
+
| Requirements gathering | YES | — |
|
|
23
|
+
| Spec writing (spec pipeline) | YES | — |
|
|
24
|
+
|
|
25
|
+
### @po (Pax) — Story Validation
|
|
26
|
+
|
|
27
|
+
| Operation | Exclusive? | Details |
|
|
28
|
+
|-----------|-----------|---------|
|
|
29
|
+
| `*validate-story-draft` | YES | 10-point checklist |
|
|
30
|
+
| Story context tracking in epics | YES | — |
|
|
31
|
+
| Epic context management | YES | — |
|
|
32
|
+
| Backlog prioritization | YES | — |
|
|
33
|
+
|
|
34
|
+
### @sm (River) — Story Creation
|
|
35
|
+
|
|
36
|
+
| Operation | Exclusive? | Details |
|
|
37
|
+
|-----------|-----------|---------|
|
|
38
|
+
| `*draft` / `*create-story` | YES | From epic/PRD |
|
|
39
|
+
| Story template selection | YES | — |
|
|
40
|
+
|
|
41
|
+
### @dev (Dex) — Implementation
|
|
42
|
+
|
|
43
|
+
| Allowed | Blocked |
|
|
44
|
+
|---------|---------|
|
|
45
|
+
| `git add`, `git commit`, `git status` | `git push` (delegate to @devops) |
|
|
46
|
+
| `git branch`, `git checkout`, `git merge` (local) | `gh pr create/merge` (delegate to @devops) |
|
|
47
|
+
| `git stash`, `git diff`, `git log` | MCP management |
|
|
48
|
+
| Story file updates (File List, checkboxes) | Story file updates (AC, scope, title) |
|
|
49
|
+
|
|
50
|
+
### @architect (Aria) — Design Authority
|
|
51
|
+
|
|
52
|
+
| Owns | Delegates To |
|
|
53
|
+
|------|-------------|
|
|
54
|
+
| System architecture decisions | — |
|
|
55
|
+
| Technology selection | — |
|
|
56
|
+
| High-level data architecture | @data-engineer (detailed DDL) |
|
|
57
|
+
| Integration patterns | @data-engineer (query optimization) |
|
|
58
|
+
| Complexity assessment | — |
|
|
59
|
+
|
|
60
|
+
### @data-engineer (Dara) — Database
|
|
61
|
+
|
|
62
|
+
| Owns (delegated from @architect) | Does NOT Own |
|
|
63
|
+
|----------------------------------|-------------|
|
|
64
|
+
| Schema design (detailed DDL) | System architecture |
|
|
65
|
+
| Query optimization | Application code |
|
|
66
|
+
| RLS policies implementation | Git operations |
|
|
67
|
+
| Index strategy execution | Frontend/UI |
|
|
68
|
+
| Migration planning & execution | — |
|
|
69
|
+
|
|
70
|
+
### @aios-master — Framework Governance
|
|
71
|
+
|
|
72
|
+
| Capability | Details |
|
|
73
|
+
|-----------|---------|
|
|
74
|
+
| Execute ANY task directly | No restrictions |
|
|
75
|
+
| Framework governance | Constitutional enforcement |
|
|
76
|
+
| Override agent boundaries | When necessary for framework health |
|
|
77
|
+
|
|
78
|
+
## Cross-Agent Delegation Patterns
|
|
79
|
+
|
|
80
|
+
### Git Push Flow
|
|
81
|
+
```
|
|
82
|
+
ANY agent → @devops *push
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Schema Design Flow
|
|
86
|
+
```
|
|
87
|
+
@architect (decides technology) → @data-engineer (implements DDL)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Story Flow
|
|
91
|
+
```
|
|
92
|
+
@sm *draft → @po *validate → @dev *develop → @qa *qa-gate → @devops *push
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Epic Flow
|
|
96
|
+
```
|
|
97
|
+
@pm *create-epic → @pm *execute-epic → @sm *draft (per story)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Escalation Rules
|
|
101
|
+
|
|
102
|
+
1. Agent cannot complete task → Escalate to @aios-master
|
|
103
|
+
2. Quality gate fails → Return to @dev with specific feedback
|
|
104
|
+
3. Constitutional violation detected → BLOCK, require fix before proceed
|
|
105
|
+
4. Agent boundary conflict → @aios-master mediates
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Agent Handoff Protocol — Context Compaction
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Prevent context window accumulation when switching between AIOS agents (`@agent` commands). Each agent switch compacts the previous agent's full persona into a structured handoff artifact (~379 tokens) instead of retaining the full definition (~3-5K tokens).
|
|
6
|
+
|
|
7
|
+
## When This Applies
|
|
8
|
+
|
|
9
|
+
This protocol activates whenever:
|
|
10
|
+
1. A user invokes a new agent via `@agent-name` or `/AIOS:agents:agent-name`
|
|
11
|
+
2. The current session already has a different agent active
|
|
12
|
+
|
|
13
|
+
## Handoff Protocol
|
|
14
|
+
|
|
15
|
+
### On Agent Switch (outgoing agent)
|
|
16
|
+
|
|
17
|
+
Before loading the new agent, mentally generate a handoff artifact with:
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
handoff:
|
|
21
|
+
from_agent: "{current_agent_id}"
|
|
22
|
+
to_agent: "{new_agent_id}"
|
|
23
|
+
story_context:
|
|
24
|
+
story_id: "{active story ID}"
|
|
25
|
+
story_path: "{active story path}"
|
|
26
|
+
story_status: "{current status}"
|
|
27
|
+
current_task: "{last task being worked on}"
|
|
28
|
+
branch: "{current git branch}"
|
|
29
|
+
decisions:
|
|
30
|
+
- "{key decision 1}"
|
|
31
|
+
- "{key decision 2}"
|
|
32
|
+
files_modified:
|
|
33
|
+
- "{file 1}"
|
|
34
|
+
- "{file 2}"
|
|
35
|
+
blockers:
|
|
36
|
+
- "{any active blockers}"
|
|
37
|
+
next_action: "{what the incoming agent should do}"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### On Agent Switch (incoming agent)
|
|
41
|
+
|
|
42
|
+
The incoming agent receives:
|
|
43
|
+
1. Its own **full agent profile** (persona, commands, dependencies)
|
|
44
|
+
2. The **handoff artifact** from the previous agent (compact summary)
|
|
45
|
+
3. **NOT** the previous agent's full persona/instructions/tool definitions
|
|
46
|
+
|
|
47
|
+
### Compaction Limits
|
|
48
|
+
|
|
49
|
+
| Limit | Value |
|
|
50
|
+
|-------|-------|
|
|
51
|
+
| Max handoff artifact size | 500 tokens |
|
|
52
|
+
| Max retained agent summaries | 3 (oldest discarded on 4th switch) |
|
|
53
|
+
| Max decisions in artifact | 5 |
|
|
54
|
+
| Max files_modified entries | 10 |
|
|
55
|
+
| Max blockers | 3 |
|
|
56
|
+
|
|
57
|
+
### What to Preserve (ALWAYS include)
|
|
58
|
+
|
|
59
|
+
- Active story ID and path
|
|
60
|
+
- Current task being worked on
|
|
61
|
+
- Git branch name
|
|
62
|
+
- Key architectural decisions made
|
|
63
|
+
- Files created or modified
|
|
64
|
+
- Active blockers
|
|
65
|
+
|
|
66
|
+
### What to Discard (NEVER carry forward)
|
|
67
|
+
|
|
68
|
+
- Previous agent's full persona definition
|
|
69
|
+
- Previous agent's command list
|
|
70
|
+
- Previous agent's dependency list
|
|
71
|
+
- Previous agent's tool configurations
|
|
72
|
+
- Previous agent's CodeRabbit integration details
|
|
73
|
+
- Previous agent's greeting templates
|
|
74
|
+
|
|
75
|
+
## Storage
|
|
76
|
+
|
|
77
|
+
Handoff artifacts are stored at `.aios/handoffs/` (runtime, gitignored). Format: `handoff-{from}-to-{to}-{timestamp}.yaml`.
|
|
78
|
+
|
|
79
|
+
## Template Reference
|
|
80
|
+
|
|
81
|
+
Full template: `.aios-core/development/templates/agent-handoff-tmpl.yaml`
|
|
82
|
+
|
|
83
|
+
## Example
|
|
84
|
+
|
|
85
|
+
Session flow: `@sm` creates story → `@dev` implements → `@qa` reviews
|
|
86
|
+
|
|
87
|
+
After `@sm` → `@dev` switch:
|
|
88
|
+
- `@sm` full persona (~3K tokens) is **discarded**
|
|
89
|
+
- Handoff artifact (~379 tokens) is **retained**: story ID, decisions, files, next action
|
|
90
|
+
- `@dev` full persona (~5K tokens) is **loaded**
|
|
91
|
+
- **Total context: ~5.4K** instead of ~8K (33% reduction per switch)
|
|
92
|
+
|
|
93
|
+
After `@dev` → `@qa` switch:
|
|
94
|
+
- `@dev` full persona is **discarded**
|
|
95
|
+
- `@dev` handoff artifact is **retained** alongside `@sm` handoff
|
|
96
|
+
- `@qa` full persona is **loaded**
|
|
97
|
+
- **Total context: ~5.2K** instead of ~12K (57% reduction after 2 switches)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths: .aios-core/development/agents/**
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Agent Memory Imports
|
|
6
|
+
|
|
7
|
+
Each AIOS agent has a canonical MEMORY.md containing persistent knowledge.
|
|
8
|
+
These are the canonical locations — agents should read their memory on activation.
|
|
9
|
+
|
|
10
|
+
@import .aios-core/development/agents/dev/MEMORY.md
|
|
11
|
+
@import .aios-core/development/agents/qa/MEMORY.md
|
|
12
|
+
@import .aios-core/development/agents/architect/MEMORY.md
|
|
13
|
+
@import .aios-core/development/agents/devops/MEMORY.md
|
|
14
|
+
@import .aios-core/development/agents/pm/MEMORY.md
|
|
15
|
+
@import .aios-core/development/agents/po/MEMORY.md
|