@bluefly/openstandardagents 0.4.6 → 0.4.8

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 (300) hide show
  1. package/.version.json +3 -3
  2. package/CHANGELOG.md +16 -0
  3. package/README.md +1 -0
  4. package/dist/.version.json +3 -3
  5. package/dist/adapters/mcp/converter.js +4 -3
  6. package/dist/adapters/npm/adapter.js +2 -1
  7. package/dist/adapters/openai-agents/adapter.js +1 -1
  8. package/dist/cli/commands/config.command.d.ts +7 -0
  9. package/dist/cli/commands/config.command.js +92 -0
  10. package/dist/cli/commands/migrate.command.js +1 -1
  11. package/dist/cli/commands/sign.command.d.ts +3 -0
  12. package/dist/cli/commands/sign.command.js +42 -0
  13. package/dist/cli/commands/skills.command.js +4 -6
  14. package/dist/config/cli-config.d.ts +33 -0
  15. package/dist/config/cli-config.js +107 -0
  16. package/dist/mcp-server/index.js +0 -0
  17. package/dist/package.json +8 -9
  18. package/dist/services/governance/cedar-provider.js +2 -1
  19. package/dist/services/release-automation/base-crud.service.d.ts +93 -0
  20. package/dist/services/release-automation/base-crud.service.js +68 -0
  21. package/dist/services/release-automation/generate-changelog.d.ts +7 -0
  22. package/dist/services/release-automation/generate-changelog.js +288 -0
  23. package/dist/services/release-automation/increment-dev-tag.d.ts +7 -0
  24. package/dist/services/release-automation/increment-dev-tag.js +160 -0
  25. package/dist/services/release-automation/index.d.ts +12 -0
  26. package/dist/services/release-automation/index.js +12 -0
  27. package/dist/services/release-automation/merge-request.service.d.ts +119 -0
  28. package/dist/services/release-automation/merge-request.service.js +212 -0
  29. package/dist/services/release-automation/milestone.service.d.ts +104 -0
  30. package/dist/services/release-automation/milestone.service.js +207 -0
  31. package/dist/services/release-automation/release-agent.service.d.ts +39 -0
  32. package/dist/services/release-automation/release-agent.service.js +43 -0
  33. package/dist/services/release-automation/release-buttons.d.ts +7 -0
  34. package/dist/services/release-automation/release-buttons.js +207 -0
  35. package/dist/services/release-automation/release.service.d.ts +118 -0
  36. package/dist/services/release-automation/release.service.js +207 -0
  37. package/dist/services/release-automation/schemas/release.schema.d.ts +299 -0
  38. package/dist/services/release-automation/schemas/release.schema.js +272 -0
  39. package/dist/services/release-automation/tag.service.d.ts +99 -0
  40. package/dist/services/release-automation/tag.service.js +183 -0
  41. package/dist/services/release-automation/webhook.service.d.ts +37 -0
  42. package/dist/services/release-automation/webhook.service.js +187 -0
  43. package/dist/skills/test-skill/README.md +36 -0
  44. package/dist/skills/test-skill/SKILL.md +31 -0
  45. package/dist/skills/test-skill/index.d.ts +31 -0
  46. package/dist/skills/test-skill/install.js +44 -0
  47. package/dist/skills/test-skill/package.json +36 -0
  48. package/dist/spec/reference/reference-agents/compliance-auditor/manifest.ossa.yaml +1 -1
  49. package/dist/spec/reference/reference-agents/doc-agent/manifest.ossa.yaml +1 -1
  50. package/dist/spec/reference/reference-agents/mr-reviewer/manifest.ossa.yaml +1 -1
  51. package/dist/spec/reference/reference-agents/ossa-validator-v0.3/manifest.ossa.yaml +1 -1
  52. package/dist/spec/reference/reference-agents/pipeline-fixer/manifest.ossa.yaml +1 -1
  53. package/dist/spec/reference/reference-agents/release-orchestrator/manifest.ossa.yaml +1 -1
  54. package/dist/spec/uadp/README.md +393 -0
  55. package/dist/spec/uadp/openapi.yaml +387 -0
  56. package/dist/spec/uadp/schemas/uadp-agents-response.schema.json +68 -0
  57. package/dist/spec/uadp/schemas/uadp-federation-response.schema.json +46 -0
  58. package/dist/spec/uadp/schemas/uadp-manifest.schema.json +82 -0
  59. package/dist/spec/uadp/schemas/uadp-skills-response.schema.json +72 -0
  60. package/dist/spec/v0.4/agent-card.schema.json +1 -1
  61. package/dist/spec/v0.4/agent.schema.json +15 -15
  62. package/dist/spec/v0.4/extensions/a2a/a2a.schema.json +1 -1
  63. package/dist/spec/v0.4/extensions/ag2/ag2.schema.json +1 -1
  64. package/dist/spec/v0.4/extensions/crewai/crewai.schema.json +1 -1
  65. package/dist/spec/v0.4/extensions/kagent/kagent.schema.json +1 -1
  66. package/dist/spec/v0.4/extensions/langchain/langchain.schema.json +1 -1
  67. package/dist/spec/v0.4/extensions/langgraph/langgraph.schema.json +1 -1
  68. package/dist/spec/v0.4/extensions/mcp/mcp.schema.json +1 -1
  69. package/dist/spec/v0.5/agent-card.schema.json +477 -0
  70. package/dist/spec/v0.5/agent.schema.json +1556 -0
  71. package/dist/spec/v0.5/conformance/profiles/baseline.json +19 -0
  72. package/dist/spec/v0.5/conformance/profiles/enterprise.json +20 -0
  73. package/dist/spec/v0.5/extensions/a2a/README.md +193 -0
  74. package/dist/spec/v0.5/extensions/a2a/a2a.schema.json +77 -0
  75. package/dist/spec/v0.5/extensions/ag2/ag2.schema.json +277 -0
  76. package/dist/spec/v0.5/extensions/cognition/cognition.schema.json +94 -0
  77. package/dist/spec/v0.5/extensions/cognition/thought-node.schema.json +80 -0
  78. package/dist/spec/v0.5/extensions/crewai/crewai.schema.json +256 -0
  79. package/dist/spec/v0.5/extensions/drupal/drupal.schema.json +318 -0
  80. package/dist/spec/v0.5/extensions/evals/evals.schema.json +597 -0
  81. package/dist/spec/v0.5/extensions/governance/governance-extension.yaml +161 -0
  82. package/dist/spec/v0.5/extensions/identity/identity.schema.json +302 -0
  83. package/dist/spec/v0.5/extensions/kagent/README.md +315 -0
  84. package/dist/spec/v0.5/extensions/kagent/kagent.schema.json +624 -0
  85. package/dist/spec/v0.5/extensions/langchain/langchain.schema.json +243 -0
  86. package/dist/spec/v0.5/extensions/langgraph/langgraph.schema.json +211 -0
  87. package/dist/spec/v0.5/extensions/mcp/README.md +276 -0
  88. package/dist/spec/v0.5/extensions/mcp/mcp.schema.json +84 -0
  89. package/dist/spec/v0.5/extensions/memory/memory.schema.json +7 -0
  90. package/dist/spec/v0.5/extensions/team/team.schema.json +304 -0
  91. package/dist/spec/v0.5/extensions/token-efficiency/token-efficiency.schema.json +47 -0
  92. package/dist/spec/v0.5/mcp.schema.json +1 -0
  93. package/dist/spec/v0.5/skill.schema.json +1 -0
  94. package/dist/spec/v0.5/validator.schema.json +282 -0
  95. package/dist/validation/error-codes.js +1 -1
  96. package/examples/a2a/agent-handoff.ossa.yaml +1 -1
  97. package/examples/a2a/service-discovery.ossa.yaml +1 -1
  98. package/examples/adapters/drupal-eca-mapping.yaml +1 -1
  99. package/examples/adapters/drupal-eca-task.yaml +1 -1
  100. package/examples/adapters/drupal-flowdrop-mapping.yaml +1 -1
  101. package/examples/adapters/drupal-maestro-mapping.yaml +1 -1
  102. package/examples/adapters/mistral-agent.yaml +1 -1
  103. package/examples/adapters/symfony-messenger-task.yaml +1 -1
  104. package/examples/adapters/symfony-messenger-workflow.yaml +1 -1
  105. package/examples/adk-integration/code-review-workflow.yml +1 -1
  106. package/examples/adk-integration/customer-support.yml +1 -1
  107. package/examples/adk-integration/data-pipeline.yml +1 -1
  108. package/examples/advanced/reasoning-agent.yaml +1 -1
  109. package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
  110. package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
  111. package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
  112. package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
  113. package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
  114. package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
  115. package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
  116. package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
  117. package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
  118. package/examples/agent-taxonomy-example.ossa.yaml +1 -1
  119. package/examples/agents/01-customer-support-bot/agent.ossa.yaml +1 -1
  120. package/examples/agents/02-code-review-agent/agent.ossa.yaml +1 -1
  121. package/examples/agents/03-data-analysis-agent/agent.ossa.yaml +1 -1
  122. package/examples/agents/04-content-moderator/agent.ossa.yaml +1 -1
  123. package/examples/agents/05-sales-assistant/agent.ossa.yaml +1 -1
  124. package/examples/agents/06-devops-agent/agent.ossa.yaml +1 -1
  125. package/examples/agents/07-research-assistant/agent.ossa.yaml +1 -1
  126. package/examples/agents/08-email-triage-agent/agent.ossa.yaml +1 -1
  127. package/examples/agents/09-security-scanner/agent.ossa.yaml +1 -1
  128. package/examples/agents/10-meeting-assistant/agent.ossa.yaml +1 -1
  129. package/examples/agents/architecture-healer-enterprise.yaml +1 -1
  130. package/examples/agents/dependency-healer-npm.yaml +1 -1
  131. package/examples/agents/spec-healer-openapi.yaml +1 -1
  132. package/examples/agents/wiki-healer-production.yaml +1 -1
  133. package/examples/agents-md/monorepo-agent.ossa.yaml +1 -1
  134. package/examples/agentscope/react-assistant/README.md +111 -0
  135. package/examples/agentscope/react-assistant/agent.ossa.yaml +132 -0
  136. package/examples/agentscope/react-assistant/skills/code-analysis/SKILL.md +18 -0
  137. package/examples/agentscope/react-assistant/skills/question-answering/SKILL.md +18 -0
  138. package/examples/autonomous-evolution/self-evolving-agent.ossa.yaml +1 -1
  139. package/examples/bridges/.gitlab-ci.yml +2 -2
  140. package/examples/build-once-use-everywhere/agent.ossa.yaml +1 -1
  141. package/examples/claude-code/code-reviewer.ossa.yaml +1 -1
  142. package/examples/claude-code/ossa-validator.ossa.yaml +1 -1
  143. package/examples/common_npm/agent-router.ossa.yaml +1 -1
  144. package/examples/contracts/data-consumer.ossa.yaml +1 -1
  145. package/examples/contracts/data-producer-v2.ossa.yaml +1 -1
  146. package/examples/contracts/data-producer.ossa.yaml +1 -1
  147. package/examples/drupal/QUICKSTART.md +17 -3
  148. package/examples/drupal/ai_agents_agentscope/README.md +62 -0
  149. package/examples/drupal/ai_agents_agentscope/ai_agents_agentscope.info.yml +13 -0
  150. package/examples/drupal/ai_agents_agentscope/ai_agents_agentscope.services.yml +4 -0
  151. package/examples/drupal/ai_agents_agentscope/config/install/ai_agents_agentscope.settings.yml +3 -0
  152. package/examples/drupal/ai_agents_agentscope/config/schema/ai_agents_agentscope.schema.yml +14 -0
  153. package/examples/drupal/ai_agents_agentscope/src/AgentScopeRuntime.php +11 -0
  154. package/examples/drupal/ai_agents_agentscope/src/Plugin/AiAgent/AgentScopeAgent.php +10 -0
  155. package/examples/drupal/ai_agents_agentscope/src/Plugin/AiProvider/AgentScopeProvider.php +217 -0
  156. package/examples/drupal/ai_agents_agentscope/src/Plugin/Derivative/AgentScopeDeriver.php +10 -0
  157. package/examples/drupal/ai_agents_agentscope/src/Service/AgentScopeAdapter.php +9 -0
  158. package/examples/drupal/content-moderator.ossa.yaml +1 -1
  159. package/examples/drupal/gitlab-ml-recommender.ossa.yaml +1 -1
  160. package/examples/export/langchain/production-agent-with-memory/agent.ossa.yaml +1 -1
  161. package/examples/export/langchain/production-agent-with-tools/agent.ossa.yaml +1 -1
  162. package/examples/extensions/agents-md-advanced.yml +1 -1
  163. package/examples/extensions/agents-md-basic.yml +1 -1
  164. package/examples/extensions/agents-md-sync.yml +1 -1
  165. package/examples/extensions/agents-md-v1.yml +1 -1
  166. package/examples/extensions/drupal-v1.yml +1 -1
  167. package/examples/extensions/encryption-multi-provider.yaml +4 -4
  168. package/examples/extensions/kagent-v1.yml +1 -1
  169. package/examples/extensions/knowledge-sources.yaml +1 -1
  170. package/examples/extensions/mcp-full-featured.yaml +1 -1
  171. package/examples/getting-started/01-minimal-agent.ossa.yaml +1 -1
  172. package/examples/getting-started/02-agent-with-tools.ossa.yaml +1 -1
  173. package/examples/getting-started/03-agent-with-safety.ossa.yaml +1 -1
  174. package/examples/getting-started/04-agent-with-messaging.ossa.yaml +1 -1
  175. package/examples/getting-started/05-workflow-composition.ossa.yaml +1 -1
  176. package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
  177. package/examples/gitlab-agents/daily-code-scan/.gitlab-ci.yml +2 -2
  178. package/examples/gitlab-agents/duo-comment-responder/.gitlab-ci.yml +2 -2
  179. package/examples/gitlab-agents/mr-reviewer/.gitlab-ci.yml +2 -2
  180. package/examples/gitlab-agents/pipeline-auto-fix/.gitlab-ci.yml +2 -2
  181. package/examples/gitlab-agents/pre-commit-quality-check/.gitlab-ci.yml +2 -2
  182. package/examples/gitlab-agents/pre-push-validation/.gitlab-ci.yml +2 -2
  183. package/examples/hierarchical-agent.ossa.yaml +1 -1
  184. package/examples/infrastructure/token-rotation/manifest.ossa.yaml +1 -1
  185. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +1 -1
  186. package/examples/kagent/compliance-validator.ossa.yaml +1 -1
  187. package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
  188. package/examples/kagent/documentation-agent.ossa.yaml +1 -1
  189. package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +1 -1
  190. package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
  191. package/examples/kagent/security-scanner.ossa.yaml +1 -1
  192. package/examples/knowledge-graph/drupal-agent-with-kg.ossa.yaml +1 -1
  193. package/examples/mcp/browser-puppeteer.ossa.yaml +1 -1
  194. package/examples/mcp/database-mcp.ossa.yaml +1 -1
  195. package/examples/mcp/filesystem-mcp.ossa.yaml +1 -1
  196. package/examples/messaging/dependency-healer.ossa.yaml +1 -1
  197. package/examples/messaging/incident-responder.ossa.yaml +1 -1
  198. package/examples/messaging/routing-rules.ossa.yaml +1 -1
  199. package/examples/messaging/security-scanner.ossa.yaml +1 -1
  200. package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
  201. package/examples/migrations/langchain/01-python-react-agent-after.ossa.yaml +1 -1
  202. package/examples/migrations/langchain/02-typescript-conversational-after.ossa.yaml +1 -1
  203. package/examples/migrations/langchain/03-sequential-chain-after.ossa.yaml +1 -1
  204. package/examples/migrations/langchain/04-config-based-after.ossa.yaml +1 -1
  205. package/examples/migrations/swarm-to-ossa/after-handoffs.ossa.yaml +6 -6
  206. package/examples/migrations/swarm-to-ossa/after-triage-agent.ossa.yaml +3 -3
  207. package/examples/mr-reviewer-with-governance.ossa.yaml +1 -1
  208. package/examples/multi-agent/conditional-router.ossa.yaml +1 -1
  209. package/examples/multi-agent/parallel-execution.ossa.yaml +1 -1
  210. package/examples/multi-agent/sequential-pipeline.ossa.yaml +1 -1
  211. package/examples/multi-agent-research-workflow.ossa.yaml +1 -1
  212. package/examples/multi-platform/single-manifest/agent.ossa.yaml +1 -1
  213. package/examples/observability/activity-stream-full.yaml +1 -1
  214. package/examples/openai/basic-agent.ossa.yaml +1 -1
  215. package/examples/ossa-templates/01-code-assistant.ossa.yaml +1 -1
  216. package/examples/ossa-templates/02-security-scanner.ossa.yaml +1 -1
  217. package/examples/ossa-templates/03-ci-pipeline.ossa.yaml +1 -1
  218. package/examples/ossa-templates/04-code-reviewer.ossa.yaml +1 -1
  219. package/examples/ossa-templates/05-doc-generator.ossa.yaml +1 -1
  220. package/examples/ossa-templates/06-compliance-validator.ossa.yaml +1 -1
  221. package/examples/ossa-templates/07-workflow-orchestrator.ossa.yaml +1 -1
  222. package/examples/ossa-templates/08-content-writer.ossa.yaml +1 -1
  223. package/examples/ossa-templates/09-test-generator.ossa.yaml +1 -1
  224. package/examples/ossa-templates/10-data-transformer.ossa.yaml +1 -1
  225. package/examples/ossa-templates/11-react-performance-expert.ossa.yaml +1 -1
  226. package/examples/ossa-templates/12-typescript-type-safety-expert.ossa.yaml +1 -1
  227. package/examples/ossa-templates/13-accessibility-champion.ossa.yaml +1 -1
  228. package/examples/ossa-templates/14-security-hardening-agent.ossa.yaml +1 -1
  229. package/examples/pipeline-agent.ossa.yaml +1 -1
  230. package/examples/production/document-analyzer-openai.yml +1 -1
  231. package/examples/production-ready/01-customer-support-bot/agent.ossa.yaml +1 -1
  232. package/examples/production-ready/02-code-review-agent/agent.ossa.yaml +1 -1
  233. package/examples/production-ready/03-data-analysis-agent/agent.ossa.yaml +1 -1
  234. package/examples/production-ready/04-content-moderator/agent.ossa.yaml +1 -1
  235. package/examples/production-ready/05-sales-assistant/agent.ossa.yaml +1 -1
  236. package/examples/production-ready/06-devops-agent/agent.ossa.yaml +1 -1
  237. package/examples/production-ready/07-research-assistant/agent.ossa.yaml +1 -1
  238. package/examples/production-ready/08-email-triage-agent/agent.ossa.yaml +1 -1
  239. package/examples/production-ready/09-security-scanner/agent.ossa.yaml +1 -1
  240. package/examples/production-ready/10-meeting-assistant/agent.ossa.yaml +1 -1
  241. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  242. package/examples/real-world/gitlab-cicd-optimizer.ossa.yaml +1 -1
  243. package/examples/real-world/rag-documentation-assistant.ossa.yaml +1 -1
  244. package/examples/registry/agents/code-reviewer/agent.yaml +1 -1
  245. package/examples/registry/agents/security-scanner/agent.yaml +1 -1
  246. package/examples/runtime-adapters/bedrock-claude-example.ossa.yaml +1 -1
  247. package/examples/schema/reusable-components.yaml +1 -1
  248. package/examples/showcase/ci-pipeline.ossa.yaml +1 -1
  249. package/examples/showcase/code-assistant.ossa.yaml +1 -1
  250. package/examples/showcase/code-reviewer.ossa.yaml +1 -1
  251. package/examples/showcase/compliance-checker.ossa.yaml +1 -1
  252. package/examples/showcase/compliance-validator.ossa.yaml +1 -1
  253. package/examples/showcase/content-writer.ossa.yaml +1 -1
  254. package/examples/showcase/customer-support.ossa.yaml +1 -1
  255. package/examples/showcase/data-processing-pipeline.ossa.yaml +1 -1
  256. package/examples/showcase/data-transformer.ossa.yaml +1 -1
  257. package/examples/showcase/doc-generator.ossa.yaml +1 -1
  258. package/examples/showcase/full-power-agent.ossa.yaml +1 -1
  259. package/examples/showcase/security-scanner-enhanced.ossa.yaml +1 -1
  260. package/examples/showcase/security-scanner.ossa.yaml +1 -1
  261. package/examples/showcase/team-leader.ossa.yaml +1 -1
  262. package/examples/showcase/test-generator.ossa.yaml +1 -1
  263. package/examples/showcase/workflow-orchestrator.ossa.yaml +1 -1
  264. package/examples/skills-example.ossa.yaml +1 -1
  265. package/examples/swarm-agent.ossa.yaml +1 -1
  266. package/examples/tasks/batch-email-sender.yaml +1 -1
  267. package/examples/tasks/data-transform.yaml +1 -1
  268. package/examples/tasks/publish-content.yaml +1 -1
  269. package/examples/team-agent.ossa.yaml +1 -1
  270. package/examples/templates/ossa-compliance.yaml +1 -1
  271. package/examples/unified/security-scanner.ossa.yaml +1 -1
  272. package/examples/workflows/batch-email-campaign.yaml +1 -1
  273. package/examples/workflows/content-review-publish.yaml +1 -1
  274. package/examples/workflows/simple-etl.yaml +1 -1
  275. package/package.json +6 -7
  276. package/spec/reference/reference-agents/compliance-auditor/manifest.ossa.yaml +1 -1
  277. package/spec/reference/reference-agents/doc-agent/manifest.ossa.yaml +1 -1
  278. package/spec/reference/reference-agents/mr-reviewer/manifest.ossa.yaml +1 -1
  279. package/spec/reference/reference-agents/ossa-validator-v0.3/manifest.ossa.yaml +1 -1
  280. package/spec/reference/reference-agents/pipeline-fixer/manifest.ossa.yaml +1 -1
  281. package/spec/reference/reference-agents/release-orchestrator/manifest.ossa.yaml +1 -1
  282. package/spec/v0.4/agent-card.schema.json +1 -1
  283. package/spec/v0.4/agent.schema.json +84 -15
  284. package/spec/v0.4/extensions/a2a/a2a.schema.json +1 -1
  285. package/spec/v0.4/extensions/ag2/ag2.schema.json +1 -1
  286. package/spec/v0.4/extensions/crewai/crewai.schema.json +1 -1
  287. package/spec/v0.4/extensions/kagent/kagent.schema.json +1 -1
  288. package/spec/v0.4/extensions/langchain/langchain.schema.json +1 -1
  289. package/spec/v0.4/extensions/langgraph/langgraph.schema.json +1 -1
  290. package/spec/v0.4/extensions/mcp/mcp.schema.json +1 -1
  291. package/templates/agent-types/claude-agent.ossa.yaml +1 -1
  292. package/templates/agent-types/kagent.ossa.yaml +1 -1
  293. package/templates/agent-types/langchain-agent.ossa.yaml +1 -1
  294. package/templates/agent-types/openapi-agent.ossa.yaml +1 -1
  295. package/templates/agent-types/swarm-agents.ossa.yaml +1 -1
  296. package/templates/ci-cd/gitlab-ci.deploy.yml +2 -2
  297. package/templates/validators/capability-compatibility.ossa.yaml +1 -1
  298. package/templates/validators/coordination-consistency.ossa.yaml +1 -1
  299. package/templates/validators/pattern-requirements.ossa.yaml +1 -1
  300. package/templates/validators/transport-compatibility.ossa.yaml +1 -1
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Tag CRUD Service
3
+ * Implements full CRUD operations for Git tags
4
+ */
5
+ import { Gitlab } from '@gitbeaker/rest';
6
+ import { TagSchema, CreateTagRequestSchema, } from './schemas/release.schema.js';
7
+ import { BaseCrudService } from './base-crud.service.js';
8
+ import { z } from 'zod';
9
+ /**
10
+ * Tag Filter Input
11
+ */
12
+ const TagFilterSchema = z.object({
13
+ version: z.string().optional(),
14
+ type: z.enum(['dev', 'rc', 'release', 'all']).default('all'),
15
+ page: z.number().int().positive().default(1),
16
+ perPage: z.number().int().positive().min(1).max(100).default(20),
17
+ });
18
+ /**
19
+ * Tag Service - CRUD operations
20
+ */
21
+ export class TagService extends BaseCrudService {
22
+ createSchema = CreateTagRequestSchema;
23
+ updateSchema = z.never(); // Tags cannot be updated
24
+ filterSchema = TagFilterSchema;
25
+ entitySchema = TagSchema;
26
+ gitlab;
27
+ projectId;
28
+ constructor(gitlabToken, projectId = process.env.CI_PROJECT_ID || '') {
29
+ super();
30
+ this.gitlab = new Gitlab({ token: gitlabToken });
31
+ this.projectId = projectId;
32
+ }
33
+ /**
34
+ * Create a new tag
35
+ */
36
+ async create(input) {
37
+ try {
38
+ const validated = this.validateCreate(input);
39
+ // Check if tag already exists
40
+ const existing = await this.read(validated.name);
41
+ if (existing) {
42
+ throw new Error(`Tag ${validated.name} already exists`);
43
+ }
44
+ // Create tag via GitLab API
45
+ const tag = await this.gitlab.Tags.create(this.projectId, validated.name, validated.ref, {
46
+ message: validated.message || `Tag ${validated.name}`,
47
+ });
48
+ const result = {
49
+ name: tag.name,
50
+ type: this.determineTagType(tag.name),
51
+ version: this.extractVersion(tag.name),
52
+ commitSha: tag.commit?.id || '',
53
+ message: tag.message || '',
54
+ createdAt: new Date().toISOString(),
55
+ ref: validated.ref,
56
+ };
57
+ return this.validateEntity(result);
58
+ }
59
+ catch (error) {
60
+ this.handleValidationError(error);
61
+ throw error;
62
+ }
63
+ }
64
+ /**
65
+ * Read tag by name
66
+ */
67
+ async read(id) {
68
+ this.validateId(id);
69
+ try {
70
+ const tagName = String(id);
71
+ const tags = await this.gitlab.Tags.all(this.projectId, {
72
+ search: tagName,
73
+ });
74
+ const tag = tags.find((t) => t.name === tagName);
75
+ if (!tag) {
76
+ return null;
77
+ }
78
+ const result = {
79
+ name: tag.name,
80
+ type: this.determineTagType(tag.name),
81
+ version: this.extractVersion(tag.name),
82
+ commitSha: tag.commit?.id || '',
83
+ message: tag.message || '',
84
+ createdAt: tag.createdAt || new Date().toISOString(),
85
+ ref: tag.target || 'unknown',
86
+ };
87
+ return this.validateEntity(result);
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }
93
+ /**
94
+ * Update tag - NOT SUPPORTED (tags are immutable)
95
+ */
96
+ async update() {
97
+ throw new Error('Tags are immutable and cannot be updated');
98
+ }
99
+ /**
100
+ * Delete tag
101
+ */
102
+ async delete(id) {
103
+ this.validateId(id);
104
+ const existing = await this.read(id);
105
+ if (!existing) {
106
+ this.throwNotFound('Tag', id);
107
+ }
108
+ await this.gitlab.Tags.remove(this.projectId, String(id));
109
+ }
110
+ /**
111
+ * List tags with filtering and pagination
112
+ */
113
+ async list(filters) {
114
+ const validatedFilters = this.validateFilter(filters || {});
115
+ try {
116
+ const tags = await this.gitlab.Tags.all(this.projectId, {
117
+ perPage: 100,
118
+ search: validatedFilters.version,
119
+ });
120
+ const items = tags
121
+ .map((tag) => ({
122
+ name: tag.name,
123
+ type: this.determineTagType(tag.name),
124
+ version: this.extractVersion(tag.name),
125
+ commitSha: tag.commit?.id || '',
126
+ message: tag.message || '',
127
+ createdAt: tag.createdAt || new Date().toISOString(),
128
+ ref: tag.target || 'unknown',
129
+ }))
130
+ .filter((tag) => {
131
+ if (validatedFilters.type !== 'all') {
132
+ return tag.type === validatedFilters.type;
133
+ }
134
+ if (validatedFilters.version) {
135
+ return tag.version.includes(validatedFilters.version);
136
+ }
137
+ return true;
138
+ })
139
+ .map((tag) => this.validateEntity(tag));
140
+ // Sort by version (newest first)
141
+ items.sort((a, b) => {
142
+ return b.version.localeCompare(a.version, undefined, {
143
+ numeric: true,
144
+ sensitivity: 'base',
145
+ });
146
+ });
147
+ // Paginate
148
+ const total = items.length;
149
+ const page = validatedFilters.page;
150
+ const perPage = validatedFilters.perPage;
151
+ const start = (page - 1) * perPage;
152
+ const end = start + perPage;
153
+ const paginated = items.slice(start, end);
154
+ return {
155
+ items: paginated,
156
+ pagination: this.calculatePagination(total, page, perPage),
157
+ };
158
+ }
159
+ catch (error) {
160
+ throw new Error(`Failed to list tags: ${error}`);
161
+ }
162
+ }
163
+ /**
164
+ * Helper: Determine tag type from name
165
+ */
166
+ determineTagType(tagName) {
167
+ if (tagName.includes('-dev.'))
168
+ return 'dev';
169
+ if (tagName.includes('-rc.'))
170
+ return 'rc';
171
+ return 'release';
172
+ }
173
+ /**
174
+ * Helper: Extract version from tag name
175
+ */
176
+ extractVersion(tagName) {
177
+ return tagName
178
+ .replace(/^v/, '')
179
+ .replace(/-dev\.[0-9]+$/, '')
180
+ .replace(/-rc\.[0-9]+$/, '');
181
+ }
182
+ }
183
+ //# sourceMappingURL=tag.service.js.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Webhook Service
3
+ * Handles GitLab webhooks with Zod validation
4
+ */
5
+ import { type WebhookResponse } from './schemas/release.schema.js';
6
+ /**
7
+ * Webhook Service
8
+ * DRY: Centralized webhook handling
9
+ */
10
+ export declare class WebhookService {
11
+ private releaseService;
12
+ private milestoneService;
13
+ private tagService;
14
+ private mergeRequestService;
15
+ constructor(gitlabToken: string, projectId?: string | number);
16
+ /**
17
+ * Handle milestone webhook
18
+ */
19
+ handleMilestoneWebhook(payload: unknown): Promise<WebhookResponse>;
20
+ /**
21
+ * Handle push webhook
22
+ */
23
+ handlePushWebhook(payload: unknown): Promise<WebhookResponse>;
24
+ /**
25
+ * Handle milestone creation
26
+ */
27
+ private handleMilestoneCreate;
28
+ /**
29
+ * Handle milestone closure
30
+ */
31
+ private handleMilestoneClose;
32
+ /**
33
+ * Handle release branch push
34
+ */
35
+ private handleReleaseBranchPush;
36
+ }
37
+ //# sourceMappingURL=webhook.service.d.ts.map
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Webhook Service
3
+ * Handles GitLab webhooks with Zod validation
4
+ */
5
+ import { MilestoneWebhookPayloadSchema, PushWebhookPayloadSchema, WebhookResponseSchema, } from './schemas/release.schema.js';
6
+ import { ReleaseService } from './release.service.js';
7
+ import { MilestoneService } from './milestone.service.js';
8
+ import { TagService } from './tag.service.js';
9
+ import { MergeRequestService } from './merge-request.service.js';
10
+ /**
11
+ * Webhook Service
12
+ * DRY: Centralized webhook handling
13
+ */
14
+ export class WebhookService {
15
+ releaseService;
16
+ milestoneService;
17
+ tagService;
18
+ mergeRequestService;
19
+ constructor(gitlabToken, projectId = process.env.CI_PROJECT_ID || '') {
20
+ this.releaseService = new ReleaseService(gitlabToken, projectId);
21
+ this.milestoneService = new MilestoneService(gitlabToken, projectId);
22
+ this.tagService = new TagService(gitlabToken, projectId);
23
+ this.mergeRequestService = new MergeRequestService(gitlabToken, projectId);
24
+ }
25
+ /**
26
+ * Handle milestone webhook
27
+ */
28
+ async handleMilestoneWebhook(payload) {
29
+ try {
30
+ // Validate payload with Zod
31
+ const validated = MilestoneWebhookPayloadSchema.parse(payload);
32
+ const actions = [];
33
+ const { object_attributes: milestone } = validated;
34
+ // Determine if this is a create or close event
35
+ const isNewMilestone = milestone.state === 'active' &&
36
+ new Date(milestone.created_at).getTime() ===
37
+ new Date(milestone.updated_at).getTime();
38
+ if (isNewMilestone) {
39
+ // Milestone created - create dev tag and branch
40
+ const action = await this.handleMilestoneCreate(validated);
41
+ if (action)
42
+ actions.push(action);
43
+ }
44
+ else if (milestone.state === 'closed') {
45
+ // Milestone closed - create RC
46
+ const action = await this.handleMilestoneClose(validated);
47
+ if (action)
48
+ actions.push(action);
49
+ }
50
+ return WebhookResponseSchema.parse({
51
+ success: true,
52
+ message: `Milestone ${milestone.title} processed`,
53
+ actions,
54
+ });
55
+ }
56
+ catch (error) {
57
+ return WebhookResponseSchema.parse({
58
+ success: false,
59
+ message: `Webhook processing failed: ${error}`,
60
+ actions: [],
61
+ });
62
+ }
63
+ }
64
+ /**
65
+ * Handle push webhook
66
+ */
67
+ async handlePushWebhook(payload) {
68
+ try {
69
+ // Validate payload with Zod
70
+ const validated = PushWebhookPayloadSchema.parse(payload);
71
+ const actions = [];
72
+ // Only process release branch pushes (release/v0.X.x)
73
+ if (validated.ref.match(/^refs\/heads\/release\/v\d+\.\d+\.x$/)) {
74
+ const action = await this.handleReleaseBranchPush(validated);
75
+ if (action)
76
+ actions.push(action);
77
+ }
78
+ return WebhookResponseSchema.parse({
79
+ success: true,
80
+ message: 'Push webhook processed',
81
+ actions,
82
+ });
83
+ }
84
+ catch (error) {
85
+ return WebhookResponseSchema.parse({
86
+ success: false,
87
+ message: `Webhook processing failed: ${error}`,
88
+ actions: [],
89
+ });
90
+ }
91
+ }
92
+ /**
93
+ * Handle milestone creation
94
+ */
95
+ async handleMilestoneCreate(payload) {
96
+ const { object_attributes: milestone } = payload;
97
+ const version = milestone.title.replace(/^v/, '');
98
+ // Extract major.minor from version (e.g., 0.3.0 -> 0.3)
99
+ const versionMatch = version.match(/^(\d+\.\d+)/);
100
+ if (!versionMatch) {
101
+ throw new Error(`Invalid version format: ${version}`);
102
+ }
103
+ const releaseBranch = `release/v${versionMatch[1]}.x`;
104
+ // Create initial dev tag on the appropriate release branch
105
+ const devTag = `v${version}-dev.0`;
106
+ await this.tagService.create({
107
+ name: devTag,
108
+ ref: releaseBranch,
109
+ message: `Initial dev tag for ${milestone.title}`,
110
+ });
111
+ return {
112
+ type: 'milestone_created',
113
+ status: 'success',
114
+ details: {
115
+ milestoneId: milestone.id,
116
+ tag: devTag,
117
+ version,
118
+ releaseBranch,
119
+ },
120
+ };
121
+ }
122
+ /**
123
+ * Handle milestone closure
124
+ */
125
+ async handleMilestoneClose(payload) {
126
+ const { object_attributes: milestone } = payload;
127
+ const version = milestone.title.replace(/^v/, '');
128
+ // Get milestone statistics
129
+ const milestoneData = await this.milestoneService.read(milestone.id);
130
+ if (!milestoneData) {
131
+ throw new Error(`Milestone ${milestone.id} not found`);
132
+ }
133
+ // Check all issues are closed
134
+ if (milestoneData.statistics.openIssues > 0) {
135
+ throw new Error(`Cannot create RC: ${milestoneData.statistics.openIssues} issues still open`);
136
+ }
137
+ // Extract major.minor from version to determine release branch
138
+ const versionMatch = version.match(/^(\d+\.\d+)/);
139
+ if (!versionMatch) {
140
+ throw new Error(`Invalid version format: ${version}`);
141
+ }
142
+ const releaseBranch = `release/v${versionMatch[1]}.x`;
143
+ // Create RC tag on the release branch
144
+ const rcTag = `v${version}-rc.1`;
145
+ await this.tagService.create({
146
+ name: rcTag,
147
+ ref: releaseBranch,
148
+ message: `Release candidate for ${milestone.title}`,
149
+ });
150
+ // Create MR: release/v0.X.x → main
151
+ const mr = await this.mergeRequestService.create({
152
+ sourceBranch: releaseBranch,
153
+ targetBranch: 'main',
154
+ title: `Release ${milestone.title}`,
155
+ description: `Release candidate ${rcTag} for milestone ${milestone.title}`,
156
+ labels: ['release', 'automation'],
157
+ milestoneId: milestone.id,
158
+ });
159
+ return {
160
+ type: 'milestone_closed',
161
+ status: 'success',
162
+ details: {
163
+ milestoneId: milestone.id,
164
+ rcTag,
165
+ mergeRequestId: mr.id,
166
+ releaseBranch,
167
+ },
168
+ };
169
+ }
170
+ /**
171
+ * Handle release branch push
172
+ */
173
+ async handleReleaseBranchPush(payload) {
174
+ // Auto-increment dev tag on release branch
175
+ // This would be implemented based on current version detection
176
+ // For now, return success
177
+ return {
178
+ type: 'dev_tag_incremented',
179
+ status: 'success',
180
+ details: {
181
+ branch: payload.ref,
182
+ commits: payload.commits.length,
183
+ },
184
+ };
185
+ }
186
+ }
187
+ //# sourceMappingURL=webhook.service.js.map
@@ -0,0 +1,36 @@
1
+ # test-skill
2
+
3
+ A test skill for unit testing
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @claude-skills/test-skill
9
+ ```
10
+
11
+ This will automatically install the skill to `~/.claude/skills/`.
12
+
13
+ ## Manual Installation
14
+
15
+ ```bash
16
+ # Clone or copy SKILL.md to Claude skills directory
17
+ cp node_modules/@claude-skills/test-skill/SKILL.md ~/.claude/skills/test-skill/
18
+ ```
19
+
20
+ ## Trigger Keywords
21
+
22
+ - testing
23
+ - validation
24
+ - unit-test
25
+
26
+ ## Tags
27
+
28
+ `test`
29
+
30
+ ## About Claude Skills
31
+
32
+ Claude Skills are reusable prompt templates that enhance Claude's capabilities for specific tasks.
33
+
34
+ ## Generated by OSSA
35
+
36
+ This skill package was generated using [@bluefly/openstandardagents](https://www.npmjs.com/package/@bluefly/openstandardagents)
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: test-skill
3
+ description: A test skill for unit testing
4
+ trigger_keywords:
5
+ - testing
6
+ - validation
7
+ - unit-test
8
+ version: 1.0.0
9
+ author: Test Author
10
+ tags:
11
+ - test
12
+ ---
13
+
14
+ # test-skill
15
+
16
+ A test skill for unit testing
17
+
18
+ ## Instructions
19
+
20
+ This is a test skill for validating the export functionality.
21
+
22
+ ## Capabilities
23
+
24
+ - testing
25
+ - validation
26
+
27
+ ## When to Use
28
+
29
+ This skill activates when:
30
+ - Task involves: testing
31
+ - Task involves: validation
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Claude Skill: test-skill
3
+ * A test skill for unit testing
4
+ *
5
+ * @generated by @bluefly/openstandardagents skills-export
6
+ */
7
+
8
+ export type TriggerKeyword =
9
+ | 'testing'
10
+ | 'validation'
11
+ | 'unit-test';
12
+
13
+ export type SkillTag =
14
+ | 'test';
15
+
16
+ export interface ClaudeSkillMetadata {
17
+ name: 'test-skill';
18
+ description: string;
19
+ triggerKeywords: TriggerKeyword[];
20
+ version: '1.0.0';
21
+ author?: string;
22
+ tags?: SkillTag[];
23
+ }
24
+
25
+ export interface ClaudeSkill {
26
+ metadata: ClaudeSkillMetadata;
27
+ skillPath: string;
28
+ }
29
+
30
+ declare const skill: ClaudeSkill;
31
+ export default skill;
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Post-install script to copy skill to ~/.claude/skills/
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const os = require('os');
9
+
10
+ const homeDir = os.homedir();
11
+ const claudeSkillsDir = path.join(homeDir, '.claude', 'skills');
12
+ const targetDir = path.join(claudeSkillsDir, 'test-skill');
13
+
14
+ try {
15
+ // Create ~/.claude/skills/ if it doesn't exist
16
+ if (!fs.existsSync(claudeSkillsDir)) {
17
+ fs.mkdirSync(claudeSkillsDir, { recursive: true });
18
+ }
19
+
20
+ // Create target directory
21
+ if (!fs.existsSync(targetDir)) {
22
+ fs.mkdirSync(targetDir, { recursive: true });
23
+ }
24
+
25
+ // Copy SKILL.md
26
+ const skillSource = path.join(__dirname, 'SKILL.md');
27
+ const skillTarget = path.join(targetDir, 'SKILL.md');
28
+ fs.copyFileSync(skillSource, skillTarget);
29
+
30
+ // Copy additional directories if they exist
31
+ const dirs = ['templates', 'knowledge', 'examples'];
32
+ for (const dir of dirs) {
33
+ const sourcePath = path.join(__dirname, dir);
34
+ if (fs.existsSync(sourcePath)) {
35
+ const targetPath = path.join(targetDir, dir);
36
+ fs.cpSync(sourcePath, targetPath, { recursive: true });
37
+ }
38
+ }
39
+
40
+ console.log('✓ Skill installed to: ' + targetDir);
41
+ } catch (error) {
42
+ console.error('Failed to install skill:', error.message);
43
+ process.exit(1);
44
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@claude-skills/test-skill",
3
+ "version": "1.0.0",
4
+ "description": "A test skill for unit testing",
5
+ "main": "SKILL.md",
6
+ "types": "index.d.ts",
7
+ "scripts": {
8
+ "install": "node install.js"
9
+ },
10
+ "keywords": [
11
+ "claude",
12
+ "claude-skill",
13
+ "ossa",
14
+ "ai",
15
+ "agent",
16
+ "test",
17
+ "testing",
18
+ "validation",
19
+ "unit-test"
20
+ ],
21
+ "author": "Test Author",
22
+ "license": "MIT",
23
+ "files": [
24
+ "SKILL.md",
25
+ "README.md",
26
+ "index.d.ts",
27
+ "install.js",
28
+ "templates/**",
29
+ "knowledge/**",
30
+ "examples/**"
31
+ ],
32
+ "ossa": {
33
+ "type": "claude-skill",
34
+ "skillPath": "/var/folders/48/d86hncy50j93r_vzsv6knttr0000gn/T/ossa-export-test-1772826461079/test-skill"
35
+ }
36
+ }
@@ -1,4 +1,4 @@
1
- apiVersion: ossa/v0.4.6
1
+ apiVersion: ossa/v0.4.7
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: compliance-auditor
@@ -1,4 +1,4 @@
1
- apiVersion: ossa/v0.4.6
1
+ apiVersion: ossa/v0.4.7
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: doc-agent
@@ -1,4 +1,4 @@
1
- apiVersion: ossa/v0.4.6
1
+ apiVersion: ossa/v0.4.7
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: mr-reviewer
@@ -1,4 +1,4 @@
1
- apiVersion: ossa/v0.4.6
1
+ apiVersion: ossa/v0.4.7
2
2
  kind: Agent
3
3
 
4
4
  metadata:
@@ -9,7 +9,7 @@
9
9
  #
10
10
  # ============================================================================
11
11
 
12
- apiVersion: ossa/v0.4.6
12
+ apiVersion: ossa/v0.4.7
13
13
  kind: Agent
14
14
 
15
15
  metadata:
@@ -1,4 +1,4 @@
1
- apiVersion: ossa/v0.4.6
1
+ apiVersion: ossa/v0.4.7
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: release-orchestrator