aios-core 2.1.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/.session/current-session.json +14 -0
- package/.aios-core/cli/commands/generate/index.js +222 -0
- package/.aios-core/cli/commands/manifest/index.js +46 -0
- package/.aios-core/cli/commands/manifest/regenerate.js +96 -0
- package/.aios-core/cli/commands/manifest/validate.js +66 -0
- package/.aios-core/cli/commands/mcp/add.js +234 -0
- package/.aios-core/cli/commands/mcp/index.js +76 -0
- package/.aios-core/cli/commands/mcp/link.js +217 -0
- package/.aios-core/cli/commands/mcp/setup.js +164 -0
- package/.aios-core/cli/commands/mcp/status.js +183 -0
- package/.aios-core/cli/commands/metrics/cleanup.js +91 -0
- package/.aios-core/cli/commands/metrics/index.js +65 -0
- package/.aios-core/cli/commands/metrics/record.js +154 -0
- package/.aios-core/cli/commands/metrics/seed.js +126 -0
- package/.aios-core/cli/commands/metrics/show.js +209 -0
- package/.aios-core/cli/commands/migrate/analyze.js +353 -0
- package/.aios-core/cli/commands/migrate/backup.js +352 -0
- package/.aios-core/cli/commands/migrate/execute.js +292 -0
- package/.aios-core/cli/commands/migrate/index.js +441 -0
- package/.aios-core/cli/commands/migrate/rollback.js +323 -0
- package/.aios-core/cli/commands/migrate/update-imports.js +396 -0
- package/.aios-core/cli/commands/migrate/validate.js +452 -0
- package/.aios-core/cli/commands/qa/index.js +56 -0
- package/.aios-core/cli/commands/qa/run.js +163 -0
- package/.aios-core/cli/commands/qa/status.js +195 -0
- package/.aios-core/cli/commands/workers/formatters/info-formatter.js +274 -0
- package/.aios-core/cli/commands/workers/formatters/list-table.js +265 -0
- package/.aios-core/cli/commands/workers/formatters/list-tree.js +159 -0
- package/.aios-core/cli/commands/workers/index.js +56 -0
- package/.aios-core/cli/commands/workers/info.js +194 -0
- package/.aios-core/cli/commands/workers/list.js +214 -0
- package/.aios-core/cli/commands/workers/search-filters.js +185 -0
- package/.aios-core/cli/commands/workers/search-keyword.js +310 -0
- package/.aios-core/cli/commands/workers/search-semantic.js +293 -0
- package/.aios-core/cli/commands/workers/search.js +154 -0
- package/.aios-core/cli/commands/workers/utils/pagination.js +102 -0
- package/.aios-core/cli/index.js +128 -0
- package/.aios-core/cli/utils/output-formatter-cli.js +232 -0
- package/.aios-core/cli/utils/score-calculator.js +221 -0
- package/.aios-core/core/README.md +229 -0
- package/.aios-core/core/config/config-cache.js +233 -0
- package/.aios-core/core/config/config-loader.js +277 -0
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -0
- package/.aios-core/core/data/aios-kb.md +924 -0
- package/.aios-core/core/data/workflow-patterns.yaml +267 -0
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
- package/.aios-core/core/docs/component-creation-guide.md +458 -0
- package/.aios-core/core/docs/session-update-pattern.md +307 -0
- package/.aios-core/core/docs/template-syntax.md +267 -0
- package/.aios-core/core/docs/troubleshooting-guide.md +625 -0
- package/.aios-core/core/elicitation/agent-elicitation.js +272 -0
- package/.aios-core/core/elicitation/elicitation-engine.js +479 -0
- package/.aios-core/core/elicitation/session-manager.js +320 -0
- package/.aios-core/core/elicitation/task-elicitation.js +281 -0
- package/.aios-core/core/elicitation/workflow-elicitation.js +315 -0
- package/.aios-core/core/index.esm.js +42 -0
- package/.aios-core/core/index.js +76 -0
- package/.aios-core/core/manifest/manifest-generator.js +386 -0
- package/.aios-core/core/manifest/manifest-validator.js +429 -0
- package/.aios-core/core/mcp/config-migrator.js +340 -0
- package/.aios-core/core/mcp/global-config-manager.js +369 -0
- package/.aios-core/core/mcp/index.js +34 -0
- package/.aios-core/core/mcp/os-detector.js +188 -0
- package/.aios-core/core/mcp/symlink-manager.js +413 -0
- package/.aios-core/core/migration/migration-config.yaml +83 -0
- package/.aios-core/core/migration/module-mapping.yaml +89 -0
- package/.aios-core/core/quality-gates/base-layer.js +134 -0
- package/.aios-core/core/quality-gates/checklist-generator.js +329 -0
- package/.aios-core/core/quality-gates/focus-area-recommender.js +359 -0
- package/.aios-core/core/quality-gates/human-review-orchestrator.js +529 -0
- package/.aios-core/core/quality-gates/layer1-precommit.js +336 -0
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +324 -0
- package/.aios-core/core/quality-gates/layer3-human-review.js +348 -0
- package/.aios-core/core/quality-gates/notification-manager.js +550 -0
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -0
- package/.aios-core/core/quality-gates/quality-gate-manager.js +601 -0
- package/.aios-core/core/registry/README.md +179 -0
- package/.aios-core/core/registry/build-registry.js +452 -0
- package/.aios-core/core/registry/registry-loader.js +330 -0
- package/.aios-core/core/registry/registry-schema.json +166 -0
- package/.aios-core/core/registry/service-registry.json +6586 -0
- package/.aios-core/core/registry/validate-registry.js +340 -0
- package/.aios-core/core/session/context-detector.js +229 -0
- package/.aios-core/core/session/context-loader.js +288 -0
- package/.aios-core/core/utils/output-formatter.js +298 -0
- package/.aios-core/core/utils/security-utils.js +333 -0
- package/.aios-core/core/utils/yaml-validator.js +419 -0
- package/.aios-core/core-config.yaml +382 -0
- package/.aios-core/data/agent-config-requirements.yaml +368 -0
- package/.aios-core/data/aios-kb.md +924 -0
- package/.aios-core/data/technical-preferences.md +4 -0
- package/.aios-core/data/workflow-patterns.yaml +267 -0
- package/.aios-core/development/README.md +142 -0
- package/.aios-core/development/agent-teams/team-all.yaml +15 -0
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -0
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -0
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -0
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -0
- package/.aios-core/development/agents/aios-master.md +339 -0
- package/.aios-core/development/agents/analyst.md +195 -0
- package/.aios-core/development/agents/architect.md +359 -0
- package/.aios-core/development/agents/data-engineer.md +468 -0
- package/.aios-core/development/agents/dev.md +390 -0
- package/.aios-core/development/agents/devops.md +398 -0
- package/.aios-core/development/agents/pm.md +198 -0
- package/.aios-core/development/agents/po.md +256 -0
- package/.aios-core/development/agents/qa.md +312 -0
- package/.aios-core/development/agents/sm.md +220 -0
- package/.aios-core/development/agents/ux-design-expert.md +451 -0
- package/.aios-core/development/scripts/agent-assignment-resolver.js +231 -0
- package/.aios-core/development/scripts/agent-config-loader.js +624 -0
- package/.aios-core/development/scripts/agent-exit-hooks.js +96 -0
- package/.aios-core/development/scripts/apply-inline-greeting-all-agents.js +146 -0
- package/.aios-core/development/scripts/audit-agent-config.js +380 -0
- package/.aios-core/development/scripts/backlog-manager.js +404 -0
- package/.aios-core/development/scripts/batch-update-agents-session-context.js +95 -0
- package/.aios-core/development/scripts/decision-context.js +228 -0
- package/.aios-core/development/scripts/decision-log-generator.js +293 -0
- package/.aios-core/development/scripts/decision-log-indexer.js +284 -0
- package/.aios-core/development/scripts/decision-recorder.js +168 -0
- package/.aios-core/development/scripts/dev-context-loader.js +297 -0
- package/.aios-core/development/scripts/generate-greeting.js +160 -0
- package/.aios-core/development/scripts/greeting-builder.js +866 -0
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -0
- package/.aios-core/development/scripts/greeting-preference-manager.js +145 -0
- package/.aios-core/development/scripts/migrate-task-to-v2.js +377 -0
- package/.aios-core/development/scripts/story-index-generator.js +337 -0
- package/.aios-core/development/scripts/story-manager.js +375 -0
- package/.aios-core/development/scripts/story-update-hook.js +259 -0
- package/.aios-core/development/scripts/task-identifier-resolver.js +145 -0
- package/.aios-core/development/scripts/test-greeting-system.js +142 -0
- package/.aios-core/development/scripts/validate-task-v2.js +319 -0
- package/.aios-core/development/scripts/workflow-navigator.js +214 -0
- package/.aios-core/development/tasks/add-mcp.md +319 -0
- package/.aios-core/development/tasks/advanced-elicitation.md +319 -0
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +342 -0
- package/.aios-core/development/tasks/analyze-framework.md +697 -0
- package/.aios-core/development/tasks/analyze-performance.md +637 -0
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -0
- package/.aios-core/development/tasks/architect-analyze-impact.md +827 -0
- package/.aios-core/development/tasks/audit-codebase.md +429 -0
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -0
- package/.aios-core/development/tasks/audit-utilities.md +358 -0
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -0
- package/.aios-core/development/tasks/brownfield-create-epic.md +486 -0
- package/.aios-core/development/tasks/brownfield-create-story.md +357 -0
- package/.aios-core/development/tasks/build-component.md +478 -0
- package/.aios-core/development/tasks/calculate-roi.md +455 -0
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -0
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -0
- package/.aios-core/development/tasks/collaborative-edit.md +1109 -0
- package/.aios-core/development/tasks/compose-molecule.md +284 -0
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -0
- package/.aios-core/development/tasks/correct-course.md +280 -0
- package/.aios-core/development/tasks/create-agent.md +322 -0
- package/.aios-core/development/tasks/create-brownfield-story.md +727 -0
- package/.aios-core/development/tasks/create-deep-research-prompt.md +499 -0
- package/.aios-core/development/tasks/create-doc.md +316 -0
- package/.aios-core/development/tasks/create-next-story.md +774 -0
- package/.aios-core/development/tasks/create-suite.md +284 -0
- package/.aios-core/development/tasks/create-task.md +372 -0
- package/.aios-core/development/tasks/create-workflow.md +371 -0
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -0
- package/.aios-core/development/tasks/db-apply-migration.md +381 -0
- package/.aios-core/development/tasks/db-bootstrap.md +642 -0
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -0
- package/.aios-core/development/tasks/db-dry-run.md +293 -0
- package/.aios-core/development/tasks/db-env-check.md +260 -0
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -0
- package/.aios-core/development/tasks/db-explain.md +631 -0
- package/.aios-core/development/tasks/db-impersonate.md +495 -0
- package/.aios-core/development/tasks/db-load-csv.md +593 -0
- package/.aios-core/development/tasks/db-policy-apply.md +653 -0
- package/.aios-core/development/tasks/db-rls-audit.md +411 -0
- package/.aios-core/development/tasks/db-rollback.md +739 -0
- package/.aios-core/development/tasks/db-run-sql.md +613 -0
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -0
- package/.aios-core/development/tasks/db-seed.md +390 -0
- package/.aios-core/development/tasks/db-smoke-test.md +351 -0
- package/.aios-core/development/tasks/db-snapshot.md +569 -0
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -0
- package/.aios-core/development/tasks/db-verify-order.md +515 -0
- package/.aios-core/development/tasks/deprecate-component.md +957 -0
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -0
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -0
- package/.aios-core/development/tasks/dev-develop-story.md +846 -0
- package/.aios-core/development/tasks/dev-improve-code-quality.md +873 -0
- package/.aios-core/development/tasks/dev-optimize-performance.md +1034 -0
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +871 -0
- package/.aios-core/development/tasks/dev-validate-next-story.md +349 -0
- package/.aios-core/development/tasks/document-project.md +553 -0
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -0
- package/.aios-core/development/tasks/execute-checklist.md +301 -0
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -0
- package/.aios-core/development/tasks/extend-pattern.md +269 -0
- package/.aios-core/development/tasks/extract-tokens.md +467 -0
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -0
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +261 -0
- package/.aios-core/development/tasks/generate-documentation.md +284 -0
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -0
- package/.aios-core/development/tasks/generate-shock-report.md +501 -0
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -0
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -0
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -0
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -0
- package/.aios-core/development/tasks/improve-self.md +823 -0
- package/.aios-core/development/tasks/index-docs.md +388 -0
- package/.aios-core/development/tasks/init-project-status.md +506 -0
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -0
- package/.aios-core/development/tasks/kb-mode-interaction.md +284 -0
- package/.aios-core/development/tasks/learn-patterns.md +901 -0
- package/.aios-core/development/tasks/mcp-workflow.md +437 -0
- package/.aios-core/development/tasks/modify-agent.md +382 -0
- package/.aios-core/development/tasks/modify-task.md +425 -0
- package/.aios-core/development/tasks/modify-workflow.md +466 -0
- package/.aios-core/development/tasks/po-backlog-add.md +370 -0
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -0
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -0
- package/.aios-core/development/tasks/po-pull-story.md +316 -0
- package/.aios-core/development/tasks/po-stories-index.md +351 -0
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -0
- package/.aios-core/development/tasks/po-sync-story.md +303 -0
- package/.aios-core/development/tasks/pr-automation.md +701 -0
- package/.aios-core/development/tasks/propose-modification.md +843 -0
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -0
- package/.aios-core/development/tasks/qa-gate.md +374 -0
- package/.aios-core/development/tasks/qa-generate-tests.md +1175 -0
- package/.aios-core/development/tasks/qa-nfr-assess.md +558 -0
- package/.aios-core/development/tasks/qa-review-proposal.md +1158 -0
- package/.aios-core/development/tasks/qa-review-story.md +683 -0
- package/.aios-core/development/tasks/qa-risk-profile.md +567 -0
- package/.aios-core/development/tasks/qa-run-tests.md +277 -0
- package/.aios-core/development/tasks/qa-test-design.md +388 -0
- package/.aios-core/development/tasks/qa-trace-requirements.md +477 -0
- package/.aios-core/development/tasks/release-management.md +723 -0
- package/.aios-core/development/tasks/security-audit.md +554 -0
- package/.aios-core/development/tasks/security-scan.md +790 -0
- package/.aios-core/development/tasks/setup-database.md +741 -0
- package/.aios-core/development/tasks/setup-design-system.md +462 -0
- package/.aios-core/development/tasks/setup-github.md +874 -0
- package/.aios-core/development/tasks/setup-llm-routing.md +229 -0
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -0
- package/.aios-core/development/tasks/shard-doc.md +538 -0
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -0
- package/.aios-core/development/tasks/sync-documentation.md +865 -0
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -0
- package/.aios-core/development/tasks/test-as-user.md +621 -0
- package/.aios-core/development/tasks/test-validation-task.md +171 -0
- package/.aios-core/development/tasks/undo-last.md +347 -0
- package/.aios-core/development/tasks/update-manifest.md +410 -0
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -0
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -0
- package/.aios-core/development/tasks/ux-user-research.md +559 -0
- package/.aios-core/development/tasks/validate-next-story.md +423 -0
- package/.aios-core/development/tasks/validate-structure.md +243 -0
- package/.aios-core/development/workflows/README.md +84 -0
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -0
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -0
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -0
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -0
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -0
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -0
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
- package/.aios-core/docs/component-creation-guide.md +458 -0
- package/.aios-core/docs/session-update-pattern.md +307 -0
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -0
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -0
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -0
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -0
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -0
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -0
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -0
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -0
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -0
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -0
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -0
- package/.aios-core/docs/template-syntax.md +267 -0
- package/.aios-core/docs/troubleshooting-guide.md +625 -0
- package/.aios-core/elicitation/agent-elicitation.js +272 -0
- package/.aios-core/elicitation/task-elicitation.js +281 -0
- package/.aios-core/elicitation/workflow-elicitation.js +315 -0
- package/.aios-core/index.d.ts +8 -0
- package/.aios-core/index.esm.js +16 -0
- package/.aios-core/index.js +16 -0
- package/.aios-core/infrastructure/README.md +126 -0
- package/.aios-core/infrastructure/index.js +199 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/clickup-adapter.js +345 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/github-adapter.js +392 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/jira-adapter.js +448 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/local-adapter.js +175 -0
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +122 -0
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +89 -0
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +780 -0
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +950 -0
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +425 -0
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +132 -0
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +381 -0
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +203 -0
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +24 -0
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +51 -0
- package/.aios-core/infrastructure/scripts/aios-validator.js +294 -0
- package/.aios-core/infrastructure/scripts/approval-workflow.js +643 -0
- package/.aios-core/infrastructure/scripts/atomic-layer-classifier.js +308 -0
- package/.aios-core/infrastructure/scripts/backup-manager.js +607 -0
- package/.aios-core/infrastructure/scripts/batch-creator.js +608 -0
- package/.aios-core/infrastructure/scripts/branch-manager.js +391 -0
- package/.aios-core/infrastructure/scripts/capability-analyzer.js +535 -0
- package/.aios-core/infrastructure/scripts/clickup-helpers.js +226 -0
- package/.aios-core/infrastructure/scripts/code-quality-improver.js +1312 -0
- package/.aios-core/infrastructure/scripts/commit-message-generator.js +850 -0
- package/.aios-core/infrastructure/scripts/component-generator.js +738 -0
- package/.aios-core/infrastructure/scripts/component-metadata.js +627 -0
- package/.aios-core/infrastructure/scripts/component-search.js +277 -0
- package/.aios-core/infrastructure/scripts/config-cache.js +322 -0
- package/.aios-core/infrastructure/scripts/config-loader.js +349 -0
- package/.aios-core/infrastructure/scripts/conflict-resolver.js +675 -0
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +882 -0
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +638 -0
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +703 -0
- package/.aios-core/infrastructure/scripts/diff-generator.js +129 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +329 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +282 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +313 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +358 -0
- package/.aios-core/infrastructure/scripts/documentation-synchronizer.js +1432 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +746 -0
- package/.aios-core/infrastructure/scripts/git-config-detector.js +293 -0
- package/.aios-core/infrastructure/scripts/git-wrapper.js +443 -0
- package/.aios-core/infrastructure/scripts/improvement-engine.js +758 -0
- package/.aios-core/infrastructure/scripts/improvement-validator.js +710 -0
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +267 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.cmd +80 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.sh +62 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.cmd +26 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.sh +18 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +970 -0
- package/.aios-core/infrastructure/scripts/modification-validator.js +555 -0
- package/.aios-core/infrastructure/scripts/output-formatter.js +297 -0
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +758 -0
- package/.aios-core/infrastructure/scripts/performance-and-error-resolver.js +258 -0
- package/.aios-core/infrastructure/scripts/performance-optimizer.js +1902 -0
- package/.aios-core/infrastructure/scripts/performance-tracker.js +452 -0
- package/.aios-core/infrastructure/scripts/pm-adapter-factory.js +181 -0
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -0
- package/.aios-core/infrastructure/scripts/project-status-loader.js +445 -0
- package/.aios-core/infrastructure/scripts/refactoring-suggester.js +1139 -0
- package/.aios-core/infrastructure/scripts/repository-detector.js +64 -0
- package/.aios-core/infrastructure/scripts/sandbox-tester.js +618 -0
- package/.aios-core/infrastructure/scripts/security-checker.js +359 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +375 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +410 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +285 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +262 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +468 -0
- package/.aios-core/infrastructure/scripts/spot-check-validator.js +149 -0
- package/.aios-core/infrastructure/scripts/status-mapper.js +115 -0
- package/.aios-core/infrastructure/scripts/template-engine.js +240 -0
- package/.aios-core/infrastructure/scripts/template-validator.js +279 -0
- package/.aios-core/infrastructure/scripts/test-generator.js +844 -0
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1081 -0
- package/.aios-core/infrastructure/scripts/test-utilities-fast.js +126 -0
- package/.aios-core/infrastructure/scripts/test-utilities.js +200 -0
- package/.aios-core/infrastructure/scripts/tool-resolver.js +360 -0
- package/.aios-core/infrastructure/scripts/transaction-manager.js +590 -0
- package/.aios-core/infrastructure/scripts/usage-analytics.js +634 -0
- package/.aios-core/infrastructure/scripts/validate-output-pattern.js +213 -0
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +1056 -0
- package/.aios-core/infrastructure/scripts/yaml-validator.js +397 -0
- package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +182 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -0
- package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -0
- package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -0
- package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/project-status-loader.test.js +394 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -0
- package/.aios-core/infrastructure/tests/utilities-audit-results.json +501 -0
- package/.aios-core/infrastructure/tests/validate-module.js +97 -0
- package/.aios-core/infrastructure/tools/README.md +222 -0
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -0
- package/.aios-core/infrastructure/tools/cli/llm-routing.yaml +126 -0
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -0
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -0
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -0
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -0
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -0
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -0
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -0
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -0
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -0
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -0
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -0
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -0
- package/.aios-core/install-manifest.yaml +347 -0
- package/.aios-core/manifests/agents.csv +1 -0
- package/.aios-core/manifests/schema/manifest-schema.json +190 -0
- package/.aios-core/manifests/tasks.csv +121 -0
- package/.aios-core/manifests/workers.csv +204 -0
- package/.aios-core/package.json +103 -0
- package/.aios-core/product/README.md +56 -0
- package/.aios-core/product/checklists/architect-checklist.md +444 -0
- package/.aios-core/product/checklists/change-checklist.md +183 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -0
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -0
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -0
- package/.aios-core/product/checklists/pm-checklist.md +376 -0
- package/.aios-core/product/checklists/po-master-checklist.md +442 -0
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -0
- package/.aios-core/product/checklists/release-checklist.md +122 -0
- package/.aios-core/product/checklists/story-dod-checklist.md +102 -0
- package/.aios-core/product/checklists/story-draft-checklist.md +216 -0
- package/.aios-core/product/data/brainstorming-techniques.md +37 -0
- package/.aios-core/product/data/elicitation-methods.md +135 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -0
- package/.aios-core/product/data/test-levels-framework.md +149 -0
- package/.aios-core/product/data/test-priorities-matrix.md +175 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -0
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -0
- package/.aios-core/product/templates/activation-instructions-template.md +258 -0
- package/.aios-core/product/templates/adr.hbs +125 -0
- package/.aios-core/product/templates/agent-template.yaml +121 -0
- package/.aios-core/product/templates/architecture-tmpl.yaml +651 -0
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +476 -0
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +280 -0
- package/.aios-core/product/templates/changelog-template.md +134 -0
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -0
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +293 -0
- package/.aios-core/product/templates/component-react-tmpl.tsx +98 -0
- package/.aios-core/product/templates/dbdr.hbs +241 -0
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -0
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -0
- package/.aios-core/product/templates/engine/elicitation.js +298 -0
- package/.aios-core/product/templates/engine/index.js +308 -0
- package/.aios-core/product/templates/engine/loader.js +231 -0
- package/.aios-core/product/templates/engine/renderer.js +343 -0
- package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -0
- package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -0
- package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -0
- package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -0
- package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -0
- package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -0
- package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -0
- package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -0
- package/.aios-core/product/templates/engine/validator.js +294 -0
- package/.aios-core/product/templates/epic.hbs +212 -0
- package/.aios-core/product/templates/eslintrc-security.json +32 -0
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +206 -0
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +349 -0
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +805 -0
- package/.aios-core/product/templates/github-actions-cd.yml +212 -0
- package/.aios-core/product/templates/github-actions-ci.yml +172 -0
- package/.aios-core/product/templates/github-pr-template.md +67 -0
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -0
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -0
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -0
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -0
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -0
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -0
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -0
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -0
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -0
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -0
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -0
- package/.aios-core/product/templates/market-research-tmpl.yaml +252 -0
- package/.aios-core/product/templates/mcp-workflow.js +271 -0
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -0
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -0
- package/.aios-core/product/templates/personalized-agent-template.md +258 -0
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -0
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -0
- package/.aios-core/product/templates/personalized-task-template.md +344 -0
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -0
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -0
- package/.aios-core/product/templates/pmdr.hbs +186 -0
- package/.aios-core/product/templates/prd-tmpl.yaml +202 -0
- package/.aios-core/product/templates/prd-v2.0.hbs +216 -0
- package/.aios-core/product/templates/prd.hbs +201 -0
- package/.aios-core/product/templates/project-brief-tmpl.yaml +221 -0
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -0
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -0
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -0
- package/.aios-core/product/templates/shock-report-tmpl.html +502 -0
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -0
- package/.aios-core/product/templates/story-tmpl.yaml +332 -0
- package/.aios-core/product/templates/story.hbs +263 -0
- package/.aios-core/product/templates/task-execution-report.md +495 -0
- package/.aios-core/product/templates/task-template.md +123 -0
- package/.aios-core/product/templates/task.hbs +170 -0
- package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -0
- package/.aios-core/product/templates/tmpl-migration-script.sql +91 -0
- package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -0
- package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -0
- package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -0
- package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -0
- package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -0
- package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -0
- package/.aios-core/product/templates/tmpl-seed-data.sql +140 -0
- package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -0
- package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -0
- package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -0
- package/.aios-core/product/templates/tmpl-trigger.sql +152 -0
- package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -0
- package/.aios-core/product/templates/tmpl-view.sql +177 -0
- package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -0
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -0
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -0
- package/.aios-core/product/templates/workflow-template.yaml +134 -0
- package/.aios-core/quality/metrics-collector.js +572 -0
- package/.aios-core/quality/metrics-hook.js +260 -0
- package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -0
- package/.aios-core/quality/seed-metrics.js +336 -0
- package/.aios-core/scripts/README.md +354 -0
- package/.aios-core/scripts/aios-doc-template.md +325 -0
- package/.aios-core/scripts/batch-migrate-phase1.ps1 +36 -0
- package/.aios-core/scripts/batch-migrate-phase2.ps1 +88 -0
- package/.aios-core/scripts/batch-migrate-phase3.ps1 +45 -0
- package/.aios-core/scripts/command-execution-hook.js +201 -0
- package/.aios-core/scripts/context-detector.js +226 -0
- package/.aios-core/scripts/elicitation-engine.js +385 -0
- package/.aios-core/scripts/elicitation-session-manager.js +300 -0
- package/.aios-core/scripts/migrate-framework-docs.sh +300 -0
- package/.aios-core/scripts/session-context-loader.js +286 -0
- package/.aios-core/scripts/test-template-system.js +941 -0
- package/.aios-core/scripts/validate-phase1.ps1 +35 -0
- package/.aios-core/scripts/workflow-management.md +69 -0
- package/.aios-core/tasks/find-component.md.legacy +391 -0
- package/.aios-core/tasks/generate-commit-message.md.legacy +426 -0
- package/.aios-core/tasks/generate-migration.md.legacy +382 -0
- package/.aios-core/tasks/rollback-modification.md.legacy +307 -0
- package/.aios-core/tasks/update-tests.md.legacy +283 -0
- package/.aios-core/user-guide.md +1413 -0
- package/.aios-core/working-in-the-brownfield.md +361 -0
- package/.claude/CLAUDE.md +221 -0
- package/LICENSE +48 -0
- package/README.md +703 -0
- package/bin/aios-init-old.js +532 -0
- package/bin/aios-init-v4.js +390 -0
- package/bin/aios-init.backup-v1.1.4.js +352 -0
- package/bin/aios-init.js +736 -0
- package/bin/aios-minimal.js +26 -0
- package/bin/aios.js +279 -0
- package/bin/migrate-pm-config.js +219 -0
- package/bin/modules/env-config.js +436 -0
- package/bin/modules/mcp-installer.js +383 -0
- package/bin/utils/install-errors.js +339 -0
- package/bin/utils/install-transaction.js +445 -0
- package/index.d.ts +19 -0
- package/index.esm.js +21 -0
- package/index.js +94 -0
- package/package.json +161 -0
- package/packages/installer/package.json +39 -0
- package/packages/installer/src/config/configure-environment.js +312 -0
- package/packages/installer/src/config/templates/core-config-template.js +183 -0
- package/packages/installer/src/config/templates/env-template.js +127 -0
- package/packages/installer/src/config/validation/config-validator.js +243 -0
- package/packages/installer/src/detection/detect-project-type.js +81 -0
- package/packages/installer/src/wizard/wizard.js +244 -0
- package/packages/installer/tests/integration/environment-configuration.test.js +328 -0
- package/packages/installer/tests/integration/wizard-detection.test.js +349 -0
- package/packages/installer/tests/unit/config-validator.test.js +315 -0
- package/packages/installer/tests/unit/detection/detect-project-type.test.js +401 -0
- package/packages/installer/tests/unit/env-template.test.js +185 -0
- package/src/config/ide-configs.js +189 -0
- package/src/installer/aios-core-installer.js +319 -0
- package/src/installer/dependency-installer.js +335 -0
- package/src/utils/aios-colors.js +234 -0
- package/src/wizard/feedback.js +218 -0
- package/src/wizard/ide-config-generator.js +488 -0
- package/src/wizard/ide-selector.js +84 -0
- package/src/wizard/index.js +589 -0
- package/src/wizard/questions.js +249 -0
- package/src/wizard/validation/index.js +120 -0
- package/src/wizard/validation/report-generator.js +269 -0
- package/src/wizard/validation/troubleshooting-system.js +346 -0
- package/src/wizard/validation/validators/config-validator.js +362 -0
- package/src/wizard/validation/validators/dependency-validator.js +333 -0
- package/src/wizard/validation/validators/file-structure-validator.js +181 -0
- package/src/wizard/validation/validators/mcp-health-checker.js +310 -0
- package/src/wizard/validators.js +274 -0
- package/templates/squad/LICENSE +21 -0
- package/templates/squad/README.md +37 -0
- package/templates/squad/agents/example-agent.yaml +36 -0
- package/templates/squad/package.json +19 -0
- package/templates/squad/squad.yaml +25 -0
- package/templates/squad/tasks/example-task.yaml +46 -0
- package/templates/squad/templates/example-template.md +24 -0
- package/templates/squad/tests/example-agent.test.js +53 -0
- package/templates/squad/workflows/example-workflow.yaml +54 -0
- package/tools/package-builder.js +35 -0
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Config Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads agent-specific configuration with lazy loading and performance tracking.
|
|
5
|
+
* Part of Story 6.1.2.6: Framework Configuration System
|
|
6
|
+
*
|
|
7
|
+
* @module agent-config-loader
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const fs = require('fs').promises;
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const yaml = require('yaml');
|
|
13
|
+
const { globalConfigCache } = require('../../core/config/config-cache');
|
|
14
|
+
const { trackConfigLoad } = require('../../infrastructure/scripts/performance-tracker');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Agent configuration requirements cache
|
|
18
|
+
*/
|
|
19
|
+
let agentRequirements = null;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Loads agent configuration requirements
|
|
23
|
+
*
|
|
24
|
+
* @returns {Promise<Object>} Agent requirements configuration
|
|
25
|
+
*/
|
|
26
|
+
async function loadAgentRequirements() {
|
|
27
|
+
if (agentRequirements) {
|
|
28
|
+
return agentRequirements;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const requirementsPath = path.join(process.cwd(), '.aios-core', 'data', 'agent-config-requirements.yaml');
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
const content = await fs.readFile(requirementsPath, 'utf8');
|
|
35
|
+
agentRequirements = yaml.parse(content);
|
|
36
|
+
return agentRequirements;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.warn(`⚠️ Could not load agent requirements: ${error.message}`);
|
|
39
|
+
console.warn(' Falling back to default requirements');
|
|
40
|
+
return { agents: {} };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Agent Config Loader Class
|
|
46
|
+
*
|
|
47
|
+
* Loads agent-specific configuration with lazy loading
|
|
48
|
+
*/
|
|
49
|
+
class AgentConfigLoader {
|
|
50
|
+
constructor(agentId) {
|
|
51
|
+
this.agentId = agentId;
|
|
52
|
+
this.requirements = null;
|
|
53
|
+
this.cache = globalConfigCache;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Load requirements for this agent
|
|
58
|
+
*
|
|
59
|
+
* @returns {Promise<Object>} Agent requirements
|
|
60
|
+
*/
|
|
61
|
+
async loadRequirements() {
|
|
62
|
+
if (this.requirements) {
|
|
63
|
+
return this.requirements;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const allRequirements = await loadAgentRequirements();
|
|
67
|
+
this.requirements = allRequirements.agents?.[this.agentId] || allRequirements.agents?.default || this.getDefaultRequirements();
|
|
68
|
+
|
|
69
|
+
return this.requirements;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get default requirements if not configured
|
|
74
|
+
*
|
|
75
|
+
* @returns {Object} Default requirements
|
|
76
|
+
*/
|
|
77
|
+
getDefaultRequirements() {
|
|
78
|
+
return {
|
|
79
|
+
config_sections: ['dataLocation'],
|
|
80
|
+
files_loaded: [],
|
|
81
|
+
lazy_loading: {},
|
|
82
|
+
performance_target: '<150ms',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Load configuration for this agent
|
|
88
|
+
*
|
|
89
|
+
* @param {Object} coreConfig - Core configuration object
|
|
90
|
+
* @param {Object} options - Load options
|
|
91
|
+
* @param {boolean} options.skipCache - Skip cache and force reload
|
|
92
|
+
* @param {boolean} options.trackPerformance - Track performance (default: true)
|
|
93
|
+
* @returns {Promise<Object>} Agent-specific configuration
|
|
94
|
+
*/
|
|
95
|
+
async load(coreConfig, options = {}) {
|
|
96
|
+
const startTime = Date.now();
|
|
97
|
+
const skipCache = options.skipCache || false;
|
|
98
|
+
const trackPerformance = options.trackPerformance !== false;
|
|
99
|
+
|
|
100
|
+
// Load requirements
|
|
101
|
+
await this.loadRequirements();
|
|
102
|
+
|
|
103
|
+
// Build agent config
|
|
104
|
+
const agentConfig = {};
|
|
105
|
+
const sectionsLoaded = [];
|
|
106
|
+
let totalSize = 0;
|
|
107
|
+
let cacheHit = false;
|
|
108
|
+
|
|
109
|
+
// Load required config sections
|
|
110
|
+
for (const section of this.requirements.config_sections || []) {
|
|
111
|
+
if (coreConfig[section] !== undefined) {
|
|
112
|
+
agentConfig[section] = coreConfig[section];
|
|
113
|
+
sectionsLoaded.push(section);
|
|
114
|
+
|
|
115
|
+
// Estimate size
|
|
116
|
+
const sectionSize = JSON.stringify(coreConfig[section]).length;
|
|
117
|
+
totalSize += sectionSize;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Load required files (with lazy loading logic)
|
|
122
|
+
const filesToLoad = this.getFilesToLoad();
|
|
123
|
+
const fileContents = {};
|
|
124
|
+
|
|
125
|
+
for (const filePath of filesToLoad) {
|
|
126
|
+
const content = await this.loadFile(filePath, skipCache);
|
|
127
|
+
fileContents[filePath] = content;
|
|
128
|
+
|
|
129
|
+
if (content.fromCache) {
|
|
130
|
+
cacheHit = true;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
totalSize += content.size || 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Measure load time
|
|
137
|
+
const loadTime = Date.now() - startTime;
|
|
138
|
+
|
|
139
|
+
// Track performance
|
|
140
|
+
if (trackPerformance) {
|
|
141
|
+
trackConfigLoad({
|
|
142
|
+
agentId: this.agentId,
|
|
143
|
+
loadTime,
|
|
144
|
+
configSize: totalSize,
|
|
145
|
+
cacheHit,
|
|
146
|
+
sectionsLoaded,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
this.logPerformance(loadTime);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
config: agentConfig,
|
|
154
|
+
files: fileContents,
|
|
155
|
+
loadTime,
|
|
156
|
+
configSize: totalSize,
|
|
157
|
+
sectionsLoaded,
|
|
158
|
+
cacheHit,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Get list of files to load based on lazy loading rules
|
|
164
|
+
*
|
|
165
|
+
* @returns {string[]} Array of file paths to load
|
|
166
|
+
*/
|
|
167
|
+
getFilesToLoad() {
|
|
168
|
+
const files = [];
|
|
169
|
+
const filesLoaded = this.requirements.files_loaded || [];
|
|
170
|
+
|
|
171
|
+
for (const fileEntry of filesLoaded) {
|
|
172
|
+
// Parse file entry (can be string or object)
|
|
173
|
+
const fileConfig = typeof fileEntry === 'string'
|
|
174
|
+
? { path: fileEntry, lazy: false }
|
|
175
|
+
: fileEntry;
|
|
176
|
+
|
|
177
|
+
const { path: filePath, lazy, condition } = fileConfig;
|
|
178
|
+
|
|
179
|
+
// Apply lazy loading rules
|
|
180
|
+
if (lazy && !this.shouldLoadLazy(condition)) {
|
|
181
|
+
continue; // Skip lazy-loaded file
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
files.push(filePath);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return files;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Check if lazy-loaded file should be loaded
|
|
192
|
+
*
|
|
193
|
+
* @param {string} condition - Condition to check
|
|
194
|
+
* @returns {boolean} Whether to load the file
|
|
195
|
+
*/
|
|
196
|
+
shouldLoadLazy(condition) {
|
|
197
|
+
// Simple condition evaluation
|
|
198
|
+
// In the future, this could be expanded to support complex conditions
|
|
199
|
+
|
|
200
|
+
if (!condition) {
|
|
201
|
+
return false; // No condition = don't load
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Example conditions:
|
|
205
|
+
// - "yolo_mode" - load only in yolo mode
|
|
206
|
+
// - "story_development" - load during story development
|
|
207
|
+
// - "always" - always load (same as lazy: false)
|
|
208
|
+
|
|
209
|
+
// For now, return false (don't load lazy files by default)
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Load a file with caching
|
|
215
|
+
*
|
|
216
|
+
* @param {string} filePath - Path to file
|
|
217
|
+
* @param {boolean} skipCache - Skip cache
|
|
218
|
+
* @returns {Promise<Object>} File content and metadata
|
|
219
|
+
*/
|
|
220
|
+
async loadFile(filePath, skipCache = false) {
|
|
221
|
+
const cacheKey = `file:${filePath}`;
|
|
222
|
+
|
|
223
|
+
// Check cache first
|
|
224
|
+
if (!skipCache) {
|
|
225
|
+
const cached = this.cache.get(cacheKey);
|
|
226
|
+
if (cached) {
|
|
227
|
+
return {
|
|
228
|
+
content: cached.content,
|
|
229
|
+
size: cached.size,
|
|
230
|
+
fromCache: true,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
try {
|
|
236
|
+
// Resolve path relative to project root
|
|
237
|
+
const fullPath = path.isAbsolute(filePath)
|
|
238
|
+
? filePath
|
|
239
|
+
: path.join(process.cwd(), filePath);
|
|
240
|
+
|
|
241
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
242
|
+
const size = Buffer.byteLength(content, 'utf8');
|
|
243
|
+
|
|
244
|
+
// Cache the result
|
|
245
|
+
this.cache.set(cacheKey, { content, size });
|
|
246
|
+
|
|
247
|
+
return {
|
|
248
|
+
content,
|
|
249
|
+
size,
|
|
250
|
+
fromCache: false,
|
|
251
|
+
};
|
|
252
|
+
} catch (error) {
|
|
253
|
+
console.warn(`⚠️ Failed to load file ${filePath}: ${error.message}`);
|
|
254
|
+
return {
|
|
255
|
+
content: null,
|
|
256
|
+
size: 0,
|
|
257
|
+
fromCache: false,
|
|
258
|
+
error: error.message,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Log performance metrics
|
|
265
|
+
*
|
|
266
|
+
* @param {number} loadTime - Load time in milliseconds
|
|
267
|
+
*/
|
|
268
|
+
logPerformance(loadTime) {
|
|
269
|
+
const target = this.requirements.performance_target || '<150ms';
|
|
270
|
+
const targetMs = parseInt(target.replace('<', '').replace('ms', ''));
|
|
271
|
+
|
|
272
|
+
if (loadTime > targetMs) {
|
|
273
|
+
console.warn(`⚠️ Agent ${this.agentId} load time exceeded target: ${loadTime}ms > ${targetMs}ms`);
|
|
274
|
+
} else {
|
|
275
|
+
console.log(`✅ Agent ${this.agentId} loaded in ${loadTime}ms (target: ${target})`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Preload files for this agent (warm up cache)
|
|
281
|
+
*
|
|
282
|
+
* @param {Object} coreConfig - Core configuration
|
|
283
|
+
* @returns {Promise<void>}
|
|
284
|
+
*/
|
|
285
|
+
async preload(coreConfig) {
|
|
286
|
+
console.log(`🔄 Preloading config for @${this.agentId}...`);
|
|
287
|
+
|
|
288
|
+
await this.load(coreConfig, {
|
|
289
|
+
trackPerformance: false,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
console.log(`✅ Config preloaded for @${this.agentId}`);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Agent definition cache (5 min TTL)
|
|
297
|
+
* @private
|
|
298
|
+
*/
|
|
299
|
+
static agentDefCache = new Map();
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Load complete agent definition from markdown file
|
|
303
|
+
*
|
|
304
|
+
* @param {Object} options - Load options
|
|
305
|
+
* @param {boolean} options.skipCache - Skip cache and force reload
|
|
306
|
+
* @returns {Promise<Object>} Complete agent definition (agent, persona_profile, commands, etc.)
|
|
307
|
+
*/
|
|
308
|
+
async loadAgentDefinition(options = {}) {
|
|
309
|
+
const skipCache = options.skipCache || false;
|
|
310
|
+
const cacheKey = this.agentId;
|
|
311
|
+
|
|
312
|
+
// Check cache
|
|
313
|
+
if (!skipCache && AgentConfigLoader.agentDefCache.has(cacheKey)) {
|
|
314
|
+
const cached = AgentConfigLoader.agentDefCache.get(cacheKey);
|
|
315
|
+
if (Date.now() - cached.timestamp < 5 * 60 * 1000) {
|
|
316
|
+
return cached.definition;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Load from file
|
|
321
|
+
const agentPath = path.join(process.cwd(), '.aios-core', 'development', 'agents', `${this.agentId}.md`);
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
const content = await fs.readFile(agentPath, 'utf8');
|
|
325
|
+
|
|
326
|
+
// Extract YAML block (handle both ```yaml and ```yml)
|
|
327
|
+
const yamlMatch = content.match(/```ya?ml\n([\s\S]*?)\n```/);
|
|
328
|
+
if (!yamlMatch) {
|
|
329
|
+
throw new Error(`No YAML block found in ${this.agentId}.md`);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
let agentDef;
|
|
333
|
+
try {
|
|
334
|
+
agentDef = yaml.parse(yamlMatch[1]);
|
|
335
|
+
} catch (parseError) {
|
|
336
|
+
// Try normalizing compact command format before parsing
|
|
337
|
+
const normalizedYaml = this._normalizeCompactCommands(yamlMatch[1]);
|
|
338
|
+
try {
|
|
339
|
+
agentDef = yaml.parse(normalizedYaml);
|
|
340
|
+
} catch (secondError) {
|
|
341
|
+
throw new Error(`Failed to parse agent definition YAML for ${this.agentId}: ${parseError.message}`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Validate structure
|
|
346
|
+
if (!agentDef.agent || !agentDef.agent.id) {
|
|
347
|
+
throw new Error('Invalid agent definition: missing agent.id');
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Normalize and validate
|
|
351
|
+
const normalized = this._normalizeAgentDefinition(agentDef);
|
|
352
|
+
|
|
353
|
+
// Cache
|
|
354
|
+
AgentConfigLoader.agentDefCache.set(cacheKey, {
|
|
355
|
+
definition: normalized,
|
|
356
|
+
timestamp: Date.now(),
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
return normalized;
|
|
360
|
+
} catch (error) {
|
|
361
|
+
if (error.code === 'ENOENT') {
|
|
362
|
+
throw new Error(`Agent file not found: ${this.agentId}.md`);
|
|
363
|
+
}
|
|
364
|
+
throw new Error(`Failed to load agent definition for ${this.agentId}: ${error.message}`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Normalize compact command format to expanded format
|
|
370
|
+
* Converts: "- help: Description" to "- name: help\n description: Description"
|
|
371
|
+
* @private
|
|
372
|
+
* @param {string} yamlContent - Raw YAML content
|
|
373
|
+
* @returns {string} Normalized YAML content
|
|
374
|
+
*/
|
|
375
|
+
_normalizeCompactCommands(yamlContent) {
|
|
376
|
+
const lines = yamlContent.split('\n');
|
|
377
|
+
const normalizedLines = [];
|
|
378
|
+
let inCommandsSection = false;
|
|
379
|
+
|
|
380
|
+
for (let i = 0; i < lines.length; i++) {
|
|
381
|
+
const line = lines[i];
|
|
382
|
+
|
|
383
|
+
// Detect commands section start
|
|
384
|
+
if (line.match(/^\s*commands:\s*$/)) {
|
|
385
|
+
inCommandsSection = true;
|
|
386
|
+
normalizedLines.push(line);
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Detect end of commands section (next top-level key without indentation)
|
|
391
|
+
if (inCommandsSection && line.match(/^\w+:/) && !line.match(/^\s+/)) {
|
|
392
|
+
inCommandsSection = false;
|
|
393
|
+
normalizedLines.push(line);
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Process compact command format in commands section
|
|
398
|
+
if (inCommandsSection) {
|
|
399
|
+
// Match: " - command-name {args}: Description with (parentheses)"
|
|
400
|
+
// Pattern: indent + "- " + command (may have {args}) + ": " + description
|
|
401
|
+
const compactMatch = line.match(/^(\s+)- (\w+(?:-\w+)*(?:\s+\{[^}]+\})?):\s*(.+)$/);
|
|
402
|
+
if (compactMatch) {
|
|
403
|
+
const [, indent, command, description] = compactMatch;
|
|
404
|
+
const commandName = command.split(/\s+/)[0];
|
|
405
|
+
|
|
406
|
+
// Escape quotes in description
|
|
407
|
+
const escapedDescription = description.trim().replace(/"/g, '\\"');
|
|
408
|
+
|
|
409
|
+
normalizedLines.push(`${indent}- name: ${commandName}`);
|
|
410
|
+
normalizedLines.push(`${indent} description: "${escapedDescription}"`);
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
normalizedLines.push(line);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return normalizedLines.join('\n');
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Normalize agent definition with defaults
|
|
423
|
+
* @private
|
|
424
|
+
* @param {Object} agentDef - Raw agent definition
|
|
425
|
+
* @returns {Object} Normalized agent definition
|
|
426
|
+
*/
|
|
427
|
+
_normalizeAgentDefinition(agentDef) {
|
|
428
|
+
// Ensure agent object exists
|
|
429
|
+
if (!agentDef.agent) {
|
|
430
|
+
throw new Error('Agent definition missing "agent" section');
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
const agent = agentDef.agent;
|
|
434
|
+
|
|
435
|
+
// Normalize: ensure required fields have defaults
|
|
436
|
+
agent.id = agent.id || 'unknown';
|
|
437
|
+
agent.name = agent.name || agent.id;
|
|
438
|
+
agent.icon = agent.icon || '🤖';
|
|
439
|
+
|
|
440
|
+
// Ensure persona_profile exists with greeting_levels (without overwriting)
|
|
441
|
+
if (!agentDef.persona_profile) {
|
|
442
|
+
agentDef.persona_profile = {
|
|
443
|
+
greeting_levels: {
|
|
444
|
+
minimal: `${agent.icon} ${agent.id} Agent ready`,
|
|
445
|
+
named: `${agent.icon} ${agent.name} ready`,
|
|
446
|
+
archetypal: `${agent.icon} ${agent.name} ready`,
|
|
447
|
+
},
|
|
448
|
+
};
|
|
449
|
+
} else if (!agentDef.persona_profile.greeting_levels) {
|
|
450
|
+
agentDef.persona_profile.greeting_levels = {
|
|
451
|
+
minimal: `${agent.icon} ${agent.id} Agent ready`,
|
|
452
|
+
named: `${agent.icon} ${agent.name} ready`,
|
|
453
|
+
archetypal: `${agent.icon} ${agent.name} ready`,
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
// Note: If greeting_levels already exists in YAML, we keep it as-is (don't overwrite)
|
|
457
|
+
|
|
458
|
+
// Ensure commands array exists
|
|
459
|
+
if (!agentDef.commands || !Array.isArray(agentDef.commands)) {
|
|
460
|
+
agentDef.commands = [];
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
return agentDef;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Load both config and definition (convenience method)
|
|
468
|
+
*
|
|
469
|
+
* @param {Object} coreConfig - Core configuration
|
|
470
|
+
* @param {Object} options - Load options
|
|
471
|
+
* @returns {Promise<Object>} Combined config and definition
|
|
472
|
+
*/
|
|
473
|
+
async loadComplete(coreConfig, options = {}) {
|
|
474
|
+
const [config, definition] = await Promise.all([
|
|
475
|
+
this.load(coreConfig, options),
|
|
476
|
+
this.loadAgentDefinition(options),
|
|
477
|
+
]);
|
|
478
|
+
|
|
479
|
+
return {
|
|
480
|
+
...config,
|
|
481
|
+
definition,
|
|
482
|
+
agent: definition.agent,
|
|
483
|
+
persona_profile: definition.persona_profile,
|
|
484
|
+
commands: definition.commands || [],
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Clear cache for this agent
|
|
490
|
+
*/
|
|
491
|
+
clearCache() {
|
|
492
|
+
const filesToLoad = this.getFilesToLoad();
|
|
493
|
+
|
|
494
|
+
for (const filePath of filesToLoad) {
|
|
495
|
+
const cacheKey = `file:${filePath}`;
|
|
496
|
+
this.cache.invalidate(cacheKey);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// Also clear agent definition cache
|
|
500
|
+
AgentConfigLoader.agentDefCache.delete(this.agentId);
|
|
501
|
+
|
|
502
|
+
console.log(`🗑️ Cache cleared for @${this.agentId}`);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Convenience function to load config for an agent
|
|
508
|
+
*
|
|
509
|
+
* @param {string} agentId - Agent identifier
|
|
510
|
+
* @param {Object} coreConfig - Core configuration
|
|
511
|
+
* @param {Object} options - Load options
|
|
512
|
+
* @returns {Promise<Object>} Agent configuration
|
|
513
|
+
*/
|
|
514
|
+
async function loadAgentConfig(agentId, coreConfig, options = {}) {
|
|
515
|
+
const loader = new AgentConfigLoader(agentId);
|
|
516
|
+
return await loader.load(coreConfig, options);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Preload configuration for multiple agents
|
|
521
|
+
*
|
|
522
|
+
* @param {string[]} agentIds - Array of agent IDs
|
|
523
|
+
* @param {Object} coreConfig - Core configuration
|
|
524
|
+
* @returns {Promise<void>}
|
|
525
|
+
*/
|
|
526
|
+
async function preloadAgents(agentIds, coreConfig) {
|
|
527
|
+
console.log(`🔄 Preloading ${agentIds.length} agents...`);
|
|
528
|
+
|
|
529
|
+
const startTime = Date.now();
|
|
530
|
+
|
|
531
|
+
await Promise.all(
|
|
532
|
+
agentIds.map(agentId => {
|
|
533
|
+
const loader = new AgentConfigLoader(agentId);
|
|
534
|
+
return loader.preload(coreConfig);
|
|
535
|
+
}),
|
|
536
|
+
);
|
|
537
|
+
|
|
538
|
+
const duration = Date.now() - startTime;
|
|
539
|
+
console.log(`✅ ${agentIds.length} agents preloaded in ${duration}ms`);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
module.exports = {
|
|
543
|
+
AgentConfigLoader,
|
|
544
|
+
loadAgentConfig,
|
|
545
|
+
preloadAgents,
|
|
546
|
+
loadAgentRequirements,
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
// CLI support
|
|
550
|
+
if (require.main === module) {
|
|
551
|
+
const command = process.argv[2];
|
|
552
|
+
const agentId = process.argv[3];
|
|
553
|
+
|
|
554
|
+
(async () => {
|
|
555
|
+
try {
|
|
556
|
+
// Load core config
|
|
557
|
+
const coreConfigPath = path.join(process.cwd(), '.aios-core', 'core-config.yaml');
|
|
558
|
+
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
559
|
+
const coreConfig = yaml.parse(coreConfigContent);
|
|
560
|
+
|
|
561
|
+
switch (command) {
|
|
562
|
+
case 'load':
|
|
563
|
+
if (!agentId) {
|
|
564
|
+
console.error('Usage: node agent-config-loader.js load <agent-id>');
|
|
565
|
+
process.exit(1);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
console.log(`\n🔍 Loading config for @${agentId}...\n`);
|
|
569
|
+
|
|
570
|
+
const loader = new AgentConfigLoader(agentId);
|
|
571
|
+
const result = await loader.load(coreConfig);
|
|
572
|
+
|
|
573
|
+
console.log('\n📊 Results:');
|
|
574
|
+
console.log(` Load Time: ${result.loadTime}ms`);
|
|
575
|
+
console.log(` Config Size: ${(result.configSize / 1024).toFixed(2)} KB`);
|
|
576
|
+
console.log(` Cache Hit: ${result.cacheHit ? 'Yes' : 'No'}`);
|
|
577
|
+
console.log(` Sections Loaded: ${result.sectionsLoaded.join(', ')}`);
|
|
578
|
+
console.log(` Files Loaded: ${Object.keys(result.files).length}`);
|
|
579
|
+
break;
|
|
580
|
+
|
|
581
|
+
case 'preload':
|
|
582
|
+
const agents = agentId ? [agentId] : [
|
|
583
|
+
'aios-master', 'dev', 'qa', 'architect', 'po', 'pm', 'sm',
|
|
584
|
+
'analyst', 'ux-expert', 'data-engineer', 'devops', 'db-sage', 'security',
|
|
585
|
+
];
|
|
586
|
+
|
|
587
|
+
await preloadAgents(agents, coreConfig);
|
|
588
|
+
break;
|
|
589
|
+
|
|
590
|
+
case 'test':
|
|
591
|
+
console.log('\n🧪 Testing agent config loader...\n');
|
|
592
|
+
|
|
593
|
+
// Test loading for a few agents
|
|
594
|
+
const testAgents = ['dev', 'qa', 'po'];
|
|
595
|
+
|
|
596
|
+
for (const agent of testAgents) {
|
|
597
|
+
const testLoader = new AgentConfigLoader(agent);
|
|
598
|
+
const testResult = await testLoader.load(coreConfig);
|
|
599
|
+
|
|
600
|
+
console.log(`@${agent}:`);
|
|
601
|
+
console.log(` Load Time: ${testResult.loadTime}ms`);
|
|
602
|
+
console.log(` Config Size: ${(testResult.configSize / 1024).toFixed(2)} KB`);
|
|
603
|
+
console.log(` Cache Hit: ${testResult.cacheHit ? 'Yes' : 'No'}`);
|
|
604
|
+
console.log('');
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
console.log('✅ All tests passed!\n');
|
|
608
|
+
break;
|
|
609
|
+
|
|
610
|
+
default:
|
|
611
|
+
console.log(`
|
|
612
|
+
Usage:
|
|
613
|
+
node agent-config-loader.js load <agent-id> - Load config for specific agent
|
|
614
|
+
node agent-config-loader.js preload [agent] - Preload agent(s) config
|
|
615
|
+
node agent-config-loader.js test - Run test suite
|
|
616
|
+
`);
|
|
617
|
+
}
|
|
618
|
+
} catch (error) {
|
|
619
|
+
console.error('Error:', error.message);
|
|
620
|
+
console.error(error.stack);
|
|
621
|
+
process.exit(1);
|
|
622
|
+
}
|
|
623
|
+
})();
|
|
624
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Exit Hooks - Workflow Context Persistence
|
|
3
|
+
*
|
|
4
|
+
* INTEGRATION NOTE: This module defines the hook system.
|
|
5
|
+
* Actual integration requires modifications to the agent activation framework
|
|
6
|
+
* (not in scope for this story - see Story 6.1.6 for full agent framework integration)
|
|
7
|
+
*
|
|
8
|
+
* Hook Signature:
|
|
9
|
+
* onCommandComplete(agent, command, result, context)
|
|
10
|
+
*
|
|
11
|
+
* Purpose:
|
|
12
|
+
* - Save workflow state when commands complete successfully
|
|
13
|
+
* - Persist context (story_path, branch, epic) to session-state.json
|
|
14
|
+
* - Enable workflow navigation on subsequent agent activation
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
const path = require('path');
|
|
19
|
+
const ContextDetector = require('../../core/session/context-detector');
|
|
20
|
+
|
|
21
|
+
const SESSION_STATE_PATH = path.join(process.cwd(), '.aios', 'session-state.json');
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Agent exit hook - called when command completes
|
|
25
|
+
* @param {string} agent - Agent ID (e.g., 'po', 'dev', 'qa')
|
|
26
|
+
* @param {string} command - Command executed (e.g., 'validate-story-draft')
|
|
27
|
+
* @param {Object} result - Command result { success: boolean, ... }
|
|
28
|
+
* @param {Object} context - Execution context { story_path, branch, ... }
|
|
29
|
+
*/
|
|
30
|
+
function onCommandComplete(agent, command, result, context) {
|
|
31
|
+
try {
|
|
32
|
+
// Only save state for successful commands
|
|
33
|
+
if (!result || result.success !== true) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Update session state
|
|
38
|
+
const detector = new ContextDetector();
|
|
39
|
+
const workflowState = detectWorkflowState(command, result);
|
|
40
|
+
|
|
41
|
+
detector.updateSessionState({
|
|
42
|
+
workflowActive: workflowState?.workflow || null,
|
|
43
|
+
lastCommands: [command],
|
|
44
|
+
agentSequence: [agent],
|
|
45
|
+
context: {
|
|
46
|
+
story_path: context.story_path || '',
|
|
47
|
+
branch: context.branch || '',
|
|
48
|
+
epic: context.epic || '',
|
|
49
|
+
lastCommand: command,
|
|
50
|
+
lastAgent: agent,
|
|
51
|
+
},
|
|
52
|
+
}, SESSION_STATE_PATH);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
// Graceful degradation - hook failures must not break command execution
|
|
55
|
+
console.warn('[AgentExitHooks] Hook failed:', error.message);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Detect workflow state from command completion
|
|
61
|
+
* @param {string} command - Command that completed
|
|
62
|
+
* @param {Object} result - Command result
|
|
63
|
+
* @returns {Object|null} { workflow, state } or null
|
|
64
|
+
*/
|
|
65
|
+
function detectWorkflowState(command, result) {
|
|
66
|
+
// Map commands to workflow states
|
|
67
|
+
const stateMap = {
|
|
68
|
+
'validate-story-draft': { workflow: 'story_development', state: 'validated' },
|
|
69
|
+
'develop': { workflow: 'story_development', state: 'in_development' },
|
|
70
|
+
'review-qa': { workflow: 'story_development', state: 'qa_reviewed' },
|
|
71
|
+
'create-epic': { workflow: 'epic_creation', state: 'epic_created' },
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
return stateMap[command] || null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Register hook in agent framework
|
|
79
|
+
* INTEGRATION POINT: This needs to be called during agent initialization
|
|
80
|
+
* @param {Object} agentFramework - Agent framework instance
|
|
81
|
+
*/
|
|
82
|
+
function registerHook(agentFramework) {
|
|
83
|
+
if (!agentFramework || !agentFramework.registerCommandHook) {
|
|
84
|
+
console.warn('[AgentExitHooks] Framework does not support hooks');
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
agentFramework.registerCommandHook('onComplete', onCommandComplete);
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
module.exports = {
|
|
93
|
+
onCommandComplete,
|
|
94
|
+
registerHook,
|
|
95
|
+
detectWorkflowState,
|
|
96
|
+
};
|