@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,56 @@
|
|
|
1
|
+
import { MetadataRoute } from 'next';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
export const dynamic = 'force-static';
|
|
6
|
+
|
|
7
|
+
function getAllPages(): string[] {
|
|
8
|
+
const pages: string[] = ['', '/docs', '/playground', '/examples', '/schema', '/blog'];
|
|
9
|
+
|
|
10
|
+
// Add blog posts
|
|
11
|
+
const blogDir = path.join(process.cwd(), '../content/blog');
|
|
12
|
+
if (fs.existsSync(blogDir)) {
|
|
13
|
+
const files = fs.readdirSync(blogDir);
|
|
14
|
+
files
|
|
15
|
+
.filter((file) => file.endsWith('.md'))
|
|
16
|
+
.forEach((file) => {
|
|
17
|
+
pages.push(`/blog/${file.replace(/\.md$/, '')}`);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Add docs pages
|
|
22
|
+
const docsDir = path.join(process.cwd(), '../../.gitlab/wiki-content');
|
|
23
|
+
if (fs.existsSync(docsDir)) {
|
|
24
|
+
const traverseDir = (dir: string, basePath = ''): void => {
|
|
25
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (entry.isDirectory()) {
|
|
28
|
+
traverseDir(path.join(dir, entry.name), `${basePath}/${entry.name}`);
|
|
29
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
30
|
+
const slug = entry.name.replace(/\.md$/, '');
|
|
31
|
+
if (slug !== 'index') {
|
|
32
|
+
pages.push(`/docs${basePath}/${slug}`);
|
|
33
|
+
} else if (basePath) {
|
|
34
|
+
pages.push(`/docs${basePath}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
traverseDir(docsDir);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return pages;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default function sitemap(): MetadataRoute.Sitemap {
|
|
46
|
+
const baseUrl = 'https://openstandardagents.org';
|
|
47
|
+
const pages = getAllPages();
|
|
48
|
+
|
|
49
|
+
return pages.map((page) => ({
|
|
50
|
+
url: `${baseUrl}${page === '' ? '' : page}`,
|
|
51
|
+
lastModified: new Date(),
|
|
52
|
+
changeFrequency: page.startsWith('/blog') ? 'weekly' : 'monthly',
|
|
53
|
+
priority: page === '' ? 1.0 : page.startsWith('/docs') ? 0.9 : 0.8,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import Link from 'next/link';
|
|
2
|
+
import type { Metadata } from 'next';
|
|
3
|
+
|
|
4
|
+
export const metadata: Metadata = {
|
|
5
|
+
title: 'Specification - Open Standard Agents',
|
|
6
|
+
description: 'The complete Open Standard Agents specification documentation.',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default function SpecificationPage() {
|
|
10
|
+
return (
|
|
11
|
+
<div className="container mx-auto max-w-7xl px-4 py-12">
|
|
12
|
+
<div className="max-w-4xl mx-auto">
|
|
13
|
+
<h1 className="text-5xl font-bold mb-4">Open Standard Agents Specification</h1>
|
|
14
|
+
<p className="text-xl text-gray-600 mb-12">
|
|
15
|
+
The complete technical specification for defining, validating, and deploying AI agents.
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<section className="mb-12">
|
|
19
|
+
<h2 className="text-3xl font-semibold mb-6 text-primary">Current Version</h2>
|
|
20
|
+
<div className="card p-6 mb-6">
|
|
21
|
+
<div className="flex items-center justify-between mb-4">
|
|
22
|
+
<div>
|
|
23
|
+
<h3 className="text-2xl font-semibold mb-2">v0.2.3</h3>
|
|
24
|
+
<p className="text-gray-700">Latest stable release</p>
|
|
25
|
+
</div>
|
|
26
|
+
<Link href="/schema" className="btn-primary">
|
|
27
|
+
View Schema
|
|
28
|
+
</Link>
|
|
29
|
+
</div>
|
|
30
|
+
<div className="grid md:grid-cols-2 gap-4 mt-4">
|
|
31
|
+
<div>
|
|
32
|
+
<h4 className="font-semibold mb-2">Release Date</h4>
|
|
33
|
+
<p className="text-gray-700">November 2024</p>
|
|
34
|
+
</div>
|
|
35
|
+
<div>
|
|
36
|
+
<h4 className="font-semibold mb-2">Status</h4>
|
|
37
|
+
<span className="inline-block px-3 py-1 bg-success/20 text-success rounded-full text-sm font-medium">
|
|
38
|
+
Stable
|
|
39
|
+
</span>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</section>
|
|
44
|
+
|
|
45
|
+
<section className="mb-12">
|
|
46
|
+
<h2 className="text-3xl font-semibold mb-6 text-primary">Specification Structure</h2>
|
|
47
|
+
<div className="space-y-4">
|
|
48
|
+
<div className="card p-6">
|
|
49
|
+
<h3 className="text-xl font-semibold mb-3 text-primary">1. Core Specification</h3>
|
|
50
|
+
<p className="text-gray-700 mb-4">
|
|
51
|
+
The fundamental structure of an OSA agent manifest, including metadata, specification,
|
|
52
|
+
and extensions.
|
|
53
|
+
</p>
|
|
54
|
+
<Link href="/docs/getting-started/first-agent" className="text-primary hover:underline">
|
|
55
|
+
Read Core Specification →
|
|
56
|
+
</Link>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div className="card p-6">
|
|
60
|
+
<h3 className="text-xl font-semibold mb-3 text-primary">2. Schema Reference</h3>
|
|
61
|
+
<p className="text-gray-700 mb-4">
|
|
62
|
+
Complete JSON Schema definition with all properties, types, constraints, and validation rules.
|
|
63
|
+
</p>
|
|
64
|
+
<Link href="/schema" className="text-primary hover:underline">
|
|
65
|
+
Explore Schema →
|
|
66
|
+
</Link>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div className="card p-6">
|
|
70
|
+
<h3 className="text-xl font-semibold mb-3 text-primary">3. Platform Extensions</h3>
|
|
71
|
+
<p className="text-gray-700 mb-4">
|
|
72
|
+
Framework-specific extensions for Cursor, OpenAI, CrewAI, LangChain, Anthropic,
|
|
73
|
+
Langflow, AutoGen, and more.
|
|
74
|
+
</p>
|
|
75
|
+
<Link href="/docs/examples/migration-guides" className="text-primary hover:underline">
|
|
76
|
+
View Extensions →
|
|
77
|
+
</Link>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<div className="card p-6">
|
|
81
|
+
<h3 className="text-xl font-semibold mb-3 text-primary">4. Validation Rules</h3>
|
|
82
|
+
<p className="text-gray-700 mb-4">
|
|
83
|
+
Comprehensive validation rules, error messages, and best practices for creating valid agent manifests.
|
|
84
|
+
</p>
|
|
85
|
+
<Link href="/playground" className="text-primary hover:underline">
|
|
86
|
+
Try Validation →
|
|
87
|
+
</Link>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</section>
|
|
91
|
+
|
|
92
|
+
<section className="mb-12">
|
|
93
|
+
<h2 className="text-3xl font-semibold mb-6 text-primary">Key Concepts</h2>
|
|
94
|
+
<div className="space-y-6">
|
|
95
|
+
<div>
|
|
96
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Agent Manifest</h3>
|
|
97
|
+
<p className="text-gray-700 mb-2">
|
|
98
|
+
A YAML or JSON file that describes an AI agent, including its role, LLM configuration,
|
|
99
|
+
tools, and deployment requirements.
|
|
100
|
+
</p>
|
|
101
|
+
<div className="bg-code-bg rounded-lg p-4 mt-3">
|
|
102
|
+
<pre className="text-code-text text-sm overflow-x-auto">
|
|
103
|
+
<code>{`apiVersion: ossa/v0.2.3
|
|
104
|
+
kind: Agent
|
|
105
|
+
metadata:
|
|
106
|
+
name: my-agent
|
|
107
|
+
spec:
|
|
108
|
+
role: You are a helpful assistant
|
|
109
|
+
llm:
|
|
110
|
+
provider: openai
|
|
111
|
+
model: gpt-4`}</code>
|
|
112
|
+
</pre>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<div>
|
|
117
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Schema Validation</h3>
|
|
118
|
+
<p className="text-gray-700">
|
|
119
|
+
Every agent manifest must conform to the OSA JSON Schema. Validation ensures correctness,
|
|
120
|
+
completeness, and compatibility before deployment.
|
|
121
|
+
</p>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div>
|
|
125
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Platform Extensions</h3>
|
|
126
|
+
<p className="text-gray-700">
|
|
127
|
+
Framework-specific extensions allow agents to leverage platform-specific features while
|
|
128
|
+
maintaining core OSA compatibility.
|
|
129
|
+
</p>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<div>
|
|
133
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Export/Import</h3>
|
|
134
|
+
<p className="text-gray-700">
|
|
135
|
+
Convert OSA manifests to framework-specific formats (export) or import existing agents
|
|
136
|
+
into OSA format for standardization.
|
|
137
|
+
</p>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
</section>
|
|
141
|
+
|
|
142
|
+
<section className="mb-12">
|
|
143
|
+
<h2 className="text-3xl font-semibold mb-6 text-primary">Version History</h2>
|
|
144
|
+
<div className="space-y-4">
|
|
145
|
+
<div className="card p-6">
|
|
146
|
+
<div className="flex items-center justify-between mb-2">
|
|
147
|
+
<h3 className="text-xl font-semibold">v0.2.3</h3>
|
|
148
|
+
<span className="px-3 py-1 bg-success/20 text-success rounded-full text-sm font-medium">
|
|
149
|
+
Current
|
|
150
|
+
</span>
|
|
151
|
+
</div>
|
|
152
|
+
<p className="text-gray-700 mb-2">November 2024</p>
|
|
153
|
+
<p className="text-gray-700">
|
|
154
|
+
Enhanced platform extensions, improved validation, and expanded tool support.
|
|
155
|
+
</p>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div className="card p-6 bg-gray-50">
|
|
159
|
+
<div className="flex items-center justify-between mb-2">
|
|
160
|
+
<h3 className="text-xl font-semibold">v0.2.2</h3>
|
|
161
|
+
<span className="px-3 py-1 bg-gray-500/20 text-gray-700 rounded-full text-sm font-medium">
|
|
162
|
+
Previous
|
|
163
|
+
</span>
|
|
164
|
+
</div>
|
|
165
|
+
<p className="text-gray-700 mb-2">October 2024</p>
|
|
166
|
+
<p className="text-gray-700">
|
|
167
|
+
Initial platform extensions and improved schema structure.
|
|
168
|
+
</p>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<div className="card p-6 bg-gray-50">
|
|
172
|
+
<div className="flex items-center justify-between mb-2">
|
|
173
|
+
<h3 className="text-xl font-semibold">v0.1.9</h3>
|
|
174
|
+
<span className="px-3 py-1 bg-gray-500/20 text-gray-700 rounded-full text-sm font-medium">
|
|
175
|
+
Legacy
|
|
176
|
+
</span>
|
|
177
|
+
</div>
|
|
178
|
+
<p className="text-gray-700 mb-2">September 2024</p>
|
|
179
|
+
<p className="text-gray-700">
|
|
180
|
+
Initial release with basic agent definition structure.
|
|
181
|
+
</p>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</section>
|
|
185
|
+
|
|
186
|
+
<section className="mb-12">
|
|
187
|
+
<h2 className="text-3xl font-semibold mb-6 text-primary">Resources</h2>
|
|
188
|
+
<div className="grid md:grid-cols-2 gap-4">
|
|
189
|
+
<Link href="/schema" className="card-hover p-6">
|
|
190
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Interactive Schema Explorer</h3>
|
|
191
|
+
<p className="text-gray-700">Explore the complete JSON Schema interactively.</p>
|
|
192
|
+
</Link>
|
|
193
|
+
<Link href="/playground" className="card-hover p-6">
|
|
194
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Validation Playground</h3>
|
|
195
|
+
<p className="text-gray-700">Test and validate your agent manifests in real-time.</p>
|
|
196
|
+
</Link>
|
|
197
|
+
<Link href="/examples" className="card-hover p-6">
|
|
198
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Examples Gallery</h3>
|
|
199
|
+
<p className="text-gray-700">Browse real-world examples and use cases.</p>
|
|
200
|
+
</Link>
|
|
201
|
+
<Link href="/docs" className="card-hover p-6">
|
|
202
|
+
<h3 className="text-xl font-semibold mb-2 text-primary">Full Documentation</h3>
|
|
203
|
+
<p className="text-gray-700">Comprehensive guides and tutorials.</p>
|
|
204
|
+
</Link>
|
|
205
|
+
</div>
|
|
206
|
+
</section>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
|
|
5
|
+
export function InstallCommand() {
|
|
6
|
+
const [copiedIndex, setCopiedIndex] = useState<number | null>(null);
|
|
7
|
+
|
|
8
|
+
const steps = [
|
|
9
|
+
{
|
|
10
|
+
title: '1. Install',
|
|
11
|
+
command: 'npm install -g @bluefly/openstandardagents',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
title: '2. Create',
|
|
15
|
+
command: 'osa init my-agent',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
title: '3. Validate',
|
|
19
|
+
command: 'osa validate my-agent.ossa.yaml',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: '4. Export',
|
|
23
|
+
command: 'osa export --to langchain',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const copyToClipboard = async (command: string, index: number) => {
|
|
28
|
+
try {
|
|
29
|
+
await navigator.clipboard.writeText(command);
|
|
30
|
+
setCopiedIndex(index);
|
|
31
|
+
setTimeout(() => setCopiedIndex(null), 2000);
|
|
32
|
+
} catch (err) {
|
|
33
|
+
console.error('Failed to copy:', err);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<div className="bg-gradient-to-r from-primary to-secondary text-white rounded-lg p-8 shadow-xl">
|
|
39
|
+
<div className="container mx-auto max-w-6xl">
|
|
40
|
+
<h3 className="text-2xl font-bold mb-2">Get Started in Minutes</h3>
|
|
41
|
+
<p className="text-lg mb-6 opacity-90">
|
|
42
|
+
Install the CLI, create your first agent, and start building with OSSA
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
|
|
46
|
+
{steps.map((step, index) => (
|
|
47
|
+
<div key={index} className="bg-white/10 backdrop-blur-sm rounded-lg p-4">
|
|
48
|
+
<h4 className="font-semibold mb-2 text-sm">{step.title}</h4>
|
|
49
|
+
<div className="bg-black/30 rounded p-2 flex items-start justify-between gap-2">
|
|
50
|
+
<code className="text-xs font-mono text-white flex-1 break-all">
|
|
51
|
+
{step.command}
|
|
52
|
+
</code>
|
|
53
|
+
<button
|
|
54
|
+
onClick={() => copyToClipboard(step.command, index)}
|
|
55
|
+
className="flex-shrink-0 p-1 hover:bg-white/20 rounded transition-colors"
|
|
56
|
+
aria-label="Copy command"
|
|
57
|
+
>
|
|
58
|
+
{copiedIndex === index ? (
|
|
59
|
+
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
60
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
|
61
|
+
</svg>
|
|
62
|
+
) : (
|
|
63
|
+
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
64
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" />
|
|
65
|
+
</svg>
|
|
66
|
+
)}
|
|
67
|
+
</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
))}
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div className="flex flex-wrap gap-4 text-sm">
|
|
74
|
+
<a href="/docs/getting-started/5-minute-overview" className="text-white hover:underline flex items-center gap-2">
|
|
75
|
+
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
76
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
77
|
+
</svg>
|
|
78
|
+
Quick Start Guide
|
|
79
|
+
</a>
|
|
80
|
+
<a href="/examples" className="text-white hover:underline flex items-center gap-2">
|
|
81
|
+
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
82
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
|
|
83
|
+
</svg>
|
|
84
|
+
View Examples
|
|
85
|
+
</a>
|
|
86
|
+
<a href="/docs" className="text-white hover:underline flex items-center gap-2">
|
|
87
|
+
<svg className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
88
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
|
|
89
|
+
</svg>
|
|
90
|
+
Full Documentation
|
|
91
|
+
</a>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
interface LogoProps {
|
|
4
|
+
domain: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function Logo({ domain, name }: LogoProps) {
|
|
9
|
+
const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {
|
|
10
|
+
e.currentTarget.src = `https://www.google.com/s2/favicons?sz=256&domain=${domain}`;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div className="flex flex-col items-center gap-3 p-4 hover:bg-white rounded-lg transition-all">
|
|
15
|
+
<img
|
|
16
|
+
src={`https://logo.clearbit.com/${domain}`}
|
|
17
|
+
alt={name}
|
|
18
|
+
className="h-12 w-12 object-contain"
|
|
19
|
+
onError={handleError}
|
|
20
|
+
/>
|
|
21
|
+
<span className="text-sm font-medium text-gray-600">{name}</span>
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
interface StructuredDataProps {
|
|
2
|
+
type: 'Organization' | 'WebSite' | 'Article';
|
|
3
|
+
data: Record<string, any>;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function StructuredData({ type, data }: StructuredDataProps) {
|
|
7
|
+
const baseUrl = 'https://openstandardagents.org';
|
|
8
|
+
|
|
9
|
+
const getStructuredData = (): object => {
|
|
10
|
+
switch (type) {
|
|
11
|
+
case 'Organization':
|
|
12
|
+
return {
|
|
13
|
+
'@context': 'https://schema.org',
|
|
14
|
+
'@type': 'Organization',
|
|
15
|
+
name: 'OSSA Standards Team',
|
|
16
|
+
url: baseUrl,
|
|
17
|
+
logo: `${baseUrl}/assets/brand/ossa-logo.svg`,
|
|
18
|
+
sameAs: [
|
|
19
|
+
'https://github.com/blueflyio/openstandardagents',
|
|
20
|
+
'https://www.npmjs.com/package/@bluefly/openstandardagents',
|
|
21
|
+
],
|
|
22
|
+
...data,
|
|
23
|
+
};
|
|
24
|
+
case 'WebSite':
|
|
25
|
+
return {
|
|
26
|
+
'@context': 'https://schema.org',
|
|
27
|
+
'@type': 'WebSite',
|
|
28
|
+
name: 'OSSA',
|
|
29
|
+
url: baseUrl,
|
|
30
|
+
description: 'Open Standard for Scalable AI Agents - The OpenAPI for AI Agents',
|
|
31
|
+
...data,
|
|
32
|
+
};
|
|
33
|
+
case 'Article':
|
|
34
|
+
return {
|
|
35
|
+
'@context': 'https://schema.org',
|
|
36
|
+
'@type': 'Article',
|
|
37
|
+
headline: data.title,
|
|
38
|
+
datePublished: data.date,
|
|
39
|
+
author: {
|
|
40
|
+
'@type': 'Person',
|
|
41
|
+
name: data.author || 'OSSA Team',
|
|
42
|
+
},
|
|
43
|
+
publisher: {
|
|
44
|
+
'@type': 'Organization',
|
|
45
|
+
name: 'OSSA Standards Team',
|
|
46
|
+
logo: {
|
|
47
|
+
'@type': 'ImageObject',
|
|
48
|
+
url: `${baseUrl}/logo.png`,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
...data,
|
|
52
|
+
};
|
|
53
|
+
default:
|
|
54
|
+
return {};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<script
|
|
60
|
+
type="application/ld+json"
|
|
61
|
+
dangerouslySetInnerHTML={{ __html: JSON.stringify(getStructuredData()) }}
|
|
62
|
+
/>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useMemo } from 'react';
|
|
4
|
+
import Link from 'next/link';
|
|
5
|
+
|
|
6
|
+
interface SearchResult {
|
|
7
|
+
title: string;
|
|
8
|
+
href: string;
|
|
9
|
+
category: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const allDocs: SearchResult[] = [
|
|
13
|
+
{ title: '5-Minute Overview', href: '/docs/getting-started/5-minute-overview', category: 'Getting Started' },
|
|
14
|
+
{ title: 'Installation', href: '/docs/getting-started/installation', category: 'Getting Started' },
|
|
15
|
+
{ title: 'Hello World', href: '/docs/getting-started/hello-world', category: 'Getting Started' },
|
|
16
|
+
{ title: 'First Agent', href: '/docs/getting-started/first-agent', category: 'Getting Started' },
|
|
17
|
+
{ title: 'For Developers', href: '/docs/for-audiences/developers', category: 'For Audiences' },
|
|
18
|
+
{ title: 'For Architects', href: '/docs/for-audiences/architects', category: 'For Audiences' },
|
|
19
|
+
{ title: 'For Enterprises', href: '/docs/for-audiences/enterprises', category: 'For Audiences' },
|
|
20
|
+
{ title: 'For Students & Researchers', href: '/docs/for-audiences/students-researchers', category: 'For Audiences' },
|
|
21
|
+
{ title: 'Migration Guides', href: '/docs/examples/migration-guides', category: 'Examples' },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export function DocsSearch() {
|
|
25
|
+
const [query, setQuery] = useState('');
|
|
26
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
27
|
+
|
|
28
|
+
const results = useMemo(() => {
|
|
29
|
+
if (!query.trim()) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const lowerQuery = query.toLowerCase();
|
|
34
|
+
return allDocs.filter(
|
|
35
|
+
(doc) =>
|
|
36
|
+
doc.title.toLowerCase().includes(lowerQuery) ||
|
|
37
|
+
doc.category.toLowerCase().includes(lowerQuery)
|
|
38
|
+
);
|
|
39
|
+
}, [query]);
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div className="relative">
|
|
43
|
+
<div className="relative">
|
|
44
|
+
<input
|
|
45
|
+
type="search"
|
|
46
|
+
placeholder="Search documentation..."
|
|
47
|
+
value={query}
|
|
48
|
+
onChange={(e) => setQuery(e.target.value)}
|
|
49
|
+
onFocus={() => setIsOpen(true)}
|
|
50
|
+
onBlur={() => setTimeout(() => setIsOpen(false), 200)}
|
|
51
|
+
className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary"
|
|
52
|
+
aria-label="Search documentation"
|
|
53
|
+
aria-describedby="search-description"
|
|
54
|
+
role="searchbox"
|
|
55
|
+
/>
|
|
56
|
+
<svg
|
|
57
|
+
className="absolute right-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-gray-400"
|
|
58
|
+
fill="none"
|
|
59
|
+
stroke="currentColor"
|
|
60
|
+
viewBox="0 0 24 24"
|
|
61
|
+
>
|
|
62
|
+
<path
|
|
63
|
+
strokeLinecap="round"
|
|
64
|
+
strokeLinejoin="round"
|
|
65
|
+
strokeWidth={2}
|
|
66
|
+
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
|
|
67
|
+
/>
|
|
68
|
+
</svg>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{isOpen && results.length > 0 && (
|
|
72
|
+
<div
|
|
73
|
+
className="absolute z-50 w-full mt-2 bg-white border border-gray-300 rounded-lg shadow-lg max-h-96 overflow-y-auto"
|
|
74
|
+
role="listbox"
|
|
75
|
+
aria-label="Search results"
|
|
76
|
+
>
|
|
77
|
+
{results.map((result) => (
|
|
78
|
+
<Link
|
|
79
|
+
key={result.href}
|
|
80
|
+
href={result.href}
|
|
81
|
+
className="block px-4 py-3 hover:bg-gray-100 transition-colors focus:outline-none focus:ring-2 focus:ring-primary"
|
|
82
|
+
onClick={() => {
|
|
83
|
+
setQuery('');
|
|
84
|
+
setIsOpen(false);
|
|
85
|
+
}}
|
|
86
|
+
role="option"
|
|
87
|
+
aria-label={`${result.title} in ${result.category}`}
|
|
88
|
+
>
|
|
89
|
+
<div className="font-semibold text-gray-900">{result.title}</div>
|
|
90
|
+
<div className="text-sm text-gray-500">{result.category}</div>
|
|
91
|
+
</Link>
|
|
92
|
+
))}
|
|
93
|
+
</div>
|
|
94
|
+
)}
|
|
95
|
+
|
|
96
|
+
{isOpen && query.trim() && results.length === 0 && (
|
|
97
|
+
<div className="absolute z-50 w-full mt-2 bg-white border border-gray-300 rounded-lg shadow-lg p-4">
|
|
98
|
+
<p className="text-gray-500">No results found</p>
|
|
99
|
+
</div>
|
|
100
|
+
)}
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import Link from 'next/link';
|
|
4
|
+
import { usePathname } from 'next/navigation';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { DocsSearch } from './DocsSearch';
|
|
7
|
+
import { VersionSelector } from './VersionSelector';
|
|
8
|
+
|
|
9
|
+
const navigation = [
|
|
10
|
+
{
|
|
11
|
+
title: 'Getting Started',
|
|
12
|
+
items: [
|
|
13
|
+
{ href: '/docs/getting-started/5-minute-overview', label: '5-Minute Overview' },
|
|
14
|
+
{ href: '/docs/getting-started/installation', label: 'Installation' },
|
|
15
|
+
{ href: '/docs/getting-started/hello-world', label: 'Hello World' },
|
|
16
|
+
{ href: '/docs/getting-started/first-agent', label: 'First Agent' },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: 'For Audiences',
|
|
21
|
+
items: [
|
|
22
|
+
{ href: '/docs/for-audiences/developers', label: 'Developers' },
|
|
23
|
+
{ href: '/docs/for-audiences/architects', label: 'Architects' },
|
|
24
|
+
{ href: '/docs/for-audiences/enterprises', label: 'Enterprises' },
|
|
25
|
+
{ href: '/docs/for-audiences/students-researchers', label: 'Students & Researchers' },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: 'Migration Guides',
|
|
30
|
+
items: [
|
|
31
|
+
{ href: '/docs/migration-guides/anthropic-mcp-to-ossa', label: 'Anthropic MCP to OSSA' },
|
|
32
|
+
{ href: '/docs/migration-guides/openai-to-ossa', label: 'OpenAI to OSSA' },
|
|
33
|
+
{ href: '/docs/migration-guides/langchain-to-ossa', label: 'LangChain to OSSA' },
|
|
34
|
+
{ href: '/docs/migration-guides/crewai-to-ossa', label: 'CrewAI to OSSA' },
|
|
35
|
+
{ href: '/docs/migration-guides/langflow-to-ossa', label: 'Langflow to OSSA' },
|
|
36
|
+
{ href: '/docs/migration-guides/drupal-eca-to-ossa', label: 'Drupal ECA to OSSA' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
title: 'Reference',
|
|
41
|
+
items: [
|
|
42
|
+
{ href: '/docs/openapi-extensions', label: 'OpenAPI Extensions' },
|
|
43
|
+
{ href: '/docs/quick-reference', label: 'Quick Reference' },
|
|
44
|
+
{ href: '/docs/changelog', label: 'Changelog' },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
title: 'Contributing',
|
|
49
|
+
items: [
|
|
50
|
+
{ href: '/docs/contributing', label: 'Contributing Guide' },
|
|
51
|
+
{ href: '/docs/aiflow-framework-integration-with-ossa', label: 'AIFlow Framework Integration' },
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
export function DocsSidebar() {
|
|
57
|
+
const pathname = usePathname();
|
|
58
|
+
const [openSections, setOpenSections] = useState<string[]>(['Getting Started']);
|
|
59
|
+
|
|
60
|
+
const toggleSection = (title: string): void => {
|
|
61
|
+
setOpenSections((prev) =>
|
|
62
|
+
prev.includes(title)
|
|
63
|
+
? prev.filter((t) => t !== title)
|
|
64
|
+
: [...prev, title]
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<aside className="w-64 bg-gray-100 border-r border-gray-300 p-4 overflow-y-auto h-screen sticky top-0">
|
|
70
|
+
<nav>
|
|
71
|
+
<Link href="/docs" className="block mb-6 font-semibold text-primary hover:text-primary-dark">
|
|
72
|
+
Documentation
|
|
73
|
+
</Link>
|
|
74
|
+
<div className="mb-6">
|
|
75
|
+
<DocsSearch />
|
|
76
|
+
</div>
|
|
77
|
+
<div className="mb-6">
|
|
78
|
+
<VersionSelector />
|
|
79
|
+
</div>
|
|
80
|
+
{navigation.map((section) => (
|
|
81
|
+
<div key={section.title} className="mb-4">
|
|
82
|
+
<button
|
|
83
|
+
onClick={() => toggleSection(section.title)}
|
|
84
|
+
className="w-full text-left font-semibold text-gray-900 mb-2 flex items-center justify-between"
|
|
85
|
+
>
|
|
86
|
+
<span>{section.title}</span>
|
|
87
|
+
<span className="text-gray-500">
|
|
88
|
+
{openSections.includes(section.title) ? '−' : '+'}
|
|
89
|
+
</span>
|
|
90
|
+
</button>
|
|
91
|
+
{openSections.includes(section.title) && (
|
|
92
|
+
<ul className="space-y-1 ml-2">
|
|
93
|
+
{section.items.map((item) => {
|
|
94
|
+
const isActive = pathname === item.href;
|
|
95
|
+
return (
|
|
96
|
+
<li key={item.href}>
|
|
97
|
+
<Link
|
|
98
|
+
href={item.href}
|
|
99
|
+
className={`block px-2 py-1 rounded text-sm transition-colors ${
|
|
100
|
+
isActive
|
|
101
|
+
? 'bg-primary text-white'
|
|
102
|
+
: 'text-gray-700 hover:bg-gray-200'
|
|
103
|
+
}`}
|
|
104
|
+
>
|
|
105
|
+
{item.label}
|
|
106
|
+
</Link>
|
|
107
|
+
</li>
|
|
108
|
+
);
|
|
109
|
+
})}
|
|
110
|
+
</ul>
|
|
111
|
+
)}
|
|
112
|
+
</div>
|
|
113
|
+
))}
|
|
114
|
+
</nav>
|
|
115
|
+
</aside>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|