@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,507 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import dynamic from 'next/dynamic';
|
|
5
|
+
|
|
6
|
+
const MonacoEditor = dynamic(() => import('@monaco-editor/react'), {
|
|
7
|
+
ssr: false,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const exampleManifest = `apiVersion: ossa/v0.2.3
|
|
11
|
+
kind: Agent
|
|
12
|
+
|
|
13
|
+
metadata:
|
|
14
|
+
name: my-first-agent
|
|
15
|
+
version: 1.0.0
|
|
16
|
+
description: My first Open Standard Agents manifest
|
|
17
|
+
|
|
18
|
+
spec:
|
|
19
|
+
role: You are a helpful assistant
|
|
20
|
+
llm:
|
|
21
|
+
provider: openai
|
|
22
|
+
model: gpt-4
|
|
23
|
+
tools: []
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
const templates = {
|
|
27
|
+
simple: `apiVersion: ossa/v0.2.3
|
|
28
|
+
kind: Agent
|
|
29
|
+
|
|
30
|
+
metadata:
|
|
31
|
+
name: my-first-agent
|
|
32
|
+
version: 1.0.0
|
|
33
|
+
description: My first Open Standard Agents manifest
|
|
34
|
+
|
|
35
|
+
spec:
|
|
36
|
+
role: You are a helpful assistant
|
|
37
|
+
llm:
|
|
38
|
+
provider: openai
|
|
39
|
+
model: gpt-4
|
|
40
|
+
tools: []`,
|
|
41
|
+
|
|
42
|
+
withTools: `apiVersion: ossa/v0.2.3
|
|
43
|
+
kind: Agent
|
|
44
|
+
|
|
45
|
+
metadata:
|
|
46
|
+
name: agent-with-tools
|
|
47
|
+
version: 1.0.0
|
|
48
|
+
description: Agent with HTTP tools
|
|
49
|
+
|
|
50
|
+
spec:
|
|
51
|
+
role: You are a research assistant
|
|
52
|
+
llm:
|
|
53
|
+
provider: openai
|
|
54
|
+
model: gpt-4
|
|
55
|
+
tools:
|
|
56
|
+
- type: http
|
|
57
|
+
name: web_search
|
|
58
|
+
endpoint: https://api.search.com/search
|
|
59
|
+
method: GET`,
|
|
60
|
+
|
|
61
|
+
autonomous: `apiVersion: ossa/v0.2.3
|
|
62
|
+
kind: Agent
|
|
63
|
+
|
|
64
|
+
metadata:
|
|
65
|
+
name: autonomous-agent
|
|
66
|
+
version: 1.0.0
|
|
67
|
+
description: Agent with autonomy controls
|
|
68
|
+
|
|
69
|
+
spec:
|
|
70
|
+
role: You are an automated support agent
|
|
71
|
+
llm:
|
|
72
|
+
provider: anthropic
|
|
73
|
+
model: claude-3-sonnet
|
|
74
|
+
temperature: 0.7
|
|
75
|
+
tools:
|
|
76
|
+
- type: http
|
|
77
|
+
name: ticket_api
|
|
78
|
+
endpoint: https://api.tickets.com
|
|
79
|
+
autonomy:
|
|
80
|
+
level: L2
|
|
81
|
+
approval_required:
|
|
82
|
+
- delete_operations
|
|
83
|
+
human_in_loop:
|
|
84
|
+
notification_channels: [slack]`,
|
|
85
|
+
|
|
86
|
+
fullStack: `apiVersion: ossa/v0.2.3
|
|
87
|
+
kind: Agent
|
|
88
|
+
|
|
89
|
+
metadata:
|
|
90
|
+
name: full-stack-agent
|
|
91
|
+
version: 2.0.0
|
|
92
|
+
description: Complete agent with all features
|
|
93
|
+
labels:
|
|
94
|
+
team: engineering
|
|
95
|
+
environment: production
|
|
96
|
+
|
|
97
|
+
spec:
|
|
98
|
+
role: |
|
|
99
|
+
You are a senior DevOps engineer specializing in cloud infrastructure.
|
|
100
|
+
Automate deployments, monitor systems, and resolve incidents.
|
|
101
|
+
|
|
102
|
+
llm:
|
|
103
|
+
provider: openai
|
|
104
|
+
model: gpt-4-turbo
|
|
105
|
+
temperature: 0.3
|
|
106
|
+
max_tokens: 4000
|
|
107
|
+
|
|
108
|
+
tools:
|
|
109
|
+
- type: http
|
|
110
|
+
name: deploy_api
|
|
111
|
+
endpoint: https://api.deploy.io/v1/deploy
|
|
112
|
+
method: POST
|
|
113
|
+
auth:
|
|
114
|
+
type: bearer
|
|
115
|
+
- type: code
|
|
116
|
+
name: analyze_logs
|
|
117
|
+
language: python
|
|
118
|
+
allowed_libraries: [pandas]
|
|
119
|
+
|
|
120
|
+
taxonomy:
|
|
121
|
+
domain: engineering
|
|
122
|
+
subdomain: devops
|
|
123
|
+
use_case: automation
|
|
124
|
+
|
|
125
|
+
autonomy:
|
|
126
|
+
level: L3
|
|
127
|
+
approval_required:
|
|
128
|
+
- production_deploy
|
|
129
|
+
- delete_operations
|
|
130
|
+
|
|
131
|
+
observability:
|
|
132
|
+
logging:
|
|
133
|
+
level: info
|
|
134
|
+
include_prompts: true
|
|
135
|
+
metrics:
|
|
136
|
+
enabled: true
|
|
137
|
+
tracing:
|
|
138
|
+
enabled: true
|
|
139
|
+
|
|
140
|
+
extensions:
|
|
141
|
+
kagent:
|
|
142
|
+
mesh_discovery: true`
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export default function PlaygroundPage() {
|
|
146
|
+
const [code, setCode] = useState(templates.simple);
|
|
147
|
+
const [validationResult, setValidationResult] = useState<{
|
|
148
|
+
valid: boolean;
|
|
149
|
+
errors: Array<{ path: string; message: string }>;
|
|
150
|
+
} | null>(null);
|
|
151
|
+
const [isValidating, setIsValidating] = useState(false);
|
|
152
|
+
const [activeTemplate, setActiveTemplate] = useState('simple');
|
|
153
|
+
|
|
154
|
+
const handleValidate = async (): Promise<void> => {
|
|
155
|
+
setIsValidating(true);
|
|
156
|
+
try {
|
|
157
|
+
// For static export, we'll use a client-side validation approach
|
|
158
|
+
// Load schema and validate in browser
|
|
159
|
+
const schemaResponse = await fetch('/schemas/ossa-0.2.3.schema.json');
|
|
160
|
+
if (!schemaResponse.ok) {
|
|
161
|
+
throw new Error('Failed to load schema');
|
|
162
|
+
}
|
|
163
|
+
const schema = await schemaResponse.json();
|
|
164
|
+
|
|
165
|
+
// Simple validation - in production, use a proper JSON Schema validator
|
|
166
|
+
const parsed = code.includes('apiVersion:')
|
|
167
|
+
? (await import('yaml')).parse(code)
|
|
168
|
+
: JSON.parse(code);
|
|
169
|
+
|
|
170
|
+
// Basic validation checks
|
|
171
|
+
const errors: Array<{ path: string; message: string }> = [];
|
|
172
|
+
|
|
173
|
+
if (!parsed.apiVersion) {
|
|
174
|
+
errors.push({ path: '', message: 'Missing required field: apiVersion' });
|
|
175
|
+
}
|
|
176
|
+
if (!parsed.kind) {
|
|
177
|
+
errors.push({ path: '', message: 'Missing required field: kind' });
|
|
178
|
+
}
|
|
179
|
+
if (!parsed.metadata) {
|
|
180
|
+
errors.push({ path: '', message: 'Missing required field: metadata' });
|
|
181
|
+
}
|
|
182
|
+
if (!parsed.spec) {
|
|
183
|
+
errors.push({ path: '', message: 'Missing required field: spec' });
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
setValidationResult({
|
|
187
|
+
valid: errors.length === 0,
|
|
188
|
+
errors,
|
|
189
|
+
});
|
|
190
|
+
} catch (error) {
|
|
191
|
+
setValidationResult({
|
|
192
|
+
valid: false,
|
|
193
|
+
errors: [
|
|
194
|
+
{
|
|
195
|
+
path: '',
|
|
196
|
+
message: error instanceof Error ? error.message : 'Validation error',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
});
|
|
200
|
+
} finally {
|
|
201
|
+
setIsValidating(false);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const handleEditorChange = (value: string | undefined): void => {
|
|
206
|
+
setCode(value || '');
|
|
207
|
+
setValidationResult(null);
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const downloadManifest = () => {
|
|
211
|
+
const blob = new Blob([code], { type: 'text/yaml' });
|
|
212
|
+
const url = URL.createObjectURL(blob);
|
|
213
|
+
const a = document.createElement('a');
|
|
214
|
+
a.href = url;
|
|
215
|
+
a.download = 'agent.yaml';
|
|
216
|
+
a.click();
|
|
217
|
+
URL.revokeObjectURL(url);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
const copyToClipboard = () => {
|
|
221
|
+
navigator.clipboard.writeText(code);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const loadTemplate = (template: keyof typeof templates) => {
|
|
225
|
+
setCode(templates[template]);
|
|
226
|
+
setActiveTemplate(template);
|
|
227
|
+
setValidationResult(null);
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
return (
|
|
231
|
+
<>
|
|
232
|
+
{/* Hero Section */}
|
|
233
|
+
<div className="bg-gradient-to-br from-primary via-accent to-secondary text-white py-16 px-4">
|
|
234
|
+
<div className="container mx-auto max-w-6xl text-center">
|
|
235
|
+
<div className="inline-flex items-center justify-center w-20 h-20 bg-white/20 backdrop-blur-sm rounded-full mb-6">
|
|
236
|
+
<svg className="w-10 h-10" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
237
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14 10l-2 1m0 0l-2-1m2 1v2.5M20 7l-2 1m2-1l-2-1m2 1v2.5M14 4l-2-1-2 1M4 7l2-1M4 7l2 1M4 7v2.5M12 21l-2-1m2 1l2-1m-2 1v-2.5M6 18l-2-1v-2.5M18 18l2-1v-2.5" />
|
|
238
|
+
</svg>
|
|
239
|
+
</div>
|
|
240
|
+
<h1 className="text-5xl font-bold mb-4">OSSA Playground</h1>
|
|
241
|
+
<p className="text-xl text-white/90 mb-2">
|
|
242
|
+
Write, validate, and test Open Standard Agents manifests in real-time
|
|
243
|
+
</p>
|
|
244
|
+
<p className="text-base text-white/80">
|
|
245
|
+
Interactive editor with live validation and multiple templates
|
|
246
|
+
</p>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
<div className="container mx-auto max-w-7xl px-4 py-12">
|
|
251
|
+
|
|
252
|
+
{/* Quick Actions Bar */}
|
|
253
|
+
<div className="mb-6 bg-gradient-to-r from-primary/5 to-secondary/5 rounded-xl p-4 border border-primary/20">
|
|
254
|
+
<div className="flex flex-wrap gap-3 items-center justify-between">
|
|
255
|
+
<div className="flex gap-3">
|
|
256
|
+
<button
|
|
257
|
+
onClick={handleValidate}
|
|
258
|
+
disabled={isValidating}
|
|
259
|
+
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 disabled:opacity-50"
|
|
260
|
+
>
|
|
261
|
+
{isValidating ? '⏳ Validating...' : '✓ Validate Manifest'}
|
|
262
|
+
</button>
|
|
263
|
+
<button
|
|
264
|
+
onClick={downloadManifest}
|
|
265
|
+
className="bg-white border-2 border-primary text-primary px-6 py-3 rounded-lg font-medium hover:bg-primary hover:text-white transition-all"
|
|
266
|
+
>
|
|
267
|
+
⬇️ Download YAML
|
|
268
|
+
</button>
|
|
269
|
+
<button
|
|
270
|
+
onClick={copyToClipboard}
|
|
271
|
+
className="bg-white border-2 border-secondary text-secondary px-6 py-3 rounded-lg font-medium hover:bg-secondary hover:text-white transition-all"
|
|
272
|
+
>
|
|
273
|
+
📋 Copy to Clipboard
|
|
274
|
+
</button>
|
|
275
|
+
</div>
|
|
276
|
+
<div className="flex gap-2 items-center">
|
|
277
|
+
<span className="text-sm text-gray-600 font-semibold">Lines: {code.split('\n').length}</span>
|
|
278
|
+
<span className="text-sm text-gray-400">|</span>
|
|
279
|
+
<span className="text-sm text-gray-600 font-semibold">Chars: {code.length}</span>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
|
|
284
|
+
{/* Template Selector */}
|
|
285
|
+
<div className="mb-6">
|
|
286
|
+
<h2 className="text-2xl font-bold mb-4 text-gray-900">📚 Quick Start Templates</h2>
|
|
287
|
+
<div className="grid md:grid-cols-4 gap-4">
|
|
288
|
+
<button
|
|
289
|
+
onClick={() => loadTemplate('simple')}
|
|
290
|
+
className={`p-4 rounded-xl border-2 text-left transition-all ${
|
|
291
|
+
activeTemplate === 'simple'
|
|
292
|
+
? 'border-primary bg-primary/5 shadow-md'
|
|
293
|
+
: 'border-gray-300 hover:border-primary/50 hover:shadow-md'
|
|
294
|
+
}`}
|
|
295
|
+
>
|
|
296
|
+
<div className="text-2xl mb-2">🚀</div>
|
|
297
|
+
<div className="font-bold mb-1">Simple Agent</div>
|
|
298
|
+
<div className="text-sm text-gray-600">Basic manifest structure</div>
|
|
299
|
+
</button>
|
|
300
|
+
|
|
301
|
+
<button
|
|
302
|
+
onClick={() => loadTemplate('withTools')}
|
|
303
|
+
className={`p-4 rounded-xl border-2 text-left transition-all ${
|
|
304
|
+
activeTemplate === 'withTools'
|
|
305
|
+
? 'border-primary bg-primary/5 shadow-md'
|
|
306
|
+
: 'border-gray-300 hover:border-primary/50 hover:shadow-md'
|
|
307
|
+
}`}
|
|
308
|
+
>
|
|
309
|
+
<div className="text-2xl mb-2">🔧</div>
|
|
310
|
+
<div className="font-bold mb-1">With Tools</div>
|
|
311
|
+
<div className="text-sm text-gray-600">HTTP API integration</div>
|
|
312
|
+
</button>
|
|
313
|
+
|
|
314
|
+
<button
|
|
315
|
+
onClick={() => loadTemplate('autonomous')}
|
|
316
|
+
className={`p-4 rounded-xl border-2 text-left transition-all ${
|
|
317
|
+
activeTemplate === 'autonomous'
|
|
318
|
+
? 'border-primary bg-primary/5 shadow-md'
|
|
319
|
+
: 'border-gray-300 hover:border-primary/50 hover:shadow-md'
|
|
320
|
+
}`}
|
|
321
|
+
>
|
|
322
|
+
<div className="text-2xl mb-2">🎯</div>
|
|
323
|
+
<div className="font-bold mb-1">Autonomous</div>
|
|
324
|
+
<div className="text-sm text-gray-600">With autonomy controls</div>
|
|
325
|
+
</button>
|
|
326
|
+
|
|
327
|
+
<button
|
|
328
|
+
onClick={() => loadTemplate('fullStack')}
|
|
329
|
+
className={`p-4 rounded-xl border-2 text-left transition-all ${
|
|
330
|
+
activeTemplate === 'fullStack'
|
|
331
|
+
? 'border-primary bg-primary/5 shadow-md'
|
|
332
|
+
: 'border-gray-300 hover:border-primary/50 hover:shadow-md'
|
|
333
|
+
}`}
|
|
334
|
+
>
|
|
335
|
+
<div className="text-2xl mb-2">⚡</div>
|
|
336
|
+
<div className="font-bold mb-1">Full Stack</div>
|
|
337
|
+
<div className="text-sm text-gray-600">Complete production setup</div>
|
|
338
|
+
</button>
|
|
339
|
+
</div>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<div className="grid lg:grid-cols-2 gap-6 mb-6">
|
|
343
|
+
<div className="card border-2 border-gray-300">
|
|
344
|
+
<div className="flex items-center justify-between mb-4">
|
|
345
|
+
<h2 className="text-2xl font-semibold">📝 Editor</h2>
|
|
346
|
+
<span className="text-sm bg-gray-100 px-3 py-1 rounded-full">YAML Format</span>
|
|
347
|
+
</div>
|
|
348
|
+
<div className="border-2 border-gray-300 rounded-lg overflow-hidden shadow-md" style={{ height: '600px' }}>
|
|
349
|
+
<MonacoEditor
|
|
350
|
+
height="600px"
|
|
351
|
+
defaultLanguage="yaml"
|
|
352
|
+
value={code}
|
|
353
|
+
onChange={handleEditorChange}
|
|
354
|
+
theme="vs-dark"
|
|
355
|
+
options={{
|
|
356
|
+
minimap: { enabled: false },
|
|
357
|
+
fontSize: 15,
|
|
358
|
+
wordWrap: 'on',
|
|
359
|
+
automaticLayout: true,
|
|
360
|
+
lineNumbers: 'on',
|
|
361
|
+
scrollBeyondLastLine: false,
|
|
362
|
+
}}
|
|
363
|
+
/>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
<div className="card border-2 border-gray-300">
|
|
368
|
+
<h2 className="text-2xl font-semibold mb-4">✓ Validation Results</h2>
|
|
369
|
+
|
|
370
|
+
{validationResult === null ? (
|
|
371
|
+
<div className="text-center py-16 bg-gradient-to-br from-gray-50 to-gray-100 rounded-xl border-2 border-dashed border-gray-300">
|
|
372
|
+
<div className="text-6xl mb-4">🔍</div>
|
|
373
|
+
<p className="text-gray-600 text-lg mb-2">Ready to validate</p>
|
|
374
|
+
<p className="text-gray-500 text-sm">Click "Validate Manifest" above to check your OSSA manifest</p>
|
|
375
|
+
</div>
|
|
376
|
+
) : validationResult.valid ? (
|
|
377
|
+
<div className="bg-gradient-to-br from-green-50 to-emerald-50 border-2 border-green-300 rounded-xl p-6 shadow-lg">
|
|
378
|
+
<div className="flex items-center mb-4">
|
|
379
|
+
<div className="w-12 h-12 bg-green-500 rounded-full flex items-center justify-center mr-4">
|
|
380
|
+
<svg
|
|
381
|
+
className="w-7 h-7 text-white"
|
|
382
|
+
fill="none"
|
|
383
|
+
stroke="currentColor"
|
|
384
|
+
viewBox="0 0 24 24"
|
|
385
|
+
>
|
|
386
|
+
<path
|
|
387
|
+
strokeLinecap="round"
|
|
388
|
+
strokeLinejoin="round"
|
|
389
|
+
strokeWidth={3}
|
|
390
|
+
d="M5 13l4 4L19 7"
|
|
391
|
+
/>
|
|
392
|
+
</svg>
|
|
393
|
+
</div>
|
|
394
|
+
<div>
|
|
395
|
+
<div className="text-2xl font-bold text-green-900 mb-1">
|
|
396
|
+
Manifest is Valid! ✓
|
|
397
|
+
</div>
|
|
398
|
+
<p className="text-base text-green-800">
|
|
399
|
+
Conforms to OSSA v0.2.3 specification
|
|
400
|
+
</p>
|
|
401
|
+
</div>
|
|
402
|
+
</div>
|
|
403
|
+
|
|
404
|
+
<div className="bg-white rounded-lg p-4 mt-4 border border-green-200">
|
|
405
|
+
<div className="text-sm font-semibold text-gray-700 mb-3">✓ All Checks Passed:</div>
|
|
406
|
+
<div className="space-y-2 text-sm text-gray-700">
|
|
407
|
+
<div className="flex items-center">
|
|
408
|
+
<span className="text-green-500 mr-2">✓</span>
|
|
409
|
+
Required fields present
|
|
410
|
+
</div>
|
|
411
|
+
<div className="flex items-center">
|
|
412
|
+
<span className="text-green-500 mr-2">✓</span>
|
|
413
|
+
Correct data types
|
|
414
|
+
</div>
|
|
415
|
+
<div className="flex items-center">
|
|
416
|
+
<span className="text-green-500 mr-2">✓</span>
|
|
417
|
+
Value constraints met
|
|
418
|
+
</div>
|
|
419
|
+
<div className="flex items-center">
|
|
420
|
+
<span className="text-green-500 mr-2">✓</span>
|
|
421
|
+
Schema compliance verified
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<div className="mt-4 pt-4 border-t border-green-200">
|
|
427
|
+
<p className="text-sm text-green-800 font-semibold mb-2">✅ Ready for deployment</p>
|
|
428
|
+
<p className="text-sm text-gray-700">
|
|
429
|
+
This manifest can be used with kAgent, LangChain, CrewAI, OpenAI, and other OSSA-compatible frameworks.
|
|
430
|
+
</p>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
) : (
|
|
434
|
+
<div className="bg-gradient-to-br from-red-50 to-pink-50 border-2 border-red-300 rounded-xl p-6 shadow-lg">
|
|
435
|
+
<div className="flex items-center mb-4">
|
|
436
|
+
<div className="w-12 h-12 bg-red-500 rounded-full flex items-center justify-center mr-4">
|
|
437
|
+
<svg
|
|
438
|
+
className="w-7 h-7 text-white"
|
|
439
|
+
fill="none"
|
|
440
|
+
stroke="currentColor"
|
|
441
|
+
viewBox="0 0 24 24"
|
|
442
|
+
>
|
|
443
|
+
<path
|
|
444
|
+
strokeLinecap="round"
|
|
445
|
+
strokeLinejoin="round"
|
|
446
|
+
strokeWidth={3}
|
|
447
|
+
d="M6 18L18 6M6 6l12 12"
|
|
448
|
+
/>
|
|
449
|
+
</svg>
|
|
450
|
+
</div>
|
|
451
|
+
<div>
|
|
452
|
+
<div className="text-2xl font-bold text-red-900 mb-1">
|
|
453
|
+
Validation Failed
|
|
454
|
+
</div>
|
|
455
|
+
<p className="text-base text-red-800">
|
|
456
|
+
{validationResult.errors.length} error{validationResult.errors.length !== 1 ? 's' : ''} found
|
|
457
|
+
</p>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
|
|
461
|
+
<div className="bg-white rounded-lg p-4 mt-4 border border-red-200 max-h-96 overflow-y-auto">
|
|
462
|
+
<div className="text-sm font-semibold text-gray-700 mb-3">Errors to fix:</div>
|
|
463
|
+
<div className="space-y-3">
|
|
464
|
+
{validationResult.errors.map((error, index) => (
|
|
465
|
+
<div key={index} className="border-l-4 border-red-400 pl-3 py-2">
|
|
466
|
+
<div className="font-bold text-red-900 text-sm mb-1">
|
|
467
|
+
{error.path ? `📍 ${error.path}` : '📍 Root level'}
|
|
468
|
+
</div>
|
|
469
|
+
<div className="text-gray-700 text-sm">{error.message}</div>
|
|
470
|
+
</div>
|
|
471
|
+
))}
|
|
472
|
+
</div>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
)}
|
|
476
|
+
|
|
477
|
+
{/* Help Section */}
|
|
478
|
+
<div className="mt-6 bg-gradient-to-br from-blue-50 to-cyan-50 rounded-xl p-5 border border-blue-200">
|
|
479
|
+
<h3 className="font-bold text-blue-900 mb-3 flex items-center">
|
|
480
|
+
<span className="text-xl mr-2">💡</span>
|
|
481
|
+
Need Help?
|
|
482
|
+
</h3>
|
|
483
|
+
<div className="space-y-2 text-sm">
|
|
484
|
+
<div className="bg-white rounded-lg p-3 border border-blue-100">
|
|
485
|
+
<strong className="text-blue-900">📖 View Schema Reference</strong>
|
|
486
|
+
<p className="text-gray-700 mt-1">Complete documentation of all fields</p>
|
|
487
|
+
<a href="/schema" className="text-blue-600 hover:underline mt-1 inline-block">Visit Schema Page →</a>
|
|
488
|
+
</div>
|
|
489
|
+
<div className="bg-white rounded-lg p-3 border border-blue-100">
|
|
490
|
+
<strong className="text-blue-900">📚 Browse Examples</strong>
|
|
491
|
+
<p className="text-gray-700 mt-1">58+ real-world agent manifests</p>
|
|
492
|
+
<a href="/examples" className="text-blue-600 hover:underline mt-1 inline-block">View Examples →</a>
|
|
493
|
+
</div>
|
|
494
|
+
<div className="bg-white rounded-lg p-3 border border-blue-100">
|
|
495
|
+
<strong className="text-blue-900">📖 Read Documentation</strong>
|
|
496
|
+
<p className="text-gray-700 mt-1">Complete guides and tutorials</p>
|
|
497
|
+
<a href="/docs" className="text-blue-600 hover:underline mt-1 inline-block">Read Docs →</a>
|
|
498
|
+
</div>
|
|
499
|
+
</div>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
</div>
|
|
504
|
+
</>
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MetadataRoute } from 'next';
|
|
2
|
+
|
|
3
|
+
export const dynamic = 'force-static';
|
|
4
|
+
|
|
5
|
+
export default function robots(): MetadataRoute.Robots {
|
|
6
|
+
const baseUrl = 'https://openstandardagents.org';
|
|
7
|
+
|
|
8
|
+
return {
|
|
9
|
+
rules: [
|
|
10
|
+
{
|
|
11
|
+
userAgent: '*',
|
|
12
|
+
allow: '/',
|
|
13
|
+
disallow: ['/api/', '/_next/'],
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
sitemap: `${baseUrl}/sitemap.xml`,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
|
|
5
|
+
export const dynamic = 'force-static';
|
|
6
|
+
|
|
7
|
+
function getAllPosts(): Array<{
|
|
8
|
+
slug: string;
|
|
9
|
+
title: string;
|
|
10
|
+
date: string;
|
|
11
|
+
author: string;
|
|
12
|
+
excerpt: string;
|
|
13
|
+
}> {
|
|
14
|
+
const blogDir = path.join(process.cwd(), '../../content/blog');
|
|
15
|
+
|
|
16
|
+
if (!fs.existsSync(blogDir)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const files = fs.readdirSync(blogDir);
|
|
21
|
+
return files
|
|
22
|
+
.filter((file) => file.endsWith('.md'))
|
|
23
|
+
.map((file) => {
|
|
24
|
+
const filePath = path.join(blogDir, file);
|
|
25
|
+
const fileContents = fs.readFileSync(filePath, 'utf8');
|
|
26
|
+
const { data } = matter(fileContents);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
slug: file.replace(/\.md$/, ''),
|
|
30
|
+
title: data.title || '',
|
|
31
|
+
date: data.date || '',
|
|
32
|
+
author: data.author || 'OSSA Team',
|
|
33
|
+
excerpt: data.excerpt || '',
|
|
34
|
+
};
|
|
35
|
+
})
|
|
36
|
+
.sort((a, b) => {
|
|
37
|
+
return new Date(b.date).getTime() - new Date(a.date).getTime();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function GET(): Promise<Response> {
|
|
42
|
+
const posts = getAllPosts();
|
|
43
|
+
const baseUrl = 'https://openstandardagents.org';
|
|
44
|
+
|
|
45
|
+
const rss = `<?xml version="1.0" encoding="UTF-8"?>
|
|
46
|
+
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
|
47
|
+
<channel>
|
|
48
|
+
<title>OSSA Blog</title>
|
|
49
|
+
<description>Latest news, updates, and insights about OSSA</description>
|
|
50
|
+
<link>${baseUrl}</link>
|
|
51
|
+
<atom:link href="${baseUrl}/rss.xml" rel="self" type="application/rss+xml"/>
|
|
52
|
+
<language>en-us</language>
|
|
53
|
+
${posts
|
|
54
|
+
.map(
|
|
55
|
+
(post) => `
|
|
56
|
+
<item>
|
|
57
|
+
<title>${post.title}</title>
|
|
58
|
+
<description>${post.excerpt}</description>
|
|
59
|
+
<link>${baseUrl}/blog/${post.slug}</link>
|
|
60
|
+
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
|
|
61
|
+
<author>${post.author}</author>
|
|
62
|
+
</item>`
|
|
63
|
+
)
|
|
64
|
+
.join('')}
|
|
65
|
+
</channel>
|
|
66
|
+
</rss>`;
|
|
67
|
+
|
|
68
|
+
return new Response(rss, {
|
|
69
|
+
headers: {
|
|
70
|
+
'Content-Type': 'application/xml',
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|