@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,58 @@
1
+ /**
2
+ * File Operations Utilities
3
+ *
4
+ * DRY: Reusable file operations with proper error handling
5
+ * Type-safe: Validates paths and operations
6
+ */
7
+
8
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
9
+ import { z } from 'zod';
10
+
11
+ const FilePathSchema = z.string().min(1);
12
+
13
+ /**
14
+ * Read file with validation
15
+ */
16
+ export function readFile(filePath: string): string {
17
+ const validatedPath = FilePathSchema.parse(filePath);
18
+
19
+ if (!existsSync(validatedPath)) {
20
+ throw new Error(`File not found: ${validatedPath}`);
21
+ }
22
+
23
+ try {
24
+ return readFileSync(validatedPath, 'utf8');
25
+ } catch (error) {
26
+ throw new Error(`Failed to read file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Write file with validation
32
+ */
33
+ export function writeFile(filePath: string, content: string): void {
34
+ const validatedPath = FilePathSchema.parse(filePath);
35
+
36
+ try {
37
+ writeFileSync(validatedPath, content, 'utf8');
38
+ } catch (error) {
39
+ throw new Error(`Failed to write file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Check if file exists
45
+ */
46
+ export function fileExists(filePath: string): boolean {
47
+ const validatedPath = FilePathSchema.parse(filePath);
48
+ return existsSync(validatedPath);
49
+ }
50
+
51
+ /**
52
+ * Validate file exists or throw
53
+ */
54
+ export function requireFile(filePath: string, errorMessage?: string): void {
55
+ if (!fileExists(filePath)) {
56
+ throw new Error(errorMessage || `Required file not found: ${filePath}`);
57
+ }
58
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Version Management Utilities
3
+ *
4
+ * DRY: Single source of truth for version operations
5
+ * Type-safe: Uses Zod for validation
6
+ */
7
+
8
+ import { readFileSync } from 'fs';
9
+ import { join, dirname } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { z } from 'zod';
12
+ import {
13
+ PackageJsonSchema,
14
+ VersionSchema,
15
+ type PackageJson,
16
+ type Version,
17
+ } from '../schemas/package.schema.js';
18
+
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+ const ROOT = join(__dirname, '..', '..');
22
+
23
+ /**
24
+ * Get current version from package.json with Zod validation
25
+ */
26
+ export function getCurrentVersion(): Version {
27
+ const packageJsonPath = join(ROOT, 'package.json');
28
+ const content = readFileSync(packageJsonPath, 'utf8');
29
+
30
+ try {
31
+ const json = JSON.parse(content);
32
+ const pkg = PackageJsonSchema.parse(json);
33
+ return VersionSchema.parse(pkg.version);
34
+ } catch (error) {
35
+ if (error instanceof z.ZodError) {
36
+ throw new Error(
37
+ `Invalid package.json version: ${error.errors.map((e) => e.message).join(', ')}`
38
+ );
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Get package.json with validation
46
+ */
47
+ export function getPackageJson(): PackageJson {
48
+ const packageJsonPath = join(ROOT, 'package.json');
49
+ const content = readFileSync(packageJsonPath, 'utf8');
50
+
51
+ try {
52
+ const json = JSON.parse(content);
53
+ return PackageJsonSchema.parse(json);
54
+ } catch (error) {
55
+ if (error instanceof z.ZodError) {
56
+ throw new Error(
57
+ `Invalid package.json: ${error.errors.map((e) => e.message).join(', ')}`
58
+ );
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Build schema path from version
66
+ */
67
+ export function getSchemaPath(version: Version): string {
68
+ return `spec/v${version}/ossa-${version}.schema.json`;
69
+ }
70
+
71
+ /**
72
+ * Build output path for generated types
73
+ */
74
+ export function getTypesOutputPath(version: Version): string {
75
+ return `src/types/generated/ossa-${version}.types.ts`;
76
+ }
77
+
78
+ /**
79
+ * Build output path for generated Zod schemas
80
+ */
81
+ export function getZodOutputPath(version: Version): string {
82
+ return `src/types/generated/ossa-${version}.zod.ts`;
83
+ }
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Convert all documentation filenames to lowercase
4
+ */
5
+
6
+ import { readdirSync, renameSync, statSync } from 'fs';
7
+ import { join, basename, dirname } from 'path';
8
+
9
+ const DOCS_DIR = join(process.cwd(), 'website/content/docs');
10
+
11
+ function lowercaseFiles(dir: string) {
12
+ const entries = readdirSync(dir);
13
+
14
+ for (const entry of entries) {
15
+ const fullPath = join(dir, entry);
16
+ const stat = statSync(fullPath);
17
+
18
+ if (stat.isDirectory()) {
19
+ // Recursively process subdirectories
20
+ lowercaseFiles(fullPath);
21
+
22
+ // Rename directory if needed
23
+ const lowerEntry = entry.toLowerCase();
24
+ if (entry !== lowerEntry) {
25
+ const newPath = join(dirname(fullPath), lowerEntry);
26
+ console.log(`📁 Renaming: ${entry} → ${lowerEntry}`);
27
+ renameSync(fullPath, newPath);
28
+ }
29
+ } else if (entry.endsWith('.md')) {
30
+ // Rename file if needed
31
+ const lowerEntry = entry.toLowerCase();
32
+ if (entry !== lowerEntry) {
33
+ const newPath = join(dirname(fullPath), lowerEntry);
34
+ console.log(`📄 Renaming: ${entry} → ${lowerEntry}`);
35
+ renameSync(fullPath, newPath);
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ console.log('🔄 Converting documentation filenames to lowercase...\n');
42
+ lowercaseFiles(DOCS_DIR);
43
+ console.log('\n✅ Done!');
@@ -0,0 +1,279 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Manage Merge Requests for a specific milestone
4
+ * Helps clean up and organize MRs for controlled releases
5
+ */
6
+
7
+ import { Gitlab } from '@gitbeaker/node';
8
+ import { Command } from 'commander';
9
+
10
+ const gitlab = new Gitlab({
11
+ token: process.env.GITLAB_TOKEN || process.env.GITLAB_ACCESS_TOKEN,
12
+ host: 'https://gitlab.com',
13
+ });
14
+
15
+ const PROJECT_ID = '76265294'; // blueflyio/openstandardagents
16
+
17
+ interface MRInfo {
18
+ iid: number;
19
+ title: string;
20
+ state: string;
21
+ target_branch: string;
22
+ source_branch: string;
23
+ milestone?: { title: string };
24
+ has_conflicts: boolean;
25
+ merge_status: string;
26
+ web_url: string;
27
+ }
28
+
29
+ async function listMRsInMilestone(milestone: string) {
30
+ console.log(`\n📋 Listing MRs in milestone: ${milestone}\n`);
31
+
32
+ const mrs = await gitlab.MergeRequests.all({
33
+ projectId: PROJECT_ID,
34
+ state: 'opened',
35
+ milestone,
36
+ });
37
+
38
+ if (mrs.length === 0) {
39
+ console.log('No open MRs found in this milestone.');
40
+ return;
41
+ }
42
+
43
+ console.log(`Found ${mrs.length} open MRs:\n`);
44
+
45
+ for (const mr of mrs) {
46
+ const status = mr.has_conflicts ? '❌ CONFLICTS' : '✅ Clean';
47
+ const target = mr.target_branch === 'development' ? '✅ dev' : `⚠️ ${mr.target_branch}`;
48
+
49
+ console.log(`!${mr.iid}: ${mr.title}`);
50
+ console.log(` Target: ${target} | Status: ${status}`);
51
+ console.log(` ${mr.web_url}\n`);
52
+ }
53
+ }
54
+
55
+ async function listMRsNotInMilestone(milestone: string) {
56
+ console.log(`\n📋 Listing open MRs NOT in milestone: ${milestone}\n`);
57
+
58
+ const allMRs = await gitlab.MergeRequests.all({
59
+ projectId: PROJECT_ID,
60
+ state: 'opened',
61
+ });
62
+
63
+ const outsideMRs = allMRs.filter(
64
+ (mr: any) => !mr.milestone || mr.milestone.title !== milestone
65
+ );
66
+
67
+ if (outsideMRs.length === 0) {
68
+ console.log('All open MRs are in the milestone.');
69
+ return;
70
+ }
71
+
72
+ console.log(`Found ${outsideMRs.length} MRs outside milestone:\n`);
73
+
74
+ for (const mr of outsideMRs) {
75
+ const milestoneText = mr.milestone ? mr.milestone.title : 'No milestone';
76
+ console.log(`!${mr.iid}: ${mr.title}`);
77
+ console.log(` Milestone: ${milestoneText}`);
78
+ console.log(` Target: ${mr.target_branch}`);
79
+ console.log(` ${mr.web_url}\n`);
80
+ }
81
+ }
82
+
83
+ async function retargetMR(mrId: number, targetBranch: string) {
84
+ console.log(`\n🎯 Retargeting MR !${mrId} to ${targetBranch}...\n`);
85
+
86
+ try {
87
+ await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
88
+ target_branch: targetBranch,
89
+ });
90
+
91
+ console.log(`✅ Successfully retargeted MR !${mrId} to ${targetBranch}`);
92
+ } catch (error: any) {
93
+ console.error(`❌ Failed to retarget MR: ${error.message}`);
94
+ process.exit(1);
95
+ }
96
+ }
97
+
98
+ async function closeMR(mrId: number, reason: string) {
99
+ console.log(`\n🚫 Closing MR !${mrId}...\n`);
100
+
101
+ try {
102
+ // Add comment explaining closure
103
+ await gitlab.MergeRequestNotes.create(PROJECT_ID, mrId, {
104
+ body: `Closing this MR: ${reason}\n\nIf this work is still needed, please rebase and assign to the appropriate milestone.`,
105
+ });
106
+
107
+ // Close the MR
108
+ await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
109
+ state_event: 'close',
110
+ });
111
+
112
+ console.log(`✅ Successfully closed MR !${mrId}`);
113
+ } catch (error: any) {
114
+ console.error(`❌ Failed to close MR: ${error.message}`);
115
+ process.exit(1);
116
+ }
117
+ }
118
+
119
+ async function rebaseMR(mrId: number) {
120
+ console.log(`\n🔄 Rebasing MR !${mrId}...\n`);
121
+
122
+ try {
123
+ await gitlab.MergeRequests.rebase(PROJECT_ID, mrId);
124
+ console.log(`✅ Rebase initiated for MR !${mrId}`);
125
+ console.log(' Check the MR page for rebase status.');
126
+ } catch (error: any) {
127
+ console.error(`❌ Failed to rebase MR: ${error.message}`);
128
+ process.exit(1);
129
+ }
130
+ }
131
+
132
+ async function assignMilestone(mrId: number, milestone: string) {
133
+ console.log(`\n🏷️ Assigning MR !${mrId} to milestone ${milestone}...\n`);
134
+
135
+ try {
136
+ // Get milestone ID
137
+ const milestones = await gitlab.ProjectMilestones.all(PROJECT_ID);
138
+ const targetMilestone = milestones.find((m: any) => m.title === milestone);
139
+
140
+ if (!targetMilestone) {
141
+ throw new Error(`Milestone "${milestone}" not found`);
142
+ }
143
+
144
+ await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
145
+ milestone_id: targetMilestone.id,
146
+ });
147
+
148
+ console.log(`✅ Successfully assigned MR !${mrId} to milestone ${milestone}`);
149
+ } catch (error: any) {
150
+ console.error(`❌ Failed to assign milestone: ${error.message}`);
151
+ process.exit(1);
152
+ }
153
+ }
154
+
155
+ async function bulkRetarget(milestone: string, targetBranch: string) {
156
+ console.log(`\n🎯 Bulk retargeting all MRs in ${milestone} to ${targetBranch}...\n`);
157
+
158
+ const mrs = await gitlab.MergeRequests.all({
159
+ projectId: PROJECT_ID,
160
+ state: 'opened',
161
+ milestone,
162
+ });
163
+
164
+ console.log(`Found ${mrs.length} MRs to retarget\n`);
165
+
166
+ for (const mr of mrs) {
167
+ if (mr.target_branch !== targetBranch) {
168
+ console.log(`Retargeting !${mr.iid}: ${mr.title}`);
169
+ await retargetMR(mr.iid, targetBranch);
170
+ } else {
171
+ console.log(`Skipping !${mr.iid}: already targets ${targetBranch}`);
172
+ }
173
+ }
174
+
175
+ console.log(`\n✅ Bulk retarget complete`);
176
+ }
177
+
178
+ async function bulkRebase(milestone: string) {
179
+ console.log(`\n🔄 Bulk rebasing all MRs in ${milestone}...\n`);
180
+
181
+ const mrs = await gitlab.MergeRequests.all({
182
+ projectId: PROJECT_ID,
183
+ state: 'opened',
184
+ milestone,
185
+ });
186
+
187
+ console.log(`Found ${mrs.length} MRs to rebase\n`);
188
+
189
+ for (const mr of mrs) {
190
+ if (mr.has_conflicts) {
191
+ console.log(`Rebasing !${mr.iid}: ${mr.title} (has conflicts)`);
192
+ await rebaseMR(mr.iid);
193
+ // Wait a bit between rebases
194
+ await new Promise((resolve) => setTimeout(resolve, 2000));
195
+ } else {
196
+ console.log(`Skipping !${mr.iid}: no conflicts`);
197
+ }
198
+ }
199
+
200
+ console.log(`\n✅ Bulk rebase complete`);
201
+ }
202
+
203
+ // CLI
204
+ const program = new Command();
205
+
206
+ program
207
+ .name('manage-milestone-mrs')
208
+ .description('Manage merge requests for milestone-based releases')
209
+ .version('1.0.0');
210
+
211
+ program
212
+ .command('list')
213
+ .description('List all MRs in a milestone')
214
+ .requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
215
+ .action(async (options) => {
216
+ await listMRsInMilestone(options.milestone);
217
+ });
218
+
219
+ program
220
+ .command('list-outside')
221
+ .description('List all MRs NOT in a milestone')
222
+ .requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
223
+ .action(async (options) => {
224
+ await listMRsNotInMilestone(options.milestone);
225
+ });
226
+
227
+ program
228
+ .command('retarget')
229
+ .description('Retarget an MR to a different branch')
230
+ .requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
231
+ .requiredOption('-t, --target <branch>', 'Target branch (e.g., development)')
232
+ .action(async (options) => {
233
+ await retargetMR(parseInt(options.id), options.target);
234
+ });
235
+
236
+ program
237
+ .command('close')
238
+ .description('Close an MR with a reason')
239
+ .requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
240
+ .requiredOption('-r, --reason <reason>', 'Reason for closing')
241
+ .action(async (options) => {
242
+ await closeMR(parseInt(options.id), options.reason);
243
+ });
244
+
245
+ program
246
+ .command('rebase')
247
+ .description('Rebase an MR')
248
+ .requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
249
+ .action(async (options) => {
250
+ await rebaseMR(parseInt(options.id));
251
+ });
252
+
253
+ program
254
+ .command('assign')
255
+ .description('Assign an MR to a milestone')
256
+ .requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
257
+ .requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
258
+ .action(async (options) => {
259
+ await assignMilestone(parseInt(options.id), options.milestone);
260
+ });
261
+
262
+ program
263
+ .command('bulk-retarget')
264
+ .description('Retarget all MRs in a milestone to a branch')
265
+ .requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
266
+ .requiredOption('-t, --target <branch>', 'Target branch (e.g., development)')
267
+ .action(async (options) => {
268
+ await bulkRetarget(options.milestone, options.target);
269
+ });
270
+
271
+ program
272
+ .command('bulk-rebase')
273
+ .description('Rebase all MRs with conflicts in a milestone')
274
+ .requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
275
+ .action(async (options) => {
276
+ await bulkRebase(options.milestone);
277
+ });
278
+
279
+ program.parse();
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env tsx
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { glob } from 'glob';
5
+
6
+ const VERSION_FILE = path.join(process.cwd(), '.version.json');
7
+ const versionConfig = JSON.parse(fs.readFileSync(VERSION_FILE, 'utf-8'));
8
+
9
+ const replacements = {
10
+ '{{VERSION}}': versionConfig.current,
11
+ '{{VERSION_STABLE}}': versionConfig.latest_stable,
12
+ '{{SPEC_PATH}}': versionConfig.spec_path.replace('{version}', versionConfig.current),
13
+ '{{SCHEMA_FILE}}': versionConfig.schema_file.replace('{version}', versionConfig.current),
14
+ };
15
+
16
+ async function processTemplates() {
17
+ const files = await glob('website/content/docs/**/*.md', { ignore: 'node_modules/**' });
18
+
19
+ for (const file of files) {
20
+ let content = fs.readFileSync(file, 'utf-8');
21
+ let updated = false;
22
+
23
+ for (const [placeholder, value] of Object.entries(replacements)) {
24
+ if (content.includes(placeholder)) {
25
+ content = content.replaceAll(placeholder, value);
26
+ updated = true;
27
+ }
28
+ }
29
+
30
+ if (updated) {
31
+ fs.writeFileSync(file, content);
32
+ console.log(`✅ Processed: ${file}`);
33
+ }
34
+ }
35
+ }
36
+
37
+ processTemplates();
@@ -0,0 +1,75 @@
1
+ #!/bin/bash
2
+ #
3
+ # Rebase all open MRs onto their target branches
4
+ # This script fetches and rebases each source branch
5
+ #
6
+
7
+ set -e
8
+
9
+ TOKEN="${GITLAB_TOKEN:-${SERVICE_ACCOUNT_OSSA_TOKEN:-${GITLAB_PUSH_TOKEN}}}"
10
+ PROJECT="blueflyio/openstandardagents"
11
+
12
+ if [ -z "$TOKEN" ]; then
13
+ echo "❌ Error: GITLAB_TOKEN or SERVICE_ACCOUNT_OSSA_TOKEN required"
14
+ exit 1
15
+ fi
16
+
17
+ echo "🔄 Fetching open merge requests..."
18
+ MRs=$(curl -sS --header "PRIVATE-TOKEN: $TOKEN" \
19
+ "https://gitlab.com/api/v4/projects/${PROJECT//\//%2F}/merge_requests?state=opened&per_page=20" | \
20
+ jq -r '.[] | "\(.iid)|\(.source_branch)|\(.target_branch)"')
21
+
22
+ echo ""
23
+ echo "Found MRs to rebase:"
24
+ echo "$MRs" | while IFS='|' read -r iid source target; do
25
+ echo " MR !$iid: $source -> $target"
26
+ done
27
+
28
+ echo ""
29
+ read -p "Continue with rebasing? (y/N) " -n 1 -r
30
+ echo
31
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
32
+ echo "Cancelled."
33
+ exit 0
34
+ fi
35
+
36
+ echo "$MRs" | while IFS='|' read -r iid source target; do
37
+ echo ""
38
+ echo "=== Rebasing MR !$iid: $source -> $target ==="
39
+
40
+ # Fetch both branches
41
+ git fetch origin "$source" "$target" 2>&1 | grep -v "^From" || true
42
+
43
+ # Check if source branch exists locally
44
+ if git show-ref --verify --quiet "refs/heads/$source"; then
45
+ echo " Branch $source exists locally, using worktree..."
46
+ git worktree add "../rebase-$source" "$source" 2>/dev/null || {
47
+ echo " Worktree exists, removing..."
48
+ git worktree remove "../rebase-$source" 2>/dev/null || true
49
+ git worktree add "../rebase-$source" "$source"
50
+ }
51
+ cd "../rebase-$source"
52
+ else
53
+ echo " Creating worktree for $source..."
54
+ git worktree add "../rebase-$source" "origin/$source"
55
+ cd "../rebase-$source"
56
+ fi
57
+
58
+ # Rebase onto target
59
+ echo " Rebasing onto origin/$target..."
60
+ if git rebase "origin/$target" 2>&1 | tee /tmp/rebase-output.log; then
61
+ echo " ✅ Rebase successful"
62
+ echo " Pushing..."
63
+ git push origin "$source" --force-with-lease 2>&1 | grep -v "^To " || true
64
+ echo " ✅ MR !$iid rebased and pushed"
65
+ else
66
+ echo " ❌ Rebase failed - check conflicts"
67
+ echo " Worktree: $(pwd)"
68
+ echo " Fix conflicts and run: git rebase --continue && git push origin $source --force-with-lease"
69
+ fi
70
+
71
+ cd - > /dev/null
72
+ done
73
+
74
+ echo ""
75
+ echo "✅ Rebase process complete!"
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Shared Zod Schemas for Build Scripts
3
+ *
4
+ * Follows OpenAPI-first, DRY, and type-safe principles.
5
+ * Single source of truth for package.json and version validation.
6
+ */
7
+
8
+ import { z } from 'zod';
9
+
10
+ /**
11
+ * Semantic version pattern (supports RC, alpha, beta, etc.)
12
+ * Matches: 0.2.5, 0.2.5-RC, 0.2.5-alpha.1, 1.0.0-beta.2, etc.
13
+ */
14
+ const SemverPattern = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$/;
15
+
16
+ /**
17
+ * Package.json schema (partial - only fields we use)
18
+ */
19
+ export const PackageJsonSchema = z.object({
20
+ name: z.string().min(1),
21
+ version: z.string().regex(SemverPattern, {
22
+ message: 'Invalid semver version format. Expected: X.Y.Z or X.Y.Z-SUFFIX',
23
+ }),
24
+ exports: z
25
+ .object({
26
+ './schema': z.string().optional(),
27
+ })
28
+ .passthrough()
29
+ .optional(),
30
+ }).passthrough();
31
+
32
+ /**
33
+ * Version string schema
34
+ */
35
+ export const VersionSchema = z.string().regex(SemverPattern, {
36
+ message: 'Invalid version format',
37
+ });
38
+
39
+ /**
40
+ * File path schema
41
+ */
42
+ export const FilePathSchema = z.string().min(1);
43
+
44
+ /**
45
+ * Script configuration schema
46
+ */
47
+ export const ScriptConfigSchema = z.object({
48
+ version: VersionSchema,
49
+ schemaPath: FilePathSchema,
50
+ outputPath: z.string().optional(),
51
+ rootDir: FilePathSchema,
52
+ });
53
+
54
+ // Type exports
55
+ export type PackageJson = z.infer<typeof PackageJsonSchema>;
56
+ export type Version = z.infer<typeof VersionSchema>;
57
+ export type ScriptConfig = z.infer<typeof ScriptConfigSchema>;
58
+
59
+ /**
60
+ * Parse and validate package.json
61
+ */
62
+ export function parsePackageJson(content: string): PackageJson {
63
+ try {
64
+ const json = JSON.parse(content);
65
+ return PackageJsonSchema.parse(json);
66
+ } catch (error) {
67
+ if (error instanceof z.ZodError) {
68
+ throw new Error(
69
+ `Invalid package.json: ${error.issues.map((e: z.ZodIssue) => e.message).join(', ')}`
70
+ );
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+
@@ -0,0 +1,33 @@
1
+ #!/bin/bash
2
+ #
3
+ # Setup Branch Protection
4
+ # Installs git hooks to prevent checking out main/development locally
5
+ #
6
+
7
+ set -e
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
11
+
12
+ echo "🔒 Setting up branch protection for main and development..."
13
+
14
+ # Ensure hooks directory exists
15
+ mkdir -p "$PROJECT_ROOT/.git/hooks"
16
+
17
+ # Copy hooks if they don't exist or are outdated
18
+ if [ ! -f "$PROJECT_ROOT/.git/hooks/post-checkout" ] || [ "$PROJECT_ROOT/.git/hooks/post-checkout" -ot "$SCRIPT_DIR/setup-branch-protection.sh" ]; then
19
+ echo "✅ Installing post-checkout hook..."
20
+ # Hook is already installed, just ensure it's executable
21
+ chmod +x "$PROJECT_ROOT/.git/hooks/post-checkout" 2>/dev/null || true
22
+ fi
23
+
24
+ # Set git config for hooks
25
+ git config core.hooksPath .git/hooks 2>/dev/null || true
26
+
27
+ echo ""
28
+ echo "✅ Branch protection installed!"
29
+ echo ""
30
+ echo "Protected branches: main, development"
31
+ echo ""
32
+ echo "The hook will automatically switch you back if you try to checkout these branches."
33
+ echo ""