@bluefly/openstandardagents 0.2.4
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/.env.example +41 -0
- package/.eslintrc.cjs +43 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
- package/.github/dependabot.yml +58 -0
- package/.github/workflows/ci.yml +154 -0
- package/.github/workflows/codeql.yml +41 -0
- package/.github/workflows/dependabot-auto-merge.yml +28 -0
- package/.github/workflows/release.yml +103 -0
- package/.prettierignore +7 -0
- package/.prettierrc.json +10 -0
- package/.redocly.yaml +9 -0
- package/.releaserc.json +84 -0
- package/.releaserc.json.disabled +81 -0
- package/CHANGELOG.md +152 -0
- package/CONTRIBUTING.md +249 -0
- package/LICENSE +190 -0
- package/README.md +280 -0
- package/bin/ossa +8 -0
- package/bin/validate-ossa-0.2.2.ts +244 -0
- package/dist/di-container.d.ts +18 -0
- package/dist/di-container.d.ts.map +1 -0
- package/dist/di-container.js +43 -0
- package/dist/di-container.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/manifest.repository.d.ts +26 -0
- package/dist/repositories/manifest.repository.d.ts.map +1 -0
- package/dist/repositories/manifest.repository.js +90 -0
- package/dist/repositories/manifest.repository.js.map +1 -0
- package/dist/repositories/schema.repository.d.ts +30 -0
- package/dist/repositories/schema.repository.d.ts.map +1 -0
- package/dist/repositories/schema.repository.js +143 -0
- package/dist/repositories/schema.repository.js.map +1 -0
- package/dist/services/generation.service.d.ts +54 -0
- package/dist/services/generation.service.d.ts.map +1 -0
- package/dist/services/generation.service.js +298 -0
- package/dist/services/generation.service.js.map +1 -0
- package/dist/services/migration.service.d.ts +30 -0
- package/dist/services/migration.service.d.ts.map +1 -0
- package/dist/services/migration.service.js +231 -0
- package/dist/services/migration.service.js.map +1 -0
- package/dist/services/runtime/openai.adapter.d.ts +94 -0
- package/dist/services/runtime/openai.adapter.d.ts.map +1 -0
- package/dist/services/runtime/openai.adapter.js +209 -0
- package/dist/services/runtime/openai.adapter.js.map +1 -0
- package/dist/services/validation.service.d.ts +45 -0
- package/dist/services/validation.service.d.ts.map +1 -0
- package/dist/services/validation.service.js +362 -0
- package/dist/services/validation.service.js.map +1 -0
- package/dist/services/validators/anthropic.validator.d.ts +9 -0
- package/dist/services/validators/anthropic.validator.d.ts.map +1 -0
- package/dist/services/validators/anthropic.validator.js +105 -0
- package/dist/services/validators/anthropic.validator.js.map +1 -0
- package/dist/services/validators/autogen.validator.d.ts +9 -0
- package/dist/services/validators/autogen.validator.d.ts.map +1 -0
- package/dist/services/validators/autogen.validator.js +111 -0
- package/dist/services/validators/autogen.validator.js.map +1 -0
- package/dist/services/validators/crewai.validator.d.ts +9 -0
- package/dist/services/validators/crewai.validator.d.ts.map +1 -0
- package/dist/services/validators/crewai.validator.js +117 -0
- package/dist/services/validators/crewai.validator.js.map +1 -0
- package/dist/services/validators/cursor.validator.d.ts +9 -0
- package/dist/services/validators/cursor.validator.d.ts.map +1 -0
- package/dist/services/validators/cursor.validator.js +88 -0
- package/dist/services/validators/cursor.validator.js.map +1 -0
- package/dist/services/validators/index.d.ts +15 -0
- package/dist/services/validators/index.d.ts.map +1 -0
- package/dist/services/validators/index.js +15 -0
- package/dist/services/validators/index.js.map +1 -0
- package/dist/services/validators/langchain.validator.d.ts +9 -0
- package/dist/services/validators/langchain.validator.d.ts.map +1 -0
- package/dist/services/validators/langchain.validator.js +103 -0
- package/dist/services/validators/langchain.validator.js.map +1 -0
- package/dist/services/validators/langflow.validator.d.ts +9 -0
- package/dist/services/validators/langflow.validator.d.ts.map +1 -0
- package/dist/services/validators/langflow.validator.js +92 -0
- package/dist/services/validators/langflow.validator.js.map +1 -0
- package/dist/services/validators/langgraph.validator.d.ts +9 -0
- package/dist/services/validators/langgraph.validator.d.ts.map +1 -0
- package/dist/services/validators/langgraph.validator.js +123 -0
- package/dist/services/validators/langgraph.validator.js.map +1 -0
- package/dist/services/validators/llamaindex.validator.d.ts +9 -0
- package/dist/services/validators/llamaindex.validator.d.ts.map +1 -0
- package/dist/services/validators/llamaindex.validator.js +121 -0
- package/dist/services/validators/llamaindex.validator.js.map +1 -0
- package/dist/services/validators/openai.validator.d.ts +9 -0
- package/dist/services/validators/openai.validator.d.ts.map +1 -0
- package/dist/services/validators/openai.validator.js +126 -0
- package/dist/services/validators/openai.validator.js.map +1 -0
- package/dist/services/validators/vercel-ai.validator.d.ts +9 -0
- package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -0
- package/dist/services/validators/vercel-ai.validator.js +99 -0
- package/dist/services/validators/vercel-ai.validator.js.map +1 -0
- package/dist/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
- package/dist/spec/v0.1.9/ecosystem-compliance.json +235 -0
- package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
- package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
- package/dist/spec/v0.1.9/reasoning-compliance.json +654 -0
- package/dist/spec/v0.2.2/kagent-enhancements.json +395 -0
- package/dist/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
- package/dist/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
- package/dist/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
- package/dist/spec/v0.2.3/CHANGELOG.md +176 -0
- package/dist/spec/v0.2.3/README.md +154 -0
- package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/dist/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
- package/dist/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
- package/dist/spec/v0.2.4-dev/CHANGELOG.md +403 -0
- package/dist/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
- package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
- package/dist/spec/v0.2.5-dev/CHANGELOG.md +171 -0
- package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
- package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
- package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
- package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
- package/dist/types/index.d.ts +178 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi-extensions.d.ts +164 -0
- package/dist/types/openapi-extensions.d.ts.map +1 -0
- package/dist/types/openapi-extensions.js +6 -0
- package/dist/types/openapi-extensions.js.map +1 -0
- package/docs/OSSA-COMPLIANT-BADGE.md +248 -0
- package/docs/README.md +31 -0
- package/docs/VERSIONING.md +284 -0
- package/docs/agent-openapi-spec.yml +942 -0
- package/docs/getting-started.md +87 -0
- package/docs/migration/general-agent-schema.yml +255 -0
- package/docs/migration/migration-manifest.json +64 -0
- package/docs/openapi-extensions.md +930 -0
- package/docs/schemas/openapi-extensions.schema.json +486 -0
- package/examples/adk-integration/code-review-workflow.yml +136 -0
- package/examples/adk-integration/customer-support.yml +263 -0
- package/examples/adk-integration/data-pipeline.yml +173 -0
- package/examples/advanced/patterns/compliance-context-production.json +53 -0
- package/examples/advanced/patterns/model-router.ts +274 -0
- package/examples/advanced/patterns/smart-model-routing.ts +248 -0
- package/examples/advanced/workflows/hybrid-model-strategy.yaml +232 -0
- package/examples/agent-manifests/critics/critic-agent.yaml +149 -0
- package/examples/agent-manifests/governors/governor-agent.yaml +128 -0
- package/examples/agent-manifests/integrators/integrator-agent.yaml +103 -0
- package/examples/agent-manifests/judges/judge-agent.yaml +153 -0
- package/examples/agent-manifests/monitors/monitor-agent.yaml +122 -0
- package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +247 -0
- package/examples/agent-manifests/sample-compliant-agent.yaml +147 -0
- package/examples/agent-manifests/workers/worker-agent.yaml +82 -0
- package/examples/anthropic/claude-assistant.ossa.json +45 -0
- package/examples/architecture/model-configuration/ollama-integration.ts +110 -0
- package/examples/autogen/multi-agent.ossa.json +37 -0
- package/examples/bridge-configurations.yaml +346 -0
- package/examples/bridges/Dockerfile.production +87 -0
- package/examples/bridges/__pycache__/aiflow-bridge-enhanced.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/aiflow-phoenix-tracing.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/test_aiflow_integration.cpython-313.pyc +0 -0
- package/examples/bridges/aiflow-bridge-enhanced.py +462 -0
- package/examples/bridges/aiflow-bridge-example.yml +310 -0
- package/examples/bridges/aiflow-phoenix-tracing.py +310 -0
- package/examples/bridges/aiflow-registration-api.openapi.yml +439 -0
- package/examples/bridges/k8s/configmap.yaml +121 -0
- package/examples/bridges/k8s/deployment-simple.yaml +34 -0
- package/examples/bridges/k8s/deployment.yaml +275 -0
- package/examples/bridges/k8s/hpa.yaml +126 -0
- package/examples/bridges/k8s/ingress.yaml +155 -0
- package/examples/bridges/kagent-bridge-example.yml +94 -0
- package/examples/bridges/load-tests/Dockerfile +28 -0
- package/examples/bridges/load-tests/k6-load-test.js +302 -0
- package/examples/bridges/load-tests/requirements.txt +20 -0
- package/examples/bridges/loadtest/k6-scenarios.js +270 -0
- package/examples/bridges/phase4/SLO-SLA.yaml +249 -0
- package/examples/bridges/phase4/chaos-tests.yaml +226 -0
- package/examples/bridges/requirements.txt +24 -0
- package/examples/bridges/test_aiflow_integration.py +341 -0
- package/examples/common_npm/agent-router.ossa.yaml +182 -0
- package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +60 -0
- package/examples/compliance-agent.yml +155 -0
- package/examples/crewai/research-team.ossa.json +36 -0
- package/examples/cursor/code-review-agent.ossa.json +47 -0
- package/examples/drupal/gitlab-ml-recommender.ossa.yaml +609 -0
- package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +68 -0
- package/examples/enterprise/agent.yml +452 -0
- package/examples/extensions/drupal-v1.yml +266 -0
- package/examples/extensions/kagent-v1.yml +167 -0
- package/examples/getting-started/hello-world-complete.ossa.yaml +266 -0
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +376 -0
- package/examples/kagent/README.md +31 -0
- package/examples/kagent/compliance-validator.ossa.yaml +111 -0
- package/examples/kagent/cost-optimizer.ossa.yaml +93 -0
- package/examples/kagent/documentation-agent.ossa.yaml +91 -0
- package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +269 -0
- package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +106 -0
- package/examples/kagent/k8s-troubleshooter.ossa.yaml +257 -0
- package/examples/kagent/security-scanner.ossa.yaml +140 -0
- package/examples/langchain/chain-agent.ossa.json +42 -0
- package/examples/langflow/workflow-agent.ossa.json +39 -0
- package/examples/langgraph/state-machine-agent.ossa.json +59 -0
- package/examples/llamaindex/rag-agent.ossa.json +41 -0
- package/examples/migration-guides/from-langchain-to-ossa.yaml +309 -0
- package/examples/minimal/agent.yml +152 -0
- package/examples/minimal/openapi.yaml +95 -0
- package/examples/openai/swarm-agent.ossa.json +59 -0
- package/examples/openapi-extensions/README.md +87 -0
- package/examples/openapi-extensions/minimal-agent-api.openapi.yml +288 -0
- package/examples/openapi-extensions/orchestrator-agent-api.openapi.yml +633 -0
- package/examples/openapi-extensions/worker-agent-api.openapi.yml +533 -0
- package/examples/production/agent.yml +713 -0
- package/examples/production/document-analyzer-openai.yml +134 -0
- package/examples/quickstart/support-agent.ossa.yaml +59 -0
- package/examples/service-registry-usage.ts +423 -0
- package/examples/spec-examples/audit-agent.yml +147 -0
- package/examples/spec-examples/chat-agent.yml +189 -0
- package/examples/spec-examples/compliance-agent.yml +204 -0
- package/examples/spec-examples/data-processing-agent.yml +132 -0
- package/examples/spec-examples/development-agent.yml +138 -0
- package/examples/spec-examples/edge-agent.yml +101 -0
- package/examples/spec-examples/integration-agent.yml +129 -0
- package/examples/spec-examples/monitoring-agent.yml +130 -0
- package/examples/spec-examples/serverless-agent.yml +82 -0
- package/examples/spec-examples/workflow-agent.yml +223 -0
- package/examples/templates/ossa-compliance.yaml +56 -0
- package/examples/typescript/advanced/demo-registry.ts +168 -0
- package/examples/typescript/mcpb-agent-example.ts +358 -0
- package/examples/vercel/edge-agent.ossa.json +43 -0
- package/infrastructure/docker-compose.yml +33 -0
- package/junit.xml +1 -0
- package/openapi/drupal-agent-api.openapi.yaml +348 -0
- package/openapi/gitlab-orchestrator.openapi.yaml +330 -0
- package/openapi/helm-generator.openapi.yaml +389 -0
- package/openapi/ossa-core-api.openapi.yaml +1448 -0
- package/openapi/ossa-registry-api.openapi.yaml +980 -0
- package/openapi/ossa-registry.openapi.yaml +782 -0
- package/openapi/self-evolving-ecosystem.openapi.yaml +1530 -0
- package/openapi/unified-agent-gateway.openapi.yaml +833 -0
- package/ossa-website-swarm-tasks.json +105 -0
- package/package.json +132 -0
- package/release.config.js +64 -0
- package/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
- package/spec/v0.1.9/ecosystem-compliance.json +235 -0
- package/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
- package/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
- package/spec/v0.1.9/reasoning-compliance.json +654 -0
- package/spec/v0.2.2/kagent-enhancements.json +395 -0
- package/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
- package/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
- package/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
- package/spec/v0.2.3/CHANGELOG.md +176 -0
- package/spec/v0.2.3/README.md +154 -0
- package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
- package/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
- package/spec/v0.2.4-dev/CHANGELOG.md +403 -0
- package/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
- package/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
- package/spec/v0.2.5-dev/CHANGELOG.md +171 -0
- package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
- package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
- package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
- package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
- package/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
- package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
- package/test-results.xml +1 -0
- package/website/.lighthouserc.js +20 -0
- package/website/.prettierrc +10 -0
- package/website/Dockerfile +17 -0
- package/website/app/about/page.tsx +295 -0
- package/website/app/api/validate/route.ts +88 -0
- package/website/app/blog/[slug]/page.tsx +167 -0
- package/website/app/blog/page.tsx +162 -0
- package/website/app/docs/[[...slug]]/page.tsx +349 -0
- package/website/app/docs/core-concepts/project-structure/page.tsx +349 -0
- package/website/app/ecosystem/page.tsx +375 -0
- package/website/app/examples/page.tsx +123 -0
- package/website/app/globals.css +108 -0
- package/website/app/layout.tsx +106 -0
- package/website/app/page.tsx +409 -0
- package/website/app/playground/page.tsx +507 -0
- package/website/app/robots.ts +19 -0
- package/website/app/rss.xml/route.ts +74 -0
- package/website/app/schema/page.tsx +970 -0
- package/website/app/sitemap.ts +56 -0
- package/website/app/specification/page.tsx +211 -0
- package/website/components/InstallCommand.tsx +96 -0
- package/website/components/Logo.tsx +24 -0
- package/website/components/StructuredData.tsx +65 -0
- package/website/components/docs/DocsSearch.tsx +104 -0
- package/website/components/docs/DocsSidebar.tsx +118 -0
- package/website/components/docs/MarkdownContent.tsx +183 -0
- package/website/components/docs/VersionSelector.tsx +49 -0
- package/website/components/examples/ExamplesViewer.tsx +293 -0
- package/website/components/layout/Footer.tsx +111 -0
- package/website/components/layout/Header.tsx +170 -0
- package/website/components/schema/SchemaExplorer.tsx +213 -0
- package/website/content/blog/OpenAPI-AI-Agents-Standard.md +285 -0
- package/website/content/blog/Why-Formal-Standards-Matter-Now.md +209 -0
- package/website/content/blog/introducing-ossa-framework.md +328 -0
- package/website/content/blog/ossa-production-results.md +279 -0
- package/website/content/blog/welcome-to-ossa.md +43 -0
- package/website/content/blog/why-ai-agents-need-open-standard.md +98 -0
- package/website/content/docs/00-HOME.md +160 -0
- package/website/content/docs/AIFlow-Framework-Integration-with-OSSA.md +107 -0
- package/website/content/docs/OpenAPI-Extensions.md +498 -0
- package/website/content/docs/architecture/execution-flow.md +335 -0
- package/website/content/docs/architecture/multi-agent-systems.md +737 -0
- package/website/content/docs/architecture/overview.md +121 -0
- package/website/content/docs/architecture/stack-integration.md +461 -0
- package/website/content/docs/changelog.md +246 -0
- package/website/content/docs/contributing.md +599 -0
- package/website/content/docs/core-concepts/project-structure.md +348 -0
- package/website/content/docs/ecosystem/framework-support.md +821 -0
- package/website/content/docs/ecosystem/overview.md +366 -0
- package/website/content/docs/examples/Migration-Guides.md +214 -0
- package/website/content/docs/examples.md +71 -0
- package/website/content/docs/for-audiences/Enterprises.md +256 -0
- package/website/content/docs/for-audiences/Students-Researchers.md +122 -0
- package/website/content/docs/for-audiences/architects.md +224 -0
- package/website/content/docs/for-audiences/developers.md +220 -0
- package/website/content/docs/getting-started/5-minute-overview.md +85 -0
- package/website/content/docs/getting-started/Hello-World.md +184 -0
- package/website/content/docs/getting-started/first-agent.md +196 -0
- package/website/content/docs/getting-started/installation.md +155 -0
- package/website/content/docs/getting-started/running-agents.md +107 -0
- package/website/content/docs/integrations/aiflow.md +104 -0
- package/website/content/docs/integrations/drupal.md +105 -0
- package/website/content/docs/migration-guides/00-index.md +76 -0
- package/website/content/docs/migration-guides/README.md +133 -0
- package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +1750 -0
- package/website/content/docs/migration-guides/crewai-to-ossa.md +274 -0
- package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +2017 -0
- package/website/content/docs/migration-guides/index.md +133 -0
- package/website/content/docs/migration-guides/langchain-to-ossa.md +1714 -0
- package/website/content/docs/migration-guides/langflow-to-ossa.md +2075 -0
- package/website/content/docs/migration-guides/openai-to-ossa.md +1202 -0
- package/website/content/docs/openapi-extensions/examples.md +550 -0
- package/website/content/docs/openapi-extensions/index.md +495 -0
- package/website/content/docs/openapi-extensions/operation-extensions.md +398 -0
- package/website/content/docs/openapi-extensions/root-extensions.md +364 -0
- package/website/content/docs/pre-release/index.md +175 -0
- package/website/content/docs/quick-reference.md +17 -0
- package/website/content/docs/schema-reference/agent-spec.md +406 -0
- package/website/content/docs/schema-reference/autonomy.md +568 -0
- package/website/content/docs/schema-reference/constraints.md +543 -0
- package/website/content/docs/schema-reference/index.md +176 -0
- package/website/content/docs/schema-reference/llm-config.md +445 -0
- package/website/content/docs/schema-reference/observability.md +654 -0
- package/website/content/docs/schema-reference/ossa-manifest.md +309 -0
- package/website/content/docs/schema-reference/taxonomy.md +509 -0
- package/website/content/docs/schema-reference/tools.md +628 -0
- package/website/content/docs/templates/blog-post.md +43 -0
- package/website/content/docs/use-cases/00-index.md +395 -0
- package/website/content/docs/use-cases/cicd-code-review.md +1236 -0
- package/website/content/docs/use-cases/customer-support.md +1234 -0
- package/website/content/docs/use-cases/enterprise-compliance.md +1208 -0
- package/website/content/docs/use-cases/research-multi-agent.md +1161 -0
- package/website/lib/version.ts +18 -0
- package/website/next.config.js +17 -0
- package/website/next.config.ts +16 -0
- package/website/nginx.conf +32 -0
- package/website/package-lock.json +9145 -0
- package/website/package.json +53 -0
- package/website/postcss.config.js +7 -0
- package/website/postcss.config.mjs +9 -0
- package/website/scripts/sync-version.js +44 -0
- package/website/scripts/sync-wiki.ts +261 -0
- package/website/tailwind.config.js +58 -0
- package/website/tailwind.config.ts +65 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Integration Tests for AIFlow Bridge with BuildKit & Phoenix
|
|
3
|
+
|
|
4
|
+
Tests:
|
|
5
|
+
1. Agent registration with BuildKit
|
|
6
|
+
2. Phoenix tracing initialization
|
|
7
|
+
3. API endpoint functionality
|
|
8
|
+
4. Heartbeat mechanism
|
|
9
|
+
5. Metrics collection
|
|
10
|
+
6. Error handling
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
pytest test_aiflow_integration.py -v
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
import asyncio
|
|
18
|
+
import os
|
|
19
|
+
from typing import AsyncGenerator
|
|
20
|
+
from unittest.mock import AsyncMock, MagicMock, patch
|
|
21
|
+
|
|
22
|
+
import httpx
|
|
23
|
+
from fastapi.testclient import TestClient
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Set test environment variables
|
|
27
|
+
os.environ['AIFLOW_API_KEY'] = 'test-key'
|
|
28
|
+
os.environ['PHOENIX_ENDPOINT'] = 'http://localhost:4318'
|
|
29
|
+
os.environ['PHOENIX_PROJECT'] = 'test-project'
|
|
30
|
+
os.environ['BUILDKIT_REGISTRY_URL'] = 'http://localhost:3000/api/v1'
|
|
31
|
+
os.environ['AGENT_ID'] = 'test-agent'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.fixture
|
|
35
|
+
def mock_http_client():
|
|
36
|
+
"""Mock httpx client for BuildKit communication"""
|
|
37
|
+
client = AsyncMock(spec=httpx.AsyncClient)
|
|
38
|
+
|
|
39
|
+
# Mock registration response
|
|
40
|
+
registration_response = MagicMock()
|
|
41
|
+
registration_response.json.return_value = {
|
|
42
|
+
"agent_id": "test-agent",
|
|
43
|
+
"instance_id": "test-instance-123",
|
|
44
|
+
"registered_at": "2025-10-21T00:00:00Z",
|
|
45
|
+
"health_check_interval": 30,
|
|
46
|
+
"phoenix_trace_url": "http://phoenix/test-project"
|
|
47
|
+
}
|
|
48
|
+
registration_response.raise_for_status = MagicMock()
|
|
49
|
+
client.post.return_value = registration_response
|
|
50
|
+
|
|
51
|
+
# Mock heartbeat response
|
|
52
|
+
heartbeat_response = MagicMock()
|
|
53
|
+
heartbeat_response.json.return_value = {
|
|
54
|
+
"acknowledged": True,
|
|
55
|
+
"registry_status": "active"
|
|
56
|
+
}
|
|
57
|
+
heartbeat_response.raise_for_status = MagicMock()
|
|
58
|
+
client.post.return_value = heartbeat_response
|
|
59
|
+
|
|
60
|
+
# Mock deregistration response
|
|
61
|
+
deregister_response = MagicMock()
|
|
62
|
+
deregister_response.raise_for_status = MagicMock()
|
|
63
|
+
client.delete.return_value = deregister_response
|
|
64
|
+
|
|
65
|
+
return client
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@pytest.fixture
|
|
69
|
+
def test_client():
|
|
70
|
+
"""Create FastAPI test client"""
|
|
71
|
+
# Mock Phoenix tracing to avoid OpenTelemetry setup in tests
|
|
72
|
+
with patch('aiflow_phoenix_tracing.init_phoenix_tracing'):
|
|
73
|
+
from aiflow_bridge_enhanced import app
|
|
74
|
+
return TestClient(app)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class TestBuildKitRegistration:
|
|
78
|
+
"""Test BuildKit registration functionality"""
|
|
79
|
+
|
|
80
|
+
@pytest.mark.asyncio
|
|
81
|
+
async def test_register_with_buildkit(self, mock_http_client):
|
|
82
|
+
"""Test successful registration with BuildKit"""
|
|
83
|
+
with patch('aiflow_bridge_enhanced.http_client', mock_http_client):
|
|
84
|
+
from aiflow_bridge_enhanced import register_with_buildkit
|
|
85
|
+
|
|
86
|
+
result = await register_with_buildkit()
|
|
87
|
+
|
|
88
|
+
# Verify registration was called
|
|
89
|
+
assert mock_http_client.post.called
|
|
90
|
+
call_args = mock_http_client.post.call_args
|
|
91
|
+
|
|
92
|
+
# Verify registration URL
|
|
93
|
+
assert '/agents/register' in call_args[0][0]
|
|
94
|
+
|
|
95
|
+
# Verify registration data
|
|
96
|
+
registration_data = call_args[1]['json']
|
|
97
|
+
assert registration_data['agent_id'] == 'test-agent'
|
|
98
|
+
assert 'ossa_manifest' in registration_data
|
|
99
|
+
assert 'capabilities' in registration_data
|
|
100
|
+
|
|
101
|
+
# Verify response
|
|
102
|
+
assert result['instance_id'] == 'test-instance-123'
|
|
103
|
+
|
|
104
|
+
@pytest.mark.asyncio
|
|
105
|
+
async def test_send_heartbeat(self, mock_http_client):
|
|
106
|
+
"""Test heartbeat sending"""
|
|
107
|
+
with patch('aiflow_bridge_enhanced.http_client', mock_http_client):
|
|
108
|
+
from aiflow_bridge_enhanced import send_heartbeat
|
|
109
|
+
|
|
110
|
+
await send_heartbeat()
|
|
111
|
+
|
|
112
|
+
# Verify heartbeat was sent
|
|
113
|
+
assert mock_http_client.post.called
|
|
114
|
+
call_args = mock_http_client.post.call_args
|
|
115
|
+
|
|
116
|
+
# Verify heartbeat URL
|
|
117
|
+
assert '/heartbeat' in call_args[0][0]
|
|
118
|
+
|
|
119
|
+
# Verify heartbeat data
|
|
120
|
+
heartbeat_data = call_args[1]['json']
|
|
121
|
+
assert 'status' in heartbeat_data
|
|
122
|
+
assert 'metrics' in heartbeat_data
|
|
123
|
+
|
|
124
|
+
@pytest.mark.asyncio
|
|
125
|
+
async def test_deregister_from_buildkit(self, mock_http_client):
|
|
126
|
+
"""Test deregistration from BuildKit"""
|
|
127
|
+
with patch('aiflow_bridge_enhanced.http_client', mock_http_client):
|
|
128
|
+
from aiflow_bridge_enhanced import deregister_from_buildkit
|
|
129
|
+
|
|
130
|
+
await deregister_from_buildkit()
|
|
131
|
+
|
|
132
|
+
# Verify deregistration was called
|
|
133
|
+
assert mock_http_client.delete.called
|
|
134
|
+
call_args = mock_http_client.delete.call_args
|
|
135
|
+
|
|
136
|
+
# Verify deregistration URL
|
|
137
|
+
assert '/agents/test-agent' in call_args[0][0]
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class TestAPIEndpoints:
|
|
141
|
+
"""Test API endpoint functionality"""
|
|
142
|
+
|
|
143
|
+
def test_health_endpoint(self, test_client):
|
|
144
|
+
"""Test health check endpoint"""
|
|
145
|
+
response = test_client.get("/health")
|
|
146
|
+
|
|
147
|
+
assert response.status_code == 200
|
|
148
|
+
data = response.json()
|
|
149
|
+
|
|
150
|
+
assert data['status'] == 'healthy'
|
|
151
|
+
assert 'character' in data
|
|
152
|
+
assert 'platforms' in data
|
|
153
|
+
assert data['buildkit_registered'] is True
|
|
154
|
+
assert data['phoenix_tracing'] is True
|
|
155
|
+
|
|
156
|
+
def test_generate_post_success(self, test_client):
|
|
157
|
+
"""Test successful post generation"""
|
|
158
|
+
request_data = {
|
|
159
|
+
"platform": "twitter",
|
|
160
|
+
"time_of_day": "morning"
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
response = test_client.post(
|
|
164
|
+
"/generate_post",
|
|
165
|
+
json=request_data,
|
|
166
|
+
headers={"X-API-Key": "test-key"}
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
assert response.status_code == 200
|
|
170
|
+
data = response.json()
|
|
171
|
+
|
|
172
|
+
assert 'content' in data
|
|
173
|
+
assert data['platform'] == 'twitter'
|
|
174
|
+
assert isinstance(data['media_urls'], list)
|
|
175
|
+
|
|
176
|
+
def test_generate_post_invalid_auth(self, test_client):
|
|
177
|
+
"""Test post generation with invalid API key"""
|
|
178
|
+
request_data = {
|
|
179
|
+
"platform": "twitter",
|
|
180
|
+
"time_of_day": "morning"
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
response = test_client.post(
|
|
184
|
+
"/generate_post",
|
|
185
|
+
json=request_data,
|
|
186
|
+
headers={"X-API-Key": "invalid-key"}
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
assert response.status_code == 401
|
|
190
|
+
|
|
191
|
+
def test_generate_response_success(self, test_client):
|
|
192
|
+
"""Test successful response generation"""
|
|
193
|
+
request_data = {
|
|
194
|
+
"message": {
|
|
195
|
+
"id": "msg-123",
|
|
196
|
+
"author": "user123",
|
|
197
|
+
"content": "What do you think about AI?",
|
|
198
|
+
"platform": "twitter"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
response = test_client.post(
|
|
203
|
+
"/generate_response",
|
|
204
|
+
json=request_data,
|
|
205
|
+
headers={"X-API-Key": "test-key"}
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
assert response.status_code == 200
|
|
209
|
+
data = response.json()
|
|
210
|
+
|
|
211
|
+
assert 'content' in data
|
|
212
|
+
assert 'should_respond' in data
|
|
213
|
+
assert data['should_respond'] is True
|
|
214
|
+
|
|
215
|
+
def test_metrics_endpoint(self, test_client):
|
|
216
|
+
"""Test Prometheus metrics endpoint"""
|
|
217
|
+
response = test_client.get("/metrics")
|
|
218
|
+
|
|
219
|
+
assert response.status_code == 200
|
|
220
|
+
assert 'aiflow_posts_generated_total' in response.text
|
|
221
|
+
assert 'aiflow_api_requests_total' in response.text
|
|
222
|
+
|
|
223
|
+
def test_character_endpoint(self, test_client):
|
|
224
|
+
"""Test character configuration endpoint"""
|
|
225
|
+
response = test_client.get(
|
|
226
|
+
"/character",
|
|
227
|
+
headers={"X-API-Key": "test-key"}
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
assert response.status_code == 200
|
|
231
|
+
data = response.json()
|
|
232
|
+
|
|
233
|
+
assert 'name' in data
|
|
234
|
+
assert 'traits' in data
|
|
235
|
+
assert 'moods' in data
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class TestPhoenixTracing:
|
|
239
|
+
"""Test Phoenix tracing integration"""
|
|
240
|
+
|
|
241
|
+
@patch('aiflow_phoenix_tracing.trace.set_tracer_provider')
|
|
242
|
+
@patch('aiflow_phoenix_tracing.FastAPIInstrumentation')
|
|
243
|
+
def test_phoenix_initialization(self, mock_fastapi_instr, mock_set_provider):
|
|
244
|
+
"""Test Phoenix tracing initialization"""
|
|
245
|
+
from aiflow_phoenix_tracing import init_phoenix_tracing
|
|
246
|
+
|
|
247
|
+
init_phoenix_tracing(
|
|
248
|
+
service_name='test-agent',
|
|
249
|
+
phoenix_endpoint='http://localhost:4318',
|
|
250
|
+
phoenix_project='test-project'
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# Verify tracer provider was set
|
|
254
|
+
assert mock_set_provider.called
|
|
255
|
+
|
|
256
|
+
# Verify FastAPI instrumentation was applied
|
|
257
|
+
assert mock_fastapi_instr.called
|
|
258
|
+
|
|
259
|
+
def test_trace_decorator(self):
|
|
260
|
+
"""Test trace_agent_task decorator"""
|
|
261
|
+
from aiflow_phoenix_tracing import trace_agent_task, get_tracer
|
|
262
|
+
|
|
263
|
+
# Mock tracer
|
|
264
|
+
with patch('aiflow_phoenix_tracing._tracer') as mock_tracer:
|
|
265
|
+
mock_span = MagicMock()
|
|
266
|
+
mock_tracer.start_as_current_span.return_value.__enter__.return_value = mock_span
|
|
267
|
+
|
|
268
|
+
@trace_agent_task('test_task')
|
|
269
|
+
async def test_function():
|
|
270
|
+
return "success"
|
|
271
|
+
|
|
272
|
+
# Run the decorated function
|
|
273
|
+
result = asyncio.run(test_function())
|
|
274
|
+
|
|
275
|
+
# Verify tracing was applied
|
|
276
|
+
assert result == "success"
|
|
277
|
+
assert mock_tracer.start_as_current_span.called
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class TestMetrics:
|
|
281
|
+
"""Test metrics collection"""
|
|
282
|
+
|
|
283
|
+
def test_post_generation_metrics(self, test_client):
|
|
284
|
+
"""Test that post generation increments metrics"""
|
|
285
|
+
# Generate a post
|
|
286
|
+
test_client.post(
|
|
287
|
+
"/generate_post",
|
|
288
|
+
json={"platform": "twitter", "time_of_day": "morning"},
|
|
289
|
+
headers={"X-API-Key": "test-key"}
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
# Check metrics
|
|
293
|
+
response = test_client.get("/metrics")
|
|
294
|
+
metrics_text = response.text
|
|
295
|
+
|
|
296
|
+
# Verify post generation metric exists
|
|
297
|
+
assert 'aiflow_posts_generated_total{platform="twitter",time_of_day="morning"}' in metrics_text
|
|
298
|
+
|
|
299
|
+
def test_health_check_metrics(self, test_client):
|
|
300
|
+
"""Test that health checks increment metrics"""
|
|
301
|
+
# Call health endpoint
|
|
302
|
+
test_client.get("/health")
|
|
303
|
+
|
|
304
|
+
# Check metrics
|
|
305
|
+
response = test_client.get("/metrics")
|
|
306
|
+
metrics_text = response.text
|
|
307
|
+
|
|
308
|
+
# Verify health check metric exists
|
|
309
|
+
assert 'aiflow_health_checks_total' in metrics_text
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
class TestErrorHandling:
|
|
313
|
+
"""Test error handling"""
|
|
314
|
+
|
|
315
|
+
def test_invalid_request_body(self, test_client):
|
|
316
|
+
"""Test handling of invalid request body"""
|
|
317
|
+
response = test_client.post(
|
|
318
|
+
"/generate_post",
|
|
319
|
+
json={"invalid": "data"},
|
|
320
|
+
headers={"X-API-Key": "test-key"}
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
assert response.status_code == 422 # Validation error
|
|
324
|
+
|
|
325
|
+
@pytest.mark.asyncio
|
|
326
|
+
async def test_registration_failure(self, mock_http_client):
|
|
327
|
+
"""Test handling of registration failures"""
|
|
328
|
+
# Configure mock to raise exception
|
|
329
|
+
mock_http_client.post.side_effect = httpx.HTTPError("Connection failed")
|
|
330
|
+
|
|
331
|
+
with patch('aiflow_bridge_enhanced.http_client', mock_http_client):
|
|
332
|
+
from aiflow_bridge_enhanced import register_with_buildkit
|
|
333
|
+
|
|
334
|
+
with pytest.raises(httpx.HTTPError):
|
|
335
|
+
await register_with_buildkit()
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
# Run tests
|
|
339
|
+
if __name__ == '__main__':
|
|
340
|
+
pytest.main([__file__, '-v', '--tb=short'])
|
|
341
|
+
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
ossaVersion: "1.0"
|
|
2
|
+
|
|
3
|
+
agent:
|
|
4
|
+
id: agent-router
|
|
5
|
+
name: "Agent Router"
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
role: "integration"
|
|
8
|
+
|
|
9
|
+
description: |
|
|
10
|
+
Multi-provider LLM gateway with circuit breaker, intelligent routing, and failover.
|
|
11
|
+
|
|
12
|
+
Features:
|
|
13
|
+
- Multi-provider support (OpenAI, Anthropic, Google, etc.)
|
|
14
|
+
- Intelligent routing based on model capabilities
|
|
15
|
+
- Circuit breaker pattern for fault tolerance
|
|
16
|
+
- Request/response caching
|
|
17
|
+
- Cost optimization
|
|
18
|
+
- Load balancing
|
|
19
|
+
|
|
20
|
+
runtime:
|
|
21
|
+
type: "docker"
|
|
22
|
+
image: "llm-platform/agent-router:1.0.0"
|
|
23
|
+
|
|
24
|
+
resources:
|
|
25
|
+
cpu: "500m"
|
|
26
|
+
memory: "1Gi"
|
|
27
|
+
|
|
28
|
+
health_check:
|
|
29
|
+
type: "http"
|
|
30
|
+
endpoint: "/health"
|
|
31
|
+
port: 4000
|
|
32
|
+
|
|
33
|
+
capabilities:
|
|
34
|
+
- name: llm_completion
|
|
35
|
+
description: "Generate LLM completion with intelligent provider routing"
|
|
36
|
+
input_schema:
|
|
37
|
+
type: object
|
|
38
|
+
required: [prompt]
|
|
39
|
+
properties:
|
|
40
|
+
prompt:
|
|
41
|
+
type: string
|
|
42
|
+
description: "Input prompt for LLM"
|
|
43
|
+
model:
|
|
44
|
+
type: string
|
|
45
|
+
description: "Preferred model (optional, router will auto-select)"
|
|
46
|
+
examples: ["gpt-4", "claude-3-opus", "gemini-pro"]
|
|
47
|
+
temperature:
|
|
48
|
+
type: number
|
|
49
|
+
minimum: 0
|
|
50
|
+
maximum: 2
|
|
51
|
+
default: 0.7
|
|
52
|
+
max_tokens:
|
|
53
|
+
type: integer
|
|
54
|
+
minimum: 1
|
|
55
|
+
maximum: 100000
|
|
56
|
+
default: 2000
|
|
57
|
+
provider:
|
|
58
|
+
type: string
|
|
59
|
+
enum: ["openai", "anthropic", "google", "auto"]
|
|
60
|
+
default: "auto"
|
|
61
|
+
output_schema:
|
|
62
|
+
type: object
|
|
63
|
+
required: [response, provider, model, usage]
|
|
64
|
+
properties:
|
|
65
|
+
response:
|
|
66
|
+
type: string
|
|
67
|
+
provider:
|
|
68
|
+
type: string
|
|
69
|
+
model:
|
|
70
|
+
type: string
|
|
71
|
+
usage:
|
|
72
|
+
type: object
|
|
73
|
+
properties:
|
|
74
|
+
prompt_tokens:
|
|
75
|
+
type: integer
|
|
76
|
+
completion_tokens:
|
|
77
|
+
type: integer
|
|
78
|
+
total_tokens:
|
|
79
|
+
type: integer
|
|
80
|
+
cost_usd:
|
|
81
|
+
type: number
|
|
82
|
+
timeout_seconds: 30
|
|
83
|
+
retry_policy:
|
|
84
|
+
max_attempts: 3
|
|
85
|
+
backoff: "exponential"
|
|
86
|
+
|
|
87
|
+
- name: embedding_generation
|
|
88
|
+
description: "Generate text embeddings for vector storage"
|
|
89
|
+
input_schema:
|
|
90
|
+
type: object
|
|
91
|
+
required: [text]
|
|
92
|
+
properties:
|
|
93
|
+
text:
|
|
94
|
+
type: string
|
|
95
|
+
model:
|
|
96
|
+
type: string
|
|
97
|
+
default: "text-embedding-ada-002"
|
|
98
|
+
output_schema:
|
|
99
|
+
type: object
|
|
100
|
+
required: [embedding, dimensions]
|
|
101
|
+
properties:
|
|
102
|
+
embedding:
|
|
103
|
+
type: array
|
|
104
|
+
items:
|
|
105
|
+
type: number
|
|
106
|
+
dimensions:
|
|
107
|
+
type: integer
|
|
108
|
+
model:
|
|
109
|
+
type: string
|
|
110
|
+
|
|
111
|
+
- name: health_check
|
|
112
|
+
description: "Check health of all LLM providers"
|
|
113
|
+
input_schema:
|
|
114
|
+
type: object
|
|
115
|
+
properties: {}
|
|
116
|
+
output_schema:
|
|
117
|
+
type: object
|
|
118
|
+
required: [healthy, providers]
|
|
119
|
+
properties:
|
|
120
|
+
healthy:
|
|
121
|
+
type: boolean
|
|
122
|
+
providers:
|
|
123
|
+
type: array
|
|
124
|
+
items:
|
|
125
|
+
type: object
|
|
126
|
+
properties:
|
|
127
|
+
name:
|
|
128
|
+
type: string
|
|
129
|
+
status:
|
|
130
|
+
type: string
|
|
131
|
+
enum: ["healthy", "degraded", "down"]
|
|
132
|
+
latency_ms:
|
|
133
|
+
type: number
|
|
134
|
+
|
|
135
|
+
llm:
|
|
136
|
+
provider: "auto"
|
|
137
|
+
fallback_providers: ["openai", "anthropic", "google"]
|
|
138
|
+
model: "gpt-4"
|
|
139
|
+
temperature: 0.7
|
|
140
|
+
maxTokens: 2000
|
|
141
|
+
|
|
142
|
+
protocols:
|
|
143
|
+
- type: "http"
|
|
144
|
+
version: "1.1"
|
|
145
|
+
endpoint: "http://agent-router:4000/v1/chat/completions"
|
|
146
|
+
|
|
147
|
+
- type: "sse"
|
|
148
|
+
version: "1.0"
|
|
149
|
+
endpoint: "http://agent-router:4000/v1/stream"
|
|
150
|
+
|
|
151
|
+
compliance:
|
|
152
|
+
frameworks: ["SOC2"]
|
|
153
|
+
dataClassification: "confidential"
|
|
154
|
+
|
|
155
|
+
extensions:
|
|
156
|
+
common_npm:
|
|
157
|
+
package: "@llm/agent-router"
|
|
158
|
+
port: 4000
|
|
159
|
+
version: "1.0.0"
|
|
160
|
+
|
|
161
|
+
dependencies:
|
|
162
|
+
- "@llm/agent-protocol"
|
|
163
|
+
- "@llm/agent-tracer"
|
|
164
|
+
|
|
165
|
+
providers:
|
|
166
|
+
- openai
|
|
167
|
+
- anthropic
|
|
168
|
+
- google
|
|
169
|
+
- azure
|
|
170
|
+
|
|
171
|
+
circuit_breaker:
|
|
172
|
+
enabled: true
|
|
173
|
+
failure_threshold: 5
|
|
174
|
+
timeout_seconds: 60
|
|
175
|
+
half_open_requests: 3
|
|
176
|
+
|
|
177
|
+
monitoring:
|
|
178
|
+
metrics: true
|
|
179
|
+
tracing: true
|
|
180
|
+
opentelemetry:
|
|
181
|
+
endpoint: "http://agent-tracer:4318"
|
|
182
|
+
service_name: "agent-router"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: ossa/v1
|
|
2
|
+
kind: Agent
|
|
3
|
+
metadata:
|
|
4
|
+
name: agent-router
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
description: |
|
|
7
|
+
Multi-provider LLM gateway with circuit breaker, intelligent routing, and failover.
|
|
8
|
+
|
|
9
|
+
Features:
|
|
10
|
+
- Multi-provider support (OpenAI, Anthropic, Google, etc.)
|
|
11
|
+
- Intelligent routing based on model capabilities
|
|
12
|
+
- Circuit breaker pattern for fault tolerance
|
|
13
|
+
- Request/response caching
|
|
14
|
+
- Cost optimization
|
|
15
|
+
- Load balancing
|
|
16
|
+
labels: {}
|
|
17
|
+
annotations:
|
|
18
|
+
ossa.io/migration: v1.0 to v0.2.2
|
|
19
|
+
ossa.io/migrated-date: 2025-10-31
|
|
20
|
+
spec:
|
|
21
|
+
role: integration
|
|
22
|
+
taxonomy:
|
|
23
|
+
domain: integration
|
|
24
|
+
subdomain: general
|
|
25
|
+
capability: routing
|
|
26
|
+
llm:
|
|
27
|
+
provider: openai
|
|
28
|
+
model: gpt-4
|
|
29
|
+
temperature: 0.7
|
|
30
|
+
maxTokens: 2000
|
|
31
|
+
tools:
|
|
32
|
+
- type: mcp
|
|
33
|
+
name: llm_completion
|
|
34
|
+
server: agent-router
|
|
35
|
+
- type: mcp
|
|
36
|
+
name: embedding_generation
|
|
37
|
+
server: agent-router
|
|
38
|
+
- type: mcp
|
|
39
|
+
name: health_check
|
|
40
|
+
server: agent-router
|
|
41
|
+
extensions:
|
|
42
|
+
buildkit:
|
|
43
|
+
deployment:
|
|
44
|
+
replicas:
|
|
45
|
+
min: 1
|
|
46
|
+
max: 4
|
|
47
|
+
container:
|
|
48
|
+
image: llm-platform/agent-router:1.0.0
|
|
49
|
+
runtime: docker
|
|
50
|
+
resources: &a1
|
|
51
|
+
cpu: 500m
|
|
52
|
+
memory: 1Gi
|
|
53
|
+
runtime:
|
|
54
|
+
type: docker
|
|
55
|
+
image: llm-platform/agent-router:1.0.0
|
|
56
|
+
resources: *a1
|
|
57
|
+
health_check:
|
|
58
|
+
type: http
|
|
59
|
+
endpoint: /health
|
|
60
|
+
port: 4000
|