@bluefly/openstandardagents 0.4.9 → 0.5.1

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 (259) hide show
  1. package/.version.json +3 -3
  2. package/CHANGELOG.md +35 -4
  3. package/README.md +77 -62
  4. package/dist/.version.json +3 -3
  5. package/dist/adapters/a2a/a2a-protocol.js +4 -2
  6. package/dist/adapters/a2a/a2a-tool.js +4 -2
  7. package/dist/adapters/a2a/mcp-integration.d.ts +2 -1
  8. package/dist/adapters/a2a/mcp-integration.js +6 -3
  9. package/dist/adapters/browser/browser-exporter.d.ts +26 -0
  10. package/dist/adapters/browser/browser-exporter.js +73 -0
  11. package/dist/adapters/browser/browser-runner.d.ts +23 -0
  12. package/dist/adapters/browser/browser-runner.js +46 -0
  13. package/dist/adapters/browser/index.d.ts +9 -0
  14. package/dist/adapters/browser/index.js +9 -0
  15. package/dist/adapters/claude-code/adapter.js +2 -2
  16. package/dist/adapters/docker/generators.js +19 -19
  17. package/dist/adapters/docker/index.d.ts +2 -0
  18. package/dist/adapters/docker/index.js +2 -0
  19. package/dist/adapters/docker/openclaw-bridge.d.ts +57 -0
  20. package/dist/adapters/docker/openclaw-bridge.js +173 -0
  21. package/dist/adapters/drupal/generator.js +76 -76
  22. package/dist/adapters/drupal/index.d.ts +1 -0
  23. package/dist/adapters/drupal/index.js +2 -0
  24. package/dist/adapters/drupal/twig-renderer.d.ts +23 -0
  25. package/dist/adapters/drupal/twig-renderer.js +99 -0
  26. package/dist/adapters/gitlab/agent-generator.js +2 -1
  27. package/dist/adapters/openai-agents/adapter.js +2 -2
  28. package/dist/api/index.js +2 -1
  29. package/dist/api/routes/mcp.router.js +3 -1
  30. package/dist/api/routes/wizard.router.js +3 -1
  31. package/dist/cli/commands/agent/discover-type.command.js +1 -1
  32. package/dist/cli/commands/agent-card.command.js +37 -10
  33. package/dist/cli/commands/agents-sync.command.d.ts +2 -2
  34. package/dist/cli/commands/agents-sync.command.js +27 -17
  35. package/dist/cli/commands/catalog/config.js +1 -1
  36. package/dist/cli/commands/catalog/validate.command.js +2 -2
  37. package/dist/cli/commands/config.command.js +2 -2
  38. package/dist/cli/commands/daemon.command.js +32 -8
  39. package/dist/cli/commands/discover.d.ts +1 -1
  40. package/dist/cli/commands/discover.js +16 -8
  41. package/dist/cli/commands/economics.command.d.ts +9 -0
  42. package/dist/cli/commands/economics.command.js +113 -0
  43. package/dist/cli/commands/export.command.js +6 -3
  44. package/dist/cli/commands/mcp.command.js +3 -1
  45. package/dist/cli/commands/memory.command.d.ts +18 -0
  46. package/dist/cli/commands/memory.command.js +168 -0
  47. package/dist/cli/commands/publish.command.js +7 -4
  48. package/dist/cli/commands/serve-builder-routes.js +1 -1
  49. package/dist/cli/commands/usie-skills.command.d.ts +24 -0
  50. package/dist/cli/commands/usie-skills.command.js +297 -0
  51. package/dist/cli/commands/validate.command.js +8 -1
  52. package/dist/cli/commands/verify.d.ts +3 -3
  53. package/dist/cli/commands/verify.js +12 -6
  54. package/dist/cli/commands/workspace.command.d.ts +1 -0
  55. package/dist/cli/commands/workspace.command.js +28 -4
  56. package/dist/cli/index.js +12 -0
  57. package/dist/cli/schema-driven/schema-loader.js +5 -5
  58. package/dist/cli/workspace-validate.d.ts +23 -0
  59. package/dist/cli/workspace-validate.js +117 -0
  60. package/dist/data/platform-matrix.js +1 -4
  61. package/dist/generated/types.d.ts +97 -97
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.js +2 -0
  64. package/dist/mcp-server/index.js +658 -982
  65. package/dist/mesh/discovery-gkg.d.ts +26 -0
  66. package/dist/mesh/discovery-gkg.js +92 -0
  67. package/dist/messenger/Handler/AgentBatchHandler.js +3 -2
  68. package/dist/messenger/Handler/AgentExecutionHandler.js +6 -1
  69. package/dist/package.json +43 -14
  70. package/dist/sdks/shared/types.d.ts +1 -1
  71. package/dist/services/agent-card-generator.js +6 -2
  72. package/dist/services/daemon/audit-log.service.js +3 -1
  73. package/dist/services/daemon/execution.service.js +8 -4
  74. package/dist/services/daemon/fs-watcher.service.js +6 -7
  75. package/dist/services/daemon/pairing.service.js +2 -1
  76. package/dist/services/daemon/skill-aggregator.service.js +105 -21
  77. package/dist/services/daemon/sse-endpoints.js +1 -1
  78. package/dist/services/daemon/ws-server.js +10 -3
  79. package/dist/services/export/langchain/langchain-exporter.js +2 -2
  80. package/dist/services/export/langchain/memory-generator.js +2 -2
  81. package/dist/services/export/testing/test-generator.js +1 -1
  82. package/dist/services/governance/cedar-provider.js +12 -8
  83. package/dist/services/governance/cedar-validator.service.js +1 -1
  84. package/dist/services/mcp/bridge.service.js +40 -9
  85. package/dist/services/openapi-extensions-validation.d.ts +20 -0
  86. package/dist/services/openapi-extensions-validation.js +193 -0
  87. package/dist/services/release-automation/merge-request.service.d.ts +4 -4
  88. package/dist/services/release-automation/release-buttons.js +3 -3
  89. package/dist/services/release-automation/schemas/release.schema.d.ts +3 -3
  90. package/dist/services/runtime/openai.adapter.d.ts +46 -13
  91. package/dist/services/runtime/openai.adapter.js +169 -131
  92. package/dist/services/skill-registry.service.d.ts +1 -1
  93. package/dist/services/skills-pipeline/skills-research.service.js +47 -7
  94. package/dist/services/taxonomy-service.d.ts +3 -3
  95. package/dist/services/trust/trust.service.js +6 -4
  96. package/dist/services/validation-zod.service.js +3 -22
  97. package/dist/services/validators/index.d.ts +1 -0
  98. package/dist/services/validators/index.js +1 -0
  99. package/dist/services/validators/registry.d.ts +21 -0
  100. package/dist/services/validators/registry.js +42 -0
  101. package/dist/skills/test-skill/package.json +1 -1
  102. package/dist/spec/extensions/cognition.schema.json +87 -0
  103. package/dist/spec/extensions/role-manifest.md +188 -0
  104. package/dist/spec/layer4-economics/duadp-examples.json +44 -0
  105. package/dist/spec/v0.4/agent.schema.json +14 -0
  106. package/dist/spec/v0.4/extensions/mcp/README.md +1 -1
  107. package/dist/spec/v0.5/agent-builder-openapi.yaml +230 -0
  108. package/dist/spec/v0.5/agent.schema.json +34 -2
  109. package/dist/spec/v0.5/extensions/cognition/cognition.schema.json +78 -1
  110. package/dist/spec/v0.5/extensions/economics/context-pack.schema.json +91 -0
  111. package/dist/spec/v0.5/extensions/economics/execution-profile.schema.json +148 -0
  112. package/dist/spec/v0.5/extensions/economics/failure-semantics.schema.json +32 -0
  113. package/dist/spec/v0.5/extensions/economics/replay-packet.schema.json +120 -0
  114. package/dist/spec/v0.5/memory-hierarchy.yaml +120 -0
  115. package/dist/spec/v0.5/role.schema.json +268 -0
  116. package/dist/spec/v1/agent-card.schema.json +254 -0
  117. package/dist/types/cognition.zod.d.ts +312 -0
  118. package/dist/types/cognition.zod.js +223 -0
  119. package/dist/types/identity.zod.d.ts +5 -5
  120. package/dist/types/index.d.ts +54 -6
  121. package/dist/types/index.js +6 -2
  122. package/dist/types/personality.zod.d.ts +3 -3
  123. package/dist/types/role.d.ts +126 -0
  124. package/dist/types/role.js +38 -0
  125. package/dist/utils/http-client.d.ts +22 -0
  126. package/dist/utils/http-client.js +51 -0
  127. package/dist/utils/index.d.ts +3 -0
  128. package/dist/utils/index.js +3 -0
  129. package/dist/utils/proxy-resolver.d.ts +36 -0
  130. package/dist/utils/proxy-resolver.js +59 -0
  131. package/dist/utils/user-agent.d.ts +11 -0
  132. package/dist/utils/user-agent.js +17 -0
  133. package/dist/validation/validator.js +1 -1
  134. package/dist/validation/version-compliance.js +1 -1
  135. package/examples/agents/01-customer-support-bot/agent.ossa.yaml +24 -31
  136. package/examples/agents/05-sales-assistant/agent.ossa.yaml +35 -23
  137. package/examples/agents/07-research-assistant/agent.ossa.yaml +27 -21
  138. package/examples/agents/10-meeting-assistant/agent.ossa.yaml +27 -35
  139. package/examples/agents/security-audit-agent.ossa.yaml +234 -0
  140. package/examples/agentscope/react-assistant/README.md +1 -1
  141. package/examples/agentscope/react-assistant/agent.ossa.yaml +37 -33
  142. package/examples/drupal/content-moderator.ossa.yaml +2 -2
  143. package/examples/drupal/drupal-contributor-agent/.eslintrc.json +58 -0
  144. package/examples/drupal/drupal-contributor-agent/.prettierrc.json +10 -0
  145. package/examples/drupal/drupal-contributor-agent/package.json +55 -0
  146. package/examples/drupal/drupal-contributor-agent/src/core/index.ts +10 -0
  147. package/examples/drupal/drupal-contributor-agent/src/index.ts +17 -0
  148. package/examples/drupal/drupal-contributor-agent/src/types/index.ts +180 -0
  149. package/examples/drupal/drupal-contributor-agent/tsconfig.json +36 -0
  150. package/examples/drupal/drupal-contributor.ossa.yaml +247 -0
  151. package/examples/export/langchain/production-agent-with-memory/README.md +1 -1
  152. package/examples/export/langchain/production-agent-with-memory/agent.ossa.yaml +13 -23
  153. package/examples/export/langchain/production-agent-with-streaming/agent.ossa.yaml +1 -15
  154. package/examples/export/langchain/production-agent-with-tools/agent.ossa.yaml +28 -29
  155. package/examples/getting-started/01-minimal-agent.ossa.yaml +1 -1
  156. package/examples/getting-started/02-agent-with-tools.ossa.yaml +1 -1
  157. package/examples/getting-started/03-agent-with-safety.ossa.yaml +1 -1
  158. package/examples/getting-started/04-agent-with-messaging.ossa.yaml +1 -1
  159. package/examples/getting-started/05-workflow-composition.ossa.yaml +1 -1
  160. package/examples/getting-started/README.md +3 -3
  161. package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
  162. package/examples/gitlab-agents/gitlab-ci-agent.ossa.yaml +221 -0
  163. package/examples/hierarchical-agent.ossa.yaml +10 -53
  164. package/examples/kagent/ossa-kagent-anthropic.ossa.yaml +2 -25
  165. package/examples/kagent/ossa-kagent-mcp-tools.ossa.yaml +2 -30
  166. package/examples/kagent/ossa-kagent-multi-tool.ossa.yaml +2 -18
  167. package/examples/kagent/ossa-kagent-poc.ossa.yaml +2 -16
  168. package/examples/pipeline-agent.ossa.yaml +3 -3
  169. package/examples/platform-specific/claude-code-subagent.yaml +1 -1
  170. package/examples/platform-specific/cursor-coding-agent.yaml +1 -1
  171. package/examples/platform-specific/warp-terminal-agent.yaml +1 -1
  172. package/examples/production-ready/01-customer-support-bot/agent.ossa.yaml +24 -31
  173. package/examples/production-ready/05-sales-assistant/agent.ossa.yaml +35 -23
  174. package/examples/production-ready/07-research-assistant/agent.ossa.yaml +27 -19
  175. package/examples/production-ready/10-meeting-assistant/agent.ossa.yaml +27 -35
  176. package/examples/roles/drupal-developer.role.yaml +37 -0
  177. package/examples/roles/platform-operator.role.yaml +28 -0
  178. package/examples/roles/security-auditor.role.yaml +27 -0
  179. package/examples/swarm-agent.ossa.yaml +13 -51
  180. package/examples/team-agent.ossa.yaml +12 -61
  181. package/examples/team-lead-teammate.ossa.yaml +12 -17
  182. package/openapi/agent-cognition-sessions.yaml +580 -0
  183. package/openapi/agent-communication.yaml +260 -212
  184. package/openapi/agent-crud.yaml +237 -207
  185. package/openapi/agent-discovery.yaml +119 -81
  186. package/openapi/agent-identity.yaml +219 -187
  187. package/openapi/agent-taxonomy.yaml +95 -38
  188. package/openapi/agents-md-service.yaml +103 -30
  189. package/openapi/cli/openapi.yaml +147 -40
  190. package/openapi/core/ossa-core-api.openapi.yaml +327 -271
  191. package/openapi/core/ossa-registry-api.openapi.yaml +299 -236
  192. package/openapi/core/ossa-registry.openapi.yaml +299 -159
  193. package/openapi/core/unified-agent-gateway.openapi.yaml +234 -170
  194. package/openapi/daemon-api.openapi.yaml +323 -181
  195. package/openapi/dev-cli/openapi.yaml +137 -113
  196. package/openapi/github-sync.yaml +62 -19
  197. package/openapi/marketplace-plugin.openapi.yaml +539 -466
  198. package/openapi/ossa-api.openapi.yaml +354 -213
  199. package/openapi/ossa-cli-enhancements.openapi.yaml +109 -90
  200. package/openapi/ossa-cli.yaml +260 -184
  201. package/openapi/protocols/sse-streams.yaml +66 -74
  202. package/openapi/protocols/websocket-events.yaml +61 -54
  203. package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +37 -20
  204. package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +35 -23
  205. package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +29 -18
  206. package/openapi/reference-implementations/critic-agent-api.openapi.yaml +45 -19
  207. package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +30 -24
  208. package/openapi/reference-implementations/drupal-agent-api.openapi.yaml +101 -50
  209. package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +33 -22
  210. package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +20 -16
  211. package/openapi/reference-implementations/governor-agent-api.openapi.yaml +41 -23
  212. package/openapi/reference-implementations/helm-generator.openapi.yaml +88 -46
  213. package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +30 -20
  214. package/openapi/reference-implementations/judge-agent-api.openapi.yaml +22 -16
  215. package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +32 -18
  216. package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +32 -21
  217. package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +34 -21
  218. package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +49 -27
  219. package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +27 -19
  220. package/openapi/reference-implementations/self-evolving-ecosystem.openapi.yaml +427 -293
  221. package/openapi/reference-implementations/worker-agent-api.openapi.yaml +34 -23
  222. package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +35 -21
  223. package/openapi/release-automation.openapi.yaml +48 -14
  224. package/openapi/schemas/common/agent.yaml +30 -29
  225. package/openapi/schemas/common/economics.yaml +98 -0
  226. package/openapi/schemas/common/errors.yaml +13 -3
  227. package/openapi/schemas/common/metadata.yaml +22 -7
  228. package/openapi/schemas/common/pagination.yaml +18 -6
  229. package/openapi/schemas/common/security.yaml +13 -5
  230. package/openapi/schemas/index.yaml +49 -42
  231. package/openapi/uadp-asyncapi.yaml +5 -3
  232. package/openapi/uadp-openapi.yaml +243 -165
  233. package/openapi/version-management.openapi.yaml +142 -135
  234. package/package.json +43 -14
  235. package/spec/extensions/cognition.schema.json +87 -0
  236. package/spec/extensions/role-manifest.md +188 -0
  237. package/spec/layer4-economics/duadp-examples.json +44 -0
  238. package/spec/v0.4/agent.schema.json +14 -0
  239. package/spec/v0.4/extensions/mcp/README.md +1 -1
  240. package/spec/v0.5/agent-builder-openapi.yaml +230 -0
  241. package/spec/v0.5/agent.schema.json +34 -2
  242. package/spec/v0.5/extensions/cognition/cognition.schema.json +78 -1
  243. package/spec/v0.5/extensions/economics/context-pack.schema.json +91 -0
  244. package/spec/v0.5/extensions/economics/execution-profile.schema.json +148 -0
  245. package/spec/v0.5/extensions/economics/failure-semantics.schema.json +32 -0
  246. package/spec/v0.5/extensions/economics/replay-packet.schema.json +120 -0
  247. package/spec/v0.5/memory-hierarchy.yaml +120 -0
  248. package/spec/v0.5/role.schema.json +268 -0
  249. package/spec/v1/agent-card.schema.json +254 -0
  250. package/dist/adapters/a2a/__tests__/mcp-integration.spec.d.ts +0 -5
  251. package/dist/adapters/a2a/__tests__/mcp-integration.spec.js +0 -268
  252. package/dist/adapters/a2a/__tests__/mcp-transport.spec.d.ts +0 -5
  253. package/dist/adapters/a2a/__tests__/mcp-transport.spec.js +0 -203
  254. package/dist/mcp-server/__tests__/mcp-server.spec.d.ts +0 -8
  255. package/dist/mcp-server/__tests__/mcp-server.spec.js +0 -557
  256. package/dist/validation/__tests__/error-codes.test.d.ts +0 -5
  257. package/dist/validation/__tests__/error-codes.test.js +0 -252
  258. package/dist/version-management/core/version-manager.test.d.ts +0 -2
  259. package/dist/version-management/core/version-manager.test.js +0 -210
@@ -1,252 +0,0 @@
1
- /**
2
- * Tests for OSSA Error Codes
3
- */
4
- import { OSSAErrorCode, ERROR_CATALOG, getErrorDetails, searchErrorsByTag, searchErrorsBySeverity, getAllErrorCodes, getErrorCountBySeverity, } from '../error-codes';
5
- describe('Error Codes', () => {
6
- describe('OSSAErrorCode enum', () => {
7
- it('should have 101 error codes', () => {
8
- const codes = Object.values(OSSAErrorCode);
9
- expect(codes.length).toBe(101);
10
- });
11
- it('should have correct format (OSSA-XXX)', () => {
12
- const codes = Object.values(OSSAErrorCode);
13
- codes.forEach((code) => {
14
- expect(code).toMatch(/^OSSA-\d{3}$/);
15
- });
16
- });
17
- it('should have sequential codes', () => {
18
- expect(OSSAErrorCode.OSSA_001).toBe('OSSA-001');
19
- expect(OSSAErrorCode.OSSA_100).toBe('OSSA-100');
20
- expect(OSSAErrorCode.OSSA_200).toBe('OSSA-200');
21
- expect(OSSAErrorCode.OSSA_906).toBe('OSSA-906');
22
- });
23
- });
24
- describe('ERROR_CATALOG', () => {
25
- it('should have entry for every error code', () => {
26
- const codes = Object.values(OSSAErrorCode);
27
- codes.forEach((code) => {
28
- expect(ERROR_CATALOG[code]).toBeDefined();
29
- expect(ERROR_CATALOG[code].code).toBe(code);
30
- });
31
- });
32
- it('should have required fields for all errors', () => {
33
- Object.values(ERROR_CATALOG).forEach((error) => {
34
- expect(error.code).toBeDefined();
35
- expect(error.severity).toMatch(/^(error|warning|info)$/);
36
- expect(error.message).toBeDefined();
37
- expect(error.remediation).toBeDefined();
38
- expect(error.docsUrl).toBeDefined();
39
- expect(error.docsUrl).toContain('openstandardagents.org');
40
- });
41
- });
42
- it('should have tags for all errors', () => {
43
- Object.values(ERROR_CATALOG).forEach((error) => {
44
- expect(error.tags).toBeDefined();
45
- expect(Array.isArray(error.tags)).toBe(true);
46
- expect(error.tags.length).toBeGreaterThan(0);
47
- });
48
- });
49
- });
50
- describe('getErrorDetails', () => {
51
- it('should return error details for valid code', () => {
52
- const details = getErrorDetails(OSSAErrorCode.OSSA_001);
53
- expect(details).toBeDefined();
54
- expect(details.code).toBe(OSSAErrorCode.OSSA_001);
55
- expect(details.message).toBe('Missing required field');
56
- expect(details.severity).toBe('error');
57
- });
58
- it('should return undefined for invalid code', () => {
59
- const details = getErrorDetails('INVALID');
60
- expect(details).toBeUndefined();
61
- });
62
- });
63
- describe('searchErrorsByTag', () => {
64
- it('should find errors by tag', () => {
65
- const didErrors = searchErrorsByTag('did');
66
- expect(didErrors.length).toBeGreaterThan(0);
67
- didErrors.forEach((error) => {
68
- expect(error.tags).toContain('did');
69
- });
70
- });
71
- it('should find schema errors', () => {
72
- const schemaErrors = searchErrorsByTag('schema');
73
- expect(schemaErrors.length).toBeGreaterThan(0);
74
- });
75
- it('should find genetics errors', () => {
76
- const geneticsErrors = searchErrorsByTag('genetics');
77
- expect(geneticsErrors.length).toBeGreaterThan(0);
78
- });
79
- it('should return empty array for non-existent tag', () => {
80
- const errors = searchErrorsByTag('non-existent-tag');
81
- expect(errors.length).toBe(0);
82
- });
83
- });
84
- describe('searchErrorsBySeverity', () => {
85
- it('should find all errors', () => {
86
- const errors = searchErrorsBySeverity('error');
87
- expect(errors.length).toBeGreaterThan(0);
88
- errors.forEach((error) => {
89
- expect(error.severity).toBe('error');
90
- });
91
- });
92
- it('should find all warnings', () => {
93
- const warnings = searchErrorsBySeverity('warning');
94
- expect(warnings.length).toBeGreaterThan(0);
95
- warnings.forEach((warning) => {
96
- expect(warning.severity).toBe('warning');
97
- });
98
- });
99
- it('should find all info', () => {
100
- const info = searchErrorsBySeverity('info');
101
- expect(info.length).toBeGreaterThan(0);
102
- info.forEach((infoItem) => {
103
- expect(infoItem.severity).toBe('info');
104
- });
105
- });
106
- });
107
- describe('getAllErrorCodes', () => {
108
- it('should return all error codes', () => {
109
- const codes = getAllErrorCodes();
110
- expect(codes.length).toBe(101);
111
- expect(codes).toContain(OSSAErrorCode.OSSA_001);
112
- expect(codes).toContain(OSSAErrorCode.OSSA_906);
113
- });
114
- });
115
- describe('getErrorCountBySeverity', () => {
116
- it('should count errors by severity', () => {
117
- const counts = getErrorCountBySeverity();
118
- expect(counts.error).toBeGreaterThan(0);
119
- expect(counts.warning).toBeGreaterThan(0);
120
- expect(counts.info).toBeGreaterThan(0);
121
- expect(counts.error + counts.warning + counts.info).toBe(101);
122
- });
123
- it('should have approximately 70% errors', () => {
124
- const counts = getErrorCountBySeverity();
125
- const errorPercentage = (counts.error / 101) * 100;
126
- expect(errorPercentage).toBeGreaterThan(60);
127
- expect(errorPercentage).toBeLessThan(80);
128
- });
129
- });
130
- describe('Category Coverage', () => {
131
- it('should have schema validation errors (001-099)', () => {
132
- const schemaErrors = [
133
- OSSAErrorCode.OSSA_001,
134
- OSSAErrorCode.OSSA_010,
135
- OSSAErrorCode.OSSA_015,
136
- ];
137
- schemaErrors.forEach((code) => {
138
- expect(ERROR_CATALOG[code]).toBeDefined();
139
- });
140
- });
141
- it('should have identity errors (100-199)', () => {
142
- const identityErrors = [
143
- OSSAErrorCode.OSSA_100,
144
- OSSAErrorCode.OSSA_110,
145
- OSSAErrorCode.OSSA_112,
146
- ];
147
- identityErrors.forEach((code) => {
148
- expect(ERROR_CATALOG[code]).toBeDefined();
149
- });
150
- });
151
- it('should have genetics errors (200-299)', () => {
152
- const geneticsErrors = [
153
- OSSAErrorCode.OSSA_200,
154
- OSSAErrorCode.OSSA_210,
155
- OSSAErrorCode.OSSA_212,
156
- ];
157
- geneticsErrors.forEach((code) => {
158
- expect(ERROR_CATALOG[code]).toBeDefined();
159
- });
160
- });
161
- it('should have lifecycle errors (300-399)', () => {
162
- const lifecycleErrors = [
163
- OSSAErrorCode.OSSA_300,
164
- OSSAErrorCode.OSSA_310,
165
- OSSAErrorCode.OSSA_311,
166
- ];
167
- lifecycleErrors.forEach((code) => {
168
- expect(ERROR_CATALOG[code]).toBeDefined();
169
- });
170
- });
171
- it('should have economics errors (400-499)', () => {
172
- const economicsErrors = [
173
- OSSAErrorCode.OSSA_400,
174
- OSSAErrorCode.OSSA_410,
175
- OSSAErrorCode.OSSA_411,
176
- ];
177
- economicsErrors.forEach((code) => {
178
- expect(ERROR_CATALOG[code]).toBeDefined();
179
- });
180
- });
181
- it('should have taxonomy errors (500-599)', () => {
182
- const taxonomyErrors = [
183
- OSSAErrorCode.OSSA_500,
184
- OSSAErrorCode.OSSA_505,
185
- OSSAErrorCode.OSSA_508,
186
- ];
187
- taxonomyErrors.forEach((code) => {
188
- expect(ERROR_CATALOG[code]).toBeDefined();
189
- });
190
- });
191
- it('should have access control errors (600-699)', () => {
192
- const accessErrors = [
193
- OSSAErrorCode.OSSA_600,
194
- OSSAErrorCode.OSSA_610,
195
- OSSAErrorCode.OSSA_614,
196
- ];
197
- accessErrors.forEach((code) => {
198
- expect(ERROR_CATALOG[code]).toBeDefined();
199
- });
200
- });
201
- it('should have revolutionary features errors (700-799)', () => {
202
- const revolutionaryErrors = [
203
- OSSAErrorCode.OSSA_700,
204
- OSSAErrorCode.OSSA_705,
205
- OSSAErrorCode.OSSA_706,
206
- ];
207
- revolutionaryErrors.forEach((code) => {
208
- expect(ERROR_CATALOG[code]).toBeDefined();
209
- });
210
- });
211
- it('should have naming errors (800-899)', () => {
212
- const namingErrors = [
213
- OSSAErrorCode.OSSA_800,
214
- OSSAErrorCode.OSSA_805,
215
- OSSAErrorCode.OSSA_806,
216
- ];
217
- namingErrors.forEach((code) => {
218
- expect(ERROR_CATALOG[code]).toBeDefined();
219
- });
220
- });
221
- it('should have catalog errors (900-999)', () => {
222
- const catalogErrors = [
223
- OSSAErrorCode.OSSA_900,
224
- OSSAErrorCode.OSSA_905,
225
- OSSAErrorCode.OSSA_906,
226
- ];
227
- catalogErrors.forEach((code) => {
228
- expect(ERROR_CATALOG[code]).toBeDefined();
229
- });
230
- });
231
- });
232
- describe('Error Examples', () => {
233
- it('should have examples for OSSA-001', () => {
234
- const details = getErrorDetails(OSSAErrorCode.OSSA_001);
235
- expect(details.examples).toBeDefined();
236
- expect(details.examples.length).toBeGreaterThan(0);
237
- expect(details.examples[0].invalid).toBeDefined();
238
- expect(details.examples[0].valid).toBeDefined();
239
- });
240
- it('should have examples for OSSA-010', () => {
241
- const details = getErrorDetails(OSSAErrorCode.OSSA_010);
242
- expect(details.examples).toBeDefined();
243
- expect(details.examples.length).toBeGreaterThan(0);
244
- });
245
- it('should have examples for OSSA-100', () => {
246
- const details = getErrorDetails(OSSAErrorCode.OSSA_100);
247
- expect(details.examples).toBeDefined();
248
- expect(details.examples.length).toBeGreaterThan(0);
249
- });
250
- });
251
- });
252
- //# sourceMappingURL=error-codes.test.js.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=version-manager.test.d.ts.map
@@ -1,210 +0,0 @@
1
- import { VersionManager } from './version-manager';
2
- import * as fs from 'fs/promises';
3
- import * as path from 'path';
4
- import * as os from 'os';
5
- describe('VersionManager', () => {
6
- let versionManager;
7
- let tempDir;
8
- beforeEach(async () => {
9
- versionManager = new VersionManager();
10
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ossa-version-test-'));
11
- });
12
- afterEach(async () => {
13
- await fs.rm(tempDir, { recursive: true, force: true });
14
- });
15
- describe('validate', () => {
16
- it('should validate correct semantic versions', () => {
17
- const testCases = [
18
- '0.4.2',
19
- 'v0.4.2',
20
- '1.2.3',
21
- '1.2.3-alpha.1',
22
- '2.0.0-rc.1+build.123',
23
- ];
24
- testCases.forEach((version) => {
25
- const result = versionManager.validate(version);
26
- expect(result.valid).toBe(true);
27
- expect(result.success).toBe(true);
28
- expect(result.parsed).toBeDefined();
29
- });
30
- });
31
- it('should reject invalid semantic versions', () => {
32
- const testCases = ['0.4', '1.2.3.4', 'latest', 'v1', 'invalid'];
33
- testCases.forEach((version) => {
34
- const result = versionManager.validate(version);
35
- expect(result.valid).toBe(false);
36
- expect(result.errors).toBeDefined();
37
- });
38
- });
39
- it('should parse version components correctly', () => {
40
- const result = versionManager.validate('1.2.3-alpha.1');
41
- expect(result.valid).toBe(true);
42
- expect(result.parsed).toEqual({
43
- major: 1,
44
- minor: 2,
45
- patch: 3,
46
- prerelease: 'alpha.1',
47
- build: undefined,
48
- });
49
- });
50
- });
51
- describe('bump', () => {
52
- it('should bump major version', () => {
53
- const result = versionManager.bump('0.4.2', 'major');
54
- expect(result.success).toBe(true);
55
- expect(result.oldVersion).toBe('0.4.2');
56
- expect(result.newVersion).toBe('1.0.0');
57
- expect(result.bumpType).toBe('major');
58
- });
59
- it('should bump minor version', () => {
60
- const result = versionManager.bump('0.4.2', 'minor');
61
- expect(result.success).toBe(true);
62
- expect(result.newVersion).toBe('0.5.0');
63
- });
64
- it('should bump patch version', () => {
65
- const result = versionManager.bump('0.4.2', 'patch');
66
- expect(result.success).toBe(true);
67
- expect(result.newVersion).toBe('0.4.3');
68
- });
69
- it('should bump to prerelease', () => {
70
- const result = versionManager.bump('0.4.2', 'prerelease', 'alpha');
71
- expect(result.success).toBe(true);
72
- expect(result.newVersion).toBe('0.4.3-alpha.0');
73
- });
74
- it('should handle versions with v prefix', () => {
75
- const result = versionManager.bump('v0.4.2', 'patch');
76
- expect(result.success).toBe(true);
77
- expect(result.oldVersion).toBe('0.4.2');
78
- expect(result.newVersion).toBe('0.4.3');
79
- });
80
- });
81
- describe('substitute', () => {
82
- it('should replace placeholders in files', async () => {
83
- // Create test files
84
- const testFile1 = path.join(tempDir, 'test1.md');
85
- const testFile2 = path.join(tempDir, 'test2.json');
86
- await fs.writeFile(testFile1, '# Version {{VERSION}}\n\nThis is version {{VERSION}} of the project.');
87
- await fs.writeFile(testFile2, JSON.stringify({
88
- apiVersion: 'ossa/v{{VERSION}}',
89
- version: '{{VERSION}}',
90
- }));
91
- const result = await versionManager.substitute({
92
- version: '0.4.2',
93
- paths: ['**/*.md', '**/*.json'],
94
- cwd: tempDir,
95
- });
96
- expect(result.success).toBe(true);
97
- expect(result.versionUsed).toBe('v0.4.2');
98
- expect(result.filesProcessed).toBe(2);
99
- expect(result.replacementsMade).toBe(4);
100
- // Verify file contents
101
- const content1 = await fs.readFile(testFile1, 'utf-8');
102
- expect(content1).toContain('# Version v0.4.2');
103
- expect(content1).toContain('This is version v0.4.2 of the project.');
104
- const content2 = await fs.readFile(testFile2, 'utf-8');
105
- const json = JSON.parse(content2);
106
- expect(json.apiVersion).toBe('ossa/vv0.4.2');
107
- expect(json.version).toBe('v0.4.2');
108
- });
109
- it('should support dry run mode', async () => {
110
- const testFile = path.join(tempDir, 'test.md');
111
- await fs.writeFile(testFile, '# Version {{VERSION}}');
112
- const result = await versionManager.substitute({
113
- version: '0.4.2',
114
- paths: ['**/*.md'],
115
- cwd: tempDir,
116
- dryRun: true,
117
- });
118
- expect(result.success).toBe(true);
119
- expect(result.dryRun).toBe(true);
120
- expect(result.replacementsMade).toBe(1);
121
- // Verify file was NOT modified
122
- const content = await fs.readFile(testFile, 'utf-8');
123
- expect(content).toBe('# Version {{VERSION}}');
124
- });
125
- it('should handle custom placeholders', async () => {
126
- const testFile = path.join(tempDir, 'test.md');
127
- await fs.writeFile(testFile, '# Version $VERSION');
128
- const result = await versionManager.substitute({
129
- version: '0.4.2',
130
- paths: ['**/*.md'],
131
- cwd: tempDir,
132
- placeholder: '$VERSION',
133
- });
134
- expect(result.success).toBe(true);
135
- expect(result.replacementsMade).toBe(1);
136
- const content = await fs.readFile(testFile, 'utf-8');
137
- expect(content).toBe('# Version v0.4.2');
138
- });
139
- it('should respect exclude patterns', async () => {
140
- // Create files
141
- const includedFile = path.join(tempDir, 'included.md');
142
- const excludedDir = path.join(tempDir, 'node_modules');
143
- await fs.mkdir(excludedDir);
144
- const excludedFile = path.join(excludedDir, 'excluded.md');
145
- await fs.writeFile(includedFile, '{{VERSION}}');
146
- await fs.writeFile(excludedFile, '{{VERSION}}');
147
- const result = await versionManager.substitute({
148
- version: '0.4.2',
149
- paths: ['**/*.md'],
150
- exclude: ['node_modules/**'],
151
- cwd: tempDir,
152
- });
153
- expect(result.filesProcessed).toBe(1);
154
- expect(result.replacementsMade).toBe(1);
155
- // Verify excluded file was NOT modified
156
- const excludedContent = await fs.readFile(excludedFile, 'utf-8');
157
- expect(excludedContent).toBe('{{VERSION}}');
158
- });
159
- });
160
- describe('restore', () => {
161
- it('should restore specific version to placeholder', async () => {
162
- const testFile = path.join(tempDir, 'test.md');
163
- await fs.writeFile(testFile, '# Version v0.4.2\n\nThis is v0.4.2.');
164
- const result = await versionManager.restore({
165
- version: '0.4.2',
166
- paths: ['**/*.md'],
167
- cwd: tempDir,
168
- });
169
- expect(result.success).toBe(true);
170
- expect(result.replacementsMade).toBe(2);
171
- const content = await fs.readFile(testFile, 'utf-8');
172
- expect(content).toBe('# Version {{VERSION}}\n\nThis is {{VERSION}}.');
173
- });
174
- it('should restore all versions to placeholder', async () => {
175
- const testFile = path.join(tempDir, 'test.md');
176
- await fs.writeFile(testFile, 'v0.4.2, v0.4.1, v1.0.0, and even 2.3.4');
177
- const result = await versionManager.restore({
178
- restoreAll: true,
179
- paths: ['**/*.md'],
180
- cwd: tempDir,
181
- });
182
- expect(result.success).toBe(true);
183
- expect(result.replacementsMade).toBe(4);
184
- const content = await fs.readFile(testFile, 'utf-8');
185
- expect(content).toBe('{{VERSION}}, {{VERSION}}, {{VERSION}}, and even {{VERSION}}');
186
- });
187
- });
188
- describe('detect', () => {
189
- it('should detect version from package.json', async () => {
190
- const packageJson = path.join(tempDir, 'package.json');
191
- await fs.writeFile(packageJson, JSON.stringify({ name: 'test', version: '0.4.2' }));
192
- const result = await versionManager.detect({ directory: tempDir });
193
- expect(result.success).toBe(true);
194
- expect(result.version).toBe('0.4.2');
195
- expect(result.source).toBe('package_json');
196
- });
197
- it('should detect version from VERSION file', async () => {
198
- const versionFile = path.join(tempDir, 'VERSION');
199
- await fs.writeFile(versionFile, 'v0.4.2\n');
200
- const result = await versionManager.detect({ directory: tempDir });
201
- expect(result.success).toBe(true);
202
- expect(result.version).toBe('v0.4.2');
203
- expect(result.source).toBe('VERSION_file');
204
- });
205
- it('should throw error when no version found', async () => {
206
- await expect(versionManager.detect({ directory: tempDir })).rejects.toThrow('Could not detect version from any source');
207
- });
208
- });
209
- });
210
- //# sourceMappingURL=version-manager.test.js.map