@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.
Files changed (371) hide show
  1. package/.env.example +41 -0
  2. package/.eslintrc.cjs +43 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
  4. package/.github/dependabot.yml +58 -0
  5. package/.github/workflows/ci.yml +154 -0
  6. package/.github/workflows/codeql.yml +41 -0
  7. package/.github/workflows/dependabot-auto-merge.yml +28 -0
  8. package/.github/workflows/release.yml +103 -0
  9. package/.prettierignore +7 -0
  10. package/.prettierrc.json +10 -0
  11. package/.redocly.yaml +9 -0
  12. package/.releaserc.json +84 -0
  13. package/.releaserc.json.disabled +81 -0
  14. package/CHANGELOG.md +152 -0
  15. package/CONTRIBUTING.md +249 -0
  16. package/LICENSE +190 -0
  17. package/README.md +280 -0
  18. package/bin/ossa +8 -0
  19. package/bin/validate-ossa-0.2.2.ts +244 -0
  20. package/dist/di-container.d.ts +18 -0
  21. package/dist/di-container.d.ts.map +1 -0
  22. package/dist/di-container.js +43 -0
  23. package/dist/di-container.js.map +1 -0
  24. package/dist/index.d.ts +13 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +17 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/repositories/manifest.repository.d.ts +26 -0
  29. package/dist/repositories/manifest.repository.d.ts.map +1 -0
  30. package/dist/repositories/manifest.repository.js +90 -0
  31. package/dist/repositories/manifest.repository.js.map +1 -0
  32. package/dist/repositories/schema.repository.d.ts +30 -0
  33. package/dist/repositories/schema.repository.d.ts.map +1 -0
  34. package/dist/repositories/schema.repository.js +143 -0
  35. package/dist/repositories/schema.repository.js.map +1 -0
  36. package/dist/services/generation.service.d.ts +54 -0
  37. package/dist/services/generation.service.d.ts.map +1 -0
  38. package/dist/services/generation.service.js +298 -0
  39. package/dist/services/generation.service.js.map +1 -0
  40. package/dist/services/migration.service.d.ts +30 -0
  41. package/dist/services/migration.service.d.ts.map +1 -0
  42. package/dist/services/migration.service.js +231 -0
  43. package/dist/services/migration.service.js.map +1 -0
  44. package/dist/services/runtime/openai.adapter.d.ts +94 -0
  45. package/dist/services/runtime/openai.adapter.d.ts.map +1 -0
  46. package/dist/services/runtime/openai.adapter.js +209 -0
  47. package/dist/services/runtime/openai.adapter.js.map +1 -0
  48. package/dist/services/validation.service.d.ts +45 -0
  49. package/dist/services/validation.service.d.ts.map +1 -0
  50. package/dist/services/validation.service.js +362 -0
  51. package/dist/services/validation.service.js.map +1 -0
  52. package/dist/services/validators/anthropic.validator.d.ts +9 -0
  53. package/dist/services/validators/anthropic.validator.d.ts.map +1 -0
  54. package/dist/services/validators/anthropic.validator.js +105 -0
  55. package/dist/services/validators/anthropic.validator.js.map +1 -0
  56. package/dist/services/validators/autogen.validator.d.ts +9 -0
  57. package/dist/services/validators/autogen.validator.d.ts.map +1 -0
  58. package/dist/services/validators/autogen.validator.js +111 -0
  59. package/dist/services/validators/autogen.validator.js.map +1 -0
  60. package/dist/services/validators/crewai.validator.d.ts +9 -0
  61. package/dist/services/validators/crewai.validator.d.ts.map +1 -0
  62. package/dist/services/validators/crewai.validator.js +117 -0
  63. package/dist/services/validators/crewai.validator.js.map +1 -0
  64. package/dist/services/validators/cursor.validator.d.ts +9 -0
  65. package/dist/services/validators/cursor.validator.d.ts.map +1 -0
  66. package/dist/services/validators/cursor.validator.js +88 -0
  67. package/dist/services/validators/cursor.validator.js.map +1 -0
  68. package/dist/services/validators/index.d.ts +15 -0
  69. package/dist/services/validators/index.d.ts.map +1 -0
  70. package/dist/services/validators/index.js +15 -0
  71. package/dist/services/validators/index.js.map +1 -0
  72. package/dist/services/validators/langchain.validator.d.ts +9 -0
  73. package/dist/services/validators/langchain.validator.d.ts.map +1 -0
  74. package/dist/services/validators/langchain.validator.js +103 -0
  75. package/dist/services/validators/langchain.validator.js.map +1 -0
  76. package/dist/services/validators/langflow.validator.d.ts +9 -0
  77. package/dist/services/validators/langflow.validator.d.ts.map +1 -0
  78. package/dist/services/validators/langflow.validator.js +92 -0
  79. package/dist/services/validators/langflow.validator.js.map +1 -0
  80. package/dist/services/validators/langgraph.validator.d.ts +9 -0
  81. package/dist/services/validators/langgraph.validator.d.ts.map +1 -0
  82. package/dist/services/validators/langgraph.validator.js +123 -0
  83. package/dist/services/validators/langgraph.validator.js.map +1 -0
  84. package/dist/services/validators/llamaindex.validator.d.ts +9 -0
  85. package/dist/services/validators/llamaindex.validator.d.ts.map +1 -0
  86. package/dist/services/validators/llamaindex.validator.js +121 -0
  87. package/dist/services/validators/llamaindex.validator.js.map +1 -0
  88. package/dist/services/validators/openai.validator.d.ts +9 -0
  89. package/dist/services/validators/openai.validator.d.ts.map +1 -0
  90. package/dist/services/validators/openai.validator.js +126 -0
  91. package/dist/services/validators/openai.validator.js.map +1 -0
  92. package/dist/services/validators/vercel-ai.validator.d.ts +9 -0
  93. package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -0
  94. package/dist/services/validators/vercel-ai.validator.js +99 -0
  95. package/dist/services/validators/vercel-ai.validator.js.map +1 -0
  96. package/dist/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
  97. package/dist/spec/v0.1.9/ecosystem-compliance.json +235 -0
  98. package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
  99. package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
  100. package/dist/spec/v0.1.9/reasoning-compliance.json +654 -0
  101. package/dist/spec/v0.2.2/kagent-enhancements.json +395 -0
  102. package/dist/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
  103. package/dist/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
  104. package/dist/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
  105. package/dist/spec/v0.2.3/CHANGELOG.md +176 -0
  106. package/dist/spec/v0.2.3/README.md +154 -0
  107. package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
  108. package/dist/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
  109. package/dist/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
  110. package/dist/spec/v0.2.4-dev/CHANGELOG.md +403 -0
  111. package/dist/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  112. package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
  113. package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
  114. package/dist/spec/v0.2.5-dev/CHANGELOG.md +171 -0
  115. package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
  116. package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
  117. package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
  118. package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
  119. package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
  120. package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
  121. package/dist/types/index.d.ts +178 -0
  122. package/dist/types/index.d.ts.map +1 -0
  123. package/dist/types/index.js +6 -0
  124. package/dist/types/index.js.map +1 -0
  125. package/dist/types/openapi-extensions.d.ts +164 -0
  126. package/dist/types/openapi-extensions.d.ts.map +1 -0
  127. package/dist/types/openapi-extensions.js +6 -0
  128. package/dist/types/openapi-extensions.js.map +1 -0
  129. package/docs/OSSA-COMPLIANT-BADGE.md +248 -0
  130. package/docs/README.md +31 -0
  131. package/docs/VERSIONING.md +284 -0
  132. package/docs/agent-openapi-spec.yml +942 -0
  133. package/docs/getting-started.md +87 -0
  134. package/docs/migration/general-agent-schema.yml +255 -0
  135. package/docs/migration/migration-manifest.json +64 -0
  136. package/docs/openapi-extensions.md +930 -0
  137. package/docs/schemas/openapi-extensions.schema.json +486 -0
  138. package/examples/adk-integration/code-review-workflow.yml +136 -0
  139. package/examples/adk-integration/customer-support.yml +263 -0
  140. package/examples/adk-integration/data-pipeline.yml +173 -0
  141. package/examples/advanced/patterns/compliance-context-production.json +53 -0
  142. package/examples/advanced/patterns/model-router.ts +274 -0
  143. package/examples/advanced/patterns/smart-model-routing.ts +248 -0
  144. package/examples/advanced/workflows/hybrid-model-strategy.yaml +232 -0
  145. package/examples/agent-manifests/critics/critic-agent.yaml +149 -0
  146. package/examples/agent-manifests/governors/governor-agent.yaml +128 -0
  147. package/examples/agent-manifests/integrators/integrator-agent.yaml +103 -0
  148. package/examples/agent-manifests/judges/judge-agent.yaml +153 -0
  149. package/examples/agent-manifests/monitors/monitor-agent.yaml +122 -0
  150. package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +247 -0
  151. package/examples/agent-manifests/sample-compliant-agent.yaml +147 -0
  152. package/examples/agent-manifests/workers/worker-agent.yaml +82 -0
  153. package/examples/anthropic/claude-assistant.ossa.json +45 -0
  154. package/examples/architecture/model-configuration/ollama-integration.ts +110 -0
  155. package/examples/autogen/multi-agent.ossa.json +37 -0
  156. package/examples/bridge-configurations.yaml +346 -0
  157. package/examples/bridges/Dockerfile.production +87 -0
  158. package/examples/bridges/__pycache__/aiflow-bridge-enhanced.cpython-313.pyc +0 -0
  159. package/examples/bridges/__pycache__/aiflow-phoenix-tracing.cpython-313.pyc +0 -0
  160. package/examples/bridges/__pycache__/test_aiflow_integration.cpython-313.pyc +0 -0
  161. package/examples/bridges/aiflow-bridge-enhanced.py +462 -0
  162. package/examples/bridges/aiflow-bridge-example.yml +310 -0
  163. package/examples/bridges/aiflow-phoenix-tracing.py +310 -0
  164. package/examples/bridges/aiflow-registration-api.openapi.yml +439 -0
  165. package/examples/bridges/k8s/configmap.yaml +121 -0
  166. package/examples/bridges/k8s/deployment-simple.yaml +34 -0
  167. package/examples/bridges/k8s/deployment.yaml +275 -0
  168. package/examples/bridges/k8s/hpa.yaml +126 -0
  169. package/examples/bridges/k8s/ingress.yaml +155 -0
  170. package/examples/bridges/kagent-bridge-example.yml +94 -0
  171. package/examples/bridges/load-tests/Dockerfile +28 -0
  172. package/examples/bridges/load-tests/k6-load-test.js +302 -0
  173. package/examples/bridges/load-tests/requirements.txt +20 -0
  174. package/examples/bridges/loadtest/k6-scenarios.js +270 -0
  175. package/examples/bridges/phase4/SLO-SLA.yaml +249 -0
  176. package/examples/bridges/phase4/chaos-tests.yaml +226 -0
  177. package/examples/bridges/requirements.txt +24 -0
  178. package/examples/bridges/test_aiflow_integration.py +341 -0
  179. package/examples/common_npm/agent-router.ossa.yaml +182 -0
  180. package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +60 -0
  181. package/examples/compliance-agent.yml +155 -0
  182. package/examples/crewai/research-team.ossa.json +36 -0
  183. package/examples/cursor/code-review-agent.ossa.json +47 -0
  184. package/examples/drupal/gitlab-ml-recommender.ossa.yaml +609 -0
  185. package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +68 -0
  186. package/examples/enterprise/agent.yml +452 -0
  187. package/examples/extensions/drupal-v1.yml +266 -0
  188. package/examples/extensions/kagent-v1.yml +167 -0
  189. package/examples/getting-started/hello-world-complete.ossa.yaml +266 -0
  190. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +376 -0
  191. package/examples/kagent/README.md +31 -0
  192. package/examples/kagent/compliance-validator.ossa.yaml +111 -0
  193. package/examples/kagent/cost-optimizer.ossa.yaml +93 -0
  194. package/examples/kagent/documentation-agent.ossa.yaml +91 -0
  195. package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +269 -0
  196. package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +106 -0
  197. package/examples/kagent/k8s-troubleshooter.ossa.yaml +257 -0
  198. package/examples/kagent/security-scanner.ossa.yaml +140 -0
  199. package/examples/langchain/chain-agent.ossa.json +42 -0
  200. package/examples/langflow/workflow-agent.ossa.json +39 -0
  201. package/examples/langgraph/state-machine-agent.ossa.json +59 -0
  202. package/examples/llamaindex/rag-agent.ossa.json +41 -0
  203. package/examples/migration-guides/from-langchain-to-ossa.yaml +309 -0
  204. package/examples/minimal/agent.yml +152 -0
  205. package/examples/minimal/openapi.yaml +95 -0
  206. package/examples/openai/swarm-agent.ossa.json +59 -0
  207. package/examples/openapi-extensions/README.md +87 -0
  208. package/examples/openapi-extensions/minimal-agent-api.openapi.yml +288 -0
  209. package/examples/openapi-extensions/orchestrator-agent-api.openapi.yml +633 -0
  210. package/examples/openapi-extensions/worker-agent-api.openapi.yml +533 -0
  211. package/examples/production/agent.yml +713 -0
  212. package/examples/production/document-analyzer-openai.yml +134 -0
  213. package/examples/quickstart/support-agent.ossa.yaml +59 -0
  214. package/examples/service-registry-usage.ts +423 -0
  215. package/examples/spec-examples/audit-agent.yml +147 -0
  216. package/examples/spec-examples/chat-agent.yml +189 -0
  217. package/examples/spec-examples/compliance-agent.yml +204 -0
  218. package/examples/spec-examples/data-processing-agent.yml +132 -0
  219. package/examples/spec-examples/development-agent.yml +138 -0
  220. package/examples/spec-examples/edge-agent.yml +101 -0
  221. package/examples/spec-examples/integration-agent.yml +129 -0
  222. package/examples/spec-examples/monitoring-agent.yml +130 -0
  223. package/examples/spec-examples/serverless-agent.yml +82 -0
  224. package/examples/spec-examples/workflow-agent.yml +223 -0
  225. package/examples/templates/ossa-compliance.yaml +56 -0
  226. package/examples/typescript/advanced/demo-registry.ts +168 -0
  227. package/examples/typescript/mcpb-agent-example.ts +358 -0
  228. package/examples/vercel/edge-agent.ossa.json +43 -0
  229. package/infrastructure/docker-compose.yml +33 -0
  230. package/junit.xml +1 -0
  231. package/openapi/drupal-agent-api.openapi.yaml +348 -0
  232. package/openapi/gitlab-orchestrator.openapi.yaml +330 -0
  233. package/openapi/helm-generator.openapi.yaml +389 -0
  234. package/openapi/ossa-core-api.openapi.yaml +1448 -0
  235. package/openapi/ossa-registry-api.openapi.yaml +980 -0
  236. package/openapi/ossa-registry.openapi.yaml +782 -0
  237. package/openapi/self-evolving-ecosystem.openapi.yaml +1530 -0
  238. package/openapi/unified-agent-gateway.openapi.yaml +833 -0
  239. package/ossa-website-swarm-tasks.json +105 -0
  240. package/package.json +132 -0
  241. package/release.config.js +64 -0
  242. package/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
  243. package/spec/v0.1.9/ecosystem-compliance.json +235 -0
  244. package/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
  245. package/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
  246. package/spec/v0.1.9/reasoning-compliance.json +654 -0
  247. package/spec/v0.2.2/kagent-enhancements.json +395 -0
  248. package/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
  249. package/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
  250. package/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
  251. package/spec/v0.2.3/CHANGELOG.md +176 -0
  252. package/spec/v0.2.3/README.md +154 -0
  253. package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
  254. package/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
  255. package/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
  256. package/spec/v0.2.4-dev/CHANGELOG.md +403 -0
  257. package/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  258. package/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
  259. package/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
  260. package/spec/v0.2.5-dev/CHANGELOG.md +171 -0
  261. package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
  262. package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
  263. package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
  264. package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
  265. package/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
  266. package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
  267. package/test-results.xml +1 -0
  268. package/website/.lighthouserc.js +20 -0
  269. package/website/.prettierrc +10 -0
  270. package/website/Dockerfile +17 -0
  271. package/website/app/about/page.tsx +295 -0
  272. package/website/app/api/validate/route.ts +88 -0
  273. package/website/app/blog/[slug]/page.tsx +167 -0
  274. package/website/app/blog/page.tsx +162 -0
  275. package/website/app/docs/[[...slug]]/page.tsx +349 -0
  276. package/website/app/docs/core-concepts/project-structure/page.tsx +349 -0
  277. package/website/app/ecosystem/page.tsx +375 -0
  278. package/website/app/examples/page.tsx +123 -0
  279. package/website/app/globals.css +108 -0
  280. package/website/app/layout.tsx +106 -0
  281. package/website/app/page.tsx +409 -0
  282. package/website/app/playground/page.tsx +507 -0
  283. package/website/app/robots.ts +19 -0
  284. package/website/app/rss.xml/route.ts +74 -0
  285. package/website/app/schema/page.tsx +970 -0
  286. package/website/app/sitemap.ts +56 -0
  287. package/website/app/specification/page.tsx +211 -0
  288. package/website/components/InstallCommand.tsx +96 -0
  289. package/website/components/Logo.tsx +24 -0
  290. package/website/components/StructuredData.tsx +65 -0
  291. package/website/components/docs/DocsSearch.tsx +104 -0
  292. package/website/components/docs/DocsSidebar.tsx +118 -0
  293. package/website/components/docs/MarkdownContent.tsx +183 -0
  294. package/website/components/docs/VersionSelector.tsx +49 -0
  295. package/website/components/examples/ExamplesViewer.tsx +293 -0
  296. package/website/components/layout/Footer.tsx +111 -0
  297. package/website/components/layout/Header.tsx +170 -0
  298. package/website/components/schema/SchemaExplorer.tsx +213 -0
  299. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +285 -0
  300. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +209 -0
  301. package/website/content/blog/introducing-ossa-framework.md +328 -0
  302. package/website/content/blog/ossa-production-results.md +279 -0
  303. package/website/content/blog/welcome-to-ossa.md +43 -0
  304. package/website/content/blog/why-ai-agents-need-open-standard.md +98 -0
  305. package/website/content/docs/00-HOME.md +160 -0
  306. package/website/content/docs/AIFlow-Framework-Integration-with-OSSA.md +107 -0
  307. package/website/content/docs/OpenAPI-Extensions.md +498 -0
  308. package/website/content/docs/architecture/execution-flow.md +335 -0
  309. package/website/content/docs/architecture/multi-agent-systems.md +737 -0
  310. package/website/content/docs/architecture/overview.md +121 -0
  311. package/website/content/docs/architecture/stack-integration.md +461 -0
  312. package/website/content/docs/changelog.md +246 -0
  313. package/website/content/docs/contributing.md +599 -0
  314. package/website/content/docs/core-concepts/project-structure.md +348 -0
  315. package/website/content/docs/ecosystem/framework-support.md +821 -0
  316. package/website/content/docs/ecosystem/overview.md +366 -0
  317. package/website/content/docs/examples/Migration-Guides.md +214 -0
  318. package/website/content/docs/examples.md +71 -0
  319. package/website/content/docs/for-audiences/Enterprises.md +256 -0
  320. package/website/content/docs/for-audiences/Students-Researchers.md +122 -0
  321. package/website/content/docs/for-audiences/architects.md +224 -0
  322. package/website/content/docs/for-audiences/developers.md +220 -0
  323. package/website/content/docs/getting-started/5-minute-overview.md +85 -0
  324. package/website/content/docs/getting-started/Hello-World.md +184 -0
  325. package/website/content/docs/getting-started/first-agent.md +196 -0
  326. package/website/content/docs/getting-started/installation.md +155 -0
  327. package/website/content/docs/getting-started/running-agents.md +107 -0
  328. package/website/content/docs/integrations/aiflow.md +104 -0
  329. package/website/content/docs/integrations/drupal.md +105 -0
  330. package/website/content/docs/migration-guides/00-index.md +76 -0
  331. package/website/content/docs/migration-guides/README.md +133 -0
  332. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +1750 -0
  333. package/website/content/docs/migration-guides/crewai-to-ossa.md +274 -0
  334. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +2017 -0
  335. package/website/content/docs/migration-guides/index.md +133 -0
  336. package/website/content/docs/migration-guides/langchain-to-ossa.md +1714 -0
  337. package/website/content/docs/migration-guides/langflow-to-ossa.md +2075 -0
  338. package/website/content/docs/migration-guides/openai-to-ossa.md +1202 -0
  339. package/website/content/docs/openapi-extensions/examples.md +550 -0
  340. package/website/content/docs/openapi-extensions/index.md +495 -0
  341. package/website/content/docs/openapi-extensions/operation-extensions.md +398 -0
  342. package/website/content/docs/openapi-extensions/root-extensions.md +364 -0
  343. package/website/content/docs/pre-release/index.md +175 -0
  344. package/website/content/docs/quick-reference.md +17 -0
  345. package/website/content/docs/schema-reference/agent-spec.md +406 -0
  346. package/website/content/docs/schema-reference/autonomy.md +568 -0
  347. package/website/content/docs/schema-reference/constraints.md +543 -0
  348. package/website/content/docs/schema-reference/index.md +176 -0
  349. package/website/content/docs/schema-reference/llm-config.md +445 -0
  350. package/website/content/docs/schema-reference/observability.md +654 -0
  351. package/website/content/docs/schema-reference/ossa-manifest.md +309 -0
  352. package/website/content/docs/schema-reference/taxonomy.md +509 -0
  353. package/website/content/docs/schema-reference/tools.md +628 -0
  354. package/website/content/docs/templates/blog-post.md +43 -0
  355. package/website/content/docs/use-cases/00-index.md +395 -0
  356. package/website/content/docs/use-cases/cicd-code-review.md +1236 -0
  357. package/website/content/docs/use-cases/customer-support.md +1234 -0
  358. package/website/content/docs/use-cases/enterprise-compliance.md +1208 -0
  359. package/website/content/docs/use-cases/research-multi-agent.md +1161 -0
  360. package/website/lib/version.ts +18 -0
  361. package/website/next.config.js +17 -0
  362. package/website/next.config.ts +16 -0
  363. package/website/nginx.conf +32 -0
  364. package/website/package-lock.json +9145 -0
  365. package/website/package.json +53 -0
  366. package/website/postcss.config.js +7 -0
  367. package/website/postcss.config.mjs +9 -0
  368. package/website/scripts/sync-version.js +44 -0
  369. package/website/scripts/sync-wiki.ts +261 -0
  370. package/website/tailwind.config.js +58 -0
  371. 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
+