aiwf 0.3.21 → 0.3.23

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 (140) hide show
  1. package/package.json +3 -2
  2. package/src/cli/index.js +39 -336
  3. package/src/lib/installer.js +310 -90
  4. package/src/utils/messages.js +24 -0
  5. package/src/DEPENDENCY_MAP.md +0 -90
  6. package/src/cli/cache-cli.js +0 -459
  7. package/src/cli/checkpoint-cli.js +0 -417
  8. package/src/cli/language-cli.js +0 -286
  9. package/src/cli/sprint-cli.js +0 -287
  10. package/src/commands/ai-tool.js +0 -383
  11. package/src/commands/compress.js +0 -60
  12. package/src/commands/create-project.js +0 -160
  13. package/src/commands/evaluate.js +0 -459
  14. package/src/commands/persona.js +0 -309
  15. package/src/commands/sprint-task.js +0 -262
  16. package/src/commands/token.js +0 -312
  17. package/src/lib/ai-persona-manager.js +0 -711
  18. package/src/lib/cache-system.js +0 -332
  19. package/src/lib/context-engine.js +0 -568
  20. package/src/lib/github-integration.js +0 -402
  21. package/src/lib/memory-profiler.js +0 -471
  22. package/src/lib/metrics-collector.js +0 -885
  23. package/src/lib/offline-detector.js +0 -386
  24. package/src/lib/resource-loader-enhanced.js +0 -399
  25. package/src/lib/resource-loader.js +0 -250
  26. package/src/lib/resources/commands/ai-persona.js +0 -602
  27. package/src/lib/resources/commands/compress-context.js +0 -389
  28. package/src/lib/resources/commands/evaluate.js +0 -246
  29. package/src/lib/resources/commands/persona-context-apply.js +0 -562
  30. package/src/lib/resources/commands/token-tracking.js +0 -443
  31. package/src/lib/resources/config/commit-patterns.js +0 -103
  32. package/src/lib/resources/config/language.json +0 -6
  33. package/src/lib/resources/personas/PERSONA_INDEX.md +0 -57
  34. package/src/lib/resources/personas/analyst.json +0 -44
  35. package/src/lib/resources/personas/architect/best_practices.md +0 -136
  36. package/src/lib/resources/personas/architect/knowledge_base.md +0 -377
  37. package/src/lib/resources/personas/architect.json +0 -44
  38. package/src/lib/resources/personas/backend/best_practices.md +0 -766
  39. package/src/lib/resources/personas/backend/knowledge_base.md +0 -1070
  40. package/src/lib/resources/personas/data_analyst/best_practices.md +0 -594
  41. package/src/lib/resources/personas/data_analyst/knowledge_base.md +0 -1057
  42. package/src/lib/resources/personas/developer.json +0 -44
  43. package/src/lib/resources/personas/developer.md +0 -37
  44. package/src/lib/resources/personas/evaluation_criteria.json +0 -137
  45. package/src/lib/resources/personas/frontend/best_practices.md +0 -445
  46. package/src/lib/resources/personas/frontend/knowledge_base.md +0 -729
  47. package/src/lib/resources/personas/persona-index.json +0 -31
  48. package/src/lib/resources/personas/reviewer.json +0 -44
  49. package/src/lib/resources/personas/security/best_practices.md +0 -307
  50. package/src/lib/resources/personas/security/knowledge_base.md +0 -498
  51. package/src/lib/resources/personas/tester.json +0 -44
  52. package/src/lib/resources/templates/README.md +0 -78
  53. package/src/lib/resources/templates/api-server/config.json +0 -64
  54. package/src/lib/resources/templates/api-server/template/.aiwf/config.json +0 -56
  55. package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
  56. package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
  57. package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
  58. package/src/lib/resources/templates/api-server/template/.env.example +0 -29
  59. package/src/lib/resources/templates/api-server/template/.eslintrc.json +0 -23
  60. package/src/lib/resources/templates/api-server/template/README.md +0 -171
  61. package/src/lib/resources/templates/api-server/template/jest.config.js +0 -26
  62. package/src/lib/resources/templates/api-server/template/nodemon.json +0 -9
  63. package/src/lib/resources/templates/api-server/template/package.json +0 -61
  64. package/src/lib/resources/templates/api-server/template/src/app.ts +0 -60
  65. package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +0 -38
  66. package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
  67. package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +0 -128
  68. package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +0 -28
  69. package/src/lib/resources/templates/api-server/template/src/index.ts +0 -28
  70. package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
  71. package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
  72. package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
  73. package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
  74. package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
  75. package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +0 -31
  76. package/src/lib/resources/templates/api-server/template/src/routes/index.ts +0 -13
  77. package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +0 -67
  78. package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +0 -37
  79. package/src/lib/resources/templates/api-server/template/tests/app.test.ts +0 -40
  80. package/src/lib/resources/templates/api-server/template/tsconfig.json +0 -43
  81. package/src/lib/resources/templates/npm-library/config.json +0 -61
  82. package/src/lib/resources/templates/npm-library/template/LICENSE +0 -21
  83. package/src/lib/resources/templates/npm-library/template/README.md +0 -201
  84. package/src/lib/resources/templates/npm-library/template/package.json +0 -78
  85. package/src/lib/resources/templates/web-app/config.json +0 -53
  86. package/src/lib/resources/templates/web-app/template/.aiwf/config.json +0 -54
  87. package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
  88. package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
  89. package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
  90. package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +0 -20
  91. package/src/lib/resources/templates/web-app/template/README.md +0 -151
  92. package/src/lib/resources/templates/web-app/template/index.html +0 -14
  93. package/src/lib/resources/templates/web-app/template/package.json +0 -44
  94. package/src/lib/resources/templates/web-app/template/postcss.config.js +0 -6
  95. package/src/lib/resources/templates/web-app/template/public/vite.svg +0 -1
  96. package/src/lib/resources/templates/web-app/template/src/App.tsx +0 -21
  97. package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +0 -57
  98. package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
  99. package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
  100. package/src/lib/resources/templates/web-app/template/src/index.css +0 -60
  101. package/src/lib/resources/templates/web-app/template/src/main.tsx +0 -10
  102. package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
  103. package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +0 -89
  104. package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +0 -25
  105. package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
  106. package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +0 -9
  107. package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +0 -1
  108. package/src/lib/resources/templates/web-app/template/tailwind.config.js +0 -30
  109. package/src/lib/resources/templates/web-app/template/tsconfig.json +0 -37
  110. package/src/lib/resources/templates/web-app/template/tsconfig.node.json +0 -10
  111. package/src/lib/resources/templates/web-app/template/vite.config.ts +0 -23
  112. package/src/lib/resources/utils/background-monitor.js +0 -223
  113. package/src/lib/resources/utils/compression-metrics.js +0 -1031
  114. package/src/lib/resources/utils/compression-strategies.js +0 -557
  115. package/src/lib/resources/utils/content-normalizer.js +0 -455
  116. package/src/lib/resources/utils/context-compressor.js +0 -583
  117. package/src/lib/resources/utils/context-rule-parser.js +0 -180
  118. package/src/lib/resources/utils/context-token-monitor.js +0 -463
  119. package/src/lib/resources/utils/context-update-manager.js +0 -502
  120. package/src/lib/resources/utils/git-utils.js +0 -220
  121. package/src/lib/resources/utils/importance-classifier.js +0 -645
  122. package/src/lib/resources/utils/information-filter.js +0 -710
  123. package/src/lib/resources/utils/persona-aware-compressor.js +0 -598
  124. package/src/lib/resources/utils/prompt-injector.js +0 -242
  125. package/src/lib/resources/utils/simplified-evaluator.js +0 -119
  126. package/src/lib/resources/utils/text-summarizer.js +0 -492
  127. package/src/lib/resources/utils/token-counter.js +0 -177
  128. package/src/lib/resources/utils/token-monitor.js +0 -484
  129. package/src/lib/resources/utils/token-reporter.js +0 -452
  130. package/src/lib/resources/utils/token-storage.js +0 -433
  131. package/src/lib/resources/utils/token-tracker.js +0 -283
  132. package/src/lib/state/priority-calculator.js +0 -217
  133. package/src/lib/state/state-index.js +0 -155
  134. package/src/lib/state/task-scanner.js +0 -328
  135. package/src/lib/task-analyzer.js +0 -599
  136. package/src/lib/template-cache-system.js +0 -559
  137. package/src/lib/template-downloader.js +0 -467
  138. package/src/lib/template-version-manager.js +0 -491
  139. package/src/lib/token-optimizer.js +0 -517
  140. package/src/utils/engineering-guard.js +0 -399
@@ -1,312 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * AIWF 토큰 추적 명령어
5
- * AI 토큰 사용량 모니터링 및 분석
6
- */
7
-
8
- import { ResourceLoader } from '../lib/resource-loader.js';
9
- import chalk from 'chalk';
10
- import fs from 'fs-extra';
11
- import path from 'path';
12
-
13
- class TokenCommand {
14
- constructor() {
15
- this.resourceLoader = new ResourceLoader();
16
- this.tokenDataPath = path.join(process.cwd(), '.aiwf', 'token-usage');
17
- }
18
-
19
- /**
20
- * Token 명령어 실행
21
- */
22
- async execute(args) {
23
- const [subcommand, ...restArgs] = args;
24
-
25
- switch (subcommand) {
26
- case 'status':
27
- await this.showStatus();
28
- break;
29
- case 'report':
30
- await this.generateReport(restArgs);
31
- break;
32
- case 'track':
33
- await this.trackUsage(restArgs);
34
- break;
35
- case 'reset':
36
- await this.resetTracking();
37
- break;
38
- case 'limit':
39
- await this.setLimit(restArgs);
40
- break;
41
- default:
42
- this.showHelp();
43
- break;
44
- }
45
- }
46
-
47
- /**
48
- * 토큰 사용 상태 표시
49
- */
50
- async showStatus() {
51
- try {
52
- // 토큰 추적 모듈 로드
53
- const tokenTrackerModule = await this.resourceLoader.loadUtil('token-tracker.js');
54
- const TokenTracker = tokenTrackerModule.TokenTracker || tokenTrackerModule.default;
55
-
56
- if (!TokenTracker) {
57
- throw new Error('TokenTracker 모듈을 로드할 수 없습니다.');
58
- }
59
-
60
- const tracker = new TokenTracker({
61
- storageDir: this.tokenDataPath
62
- });
63
-
64
- await tracker.init();
65
- const stats = await tracker.getStatistics();
66
- const limits = await this.getLimits();
67
-
68
- console.log(chalk.cyan('💰 토큰 사용 현황'));
69
- console.log(chalk.gray('-'.repeat(50)));
70
-
71
- // 오늘 사용량
72
- console.log(chalk.bold('오늘 사용량:'));
73
- console.log(` 입력 토큰: ${chalk.yellow(stats.today.input.toLocaleString())}`);
74
- console.log(` 출력 토큰: ${chalk.yellow(stats.today.output.toLocaleString())}`);
75
- console.log(` 총 토큰: ${chalk.yellow(stats.today.total.toLocaleString())}`);
76
-
77
- if (limits.daily > 0) {
78
- const dailyUsagePercent = (stats.today.total / limits.daily * 100).toFixed(1);
79
- const dailyColor = dailyUsagePercent > 90 ? 'red' : dailyUsagePercent > 70 ? 'yellow' : 'green';
80
- console.log(` 일일 한도: ${chalk[dailyColor](`${dailyUsagePercent}% 사용`)}`);
81
- }
82
-
83
- // 이번 주 사용량
84
- console.log(chalk.bold('\n이번 주 사용량:'));
85
- console.log(` 입력 토큰: ${chalk.yellow(stats.week.input.toLocaleString())}`);
86
- console.log(` 출력 토큰: ${chalk.yellow(stats.week.output.toLocaleString())}`);
87
- console.log(` 총 토큰: ${chalk.yellow(stats.week.total.toLocaleString())}`);
88
-
89
- // 이번 달 사용량
90
- console.log(chalk.bold('\n이번 달 사용량:'));
91
- console.log(` 입력 토큰: ${chalk.yellow(stats.month.input.toLocaleString())}`);
92
- console.log(` 출력 토큰: ${chalk.yellow(stats.month.output.toLocaleString())}`);
93
- console.log(` 총 토큰: ${chalk.yellow(stats.month.total.toLocaleString())}`);
94
-
95
- if (limits.monthly > 0) {
96
- const monthlyUsagePercent = (stats.month.total / limits.monthly * 100).toFixed(1);
97
- const monthlyColor = monthlyUsagePercent > 90 ? 'red' : monthlyUsagePercent > 70 ? 'yellow' : 'green';
98
- console.log(` 월간 한도: ${chalk[monthlyColor](`${monthlyUsagePercent}% 사용`)}`);
99
- }
100
-
101
- // 전체 통계
102
- console.log(chalk.bold('\n전체 통계:'));
103
- console.log(` 총 세션: ${stats.overall.sessions}`);
104
- console.log(` 평균 세션당 토큰: ${Math.round(stats.overall.total / stats.overall.sessions).toLocaleString()}`);
105
- console.log(` 최대 단일 세션: ${stats.overall.maxSession.toLocaleString()} 토큰`);
106
-
107
- console.log(chalk.gray('\n' + '-'.repeat(50)));
108
- console.log(chalk.gray('상세 리포트: aiwf token report'));
109
-
110
- } catch (error) {
111
- console.error(chalk.red('❌ 토큰 상태 조회 중 오류가 발생했습니다:'), error.message);
112
- }
113
- }
114
-
115
- /**
116
- * 토큰 사용 리포트 생성
117
- */
118
- async generateReport(args) {
119
- const [period = 'week'] = args;
120
-
121
- try {
122
- // 토큰 리포터 모듈 로드
123
- const reporterModule = await this.resourceLoader.loadUtil('token-reporter.js');
124
- const TokenReporter = reporterModule.TokenReporter || reporterModule.default;
125
-
126
- if (!TokenReporter) {
127
- throw new Error('TokenReporter 모듈을 로드할 수 없습니다.');
128
- }
129
-
130
- const reporter = new TokenReporter({
131
- storageDir: this.tokenDataPath
132
- });
133
-
134
- console.log(chalk.cyan(`📊 토큰 사용 리포트 (${period})`));
135
- console.log(chalk.gray('생성 중...'));
136
-
137
- const report = await reporter.generateReport(period);
138
- const reportPath = path.join(this.tokenDataPath, 'reports', `token-report-${period}-${Date.now()}.md`);
139
-
140
- await fs.ensureDir(path.dirname(reportPath));
141
- await fs.writeFile(reportPath, report);
142
-
143
- console.log(chalk.green(`✅ 리포트가 생성되었습니다: ${reportPath}`));
144
-
145
- // 리포트 요약 표시
146
- console.log(chalk.cyan('\n📄 리포트 요약:'));
147
- const lines = report.split('\n').slice(0, 20);
148
- console.log(lines.join('\n'));
149
- console.log(chalk.gray('\n... (전체 리포트는 파일을 확인하세요)'));
150
-
151
- } catch (error) {
152
- console.error(chalk.red('❌ 리포트 생성 중 오류가 발생했습니다:'), error.message);
153
- }
154
- }
155
-
156
- /**
157
- * 토큰 사용량 추적
158
- */
159
- async trackUsage(args) {
160
- const [inputTokens, outputTokens] = args.map(Number);
161
-
162
- if (!inputTokens || !outputTokens) {
163
- console.error(chalk.red('❌ 입력 토큰과 출력 토큰 수를 지정해주세요.'));
164
- console.log(chalk.gray('사용법: aiwf token track <입력토큰> <출력토큰>'));
165
- return;
166
- }
167
-
168
- try {
169
- const trackerModule = await this.resourceLoader.loadUtil('token-tracker.js');
170
- const TokenTracker = trackerModule.TokenTracker || trackerModule.default;
171
-
172
- const tracker = new TokenTracker({
173
- storageDir: this.tokenDataPath
174
- });
175
-
176
- await tracker.init();
177
- await tracker.trackUsage({
178
- input: inputTokens,
179
- output: outputTokens,
180
- timestamp: new Date().toISOString(),
181
- source: 'manual'
182
- });
183
-
184
- console.log(chalk.green('✅ 토큰 사용량이 기록되었습니다.'));
185
- console.log(`입력: ${chalk.yellow(inputTokens.toLocaleString())} 토큰`);
186
- console.log(`출력: ${chalk.yellow(outputTokens.toLocaleString())} 토큰`);
187
- console.log(`총합: ${chalk.yellow((inputTokens + outputTokens).toLocaleString())} 토큰`);
188
-
189
- } catch (error) {
190
- console.error(chalk.red('❌ 토큰 추적 중 오류가 발생했습니다:'), error.message);
191
- }
192
- }
193
-
194
- /**
195
- * 토큰 추적 초기화
196
- */
197
- async resetTracking() {
198
- try {
199
- const confirm = await this.confirmReset();
200
- if (!confirm) {
201
- console.log(chalk.yellow('초기화가 취소되었습니다.'));
202
- return;
203
- }
204
-
205
- await fs.remove(this.tokenDataPath);
206
- console.log(chalk.green('✅ 토큰 추적 데이터가 초기화되었습니다.'));
207
-
208
- } catch (error) {
209
- console.error(chalk.red('❌ 초기화 중 오류가 발생했습니다:'), error.message);
210
- }
211
- }
212
-
213
- /**
214
- * 토큰 사용 한도 설정
215
- */
216
- async setLimit(args) {
217
- const [limitType, limitValue] = args;
218
-
219
- if (!limitType || !limitValue) {
220
- console.error(chalk.red('❌ 한도 유형과 값을 지정해주세요.'));
221
- console.log(chalk.gray('사용법: aiwf token limit <daily|monthly> <값>'));
222
- return;
223
- }
224
-
225
- const validTypes = ['daily', 'monthly'];
226
- if (!validTypes.includes(limitType)) {
227
- console.error(chalk.red(`❌ 유효하지 않은 한도 유형: ${limitType}`));
228
- console.log(chalk.gray('유효한 유형: daily, monthly'));
229
- return;
230
- }
231
-
232
- const limit = parseInt(limitValue);
233
- if (isNaN(limit) || limit < 0) {
234
- console.error(chalk.red('❌ 한도 값은 0 이상의 숫자여야 합니다.'));
235
- return;
236
- }
237
-
238
- try {
239
- const configPath = path.join(this.tokenDataPath, 'limits.json');
240
- await fs.ensureDir(this.tokenDataPath);
241
-
242
- let limits = {};
243
- if (fs.existsSync(configPath)) {
244
- limits = await fs.readJson(configPath);
245
- }
246
-
247
- limits[limitType] = limit;
248
- await fs.writeJson(configPath, limits, { spaces: 2 });
249
-
250
- console.log(chalk.green(`✅ ${limitType === 'daily' ? '일일' : '월간'} 한도가 ${limit.toLocaleString()} 토큰으로 설정되었습니다.`));
251
-
252
- } catch (error) {
253
- console.error(chalk.red('❌ 한도 설정 중 오류가 발생했습니다:'), error.message);
254
- }
255
- }
256
-
257
- /**
258
- * 한도 설정 가져오기
259
- */
260
- async getLimits() {
261
- try {
262
- const configPath = path.join(this.tokenDataPath, 'limits.json');
263
- if (fs.existsSync(configPath)) {
264
- return await fs.readJson(configPath);
265
- }
266
- } catch (error) {
267
- // 에러 무시
268
- }
269
- return { daily: 0, monthly: 0 };
270
- }
271
-
272
- /**
273
- * 초기화 확인
274
- */
275
- async confirmReset() {
276
- // 간단한 확인 (실제로는 prompts 패키지 사용 권장)
277
- console.log(chalk.yellow('⚠️ 모든 토큰 추적 데이터가 삭제됩니다.'));
278
- console.log(chalk.gray('계속하려면 5초 내에 Ctrl+C로 취소하세요...'));
279
-
280
- await new Promise(resolve => setTimeout(resolve, 5000));
281
- return true;
282
- }
283
-
284
- /**
285
- * 도움말 표시
286
- */
287
- showHelp() {
288
- console.log(chalk.cyan('💰 AIWF 토큰 추적'));
289
- console.log(chalk.gray('-'.repeat(50)));
290
- console.log('사용법: aiwf token <명령어> [옵션]');
291
- console.log('');
292
- console.log('명령어:');
293
- console.log(' status 토큰 사용 현황 표시');
294
- console.log(' report [기간] 사용 리포트 생성');
295
- console.log(' track <입력> <출력> 토큰 사용량 수동 기록');
296
- console.log(' limit <유형> <값> 사용 한도 설정');
297
- console.log(' reset 추적 데이터 초기화');
298
- console.log('');
299
- console.log('리포트 기간:');
300
- console.log(' day 일간 리포트');
301
- console.log(' week 주간 리포트 (기본값)');
302
- console.log(' month 월간 리포트');
303
- console.log('');
304
- console.log('예시:');
305
- console.log(' aiwf token status');
306
- console.log(' aiwf token report week');
307
- console.log(' aiwf token track 1500 500');
308
- console.log(' aiwf token limit daily 100000');
309
- }
310
- }
311
-
312
- export default TokenCommand;