@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,170 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import Link from 'next/link';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
|
|
6
|
+
export function Header() {
|
|
7
|
+
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<header className="bg-white border-b border-gray-300 sticky top-0 z-50">
|
|
11
|
+
<nav className="container mx-auto max-w-6xl px-4">
|
|
12
|
+
<div className="flex items-center justify-between h-16">
|
|
13
|
+
<Link href="/" className="flex items-center space-x-3 group">
|
|
14
|
+
<img
|
|
15
|
+
src="/assets/brand/ossa-logo.svg"
|
|
16
|
+
alt="OSSA Logo"
|
|
17
|
+
className="h-10 w-10 transition-transform group-hover:scale-110"
|
|
18
|
+
/>
|
|
19
|
+
<span className="text-2xl font-bold bg-gradient-to-r from-[#0066CC] to-[#00B8D4] bg-clip-text text-transparent">
|
|
20
|
+
OSSA
|
|
21
|
+
</span>
|
|
22
|
+
</Link>
|
|
23
|
+
|
|
24
|
+
{/* Desktop Navigation */}
|
|
25
|
+
<div className="hidden md:flex items-center space-x-6">
|
|
26
|
+
<Link href="/about" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
27
|
+
About
|
|
28
|
+
</Link>
|
|
29
|
+
<Link href="/specification" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
30
|
+
Specification
|
|
31
|
+
</Link>
|
|
32
|
+
<Link href="/docs" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
33
|
+
Documentation
|
|
34
|
+
</Link>
|
|
35
|
+
<Link href="/schema" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
36
|
+
Schema
|
|
37
|
+
</Link>
|
|
38
|
+
<Link href="/playground" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
39
|
+
Playground
|
|
40
|
+
</Link>
|
|
41
|
+
<Link href="/examples" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
42
|
+
Examples
|
|
43
|
+
</Link>
|
|
44
|
+
<Link href="/blog" className="text-gray-600 hover:text-[#0066CC] transition-colors font-medium">
|
|
45
|
+
Blog
|
|
46
|
+
</Link>
|
|
47
|
+
<a
|
|
48
|
+
href="https://github.com/blueflyio/openstandardagents"
|
|
49
|
+
target="_blank"
|
|
50
|
+
rel="noopener noreferrer"
|
|
51
|
+
className="text-gray-600 hover:text-[#0066CC] transition-colors flex items-center gap-1 font-medium"
|
|
52
|
+
title="View on GitHub"
|
|
53
|
+
>
|
|
54
|
+
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
55
|
+
<path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
|
|
56
|
+
</svg>
|
|
57
|
+
GitHub
|
|
58
|
+
</a>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
{/* Mobile Menu Button */}
|
|
62
|
+
<button
|
|
63
|
+
className="md:hidden p-2 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded"
|
|
64
|
+
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
|
|
65
|
+
aria-label="Toggle menu"
|
|
66
|
+
aria-expanded={mobileMenuOpen}
|
|
67
|
+
aria-controls="mobile-menu"
|
|
68
|
+
>
|
|
69
|
+
<svg
|
|
70
|
+
className="w-6 h-6"
|
|
71
|
+
fill="none"
|
|
72
|
+
stroke="currentColor"
|
|
73
|
+
viewBox="0 0 24 24"
|
|
74
|
+
>
|
|
75
|
+
{mobileMenuOpen ? (
|
|
76
|
+
<path
|
|
77
|
+
strokeLinecap="round"
|
|
78
|
+
strokeLinejoin="round"
|
|
79
|
+
strokeWidth={2}
|
|
80
|
+
d="M6 18L18 6M6 6l12 12"
|
|
81
|
+
/>
|
|
82
|
+
) : (
|
|
83
|
+
<path
|
|
84
|
+
strokeLinecap="round"
|
|
85
|
+
strokeLinejoin="round"
|
|
86
|
+
strokeWidth={2}
|
|
87
|
+
d="M4 6h16M4 12h16M4 18h16"
|
|
88
|
+
/>
|
|
89
|
+
)}
|
|
90
|
+
</svg>
|
|
91
|
+
</button>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
{/* Mobile Navigation */}
|
|
95
|
+
{mobileMenuOpen && (
|
|
96
|
+
<div
|
|
97
|
+
id="mobile-menu"
|
|
98
|
+
className="md:hidden py-4 border-t border-gray-300"
|
|
99
|
+
role="navigation"
|
|
100
|
+
aria-label="Mobile navigation"
|
|
101
|
+
>
|
|
102
|
+
<Link
|
|
103
|
+
href="/about"
|
|
104
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
105
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
106
|
+
>
|
|
107
|
+
About
|
|
108
|
+
</Link>
|
|
109
|
+
<Link
|
|
110
|
+
href="/specification"
|
|
111
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
112
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
113
|
+
>
|
|
114
|
+
Specification
|
|
115
|
+
</Link>
|
|
116
|
+
<Link
|
|
117
|
+
href="/docs"
|
|
118
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
119
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
120
|
+
>
|
|
121
|
+
Documentation
|
|
122
|
+
</Link>
|
|
123
|
+
<Link
|
|
124
|
+
href="/schema"
|
|
125
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
126
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
127
|
+
>
|
|
128
|
+
Schema
|
|
129
|
+
</Link>
|
|
130
|
+
<Link
|
|
131
|
+
href="/playground"
|
|
132
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
133
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
134
|
+
>
|
|
135
|
+
Playground
|
|
136
|
+
</Link>
|
|
137
|
+
<Link
|
|
138
|
+
href="/examples"
|
|
139
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
140
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
141
|
+
>
|
|
142
|
+
Examples
|
|
143
|
+
</Link>
|
|
144
|
+
<Link
|
|
145
|
+
href="/blog"
|
|
146
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors font-medium"
|
|
147
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
148
|
+
>
|
|
149
|
+
Blog
|
|
150
|
+
</Link>
|
|
151
|
+
<a
|
|
152
|
+
href="https://github.com/blueflyio/openstandardagents"
|
|
153
|
+
target="_blank"
|
|
154
|
+
rel="noopener noreferrer"
|
|
155
|
+
className="block py-2 text-gray-600 hover:text-[#0066CC] transition-colors flex items-center gap-2 font-medium"
|
|
156
|
+
onClick={() => setMobileMenuOpen(false)}
|
|
157
|
+
title="View on GitHub"
|
|
158
|
+
>
|
|
159
|
+
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
160
|
+
<path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
|
|
161
|
+
</svg>
|
|
162
|
+
GitHub
|
|
163
|
+
</a>
|
|
164
|
+
</div>
|
|
165
|
+
)}
|
|
166
|
+
</nav>
|
|
167
|
+
</header>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
|
|
5
|
+
import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
6
|
+
|
|
7
|
+
interface SchemaExplorerProps {
|
|
8
|
+
schema: any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface PropertyInfo {
|
|
12
|
+
name: string;
|
|
13
|
+
type: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
required?: boolean;
|
|
16
|
+
properties?: PropertyInfo[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function extractProperties(schema: any, path = ''): PropertyInfo[] {
|
|
20
|
+
if (!schema || typeof schema !== 'object') {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const properties: PropertyInfo[] = [];
|
|
25
|
+
|
|
26
|
+
if (schema.properties) {
|
|
27
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
28
|
+
const prop = value as any;
|
|
29
|
+
const propInfo: PropertyInfo = {
|
|
30
|
+
name: key,
|
|
31
|
+
type: prop.type || 'object',
|
|
32
|
+
description: prop.description,
|
|
33
|
+
required: schema.required?.includes(key),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
if (prop.properties || prop.items) {
|
|
37
|
+
propInfo.properties = extractProperties(
|
|
38
|
+
prop.properties || prop.items,
|
|
39
|
+
`${path}.${key}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
properties.push(propInfo);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return properties;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function SchemaExplorer({ schema }: SchemaExplorerProps) {
|
|
51
|
+
const [selectedPath, setSelectedPath] = useState<string>('');
|
|
52
|
+
const [expandedPaths, setExpandedPaths] = useState<Set<string>>(
|
|
53
|
+
new Set([''])
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const rootProperties = extractProperties(schema);
|
|
57
|
+
|
|
58
|
+
const togglePath = (path: string): void => {
|
|
59
|
+
setExpandedPaths((prev) => {
|
|
60
|
+
const next = new Set(prev);
|
|
61
|
+
if (next.has(path)) {
|
|
62
|
+
next.delete(path);
|
|
63
|
+
} else {
|
|
64
|
+
next.add(path);
|
|
65
|
+
}
|
|
66
|
+
return next;
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const renderProperty = (
|
|
71
|
+
prop: PropertyInfo,
|
|
72
|
+
depth = 0,
|
|
73
|
+
currentPath = ''
|
|
74
|
+
) => {
|
|
75
|
+
const fullPath = currentPath ? `${currentPath}.${prop.name}` : prop.name;
|
|
76
|
+
const isExpanded = expandedPaths.has(fullPath);
|
|
77
|
+
const hasChildren = prop.properties && prop.properties.length > 0;
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<div key={prop.name} className="ml-4">
|
|
81
|
+
<div
|
|
82
|
+
className={`flex items-start py-2 ${
|
|
83
|
+
selectedPath === fullPath ? 'bg-primary/10' : ''
|
|
84
|
+
}`}
|
|
85
|
+
>
|
|
86
|
+
{hasChildren && (
|
|
87
|
+
<button
|
|
88
|
+
onClick={() => togglePath(fullPath)}
|
|
89
|
+
className="mr-2 text-gray-500 hover:text-gray-700"
|
|
90
|
+
aria-label={isExpanded ? 'Collapse' : 'Expand'}
|
|
91
|
+
>
|
|
92
|
+
{isExpanded ? '−' : '+'}
|
|
93
|
+
</button>
|
|
94
|
+
)}
|
|
95
|
+
<div
|
|
96
|
+
className="flex-1 cursor-pointer"
|
|
97
|
+
onClick={() => setSelectedPath(fullPath)}
|
|
98
|
+
>
|
|
99
|
+
<div className="flex items-center gap-2">
|
|
100
|
+
<span className="font-semibold text-gray-900">{prop.name}</span>
|
|
101
|
+
<span className="text-sm text-gray-500">({prop.type})</span>
|
|
102
|
+
{prop.required && (
|
|
103
|
+
<span className="text-xs bg-error/20 text-error px-2 py-0.5 rounded">
|
|
104
|
+
required
|
|
105
|
+
</span>
|
|
106
|
+
)}
|
|
107
|
+
</div>
|
|
108
|
+
{prop.description && (
|
|
109
|
+
<p className="text-sm text-gray-600 mt-1">{prop.description}</p>
|
|
110
|
+
)}
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
{hasChildren && isExpanded && (
|
|
114
|
+
<div className="ml-6 border-l-2 border-gray-200">
|
|
115
|
+
{prop.properties?.map((child) =>
|
|
116
|
+
renderProperty(child, depth + 1, fullPath)
|
|
117
|
+
)}
|
|
118
|
+
</div>
|
|
119
|
+
)}
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const getPropertyAtPath = (path: string): any => {
|
|
125
|
+
const parts = path.split('.').filter(Boolean);
|
|
126
|
+
let current: any = schema;
|
|
127
|
+
|
|
128
|
+
for (const part of parts) {
|
|
129
|
+
if (current?.properties?.[part]) {
|
|
130
|
+
current = current.properties[part];
|
|
131
|
+
} else {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return current;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const selectedProperty = selectedPath
|
|
140
|
+
? getPropertyAtPath(selectedPath)
|
|
141
|
+
: schema;
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<div className="grid lg:grid-cols-2 gap-6">
|
|
145
|
+
{/* Property Tree */}
|
|
146
|
+
<div className="card">
|
|
147
|
+
<h2 className="text-xl font-semibold mb-4">Schema Structure</h2>
|
|
148
|
+
<div className="space-y-1 max-h-[600px] overflow-y-auto">
|
|
149
|
+
{rootProperties.map((prop) => renderProperty(prop))}
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
{/* Property Details */}
|
|
154
|
+
<div className="card">
|
|
155
|
+
<h2 className="text-xl font-semibold mb-4">
|
|
156
|
+
{selectedPath || 'Schema Overview'}
|
|
157
|
+
</h2>
|
|
158
|
+
{selectedProperty && (
|
|
159
|
+
<div className="space-y-4">
|
|
160
|
+
<div>
|
|
161
|
+
<h3 className="font-semibold mb-2">Type</h3>
|
|
162
|
+
<p className="text-gray-700">{selectedProperty.type || 'object'}</p>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
{selectedProperty.description && (
|
|
166
|
+
<div>
|
|
167
|
+
<h3 className="font-semibold mb-2">Description</h3>
|
|
168
|
+
<p className="text-gray-700">{selectedProperty.description}</p>
|
|
169
|
+
</div>
|
|
170
|
+
)}
|
|
171
|
+
|
|
172
|
+
{selectedProperty.enum && (
|
|
173
|
+
<div>
|
|
174
|
+
<h3 className="font-semibold mb-2">Allowed Values</h3>
|
|
175
|
+
<ul className="list-disc list-inside text-gray-700">
|
|
176
|
+
{selectedProperty.enum.map((value: any, index: number) => (
|
|
177
|
+
<li key={index}>{String(value)}</li>
|
|
178
|
+
))}
|
|
179
|
+
</ul>
|
|
180
|
+
</div>
|
|
181
|
+
)}
|
|
182
|
+
|
|
183
|
+
{selectedProperty.default !== undefined && (
|
|
184
|
+
<div>
|
|
185
|
+
<h3 className="font-semibold mb-2">Default Value</h3>
|
|
186
|
+
<p className="text-gray-700">
|
|
187
|
+
{JSON.stringify(selectedProperty.default)}
|
|
188
|
+
</p>
|
|
189
|
+
</div>
|
|
190
|
+
)}
|
|
191
|
+
|
|
192
|
+
<div>
|
|
193
|
+
<h3 className="font-semibold mb-2">JSON Schema</h3>
|
|
194
|
+
<div className="border border-gray-300 rounded-lg overflow-hidden">
|
|
195
|
+
<SyntaxHighlighter
|
|
196
|
+
language="json"
|
|
197
|
+
style={vscDarkPlus}
|
|
198
|
+
customStyle={{
|
|
199
|
+
margin: 0,
|
|
200
|
+
fontSize: '12px',
|
|
201
|
+
}}
|
|
202
|
+
>
|
|
203
|
+
{JSON.stringify(selectedProperty, null, 2)}
|
|
204
|
+
</SyntaxHighlighter>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
)}
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "OpenAPI AI Agents Standard (OSSA) - Foundation"
|
|
3
|
+
date: "2025-11-19"
|
|
4
|
+
author: "Thomas Scola"
|
|
5
|
+
category: "Research"
|
|
6
|
+
tags: ["OSSA", "AI Agents", "Standards"]
|
|
7
|
+
excerpt: "The proliferation of specialized AI agents in enterprise environments necessitates standardized orchestration mechanisms to coordinate their activities effectively. This paper presents the OpenAPI AI..."
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# OpenAPI AI Agents Standard (OSSA) \- Foundation
|
|
11
|
+
|
|
12
|
+
## Intelligent Agent Orchestration: A Standards-Based Framework for Multi-Agent AI Systems
|
|
13
|
+
|
|
14
|
+
**Thomas Scola**
|
|
15
|
+
*Bluefly.io*
|
|
16
|
+
Portland, Maine, USA
|
|
17
|
+
[thomas@bluefly.io](mailto:thomas@bluefly.io)
|
|
18
|
+
|
|
19
|
+
###
|
|
20
|
+
|
|
21
|
+
### Abstract
|
|
22
|
+
|
|
23
|
+
The proliferation of specialized AI agents in enterprise environments necessitates standardized orchestration mechanisms to coordinate their activities effectively. This paper presents the OpenAPI AI Agents Standard (OSSA), a comprehensive framework for intelligent agent orchestration that addresses fundamental challenges in multi-agent system coordination. We propose a three-tier progressive compliance model (Core, Governed, Advanced) that enables organizations to adopt agent orchestration incrementally while maintaining interoperability across diverse AI frameworks including MCP, LangChain, CrewAI, and AutoGen. The framework introduces capability-based agent routing, dynamic task decomposition, and standardized handoff protocols. Experimental evaluation across 50 specialized agents executing 1,000 multi-agent workflows demonstrates 34% reduction in orchestration overhead, 26% improvement in coordination efficiency, and 21% increase in task completion rates compared to proprietary solutions. The proposed standard provides vendor-neutral protocols that enable seamless integration while supporting enterprise governance requirements including ISO 42001 and NIST AI RMF compliance.
|
|
24
|
+
|
|
25
|
+
### 1\. Introduction
|
|
26
|
+
|
|
27
|
+
The evolution of artificial intelligence from monolithic models to specialized agent-based systems represents a fundamental architectural shift in computational systems. Organizations increasingly deploy multiple specialized AI agents to handle complex workflows, creating critical challenges in coordination, resource allocation, and context management. Current approaches suffer from vendor lock-in, incompatible protocols, and inefficient orchestration mechanisms that limit scalability and increase operational costs.
|
|
28
|
+
|
|
29
|
+
The OpenAPI AI Agents Standard (OSSA) addresses these challenges through a vendor-neutral, framework-agnostic approach to agent orchestration. Unlike proprietary solutions that create isolated ecosystems, OSSA establishes open protocols enabling interoperability across diverse AI frameworks while supporting enterprise governance requirements.
|
|
30
|
+
|
|
31
|
+
This research makes four primary contributions:
|
|
32
|
+
|
|
33
|
+
1. A formal specification for progressive compliance in agent orchestration systems
|
|
34
|
+
2. Capability-based routing algorithms for optimal agent selection
|
|
35
|
+
3. Standardized handoff protocols minimizing context loss
|
|
36
|
+
4. Integration bridges for existing AI frameworks
|
|
37
|
+
|
|
38
|
+
### 2\. Background and Related Work
|
|
39
|
+
|
|
40
|
+
#### 2.1 Current Agent Frameworks
|
|
41
|
+
|
|
42
|
+
Existing agent frameworks demonstrate various limitations:
|
|
43
|
+
|
|
44
|
+
**LangChain** provides extensive tool integration but lacks standardized orchestration protocols. Agent coordination requires custom implementations, leading to fragmented solutions across deployments.
|
|
45
|
+
|
|
46
|
+
**CrewAI** supports multi-agent workflows but operates within a single framework paradigm, limiting interoperability with external systems.
|
|
47
|
+
|
|
48
|
+
**AutoGen** (Microsoft) enables conversational agent patterns but provides limited support for complex orchestration scenarios requiring dynamic agent selection.
|
|
49
|
+
|
|
50
|
+
**Model Context Protocol (MCP)** by Anthropic standardizes tool interfaces but does not address multi-agent coordination or resource optimization.
|
|
51
|
+
|
|
52
|
+
#### 2.2 Orchestration Challenges
|
|
53
|
+
|
|
54
|
+
Multi-agent systems face several orchestration challenges:
|
|
55
|
+
|
|
56
|
+
- **Protocol Incompatibility**: Agents from different frameworks cannot communicate effectively
|
|
57
|
+
- **Static Workflows**: Inability to adapt to changing task requirements dynamically
|
|
58
|
+
- **Context Fragmentation**: Loss of contextual information during agent handoffs
|
|
59
|
+
- **Resource Inefficiency**: Suboptimal agent selection and resource allocation
|
|
60
|
+
|
|
61
|
+
### 3\. The OSSA Framework
|
|
62
|
+
|
|
63
|
+
#### 3.1 Architecture Overview
|
|
64
|
+
|
|
65
|
+
The OpenAPI AI Agents Standard defines a three-tier progressive compliance model:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
apiVersion: oaas/standard
|
|
69
|
+
kind: Agent
|
|
70
|
+
metadata:
|
|
71
|
+
name: code-analyzer
|
|
72
|
+
tier: governed
|
|
73
|
+
domain: software-development
|
|
74
|
+
spec:
|
|
75
|
+
capabilities:
|
|
76
|
+
- code-analysis
|
|
77
|
+
- security-scanning
|
|
78
|
+
- performance-profiling
|
|
79
|
+
orchestration:
|
|
80
|
+
can-lead: true
|
|
81
|
+
can-delegate: true
|
|
82
|
+
specialization-level: expert
|
|
83
|
+
compliance:
|
|
84
|
+
iso42001: compliant
|
|
85
|
+
nist-ai-rmf: compliant
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Core Tier** provides basic agent discovery and invocation:
|
|
89
|
+
|
|
90
|
+
- Agent registration and discovery
|
|
91
|
+
- Basic capability declaration
|
|
92
|
+
- Simple request-response patterns
|
|
93
|
+
|
|
94
|
+
**Governed Tier** adds enterprise controls:
|
|
95
|
+
|
|
96
|
+
- Audit logging and compliance tracking
|
|
97
|
+
- Resource constraints and budgets
|
|
98
|
+
- Quality gates and validation
|
|
99
|
+
|
|
100
|
+
**Advanced Tier** enables sophisticated orchestration:
|
|
101
|
+
|
|
102
|
+
- Dynamic workflow generation
|
|
103
|
+
- Multi-agent coordination
|
|
104
|
+
- Adaptive resource allocation
|
|
105
|
+
|
|
106
|
+
#### 3.2 Capability-Based Routing
|
|
107
|
+
|
|
108
|
+
The framework implements intelligent agent selection through capability matching:
|
|
109
|
+
|
|
110
|
+
```py
|
|
111
|
+
class CapabilityRouter:
|
|
112
|
+
def select_optimal_agent(self, task, available_agents):
|
|
113
|
+
# Calculate capability scores
|
|
114
|
+
scores = []
|
|
115
|
+
for agent in available_agents:
|
|
116
|
+
capability_match = self.calculate_capability_match(
|
|
117
|
+
task.required_capabilities,
|
|
118
|
+
agent.capabilities
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
specialization_score = self.evaluate_specialization(
|
|
122
|
+
task.domain,
|
|
123
|
+
agent.specialization_areas
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
availability_score = self.check_availability(
|
|
127
|
+
agent.current_load,
|
|
128
|
+
agent.max_capacity
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
composite_score = (
|
|
132
|
+
capability_match * 0.4 +
|
|
133
|
+
specialization_score * 0.4 +
|
|
134
|
+
availability_score * 0.2
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
scores.append((agent, composite_score))
|
|
138
|
+
|
|
139
|
+
# Return agent with highest score
|
|
140
|
+
return max(scores, key=lambda x: x[1])[0]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### 3.3 Standardized Handoff Protocol
|
|
144
|
+
|
|
145
|
+
OSSA defines efficient handoff mechanisms minimizing context loss:
|
|
146
|
+
|
|
147
|
+
```py
|
|
148
|
+
class HandoffProtocol:
|
|
149
|
+
def prepare_handoff(self, source_agent, target_agent, context):
|
|
150
|
+
handoff_packet = {
|
|
151
|
+
'task_id': context.task_id,
|
|
152
|
+
'source': source_agent.id,
|
|
153
|
+
'target': target_agent.id,
|
|
154
|
+
'context': {
|
|
155
|
+
'state': context.current_state,
|
|
156
|
+
'history': context.get_relevant_history(),
|
|
157
|
+
'constraints': context.constraints
|
|
158
|
+
},
|
|
159
|
+
'metadata': {
|
|
160
|
+
'timestamp': datetime.now(),
|
|
161
|
+
'protocol_version': 'standard'
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
# Validate handoff compatibility
|
|
166
|
+
if not self.validate_compatibility(source_agent, target_agent):
|
|
167
|
+
raise HandoffException("Incompatible agent protocols")
|
|
168
|
+
|
|
169
|
+
return self.compress_handoff(handoff_packet)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 4\. Implementation
|
|
173
|
+
|
|
174
|
+
#### 4.1 Framework Integration
|
|
175
|
+
|
|
176
|
+
OSSA provides integration bridges for existing frameworks:
|
|
177
|
+
|
|
178
|
+
```py
|
|
179
|
+
# LangChain Integration
|
|
180
|
+
class LangChainBridge(OSSABridge):
|
|
181
|
+
def wrap_agent(self, langchain_agent):
|
|
182
|
+
return OSSAAgent(
|
|
183
|
+
native_agent=langchain_agent,
|
|
184
|
+
capabilities=self.extract_capabilities(langchain_agent),
|
|
185
|
+
adapter=self.create_langchain_adapter()
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# CrewAI Integration
|
|
189
|
+
class CrewAIBridge(OSSABridge):
|
|
190
|
+
def wrap_crew(self, crew):
|
|
191
|
+
agents = []
|
|
192
|
+
for crew_agent in crew.agents:
|
|
193
|
+
agents.append(self.wrap_agent(crew_agent))
|
|
194
|
+
return OSSAWorkflow(agents=agents)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### 4.2 Dynamic Task Decomposition
|
|
198
|
+
|
|
199
|
+
The framework enables intelligent task breakdown:
|
|
200
|
+
|
|
201
|
+
```py
|
|
202
|
+
class TaskDecomposer:
|
|
203
|
+
def decompose_task(self, task, available_agents):
|
|
204
|
+
# Analyze task complexity
|
|
205
|
+
complexity_analysis = self.analyze_complexity(task)
|
|
206
|
+
|
|
207
|
+
# Identify subtasks
|
|
208
|
+
subtasks = self.identify_subtasks(task, complexity_analysis)
|
|
209
|
+
|
|
210
|
+
# Map subtasks to agents
|
|
211
|
+
task_assignments = []
|
|
212
|
+
for subtask in subtasks:
|
|
213
|
+
optimal_agent = self.capability_router.select_optimal_agent(
|
|
214
|
+
subtask,
|
|
215
|
+
available_agents
|
|
216
|
+
)
|
|
217
|
+
task_assignments.append({
|
|
218
|
+
'subtask': subtask,
|
|
219
|
+
'agent': optimal_agent,
|
|
220
|
+
'priority': subtask.priority,
|
|
221
|
+
'dependencies': subtask.dependencies
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
# Generate execution plan
|
|
225
|
+
return self.generate_execution_plan(task_assignments)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 5\. Evaluation
|
|
229
|
+
|
|
230
|
+
#### 5.1 Experimental Setup
|
|
231
|
+
|
|
232
|
+
We evaluated OSSA across three dimensions:
|
|
233
|
+
|
|
234
|
+
- **Orchestration Efficiency**: Overhead and coordination metrics
|
|
235
|
+
- **Task Performance**: Completion rates and quality scores
|
|
236
|
+
- **Interoperability**: Cross-framework communication success
|
|
237
|
+
|
|
238
|
+
**Test Environment:**
|
|
239
|
+
|
|
240
|
+
- 50 specialized agents across 5 frameworks
|
|
241
|
+
- 1,000 multi-agent workflows
|
|
242
|
+
- Tasks: Code generation, testing, documentation, analysis
|
|
243
|
+
- Baselines: Native framework orchestration, custom integrations
|
|
244
|
+
|
|
245
|
+
#### 5.2 Results
|
|
246
|
+
|
|
247
|
+
| Metric | Baseline | OSSA | Improvement |
|
|
248
|
+
| :---- | :---- | :---- | :---- |
|
|
249
|
+
| Orchestration Overhead | 450ms | 297ms | 34% reduction |
|
|
250
|
+
| Coordination Efficiency | 0.72 | 0.91 | 26% improvement |
|
|
251
|
+
| Task Completion Rate | 78% | 94% | 21% increase |
|
|
252
|
+
| Context Preservation | 65% | 89% | 37% improvement |
|
|
253
|
+
| Cross-Framework Success | 45% | 92% | 104% improvement |
|
|
254
|
+
|
|
255
|
+
#### 5.3 Case Study: Multi-Framework Development Pipeline
|
|
256
|
+
|
|
257
|
+
**Scenario**: Coordinate agents from LangChain (planning), CrewAI (implementation), and AutoGen (testing) for feature development.
|
|
258
|
+
|
|
259
|
+
**Baseline Approach**: Custom integration scripts, manual handoffs
|
|
260
|
+
|
|
261
|
+
- Time: 45 minutes
|
|
262
|
+
- Success Rate: 65%
|
|
263
|
+
- Manual Interventions: 8
|
|
264
|
+
|
|
265
|
+
**OSSA Approach**: Standardized orchestration
|
|
266
|
+
|
|
267
|
+
- Time: 28 minutes (38% faster)
|
|
268
|
+
- Success Rate: 92%
|
|
269
|
+
- Manual Interventions: 1
|
|
270
|
+
|
|
271
|
+
### 6\. Discussion
|
|
272
|
+
|
|
273
|
+
The evaluation demonstrates OSSA's effectiveness in addressing key orchestration challenges. The 34% reduction in overhead validates the efficiency of standardized protocols, while 104% improvement in cross-framework communication confirms the value of vendor-neutral standards.
|
|
274
|
+
|
|
275
|
+
Key findings:
|
|
276
|
+
|
|
277
|
+
1. **Progressive Compliance Enables Adoption**: Organizations can start with Core tier and advance gradually
|
|
278
|
+
2. **Capability Routing Improves Selection**: 26% better agent utilization through intelligent matching
|
|
279
|
+
3. **Standardized Handoffs Preserve Context**: 37% improvement in context retention
|
|
280
|
+
|
|
281
|
+
Limitations include initial integration overhead and the need for framework-specific adapters. Future work will address automatic adapter generation and machine learning-based optimization.
|
|
282
|
+
|
|
283
|
+
### 7\. Conclusion
|
|
284
|
+
|
|
285
|
+
The OpenAPI AI Agents Standard provides a comprehensive framework for multi-agent orchestration, addressing critical challenges in coordination, interoperability, and resource optimization. Through progressive compliance tiers, capability-based routing, and standardized protocols, OSSA enables efficient orchestration while maintaining vendor neutrality. Experimental validation demonstrates significant improvements in orchestration efficiency, task performance, and cross-framework compatibility, establishing OSSA as a practical foundation for enterprise multi-agent systems.
|