@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,183 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactMarkdown from 'react-markdown';
|
|
3
|
+
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
|
|
4
|
+
import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
5
|
+
import remarkGfm from 'remark-gfm';
|
|
6
|
+
|
|
7
|
+
interface MarkdownContentProps {
|
|
8
|
+
content: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function MarkdownContent({ content }: MarkdownContentProps) {
|
|
12
|
+
return (
|
|
13
|
+
<div className="markdown-content">
|
|
14
|
+
<ReactMarkdown
|
|
15
|
+
remarkPlugins={[remarkGfm]}
|
|
16
|
+
components={{
|
|
17
|
+
// Headings
|
|
18
|
+
h1: ({ children }) => (
|
|
19
|
+
<h1 className="text-3xl font-bold text-gray-900 mt-8 mb-4 pb-2 border-b border-gray-200">
|
|
20
|
+
{children}
|
|
21
|
+
</h1>
|
|
22
|
+
),
|
|
23
|
+
h2: ({ children }) => (
|
|
24
|
+
<h2 className="text-2xl font-semibold text-gray-900 mt-8 mb-4">
|
|
25
|
+
{children}
|
|
26
|
+
</h2>
|
|
27
|
+
),
|
|
28
|
+
h3: ({ children }) => (
|
|
29
|
+
<h3 className="text-xl font-semibold text-gray-900 mt-6 mb-3">
|
|
30
|
+
{children}
|
|
31
|
+
</h3>
|
|
32
|
+
),
|
|
33
|
+
h4: ({ children }) => (
|
|
34
|
+
<h4 className="text-lg font-semibold text-gray-900 mt-4 mb-2">
|
|
35
|
+
{children}
|
|
36
|
+
</h4>
|
|
37
|
+
),
|
|
38
|
+
|
|
39
|
+
// Paragraphs
|
|
40
|
+
p: ({ children }) => (
|
|
41
|
+
<p className="text-gray-700 leading-7 mb-4">
|
|
42
|
+
{children}
|
|
43
|
+
</p>
|
|
44
|
+
),
|
|
45
|
+
|
|
46
|
+
// Links
|
|
47
|
+
a: ({ href, children }) => (
|
|
48
|
+
<a
|
|
49
|
+
href={href}
|
|
50
|
+
className="text-blue-600 hover:text-blue-800 underline"
|
|
51
|
+
target={href?.startsWith('http') ? '_blank' : undefined}
|
|
52
|
+
rel={href?.startsWith('http') ? 'noopener noreferrer' : undefined}
|
|
53
|
+
>
|
|
54
|
+
{children}
|
|
55
|
+
</a>
|
|
56
|
+
),
|
|
57
|
+
|
|
58
|
+
// Lists
|
|
59
|
+
ul: ({ children }) => (
|
|
60
|
+
<ul className="list-disc list-inside mb-4 space-y-2 text-gray-700">
|
|
61
|
+
{children}
|
|
62
|
+
</ul>
|
|
63
|
+
),
|
|
64
|
+
ol: ({ children }) => (
|
|
65
|
+
<ol className="list-decimal list-inside mb-4 space-y-2 text-gray-700">
|
|
66
|
+
{children}
|
|
67
|
+
</ol>
|
|
68
|
+
),
|
|
69
|
+
li: ({ children }) => (
|
|
70
|
+
<li className="leading-7">
|
|
71
|
+
{children}
|
|
72
|
+
</li>
|
|
73
|
+
),
|
|
74
|
+
|
|
75
|
+
// Blockquotes
|
|
76
|
+
blockquote: ({ children }) => (
|
|
77
|
+
<blockquote className="border-l-4 border-blue-500 pl-4 py-2 my-4 bg-blue-50 text-gray-700 italic">
|
|
78
|
+
{children}
|
|
79
|
+
</blockquote>
|
|
80
|
+
),
|
|
81
|
+
|
|
82
|
+
// Tables
|
|
83
|
+
table: ({ children }) => (
|
|
84
|
+
<div className="overflow-x-auto my-6">
|
|
85
|
+
<table className="min-w-full divide-y divide-gray-200 border border-gray-200 rounded-lg">
|
|
86
|
+
{children}
|
|
87
|
+
</table>
|
|
88
|
+
</div>
|
|
89
|
+
),
|
|
90
|
+
thead: ({ children }) => (
|
|
91
|
+
<thead className="bg-gray-50">
|
|
92
|
+
{children}
|
|
93
|
+
</thead>
|
|
94
|
+
),
|
|
95
|
+
th: ({ children }) => (
|
|
96
|
+
<th className="px-4 py-3 text-left text-sm font-semibold text-gray-900 border-b">
|
|
97
|
+
{children}
|
|
98
|
+
</th>
|
|
99
|
+
),
|
|
100
|
+
td: ({ children }) => (
|
|
101
|
+
<td className="px-4 py-3 text-sm text-gray-700 border-b border-gray-100">
|
|
102
|
+
{children}
|
|
103
|
+
</td>
|
|
104
|
+
),
|
|
105
|
+
tr: ({ children }) => (
|
|
106
|
+
<tr className="hover:bg-gray-50">
|
|
107
|
+
{children}
|
|
108
|
+
</tr>
|
|
109
|
+
),
|
|
110
|
+
|
|
111
|
+
// Code
|
|
112
|
+
code({ className, children }) {
|
|
113
|
+
const match = /language-(\w+)/.exec(className || '');
|
|
114
|
+
const isInline = !match;
|
|
115
|
+
|
|
116
|
+
if (match) {
|
|
117
|
+
return (
|
|
118
|
+
<div className="my-4 rounded-lg overflow-hidden">
|
|
119
|
+
<SyntaxHighlighter
|
|
120
|
+
style={vscDarkPlus as any}
|
|
121
|
+
language={match[1]}
|
|
122
|
+
PreTag="div"
|
|
123
|
+
customStyle={{
|
|
124
|
+
margin: 0,
|
|
125
|
+
borderRadius: '0.5rem',
|
|
126
|
+
fontSize: '0.875rem',
|
|
127
|
+
}}
|
|
128
|
+
>
|
|
129
|
+
{String(children).replace(/\n$/, '')}
|
|
130
|
+
</SyntaxHighlighter>
|
|
131
|
+
</div>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<code className="bg-gray-100 text-red-600 px-1.5 py-0.5 rounded text-sm font-mono">
|
|
137
|
+
{children}
|
|
138
|
+
</code>
|
|
139
|
+
);
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
// Pre (for code blocks without language)
|
|
143
|
+
pre: ({ children }) => (
|
|
144
|
+
<pre className="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 text-sm">
|
|
145
|
+
{children}
|
|
146
|
+
</pre>
|
|
147
|
+
),
|
|
148
|
+
|
|
149
|
+
// Horizontal rule
|
|
150
|
+
hr: () => (
|
|
151
|
+
<hr className="my-8 border-t border-gray-200" />
|
|
152
|
+
),
|
|
153
|
+
|
|
154
|
+
// Strong/Bold
|
|
155
|
+
strong: ({ children }) => (
|
|
156
|
+
<strong className="font-semibold text-gray-900">
|
|
157
|
+
{children}
|
|
158
|
+
</strong>
|
|
159
|
+
),
|
|
160
|
+
|
|
161
|
+
// Emphasis/Italic
|
|
162
|
+
em: ({ children }) => (
|
|
163
|
+
<em className="italic">
|
|
164
|
+
{children}
|
|
165
|
+
</em>
|
|
166
|
+
),
|
|
167
|
+
|
|
168
|
+
// Images
|
|
169
|
+
img: ({ src, alt }) => (
|
|
170
|
+
<img
|
|
171
|
+
src={src}
|
|
172
|
+
alt={alt || ''}
|
|
173
|
+
className="max-w-full h-auto rounded-lg my-4 shadow-sm"
|
|
174
|
+
/>
|
|
175
|
+
),
|
|
176
|
+
}}
|
|
177
|
+
>
|
|
178
|
+
{content}
|
|
179
|
+
</ReactMarkdown>
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePathname, useRouter } from 'next/navigation';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { OSSA_VERSION_TAG } from '@/lib/version';
|
|
6
|
+
|
|
7
|
+
const versions = [
|
|
8
|
+
{ value: OSSA_VERSION_TAG, label: `${OSSA_VERSION_TAG} (Current)`, default: true },
|
|
9
|
+
{ value: 'v1.0', label: 'v1.0 (Coming Soon)', disabled: true },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
export function VersionSelector() {
|
|
13
|
+
const [selectedVersion, setSelectedVersion] = useState(OSSA_VERSION_TAG);
|
|
14
|
+
const router = useRouter();
|
|
15
|
+
const pathname = usePathname();
|
|
16
|
+
|
|
17
|
+
const handleVersionChange = (version: string): void => {
|
|
18
|
+
setSelectedVersion(version);
|
|
19
|
+
// In the future, this could navigate to version-specific docs
|
|
20
|
+
// For now, we just update the UI
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div className="mb-4">
|
|
25
|
+
<label htmlFor="version-select" className="block text-sm font-medium text-gray-700 mb-2">
|
|
26
|
+
Version
|
|
27
|
+
</label>
|
|
28
|
+
<select
|
|
29
|
+
id="version-select"
|
|
30
|
+
value={selectedVersion}
|
|
31
|
+
onChange={(e) => handleVersionChange(e.target.value)}
|
|
32
|
+
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary bg-white"
|
|
33
|
+
aria-label="Select OSSA version"
|
|
34
|
+
aria-describedby="version-description"
|
|
35
|
+
>
|
|
36
|
+
{versions.map((version) => (
|
|
37
|
+
<option
|
|
38
|
+
key={version.value}
|
|
39
|
+
value={version.value}
|
|
40
|
+
disabled={version.disabled}
|
|
41
|
+
>
|
|
42
|
+
{version.label}
|
|
43
|
+
</option>
|
|
44
|
+
))}
|
|
45
|
+
</select>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
4
|
+
import { useRouter, useSearchParams } from 'next/navigation';
|
|
5
|
+
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
|
|
6
|
+
import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|
7
|
+
|
|
8
|
+
interface ExampleFile {
|
|
9
|
+
name: string;
|
|
10
|
+
path: string;
|
|
11
|
+
content: string;
|
|
12
|
+
category: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface ExamplesViewerProps {
|
|
16
|
+
examples: ExampleFile[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function ExamplesViewer({ examples }: ExamplesViewerProps) {
|
|
20
|
+
const router = useRouter();
|
|
21
|
+
const searchParams = useSearchParams();
|
|
22
|
+
|
|
23
|
+
const [selectedExample, setSelectedExample] = useState<ExampleFile | null>(null);
|
|
24
|
+
const [filter, setFilter] = useState<string>('all');
|
|
25
|
+
const [searchQuery, setSearchQuery] = useState<string>('');
|
|
26
|
+
|
|
27
|
+
// Initialize from URL parameters
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const exampleParam = searchParams.get('example');
|
|
30
|
+
const categoryParam = searchParams.get('category');
|
|
31
|
+
const searchParam = searchParams.get('search');
|
|
32
|
+
|
|
33
|
+
if (exampleParam) {
|
|
34
|
+
const example = examples.find(ex => ex.path === exampleParam);
|
|
35
|
+
if (example) setSelectedExample(example);
|
|
36
|
+
} else if (examples.length > 0) {
|
|
37
|
+
setSelectedExample(examples[0]);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (categoryParam) setFilter(categoryParam);
|
|
41
|
+
if (searchParam) setSearchQuery(searchParam);
|
|
42
|
+
}, [examples, searchParams]);
|
|
43
|
+
|
|
44
|
+
// Update URL when selection changes
|
|
45
|
+
const handleSelectExample = (example: ExampleFile) => {
|
|
46
|
+
setSelectedExample(example);
|
|
47
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
48
|
+
params.set('example', example.path);
|
|
49
|
+
if (filter !== 'all') params.set('category', filter);
|
|
50
|
+
if (searchQuery) params.set('search', searchQuery);
|
|
51
|
+
router.push(`/examples?${params.toString()}`, { scroll: false });
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const handleFilterChange = (newFilter: string) => {
|
|
55
|
+
setFilter(newFilter);
|
|
56
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
57
|
+
if (newFilter !== 'all') {
|
|
58
|
+
params.set('category', newFilter);
|
|
59
|
+
} else {
|
|
60
|
+
params.delete('category');
|
|
61
|
+
}
|
|
62
|
+
router.push(`/examples?${params.toString()}`, { scroll: false });
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const handleSearchChange = (query: string) => {
|
|
66
|
+
setSearchQuery(query);
|
|
67
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
68
|
+
if (query) {
|
|
69
|
+
params.set('search', query);
|
|
70
|
+
} else {
|
|
71
|
+
params.delete('search');
|
|
72
|
+
}
|
|
73
|
+
router.push(`/examples?${params.toString()}`, { scroll: false });
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const categories = useMemo(() => {
|
|
77
|
+
const cats = new Set(examples.map((ex) => ex.category));
|
|
78
|
+
return Array.from(cats).sort();
|
|
79
|
+
}, [examples]);
|
|
80
|
+
|
|
81
|
+
const filteredExamples = useMemo(() => {
|
|
82
|
+
let filtered = examples;
|
|
83
|
+
|
|
84
|
+
if (filter !== 'all') {
|
|
85
|
+
filtered = filtered.filter((ex) => ex.category === filter);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (searchQuery) {
|
|
89
|
+
const query = searchQuery.toLowerCase();
|
|
90
|
+
filtered = filtered.filter(
|
|
91
|
+
(ex) =>
|
|
92
|
+
ex.name.toLowerCase().includes(query) ||
|
|
93
|
+
ex.path.toLowerCase().includes(query) ||
|
|
94
|
+
ex.content.toLowerCase().includes(query)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return filtered;
|
|
99
|
+
}, [examples, filter, searchQuery]);
|
|
100
|
+
|
|
101
|
+
const getLanguage = (filename: string): string => {
|
|
102
|
+
if (filename.endsWith('.ts')) return 'typescript';
|
|
103
|
+
if (filename.endsWith('.json')) return 'json';
|
|
104
|
+
if (filename.endsWith('.yml') || filename.endsWith('.yaml')) return 'yaml';
|
|
105
|
+
return 'text';
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const copyToClipboard = async (text: string): Promise<void> => {
|
|
109
|
+
try {
|
|
110
|
+
await navigator.clipboard.writeText(text);
|
|
111
|
+
// Could add a toast notification here
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error('Failed to copy:', error);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<div className="grid lg:grid-cols-3 gap-6">
|
|
119
|
+
{/* Sidebar */}
|
|
120
|
+
<div className="lg:col-span-1">
|
|
121
|
+
<div className="card border-2 border-gray-300 sticky top-4">
|
|
122
|
+
<div className="flex items-center mb-4">
|
|
123
|
+
<svg className="w-6 h-6 text-primary mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
124
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" />
|
|
125
|
+
</svg>
|
|
126
|
+
<h2 className="text-2xl font-bold text-gray-900">Browse Examples</h2>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{/* Search */}
|
|
130
|
+
<div className="relative mb-4">
|
|
131
|
+
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
|
132
|
+
<svg className="h-5 w-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
133
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
|
|
134
|
+
</svg>
|
|
135
|
+
</div>
|
|
136
|
+
<input
|
|
137
|
+
type="search"
|
|
138
|
+
placeholder="Search examples..."
|
|
139
|
+
value={searchQuery}
|
|
140
|
+
onChange={(e) => handleSearchChange(e.target.value)}
|
|
141
|
+
className="w-full pl-10 pr-3 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary text-base"
|
|
142
|
+
aria-label="Search examples"
|
|
143
|
+
/>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
{/* Category Filter */}
|
|
147
|
+
<div className="relative mb-4">
|
|
148
|
+
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
|
149
|
+
<svg className="h-5 w-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
150
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z" />
|
|
151
|
+
</svg>
|
|
152
|
+
</div>
|
|
153
|
+
<select
|
|
154
|
+
value={filter}
|
|
155
|
+
onChange={(e) => handleFilterChange(e.target.value)}
|
|
156
|
+
className="w-full pl-10 pr-3 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary text-base appearance-none bg-white"
|
|
157
|
+
>
|
|
158
|
+
<option value="all">All Categories ({filteredExamples.length})</option>
|
|
159
|
+
{categories.map((cat) => (
|
|
160
|
+
<option key={cat} value={cat}>
|
|
161
|
+
{cat} ({examples.filter(ex => ex.category === cat).length})
|
|
162
|
+
</option>
|
|
163
|
+
))}
|
|
164
|
+
</select>
|
|
165
|
+
</div>
|
|
166
|
+
|
|
167
|
+
{/* Results Count */}
|
|
168
|
+
<div className="mb-3 px-2">
|
|
169
|
+
<span className="text-sm font-semibold text-gray-700">
|
|
170
|
+
{filteredExamples.length} {filteredExamples.length === 1 ? 'example' : 'examples'} found
|
|
171
|
+
</span>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
{/* Example List */}
|
|
175
|
+
<div className="space-y-2 max-h-96 overflow-y-auto pr-2">
|
|
176
|
+
{filteredExamples.map((example) => (
|
|
177
|
+
<button
|
|
178
|
+
key={example.path}
|
|
179
|
+
onClick={() => handleSelectExample(example)}
|
|
180
|
+
className={`w-full text-left px-4 py-3 rounded-lg text-sm transition-all border-2 ${
|
|
181
|
+
selectedExample?.path === example.path
|
|
182
|
+
? 'bg-gradient-to-r from-primary to-primary-dark text-white border-primary shadow-md'
|
|
183
|
+
: 'bg-white border-gray-200 hover:border-primary/50 hover:shadow-md'
|
|
184
|
+
}`}
|
|
185
|
+
>
|
|
186
|
+
<div className="font-bold mb-1 truncate">{example.name}</div>
|
|
187
|
+
<div
|
|
188
|
+
className={`text-xs truncate flex items-center ${
|
|
189
|
+
selectedExample?.path === example.path
|
|
190
|
+
? 'text-white/80'
|
|
191
|
+
: 'text-gray-500'
|
|
192
|
+
}`}
|
|
193
|
+
>
|
|
194
|
+
<svg className="w-3 h-3 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
195
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z" />
|
|
196
|
+
</svg>
|
|
197
|
+
{example.category}
|
|
198
|
+
</div>
|
|
199
|
+
</button>
|
|
200
|
+
))}
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
{/* Main Content */}
|
|
206
|
+
<div className="lg:col-span-2">
|
|
207
|
+
{selectedExample ? (
|
|
208
|
+
<div className="card border-2 border-gray-300 shadow-lg">
|
|
209
|
+
<div className="flex flex-col md:flex-row md:items-center justify-between mb-6 gap-4">
|
|
210
|
+
<div className="flex-1">
|
|
211
|
+
<div className="flex items-center mb-2">
|
|
212
|
+
<svg className="w-6 h-6 text-primary mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
213
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
|
|
214
|
+
</svg>
|
|
215
|
+
<h2 className="text-3xl font-bold text-gray-900">{selectedExample.name}</h2>
|
|
216
|
+
</div>
|
|
217
|
+
<div className="flex items-center gap-3 text-sm">
|
|
218
|
+
<span className="flex items-center text-gray-600">
|
|
219
|
+
<svg className="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
220
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" />
|
|
221
|
+
</svg>
|
|
222
|
+
{selectedExample.path}
|
|
223
|
+
</span>
|
|
224
|
+
<span className="text-gray-400">•</span>
|
|
225
|
+
<span className="inline-flex items-center px-3 py-1 rounded-full text-xs font-semibold bg-primary/10 text-primary border border-primary/20">
|
|
226
|
+
{selectedExample.category}
|
|
227
|
+
</span>
|
|
228
|
+
<span className="text-gray-400">•</span>
|
|
229
|
+
<span className="text-gray-600">{selectedExample.content.split('\n').length} lines</span>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
<button
|
|
233
|
+
onClick={() => copyToClipboard(selectedExample.content)}
|
|
234
|
+
className="bg-gradient-to-r from-primary to-primary-dark text-white px-6 py-3 rounded-lg font-medium hover:shadow-lg transition-all flex items-center gap-2"
|
|
235
|
+
aria-label="Copy example code to clipboard"
|
|
236
|
+
title="Copy code"
|
|
237
|
+
>
|
|
238
|
+
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
239
|
+
<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" />
|
|
240
|
+
</svg>
|
|
241
|
+
Copy Code
|
|
242
|
+
</button>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
245
|
+
<div className="border-2 border-gray-300 rounded-xl overflow-hidden shadow-md">
|
|
246
|
+
<SyntaxHighlighter
|
|
247
|
+
language={getLanguage(selectedExample.name)}
|
|
248
|
+
style={vscDarkPlus}
|
|
249
|
+
customStyle={{
|
|
250
|
+
margin: 0,
|
|
251
|
+
borderRadius: 0,
|
|
252
|
+
fontSize: '15px',
|
|
253
|
+
padding: '1.5rem',
|
|
254
|
+
}}
|
|
255
|
+
showLineNumbers
|
|
256
|
+
wrapLines
|
|
257
|
+
>
|
|
258
|
+
{selectedExample.content}
|
|
259
|
+
</SyntaxHighlighter>
|
|
260
|
+
</div>
|
|
261
|
+
|
|
262
|
+
{/* Quick Actions */}
|
|
263
|
+
<div className="mt-6 bg-gradient-to-br from-blue-50 to-cyan-50 rounded-xl p-5 border border-blue-200">
|
|
264
|
+
<h3 className="font-bold text-blue-900 mb-3 flex items-center">
|
|
265
|
+
<svg className="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
266
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
|
|
267
|
+
</svg>
|
|
268
|
+
Quick Actions
|
|
269
|
+
</h3>
|
|
270
|
+
<div className="grid md:grid-cols-2 gap-3">
|
|
271
|
+
<a href={`/playground?source=examples&example=${encodeURIComponent(selectedExample.name)}`} className="bg-white border-2 border-blue-200 rounded-lg p-3 hover:border-blue-400 hover:shadow-md transition-all">
|
|
272
|
+
<div className="font-semibold text-blue-900">✏️ Try in Playground</div>
|
|
273
|
+
<div className="text-xs text-gray-600 mt-1">Test and modify this example</div>
|
|
274
|
+
</a>
|
|
275
|
+
<a href="/schema#components" className="bg-white border-2 border-blue-200 rounded-lg p-3 hover:border-blue-400 hover:shadow-md transition-all">
|
|
276
|
+
<div className="font-semibold text-blue-900">📖 View Schema Reference</div>
|
|
277
|
+
<div className="text-xs text-gray-600 mt-1">Learn about all fields</div>
|
|
278
|
+
</a>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
) : (
|
|
283
|
+
<div className="card border-2 border-dashed border-gray-300 text-center py-20">
|
|
284
|
+
<div className="text-6xl mb-4">👈</div>
|
|
285
|
+
<p className="text-gray-600 text-lg font-semibold mb-2">Select an example to view</p>
|
|
286
|
+
<p className="text-gray-500">Choose from {examples.length} examples on the left</p>
|
|
287
|
+
</div>
|
|
288
|
+
)}
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import Link from 'next/link';
|
|
2
|
+
|
|
3
|
+
export function Footer() {
|
|
4
|
+
return (
|
|
5
|
+
<footer className="bg-gray-900 text-gray-300 py-12 px-4">
|
|
6
|
+
<div className="container mx-auto max-w-6xl">
|
|
7
|
+
<div className="grid md:grid-cols-4 gap-8 mb-8">
|
|
8
|
+
<div>
|
|
9
|
+
<h3 className="text-white font-semibold mb-4">Open Standard Agents</h3>
|
|
10
|
+
<p className="text-sm">
|
|
11
|
+
Industry Standard for Agent Orchestration. The vendor-neutral specification for multi-agent systems.
|
|
12
|
+
</p>
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
<h4 className="text-white font-semibold mb-4">Documentation</h4>
|
|
16
|
+
<ul className="space-y-2 text-sm">
|
|
17
|
+
<li>
|
|
18
|
+
<Link href="/docs/getting-started" className="hover:text-white transition-colors">
|
|
19
|
+
Getting Started
|
|
20
|
+
</Link>
|
|
21
|
+
</li>
|
|
22
|
+
<li>
|
|
23
|
+
<Link href="/docs" className="hover:text-white transition-colors">
|
|
24
|
+
Full Documentation
|
|
25
|
+
</Link>
|
|
26
|
+
</li>
|
|
27
|
+
<li>
|
|
28
|
+
<Link href="/schema" className="hover:text-white transition-colors">
|
|
29
|
+
Schema Reference
|
|
30
|
+
</Link>
|
|
31
|
+
</li>
|
|
32
|
+
</ul>
|
|
33
|
+
</div>
|
|
34
|
+
<div>
|
|
35
|
+
<h4 className="text-white font-semibold mb-4">Resources</h4>
|
|
36
|
+
<ul className="space-y-2 text-sm">
|
|
37
|
+
<li>
|
|
38
|
+
<Link href="/examples" className="hover:text-white transition-colors">
|
|
39
|
+
Examples
|
|
40
|
+
</Link>
|
|
41
|
+
</li>
|
|
42
|
+
<li>
|
|
43
|
+
<Link href="/playground" className="hover:text-white transition-colors">
|
|
44
|
+
Playground
|
|
45
|
+
</Link>
|
|
46
|
+
</li>
|
|
47
|
+
<li>
|
|
48
|
+
<Link href="/blog" className="hover:text-white transition-colors">
|
|
49
|
+
Blog
|
|
50
|
+
</Link>
|
|
51
|
+
</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</div>
|
|
54
|
+
<div>
|
|
55
|
+
<h4 className="text-white font-semibold mb-4">Community</h4>
|
|
56
|
+
<ul className="space-y-2 text-sm">
|
|
57
|
+
<li>
|
|
58
|
+
<a
|
|
59
|
+
href="https://github.com/blueflyio/openstandardagents"
|
|
60
|
+
target="_blank"
|
|
61
|
+
rel="noopener noreferrer"
|
|
62
|
+
className="hover:text-white transition-colors flex items-center gap-2"
|
|
63
|
+
>
|
|
64
|
+
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24">
|
|
65
|
+
<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" />
|
|
66
|
+
</svg>
|
|
67
|
+
GitHub
|
|
68
|
+
</a>
|
|
69
|
+
</li>
|
|
70
|
+
<li>
|
|
71
|
+
<a
|
|
72
|
+
href="https://github.com/blueflyio/openstandardagents/issues"
|
|
73
|
+
target="_blank"
|
|
74
|
+
rel="noopener noreferrer"
|
|
75
|
+
className="hover:text-white transition-colors"
|
|
76
|
+
>
|
|
77
|
+
Issues
|
|
78
|
+
</a>
|
|
79
|
+
</li>
|
|
80
|
+
<li>
|
|
81
|
+
<a
|
|
82
|
+
href="https://www.npmjs.com/package/@bluefly/openstandardagents"
|
|
83
|
+
target="_blank"
|
|
84
|
+
rel="noopener noreferrer"
|
|
85
|
+
className="hover:text-white transition-colors"
|
|
86
|
+
>
|
|
87
|
+
npm Package
|
|
88
|
+
</a>
|
|
89
|
+
</li>
|
|
90
|
+
</ul>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
<div className="border-t border-gray-700 pt-8 text-sm text-center">
|
|
94
|
+
<p>
|
|
95
|
+
© {new Date().getFullYear()} Open Standard Agents Organization. Licensed under{' '}
|
|
96
|
+
<a
|
|
97
|
+
href="https://www.apache.org/licenses/LICENSE-2.0"
|
|
98
|
+
target="_blank"
|
|
99
|
+
rel="noopener noreferrer"
|
|
100
|
+
className="hover:text-white transition-colors"
|
|
101
|
+
>
|
|
102
|
+
Apache 2.0
|
|
103
|
+
</a>
|
|
104
|
+
.
|
|
105
|
+
</p>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</footer>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|