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,443 +0,0 @@
1
- import { TokenCounter } from '../utils/token-counter.js';
2
- import { TokenTracker } from '../utils/token-tracker.js';
3
- import { TokenStorage } from '../utils/token-storage.js';
4
- import { TokenReporter } from '../utils/token-reporter.js';
5
- import { TokenMonitor } from '../utils/token-monitor.js';
6
-
7
- /**
8
- * 토큰 추적 시스템 명령어 인터페이스
9
- */
10
- export class TokenTrackingCommands {
11
- constructor() {
12
- this.counter = new TokenCounter();
13
- this.tracker = new TokenTracker();
14
- this.storage = new TokenStorage();
15
- this.reporter = new TokenReporter();
16
- this.monitor = new TokenMonitor();
17
- }
18
-
19
- /**
20
- * 텍스트 또는 파일의 토큰 수를 계산합니다
21
- * @param {Object} options - 옵션
22
- * @param {string} options.text - 분석할 텍스트
23
- * @param {string} options.file - 분석할 파일 경로
24
- * @param {string} options.dir - 분석할 디렉토리 경로
25
- * @returns {Object} 토큰 카운트 결과
26
- */
27
- async countTokens(options = {}) {
28
- try {
29
- if (options.text) {
30
- const tokens = this.counter.countTokens(options.text);
31
- return {
32
- type: 'text',
33
- tokens,
34
- characters: options.text.length,
35
- ratio: options.text.length > 0 ? (tokens / options.text.length).toFixed(3) : 0
36
- };
37
- }
38
-
39
- if (options.file) {
40
- const tokens = this.counter.countFileTokens(options.file);
41
- const stats = await import('fs').then(fs => fs.promises.stat(options.file));
42
- return {
43
- type: 'file',
44
- path: options.file,
45
- tokens,
46
- size: stats.size,
47
- ratio: stats.size > 0 ? (tokens / stats.size).toFixed(3) : 0
48
- };
49
- }
50
-
51
- if (options.dir) {
52
- const tokens = this.counter.countDirectoryTokens(options.dir);
53
- const files = this.counter.getMarkdownFiles(options.dir);
54
- return {
55
- type: 'directory',
56
- path: options.dir,
57
- tokens,
58
- fileCount: files.length,
59
- avgTokensPerFile: files.length > 0 ? Math.round(tokens / files.length) : 0
60
- };
61
- }
62
-
63
- throw new Error('텍스트, 파일 또는 디렉토리 중 하나를 지정해야 합니다.');
64
- } catch (error) {
65
- console.error('토큰 카운트 중 오류 발생:', error);
66
- return null;
67
- }
68
- }
69
-
70
- /**
71
- * 명령어 실행을 추적합니다
72
- * @param {Object} options - 옵션
73
- * @param {string} options.command - 실행된 명령어
74
- * @param {string} options.input - 입력 텍스트
75
- * @param {string} options.output - 출력 텍스트
76
- * @returns {Object} 추적 결과
77
- */
78
- async trackCommand(options = {}) {
79
- try {
80
- const result = this.tracker.trackCommand(
81
- options.command || 'unknown',
82
- options.input || '',
83
- options.output || ''
84
- );
85
-
86
- if (result) {
87
- // 모니터링 시스템에 체크
88
- const violations = this.monitor.checkThresholds();
89
-
90
- return {
91
- ...result,
92
- violations,
93
- sessionStats: this.tracker.getSessionStats()
94
- };
95
- }
96
-
97
- return null;
98
- } catch (error) {
99
- console.error('명령어 추적 중 오류 발생:', error);
100
- return null;
101
- }
102
- }
103
-
104
- /**
105
- * 현재 세션의 토큰 사용량 보고서를 생성합니다
106
- * @returns {Object} 세션 보고서
107
- */
108
- async generateSessionReport() {
109
- try {
110
- const report = this.tracker.generateReport();
111
-
112
- if (report) {
113
- console.log('\n=== 세션 토큰 사용량 보고서 ===');
114
- console.log(`세션 ID: ${report.sessionId}`);
115
- console.log(`세션 시간: ${report.sessionDuration}`);
116
- console.log(`실행 명령어: ${report.totalCommands}개`);
117
- console.log(`총 토큰: ${report.totalTokens.toLocaleString()}`);
118
- console.log(`명령어당 평균 토큰: ${report.avgTokensPerCommand.toLocaleString()}`);
119
- console.log(`시작 시간: ${report.startTime}`);
120
- console.log(`마지막 업데이트: ${report.lastUpdated}`);
121
-
122
- if (report.compressionStats) {
123
- console.log('\n--- 압축 통계 ---');
124
- console.log(`원본 토큰: ${report.compressionStats.originalTokens.toLocaleString()}`);
125
- console.log(`압축 토큰: ${report.compressionStats.compressedTokens.toLocaleString()}`);
126
- console.log(`절약 토큰: ${report.compressionStats.savedTokens.toLocaleString()}`);
127
- console.log(`압축률: ${report.compressionStats.compressionRatio}`);
128
- console.log(`효율성: ${report.compressionStats.efficiency}`);
129
- }
130
-
131
- if (report.recentCommands.length > 0) {
132
- console.log('\n--- 최근 명령어 ---');
133
- report.recentCommands.forEach((cmd, idx) => {
134
- console.log(`${idx + 1}. ${cmd.command}: ${cmd.totalTokens} 토큰`);
135
- });
136
- }
137
-
138
- console.log('\n========================\n');
139
- }
140
-
141
- return report;
142
- } catch (error) {
143
- console.error('세션 보고서 생성 중 오류 발생:', error);
144
- return null;
145
- }
146
- }
147
-
148
- /**
149
- * 프로젝트 토큰 분석을 수행합니다
150
- * @param {Object} options - 옵션
151
- * @param {string} options.path - 프로젝트 경로
152
- * @param {boolean} options.detailed - 상세 분석 여부
153
- * @returns {Object} 분석 결과
154
- */
155
- async analyzeProject(options = {}) {
156
- try {
157
- const report = this.reporter.generateProjectAnalysisReport(options.path || '.');
158
-
159
- if (!report) {
160
- return null;
161
- }
162
-
163
- console.log('\n=== 프로젝트 토큰 분석 ===');
164
- console.log(`프로젝트 경로: ${report.projectPath}`);
165
- console.log(`총 토큰: ${report.analysis.totalTokens.toLocaleString()}`);
166
- console.log(`분석 시간: ${new Date(report.generatedAt).toLocaleString()}`);
167
-
168
- console.log('\n--- 디렉토리별 분석 ---');
169
- Object.entries(report.analysis.directoryBreakdown).forEach(([dir, data]) => {
170
- console.log(`${dir}: ${data.tokens.toLocaleString()} 토큰 (${data.percentage}%)`);
171
- });
172
-
173
- if (options.detailed) {
174
- console.log('\n--- 상세 파일 분석 ---');
175
- Object.entries(report.analysis.directoryBreakdown).forEach(([dir, data]) => {
176
- if (data.files.length > 0) {
177
- console.log(`\n${dir}:`);
178
- data.files.slice(0, 5).forEach(file => {
179
- console.log(` - ${file.path}: ${file.tokens.toLocaleString()} 토큰`);
180
- });
181
- }
182
- });
183
- }
184
-
185
- if (report.analysis.compressionOpportunities.length > 0) {
186
- console.log('\n--- 압축 기회 ---');
187
- report.analysis.compressionOpportunities.forEach(op => {
188
- console.log(`${op.priority.toUpperCase()}: ${op.description}`);
189
- console.log(` 예상 절약: ${op.potentialSavings.toLocaleString()} 토큰`);
190
- });
191
- }
192
-
193
- if (report.analysis.recommendations.length > 0) {
194
- console.log('\n--- 권장사항 ---');
195
- report.analysis.recommendations.forEach(rec => {
196
- console.log(`${rec.priority.toUpperCase()}: ${rec.title}`);
197
- console.log(` ${rec.description}`);
198
- console.log(` 명령어: ${rec.action}`);
199
- });
200
- }
201
-
202
- console.log('\n========================\n');
203
-
204
- return report;
205
- } catch (error) {
206
- console.error('프로젝트 분석 중 오류 발생:', error);
207
- return null;
208
- }
209
- }
210
-
211
- /**
212
- * 사용량 보고서를 생성합니다
213
- * @param {Object} options - 옵션
214
- * @param {string} options.type - 보고서 타입 (daily, weekly, monthly)
215
- * @param {boolean} options.save - 파일 저장 여부
216
- * @returns {Object} 보고서 데이터
217
- */
218
- async generateUsageReport(options = {}) {
219
- try {
220
- const report = this.reporter.generateUsageReport(options.type || 'daily');
221
-
222
- if (!report) {
223
- return null;
224
- }
225
-
226
- this.reporter.printReport(report);
227
-
228
- if (options.save) {
229
- const filename = `usage_report_${options.type || 'daily'}_${Date.now()}.json`;
230
- this.reporter.saveReportToFile(report, filename);
231
- }
232
-
233
- return report;
234
- } catch (error) {
235
- console.error('사용량 보고서 생성 중 오류 발생:', error);
236
- return null;
237
- }
238
- }
239
-
240
- /**
241
- * 모니터링을 설정합니다
242
- * @param {Object} options - 옵션
243
- * @param {boolean} options.enable - 모니터링 활성화 여부
244
- * @param {Object} options.thresholds - 임계값 설정
245
- * @param {boolean} options.start - 실시간 모니터링 시작 여부
246
- * @returns {Object} 설정 결과
247
- */
248
- async setupMonitoring(options = {}) {
249
- try {
250
- if (options.enable !== undefined) {
251
- this.monitor.setEnabled(options.enable);
252
- }
253
-
254
- if (options.thresholds) {
255
- this.monitor.setThresholds(options.thresholds);
256
- }
257
-
258
- if (options.start) {
259
- this.monitor.startMonitoring();
260
- }
261
-
262
- return {
263
- success: true,
264
- status: this.monitor.getStatus()
265
- };
266
- } catch (error) {
267
- console.error('모니터링 설정 중 오류 발생:', error);
268
- return { success: false, error: error.message };
269
- }
270
- }
271
-
272
- /**
273
- * 모니터링 상태를 조회합니다
274
- * @returns {Object} 모니터링 상태
275
- */
276
- async getMonitoringStatus() {
277
- try {
278
- this.monitor.displayDashboard();
279
- return this.monitor.getStatus();
280
- } catch (error) {
281
- console.error('모니터링 상태 조회 중 오류 발생:', error);
282
- return null;
283
- }
284
- }
285
-
286
- /**
287
- * 알림을 관리합니다
288
- * @param {Object} options - 옵션
289
- * @param {string} options.action - 액션 (list, acknowledge, clear)
290
- * @param {string} options.alertId - 알림 ID (acknowledge 시 필요)
291
- * @returns {Object} 알림 관리 결과
292
- */
293
- async manageAlerts(options = {}) {
294
- try {
295
- switch (options.action) {
296
- case 'list':
297
- const unacknowledged = this.monitor.getUnacknowledgedAlerts();
298
- console.log(`미확인 알림: ${unacknowledged.length}개`);
299
- unacknowledged.forEach(alert => {
300
- const emoji = alert.level === 'critical' ? '🚨' :
301
- alert.level === 'warning' ? '⚠️' : 'ℹ️';
302
- console.log(`${emoji} [${alert.id}] ${alert.message}`);
303
- });
304
- return unacknowledged;
305
-
306
- case 'acknowledge':
307
- if (options.alertId) {
308
- this.monitor.acknowledgeAlert(options.alertId);
309
- } else {
310
- this.monitor.acknowledgeAllAlerts();
311
- }
312
- return { success: true };
313
-
314
- case 'clear':
315
- this.monitor.cleanupOldAlerts();
316
- return { success: true };
317
-
318
- default:
319
- throw new Error('올바른 액션을 지정해주세요: list, acknowledge, clear');
320
- }
321
- } catch (error) {
322
- console.error('알림 관리 중 오류 발생:', error);
323
- return { success: false, error: error.message };
324
- }
325
- }
326
-
327
- /**
328
- * 압축 전후 토큰 수를 기록합니다
329
- * @param {Object} options - 옵션
330
- * @param {number} options.originalTokens - 원본 토큰 수
331
- * @param {number} options.compressedTokens - 압축 토큰 수
332
- * @returns {Object} 압축 추적 결과
333
- */
334
- async trackCompression(options = {}) {
335
- try {
336
- if (!options.originalTokens || !options.compressedTokens) {
337
- throw new Error('원본 토큰 수와 압축 토큰 수를 모두 지정해야 합니다.');
338
- }
339
-
340
- this.tracker.trackCompression(options.originalTokens, options.compressedTokens);
341
-
342
- const saved = options.originalTokens - options.compressedTokens;
343
- const ratio = ((saved / options.originalTokens) * 100).toFixed(2);
344
-
345
- console.log(`압축 완료: ${saved.toLocaleString()} 토큰 절약 (${ratio}%)`);
346
-
347
- return {
348
- originalTokens: options.originalTokens,
349
- compressedTokens: options.compressedTokens,
350
- savedTokens: saved,
351
- compressionRatio: ratio
352
- };
353
- } catch (error) {
354
- console.error('압축 추적 중 오류 발생:', error);
355
- return null;
356
- }
357
- }
358
-
359
- /**
360
- * 세션 데이터를 정리합니다
361
- * @param {Object} options - 옵션
362
- * @param {number} options.daysToKeep - 보관할 일수
363
- * @returns {Object} 정리 결과
364
- */
365
- async cleanupSessions(options = {}) {
366
- try {
367
- const daysToKeep = options.daysToKeep || 7;
368
- this.tracker.cleanupOldSessions(daysToKeep);
369
-
370
- return { success: true, daysToKeep };
371
- } catch (error) {
372
- console.error('세션 정리 중 오류 발생:', error);
373
- return { success: false, error: error.message };
374
- }
375
- }
376
-
377
- /**
378
- * 토큰 추적 시스템을 초기화합니다
379
- * @returns {Object} 초기화 결과
380
- */
381
- async resetSystem() {
382
- try {
383
- this.storage.resetData();
384
- this.monitor.cleanupOldAlerts();
385
-
386
- console.log('토큰 추적 시스템이 초기화되었습니다.');
387
-
388
- return { success: true };
389
- } catch (error) {
390
- console.error('시스템 초기화 중 오류 발생:', error);
391
- return { success: false, error: error.message };
392
- }
393
- }
394
-
395
- /**
396
- * 토큰 추적 시스템의 상태를 조회합니다
397
- * @returns {Object} 시스템 상태
398
- */
399
- async getSystemStatus() {
400
- try {
401
- const sessionStats = this.tracker.getSessionStats();
402
- const monitoringStatus = this.monitor.getStatus();
403
- const alertStats = this.monitor.getAlertStats();
404
-
405
- return {
406
- session: sessionStats,
407
- monitoring: monitoringStatus,
408
- alerts: alertStats,
409
- timestamp: Date.now()
410
- };
411
- } catch (error) {
412
- console.error('시스템 상태 조회 중 오류 발생:', error);
413
- return null;
414
- }
415
- }
416
-
417
- /**
418
- * 리소스를 정리합니다
419
- */
420
- cleanup() {
421
- if (this.counter) {
422
- this.counter.cleanup();
423
- }
424
- if (this.tracker) {
425
- this.tracker.cleanup();
426
- }
427
- if (this.reporter) {
428
- this.reporter.cleanup();
429
- }
430
- if (this.monitor) {
431
- this.monitor.stopMonitoring();
432
- }
433
- }
434
- }
435
-
436
- /**
437
- * 토큰 추적 명령어 팩토리
438
- */
439
- export function createTokenTrackingCommands() {
440
- return new TokenTrackingCommands();
441
- }
442
-
443
- export default TokenTrackingCommands;
@@ -1,103 +0,0 @@
1
- /**
2
- * Git 커밋 메시지에서 Feature ID를 파싱하기 위한 패턴 정의
3
- *
4
- * 지원하는 형식:
5
- * - FL### - 직접 참조
6
- * - [FL###] - 대괄호 참조
7
- * - (FL###) - 괄호 참조
8
- * - feat(FL###): - Conventional Commit 형식
9
- * - fix(FL###): - 버그 수정 형식
10
- * - #FL### - 해시 참조
11
- */
12
-
13
- const FEATURE_ID_PATTERNS = {
14
- // 기본 Feature ID 패턴 (FL + 3자리 숫자)
15
- DIRECT: /\bFL\d{3}\b/g,
16
-
17
- // 대괄호 안의 Feature ID
18
- BRACKETED: /\[FL\d{3}\]/g,
19
-
20
- // 괄호 안의 Feature ID
21
- PARENTHETICAL: /\(FL\d{3}\)/g,
22
-
23
- // Conventional Commit 형식
24
- CONVENTIONAL: /(?:feat|fix|docs|style|refactor|perf|test|chore)\(FL\d{3}\):/g,
25
-
26
- // 해시 참조 형식
27
- HASH: /#FL\d{3}\b/g,
28
-
29
- // 모든 패턴을 통합한 마스터 패턴
30
- MASTER: /(?:\b|#|\[|\()FL\d{3}(?:\]|\)|\b)|(?:feat|fix|docs|style|refactor|perf|test|chore)\(FL\d{3}\):/g
31
- };
32
-
33
- /**
34
- * 커밋 타입 정의
35
- */
36
- const COMMIT_TYPES = {
37
- feat: '새로운 기능',
38
- fix: '버그 수정',
39
- docs: '문서 변경',
40
- style: '코드 스타일 변경',
41
- refactor: '리팩토링',
42
- perf: '성능 개선',
43
- test: '테스트 추가/수정',
44
- chore: '빌드 프로세스 또는 도구 변경'
45
- };
46
-
47
- /**
48
- * 커밋 메시지에서 Feature ID 추출
49
- * @param {string} message - 커밋 메시지
50
- * @returns {Array<string>} - 추출된 Feature ID 배열 (중복 제거)
51
- */
52
- function extractFeatureIds(message) {
53
- const matches = message.match(FEATURE_ID_PATTERNS.MASTER) || [];
54
-
55
- // Feature ID만 추출하고 중복 제거
56
- const featureIds = matches.map(match => {
57
- // 패턴에서 FL### 부분만 추출
58
- const idMatch = match.match(/FL\d{3}/);
59
- return idMatch ? idMatch[0] : null;
60
- }).filter(Boolean);
61
-
62
- // 중복 제거
63
- return [...new Set(featureIds)];
64
- }
65
-
66
- /**
67
- * 커밋 메시지에서 커밋 타입 추출
68
- * @param {string} message - 커밋 메시지
69
- * @returns {string|null} - 커밋 타입 또는 null
70
- */
71
- function extractCommitType(message) {
72
- const conventionalMatch = message.match(/^(feat|fix|docs|style|refactor|perf|test|chore)(?:\(.*?\))?:/);
73
- return conventionalMatch ? conventionalMatch[1] : null;
74
- }
75
-
76
- /**
77
- * 커밋 메시지가 Feature 관련인지 확인
78
- * @param {string} message - 커밋 메시지
79
- * @returns {boolean}
80
- */
81
- function isFeatureRelatedCommit(message) {
82
- return FEATURE_ID_PATTERNS.MASTER.test(message);
83
- }
84
-
85
- /**
86
- * 브랜치 이름에서 Feature ID 추출
87
- * @param {string} branchName - 브랜치 이름
88
- * @returns {string|null} - Feature ID 또는 null
89
- */
90
- function extractFeatureIdFromBranch(branchName) {
91
- // feature/FL###-description 형식 지원
92
- const match = branchName.match(/feature\/FL(\d{3})/);
93
- return match ? `FL${match[1]}` : null;
94
- }
95
-
96
- module.exports = {
97
- FEATURE_ID_PATTERNS,
98
- COMMIT_TYPES,
99
- extractFeatureIds,
100
- extractCommitType,
101
- isFeatureRelatedCommit,
102
- extractFeatureIdFromBranch
103
- };
@@ -1,6 +0,0 @@
1
- {
2
- "language": "ko",
3
- "auto_detect": true,
4
- "last_updated": "2025-07-08T15:00:50.870Z",
5
- "fallback": "en"
6
- }
@@ -1,57 +0,0 @@
1
- # AI 페르소나 인덱스
2
-
3
- 이 디렉토리는 AIWF의 AI 페르소나 시스템을 위한 컨텍스트 규칙과 지식 베이스를 포함합니다.
4
-
5
- ## 사용 가능한 페르소나
6
-
7
- ### 1. Architect (아키텍처 전문가)
8
- - **활성화**: `/project:aiwf:architect`
9
- - **전문 분야**: 시스템 설계, 확장성, 기술 스택 선정
10
- - **디렉토리**: `architect/`
11
-
12
- ### 2. Security (보안 전문가)
13
- - **활성화**: `/project:aiwf:security`
14
- - **전문 분야**: 보안 취약점 분석, 인증/인가, 암호화
15
- - **디렉토리**: `security/`
16
-
17
- ### 3. Frontend (프론트엔드 전문가)
18
- - **활성화**: `/project:aiwf:frontend`
19
- - **전문 분야**: UI/UX, 반응형 디자인, 프론트엔드 프레임워크
20
- - **디렉토리**: `frontend/`
21
-
22
- ### 4. Backend (백엔드 전문가)
23
- - **활성화**: `/project:aiwf:backend`
24
- - **전문 분야**: API 설계, 데이터베이스, 서버 아키텍처
25
- - **디렉토리**: `backend/`
26
-
27
- ### 5. Data Analyst (데이터 분석가)
28
- - **활성화**: `/project:aiwf:data_analyst`
29
- - **전문 분야**: 데이터 분석, 머신러닝, 통계 분석
30
- - **디렉토리**: `data_analyst/`
31
-
32
- ## 각 페르소나 디렉토리 구조
33
-
34
- ```
35
- [persona_name]/
36
- ├── context_rules.md # 페르소나별 컨텍스트 규칙
37
- ├── best_practices.md # 전문 분야 베스트 프랙티스
38
- └── knowledge_base.md # 도메인 특화 지식 베이스
39
- ```
40
-
41
- ## 관리 명령어
42
-
43
- - **상태 확인**: `/project:aiwf:persona_status`
44
- - **기본 모드 복원**: `/project:aiwf:default_mode`
45
-
46
- ## 사용 방법
47
-
48
- 1. 원하는 페르소나 활성화: `/project:aiwf:[persona_name]`
49
- 2. 전문적인 도움 받기: 해당 분야의 질문이나 작업 요청
50
- 3. 다른 페르소나로 전환 또는 기본 모드로 복원
51
-
52
- ## 페르소나 시스템 특징
53
-
54
- - **즉시 전환**: 2초 이내 페르소나 전환
55
- - **컨텍스트 유지**: 페르소나별 전문 지식 자동 로드
56
- - **통계 추적**: 사용 패턴 및 효율성 분석
57
- - **다국어 지원**: 한국어/영어 완벽 지원
@@ -1,44 +0,0 @@
1
- {
2
- "id": "analyst",
3
- "name": "System Analyst",
4
- "description": "Analyzes requirements, creates specifications, and ensures alignment with business goals",
5
- "focus_areas": [
6
- "Requirements gathering and analysis",
7
- "System design and architecture",
8
- "Business process optimization",
9
- "Stakeholder communication",
10
- "Technical documentation"
11
- ],
12
- "communication_style": {
13
- "tone": "professional, clear, analytical",
14
- "language": "balanced technical and business terminology",
15
- "format": "structured with clear sections and bullet points"
16
- },
17
- "capabilities": [
18
- "Create detailed requirement specifications",
19
- "Analyze system dependencies and impacts",
20
- "Design data models and workflows",
21
- "Identify edge cases and potential issues",
22
- "Produce comprehensive documentation"
23
- ],
24
- "tools_and_methods": [
25
- "UML diagrams",
26
- "BPMN for process modeling",
27
- "User story mapping",
28
- "Impact analysis",
29
- "Risk assessment matrices"
30
- ],
31
- "output_formats": [
32
- "Requirement documents",
33
- "System specifications",
34
- "Process flow diagrams",
35
- "Data models",
36
- "Analysis reports"
37
- ],
38
- "example_prompts": [
39
- "Analyze the requirements for feature FL-XXX",
40
- "Create a system specification for the payment module",
41
- "Identify potential risks in the current architecture",
42
- "Map the user journey for the authentication flow"
43
- ]
44
- }