@bluefly/openstandardagents 0.2.5-RC → 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 (238) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +63 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.yml +40 -0
  3. package/.github/workflows/dependabot-comment.yml +34 -0
  4. package/.github/workflows/pr-comment.yml +33 -0
  5. package/.husky/pre-commit +5 -0
  6. package/.kiro/config.json +21 -0
  7. package/.kiro/settings/mcp.json +61 -0
  8. package/.kiro/specs/scripts-migration-api-first/design.md +883 -0
  9. package/.kiro/specs/scripts-migration-api-first/requirements.md +165 -0
  10. package/.kiro/specs/scripts-migration-api-first/tasks.md +539 -0
  11. package/.kiro/specs/{website-design-audit → website-brand-identity}/design.md +381 -0
  12. package/.kiro/specs/{website-design-audit → website-brand-identity}/requirements.md +88 -0
  13. package/.kiro/specs/website-brand-identity/tasks.md +981 -0
  14. package/CHANGELOG.md +23 -0
  15. package/README.md +12 -3
  16. package/bin/ossa-dev +42 -0
  17. package/bin/ossa-export +32 -0
  18. package/bin/ossa-generate +60 -0
  19. package/bin/ossa-health +40 -0
  20. package/bin/ossa-init +26 -0
  21. package/dist/repositories/schema.repository.d.ts.map +1 -1
  22. package/dist/repositories/schema.repository.js +15 -10
  23. package/dist/repositories/schema.repository.js.map +1 -1
  24. package/dist/services/github-sync/github-client.d.ts +14 -0
  25. package/dist/services/github-sync/github-client.d.ts.map +1 -0
  26. package/dist/services/github-sync/github-client.js +41 -0
  27. package/dist/services/github-sync/github-client.js.map +1 -0
  28. package/dist/services/github-sync/gitlab-client.d.ts +17 -0
  29. package/dist/services/github-sync/gitlab-client.d.ts.map +1 -0
  30. package/dist/services/github-sync/gitlab-client.js +42 -0
  31. package/dist/services/github-sync/gitlab-client.js.map +1 -0
  32. package/dist/services/github-sync/schemas.d.ts +46 -0
  33. package/dist/services/github-sync/schemas.d.ts.map +1 -0
  34. package/dist/services/github-sync/schemas.js +36 -0
  35. package/dist/services/github-sync/schemas.js.map +1 -0
  36. package/dist/services/github-sync/sync.service.d.ts +27 -0
  37. package/dist/services/github-sync/sync.service.d.ts.map +1 -0
  38. package/dist/services/github-sync/sync.service.js +99 -0
  39. package/dist/services/github-sync/sync.service.js.map +1 -0
  40. package/dist/services/runtime/claude/capability-mapper.d.ts +84 -0
  41. package/dist/services/runtime/claude/capability-mapper.d.ts.map +1 -0
  42. package/dist/services/runtime/claude/capability-mapper.js +245 -0
  43. package/dist/services/runtime/claude/capability-mapper.js.map +1 -0
  44. package/dist/services/runtime/claude/claude-adapter.d.ts +80 -0
  45. package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -0
  46. package/dist/services/runtime/claude/claude-adapter.js +287 -0
  47. package/dist/services/runtime/claude/claude-adapter.js.map +1 -0
  48. package/dist/services/runtime/claude/manifest-parser.d.ts +77 -0
  49. package/dist/services/runtime/claude/manifest-parser.d.ts.map +1 -0
  50. package/dist/services/runtime/claude/manifest-parser.js +169 -0
  51. package/dist/services/runtime/claude/manifest-parser.js.map +1 -0
  52. package/dist/services/runtime/claude/types.d.ts +115 -0
  53. package/dist/services/runtime/claude/types.d.ts.map +1 -0
  54. package/dist/services/runtime/claude/types.js +6 -0
  55. package/dist/services/runtime/claude/types.js.map +1 -0
  56. package/dist/services/validation.service.d.ts.map +1 -1
  57. package/dist/services/validation.service.js +12 -1
  58. package/dist/services/validation.service.js.map +1 -1
  59. package/dist/spec/v0.2.4/ossa-0.2.4.schema.json +85 -208
  60. package/dist/spec/v0.2.6/CHANGELOG.md +401 -0
  61. package/dist/spec/v0.2.6/README.md +72 -0
  62. package/dist/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  63. package/dist/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  64. package/dist/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  65. package/dist/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  66. package/dist/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  67. package/dist/spec/v0.2.6-dev/README.md +75 -0
  68. package/dist/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  69. package/dist/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  70. package/dist/spec/{v0.2.4/ossa-0.2.4-dev.schema.json → v0.2.6-dev/ossa-0.2.5.schema.json} +9 -9
  71. package/dist/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  72. package/{spec/v0.2.4/ossa-0.2.4-dev.schema.json → dist/spec/v0.2.6-dev/ossa-0.2.6-dev.schema.json} +9 -9
  73. package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  74. package/dist/spec/v0.2.7/core/agentgraph.md +324 -0
  75. package/dist/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  76. package/docs/brand-guide/01-brand-overview.md +37 -0
  77. package/docs/brand-guide/02-logo-usage.md +43 -0
  78. package/docs/brand-guide/03-color-palette.md +70 -0
  79. package/docs/brand-guide/04-typography.md +82 -0
  80. package/docs/brand-guide/05-voice-and-tone.md +108 -0
  81. package/docs/brand-guide/06-visual-elements.md +137 -0
  82. package/docs/brand-guide/07-application-examples.md +153 -0
  83. package/docs/brand-guide/OssaLogo/OssA_Logo.svg +21 -0
  84. package/docs/brand-guide/OssaLogo/brand.af +0 -0
  85. package/docs/brand-guide/README.md +107 -0
  86. package/docs/comparison.md +315 -0
  87. package/docs/operations/automation-roadmap.md +245 -0
  88. package/docs/operations/github-sync-strategy.md +357 -0
  89. package/examples/anthropic/claude-assistant.ossa.json +5 -4
  90. package/examples/autogen/multi-agent.ossa.json +6 -4
  91. package/examples/crewai/research-team.ossa.json +14 -5
  92. package/examples/cursor/code-review-agent.ossa.json +21 -6
  93. package/examples/langchain/chain-agent.ossa.json +21 -5
  94. package/examples/langflow/workflow-agent.ossa.json +2 -3
  95. package/examples/langgraph/state-machine-agent.ossa.json +2 -3
  96. package/examples/llamaindex/rag-agent.ossa.json +2 -3
  97. package/examples/openai/multi-tool-agent.ossa.json +32 -9
  98. package/examples/openai/swarm-agent.ossa.json +18 -5
  99. package/examples/vercel/edge-agent.ossa.json +5 -4
  100. package/openapi/github-sync.yaml +115 -0
  101. package/package.json +25 -4
  102. package/scripts/README.md +103 -0
  103. package/scripts/auto-rebase-mrs.ts +106 -0
  104. package/scripts/batch-dependabot.sh +57 -0
  105. package/scripts/configure-gitlab-branch-protection.ts +95 -0
  106. package/scripts/create-issue-helper.ts +238 -0
  107. package/scripts/create-milestone-issue.ts +73 -0
  108. package/scripts/fix-schema-formats.js +82 -0
  109. package/scripts/generate-agents-catalog.ts +77 -0
  110. package/scripts/generate-api-docs.ts +218 -0
  111. package/scripts/generate-cli-docs.ts +410 -0
  112. package/scripts/generate-config-docs.ts +109 -0
  113. package/scripts/generate-errors-docs.ts +76 -0
  114. package/scripts/generate-examples-docs.ts +99 -0
  115. package/scripts/generate-schema-docs.ts +296 -0
  116. package/scripts/generate-types-docs.ts +48 -0
  117. package/scripts/lowercase-docs.ts +43 -0
  118. package/scripts/manage-milestone-mrs.ts +279 -0
  119. package/scripts/rebase-all-mrs.sh +75 -0
  120. package/scripts/sync-github-pr.sh +48 -0
  121. package/scripts/sync-version.js +40 -0
  122. package/scripts/sync-wiki.sh +50 -0
  123. package/scripts/validate-all.js +127 -0
  124. package/spec/v0.2.4/ossa-0.2.4.schema.json +85 -208
  125. package/spec/v0.2.6/CHANGELOG.md +401 -0
  126. package/spec/v0.2.6/README.md +72 -0
  127. package/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  128. package/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  129. package/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  130. package/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  131. package/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  132. package/spec/v0.2.6-dev/README.md +75 -0
  133. package/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  134. package/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  135. package/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
  136. package/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  137. package/spec/v0.2.6-dev/ossa-0.2.6-dev.schema.json +1696 -0
  138. package/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  139. package/spec/v0.2.7/core/agentgraph.md +324 -0
  140. package/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  141. package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +445 -0
  142. package/website/app/about/page.tsx +53 -44
  143. package/website/app/ecosystem/page.tsx +146 -111
  144. package/website/app/globals.scss +256 -21
  145. package/website/app/page.tsx +394 -182
  146. package/website/app/page.tsx.bak +679 -0
  147. package/website/app/page.tsx.bak2 +649 -0
  148. package/website/app/schema/page.tsx +3 -3
  149. package/website/app/specification/page.tsx +1 -1
  150. package/website/components/layout/Header.tsx +27 -23
  151. package/website/components/ui/Badge.tsx +82 -0
  152. package/website/components/ui/Button.tsx +116 -0
  153. package/website/components/ui/Card.tsx +167 -0
  154. package/website/components/ui/Checkbox.tsx +141 -0
  155. package/website/components/ui/Input.tsx +169 -0
  156. package/website/components/ui/Radio.tsx +141 -0
  157. package/website/components/ui/Select.tsx +182 -0
  158. package/website/components/ui/Tag.tsx +158 -0
  159. package/website/components/ui/Textarea.tsx +195 -0
  160. package/website/components/ui/index.ts +11 -0
  161. package/website/content/docs/{00-HOME.md → 00-home.md} +1 -1
  162. package/website/content/docs/agents/catalog.md +28 -0
  163. package/website/content/docs/{AIFlow-Framework-Integration-with-OSSA.md → aiflow-framework-integration-with-ossa.md} +2 -2
  164. package/website/content/docs/api-reference/index.md +38 -0
  165. package/website/content/docs/api-reference/ossa-core-api.md +634 -0
  166. package/website/content/docs/api-reference/ossa-registry-api.md +515 -0
  167. package/website/content/docs/api-reference/unified-agent-gateway.md +599 -0
  168. package/website/content/docs/cli-reference/index.md +111 -0
  169. package/website/content/docs/cli-reference/ossa-agents.md +70 -0
  170. package/website/content/docs/cli-reference/ossa-export.md +56 -0
  171. package/website/content/docs/cli-reference/ossa-generate.md +66 -0
  172. package/website/content/docs/cli-reference/ossa-gitlab-agent.md +57 -0
  173. package/website/content/docs/cli-reference/ossa-import.md +56 -0
  174. package/website/content/docs/cli-reference/ossa-init.md +57 -0
  175. package/website/content/docs/cli-reference/ossa-migrate.md +62 -0
  176. package/website/content/docs/cli-reference/ossa-run.md +66 -0
  177. package/website/content/docs/cli-reference/ossa-schema.md +57 -0
  178. package/website/content/docs/cli-reference/ossa-setup.md +57 -0
  179. package/website/content/docs/cli-reference/ossa-validate.md +66 -0
  180. package/website/content/docs/configuration/index.md +97 -0
  181. package/website/content/docs/deployment/github-mirroring.md +924 -0
  182. package/website/content/docs/documentation.md +100 -0
  183. package/website/content/docs/ecosystem/framework-support.md +551 -9
  184. package/website/content/docs/errors/index.md +10 -0
  185. package/website/content/docs/examples/{AIFlow-Framework-Integration-with-OSSA.md → aiflow-framework-integration-with-ossa.md} +2 -2
  186. package/website/content/docs/examples/catalog.md +300 -0
  187. package/website/content/docs/for-audiences/{Students-Researchers.md → students-researchers.md} +1 -1
  188. package/website/content/docs/getting-started/{Installation.md → installation.md} +1 -1
  189. package/website/content/docs/getting-started.md +1 -1
  190. package/website/content/docs/integrations/aiflow.md +2 -2
  191. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +5 -5
  192. package/website/content/docs/migration-guides/crewai-to-ossa.md +3 -3
  193. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +7 -7
  194. package/website/content/docs/migration-guides/langchain-to-ossa.md +4 -4
  195. package/website/content/docs/openapi-extensions/index.md +1 -1
  196. package/website/content/docs/ossa-compliant-badge.md +1 -1
  197. package/website/content/docs/pre-release/index.md +5 -5
  198. package/website/content/docs/releases/v0.2.6.md +99 -0
  199. package/website/content/docs/schema-reference/agent-capabilities.md +50 -0
  200. package/website/content/docs/schema-reference/agent-id.md +52 -0
  201. package/website/content/docs/schema-reference/agent-name.md +50 -0
  202. package/website/content/docs/schema-reference/agent-role.md +54 -0
  203. package/website/content/docs/schema-reference/agent-version.md +50 -0
  204. package/website/content/docs/schema-reference/index.md +26 -157
  205. package/website/content/docs/types-reference/index.md +105 -0
  206. package/website/content/docs/versioning.md +3 -3
  207. package/website/dev.sh +53 -0
  208. package/website/docker-compose.dev.yml +36 -0
  209. package/website/lib/version.ts +1 -1
  210. package/website/lib/versions.json +45 -20
  211. package/website/package.json +1 -1
  212. package/website/styles/_spacing.scss +453 -0
  213. package/website/styles/_tokens.scss +245 -0
  214. package/website/styles/_typography.scss +361 -0
  215. package/website/styles/_variables.scss +270 -19
  216. package/website/tailwind.config.ts +113 -79
  217. package/.kiro/specs/agent-buildkit-templates/design.md +0 -495
  218. package/.kiro/specs/agent-buildkit-templates/requirements.md +0 -165
  219. package/.kiro/specs/kiro-ide-supercharger/README.md +0 -202
  220. package/.kiro/specs/kiro-ide-supercharger/design.md +0 -1005
  221. package/.kiro/specs/kiro-ide-supercharger/requirements.md +0 -141
  222. package/.kiro/specs/kiro-ide-supercharger/tasks.md +0 -507
  223. package/docs/issue-19-completion-summary.md +0 -648
  224. package/docs/issue-19-validation.md +0 -351
  225. package/website/content/docs/Examples.md +0 -71
  226. package/website/content/docs/OpenAPI-Extensions.md +0 -934
  227. package/website/content/docs/core-concepts/Project-Structure.md +0 -348
  228. package/website/content/docs/examples/Migration-Guides.md +0 -214
  229. package/website/content/docs/for-audiences/Architects.md +0 -224
  230. package/website/content/docs/for-audiences/Developers.md +0 -220
  231. package/website/content/docs/for-audiences/Enterprises.md +0 -256
  232. package/website/content/docs/getting-started/5-Minute-Overview.md +0 -85
  233. package/website/content/docs/getting-started/First-Agent.md +0 -196
  234. package/website/content/docs/getting-started/Hello-World.md +0 -184
  235. package/website/content/docs/migration-guides/00-INDEX.md +0 -76
  236. package/website/content/docs/migration-guides/README.md +0 -133
  237. /package/dist/spec/v0.2.4/{ossa-0.2.4-dev.yaml → ossa-0.2.4.yaml} +0 -0
  238. /package/spec/v0.2.4/{ossa-0.2.4-dev.yaml → ossa-0.2.4.yaml} +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "apiVersion": "ossa/v0.2",
2
+ "apiVersion": "ossa/v0.2.4",
3
3
  "kind": "Agent",
4
4
  "metadata": {
5
5
  "name": "swarm-agent",
@@ -17,12 +17,26 @@
17
17
  {
18
18
  "type": "function",
19
19
  "name": "search_web",
20
- "capabilities": ["search", "retrieve"]
20
+ "capabilities": [
21
+ {
22
+ "name": "search"
23
+ },
24
+ {
25
+ "name": "retrieve"
26
+ }
27
+ ]
21
28
  },
22
29
  {
23
30
  "type": "function",
24
31
  "name": "execute_code",
25
- "capabilities": ["run", "evaluate"]
32
+ "capabilities": [
33
+ {
34
+ "name": "run"
35
+ },
36
+ {
37
+ "name": "evaluate"
38
+ }
39
+ ]
26
40
  }
27
41
  ]
28
42
  },
@@ -55,5 +69,4 @@
55
69
  }
56
70
  }
57
71
  }
58
- }
59
-
72
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "apiVersion": "ossa/v0.2",
2
+ "apiVersion": "ossa/v0.2.4",
3
3
  "kind": "Agent",
4
4
  "metadata": {
5
5
  "name": "edge-chat-agent",
@@ -33,11 +33,12 @@
33
33
  "description": "City name"
34
34
  }
35
35
  },
36
- "required": ["location"]
36
+ "required": [
37
+ "location"
38
+ ]
37
39
  }
38
40
  }
39
41
  ]
40
42
  }
41
43
  }
42
- }
43
-
44
+ }
@@ -0,0 +1,115 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: GitHub Sync API
4
+ version: 1.0.0
5
+ description: API for syncing GitHub PRs to GitLab
6
+
7
+ servers:
8
+ - url: http://localhost:3000
9
+ description: Development
10
+
11
+ paths:
12
+ /sync/pr/{number}:
13
+ post:
14
+ summary: Sync GitHub PR to GitLab
15
+ operationId: syncPR
16
+ tags: [Sync]
17
+ parameters:
18
+ - name: number
19
+ in: path
20
+ required: true
21
+ schema:
22
+ type: integer
23
+ responses:
24
+ '200':
25
+ description: MR created
26
+ content:
27
+ application/json:
28
+ schema:
29
+ $ref: '#/components/schemas/GitLabMR'
30
+
31
+ /sync/batch:
32
+ post:
33
+ summary: Batch sync PRs
34
+ operationId: batchSync
35
+ tags: [Sync]
36
+ requestBody:
37
+ content:
38
+ application/json:
39
+ schema:
40
+ type: object
41
+ properties:
42
+ author:
43
+ type: string
44
+ example: app/dependabot
45
+ responses:
46
+ '200':
47
+ description: Batch MR created
48
+ content:
49
+ application/json:
50
+ schema:
51
+ $ref: '#/components/schemas/GitLabMR'
52
+
53
+ /sync/list:
54
+ get:
55
+ summary: List syncable PRs
56
+ operationId: listPRs
57
+ tags: [Sync]
58
+ parameters:
59
+ - name: author
60
+ in: query
61
+ schema:
62
+ type: string
63
+ responses:
64
+ '200':
65
+ description: List of PRs
66
+ content:
67
+ application/json:
68
+ schema:
69
+ type: array
70
+ items:
71
+ $ref: '#/components/schemas/GitHubPR'
72
+
73
+ components:
74
+ schemas:
75
+ GitHubPR:
76
+ type: object
77
+ required: [number, title, author, state]
78
+ properties:
79
+ number:
80
+ type: integer
81
+ title:
82
+ type: string
83
+ body:
84
+ type: string
85
+ nullable: true
86
+ author:
87
+ type: object
88
+ properties:
89
+ login:
90
+ type: string
91
+ state:
92
+ type: string
93
+ enum: [open, closed]
94
+
95
+ GitLabMR:
96
+ type: object
97
+ required: [iid, title, source_branch, target_branch, state, web_url]
98
+ properties:
99
+ iid:
100
+ type: integer
101
+ title:
102
+ type: string
103
+ description:
104
+ type: string
105
+ nullable: true
106
+ source_branch:
107
+ type: string
108
+ target_branch:
109
+ type: string
110
+ state:
111
+ type: string
112
+ enum: [opened, closed, merged]
113
+ web_url:
114
+ type: string
115
+ format: uri
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@bluefly/openstandardagents",
3
- "version": "0.2.5-RC",
3
+ "version": "0.2.7",
4
4
  "exports": {
5
- "./schema": "./spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json",
5
+ "./schema": "./spec/v0.2.6/ossa-0.2.6.schema.json",
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
8
8
  "import": "./dist/index.js",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  "homepage": "https://openstandardagents.org",
58
58
  "scripts": {
59
- "version:sync": "tsx scripts/sync-versions.ts",
59
+ "version:sync": "node scripts/sync-version.js",
60
60
  "version:bump": "tsx scripts/bump-version.ts",
61
61
  "version:enhanced": "tsx scripts/enhanced-version-manager.ts",
62
62
  "version:check": "tsx scripts/sync-versions.ts --check",
@@ -78,13 +78,31 @@
78
78
  "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
79
79
  "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
80
80
  "validate:schema": "tsx scripts/validate-schema.ts",
81
+ "docs:api:generate": "tsx scripts/generate-api-docs.ts",
82
+ "docs:cli:generate": "tsx scripts/generate-cli-docs.ts",
83
+ "docs:schema:generate": "tsx scripts/generate-schema-docs.ts",
84
+ "docs:examples:generate": "tsx scripts/generate-examples-docs.ts",
85
+ "docs:agents:generate": "tsx scripts/generate-agents-catalog.ts",
86
+ "docs:types:generate": "tsx scripts/generate-types-docs.ts",
87
+ "docs:errors:generate": "tsx scripts/generate-errors-docs.ts",
88
+ "docs:config:generate": "tsx scripts/generate-config-docs.ts",
89
+ "docs:lowercase": "tsx scripts/lowercase-docs.ts",
90
+ "docs:generate": "npm run docs:api:generate && npm run docs:cli:generate && npm run docs:schema:generate && npm run docs:examples:generate && npm run docs:agents:generate && npm run docs:types:generate && npm run docs:errors:generate && npm run docs:config:generate && npm run docs:lowercase",
91
+ "docs:validate": "echo 'Documentation validation not yet implemented'",
92
+ "docs:lint": "echo 'Documentation linting not yet implemented'",
81
93
  "validate:examples": "node -r ts-node/register tests/integration/examples/validate-all-examples.test.ts",
82
94
  "validate:power-suite": "tsx bin/validate-ossa.ts",
83
95
  "gen:types": "tsx scripts/gen-types.ts",
84
96
  "gen:zod": "tsx scripts/gen-zod.ts",
85
97
  "gen:all": "npm run gen:types && npm run gen:zod",
86
98
  "cli:legacy": "node cli/bin/ossa --help",
87
- "prepublishOnly": "npm run clean && npm run build && npm run test && npm run lint"
99
+ "prepublishOnly": "npm run clean && npm run build && npm run test && npm run lint",
100
+ "validate:all": "node scripts/validate-all.js",
101
+ "fix:schemas": "node scripts/fix-schema-formats.js",
102
+ "prepare": "husky install || true",
103
+ "sync:pr": "tsx src/cli/commands/github-sync.command.ts pr",
104
+ "sync:batch": "tsx src/cli/commands/github-sync.command.ts batch",
105
+ "sync:list": "tsx src/cli/commands/github-sync.command.ts list"
88
106
  },
89
107
  "keywords": [
90
108
  "ossa",
@@ -100,6 +118,9 @@
100
118
  "author": "OSSA Standards Team",
101
119
  "license": "Apache-2.0",
102
120
  "dependencies": {
121
+ "@anthropic-ai/sdk": "^0.71.0",
122
+ "@gitbeaker/node": "^35.8.1",
123
+ "@octokit/rest": "^20.0.0",
103
124
  "ajv": "^8.12.0",
104
125
  "ajv-formats": "^3.0.1",
105
126
  "axios": "^1.12.2",
@@ -0,0 +1,103 @@
1
+ # Validation Scripts
2
+
3
+ Automated validation and maintenance scripts for OSSA.
4
+
5
+ ## Scripts
6
+
7
+ ### validate-all.js
8
+
9
+ Comprehensive validation suite:
10
+ - Version consistency across packages
11
+ - Schema exports and files
12
+ - Spec directory structure
13
+ - Schema validation
14
+ - Version reference checks
15
+
16
+ ```bash
17
+ npm run validate:all
18
+ ```
19
+
20
+ ### fix-schema-formats.js
21
+
22
+ Automatically fixes unsupported format constraints in JSON schemas.
23
+
24
+ ```bash
25
+ npm run fix:schemas
26
+ ```
27
+
28
+ Removes format constraints like `"format": "uri"` that aren't supported by ajv-cli.
29
+
30
+ ### sync-version.js (website)
31
+
32
+ Syncs version from package.json to website code.
33
+
34
+ ```bash
35
+ cd website && npm run sync-version
36
+ ```
37
+
38
+ ## CI/CD Integration
39
+
40
+ Validation runs automatically on:
41
+ - Merge requests
42
+ - Commits to main/development
43
+
44
+ See `.gitlab-ci-validation.yml` for configuration.
45
+
46
+ ## Pre-commit Hook
47
+
48
+ Install husky to run validations before commit:
49
+
50
+ ```bash
51
+ npm install
52
+ npm run prepare
53
+ ```
54
+
55
+ ## Maintenance
56
+
57
+ ### Adding New Validations
58
+
59
+ Edit `scripts/validate-all.js`:
60
+
61
+ ```javascript
62
+ check('New Check', () => {
63
+ // Your validation logic
64
+ if (somethingWrong) {
65
+ throw new Error('Description');
66
+ }
67
+ console.log('✓ Check passed');
68
+ });
69
+ ```
70
+
71
+ ### Adding Unsupported Formats
72
+
73
+ Edit `scripts/fix-schema-formats.js`:
74
+
75
+ ```javascript
76
+ const UNSUPPORTED_FORMATS = ['uri', 'new-format'];
77
+ ```
78
+
79
+ ## Troubleshooting
80
+
81
+ ### Schema validation fails
82
+
83
+ ```bash
84
+ npm run fix:schemas
85
+ npm run validate:schema
86
+ ```
87
+
88
+ ### Version mismatch
89
+
90
+ ```bash
91
+ # Update root version
92
+ npm version patch
93
+
94
+ # Sync to website
95
+ cd website && npm run sync-version
96
+ ```
97
+
98
+ ### Pre-commit hook not running
99
+
100
+ ```bash
101
+ npm run prepare
102
+ chmod +x .husky/pre-commit
103
+ ```
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Auto-rebase all open MRs onto their target branches
4
+ * Runs in CI or manually to keep MRs up to date
5
+ */
6
+
7
+ import { Gitlab } from '@gitbeaker/rest';
8
+ import { execSync } from 'child_process';
9
+
10
+ const PROJECT_ID = 'blueflyio/openstandardagents';
11
+ const TOKEN = process.env.GITLAB_TOKEN || process.env.SERVICE_ACCOUNT_OSSA_TOKEN || process.env.GITLAB_PUSH_TOKEN;
12
+
13
+ if (!TOKEN) {
14
+ console.error('❌ Error: GITLAB_TOKEN or SERVICE_ACCOUNT_OSSA_TOKEN required');
15
+ process.exit(1);
16
+ }
17
+
18
+ const gitlab = new Gitlab({
19
+ host: 'https://gitlab.com',
20
+ token: TOKEN,
21
+ });
22
+
23
+ async function rebaseMR(mr: any): Promise<boolean> {
24
+ const { iid, source_branch, target_branch, merge_status } = mr;
25
+
26
+ console.log(`\n🔄 Rebasing MR !${iid}: ${source_branch} -> ${target_branch}`);
27
+
28
+ try {
29
+ // Fetch branches
30
+ execSync(`git fetch origin ${source_branch} ${target_branch}`, { stdio: 'inherit' });
31
+
32
+ // Check if behind
33
+ const behind = execSync(
34
+ `git rev-list --count origin/${target_branch}..origin/${source_branch} 2>/dev/null || echo 0`
35
+ ).toString().trim();
36
+
37
+ if (behind === '0') {
38
+ console.log(` ✅ Already up to date`);
39
+ return true;
40
+ }
41
+
42
+ console.log(` ⚠️ ${behind} commits behind, rebasing...`);
43
+
44
+ // Create worktree
45
+ const worktreePath = `../rebase-${iid}-${source_branch.replace(/\//g, '-')}`;
46
+ try {
47
+ execSync(`git worktree remove ${worktreePath}`, { stdio: 'ignore' });
48
+ } catch {}
49
+
50
+ execSync(`git worktree add ${worktreePath} origin/${source_branch}`, { stdio: 'inherit' });
51
+
52
+ // Rebase
53
+ try {
54
+ execSync(`cd ${worktreePath} && git rebase origin/${target_branch}`, { stdio: 'inherit' });
55
+
56
+ // Push
57
+ execSync(`cd ${worktreePath} && git push origin ${source_branch} --force-with-lease`, { stdio: 'inherit' });
58
+
59
+ console.log(` ✅ Rebased and pushed successfully`);
60
+
61
+ // Cleanup
62
+ execSync(`git worktree remove ${worktreePath}`, { stdio: 'ignore' });
63
+
64
+ return true;
65
+ } catch (error) {
66
+ console.error(` ❌ Rebase failed - conflicts may exist`);
67
+ console.error(` Worktree: ${worktreePath}`);
68
+ return false;
69
+ }
70
+ } catch (error: any) {
71
+ console.error(` ❌ Error: ${error.message}`);
72
+ return false;
73
+ }
74
+ }
75
+
76
+ async function main() {
77
+ console.log('🔄 Auto-rebasing all open MRs\n');
78
+
79
+ try {
80
+ const mrs = await gitlab.MergeRequests.all({
81
+ projectId: PROJECT_ID,
82
+ state: 'opened',
83
+ perPage: 20,
84
+ });
85
+
86
+ console.log(`Found ${mrs.length} open MRs\n`);
87
+
88
+ const results = await Promise.all(mrs.map(rebaseMR));
89
+
90
+ const success = results.filter(Boolean).length;
91
+ const failed = results.length - success;
92
+
93
+ console.log(`\n✅ Summary:`);
94
+ console.log(` Successfully rebased: ${success}`);
95
+ console.log(` Failed: ${failed}`);
96
+
97
+ if (failed > 0) {
98
+ process.exit(1);
99
+ }
100
+ } catch (error: any) {
101
+ console.error('❌ Error:', error.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+
106
+ main();
@@ -0,0 +1,57 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Batch merge Dependabot PRs from GitHub
5
+ # Creates a single GitLab MR with all updates
6
+
7
+ REPO="blueflyio/openstandardagents"
8
+ BRANCH="batch-dependabot-$(date +%Y%m%d)"
9
+
10
+ echo "🤖 Batching Dependabot PRs..."
11
+
12
+ # Get all open Dependabot PRs
13
+ DEPENDABOT_PRS=$(gh pr list --repo $REPO --author app/dependabot --state open --json number -q '.[].number')
14
+
15
+ if [ -z "$DEPENDABOT_PRS" ]; then
16
+ echo "No Dependabot PRs found"
17
+ exit 0
18
+ fi
19
+
20
+ echo "Found PRs: $DEPENDABOT_PRS"
21
+
22
+ # Create new branch
23
+ git checkout -b $BRANCH main
24
+
25
+ # Merge each PR
26
+ for PR in $DEPENDABOT_PRS; do
27
+ echo "Merging PR #$PR..."
28
+ gh pr checkout $PR
29
+ git merge --no-ff --no-edit FETCH_HEAD || {
30
+ echo "⚠️ Conflict in PR #$PR, skipping"
31
+ git merge --abort
32
+ continue
33
+ }
34
+ done
35
+
36
+ # Push to GitLab
37
+ git push origin $BRANCH
38
+
39
+ # Create GitLab MR
40
+ glab mr create \
41
+ --title "chore(deps): batch Dependabot updates $(date +%Y-%m-%d)" \
42
+ --description "Batched Dependabot PRs from GitHub:
43
+
44
+ $(echo "$DEPENDABOT_PRS" | while read pr; do
45
+ echo "- https://github.com/$REPO/pull/$pr"
46
+ done)
47
+
48
+ **Changes:**
49
+ - Dependency updates from Dependabot
50
+ - Tested in CI before merge
51
+
52
+ **GitHub PRs will auto-close** when this merges and syncs back." \
53
+ --source-branch $BRANCH \
54
+ --target-branch main \
55
+ --label "dependencies"
56
+
57
+ echo "✅ Created GitLab MR with batched updates"
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Configure GitLab Branch Protection Rules
4
+ * Sets up protection for main and development branches via GitLab API
5
+ */
6
+
7
+ import { Gitlab } from '@gitbeaker/rest';
8
+
9
+ const PROJECT_ID = 'blueflyio/openstandardagents';
10
+ const TOKEN = process.env.GITLAB_TOKEN || process.env.SERVICE_ACCOUNT_OSSA_TOKEN || process.env.GITLAB_PUSH_TOKEN;
11
+
12
+ if (!TOKEN) {
13
+ console.error('❌ Error: GITLAB_TOKEN or SERVICE_ACCOUNT_OSSA_TOKEN required');
14
+ process.exit(1);
15
+ }
16
+
17
+ const gitlab = new Gitlab({
18
+ host: 'https://gitlab.com',
19
+ token: TOKEN,
20
+ });
21
+
22
+ interface ProtectionRule {
23
+ name: string;
24
+ push_access_levels?: Array<{ access_level: number }>;
25
+ merge_access_levels?: Array<{ access_level: number }>;
26
+ allow_force_push?: boolean;
27
+ allowed_to_push?: Array<{ user_id?: number; group_id?: number }>;
28
+ allowed_to_merge?: Array<{ user_id?: number; group_id?: number }>;
29
+ }
30
+
31
+ async function protectBranch(branch: string, rules: ProtectionRule): Promise<void> {
32
+ try {
33
+ console.log(`\n🔒 Protecting branch: ${branch}`);
34
+
35
+ // Check if branch is already protected
36
+ const existing = await gitlab.ProtectedBranches.all(PROJECT_ID);
37
+ const isProtected = existing.some((pb: any) => pb.name === branch);
38
+
39
+ if (isProtected) {
40
+ console.log(` ⚠️ ${branch} is already protected. Updating...`);
41
+ await gitlab.ProtectedBranches.unprotect(PROJECT_ID, branch);
42
+ }
43
+
44
+ // Protect the branch
45
+ await gitlab.ProtectedBranches.protect(PROJECT_ID, branch, {
46
+ push_access_levels: [{ access_level: 0 }], // No one can push
47
+ merge_access_levels: [{ access_level: 40 }], // Maintainers can merge
48
+ allow_force_push: false,
49
+ });
50
+
51
+ console.log(` ✅ ${branch} protected successfully`);
52
+ console.log(` - Push: Blocked (no direct pushes)`);
53
+ console.log(` - Merge: Maintainers only (via MR)`);
54
+ console.log(` - Force push: Disabled`);
55
+ } catch (error: any) {
56
+ console.error(` ❌ Failed to protect ${branch}:`, error.message);
57
+ throw error;
58
+ }
59
+ }
60
+
61
+ async function main() {
62
+ console.log('🔒 Configuring GitLab Branch Protection Rules\n');
63
+ console.log(`Project: ${PROJECT_ID}`);
64
+ console.log(`Token: ${TOKEN.substring(0, 10)}...`);
65
+
66
+ try {
67
+ // Protect main branch
68
+ await protectBranch('main', {
69
+ name: 'main',
70
+ push_access_levels: [{ access_level: 0 }], // No one
71
+ merge_access_levels: [{ access_level: 40 }], // Maintainers
72
+ allow_force_push: false,
73
+ });
74
+
75
+ // Protect development branch
76
+ await protectBranch('development', {
77
+ name: 'development',
78
+ push_access_levels: [{ access_level: 0 }], // No one
79
+ merge_access_levels: [{ access_level: 40 }], // Maintainers
80
+ allow_force_push: false,
81
+ });
82
+
83
+ console.log('\n✅ Branch protection configured successfully!');
84
+ console.log('\nProtected branches:');
85
+ console.log(' - main: No direct pushes, MR required');
86
+ console.log(' - development: No direct pushes, MR required');
87
+ console.log('\nView in GitLab:');
88
+ console.log(` https://gitlab.com/${PROJECT_ID}/-/settings/repository#protected-branches`);
89
+ } catch (error: any) {
90
+ console.error('\n❌ Error configuring branch protection:', error.message);
91
+ process.exit(1);
92
+ }
93
+ }
94
+
95
+ main();