@bluefly/openstandardagents 0.2.4 → 0.2.7

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 (511) hide show
  1. package/.cursorrules +84 -0
  2. package/.devfile.yaml +87 -0
  3. package/.env.example +25 -3
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +63 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +40 -0
  6. package/.github/workflows/dependabot-comment.yml +34 -0
  7. package/.github/workflows/pr-comment.yml +33 -0
  8. package/.github/workflows/release.yml +1 -1
  9. package/.husky/pre-commit +5 -0
  10. package/.kiro/config.json +21 -0
  11. package/.kiro/settings/mcp.json +61 -0
  12. package/.kiro/specs/scripts-migration-api-first/design.md +883 -0
  13. package/.kiro/specs/scripts-migration-api-first/requirements.md +165 -0
  14. package/.kiro/specs/scripts-migration-api-first/tasks.md +539 -0
  15. package/.kiro/specs/website-brand-identity/design.md +1060 -0
  16. package/.kiro/specs/website-brand-identity/requirements.md +287 -0
  17. package/.kiro/specs/website-brand-identity/tasks.md +981 -0
  18. package/.releaserc.json +5 -4
  19. package/.version.json +6 -0
  20. package/CHANGELOG.md +163 -96
  21. package/CONTRIBUTING.md +23 -5
  22. package/README.md +130 -43
  23. package/bin/ossa +24 -3
  24. package/bin/ossa-dev +42 -0
  25. package/bin/ossa-export +32 -0
  26. package/bin/ossa-generate +60 -0
  27. package/bin/ossa-health +40 -0
  28. package/bin/ossa-init +26 -0
  29. package/bin/ossa-validate-all +55 -0
  30. package/bin/ossa-version +23 -0
  31. package/bin/validate-ossa-0.2.4.ts +244 -0
  32. package/bin/validate-ossa-0.2.5-RC.ts +244 -0
  33. package/bin/validate-ossa.ts +273 -0
  34. package/dist/di-container.d.ts +1 -1
  35. package/dist/di-container.d.ts.map +1 -1
  36. package/dist/di-container.js.map +1 -1
  37. package/dist/repositories/schema.repository.d.ts +17 -2
  38. package/dist/repositories/schema.repository.d.ts.map +1 -1
  39. package/dist/repositories/schema.repository.js +102 -19
  40. package/dist/repositories/schema.repository.js.map +1 -1
  41. package/dist/services/generation.service.d.ts +7 -5
  42. package/dist/services/generation.service.d.ts.map +1 -1
  43. package/dist/services/generation.service.js +92 -44
  44. package/dist/services/generation.service.js.map +1 -1
  45. package/dist/services/github-sync/github-client.d.ts +14 -0
  46. package/dist/services/github-sync/github-client.d.ts.map +1 -0
  47. package/dist/services/github-sync/github-client.js +41 -0
  48. package/dist/services/github-sync/github-client.js.map +1 -0
  49. package/dist/services/github-sync/gitlab-client.d.ts +17 -0
  50. package/dist/services/github-sync/gitlab-client.d.ts.map +1 -0
  51. package/dist/services/github-sync/gitlab-client.js +42 -0
  52. package/dist/services/github-sync/gitlab-client.js.map +1 -0
  53. package/dist/services/github-sync/schemas.d.ts +46 -0
  54. package/dist/services/github-sync/schemas.d.ts.map +1 -0
  55. package/dist/services/github-sync/schemas.js +36 -0
  56. package/dist/services/github-sync/schemas.js.map +1 -0
  57. package/dist/services/github-sync/sync.service.d.ts +27 -0
  58. package/dist/services/github-sync/sync.service.d.ts.map +1 -0
  59. package/dist/services/github-sync/sync.service.js +99 -0
  60. package/dist/services/github-sync/sync.service.js.map +1 -0
  61. package/dist/services/gitlab-agent.service.d.ts +94 -0
  62. package/dist/services/gitlab-agent.service.d.ts.map +1 -0
  63. package/dist/services/gitlab-agent.service.js +162 -0
  64. package/dist/services/gitlab-agent.service.js.map +1 -0
  65. package/dist/services/migration.service.d.ts +3 -3
  66. package/dist/services/migration.service.d.ts.map +1 -1
  67. package/dist/services/migration.service.js +108 -61
  68. package/dist/services/migration.service.js.map +1 -1
  69. package/dist/services/release-automation/base-crud.service.d.ts +93 -0
  70. package/dist/services/release-automation/base-crud.service.d.ts.map +1 -0
  71. package/dist/services/release-automation/base-crud.service.js +68 -0
  72. package/dist/services/release-automation/base-crud.service.js.map +1 -0
  73. package/dist/services/release-automation/index.d.ts +12 -0
  74. package/dist/services/release-automation/index.d.ts.map +1 -0
  75. package/dist/services/release-automation/index.js +12 -0
  76. package/dist/services/release-automation/index.js.map +1 -0
  77. package/dist/services/release-automation/merge-request.service.d.ts +119 -0
  78. package/dist/services/release-automation/merge-request.service.d.ts.map +1 -0
  79. package/dist/services/release-automation/merge-request.service.js +212 -0
  80. package/dist/services/release-automation/merge-request.service.js.map +1 -0
  81. package/dist/services/release-automation/milestone.service.d.ts +104 -0
  82. package/dist/services/release-automation/milestone.service.d.ts.map +1 -0
  83. package/dist/services/release-automation/milestone.service.js +207 -0
  84. package/dist/services/release-automation/milestone.service.js.map +1 -0
  85. package/dist/services/release-automation/release.service.d.ts +118 -0
  86. package/dist/services/release-automation/release.service.d.ts.map +1 -0
  87. package/dist/services/release-automation/release.service.js +207 -0
  88. package/dist/services/release-automation/release.service.js.map +1 -0
  89. package/dist/services/release-automation/schemas/release.schema.d.ts +299 -0
  90. package/dist/services/release-automation/schemas/release.schema.d.ts.map +1 -0
  91. package/dist/services/release-automation/schemas/release.schema.js +269 -0
  92. package/dist/services/release-automation/schemas/release.schema.js.map +1 -0
  93. package/dist/services/release-automation/tag.service.d.ts +99 -0
  94. package/dist/services/release-automation/tag.service.d.ts.map +1 -0
  95. package/dist/services/release-automation/tag.service.js +180 -0
  96. package/dist/services/release-automation/tag.service.js.map +1 -0
  97. package/dist/services/release-automation/webhook.service.d.ts +37 -0
  98. package/dist/services/release-automation/webhook.service.d.ts.map +1 -0
  99. package/dist/services/release-automation/webhook.service.js +173 -0
  100. package/dist/services/release-automation/webhook.service.js.map +1 -0
  101. package/dist/services/runtime/claude/capability-mapper.d.ts +84 -0
  102. package/dist/services/runtime/claude/capability-mapper.d.ts.map +1 -0
  103. package/dist/services/runtime/claude/capability-mapper.js +245 -0
  104. package/dist/services/runtime/claude/capability-mapper.js.map +1 -0
  105. package/dist/services/runtime/claude/claude-adapter.d.ts +80 -0
  106. package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -0
  107. package/dist/services/runtime/claude/claude-adapter.js +287 -0
  108. package/dist/services/runtime/claude/claude-adapter.js.map +1 -0
  109. package/dist/services/runtime/claude/manifest-parser.d.ts +77 -0
  110. package/dist/services/runtime/claude/manifest-parser.d.ts.map +1 -0
  111. package/dist/services/runtime/claude/manifest-parser.js +169 -0
  112. package/dist/services/runtime/claude/manifest-parser.js.map +1 -0
  113. package/dist/services/runtime/claude/types.d.ts +115 -0
  114. package/dist/services/runtime/claude/types.d.ts.map +1 -0
  115. package/dist/services/runtime/claude/types.js +6 -0
  116. package/dist/services/runtime/claude/types.js.map +1 -0
  117. package/dist/services/runtime/openai.adapter.d.ts.map +1 -1
  118. package/dist/services/runtime/openai.adapter.js.map +1 -1
  119. package/dist/services/validation.service.d.ts.map +1 -1
  120. package/dist/services/validation.service.js +35 -11
  121. package/dist/services/validation.service.js.map +1 -1
  122. package/dist/services/validators/anthropic.validator.d.ts +2 -2
  123. package/dist/services/validators/anthropic.validator.d.ts.map +1 -1
  124. package/dist/services/validators/anthropic.validator.js +14 -9
  125. package/dist/services/validators/anthropic.validator.js.map +1 -1
  126. package/dist/services/validators/autogen.validator.d.ts +2 -2
  127. package/dist/services/validators/autogen.validator.d.ts.map +1 -1
  128. package/dist/services/validators/autogen.validator.js +18 -15
  129. package/dist/services/validators/autogen.validator.js.map +1 -1
  130. package/dist/services/validators/crewai.validator.d.ts +2 -2
  131. package/dist/services/validators/crewai.validator.d.ts.map +1 -1
  132. package/dist/services/validators/crewai.validator.js +18 -17
  133. package/dist/services/validators/crewai.validator.js.map +1 -1
  134. package/dist/services/validators/cursor.validator.d.ts +2 -2
  135. package/dist/services/validators/cursor.validator.d.ts.map +1 -1
  136. package/dist/services/validators/cursor.validator.js +15 -11
  137. package/dist/services/validators/cursor.validator.js.map +1 -1
  138. package/dist/services/validators/langchain.validator.d.ts +2 -2
  139. package/dist/services/validators/langchain.validator.d.ts.map +1 -1
  140. package/dist/services/validators/langchain.validator.js +14 -11
  141. package/dist/services/validators/langchain.validator.js.map +1 -1
  142. package/dist/services/validators/langflow.validator.d.ts +2 -2
  143. package/dist/services/validators/langflow.validator.d.ts.map +1 -1
  144. package/dist/services/validators/langflow.validator.js +14 -9
  145. package/dist/services/validators/langflow.validator.js.map +1 -1
  146. package/dist/services/validators/langgraph.validator.d.ts +2 -2
  147. package/dist/services/validators/langgraph.validator.d.ts.map +1 -1
  148. package/dist/services/validators/langgraph.validator.js +23 -18
  149. package/dist/services/validators/langgraph.validator.js.map +1 -1
  150. package/dist/services/validators/llamaindex.validator.d.ts +2 -2
  151. package/dist/services/validators/llamaindex.validator.d.ts.map +1 -1
  152. package/dist/services/validators/llamaindex.validator.js +19 -16
  153. package/dist/services/validators/llamaindex.validator.js.map +1 -1
  154. package/dist/services/validators/openai.validator.d.ts +2 -2
  155. package/dist/services/validators/openai.validator.d.ts.map +1 -1
  156. package/dist/services/validators/openai.validator.js +20 -16
  157. package/dist/services/validators/openai.validator.js.map +1 -1
  158. package/dist/services/validators/vercel-ai.validator.d.ts +2 -2
  159. package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -1
  160. package/dist/services/validators/vercel-ai.validator.js +16 -15
  161. package/dist/services/validators/vercel-ai.validator.js.map +1 -1
  162. package/dist/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  163. package/dist/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  164. package/dist/spec/v0.2.3/CHANGELOG.md +7 -7
  165. package/dist/spec/v0.2.3/README.md +9 -9
  166. package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  167. package/{spec/v0.2.4-dev → dist/spec/v0.2.4}/CHANGELOG.md +8 -8
  168. package/dist/spec/{v0.2.4-dev → v0.2.4}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  169. package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
  170. package/dist/spec/v0.2.5/CHANGELOG.md +401 -0
  171. package/dist/spec/v0.2.5/README.md +72 -0
  172. package/dist/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  173. package/dist/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
  174. package/dist/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  175. package/dist/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  176. package/dist/spec/v0.2.5-RC/README.md +72 -0
  177. package/{spec/v0.2.4-dev → dist/spec/v0.2.5-RC}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  178. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  179. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  180. package/dist/spec/v0.2.6/CHANGELOG.md +401 -0
  181. package/dist/spec/v0.2.6/README.md +72 -0
  182. package/dist/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  183. package/dist/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  184. package/dist/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  185. package/dist/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  186. package/dist/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  187. package/dist/spec/v0.2.6-dev/README.md +75 -0
  188. package/dist/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  189. package/dist/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  190. package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
  191. package/dist/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  192. package/dist/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
  193. package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  194. package/dist/spec/v0.2.7/core/agentgraph.md +324 -0
  195. package/dist/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  196. package/dist/types/index.d.ts +6 -1
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/docs/brand-guide/01-brand-overview.md +37 -0
  199. package/docs/brand-guide/02-logo-usage.md +43 -0
  200. package/docs/brand-guide/03-color-palette.md +70 -0
  201. package/docs/brand-guide/04-typography.md +82 -0
  202. package/docs/brand-guide/05-voice-and-tone.md +108 -0
  203. package/docs/brand-guide/06-visual-elements.md +137 -0
  204. package/docs/brand-guide/07-application-examples.md +153 -0
  205. package/docs/brand-guide/OssaLogo/OssA_Logo.svg +21 -0
  206. package/docs/brand-guide/OssaLogo/brand.af +0 -0
  207. package/docs/brand-guide/README.md +107 -0
  208. package/docs/comparison.md +315 -0
  209. package/docs/operations/automation-roadmap.md +245 -0
  210. package/docs/operations/github-sync-strategy.md +357 -0
  211. package/examples/anthropic/claude-assistant.ossa.json +5 -4
  212. package/examples/autogen/multi-agent.ossa.json +6 -4
  213. package/examples/bridges/Dockerfile.production +1 -1
  214. package/examples/crewai/research-team.ossa.json +14 -5
  215. package/examples/cursor/code-review-agent.ossa.json +21 -6
  216. package/examples/enterprise/agent.yml +1 -1
  217. package/examples/getting-started/hello-world-complete.ossa.yaml +2 -2
  218. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
  219. package/examples/langchain/chain-agent.ossa.json +21 -5
  220. package/examples/langflow/workflow-agent.ossa.json +2 -3
  221. package/examples/langgraph/state-machine-agent.ossa.json +2 -3
  222. package/examples/llamaindex/rag-agent.ossa.json +2 -3
  223. package/examples/openai/basic-agent.ossa.yaml +61 -0
  224. package/examples/openai/multi-tool-agent.ossa.json +188 -0
  225. package/examples/openai/swarm-agent.ossa.json +18 -5
  226. package/examples/openapi-extensions/README.md +1 -1
  227. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  228. package/examples/vercel/edge-agent.ossa.json +5 -4
  229. package/infrastructure/gitlab-agent/rbac.yaml +126 -0
  230. package/infrastructure/gitlab-agent/values.yaml +150 -0
  231. package/infrastructure/k8s/monitoring/00-namespace.yaml +7 -0
  232. package/infrastructure/k8s/monitoring/01-prometheus.yaml +142 -0
  233. package/infrastructure/k8s/monitoring/02-grafana.yaml +63 -0
  234. package/infrastructure/k8s/monitoring/03-lightweight.yaml +121 -0
  235. package/infrastructure/k8s/monitoring/README.md +73 -0
  236. package/infrastructure/k8s/monitoring/deploy.sh +38 -0
  237. package/openapi/CHANGELOG.md +21 -0
  238. package/openapi/README.md +46 -0
  239. package/openapi/{ossa-core-api.openapi.yaml → core/ossa-core-api.openapi.yaml} +59 -4
  240. package/openapi/{ossa-registry.openapi.yaml → core/ossa-registry.openapi.yaml} +75 -2
  241. package/openapi/{unified-agent-gateway.openapi.yaml → core/unified-agent-gateway.openapi.yaml} +3 -3
  242. package/openapi/github-sync.yaml +115 -0
  243. package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +136 -0
  244. package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +192 -0
  245. package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +149 -0
  246. package/openapi/reference-implementations/critic-agent-api.openapi.yaml +151 -0
  247. package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +217 -0
  248. package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +149 -0
  249. package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +151 -0
  250. package/openapi/reference-implementations/governor-agent-api.openapi.yaml +193 -0
  251. package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +165 -0
  252. package/openapi/reference-implementations/judge-agent-api.openapi.yaml +148 -0
  253. package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +167 -0
  254. package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +171 -0
  255. package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +171 -0
  256. package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +242 -0
  257. package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +187 -0
  258. package/openapi/{self-evolving-ecosystem.openapi.yaml → reference-implementations/self-evolving-ecosystem.openapi.yaml} +2 -2
  259. package/openapi/reference-implementations/worker-agent-api.openapi.yaml +208 -0
  260. package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +193 -0
  261. package/package.json +53 -22
  262. package/release.config.js +20 -5
  263. package/scripts/README.md +103 -0
  264. package/scripts/auto-rebase-mrs.ts +106 -0
  265. package/scripts/batch-dependabot.sh +57 -0
  266. package/scripts/bump-version.ts +57 -0
  267. package/scripts/configure-gitlab-branch-protection.ts +95 -0
  268. package/scripts/create-issue-helper.ts +238 -0
  269. package/scripts/create-milestone-issue.ts +73 -0
  270. package/scripts/enhanced-version-manager.ts +257 -0
  271. package/scripts/fix-schema-formats.js +82 -0
  272. package/scripts/gen-types.ts +51 -0
  273. package/scripts/gen-zod.ts +51 -0
  274. package/scripts/generate-agents-catalog.ts +77 -0
  275. package/scripts/generate-api-docs.ts +218 -0
  276. package/scripts/generate-cli-docs.ts +410 -0
  277. package/scripts/generate-config-docs.ts +109 -0
  278. package/scripts/generate-errors-docs.ts +76 -0
  279. package/scripts/generate-examples-docs.ts +99 -0
  280. package/scripts/generate-schema-docs.ts +296 -0
  281. package/scripts/generate-types-docs.ts +48 -0
  282. package/scripts/lib/exec.ts +37 -0
  283. package/scripts/lib/file-ops.ts +58 -0
  284. package/scripts/lib/version.ts +83 -0
  285. package/scripts/lowercase-docs.ts +43 -0
  286. package/scripts/manage-milestone-mrs.ts +279 -0
  287. package/scripts/process-doc-templates.ts +37 -0
  288. package/scripts/rebase-all-mrs.sh +75 -0
  289. package/scripts/schemas/package.schema.ts +75 -0
  290. package/scripts/setup-branch-protection.sh +33 -0
  291. package/scripts/sync-github-pr.sh +48 -0
  292. package/scripts/sync-version.js +40 -0
  293. package/scripts/sync-version.ts +39 -0
  294. package/scripts/sync-versions.ts +488 -0
  295. package/scripts/sync-wiki.sh +50 -0
  296. package/scripts/validate-all.js +127 -0
  297. package/scripts/validate-schema.ts +49 -0
  298. package/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  299. package/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  300. package/spec/v0.2.3/CHANGELOG.md +7 -7
  301. package/spec/v0.2.3/README.md +9 -9
  302. package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  303. package/{dist/spec/v0.2.4-dev → spec/v0.2.4}/CHANGELOG.md +8 -8
  304. package/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
  305. package/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
  306. package/spec/v0.2.5/CHANGELOG.md +401 -0
  307. package/spec/v0.2.5/README.md +72 -0
  308. package/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  309. package/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
  310. package/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  311. package/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  312. package/spec/v0.2.5-RC/README.md +72 -0
  313. package/spec/v0.2.5-RC/migrations/v0.2.3-to-v0.2.4.md +599 -0
  314. package/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  315. package/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  316. package/spec/v0.2.6/CHANGELOG.md +401 -0
  317. package/spec/v0.2.6/README.md +72 -0
  318. package/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  319. package/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  320. package/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  321. package/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  322. package/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  323. package/spec/v0.2.6-dev/README.md +75 -0
  324. package/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  325. package/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  326. package/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
  327. package/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  328. package/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
  329. package/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  330. package/spec/v0.2.7/core/agentgraph.md +324 -0
  331. package/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  332. package/website/{.lighthouserc.js → .lighthouserc.ts} +5 -1
  333. package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +445 -0
  334. package/website/Dockerfile +18 -5
  335. package/website/app/about/page.tsx +60 -51
  336. package/website/app/blog/[slug]/page.tsx +61 -20
  337. package/website/app/blog/page.tsx +120 -33
  338. package/website/app/design-guide/page.tsx +511 -0
  339. package/website/app/docs/[[...slug]]/page.tsx +641 -143
  340. package/website/app/ecosystem/page.tsx +146 -111
  341. package/website/app/examples/page.tsx +51 -41
  342. package/website/app/globals.scss +370 -0
  343. package/website/app/layout.tsx +2 -2
  344. package/website/app/license/page.tsx +183 -0
  345. package/website/app/not-found.tsx +18 -0
  346. package/website/app/page.tsx +513 -236
  347. package/website/app/page.tsx.bak +679 -0
  348. package/website/app/page.tsx.bak2 +649 -0
  349. package/website/app/playground/page.tsx +25 -45
  350. package/website/app/schema/page.tsx +423 -392
  351. package/website/app/specification/page.tsx +245 -169
  352. package/website/components/Logo.tsx +75 -2
  353. package/website/components/docs/DocsSidebar.tsx +40 -3
  354. package/website/components/docs/MarkdownContent.tsx +265 -47
  355. package/website/components/docs/VersionSelector.tsx +64 -8
  356. package/website/components/examples/ExamplesViewer.tsx +2 -2
  357. package/website/components/layout/Footer.tsx +6 -1
  358. package/website/components/layout/Header.tsx +44 -42
  359. package/website/components/schema/SchemaComponentsAccordion.tsx +84 -0
  360. package/website/components/schema/SchemaExplorer.tsx +4 -4
  361. package/website/components/ui/Badge.tsx +82 -0
  362. package/website/components/ui/Button.tsx +116 -0
  363. package/website/components/ui/Card.tsx +167 -0
  364. package/website/components/ui/Checkbox.tsx +141 -0
  365. package/website/components/ui/Input.tsx +169 -0
  366. package/website/components/ui/Radio.tsx +141 -0
  367. package/website/components/ui/Select.tsx +182 -0
  368. package/website/components/ui/Tag.tsx +158 -0
  369. package/website/components/ui/Textarea.tsx +195 -0
  370. package/website/components/ui/index.ts +11 -0
  371. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +276 -276
  372. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +3 -14
  373. package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +286 -0
  374. package/website/content/blog/introducing-ossa-framework.md +1 -1
  375. package/website/content/blog/ossa-production-results.md +5 -5
  376. package/website/content/blog/welcome-to-ossa.md +2 -2
  377. package/website/content/blog/why-ai-agents-need-open-standard.md +5 -5
  378. package/website/content/docs/{00-HOME.md → 00-home.md} +18 -25
  379. package/website/content/docs/adapters/openai-adapter.md +693 -0
  380. package/website/content/docs/agents/catalog.md +28 -0
  381. package/website/content/docs/aiflow-framework-integration-with-ossa.md +107 -0
  382. package/website/content/docs/api-reference/index.md +38 -0
  383. package/website/content/docs/api-reference/ossa-core-api.md +634 -0
  384. package/website/content/docs/api-reference/ossa-registry-api.md +515 -0
  385. package/website/content/docs/api-reference/unified-agent-gateway.md +599 -0
  386. package/website/content/docs/architecture/execution-flow.md +3 -3
  387. package/website/content/docs/architecture/multi-agent-systems.md +4 -4
  388. package/website/content/docs/architecture/overview.md +4 -4
  389. package/website/content/docs/architecture/stack-integration.md +4 -4
  390. package/website/content/docs/changelog.md +4 -4
  391. package/website/content/docs/cli-reference/index.md +111 -0
  392. package/website/content/docs/cli-reference/ossa-agents.md +70 -0
  393. package/website/content/docs/cli-reference/ossa-export.md +56 -0
  394. package/website/content/docs/cli-reference/ossa-generate.md +66 -0
  395. package/website/content/docs/cli-reference/ossa-gitlab-agent.md +57 -0
  396. package/website/content/docs/cli-reference/ossa-import.md +56 -0
  397. package/website/content/docs/cli-reference/ossa-init.md +57 -0
  398. package/website/content/docs/cli-reference/ossa-migrate.md +62 -0
  399. package/website/content/docs/cli-reference/ossa-run.md +66 -0
  400. package/website/content/docs/cli-reference/ossa-schema.md +57 -0
  401. package/website/content/docs/cli-reference/ossa-setup.md +57 -0
  402. package/website/content/docs/cli-reference/ossa-validate.md +66 -0
  403. package/website/content/docs/configuration/index.md +97 -0
  404. package/website/content/docs/contributing.md +2 -2
  405. package/website/content/docs/deployment/github-mirroring.md +924 -0
  406. package/website/content/docs/documentation.md +100 -0
  407. package/website/content/docs/ecosystem/framework-support.md +551 -11
  408. package/website/content/docs/errors/index.md +10 -0
  409. package/website/content/docs/{AIFlow-Framework-Integration-with-OSSA.md → examples/aiflow-framework-integration-with-ossa.md} +2 -2
  410. package/website/content/docs/examples/catalog.md +300 -0
  411. package/website/content/docs/for-audiences/{Students-Researchers.md → students-researchers.md} +1 -1
  412. package/website/content/docs/getting-started/index.md +92 -0
  413. package/website/content/docs/getting-started/installation.md +7 -7
  414. package/website/content/docs/getting-started/running-agents.md +215 -13
  415. package/{docs → website/content/docs}/getting-started.md +10 -6
  416. package/website/content/docs/integrations/aiflow.md +2 -2
  417. package/website/content/docs/integrations/drupal.md +2 -2
  418. package/website/content/docs/migration-guides/agent-schema-comparison.md +232 -0
  419. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +5 -5
  420. package/website/content/docs/migration-guides/crewai-to-ossa.md +3 -3
  421. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +11 -11
  422. package/{docs/migration → website/content/docs/migration-guides}/general-agent-schema.yml +1 -9
  423. package/website/content/docs/migration-guides/index.md +1 -1
  424. package/website/content/docs/migration-guides/langchain-to-ossa.md +17 -17
  425. package/website/content/docs/migration-guides/langflow-to-ossa.md +3 -3
  426. package/website/content/docs/migration-guides/openai-to-ossa.md +10 -10
  427. package/website/content/docs/openapi-extensions/examples.md +9 -9
  428. package/website/content/docs/openapi-extensions/index.md +59 -3
  429. package/website/content/docs/openapi-extensions/operation-extensions.md +61 -2
  430. package/website/content/docs/openapi-extensions/root-extensions.md +49 -3
  431. package/{docs/OSSA-COMPLIANT-BADGE.md → website/content/docs/ossa-compliant-badge.md} +18 -15
  432. package/website/content/docs/pre-release/index.md +10 -10
  433. package/website/content/docs/readme.md +35 -0
  434. package/website/content/docs/releases/v0.2.6.md +99 -0
  435. package/website/content/docs/schema-reference/agent-capabilities.md +50 -0
  436. package/website/content/docs/schema-reference/agent-id.md +52 -0
  437. package/website/content/docs/schema-reference/agent-name.md +50 -0
  438. package/website/content/docs/schema-reference/agent-role.md +54 -0
  439. package/website/content/docs/schema-reference/agent-spec.md +2 -2
  440. package/website/content/docs/schema-reference/agent-version.md +50 -0
  441. package/website/content/docs/schema-reference/autonomy.md +5 -5
  442. package/website/content/docs/schema-reference/constraints.md +5 -5
  443. package/website/content/docs/schema-reference/index.md +26 -157
  444. package/website/content/docs/schema-reference/llm-config.md +1 -1
  445. package/website/content/docs/schema-reference/observability.md +5 -5
  446. package/website/content/docs/schema-reference/ossa-manifest.md +6 -6
  447. package/website/content/docs/schema-reference/taxonomy.md +3 -3
  448. package/website/content/docs/types-reference/index.md +105 -0
  449. package/website/content/docs/use-cases/00-index.md +1 -1
  450. package/{docs/VERSIONING.md → website/content/docs/versioning.md} +9 -5
  451. package/website/dev.sh +53 -0
  452. package/website/docker-compose.dev.yml +36 -0
  453. package/website/lib/version.ts +18 -1
  454. package/website/lib/versions.json +103 -0
  455. package/website/next.config.ts +3 -1
  456. package/website/package-lock.json +552 -18
  457. package/website/package.json +11 -5
  458. package/website/postcss.config.mjs +1 -1
  459. package/website/scripts/fetch-versions.js +166 -0
  460. package/website/scripts/generate-examples-index.js +163 -0
  461. package/website/scripts/merge-docs-to-wiki.ts +207 -0
  462. package/website/scripts/sync-version.js +28 -0
  463. package/website/scripts/sync-wiki.ts +64 -3
  464. package/website/scripts/upload-wiki.ts +199 -0
  465. package/website/styles/_spacing.scss +453 -0
  466. package/website/styles/_tokens.scss +245 -0
  467. package/website/styles/_typography.scss +361 -0
  468. package/website/styles/_variables.scss +287 -0
  469. package/website/tailwind.config.ts +127 -22
  470. package/.releaserc.json.disabled +0 -81
  471. package/dist/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  472. package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  473. package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  474. package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  475. package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  476. package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  477. package/docs/README.md +0 -31
  478. package/docs/agent-openapi-spec.yml +0 -942
  479. package/docs/openapi-extensions.md +0 -930
  480. package/docs/schemas/openapi-extensions.schema.json +0 -486
  481. package/openapi/gitlab-orchestrator.openapi.yaml +0 -330
  482. package/ossa-website-swarm-tasks.json +0 -105
  483. package/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  484. package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  485. package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  486. package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  487. package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  488. package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  489. package/website/app/api/validate/route.ts +0 -88
  490. package/website/app/globals.css +0 -108
  491. package/website/content/docs/OpenAPI-Extensions.md +0 -498
  492. package/website/content/docs/core-concepts/project-structure.md +0 -348
  493. package/website/content/docs/examples/Migration-Guides.md +0 -214
  494. package/website/content/docs/examples.md +0 -71
  495. package/website/content/docs/for-audiences/Enterprises.md +0 -256
  496. package/website/content/docs/for-audiences/architects.md +0 -224
  497. package/website/content/docs/for-audiences/developers.md +0 -220
  498. package/website/content/docs/getting-started/5-minute-overview.md +0 -85
  499. package/website/content/docs/getting-started/Hello-World.md +0 -184
  500. package/website/content/docs/getting-started/first-agent.md +0 -196
  501. package/website/content/docs/migration-guides/00-index.md +0 -76
  502. package/website/content/docs/migration-guides/README.md +0 -133
  503. package/website/next.config.js +0 -17
  504. package/website/postcss.config.js +0 -7
  505. package/website/tailwind.config.js +0 -58
  506. /package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
  507. /package/openapi/{ossa-registry-api.openapi.yaml → core/ossa-registry-api.openapi.yaml} +0 -0
  508. /package/openapi/{drupal-agent-api.openapi.yaml → reference-implementations/drupal-agent-api.openapi.yaml} +0 -0
  509. /package/openapi/{helm-generator.openapi.yaml → reference-implementations/helm-generator.openapi.yaml} +0 -0
  510. /package/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
  511. /package/{docs/migration → website/content/docs/migration-guides}/migration-manifest.json +0 -0
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Sync GitHub PR to GitLab MR
5
+ # Usage: ./sync-github-pr.sh <pr-number>
6
+
7
+ PR_NUMBER=$1
8
+
9
+ if [ -z "$PR_NUMBER" ]; then
10
+ echo "Usage: $0 <pr-number>"
11
+ exit 1
12
+ fi
13
+
14
+ echo "šŸ”„ Syncing GitHub PR #$PR_NUMBER to GitLab..."
15
+
16
+ # Get PR details
17
+ PR_TITLE=$(gh pr view $PR_NUMBER --json title -q .title)
18
+ PR_AUTHOR=$(gh pr view $PR_NUMBER --json author -q .author.login)
19
+ PR_URL="https://github.com/blueflyio/openstandardagents/pull/$PR_NUMBER"
20
+
21
+ # Checkout PR
22
+ gh pr checkout $PR_NUMBER
23
+
24
+ # Create branch for GitLab
25
+ BRANCH_NAME="github-pr-$PR_NUMBER"
26
+ git checkout -b $BRANCH_NAME
27
+
28
+ # Push to GitLab
29
+ git push origin $BRANCH_NAME
30
+
31
+ # Create GitLab MR
32
+ glab mr create \
33
+ --title "GitHub PR #$PR_NUMBER: $PR_TITLE" \
34
+ --description "**From GitHub PR**: $PR_URL
35
+ **Author**: @$PR_AUTHOR
36
+
37
+ $(gh pr view $PR_NUMBER --json body -q .body)
38
+
39
+ ---
40
+
41
+ *This MR was created from a GitHub pull request. Once merged, changes will sync back to GitHub.*" \
42
+ --source-branch $BRANCH_NAME \
43
+ --target-branch main \
44
+ --label "github-pr"
45
+
46
+ echo "āœ… Created GitLab MR from GitHub PR #$PR_NUMBER"
47
+ echo " Branch: $BRANCH_NAME"
48
+ echo " Review on GitLab, then merge to sync back to GitHub"
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { readFileSync, writeFileSync } from 'fs';
4
+ import { resolve } from 'path';
5
+
6
+ const { version } = JSON.parse(readFileSync('package.json', 'utf-8'));
7
+
8
+ const files = [
9
+ {
10
+ path: 'website/src/config.ts',
11
+ pattern: /version:\s*['"][\d.]+['"]/,
12
+ replacement: `version: '${version}'`
13
+ },
14
+ {
15
+ path: 'src/version.ts',
16
+ pattern: /VERSION\s*=\s*['"][\d.]+['"]/,
17
+ replacement: `VERSION = '${version}'`
18
+ }
19
+ ];
20
+
21
+ console.log(`šŸ“¦ Syncing version: ${version}\n`);
22
+
23
+ let updated = 0;
24
+ for (const { path, pattern, replacement } of files) {
25
+ try {
26
+ const content = readFileSync(path, 'utf-8');
27
+ if (pattern.test(content)) {
28
+ const newContent = content.replace(pattern, replacement);
29
+ writeFileSync(path, newContent);
30
+ console.log(`āœ“ ${path}`);
31
+ updated++;
32
+ } else {
33
+ console.log(`⚠ ${path} - pattern not found`);
34
+ }
35
+ } catch (err) {
36
+ console.log(`āœ— ${path} - ${err.message}`);
37
+ }
38
+ }
39
+
40
+ console.log(`\n${updated} files updated`);
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env tsx
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+
5
+ const VERSION_FILE = path.join(process.cwd(), '.version.json');
6
+ const versionConfig = JSON.parse(fs.readFileSync(VERSION_FILE, 'utf-8'));
7
+ const { current } = versionConfig;
8
+
9
+ // Update package.json
10
+ const pkgPath = path.join(process.cwd(), 'package.json');
11
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
12
+ pkg.version = current;
13
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
14
+
15
+ // Update website package.json
16
+ const websitePkgPath = path.join(process.cwd(), 'website/package.json');
17
+ const websitePkg = JSON.parse(fs.readFileSync(websitePkgPath, 'utf-8'));
18
+ websitePkg.version = current;
19
+ fs.writeFileSync(websitePkgPath, JSON.stringify(websitePkg, null, 2) + '\n');
20
+
21
+ // Update README badge
22
+ const readmePath = path.join(process.cwd(), 'README.md');
23
+ let readme = fs.readFileSync(readmePath, 'utf-8');
24
+ readme = readme.replace(
25
+ /\[!\[Specification\]\(https:\/\/img\.shields\.io\/badge\/Spec-v[^-\)]+(-[^-\)]+)?-blue\)\]/g,
26
+ `[![Specification](https://img.shields.io/badge/Spec-v${current}-blue)]`
27
+ );
28
+ fs.writeFileSync(readmePath, readme);
29
+
30
+ // Update website home
31
+ const homePath = path.join(process.cwd(), 'website/content/docs/00-HOME.md');
32
+ let home = fs.readFileSync(homePath, 'utf-8');
33
+ home = home.replace(
34
+ /\[!\[Specification\]\(https:\/\/img\.shields\.io\/badge\/Spec-v[^-\)]+(-[^-\)]+)?-blue\)\]/g,
35
+ `[![Specification](https://img.shields.io/badge/Spec-v${current}-blue)]`
36
+ );
37
+ fs.writeFileSync(homePath, home);
38
+
39
+ console.log(`āœ… Synced version to ${current}`);
@@ -0,0 +1,488 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * OSSA Version Sync Script (Zod Edition)
5
+ *
6
+ * Automatically synchronizes version references across the entire project.
7
+ * Single source of truth: package.json version field
8
+ *
9
+ * Uses Zod for runtime validation and type safety.
10
+ *
11
+ * Updates:
12
+ * - README.md (schema links, badges, examples)
13
+ * - spec/vX.Y.Z/ directory creation
14
+ * - website/docs version references
15
+ * - OpenAPI spec version fields
16
+ * - CHANGELOG.md unreleased section
17
+ *
18
+ * Usage:
19
+ * npx tsx scripts/sync-versions.ts [--check|--fix]
20
+ *
21
+ * --check: Validate version consistency (CI mode)
22
+ * --fix: Update all version references
23
+ */
24
+
25
+ import fs from 'fs';
26
+ import path from 'path';
27
+ import { fileURLToPath } from 'url';
28
+ import { z } from 'zod';
29
+
30
+ const __filename = fileURLToPath(import.meta.url);
31
+ const __dirname = path.dirname(__filename);
32
+
33
+ // ============================================================================
34
+ // Zod Schemas
35
+ // ============================================================================
36
+
37
+ const PackageJsonSchema = z.object({
38
+ name: z.string(),
39
+ version: z.string().regex(/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$/, 'Invalid semver version'),
40
+ exports: z.object({
41
+ './schema': z.string().optional(),
42
+ }).passthrough().optional(),
43
+ }).passthrough();
44
+
45
+ const ConfigSchema = z.object({
46
+ root: z.string(),
47
+ packageJson: z.string(),
48
+ readme: z.string(),
49
+ changelog: z.string(),
50
+ releasing: z.string(),
51
+ specDir: z.string(),
52
+ mode: z.enum(['check', 'fix']),
53
+ });
54
+
55
+ const ResultSchema = z.object({
56
+ errors: z.array(z.string()),
57
+ changes: z.array(z.string()),
58
+ warnings: z.array(z.string()),
59
+ });
60
+
61
+ type PackageJson = z.infer<typeof PackageJsonSchema>;
62
+ type Config = z.infer<typeof ConfigSchema>;
63
+ type Result = z.infer<typeof ResultSchema>;
64
+
65
+ // ============================================================================
66
+ // Configuration
67
+ // ============================================================================
68
+
69
+ const ROOT = path.resolve(__dirname, '..');
70
+ const PACKAGE_JSON = path.join(ROOT, 'package.json');
71
+ const README = path.join(ROOT, 'README.md');
72
+ const CHANGELOG = path.join(ROOT, 'CHANGELOG.md');
73
+ const RELEASING = path.join(ROOT, 'RELEASING.md');
74
+ const SPEC_DIR = path.join(ROOT, 'spec');
75
+
76
+ // Mode: check or fix
77
+ const MODE = process.argv[2] === '--check' ? 'check' : 'fix';
78
+
79
+ const config: Config = ConfigSchema.parse({
80
+ root: ROOT,
81
+ packageJson: PACKAGE_JSON,
82
+ readme: README,
83
+ changelog: CHANGELOG,
84
+ releasing: RELEASING,
85
+ specDir: SPEC_DIR,
86
+ mode: MODE,
87
+ });
88
+
89
+ const result: Result = {
90
+ errors: [],
91
+ changes: [],
92
+ warnings: [],
93
+ };
94
+
95
+ // ============================================================================
96
+ // Version Management
97
+ // ============================================================================
98
+
99
+ /**
100
+ * Get current version from package.json with validation
101
+ */
102
+ function getCurrentVersion(): string {
103
+ try {
104
+ const pkgRaw = fs.readFileSync(config.packageJson, 'utf8');
105
+ const pkg = PackageJsonSchema.parse(JSON.parse(pkgRaw));
106
+ return pkg.version;
107
+ } catch (error) {
108
+ if (error instanceof z.ZodError) {
109
+ result.errors.push(`package.json validation failed: ${error.issues.map((e: z.ZodIssue) => e.message).join(', ')}`);
110
+ } else {
111
+ result.errors.push(`Failed to read package.json: ${error instanceof Error ? error.message : String(error)}`);
112
+ }
113
+ throw error;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Get package.json as validated object
119
+ */
120
+ function getPackageJson(): PackageJson {
121
+ const pkgRaw = fs.readFileSync(config.packageJson, 'utf8');
122
+ return PackageJsonSchema.parse(JSON.parse(pkgRaw));
123
+ }
124
+
125
+ // ============================================================================
126
+ // Spec Directory Management
127
+ // ============================================================================
128
+
129
+ /**
130
+ * Check if spec directory exists for version
131
+ */
132
+ function checkSpecDirectory(version: string): boolean {
133
+ const specPath = path.join(config.specDir, `v${version}`);
134
+ return fs.existsSync(specPath);
135
+ }
136
+
137
+ /**
138
+ * Create spec directory for version (copy from latest)
139
+ */
140
+ function createSpecDirectory(version: string): void {
141
+ const newSpecPath = path.join(config.specDir, `v${version}`);
142
+
143
+ if (fs.existsSync(newSpecPath)) {
144
+ console.log(`āœ“ Spec directory already exists: spec/v${version}/`);
145
+ return;
146
+ }
147
+
148
+ // Find latest spec directory
149
+ const specDirs = fs.readdirSync(config.specDir)
150
+ .filter(d => d.startsWith('v') && !d.includes('-dev') && fs.statSync(path.join(config.specDir, d)).isDirectory())
151
+ .sort((a, b) => {
152
+ const aVer = a.slice(1).split('.').map(Number);
153
+ const bVer = b.slice(1).split('.').map(Number);
154
+ for (let i = 0; i < 3; i++) {
155
+ if (aVer[i] !== bVer[i]) return (bVer[i] || 0) - (aVer[i] || 0);
156
+ }
157
+ return 0;
158
+ });
159
+
160
+ if (specDirs.length === 0) {
161
+ result.errors.push(`No existing spec directories found to copy from`);
162
+ return;
163
+ }
164
+
165
+ const latestSpec = specDirs[0];
166
+ const sourceSpecPath = path.join(config.specDir, latestSpec);
167
+
168
+ if (config.mode === 'check') {
169
+ result.errors.push(`Spec directory missing: spec/v${version}/`);
170
+ return;
171
+ }
172
+
173
+ // Copy directory
174
+ console.log(`Creating spec/v${version}/ from ${latestSpec}...`);
175
+ try {
176
+ fs.cpSync(sourceSpecPath, newSpecPath, { recursive: true });
177
+ } catch (error) {
178
+ result.errors.push(`Failed to copy spec directory: ${error instanceof Error ? error.message : String(error)}`);
179
+ return;
180
+ }
181
+
182
+ // Update schema version in copied files
183
+ const oldVersion = latestSpec.slice(1);
184
+ const schemaFile = path.join(newSpecPath, `ossa-${oldVersion}.schema.json`);
185
+ const newSchemaFile = path.join(newSpecPath, `ossa-${version}.schema.json`);
186
+
187
+ if (fs.existsSync(schemaFile)) {
188
+ try {
189
+ const schema = JSON.parse(fs.readFileSync(schemaFile, 'utf8'));
190
+ schema.$id = schema.$id.replace(`v${oldVersion}`, `v${version}`);
191
+ schema.properties.ossaVersion.const = version;
192
+
193
+ fs.writeFileSync(newSchemaFile, JSON.stringify(schema, null, 2));
194
+
195
+ if (schemaFile !== newSchemaFile) {
196
+ fs.unlinkSync(schemaFile);
197
+ }
198
+ } catch (error) {
199
+ result.errors.push(`Failed to update schema file: ${error instanceof Error ? error.message : String(error)}`);
200
+ return;
201
+ }
202
+ }
203
+
204
+ result.changes.push(`Created spec/v${version}/ directory`);
205
+ }
206
+
207
+ // ============================================================================
208
+ // File Updates
209
+ // ============================================================================
210
+
211
+ /**
212
+ * Semver pattern that matches versions with optional pre-release tags
213
+ * Matches: 0.2.5, 0.2.5-RC, 0.2.5-alpha.1, 1.0.0-beta.2, etc.
214
+ */
215
+ const SEMVER_PATTERN = '[\\d]+\\.[\\d]+\\.[\\d]+(?:-[a-zA-Z0-9.]+)?';
216
+
217
+ /**
218
+ * Update README.md version references
219
+ */
220
+ function updateReadme(version: string): void {
221
+ if (!fs.existsSync(config.readme)) {
222
+ result.errors.push('README.md not found');
223
+ return;
224
+ }
225
+
226
+ let readme = fs.readFileSync(config.readme, 'utf8');
227
+ const original = readme;
228
+
229
+ // Update schema references (spec/vX.Y.Z/ossa-X.Y.Z.schema.json)
230
+ const schemaRegex = new RegExp(`spec/v${SEMVER_PATTERN}/ossa-${SEMVER_PATTERN}\\.schema\\.json`, 'g');
231
+ readme = readme.replace(schemaRegex, `spec/v${version}/ossa-${version}.schema.json`);
232
+
233
+ // Update version in YAML examples (ossaVersion: "X.Y.Z")
234
+ const yamlVersionRegex = new RegExp(`ossaVersion:\\s*["']${SEMVER_PATTERN}["']`, 'g');
235
+ readme = readme.replace(yamlVersionRegex, `ossaVersion: "${version}"`);
236
+
237
+ // Update "OSSA vX.Y.Z Schema:" header pattern
238
+ const headerRegex = new RegExp(`OSSA v${SEMVER_PATTERN} Schema:`, 'g');
239
+ readme = readme.replace(headerRegex, `OSSA v${version} Schema:`);
240
+
241
+ // Update version references in spec paths (e.g., spec/v0.2.5-RC/)
242
+ const versionLinkRegex = new RegExp(`spec/v${SEMVER_PATTERN}/`, 'g');
243
+ readme = readme.replace(versionLinkRegex, `spec/v${version}/`);
244
+
245
+ // Update ossa-X.Y.Z.yaml references
246
+ const yamlFileRegex = new RegExp(`ossa-${SEMVER_PATTERN}\\.yaml`, 'g');
247
+ readme = readme.replace(yamlFileRegex, `ossa-${version}.yaml`);
248
+
249
+ if (readme !== original) {
250
+ if (config.mode === 'check') {
251
+ result.errors.push('README.md has outdated version references');
252
+ } else {
253
+ fs.writeFileSync(config.readme, readme);
254
+ result.changes.push('Updated README.md version references');
255
+ }
256
+ } else {
257
+ console.log('āœ“ README.md version references are current');
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Update RELEASING.md current version
263
+ */
264
+ function updateReleasing(version: string): void {
265
+ if (!fs.existsSync(config.releasing)) {
266
+ result.warnings.push('RELEASING.md not found');
267
+ return;
268
+ }
269
+
270
+ let releasing = fs.readFileSync(config.releasing, 'utf8');
271
+ const original = releasing;
272
+
273
+ // Update "Current Version: X.Y.Z" line
274
+ const currentVersionRegex = /\*\*Current Version\*\*:\s*[\d.\-a-zA-Z]+/;
275
+ if (currentVersionRegex.test(releasing)) {
276
+ releasing = releasing.replace(currentVersionRegex, `**Current Version**: ${version}`);
277
+ }
278
+
279
+ if (releasing !== original) {
280
+ if (config.mode === 'check') {
281
+ result.errors.push(`RELEASING.md has outdated version (should be ${version})`);
282
+ } else {
283
+ fs.writeFileSync(config.releasing, releasing);
284
+ result.changes.push('Updated RELEASING.md current version');
285
+ }
286
+ } else {
287
+ console.log('āœ“ RELEASING.md is current');
288
+ }
289
+ }
290
+
291
+ /**
292
+ * Update CHANGELOG.md unreleased section
293
+ */
294
+ function updateChangelog(version: string): void {
295
+ if (!fs.existsSync(config.changelog)) {
296
+ result.warnings.push('CHANGELOG.md not found');
297
+ return;
298
+ }
299
+
300
+ let changelog = fs.readFileSync(config.changelog, 'utf8');
301
+ const original = changelog;
302
+
303
+ // Replace [Unreleased] with [vX.Y.Z] - YYYY-MM-DD
304
+ const today = new Date().toISOString().split('T')[0];
305
+ const unreleasedRegex = /## \[Unreleased\]/;
306
+
307
+ if (unreleasedRegex.test(changelog)) {
308
+ changelog = changelog.replace(
309
+ unreleasedRegex,
310
+ `## [v${version}] - ${today}`
311
+ );
312
+
313
+ if (config.mode === 'check') {
314
+ result.errors.push('CHANGELOG.md has [Unreleased] section that should be versioned');
315
+ } else {
316
+ fs.writeFileSync(config.changelog, changelog);
317
+ result.changes.push(`Updated CHANGELOG.md: [Unreleased] → [v${version}]`);
318
+ }
319
+ } else {
320
+ console.log('āœ“ CHANGELOG.md is current');
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Update package.json exports
326
+ */
327
+ function updatePackageExports(version: string): void {
328
+ const pkg = getPackageJson();
329
+
330
+ if (pkg.exports && pkg.exports['./schema']) {
331
+ const expectedSchema = `./spec/v${version}/ossa-${version}.schema.json`;
332
+ const currentSchema = pkg.exports['./schema'];
333
+
334
+ // Check if current schema matches ANY version pattern (not just the expected one)
335
+ const schemaVersionRegex = new RegExp(`\\./spec/v${SEMVER_PATTERN}/ossa-${SEMVER_PATTERN}\\.schema\\.json`);
336
+
337
+ if (currentSchema !== expectedSchema) {
338
+ if (config.mode === 'check') {
339
+ result.errors.push(`package.json exports["./schema"] is "${currentSchema}", should be "${expectedSchema}"`);
340
+ } else {
341
+ pkg.exports['./schema'] = expectedSchema;
342
+ fs.writeFileSync(config.packageJson, JSON.stringify(pkg, null, 2) + '\n');
343
+ result.changes.push('Updated package.json schema export');
344
+ }
345
+ } else {
346
+ console.log('āœ“ package.json schema export is current');
347
+ }
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Update website documentation
353
+ */
354
+ function updateWebsiteDocs(version: string): void {
355
+ const websiteDir = path.join(config.root, 'website', 'content', 'docs');
356
+
357
+ if (!fs.existsSync(websiteDir)) {
358
+ result.warnings.push('website/content/docs/ not found (skipping)');
359
+ return;
360
+ }
361
+
362
+ // Recursively find all .md files
363
+ function findMarkdownFiles(dir: string): string[] {
364
+ const files: string[] = [];
365
+ const items = fs.readdirSync(dir);
366
+
367
+ items.forEach(item => {
368
+ const fullPath = path.join(dir, item);
369
+ const stat = fs.statSync(fullPath);
370
+
371
+ if (stat.isDirectory()) {
372
+ files.push(...findMarkdownFiles(fullPath));
373
+ } else if (item.endsWith('.md') || item.endsWith('.mdx')) {
374
+ files.push(fullPath);
375
+ }
376
+ });
377
+
378
+ return files;
379
+ }
380
+
381
+ const mdFiles = findMarkdownFiles(websiteDir);
382
+ let updated = 0;
383
+
384
+ mdFiles.forEach(file => {
385
+ let content = fs.readFileSync(file, 'utf8');
386
+ const original = content;
387
+
388
+ // Update version references (but not version history sections)
389
+ // Use same SEMVER_PATTERN to catch pre-release versions like -RC, -alpha, -beta
390
+ const yamlVersionRegex = new RegExp(`ossaVersion:\\s*["']${SEMVER_PATTERN}["']`, 'g');
391
+ content = content.replace(yamlVersionRegex, `ossaVersion: "${version}"`);
392
+
393
+ const schemaRegex = new RegExp(`spec/v${SEMVER_PATTERN}/ossa-${SEMVER_PATTERN}\\.schema\\.json`, 'g');
394
+ content = content.replace(schemaRegex, `spec/v${version}/ossa-${version}.schema.json`);
395
+
396
+ // Also update spec directory links
397
+ const specLinkRegex = new RegExp(`spec/v${SEMVER_PATTERN}/`, 'g');
398
+ content = content.replace(specLinkRegex, `spec/v${version}/`);
399
+
400
+ if (content !== original) {
401
+ if (config.mode === 'check') {
402
+ result.errors.push(`${path.relative(config.root, file)} has outdated version references`);
403
+ } else {
404
+ fs.writeFileSync(file, content);
405
+ updated++;
406
+ }
407
+ }
408
+ });
409
+
410
+ if (updated > 0) {
411
+ result.changes.push(`Updated ${updated} website documentation files`);
412
+ } else if (mdFiles.length > 0) {
413
+ console.log('āœ“ Website documentation is current');
414
+ }
415
+ }
416
+
417
+ // ============================================================================
418
+ // Main Execution
419
+ // ============================================================================
420
+
421
+ function main(): void {
422
+ console.log('šŸ”„ OSSA Version Sync (Zod Edition)');
423
+ console.log('==================================\n');
424
+
425
+ const version = getCurrentVersion();
426
+ console.log(`šŸ“¦ Current version: ${version}`);
427
+ console.log(`šŸ”§ Mode: ${config.mode.toUpperCase()}\n`);
428
+
429
+ // Run checks/fixes
430
+ createSpecDirectory(version);
431
+ updateReadme(version);
432
+ updateReleasing(version);
433
+ updateChangelog(version);
434
+ updatePackageExports(version);
435
+ updateWebsiteDocs(version);
436
+
437
+ // Report results
438
+ console.log('\n' + '='.repeat(50));
439
+
440
+ if (config.mode === 'check') {
441
+ if (result.errors.length > 0) {
442
+ console.log('\nāŒ Version consistency check FAILED:\n');
443
+ result.errors.forEach(err => console.log(` • ${err}`));
444
+ console.log('\nRun with --fix to update all references');
445
+ process.exit(1);
446
+ } else {
447
+ console.log('\nāœ… All version references are consistent!');
448
+ if (result.warnings.length > 0) {
449
+ console.log('\nāš ļø Warnings:\n');
450
+ result.warnings.forEach(warn => console.log(` • ${warn}`));
451
+ }
452
+ process.exit(0);
453
+ }
454
+ } else {
455
+ if (result.changes.length > 0) {
456
+ console.log('\nāœ… Version sync complete:\n');
457
+ result.changes.forEach(change => console.log(` • ${change}`));
458
+ console.log('\nšŸ’” Review changes and commit:');
459
+ console.log(` git add .`);
460
+ console.log(` git commit -m "chore: sync version references to v${version}"`);
461
+ } else {
462
+ console.log('\nāœ… All version references are already current!');
463
+ }
464
+
465
+ if (result.errors.length > 0) {
466
+ console.log('\nāŒ Errors:\n');
467
+ result.errors.forEach(err => console.log(` • ${err}`));
468
+ process.exit(1);
469
+ }
470
+
471
+ if (result.warnings.length > 0) {
472
+ console.log('\nāš ļø Warnings:\n');
473
+ result.warnings.forEach(warn => console.log(` • ${warn}`));
474
+ }
475
+ }
476
+ }
477
+
478
+ // Run
479
+ try {
480
+ main();
481
+ } catch (error) {
482
+ console.error('\nāŒ Fatal Error:', error instanceof Error ? error.message : String(error));
483
+ if (error instanceof z.ZodError) {
484
+ console.error('\nValidation Errors:');
485
+ error.issues.forEach((err: z.ZodIssue) => console.error(` • ${err.path.join('.')}: ${err.message}`));
486
+ }
487
+ process.exit(1);
488
+ }
@@ -0,0 +1,50 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Sync public wiki pages from GitLab to GitHub
5
+ # Usage: ./sync-wiki.sh
6
+
7
+ GITLAB_WIKI="https://gitlab.com/blueflyio/openstandardagents.wiki.git"
8
+ GITHUB_WIKI="https://github.com/blueflyio/openstandardagents.wiki.git"
9
+
10
+ # Public pages to sync
11
+ PUBLIC_PAGES=(
12
+ "home.md"
13
+ "Getting-Started.md"
14
+ "CLI-Utilities.md"
15
+ "V0.2.6-Release-Notes.md"
16
+ "Upgrading-to-v0.2.6.md"
17
+ "README.md"
18
+ )
19
+
20
+ echo "šŸ“š Syncing wiki pages..."
21
+
22
+ # Clone wikis
23
+ rm -rf /tmp/gitlab-wiki /tmp/github-wiki
24
+ git clone $GITLAB_WIKI /tmp/gitlab-wiki
25
+ git clone $GITHUB_WIKI /tmp/github-wiki
26
+
27
+ # Sync public pages
28
+ cd /tmp/gitlab-wiki
29
+ for page in "${PUBLIC_PAGES[@]}"; do
30
+ if [ -f "$page" ]; then
31
+ echo " āœ“ $page"
32
+ cp "$page" "/tmp/github-wiki/$page"
33
+ else
34
+ echo " ⚠ $page not found"
35
+ fi
36
+ done
37
+
38
+ # Commit and push to GitHub
39
+ cd /tmp/github-wiki
40
+ git add .
41
+ if git diff --staged --quiet; then
42
+ echo "No changes to sync"
43
+ else
44
+ git commit -m "Sync from GitLab wiki $(date +%Y-%m-%d)"
45
+ git push
46
+ echo "āœ… Wiki synced to GitHub"
47
+ fi
48
+
49
+ # Cleanup
50
+ rm -rf /tmp/gitlab-wiki /tmp/github-wiki