@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
package/.env.example
CHANGED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# AGENTS.md - Repository-Level Agent Guidance
|
|
2
|
+
|
|
3
|
+
> This file provides guidance for AI coding agents working on this repository.
|
|
4
|
+
> Follows the [agents.md](https://agents.md) specification.
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This is the **OSSA (Open Standard for Scalable AI Agents)** repository - the OpenAPI for AI Agents.
|
|
9
|
+
|
|
10
|
+
**Important**: This GitHub repository is a **public mirror** of our [GitLab repository](https://gitlab.com/blueflyio/openstandardagents). All CI/CD, testing, and releases happen on GitLab.
|
|
11
|
+
|
|
12
|
+
## Development Environment
|
|
13
|
+
|
|
14
|
+
### Setup
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Clone (from GitHub mirror)
|
|
18
|
+
git clone https://github.com/blueflyio/openstandardagents.git
|
|
19
|
+
cd openstandardagents
|
|
20
|
+
|
|
21
|
+
# Install dependencies
|
|
22
|
+
npm install
|
|
23
|
+
|
|
24
|
+
# Build
|
|
25
|
+
npm run build
|
|
26
|
+
|
|
27
|
+
# Run tests
|
|
28
|
+
npm test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Key Directories
|
|
32
|
+
|
|
33
|
+
| Directory | Purpose |
|
|
34
|
+
|-----------|---------|
|
|
35
|
+
| `spec/` | OSSA schema definitions (JSON Schema) |
|
|
36
|
+
| `src/` | TypeScript CLI and validation library |
|
|
37
|
+
| `examples/` | Example agent manifests for various platforms |
|
|
38
|
+
| `docs/` | Public documentation |
|
|
39
|
+
| `.gitlab/` | GitLab CI/CD and internal agents |
|
|
40
|
+
| `.github/` | GitHub workflows and community tooling |
|
|
41
|
+
|
|
42
|
+
### Technology Stack
|
|
43
|
+
|
|
44
|
+
- **Language**: TypeScript (strict mode)
|
|
45
|
+
- **Runtime**: Node.js 20+
|
|
46
|
+
- **Package Manager**: npm (with legacy-peer-deps)
|
|
47
|
+
- **Testing**: Jest
|
|
48
|
+
- **Linting**: ESLint + Prettier
|
|
49
|
+
- **Schema**: JSON Schema Draft-07
|
|
50
|
+
|
|
51
|
+
## Testing
|
|
52
|
+
|
|
53
|
+
### Running Tests
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# All tests
|
|
57
|
+
npm test
|
|
58
|
+
|
|
59
|
+
# With coverage
|
|
60
|
+
npm test -- --coverage
|
|
61
|
+
|
|
62
|
+
# Specific file
|
|
63
|
+
npm test -- schema.repository.test.ts
|
|
64
|
+
|
|
65
|
+
# Watch mode
|
|
66
|
+
npm test -- --watch
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Test Requirements
|
|
70
|
+
|
|
71
|
+
- All schema changes require validation tests
|
|
72
|
+
- All CLI commands require integration tests
|
|
73
|
+
- Minimum 80% code coverage
|
|
74
|
+
- Tests must pass on Node.js 20 and 22
|
|
75
|
+
|
|
76
|
+
### Validation
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Validate all example manifests
|
|
80
|
+
npm run validate
|
|
81
|
+
|
|
82
|
+
# Validate specific manifest
|
|
83
|
+
npx ossa validate examples/cursor/code-review-agent.ossa.json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Pull Request Instructions
|
|
87
|
+
|
|
88
|
+
### PR Workflow (GitHub Mirror)
|
|
89
|
+
|
|
90
|
+
1. **Open PR on GitHub** - Community contributions welcome
|
|
91
|
+
2. **Automated Triage** - OSSA agents label and categorize
|
|
92
|
+
3. **Review** - Maintainers review on GitHub
|
|
93
|
+
4. **GitLab Sync** - Approved PRs create GitLab MR
|
|
94
|
+
5. **CI/CD** - Full test suite runs on GitLab
|
|
95
|
+
6. **Merge** - Changes merge on GitLab
|
|
96
|
+
7. **Mirror Sync** - GitHub automatically updated
|
|
97
|
+
8. **PR Auto-Close** - Your PR closes when changes appear
|
|
98
|
+
|
|
99
|
+
### Commit Convention
|
|
100
|
+
|
|
101
|
+
Use [Conventional Commits](https://conventionalcommits.org):
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Feature (minor version bump)
|
|
105
|
+
git commit -m "feat(schema): add agents_md extension support"
|
|
106
|
+
|
|
107
|
+
# Bug fix (patch version bump)
|
|
108
|
+
git commit -m "fix(cli): resolve validation timeout"
|
|
109
|
+
|
|
110
|
+
# Breaking change (major version bump)
|
|
111
|
+
git commit -m "feat!: redesign manifest schema
|
|
112
|
+
|
|
113
|
+
BREAKING CHANGE: apiVersion format changed"
|
|
114
|
+
|
|
115
|
+
# Documentation (no release)
|
|
116
|
+
git commit -m "docs: update getting started guide"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### PR Title Format
|
|
120
|
+
|
|
121
|
+
PR titles should follow conventional commits (becomes squash commit):
|
|
122
|
+
|
|
123
|
+
- ✅ `feat: add LangGraph extension support`
|
|
124
|
+
- ✅ `fix(schema): correct required fields`
|
|
125
|
+
- ❌ `Updated some stuff`
|
|
126
|
+
- ❌ `WIP`
|
|
127
|
+
|
|
128
|
+
## Code Style
|
|
129
|
+
|
|
130
|
+
### TypeScript Guidelines
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// ✅ Good: Explicit types, descriptive names
|
|
134
|
+
export async function validateManifest(
|
|
135
|
+
manifest: OssaManifest,
|
|
136
|
+
options: ValidationOptions = {}
|
|
137
|
+
): Promise<ValidationResult> {
|
|
138
|
+
// Implementation
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ❌ Bad: Any types, unclear names
|
|
142
|
+
export async function validate(m: any, o?: any) {
|
|
143
|
+
// Implementation
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Schema Guidelines
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
152
|
+
"type": "object",
|
|
153
|
+
"required": ["apiVersion", "kind", "metadata", "spec"],
|
|
154
|
+
"properties": {
|
|
155
|
+
"apiVersion": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"pattern": "^ossa/v[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
158
|
+
"description": "OSSA API version"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### File Naming
|
|
165
|
+
|
|
166
|
+
- Schema files: `ossa-{version}.schema.json`
|
|
167
|
+
- Example manifests: `{name}.ossa.{json|yaml}`
|
|
168
|
+
- Tests: `{name}.test.ts`
|
|
169
|
+
- Services: `{name}.service.ts`
|
|
170
|
+
|
|
171
|
+
## Security
|
|
172
|
+
|
|
173
|
+
### Sensitive Data
|
|
174
|
+
|
|
175
|
+
**NEVER** commit:
|
|
176
|
+
- API keys or tokens
|
|
177
|
+
- Private keys or certificates
|
|
178
|
+
- Database credentials
|
|
179
|
+
- Internal URLs or endpoints
|
|
180
|
+
|
|
181
|
+
### Security Issues
|
|
182
|
+
|
|
183
|
+
**DO NOT** open public issues for security vulnerabilities.
|
|
184
|
+
|
|
185
|
+
Report via email: **ops@openstandardagents.org**
|
|
186
|
+
|
|
187
|
+
## Architecture Notes
|
|
188
|
+
|
|
189
|
+
### Schema Versioning
|
|
190
|
+
|
|
191
|
+
- Current: `ossa/v0.2.9` (latest stable)
|
|
192
|
+
- Development: `ossa/v0.2.9` (in progress)
|
|
193
|
+
- Format: `ossa/v{major}.{minor}.{patch}`
|
|
194
|
+
|
|
195
|
+
### Extension System
|
|
196
|
+
|
|
197
|
+
Extensions allow platform-specific configuration:
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
extensions:
|
|
201
|
+
cursor:
|
|
202
|
+
enabled: true
|
|
203
|
+
agent_type: composer
|
|
204
|
+
openai_agents:
|
|
205
|
+
enabled: true
|
|
206
|
+
model: gpt-4o
|
|
207
|
+
agents_md:
|
|
208
|
+
enabled: true
|
|
209
|
+
generate: true
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Supported Extensions
|
|
213
|
+
|
|
214
|
+
| Extension | Platform | Status |
|
|
215
|
+
|-----------|----------|--------|
|
|
216
|
+
| `cursor` | Cursor IDE | Stable |
|
|
217
|
+
| `openai_agents` | OpenAI Agents SDK | Stable |
|
|
218
|
+
| `anthropic` | Claude/Anthropic | Stable |
|
|
219
|
+
| `langchain` | LangChain | Stable |
|
|
220
|
+
| `crewai` | CrewAI | Stable |
|
|
221
|
+
| `kagent` | kAgent (K8s) | Stable |
|
|
222
|
+
| `agents_md` | agents.md | New in v0.2.9 |
|
|
223
|
+
|
|
224
|
+
## Common Tasks
|
|
225
|
+
|
|
226
|
+
### Adding a New Extension
|
|
227
|
+
|
|
228
|
+
1. Add schema definition in `spec/v{version}/ossa-{version}.schema.json`
|
|
229
|
+
2. Create example in `examples/{extension}/`
|
|
230
|
+
3. Add validator in `src/services/validation/`
|
|
231
|
+
4. Write tests in `tests/`
|
|
232
|
+
5. Update documentation
|
|
233
|
+
|
|
234
|
+
### Updating Schema Version
|
|
235
|
+
|
|
236
|
+
1. Copy `spec/v{old}/` to `spec/v{new}/`
|
|
237
|
+
2. Update `$id`, `title`, and version references
|
|
238
|
+
3. Make changes
|
|
239
|
+
4. Update `src/types/index.ts`
|
|
240
|
+
5. Run `npm run validate`
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
*Generated from OSSA agent manifests in `.github/agents/`*
|
|
245
|
+
*Last updated: 2025-12-04*
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# OSSA Agent Manifest: GitHub Issue Triage Agent
|
|
2
|
+
# Triages issues from GitHub and syncs to GitLab
|
|
3
|
+
apiVersion: ossa/v0.2.9
|
|
4
|
+
kind: Agent
|
|
5
|
+
|
|
6
|
+
metadata:
|
|
7
|
+
name: github-issue-triage
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
description: |
|
|
10
|
+
Triages GitHub issues, auto-labels based on content,
|
|
11
|
+
and syncs to GitLab issue tracker for tracking.
|
|
12
|
+
labels:
|
|
13
|
+
platform: github
|
|
14
|
+
domain: devops
|
|
15
|
+
workflow: issue-triage
|
|
16
|
+
annotations:
|
|
17
|
+
documentation: https://openstandardagents.org/docs/agents/github-issue-triage
|
|
18
|
+
|
|
19
|
+
spec:
|
|
20
|
+
taxonomy:
|
|
21
|
+
domain: devops
|
|
22
|
+
subdomain: issue-management
|
|
23
|
+
capability: triage
|
|
24
|
+
|
|
25
|
+
role: |
|
|
26
|
+
You are a GitHub issue triage agent for OSSA.
|
|
27
|
+
|
|
28
|
+
Your responsibilities:
|
|
29
|
+
1. Welcome issue reporters and thank them for feedback
|
|
30
|
+
2. Auto-label issues based on content analysis:
|
|
31
|
+
- bug: Error reports, unexpected behavior
|
|
32
|
+
- enhancement: Feature requests, improvements
|
|
33
|
+
- documentation: Doc updates, clarifications
|
|
34
|
+
- question: Usage questions, help requests
|
|
35
|
+
- component:schema: Schema-related issues
|
|
36
|
+
- component:cli: CLI tool issues
|
|
37
|
+
- component:extensions: Platform extension issues
|
|
38
|
+
3. Detect duplicate issues and link them
|
|
39
|
+
4. Escalate security issues immediately
|
|
40
|
+
5. Create corresponding GitLab issues for tracking
|
|
41
|
+
6. Sync comments between platforms
|
|
42
|
+
|
|
43
|
+
Be helpful and responsive. Issue reporters are often users
|
|
44
|
+
trying to adopt OSSA and need guidance.
|
|
45
|
+
|
|
46
|
+
llm:
|
|
47
|
+
provider: openai
|
|
48
|
+
model: gpt-4o-mini
|
|
49
|
+
temperature: 0.2
|
|
50
|
+
maxTokens: 1500
|
|
51
|
+
|
|
52
|
+
tools:
|
|
53
|
+
- type: http
|
|
54
|
+
name: github-api
|
|
55
|
+
description: GitHub REST API for issue operations
|
|
56
|
+
endpoint: https://api.github.com
|
|
57
|
+
auth:
|
|
58
|
+
type: bearer
|
|
59
|
+
tokenPath: GITHUB_TOKEN
|
|
60
|
+
|
|
61
|
+
- type: http
|
|
62
|
+
name: gitlab-api
|
|
63
|
+
description: GitLab API for issue sync
|
|
64
|
+
endpoint: https://gitlab.com/api/v4
|
|
65
|
+
auth:
|
|
66
|
+
type: bearer
|
|
67
|
+
tokenPath: GITLAB_TOKEN
|
|
68
|
+
|
|
69
|
+
autonomy:
|
|
70
|
+
level: autonomous
|
|
71
|
+
approval_required: false
|
|
72
|
+
allowed_actions:
|
|
73
|
+
- label_issue
|
|
74
|
+
- comment_issue
|
|
75
|
+
- assign_issue
|
|
76
|
+
- create_gitlab_issue
|
|
77
|
+
- link_duplicate
|
|
78
|
+
blocked_actions:
|
|
79
|
+
- close_issue
|
|
80
|
+
- delete_issue
|
|
81
|
+
|
|
82
|
+
constraints:
|
|
83
|
+
cost:
|
|
84
|
+
maxTokensPerDay: 30000
|
|
85
|
+
maxTokensPerRequest: 2000
|
|
86
|
+
performance:
|
|
87
|
+
maxLatencySeconds: 15
|
|
88
|
+
timeoutSeconds: 60
|
|
89
|
+
|
|
90
|
+
observability:
|
|
91
|
+
logging:
|
|
92
|
+
level: info
|
|
93
|
+
metrics:
|
|
94
|
+
enabled: true
|
|
95
|
+
customMetrics:
|
|
96
|
+
- name: issues_triaged
|
|
97
|
+
type: counter
|
|
98
|
+
- name: duplicates_detected
|
|
99
|
+
type: counter
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# OSSA Agent Manifest: GitHub PR Triage Agent
|
|
2
|
+
# Triages pull requests from GitHub mirror and syncs to GitLab
|
|
3
|
+
apiVersion: ossa/v0.2.9
|
|
4
|
+
kind: Agent
|
|
5
|
+
|
|
6
|
+
metadata:
|
|
7
|
+
name: github-pr-triage
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
description: |
|
|
10
|
+
Triages GitHub pull requests, validates contributions,
|
|
11
|
+
and creates corresponding merge requests on GitLab.
|
|
12
|
+
labels:
|
|
13
|
+
platform: github
|
|
14
|
+
domain: devops
|
|
15
|
+
workflow: pr-triage
|
|
16
|
+
annotations:
|
|
17
|
+
documentation: https://openstandardagents.org/docs/agents/github-pr-triage
|
|
18
|
+
source: https://gitlab.com/blueflyio/openstandardagents
|
|
19
|
+
|
|
20
|
+
spec:
|
|
21
|
+
taxonomy:
|
|
22
|
+
domain: devops
|
|
23
|
+
subdomain: code-review
|
|
24
|
+
capability: pr-triage
|
|
25
|
+
|
|
26
|
+
role: |
|
|
27
|
+
You are a GitHub PR triage agent for the OSSA (Open Standard for Scalable AI Agents) project.
|
|
28
|
+
|
|
29
|
+
Your responsibilities:
|
|
30
|
+
1. Welcome contributors and explain the GitHub-to-GitLab workflow
|
|
31
|
+
2. Validate PR titles follow Conventional Commits format
|
|
32
|
+
3. Check PR content for:
|
|
33
|
+
- Schema changes (spec/**) - require careful review
|
|
34
|
+
- CLI changes (src/**) - require tests
|
|
35
|
+
- Documentation changes (docs/**) - can be fast-tracked
|
|
36
|
+
- Example additions (examples/**) - require validation
|
|
37
|
+
4. Auto-label PRs based on content type
|
|
38
|
+
5. Create corresponding GitLab MR when approved
|
|
39
|
+
6. Sync comments and reviews between platforms
|
|
40
|
+
|
|
41
|
+
Be welcoming to new contributors. Many are unfamiliar with the dual-repo workflow.
|
|
42
|
+
Provide clear guidance on how to contribute effectively.
|
|
43
|
+
|
|
44
|
+
llm:
|
|
45
|
+
provider: openai
|
|
46
|
+
model: gpt-4o
|
|
47
|
+
temperature: 0.3
|
|
48
|
+
maxTokens: 2000
|
|
49
|
+
|
|
50
|
+
tools:
|
|
51
|
+
- type: http
|
|
52
|
+
name: github-api
|
|
53
|
+
description: GitHub REST API for PR operations
|
|
54
|
+
endpoint: https://api.github.com
|
|
55
|
+
auth:
|
|
56
|
+
type: bearer
|
|
57
|
+
tokenPath: GITHUB_TOKEN
|
|
58
|
+
config:
|
|
59
|
+
headers:
|
|
60
|
+
Accept: application/vnd.github+json
|
|
61
|
+
X-GitHub-Api-Version: "2022-11-28"
|
|
62
|
+
|
|
63
|
+
- type: http
|
|
64
|
+
name: gitlab-api
|
|
65
|
+
description: GitLab API for MR creation
|
|
66
|
+
endpoint: https://gitlab.com/api/v4
|
|
67
|
+
auth:
|
|
68
|
+
type: bearer
|
|
69
|
+
tokenPath: GITLAB_TOKEN
|
|
70
|
+
|
|
71
|
+
- type: mcp
|
|
72
|
+
name: git-operations
|
|
73
|
+
description: Git operations for branch sync
|
|
74
|
+
server: git-mcp
|
|
75
|
+
capabilities:
|
|
76
|
+
- name: clone
|
|
77
|
+
- name: checkout
|
|
78
|
+
- name: push
|
|
79
|
+
- name: diff
|
|
80
|
+
|
|
81
|
+
autonomy:
|
|
82
|
+
level: supervised
|
|
83
|
+
approval_required: false
|
|
84
|
+
allowed_actions:
|
|
85
|
+
- label_pr
|
|
86
|
+
- comment_pr
|
|
87
|
+
- request_changes
|
|
88
|
+
- create_gitlab_mr
|
|
89
|
+
- sync_comments
|
|
90
|
+
blocked_actions:
|
|
91
|
+
- merge_pr
|
|
92
|
+
- close_pr_without_reason
|
|
93
|
+
- delete_branch
|
|
94
|
+
|
|
95
|
+
constraints:
|
|
96
|
+
cost:
|
|
97
|
+
maxTokensPerDay: 50000
|
|
98
|
+
maxTokensPerRequest: 4000
|
|
99
|
+
performance:
|
|
100
|
+
maxLatencySeconds: 30
|
|
101
|
+
timeoutSeconds: 120
|
|
102
|
+
|
|
103
|
+
observability:
|
|
104
|
+
logging:
|
|
105
|
+
level: info
|
|
106
|
+
format: json
|
|
107
|
+
metrics:
|
|
108
|
+
enabled: true
|
|
109
|
+
customMetrics:
|
|
110
|
+
- name: prs_triaged
|
|
111
|
+
type: counter
|
|
112
|
+
description: Number of PRs triaged
|
|
113
|
+
- name: gitlab_mrs_created
|
|
114
|
+
type: counter
|
|
115
|
+
description: Number of GitLab MRs created from GitHub PRs
|
|
116
|
+
|
|
117
|
+
extensions:
|
|
118
|
+
cursor:
|
|
119
|
+
enabled: false
|
|
120
|
+
|
|
121
|
+
agents_md:
|
|
122
|
+
enabled: true
|
|
123
|
+
generate: true
|
|
124
|
+
output_path: .github/AGENTS.md
|
|
125
|
+
sections:
|
|
126
|
+
dev_environment:
|
|
127
|
+
enabled: true
|
|
128
|
+
custom: |
|
|
129
|
+
- This repo is a GitHub mirror of GitLab
|
|
130
|
+
- PRs here trigger triage to GitLab
|
|
131
|
+
- Use Conventional Commits for PR titles
|
|
132
|
+
pr_instructions:
|
|
133
|
+
enabled: true
|
|
134
|
+
custom: |
|
|
135
|
+
- PRs are reviewed here then synced to GitLab
|
|
136
|
+
- CI/CD runs on GitLab, not GitHub
|
|
137
|
+
- Maintainers will create GitLab MR from approved PRs
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
name: Issue Sync to GitLab
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issues:
|
|
5
|
+
types: [opened, edited, closed, reopened, labeled]
|
|
6
|
+
issue_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
issues: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
# Triage new issues
|
|
15
|
+
triage-issue:
|
|
16
|
+
if: github.event_name == 'issues' && github.event.action == 'opened'
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- name: Auto-label Issue
|
|
20
|
+
uses: actions/github-script@v7
|
|
21
|
+
with:
|
|
22
|
+
script: |
|
|
23
|
+
const issue = context.payload.issue;
|
|
24
|
+
const title = issue.title.toLowerCase();
|
|
25
|
+
const body = (issue.body || '').toLowerCase();
|
|
26
|
+
const labels = ['github-issue'];
|
|
27
|
+
|
|
28
|
+
// Auto-detect issue type from title/body
|
|
29
|
+
if (title.includes('bug') || title.includes('error') || title.includes('fix')) {
|
|
30
|
+
labels.push('bug');
|
|
31
|
+
} else if (title.includes('feature') || title.includes('request') || title.includes('add')) {
|
|
32
|
+
labels.push('enhancement');
|
|
33
|
+
} else if (title.includes('doc') || title.includes('readme')) {
|
|
34
|
+
labels.push('documentation');
|
|
35
|
+
} else if (title.includes('question') || title.includes('help')) {
|
|
36
|
+
labels.push('question');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Detect component from content
|
|
40
|
+
if (body.includes('schema') || body.includes('manifest')) {
|
|
41
|
+
labels.push('component:schema');
|
|
42
|
+
}
|
|
43
|
+
if (body.includes('cli') || body.includes('command')) {
|
|
44
|
+
labels.push('component:cli');
|
|
45
|
+
}
|
|
46
|
+
if (body.includes('extension') || body.includes('cursor') || body.includes('langchain')) {
|
|
47
|
+
labels.push('component:extensions');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await github.rest.issues.addLabels({
|
|
51
|
+
owner: context.repo.owner,
|
|
52
|
+
repo: context.repo.repo,
|
|
53
|
+
issue_number: issue.number,
|
|
54
|
+
labels: labels
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
- name: Welcome Comment
|
|
58
|
+
uses: actions/github-script@v7
|
|
59
|
+
with:
|
|
60
|
+
script: |
|
|
61
|
+
const issue = context.payload.issue;
|
|
62
|
+
const author = issue.user.login;
|
|
63
|
+
|
|
64
|
+
const welcomeMessage = `## 👋 Thanks for opening an issue, @${author}!
|
|
65
|
+
|
|
66
|
+
We appreciate your feedback on **OSSA (Open Standard for Scalable AI Agents)**.
|
|
67
|
+
|
|
68
|
+
### 📋 What happens next?
|
|
69
|
+
|
|
70
|
+
1. **🏷️ Auto-Labeling** - Issue has been automatically labeled based on content
|
|
71
|
+
2. **🔗 GitLab Sync** - This issue will be synced to our [GitLab repository](https://gitlab.com/blueflyio/openstandardagents/-/issues)
|
|
72
|
+
3. **👀 Triage** - Core team will review within 24-48 hours
|
|
73
|
+
4. **💬 Updates** - You'll be notified here when there's progress
|
|
74
|
+
|
|
75
|
+
### 🔍 Quick Links
|
|
76
|
+
|
|
77
|
+
- 📖 [Documentation](https://openstandardagents.org)
|
|
78
|
+
- 💬 [Discord Community](https://discord.gg/ossa)
|
|
79
|
+
- 🦊 [GitLab Issues](https://gitlab.com/blueflyio/openstandardagents/-/issues)
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
*This repository is a public mirror. Active development happens on [GitLab](https://gitlab.com/blueflyio/openstandardagents).*`;
|
|
84
|
+
|
|
85
|
+
await github.rest.issues.createComment({
|
|
86
|
+
owner: context.repo.owner,
|
|
87
|
+
repo: context.repo.repo,
|
|
88
|
+
issue_number: issue.number,
|
|
89
|
+
body: welcomeMessage
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
- name: Notify GitLab Agent Platform
|
|
93
|
+
if: ${{ secrets.GITLAB_WEBHOOK_URL }}
|
|
94
|
+
run: |
|
|
95
|
+
curl -X POST "${{ secrets.GITLAB_WEBHOOK_URL }}" \
|
|
96
|
+
-H "Content-Type: application/json" \
|
|
97
|
+
-H "X-GitHub-Event: issues" \
|
|
98
|
+
-d '{
|
|
99
|
+
"event": "github_issue_opened",
|
|
100
|
+
"issue_number": ${{ github.event.issue.number }},
|
|
101
|
+
"issue_title": "${{ github.event.issue.title }}",
|
|
102
|
+
"issue_url": "${{ github.event.issue.html_url }}",
|
|
103
|
+
"author": "${{ github.event.issue.user.login }}"
|
|
104
|
+
}'
|
|
105
|
+
|
|
106
|
+
# Sync issue closure
|
|
107
|
+
sync-issue-close:
|
|
108
|
+
if: github.event_name == 'issues' && github.event.action == 'closed'
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
steps:
|
|
111
|
+
- name: Log Closure
|
|
112
|
+
run: |
|
|
113
|
+
echo "Issue #${{ github.event.issue.number }} closed"
|
|
114
|
+
echo "Closed by: ${{ github.event.sender.login }}"
|
|
115
|
+
|
|
116
|
+
# Sync new comments
|
|
117
|
+
sync-comment:
|
|
118
|
+
if: github.event_name == 'issue_comment' && github.event.action == 'created'
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
steps:
|
|
121
|
+
- name: Notify GitLab of Comment
|
|
122
|
+
if: ${{ secrets.GITLAB_WEBHOOK_URL }}
|
|
123
|
+
run: |
|
|
124
|
+
# Skip bot comments
|
|
125
|
+
if [[ "${{ github.event.comment.user.login }}" == *"bot"* ]]; then
|
|
126
|
+
echo "Skipping bot comment"
|
|
127
|
+
exit 0
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
curl -X POST "${{ secrets.GITLAB_WEBHOOK_URL }}" \
|
|
131
|
+
-H "Content-Type: application/json" \
|
|
132
|
+
-H "X-GitHub-Event: issue_comment" \
|
|
133
|
+
-d '{
|
|
134
|
+
"event": "github_comment_created",
|
|
135
|
+
"issue_number": ${{ github.event.issue.number }},
|
|
136
|
+
"comment_url": "${{ github.event.comment.html_url }}",
|
|
137
|
+
"author": "${{ github.event.comment.user.login }}"
|
|
138
|
+
}'
|