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.
Files changed (164) hide show
  1. package/.ai-team/agents/architect.md +144 -0
  2. package/.ai-team/agents/ci-analyst.md +188 -0
  3. package/.ai-team/agents/developer.md +176 -0
  4. package/.ai-team/agents/planner.md +355 -0
  5. package/.ai-team/agents/qa.md +189 -0
  6. package/.ai-team/agents/reviewer.md +211 -0
  7. package/.ai-team/agents/triage.md +146 -0
  8. package/.ai-team/commands/ci-analyze.md +116 -0
  9. package/.ai-team/commands/design.md +100 -0
  10. package/.ai-team/commands/implement.md +108 -0
  11. package/.ai-team/commands/release-check.md +142 -0
  12. package/.ai-team/commands/review.md +142 -0
  13. package/.ai-team/commands/test.md +115 -0
  14. package/.ai-team/commands/triage.md +138 -0
  15. package/.ai-team/memory/architect/architecture_notes.md +67 -0
  16. package/.ai-team/memory/architect/design_rationale.md +113 -0
  17. package/.ai-team/memory/architect/module_map.md +84 -0
  18. package/.ai-team/memory/ci-analyst/failure_patterns.md +102 -0
  19. package/.ai-team/memory/ci-analyst/runbook_references.md +87 -0
  20. package/.ai-team/memory/developer/bug_investigation.md +102 -0
  21. package/.ai-team/memory/developer/build_issues.md +115 -0
  22. package/.ai-team/memory/developer/implementation_notes.md +83 -0
  23. package/.ai-team/memory/failures/failure_library.md +103 -0
  24. package/.ai-team/memory/planner/decomposition_notes.md +82 -0
  25. package/.ai-team/memory/planner/flow_rules.md +86 -0
  26. package/.ai-team/memory/planner/github_issue_patterns.md +229 -0
  27. package/.ai-team/memory/qa/regression_cases.md +101 -0
  28. package/.ai-team/memory/qa/test_strategy.md +138 -0
  29. package/.ai-team/memory/qa/validation_notes.md +110 -0
  30. package/.ai-team/memory/reviewer/quality_rules.md +105 -0
  31. package/.ai-team/memory/reviewer/recurring_risks.md +109 -0
  32. package/.ai-team/memory/reviewer/review_notes.md +124 -0
  33. package/.ai-team/memory/triage/classification_heuristics.md +82 -0
  34. package/.ai-team/memory/triage/debug_notes.md +87 -0
  35. package/.ai-team/opencode.template.jsonc +216 -0
  36. package/.ai-team/skills/bugfix-playbook/skill.md +174 -0
  37. package/.ai-team/skills/ci-failure-analysis/skill.md +176 -0
  38. package/.ai-team/skills/issue-triage/skill.md +163 -0
  39. package/.ai-team/skills/regression-checklist/skill.md +176 -0
  40. package/.ai-team/skills/release-readiness-check/skill.md +216 -0
  41. package/.ai-team/skills/repo-architecture-reader/skill.md +139 -0
  42. package/.ai-team/skills/safe-refactor-checklist/skill.md +215 -0
  43. package/.ai-team/skills/task-breakdown-and-dispatch/skill.md +151 -0
  44. package/.ai-team/skills/test-first-feature-dev/skill.md +205 -0
  45. package/.ai-team/workflows/ci.yml +81 -0
  46. package/.ai-team/workflows/nightly-ai-maintenance.yml +129 -0
  47. package/.ai-team/workflows/opencode.yml +33 -0
  48. package/.ai-team/workflows/pr-check.yml +41 -0
  49. package/.foundation/foundation.lock +38 -0
  50. package/.foundation/local-overrides.md +97 -0
  51. package/.foundation/upgrade-history.md +38 -0
  52. package/.opencode/agents/architect.md +38 -0
  53. package/.opencode/agents/ci-analyst.md +38 -0
  54. package/.opencode/agents/developer.md +43 -0
  55. package/.opencode/agents/planner.md +47 -0
  56. package/.opencode/agents/qa.md +34 -0
  57. package/.opencode/agents/reviewer.md +38 -0
  58. package/.opencode/agents/triage.md +37 -0
  59. package/.opencode/commands/auto.md +264 -0
  60. package/.opencode/commands/breakdown-issue.md +94 -0
  61. package/.opencode/commands/ci-analyze.md +15 -0
  62. package/.opencode/commands/close-parent-task.md +122 -0
  63. package/.opencode/commands/design.md +15 -0
  64. package/.opencode/commands/dispatch-next.md +102 -0
  65. package/.opencode/commands/implement.md +16 -0
  66. package/.opencode/commands/release-check.md +16 -0
  67. package/.opencode/commands/resume.md +88 -0
  68. package/.opencode/commands/review.md +15 -0
  69. package/.opencode/commands/show-blockers.md +97 -0
  70. package/.opencode/commands/summarize-parent.md +121 -0
  71. package/.opencode/commands/test.md +15 -0
  72. package/.opencode/commands/triage.md +109 -0
  73. package/.opencode/skills/bugfix-playbook/SKILL.md +81 -0
  74. package/.opencode/skills/ci-failure-analysis/SKILL.md +94 -0
  75. package/.opencode/skills/issue-triage/SKILL.md +80 -0
  76. package/.opencode/skills/regression-checklist/SKILL.md +81 -0
  77. package/.opencode/skills/release-readiness-check/SKILL.md +81 -0
  78. package/.opencode/skills/repo-architecture-reader/SKILL.md +65 -0
  79. package/.opencode/skills/safe-refactor-checklist/SKILL.md +76 -0
  80. package/.opencode/skills/task-breakdown-and-dispatch/SKILL.md +255 -0
  81. package/.opencode/skills/test-first-feature-dev/SKILL.md +78 -0
  82. package/AGENTS.md +879 -0
  83. package/CHANGELOG.md +261 -0
  84. package/LICENSE +21 -0
  85. package/README.md +1215 -0
  86. package/VERSION +1 -0
  87. package/action/__tests__/downloader.test.js +251 -0
  88. package/action/__tests__/merger.test.js +156 -0
  89. package/action/__tests__/path-resolver.test.js +199 -0
  90. package/action/__tests__/validator.test.js +310 -0
  91. package/action/action.yml +61 -0
  92. package/action/index.js +223 -0
  93. package/action/lib/downloader.js +344 -0
  94. package/action/lib/merger.js +170 -0
  95. package/action/lib/path-resolver.js +176 -0
  96. package/action/lib/setup.js +286 -0
  97. package/action/lib/validator.js +324 -0
  98. package/cli/__tests__/cli.test.js +270 -0
  99. package/cli/amazingteam.cjs +225 -0
  100. package/cli/commands/check-update.cjs +159 -0
  101. package/cli/commands/init.cjs +412 -0
  102. package/cli/commands/local.cjs +264 -0
  103. package/cli/commands/migrate.cjs +316 -0
  104. package/cli/commands/status.cjs +241 -0
  105. package/cli/commands/upgrade.cjs +213 -0
  106. package/cli/commands/validate.cjs +259 -0
  107. package/cli/commands/version.cjs +59 -0
  108. package/cli/sync.cjs +237 -0
  109. package/dist/index.js +35 -0
  110. package/docs/architecture/overview.md +138 -0
  111. package/docs/blocker_resolution_design.md +372 -0
  112. package/docs/bootstrap-model.md +356 -0
  113. package/docs/config-reference.md +458 -0
  114. package/docs/how-to-use.md +178 -0
  115. package/docs/migration-to-v3.md +355 -0
  116. package/docs/overlay-guide.md +156 -0
  117. package/docs/patterns/README.md +67 -0
  118. package/docs/quick-start-v3.md +330 -0
  119. package/docs/releases/README.md +64 -0
  120. package/docs/runbooks/ci/README.md +62 -0
  121. package/docs/runbooks/ci/build-debug.md +120 -0
  122. package/docs/runbooks/ci/flaky-tests.md +127 -0
  123. package/docs/runbooks/getting-started.md +81 -0
  124. package/docs/upgrade-policy.md +188 -0
  125. package/docs/versioning.md +199 -0
  126. package/overlays/README.md +30 -0
  127. package/overlays/ai-agent-product/.ai-team/skills/llm-integration/skill.md +99 -0
  128. package/overlays/ai-agent-product/docs/ai-agent-architecture.md +68 -0
  129. package/overlays/ai-agent-product/overlay.yaml +26 -0
  130. package/overlays/cpp-qt-desktop/.ai-team/skills/qt-signals-slots/skill.md +60 -0
  131. package/overlays/cpp-qt-desktop/docs/qt-conventions.md +64 -0
  132. package/overlays/cpp-qt-desktop/overlay.yaml +22 -0
  133. package/overlays/python-backend/.ai-team/skills/python-testing/skill.md +90 -0
  134. package/overlays/python-backend/docs/python-style.md +78 -0
  135. package/overlays/python-backend/overlay.yaml +22 -0
  136. package/overlays/web-fullstack/.ai-team/skills/frontend-testing/skill.md +70 -0
  137. package/overlays/web-fullstack/docs/frontend-conventions.md +68 -0
  138. package/overlays/web-fullstack/overlay.yaml +26 -0
  139. package/package.json +84 -0
  140. package/presets/default.yaml +161 -0
  141. package/presets/go.yaml +43 -0
  142. package/presets/python.yaml +43 -0
  143. package/presets/typescript.yaml +40 -0
  144. package/schemas/config.schema.json +239 -0
  145. package/scripts/diff_foundation_vs_project.sh +134 -0
  146. package/scripts/generate_docs.sh +200 -0
  147. package/scripts/init_project.sh +455 -0
  148. package/scripts/plan_upgrade.sh +268 -0
  149. package/scripts/upgrade_foundation.sh +365 -0
  150. package/scripts/validate-foundation.cjs +278 -0
  151. package/scripts/validate_foundation.sh +192 -0
  152. package/scripts/validate_project_setup.sh +171 -0
  153. package/tasks/README.md +94 -0
  154. package/tasks/_template/analysis.md +76 -0
  155. package/tasks/_template/design.md +121 -0
  156. package/tasks/_template/implementation.md +121 -0
  157. package/tasks/_template/release.md +119 -0
  158. package/tasks/_template/review.md +131 -0
  159. package/tasks/_template/subtasks/task.yaml +24 -0
  160. package/tasks/_template/task.yaml +75 -0
  161. package/tasks/_template/validation.md +128 -0
  162. package/templates/amazingteam.yml +81 -0
  163. package/templates/gitignore +14 -0
  164. 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