amazingteam 3.0.0
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/.ai-team/agents/architect.md +144 -0
- package/.ai-team/agents/ci-analyst.md +188 -0
- package/.ai-team/agents/developer.md +176 -0
- package/.ai-team/agents/planner.md +355 -0
- package/.ai-team/agents/qa.md +189 -0
- package/.ai-team/agents/reviewer.md +211 -0
- package/.ai-team/agents/triage.md +146 -0
- package/.ai-team/commands/ci-analyze.md +116 -0
- package/.ai-team/commands/design.md +100 -0
- package/.ai-team/commands/implement.md +108 -0
- package/.ai-team/commands/release-check.md +142 -0
- package/.ai-team/commands/review.md +142 -0
- package/.ai-team/commands/test.md +115 -0
- package/.ai-team/commands/triage.md +138 -0
- package/.ai-team/memory/architect/architecture_notes.md +67 -0
- package/.ai-team/memory/architect/design_rationale.md +113 -0
- package/.ai-team/memory/architect/module_map.md +84 -0
- package/.ai-team/memory/ci-analyst/failure_patterns.md +102 -0
- package/.ai-team/memory/ci-analyst/runbook_references.md +87 -0
- package/.ai-team/memory/developer/bug_investigation.md +102 -0
- package/.ai-team/memory/developer/build_issues.md +115 -0
- package/.ai-team/memory/developer/implementation_notes.md +83 -0
- package/.ai-team/memory/failures/failure_library.md +103 -0
- package/.ai-team/memory/planner/decomposition_notes.md +82 -0
- package/.ai-team/memory/planner/flow_rules.md +86 -0
- package/.ai-team/memory/planner/github_issue_patterns.md +229 -0
- package/.ai-team/memory/qa/regression_cases.md +101 -0
- package/.ai-team/memory/qa/test_strategy.md +138 -0
- package/.ai-team/memory/qa/validation_notes.md +110 -0
- package/.ai-team/memory/reviewer/quality_rules.md +105 -0
- package/.ai-team/memory/reviewer/recurring_risks.md +109 -0
- package/.ai-team/memory/reviewer/review_notes.md +124 -0
- package/.ai-team/memory/triage/classification_heuristics.md +82 -0
- package/.ai-team/memory/triage/debug_notes.md +87 -0
- package/.ai-team/opencode.template.jsonc +216 -0
- package/.ai-team/skills/bugfix-playbook/skill.md +174 -0
- package/.ai-team/skills/ci-failure-analysis/skill.md +176 -0
- package/.ai-team/skills/issue-triage/skill.md +163 -0
- package/.ai-team/skills/regression-checklist/skill.md +176 -0
- package/.ai-team/skills/release-readiness-check/skill.md +216 -0
- package/.ai-team/skills/repo-architecture-reader/skill.md +139 -0
- package/.ai-team/skills/safe-refactor-checklist/skill.md +215 -0
- package/.ai-team/skills/task-breakdown-and-dispatch/skill.md +151 -0
- package/.ai-team/skills/test-first-feature-dev/skill.md +205 -0
- package/.ai-team/workflows/ci.yml +81 -0
- package/.ai-team/workflows/nightly-ai-maintenance.yml +129 -0
- package/.ai-team/workflows/opencode.yml +33 -0
- package/.ai-team/workflows/pr-check.yml +41 -0
- package/.foundation/foundation.lock +38 -0
- package/.foundation/local-overrides.md +97 -0
- package/.foundation/upgrade-history.md +38 -0
- package/.opencode/agents/architect.md +38 -0
- package/.opencode/agents/ci-analyst.md +38 -0
- package/.opencode/agents/developer.md +43 -0
- package/.opencode/agents/planner.md +47 -0
- package/.opencode/agents/qa.md +34 -0
- package/.opencode/agents/reviewer.md +38 -0
- package/.opencode/agents/triage.md +37 -0
- package/.opencode/commands/auto.md +264 -0
- package/.opencode/commands/breakdown-issue.md +94 -0
- package/.opencode/commands/ci-analyze.md +15 -0
- package/.opencode/commands/close-parent-task.md +122 -0
- package/.opencode/commands/design.md +15 -0
- package/.opencode/commands/dispatch-next.md +102 -0
- package/.opencode/commands/implement.md +16 -0
- package/.opencode/commands/release-check.md +16 -0
- package/.opencode/commands/resume.md +88 -0
- package/.opencode/commands/review.md +15 -0
- package/.opencode/commands/show-blockers.md +97 -0
- package/.opencode/commands/summarize-parent.md +121 -0
- package/.opencode/commands/test.md +15 -0
- package/.opencode/commands/triage.md +109 -0
- package/.opencode/skills/bugfix-playbook/SKILL.md +81 -0
- package/.opencode/skills/ci-failure-analysis/SKILL.md +94 -0
- package/.opencode/skills/issue-triage/SKILL.md +80 -0
- package/.opencode/skills/regression-checklist/SKILL.md +81 -0
- package/.opencode/skills/release-readiness-check/SKILL.md +81 -0
- package/.opencode/skills/repo-architecture-reader/SKILL.md +65 -0
- package/.opencode/skills/safe-refactor-checklist/SKILL.md +76 -0
- package/.opencode/skills/task-breakdown-and-dispatch/SKILL.md +255 -0
- package/.opencode/skills/test-first-feature-dev/SKILL.md +78 -0
- package/AGENTS.md +879 -0
- package/CHANGELOG.md +261 -0
- package/LICENSE +21 -0
- package/README.md +1215 -0
- package/VERSION +1 -0
- package/action/__tests__/downloader.test.js +251 -0
- package/action/__tests__/merger.test.js +156 -0
- package/action/__tests__/path-resolver.test.js +199 -0
- package/action/__tests__/validator.test.js +310 -0
- package/action/action.yml +61 -0
- package/action/index.js +223 -0
- package/action/lib/downloader.js +344 -0
- package/action/lib/merger.js +170 -0
- package/action/lib/path-resolver.js +176 -0
- package/action/lib/setup.js +286 -0
- package/action/lib/validator.js +324 -0
- package/cli/__tests__/cli.test.js +270 -0
- package/cli/amazingteam.cjs +225 -0
- package/cli/commands/check-update.cjs +159 -0
- package/cli/commands/init.cjs +412 -0
- package/cli/commands/local.cjs +264 -0
- package/cli/commands/migrate.cjs +316 -0
- package/cli/commands/status.cjs +241 -0
- package/cli/commands/upgrade.cjs +213 -0
- package/cli/commands/validate.cjs +259 -0
- package/cli/commands/version.cjs +59 -0
- package/cli/sync.cjs +237 -0
- package/dist/index.js +35 -0
- package/docs/architecture/overview.md +138 -0
- package/docs/blocker_resolution_design.md +372 -0
- package/docs/bootstrap-model.md +356 -0
- package/docs/config-reference.md +458 -0
- package/docs/how-to-use.md +178 -0
- package/docs/migration-to-v3.md +355 -0
- package/docs/overlay-guide.md +156 -0
- package/docs/patterns/README.md +67 -0
- package/docs/quick-start-v3.md +330 -0
- package/docs/releases/README.md +64 -0
- package/docs/runbooks/ci/README.md +62 -0
- package/docs/runbooks/ci/build-debug.md +120 -0
- package/docs/runbooks/ci/flaky-tests.md +127 -0
- package/docs/runbooks/getting-started.md +81 -0
- package/docs/upgrade-policy.md +188 -0
- package/docs/versioning.md +199 -0
- package/overlays/README.md +30 -0
- package/overlays/ai-agent-product/.ai-team/skills/llm-integration/skill.md +99 -0
- package/overlays/ai-agent-product/docs/ai-agent-architecture.md +68 -0
- package/overlays/ai-agent-product/overlay.yaml +26 -0
- package/overlays/cpp-qt-desktop/.ai-team/skills/qt-signals-slots/skill.md +60 -0
- package/overlays/cpp-qt-desktop/docs/qt-conventions.md +64 -0
- package/overlays/cpp-qt-desktop/overlay.yaml +22 -0
- package/overlays/python-backend/.ai-team/skills/python-testing/skill.md +90 -0
- package/overlays/python-backend/docs/python-style.md +78 -0
- package/overlays/python-backend/overlay.yaml +22 -0
- package/overlays/web-fullstack/.ai-team/skills/frontend-testing/skill.md +70 -0
- package/overlays/web-fullstack/docs/frontend-conventions.md +68 -0
- package/overlays/web-fullstack/overlay.yaml +26 -0
- package/package.json +84 -0
- package/presets/default.yaml +161 -0
- package/presets/go.yaml +43 -0
- package/presets/python.yaml +43 -0
- package/presets/typescript.yaml +40 -0
- package/schemas/config.schema.json +239 -0
- package/scripts/diff_foundation_vs_project.sh +134 -0
- package/scripts/generate_docs.sh +200 -0
- package/scripts/init_project.sh +455 -0
- package/scripts/plan_upgrade.sh +268 -0
- package/scripts/upgrade_foundation.sh +365 -0
- package/scripts/validate-foundation.cjs +278 -0
- package/scripts/validate_foundation.sh +192 -0
- package/scripts/validate_project_setup.sh +171 -0
- package/tasks/README.md +94 -0
- package/tasks/_template/analysis.md +76 -0
- package/tasks/_template/design.md +121 -0
- package/tasks/_template/implementation.md +121 -0
- package/tasks/_template/release.md +119 -0
- package/tasks/_template/review.md +131 -0
- package/tasks/_template/subtasks/task.yaml +24 -0
- package/tasks/_template/task.yaml +75 -0
- package/tasks/_template/validation.md +128 -0
- package/templates/amazingteam.yml +81 -0
- package/templates/gitignore +14 -0
- package/templates/opencode.jsonc +216 -0
package/cli/sync.cjs
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
|
|
7
|
+
const COLORS = {
|
|
8
|
+
reset: '\x1b[0m',
|
|
9
|
+
green: '\x1b[32m',
|
|
10
|
+
yellow: '\x1b[33m',
|
|
11
|
+
blue: '\x1b[34m',
|
|
12
|
+
red: '\x1b[31m',
|
|
13
|
+
cyan: '\x1b[36m',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
function log(message, color = 'reset') {
|
|
17
|
+
console.log(`${COLORS[color]}${message}${COLORS.reset}`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const TEMPLATE_FILES = [
|
|
21
|
+
'.ai-team/agents/architect.md',
|
|
22
|
+
'.ai-team/agents/developer.md',
|
|
23
|
+
'.ai-team/agents/qa.md',
|
|
24
|
+
'.ai-team/agents/reviewer.md',
|
|
25
|
+
'.ai-team/skills/bugfix-playbook/skill.md',
|
|
26
|
+
'.ai-team/skills/repo-architecture-reader/skill.md',
|
|
27
|
+
'.ai-team/skills/safe-refactor-checklist/skill.md',
|
|
28
|
+
'.ai-team/skills/test-first-feature-dev/skill.md',
|
|
29
|
+
'.ai-team/commands/design.md',
|
|
30
|
+
'.ai-team/commands/implement.md',
|
|
31
|
+
'.ai-team/commands/review.md',
|
|
32
|
+
'.ai-team/commands/test.md',
|
|
33
|
+
'.ai-team/commands/triage.md',
|
|
34
|
+
'.ai-team/workflows/opencode.yml',
|
|
35
|
+
'.ai-team/workflows/ci.yml',
|
|
36
|
+
'.ai-team/workflows/pr-check.yml',
|
|
37
|
+
'.ai-team/workflows/nightly-ai-maintenance.yml',
|
|
38
|
+
'.ai-team/memory/architect/architecture_notes.md',
|
|
39
|
+
'.ai-team/memory/architect/module_map.md',
|
|
40
|
+
'.ai-team/memory/architect/design_rationale.md',
|
|
41
|
+
'.ai-team/memory/developer/implementation_notes.md',
|
|
42
|
+
'.ai-team/memory/developer/bug_investigation.md',
|
|
43
|
+
'.ai-team/memory/developer/build_issues.md',
|
|
44
|
+
'.ai-team/memory/qa/test_strategy.md',
|
|
45
|
+
'.ai-team/memory/qa/regression_cases.md',
|
|
46
|
+
'.ai-team/memory/qa/validation_notes.md',
|
|
47
|
+
'.ai-team/memory/reviewer/review_notes.md',
|
|
48
|
+
'.ai-team/memory/reviewer/quality_rules.md',
|
|
49
|
+
'.ai-team/memory/reviewer/recurring_risks.md',
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const USER_CONFIGURABLE_FILES = [
|
|
53
|
+
'AGENTS.md',
|
|
54
|
+
'ai-team.config.yaml',
|
|
55
|
+
'.github/ISSUE_TEMPLATE/',
|
|
56
|
+
'.github/pull_request_template.md',
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
function getTemplateVersion() {
|
|
60
|
+
const pkgPath = path.join(__dirname, '..', 'package.json');
|
|
61
|
+
if (fs.existsSync(pkgPath)) {
|
|
62
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
63
|
+
return pkg.version || '1.0.0';
|
|
64
|
+
}
|
|
65
|
+
return '1.0.0';
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function fileExists(filePath) {
|
|
69
|
+
return fs.existsSync(filePath);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function ensureDir(filePath) {
|
|
73
|
+
const dir = path.dirname(filePath);
|
|
74
|
+
if (!fs.existsSync(dir)) {
|
|
75
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function copyTemplateFile(src, dest, templateDir) {
|
|
80
|
+
const srcPath = path.join(templateDir, src);
|
|
81
|
+
const destPath = dest;
|
|
82
|
+
|
|
83
|
+
if (fs.existsSync(srcPath)) {
|
|
84
|
+
ensureDir(destPath);
|
|
85
|
+
fs.copyFileSync(srcPath, destPath);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function mergeYamlConfig(existingPath, templatePath, newPath) {
|
|
92
|
+
if (!fs.existsSync(existingPath)) {
|
|
93
|
+
if (fs.existsSync(templatePath)) {
|
|
94
|
+
fs.copyFileSync(templatePath, newPath);
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const existing = fs.readFileSync(existingPath, 'utf-8');
|
|
100
|
+
|
|
101
|
+
const versionMatch = existing.match(/version:\s*["']([^"']+)["']/);
|
|
102
|
+
const currentVersion = versionMatch ? versionMatch[1] : '0.0.0';
|
|
103
|
+
|
|
104
|
+
const newVersion = getTemplateVersion();
|
|
105
|
+
|
|
106
|
+
let updated = existing.replace(
|
|
107
|
+
/version:\s*["'][^"']+["']/,
|
|
108
|
+
`version: "${newVersion}"`
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
updated = updated.replace(
|
|
112
|
+
/last_sync:\s*(null|["'][^"']+["'])/,
|
|
113
|
+
`last_sync: "${new Date().toISOString()}"`
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
fs.writeFileSync(newPath, updated);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function checkForUpdates(templateRepo) {
|
|
120
|
+
try {
|
|
121
|
+
log('Checking for updates...', 'cyan');
|
|
122
|
+
|
|
123
|
+
const result = execSync(
|
|
124
|
+
`git ls-remote ${templateRepo} HEAD`,
|
|
125
|
+
{ encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }
|
|
126
|
+
).trim();
|
|
127
|
+
|
|
128
|
+
const latestCommit = result.split(/\s+/)[0];
|
|
129
|
+
|
|
130
|
+
const currentCommit = execSync(
|
|
131
|
+
'git rev-parse HEAD 2>/dev/null || echo "unknown"',
|
|
132
|
+
{ encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }
|
|
133
|
+
).trim();
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
hasUpdate: latestCommit !== currentCommit,
|
|
137
|
+
latestCommit,
|
|
138
|
+
currentCommit,
|
|
139
|
+
};
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
hasUpdate: false,
|
|
143
|
+
error: error.message,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function syncFromTemplate(projectDir, templateDir, options = {}) {
|
|
149
|
+
log('\n📦 Syncing AI Team template files...\n', 'cyan');
|
|
150
|
+
|
|
151
|
+
const backupDir = path.join(projectDir, `.ai-team-backup-${Date.now()}`);
|
|
152
|
+
|
|
153
|
+
if (fs.existsSync(path.join(projectDir, '.ai-team'))) {
|
|
154
|
+
if (options.backup !== false) {
|
|
155
|
+
log('Creating backup...', 'blue');
|
|
156
|
+
fs.cpSync(
|
|
157
|
+
path.join(projectDir, '.ai-team'),
|
|
158
|
+
backupDir,
|
|
159
|
+
{ recursive: true }
|
|
160
|
+
);
|
|
161
|
+
log(`Backup created: ${backupDir}`, 'yellow');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
log('\nUpdating core files...', 'blue');
|
|
166
|
+
let updatedCount = 0;
|
|
167
|
+
|
|
168
|
+
TEMPLATE_FILES.forEach(file => {
|
|
169
|
+
const srcPath = path.join(templateDir, file);
|
|
170
|
+
const destPath = path.join(projectDir, file);
|
|
171
|
+
|
|
172
|
+
if (fs.existsSync(srcPath)) {
|
|
173
|
+
ensureDir(destPath);
|
|
174
|
+
fs.copyFileSync(srcPath, destPath);
|
|
175
|
+
updatedCount++;
|
|
176
|
+
log(` ✓ ${file}`, 'green');
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
if (!fs.existsSync(path.join(projectDir, '.github/workflows'))) {
|
|
181
|
+
fs.mkdirSync(path.join(projectDir, '.github/workflows'), { recursive: true });
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const workflowFiles = [
|
|
185
|
+
'opencode.yml',
|
|
186
|
+
'ci.yml',
|
|
187
|
+
'pr-check.yml',
|
|
188
|
+
'nightly-ai-maintenance.yml',
|
|
189
|
+
];
|
|
190
|
+
|
|
191
|
+
workflowFiles.forEach(file => {
|
|
192
|
+
const srcPath = path.join(templateDir, '.ai-team/workflows', file);
|
|
193
|
+
const destPath = path.join(projectDir, '.github/workflows', file);
|
|
194
|
+
|
|
195
|
+
if (fs.existsSync(srcPath)) {
|
|
196
|
+
fs.copyFileSync(srcPath, destPath);
|
|
197
|
+
log(` ✓ .github/workflows/${file}`, 'green');
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
log(`\n✅ Updated ${updatedCount + workflowFiles.length} files\n`, 'green');
|
|
202
|
+
|
|
203
|
+
return backupDir;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function detectConflicts(projectDir, templateDir) {
|
|
207
|
+
const conflicts = [];
|
|
208
|
+
|
|
209
|
+
USER_CONFIGURABLE_FILES.forEach(file => {
|
|
210
|
+
const projectFile = path.join(projectDir, file);
|
|
211
|
+
const templateFile = path.join(templateDir, file);
|
|
212
|
+
|
|
213
|
+
if (fs.existsSync(projectFile) && fs.existsSync(templateFile)) {
|
|
214
|
+
const projectContent = fs.readFileSync(projectFile, 'utf-8');
|
|
215
|
+
const templateContent = fs.readFileSync(templateFile, 'utf-8');
|
|
216
|
+
|
|
217
|
+
if (projectContent !== templateContent) {
|
|
218
|
+
conflicts.push({
|
|
219
|
+
file,
|
|
220
|
+
type: 'modified',
|
|
221
|
+
action: 'skip',
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
return conflicts;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
module.exports = {
|
|
231
|
+
getTemplateVersion,
|
|
232
|
+
syncFromTemplate,
|
|
233
|
+
checkForUpdates,
|
|
234
|
+
detectConflicts,
|
|
235
|
+
TEMPLATE_FILES,
|
|
236
|
+
USER_CONFIGURABLE_FILES,
|
|
237
|
+
};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AGENTS = exports.VERSION = void 0;
|
|
4
|
+
exports.getAgent = getAgent;
|
|
5
|
+
exports.listAgents = listAgents;
|
|
6
|
+
exports.VERSION = '1.0.0';
|
|
7
|
+
exports.AGENTS = {
|
|
8
|
+
architect: {
|
|
9
|
+
name: 'architect',
|
|
10
|
+
description: 'Analyzes requirements and designs solutions',
|
|
11
|
+
skills: ['repo-architecture-reader'],
|
|
12
|
+
},
|
|
13
|
+
developer: {
|
|
14
|
+
name: 'developer',
|
|
15
|
+
description: 'Implements features and fixes bugs',
|
|
16
|
+
skills: ['test-first-feature-dev', 'bugfix-playbook'],
|
|
17
|
+
},
|
|
18
|
+
qa: {
|
|
19
|
+
name: 'qa',
|
|
20
|
+
description: 'Validates implementations and ensures quality',
|
|
21
|
+
skills: ['test-first-feature-dev'],
|
|
22
|
+
},
|
|
23
|
+
reviewer: {
|
|
24
|
+
name: 'reviewer',
|
|
25
|
+
description: 'Reviews code for quality and correctness',
|
|
26
|
+
skills: ['safe-refactor-checklist'],
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
function getAgent(name) {
|
|
30
|
+
return exports.AGENTS[name];
|
|
31
|
+
}
|
|
32
|
+
function listAgents() {
|
|
33
|
+
return Object.keys(exports.AGENTS);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Architecture Overview
|
|
2
|
+
|
|
3
|
+
## System Design
|
|
4
|
+
|
|
5
|
+
This project implements an AI-powered autonomous development team using a layered architecture.
|
|
6
|
+
|
|
7
|
+
### Layer 1: Task Management (GitHub)
|
|
8
|
+
|
|
9
|
+
GitHub serves as the project control plane:
|
|
10
|
+
- **Issues**: Work requests and bug reports
|
|
11
|
+
- **Pull Requests**: Deliverables
|
|
12
|
+
- **Actions**: Automation runtime
|
|
13
|
+
- **Projects**: Task state tracking
|
|
14
|
+
|
|
15
|
+
### Layer 2: AI Execution (OpenCode)
|
|
16
|
+
|
|
17
|
+
OpenCode provides the AI capabilities:
|
|
18
|
+
- Repository understanding
|
|
19
|
+
- Architecture analysis
|
|
20
|
+
- Code implementation
|
|
21
|
+
- Bug fixing
|
|
22
|
+
- Test generation
|
|
23
|
+
- Code review
|
|
24
|
+
|
|
25
|
+
### Layer 3: Automation (GitHub Actions)
|
|
26
|
+
|
|
27
|
+
GitHub Actions provides:
|
|
28
|
+
- Event-triggered execution
|
|
29
|
+
- Isolated environment
|
|
30
|
+
- CI/CD integration
|
|
31
|
+
- Automated workflows
|
|
32
|
+
|
|
33
|
+
### Layer 4: Knowledge (Repository)
|
|
34
|
+
|
|
35
|
+
Knowledge is stored in the repository:
|
|
36
|
+
- `.opencode/agents/`: AI role definitions
|
|
37
|
+
- `.opencode/skills/`: Reusable skills
|
|
38
|
+
- `.opencode/commands/`: Workflow commands
|
|
39
|
+
- `AGENTS.md`: Global rules
|
|
40
|
+
|
|
41
|
+
## AI Team Structure
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
┌─────────────────────────────────────────────┐
|
|
45
|
+
│ Issue │
|
|
46
|
+
└─────────────────┬───────────────────────────┘
|
|
47
|
+
│
|
|
48
|
+
▼
|
|
49
|
+
┌─────────────────────────────────────────────┐
|
|
50
|
+
│ Architect Agent │
|
|
51
|
+
│ - Analyze requirements │
|
|
52
|
+
│ - Design solution │
|
|
53
|
+
│ - Create implementation plan │
|
|
54
|
+
└─────────────────┬───────────────────────────┘
|
|
55
|
+
│
|
|
56
|
+
▼
|
|
57
|
+
┌─────────────────────────────────────────────┐
|
|
58
|
+
│ Developer Agent │
|
|
59
|
+
│ - Implement features │
|
|
60
|
+
│ - Fix bugs │
|
|
61
|
+
│ - Create PR │
|
|
62
|
+
└─────────────────┬───────────────────────────┘
|
|
63
|
+
│
|
|
64
|
+
▼
|
|
65
|
+
┌─────────────────────────────────────────────┐
|
|
66
|
+
│ QA Agent │
|
|
67
|
+
│ - Validate implementation │
|
|
68
|
+
│ - Test coverage │
|
|
69
|
+
│ - Quality report │
|
|
70
|
+
└─────────────────┬───────────────────────────┘
|
|
71
|
+
│
|
|
72
|
+
▼
|
|
73
|
+
┌─────────────────────────────────────────────┐
|
|
74
|
+
│ Reviewer Agent │
|
|
75
|
+
│ - Code review │
|
|
76
|
+
│ - Quality gate │
|
|
77
|
+
│ - Merge decision │
|
|
78
|
+
└─────────────────┬───────────────────────────┘
|
|
79
|
+
│
|
|
80
|
+
▼
|
|
81
|
+
┌─────────────────────────────────────────────┐
|
|
82
|
+
│ Human Approval │
|
|
83
|
+
│ - Final review │
|
|
84
|
+
│ - Merge decision │
|
|
85
|
+
└─────────────────────────────────────────────┘
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Workflow
|
|
89
|
+
|
|
90
|
+
### Feature Development
|
|
91
|
+
|
|
92
|
+
1. Human creates Feature Issue
|
|
93
|
+
2. Architect analyzes requirements
|
|
94
|
+
3. Developer implements changes
|
|
95
|
+
4. CI pipeline runs tests
|
|
96
|
+
5. QA verifies behavior
|
|
97
|
+
6. Reviewer evaluates code
|
|
98
|
+
7. Human approves merge
|
|
99
|
+
|
|
100
|
+
### Bug Fix
|
|
101
|
+
|
|
102
|
+
1. Bug Issue created
|
|
103
|
+
2. Architect identifies root cause
|
|
104
|
+
3. Developer applies minimal fix
|
|
105
|
+
4. CI runs regression tests
|
|
106
|
+
5. QA validates resolution
|
|
107
|
+
6. Reviewer checks safety
|
|
108
|
+
7. Human merges PR
|
|
109
|
+
|
|
110
|
+
## Directory Structure
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
amazingteam/
|
|
114
|
+
├── .github/
|
|
115
|
+
│ ├── workflows/ # GitHub Actions
|
|
116
|
+
│ ├── ISSUE_TEMPLATE/ # Issue templates
|
|
117
|
+
│ └── pull_request_template.md
|
|
118
|
+
├── .opencode/
|
|
119
|
+
│ ├── agents/ # AI role definitions
|
|
120
|
+
│ ├── skills/ # Reusable skills
|
|
121
|
+
│ ├── commands/ # Workflow commands
|
|
122
|
+
│ └── opencode.jsonc # Configuration
|
|
123
|
+
├── docs/
|
|
124
|
+
│ ├── PRD/ # Product requirements
|
|
125
|
+
│ ├── architecture/ # Architecture docs
|
|
126
|
+
│ ├── decisions/ # ADR records
|
|
127
|
+
│ └── runbooks/ # Operational guides
|
|
128
|
+
├── src/ # Source code
|
|
129
|
+
├── infra/ # Infrastructure
|
|
130
|
+
└── AGENTS.md # Global rules
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Technologies
|
|
134
|
+
|
|
135
|
+
- **Runtime**: Node.js
|
|
136
|
+
- **Language**: TypeScript
|
|
137
|
+
- **CI/CD**: GitHub Actions
|
|
138
|
+
- **AI**: OpenCode
|