@silbaram/artifact-driven-agent 0.1.7 → 0.2.3

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 (189) hide show
  1. package/README.md +510 -60
  2. package/ai-dev-team/.ada-status.template.json +10 -10
  3. package/ai-dev-team/README.md +39 -44
  4. package/ai-dev-team/ada.config.json +15 -0
  5. package/ai-dev-team/artifacts/api.md +2 -0
  6. package/ai-dev-team/artifacts/features/_template/api.md +19 -19
  7. package/ai-dev-team/artifacts/features/_template/review.md +14 -14
  8. package/ai-dev-team/artifacts/features/_template/spec.md +28 -28
  9. package/ai-dev-team/artifacts/features/_template/ui.md +14 -14
  10. package/ai-dev-team/artifacts/improvement-reports/IMP-0000-template.md +57 -0
  11. package/ai-dev-team/artifacts/project.md +2 -0
  12. package/ai-dev-team/artifacts/rfc/RFC-0000-template.md +49 -49
  13. package/core/artifacts/decision.md +72 -72
  14. package/core/artifacts/plan.md +187 -187
  15. package/core/artifacts/project.md +193 -193
  16. package/core/artifacts/sprints/_template/docs/release-notes.md +37 -37
  17. package/core/artifacts/sprints/_template/meta.md +54 -54
  18. package/core/artifacts/sprints/_template/retrospective.md +50 -50
  19. package/core/artifacts/sprints/_template/review-reports/review-template.md +49 -49
  20. package/core/artifacts/sprints/_template/tasks/task-template.md +43 -43
  21. package/core/docs-templates/mkdocs/docs/architecture/overview.md +29 -0
  22. package/core/docs-templates/mkdocs/docs/changelog.md +36 -0
  23. package/core/docs-templates/mkdocs/docs/contributing/contributing.md +60 -0
  24. package/core/docs-templates/mkdocs/docs/getting-started/configuration.md +51 -0
  25. package/core/docs-templates/mkdocs/docs/getting-started/installation.md +41 -0
  26. package/core/docs-templates/mkdocs/docs/getting-started/quick-start.md +56 -0
  27. package/core/docs-templates/mkdocs/docs/guides/api-reference.md +83 -0
  28. package/core/docs-templates/mkdocs/docs/index.md +32 -0
  29. package/core/docs-templates/mkdocs/mkdocs.yml +86 -0
  30. package/core/roles/analyzer.md +265 -243
  31. package/core/roles/developer.md +227 -223
  32. package/core/roles/documenter.md +226 -293
  33. package/core/roles/improver.md +461 -0
  34. package/core/roles/manager.md +574 -541
  35. package/core/roles/planner.md +398 -248
  36. package/core/roles/reviewer.md +294 -266
  37. package/core/rules/document-priority.md +199 -198
  38. package/core/rules/escalation.md +172 -172
  39. package/core/rules/iteration.md +236 -236
  40. package/core/rules/rfc.md +31 -31
  41. package/core/rules/rollback.md +218 -218
  42. package/core/skills/_template/SKILL.md +50 -0
  43. package/core/skills/clean-code/SKILL.md +177 -0
  44. package/core/skills/code-review-checklist/SKILL.md +125 -0
  45. package/core/skills/error-handling/SKILL.md +155 -0
  46. package/core/skills/talk-game-dot-design/SKILL.md +85 -0
  47. package/core/skills/talk-game-dot-design/references/asset-specs.md +57 -0
  48. package/core/skills/talk-game-dot-design/references/review-checklist.md +34 -0
  49. package/core/skills/task-writing/SKILL.md +166 -0
  50. package/core/skills/testing-patterns/SKILL.md +140 -0
  51. package/dist/bin/cli.d.ts +2 -0
  52. package/dist/bin/cli.js +121 -0
  53. package/dist/bin/cli.js.map +1 -0
  54. package/dist/src/commands/config.d.ts +4 -0
  55. package/dist/src/commands/config.js +427 -0
  56. package/dist/src/commands/config.js.map +1 -0
  57. package/dist/src/commands/docs.d.ts +12 -0
  58. package/dist/src/commands/docs.js +453 -0
  59. package/dist/src/commands/docs.js.map +1 -0
  60. package/dist/src/commands/interactive.d.ts +4 -0
  61. package/dist/src/commands/interactive.js +380 -0
  62. package/dist/src/commands/interactive.js.map +1 -0
  63. package/dist/src/commands/logs.d.ts +1 -0
  64. package/dist/src/commands/logs.js +76 -0
  65. package/dist/src/commands/logs.js.map +1 -0
  66. package/dist/src/commands/monitor.d.ts +6 -0
  67. package/dist/src/commands/monitor.js +216 -0
  68. package/dist/src/commands/monitor.js.map +1 -0
  69. package/dist/src/commands/reset.d.ts +4 -0
  70. package/dist/src/commands/reset.js +57 -0
  71. package/dist/src/commands/reset.js.map +1 -0
  72. package/dist/src/commands/run.d.ts +45 -0
  73. package/dist/src/commands/run.js +421 -0
  74. package/dist/src/commands/run.js.map +1 -0
  75. package/dist/src/commands/sessions.d.ts +5 -0
  76. package/dist/src/commands/sessions.js +563 -0
  77. package/dist/src/commands/sessions.js.map +1 -0
  78. package/dist/src/commands/setup.d.ts +1 -0
  79. package/dist/src/commands/setup.js +132 -0
  80. package/dist/src/commands/setup.js.map +1 -0
  81. package/dist/src/commands/skills.d.ts +4 -0
  82. package/dist/src/commands/skills.js +748 -0
  83. package/dist/src/commands/skills.js.map +1 -0
  84. package/dist/src/commands/sprint.d.ts +4 -0
  85. package/dist/src/commands/sprint.js +434 -0
  86. package/dist/src/commands/sprint.js.map +1 -0
  87. package/dist/src/commands/status.d.ts +1 -0
  88. package/dist/src/commands/status.js +97 -0
  89. package/dist/src/commands/status.js.map +1 -0
  90. package/dist/src/commands/upgrade.d.ts +6 -0
  91. package/dist/src/commands/upgrade.js +350 -0
  92. package/dist/src/commands/upgrade.js.map +1 -0
  93. package/dist/src/commands/validate.d.ts +8 -0
  94. package/dist/src/commands/validate.js +260 -0
  95. package/dist/src/commands/validate.js.map +1 -0
  96. package/dist/src/commands/validate.test.d.ts +1 -0
  97. package/dist/src/commands/validate.test.js +74 -0
  98. package/dist/src/commands/validate.test.js.map +1 -0
  99. package/{src/index.js → dist/src/index.d.ts} +2 -3
  100. package/dist/src/index.js +15 -0
  101. package/dist/src/index.js.map +1 -0
  102. package/dist/src/types/common.d.ts +31 -0
  103. package/dist/src/types/common.js +2 -0
  104. package/dist/src/types/common.js.map +1 -0
  105. package/dist/src/types/config.d.ts +46 -0
  106. package/dist/src/types/config.js +2 -0
  107. package/dist/src/types/config.js.map +1 -0
  108. package/dist/src/types/index.d.ts +53 -0
  109. package/dist/src/types/index.js +2 -0
  110. package/dist/src/types/index.js.map +1 -0
  111. package/dist/src/types/session.d.ts +87 -0
  112. package/dist/src/types/session.js +2 -0
  113. package/dist/src/types/session.js.map +1 -0
  114. package/dist/src/types/task.d.ts +32 -0
  115. package/dist/src/types/task.js +2 -0
  116. package/dist/src/types/task.js.map +1 -0
  117. package/dist/src/ui/dashboard.d.ts +9 -0
  118. package/dist/src/ui/dashboard.js +468 -0
  119. package/dist/src/ui/dashboard.js.map +1 -0
  120. package/dist/src/ui/keyHandler.d.ts +47 -0
  121. package/dist/src/ui/keyHandler.js +132 -0
  122. package/dist/src/ui/keyHandler.js.map +1 -0
  123. package/dist/src/ui/quickActions.d.ts +25 -0
  124. package/dist/src/ui/quickActions.js +106 -0
  125. package/dist/src/ui/quickActions.js.map +1 -0
  126. package/dist/src/utils/config.d.ts +33 -0
  127. package/dist/src/utils/config.js +135 -0
  128. package/dist/src/utils/config.js.map +1 -0
  129. package/dist/src/utils/files.d.ts +84 -0
  130. package/dist/src/utils/files.js +202 -0
  131. package/dist/src/utils/files.js.map +1 -0
  132. package/dist/src/utils/promptBuilder.d.ts +39 -0
  133. package/dist/src/utils/promptBuilder.js +726 -0
  134. package/dist/src/utils/promptBuilder.js.map +1 -0
  135. package/dist/src/utils/sessionState.d.ts +83 -0
  136. package/dist/src/utils/sessionState.js +466 -0
  137. package/dist/src/utils/sessionState.js.map +1 -0
  138. package/dist/src/utils/sessionState.process.test.d.ts +1 -0
  139. package/dist/src/utils/sessionState.process.test.js +93 -0
  140. package/dist/src/utils/sessionState.process.test.js.map +1 -0
  141. package/dist/src/utils/sessionState.test.d.ts +1 -0
  142. package/dist/src/utils/sessionState.test.js +150 -0
  143. package/dist/src/utils/sessionState.test.js.map +1 -0
  144. package/dist/src/utils/sprintUtils.d.ts +13 -0
  145. package/dist/src/utils/sprintUtils.js +129 -0
  146. package/dist/src/utils/sprintUtils.js.map +1 -0
  147. package/dist/src/utils/taskParser.d.ts +9 -0
  148. package/dist/src/utils/taskParser.js +122 -0
  149. package/dist/src/utils/taskParser.js.map +1 -0
  150. package/dist/src/utils/taskParser.test.d.ts +1 -0
  151. package/dist/src/utils/taskParser.test.js +69 -0
  152. package/dist/src/utils/taskParser.test.js.map +1 -0
  153. package/package.json +62 -47
  154. package/templates/cli/artifacts/commands.md +262 -262
  155. package/templates/cli/artifacts/output-format.md +298 -298
  156. package/templates/cli/rules/command-change.md +225 -225
  157. package/templates/game/artifacts/assets.md +148 -148
  158. package/templates/game/artifacts/game-systems.md +217 -217
  159. package/templates/game/artifacts/hud.md +199 -199
  160. package/templates/game/rules/system-change.md +184 -184
  161. package/templates/library/artifacts/changelog.md +84 -84
  162. package/templates/library/artifacts/examples.md +157 -157
  163. package/templates/library/artifacts/public-api.md +197 -197
  164. package/templates/library/rules/versioning.md +186 -186
  165. package/templates/web-dev/artifacts/api.md +212 -212
  166. package/templates/web-dev/artifacts/ui.md +104 -104
  167. package/templates/web-dev/rules/api-change.md +198 -198
  168. package/ai-dev-team/.gitkeep +0 -0
  169. package/ai-dev-team/artifacts/.gitkeep +0 -0
  170. package/ai-dev-team/artifacts/features/_template/qa.md +0 -16
  171. package/ai-dev-team/roles/.gitkeep +0 -0
  172. package/ai-dev-team/rules/.gitkeep +0 -0
  173. package/bin/cli.js +0 -83
  174. package/examples/todo-app/README.md +0 -23
  175. package/examples/todo-app/artifacts/backlog.md +0 -23
  176. package/examples/todo-app/artifacts/plan.md +0 -23
  177. package/examples/todo-app/artifacts/project.md +0 -23
  178. package/src/commands/interactive.js +0 -101
  179. package/src/commands/logs.js +0 -81
  180. package/src/commands/reset.js +0 -66
  181. package/src/commands/run.js +0 -554
  182. package/src/commands/sessions.js +0 -707
  183. package/src/commands/setup.js +0 -128
  184. package/src/commands/sprint.js +0 -262
  185. package/src/commands/status.js +0 -76
  186. package/src/commands/validate.js +0 -288
  187. package/src/commands/validate.test.js +0 -84
  188. package/src/utils/files.js +0 -134
  189. package/src/utils/sessionState.js +0 -379
@@ -0,0 +1,350 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import { getPackageRoot, getWorkspaceDir, getBackupDir, getPackageVersion, readVersion, writeVersion, compareVersions, getCurrentTemplate, isWorkspaceSetup, copyDirMerge, } from '../utils/files.js';
6
+ export async function upgrade(options = {}) {
7
+ // 작업공간 확인
8
+ if (!isWorkspaceSetup()) {
9
+ console.log(chalk.red('❌ 작업공간이 세팅되어 있지 않습니다.'));
10
+ console.log(chalk.gray(' ada setup 명령어로 먼저 세팅하세요.'));
11
+ process.exit(1);
12
+ }
13
+ const packageVersion = getPackageVersion();
14
+ let workspaceVersionInfo = readVersion();
15
+ const currentTemplate = getCurrentTemplate();
16
+ if (!workspaceVersionInfo) {
17
+ console.log(chalk.yellow('⚠️ 작업공간에 버전 정보가 없습니다.'));
18
+ console.log(chalk.gray(' 이전 버전에서 생성된 작업공간으로 추정됩니다.'));
19
+ console.log('');
20
+ if (!options.force) {
21
+ const answer = await inquirer.prompt([
22
+ {
23
+ type: 'confirm',
24
+ name: 'continue',
25
+ message: '업그레이드를 계속하시겠습니까?',
26
+ default: true,
27
+ },
28
+ ]);
29
+ if (!answer.continue) {
30
+ console.log(chalk.gray('취소되었습니다.'));
31
+ process.exit(0);
32
+ }
33
+ }
34
+ // 버전 정보 초기화
35
+ workspaceVersionInfo = {
36
+ packageVersion: '0.0.0',
37
+ workspaceVersion: '0.0.0',
38
+ template: currentTemplate || '',
39
+ lastUpgrade: '',
40
+ };
41
+ }
42
+ const workspaceVersion = workspaceVersionInfo.workspaceVersion || workspaceVersionInfo.packageVersion;
43
+ console.log('');
44
+ console.log(chalk.cyan('━'.repeat(50)));
45
+ console.log(chalk.cyan.bold('🔄 ada 업그레이드'));
46
+ console.log(chalk.cyan('━'.repeat(50)));
47
+ console.log('');
48
+ console.log(chalk.gray(`현재 작업공간 버전: ${workspaceVersion}`));
49
+ console.log(chalk.gray(`최신 패키지 버전: ${packageVersion}`));
50
+ console.log('');
51
+ // 버전 비교
52
+ const versionDiff = compareVersions(packageVersion, workspaceVersion);
53
+ if (versionDiff === 0) {
54
+ console.log(chalk.green('✅ 이미 최신 버전입니다.'));
55
+ process.exit(0);
56
+ }
57
+ if (versionDiff < 0) {
58
+ console.log(chalk.yellow('⚠️ 작업공간 버전이 패키지 버전보다 높습니다.'));
59
+ console.log(chalk.gray(' 개발 중이거나 다운그레이드된 패키지일 수 있습니다.'));
60
+ if (!options.force) {
61
+ const answer = await inquirer.prompt([
62
+ {
63
+ type: 'confirm',
64
+ name: 'continue',
65
+ message: '그래도 업그레이드하시겠습니까?',
66
+ default: false,
67
+ },
68
+ ]);
69
+ if (!answer.continue) {
70
+ console.log(chalk.gray('취소되었습니다.'));
71
+ process.exit(0);
72
+ }
73
+ }
74
+ }
75
+ // 롤백 처리
76
+ if (options.rollback) {
77
+ await handleRollback();
78
+ return;
79
+ }
80
+ // Dry-run 모드
81
+ if (options.dryRun) {
82
+ await performDryRun(workspaceVersion, packageVersion);
83
+ return;
84
+ }
85
+ // 실제 업그레이드
86
+ await performUpgrade(workspaceVersion, packageVersion);
87
+ }
88
+ /**
89
+ * 롤백 처리
90
+ */
91
+ async function handleRollback() {
92
+ const backupDir = getBackupDir();
93
+ if (!fs.existsSync(backupDir)) {
94
+ console.log(chalk.red('❌ 백업이 없습니다.'));
95
+ process.exit(1);
96
+ }
97
+ const backups = fs
98
+ .readdirSync(backupDir)
99
+ .filter((d) => d.startsWith('upgrade-'))
100
+ .sort()
101
+ .reverse();
102
+ if (backups.length === 0) {
103
+ console.log(chalk.red('❌ 백업이 없습니다.'));
104
+ process.exit(1);
105
+ }
106
+ console.log(chalk.cyan('사용 가능한 백업:'));
107
+ backups.forEach((backup, index) => {
108
+ const backupPath = path.join(backupDir, backup);
109
+ const versionFile = path.join(backupPath, '.ada-version');
110
+ let versionInfo = 'unknown';
111
+ if (fs.existsSync(versionFile)) {
112
+ const info = JSON.parse(fs.readFileSync(versionFile, 'utf-8'));
113
+ versionInfo = info.workspaceVersion || info.packageVersion;
114
+ }
115
+ console.log(chalk.gray(` ${index + 1}. ${backup} (v${versionInfo})`));
116
+ });
117
+ const answer = await inquirer.prompt([
118
+ {
119
+ type: 'list',
120
+ name: 'backup',
121
+ message: '복원할 백업을 선택하세요:',
122
+ choices: backups.map((b, i) => ({ name: `${i + 1}. ${b}`, value: b })),
123
+ },
124
+ ]);
125
+ const selectedBackup = path.join(backupDir, answer.backup);
126
+ const workspace = getWorkspaceDir();
127
+ console.log('');
128
+ console.log(chalk.yellow('⚠️ 현재 작업공간을 백업으로 덮어씁니다.'));
129
+ const confirm = await inquirer.prompt([
130
+ {
131
+ type: 'confirm',
132
+ name: 'confirm',
133
+ message: '계속하시겠습니까?',
134
+ default: false,
135
+ },
136
+ ]);
137
+ if (!confirm.confirm) {
138
+ console.log(chalk.gray('취소되었습니다.'));
139
+ process.exit(0);
140
+ }
141
+ // 롤백 실행
142
+ console.log(chalk.gray('복원 중...'));
143
+ // roles, rules 복원
144
+ ['roles', 'rules'].forEach((dir) => {
145
+ const backupPath = path.join(selectedBackup, dir);
146
+ const workspacePath = path.join(workspace, dir);
147
+ if (fs.existsSync(backupPath)) {
148
+ fs.removeSync(workspacePath);
149
+ fs.copySync(backupPath, workspacePath);
150
+ }
151
+ });
152
+ // 버전 정보 복원
153
+ const backupVersionFile = path.join(selectedBackup, '.ada-version');
154
+ if (fs.existsSync(backupVersionFile)) {
155
+ fs.copyFileSync(backupVersionFile, path.join(workspace, '.ada-version'));
156
+ }
157
+ console.log('');
158
+ console.log(chalk.green('✅ 롤백 완료!'));
159
+ }
160
+ /**
161
+ * Dry-run 수행
162
+ */
163
+ async function performDryRun(workspaceVersion, packageVersion) {
164
+ const packageRoot = getPackageRoot();
165
+ const workspace = getWorkspaceDir();
166
+ const template = getCurrentTemplate();
167
+ console.log(chalk.cyan('🔍 변경 사항 미리보기 (실제 변경 없음)'));
168
+ console.log('');
169
+ const changes = [];
170
+ // roles 디렉토리 비교
171
+ const coreRoles = path.join(packageRoot, 'core', 'roles');
172
+ const templateRoles = path.join(packageRoot, 'templates', template || '', 'roles');
173
+ const workspaceRoles = path.join(workspace, 'roles');
174
+ if (fs.existsSync(coreRoles)) {
175
+ const coreFiles = fs.readdirSync(coreRoles).filter((f) => f.endsWith('.md'));
176
+ coreFiles.forEach((file) => {
177
+ const workspaceFile = path.join(workspaceRoles, file);
178
+ if (fs.existsSync(workspaceFile)) {
179
+ changes.push({ type: 'UPDATE', category: 'roles', file });
180
+ }
181
+ else {
182
+ changes.push({ type: 'ADD', category: 'roles', file });
183
+ }
184
+ });
185
+ }
186
+ if (fs.existsSync(templateRoles)) {
187
+ const templateFiles = fs
188
+ .readdirSync(templateRoles)
189
+ .filter((f) => f.endsWith('.md'));
190
+ templateFiles.forEach((file) => {
191
+ const workspaceFile = path.join(workspaceRoles, file);
192
+ if (fs.existsSync(workspaceFile)) {
193
+ changes.push({ type: 'UPDATE', category: 'roles', file });
194
+ }
195
+ else {
196
+ changes.push({ type: 'ADD', category: 'roles', file });
197
+ }
198
+ });
199
+ }
200
+ // rules 디렉토리 비교
201
+ const coreRules = path.join(packageRoot, 'core', 'rules');
202
+ const templateRules = path.join(packageRoot, 'templates', template || '', 'rules');
203
+ const workspaceRules = path.join(workspace, 'rules');
204
+ if (fs.existsSync(coreRules)) {
205
+ const coreFiles = fs.readdirSync(coreRules).filter((f) => f.endsWith('.md'));
206
+ coreFiles.forEach((file) => {
207
+ const workspaceFile = path.join(workspaceRules, file);
208
+ if (fs.existsSync(workspaceFile)) {
209
+ changes.push({ type: 'UPDATE', category: 'rules', file });
210
+ }
211
+ else {
212
+ changes.push({ type: 'ADD', category: 'rules', file });
213
+ }
214
+ });
215
+ }
216
+ if (fs.existsSync(templateRules)) {
217
+ const templateFiles = fs
218
+ .readdirSync(templateRules)
219
+ .filter((f) => f.endsWith('.md'));
220
+ templateFiles.forEach((file) => {
221
+ const workspaceFile = path.join(workspaceRules, file);
222
+ if (fs.existsSync(workspaceFile)) {
223
+ changes.push({ type: 'UPDATE', category: 'rules', file });
224
+ }
225
+ else {
226
+ changes.push({ type: 'ADD', category: 'rules', file });
227
+ }
228
+ });
229
+ }
230
+ // 중복 제거
231
+ const uniqueChanges = Array.from(new Map(changes.map((c) => [`${c.category}/${c.file}`, c])).values());
232
+ if (uniqueChanges.length === 0) {
233
+ console.log(chalk.gray('변경 사항이 없습니다.'));
234
+ return;
235
+ }
236
+ console.log(chalk.white.bold('📋 변경될 파일:'));
237
+ console.log('');
238
+ const addedFiles = uniqueChanges.filter((c) => c.type === 'ADD');
239
+ const updatedFiles = uniqueChanges.filter((c) => c.type === 'UPDATE');
240
+ if (addedFiles.length > 0) {
241
+ console.log(chalk.green(' 추가될 파일:'));
242
+ addedFiles.forEach((c) => {
243
+ console.log(chalk.gray(` + ${c.category}/${c.file}`));
244
+ });
245
+ console.log('');
246
+ }
247
+ if (updatedFiles.length > 0) {
248
+ console.log(chalk.yellow(' 업데이트될 파일:'));
249
+ updatedFiles.forEach((c) => {
250
+ console.log(chalk.gray(` ↻ ${c.category}/${c.file}`));
251
+ });
252
+ console.log('');
253
+ }
254
+ console.log(chalk.gray(`총 ${uniqueChanges.length}개 파일이 변경됩니다.`));
255
+ console.log('');
256
+ console.log(chalk.cyan('실제 업그레이드를 실행하려면:'));
257
+ console.log(chalk.gray(' ada upgrade'));
258
+ }
259
+ /**
260
+ * 실제 업그레이드 수행
261
+ */
262
+ async function performUpgrade(workspaceVersion, packageVersion) {
263
+ const packageRoot = getPackageRoot();
264
+ const workspace = getWorkspaceDir();
265
+ const template = getCurrentTemplate();
266
+ // 백업 생성
267
+ const backupId = `upgrade-${new Date().toISOString().slice(0, 19).replace(/[T:]/g, '-')}`;
268
+ const backupPath = path.join(getBackupDir(), backupId);
269
+ console.log(chalk.gray('📦 백업 생성 중...'));
270
+ fs.ensureDirSync(backupPath);
271
+ // roles, rules 백업
272
+ ['roles', 'rules'].forEach((dir) => {
273
+ const srcPath = path.join(workspace, dir);
274
+ const destPath = path.join(backupPath, dir);
275
+ if (fs.existsSync(srcPath)) {
276
+ fs.copySync(srcPath, destPath);
277
+ }
278
+ });
279
+ // 버전 정보 백업
280
+ const versionFile = path.join(workspace, '.ada-version');
281
+ if (fs.existsSync(versionFile)) {
282
+ fs.copyFileSync(versionFile, path.join(backupPath, '.ada-version'));
283
+ }
284
+ console.log(chalk.green(`✅ 백업 완료: ${backupId}`));
285
+ console.log('');
286
+ // 업그레이드 실행
287
+ console.log(chalk.gray('🔄 업그레이드 중...'));
288
+ try {
289
+ // Core 파일 복사
290
+ const coreRoles = path.join(packageRoot, 'core', 'roles');
291
+ const coreRules = path.join(packageRoot, 'core', 'rules');
292
+ if (fs.existsSync(coreRoles)) {
293
+ copyDirMerge(coreRoles, path.join(workspace, 'roles'));
294
+ }
295
+ if (fs.existsSync(coreRules)) {
296
+ copyDirMerge(coreRules, path.join(workspace, 'rules'));
297
+ }
298
+ // Template 파일 복사
299
+ const templateRoles = path.join(packageRoot, 'templates', template || '', 'roles');
300
+ const templateRules = path.join(packageRoot, 'templates', template || '', 'rules');
301
+ const templateArtifacts = path.join(packageRoot, 'templates', template || '', 'artifacts');
302
+ if (fs.existsSync(templateRoles)) {
303
+ copyDirMerge(templateRoles, path.join(workspace, 'roles'));
304
+ }
305
+ if (fs.existsSync(templateRules)) {
306
+ copyDirMerge(templateRules, path.join(workspace, 'rules'));
307
+ }
308
+ // 템플릿 아티팩트 (사용자 데이터 아닌 것만)
309
+ if (fs.existsSync(templateArtifacts)) {
310
+ const artifactFiles = fs
311
+ .readdirSync(templateArtifacts)
312
+ .filter((f) => f.endsWith('.md'));
313
+ artifactFiles.forEach((file) => {
314
+ const srcFile = path.join(templateArtifacts, file);
315
+ const destFile = path.join(workspace, 'artifacts', file);
316
+ // 기존 사용자 데이터가 있으면 건너뜀
317
+ if (!fs.existsSync(destFile)) {
318
+ fs.copyFileSync(srcFile, destFile);
319
+ }
320
+ });
321
+ }
322
+ // 버전 정보 업데이트
323
+ const newVersionInfo = {
324
+ packageVersion: packageVersion,
325
+ workspaceVersion: packageVersion,
326
+ template: template || '',
327
+ lastUpgrade: new Date().toISOString(),
328
+ };
329
+ writeVersion(newVersionInfo);
330
+ console.log('');
331
+ console.log(chalk.green('✅ 업그레이드 완료!'));
332
+ console.log('');
333
+ console.log(chalk.gray(`${workspaceVersion} → ${packageVersion}`));
334
+ console.log('');
335
+ console.log(chalk.cyan('롤백이 필요한 경우:'));
336
+ console.log(chalk.gray(' ada upgrade --rollback'));
337
+ console.log('');
338
+ }
339
+ catch (error) {
340
+ console.log('');
341
+ console.log(chalk.red('❌ 업그레이드 중 오류 발생!'));
342
+ console.log(chalk.red(error instanceof Error ? error.message : String(error)));
343
+ console.log('');
344
+ console.log(chalk.yellow('백업에서 복원하려면:'));
345
+ console.log(chalk.gray(' ada upgrade --rollback'));
346
+ console.log('');
347
+ process.exit(1);
348
+ }
349
+ }
350
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ValidationResult {
2
+ pass: number;
3
+ fail: number;
4
+ warn: number;
5
+ }
6
+ export declare function validate(doc?: string): Promise<void>;
7
+ export declare function validateBacklog(artifactsDir: string): ValidationResult;
8
+ export declare function validateSprint(artifactsDir: string): ValidationResult;
@@ -0,0 +1,260 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import { getWorkspaceDir, isWorkspaceSetup } from '../utils/files.js';
5
+ export async function validate(doc) {
6
+ if (!isWorkspaceSetup()) {
7
+ console.log(chalk.red('❌ 먼저 setup을 실행하세요.'));
8
+ process.exit(1);
9
+ }
10
+ const workspace = getWorkspaceDir();
11
+ const artifactsDir = path.join(workspace, 'artifacts');
12
+ printSection('문서 검증');
13
+ let totalPass = 0;
14
+ let totalFail = 0;
15
+ let totalWarn = 0;
16
+ const validators = {
17
+ plan: validatePlan,
18
+ project: validateProject,
19
+ backlog: validateBacklog,
20
+ sprint: validateSprint,
21
+ };
22
+ if (doc && validators[doc]) {
23
+ // 특정 문서만 검증
24
+ const result = validators[doc](artifactsDir);
25
+ totalPass += result.pass;
26
+ totalFail += result.fail;
27
+ totalWarn += result.warn;
28
+ }
29
+ else {
30
+ // 전체 검증
31
+ for (const validator of Object.values(validators)) {
32
+ const result = validator(artifactsDir);
33
+ totalPass += result.pass;
34
+ totalFail += result.fail;
35
+ totalWarn += result.warn;
36
+ }
37
+ }
38
+ printSection('검증 결과');
39
+ console.log(chalk.green(` PASS: ${totalPass}`));
40
+ console.log(chalk.red(` FAIL: ${totalFail}`));
41
+ console.log(chalk.yellow(` WARN: ${totalWarn}`));
42
+ console.log('');
43
+ if (totalFail > 0) {
44
+ process.exit(1);
45
+ }
46
+ }
47
+ function validatePlan(artifactsDir) {
48
+ const filePath = path.join(artifactsDir, 'plan.md');
49
+ let pass = 0, fail = 0, warn = 0;
50
+ printSection('plan.md');
51
+ if (!fs.existsSync(filePath)) {
52
+ logFail('파일 없음');
53
+ return { pass: 0, fail: 1, warn: 0 };
54
+ }
55
+ const content = fs.readFileSync(filePath, 'utf-8');
56
+ // 필수 섹션 검사
57
+ const requiredSections = ['서비스 개요', '기능 목록', '비기능 요구사항'];
58
+ for (const section of requiredSections) {
59
+ if (content.includes(section)) {
60
+ logPass(`섹션 존재: ${section}`);
61
+ pass++;
62
+ }
63
+ else {
64
+ logFail(`섹션 누락: ${section}`);
65
+ fail++;
66
+ }
67
+ }
68
+ // TBD 개수 검사
69
+ const tbdMatches = content.match(/TBD/gi) || [];
70
+ if (tbdMatches.length > 3) {
71
+ logWarn(`TBD 항목: ${tbdMatches.length}개 (3개 초과)`);
72
+ warn++;
73
+ }
74
+ else {
75
+ logPass(`TBD 항목: ${tbdMatches.length}개`);
76
+ pass++;
77
+ }
78
+ console.log('');
79
+ return { pass, fail, warn };
80
+ }
81
+ function validateProject(artifactsDir) {
82
+ const filePath = path.join(artifactsDir, 'project.md');
83
+ let pass = 0, fail = 0, warn = 0;
84
+ printSection('project.md');
85
+ if (!fs.existsSync(filePath)) {
86
+ logFail('파일 없음');
87
+ return { pass: 0, fail: 1, warn: 0 };
88
+ }
89
+ const content = fs.readFileSync(filePath, 'utf-8');
90
+ // 필수 섹션 검사
91
+ const requiredSections = ['프로젝트 규모', '기술 스택'];
92
+ for (const section of requiredSections) {
93
+ if (content.includes(section)) {
94
+ logPass(`섹션 존재: ${section}`);
95
+ pass++;
96
+ }
97
+ else {
98
+ logFail(`섹션 누락: ${section}`);
99
+ fail++;
100
+ }
101
+ }
102
+ // Frozen 상태 검사
103
+ if (content.includes('Frozen') || content.includes('🔒')) {
104
+ logPass('Frozen 상태 표시됨');
105
+ pass++;
106
+ }
107
+ else {
108
+ logWarn('Frozen 상태 미표시');
109
+ warn++;
110
+ }
111
+ // 모호한 버전 검사 (예: 1.x, 2.x)
112
+ if (/\d+\.x/i.test(content)) {
113
+ logWarn('모호한 버전 형식 (예: 1.x)');
114
+ warn++;
115
+ }
116
+ else {
117
+ logPass('버전 형식 양호');
118
+ pass++;
119
+ }
120
+ console.log('');
121
+ return { pass, fail, warn };
122
+ }
123
+ export function validateBacklog(artifactsDir) {
124
+ const backlogDir = path.join(artifactsDir, 'backlog');
125
+ let pass = 0, fail = 0, warn = 0;
126
+ printSection('backlog/');
127
+ if (!fs.existsSync(backlogDir) || !fs.statSync(backlogDir).isDirectory()) {
128
+ logWarn('backlog/ 디렉토리 없음 (Task 생성 전)');
129
+ console.log('');
130
+ return { pass: 0, fail: 0, warn: 1 };
131
+ }
132
+ const taskFiles = fs
133
+ .readdirSync(backlogDir)
134
+ .filter((file) => /^task-\d+\.md$/i.test(file));
135
+ if (taskFiles.length > 0) {
136
+ logPass(`Task 개수: ${taskFiles.length}개`);
137
+ pass++;
138
+ }
139
+ else {
140
+ logWarn('대기 Task 없음');
141
+ warn++;
142
+ console.log('');
143
+ return { pass, fail, warn };
144
+ }
145
+ const missingAcceptance = taskFiles.filter((file) => {
146
+ const content = fs.readFileSync(path.join(backlogDir, file), 'utf-8');
147
+ return !hasAcceptanceCriteria(content);
148
+ });
149
+ if (missingAcceptance.length === 0) {
150
+ logPass(`수용 조건 존재 (${taskFiles.length}/${taskFiles.length})`);
151
+ pass++;
152
+ }
153
+ else {
154
+ logWarn(`수용 조건 미확인 (${taskFiles.length - missingAcceptance.length}/${taskFiles.length})`);
155
+ warn++;
156
+ }
157
+ console.log('');
158
+ return { pass, fail, warn };
159
+ }
160
+ export function validateSprint(artifactsDir) {
161
+ const sprintsDir = path.join(artifactsDir, 'sprints');
162
+ let pass = 0, fail = 0, warn = 0;
163
+ printSection('sprints/');
164
+ if (!fs.existsSync(sprintsDir) || !fs.statSync(sprintsDir).isDirectory()) {
165
+ logWarn('sprints/ 디렉토리 없음 (스프린트 시작 전)');
166
+ console.log('');
167
+ return { pass: 0, fail: 0, warn: 1 };
168
+ }
169
+ const sprintDirs = fs
170
+ .readdirSync(sprintsDir, { withFileTypes: true })
171
+ .filter((dirent) => dirent.isDirectory() && /^sprint-\d+$/.test(dirent.name))
172
+ .map((dirent) => dirent.name);
173
+ if (sprintDirs.length === 0) {
174
+ logWarn('스프린트 디렉토리 없음 (스프린트 시작 전)');
175
+ warn++;
176
+ console.log('');
177
+ return { pass, fail, warn };
178
+ }
179
+ const latestSprint = sprintDirs.sort((a, b) => {
180
+ const numA = parseInt(a.split('-')[1], 10);
181
+ const numB = parseInt(b.split('-')[1], 10);
182
+ return numB - numA;
183
+ })[0];
184
+ const metaPath = path.join(sprintsDir, latestSprint, 'meta.md');
185
+ if (!fs.existsSync(metaPath)) {
186
+ logFail(`${latestSprint}/meta.md 없음`);
187
+ console.log('');
188
+ return { pass: 0, fail: 1, warn: 0 };
189
+ }
190
+ const content = fs.readFileSync(metaPath, 'utf-8');
191
+ logInfo(`최신 스프린트: ${latestSprint}`);
192
+ const requiredFields = ['스프린트 번호', '상태', '시작일', '종료 예정', '목표'];
193
+ requiredFields.forEach((field) => {
194
+ if (content.includes(field)) {
195
+ logPass(`필드 존재: ${field}`);
196
+ pass++;
197
+ }
198
+ else {
199
+ logWarn(`필드 미확인: ${field}`);
200
+ warn++;
201
+ }
202
+ });
203
+ const hasTaskSection = content.includes('Task 요약') || content.includes('Task 목록');
204
+ if (hasTaskSection) {
205
+ logPass('Task 섹션 존재');
206
+ pass++;
207
+ }
208
+ else {
209
+ logWarn('Task 섹션 미확인');
210
+ warn++;
211
+ }
212
+ const tasksDir = path.join(sprintsDir, latestSprint, 'tasks');
213
+ if (fs.existsSync(tasksDir) && fs.statSync(tasksDir).isDirectory()) {
214
+ const taskFiles = fs
215
+ .readdirSync(tasksDir)
216
+ .filter((file) => /^task-\d+\.md$/i.test(file));
217
+ if (taskFiles.length > 0) {
218
+ logPass(`Task 개수: ${taskFiles.length}개`);
219
+ pass++;
220
+ }
221
+ else {
222
+ logWarn('Task 없음');
223
+ warn++;
224
+ }
225
+ }
226
+ else {
227
+ logWarn('tasks/ 디렉토리 없음');
228
+ warn++;
229
+ }
230
+ console.log('');
231
+ return { pass, fail, warn };
232
+ }
233
+ function hasAcceptanceCriteria(content) {
234
+ return (content.includes('수용 조건') ||
235
+ content.includes('Acceptance Criteria') ||
236
+ content.includes('AC-'));
237
+ }
238
+ function printSection(title) {
239
+ const width = 60;
240
+ const line = '─'.repeat(width);
241
+ const paddedTitle = ` ${title}`.padEnd(width, ' ');
242
+ console.log('');
243
+ console.log(chalk.cyan(`┌${line}┐`));
244
+ console.log(chalk.cyan(`│${paddedTitle}│`));
245
+ console.log(chalk.cyan(`└${line}┘`));
246
+ console.log('');
247
+ }
248
+ function logPass(message) {
249
+ console.log(chalk.green(` [PASS] ${message}`));
250
+ }
251
+ function logWarn(message) {
252
+ console.log(chalk.yellow(` [WARN] ${message}`));
253
+ }
254
+ function logFail(message) {
255
+ console.log(chalk.red(` [FAIL] ${message}`));
256
+ }
257
+ function logInfo(message) {
258
+ console.log(chalk.cyan(` [INFO] ${message}`));
259
+ }
260
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};