@bluefly/openstandardagents 0.3.0 → 0.3.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 (87) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +58 -218
  3. package/dist/cli/commands/diff.command.d.ts +7 -0
  4. package/dist/cli/commands/diff.command.d.ts.map +1 -0
  5. package/dist/cli/commands/diff.command.js +181 -0
  6. package/dist/cli/commands/diff.command.js.map +1 -0
  7. package/dist/cli/commands/docs.command.d.ts +7 -0
  8. package/dist/cli/commands/docs.command.d.ts.map +1 -0
  9. package/dist/cli/commands/docs.command.js +274 -0
  10. package/dist/cli/commands/docs.command.js.map +1 -0
  11. package/dist/cli/commands/lint.command.d.ts +7 -0
  12. package/dist/cli/commands/lint.command.d.ts.map +1 -0
  13. package/dist/cli/commands/lint.command.js +342 -0
  14. package/dist/cli/commands/lint.command.js.map +1 -0
  15. package/dist/cli/commands/serve.command.d.ts +7 -0
  16. package/dist/cli/commands/serve.command.d.ts.map +1 -0
  17. package/dist/cli/commands/serve.command.js +232 -0
  18. package/dist/cli/commands/serve.command.js.map +1 -0
  19. package/dist/cli/index.js +4 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/di-container.d.ts.map +1 -1
  22. package/dist/di-container.js +3 -0
  23. package/dist/di-container.js.map +1 -1
  24. package/dist/services/git.service.d.ts +40 -0
  25. package/dist/services/git.service.d.ts.map +1 -0
  26. package/dist/services/git.service.js +122 -0
  27. package/dist/services/git.service.js.map +1 -0
  28. package/dist/spec/v0.3.1/UNIFIED-SCHEMA.md +120 -0
  29. package/dist/spec/v0.3.1/adapters/drupal.md +541 -0
  30. package/dist/spec/v0.3.1/adapters/symfony.md +659 -0
  31. package/dist/spec/v0.3.1/agent-test.schema.json +75 -0
  32. package/dist/spec/v0.3.1/examples/drupal-content-writer.ossa.yaml +110 -0
  33. package/dist/spec/v0.3.1/examples/drupal-moderation-assistant.ossa.yaml +96 -0
  34. package/dist/spec/v0.3.1/examples/quick-wins/complete-agent-with-quick-wins.ossa.yaml +144 -0
  35. package/dist/spec/v0.3.1/extensions/drupal.md +417 -0
  36. package/dist/spec/v0.3.1/ossa-0.3.0.schema.json +2787 -0
  37. package/dist/spec/v0.3.1/ossa-0.3.1.schema.json +2806 -0
  38. package/dist/spec/v0.3.1/protocols/sse.md +494 -0
  39. package/dist/spec/v0.3.1/protocols/webrtc.md +600 -0
  40. package/dist/spec/v0.3.1/protocols/websocket.md +362 -0
  41. package/dist/spec/v0.3.1/schemas/agent-unified.yaml +165 -0
  42. package/dist/spec/v0.3.1/schemas/capabilities.yaml +102 -0
  43. package/dist/spec/v0.3.1/schemas/functions.yaml +75 -0
  44. package/dist/spec/v0.3.1/schemas/messaging/channel.schema.json +245 -0
  45. package/dist/spec/v0.3.1/schemas/messaging/delivery-receipt.schema.json +192 -0
  46. package/dist/spec/v0.3.1/schemas/messaging/message.schema.json +205 -0
  47. package/dist/spec/v0.3.1/schemas/messaging/subscription.schema.json +214 -0
  48. package/dist/spec/v0.3.1/schemas/runtime.yaml +102 -0
  49. package/dist/spec/v0.3.1/schemas/taxonomy.yaml +533 -0
  50. package/dist/spec/v0.3.1/schemas/unified-llm.yaml +91 -0
  51. package/dist/spec/v0.3.1/taxonomy.yaml +256 -0
  52. package/dist/testing/fixtures.d.ts.map +1 -1
  53. package/dist/testing/fixtures.js +3 -2
  54. package/dist/testing/fixtures.js.map +1 -1
  55. package/package.json +3 -31
  56. package/spec/v0.3.1/UNIFIED-SCHEMA.md +120 -0
  57. package/spec/v0.3.1/adapters/drupal.md +541 -0
  58. package/spec/v0.3.1/adapters/symfony.md +659 -0
  59. package/spec/v0.3.1/agent-test.schema.json +75 -0
  60. package/spec/v0.3.1/examples/drupal-content-writer.ossa.yaml +110 -0
  61. package/spec/v0.3.1/examples/drupal-moderation-assistant.ossa.yaml +96 -0
  62. package/spec/v0.3.1/examples/quick-wins/complete-agent-with-quick-wins.ossa.yaml +144 -0
  63. package/spec/v0.3.1/extensions/drupal.md +417 -0
  64. package/spec/v0.3.1/ossa-0.3.0.schema.json +2787 -0
  65. package/spec/v0.3.1/ossa-0.3.1.schema.json +2806 -0
  66. package/spec/v0.3.1/protocols/sse.md +494 -0
  67. package/spec/v0.3.1/protocols/webrtc.md +600 -0
  68. package/spec/v0.3.1/protocols/websocket.md +362 -0
  69. package/spec/v0.3.1/schemas/agent-unified.yaml +165 -0
  70. package/spec/v0.3.1/schemas/capabilities.yaml +102 -0
  71. package/spec/v0.3.1/schemas/functions.yaml +75 -0
  72. package/spec/v0.3.1/schemas/messaging/channel.schema.json +245 -0
  73. package/spec/v0.3.1/schemas/messaging/delivery-receipt.schema.json +192 -0
  74. package/spec/v0.3.1/schemas/messaging/message.schema.json +205 -0
  75. package/spec/v0.3.1/schemas/messaging/subscription.schema.json +214 -0
  76. package/spec/v0.3.1/schemas/runtime.yaml +102 -0
  77. package/spec/v0.3.1/schemas/taxonomy.yaml +533 -0
  78. package/spec/v0.3.1/schemas/unified-llm.yaml +91 -0
  79. package/spec/v0.3.1/taxonomy.yaml +256 -0
  80. package/dist/types/generated/ossa-0.3.0.types.d.ts +0 -316
  81. package/dist/types/generated/ossa-0.3.0.types.d.ts.map +0 -1
  82. package/dist/types/generated/ossa-0.3.0.types.js +0 -8
  83. package/dist/types/generated/ossa-0.3.0.types.js.map +0 -1
  84. package/dist/types/generated/ossa-0.3.0.zod.d.ts +0 -17
  85. package/dist/types/generated/ossa-0.3.0.zod.d.ts.map +0 -1
  86. package/dist/types/generated/ossa-0.3.0.zod.js +0 -3
  87. package/dist/types/generated/ossa-0.3.0.zod.js.map +0 -1
@@ -0,0 +1,256 @@
1
+ # =============================================================================
2
+ # OSSA v0.3.1 - Agent Taxonomy Specification
3
+ # =============================================================================
4
+ # Hierarchical classification system for agents with cross-cutting concerns
5
+ # Issue: https://gitlab.com/blueflyio/openstandardagents/-/issues/194
6
+ # =============================================================================
7
+
8
+ apiVersion: ossa/v0.3.1
9
+ kind: TaxonomySpec
10
+ version: "1.0.0"
11
+
12
+ # =============================================================================
13
+ # PRIMARY DOMAINS
14
+ # Top-level classification - every agent belongs to exactly one domain
15
+ # =============================================================================
16
+ domains:
17
+ security:
18
+ description: "Authentication, authorization, encryption, compliance, vulnerability management"
19
+ subdomains:
20
+ - auth # Authentication & authorization
21
+ - encryption # Encryption & key management
22
+ - compliance # Regulatory compliance (SOC2, ISO, GDPR)
23
+ - vulnerability # Vulnerability scanning & remediation
24
+ - secrets # Secrets management & rotation
25
+ - threat-detection # Threat detection & response
26
+ examples:
27
+ - security-scanner
28
+ - compliance-checker
29
+ - secret-detector
30
+ - threat-modeler
31
+
32
+ infrastructure:
33
+ description: "DevOps, CI/CD, deployment, configuration, cloud resources"
34
+ subdomains:
35
+ - ci-cd # CI/CD pipeline management
36
+ - gitops # GitOps workflows
37
+ - deployment # Deployment automation
38
+ - configuration # Configuration management
39
+ - networking # Network configuration
40
+ - storage # Storage management
41
+ - kubernetes # Kubernetes orchestration
42
+ - cloud # Cloud provider management
43
+ examples:
44
+ - deployment-manager
45
+ - pipeline-fixer
46
+ - infrastructure-provisioner
47
+ - incident-responder
48
+
49
+ documentation:
50
+ description: "Documentation, wiki, guides, knowledge management"
51
+ subdomains:
52
+ - api-docs # API documentation
53
+ - user-guides # User guides & tutorials
54
+ - wiki # Wiki management
55
+ - knowledge-base # Knowledge base management
56
+ - changelog # Changelog & release notes
57
+ examples:
58
+ - documentation-generator
59
+ - wiki-manager
60
+ - api-docs-generator
61
+
62
+ backend:
63
+ description: "API, database, services, business logic"
64
+ subdomains:
65
+ - api # API design & implementation
66
+ - database # Database management
67
+ - services # Microservices
68
+ - messaging # Message queues & events
69
+ - caching # Caching strategies
70
+ - integration # System integration
71
+ examples:
72
+ - api-builder
73
+ - database-migrator
74
+ - service-orchestrator
75
+
76
+ frontend:
77
+ description: "UI/UX, web, mobile interfaces"
78
+ subdomains:
79
+ - web # Web applications
80
+ - mobile # Mobile applications
81
+ - design-system # Design system components
82
+ - accessibility # Accessibility (a11y)
83
+ - performance # Frontend performance
84
+ examples:
85
+ - ui-reviewer
86
+ - accessibility-checker
87
+ - design-system-manager
88
+
89
+ data:
90
+ description: "Data engineering, analytics, ML/AI operations"
91
+ subdomains:
92
+ - analytics # Business analytics
93
+ - ml-ops # ML operations
94
+ - etl # Extract, transform, load
95
+ - data-quality # Data quality & validation
96
+ - data-governance # Data governance
97
+ - streaming # Real-time data streaming
98
+ examples:
99
+ - analytics-collector
100
+ - ml-model-manager
101
+ - data-quality-checker
102
+
103
+ agents:
104
+ description: "OSSA agents, automation, orchestration, meta-operations"
105
+ subdomains:
106
+ - orchestration # Multi-agent orchestration
107
+ - workers # Worker agents
108
+ - supervisors # Supervisor agents
109
+ - mesh # Agent mesh networking
110
+ - training # Agent training & improvement
111
+ - registry # Agent registry management
112
+ examples:
113
+ - master-orchestrator
114
+ - agent-trainer
115
+ - workflow-builder
116
+
117
+ development:
118
+ description: "Software development, code quality, testing"
119
+ subdomains:
120
+ - code-review # Code review automation
121
+ - testing # Test generation & execution
122
+ - refactoring # Code refactoring
123
+ - debugging # Debugging assistance
124
+ - ide # IDE integration
125
+ examples:
126
+ - code-reviewer
127
+ - test-generator
128
+ - refactoring-assistant
129
+
130
+ content:
131
+ description: "Content management, editing, publishing"
132
+ subdomains:
133
+ - authoring # Content authoring
134
+ - editing # Content editing
135
+ - publishing # Content publishing
136
+ - research # Research & knowledge gathering
137
+ - localization # Internationalization & localization
138
+ examples:
139
+ - content-orchestrator
140
+ - editor
141
+ - researcher
142
+ - publisher
143
+
144
+ # =============================================================================
145
+ # CROSS-CUTTING CONCERNS
146
+ # Tags that can apply to any agent regardless of domain
147
+ # An agent can have multiple concerns
148
+ # =============================================================================
149
+ concerns:
150
+ quality:
151
+ description: "Testing, code quality, standards enforcement"
152
+ applies_to: ["development", "backend", "frontend", "infrastructure"]
153
+
154
+ observability:
155
+ description: "Metrics, logging, tracing, monitoring"
156
+ applies_to: ["*"] # All domains
157
+
158
+ governance:
159
+ description: "Policies, compliance, audit trails"
160
+ applies_to: ["*"]
161
+
162
+ performance:
163
+ description: "Optimization, caching, scaling"
164
+ applies_to: ["*"]
165
+
166
+ architecture:
167
+ description: "Design patterns, system structure"
168
+ applies_to: ["development", "backend", "infrastructure", "agents"]
169
+
170
+ cost:
171
+ description: "FinOps, resource optimization, budget management"
172
+ applies_to: ["infrastructure", "data", "agents"]
173
+
174
+ reliability:
175
+ description: "SRE, uptime, resilience, disaster recovery"
176
+ applies_to: ["infrastructure", "backend", "agents"]
177
+
178
+ # =============================================================================
179
+ # AGENT TYPE CLASSIFICATION
180
+ # Based on OSSA spec.type field
181
+ # =============================================================================
182
+ agent_types:
183
+ worker:
184
+ description: "Executes specific tasks, no delegation"
185
+ typical_domains: ["development", "security", "documentation"]
186
+
187
+ supervisor:
188
+ description: "Coordinates other agents, can delegate"
189
+ typical_domains: ["agents", "infrastructure"]
190
+
191
+ orchestrator:
192
+ description: "High-level coordination, workflow management"
193
+ typical_domains: ["agents"]
194
+
195
+ specialist:
196
+ description: "Deep expertise in narrow domain"
197
+ typical_domains: ["security", "data", "backend"]
198
+
199
+ # =============================================================================
200
+ # USAGE IN AGENT MANIFESTS
201
+ # =============================================================================
202
+ # Example usage in OSSA agent manifest:
203
+ #
204
+ # metadata:
205
+ # name: security-scanner
206
+ # labels:
207
+ # domain: security
208
+ # subdomain: vulnerability
209
+ # concerns: quality,compliance
210
+ #
211
+ # spec:
212
+ # type: worker
213
+ # taxonomy:
214
+ # domain: security
215
+ # subdomain: vulnerability
216
+ # capability: scan_vulnerabilities
217
+ # concerns:
218
+ # - quality
219
+ # - compliance
220
+
221
+ # =============================================================================
222
+ # VALIDATION RULES
223
+ # =============================================================================
224
+ validation:
225
+ rules:
226
+ - name: valid-domain
227
+ description: "Domain must be from approved list"
228
+ severity: error
229
+
230
+ - name: valid-subdomain
231
+ description: "Subdomain must belong to specified domain"
232
+ severity: error
233
+
234
+ - name: concerns-applicable
235
+ description: "Concerns must be applicable to domain"
236
+ severity: warning
237
+
238
+ - name: type-domain-match
239
+ description: "Agent type should match typical domains"
240
+ severity: info
241
+
242
+ # =============================================================================
243
+ # MIGRATION FROM LEGACY
244
+ # =============================================================================
245
+ migration:
246
+ deprecated_domains:
247
+ ci-cd: { domain: infrastructure, subdomain: ci-cd }
248
+ gitops: { domain: infrastructure, subdomain: gitops }
249
+ deployment: { domain: infrastructure, subdomain: deployment }
250
+ configuration: { domain: infrastructure, subdomain: configuration }
251
+ cost-management: { domain: infrastructure, concerns: [cost] }
252
+ database: { domain: backend, subdomain: database }
253
+ performance: { concerns: [performance] }
254
+ observability: { concerns: [observability] }
255
+ governance: { concerns: [governance] }
256
+ architecture: { concerns: [architecture] }
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAmBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAiDnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SA+B/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAyD5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,GAclC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAkDnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAW3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;IAuB7B,CAAC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAmBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAiDnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SA+B/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAyD5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,GAclC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAkDnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAW3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;IAuB7B,CAAC"}
@@ -2,11 +2,12 @@
2
2
  * Test Fixtures
3
3
  * Sample agent manifests and test data for testing
4
4
  */
5
+ import { getApiVersion } from '../utils/version.js';
5
6
  /**
6
7
  * Basic valid agent manifest
7
8
  */
8
9
  export const basicAgentManifest = {
9
- apiVersion: 'ossa/v0.3.0',
10
+ apiVersion: getApiVersion(),
10
11
  kind: 'Agent',
11
12
  metadata: {
12
13
  name: 'test-agent',
@@ -178,7 +179,7 @@ export const agentWithTests = {
178
179
  * Invalid agent manifest (missing required fields)
179
180
  */
180
181
  export const invalidAgentManifest = {
181
- apiVersion: 'ossa/v0.3.0',
182
+ apiVersion: getApiVersion(),
182
183
  kind: 'Agent',
183
184
  metadata: {
184
185
  name: 'invalid-agent',
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,2BAA2B;QACxC,MAAM,EAAE;YACN,GAAG,EAAE,MAAM;SACZ;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,kCAAkC;QACxC,GAAG,EAAE;YACH,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,OAAO;SACf;QACD,KAAK,EAAE,EAAE;KACV;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAc;IAC9C,GAAG,kBAAkB;IACrB,QAAQ,EAAE;QACR,GAAG,kBAAkB,CAAC,QAAQ;QAC9B,IAAI,EAAE,kBAAkB;KACzB;IACD,IAAI,EAAE;QACJ,GAAG,kBAAkB,CAAC,IAAI;QAC1B,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,cAAc;wBAC3B,QAAQ,EAAE,IAAI;qBACf;iBACF;gBACD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,gBAAgB;qBAC9B;iBACF;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,yBAAyB;wBACtC,QAAQ,EAAE,IAAI;qBACf;iBACF;gBACD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oBAAoB;qBAClC;iBACF;aACF;SACF;KACK;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAc;IAC1C,GAAG,kBAAkB;IACrB,QAAQ,EAAE;QACR,GAAG,kBAAkB,CAAC,QAAQ;QAC9B,IAAI,EAAE,cAAc;KACrB;IACD,IAAI,EAAE;QACJ,GAAG,kBAAkB,CAAC,IAAI;QAC1B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE;oBACL;wBACE,SAAS,EAAE,gBAAgB;wBAC3B,MAAM,EAAE,UAAU;qBACnB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE;oBACL;wBACE,SAAS,EAAE,oBAAoB;wBAC/B,MAAM,EAAE,OAAO;qBAChB;iBACF;aACF;SACF;KACK;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,GAAG,kBAAkB;IACrB,QAAQ,EAAE;QACR,GAAG,kBAAkB,CAAC,QAAQ;QAC9B,IAAI,EAAE,cAAc;KACrB;IACD,IAAI,EAAE;QACJ,GAAG,kBAAkB,CAAC,IAAI;QAC1B,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,eAAe;wBACvB,QAAQ,EAAE,cAAc;qBACzB;iBACF;aACF;YACD;gBACE,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,kBAAkB;wBAC1B,QAAQ,EAAE,QAAQ;qBACnB;oBACD;wBACE,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,kBAAkB;wBAC1B,QAAQ,EAAE,IAAI;qBACf;iBACF;aACF;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,WAAW;wBACnB,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,WAAW;wBACnB,QAAQ,EAAE,QAAQ;qBACnB;iBACF;aACF;SACF;KACK;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAQ;IACvC,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,eAAe;QACrB,kBAAkB;KACnB;IACD,IAAI,EAAE;QACJ,eAAe;QACf,GAAG,EAAE;YACH,QAAQ,EAAE,QAAQ;YAClB,gBAAgB;SACjB;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAc;IAC9C,GAAG,kBAAkB;IACrB,QAAQ,EAAE;QACR,GAAG,kBAAkB,CAAC,QAAQ;QAC9B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,mCAAmC;KACjD;IACD,IAAI,EAAE;QACJ,GAAG,kBAAkB,CAAC,IAAI;QAC1B,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,cAAc;gBAC3B,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,YAAY;wBACzB,QAAQ,EAAE,IAAI;qBACf;iBACF;gBACD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,gBAAgB;qBAC9B;iBACF;aACF;SACF;QACD,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,oBAAoB;gBACxB,IAAI,EAAE,6BAA6B;gBACnC,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,mBAAmB;wBAC3B,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,mBAAmB;wBAC3B,QAAQ,EAAE,QAAQ;qBACnB;iBACF;aACF;SACF;KACK;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE;QACP;YACE,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,yBAAyB;aACnC;SACF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAe;QACrB,MAAM,EAAE,QAAiB;QACzB,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAe;QACrB,MAAM,EAAE,QAAiB;QACzB,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,aAAsB;QAC5B,MAAM,EAAE,QAAiB;QACzB,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,kBAAkB;KAC5B;CACF,CAAC"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@bluefly/openstandardagents",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "exports": {
5
- "./schema": "./spec/v0.3.0/ossa-0.3.0.schema.json",
5
+ "./schema": "./spec/v0.3.1/ossa-0.3.1.schema.json",
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
8
8
  "import": "./dist/index.js",
@@ -75,17 +75,13 @@
75
75
  "scripts": {
76
76
  "// ──────────────────────────────────────────────────────────────": "",
77
77
  "// BUILD & DEVELOPMENT": "",
78
- "// ──────────────────────────────────────────────────────────────": "",
79
78
  "prebuild": "npm run docs:process",
80
79
  "build": "tsc && npm run build:assets",
81
80
  "build:assets": "cp -r spec dist/",
82
81
  "build:clean": "npm run clean && npm run build",
83
82
  "dev": "tsc --watch",
84
83
  "clean": "rm -rf dist coverage .tsbuildinfo",
85
-
86
- "// ──────────────────────────────────────────────────────────────": "",
87
84
  "// TESTING": "",
88
- "// ──────────────────────────────────────────────────────────────": "",
89
85
  "test": "jest",
90
86
  "test:unit": "jest tests/unit",
91
87
  "test:integration": "jest tests/integration",
@@ -93,10 +89,7 @@
93
89
  "test:coverage": "jest --coverage",
94
90
  "test:watch": "jest --watch",
95
91
  "test:ci": "jest --ci --coverage --reporters=default --reporters=jest-junit",
96
-
97
- "// ──────────────────────────────────────────────────────────────": "",
98
92
  "// CODE QUALITY": "",
99
- "// ──────────────────────────────────────────────────────────────": "",
100
93
  "typecheck": "tsc --noEmit",
101
94
  "lint": "eslint src tests --ext .ts",
102
95
  "lint:fix": "eslint src tests --ext .ts --fix",
@@ -104,56 +97,35 @@
104
97
  "format:check": "prettier --check 'src/**/*.ts' 'tests/**/*.ts'",
105
98
  "quality": "npm run typecheck && npm run lint && npm run format:check",
106
99
  "quality:fix": "npm run lint:fix && npm run format",
107
-
108
- "// ──────────────────────────────────────────────────────────────": "",
109
100
  "// VALIDATION": "",
110
- "// ──────────────────────────────────────────────────────────────": "",
111
101
  "validate": "npm run validate:schema && npm run validate:examples",
112
102
  "validate:schema": "tsx scripts/validate-schema.ts",
113
103
  "validate:examples": "find examples -name '*.yaml' -o -name '*.yml' | xargs -I {} sh -c 'yq eval . {} > /dev/null || exit 1'",
114
104
  "validate:all": "node scripts/validate-all.js",
115
105
  "validate:power": "tsx bin/validate-ossa.ts",
116
-
117
- "// ──────────────────────────────────────────────────────────────": "",
118
106
  "// VERSION MANAGEMENT (via ossa CLI - single source of truth)": "",
119
- "// ──────────────────────────────────────────────────────────────": "",
120
107
  "version:status": "node dist/cli/index.js release version status",
121
108
  "version:bump": "node dist/cli/index.js release version bump",
122
109
  "version:sync": "node dist/cli/index.js release version sync",
123
110
  "version:check": "node dist/cli/index.js release version check",
124
111
  "version:examples": "node dist/cli/index.js release version examples",
125
-
126
- "// ──────────────────────────────────────────────────────────────": "",
127
112
  "// DOCUMENTATION": "",
128
- "// ──────────────────────────────────────────────────────────────": "",
129
113
  "docs:process": "tsx scripts/process-doc-templates.ts",
130
114
  "docs:check": "test -f README.md && test -f CHANGELOG.md",
131
115
  "docs:generate": "tsx scripts/generate-api-docs.ts && tsx scripts/generate-cli-docs.ts && tsx scripts/generate-schema-docs.ts && tsx scripts/generate-examples-docs.ts && tsx scripts/generate-agents-catalog.ts && tsx scripts/generate-types-docs.ts && tsx scripts/generate-errors-docs.ts && tsx scripts/generate-config-docs.ts && tsx scripts/lowercase-docs.ts",
132
-
133
- "// ──────────────────────────────────────────────────────────────": "",
134
116
  "// CODE GENERATION": "",
135
- "// ──────────────────────────────────────────────────────────────": "",
136
117
  "gen:types": "tsx scripts/gen-types.ts",
137
118
  "gen:zod": "tsx scripts/gen-zod.ts",
138
119
  "gen:all": "npm run gen:types && npm run gen:zod",
139
-
140
- "// ──────────────────────────────────────────────────────────────": "",
141
120
  "// SYNC & COMPLIANCE": "",
142
- "// ──────────────────────────────────────────────────────────────": "",
143
121
  "sync:pr": "tsx src/cli/commands/github-sync.command.ts pr",
144
122
  "sync:batch": "tsx src/cli/commands/github-sync.command.ts batch",
145
123
  "sync:list": "tsx src/cli/commands/github-sync.command.ts list",
146
124
  "compliance:audit": "tsx scripts/compliance-audit.ts",
147
-
148
- "// ──────────────────────────────────────────────────────────────": "",
149
125
  "// MAINTENANCE": "",
150
- "// ──────────────────────────────────────────────────────────────": "",
151
126
  "fix:schemas": "node scripts/fix-schema-formats.js",
152
127
  "prepare": "husky install || true",
153
-
154
- "// ──────────────────────────────────────────────────────────────": "",
155
128
  "// RELEASE & PUBLISH": "",
156
- "// ──────────────────────────────────────────────────────────────": "",
157
129
  "prerelease": "npm run quality && npm run test && npm run validate",
158
130
  "prepublishOnly": "npm run build:clean && npm run test && npm run lint",
159
131
  "release:check": "npm run prerelease && echo '✅ Ready for release'"
@@ -218,7 +190,7 @@
218
190
  "semantic-release": "^25.0.1",
219
191
  "ts-jest": "^29.4.4",
220
192
  "ts-node": "^10.9.2",
221
- "tsx": "^4.20.6",
193
+ "tsx": "^4.21.0",
222
194
  "typescript": "^5.9.3"
223
195
  }
224
196
  }
@@ -0,0 +1,120 @@
1
+ # OSSA v0.3.1 - Unified Agent Schema
2
+
3
+ ## The Rocketship 🚀
4
+
5
+ This schema unifies OSSA, GitLab Duo, Google A2A, and MCP into a single universal agent platform.
6
+
7
+ ### What Changed
8
+
9
+ **Before (v0.2.x):**
10
+ ```yaml
11
+ llm:
12
+ provider: anthropic
13
+ model: claude-sonnet-4-20250514
14
+ ```
15
+
16
+ **After (v0.3.1):**
17
+ ```yaml
18
+ llm:
19
+ provider: ${LLM_PROVIDER:-anthropic}
20
+ model: ${LLM_MODEL:-claude-sonnet}
21
+ profile: ${LLM_PROFILE:-balanced}
22
+ fallback_models:
23
+ - provider: ${LLM_FALLBACK_PROVIDER_1:-openai}
24
+ model: ${LLM_FALLBACK_MODEL_1:-gpt-4o}
25
+ ```
26
+
27
+ ### Key Features
28
+
29
+ 1. **Zero Hardcoded Models** - All LLM config is runtime-configurable
30
+ 2. **Execution Profiles** - Google A2A compatible (fast/balanced/deep/safe)
31
+ 3. **Multi-Runtime Support** - Works with Duo, A2A, OSSA, MCP
32
+ 4. **Fallback Models** - Multi-provider resilience
33
+ 5. **Structured Functions** - A2A/OpenAI function calling format
34
+ 6. **Extensions** - Pluggable external behaviors
35
+
36
+ ### Compatibility Matrix
37
+
38
+ | Feature | OSSA v0.2.x | Duo | A2A | v0.3.1 |
39
+ |---------|-------------|-----|-----|--------|
40
+ | Runtime-configurable models | ❌ | ❌ | ✅ | ✅ |
41
+ | Execution profiles | ❌ | ❌ | ✅ | ✅ |
42
+ | Multi-provider fallback | partial | ❌ | ✅ | ✅ |
43
+ | Structured functions | ❌ | partial | ✅ | ✅ |
44
+ | Extensions | partial | partial | ✅ | ✅ |
45
+
46
+ ### Migration
47
+
48
+ ```bash
49
+ # Auto-migrate all agents
50
+ ./scripts/migrate-to-unified-llm.sh
51
+
52
+ # Generate new agent
53
+ ./scripts/generate-agent.sh my-agent worker
54
+
55
+ # Validate
56
+ ossa validate examples/
57
+ ```
58
+
59
+ ### Environment Variables
60
+
61
+ ```bash
62
+ # Primary LLM
63
+ export LLM_PROVIDER=anthropic
64
+ export LLM_MODEL=claude-sonnet-4
65
+ export LLM_PROFILE=balanced
66
+
67
+ # Fallbacks
68
+ export LLM_FALLBACK_PROVIDER_1=openai
69
+ export LLM_FALLBACK_MODEL_1=gpt-4o
70
+
71
+ # Runtime
72
+ export AGENT_RUNTIME=unified
73
+ export AGENT_SCHEDULING=fair
74
+ export AGENT_PRIORITY=normal
75
+ ```
76
+
77
+ ### Execution Profiles
78
+
79
+ - **fast** - Quick responses (4K tokens, temp=0.0)
80
+ - **balanced** - General ops (16K tokens, temp=0.1)
81
+ - **deep** - Analysis (32K tokens, temp=0.2, reasoning enabled)
82
+ - **safe** - Compliance (temp=0.0, validation required)
83
+
84
+ ### CI Enforcement
85
+
86
+ Add to `.gitlab-ci.yml`:
87
+
88
+ ```yaml
89
+ include:
90
+ - local: .gitlab/ci/validate-no-hardcoded-models.yml
91
+ ```
92
+
93
+ This blocks any MR with hardcoded model names.
94
+
95
+ ### Example Agent
96
+
97
+ See: `examples/unified/security-scanner.ossa.yaml`
98
+
99
+ ### Schema Files
100
+
101
+ - `schemas/unified-llm.yaml` - LLM configuration
102
+ - `schemas/runtime.yaml` - Runtime declaration
103
+ - `schemas/capabilities.yaml` - Capability definitions
104
+ - `schemas/functions.yaml` - Function declarations
105
+ - `schemas/agent-unified.yaml` - Complete agent schema
106
+
107
+ ### Why This Matters
108
+
109
+ 1. **No More Breaking Changes** - Model updates don't require code changes
110
+ 2. **Multi-Provider** - Switch between Anthropic/OpenAI/Google/Groq instantly
111
+ 3. **Future-Proof** - New runtimes (A2A, Duo) work without modification
112
+ 4. **Cost Optimization** - Use cheap models for triage, expensive for analysis
113
+ 5. **Compliance** - Audit trail of which models were used when
114
+
115
+ ### Next Steps
116
+
117
+ 1. Run migration: `./scripts/migrate-to-unified-llm.sh`
118
+ 2. Update CI: Add validation rule
119
+ 3. Test: `ossa validate examples/`
120
+ 4. Deploy: Agents auto-detect runtime