javi-forge 0.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/.gitignore.template +105 -0
- package/.releaserc +44 -0
- package/README.md +45 -0
- package/ai-config/.skillignore +15 -0
- package/ai-config/AUTO_INVOKE.md +300 -0
- package/ai-config/agents/_TEMPLATE.md +93 -0
- package/ai-config/agents/business/api-designer.md +1657 -0
- package/ai-config/agents/business/business-analyst.md +1331 -0
- package/ai-config/agents/business/product-strategist.md +206 -0
- package/ai-config/agents/business/project-manager.md +178 -0
- package/ai-config/agents/business/requirements-analyst.md +1277 -0
- package/ai-config/agents/business/technical-writer.md +1679 -0
- package/ai-config/agents/creative/ux-designer.md +205 -0
- package/ai-config/agents/data-ai/ai-engineer.md +487 -0
- package/ai-config/agents/data-ai/analytics-engineer.md +953 -0
- package/ai-config/agents/data-ai/data-engineer.md +173 -0
- package/ai-config/agents/data-ai/data-scientist.md +672 -0
- package/ai-config/agents/data-ai/mlops-engineer.md +814 -0
- package/ai-config/agents/data-ai/prompt-engineer.md +772 -0
- package/ai-config/agents/development/angular-expert.md +620 -0
- package/ai-config/agents/development/backend-architect.md +795 -0
- package/ai-config/agents/development/database-specialist.md +212 -0
- package/ai-config/agents/development/frontend-specialist.md +686 -0
- package/ai-config/agents/development/fullstack-engineer.md +668 -0
- package/ai-config/agents/development/golang-pro.md +338 -0
- package/ai-config/agents/development/java-enterprise.md +400 -0
- package/ai-config/agents/development/javascript-pro.md +422 -0
- package/ai-config/agents/development/nextjs-pro.md +474 -0
- package/ai-config/agents/development/python-pro.md +570 -0
- package/ai-config/agents/development/react-pro.md +487 -0
- package/ai-config/agents/development/rust-pro.md +246 -0
- package/ai-config/agents/development/spring-boot-4-expert.md +326 -0
- package/ai-config/agents/development/typescript-pro.md +336 -0
- package/ai-config/agents/development/vue-specialist.md +605 -0
- package/ai-config/agents/infrastructure/cloud-architect.md +472 -0
- package/ai-config/agents/infrastructure/deployment-manager.md +358 -0
- package/ai-config/agents/infrastructure/devops-engineer.md +455 -0
- package/ai-config/agents/infrastructure/incident-responder.md +519 -0
- package/ai-config/agents/infrastructure/kubernetes-expert.md +705 -0
- package/ai-config/agents/infrastructure/monitoring-specialist.md +674 -0
- package/ai-config/agents/infrastructure/performance-engineer.md +658 -0
- package/ai-config/agents/orchestrator.md +241 -0
- package/ai-config/agents/quality/accessibility-auditor.md +1204 -0
- package/ai-config/agents/quality/code-reviewer-compact.md +123 -0
- package/ai-config/agents/quality/code-reviewer.md +363 -0
- package/ai-config/agents/quality/dependency-manager.md +743 -0
- package/ai-config/agents/quality/e2e-test-specialist.md +1005 -0
- package/ai-config/agents/quality/performance-tester.md +1086 -0
- package/ai-config/agents/quality/security-auditor.md +133 -0
- package/ai-config/agents/quality/test-engineer.md +453 -0
- package/ai-config/agents/specialists/api-designer.md +87 -0
- package/ai-config/agents/specialists/backend-architect.md +73 -0
- package/ai-config/agents/specialists/code-reviewer.md +77 -0
- package/ai-config/agents/specialists/db-optimizer.md +75 -0
- package/ai-config/agents/specialists/devops-engineer.md +83 -0
- package/ai-config/agents/specialists/documentation-writer.md +78 -0
- package/ai-config/agents/specialists/frontend-developer.md +75 -0
- package/ai-config/agents/specialists/performance-analyst.md +82 -0
- package/ai-config/agents/specialists/refactor-specialist.md +74 -0
- package/ai-config/agents/specialists/security-auditor.md +74 -0
- package/ai-config/agents/specialists/test-engineer.md +81 -0
- package/ai-config/agents/specialists/ux-consultant.md +76 -0
- package/ai-config/agents/specialized/agent-generator.md +1190 -0
- package/ai-config/agents/specialized/blockchain-developer.md +149 -0
- package/ai-config/agents/specialized/code-migrator.md +892 -0
- package/ai-config/agents/specialized/context-manager.md +978 -0
- package/ai-config/agents/specialized/documentation-writer.md +1078 -0
- package/ai-config/agents/specialized/ecommerce-expert.md +1756 -0
- package/ai-config/agents/specialized/embedded-engineer.md +1714 -0
- package/ai-config/agents/specialized/error-detective.md +1034 -0
- package/ai-config/agents/specialized/fintech-specialist.md +1659 -0
- package/ai-config/agents/specialized/freelance-project-planner-v2.md +1988 -0
- package/ai-config/agents/specialized/freelance-project-planner-v3.md +2136 -0
- package/ai-config/agents/specialized/freelance-project-planner-v4.md +4503 -0
- package/ai-config/agents/specialized/freelance-project-planner.md +722 -0
- package/ai-config/agents/specialized/game-developer.md +1963 -0
- package/ai-config/agents/specialized/healthcare-dev.md +1620 -0
- package/ai-config/agents/specialized/mobile-developer.md +188 -0
- package/ai-config/agents/specialized/parallel-plan-executor.md +506 -0
- package/ai-config/agents/specialized/plan-executor.md +485 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +485 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +3493 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +778 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +918 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +1537 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +2633 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +5610 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +335 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +215 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +260 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +379 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +355 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +279 -0
- package/ai-config/agents/specialized/template-writer.md +347 -0
- package/ai-config/agents/specialized/test-runner.md +99 -0
- package/ai-config/agents/specialized/vibekanban-smart-worker.md +244 -0
- package/ai-config/agents/specialized/wave-executor.md +138 -0
- package/ai-config/agents/specialized/workflow-optimizer.md +1114 -0
- package/ai-config/commands/git/changelog.md +32 -0
- package/ai-config/commands/git/ci-local.md +70 -0
- package/ai-config/commands/git/commit.md +35 -0
- package/ai-config/commands/git/fix-issue.md +23 -0
- package/ai-config/commands/git/pr-create.md +42 -0
- package/ai-config/commands/git/pr-review.md +50 -0
- package/ai-config/commands/git/worktree.md +39 -0
- package/ai-config/commands/refactoring/cleanup.md +24 -0
- package/ai-config/commands/refactoring/dead-code.md +40 -0
- package/ai-config/commands/refactoring/extract.md +31 -0
- package/ai-config/commands/testing/e2e.md +30 -0
- package/ai-config/commands/testing/tdd.md +36 -0
- package/ai-config/commands/testing/test-coverage.md +30 -0
- package/ai-config/commands/testing/test-fix.md +24 -0
- package/ai-config/commands/workflow/generate-agents-md.md +85 -0
- package/ai-config/commands/workflow/planning.md +47 -0
- package/ai-config/commands/workflows/compound.md +89 -0
- package/ai-config/commands/workflows/plan.md +77 -0
- package/ai-config/commands/workflows/review.md +78 -0
- package/ai-config/commands/workflows/work.md +75 -0
- package/ai-config/config.yaml +18 -0
- package/ai-config/hooks/_TEMPLATE.md +96 -0
- package/ai-config/hooks/block-dangerous-commands.md +75 -0
- package/ai-config/hooks/commit-guard.md +90 -0
- package/ai-config/hooks/context-loader.md +73 -0
- package/ai-config/hooks/improve-prompt.md +91 -0
- package/ai-config/hooks/learning-log.md +72 -0
- package/ai-config/hooks/model-router.md +86 -0
- package/ai-config/hooks/secret-scanner.md +64 -0
- package/ai-config/hooks/skill-validator.md +102 -0
- package/ai-config/hooks/task-artifact.md +114 -0
- package/ai-config/hooks/validate-workflow.md +100 -0
- package/ai-config/prompts/base.md +71 -0
- package/ai-config/prompts/modes/debug.md +34 -0
- package/ai-config/prompts/modes/deploy.md +40 -0
- package/ai-config/prompts/modes/research.md +32 -0
- package/ai-config/prompts/modes/review.md +33 -0
- package/ai-config/prompts/review-policy.md +79 -0
- package/ai-config/skills/_TEMPLATE.md +157 -0
- package/ai-config/skills/backend/api-gateway/SKILL.md +254 -0
- package/ai-config/skills/backend/bff-concepts/SKILL.md +239 -0
- package/ai-config/skills/backend/bff-spring/SKILL.md +364 -0
- package/ai-config/skills/backend/chi-router/SKILL.md +396 -0
- package/ai-config/skills/backend/error-handling/SKILL.md +255 -0
- package/ai-config/skills/backend/exceptions-spring/SKILL.md +323 -0
- package/ai-config/skills/backend/fastapi/SKILL.md +302 -0
- package/ai-config/skills/backend/gateway-spring/SKILL.md +390 -0
- package/ai-config/skills/backend/go-backend/SKILL.md +457 -0
- package/ai-config/skills/backend/gradle-multimodule/SKILL.md +274 -0
- package/ai-config/skills/backend/graphql-concepts/SKILL.md +352 -0
- package/ai-config/skills/backend/graphql-spring/SKILL.md +398 -0
- package/ai-config/skills/backend/grpc-concepts/SKILL.md +283 -0
- package/ai-config/skills/backend/grpc-spring/SKILL.md +445 -0
- package/ai-config/skills/backend/jwt-auth/SKILL.md +412 -0
- package/ai-config/skills/backend/notifications-concepts/SKILL.md +259 -0
- package/ai-config/skills/backend/recommendations-concepts/SKILL.md +261 -0
- package/ai-config/skills/backend/search-concepts/SKILL.md +263 -0
- package/ai-config/skills/backend/search-spring/SKILL.md +375 -0
- package/ai-config/skills/backend/spring-boot-4/SKILL.md +172 -0
- package/ai-config/skills/backend/websockets/SKILL.md +532 -0
- package/ai-config/skills/data-ai/ai-ml/SKILL.md +423 -0
- package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +195 -0
- package/ai-config/skills/data-ai/analytics-spring/SKILL.md +340 -0
- package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +440 -0
- package/ai-config/skills/data-ai/langchain/SKILL.md +238 -0
- package/ai-config/skills/data-ai/mlflow/SKILL.md +302 -0
- package/ai-config/skills/data-ai/onnx-inference/SKILL.md +290 -0
- package/ai-config/skills/data-ai/powerbi/SKILL.md +352 -0
- package/ai-config/skills/data-ai/pytorch/SKILL.md +274 -0
- package/ai-config/skills/data-ai/scikit-learn/SKILL.md +321 -0
- package/ai-config/skills/data-ai/vector-db/SKILL.md +301 -0
- package/ai-config/skills/database/graph-databases/SKILL.md +218 -0
- package/ai-config/skills/database/graph-spring/SKILL.md +361 -0
- package/ai-config/skills/database/pgx-postgres/SKILL.md +512 -0
- package/ai-config/skills/database/redis-cache/SKILL.md +343 -0
- package/ai-config/skills/database/sqlite-embedded/SKILL.md +388 -0
- package/ai-config/skills/database/timescaledb/SKILL.md +320 -0
- package/ai-config/skills/docs/api-documentation/SKILL.md +293 -0
- package/ai-config/skills/docs/docs-spring/SKILL.md +377 -0
- package/ai-config/skills/docs/mustache-templates/SKILL.md +190 -0
- package/ai-config/skills/docs/technical-docs/SKILL.md +447 -0
- package/ai-config/skills/frontend/astro-ssr/SKILL.md +441 -0
- package/ai-config/skills/frontend/frontend-design/SKILL.md +54 -0
- package/ai-config/skills/frontend/frontend-web/SKILL.md +368 -0
- package/ai-config/skills/frontend/mantine-ui/SKILL.md +396 -0
- package/ai-config/skills/frontend/tanstack-query/SKILL.md +439 -0
- package/ai-config/skills/frontend/zod-validation/SKILL.md +417 -0
- package/ai-config/skills/frontend/zustand-state/SKILL.md +350 -0
- package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +244 -0
- package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +378 -0
- package/ai-config/skills/infrastructure/devops-infra/SKILL.md +435 -0
- package/ai-config/skills/infrastructure/docker-containers/SKILL.md +420 -0
- package/ai-config/skills/infrastructure/kubernetes/SKILL.md +456 -0
- package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +546 -0
- package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +474 -0
- package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +315 -0
- package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +504 -0
- package/ai-config/skills/mobile/mobile-ionic/SKILL.md +448 -0
- package/ai-config/skills/prompt-improver/SKILL.md +125 -0
- package/ai-config/skills/quality/ghagga-review/SKILL.md +216 -0
- package/ai-config/skills/references/hooks-patterns/SKILL.md +238 -0
- package/ai-config/skills/references/mcp-servers/SKILL.md +275 -0
- package/ai-config/skills/references/plugins-reference/SKILL.md +110 -0
- package/ai-config/skills/references/skills-reference/SKILL.md +420 -0
- package/ai-config/skills/references/subagent-templates/SKILL.md +193 -0
- package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +410 -0
- package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +408 -0
- package/ai-config/skills/systems-iot/rust-systems/SKILL.md +386 -0
- package/ai-config/skills/systems-iot/tokio-async/SKILL.md +324 -0
- package/ai-config/skills/testing/playwright-e2e/SKILL.md +289 -0
- package/ai-config/skills/testing/testcontainers/SKILL.md +299 -0
- package/ai-config/skills/testing/vitest-testing/SKILL.md +381 -0
- package/ai-config/skills/workflow/ci-local-guide/SKILL.md +118 -0
- package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +299 -0
- package/ai-config/skills/workflow/claude-md-improver/SKILL.md +158 -0
- package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +117 -0
- package/ai-config/skills/workflow/git-github/SKILL.md +334 -0
- package/ai-config/skills/workflow/git-github/references/examples.md +160 -0
- package/ai-config/skills/workflow/git-workflow/SKILL.md +214 -0
- package/ai-config/skills/workflow/ide-plugins/SKILL.md +277 -0
- package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +401 -0
- package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +199 -0
- package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +100 -0
- package/ai-config/skills/workflow/verification-before-completion/SKILL.md +73 -0
- package/ai-config/skills/workflow/wave-workflow/SKILL.md +178 -0
- package/ci-local/README.md +170 -0
- package/ci-local/ci-local.sh +297 -0
- package/ci-local/hooks/commit-msg +74 -0
- package/ci-local/hooks/pre-commit +162 -0
- package/ci-local/hooks/pre-push +41 -0
- package/ci-local/install.sh +49 -0
- package/ci-local/semgrep.yml +214 -0
- package/dist/commands/analyze.d.ts +9 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +55 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/analyze.test.d.ts +2 -0
- package/dist/commands/analyze.test.d.ts.map +1 -0
- package/dist/commands/analyze.test.js +145 -0
- package/dist/commands/analyze.test.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +158 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/doctor.test.d.ts +2 -0
- package/dist/commands/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor.test.js +200 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +283 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +2 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +271 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +201 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +57 -0
- package/dist/constants.js.map +1 -0
- package/dist/e2e/aggressive.e2e.test.d.ts +2 -0
- package/dist/e2e/aggressive.e2e.test.d.ts.map +1 -0
- package/dist/e2e/aggressive.e2e.test.js +350 -0
- package/dist/e2e/aggressive.e2e.test.js.map +1 -0
- package/dist/e2e/commands.e2e.test.d.ts +2 -0
- package/dist/e2e/commands.e2e.test.d.ts.map +1 -0
- package/dist/e2e/commands.e2e.test.js +213 -0
- package/dist/e2e/commands.e2e.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/common.d.ts +17 -0
- package/dist/lib/common.d.ts.map +1 -0
- package/dist/lib/common.js +111 -0
- package/dist/lib/common.js.map +1 -0
- package/dist/lib/common.test.d.ts +2 -0
- package/dist/lib/common.test.d.ts.map +1 -0
- package/dist/lib/common.test.js +316 -0
- package/dist/lib/common.test.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +18 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +61 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/frontmatter.test.d.ts +2 -0
- package/dist/lib/frontmatter.test.d.ts.map +1 -0
- package/dist/lib/frontmatter.test.js +257 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/template.d.ts +24 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +78 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/lib/template.test.d.ts +2 -0
- package/dist/lib/template.test.d.ts.map +1 -0
- package/dist/lib/template.test.js +201 -0
- package/dist/lib/template.test.js.map +1 -0
- package/dist/types/index.d.ts +48 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/AnalyzeUI.d.ts +7 -0
- package/dist/ui/AnalyzeUI.d.ts.map +1 -0
- package/dist/ui/AnalyzeUI.js +100 -0
- package/dist/ui/AnalyzeUI.js.map +1 -0
- package/dist/ui/App.d.ts +13 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +100 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/CIContext.d.ts +9 -0
- package/dist/ui/CIContext.d.ts.map +1 -0
- package/dist/ui/CIContext.js +9 -0
- package/dist/ui/CIContext.js.map +1 -0
- package/dist/ui/CISelector.d.ts +8 -0
- package/dist/ui/CISelector.d.ts.map +1 -0
- package/dist/ui/CISelector.js +45 -0
- package/dist/ui/CISelector.js.map +1 -0
- package/dist/ui/Doctor.d.ts +3 -0
- package/dist/ui/Doctor.d.ts.map +1 -0
- package/dist/ui/Doctor.js +89 -0
- package/dist/ui/Doctor.js.map +1 -0
- package/dist/ui/Header.d.ts +8 -0
- package/dist/ui/Header.d.ts.map +1 -0
- package/dist/ui/Header.js +30 -0
- package/dist/ui/Header.js.map +1 -0
- package/dist/ui/MemorySelector.d.ts +8 -0
- package/dist/ui/MemorySelector.d.ts.map +1 -0
- package/dist/ui/MemorySelector.js +46 -0
- package/dist/ui/MemorySelector.js.map +1 -0
- package/dist/ui/NameInput.d.ts +8 -0
- package/dist/ui/NameInput.d.ts.map +1 -0
- package/dist/ui/NameInput.js +69 -0
- package/dist/ui/NameInput.js.map +1 -0
- package/dist/ui/OptionSelector.d.ts +12 -0
- package/dist/ui/OptionSelector.d.ts.map +1 -0
- package/dist/ui/OptionSelector.js +69 -0
- package/dist/ui/OptionSelector.js.map +1 -0
- package/dist/ui/Progress.d.ts +11 -0
- package/dist/ui/Progress.d.ts.map +1 -0
- package/dist/ui/Progress.js +58 -0
- package/dist/ui/Progress.js.map +1 -0
- package/dist/ui/StackSelector.d.ts +9 -0
- package/dist/ui/StackSelector.d.ts.map +1 -0
- package/dist/ui/StackSelector.js +65 -0
- package/dist/ui/StackSelector.js.map +1 -0
- package/dist/ui/Summary.d.ts +12 -0
- package/dist/ui/Summary.d.ts.map +1 -0
- package/dist/ui/Summary.js +114 -0
- package/dist/ui/Summary.js.map +1 -0
- package/dist/ui/SyncUI.d.ts +10 -0
- package/dist/ui/SyncUI.d.ts.map +1 -0
- package/dist/ui/SyncUI.js +64 -0
- package/dist/ui/SyncUI.js.map +1 -0
- package/dist/ui/Welcome.d.ts +7 -0
- package/dist/ui/Welcome.d.ts.map +1 -0
- package/dist/ui/Welcome.js +45 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/theme.d.ts +10 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +9 -0
- package/dist/ui/theme.js.map +1 -0
- package/modules/engram/.gitignore-snippet.txt +6 -0
- package/modules/engram/.mcp-config-snippet.json +11 -0
- package/modules/engram/README.md +146 -0
- package/modules/engram/install-engram.sh +216 -0
- package/modules/ghagga/.env.example +43 -0
- package/modules/ghagga/README.md +153 -0
- package/modules/ghagga/docker-compose.yml +80 -0
- package/modules/ghagga/setup-ghagga.sh +139 -0
- package/modules/memory-simple/.project/NOTES.md +22 -0
- package/modules/memory-simple/README.md +23 -0
- package/modules/obsidian-brain/.obsidian/app.json +23 -0
- package/modules/obsidian-brain/.obsidian/appearance.json +5 -0
- package/modules/obsidian-brain/.obsidian/bookmarks.json +34 -0
- package/modules/obsidian-brain/.obsidian/community-plugins.json +1 -0
- package/modules/obsidian-brain/.obsidian/core-plugins-migration.json +21 -0
- package/modules/obsidian-brain/.obsidian/core-plugins.json +18 -0
- package/modules/obsidian-brain/.obsidian/daily-notes.json +5 -0
- package/modules/obsidian-brain/.obsidian/graph.json +37 -0
- package/modules/obsidian-brain/.obsidian/hotkeys.json +14 -0
- package/modules/obsidian-brain/.obsidian/plugins/dataview/data.json +25 -0
- package/modules/obsidian-brain/.obsidian/plugins/obsidian-kanban/data.json +29 -0
- package/modules/obsidian-brain/.obsidian/plugins/templater-obsidian/data.json +18 -0
- package/modules/obsidian-brain/.obsidian/snippets/project-memory.css +71 -0
- package/modules/obsidian-brain/.obsidian-gitignore-snippet.txt +8 -0
- package/modules/obsidian-brain/.project/Attachments/.gitkeep +0 -0
- package/modules/obsidian-brain/.project/Memory/BLOCKERS.md +78 -0
- package/modules/obsidian-brain/.project/Memory/CONTEXT.md +102 -0
- package/modules/obsidian-brain/.project/Memory/DASHBOARD.md +73 -0
- package/modules/obsidian-brain/.project/Memory/DECISIONS.md +87 -0
- package/modules/obsidian-brain/.project/Memory/KANBAN.md +15 -0
- package/modules/obsidian-brain/.project/Memory/README.md +61 -0
- package/modules/obsidian-brain/.project/Memory/WAVES.md +78 -0
- package/modules/obsidian-brain/.project/Sessions/TEMPLATE.md +99 -0
- package/modules/obsidian-brain/.project/Templates/ADR.md +33 -0
- package/modules/obsidian-brain/.project/Templates/Blocker.md +21 -0
- package/modules/obsidian-brain/.project/Templates/Session.md +88 -0
- package/modules/obsidian-brain/README.md +268 -0
- package/modules/obsidian-brain/new-wave.sh +182 -0
- package/package.json +51 -0
- package/schemas/agent.schema.json +34 -0
- package/schemas/ai-config.schema.json +28 -0
- package/schemas/skill.schema.json +44 -0
- package/src/commands/analyze.test.ts +145 -0
- package/src/commands/analyze.ts +69 -0
- package/src/commands/doctor.test.ts +208 -0
- package/src/commands/doctor.ts +163 -0
- package/src/commands/init.test.ts +298 -0
- package/src/commands/init.ts +285 -0
- package/src/constants.ts +69 -0
- package/src/e2e/aggressive.e2e.test.ts +557 -0
- package/src/e2e/commands.e2e.test.ts +298 -0
- package/src/index.tsx +106 -0
- package/src/lib/common.test.ts +318 -0
- package/src/lib/common.ts +127 -0
- package/src/lib/frontmatter.test.ts +291 -0
- package/src/lib/frontmatter.ts +77 -0
- package/src/lib/template.test.ts +226 -0
- package/src/lib/template.ts +99 -0
- package/src/types/index.ts +53 -0
- package/src/ui/AnalyzeUI.tsx +133 -0
- package/src/ui/App.tsx +175 -0
- package/src/ui/CIContext.tsx +25 -0
- package/src/ui/CISelector.tsx +72 -0
- package/src/ui/Doctor.tsx +122 -0
- package/src/ui/Header.tsx +48 -0
- package/src/ui/MemorySelector.tsx +73 -0
- package/src/ui/NameInput.tsx +82 -0
- package/src/ui/OptionSelector.tsx +100 -0
- package/src/ui/Progress.tsx +88 -0
- package/src/ui/StackSelector.tsx +101 -0
- package/src/ui/Summary.tsx +134 -0
- package/src/ui/Welcome.tsx +54 -0
- package/src/ui/theme.ts +10 -0
- package/stryker.config.json +19 -0
- package/tasks/_TEMPLATE/files-edited.md +3 -0
- package/tasks/_TEMPLATE/plan.md +3 -0
- package/tasks/_TEMPLATE/research.md +3 -0
- package/tasks/_TEMPLATE/verification.md +5 -0
- package/templates/common/dependabot/cargo.yml +11 -0
- package/templates/common/dependabot/github-actions.yml +16 -0
- package/templates/common/dependabot/gomod.yml +15 -0
- package/templates/common/dependabot/gradle.yml +15 -0
- package/templates/common/dependabot/header.yml +3 -0
- package/templates/common/dependabot/maven.yml +15 -0
- package/templates/common/dependabot/npm.yml +20 -0
- package/templates/common/dependabot/pip.yml +11 -0
- package/templates/dependabot.yml +162 -0
- package/templates/github/ci-go.yml +41 -0
- package/templates/github/ci-java.yml +45 -0
- package/templates/github/ci-monorepo.yml +150 -0
- package/templates/github/ci-node.yml +42 -0
- package/templates/github/ci-python.yml +42 -0
- package/templates/github/ci-rust.yml +42 -0
- package/templates/github/dependabot-automerge.yml +40 -0
- package/templates/gitlab/gitlab-ci-go.yml +88 -0
- package/templates/gitlab/gitlab-ci-java.yml +79 -0
- package/templates/gitlab/gitlab-ci-monorepo.yml +126 -0
- package/templates/gitlab/gitlab-ci-node.yml +63 -0
- package/templates/gitlab/gitlab-ci-python.yml +147 -0
- package/templates/gitlab/gitlab-ci-rust.yml +67 -0
- package/templates/global/claude-settings.json +98 -0
- package/templates/global/codex-config.toml +8 -0
- package/templates/global/copilot-instructions/base-rules.instructions.md +13 -0
- package/templates/global/copilot-instructions/sdd-orchestrator.instructions.md +37 -0
- package/templates/global/gemini-commands/cleanup.toml +20 -0
- package/templates/global/gemini-commands/commit.toml +15 -0
- package/templates/global/gemini-commands/dead-code.toml +22 -0
- package/templates/global/gemini-commands/plan.toml +30 -0
- package/templates/global/gemini-commands/review.toml +17 -0
- package/templates/global/gemini-commands/sdd-apply.toml +22 -0
- package/templates/global/gemini-commands/sdd-ff.toml +14 -0
- package/templates/global/gemini-commands/sdd-new.toml +21 -0
- package/templates/global/gemini-commands/sdd-verify.toml +21 -0
- package/templates/global/gemini-commands/tdd.toml +26 -0
- package/templates/global/gemini-settings.json +8 -0
- package/templates/global/opencode-config.json +44 -0
- package/templates/global/sdd-instructions.md +47 -0
- package/templates/global/sdd-orchestrator-claude.md +46 -0
- package/templates/global/sdd-orchestrator-copilot.md +34 -0
- package/templates/renovate.json +69 -0
- package/templates/woodpecker/monorepo/backend.yml +34 -0
- package/templates/woodpecker/monorepo/frontend.yml +34 -0
- package/templates/woodpecker/monorepo/summary.yml +25 -0
- package/templates/woodpecker/woodpecker-go.yml +51 -0
- package/templates/woodpecker/woodpecker-java.yml +67 -0
- package/templates/woodpecker/woodpecker-node.yml +47 -0
- package/templates/woodpecker/woodpecker-python.yml +108 -0
- package/templates/woodpecker/woodpecker-rust.yml +57 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +16 -0
- package/workflows/reusable-build-go.yml +111 -0
- package/workflows/reusable-build-java.yml +120 -0
- package/workflows/reusable-build-node.yml +145 -0
- package/workflows/reusable-build-python.yml +159 -0
- package/workflows/reusable-build-rust.yml +135 -0
- package/workflows/reusable-docker.yml +120 -0
- package/workflows/reusable-ghagga-review.yml +165 -0
- package/workflows/reusable-release.yml +91 -0
|
@@ -0,0 +1,1190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-generator
|
|
3
|
+
description: Dynamic agent creation specialist for generating custom agents based on requirements and patterns
|
|
4
|
+
trigger: >
|
|
5
|
+
create agent, new agent, agent template, generate agent, custom agent,
|
|
6
|
+
AI agent, prompt engineering, agent design, metaprogramming
|
|
7
|
+
category: specialized
|
|
8
|
+
color: cyan
|
|
9
|
+
tools: Write, Read, MultiEdit, Bash, Grep, Glob, Task
|
|
10
|
+
config:
|
|
11
|
+
model: opus
|
|
12
|
+
metadata:
|
|
13
|
+
version: "2.0"
|
|
14
|
+
updated: "2026-02"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
You are an agent generation specialist with expertise in dynamic agent creation, template systems, code generation, and AI system design.
|
|
18
|
+
|
|
19
|
+
## Core Expertise
|
|
20
|
+
- Dynamic agent generation and templating
|
|
21
|
+
- Prompt engineering and optimization
|
|
22
|
+
- Code generation and metaprogramming
|
|
23
|
+
- Domain-specific language (DSL) design
|
|
24
|
+
- Agent capability analysis and composition
|
|
25
|
+
- Template engines and code scaffolding
|
|
26
|
+
- AI system architecture and design patterns
|
|
27
|
+
- Self-modifying and adaptive systems
|
|
28
|
+
|
|
29
|
+
## Technical Stack
|
|
30
|
+
- **Template Engines**: Handlebars, Jinja2, Liquid, EJS, Mustache
|
|
31
|
+
- **Code Generation**: TypeScript Compiler API, Babel, AST manipulation
|
|
32
|
+
- **DSL Tools**: ANTLR, PEG.js, Chevrotain, Nearley
|
|
33
|
+
- **AI Frameworks**: LangChain, AutoGPT, BabyAGI, CrewAI
|
|
34
|
+
- **Schema**: JSON Schema, OpenAPI, GraphQL Schema
|
|
35
|
+
- **Testing**: Property-based testing, Fuzzing, Mutation testing
|
|
36
|
+
- **Analysis**: Static analysis, Type inference, Capability mapping
|
|
37
|
+
|
|
38
|
+
## Dynamic Agent Generation Framework
|
|
39
|
+
```typescript
|
|
40
|
+
// agent-generator.ts
|
|
41
|
+
import * as fs from 'fs/promises';
|
|
42
|
+
import * as path from 'path';
|
|
43
|
+
import { compile } from 'handlebars';
|
|
44
|
+
import * as yaml from 'js-yaml';
|
|
45
|
+
import { OpenAI } from 'openai';
|
|
46
|
+
import { z } from 'zod';
|
|
47
|
+
|
|
48
|
+
// Agent capability schema
|
|
49
|
+
const AgentCapabilitySchema = z.object({
|
|
50
|
+
name: z.string(),
|
|
51
|
+
description: z.string(),
|
|
52
|
+
category: z.enum(['development', 'infrastructure', 'quality', 'data-ai', 'business', 'creative', 'specialized']),
|
|
53
|
+
expertise: z.array(z.string()),
|
|
54
|
+
tools: z.array(z.string()),
|
|
55
|
+
constraints: z.array(z.string()).optional(),
|
|
56
|
+
examples: z.array(z.object({
|
|
57
|
+
input: z.string(),
|
|
58
|
+
output: z.string(),
|
|
59
|
+
explanation: z.string().optional(),
|
|
60
|
+
})).optional(),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
type AgentCapability = z.infer<typeof AgentCapabilitySchema>;
|
|
64
|
+
|
|
65
|
+
class AgentGenerator {
|
|
66
|
+
private templates: Map<string, HandlebarsTemplateDelegate> = new Map();
|
|
67
|
+
private patterns: Map<string, AgentPattern> = new Map();
|
|
68
|
+
private capabilities: Map<string, Capability> = new Map();
|
|
69
|
+
private openai: OpenAI;
|
|
70
|
+
|
|
71
|
+
constructor(config: AgentGeneratorConfig) {
|
|
72
|
+
this.openai = new OpenAI({ apiKey: config.openaiApiKey });
|
|
73
|
+
this.loadTemplates();
|
|
74
|
+
this.loadPatterns();
|
|
75
|
+
this.loadCapabilities();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async generateAgent(requirements: AgentRequirements): Promise<GeneratedAgent> {
|
|
79
|
+
// Analyze requirements
|
|
80
|
+
const analysis = await this.analyzeRequirements(requirements);
|
|
81
|
+
|
|
82
|
+
// Select appropriate pattern
|
|
83
|
+
const pattern = this.selectPattern(analysis);
|
|
84
|
+
|
|
85
|
+
// Compose capabilities
|
|
86
|
+
const capabilities = this.composeCapabilities(analysis);
|
|
87
|
+
|
|
88
|
+
// Generate system prompt
|
|
89
|
+
const systemPrompt = await this.generateSystemPrompt(
|
|
90
|
+
analysis,
|
|
91
|
+
pattern,
|
|
92
|
+
capabilities
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
// Generate code examples
|
|
96
|
+
const codeExamples = await this.generateCodeExamples(
|
|
97
|
+
analysis,
|
|
98
|
+
capabilities
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
// Generate test cases
|
|
102
|
+
const testCases = await this.generateTestCases(
|
|
103
|
+
analysis,
|
|
104
|
+
capabilities
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// Assemble agent
|
|
108
|
+
const agent = this.assembleAgent({
|
|
109
|
+
...analysis,
|
|
110
|
+
pattern,
|
|
111
|
+
capabilities,
|
|
112
|
+
systemPrompt,
|
|
113
|
+
codeExamples,
|
|
114
|
+
testCases,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Validate agent
|
|
118
|
+
await this.validateAgent(agent);
|
|
119
|
+
|
|
120
|
+
return agent;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private async analyzeRequirements(
|
|
124
|
+
requirements: AgentRequirements
|
|
125
|
+
): Promise<RequirementAnalysis> {
|
|
126
|
+
const prompt = `
|
|
127
|
+
Analyze the following agent requirements and extract:
|
|
128
|
+
1. Primary domain and expertise area
|
|
129
|
+
2. Required capabilities and skills
|
|
130
|
+
3. Tool requirements
|
|
131
|
+
4. Constraints and limitations
|
|
132
|
+
5. Expected input/output patterns
|
|
133
|
+
6. Performance requirements
|
|
134
|
+
|
|
135
|
+
Requirements:
|
|
136
|
+
${JSON.stringify(requirements, null, 2)}
|
|
137
|
+
|
|
138
|
+
Provide analysis in JSON format.
|
|
139
|
+
`;
|
|
140
|
+
|
|
141
|
+
const response = await this.openai.chat.completions.create({
|
|
142
|
+
model: 'gpt-4',
|
|
143
|
+
messages: [
|
|
144
|
+
{ role: 'system', content: 'You are an expert in AI agent design and analysis.' },
|
|
145
|
+
{ role: 'user', content: prompt },
|
|
146
|
+
],
|
|
147
|
+
response_format: { type: 'json_object' },
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
const analysis = JSON.parse(response.choices[0].message.content!);
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
domain: analysis.domain,
|
|
154
|
+
expertise: analysis.expertise,
|
|
155
|
+
capabilities: analysis.capabilities,
|
|
156
|
+
tools: analysis.tools,
|
|
157
|
+
constraints: analysis.constraints,
|
|
158
|
+
patterns: analysis.patterns,
|
|
159
|
+
performance: analysis.performance,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private selectPattern(analysis: RequirementAnalysis): AgentPattern {
|
|
164
|
+
// Score each pattern against requirements
|
|
165
|
+
const scores = new Map<string, number>();
|
|
166
|
+
|
|
167
|
+
for (const [name, pattern] of this.patterns) {
|
|
168
|
+
let score = 0;
|
|
169
|
+
|
|
170
|
+
// Domain match
|
|
171
|
+
if (pattern.domains.includes(analysis.domain)) {
|
|
172
|
+
score += 10;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Capability overlap
|
|
176
|
+
const capOverlap = analysis.capabilities.filter(c =>
|
|
177
|
+
pattern.capabilities.includes(c)
|
|
178
|
+
).length;
|
|
179
|
+
score += capOverlap * 5;
|
|
180
|
+
|
|
181
|
+
// Tool compatibility
|
|
182
|
+
const toolOverlap = analysis.tools.filter(t =>
|
|
183
|
+
pattern.supportedTools.includes(t)
|
|
184
|
+
).length;
|
|
185
|
+
score += toolOverlap * 3;
|
|
186
|
+
|
|
187
|
+
scores.set(name, score);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Select highest scoring pattern
|
|
191
|
+
const bestPattern = Array.from(scores.entries())
|
|
192
|
+
.sort((a, b) => b[1] - a[1])[0][0];
|
|
193
|
+
|
|
194
|
+
return this.patterns.get(bestPattern)!;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
private composeCapabilities(
|
|
198
|
+
analysis: RequirementAnalysis
|
|
199
|
+
): ComposedCapabilities {
|
|
200
|
+
const selected: Capability[] = [];
|
|
201
|
+
const dependencies = new Set<string>();
|
|
202
|
+
|
|
203
|
+
// Select primary capabilities
|
|
204
|
+
for (const reqCap of analysis.capabilities) {
|
|
205
|
+
const capability = this.capabilities.get(reqCap);
|
|
206
|
+
if (capability) {
|
|
207
|
+
selected.push(capability);
|
|
208
|
+
|
|
209
|
+
// Add dependencies
|
|
210
|
+
capability.dependencies?.forEach(dep => dependencies.add(dep));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Add dependency capabilities
|
|
215
|
+
for (const dep of dependencies) {
|
|
216
|
+
const capability = this.capabilities.get(dep);
|
|
217
|
+
if (capability && !selected.includes(capability)) {
|
|
218
|
+
selected.push(capability);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Resolve conflicts
|
|
223
|
+
const resolved = this.resolveCapabilityConflicts(selected);
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
primary: resolved.filter(c => analysis.capabilities.includes(c.id)),
|
|
227
|
+
supporting: resolved.filter(c => !analysis.capabilities.includes(c.id)),
|
|
228
|
+
conflicts: [],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private async generateSystemPrompt(
|
|
233
|
+
analysis: RequirementAnalysis,
|
|
234
|
+
pattern: AgentPattern,
|
|
235
|
+
capabilities: ComposedCapabilities
|
|
236
|
+
): Promise<string> {
|
|
237
|
+
const template = this.templates.get(pattern.template)!;
|
|
238
|
+
|
|
239
|
+
const context = {
|
|
240
|
+
domain: analysis.domain,
|
|
241
|
+
expertise: analysis.expertise,
|
|
242
|
+
capabilities: capabilities.primary.map(c => ({
|
|
243
|
+
name: c.name,
|
|
244
|
+
description: c.description,
|
|
245
|
+
examples: c.examples,
|
|
246
|
+
})),
|
|
247
|
+
supportingCapabilities: capabilities.supporting.map(c => ({
|
|
248
|
+
name: c.name,
|
|
249
|
+
description: c.description,
|
|
250
|
+
})),
|
|
251
|
+
tools: analysis.tools,
|
|
252
|
+
constraints: analysis.constraints,
|
|
253
|
+
bestPractices: this.generateBestPractices(analysis, capabilities),
|
|
254
|
+
approach: this.generateApproach(analysis, pattern),
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
return template(context);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
private async generateCodeExamples(
|
|
261
|
+
analysis: RequirementAnalysis,
|
|
262
|
+
capabilities: ComposedCapabilities
|
|
263
|
+
): Promise<CodeExample[]> {
|
|
264
|
+
const examples: CodeExample[] = [];
|
|
265
|
+
|
|
266
|
+
for (const capability of capabilities.primary) {
|
|
267
|
+
const prompt = `
|
|
268
|
+
Generate production-ready code example for:
|
|
269
|
+
Domain: ${analysis.domain}
|
|
270
|
+
Capability: ${capability.name}
|
|
271
|
+
Description: ${capability.description}
|
|
272
|
+
|
|
273
|
+
Requirements:
|
|
274
|
+
- Include error handling
|
|
275
|
+
- Add comprehensive comments
|
|
276
|
+
- Follow best practices
|
|
277
|
+
- Make it practical and reusable
|
|
278
|
+
|
|
279
|
+
Provide code in the most appropriate language.
|
|
280
|
+
`;
|
|
281
|
+
|
|
282
|
+
const response = await this.openai.chat.completions.create({
|
|
283
|
+
model: 'gpt-4',
|
|
284
|
+
messages: [
|
|
285
|
+
{ role: 'system', content: 'You are an expert programmer.' },
|
|
286
|
+
{ role: 'user', content: prompt },
|
|
287
|
+
],
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
const code = response.choices[0].message.content!;
|
|
291
|
+
|
|
292
|
+
examples.push({
|
|
293
|
+
capability: capability.name,
|
|
294
|
+
title: `${capability.name} Implementation`,
|
|
295
|
+
code,
|
|
296
|
+
language: this.detectLanguage(code),
|
|
297
|
+
explanation: capability.description,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return examples;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private async generateTestCases(
|
|
305
|
+
analysis: RequirementAnalysis,
|
|
306
|
+
capabilities: ComposedCapabilities
|
|
307
|
+
): Promise<TestCase[]> {
|
|
308
|
+
const testCases: TestCase[] = [];
|
|
309
|
+
|
|
310
|
+
for (const capability of capabilities.primary) {
|
|
311
|
+
// Generate test scenarios
|
|
312
|
+
const scenarios = await this.generateTestScenarios(capability);
|
|
313
|
+
|
|
314
|
+
for (const scenario of scenarios) {
|
|
315
|
+
testCases.push({
|
|
316
|
+
id: `test_${capability.id}_${scenario.id}`,
|
|
317
|
+
capability: capability.name,
|
|
318
|
+
scenario: scenario.description,
|
|
319
|
+
input: scenario.input,
|
|
320
|
+
expectedOutput: scenario.expectedOutput,
|
|
321
|
+
validation: scenario.validation,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return testCases;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
private assembleAgent(components: AgentComponents): GeneratedAgent {
|
|
330
|
+
const metadata: AgentMetadata = {
|
|
331
|
+
name: this.generateAgentName(components.domain, components.expertise),
|
|
332
|
+
description: this.generateDescription(components),
|
|
333
|
+
category: this.determineCategory(components.domain),
|
|
334
|
+
color: this.selectColor(components.domain),
|
|
335
|
+
tools: components.tools,
|
|
336
|
+
version: '1.0.0',
|
|
337
|
+
created: new Date(),
|
|
338
|
+
generator: 'agent-generator-v1',
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
const content = this.formatAgentContent(
|
|
342
|
+
metadata,
|
|
343
|
+
components.systemPrompt,
|
|
344
|
+
components.codeExamples,
|
|
345
|
+
components.testCases
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
return {
|
|
349
|
+
metadata,
|
|
350
|
+
content,
|
|
351
|
+
systemPrompt: components.systemPrompt,
|
|
352
|
+
codeExamples: components.codeExamples,
|
|
353
|
+
testCases: components.testCases,
|
|
354
|
+
pattern: components.pattern.name,
|
|
355
|
+
capabilities: components.capabilities,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
private async validateAgent(agent: GeneratedAgent): Promise<void> {
|
|
360
|
+
const validations = [
|
|
361
|
+
this.validateMetadata(agent.metadata),
|
|
362
|
+
this.validateSystemPrompt(agent.systemPrompt),
|
|
363
|
+
this.validateCodeExamples(agent.codeExamples),
|
|
364
|
+
this.validateTestCases(agent.testCases),
|
|
365
|
+
this.validateCapabilities(agent.capabilities),
|
|
366
|
+
];
|
|
367
|
+
|
|
368
|
+
const results = await Promise.all(validations);
|
|
369
|
+
|
|
370
|
+
const errors = results.filter(r => !r.valid);
|
|
371
|
+
if (errors.length > 0) {
|
|
372
|
+
throw new ValidationError('Agent validation failed', errors);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
private formatAgentContent(
|
|
377
|
+
metadata: AgentMetadata,
|
|
378
|
+
systemPrompt: string,
|
|
379
|
+
codeExamples: CodeExample[],
|
|
380
|
+
testCases: TestCase[]
|
|
381
|
+
): string {
|
|
382
|
+
const frontmatter = yaml.dump({
|
|
383
|
+
name: metadata.name,
|
|
384
|
+
description: metadata.description,
|
|
385
|
+
category: metadata.category,
|
|
386
|
+
color: metadata.color,
|
|
387
|
+
tools: metadata.tools.join(', '),
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
const examples = codeExamples.map(ex => `
|
|
391
|
+
## ${ex.title}
|
|
392
|
+
\`\`\`${ex.language}
|
|
393
|
+
${ex.code}
|
|
394
|
+
\`\`\`
|
|
395
|
+
${ex.explanation}
|
|
396
|
+
`).join('\n');
|
|
397
|
+
|
|
398
|
+
return `---
|
|
399
|
+
${frontmatter}---
|
|
400
|
+
|
|
401
|
+
${systemPrompt}
|
|
402
|
+
|
|
403
|
+
${examples}
|
|
404
|
+
|
|
405
|
+
## Test Cases
|
|
406
|
+
${this.formatTestCases(testCases)}
|
|
407
|
+
|
|
408
|
+
## Best Practices
|
|
409
|
+
${this.formatBestPractices(metadata)}
|
|
410
|
+
|
|
411
|
+
## Approach
|
|
412
|
+
${this.formatApproach(metadata)}
|
|
413
|
+
`;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
private generateAgentName(domain: string, expertise: string[]): string {
|
|
417
|
+
const primaryExpertise = expertise[0].toLowerCase().replace(/\s+/g, '-');
|
|
418
|
+
return `${domain}-${primaryExpertise}`;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
private generateDescription(components: AgentComponents): string {
|
|
422
|
+
return `Expert in ${components.domain} specializing in ${components.expertise.join(', ')}`;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
private determineCategory(domain: string): string {
|
|
426
|
+
const categoryMap: Record<string, string> = {
|
|
427
|
+
'web': 'development',
|
|
428
|
+
'backend': 'development',
|
|
429
|
+
'frontend': 'development',
|
|
430
|
+
'mobile': 'development',
|
|
431
|
+
'cloud': 'infrastructure',
|
|
432
|
+
'devops': 'infrastructure',
|
|
433
|
+
'testing': 'quality',
|
|
434
|
+
'security': 'quality',
|
|
435
|
+
'data': 'data-ai',
|
|
436
|
+
'ml': 'data-ai',
|
|
437
|
+
'ai': 'data-ai',
|
|
438
|
+
'product': 'business',
|
|
439
|
+
'design': 'creative',
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
return categoryMap[domain.toLowerCase()] || 'specialized';
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
private selectColor(domain: string): string {
|
|
446
|
+
const colorMap: Record<string, string> = {
|
|
447
|
+
'development': 'blue',
|
|
448
|
+
'infrastructure': 'green',
|
|
449
|
+
'quality': 'red',
|
|
450
|
+
'data-ai': 'purple',
|
|
451
|
+
'business': 'orange',
|
|
452
|
+
'creative': 'pink',
|
|
453
|
+
'specialized': 'gray',
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
const category = this.determineCategory(domain);
|
|
457
|
+
return colorMap[category] || 'gray';
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
private resolveCapabilityConflicts(capabilities: Capability[]): Capability[] {
|
|
461
|
+
// Simple conflict resolution - in production, use more sophisticated logic
|
|
462
|
+
const resolved: Capability[] = [];
|
|
463
|
+
const seen = new Set<string>();
|
|
464
|
+
|
|
465
|
+
for (const cap of capabilities) {
|
|
466
|
+
if (!seen.has(cap.id)) {
|
|
467
|
+
resolved.push(cap);
|
|
468
|
+
seen.add(cap.id);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return resolved;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
private generateBestPractices(
|
|
476
|
+
analysis: RequirementAnalysis,
|
|
477
|
+
capabilities: ComposedCapabilities
|
|
478
|
+
): string[] {
|
|
479
|
+
const practices: string[] = [];
|
|
480
|
+
|
|
481
|
+
// Domain-specific practices
|
|
482
|
+
practices.push(...this.getDomainBestPractices(analysis.domain));
|
|
483
|
+
|
|
484
|
+
// Capability-specific practices
|
|
485
|
+
for (const cap of capabilities.primary) {
|
|
486
|
+
if (cap.bestPractices) {
|
|
487
|
+
practices.push(...cap.bestPractices);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
return practices;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
private generateApproach(
|
|
495
|
+
analysis: RequirementAnalysis,
|
|
496
|
+
pattern: AgentPattern
|
|
497
|
+
): string[] {
|
|
498
|
+
return [
|
|
499
|
+
`Analyze ${analysis.domain} requirements thoroughly`,
|
|
500
|
+
`Apply ${pattern.name} pattern for optimal results`,
|
|
501
|
+
`Leverage ${analysis.expertise.join(', ')} expertise`,
|
|
502
|
+
'Follow established best practices and conventions',
|
|
503
|
+
'Ensure code quality and maintainability',
|
|
504
|
+
'Provide comprehensive documentation',
|
|
505
|
+
];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
private getDomainBestPractices(domain: string): string[] {
|
|
509
|
+
const practices: Record<string, string[]> = {
|
|
510
|
+
'web': [
|
|
511
|
+
'Follow responsive design principles',
|
|
512
|
+
'Ensure accessibility compliance',
|
|
513
|
+
'Optimize for performance',
|
|
514
|
+
'Implement proper SEO',
|
|
515
|
+
],
|
|
516
|
+
'backend': [
|
|
517
|
+
'Design RESTful APIs',
|
|
518
|
+
'Implement proper authentication',
|
|
519
|
+
'Handle errors gracefully',
|
|
520
|
+
'Optimize database queries',
|
|
521
|
+
],
|
|
522
|
+
'cloud': [
|
|
523
|
+
'Follow cloud-native principles',
|
|
524
|
+
'Implement proper security',
|
|
525
|
+
'Design for scalability',
|
|
526
|
+
'Monitor and log everything',
|
|
527
|
+
],
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
return practices[domain] || [];
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
private detectLanguage(code: string): string {
|
|
534
|
+
// Simple language detection - in production, use proper detection
|
|
535
|
+
if (code.includes('function') || code.includes('const')) return 'typescript';
|
|
536
|
+
if (code.includes('def ') || code.includes('import ')) return 'python';
|
|
537
|
+
if (code.includes('func ') || code.includes('package ')) return 'go';
|
|
538
|
+
if (code.includes('public class') || code.includes('private ')) return 'java';
|
|
539
|
+
return 'text';
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
private async generateTestScenarios(capability: Capability): Promise<TestScenario[]> {
|
|
543
|
+
// Generate test scenarios based on capability
|
|
544
|
+
return [
|
|
545
|
+
{
|
|
546
|
+
id: 'happy_path',
|
|
547
|
+
description: `Test ${capability.name} with valid input`,
|
|
548
|
+
input: this.generateValidInput(capability),
|
|
549
|
+
expectedOutput: this.generateExpectedOutput(capability),
|
|
550
|
+
validation: 'exact_match',
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
id: 'edge_case',
|
|
554
|
+
description: `Test ${capability.name} with edge cases`,
|
|
555
|
+
input: this.generateEdgeCase(capability),
|
|
556
|
+
expectedOutput: this.generateEdgeCaseOutput(capability),
|
|
557
|
+
validation: 'contains',
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
id: 'error_handling',
|
|
561
|
+
description: `Test ${capability.name} error handling`,
|
|
562
|
+
input: this.generateInvalidInput(capability),
|
|
563
|
+
expectedOutput: this.generateErrorOutput(capability),
|
|
564
|
+
validation: 'error',
|
|
565
|
+
},
|
|
566
|
+
];
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
private generateValidInput(capability: Capability): any {
|
|
570
|
+
// Generate valid input based on capability type
|
|
571
|
+
return {
|
|
572
|
+
type: 'valid',
|
|
573
|
+
data: 'sample input',
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
private generateExpectedOutput(capability: Capability): any {
|
|
578
|
+
return {
|
|
579
|
+
success: true,
|
|
580
|
+
result: 'expected output',
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
private generateEdgeCase(capability: Capability): any {
|
|
585
|
+
return {
|
|
586
|
+
type: 'edge',
|
|
587
|
+
data: '',
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
private generateEdgeCaseOutput(capability: Capability): any {
|
|
592
|
+
return {
|
|
593
|
+
success: true,
|
|
594
|
+
result: 'handled edge case',
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
private generateInvalidInput(capability: Capability): any {
|
|
599
|
+
return {
|
|
600
|
+
type: 'invalid',
|
|
601
|
+
data: null,
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
private generateErrorOutput(capability: Capability): any {
|
|
606
|
+
return {
|
|
607
|
+
success: false,
|
|
608
|
+
error: 'Invalid input',
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
private formatTestCases(testCases: TestCase[]): string {
|
|
613
|
+
return testCases.map(tc => `
|
|
614
|
+
### ${tc.scenario}
|
|
615
|
+
- **Input**: \`${JSON.stringify(tc.input)}\`
|
|
616
|
+
- **Expected**: \`${JSON.stringify(tc.expectedOutput)}\`
|
|
617
|
+
- **Validation**: ${tc.validation}
|
|
618
|
+
`).join('\n');
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
private formatBestPractices(metadata: AgentMetadata): string {
|
|
622
|
+
return `
|
|
623
|
+
1. Follow ${metadata.category} best practices
|
|
624
|
+
2. Ensure code quality and maintainability
|
|
625
|
+
3. Provide comprehensive error handling
|
|
626
|
+
4. Document all decisions and trade-offs
|
|
627
|
+
5. Optimize for performance and scalability
|
|
628
|
+
`;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
private formatApproach(metadata: AgentMetadata): string {
|
|
632
|
+
return `
|
|
633
|
+
1. Understand requirements thoroughly
|
|
634
|
+
2. Apply appropriate design patterns
|
|
635
|
+
3. Implement with best practices
|
|
636
|
+
4. Test comprehensively
|
|
637
|
+
5. Document clearly
|
|
638
|
+
6. Iterate based on feedback
|
|
639
|
+
`;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
private async validateMetadata(metadata: AgentMetadata): Promise<ValidationResult> {
|
|
643
|
+
const errors: string[] = [];
|
|
644
|
+
|
|
645
|
+
if (!metadata.name || metadata.name.length < 3) {
|
|
646
|
+
errors.push('Agent name must be at least 3 characters');
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (!metadata.description || metadata.description.length < 10) {
|
|
650
|
+
errors.push('Agent description must be at least 10 characters');
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
if (!metadata.tools || metadata.tools.length === 0) {
|
|
654
|
+
errors.push('Agent must have at least one tool');
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
return {
|
|
658
|
+
valid: errors.length === 0,
|
|
659
|
+
errors,
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
private async validateSystemPrompt(prompt: string): Promise<ValidationResult> {
|
|
664
|
+
const errors: string[] = [];
|
|
665
|
+
|
|
666
|
+
if (prompt.length < 100) {
|
|
667
|
+
errors.push('System prompt too short');
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
if (!prompt.includes('expertise') && !prompt.includes('expert')) {
|
|
671
|
+
errors.push('System prompt should establish expertise');
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
return {
|
|
675
|
+
valid: errors.length === 0,
|
|
676
|
+
errors,
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
private async validateCodeExamples(examples: CodeExample[]): Promise<ValidationResult> {
|
|
681
|
+
const errors: string[] = [];
|
|
682
|
+
|
|
683
|
+
if (examples.length === 0) {
|
|
684
|
+
errors.push('At least one code example required');
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
for (const example of examples) {
|
|
688
|
+
if (!example.code || example.code.length < 50) {
|
|
689
|
+
errors.push(`Code example ${example.title} too short`);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return {
|
|
694
|
+
valid: errors.length === 0,
|
|
695
|
+
errors,
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
private async validateTestCases(testCases: TestCase[]): Promise<ValidationResult> {
|
|
700
|
+
const errors: string[] = [];
|
|
701
|
+
|
|
702
|
+
if (testCases.length < 3) {
|
|
703
|
+
errors.push('At least 3 test cases required');
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
return {
|
|
707
|
+
valid: errors.length === 0,
|
|
708
|
+
errors,
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
private async validateCapabilities(capabilities: ComposedCapabilities): Promise<ValidationResult> {
|
|
713
|
+
const errors: string[] = [];
|
|
714
|
+
|
|
715
|
+
if (capabilities.primary.length === 0) {
|
|
716
|
+
errors.push('At least one primary capability required');
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
if (capabilities.conflicts.length > 0) {
|
|
720
|
+
errors.push(`Unresolved conflicts: ${capabilities.conflicts.join(', ')}`);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
return {
|
|
724
|
+
valid: errors.length === 0,
|
|
725
|
+
errors,
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
private async loadTemplates(): Promise<void> {
|
|
730
|
+
// Load Handlebars templates
|
|
731
|
+
const templatesDir = path.join(__dirname, 'templates');
|
|
732
|
+
const files = await fs.readdir(templatesDir);
|
|
733
|
+
|
|
734
|
+
for (const file of files) {
|
|
735
|
+
if (file.endsWith('.hbs')) {
|
|
736
|
+
const name = path.basename(file, '.hbs');
|
|
737
|
+
const content = await fs.readFile(path.join(templatesDir, file), 'utf-8');
|
|
738
|
+
this.templates.set(name, compile(content));
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
private async loadPatterns(): Promise<void> {
|
|
744
|
+
// Load agent patterns
|
|
745
|
+
// In production, load from configuration
|
|
746
|
+
this.patterns.set('specialist', {
|
|
747
|
+
name: 'specialist',
|
|
748
|
+
template: 'specialist',
|
|
749
|
+
domains: ['web', 'backend', 'frontend', 'mobile'],
|
|
750
|
+
capabilities: ['coding', 'debugging', 'optimization'],
|
|
751
|
+
supportedTools: ['Write', 'Read', 'MultiEdit', 'Bash'],
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
this.patterns.set('architect', {
|
|
755
|
+
name: 'architect',
|
|
756
|
+
template: 'architect',
|
|
757
|
+
domains: ['cloud', 'infrastructure', 'system'],
|
|
758
|
+
capabilities: ['design', 'planning', 'documentation'],
|
|
759
|
+
supportedTools: ['Write', 'Read', 'Grep', 'Glob'],
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
private async loadCapabilities(): Promise<void> {
|
|
764
|
+
// Load capability definitions
|
|
765
|
+
// In production, load from configuration
|
|
766
|
+
this.capabilities.set('coding', {
|
|
767
|
+
id: 'coding',
|
|
768
|
+
name: 'Coding',
|
|
769
|
+
description: 'Write production-ready code',
|
|
770
|
+
examples: ['Implement features', 'Fix bugs', 'Refactor code'],
|
|
771
|
+
dependencies: ['debugging'],
|
|
772
|
+
bestPractices: ['Follow SOLID principles', 'Write clean code'],
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
this.capabilities.set('debugging', {
|
|
776
|
+
id: 'debugging',
|
|
777
|
+
name: 'Debugging',
|
|
778
|
+
description: 'Debug and troubleshoot issues',
|
|
779
|
+
examples: ['Find root causes', 'Fix errors', 'Analyze logs'],
|
|
780
|
+
bestPractices: ['Use proper debugging tools', 'Document findings'],
|
|
781
|
+
});
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
// Type definitions
|
|
786
|
+
interface AgentGeneratorConfig {
|
|
787
|
+
openaiApiKey: string;
|
|
788
|
+
templatesDir?: string;
|
|
789
|
+
patternsConfig?: string;
|
|
790
|
+
capabilitiesConfig?: string;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
interface AgentRequirements {
|
|
794
|
+
domain: string;
|
|
795
|
+
tasks: string[];
|
|
796
|
+
constraints?: string[];
|
|
797
|
+
examples?: string[];
|
|
798
|
+
performance?: PerformanceRequirements;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
interface PerformanceRequirements {
|
|
802
|
+
responseTime?: number;
|
|
803
|
+
accuracy?: number;
|
|
804
|
+
reliability?: number;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
interface RequirementAnalysis {
|
|
808
|
+
domain: string;
|
|
809
|
+
expertise: string[];
|
|
810
|
+
capabilities: string[];
|
|
811
|
+
tools: string[];
|
|
812
|
+
constraints: string[];
|
|
813
|
+
patterns: string[];
|
|
814
|
+
performance: PerformanceRequirements;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
interface AgentPattern {
|
|
818
|
+
name: string;
|
|
819
|
+
template: string;
|
|
820
|
+
domains: string[];
|
|
821
|
+
capabilities: string[];
|
|
822
|
+
supportedTools: string[];
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
interface Capability {
|
|
826
|
+
id: string;
|
|
827
|
+
name: string;
|
|
828
|
+
description: string;
|
|
829
|
+
examples?: string[];
|
|
830
|
+
dependencies?: string[];
|
|
831
|
+
bestPractices?: string[];
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
interface ComposedCapabilities {
|
|
835
|
+
primary: Capability[];
|
|
836
|
+
supporting: Capability[];
|
|
837
|
+
conflicts: string[];
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
interface CodeExample {
|
|
841
|
+
capability: string;
|
|
842
|
+
title: string;
|
|
843
|
+
code: string;
|
|
844
|
+
language: string;
|
|
845
|
+
explanation: string;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
interface TestCase {
|
|
849
|
+
id: string;
|
|
850
|
+
capability: string;
|
|
851
|
+
scenario: string;
|
|
852
|
+
input: any;
|
|
853
|
+
expectedOutput: any;
|
|
854
|
+
validation: string;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
interface TestScenario {
|
|
858
|
+
id: string;
|
|
859
|
+
description: string;
|
|
860
|
+
input: any;
|
|
861
|
+
expectedOutput: any;
|
|
862
|
+
validation: string;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
interface AgentComponents {
|
|
866
|
+
domain: string;
|
|
867
|
+
expertise: string[];
|
|
868
|
+
pattern: AgentPattern;
|
|
869
|
+
capabilities: ComposedCapabilities;
|
|
870
|
+
systemPrompt: string;
|
|
871
|
+
codeExamples: CodeExample[];
|
|
872
|
+
testCases: TestCase[];
|
|
873
|
+
tools: string[];
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
interface AgentMetadata {
|
|
877
|
+
name: string;
|
|
878
|
+
description: string;
|
|
879
|
+
category: string;
|
|
880
|
+
color: string;
|
|
881
|
+
tools: string[];
|
|
882
|
+
version: string;
|
|
883
|
+
created: Date;
|
|
884
|
+
generator: string;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
interface GeneratedAgent {
|
|
888
|
+
metadata: AgentMetadata;
|
|
889
|
+
content: string;
|
|
890
|
+
systemPrompt: string;
|
|
891
|
+
codeExamples: CodeExample[];
|
|
892
|
+
testCases: TestCase[];
|
|
893
|
+
pattern: string;
|
|
894
|
+
capabilities: ComposedCapabilities;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
interface ValidationResult {
|
|
898
|
+
valid: boolean;
|
|
899
|
+
errors: string[];
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
class ValidationError extends Error {
|
|
903
|
+
constructor(message: string, public errors: ValidationResult[]) {
|
|
904
|
+
super(message);
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
// Export the generator
|
|
909
|
+
export { AgentGenerator, AgentRequirements, GeneratedAgent };
|
|
910
|
+
```
|
|
911
|
+
|
|
912
|
+
## Template-Based Generation
|
|
913
|
+
```typescript
|
|
914
|
+
// agent-templates.ts
|
|
915
|
+
export const agentTemplates = {
|
|
916
|
+
specialist: `
|
|
917
|
+
You are a {{domain}} specialist with deep expertise in {{#each expertise}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}.
|
|
918
|
+
|
|
919
|
+
## Core Expertise
|
|
920
|
+
{{#each capabilities}}
|
|
921
|
+
- {{this.name}}: {{this.description}}
|
|
922
|
+
{{/each}}
|
|
923
|
+
|
|
924
|
+
## Technical Stack
|
|
925
|
+
{{#each tools}}
|
|
926
|
+
- {{this}}
|
|
927
|
+
{{/each}}
|
|
928
|
+
|
|
929
|
+
## Best Practices
|
|
930
|
+
{{#each bestPractices}}
|
|
931
|
+
1. {{this}}
|
|
932
|
+
{{/each}}
|
|
933
|
+
|
|
934
|
+
## Approach
|
|
935
|
+
{{#each approach}}
|
|
936
|
+
- {{this}}
|
|
937
|
+
{{/each}}
|
|
938
|
+
`,
|
|
939
|
+
|
|
940
|
+
architect: `
|
|
941
|
+
You are a {{domain}} architect specializing in system design and architecture.
|
|
942
|
+
|
|
943
|
+
## Architecture Principles
|
|
944
|
+
{{#each principles}}
|
|
945
|
+
- {{this}}
|
|
946
|
+
{{/each}}
|
|
947
|
+
|
|
948
|
+
## Design Patterns
|
|
949
|
+
{{#each patterns}}
|
|
950
|
+
- {{this.name}}: {{this.description}}
|
|
951
|
+
{{/each}}
|
|
952
|
+
|
|
953
|
+
## Quality Attributes
|
|
954
|
+
{{#each qualityAttributes}}
|
|
955
|
+
- {{this}}
|
|
956
|
+
{{/each}}
|
|
957
|
+
`,
|
|
958
|
+
|
|
959
|
+
reviewer: `
|
|
960
|
+
You are a {{domain}} reviewer focused on quality assurance and best practices.
|
|
961
|
+
|
|
962
|
+
## Review Criteria
|
|
963
|
+
{{#each criteria}}
|
|
964
|
+
- {{this}}
|
|
965
|
+
{{/each}}
|
|
966
|
+
|
|
967
|
+
## Common Issues
|
|
968
|
+
{{#each commonIssues}}
|
|
969
|
+
- {{this.issue}}: {{this.solution}}
|
|
970
|
+
{{/each}}
|
|
971
|
+
`,
|
|
972
|
+
};
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
## DSL for Agent Definition
|
|
976
|
+
```typescript
|
|
977
|
+
// agent-dsl.ts
|
|
978
|
+
import { Parser } from 'chevrotain';
|
|
979
|
+
|
|
980
|
+
class AgentDSL {
|
|
981
|
+
private parser: AgentDSLParser;
|
|
982
|
+
private interpreter: AgentDSLInterpreter;
|
|
983
|
+
|
|
984
|
+
constructor() {
|
|
985
|
+
this.parser = new AgentDSLParser();
|
|
986
|
+
this.interpreter = new AgentDSLInterpreter();
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
parse(dsl: string): AgentDefinition {
|
|
990
|
+
const ast = this.parser.parse(dsl);
|
|
991
|
+
return this.interpreter.interpret(ast);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// Example DSL:
|
|
996
|
+
const agentDSL = `
|
|
997
|
+
agent WebDeveloper {
|
|
998
|
+
domain: "web development"
|
|
999
|
+
|
|
1000
|
+
capabilities {
|
|
1001
|
+
frontend: "React, Vue, Angular"
|
|
1002
|
+
backend: "Node.js, Python, Go"
|
|
1003
|
+
database: "PostgreSQL, MongoDB"
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
tools: [Write, Read, MultiEdit, Bash]
|
|
1007
|
+
|
|
1008
|
+
patterns {
|
|
1009
|
+
mvc: "Model-View-Controller"
|
|
1010
|
+
rest: "RESTful API design"
|
|
1011
|
+
responsive: "Responsive web design"
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
workflow {
|
|
1015
|
+
1. analyze_requirements
|
|
1016
|
+
2. design_architecture
|
|
1017
|
+
3. implement_features
|
|
1018
|
+
4. write_tests
|
|
1019
|
+
5. optimize_performance
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
constraints {
|
|
1023
|
+
- "Follow accessibility guidelines"
|
|
1024
|
+
- "Ensure mobile compatibility"
|
|
1025
|
+
- "Optimize for SEO"
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
`;
|
|
1029
|
+
|
|
1030
|
+
class AgentDSLParser {
|
|
1031
|
+
parse(input: string): AST {
|
|
1032
|
+
// Simplified parser implementation
|
|
1033
|
+
const lines = input.split('\n');
|
|
1034
|
+
const ast: AST = { type: 'agent', children: [] };
|
|
1035
|
+
|
|
1036
|
+
let current: any = ast;
|
|
1037
|
+
const stack: any[] = [ast];
|
|
1038
|
+
|
|
1039
|
+
for (const line of lines) {
|
|
1040
|
+
const trimmed = line.trim();
|
|
1041
|
+
|
|
1042
|
+
if (trimmed.startsWith('agent ')) {
|
|
1043
|
+
const name = trimmed.split(' ')[1].replace('{', '').trim();
|
|
1044
|
+
current.name = name;
|
|
1045
|
+
} else if (trimmed.includes(':')) {
|
|
1046
|
+
const [key, value] = trimmed.split(':').map(s => s.trim());
|
|
1047
|
+
current[key] = value.replace(/[",]/g, '');
|
|
1048
|
+
} else if (trimmed.endsWith('{')) {
|
|
1049
|
+
const key = trimmed.replace('{', '').trim();
|
|
1050
|
+
const newNode = { type: key, children: [] };
|
|
1051
|
+
current.children.push(newNode);
|
|
1052
|
+
stack.push(current);
|
|
1053
|
+
current = newNode;
|
|
1054
|
+
} else if (trimmed === '}') {
|
|
1055
|
+
current = stack.pop();
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
return ast;
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
class AgentDSLInterpreter {
|
|
1064
|
+
interpret(ast: AST): AgentDefinition {
|
|
1065
|
+
// Convert AST to agent definition
|
|
1066
|
+
return {
|
|
1067
|
+
name: ast.name,
|
|
1068
|
+
domain: this.extractValue(ast, 'domain'),
|
|
1069
|
+
capabilities: this.extractCapabilities(ast),
|
|
1070
|
+
tools: this.extractTools(ast),
|
|
1071
|
+
patterns: this.extractPatterns(ast),
|
|
1072
|
+
workflow: this.extractWorkflow(ast),
|
|
1073
|
+
constraints: this.extractConstraints(ast),
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
private extractValue(ast: AST, key: string): string {
|
|
1078
|
+
return ast[key] || '';
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
private extractCapabilities(ast: AST): Map<string, string> {
|
|
1082
|
+
const capabilities = new Map();
|
|
1083
|
+
const capNode = ast.children.find(c => c.type === 'capabilities');
|
|
1084
|
+
|
|
1085
|
+
if (capNode) {
|
|
1086
|
+
for (const child of capNode.children) {
|
|
1087
|
+
capabilities.set(child.key, child.value);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
return capabilities;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
private extractTools(ast: AST): string[] {
|
|
1095
|
+
const toolsStr = this.extractValue(ast, 'tools');
|
|
1096
|
+
return toolsStr.replace(/[\[\]]/g, '').split(',').map(s => s.trim());
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
private extractPatterns(ast: AST): Map<string, string> {
|
|
1100
|
+
const patterns = new Map();
|
|
1101
|
+
const patternNode = ast.children.find(c => c.type === 'patterns');
|
|
1102
|
+
|
|
1103
|
+
if (patternNode) {
|
|
1104
|
+
for (const child of patternNode.children) {
|
|
1105
|
+
patterns.set(child.key, child.value);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
return patterns;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
private extractWorkflow(ast: AST): string[] {
|
|
1113
|
+
const workflow: string[] = [];
|
|
1114
|
+
const workflowNode = ast.children.find(c => c.type === 'workflow');
|
|
1115
|
+
|
|
1116
|
+
if (workflowNode) {
|
|
1117
|
+
for (const child of workflowNode.children) {
|
|
1118
|
+
workflow.push(child.step);
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
return workflow;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
private extractConstraints(ast: AST): string[] {
|
|
1126
|
+
const constraints: string[] = [];
|
|
1127
|
+
const constraintNode = ast.children.find(c => c.type === 'constraints');
|
|
1128
|
+
|
|
1129
|
+
if (constraintNode) {
|
|
1130
|
+
for (const child of constraintNode.children) {
|
|
1131
|
+
constraints.push(child.value);
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
return constraints;
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
interface AST {
|
|
1140
|
+
type: string;
|
|
1141
|
+
name?: string;
|
|
1142
|
+
children: any[];
|
|
1143
|
+
[key: string]: any;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
interface AgentDefinition {
|
|
1147
|
+
name: string;
|
|
1148
|
+
domain: string;
|
|
1149
|
+
capabilities: Map<string, string>;
|
|
1150
|
+
tools: string[];
|
|
1151
|
+
patterns: Map<string, string>;
|
|
1152
|
+
workflow: string[];
|
|
1153
|
+
constraints: string[];
|
|
1154
|
+
}
|
|
1155
|
+
```
|
|
1156
|
+
|
|
1157
|
+
## Best Practices
|
|
1158
|
+
1. **Template Reusability**: Create modular, reusable templates
|
|
1159
|
+
2. **Pattern Recognition**: Identify and apply common agent patterns
|
|
1160
|
+
3. **Capability Composition**: Build complex agents from simple capabilities
|
|
1161
|
+
4. **Validation**: Comprehensive validation of generated agents
|
|
1162
|
+
5. **Testing**: Automated testing of generated agents
|
|
1163
|
+
6. **Documentation**: Auto-generate comprehensive documentation
|
|
1164
|
+
7. **Version Control**: Track agent versions and changes
|
|
1165
|
+
|
|
1166
|
+
## Generation Strategies
|
|
1167
|
+
- Template-based generation for common patterns
|
|
1168
|
+
- AI-assisted generation for complex requirements
|
|
1169
|
+
- DSL for declarative agent definition
|
|
1170
|
+
- Capability composition and inheritance
|
|
1171
|
+
- Pattern matching and recommendation
|
|
1172
|
+
- Automated optimization and tuning
|
|
1173
|
+
- Self-improving generation algorithms
|
|
1174
|
+
|
|
1175
|
+
## Approach
|
|
1176
|
+
- Analyze requirements to understand agent needs
|
|
1177
|
+
- Select appropriate patterns and templates
|
|
1178
|
+
- Compose capabilities from existing components
|
|
1179
|
+
- Generate comprehensive system prompts
|
|
1180
|
+
- Create practical code examples
|
|
1181
|
+
- Validate and test generated agents
|
|
1182
|
+
- Iterate based on performance metrics
|
|
1183
|
+
|
|
1184
|
+
## Output Format
|
|
1185
|
+
- Provide complete agent generation frameworks
|
|
1186
|
+
- Include template libraries and patterns
|
|
1187
|
+
- Document DSL syntax and usage
|
|
1188
|
+
- Add validation and testing tools
|
|
1189
|
+
- Include performance benchmarks
|
|
1190
|
+
- Provide generation best practices
|