@bluefly/openstandardagents 0.2.8 → 0.2.9
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.
- package/.env.example +1 -1
- package/.github/AGENTS.md +245 -0
- package/.github/agents/github-issue-triage.ossa.yaml +99 -0
- package/.github/agents/github-pr-triage.ossa.yaml +137 -0
- package/.github/workflows/issue-sync-to-gitlab.yml +138 -0
- package/.github/workflows/pr-triage-to-gitlab.yml +164 -0
- package/.version.json +1 -1
- package/.wiki-config.json +1 -1
- package/CHANGELOG.md +33 -0
- package/CONTRIBUTING.md +102 -3
- package/README.md +17 -10
- package/dist/services/release-automation/schemas/release.schema.js +1 -1
- package/dist/services/release-automation/webhook.service.js +3 -3
- package/dist/services/release-automation/webhook.service.js.map +1 -1
- package/dist/services/runtime/claude/claude-adapter.d.ts +1 -1
- package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -1
- package/dist/services/runtime/claude/claude-adapter.js +1 -1
- package/dist/services/runtime/claude/claude-adapter.js.map +1 -1
- package/dist/spec/v0.2.9/a2a-protocol.md +1337 -0
- package/dist/spec/v0.2.9/agent.md +1946 -0
- package/dist/spec/v0.2.9/capabilities/index.yaml +25 -0
- package/dist/spec/v0.2.9/capabilities/memory.yaml +251 -0
- package/dist/spec/v0.2.9/capability-schema.md +576 -0
- package/dist/spec/v0.2.9/compliance-profiles.md +533 -0
- package/dist/spec/v0.2.9/conformance-testing.md +1527 -0
- package/dist/spec/v0.2.9/gitlab-duo-integration.md +621 -0
- package/dist/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
- package/dist/spec/v0.2.9/runtime-semantics.md +464 -0
- package/dist/spec/v0.2.9/security-model.md +1245 -0
- package/dist/spec/v0.2.9/semantic-conventions.md +347 -0
- package/dist/spec/v0.2.9/types.ts +522 -0
- package/dist/types/policy.d.ts +377 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +84 -0
- package/dist/types/policy.js.map +1 -0
- package/dist/utils/version.js +1 -1
- package/docs/specs/policy-dsl.md +925 -0
- package/examples/adk-integration/code-review-workflow.yml +1 -1
- package/examples/adk-integration/customer-support.yml +1 -1
- package/examples/adk-integration/data-pipeline.yml +1 -1
- package/examples/advanced/reasoning-agent.yaml +136 -0
- package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
- package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
- package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
- package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
- package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
- package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
- package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
- package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
- package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
- package/examples/agents-md/code-agent.ossa.json +100 -0
- package/examples/agents-md/monorepo-agent.ossa.yaml +180 -0
- package/examples/anthropic/claude-assistant.ossa.json +1 -1
- package/examples/autogen/multi-agent.ossa.json +1 -1
- package/examples/claude-code/code-reviewer.ossa.yaml +1 -1
- package/examples/claude-code/ossa-validator.ossa.yaml +2 -2
- package/examples/common_npm/agent-router.ossa.yaml +1 -1
- package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +1 -1
- package/examples/crewai/research-team.ossa.json +1 -1
- package/examples/cursor/code-review-agent.ossa.json +1 -1
- package/examples/drupal/gitlab-ml-recommender.ossa.yaml +1 -1
- package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +1 -1
- package/examples/extensions/agents-md-v1.yml +175 -0
- package/examples/extensions/drupal-v1.yml +1 -1
- package/examples/extensions/kagent-v1.yml +1 -1
- package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
- package/examples/kagent/compliance-validator.ossa.yaml +1 -1
- package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
- package/examples/kagent/documentation-agent.ossa.yaml +1 -1
- package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +1 -1
- package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +1 -1
- package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
- package/examples/kagent/security-scanner.ossa.yaml +1 -1
- package/examples/langchain/chain-agent.ossa.json +1 -1
- package/examples/langflow/workflow-agent.ossa.json +1 -1
- package/examples/langgraph/state-machine-agent.ossa.json +1 -1
- package/examples/llamaindex/rag-agent.ossa.json +1 -1
- package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
- package/examples/multi-agent/conditional-router.ossa.yaml +1 -1
- package/examples/multi-agent/parallel-execution.ossa.yaml +1 -1
- package/examples/multi-agent/sequential-pipeline.ossa.yaml +1 -1
- package/examples/openai/basic-agent.ossa.yaml +1 -1
- package/examples/openai/multi-tool-agent.ossa.json +1 -1
- package/examples/openai/swarm-agent.ossa.json +1 -1
- package/examples/production/document-analyzer-openai.yml +1 -1
- package/examples/quickstart/support-agent.ossa.yaml +1 -1
- package/examples/templates/ossa-compliance.yaml +1 -1
- package/examples/vercel/edge-agent.ossa.json +1 -1
- package/llms.txt +1 -1
- package/package.json +5 -3
- package/scripts/README.md +25 -0
- package/scripts/compliance-audit.ts +796 -0
- package/scripts/generate-agents-catalog.ts +2 -1
- package/scripts/generate-api-docs.ts +2 -1
- package/scripts/generate-examples-docs.ts +2 -1
- package/scripts/generate-llms-ctx.sh +2 -2
- package/spec/v0.2.9/a2a-protocol.md +1337 -0
- package/spec/v0.2.9/agent.md +1946 -0
- package/spec/v0.2.9/capabilities/index.yaml +25 -0
- package/spec/v0.2.9/capabilities/memory.yaml +251 -0
- package/spec/v0.2.9/capability-schema.md +576 -0
- package/spec/v0.2.9/compliance-profiles.md +533 -0
- package/spec/v0.2.9/conformance-testing.md +1527 -0
- package/spec/v0.2.9/gitlab-duo-integration.md +621 -0
- package/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
- package/spec/v0.2.9/runtime-semantics.md +464 -0
- package/spec/v0.2.9/security-model.md +1245 -0
- package/spec/v0.2.9/semantic-conventions.md +347 -0
- package/spec/v0.2.9/types.ts +522 -0
- package/test-results/junit.xml +184 -146
- package/.github/workflows/pr-comment.yml +0 -33
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
# OSSA Capability Schema Specification v0.2.9
|
|
2
|
+
|
|
3
|
+
This specification defines the capability abstraction layer for OSSA agents, enabling interoperability across different tool implementations and transport mechanisms.
|
|
4
|
+
|
|
5
|
+
## 1. Overview
|
|
6
|
+
|
|
7
|
+
Capabilities are the fundamental unit of functionality in OSSA. They provide an abstract interface between agents and concrete tool implementations, enabling:
|
|
8
|
+
|
|
9
|
+
- **Portability**: Same capability, different implementations
|
|
10
|
+
- **Discovery**: Agents can advertise and discover capabilities
|
|
11
|
+
- **Versioning**: Semantic versioning for capability contracts
|
|
12
|
+
- **Negotiation**: Agents can negotiate capability versions
|
|
13
|
+
|
|
14
|
+
## 2. Capability URI Scheme
|
|
15
|
+
|
|
16
|
+
### 2.1 Format
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
ossa:<domain>/<capability>@<version>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 2.2 Components
|
|
23
|
+
|
|
24
|
+
| Component | Description | Pattern |
|
|
25
|
+
|-----------|-------------|---------|
|
|
26
|
+
| `ossa:` | URI scheme prefix | Fixed |
|
|
27
|
+
| `domain` | Functional domain | `[a-z][a-z0-9-]*` |
|
|
28
|
+
| `capability` | Capability name | `[a-z][a-z0-9_]*` |
|
|
29
|
+
| `version` | Semver version | `MAJOR.MINOR` |
|
|
30
|
+
|
|
31
|
+
### 2.3 Examples
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
# Standard OSSA capabilities
|
|
35
|
+
- ossa:security/scan_vulnerabilities@1.0
|
|
36
|
+
- ossa:security/apply_patches@1.0
|
|
37
|
+
- ossa:code/lint@2.0
|
|
38
|
+
- ossa:code/test@1.0
|
|
39
|
+
- ossa:content/publish@1.0
|
|
40
|
+
- ossa:a2a/send@1.0
|
|
41
|
+
|
|
42
|
+
# External capabilities (MCP tools)
|
|
43
|
+
- mcp:filesystem/read_file@1.0
|
|
44
|
+
- mcp:gitlab/create_issue@1.0
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 3. Capability Definition Schema
|
|
48
|
+
|
|
49
|
+
### 3.1 Full Schema
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
capability:
|
|
53
|
+
# Identity
|
|
54
|
+
uri: "ossa:security/scan_vulnerabilities@1.0"
|
|
55
|
+
name: "scan_vulnerabilities"
|
|
56
|
+
domain: "security"
|
|
57
|
+
version: "1.0.0"
|
|
58
|
+
|
|
59
|
+
# Documentation
|
|
60
|
+
description: "Scan codebase for security vulnerabilities"
|
|
61
|
+
documentation_url: "https://ossa.dev/capabilities/security/scan_vulnerabilities"
|
|
62
|
+
|
|
63
|
+
# Stability
|
|
64
|
+
stability: "stable" # experimental | beta | stable | deprecated
|
|
65
|
+
deprecated_by: null # URI of replacement capability if deprecated
|
|
66
|
+
sunset_date: null # ISO8601 date when capability will be removed
|
|
67
|
+
|
|
68
|
+
# Contract
|
|
69
|
+
input:
|
|
70
|
+
type: object
|
|
71
|
+
required:
|
|
72
|
+
- target
|
|
73
|
+
properties:
|
|
74
|
+
target:
|
|
75
|
+
type: string
|
|
76
|
+
description: "Path or URL to scan"
|
|
77
|
+
severity_threshold:
|
|
78
|
+
type: string
|
|
79
|
+
enum: [low, medium, high, critical]
|
|
80
|
+
default: medium
|
|
81
|
+
scanners:
|
|
82
|
+
type: array
|
|
83
|
+
items:
|
|
84
|
+
type: string
|
|
85
|
+
enum: [sast, dast, sca, secrets, container]
|
|
86
|
+
default: [sast, sca, secrets]
|
|
87
|
+
|
|
88
|
+
output:
|
|
89
|
+
type: object
|
|
90
|
+
properties:
|
|
91
|
+
vulnerabilities:
|
|
92
|
+
type: array
|
|
93
|
+
items:
|
|
94
|
+
$ref: "#/definitions/Vulnerability"
|
|
95
|
+
summary:
|
|
96
|
+
type: object
|
|
97
|
+
properties:
|
|
98
|
+
total: { type: integer }
|
|
99
|
+
critical: { type: integer }
|
|
100
|
+
high: { type: integer }
|
|
101
|
+
medium: { type: integer }
|
|
102
|
+
low: { type: integer }
|
|
103
|
+
scan_duration_ms:
|
|
104
|
+
type: integer
|
|
105
|
+
|
|
106
|
+
# Error definitions
|
|
107
|
+
errors:
|
|
108
|
+
- code: "SCAN_FAILED"
|
|
109
|
+
description: "Scanner failed to execute"
|
|
110
|
+
retryable: true
|
|
111
|
+
- code: "TARGET_NOT_FOUND"
|
|
112
|
+
description: "Scan target does not exist"
|
|
113
|
+
retryable: false
|
|
114
|
+
- code: "SCANNER_UNAVAILABLE"
|
|
115
|
+
description: "Requested scanner is not available"
|
|
116
|
+
retryable: true
|
|
117
|
+
- code: "TIMEOUT"
|
|
118
|
+
description: "Scan exceeded time limit"
|
|
119
|
+
retryable: true
|
|
120
|
+
|
|
121
|
+
# Bindings to concrete implementations
|
|
122
|
+
bindings:
|
|
123
|
+
mcp:
|
|
124
|
+
server: "security-scanner"
|
|
125
|
+
tool: "scan"
|
|
126
|
+
mapping:
|
|
127
|
+
target: "path"
|
|
128
|
+
severity_threshold: "min_severity"
|
|
129
|
+
cli:
|
|
130
|
+
command: "trivy fs {target} --severity {severity_threshold}"
|
|
131
|
+
parser: "json"
|
|
132
|
+
http:
|
|
133
|
+
method: POST
|
|
134
|
+
url: "https://api.scanner.example/v1/scan"
|
|
135
|
+
headers:
|
|
136
|
+
Content-Type: "application/json"
|
|
137
|
+
body_template: |
|
|
138
|
+
{
|
|
139
|
+
"target": "{target}",
|
|
140
|
+
"severity": "{severity_threshold}"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 3.2 TypeScript Interface
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
interface CapabilityDefinition {
|
|
148
|
+
// Identity
|
|
149
|
+
uri: CapabilityURI;
|
|
150
|
+
name: string;
|
|
151
|
+
domain: CapabilityDomain;
|
|
152
|
+
version: SemanticVersion;
|
|
153
|
+
|
|
154
|
+
// Documentation
|
|
155
|
+
description: string;
|
|
156
|
+
documentation_url?: string;
|
|
157
|
+
|
|
158
|
+
// Stability
|
|
159
|
+
stability: 'experimental' | 'beta' | 'stable' | 'deprecated';
|
|
160
|
+
deprecated_by?: CapabilityURI;
|
|
161
|
+
sunset_date?: string; // ISO8601
|
|
162
|
+
|
|
163
|
+
// Contract
|
|
164
|
+
input: JSONSchema;
|
|
165
|
+
output: JSONSchema;
|
|
166
|
+
errors: ErrorDefinition[];
|
|
167
|
+
|
|
168
|
+
// Bindings
|
|
169
|
+
bindings: {
|
|
170
|
+
mcp?: MCPBinding;
|
|
171
|
+
cli?: CLIBinding;
|
|
172
|
+
http?: HTTPBinding;
|
|
173
|
+
grpc?: GRPCBinding;
|
|
174
|
+
delegation?: DelegationBinding;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
interface ErrorDefinition {
|
|
179
|
+
code: string;
|
|
180
|
+
description: string;
|
|
181
|
+
retryable: boolean;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
interface MCPBinding {
|
|
185
|
+
server: string;
|
|
186
|
+
tool: string;
|
|
187
|
+
mapping?: Record<string, string>;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
interface CLIBinding {
|
|
191
|
+
command: string;
|
|
192
|
+
parser: 'json' | 'text' | 'yaml';
|
|
193
|
+
env?: Record<string, string>;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
interface HTTPBinding {
|
|
197
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
198
|
+
url: string;
|
|
199
|
+
headers?: Record<string, string>;
|
|
200
|
+
body_template?: string;
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## 4. Standard Capability Domains
|
|
205
|
+
|
|
206
|
+
### 4.1 Security Domain (`ossa:security/*`)
|
|
207
|
+
|
|
208
|
+
| Capability | Version | Description |
|
|
209
|
+
|------------|---------|-------------|
|
|
210
|
+
| `scan_vulnerabilities` | 1.0 | Scan for security vulnerabilities |
|
|
211
|
+
| `apply_patches` | 1.0 | Apply security patches |
|
|
212
|
+
| `generate_sbom` | 1.0 | Generate Software Bill of Materials |
|
|
213
|
+
| `block_merge` | 1.0 | Block merge requests for security issues |
|
|
214
|
+
| `rotate_secrets` | 1.0 | Rotate secrets and credentials |
|
|
215
|
+
| `audit_access` | 1.0 | Audit access logs |
|
|
216
|
+
|
|
217
|
+
### 4.2 Content Domain (`ossa:content/*`)
|
|
218
|
+
|
|
219
|
+
| Capability | Version | Description |
|
|
220
|
+
|------------|---------|-------------|
|
|
221
|
+
| `publish` | 1.0 | Publish content to destination |
|
|
222
|
+
| `draft` | 1.0 | Create draft content |
|
|
223
|
+
| `review` | 1.0 | Review content for quality |
|
|
224
|
+
| `translate` | 1.0 | Translate content to target language |
|
|
225
|
+
| `summarize` | 1.0 | Summarize content |
|
|
226
|
+
| `extract` | 1.0 | Extract structured data from content |
|
|
227
|
+
|
|
228
|
+
### 4.3 Code Domain (`ossa:code/*`)
|
|
229
|
+
|
|
230
|
+
| Capability | Version | Description |
|
|
231
|
+
|------------|---------|-------------|
|
|
232
|
+
| `lint` | 1.0 | Run linting checks |
|
|
233
|
+
| `format` | 1.0 | Format code |
|
|
234
|
+
| `test` | 1.0 | Run test suite |
|
|
235
|
+
| `build` | 1.0 | Build project |
|
|
236
|
+
| `deploy` | 1.0 | Deploy to environment |
|
|
237
|
+
| `refactor` | 1.0 | Refactor code |
|
|
238
|
+
| `generate` | 1.0 | Generate code |
|
|
239
|
+
|
|
240
|
+
### 4.4 A2A Domain (`ossa:a2a/*`)
|
|
241
|
+
|
|
242
|
+
| Capability | Version | Description |
|
|
243
|
+
|------------|---------|-------------|
|
|
244
|
+
| `send` | 1.0 | Send message to agent |
|
|
245
|
+
| `broadcast` | 1.0 | Broadcast to agent group |
|
|
246
|
+
| `discover` | 1.0 | Discover available agents |
|
|
247
|
+
| `negotiate` | 1.0 | Negotiate capability versions |
|
|
248
|
+
| `delegate` | 1.0 | Delegate task to another agent |
|
|
249
|
+
| `escalate` | 1.0 | Escalate to human or supervisor |
|
|
250
|
+
|
|
251
|
+
### 4.5 State Domain (`ossa:state/*`)
|
|
252
|
+
|
|
253
|
+
| Capability | Version | Description |
|
|
254
|
+
|------------|---------|-------------|
|
|
255
|
+
| `read` | 1.0 | Read state value |
|
|
256
|
+
| `write` | 1.0 | Write state value |
|
|
257
|
+
| `checkpoint` | 1.0 | Create state checkpoint |
|
|
258
|
+
| `rollback` | 1.0 | Rollback to checkpoint |
|
|
259
|
+
| `list` | 1.0 | List state keys |
|
|
260
|
+
| `delete` | 1.0 | Delete state value |
|
|
261
|
+
|
|
262
|
+
### 4.6 Observability Domain (`ossa:observability/*`)
|
|
263
|
+
|
|
264
|
+
| Capability | Version | Description |
|
|
265
|
+
|------------|---------|-------------|
|
|
266
|
+
| `trace` | 1.0 | Create trace span |
|
|
267
|
+
| `metric` | 1.0 | Record metric |
|
|
268
|
+
| `log` | 1.0 | Write log entry |
|
|
269
|
+
| `alert` | 1.0 | Send alert |
|
|
270
|
+
| `dashboard` | 1.0 | Update dashboard |
|
|
271
|
+
|
|
272
|
+
## 5. Capability Registry
|
|
273
|
+
|
|
274
|
+
### 5.1 Registry Format
|
|
275
|
+
|
|
276
|
+
```yaml
|
|
277
|
+
registry:
|
|
278
|
+
version: "1.0"
|
|
279
|
+
updated_at: "2025-01-15T00:00:00Z"
|
|
280
|
+
|
|
281
|
+
domains:
|
|
282
|
+
- name: security
|
|
283
|
+
description: "Security scanning and remediation"
|
|
284
|
+
maintainer: "security@ossa.dev"
|
|
285
|
+
|
|
286
|
+
- name: code
|
|
287
|
+
description: "Code quality and deployment"
|
|
288
|
+
maintainer: "code@ossa.dev"
|
|
289
|
+
|
|
290
|
+
capabilities:
|
|
291
|
+
- uri: "ossa:security/scan_vulnerabilities@1.0"
|
|
292
|
+
stability: stable
|
|
293
|
+
added_in: "0.2.0"
|
|
294
|
+
|
|
295
|
+
- uri: "ossa:security/scan_vulnerabilities@0.9"
|
|
296
|
+
stability: deprecated
|
|
297
|
+
deprecated_by: "ossa:security/scan_vulnerabilities@1.0"
|
|
298
|
+
sunset_date: "2025-06-01"
|
|
299
|
+
|
|
300
|
+
- uri: "ossa:code/lint@2.0"
|
|
301
|
+
stability: stable
|
|
302
|
+
added_in: "0.2.5"
|
|
303
|
+
breaking_changes:
|
|
304
|
+
- "Changed output format from flat to nested"
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### 5.2 Registry API
|
|
308
|
+
|
|
309
|
+
```yaml
|
|
310
|
+
# GET /registry/capabilities
|
|
311
|
+
# Returns all registered capabilities
|
|
312
|
+
|
|
313
|
+
# GET /registry/capabilities/{domain}
|
|
314
|
+
# Returns capabilities in a domain
|
|
315
|
+
|
|
316
|
+
# GET /registry/capabilities/{domain}/{name}
|
|
317
|
+
# Returns specific capability (all versions)
|
|
318
|
+
|
|
319
|
+
# GET /registry/capabilities/{domain}/{name}@{version}
|
|
320
|
+
# Returns specific capability version
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## 6. Versioning Rules
|
|
324
|
+
|
|
325
|
+
### 6.1 Semantic Versioning
|
|
326
|
+
|
|
327
|
+
Capabilities follow semantic versioning:
|
|
328
|
+
|
|
329
|
+
- **MAJOR**: Breaking changes to input/output schema
|
|
330
|
+
- **MINOR**: New optional fields, additive changes
|
|
331
|
+
- **PATCH**: Documentation, bug fixes (not in URI)
|
|
332
|
+
|
|
333
|
+
### 6.2 Breaking Changes
|
|
334
|
+
|
|
335
|
+
The following are considered breaking changes (require MAJOR bump):
|
|
336
|
+
|
|
337
|
+
- Removing required input field
|
|
338
|
+
- Adding new required input field
|
|
339
|
+
- Changing type of existing field
|
|
340
|
+
- Removing output field
|
|
341
|
+
- Changing error codes
|
|
342
|
+
|
|
343
|
+
### 6.3 Non-Breaking Changes
|
|
344
|
+
|
|
345
|
+
The following are non-breaking (MINOR bump):
|
|
346
|
+
|
|
347
|
+
- Adding optional input field with default
|
|
348
|
+
- Adding output field
|
|
349
|
+
- Adding new error code
|
|
350
|
+
- Changing description
|
|
351
|
+
- Adding new binding type
|
|
352
|
+
|
|
353
|
+
## 7. Version Negotiation
|
|
354
|
+
|
|
355
|
+
### 7.1 Negotiation Protocol
|
|
356
|
+
|
|
357
|
+
```yaml
|
|
358
|
+
# Agent A requests capability from Agent B
|
|
359
|
+
request:
|
|
360
|
+
type: "capability_request"
|
|
361
|
+
capability: "ossa:security/scan_vulnerabilities"
|
|
362
|
+
preferred_versions: ["1.0", "0.9"]
|
|
363
|
+
minimum_version: "0.9"
|
|
364
|
+
|
|
365
|
+
# Agent B responds with available version
|
|
366
|
+
response:
|
|
367
|
+
type: "capability_response"
|
|
368
|
+
capability: "ossa:security/scan_vulnerabilities@1.0"
|
|
369
|
+
status: "available"
|
|
370
|
+
|
|
371
|
+
# Or if not available
|
|
372
|
+
response:
|
|
373
|
+
type: "capability_response"
|
|
374
|
+
capability: "ossa:security/scan_vulnerabilities"
|
|
375
|
+
status: "unavailable"
|
|
376
|
+
reason: "No compatible version available"
|
|
377
|
+
available_versions: ["2.0"]
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### 7.2 Compatibility Rules
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
function isCompatible(
|
|
384
|
+
requested: CapabilityURI,
|
|
385
|
+
available: CapabilityURI
|
|
386
|
+
): boolean {
|
|
387
|
+
// Same domain and name required
|
|
388
|
+
if (requested.domain !== available.domain) return false;
|
|
389
|
+
if (requested.name !== available.name) return false;
|
|
390
|
+
|
|
391
|
+
// Major version must match
|
|
392
|
+
if (requested.major !== available.major) return false;
|
|
393
|
+
|
|
394
|
+
// Available minor must be >= requested
|
|
395
|
+
return available.minor >= requested.minor;
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
## 8. Deprecation Policy
|
|
400
|
+
|
|
401
|
+
### 8.1 Deprecation Timeline
|
|
402
|
+
|
|
403
|
+
1. **Announcement**: Capability marked as `deprecated`
|
|
404
|
+
2. **Grace Period**: 2 minor versions or 6 months (whichever is longer)
|
|
405
|
+
3. **Sunset**: Capability removed from registry
|
|
406
|
+
|
|
407
|
+
### 8.2 Deprecation Notice
|
|
408
|
+
|
|
409
|
+
```yaml
|
|
410
|
+
capability:
|
|
411
|
+
uri: "ossa:security/scan@0.9"
|
|
412
|
+
stability: deprecated
|
|
413
|
+
deprecated_by: "ossa:security/scan_vulnerabilities@1.0"
|
|
414
|
+
sunset_date: "2025-06-01"
|
|
415
|
+
migration_guide: |
|
|
416
|
+
The `scan` capability has been renamed to `scan_vulnerabilities`.
|
|
417
|
+
|
|
418
|
+
Changes:
|
|
419
|
+
- Input field `path` renamed to `target`
|
|
420
|
+
- Output now includes `scan_duration_ms`
|
|
421
|
+
|
|
422
|
+
Migration:
|
|
423
|
+
1. Update capability URI in manifest
|
|
424
|
+
2. Update input field names
|
|
425
|
+
3. Handle new output field
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
## 9. MCP Tool Bindings
|
|
429
|
+
|
|
430
|
+
### 9.1 Binding Specification
|
|
431
|
+
|
|
432
|
+
```yaml
|
|
433
|
+
bindings:
|
|
434
|
+
mcp:
|
|
435
|
+
# MCP server name
|
|
436
|
+
server: "security-scanner"
|
|
437
|
+
|
|
438
|
+
# Tool name within server
|
|
439
|
+
tool: "scan"
|
|
440
|
+
|
|
441
|
+
# Input mapping (OSSA field -> MCP field)
|
|
442
|
+
mapping:
|
|
443
|
+
target: "path"
|
|
444
|
+
severity_threshold: "min_severity"
|
|
445
|
+
scanners: "scanner_types"
|
|
446
|
+
|
|
447
|
+
# Output mapping (MCP field -> OSSA field)
|
|
448
|
+
output_mapping:
|
|
449
|
+
findings: "vulnerabilities"
|
|
450
|
+
elapsed: "scan_duration_ms"
|
|
451
|
+
|
|
452
|
+
# Error mapping (MCP error -> OSSA error)
|
|
453
|
+
error_mapping:
|
|
454
|
+
"NOT_FOUND": "TARGET_NOT_FOUND"
|
|
455
|
+
"TIMEOUT": "TIMEOUT"
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### 9.2 Runtime Resolution
|
|
459
|
+
|
|
460
|
+
```typescript
|
|
461
|
+
async function invokeCapability(
|
|
462
|
+
capability: CapabilityURI,
|
|
463
|
+
input: Record<string, unknown>,
|
|
464
|
+
bindings: CapabilityBindings
|
|
465
|
+
): Promise<CapabilityResult> {
|
|
466
|
+
// Try bindings in order of preference
|
|
467
|
+
const bindingOrder = ['mcp', 'http', 'grpc', 'cli'];
|
|
468
|
+
|
|
469
|
+
for (const bindingType of bindingOrder) {
|
|
470
|
+
const binding = bindings[bindingType];
|
|
471
|
+
if (!binding) continue;
|
|
472
|
+
|
|
473
|
+
try {
|
|
474
|
+
return await executeBinding(bindingType, binding, input);
|
|
475
|
+
} catch (error) {
|
|
476
|
+
// Log and try next binding
|
|
477
|
+
console.warn(`Binding ${bindingType} failed:`, error);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
throw new Error(`No available binding for ${capability}`);
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
## 10. Agent Manifest Integration
|
|
486
|
+
|
|
487
|
+
### 10.1 Declaring Capabilities
|
|
488
|
+
|
|
489
|
+
```yaml
|
|
490
|
+
apiVersion: ossa/v0.2.9
|
|
491
|
+
kind: Agent
|
|
492
|
+
metadata:
|
|
493
|
+
name: security-scanner
|
|
494
|
+
version: 1.0.0
|
|
495
|
+
|
|
496
|
+
spec:
|
|
497
|
+
type: worker
|
|
498
|
+
|
|
499
|
+
capabilities:
|
|
500
|
+
# Using standard capabilities
|
|
501
|
+
- ossa:security/scan_vulnerabilities@1.0
|
|
502
|
+
- ossa:security/generate_sbom@1.0
|
|
503
|
+
|
|
504
|
+
# Using MCP tools directly
|
|
505
|
+
- mcp:filesystem/read_file@1.0
|
|
506
|
+
- mcp:gitlab/create_issue@1.0
|
|
507
|
+
|
|
508
|
+
# Capability bindings for this agent
|
|
509
|
+
capability_bindings:
|
|
510
|
+
"ossa:security/scan_vulnerabilities@1.0":
|
|
511
|
+
mcp:
|
|
512
|
+
server: "trivy"
|
|
513
|
+
tool: "scan"
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
### 10.2 Requiring Capabilities
|
|
517
|
+
|
|
518
|
+
```yaml
|
|
519
|
+
spec:
|
|
520
|
+
# Capabilities this agent requires from others
|
|
521
|
+
required_capabilities:
|
|
522
|
+
- uri: "ossa:a2a/delegate@1.0"
|
|
523
|
+
reason: "Delegation to specialized workers"
|
|
524
|
+
- uri: "ossa:state/checkpoint@1.0"
|
|
525
|
+
reason: "State persistence for recovery"
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
## 11. CLI Commands
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
# List available capabilities
|
|
532
|
+
ossa capability list
|
|
533
|
+
ossa capability list --domain security
|
|
534
|
+
|
|
535
|
+
# Show capability details
|
|
536
|
+
ossa capability show ossa:security/scan_vulnerabilities@1.0
|
|
537
|
+
|
|
538
|
+
# Validate capability definition
|
|
539
|
+
ossa capability validate ./my-capability.yaml
|
|
540
|
+
|
|
541
|
+
# Register custom capability
|
|
542
|
+
ossa capability register ./my-capability.yaml
|
|
543
|
+
|
|
544
|
+
# Check capability compatibility
|
|
545
|
+
ossa capability compat ossa:security/scan@0.9 ossa:security/scan_vulnerabilities@1.0
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
## 12. Compliance Requirements
|
|
549
|
+
|
|
550
|
+
### 12.1 MUST Requirements
|
|
551
|
+
|
|
552
|
+
1. All capabilities MUST have a valid URI
|
|
553
|
+
2. All capabilities MUST define input and output schemas
|
|
554
|
+
3. All capabilities MUST define at least one binding
|
|
555
|
+
4. Breaking changes MUST increment MAJOR version
|
|
556
|
+
|
|
557
|
+
### 12.2 SHOULD Requirements
|
|
558
|
+
|
|
559
|
+
1. Capabilities SHOULD include documentation_url
|
|
560
|
+
2. Capabilities SHOULD define error codes
|
|
561
|
+
3. Deprecated capabilities SHOULD specify migration_guide
|
|
562
|
+
4. Bindings SHOULD include field mappings
|
|
563
|
+
|
|
564
|
+
### 12.3 MAY Requirements
|
|
565
|
+
|
|
566
|
+
1. Capabilities MAY define multiple bindings
|
|
567
|
+
2. Capabilities MAY include examples
|
|
568
|
+
3. Registries MAY implement caching
|
|
569
|
+
|
|
570
|
+
## 13. References
|
|
571
|
+
|
|
572
|
+
- [OSSA Agent Manifest Specification](./agent.md)
|
|
573
|
+
- [A2A Protocol Specification](./a2a-protocol.md)
|
|
574
|
+
- [MCP Specification](https://spec.modelcontextprotocol.io/)
|
|
575
|
+
- [JSON Schema](https://json-schema.org/)
|
|
576
|
+
- [Semantic Versioning](https://semver.org/)
|