amazingteam 3.0.0 → 3.0.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.
- package/CHANGELOG.md +24 -0
- package/VERSION +1 -1
- package/cli/__tests__/cli.test.js +15 -2
- package/cli/commands/init.cjs +67 -7
- package/docs/config-reference.md +82 -0
- package/docs/quick-start-v3.md +12 -0
- package/package.json +1 -1
- package/presets/default.yaml +8 -1
- package/templates/opencode.jsonc +13 -212
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,30 @@ All notable changes to the AmazingTeam will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.0.1] - 2026-03-17
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
#### Custom LLM Provider Support
|
|
13
|
+
- `llm` configuration section in `amazingteam.config.yaml`
|
|
14
|
+
- Support for custom providers: OpenAI, Anthropic, Bailian, DeepSeek, Moonshot, Zhipu
|
|
15
|
+
- Custom `base_url` for private endpoints
|
|
16
|
+
- `api_key_env` for secure API key management via environment variables
|
|
17
|
+
- Interactive LLM configuration during `amazingteam init`
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
#### Renaming
|
|
22
|
+
- Package renamed from `ai-team-foundation` to `amazingteam`
|
|
23
|
+
- CLI command: `ai-team` → `amazingteam`
|
|
24
|
+
- Config file: `ai-team.config.yaml` → `amazingteam.config.yaml`
|
|
25
|
+
- Workflow template: `ai-team.yml` → `amazingteam.yml`
|
|
26
|
+
- Repository: `your-org/ai-team-foundation` → `Burburton/amazingteam`
|
|
27
|
+
|
|
28
|
+
All references updated across codebase.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
8
32
|
## [3.0.0] - 2026-03-17
|
|
9
33
|
|
|
10
34
|
### Added
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.0.
|
|
1
|
+
3.0.1
|
|
@@ -14,9 +14,22 @@ const TEMP_DIR = path.join(os.tmpdir(), 'amazingteam-cli-test');
|
|
|
14
14
|
function setup() {
|
|
15
15
|
console.log('Setting up test environment...');
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
fs.
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(TEMP_DIR)) {
|
|
19
|
+
fs.rmSync(TEMP_DIR, { recursive: true, force: true });
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
if (err.code === 'EBUSY') {
|
|
23
|
+
console.log(' Note: Temp directory locked, using alternative path');
|
|
24
|
+
const altDir = path.join(os.tmpdir(), `amazingteam-cli-test-${Date.now()}`);
|
|
25
|
+
fs.mkdirSync(altDir, { recursive: true });
|
|
26
|
+
process.chdir(altDir);
|
|
27
|
+
console.log(` Working directory: ${altDir}`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
throw err;
|
|
19
31
|
}
|
|
32
|
+
|
|
20
33
|
fs.mkdirSync(TEMP_DIR, { recursive: true });
|
|
21
34
|
|
|
22
35
|
process.chdir(TEMP_DIR);
|
package/cli/commands/init.cjs
CHANGED
|
@@ -57,8 +57,18 @@ project:
|
|
|
57
57
|
language: "{{LANGUAGE}}"
|
|
58
58
|
framework: "{{FRAMEWORK}}"
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
llm:
|
|
61
|
+
# Provider: default, openai, anthropic, bailian, deepseek, etc.
|
|
62
|
+
provider: "{{LLM_PROVIDER}}"
|
|
63
|
+
model: "{{LLM_MODEL}}"
|
|
64
|
+
small_model: "{{LLM_SMALL_MODEL}}"
|
|
65
|
+
# Uncomment for custom endpoint:
|
|
66
|
+
# base_url: "https://your-api-endpoint.com/v1"
|
|
67
|
+
# API key from environment variable:
|
|
68
|
+
# api_key_env: "YOUR_API_KEY_ENV_NAME"
|
|
69
|
+
|
|
70
|
+
amazingteam:
|
|
71
|
+
version: "{{AMAZINGTEAM_VERSION}}"
|
|
62
72
|
|
|
63
73
|
build:
|
|
64
74
|
command: "{{BUILD_COMMAND}}"
|
|
@@ -76,8 +86,8 @@ rules:
|
|
|
76
86
|
|
|
77
87
|
'opencode.jsonc': `{
|
|
78
88
|
"$schema": "https://opencode.ai/config.json",
|
|
79
|
-
"model": "
|
|
80
|
-
"small_model": "
|
|
89
|
+
"model": "{{LLM_MODEL}}",
|
|
90
|
+
"small_model": "{{LLM_SMALL_MODEL}}",
|
|
81
91
|
"default_agent": "build",
|
|
82
92
|
"instructions": ["AGENTS.md"],
|
|
83
93
|
"autoupdate": true,
|
|
@@ -89,7 +99,7 @@ rules:
|
|
|
89
99
|
"write": true,
|
|
90
100
|
"edit": true,
|
|
91
101
|
"bash": true
|
|
92
|
-
}
|
|
102
|
+
}{{LLM_PROVIDER_CONFIG}}
|
|
93
103
|
}
|
|
94
104
|
`,
|
|
95
105
|
|
|
@@ -232,6 +242,10 @@ async function run(options, positional) {
|
|
|
232
242
|
let framework = options.framework;
|
|
233
243
|
let description = options.description;
|
|
234
244
|
let overlay = options.overlay;
|
|
245
|
+
let llmProvider = options.llmProvider;
|
|
246
|
+
let llmModel = options.llmModel;
|
|
247
|
+
let llmSmallModel = options.llmSmallModel;
|
|
248
|
+
let llmBaseUrl = options.llmBaseUrl;
|
|
235
249
|
|
|
236
250
|
if (!options.language) {
|
|
237
251
|
language = await question(rl, 'Language', 'typescript');
|
|
@@ -251,6 +265,31 @@ async function run(options, positional) {
|
|
|
251
265
|
overlay = overlayAnswer || null;
|
|
252
266
|
}
|
|
253
267
|
|
|
268
|
+
// LLM Configuration
|
|
269
|
+
log('\n🤖 LLM Configuration\n', 'cyan');
|
|
270
|
+
|
|
271
|
+
if (!options.llmProvider) {
|
|
272
|
+
console.log(' Common providers: default, openai, anthropic, bailian, deepseek');
|
|
273
|
+
llmProvider = await question(rl, 'LLM Provider', 'default');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (llmProvider === 'default') {
|
|
277
|
+
llmModel = 'default';
|
|
278
|
+
llmSmallModel = 'default';
|
|
279
|
+
} else {
|
|
280
|
+
if (!options.llmModel) {
|
|
281
|
+
llmModel = await question(rl, 'Model name', 'gpt-4');
|
|
282
|
+
}
|
|
283
|
+
if (!options.llmSmallModel) {
|
|
284
|
+
llmSmallModel = await question(rl, 'Small model (for simple tasks)', llmModel);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (!options.llmBaseUrl && llmProvider !== 'default') {
|
|
289
|
+
const baseUrlAnswer = await question(rl, 'Custom base URL (leave empty for default)', '');
|
|
290
|
+
llmBaseUrl = baseUrlAnswer || null;
|
|
291
|
+
}
|
|
292
|
+
|
|
254
293
|
const langDefaults = getLanguageDefaults(language);
|
|
255
294
|
|
|
256
295
|
log('\n📦 Creating project structure...', 'blue');
|
|
@@ -279,6 +318,18 @@ async function run(options, positional) {
|
|
|
279
318
|
|
|
280
319
|
log('📝 Creating configuration files...', 'blue');
|
|
281
320
|
|
|
321
|
+
// Generate LLM provider config for opencode.jsonc
|
|
322
|
+
let llmProviderConfig = '';
|
|
323
|
+
if (llmProvider !== 'default' && llmBaseUrl) {
|
|
324
|
+
llmProviderConfig = `,
|
|
325
|
+
"providers": {
|
|
326
|
+
"${llmProvider}": {
|
|
327
|
+
"base_url": "${llmBaseUrl}",
|
|
328
|
+
"api_key": "\${${llmProvider.toUpperCase()}_API_KEY}"
|
|
329
|
+
}
|
|
330
|
+
}`;
|
|
331
|
+
}
|
|
332
|
+
|
|
282
333
|
// Generate amazingteam.config.yaml
|
|
283
334
|
let configContent = getTemplate('amazingteam.config.yaml');
|
|
284
335
|
configContent = configContent
|
|
@@ -286,7 +337,10 @@ async function run(options, positional) {
|
|
|
286
337
|
.replace(/\{\{PROJECT_DESCRIPTION\}\}/g, description)
|
|
287
338
|
.replace(/\{\{LANGUAGE\}\}/g, language)
|
|
288
339
|
.replace(/\{\{FRAMEWORK\}\}/g, framework)
|
|
289
|
-
.replace(/\{\{
|
|
340
|
+
.replace(/\{\{AMAZINGTEAM_VERSION\}\}/g, VERSION)
|
|
341
|
+
.replace(/\{\{LLM_PROVIDER\}\}/g, llmProvider)
|
|
342
|
+
.replace(/\{\{LLM_MODEL\}\}/g, llmModel)
|
|
343
|
+
.replace(/\{\{LLM_SMALL_MODEL\}\}/g, llmSmallModel)
|
|
290
344
|
.replace(/\{\{BUILD_COMMAND\}\}/g, langDefaults.buildCommand)
|
|
291
345
|
.replace(/\{\{TEST_COMMAND\}\}/g, langDefaults.testCommand)
|
|
292
346
|
.replace(/\{\{LINT_COMMAND\}\}/g, langDefaults.lintCommand)
|
|
@@ -295,8 +349,14 @@ async function run(options, positional) {
|
|
|
295
349
|
fs.writeFileSync(configPath, configContent);
|
|
296
350
|
|
|
297
351
|
// Generate opencode.jsonc
|
|
352
|
+
let opencodeContent = getTemplate('opencode.jsonc');
|
|
353
|
+
opencodeContent = opencodeContent
|
|
354
|
+
.replace(/\{\{LLM_MODEL\}\}/g, llmProvider === 'default' ? 'default' : `${llmProvider}/${llmModel}`)
|
|
355
|
+
.replace(/\{\{LLM_SMALL_MODEL\}\}/g, llmProvider === 'default' ? 'default' : `${llmProvider}/${llmSmallModel}`)
|
|
356
|
+
.replace(/\{\{LLM_PROVIDER_CONFIG\}\}/g, llmProviderConfig);
|
|
357
|
+
|
|
298
358
|
const opencodePath = path.join(projectPath, 'opencode.jsonc');
|
|
299
|
-
fs.writeFileSync(opencodePath,
|
|
359
|
+
fs.writeFileSync(opencodePath, opencodeContent);
|
|
300
360
|
|
|
301
361
|
// Generate workflow
|
|
302
362
|
const workflowPath = path.join(projectPath, '.github', 'workflows', 'amazingteam.yml');
|
package/docs/config-reference.md
CHANGED
|
@@ -90,6 +90,7 @@ overlay:
|
|
|
90
90
|
| `version` | string | No | `"1.0"` | Config file schema version |
|
|
91
91
|
| `preset` | string | No | `"default"` | Preset name (default, typescript, python, go) |
|
|
92
92
|
| `project` | object | **Yes** | - | Project information |
|
|
93
|
+
| `llm` | object | No | Default | LLM provider configuration |
|
|
93
94
|
| `build` | object | No | Preset default | Build commands |
|
|
94
95
|
| `rules` | object | No | Preset default | Coding rules |
|
|
95
96
|
| `agents` | object | No | All enabled | Agent configuration |
|
|
@@ -131,6 +132,87 @@ project:
|
|
|
131
132
|
|
|
132
133
|
---
|
|
133
134
|
|
|
135
|
+
### llm
|
|
136
|
+
|
|
137
|
+
LLM provider configuration for custom AI backends.
|
|
138
|
+
|
|
139
|
+
| Field | Type | Required | Default | Description |
|
|
140
|
+
|-------|------|----------|---------|-------------|
|
|
141
|
+
| `provider` | string | No | `"default"` | Provider name (default, openai, anthropic, bailian, deepseek, etc.) |
|
|
142
|
+
| `model` | string | No | `"default"` | Model name for main tasks |
|
|
143
|
+
| `small_model` | string | No | Same as model | Model for simple tasks |
|
|
144
|
+
| `base_url` | string | No | Provider default | Custom API endpoint |
|
|
145
|
+
| `api_key_env` | string | No | - | Environment variable name for API key |
|
|
146
|
+
|
|
147
|
+
**Supported Providers:**
|
|
148
|
+
|
|
149
|
+
| Provider | base_url | Notes |
|
|
150
|
+
|----------|----------|-------|
|
|
151
|
+
| `default` | - | Uses OpenCode's default configuration |
|
|
152
|
+
| `openai` | `https://api.openai.com/v1` | OpenAI GPT models |
|
|
153
|
+
| `anthropic` | `https://api.anthropic.com` | Claude models |
|
|
154
|
+
| `bailian` | `https://bailian.aliyuncs.com/v1` | Alibaba Bailian (百炼) |
|
|
155
|
+
| `deepseek` | `https://api.deepseek.com` | DeepSeek models |
|
|
156
|
+
| `moonshot` | `https://api.moonshot.cn/v1` | Moonshot (月之暗面) |
|
|
157
|
+
| `zhipu` | `https://open.bigmodel.cn/api/paas/v4` | Zhipu AI (智谱) |
|
|
158
|
+
|
|
159
|
+
**Examples:**
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
# Use default (OpenCode handles configuration)
|
|
163
|
+
llm:
|
|
164
|
+
provider: "default"
|
|
165
|
+
|
|
166
|
+
# Use Alibaba Bailian (百炼)
|
|
167
|
+
llm:
|
|
168
|
+
provider: "bailian"
|
|
169
|
+
model: "qwen-max"
|
|
170
|
+
small_model: "qwen-turbo"
|
|
171
|
+
base_url: "https://bailian.aliyuncs.com/v1"
|
|
172
|
+
api_key_env: "BAILIAN_API_KEY"
|
|
173
|
+
|
|
174
|
+
# Use OpenAI
|
|
175
|
+
llm:
|
|
176
|
+
provider: "openai"
|
|
177
|
+
model: "gpt-4"
|
|
178
|
+
small_model: "gpt-3.5-turbo"
|
|
179
|
+
|
|
180
|
+
# Use DeepSeek
|
|
181
|
+
llm:
|
|
182
|
+
provider: "deepseek"
|
|
183
|
+
model: "deepseek-chat"
|
|
184
|
+
small_model: "deepseek-chat"
|
|
185
|
+
|
|
186
|
+
# Custom endpoint
|
|
187
|
+
llm:
|
|
188
|
+
provider: "custom"
|
|
189
|
+
model: "my-model"
|
|
190
|
+
base_url: "https://my-api.example.com/v1"
|
|
191
|
+
api_key_env: "CUSTOM_API_KEY"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Environment Variables:**
|
|
195
|
+
|
|
196
|
+
Set your API key in environment:
|
|
197
|
+
```bash
|
|
198
|
+
# For Bailian
|
|
199
|
+
export BAILIAN_API_KEY="your-api-key"
|
|
200
|
+
|
|
201
|
+
# For OpenAI
|
|
202
|
+
export OPENAI_API_KEY="your-api-key"
|
|
203
|
+
|
|
204
|
+
# For DeepSeek
|
|
205
|
+
export DEEPSEEK_API_KEY="your-api-key"
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
In GitHub Actions, add to your workflow:
|
|
209
|
+
```yaml
|
|
210
|
+
env:
|
|
211
|
+
BAILIAN_API_KEY: ${{ secrets.BAILIAN_API_KEY }}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
134
216
|
### build
|
|
135
217
|
|
|
136
218
|
Build and test commands.
|
package/docs/quick-start-v3.md
CHANGED
|
@@ -52,6 +52,10 @@ my-project/
|
|
|
52
52
|
project:
|
|
53
53
|
name: "my-project"
|
|
54
54
|
language: "typescript"
|
|
55
|
+
|
|
56
|
+
# LLM Configuration (optional)
|
|
57
|
+
llm:
|
|
58
|
+
provider: "default" # Use OpenCode default
|
|
55
59
|
```
|
|
56
60
|
|
|
57
61
|
### Full Configuration
|
|
@@ -66,6 +70,14 @@ project:
|
|
|
66
70
|
language: "typescript"
|
|
67
71
|
framework: "react"
|
|
68
72
|
|
|
73
|
+
# LLM Configuration - Use your own AI provider
|
|
74
|
+
llm:
|
|
75
|
+
provider: "bailian" # or: openai, anthropic, deepseek, etc.
|
|
76
|
+
model: "qwen-max" # Main model for complex tasks
|
|
77
|
+
small_model: "qwen-turbo" # Faster model for simple tasks
|
|
78
|
+
base_url: "https://bailian.aliyuncs.com/v1"
|
|
79
|
+
api_key_env: "BAILIAN_API_KEY" # Env var name (not the actual key!)
|
|
80
|
+
|
|
69
81
|
# Build commands (override defaults)
|
|
70
82
|
build:
|
|
71
83
|
command: "npm run build"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amazingteam",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "AI-powered autonomous development team foundation - Reusable development scaffolding with controlled self-bootstrap capability",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/presets/default.yaml
CHANGED
package/templates/opencode.jsonc
CHANGED
|
@@ -1,216 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://opencode.ai/schema.json",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
"model": "{{LLM_MODEL}}",
|
|
4
|
+
"small_model": "{{LLM_SMALL_MODEL}}",
|
|
5
|
+
"default_agent": "build",
|
|
6
|
+
"instructions": ["AGENTS.md"],
|
|
7
|
+
"autoupdate": true,
|
|
8
|
+
"permission": {
|
|
9
|
+
"edit": "ask",
|
|
10
|
+
"bash": "ask"
|
|
9
11
|
},
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"commands": [],
|
|
16
|
-
"memory": {
|
|
17
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/planner/", ".ai-team/memory/architect/", ".ai-team/memory/triage/", ".ai-team/memory/failures/", "tasks/"],
|
|
18
|
-
"write": [".ai-team/memory/planner/", "tasks/{task_id}/task.yaml"]
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"architect": {
|
|
22
|
-
"description": "Analyzes requirements and designs solutions",
|
|
23
|
-
"model": "default",
|
|
24
|
-
"skills": ["repo-architecture-reader"],
|
|
25
|
-
"commands": ["/design"],
|
|
26
|
-
"memory": {
|
|
27
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/planner/", ".ai-team/memory/architect/", ".ai-team/memory/developer/", ".ai-team/memory/failures/", "tasks/"],
|
|
28
|
-
"write": [".ai-team/memory/architect/", "tasks/{task_id}/analysis.md", "tasks/{task_id}/design.md"]
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"developer": {
|
|
32
|
-
"description": "Implements features and fixes bugs",
|
|
33
|
-
"model": "default",
|
|
34
|
-
"skills": ["test-first-feature-dev", "bugfix-playbook"],
|
|
35
|
-
"commands": ["/implement"],
|
|
36
|
-
"memory": {
|
|
37
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/planner/", ".ai-team/memory/architect/", ".ai-team/memory/developer/", ".ai-team/memory/failures/", "tasks/{task_id}/"],
|
|
38
|
-
"write": [".ai-team/memory/developer/", "tasks/{task_id}/implementation.md", "src/", "tests/"]
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
"qa": {
|
|
42
|
-
"description": "Validates implementations and ensures quality",
|
|
43
|
-
"model": "default",
|
|
44
|
-
"skills": ["test-first-feature-dev", "regression-checklist"],
|
|
45
|
-
"commands": ["/test"],
|
|
46
|
-
"memory": {
|
|
47
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/planner/", ".ai-team/memory/architect/", ".ai-team/memory/qa/", ".ai-team/memory/failures/", "tasks/{task_id}/"],
|
|
48
|
-
"write": [".ai-team/memory/qa/", "tasks/{task_id}/validation.md", "tests/"]
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"reviewer": {
|
|
52
|
-
"description": "Reviews code for quality and correctness",
|
|
53
|
-
"model": "default",
|
|
54
|
-
"skills": ["safe-refactor-checklist", "regression-checklist", "release-readiness-check"],
|
|
55
|
-
"commands": ["/review", "/release-check"],
|
|
56
|
-
"memory": {
|
|
57
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/", ".ai-team/memory/failures/", "tasks/{task_id}/"],
|
|
58
|
-
"write": [".ai-team/memory/reviewer/", "tasks/{task_id}/review.md", "tasks/{task_id}/release.md"]
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"triage": {
|
|
62
|
-
"description": "Classifies issues and performs first-pass debug analysis",
|
|
63
|
-
"model": "default",
|
|
64
|
-
"skills": ["issue-triage", "bugfix-playbook"],
|
|
65
|
-
"commands": ["/triage"],
|
|
66
|
-
"memory": {
|
|
67
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/triage/", ".ai-team/memory/failures/", "tasks/{task_id}/"],
|
|
68
|
-
"write": [".ai-team/memory/triage/", "tasks/{task_id}/"]
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
"ci-analyst": {
|
|
72
|
-
"description": "Investigates CI failures and documents patterns",
|
|
73
|
-
"model": "default",
|
|
74
|
-
"skills": ["ci-failure-analysis", "bugfix-playbook"],
|
|
75
|
-
"commands": ["/ci-analyze"],
|
|
76
|
-
"memory": {
|
|
77
|
-
"read": ["docs/", "AGENTS.md", ".ai-team/memory/ci-analyst/", ".ai-team/memory/failures/", "tasks/{task_id}/", "docs/runbooks/ci/"],
|
|
78
|
-
"write": [".ai-team/memory/ci-analyst/", ".ai-team/memory/failures/", "tasks/{task_id}/"]
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
"skills": {
|
|
83
|
-
"repo-architecture-reader": {
|
|
84
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/repo-architecture-reader/SKILL.md"
|
|
85
|
-
},
|
|
86
|
-
"bugfix-playbook": {
|
|
87
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/bugfix-playbook/SKILL.md"
|
|
88
|
-
},
|
|
89
|
-
"test-first-feature-dev": {
|
|
90
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/test-first-feature-dev/SKILL.md"
|
|
91
|
-
},
|
|
92
|
-
"safe-refactor-checklist": {
|
|
93
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/safe-refactor-checklist/SKILL.md"
|
|
94
|
-
},
|
|
95
|
-
"task-breakdown-and-dispatch": {
|
|
96
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/task-breakdown-and-dispatch/SKILL.md"
|
|
97
|
-
},
|
|
98
|
-
"issue-triage": {
|
|
99
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/issue-triage/SKILL.md"
|
|
100
|
-
},
|
|
101
|
-
"ci-failure-analysis": {
|
|
102
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/ci-failure-analysis/SKILL.md"
|
|
103
|
-
},
|
|
104
|
-
"regression-checklist": {
|
|
105
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/regression-checklist/SKILL.md"
|
|
106
|
-
},
|
|
107
|
-
"release-readiness-check": {
|
|
108
|
-
"path": "{{FOUNDATION_PATH}}/.opencode/skills/release-readiness-check/SKILL.md"
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
"commands": {
|
|
112
|
-
"/triage": {
|
|
113
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/triage.md",
|
|
114
|
-
"agent": "triage"
|
|
115
|
-
},
|
|
116
|
-
"/design": {
|
|
117
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/design.md",
|
|
118
|
-
"agent": "architect"
|
|
119
|
-
},
|
|
120
|
-
"/implement": {
|
|
121
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/implement.md",
|
|
122
|
-
"agent": "developer"
|
|
123
|
-
},
|
|
124
|
-
"/test": {
|
|
125
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/test.md",
|
|
126
|
-
"agent": "qa"
|
|
127
|
-
},
|
|
128
|
-
"/review": {
|
|
129
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/review.md",
|
|
130
|
-
"agent": "reviewer"
|
|
131
|
-
},
|
|
132
|
-
"/ci-analyze": {
|
|
133
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/ci-analyze.md",
|
|
134
|
-
"agent": "ci-analyst"
|
|
135
|
-
},
|
|
136
|
-
"/release-check": {
|
|
137
|
-
"path": "{{FOUNDATION_PATH}}/.ai-team/commands/release-check.md",
|
|
138
|
-
"agent": "reviewer"
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
"workflows": {
|
|
142
|
-
"feature": ["planner", "architect", "developer", "qa", "reviewer"],
|
|
143
|
-
"bugfix": ["triage", "architect", "developer", "qa", "reviewer"],
|
|
144
|
-
"refactor": ["architect", "developer", "reviewer"],
|
|
145
|
-
"ci-failure": ["ci-analyst", "developer", "qa"],
|
|
146
|
-
"release": ["reviewer"]
|
|
147
|
-
},
|
|
148
|
-
"memory": {
|
|
149
|
-
"global": {
|
|
150
|
-
"locations": ["docs/", "AGENTS.md"],
|
|
151
|
-
"writeRequiresApproval": true
|
|
152
|
-
},
|
|
153
|
-
"role": {
|
|
154
|
-
"base_path": ".ai-team/memory",
|
|
155
|
-
"roles": {
|
|
156
|
-
"planner": {
|
|
157
|
-
"files": ["decomposition_notes.md", "flow_rules.md", "github_issue_patterns.md"]
|
|
158
|
-
},
|
|
159
|
-
"architect": {
|
|
160
|
-
"files": ["architecture_notes.md", "module_map.md", "design_rationale.md"]
|
|
161
|
-
},
|
|
162
|
-
"developer": {
|
|
163
|
-
"files": ["implementation_notes.md", "bug_investigation.md", "build_issues.md"]
|
|
164
|
-
},
|
|
165
|
-
"qa": {
|
|
166
|
-
"files": ["test_strategy.md", "regression_cases.md", "validation_notes.md"]
|
|
167
|
-
},
|
|
168
|
-
"reviewer": {
|
|
169
|
-
"files": ["review_notes.md", "quality_rules.md", "recurring_risks.md"]
|
|
170
|
-
},
|
|
171
|
-
"triage": {
|
|
172
|
-
"files": ["classification_heuristics.md", "debug_notes.md"]
|
|
173
|
-
},
|
|
174
|
-
"ci-analyst": {
|
|
175
|
-
"files": ["failure_patterns.md", "runbook_references.md"]
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
"failures": {
|
|
180
|
-
"path": ".ai-team/memory/failures",
|
|
181
|
-
"files": ["failure_library.md"],
|
|
182
|
-
"writableBy": ["ci-analyst"]
|
|
183
|
-
},
|
|
184
|
-
"task": {
|
|
185
|
-
"base_path": "tasks",
|
|
186
|
-
"naming": "issue-{issue_id}",
|
|
187
|
-
"files": ["task.yaml", "analysis.md", "design.md", "implementation.md", "validation.md", "review.md", "release.md"],
|
|
188
|
-
"autoCreate": true,
|
|
189
|
-
"preserveAfterCompletion": true
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
"rules": {
|
|
193
|
-
"maxChangesPerCommit": 10,
|
|
194
|
-
"requireTests": true,
|
|
195
|
-
"requireReview": true,
|
|
196
|
-
"autoMerge": false,
|
|
197
|
-
"memoryIsolation": true,
|
|
198
|
-
"protectedPaths": ["docs/architecture/", "docs/decisions/"],
|
|
199
|
-
"humanApprovalRequired": ["architecture changes", "release operations", "breaking changes"]
|
|
200
|
-
},
|
|
201
|
-
"integrations": {
|
|
202
|
-
"github": {
|
|
203
|
-
"enabled": true,
|
|
204
|
-
"autoLabel": true,
|
|
205
|
-
"autoAssign": true
|
|
206
|
-
},
|
|
207
|
-
"ci": {
|
|
208
|
-
"enabled": true,
|
|
209
|
-
"requirePassing": true,
|
|
210
|
-
"failureAnalysis": {
|
|
211
|
-
"enabled": true,
|
|
212
|
-
"agent": "ci-analyst"
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
12
|
+
"tools": {
|
|
13
|
+
"write": true,
|
|
14
|
+
"edit": true,
|
|
15
|
+
"bash": true
|
|
16
|
+
}{{LLM_PROVIDER_CONFIG}}
|
|
216
17
|
}
|