@bluefly/openstandardagents 0.2.4 → 0.2.5-RC

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 (355) hide show
  1. package/.cursorrules +84 -0
  2. package/.devfile.yaml +87 -0
  3. package/.env.example +25 -3
  4. package/.github/workflows/release.yml +1 -1
  5. package/.kiro/specs/agent-buildkit-templates/design.md +495 -0
  6. package/.kiro/specs/agent-buildkit-templates/requirements.md +165 -0
  7. package/.kiro/specs/kiro-ide-supercharger/README.md +202 -0
  8. package/.kiro/specs/kiro-ide-supercharger/design.md +1005 -0
  9. package/.kiro/specs/kiro-ide-supercharger/requirements.md +141 -0
  10. package/.kiro/specs/kiro-ide-supercharger/tasks.md +507 -0
  11. package/.kiro/specs/website-design-audit/design.md +679 -0
  12. package/.kiro/specs/website-design-audit/requirements.md +199 -0
  13. package/.releaserc.json +5 -4
  14. package/.version.json +6 -0
  15. package/CHANGELOG.md +140 -96
  16. package/CONTRIBUTING.md +23 -5
  17. package/README.md +121 -43
  18. package/bin/ossa +24 -3
  19. package/bin/ossa-validate-all +55 -0
  20. package/bin/ossa-version +23 -0
  21. package/bin/validate-ossa-0.2.4.ts +244 -0
  22. package/bin/validate-ossa-0.2.5-RC.ts +244 -0
  23. package/bin/validate-ossa.ts +273 -0
  24. package/dist/di-container.d.ts +1 -1
  25. package/dist/di-container.d.ts.map +1 -1
  26. package/dist/di-container.js.map +1 -1
  27. package/dist/repositories/schema.repository.d.ts +17 -2
  28. package/dist/repositories/schema.repository.d.ts.map +1 -1
  29. package/dist/repositories/schema.repository.js +96 -18
  30. package/dist/repositories/schema.repository.js.map +1 -1
  31. package/dist/services/generation.service.d.ts +7 -5
  32. package/dist/services/generation.service.d.ts.map +1 -1
  33. package/dist/services/generation.service.js +92 -44
  34. package/dist/services/generation.service.js.map +1 -1
  35. package/dist/services/gitlab-agent.service.d.ts +94 -0
  36. package/dist/services/gitlab-agent.service.d.ts.map +1 -0
  37. package/dist/services/gitlab-agent.service.js +162 -0
  38. package/dist/services/gitlab-agent.service.js.map +1 -0
  39. package/dist/services/migration.service.d.ts +3 -3
  40. package/dist/services/migration.service.d.ts.map +1 -1
  41. package/dist/services/migration.service.js +108 -61
  42. package/dist/services/migration.service.js.map +1 -1
  43. package/dist/services/release-automation/base-crud.service.d.ts +93 -0
  44. package/dist/services/release-automation/base-crud.service.d.ts.map +1 -0
  45. package/dist/services/release-automation/base-crud.service.js +68 -0
  46. package/dist/services/release-automation/base-crud.service.js.map +1 -0
  47. package/dist/services/release-automation/index.d.ts +12 -0
  48. package/dist/services/release-automation/index.d.ts.map +1 -0
  49. package/dist/services/release-automation/index.js +12 -0
  50. package/dist/services/release-automation/index.js.map +1 -0
  51. package/dist/services/release-automation/merge-request.service.d.ts +119 -0
  52. package/dist/services/release-automation/merge-request.service.d.ts.map +1 -0
  53. package/dist/services/release-automation/merge-request.service.js +212 -0
  54. package/dist/services/release-automation/merge-request.service.js.map +1 -0
  55. package/dist/services/release-automation/milestone.service.d.ts +104 -0
  56. package/dist/services/release-automation/milestone.service.d.ts.map +1 -0
  57. package/dist/services/release-automation/milestone.service.js +207 -0
  58. package/dist/services/release-automation/milestone.service.js.map +1 -0
  59. package/dist/services/release-automation/release.service.d.ts +118 -0
  60. package/dist/services/release-automation/release.service.d.ts.map +1 -0
  61. package/dist/services/release-automation/release.service.js +207 -0
  62. package/dist/services/release-automation/release.service.js.map +1 -0
  63. package/dist/services/release-automation/schemas/release.schema.d.ts +299 -0
  64. package/dist/services/release-automation/schemas/release.schema.d.ts.map +1 -0
  65. package/dist/services/release-automation/schemas/release.schema.js +269 -0
  66. package/dist/services/release-automation/schemas/release.schema.js.map +1 -0
  67. package/dist/services/release-automation/tag.service.d.ts +99 -0
  68. package/dist/services/release-automation/tag.service.d.ts.map +1 -0
  69. package/dist/services/release-automation/tag.service.js +180 -0
  70. package/dist/services/release-automation/tag.service.js.map +1 -0
  71. package/dist/services/release-automation/webhook.service.d.ts +37 -0
  72. package/dist/services/release-automation/webhook.service.d.ts.map +1 -0
  73. package/dist/services/release-automation/webhook.service.js +173 -0
  74. package/dist/services/release-automation/webhook.service.js.map +1 -0
  75. package/dist/services/runtime/openai.adapter.d.ts.map +1 -1
  76. package/dist/services/runtime/openai.adapter.js.map +1 -1
  77. package/dist/services/validation.service.d.ts.map +1 -1
  78. package/dist/services/validation.service.js +24 -11
  79. package/dist/services/validation.service.js.map +1 -1
  80. package/dist/services/validators/anthropic.validator.d.ts +2 -2
  81. package/dist/services/validators/anthropic.validator.d.ts.map +1 -1
  82. package/dist/services/validators/anthropic.validator.js +14 -9
  83. package/dist/services/validators/anthropic.validator.js.map +1 -1
  84. package/dist/services/validators/autogen.validator.d.ts +2 -2
  85. package/dist/services/validators/autogen.validator.d.ts.map +1 -1
  86. package/dist/services/validators/autogen.validator.js +18 -15
  87. package/dist/services/validators/autogen.validator.js.map +1 -1
  88. package/dist/services/validators/crewai.validator.d.ts +2 -2
  89. package/dist/services/validators/crewai.validator.d.ts.map +1 -1
  90. package/dist/services/validators/crewai.validator.js +18 -17
  91. package/dist/services/validators/crewai.validator.js.map +1 -1
  92. package/dist/services/validators/cursor.validator.d.ts +2 -2
  93. package/dist/services/validators/cursor.validator.d.ts.map +1 -1
  94. package/dist/services/validators/cursor.validator.js +15 -11
  95. package/dist/services/validators/cursor.validator.js.map +1 -1
  96. package/dist/services/validators/langchain.validator.d.ts +2 -2
  97. package/dist/services/validators/langchain.validator.d.ts.map +1 -1
  98. package/dist/services/validators/langchain.validator.js +14 -11
  99. package/dist/services/validators/langchain.validator.js.map +1 -1
  100. package/dist/services/validators/langflow.validator.d.ts +2 -2
  101. package/dist/services/validators/langflow.validator.d.ts.map +1 -1
  102. package/dist/services/validators/langflow.validator.js +14 -9
  103. package/dist/services/validators/langflow.validator.js.map +1 -1
  104. package/dist/services/validators/langgraph.validator.d.ts +2 -2
  105. package/dist/services/validators/langgraph.validator.d.ts.map +1 -1
  106. package/dist/services/validators/langgraph.validator.js +23 -18
  107. package/dist/services/validators/langgraph.validator.js.map +1 -1
  108. package/dist/services/validators/llamaindex.validator.d.ts +2 -2
  109. package/dist/services/validators/llamaindex.validator.d.ts.map +1 -1
  110. package/dist/services/validators/llamaindex.validator.js +19 -16
  111. package/dist/services/validators/llamaindex.validator.js.map +1 -1
  112. package/dist/services/validators/openai.validator.d.ts +2 -2
  113. package/dist/services/validators/openai.validator.d.ts.map +1 -1
  114. package/dist/services/validators/openai.validator.js +20 -16
  115. package/dist/services/validators/openai.validator.js.map +1 -1
  116. package/dist/services/validators/vercel-ai.validator.d.ts +2 -2
  117. package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -1
  118. package/dist/services/validators/vercel-ai.validator.js +16 -15
  119. package/dist/services/validators/vercel-ai.validator.js.map +1 -1
  120. package/dist/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  121. package/dist/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  122. package/dist/spec/v0.2.3/CHANGELOG.md +7 -7
  123. package/dist/spec/v0.2.3/README.md +9 -9
  124. package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  125. package/{spec/v0.2.4-dev → dist/spec/v0.2.4}/CHANGELOG.md +8 -8
  126. package/dist/spec/{v0.2.4-dev → v0.2.4}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  127. package/dist/spec/{v0.2.4-dev → v0.2.4}/ossa-0.2.4-dev.yaml +1 -1
  128. package/dist/spec/v0.2.4/ossa-0.2.4.schema.json +1819 -0
  129. package/dist/spec/v0.2.5/CHANGELOG.md +401 -0
  130. package/dist/spec/v0.2.5/README.md +72 -0
  131. package/dist/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  132. package/dist/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.5/ossa-0.2.5.schema.json} +323 -359
  133. package/dist/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  134. package/dist/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  135. package/dist/spec/v0.2.5-RC/README.md +72 -0
  136. package/{spec/v0.2.4-dev → dist/spec/v0.2.5-RC}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  137. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  138. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  139. package/dist/types/index.d.ts +6 -1
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/docs/issue-19-completion-summary.md +648 -0
  142. package/docs/issue-19-validation.md +351 -0
  143. package/examples/anthropic/claude-assistant.ossa.json +1 -1
  144. package/examples/autogen/multi-agent.ossa.json +1 -1
  145. package/examples/bridges/Dockerfile.production +1 -1
  146. package/examples/crewai/research-team.ossa.json +1 -1
  147. package/examples/cursor/code-review-agent.ossa.json +1 -1
  148. package/examples/enterprise/agent.yml +1 -1
  149. package/examples/getting-started/hello-world-complete.ossa.yaml +2 -2
  150. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
  151. package/examples/langchain/chain-agent.ossa.json +1 -1
  152. package/examples/langflow/workflow-agent.ossa.json +1 -1
  153. package/examples/langgraph/state-machine-agent.ossa.json +1 -1
  154. package/examples/llamaindex/rag-agent.ossa.json +1 -1
  155. package/examples/openai/basic-agent.ossa.yaml +61 -0
  156. package/examples/openai/multi-tool-agent.ossa.json +165 -0
  157. package/examples/openai/swarm-agent.ossa.json +1 -1
  158. package/examples/openapi-extensions/README.md +1 -1
  159. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  160. package/examples/vercel/edge-agent.ossa.json +1 -1
  161. package/infrastructure/gitlab-agent/rbac.yaml +126 -0
  162. package/infrastructure/gitlab-agent/values.yaml +150 -0
  163. package/infrastructure/k8s/monitoring/00-namespace.yaml +7 -0
  164. package/infrastructure/k8s/monitoring/01-prometheus.yaml +142 -0
  165. package/infrastructure/k8s/monitoring/02-grafana.yaml +63 -0
  166. package/infrastructure/k8s/monitoring/03-lightweight.yaml +121 -0
  167. package/infrastructure/k8s/monitoring/README.md +73 -0
  168. package/infrastructure/k8s/monitoring/deploy.sh +38 -0
  169. package/openapi/CHANGELOG.md +21 -0
  170. package/openapi/README.md +46 -0
  171. package/openapi/{ossa-core-api.openapi.yaml → core/ossa-core-api.openapi.yaml} +59 -4
  172. package/openapi/{ossa-registry.openapi.yaml → core/ossa-registry.openapi.yaml} +75 -2
  173. package/openapi/{unified-agent-gateway.openapi.yaml → core/unified-agent-gateway.openapi.yaml} +3 -3
  174. package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +136 -0
  175. package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +192 -0
  176. package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +149 -0
  177. package/openapi/reference-implementations/critic-agent-api.openapi.yaml +151 -0
  178. package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +217 -0
  179. package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +149 -0
  180. package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +151 -0
  181. package/openapi/reference-implementations/governor-agent-api.openapi.yaml +193 -0
  182. package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +165 -0
  183. package/openapi/reference-implementations/judge-agent-api.openapi.yaml +148 -0
  184. package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +167 -0
  185. package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +171 -0
  186. package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +171 -0
  187. package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +242 -0
  188. package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +187 -0
  189. package/openapi/{self-evolving-ecosystem.openapi.yaml → reference-implementations/self-evolving-ecosystem.openapi.yaml} +2 -2
  190. package/openapi/reference-implementations/worker-agent-api.openapi.yaml +208 -0
  191. package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +193 -0
  192. package/package.json +31 -21
  193. package/release.config.js +20 -5
  194. package/scripts/bump-version.ts +57 -0
  195. package/scripts/enhanced-version-manager.ts +257 -0
  196. package/scripts/gen-types.ts +51 -0
  197. package/scripts/gen-zod.ts +51 -0
  198. package/scripts/lib/exec.ts +37 -0
  199. package/scripts/lib/file-ops.ts +58 -0
  200. package/scripts/lib/version.ts +83 -0
  201. package/scripts/process-doc-templates.ts +37 -0
  202. package/scripts/schemas/package.schema.ts +75 -0
  203. package/scripts/setup-branch-protection.sh +33 -0
  204. package/scripts/sync-version.ts +39 -0
  205. package/scripts/sync-versions.ts +488 -0
  206. package/scripts/validate-schema.ts +49 -0
  207. package/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  208. package/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  209. package/spec/v0.2.3/CHANGELOG.md +7 -7
  210. package/spec/v0.2.3/README.md +9 -9
  211. package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  212. package/{dist/spec/v0.2.4-dev → spec/v0.2.4}/CHANGELOG.md +8 -8
  213. package/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
  214. package/spec/{v0.2.4-dev → v0.2.4}/ossa-0.2.4-dev.yaml +1 -1
  215. package/spec/v0.2.4/ossa-0.2.4.schema.json +1819 -0
  216. package/spec/v0.2.5/CHANGELOG.md +401 -0
  217. package/spec/v0.2.5/README.md +72 -0
  218. package/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  219. package/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.5/ossa-0.2.5.schema.json} +323 -359
  220. package/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  221. package/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  222. package/spec/v0.2.5-RC/README.md +72 -0
  223. package/spec/v0.2.5-RC/migrations/v0.2.3-to-v0.2.4.md +599 -0
  224. package/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  225. package/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  226. package/website/{.lighthouserc.js → .lighthouserc.ts} +5 -1
  227. package/website/Dockerfile +18 -5
  228. package/website/app/about/page.tsx +7 -7
  229. package/website/app/blog/[slug]/page.tsx +61 -20
  230. package/website/app/blog/page.tsx +120 -33
  231. package/website/app/design-guide/page.tsx +511 -0
  232. package/website/app/docs/[[...slug]]/page.tsx +641 -143
  233. package/website/app/examples/page.tsx +51 -41
  234. package/website/app/{globals.css → globals.scss} +50 -23
  235. package/website/app/layout.tsx +2 -2
  236. package/website/app/license/page.tsx +183 -0
  237. package/website/app/not-found.tsx +18 -0
  238. package/website/app/page.tsx +144 -79
  239. package/website/app/playground/page.tsx +25 -45
  240. package/website/app/schema/page.tsx +423 -392
  241. package/website/app/specification/page.tsx +245 -169
  242. package/website/components/Logo.tsx +75 -2
  243. package/website/components/docs/DocsSidebar.tsx +40 -3
  244. package/website/components/docs/MarkdownContent.tsx +265 -47
  245. package/website/components/docs/VersionSelector.tsx +64 -8
  246. package/website/components/examples/ExamplesViewer.tsx +2 -2
  247. package/website/components/layout/Footer.tsx +6 -1
  248. package/website/components/layout/Header.tsx +31 -33
  249. package/website/components/schema/SchemaComponentsAccordion.tsx +84 -0
  250. package/website/components/schema/SchemaExplorer.tsx +4 -4
  251. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +276 -276
  252. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +3 -14
  253. package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +286 -0
  254. package/website/content/blog/introducing-ossa-framework.md +1 -1
  255. package/website/content/blog/ossa-production-results.md +5 -5
  256. package/website/content/blog/welcome-to-ossa.md +2 -2
  257. package/website/content/blog/why-ai-agents-need-open-standard.md +5 -5
  258. package/website/content/docs/00-HOME.md +18 -25
  259. package/website/content/docs/AIFlow-Framework-Integration-with-OSSA.md +8 -8
  260. package/website/content/docs/OpenAPI-Extensions.md +576 -140
  261. package/website/content/docs/adapters/openai-adapter.md +693 -0
  262. package/website/content/docs/architecture/execution-flow.md +3 -3
  263. package/website/content/docs/architecture/multi-agent-systems.md +4 -4
  264. package/website/content/docs/architecture/overview.md +4 -4
  265. package/website/content/docs/architecture/stack-integration.md +4 -4
  266. package/website/content/docs/changelog.md +4 -4
  267. package/website/content/docs/contributing.md +2 -2
  268. package/website/content/docs/ecosystem/framework-support.md +0 -2
  269. package/website/content/docs/examples/AIFlow-Framework-Integration-with-OSSA.md +107 -0
  270. package/website/content/docs/examples/Migration-Guides.md +2 -2
  271. package/website/content/docs/for-audiences/{architects.md → Architects.md} +1 -1
  272. package/website/content/docs/for-audiences/{developers.md → Developers.md} +3 -3
  273. package/website/content/docs/for-audiences/Enterprises.md +2 -2
  274. package/website/content/docs/for-audiences/Students-Researchers.md +1 -1
  275. package/website/content/docs/getting-started/{5-minute-overview.md → 5-Minute-Overview.md} +2 -2
  276. package/website/content/docs/getting-started/{first-agent.md → First-Agent.md} +1 -1
  277. package/website/content/docs/getting-started/Hello-World.md +3 -3
  278. package/website/content/docs/getting-started/{installation.md → Installation.md} +7 -7
  279. package/website/content/docs/getting-started/index.md +92 -0
  280. package/website/content/docs/getting-started/running-agents.md +215 -13
  281. package/{docs → website/content/docs}/getting-started.md +10 -6
  282. package/website/content/docs/integrations/aiflow.md +2 -2
  283. package/website/content/docs/integrations/drupal.md +2 -2
  284. package/website/content/docs/migration-guides/README.md +1 -1
  285. package/website/content/docs/migration-guides/agent-schema-comparison.md +232 -0
  286. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +5 -5
  287. package/website/content/docs/migration-guides/crewai-to-ossa.md +3 -3
  288. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +11 -11
  289. package/{docs/migration → website/content/docs/migration-guides}/general-agent-schema.yml +1 -9
  290. package/website/content/docs/migration-guides/index.md +1 -1
  291. package/website/content/docs/migration-guides/langchain-to-ossa.md +17 -17
  292. package/website/content/docs/migration-guides/langflow-to-ossa.md +3 -3
  293. package/website/content/docs/migration-guides/openai-to-ossa.md +10 -10
  294. package/website/content/docs/openapi-extensions/examples.md +9 -9
  295. package/website/content/docs/openapi-extensions/index.md +59 -3
  296. package/website/content/docs/openapi-extensions/operation-extensions.md +61 -2
  297. package/website/content/docs/openapi-extensions/root-extensions.md +49 -3
  298. package/{docs/OSSA-COMPLIANT-BADGE.md → website/content/docs/ossa-compliant-badge.md} +18 -15
  299. package/website/content/docs/pre-release/index.md +10 -10
  300. package/website/content/docs/readme.md +35 -0
  301. package/website/content/docs/schema-reference/agent-spec.md +2 -2
  302. package/website/content/docs/schema-reference/autonomy.md +5 -5
  303. package/website/content/docs/schema-reference/constraints.md +5 -5
  304. package/website/content/docs/schema-reference/llm-config.md +1 -1
  305. package/website/content/docs/schema-reference/observability.md +5 -5
  306. package/website/content/docs/schema-reference/ossa-manifest.md +6 -6
  307. package/website/content/docs/schema-reference/taxonomy.md +3 -3
  308. package/website/content/docs/use-cases/00-index.md +1 -1
  309. package/{docs/VERSIONING.md → website/content/docs/versioning.md} +9 -5
  310. package/website/lib/version.ts +18 -1
  311. package/website/lib/versions.json +78 -0
  312. package/website/next.config.ts +3 -1
  313. package/website/package-lock.json +552 -18
  314. package/website/package.json +11 -5
  315. package/website/postcss.config.mjs +1 -1
  316. package/website/scripts/fetch-versions.js +166 -0
  317. package/website/scripts/generate-examples-index.js +163 -0
  318. package/website/scripts/merge-docs-to-wiki.ts +207 -0
  319. package/website/scripts/sync-version.js +28 -0
  320. package/website/scripts/sync-wiki.ts +64 -3
  321. package/website/scripts/upload-wiki.ts +199 -0
  322. package/website/styles/_variables.scss +36 -0
  323. package/website/tailwind.config.ts +93 -22
  324. package/.releaserc.json.disabled +0 -81
  325. package/dist/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  326. package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  327. package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  328. package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  329. package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  330. package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  331. package/docs/README.md +0 -31
  332. package/docs/agent-openapi-spec.yml +0 -942
  333. package/docs/openapi-extensions.md +0 -930
  334. package/docs/schemas/openapi-extensions.schema.json +0 -486
  335. package/openapi/gitlab-orchestrator.openapi.yaml +0 -330
  336. package/ossa-website-swarm-tasks.json +0 -105
  337. package/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  338. package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  339. package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  340. package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  341. package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  342. package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  343. package/website/app/api/validate/route.ts +0 -88
  344. package/website/next.config.js +0 -17
  345. package/website/postcss.config.js +0 -7
  346. package/website/tailwind.config.js +0 -58
  347. /package/dist/spec/{v0.2.4-dev → v0.2.4}/ossa-0.2.4-dev.schema.json +0 -0
  348. /package/openapi/{ossa-registry-api.openapi.yaml → core/ossa-registry-api.openapi.yaml} +0 -0
  349. /package/openapi/{drupal-agent-api.openapi.yaml → reference-implementations/drupal-agent-api.openapi.yaml} +0 -0
  350. /package/openapi/{helm-generator.openapi.yaml → reference-implementations/helm-generator.openapi.yaml} +0 -0
  351. /package/spec/{v0.2.4-dev → v0.2.4}/ossa-0.2.4-dev.schema.json +0 -0
  352. /package/website/content/docs/{examples.md → Examples.md} +0 -0
  353. /package/website/content/docs/core-concepts/{project-structure.md → Project-Structure.md} +0 -0
  354. /package/website/content/docs/migration-guides/{00-index.md → 00-INDEX.md} +0 -0
  355. /package/{docs/migration → website/content/docs/migration-guides}/migration-manifest.json +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  import Link from 'next/link';
4
4
  import { usePathname } from 'next/navigation';
5
- import { useState } from 'react';
5
+ import { useState, useEffect } from 'react';
6
6
  import { DocsSearch } from './DocsSearch';
7
7
  import { VersionSelector } from './VersionSelector';
8
8
 
@@ -36,6 +36,13 @@ const navigation = [
36
36
  { href: '/docs/migration-guides/drupal-eca-to-ossa', label: 'Drupal ECA to OSSA' },
37
37
  ],
38
38
  },
39
+ {
40
+ title: 'Ecosystem',
41
+ items: [
42
+ { href: '/docs/ecosystem/overview', label: 'Ecosystem Overview' },
43
+ { href: '/docs/ecosystem/framework-support', label: 'Framework Support' },
44
+ ],
45
+ },
39
46
  {
40
47
  title: 'Reference',
41
48
  items: [
@@ -55,7 +62,37 @@ const navigation = [
55
62
 
56
63
  export function DocsSidebar() {
57
64
  const pathname = usePathname();
58
- const [openSections, setOpenSections] = useState<string[]>(['Getting Started']);
65
+
66
+ // Calculate initial open sections based on pathname to avoid hydration mismatch
67
+ const getInitialOpenSections = (): string[] => {
68
+ const sections: string[] = ['Getting Started'];
69
+ const currentSection = navigation.find((section) =>
70
+ section.items.some((item) => item.href === pathname)
71
+ );
72
+ if (currentSection && !sections.includes(currentSection.title)) {
73
+ sections.push(currentSection.title);
74
+ }
75
+ return sections;
76
+ };
77
+
78
+ const [openSections, setOpenSections] = useState<string[]>(getInitialOpenSections);
79
+
80
+ // Update open sections when pathname changes (for client-side navigation)
81
+ useEffect(() => {
82
+ const currentSection = navigation.find((section) =>
83
+ section.items.some((item) => item.href === pathname)
84
+ );
85
+
86
+ if (currentSection) {
87
+ setOpenSections((prev) => {
88
+ // Only add if not already in the array
89
+ if (!prev.includes(currentSection.title)) {
90
+ return [...prev, currentSection.title];
91
+ }
92
+ return prev;
93
+ });
94
+ }
95
+ }, [pathname]);
59
96
 
60
97
  const toggleSection = (title: string): void => {
61
98
  setOpenSections((prev) =>
@@ -68,7 +105,7 @@ export function DocsSidebar() {
68
105
  return (
69
106
  <aside className="w-64 bg-gray-100 border-r border-gray-300 p-4 overflow-y-auto h-screen sticky top-0">
70
107
  <nav>
71
- <Link href="/docs" className="block mb-6 font-semibold text-primary hover:text-primary-dark">
108
+ <Link href="/docs" className="block mb-6 font-semibold text-primary hover:text-accent">
72
109
  Documentation
73
110
  </Link>
74
111
  <div className="mb-6">
@@ -1,40 +1,192 @@
1
- import React from 'react';
1
+ 'use client';
2
+
3
+ import React, { useEffect } from 'react';
2
4
  import ReactMarkdown from 'react-markdown';
3
5
  import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
4
6
  import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism';
5
7
  import remarkGfm from 'remark-gfm';
8
+ import Link from 'next/link';
9
+ import { usePathname } from 'next/navigation';
6
10
 
7
11
  interface MarkdownContentProps {
8
12
  content: string;
13
+ currentPath?: string; // Current pathname for resolving relative links
14
+ }
15
+
16
+ // Helper function to generate ID from heading text
17
+ function generateId(text: string): string {
18
+ // Extract ID from {#id} syntax if present
19
+ const idMatch = text.match(/\{#([^}]+)\}/);
20
+ if (idMatch) {
21
+ return idMatch[1];
22
+ }
23
+ // Otherwise generate from text
24
+ return text
25
+ .toString()
26
+ .toLowerCase()
27
+ .replace(/[^\w\s-]/g, '')
28
+ .replace(/\s+/g, '-')
29
+ .replace(/-+/g, '-')
30
+ .trim();
31
+ }
32
+
33
+ // Helper function to clean heading text (remove {#id} syntax)
34
+ function cleanHeadingText(text: string): string {
35
+ return text.replace(/\s*\{#[^}]+\}\s*$/, '').trim();
36
+ }
37
+
38
+ // Helper function to fix markdown bold syntax with spaces
39
+ function fixMarkdownBold(content: string): string {
40
+ // Fix patterns like "** text**" or "**text **" to "**text**"
41
+ // Also handle cases where ** is at the start of a line or after a heading
42
+ return content
43
+ // Fix "** text" patterns (space after opening **)
44
+ .replace(/\*\* +([^*]+?)\*\*/g, '**$1**')
45
+ // Fix "text **" patterns (space before closing **)
46
+ .replace(/\*\*([^*]+?) +\*\*/g, '**$1**')
47
+ // Fix "** text **" patterns (spaces on both sides)
48
+ .replace(/\*\* +([^*]+?) +\*\*/g, '**$1**');
49
+ }
50
+
51
+ // Helper function to resolve relative markdown links to Next.js routes
52
+ function resolveMarkdownLink(href: string, currentPath: string): string {
53
+ // Already absolute or external
54
+ if (href.startsWith('/') || href.startsWith('http') || href.startsWith('#')) {
55
+ return href;
56
+ }
57
+
58
+ // Split anchor from path
59
+ const [pathPart, anchor] = href.split('#');
60
+ const anchorPart = anchor ? `#${anchor}` : '';
61
+
62
+ // Remove .md extension
63
+ let normalized = pathPart.replace(/\.md$/, '');
64
+
65
+ // Handle relative paths starting with ./
66
+ if (normalized.startsWith('./')) {
67
+ normalized = normalized.slice(2);
68
+ }
69
+
70
+ // Convert PascalCase/CamelCase to kebab-case
71
+ normalized = normalized
72
+ .replace(/([a-z])([A-Z])/g, '$1-$2') // Insert dash before capital letters
73
+ .toLowerCase()
74
+ .replace(/[^a-z0-9/-]/g, '-') // Replace non-alphanumeric with dash
75
+ .replace(/-+/g, '-') // Collapse multiple dashes
76
+ .replace(/^-|-$/g, ''); // Remove leading/trailing dashes
77
+
78
+ // If currentPath is provided, resolve relative to it
79
+ if (currentPath && !normalized.startsWith('/')) {
80
+ // Get the directory of the current page
81
+ const pathParts = currentPath.split('/').filter(Boolean);
82
+ // Remove the last part (current file) to get directory
83
+ const currentDir = pathParts.slice(0, -1);
84
+
85
+ // Handle parent directory references (../)
86
+ if (normalized.startsWith('../')) {
87
+ const upLevels = (normalized.match(/\.\.\//g) || []).length;
88
+ normalized = normalized.replace(/\.\.\//g, '');
89
+ const newDir = currentDir.slice(0, -upLevels);
90
+ return `/docs/${newDir.join('/')}/${normalized}${anchorPart}`;
91
+ }
92
+
93
+ // Same directory or subdirectory
94
+ if (currentDir.length > 0) {
95
+ return `/docs/${currentDir.join('/')}/${normalized}${anchorPart}`;
96
+ }
97
+ return `/docs/${normalized}${anchorPart}`;
98
+ }
99
+
100
+ // Default to /docs/ prefix if no current path
101
+ return `/docs/${normalized}${anchorPart}`;
9
102
  }
10
103
 
11
- export function MarkdownContent({ content }: MarkdownContentProps) {
104
+ export function MarkdownContent({ content, currentPath }: MarkdownContentProps) {
105
+ const pathname = usePathname();
106
+ const basePath = currentPath || pathname;
107
+
108
+ // Handle anchor link scrolling on mount and hash changes
109
+ useEffect(() => {
110
+ const handleHashChange = () => {
111
+ const hash = window.location.hash.slice(1);
112
+ if (hash) {
113
+ setTimeout(() => {
114
+ const element = document.getElementById(hash);
115
+ if (element) {
116
+ element.scrollIntoView({ behavior: 'smooth', block: 'start' });
117
+ // Offset for sticky header
118
+ window.scrollBy(0, -80);
119
+ }
120
+ }, 100);
121
+ }
122
+ };
123
+
124
+ handleHashChange();
125
+ window.addEventListener('hashchange', handleHashChange);
126
+ return () => window.removeEventListener('hashchange', handleHashChange);
127
+ }, [pathname]);
128
+
129
+ // Fix markdown bold syntax issues
130
+ const fixedContent = fixMarkdownBold(content);
131
+
12
132
  return (
13
- <div className="markdown-content">
133
+ <div className="markdown-content [&_pre_code]:bg-transparent [&_pre_code]:text-code-text">
14
134
  <ReactMarkdown
15
135
  remarkPlugins={[remarkGfm]}
16
136
  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
- ),
137
+ // Headings with IDs
138
+ h1: ({ children }) => {
139
+ const text = React.Children.toArray(children).join('');
140
+ const id = generateId(text);
141
+ const cleanText = cleanHeadingText(text);
142
+ return (
143
+ <h1
144
+ id={id}
145
+ className="text-3xl md:text-4xl font-bold text-gray-900 mt-8 mb-4 pb-2 border-b border-gray-200 scroll-mt-20"
146
+ >
147
+ {cleanText}
148
+ </h1>
149
+ );
150
+ },
151
+ h2: ({ children }) => {
152
+ const text = React.Children.toArray(children).join('');
153
+ const id = generateId(text);
154
+ const cleanText = cleanHeadingText(text);
155
+ return (
156
+ <h2
157
+ id={id}
158
+ className="text-2xl md:text-3xl font-semibold text-gray-900 mt-8 mb-4 scroll-mt-20"
159
+ >
160
+ {cleanText}
161
+ </h2>
162
+ );
163
+ },
164
+ h3: ({ children }) => {
165
+ const text = React.Children.toArray(children).join('');
166
+ const id = generateId(text);
167
+ const cleanText = cleanHeadingText(text);
168
+ return (
169
+ <h3
170
+ id={id}
171
+ className="text-xl md:text-2xl font-semibold text-gray-900 mt-6 mb-3 scroll-mt-20"
172
+ >
173
+ {cleanText}
174
+ </h3>
175
+ );
176
+ },
177
+ h4: ({ children }) => {
178
+ const text = React.Children.toArray(children).join('');
179
+ const id = generateId(text);
180
+ const cleanText = cleanHeadingText(text);
181
+ return (
182
+ <h4
183
+ id={id}
184
+ className="text-lg md:text-xl font-semibold text-gray-900 mt-4 mb-2 scroll-mt-20"
185
+ >
186
+ {cleanText}
187
+ </h4>
188
+ );
189
+ },
38
190
 
39
191
  // Paragraphs
40
192
  p: ({ children }) => (
@@ -43,31 +195,75 @@ export function MarkdownContent({ content }: MarkdownContentProps) {
43
195
  </p>
44
196
  ),
45
197
 
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
- ),
198
+ // Links - handle anchor links and internal/external links
199
+ a: ({ href, children }) => {
200
+ if (!href) return <>{children}</>;
201
+
202
+ // Handle anchor links (starting with #)
203
+ if (href.startsWith('#')) {
204
+ return (
205
+ <a
206
+ href={href}
207
+ onClick={(e) => {
208
+ e.preventDefault();
209
+ const id = href.slice(1);
210
+ const element = document.getElementById(id);
211
+ if (element) {
212
+ element.scrollIntoView({ behavior: 'smooth', block: 'start' });
213
+ // Offset for sticky header
214
+ window.scrollBy(0, -80);
215
+ // Update URL without scrolling
216
+ window.history.pushState(null, '', `${pathname}${href}`);
217
+ }
218
+ }}
219
+ className="text-primary hover:text-accent underline"
220
+ >
221
+ {children}
222
+ </a>
223
+ );
224
+ }
57
225
 
58
- // Lists
226
+ // Handle external links
227
+ if (href.startsWith('http')) {
228
+ return (
229
+ <a
230
+ href={href}
231
+ className="text-primary hover:text-accent underline"
232
+ target="_blank"
233
+ rel="noopener noreferrer"
234
+ >
235
+ {children}
236
+ </a>
237
+ );
238
+ }
239
+
240
+ // Resolve relative markdown links to Next.js routes
241
+ const resolvedHref = resolveMarkdownLink(href, basePath);
242
+
243
+ // Handle internal links
244
+ return (
245
+ <Link
246
+ href={resolvedHref}
247
+ className="text-primary hover:text-primary-dark underline"
248
+ >
249
+ {children}
250
+ </Link>
251
+ );
252
+ },
253
+
254
+ // Lists - Tighter spacing for technical documentation
59
255
  ul: ({ children }) => (
60
- <ul className="list-disc list-inside mb-4 space-y-2 text-gray-700">
256
+ <ul className="list-disc list-outside mb-3 ml-5 space-y-1 text-gray-700 text-base">
61
257
  {children}
62
258
  </ul>
63
259
  ),
64
260
  ol: ({ children }) => (
65
- <ol className="list-decimal list-inside mb-4 space-y-2 text-gray-700">
261
+ <ol className="list-decimal list-outside mb-3 ml-5 space-y-1 text-gray-700 text-base">
66
262
  {children}
67
263
  </ol>
68
264
  ),
69
265
  li: ({ children }) => (
70
- <li className="leading-7">
266
+ <li className="leading-relaxed pl-1">
71
267
  {children}
72
268
  </li>
73
269
  ),
@@ -109,13 +305,16 @@ export function MarkdownContent({ content }: MarkdownContentProps) {
109
305
  ),
110
306
 
111
307
  // Code
112
- code({ className, children }) {
308
+ code({ className, children, ...props }: any) {
113
309
  const match = /language-(\w+)/.exec(className || '');
114
310
  const isInline = !match;
115
311
 
312
+ // Check if this code is inside a pre tag (block code)
313
+ const isBlockCode = (props.node?.parent as any)?.tagName === 'pre';
314
+
116
315
  if (match) {
117
316
  return (
118
- <div className="my-4 rounded-lg overflow-hidden">
317
+ <div className="my-4 rounded-lg overflow-hidden overflow-x-auto">
119
318
  <SyntaxHighlighter
120
319
  style={vscDarkPlus as any}
121
320
  language={match[1]}
@@ -124,6 +323,8 @@ export function MarkdownContent({ content }: MarkdownContentProps) {
124
323
  margin: 0,
125
324
  borderRadius: '0.5rem',
126
325
  fontSize: '0.875rem',
326
+ backgroundColor: '#1e1e1e',
327
+ color: '#d4d4d4',
127
328
  }}
128
329
  >
129
330
  {String(children).replace(/\n$/, '')}
@@ -132,19 +333,36 @@ export function MarkdownContent({ content }: MarkdownContentProps) {
132
333
  );
133
334
  }
134
335
 
336
+ // If it's a block code (inside pre), use dark background - no light background
337
+ if (isBlockCode) {
338
+ return (
339
+ <code className="bg-transparent text-code-text text-sm font-mono whitespace-pre">
340
+ {children}
341
+ </code>
342
+ );
343
+ }
344
+
345
+ // Inline code
135
346
  return (
136
- <code className="bg-gray-100 text-red-600 px-1.5 py-0.5 rounded text-sm font-mono">
347
+ <code className="bg-gray-100 text-primary px-1.5 py-0.5 rounded text-sm font-mono">
137
348
  {children}
138
349
  </code>
139
350
  );
140
351
  },
141
352
 
142
353
  // 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
- ),
354
+ pre: ({ children }) => {
355
+ // Check if children contain a code element
356
+ const hasCode = React.Children.toArray(children).some(
357
+ (child: any) => child?.type === 'code' || child?.props?.node?.tagName === 'code'
358
+ );
359
+
360
+ return (
361
+ <pre className="bg-code-bg text-code-text p-4 rounded-lg overflow-x-auto my-4 text-sm font-mono">
362
+ {children}
363
+ </pre>
364
+ );
365
+ },
148
366
 
149
367
  // Horizontal rule
150
368
  hr: () => (
@@ -2,15 +2,17 @@
2
2
 
3
3
  import { usePathname, useRouter } from 'next/navigation';
4
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
- ];
5
+ import {
6
+ STABLE_VERSION_TAG,
7
+ DEV_VERSION_TAG,
8
+ ALL_VERSIONS,
9
+ STABLE_VERSIONS,
10
+ DEV_VERSIONS,
11
+ getVersionInfo
12
+ } from '@/lib/version';
11
13
 
12
14
  export function VersionSelector() {
13
- const [selectedVersion, setSelectedVersion] = useState(OSSA_VERSION_TAG);
15
+ const [selectedVersion, setSelectedVersion] = useState(STABLE_VERSION_TAG);
14
16
  const router = useRouter();
15
17
  const pathname = usePathname();
16
18
 
@@ -20,6 +22,45 @@ export function VersionSelector() {
20
22
  // For now, we just update the UI
21
23
  };
22
24
 
25
+ // Build version options grouped by type
26
+ const versionOptions: Array<{ value: string; label: string; disabled: boolean; group?: string }> = [];
27
+
28
+ // Add stable versions
29
+ if (STABLE_VERSIONS.length > 0) {
30
+ STABLE_VERSIONS.forEach((v) => {
31
+ const isLatest = v.version === STABLE_VERSION_TAG.replace('v', '');
32
+ versionOptions.push({
33
+ value: v.tag,
34
+ label: `${v.tag}${isLatest ? ' (Latest Stable)' : ''}${v.published ? '' : ' (Unpublished)'}`,
35
+ disabled: !v.available,
36
+ group: 'stable'
37
+ });
38
+ });
39
+ }
40
+
41
+ // Add dev/pre-release versions
42
+ if (DEV_VERSIONS.length > 0) {
43
+ DEV_VERSIONS.forEach((v) => {
44
+ const isLatestDev = v.version === (DEV_VERSION_TAG?.replace('v', '') || '');
45
+ const typeLabel = v.type === 'dev' ? 'Dev' : 'Pre-release';
46
+ versionOptions.push({
47
+ value: v.tag,
48
+ label: `${v.tag} (${typeLabel}${isLatestDev ? ' - Latest' : ''})${v.published ? '' : ' - Unpublished'}`,
49
+ disabled: !v.available,
50
+ group: v.type
51
+ });
52
+ });
53
+ }
54
+
55
+ // Fallback if no versions loaded
56
+ if (versionOptions.length === 0) {
57
+ versionOptions.push({
58
+ value: STABLE_VERSION_TAG,
59
+ label: `${STABLE_VERSION_TAG} (Current)`,
60
+ disabled: false
61
+ });
62
+ }
63
+
23
64
  return (
24
65
  <div className="mb-4">
25
66
  <label htmlFor="version-select" className="block text-sm font-medium text-gray-700 mb-2">
@@ -33,7 +74,7 @@ export function VersionSelector() {
33
74
  aria-label="Select OSSA version"
34
75
  aria-describedby="version-description"
35
76
  >
36
- {versions.map((version) => (
77
+ {versionOptions.map((version) => (
37
78
  <option
38
79
  key={version.value}
39
80
  value={version.value}
@@ -43,6 +84,21 @@ export function VersionSelector() {
43
84
  </option>
44
85
  ))}
45
86
  </select>
87
+ <p id="version-description" className="mt-1 text-sm text-gray-500">
88
+ {(() => {
89
+ const info = getVersionInfo(selectedVersion.replace('v', ''));
90
+ if (info) {
91
+ if (info.type === 'stable') {
92
+ return 'Stable release - recommended for production';
93
+ } else if (info.type === 'dev') {
94
+ return 'Development version - may contain breaking changes';
95
+ } else {
96
+ return 'Pre-release version - use with caution';
97
+ }
98
+ }
99
+ return 'Select a version to view documentation';
100
+ })()}
101
+ </p>
46
102
  </div>
47
103
  );
48
104
  }
@@ -179,7 +179,7 @@ export function ExamplesViewer({ examples }: ExamplesViewerProps) {
179
179
  onClick={() => handleSelectExample(example)}
180
180
  className={`w-full text-left px-4 py-3 rounded-lg text-sm transition-all border-2 ${
181
181
  selectedExample?.path === example.path
182
- ? 'bg-gradient-to-r from-primary to-primary-dark text-white border-primary shadow-md'
182
+ ? 'bg-gradient-to-r from-secondary via-primary to-accent text-white border-primary shadow-md'
183
183
  : 'bg-white border-gray-200 hover:border-primary/50 hover:shadow-md'
184
184
  }`}
185
185
  >
@@ -231,7 +231,7 @@ export function ExamplesViewer({ examples }: ExamplesViewerProps) {
231
231
  </div>
232
232
  <button
233
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"
234
+ className="bg-gradient-to-r from-secondary via-primary to-accent text-white px-6 py-3 rounded-lg font-medium hover:shadow-lg transition-all flex items-center gap-2"
235
235
  aria-label="Copy example code to clipboard"
236
236
  title="Copy code"
237
237
  >
@@ -8,7 +8,7 @@ export function Footer() {
8
8
  <div>
9
9
  <h3 className="text-white font-semibold mb-4">Open Standard Agents</h3>
10
10
  <p className="text-sm">
11
- Industry Standard for Agent Orchestration. The vendor-neutral specification for multi-agent systems.
11
+ OSSA is an Open Standard for AI Agents. The vendor-neutral specification was created by Thomas Scola, founder of Bluefly.io.
12
12
  </p>
13
13
  </div>
14
14
  <div>
@@ -49,6 +49,11 @@ export function Footer() {
49
49
  Blog
50
50
  </Link>
51
51
  </li>
52
+ <li>
53
+ <Link href="/design-guide" className="hover:text-white transition-colors">
54
+ Design Guide
55
+ </Link>
56
+ </li>
52
57
  </ul>
53
58
  </div>
54
59
  <div>