@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,621 @@
|
|
|
1
|
+
# OSSA GitLab Duo Platform Integration
|
|
2
|
+
|
|
3
|
+
**Version**: 0.2.9
|
|
4
|
+
**Status**: Draft
|
|
5
|
+
**Last Updated**: 2025-12-04
|
|
6
|
+
|
|
7
|
+
This document specifies the integration between OSSA agents and GitLab Ultimate's Duo Platform.
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
OSSA agents integrate with GitLab through:
|
|
12
|
+
1. **AgentFlow** - Issue lifecycle states for agent-driven workflows
|
|
13
|
+
2. **Custom Fields** - Metadata for routing and tracking
|
|
14
|
+
3. **Duo Platform** - Agent registry, execution UI, and observability
|
|
15
|
+
4. **AutoDevOps** - Automated CI/CD integration
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## AgentFlow Lifecycle
|
|
20
|
+
|
|
21
|
+
### Issue States
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
25
|
+
│ AGENTFLOW LIFECYCLE │
|
|
26
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
27
|
+
│ │
|
|
28
|
+
│ ┌────────┐ ┌────────┐ ┌─────────────┐ ┌────────┐ │
|
|
29
|
+
│ │ Triage │───▶│ To Do │───▶│ In Progress │───▶│ Done │ │
|
|
30
|
+
│ └────────┘ └────────┘ └─────────────┘ └────────┘ │
|
|
31
|
+
│ │ │ │
|
|
32
|
+
│ ▼ ▼ │
|
|
33
|
+
│ ┌─────────────┐ ┌──────────┐ │
|
|
34
|
+
│ │ Blocked │ │ Canceled │ │
|
|
35
|
+
│ └─────────────┘ └──────────┘ │
|
|
36
|
+
│ │
|
|
37
|
+
│ In Progress Sub-States: │
|
|
38
|
+
│ ┌────────────┐ ┌────────────┐ ┌────────┐ ┌────────┐ │
|
|
39
|
+
│ │ Validation │ │ Review │ │ Merged │ │ Blocked│ │
|
|
40
|
+
│ └────────────┘ └────────────┘ └────────┘ └────────┘ │
|
|
41
|
+
│ │
|
|
42
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### State Definitions
|
|
46
|
+
|
|
47
|
+
| State | Description | Agent Behavior |
|
|
48
|
+
|-------|-------------|----------------|
|
|
49
|
+
| `Triage` | Unassigned, needs routing | Meta-orchestrator routes to agent |
|
|
50
|
+
| `To Do` | Assigned, queued | Agent acknowledges, adds to backlog |
|
|
51
|
+
| `In Progress` | Agent working | Active processing |
|
|
52
|
+
| `Validation` | Code complete, testing | Security-healer triggers scans |
|
|
53
|
+
| `Review` | MR created, awaiting review | Wiki-aggregator updates docs |
|
|
54
|
+
| `Merged` | MR merged to development | Release agents prepare changelog |
|
|
55
|
+
| `Blocked` | Dependency or external block | Agent escalates to human |
|
|
56
|
+
| `Done` | Completed successfully | Agent updates metrics |
|
|
57
|
+
| `Canceled` | Will not do | Agent logs reason |
|
|
58
|
+
|
|
59
|
+
### State Transitions
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
transitions:
|
|
63
|
+
triage:
|
|
64
|
+
allowed_next: [to_do, canceled]
|
|
65
|
+
agent_action: route_to_specialist
|
|
66
|
+
|
|
67
|
+
to_do:
|
|
68
|
+
allowed_next: [in_progress, blocked, canceled]
|
|
69
|
+
agent_action: acknowledge_and_plan
|
|
70
|
+
|
|
71
|
+
in_progress:
|
|
72
|
+
allowed_next: [validation, review, blocked, done, canceled]
|
|
73
|
+
agent_action: execute_task
|
|
74
|
+
|
|
75
|
+
validation:
|
|
76
|
+
allowed_next: [review, in_progress, blocked]
|
|
77
|
+
agent_action: run_security_scans
|
|
78
|
+
|
|
79
|
+
review:
|
|
80
|
+
allowed_next: [merged, in_progress, blocked]
|
|
81
|
+
agent_action: update_documentation
|
|
82
|
+
|
|
83
|
+
merged:
|
|
84
|
+
allowed_next: [done]
|
|
85
|
+
agent_action: prepare_release
|
|
86
|
+
|
|
87
|
+
blocked:
|
|
88
|
+
allowed_next: [in_progress, to_do, canceled]
|
|
89
|
+
agent_action: escalate_to_human
|
|
90
|
+
|
|
91
|
+
done:
|
|
92
|
+
allowed_next: []
|
|
93
|
+
agent_action: finalize_metrics
|
|
94
|
+
|
|
95
|
+
canceled:
|
|
96
|
+
allowed_next: []
|
|
97
|
+
agent_action: log_cancellation_reason
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Custom Fields
|
|
103
|
+
|
|
104
|
+
### Field Definitions
|
|
105
|
+
|
|
106
|
+
| Field | Type | Scope | Values | Description |
|
|
107
|
+
|-------|------|-------|--------|-------------|
|
|
108
|
+
| `agent_assigned` | Single Select | Epic, Issue | 12 agents | Which agent owns this |
|
|
109
|
+
| `agent_status` | Single Select | Epic, Issue | 5 states | Agent-specific status |
|
|
110
|
+
| `commit_type` | Single Select | Epic, Issue | 10 types | Content classification |
|
|
111
|
+
| `codeowner` | Text | Issue | @username | Human owner |
|
|
112
|
+
| `priority` | Single Select | Issue, Epic, Task | P0-P3 | Urgency level |
|
|
113
|
+
| `release_type` | Single Select | Epic, Issue | 4 types | Release classification |
|
|
114
|
+
| `release_version` | Text | Issue | semver | Target version |
|
|
115
|
+
| `bot_wave` | Single Select | Issue, Task | 5 waves | Execution wave |
|
|
116
|
+
|
|
117
|
+
### Agent Assignment Values
|
|
118
|
+
|
|
119
|
+
```yaml
|
|
120
|
+
agent_assigned:
|
|
121
|
+
- wiki-aggregator
|
|
122
|
+
- ts-prod
|
|
123
|
+
- ts-local
|
|
124
|
+
- ossa-local
|
|
125
|
+
- native-local
|
|
126
|
+
- ml-prod
|
|
127
|
+
- ml-local
|
|
128
|
+
- infra-prod
|
|
129
|
+
- gitlab-lib-ci
|
|
130
|
+
- gitlab-lib-local
|
|
131
|
+
- drupal-prod
|
|
132
|
+
- drupal-local
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Commit Type Values
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
commit_type:
|
|
139
|
+
- drupal # Drupal modules, themes, recipes
|
|
140
|
+
- ts # TypeScript/JavaScript
|
|
141
|
+
- gitlab-lib # GitLab CI/CD
|
|
142
|
+
- ml # Machine learning, AI
|
|
143
|
+
- infra # Infrastructure, Kubernetes
|
|
144
|
+
- ossa # OSSA manifests
|
|
145
|
+
- docs # Documentation
|
|
146
|
+
- native # Native code (Rust, Go, C)
|
|
147
|
+
- security # Security-related
|
|
148
|
+
- release # Release automation
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Bot Wave Values
|
|
152
|
+
|
|
153
|
+
```yaml
|
|
154
|
+
bot_wave:
|
|
155
|
+
- wave_1_compilation # Local validation
|
|
156
|
+
- wave_2_production # Production deployment
|
|
157
|
+
- wave_3_review # Quality and security
|
|
158
|
+
- wave_4_release # Versioning and release
|
|
159
|
+
- wave_5_docs # Documentation sync
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Agent Registry
|
|
165
|
+
|
|
166
|
+
### 12 OSSA Agents
|
|
167
|
+
|
|
168
|
+
| ID | Handle | Category | Wave | Triggers |
|
|
169
|
+
|----|--------|----------|------|----------|
|
|
170
|
+
| `wiki-aggregator` | @bot-wiki-aggregator | Docs | 5 | merge, schedule |
|
|
171
|
+
| `ts-prod` | @bot-ts-prod | Language | 2 | status=Validation |
|
|
172
|
+
| `ts-local` | @bot-ts-local | Language | 1 | commit, mention |
|
|
173
|
+
| `ossa-local` | @bot-ossa-local | OSSA | 1 | commit (*.ossa.yaml) |
|
|
174
|
+
| `native-local` | @bot-native-local | Native | 1 | commit (*.rs, *.go) |
|
|
175
|
+
| `ml-prod` | @bot-ml-prod | ML | 2 | status=Validation |
|
|
176
|
+
| `ml-local` | @bot-ml-local | ML | 1 | commit (*.py, *.ipynb) |
|
|
177
|
+
| `infra-prod` | @bot-infra-prod | Infra | 2 | commit (k8s/, terraform/) |
|
|
178
|
+
| `gitlab-lib-ci` | @bot-gitlab-lib-ci | GitLab | 2 | pipeline_failure |
|
|
179
|
+
| `gitlab-lib-local` | @bot-gitlab-lib-local | GitLab | 1 | commit (.gitlab-ci.yml) |
|
|
180
|
+
| `drupal-prod` | @bot-drupal-prod | Drupal | 2 | status=Validation |
|
|
181
|
+
| `drupal-local` | @bot-drupal-local | Drupal | 1 | commit (*.php, *.module) |
|
|
182
|
+
|
|
183
|
+
### Routing Matrix
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
routing:
|
|
187
|
+
# File pattern → Agent chain
|
|
188
|
+
"**/*.php":
|
|
189
|
+
- drupal-local
|
|
190
|
+
- drupal-prod
|
|
191
|
+
|
|
192
|
+
"**/*.module":
|
|
193
|
+
- drupal-local
|
|
194
|
+
- drupal-prod
|
|
195
|
+
|
|
196
|
+
"**/*.ts":
|
|
197
|
+
- ts-local
|
|
198
|
+
- ts-prod
|
|
199
|
+
|
|
200
|
+
"**/*.tsx":
|
|
201
|
+
- ts-local
|
|
202
|
+
- ts-prod
|
|
203
|
+
|
|
204
|
+
".gitlab-ci.yml":
|
|
205
|
+
- gitlab-lib-local
|
|
206
|
+
- gitlab-lib-ci
|
|
207
|
+
|
|
208
|
+
".gitlab/**/*.yml":
|
|
209
|
+
- gitlab-lib-local
|
|
210
|
+
- gitlab-lib-ci
|
|
211
|
+
|
|
212
|
+
"**/*.py":
|
|
213
|
+
- ml-local
|
|
214
|
+
- ml-prod
|
|
215
|
+
|
|
216
|
+
"**/*.ipynb":
|
|
217
|
+
- ml-local
|
|
218
|
+
- ml-prod
|
|
219
|
+
|
|
220
|
+
"**/*.rs":
|
|
221
|
+
- native-local
|
|
222
|
+
|
|
223
|
+
"**/*.go":
|
|
224
|
+
- native-local
|
|
225
|
+
|
|
226
|
+
"**/*.ossa.yaml":
|
|
227
|
+
- ossa-local
|
|
228
|
+
|
|
229
|
+
"k8s/**":
|
|
230
|
+
- infra-prod
|
|
231
|
+
|
|
232
|
+
"terraform/**":
|
|
233
|
+
- infra-prod
|
|
234
|
+
|
|
235
|
+
"**/*.md":
|
|
236
|
+
- wiki-aggregator
|
|
237
|
+
|
|
238
|
+
"docs/**":
|
|
239
|
+
- wiki-aggregator
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Bot Waves
|
|
245
|
+
|
|
246
|
+
### Wave Execution
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
250
|
+
│ BOT WAVE EXECUTION │
|
|
251
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
252
|
+
│ │
|
|
253
|
+
│ Wave 1: COMPILATION │
|
|
254
|
+
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
255
|
+
│ │ts-local │ │gitlab- │ │drupal- │ │ml-local │ │ossa- │ │
|
|
256
|
+
│ │ │ │lib-local│ │local │ │ │ │local │ │
|
|
257
|
+
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
|
|
258
|
+
│ │ │ │ │ │ │
|
|
259
|
+
│ ▼ ▼ ▼ ▼ ▼ │
|
|
260
|
+
│ Wave 2: PRODUCTION │
|
|
261
|
+
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
262
|
+
│ │ts-prod │ │gitlab- │ │drupal- │ │ml-prod │ │infra- │ │
|
|
263
|
+
│ │ │ │lib-ci │ │prod │ │ │ │prod │ │
|
|
264
|
+
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
|
|
265
|
+
│ │ │ │ │ │ │
|
|
266
|
+
│ ▼ ▼ ▼ ▼ ▼ │
|
|
267
|
+
│ Wave 3: REVIEW │
|
|
268
|
+
│ ┌─────────────────┐ ┌─────────────────┐ │
|
|
269
|
+
│ │ security-healer │ │ wiki-aggregator │ │
|
|
270
|
+
│ └────────┬────────┘ └────────┬────────┘ │
|
|
271
|
+
│ │ │ │
|
|
272
|
+
│ ▼ ▼ │
|
|
273
|
+
│ Wave 4: RELEASE │
|
|
274
|
+
│ ┌─────────────────────────────────────┐ │
|
|
275
|
+
│ │ release automation │ │
|
|
276
|
+
│ └─────────────────┬───────────────────┘ │
|
|
277
|
+
│ │ │
|
|
278
|
+
│ ▼ │
|
|
279
|
+
│ Wave 5: DOCS │
|
|
280
|
+
│ ┌─────────────────────────────────────┐ │
|
|
281
|
+
│ │ wiki-aggregator │ │
|
|
282
|
+
│ └─────────────────────────────────────┘ │
|
|
283
|
+
│ │
|
|
284
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Wave Configuration
|
|
288
|
+
|
|
289
|
+
```yaml
|
|
290
|
+
waves:
|
|
291
|
+
wave_1_compilation:
|
|
292
|
+
agents:
|
|
293
|
+
- ts-local
|
|
294
|
+
- gitlab-lib-local
|
|
295
|
+
- drupal-local
|
|
296
|
+
- ml-local
|
|
297
|
+
- ossa-local
|
|
298
|
+
- native-local
|
|
299
|
+
trigger: commit
|
|
300
|
+
parallel: true
|
|
301
|
+
timeout_minutes: 10
|
|
302
|
+
on_failure: block_next_wave
|
|
303
|
+
|
|
304
|
+
wave_2_production:
|
|
305
|
+
agents:
|
|
306
|
+
- ts-prod
|
|
307
|
+
- gitlab-lib-ci
|
|
308
|
+
- drupal-prod
|
|
309
|
+
- ml-prod
|
|
310
|
+
- infra-prod
|
|
311
|
+
trigger: wave_1_complete
|
|
312
|
+
parallel: true
|
|
313
|
+
timeout_minutes: 30
|
|
314
|
+
on_failure: rollback
|
|
315
|
+
|
|
316
|
+
wave_3_review:
|
|
317
|
+
agents:
|
|
318
|
+
- security-healer
|
|
319
|
+
- wiki-aggregator
|
|
320
|
+
trigger: wave_2_complete
|
|
321
|
+
parallel: true
|
|
322
|
+
timeout_minutes: 15
|
|
323
|
+
on_failure: create_incident
|
|
324
|
+
|
|
325
|
+
wave_4_release:
|
|
326
|
+
agents:
|
|
327
|
+
- release-automation
|
|
328
|
+
trigger: status=merged
|
|
329
|
+
parallel: false
|
|
330
|
+
timeout_minutes: 10
|
|
331
|
+
on_failure: notify_maintainers
|
|
332
|
+
|
|
333
|
+
wave_5_docs:
|
|
334
|
+
agents:
|
|
335
|
+
- wiki-aggregator
|
|
336
|
+
trigger: wave_4_complete
|
|
337
|
+
parallel: false
|
|
338
|
+
timeout_minutes: 5
|
|
339
|
+
on_failure: log_warning
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Duo Platform Integration
|
|
345
|
+
|
|
346
|
+
### API Endpoints
|
|
347
|
+
|
|
348
|
+
```yaml
|
|
349
|
+
duo_platform:
|
|
350
|
+
base_url: /automate/ossa-agents
|
|
351
|
+
|
|
352
|
+
endpoints:
|
|
353
|
+
# Agent Registry
|
|
354
|
+
list:
|
|
355
|
+
method: GET
|
|
356
|
+
path: /
|
|
357
|
+
response: AgentRegistryList
|
|
358
|
+
|
|
359
|
+
detail:
|
|
360
|
+
method: GET
|
|
361
|
+
path: /:agent_id
|
|
362
|
+
response: AgentDetail
|
|
363
|
+
|
|
364
|
+
# Execution
|
|
365
|
+
execute:
|
|
366
|
+
method: POST
|
|
367
|
+
path: /:agent_id/execute
|
|
368
|
+
body: ExecuteRequest
|
|
369
|
+
response: ExecutionResult
|
|
370
|
+
|
|
371
|
+
# Observability
|
|
372
|
+
metrics:
|
|
373
|
+
method: GET
|
|
374
|
+
path: /:agent_id/metrics
|
|
375
|
+
response: AgentMetrics
|
|
376
|
+
|
|
377
|
+
logs:
|
|
378
|
+
method: GET
|
|
379
|
+
path: /:agent_id/logs
|
|
380
|
+
query:
|
|
381
|
+
since: ISO8601
|
|
382
|
+
until: ISO8601
|
|
383
|
+
level: LogLevel
|
|
384
|
+
response: LogStream
|
|
385
|
+
|
|
386
|
+
traces:
|
|
387
|
+
method: GET
|
|
388
|
+
path: /:agent_id/traces
|
|
389
|
+
query:
|
|
390
|
+
trace_id: string
|
|
391
|
+
response: TraceSpans
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Registry Schema
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
interface AgentRegistryEntry {
|
|
398
|
+
id: string;
|
|
399
|
+
name: string;
|
|
400
|
+
handle: string; // @bot-<name>
|
|
401
|
+
category: AgentCategory;
|
|
402
|
+
wave: WaveNumber;
|
|
403
|
+
version: string;
|
|
404
|
+
status: 'active' | 'degraded' | 'inactive';
|
|
405
|
+
manifest_url: string;
|
|
406
|
+
metrics: {
|
|
407
|
+
executions_24h: number;
|
|
408
|
+
success_rate: number;
|
|
409
|
+
avg_duration_ms: number;
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
type AgentCategory =
|
|
414
|
+
| 'language'
|
|
415
|
+
| 'infrastructure'
|
|
416
|
+
| 'security'
|
|
417
|
+
| 'documentation'
|
|
418
|
+
| 'release'
|
|
419
|
+
| 'orchestrator';
|
|
420
|
+
|
|
421
|
+
type WaveNumber = 1 | 2 | 3 | 4 | 5;
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Execution UI
|
|
425
|
+
|
|
426
|
+
```yaml
|
|
427
|
+
execution_ui:
|
|
428
|
+
path: /automate/ossa-agents/:agent_id/execute
|
|
429
|
+
|
|
430
|
+
features:
|
|
431
|
+
- input_form # Dynamic form from agent input_schema
|
|
432
|
+
- dry_run_toggle # Test without side effects
|
|
433
|
+
- live_output # Streaming execution output
|
|
434
|
+
- trace_viewer # OpenTelemetry trace visualization
|
|
435
|
+
- metrics_dashboard # Real-time metrics
|
|
436
|
+
- approval_workflow # For privileged operations
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## AutoDevOps Integration
|
|
442
|
+
|
|
443
|
+
### Security Scanning
|
|
444
|
+
|
|
445
|
+
```yaml
|
|
446
|
+
autodevops:
|
|
447
|
+
security:
|
|
448
|
+
# Triggered by security-healer
|
|
449
|
+
sast:
|
|
450
|
+
enabled: true
|
|
451
|
+
analyzer: semgrep
|
|
452
|
+
|
|
453
|
+
dast:
|
|
454
|
+
enabled: true
|
|
455
|
+
target: review_app
|
|
456
|
+
|
|
457
|
+
secret_detection:
|
|
458
|
+
enabled: true
|
|
459
|
+
historic: true
|
|
460
|
+
|
|
461
|
+
container_scanning:
|
|
462
|
+
enabled: true
|
|
463
|
+
registry: $CI_REGISTRY
|
|
464
|
+
|
|
465
|
+
dependency_scanning:
|
|
466
|
+
enabled: true
|
|
467
|
+
analyzers:
|
|
468
|
+
- gemnasium
|
|
469
|
+
- retire.js
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### Agent CI Jobs
|
|
473
|
+
|
|
474
|
+
```yaml
|
|
475
|
+
# .gitlab-ci.yml agent jobs
|
|
476
|
+
.ossa-agent-job:
|
|
477
|
+
image: ossa/agent-runner:latest
|
|
478
|
+
variables:
|
|
479
|
+
OSSA_AGENT_ID: ${AGENT_ID}
|
|
480
|
+
OTEL_EXPORTER_OTLP_ENDPOINT: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/observability/v1/traces
|
|
481
|
+
script:
|
|
482
|
+
- ossa run --agent ${OSSA_AGENT_ID} --input "${AGENT_INPUT}"
|
|
483
|
+
artifacts:
|
|
484
|
+
reports:
|
|
485
|
+
ossa: agent-report.json
|
|
486
|
+
|
|
487
|
+
agent:drupal-local:
|
|
488
|
+
extends: .ossa-agent-job
|
|
489
|
+
variables:
|
|
490
|
+
AGENT_ID: drupal-local
|
|
491
|
+
rules:
|
|
492
|
+
- if: $CI_COMMIT_BRANCH
|
|
493
|
+
changes:
|
|
494
|
+
- "**/*.php"
|
|
495
|
+
- "**/*.module"
|
|
496
|
+
|
|
497
|
+
agent:ts-local:
|
|
498
|
+
extends: .ossa-agent-job
|
|
499
|
+
variables:
|
|
500
|
+
AGENT_ID: ts-local
|
|
501
|
+
rules:
|
|
502
|
+
- if: $CI_COMMIT_BRANCH
|
|
503
|
+
changes:
|
|
504
|
+
- "**/*.ts"
|
|
505
|
+
- "**/*.tsx"
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## Context Injection
|
|
511
|
+
|
|
512
|
+
### Documentation Context
|
|
513
|
+
|
|
514
|
+
```yaml
|
|
515
|
+
context_injection:
|
|
516
|
+
# 400+ pages of documentation injected into agent context
|
|
517
|
+
sources:
|
|
518
|
+
- technical-docs-wiki
|
|
519
|
+
- api-schema-registry
|
|
520
|
+
- ossa-specification
|
|
521
|
+
|
|
522
|
+
max_tokens: 100000
|
|
523
|
+
|
|
524
|
+
priority:
|
|
525
|
+
- relevant_to_file_type # Highest
|
|
526
|
+
- recent_changes
|
|
527
|
+
- frequently_referenced
|
|
528
|
+
- architecture_overview # Lowest
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### Tool Approval Workflows
|
|
532
|
+
|
|
533
|
+
```yaml
|
|
534
|
+
tool_approval:
|
|
535
|
+
# Operations requiring human approval
|
|
536
|
+
privileged_operations:
|
|
537
|
+
- apply_patches
|
|
538
|
+
- create_incidents
|
|
539
|
+
- block_merge
|
|
540
|
+
- scale_agents
|
|
541
|
+
- update_production
|
|
542
|
+
|
|
543
|
+
approval_flow:
|
|
544
|
+
method: gitlab_approval
|
|
545
|
+
required_approvers: 1
|
|
546
|
+
timeout_minutes: 60
|
|
547
|
+
|
|
548
|
+
bypass_conditions:
|
|
549
|
+
- severity: critical
|
|
550
|
+
auto_approve: true
|
|
551
|
+
notify: security-team
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## OSSA Extension Schema
|
|
557
|
+
|
|
558
|
+
```yaml
|
|
559
|
+
# Agent manifest extension for GitLab
|
|
560
|
+
extensions:
|
|
561
|
+
gitlab:
|
|
562
|
+
# Event triggers
|
|
563
|
+
triggers:
|
|
564
|
+
- event: commit | merge | schedule | status_change | security_alert | mention
|
|
565
|
+
branches: [string]
|
|
566
|
+
status: string
|
|
567
|
+
cron: string
|
|
568
|
+
|
|
569
|
+
# Custom field mappings
|
|
570
|
+
custom_fields:
|
|
571
|
+
agent_assigned: string
|
|
572
|
+
bot_wave: string
|
|
573
|
+
|
|
574
|
+
# Merge request controls
|
|
575
|
+
merge_blocking:
|
|
576
|
+
enabled: boolean
|
|
577
|
+
condition: string # e.g., "cvss >= 7.0"
|
|
578
|
+
|
|
579
|
+
# Duo Platform registration
|
|
580
|
+
duo_platform:
|
|
581
|
+
route: string # /automate/ossa-agents
|
|
582
|
+
registry_endpoint: string
|
|
583
|
+
execution_ui: string
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
---
|
|
587
|
+
|
|
588
|
+
## Implementation Checklist
|
|
589
|
+
|
|
590
|
+
### Phase 1: Foundation
|
|
591
|
+
- [ ] AgentFlow status definitions in GitLab
|
|
592
|
+
- [ ] Custom fields created
|
|
593
|
+
- [ ] Agent registry API implemented
|
|
594
|
+
- [ ] Meta-orchestrator deployed
|
|
595
|
+
|
|
596
|
+
### Phase 2: Agents
|
|
597
|
+
- [ ] All 12 agents deployed
|
|
598
|
+
- [ ] Routing logic implemented
|
|
599
|
+
- [ ] Wave coordination working
|
|
600
|
+
- [ ] A2A messaging functional
|
|
601
|
+
|
|
602
|
+
### Phase 3: Integration
|
|
603
|
+
- [ ] Duo Platform UI connected
|
|
604
|
+
- [ ] Observability flowing to GitLab
|
|
605
|
+
- [ ] AutoDevOps security scanning
|
|
606
|
+
- [ ] Context injection working
|
|
607
|
+
|
|
608
|
+
### Phase 4: Optimization
|
|
609
|
+
- [ ] Performance tuning
|
|
610
|
+
- [ ] Cost optimization
|
|
611
|
+
- [ ] Documentation complete
|
|
612
|
+
- [ ] Training materials
|
|
613
|
+
|
|
614
|
+
---
|
|
615
|
+
|
|
616
|
+
## References
|
|
617
|
+
|
|
618
|
+
- [GitLab Duo Platform](https://docs.gitlab.com/ee/development/duo/)
|
|
619
|
+
- [OSSA Specification v0.2.9](./ossa-0.2.9.schema.json)
|
|
620
|
+
- [Meta Orchestrator Agent](../.agents/orchestrators/meta-orchestrator/agent.yml)
|
|
621
|
+
- [Security Healer Agent](../.agents/workers/security-healer/agent.yml)
|