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,866 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Greeting Builder - Contextual Agent Greeting System
|
|
3
|
+
*
|
|
4
|
+
* Builds intelligent greetings based on:
|
|
5
|
+
* - Session type (new/existing/workflow)
|
|
6
|
+
* - Git configuration status
|
|
7
|
+
* - Project status
|
|
8
|
+
* - Command visibility metadata
|
|
9
|
+
*
|
|
10
|
+
* Performance: <150ms (hard limit with timeout protection)
|
|
11
|
+
* Fallback: Simple greeting on any error
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const ContextDetector = require('../../core/session/context-detector');
|
|
15
|
+
const GitConfigDetector = require('../../infrastructure/scripts/git-config-detector');
|
|
16
|
+
const WorkflowNavigator = require('./workflow-navigator');
|
|
17
|
+
const GreetingPreferenceManager = require('./greeting-preference-manager');
|
|
18
|
+
const { loadProjectStatus, formatStatusDisplay } = require('../../infrastructure/scripts/project-status-loader');
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
const yaml = require('js-yaml');
|
|
22
|
+
|
|
23
|
+
const GREETING_TIMEOUT = 150; // 150ms hard limit
|
|
24
|
+
const GIT_WARNING_TEMPLATE = `
|
|
25
|
+
⚠️ **Git Configuration Needed**
|
|
26
|
+
Your project is not connected to a git repository.
|
|
27
|
+
Run \`git init\` and \`git remote add origin <url>\` to enable version control.
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
class GreetingBuilder {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.contextDetector = new ContextDetector();
|
|
33
|
+
this.gitConfigDetector = new GitConfigDetector();
|
|
34
|
+
this.workflowNavigator = new WorkflowNavigator();
|
|
35
|
+
this.preferenceManager = new GreetingPreferenceManager();
|
|
36
|
+
this.config = this._loadConfig();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Build contextual greeting for agent
|
|
41
|
+
* @param {Object} agent - Agent definition
|
|
42
|
+
* @param {Object} context - Session context
|
|
43
|
+
* @returns {Promise<string>} Formatted greeting
|
|
44
|
+
*/
|
|
45
|
+
async buildGreeting(agent, context = {}) {
|
|
46
|
+
const fallbackGreeting = this.buildSimpleGreeting(agent);
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
// Check user preference (Story 6.1.4)
|
|
50
|
+
const preference = this.preferenceManager.getPreference();
|
|
51
|
+
|
|
52
|
+
if (preference !== 'auto') {
|
|
53
|
+
// Override with fixed level
|
|
54
|
+
return this.buildFixedLevelGreeting(agent, preference);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Use session-aware logic (Story 6.1.2.5)
|
|
58
|
+
const greetingPromise = this._buildContextualGreeting(agent, context);
|
|
59
|
+
const timeoutPromise = new Promise((_, reject) =>
|
|
60
|
+
setTimeout(() => reject(new Error('Greeting timeout')), GREETING_TIMEOUT),
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
return await Promise.race([greetingPromise, timeoutPromise]);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.warn('[GreetingBuilder] Fallback to simple greeting:', error.message);
|
|
66
|
+
return fallbackGreeting;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Build contextual greeting (internal implementation)
|
|
72
|
+
* @private
|
|
73
|
+
* @param {Object} agent - Agent definition
|
|
74
|
+
* @param {Object} context - Session context (may contain pre-loaded values)
|
|
75
|
+
* @returns {Promise<string>} Contextual greeting
|
|
76
|
+
*/
|
|
77
|
+
async _buildContextualGreeting(agent, context) {
|
|
78
|
+
// Use pre-loaded values if available, otherwise load
|
|
79
|
+
const sessionType = context.sessionType ||
|
|
80
|
+
await this._safeDetectSessionType(context);
|
|
81
|
+
|
|
82
|
+
const projectStatus = context.projectStatus ||
|
|
83
|
+
await this._safeLoadProjectStatus();
|
|
84
|
+
|
|
85
|
+
// gitConfig always loads (fast, cached)
|
|
86
|
+
const gitConfig = await this._safeCheckGitConfig();
|
|
87
|
+
|
|
88
|
+
// Build greeting sections based on session type
|
|
89
|
+
const sections = [];
|
|
90
|
+
|
|
91
|
+
// 1. Presentation (always)
|
|
92
|
+
sections.push(this.buildPresentation(agent, sessionType));
|
|
93
|
+
|
|
94
|
+
// 2. Role description (new session only)
|
|
95
|
+
if (sessionType === 'new') {
|
|
96
|
+
sections.push(this.buildRoleDescription(agent));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 3. Project status (if git configured)
|
|
100
|
+
if (gitConfig.configured && projectStatus) {
|
|
101
|
+
sections.push(this.buildProjectStatus(projectStatus, sessionType));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 4. Context section (intelligent contextualization + recommendations)
|
|
105
|
+
const contextSection = this.buildContextSection(agent, context, sessionType, projectStatus);
|
|
106
|
+
if (contextSection) {
|
|
107
|
+
sections.push(contextSection);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// 5. Workflow suggestions (if workflow session and no context section)
|
|
111
|
+
if (sessionType === 'workflow' && context.lastCommands && !contextSection) {
|
|
112
|
+
const suggestions = this.workflowNavigator.getNextSteps(
|
|
113
|
+
context.lastCommands,
|
|
114
|
+
{ agentId: agent.id },
|
|
115
|
+
);
|
|
116
|
+
if (suggestions && suggestions.length > 0) {
|
|
117
|
+
sections.push(this.buildWorkflowSuggestions(suggestions));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 7. Commands (filtered by visibility)
|
|
122
|
+
const commands = this.filterCommandsByVisibility(agent, sessionType);
|
|
123
|
+
sections.push(this.buildCommands(commands, sessionType));
|
|
124
|
+
|
|
125
|
+
// 8. Footer with signature
|
|
126
|
+
sections.push(this.buildFooter(agent));
|
|
127
|
+
|
|
128
|
+
return sections.filter(Boolean).join('\n\n');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Build fixed-level greeting (Story 6.1.4)
|
|
133
|
+
* @param {Object} agent - Agent definition
|
|
134
|
+
* @param {string} level - Preference level (minimal|named|archetypal)
|
|
135
|
+
* @returns {string} Fixed-level greeting
|
|
136
|
+
*/
|
|
137
|
+
buildFixedLevelGreeting(agent, level) {
|
|
138
|
+
const profile = agent.persona_profile;
|
|
139
|
+
|
|
140
|
+
if (!profile || !profile.greeting_levels) {
|
|
141
|
+
return this.buildSimpleGreeting(agent);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Select greeting based on preference
|
|
145
|
+
let greetingText;
|
|
146
|
+
switch (level) {
|
|
147
|
+
case 'minimal':
|
|
148
|
+
greetingText = profile.greeting_levels.minimal || `${agent.icon} ${agent.id} Agent ready`;
|
|
149
|
+
break;
|
|
150
|
+
case 'named':
|
|
151
|
+
greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
|
|
152
|
+
break;
|
|
153
|
+
case 'archetypal':
|
|
154
|
+
greetingText = profile.greeting_levels.archetypal || `${agent.icon} ${agent.name} the ${profile.archetype} ready`;
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return `${greetingText}\n\nType \`*help\` to see available commands.`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Build simple greeting (fallback)
|
|
165
|
+
* @param {Object} agent - Agent definition
|
|
166
|
+
* @returns {string} Simple greeting
|
|
167
|
+
*/
|
|
168
|
+
buildSimpleGreeting(agent) {
|
|
169
|
+
const greetingLevels = agent.persona_profile?.communication?.greeting_levels || agent.persona_profile?.greeting_levels;
|
|
170
|
+
const greeting = greetingLevels?.named || `${agent.icon} ${agent.name} ready`;
|
|
171
|
+
return `${greeting}\n\nType \`*help\` to see available commands.`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Build presentation section
|
|
176
|
+
* @param {Object} agent - Agent definition
|
|
177
|
+
* @param {string} sessionType - Session type
|
|
178
|
+
* @returns {string} Presentation text
|
|
179
|
+
*/
|
|
180
|
+
buildPresentation(agent, sessionType) {
|
|
181
|
+
const profile = agent.persona_profile;
|
|
182
|
+
|
|
183
|
+
// Try greeting_levels from communication first, then fall back to top level
|
|
184
|
+
const greetingLevels = profile?.communication?.greeting_levels || profile?.greeting_levels;
|
|
185
|
+
|
|
186
|
+
if (!greetingLevels) {
|
|
187
|
+
return `${agent.icon} ${agent.name} ready`;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Always use archetypal greeting for richer presentation
|
|
191
|
+
const archetypeGreeting = greetingLevels.archetypal ||
|
|
192
|
+
greetingLevels.named ||
|
|
193
|
+
`${agent.icon} ${agent.name} ready`;
|
|
194
|
+
|
|
195
|
+
return archetypeGreeting;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Build role description section
|
|
200
|
+
* @param {Object} agent - Agent definition
|
|
201
|
+
* @returns {string} Role description
|
|
202
|
+
*/
|
|
203
|
+
buildRoleDescription(agent) {
|
|
204
|
+
if (!agent.persona || !agent.persona.role) {
|
|
205
|
+
return '';
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return `**Role:** ${agent.persona.role}`;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Build project status section
|
|
213
|
+
* @param {Object} projectStatus - Project status data
|
|
214
|
+
* @param {string} sessionType - Session type
|
|
215
|
+
* @returns {string} Formatted project status
|
|
216
|
+
*/
|
|
217
|
+
buildProjectStatus(projectStatus, sessionType = 'full') {
|
|
218
|
+
if (!projectStatus) {
|
|
219
|
+
return '';
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const format = sessionType === 'workflow' ? 'condensed' : 'full';
|
|
223
|
+
return this._formatProjectStatus(projectStatus, format);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Format project status
|
|
228
|
+
* @private
|
|
229
|
+
* @param {Object} status - Project status
|
|
230
|
+
* @param {string} format - 'full' | 'condensed'
|
|
231
|
+
* @returns {string} Formatted status
|
|
232
|
+
*/
|
|
233
|
+
_formatProjectStatus(status, format) {
|
|
234
|
+
if (format === 'condensed') {
|
|
235
|
+
const parts = [];
|
|
236
|
+
|
|
237
|
+
if (status.branch) {
|
|
238
|
+
parts.push(`🌿 ${status.branch}`);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (status.modifiedFilesTotalCount > 0) {
|
|
242
|
+
parts.push(`📝 ${status.modifiedFilesTotalCount} modified`);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (status.currentStory) {
|
|
246
|
+
parts.push(`📖 ${status.currentStory}`);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return parts.length > 0 ? `📊 ${parts.join(' | ')}` : '';
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Full format with emojis
|
|
253
|
+
const lines = [];
|
|
254
|
+
|
|
255
|
+
if (status.branch) {
|
|
256
|
+
lines.push(`🌿 **Branch:** ${status.branch}`);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (status.modifiedFiles && status.modifiedFiles.length > 0) {
|
|
260
|
+
let filesDisplay = status.modifiedFiles.join(', ');
|
|
261
|
+
const totalCount = status.modifiedFilesTotalCount || status.modifiedFiles.length;
|
|
262
|
+
if (totalCount > status.modifiedFiles.length) {
|
|
263
|
+
const remaining = totalCount - status.modifiedFiles.length;
|
|
264
|
+
filesDisplay += ` ...and ${remaining} more`;
|
|
265
|
+
}
|
|
266
|
+
lines.push(`📝 **Modified:** ${filesDisplay}`);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (status.recentCommits && status.recentCommits.length > 0) {
|
|
270
|
+
lines.push(`📖 **Recent:** ${status.recentCommits.join(', ')}`);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (status.currentStory) {
|
|
274
|
+
lines.push(`📌 **Story:** ${status.currentStory}`);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (lines.length === 0) {
|
|
278
|
+
return '';
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return `📊 **Project Status:**\n - ${lines.join('\n - ')}`;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Build intelligent context section with recommendations
|
|
286
|
+
* @param {Object} agent - Agent definition
|
|
287
|
+
* @param {Object} context - Session context
|
|
288
|
+
* @param {string} sessionType - Session type
|
|
289
|
+
* @param {Object} projectStatus - Project status
|
|
290
|
+
* @returns {string|null} Context section with recommendations
|
|
291
|
+
*/
|
|
292
|
+
buildContextSection(agent, context, sessionType, projectStatus) {
|
|
293
|
+
// Skip for new sessions
|
|
294
|
+
if (sessionType === 'new') {
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
const parts = [];
|
|
299
|
+
|
|
300
|
+
// Build intelligent context narrative
|
|
301
|
+
const contextNarrative = this._buildContextNarrative(agent, context, projectStatus);
|
|
302
|
+
|
|
303
|
+
if (contextNarrative.description) {
|
|
304
|
+
parts.push(`💡 **Context:** ${contextNarrative.description}`);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (contextNarrative.recommendedCommand) {
|
|
308
|
+
parts.push(` **Recommended:** Use \`${contextNarrative.recommendedCommand}\` to continue`);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return parts.length > 0 ? parts.join('\n') : null;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Build intelligent context narrative based on previous work
|
|
316
|
+
* Analyzes files, story, and previous agent to create rich context
|
|
317
|
+
* @private
|
|
318
|
+
*/
|
|
319
|
+
_buildContextNarrative(agent, context, projectStatus) {
|
|
320
|
+
const prevAgentId = this._getPreviousAgentId(context);
|
|
321
|
+
const prevAgentName = this._getPreviousAgentName(context);
|
|
322
|
+
|
|
323
|
+
// Priority 1: Agent transition + Story + Modified files (richest context)
|
|
324
|
+
if (prevAgentId && projectStatus?.modifiedFiles) {
|
|
325
|
+
// Use session story if available (more accurate), otherwise use git story
|
|
326
|
+
const sessionStory = context.sessionStory || projectStatus.currentStory;
|
|
327
|
+
const storyContext = this._analyzeStoryContext({ ...projectStatus, currentStory: sessionStory });
|
|
328
|
+
const fileContext = this._analyzeModifiedFiles(projectStatus.modifiedFiles, sessionStory);
|
|
329
|
+
|
|
330
|
+
let description = `Vejo que @${prevAgentName} finalizou os ajustes`;
|
|
331
|
+
|
|
332
|
+
if (fileContext.keyFiles.length > 0) {
|
|
333
|
+
description += ` ${fileContext.summary}`;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if (storyContext.storyFile) {
|
|
337
|
+
description += ` no **\`${storyContext.storyFile}\`**`;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
description += `. Agora podemos ${this._getAgentAction(agent.id, storyContext)}`;
|
|
341
|
+
|
|
342
|
+
const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
|
|
343
|
+
|
|
344
|
+
return { description, recommendedCommand };
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Priority 2: Agent transition + Story (no file details)
|
|
348
|
+
if (prevAgentId && projectStatus?.currentStory && projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE') {
|
|
349
|
+
const storyContext = this._analyzeStoryContext(projectStatus);
|
|
350
|
+
const description = `Continuando do trabalho de @${prevAgentName} em ${projectStatus.currentStory}. ${this._getAgentAction(agent.id, storyContext)}`;
|
|
351
|
+
const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
|
|
352
|
+
|
|
353
|
+
return { description, recommendedCommand };
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Priority 3: Just agent transition
|
|
357
|
+
if (prevAgentId) {
|
|
358
|
+
const description = `Continuing from @${prevAgentName}`;
|
|
359
|
+
const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, {});
|
|
360
|
+
|
|
361
|
+
return { description, recommendedCommand };
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Priority 4: Story-based context
|
|
365
|
+
if (projectStatus?.currentStory && projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE') {
|
|
366
|
+
const storyContext = this._analyzeStoryContext(projectStatus);
|
|
367
|
+
const description = `Working on ${projectStatus.currentStory}`;
|
|
368
|
+
const recommendedCommand = this._suggestCommand(agent.id, null, storyContext);
|
|
369
|
+
|
|
370
|
+
return { description, recommendedCommand };
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Priority 5: Last command context
|
|
374
|
+
if (context.lastCommands && context.lastCommands.length > 0) {
|
|
375
|
+
const lastCmd = context.lastCommands[context.lastCommands.length - 1];
|
|
376
|
+
const cmdName = typeof lastCmd === 'object' ? lastCmd.command : lastCmd;
|
|
377
|
+
const description = `Last action: *${cmdName}`;
|
|
378
|
+
|
|
379
|
+
return { description, recommendedCommand: null };
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Priority 6: Session message
|
|
383
|
+
if (context.sessionMessage) {
|
|
384
|
+
return { description: context.sessionMessage, recommendedCommand: null };
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return { description: null, recommendedCommand: null };
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
_getPreviousAgentId(context) {
|
|
391
|
+
if (!context.previousAgent) return null;
|
|
392
|
+
return typeof context.previousAgent === 'string'
|
|
393
|
+
? context.previousAgent
|
|
394
|
+
: context.previousAgent.agentId;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
_getPreviousAgentName(context) {
|
|
398
|
+
if (!context.previousAgent) return null;
|
|
399
|
+
return typeof context.previousAgent === 'string'
|
|
400
|
+
? context.previousAgent
|
|
401
|
+
: (context.previousAgent.agentName || context.previousAgent.agentId);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
_analyzeStoryContext(projectStatus) {
|
|
405
|
+
const currentStory = projectStatus.currentStory || '';
|
|
406
|
+
const storyFile = currentStory ? `${currentStory}.md` : null;
|
|
407
|
+
|
|
408
|
+
return {
|
|
409
|
+
storyId: currentStory,
|
|
410
|
+
storyFile: storyFile,
|
|
411
|
+
hasStory: !!currentStory && currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE',
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
_analyzeModifiedFiles(modifiedFiles, currentStory) {
|
|
416
|
+
if (!modifiedFiles || modifiedFiles.length === 0) {
|
|
417
|
+
return { keyFiles: [], summary: '' };
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
const keyFiles = [];
|
|
421
|
+
const patterns = [
|
|
422
|
+
{ regex: /greeting-builder\.js/, priority: 1, desc: 'do **`.aios-core/scripts/greeting-builder.js`**', category: 'script' },
|
|
423
|
+
{ regex: /agent-config-loader\.js/, priority: 1, desc: 'do **`agent-config-loader.js`**', category: 'script' },
|
|
424
|
+
{ regex: /generate-greeting\.js/, priority: 1, desc: 'do **`generate-greeting.js`**', category: 'script' },
|
|
425
|
+
{ regex: /session-context-loader\.js/, priority: 1, desc: 'do **`session-context-loader.js`**', category: 'script' },
|
|
426
|
+
{ regex: /agents\/.*\.md/, priority: 1, desc: 'das definições de agentes', category: 'agent' },
|
|
427
|
+
{ regex: /\.md$/, priority: 2, desc: 'dos arquivos de documentação', category: 'doc' },
|
|
428
|
+
];
|
|
429
|
+
|
|
430
|
+
// Find matching key files (avoid duplicates)
|
|
431
|
+
const seenCategories = new Set();
|
|
432
|
+
for (const file of modifiedFiles.slice(0, 5)) { // Check first 5 files
|
|
433
|
+
for (const pattern of patterns) {
|
|
434
|
+
if (pattern.regex.test(file) && !seenCategories.has(pattern.category)) {
|
|
435
|
+
keyFiles.push({ file, desc: pattern.desc, priority: pattern.priority, category: pattern.category });
|
|
436
|
+
seenCategories.add(pattern.category);
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Sort by priority and take top 2
|
|
443
|
+
keyFiles.sort((a, b) => a.priority - b.priority);
|
|
444
|
+
const topFiles = keyFiles.slice(0, 2);
|
|
445
|
+
|
|
446
|
+
if (topFiles.length === 0) {
|
|
447
|
+
return { keyFiles: [], summary: 'dos arquivos do projeto' };
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
if (topFiles.length === 1) {
|
|
451
|
+
return { keyFiles: topFiles, summary: topFiles[0].desc };
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
return {
|
|
455
|
+
keyFiles: topFiles,
|
|
456
|
+
summary: `${topFiles[0].desc} e ${topFiles[1].desc}`,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
_getAgentAction(agentId, storyContext) {
|
|
461
|
+
const actions = {
|
|
462
|
+
'qa': 'revisar a qualidade dessa implementação',
|
|
463
|
+
'dev': 'implementar as funcionalidades',
|
|
464
|
+
'pm': 'sincronizar o progresso',
|
|
465
|
+
'po': 'validar os requisitos',
|
|
466
|
+
'sm': 'coordenar o desenvolvimento',
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
return actions[agentId] || 'continuar o trabalho';
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
_suggestCommand(agentId, prevAgentId, storyContext) {
|
|
473
|
+
// Agent transition commands
|
|
474
|
+
if (prevAgentId === 'dev' && agentId === 'qa') {
|
|
475
|
+
return storyContext.storyFile ? `*review ${storyContext.storyFile}` : '*review';
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
if (prevAgentId === 'qa' && agentId === 'dev') {
|
|
479
|
+
return '*apply-qa-fixes';
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
if (prevAgentId === 'po' && agentId === 'dev') {
|
|
483
|
+
return '*develop-yolo';
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Role-based commands when no previous agent
|
|
487
|
+
if (agentId === 'qa' && storyContext.storyFile) {
|
|
488
|
+
return `*review ${storyContext.storyFile}`;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
if (agentId === 'dev' && storyContext.hasStory) {
|
|
492
|
+
return '*develop-yolo docs/stories/[story-path].md';
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
if (agentId === 'pm' && storyContext.storyId) {
|
|
496
|
+
return `*sync-story ${storyContext.storyId}`;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
return null;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Build current context section (legacy - kept for compatibility)
|
|
504
|
+
* @param {Object} context - Session context
|
|
505
|
+
* @param {string} sessionType - Session type
|
|
506
|
+
* @param {Object} projectStatus - Project status
|
|
507
|
+
* @returns {string} Context description
|
|
508
|
+
*/
|
|
509
|
+
buildCurrentContext(context, sessionType, projectStatus) {
|
|
510
|
+
if (sessionType === 'workflow' && projectStatus?.currentStory) {
|
|
511
|
+
return `📌 **Context:** Working on ${projectStatus.currentStory}`;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if (context.lastCommand) {
|
|
515
|
+
return `📌 **Last Action:** ${context.lastCommand}`;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return '';
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Build workflow suggestions section
|
|
523
|
+
* @param {Object} context - Session context
|
|
524
|
+
* @returns {string|null} Workflow suggestions or null
|
|
525
|
+
*/
|
|
526
|
+
buildWorkflowSuggestions(context) {
|
|
527
|
+
try {
|
|
528
|
+
const commandHistory = context.commandHistory || context.lastCommands || [];
|
|
529
|
+
const workflowState = this.workflowNavigator.detectWorkflowState(commandHistory, context);
|
|
530
|
+
|
|
531
|
+
if (!workflowState) {
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
const suggestions = this.workflowNavigator.suggestNextCommands(workflowState);
|
|
536
|
+
if (!suggestions || suggestions.length === 0) {
|
|
537
|
+
return null;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
const greetingMessage = this.workflowNavigator.getGreetingMessage(workflowState);
|
|
541
|
+
const header = greetingMessage || 'Next steps:';
|
|
542
|
+
|
|
543
|
+
return this.workflowNavigator.formatSuggestions(suggestions, header);
|
|
544
|
+
} catch (error) {
|
|
545
|
+
console.warn('[GreetingBuilder] Workflow suggestions failed:', error.message);
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Build contextual suggestions based on project state
|
|
552
|
+
* Analyzes current context and suggests relevant next commands
|
|
553
|
+
* @param {Object} agent - Agent definition
|
|
554
|
+
* @param {Object} projectStatus - Project status data
|
|
555
|
+
* @param {string} sessionType - Session type
|
|
556
|
+
* @returns {string|null} Contextual suggestions or null
|
|
557
|
+
*/
|
|
558
|
+
buildContextualSuggestions(agent, projectStatus, sessionType) {
|
|
559
|
+
try {
|
|
560
|
+
const suggestions = [];
|
|
561
|
+
const agentId = agent.id;
|
|
562
|
+
|
|
563
|
+
// Analyze current story status
|
|
564
|
+
if (projectStatus.currentStory) {
|
|
565
|
+
const storyMatch = projectStatus.currentStory.match(/(\d+\.\d+\.\d+(\.\d+)?)/);
|
|
566
|
+
const storyId = storyMatch ? storyMatch[1] : null;
|
|
567
|
+
|
|
568
|
+
// QA agent: suggest validation if story is ready
|
|
569
|
+
if (agentId === 'qa' && projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
|
|
570
|
+
const recentCommit = projectStatus.recentCommits[0].message;
|
|
571
|
+
if (recentCommit.includes('complete') || recentCommit.includes('implement')) {
|
|
572
|
+
if (storyId) {
|
|
573
|
+
suggestions.push(`*review ${storyId}`);
|
|
574
|
+
} else {
|
|
575
|
+
suggestions.push('*code-review committed');
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// Dev agent: suggest development tasks
|
|
581
|
+
if (agentId === 'dev' && storyId) {
|
|
582
|
+
if (projectStatus.modifiedFilesTotalCount > 0) {
|
|
583
|
+
suggestions.push('*run-tests');
|
|
584
|
+
}
|
|
585
|
+
suggestions.push(`*develop-story ${storyId}`);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// PM/PO: suggest story/epic management
|
|
589
|
+
if ((agentId === 'pm' || agentId === 'po') && storyId) {
|
|
590
|
+
suggestions.push(`*validate-story-draft ${storyId}`);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// Analyze modified files
|
|
595
|
+
if (projectStatus.modifiedFilesTotalCount > 0) {
|
|
596
|
+
if (agentId === 'qa') {
|
|
597
|
+
suggestions.push('*code-review uncommitted');
|
|
598
|
+
}
|
|
599
|
+
if (agentId === 'dev' && projectStatus.modifiedFilesTotalCount > 5) {
|
|
600
|
+
suggestions.push('*commit-changes');
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Analyze recent work
|
|
605
|
+
if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
|
|
606
|
+
const lastCommit = projectStatus.recentCommits[0].message;
|
|
607
|
+
|
|
608
|
+
// If last commit was a test, suggest review
|
|
609
|
+
if (lastCommit.includes('test') && agentId === 'qa') {
|
|
610
|
+
suggestions.push('*run-tests');
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// If last commit was a feature, suggest QA
|
|
614
|
+
if ((lastCommit.includes('feat:') || lastCommit.includes('feature')) && agentId === 'qa') {
|
|
615
|
+
suggestions.push('*code-review committed');
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
// No suggestions found
|
|
620
|
+
if (suggestions.length === 0) {
|
|
621
|
+
return null;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
// Build suggestion message
|
|
625
|
+
const contextSummary = this._buildContextSummary(projectStatus);
|
|
626
|
+
const commandsList = suggestions
|
|
627
|
+
.slice(0, 2) // Limit to 2 suggestions
|
|
628
|
+
.map(cmd => ` - \`${cmd}\``)
|
|
629
|
+
.join('\n');
|
|
630
|
+
|
|
631
|
+
return `💡 **Context:** ${contextSummary}\n\n**Suggested Next Steps:**\n${commandsList}`;
|
|
632
|
+
|
|
633
|
+
} catch (error) {
|
|
634
|
+
console.warn('[GreetingBuilder] Contextual suggestions failed:', error.message);
|
|
635
|
+
return null;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* Build context summary based on project status
|
|
641
|
+
* @private
|
|
642
|
+
* @param {Object} projectStatus - Project status data
|
|
643
|
+
* @returns {string} Context summary
|
|
644
|
+
*/
|
|
645
|
+
_buildContextSummary(projectStatus) {
|
|
646
|
+
const parts = [];
|
|
647
|
+
|
|
648
|
+
if (projectStatus.currentStory) {
|
|
649
|
+
parts.push(`Working on ${projectStatus.currentStory}`);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
if (projectStatus.modifiedFilesTotalCount > 0) {
|
|
653
|
+
parts.push(`${projectStatus.modifiedFilesTotalCount} files modified`);
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
|
|
657
|
+
const lastCommit = projectStatus.recentCommits[0].message;
|
|
658
|
+
const shortMsg = lastCommit.length > 50 ? lastCommit.substring(0, 47) + '...' : lastCommit;
|
|
659
|
+
parts.push(`Last: "${shortMsg}"`);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
return parts.join(', ') || 'Ready to start';
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/**
|
|
666
|
+
* Build commands section
|
|
667
|
+
* @param {Array} commands - Filtered commands
|
|
668
|
+
* @param {string} sessionType - Session type
|
|
669
|
+
* @returns {string} Commands list
|
|
670
|
+
*/
|
|
671
|
+
buildCommands(commands, sessionType) {
|
|
672
|
+
if (!commands || commands.length === 0) {
|
|
673
|
+
return '**Commands:** Type `*help` for available commands';
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
const header = this._getCommandsHeader(sessionType);
|
|
677
|
+
const commandList = commands
|
|
678
|
+
.slice(0, 12) // Max 12 commands
|
|
679
|
+
.map(cmd => {
|
|
680
|
+
// Handle both object format and string format
|
|
681
|
+
if (typeof cmd === 'string') {
|
|
682
|
+
return ` - \`*${cmd}\``;
|
|
683
|
+
}
|
|
684
|
+
if (typeof cmd === 'object' && cmd !== null) {
|
|
685
|
+
const name = cmd.name || cmd.command || String(cmd);
|
|
686
|
+
const description = cmd.description || '';
|
|
687
|
+
return description ? ` - \`*${name}\`: ${description}` : ` - \`*${name}\``;
|
|
688
|
+
}
|
|
689
|
+
// Fallback for unexpected formats
|
|
690
|
+
return ` - \`*${String(cmd)}\``;
|
|
691
|
+
})
|
|
692
|
+
.filter(cmd => !cmd.includes('[object Object]')) // Filter out malformed commands
|
|
693
|
+
.join('\n');
|
|
694
|
+
|
|
695
|
+
return `**${header}:**\n${commandList}`;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Get commands header based on session type
|
|
700
|
+
* @private
|
|
701
|
+
* @param {string} sessionType - Session type
|
|
702
|
+
* @returns {string} Header text
|
|
703
|
+
*/
|
|
704
|
+
_getCommandsHeader(sessionType) {
|
|
705
|
+
switch (sessionType) {
|
|
706
|
+
case 'new':
|
|
707
|
+
return 'Available Commands';
|
|
708
|
+
case 'existing':
|
|
709
|
+
return 'Quick Commands';
|
|
710
|
+
case 'workflow':
|
|
711
|
+
return 'Key Commands';
|
|
712
|
+
default:
|
|
713
|
+
return 'Commands';
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* Build footer section
|
|
719
|
+
* @param {Object} agent - Agent definition
|
|
720
|
+
* @returns {string} Footer text with signature
|
|
721
|
+
*/
|
|
722
|
+
buildFooter(agent) {
|
|
723
|
+
const parts = ['Type `*guide` for comprehensive usage instructions.'];
|
|
724
|
+
|
|
725
|
+
// Add agent signature if available
|
|
726
|
+
if (agent && agent.persona_profile && agent.persona_profile.communication &&
|
|
727
|
+
agent.persona_profile.communication.signature_closing) {
|
|
728
|
+
parts.push('');
|
|
729
|
+
parts.push(agent.persona_profile.communication.signature_closing);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
return parts.join('\n');
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Build git warning section
|
|
737
|
+
* @returns {string} Git warning message
|
|
738
|
+
*/
|
|
739
|
+
buildGitWarning() {
|
|
740
|
+
return GIT_WARNING_TEMPLATE.trim();
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* Filter commands by visibility metadata
|
|
745
|
+
* @param {Object} agent - Agent definition
|
|
746
|
+
* @param {string} sessionType - Session type
|
|
747
|
+
* @returns {Array} Filtered commands
|
|
748
|
+
*/
|
|
749
|
+
filterCommandsByVisibility(agent, sessionType) {
|
|
750
|
+
if (!agent.commands || agent.commands.length === 0) {
|
|
751
|
+
return [];
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
const visibilityFilter = this._getVisibilityFilter(sessionType);
|
|
755
|
+
|
|
756
|
+
// Filter commands with visibility metadata
|
|
757
|
+
const commandsWithMetadata = agent.commands.filter(cmd => {
|
|
758
|
+
if (!cmd.visibility || !Array.isArray(cmd.visibility)) {
|
|
759
|
+
return false; // No metadata, exclude from filtered list
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
return cmd.visibility.includes(visibilityFilter);
|
|
763
|
+
});
|
|
764
|
+
|
|
765
|
+
// If we have metadata-based commands, use them
|
|
766
|
+
if (commandsWithMetadata.length > 0) {
|
|
767
|
+
return commandsWithMetadata;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
// Backwards compatibility: No metadata found, show first 12 commands
|
|
771
|
+
return agent.commands.slice(0, 12);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Get visibility filter for session type
|
|
776
|
+
* @private
|
|
777
|
+
* @param {string} sessionType - Session type
|
|
778
|
+
* @returns {string} Visibility level ('full', 'quick', 'key')
|
|
779
|
+
*/
|
|
780
|
+
_getVisibilityFilter(sessionType) {
|
|
781
|
+
switch (sessionType) {
|
|
782
|
+
case 'new':
|
|
783
|
+
return 'full';
|
|
784
|
+
case 'existing':
|
|
785
|
+
return 'quick';
|
|
786
|
+
case 'workflow':
|
|
787
|
+
return 'key';
|
|
788
|
+
default:
|
|
789
|
+
return 'full';
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Safe session type detection with fallback
|
|
795
|
+
* @private
|
|
796
|
+
* @param {Object} context - Session context
|
|
797
|
+
* @returns {Promise<string>} Session type
|
|
798
|
+
*/
|
|
799
|
+
async _safeDetectSessionType(context) {
|
|
800
|
+
try {
|
|
801
|
+
const conversationHistory = context.conversationHistory || [];
|
|
802
|
+
return this.contextDetector.detectSessionType(conversationHistory);
|
|
803
|
+
} catch (error) {
|
|
804
|
+
console.warn('[GreetingBuilder] Session detection failed:', error.message);
|
|
805
|
+
return 'new'; // Conservative default
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Safe git config check with fallback
|
|
811
|
+
* @private
|
|
812
|
+
* @returns {Promise<Object>} Git config result
|
|
813
|
+
*/
|
|
814
|
+
async _safeCheckGitConfig() {
|
|
815
|
+
try {
|
|
816
|
+
return this.gitConfigDetector.get();
|
|
817
|
+
} catch (error) {
|
|
818
|
+
console.warn('[GreetingBuilder] Git config check failed:', error.message);
|
|
819
|
+
return { configured: false, type: null, branch: null };
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
/**
|
|
824
|
+
* Safe project status load with fallback
|
|
825
|
+
* @private
|
|
826
|
+
* @returns {Promise<Object|null>} Project status or null
|
|
827
|
+
*/
|
|
828
|
+
async _safeLoadProjectStatus() {
|
|
829
|
+
try {
|
|
830
|
+
return await loadProjectStatus();
|
|
831
|
+
} catch (error) {
|
|
832
|
+
console.warn('[GreetingBuilder] Project status load failed:', error.message);
|
|
833
|
+
return null;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
/**
|
|
838
|
+
* Check if git warning should be shown
|
|
839
|
+
* @private
|
|
840
|
+
* @returns {boolean} True if should show warning
|
|
841
|
+
*/
|
|
842
|
+
_shouldShowGitWarning() {
|
|
843
|
+
if (!this.config || !this.config.git) {
|
|
844
|
+
return true; // Default: show warning
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
return this.config.git.showConfigWarning !== false;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/**
|
|
851
|
+
* Load core configuration
|
|
852
|
+
* @private
|
|
853
|
+
* @returns {Object|null} Configuration or null
|
|
854
|
+
*/
|
|
855
|
+
_loadConfig() {
|
|
856
|
+
try {
|
|
857
|
+
const configPath = path.join(process.cwd(), '.aios-core', 'core-config.yaml');
|
|
858
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
859
|
+
return yaml.load(content);
|
|
860
|
+
} catch (error) {
|
|
861
|
+
return null;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
module.exports = GreetingBuilder;
|