@silbaram/artifact-driven-agent 0.1.9 → 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 (222) hide show
  1. package/README.md +296 -25
  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/artifacts/api.md +2 -212
  5. package/ai-dev-team/artifacts/features/_template/api.md +19 -19
  6. package/ai-dev-team/artifacts/features/_template/review.md +14 -14
  7. package/ai-dev-team/artifacts/features/_template/spec.md +28 -28
  8. package/ai-dev-team/artifacts/features/_template/ui.md +14 -14
  9. package/ai-dev-team/artifacts/improvement-reports/IMP-0000-template.md +57 -57
  10. package/ai-dev-team/artifacts/project.md +2 -193
  11. package/ai-dev-team/artifacts/rfc/RFC-0000-template.md +49 -49
  12. package/core/artifacts/decision.md +72 -72
  13. package/core/artifacts/plan.md +187 -187
  14. package/core/artifacts/project.md +193 -193
  15. package/core/artifacts/sprints/_template/docs/release-notes.md +37 -37
  16. package/core/artifacts/sprints/_template/meta.md +54 -54
  17. package/core/artifacts/sprints/_template/retrospective.md +50 -50
  18. package/core/artifacts/sprints/_template/review-reports/review-template.md +49 -49
  19. package/core/artifacts/sprints/_template/tasks/task-template.md +43 -43
  20. package/core/docs-templates/mkdocs/docs/architecture/overview.md +29 -29
  21. package/core/docs-templates/mkdocs/docs/changelog.md +36 -36
  22. package/core/docs-templates/mkdocs/docs/contributing/contributing.md +60 -60
  23. package/core/docs-templates/mkdocs/docs/getting-started/configuration.md +51 -51
  24. package/core/docs-templates/mkdocs/docs/getting-started/installation.md +41 -41
  25. package/core/docs-templates/mkdocs/docs/getting-started/quick-start.md +56 -56
  26. package/core/docs-templates/mkdocs/docs/guides/api-reference.md +83 -83
  27. package/core/docs-templates/mkdocs/docs/index.md +32 -32
  28. package/core/docs-templates/mkdocs/mkdocs.yml +86 -86
  29. package/core/roles/analyzer.md +265 -265
  30. package/core/roles/developer.md +6 -1
  31. package/core/roles/documenter.md +226 -715
  32. package/core/roles/improver.md +461 -461
  33. package/core/roles/manager.md +574 -544
  34. package/core/roles/planner.md +398 -398
  35. package/core/roles/reviewer.md +294 -294
  36. package/core/rules/document-priority.md +198 -198
  37. package/core/rules/escalation.md +172 -172
  38. package/core/rules/iteration.md +236 -236
  39. package/core/rules/rfc.md +31 -31
  40. package/core/rules/rollback.md +218 -218
  41. package/core/skills/_template/SKILL.md +50 -0
  42. package/core/skills/clean-code/SKILL.md +177 -0
  43. package/core/skills/code-review-checklist/SKILL.md +125 -0
  44. package/core/skills/error-handling/SKILL.md +155 -0
  45. package/core/skills/talk-game-dot-design/SKILL.md +85 -0
  46. package/core/skills/talk-game-dot-design/references/asset-specs.md +57 -0
  47. package/core/skills/talk-game-dot-design/references/review-checklist.md +34 -0
  48. package/core/skills/task-writing/SKILL.md +166 -0
  49. package/core/skills/testing-patterns/SKILL.md +140 -0
  50. package/dist/bin/cli.d.ts +2 -0
  51. package/dist/bin/cli.js +121 -0
  52. package/dist/bin/cli.js.map +1 -0
  53. package/dist/src/commands/config.d.ts +4 -0
  54. package/dist/src/commands/config.js +427 -0
  55. package/dist/src/commands/config.js.map +1 -0
  56. package/dist/src/commands/docs.d.ts +12 -0
  57. package/dist/src/commands/docs.js +453 -0
  58. package/dist/src/commands/docs.js.map +1 -0
  59. package/dist/src/commands/interactive.d.ts +4 -0
  60. package/dist/src/commands/interactive.js +380 -0
  61. package/dist/src/commands/interactive.js.map +1 -0
  62. package/dist/src/commands/logs.d.ts +1 -0
  63. package/dist/src/commands/logs.js +76 -0
  64. package/dist/src/commands/logs.js.map +1 -0
  65. package/dist/src/commands/monitor.d.ts +6 -0
  66. package/dist/src/commands/monitor.js +216 -0
  67. package/dist/src/commands/monitor.js.map +1 -0
  68. package/dist/src/commands/reset.d.ts +4 -0
  69. package/dist/src/commands/reset.js +57 -0
  70. package/dist/src/commands/reset.js.map +1 -0
  71. package/dist/src/commands/run.d.ts +45 -0
  72. package/dist/src/commands/run.js +421 -0
  73. package/dist/src/commands/run.js.map +1 -0
  74. package/dist/src/commands/sessions.d.ts +5 -0
  75. package/dist/src/commands/sessions.js +563 -0
  76. package/dist/src/commands/sessions.js.map +1 -0
  77. package/dist/src/commands/setup.d.ts +1 -0
  78. package/dist/src/commands/setup.js +132 -0
  79. package/dist/src/commands/setup.js.map +1 -0
  80. package/dist/src/commands/skills.d.ts +4 -0
  81. package/dist/src/commands/skills.js +748 -0
  82. package/dist/src/commands/skills.js.map +1 -0
  83. package/dist/src/commands/sprint.d.ts +4 -0
  84. package/dist/src/commands/sprint.js +434 -0
  85. package/dist/src/commands/sprint.js.map +1 -0
  86. package/dist/src/commands/status.d.ts +1 -0
  87. package/dist/src/commands/status.js +97 -0
  88. package/dist/src/commands/status.js.map +1 -0
  89. package/dist/src/commands/upgrade.d.ts +6 -0
  90. package/dist/src/commands/upgrade.js +350 -0
  91. package/dist/src/commands/upgrade.js.map +1 -0
  92. package/dist/src/commands/validate.d.ts +8 -0
  93. package/dist/src/commands/validate.js +260 -0
  94. package/dist/src/commands/validate.js.map +1 -0
  95. package/dist/src/commands/validate.test.d.ts +1 -0
  96. package/dist/src/commands/validate.test.js +74 -0
  97. package/dist/src/commands/validate.test.js.map +1 -0
  98. package/{src/index.js → dist/src/index.d.ts} +1 -3
  99. package/dist/src/index.js +15 -0
  100. package/dist/src/index.js.map +1 -0
  101. package/dist/src/types/common.d.ts +31 -0
  102. package/dist/src/types/common.js +2 -0
  103. package/dist/src/types/common.js.map +1 -0
  104. package/dist/src/types/config.d.ts +46 -0
  105. package/dist/src/types/config.js +2 -0
  106. package/dist/src/types/config.js.map +1 -0
  107. package/dist/src/types/index.d.ts +53 -0
  108. package/dist/src/types/index.js +2 -0
  109. package/dist/src/types/index.js.map +1 -0
  110. package/dist/src/types/session.d.ts +87 -0
  111. package/dist/src/types/session.js +2 -0
  112. package/dist/src/types/session.js.map +1 -0
  113. package/dist/src/types/task.d.ts +32 -0
  114. package/dist/src/types/task.js +2 -0
  115. package/dist/src/types/task.js.map +1 -0
  116. package/dist/src/ui/dashboard.d.ts +9 -0
  117. package/dist/src/ui/dashboard.js +468 -0
  118. package/dist/src/ui/dashboard.js.map +1 -0
  119. package/dist/src/ui/keyHandler.d.ts +47 -0
  120. package/dist/src/ui/keyHandler.js +132 -0
  121. package/dist/src/ui/keyHandler.js.map +1 -0
  122. package/dist/src/ui/quickActions.d.ts +25 -0
  123. package/dist/src/ui/quickActions.js +106 -0
  124. package/dist/src/ui/quickActions.js.map +1 -0
  125. package/dist/src/utils/config.d.ts +33 -0
  126. package/dist/src/utils/config.js +135 -0
  127. package/dist/src/utils/config.js.map +1 -0
  128. package/dist/src/utils/files.d.ts +84 -0
  129. package/dist/src/utils/files.js +202 -0
  130. package/dist/src/utils/files.js.map +1 -0
  131. package/dist/src/utils/promptBuilder.d.ts +39 -0
  132. package/dist/src/utils/promptBuilder.js +726 -0
  133. package/dist/src/utils/promptBuilder.js.map +1 -0
  134. package/dist/src/utils/sessionState.d.ts +83 -0
  135. package/dist/src/utils/sessionState.js +466 -0
  136. package/dist/src/utils/sessionState.js.map +1 -0
  137. package/dist/src/utils/sessionState.process.test.d.ts +1 -0
  138. package/dist/src/utils/sessionState.process.test.js +93 -0
  139. package/dist/src/utils/sessionState.process.test.js.map +1 -0
  140. package/dist/src/utils/sessionState.test.d.ts +1 -0
  141. package/dist/src/utils/sessionState.test.js +150 -0
  142. package/dist/src/utils/sessionState.test.js.map +1 -0
  143. package/dist/src/utils/sprintUtils.d.ts +13 -0
  144. package/dist/src/utils/sprintUtils.js +129 -0
  145. package/dist/src/utils/sprintUtils.js.map +1 -0
  146. package/dist/src/utils/taskParser.d.ts +9 -0
  147. package/dist/src/utils/taskParser.js +122 -0
  148. package/dist/src/utils/taskParser.js.map +1 -0
  149. package/dist/src/utils/taskParser.test.d.ts +1 -0
  150. package/dist/src/utils/taskParser.test.js +69 -0
  151. package/dist/src/utils/taskParser.test.js.map +1 -0
  152. package/package.json +62 -47
  153. package/templates/cli/artifacts/commands.md +262 -262
  154. package/templates/cli/artifacts/output-format.md +298 -298
  155. package/templates/cli/rules/command-change.md +225 -225
  156. package/templates/game/artifacts/assets.md +148 -148
  157. package/templates/game/artifacts/game-systems.md +217 -217
  158. package/templates/game/artifacts/hud.md +199 -199
  159. package/templates/game/rules/system-change.md +184 -184
  160. package/templates/library/artifacts/changelog.md +84 -84
  161. package/templates/library/artifacts/examples.md +157 -157
  162. package/templates/library/artifacts/public-api.md +197 -197
  163. package/templates/library/rules/versioning.md +186 -186
  164. package/templates/web-dev/artifacts/api.md +212 -212
  165. package/templates/web-dev/artifacts/ui.md +104 -104
  166. package/templates/web-dev/rules/api-change.md +198 -198
  167. package/ai-dev-team/.ada-status.json +0 -10
  168. package/ai-dev-team/.ada-version +0 -6
  169. package/ai-dev-team/.current-template +0 -1
  170. package/ai-dev-team/.gitkeep +0 -0
  171. package/ai-dev-team/.sessions/logs/20260124-014551-00f04724.log +0 -5
  172. package/ai-dev-team/.sessions/logs/20260124-014623-cb2b1d44.log +0 -5
  173. package/ai-dev-team/artifacts/.gitkeep +0 -0
  174. package/ai-dev-team/artifacts/decision.md +0 -72
  175. package/ai-dev-team/artifacts/plan.md +0 -187
  176. package/ai-dev-team/artifacts/sprints/_template/docs/release-notes.md +0 -37
  177. package/ai-dev-team/artifacts/sprints/_template/meta.md +0 -54
  178. package/ai-dev-team/artifacts/sprints/_template/retrospective.md +0 -50
  179. package/ai-dev-team/artifacts/sprints/_template/review-reports/review-template.md +0 -49
  180. package/ai-dev-team/artifacts/sprints/_template/tasks/task-template.md +0 -43
  181. package/ai-dev-team/artifacts/ui.md +0 -104
  182. package/ai-dev-team/roles/.gitkeep +0 -0
  183. package/ai-dev-team/roles/analyzer.md +0 -265
  184. package/ai-dev-team/roles/developer.md +0 -222
  185. package/ai-dev-team/roles/documenter.md +0 -715
  186. package/ai-dev-team/roles/improver.md +0 -461
  187. package/ai-dev-team/roles/manager.md +0 -544
  188. package/ai-dev-team/roles/planner.md +0 -398
  189. package/ai-dev-team/roles/reviewer.md +0 -294
  190. package/ai-dev-team/rules/.gitkeep +0 -0
  191. package/ai-dev-team/rules/api-change.md +0 -198
  192. package/ai-dev-team/rules/document-priority.md +0 -199
  193. package/ai-dev-team/rules/escalation.md +0 -172
  194. package/ai-dev-team/rules/iteration.md +0 -236
  195. package/ai-dev-team/rules/rfc.md +0 -31
  196. package/ai-dev-team/rules/rollback.md +0 -218
  197. package/bin/cli.js +0 -127
  198. package/src/commands/config.js +0 -371
  199. package/src/commands/docs.js +0 -502
  200. package/src/commands/interactive.js +0 -392
  201. package/src/commands/logs.js +0 -81
  202. package/src/commands/monitor.js +0 -236
  203. package/src/commands/reset.js +0 -66
  204. package/src/commands/run.js +0 -739
  205. package/src/commands/sessions.js +0 -646
  206. package/src/commands/setup.js +0 -149
  207. package/src/commands/sprint.js +0 -503
  208. package/src/commands/status.js +0 -109
  209. package/src/commands/upgrade.js +0 -416
  210. package/src/commands/validate.js +0 -289
  211. package/src/commands/validate.test.js +0 -84
  212. package/src/ui/dashboard.js +0 -518
  213. package/src/ui/keyHandler.js +0 -147
  214. package/src/ui/quickActions.js +0 -111
  215. package/src/utils/config.js +0 -74
  216. package/src/utils/files.js +0 -201
  217. package/src/utils/sessionState.js +0 -513
  218. package/src/utils/sessionState.process.test.js +0 -101
  219. package/src/utils/sessionState.test.js +0 -183
  220. package/src/utils/sprintUtils.js +0 -134
  221. package/src/utils/taskParser.js +0 -134
  222. package/src/utils/taskParser.test.js +0 -76
@@ -1,111 +0,0 @@
1
- import chalk from 'chalk';
2
- import { sessions } from '../commands/sessions.js';
3
- import { logs } from '../commands/logs.js';
4
- import { status } from '../commands/status.js';
5
-
6
- /**
7
- * Quick Action 정의
8
- */
9
- export const QUICK_ACTIONS = {
10
- 'q': {
11
- label: '종료',
12
- description: '대시보드 종료',
13
- handler: null // 특수 처리
14
- },
15
- 'h': {
16
- label: '도움말',
17
- description: '도움말 표시',
18
- handler: showHelp
19
- },
20
- // 알파벳 키 추가 명령어
21
- 's': {
22
- label: 'sessions',
23
- description: '활성 세션 목록',
24
- handler: runSessions
25
- },
26
- 'l': {
27
- label: 'logs',
28
- description: '최근 세션 로그',
29
- handler: runLogs
30
- },
31
- 't': {
32
- label: 'status',
33
- description: '프로젝트 상태 확인',
34
- handler: runStatus
35
- }
36
- };
37
-
38
- /**
39
- * 세션 목록 표시
40
- */
41
- async function runSessions() {
42
- console.log('');
43
- await sessions({});
44
- console.log('\n계속하려면 아무 키나 누르세요...');
45
- }
46
-
47
- /**
48
- * 로그 확인
49
- */
50
- async function runLogs() {
51
- console.log('');
52
- await logs();
53
- console.log('\n계속하려면 아무 키나 누르세요...');
54
- }
55
-
56
- /**
57
- * 프로젝트 상태 확인
58
- */
59
- async function runStatus() {
60
- console.log('');
61
- await status();
62
- console.log('\n계속하려면 아무 키나 누르세요...');
63
- }
64
-
65
- /**
66
- * 도움말 표시
67
- */
68
- async function showHelp() {
69
- console.log('');
70
- console.log(chalk.cyan('━'.repeat(60)));
71
- console.log(chalk.cyan.bold(' ADA UI Mode 도움말'));
72
- console.log(chalk.cyan('━'.repeat(60)));
73
- console.log('');
74
- console.log(chalk.white.bold(' 알파벳 키 (관리/모니터링):'));
75
- console.log(' s - 활성 세션 목록');
76
- console.log(' l - 최근 세션 로그');
77
- console.log(' t - 프로젝트 상태 확인');
78
- console.log('');
79
- console.log(chalk.white.bold(' 기타 키:'));
80
- console.log(' q - UI 모드 종료');
81
- console.log(' h - 이 도움말 표시');
82
- console.log('');
83
- console.log(chalk.gray(' 화면은 2초마다 자동 갱신됩니다.'));
84
- console.log(chalk.gray(' 에이전트 실행 중에는 UI가 일시 정지됩니다.'));
85
- console.log('');
86
- console.log(chalk.cyan('━'.repeat(60)));
87
- console.log('\n계속하려면 아무 키나 누르세요...');
88
- }
89
-
90
- /**
91
- * Quick Action 실행
92
- */
93
- export async function executeQuickAction(key, state) {
94
- const action = QUICK_ACTIONS[key];
95
- if (!action) {
96
- return { handled: false };
97
- }
98
-
99
- if (action.handler === null) {
100
- // 특수 처리 (refresh, quit)
101
- return { handled: true, special: key };
102
- }
103
-
104
- try {
105
- await action.handler(state);
106
- return { handled: true };
107
- } catch (error) {
108
- console.error(chalk.red(`액션 실행 오류: ${error.message}`));
109
- return { handled: true, error: error.message };
110
- }
111
- }
@@ -1,74 +0,0 @@
1
- import fs from 'fs-extra';
2
- import path from 'path';
3
- import { getWorkspaceDir } from './files.js';
4
-
5
- const CONFIG_FILENAME = 'ada.config.json';
6
-
7
- const DEFAULT_CONFIG = {
8
- version: '1.0',
9
- defaults: {
10
- tool: 'claude'
11
- },
12
- roles: {
13
- // 기본값은 모두 claude로 설정하되, 사용자가 변경 가능
14
- manager: 'claude',
15
- planner: 'claude',
16
- architect: 'claude',
17
- developer: 'claude',
18
- reviewer: 'claude',
19
- improver: 'claude',
20
- documenter: 'claude'
21
- }
22
- };
23
-
24
- /**
25
- * 설정 파일 경로 반환
26
- */
27
- export function getConfigPath() {
28
- return path.join(getWorkspaceDir(), CONFIG_FILENAME);
29
- }
30
-
31
- /**
32
- * 설정 파일 읽기 (없으면 기본값 생성)
33
- */
34
- export function readConfig() {
35
- const configPath = getConfigPath();
36
-
37
- if (!fs.existsSync(configPath)) {
38
- // 설정 파일이 없으면 기본값 저장 후 반환
39
- writeConfig(DEFAULT_CONFIG);
40
- return DEFAULT_CONFIG;
41
- }
42
-
43
- try {
44
- const content = fs.readFileSync(configPath, 'utf-8');
45
- const config = JSON.parse(content);
46
-
47
- // 누락된 필드가 있으면 기본값으로 채움
48
- return {
49
- ...DEFAULT_CONFIG,
50
- ...config,
51
- defaults: { ...DEFAULT_CONFIG.defaults, ...(config.defaults || {}) },
52
- roles: { ...DEFAULT_CONFIG.roles, ...(config.roles || {}) }
53
- };
54
- } catch (error) {
55
- console.warn(`⚠️ 설정 파일(${CONFIG_FILENAME}) 파싱 실패, 기본값을 사용합니다.`);
56
- return DEFAULT_CONFIG;
57
- }
58
- }
59
-
60
- /**
61
- * 설정 파일 쓰기
62
- */
63
- export function writeConfig(config) {
64
- const configPath = getConfigPath();
65
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
66
- }
67
-
68
- /**
69
- * 역할에 대한 권장 도구 반환
70
- */
71
- export function getToolForRole(role) {
72
- const config = readConfig();
73
- return config.roles[role] || config.defaults.tool || 'claude';
74
- }
@@ -1,201 +0,0 @@
1
- import fs from 'fs-extra';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { createRequire } from 'node:module';
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
- const require = createRequire(import.meta.url);
9
-
10
- /**
11
- * 패키지 루트 디렉토리 반환
12
- */
13
- export function getPackageRoot() {
14
- return path.resolve(__dirname, '../..');
15
- }
16
-
17
- /**
18
- * 작업 디렉토리 (ai-dev-team) 경로 반환
19
- */
20
- export function getWorkspaceDir() {
21
- return path.join(process.cwd(), 'ai-dev-team');
22
- }
23
-
24
- /**
25
- * 세션 디렉토리 경로 반환
26
- */
27
- export function getSessionsDir() {
28
- return path.join(getWorkspaceDir(), '.sessions');
29
- }
30
-
31
- /**
32
- * 로그 디렉토리 경로 반환
33
- */
34
- export function getLogsDir() {
35
- return path.join(getWorkspaceDir(), '.sessions', 'logs');
36
- }
37
-
38
- /**
39
- * 현재 템플릿 파일 경로 반환
40
- */
41
- export function getCurrentTemplateFile() {
42
- return path.join(getWorkspaceDir(), '.current-template');
43
- }
44
-
45
- /**
46
- * 현재 세팅된 템플릿 반환
47
- */
48
- export function getCurrentTemplate() {
49
- const templateFile = getCurrentTemplateFile();
50
- if (fs.existsSync(templateFile)) {
51
- return fs.readFileSync(templateFile, 'utf-8').trim();
52
- }
53
- return null;
54
- }
55
-
56
- /**
57
- * 세션 ID 생성
58
- */
59
- export function generateSessionId() {
60
- const now = new Date();
61
- const date = now.toISOString().slice(0, 10).replace(/-/g, '');
62
- const time = now.toTimeString().slice(0, 8).replace(/:/g, '');
63
- const random = Math.random().toString(16).slice(2, 10);
64
- return `${date}-${time}-${random}`;
65
- }
66
-
67
- /**
68
- * 타임스탬프 생성
69
- */
70
- export function getTimestamp() {
71
- return new Date().toISOString().replace('T', ' ').slice(0, 19);
72
- }
73
-
74
- /**
75
- * 사용 가능한 템플릿 목록
76
- */
77
- export function getAvailableTemplates() {
78
- const templatesDir = path.join(getPackageRoot(), 'templates');
79
- if (!fs.existsSync(templatesDir)) {
80
- return [];
81
- }
82
- return fs.readdirSync(templatesDir).filter(f => {
83
- return fs.statSync(path.join(templatesDir, f)).isDirectory();
84
- });
85
- }
86
-
87
- /**
88
- * 사용 가능한 역할 목록
89
- */
90
- export function getAvailableRoles() {
91
- const workspaceRoles = path.join(getWorkspaceDir(), 'roles');
92
- if (!fs.existsSync(workspaceRoles)) {
93
- return [];
94
- }
95
- return fs.readdirSync(workspaceRoles)
96
- .filter(f => f.endsWith('.md'))
97
- .map(f => f.replace('.md', ''));
98
- }
99
-
100
- /**
101
- * 사용 가능한 도구 목록
102
- */
103
- export function getAvailableTools() {
104
- return ['claude', 'codex', 'gemini', 'copilot'];
105
- }
106
-
107
- /**
108
- * 워크스페이스가 세팅되어 있는지 확인
109
- */
110
- export function isWorkspaceSetup() {
111
- const workspace = getWorkspaceDir();
112
- const rolesDir = path.join(workspace, 'roles');
113
- return fs.existsSync(rolesDir) && fs.readdirSync(rolesDir).filter(f => f.endsWith('.md')).length > 0;
114
- }
115
-
116
- /**
117
- * 디렉토리 복사 (머지)
118
- */
119
- export function copyDirMerge(src, dest) {
120
- if (!fs.existsSync(src)) return;
121
-
122
- fs.ensureDirSync(dest);
123
- const items = fs.readdirSync(src);
124
-
125
- for (const item of items) {
126
- const srcPath = path.join(src, item);
127
- const destPath = path.join(dest, item);
128
- const stat = fs.statSync(srcPath);
129
-
130
- if (stat.isDirectory()) {
131
- copyDirMerge(srcPath, destPath);
132
- } else {
133
- fs.copyFileSync(srcPath, destPath);
134
- }
135
- }
136
- }
137
-
138
- /**
139
- * 버전 파일 경로 반환
140
- */
141
- export function getVersionFile() {
142
- return path.join(getWorkspaceDir(), '.ada-version');
143
- }
144
-
145
- /**
146
- * 백업 디렉토리 경로 반환
147
- */
148
- export function getBackupDir() {
149
- return path.join(getWorkspaceDir(), '.backups');
150
- }
151
-
152
- /**
153
- * 패키지 버전 반환
154
- */
155
- export function getPackageVersion() {
156
- const packageJson = require(path.join(getPackageRoot(), 'package.json'));
157
- return packageJson.version;
158
- }
159
-
160
- /**
161
- * 작업공간 버전 정보 읽기
162
- */
163
- export function readVersion() {
164
- const versionFile = getVersionFile();
165
- if (!fs.existsSync(versionFile)) {
166
- return null;
167
- }
168
- try {
169
- const content = fs.readFileSync(versionFile, 'utf-8');
170
- return JSON.parse(content);
171
- } catch (error) {
172
- return null;
173
- }
174
- }
175
-
176
- /**
177
- * 작업공간 버전 정보 쓰기
178
- */
179
- export function writeVersion(versionInfo) {
180
- const versionFile = getVersionFile();
181
- fs.writeFileSync(versionFile, JSON.stringify(versionInfo, null, 2));
182
- }
183
-
184
- /**
185
- * 버전 비교 (semver 형식)
186
- * @returns {number} a > b이면 1, a < b이면 -1, 같으면 0
187
- */
188
- export function compareVersions(a, b) {
189
- const aParts = a.split('.').map(Number);
190
- const bParts = b.split('.').map(Number);
191
-
192
- for (let i = 0; i < 3; i++) {
193
- const aVal = aParts[i] || 0;
194
- const bVal = bParts[i] || 0;
195
-
196
- if (aVal > bVal) return 1;
197
- if (aVal < bVal) return -1;
198
- }
199
-
200
- return 0;
201
- }