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,242 +0,0 @@
1
- /**
2
- * 프롬프트 주입 메커니즘
3
- * 페르소나 컨텍스트를 프롬프트에 동적으로 주입하는 모듈
4
- */
5
-
6
- const ContextRuleParser = require('./context-rule-parser');
7
- const TokenCounter = require('./token-counter');
8
-
9
- class PromptInjector {
10
- constructor() {
11
- this.contextParser = new ContextRuleParser();
12
- this.tokenCounter = new TokenCounter();
13
- this.activePersona = null;
14
- this.contextCache = new Map();
15
- }
16
-
17
- /**
18
- * 페르소나 컨텍스트를 프롬프트에 주입
19
- * @param {string} originalPrompt - 원본 프롬프트
20
- * @param {string} personaName - 적용할 페르소나 이름
21
- * @returns {Object} 주입된 프롬프트와 메타데이터
22
- */
23
- async injectContext(originalPrompt, personaName) {
24
- try {
25
- // 컨텍스트 규칙 로드
26
- const context = await this.contextParser.parseContextRules(personaName);
27
-
28
- // 프롬프트 템플릿 생성
29
- const injectedPrompt = this.buildInjectedPrompt(originalPrompt, context);
30
-
31
- // 토큰 사용량 계산
32
- const tokenMetrics = await this.calculateTokenMetrics(
33
- originalPrompt,
34
- injectedPrompt,
35
- context
36
- );
37
-
38
- // 결과 반환
39
- return {
40
- success: true,
41
- originalPrompt,
42
- injectedPrompt,
43
- personaName,
44
- context,
45
- tokenMetrics,
46
- timestamp: new Date().toISOString()
47
- };
48
- } catch (error) {
49
- console.error('프롬프트 주입 오류:', error);
50
- return {
51
- success: false,
52
- originalPrompt,
53
- injectedPrompt: originalPrompt,
54
- personaName,
55
- error: error.message,
56
- timestamp: new Date().toISOString()
57
- };
58
- }
59
- }
60
-
61
- /**
62
- * 주입된 프롬프트 생성
63
- * @param {string} originalPrompt - 원본 프롬프트
64
- * @param {Object} context - 페르소나 컨텍스트
65
- * @returns {string} 주입된 프롬프트
66
- */
67
- buildInjectedPrompt(originalPrompt, context) {
68
- const contextSection = this.formatContextSection(context);
69
-
70
- // 프롬프트 템플릿
71
- const template = `
72
- ## AI 페르소나 컨텍스트
73
- ${contextSection}
74
-
75
- ## 사용자 요청
76
- ${originalPrompt}
77
-
78
- ## 응답 가이드라인
79
- 위의 페르소나 컨텍스트를 기반으로 응답해주세요. 특히 다음 사항을 고려하세요:
80
- - 분석 접근법: ${context.analysis_approach}
81
- - 소통 스타일: ${context.communication_style}
82
- - 핵심 원칙: ${context.design_principles?.join(', ') || '해당 없음'}
83
- `;
84
-
85
- return template.trim();
86
- }
87
-
88
- /**
89
- * 컨텍스트 섹션 포맷팅
90
- * @param {Object} context - 페르소나 컨텍스트
91
- * @returns {string} 포맷된 컨텍스트
92
- */
93
- formatContextSection(context) {
94
- const sections = [];
95
-
96
- // 페르소나 정보
97
- sections.push(`### 페르소나: ${context.persona_name}`);
98
-
99
- // 분석 접근법
100
- if (context.analysis_approach) {
101
- sections.push(`**분석 접근법**: ${context.analysis_approach}`);
102
- }
103
-
104
- // 설계 원칙
105
- if (context.design_principles && context.design_principles.length > 0) {
106
- sections.push(`**설계 원칙**:\n${context.design_principles.map(p => `- ${p}`).join('\n')}`);
107
- }
108
-
109
- // 소통 스타일
110
- if (context.communication_style) {
111
- sections.push(`**소통 스타일**: ${context.communication_style}`);
112
- }
113
-
114
- // 추가 컨텍스트
115
- if (context.content) {
116
- sections.push(`\n**상세 컨텍스트**:\n${context.content}`);
117
- }
118
-
119
- return sections.join('\n\n');
120
- }
121
-
122
- /**
123
- * 토큰 메트릭 계산
124
- * @param {string} original - 원본 프롬프트
125
- * @param {string} injected - 주입된 프롬프트
126
- * @param {Object} context - 컨텍스트
127
- * @returns {Object} 토큰 메트릭
128
- */
129
- async calculateTokenMetrics(original, injected, context) {
130
- const originalTokens = await this.tokenCounter.estimateTokens(original);
131
- const injectedTokens = await this.tokenCounter.estimateTokens(injected);
132
- const contextTokens = injectedTokens - originalTokens;
133
-
134
- return {
135
- originalTokens,
136
- injectedTokens,
137
- contextTokens,
138
- tokenIncrease: contextTokens,
139
- percentageIncrease: ((contextTokens / originalTokens) * 100).toFixed(2) + '%'
140
- };
141
- }
142
-
143
- /**
144
- * 페르소나 전환
145
- * @param {string} personaName - 새로운 페르소나 이름
146
- * @returns {Object} 전환 결과
147
- */
148
- async switchPersona(personaName) {
149
- const previousPersona = this.activePersona;
150
- this.activePersona = personaName;
151
-
152
- // 새 페르소나 컨텍스트 미리 로드
153
- const context = await this.contextParser.parseContextRules(personaName);
154
- this.contextCache.set(personaName, context);
155
-
156
- return {
157
- previousPersona,
158
- currentPersona: personaName,
159
- context,
160
- switchedAt: new Date().toISOString()
161
- };
162
- }
163
-
164
- /**
165
- * 현재 활성 페르소나 확인
166
- * @returns {string|null} 현재 페르소나 이름
167
- */
168
- getActivePersona() {
169
- return this.activePersona;
170
- }
171
-
172
- /**
173
- * 컨텍스트 압축 (토큰 한계 초과 시)
174
- * @param {Object} context - 원본 컨텍스트
175
- * @param {number} maxTokens - 최대 토큰 수
176
- * @returns {Object} 압축된 컨텍스트
177
- */
178
- async compressContext(context, maxTokens) {
179
- // 우선순위에 따라 컨텍스트 요소 선택
180
- const compressed = {
181
- persona_name: context.persona_name,
182
- analysis_approach: context.analysis_approach,
183
- communication_style: context.communication_style
184
- };
185
-
186
- // 토큰 수 확인하며 점진적으로 추가
187
- let currentTokens = await this.tokenCounter.estimateTokens(
188
- JSON.stringify(compressed)
189
- );
190
-
191
- if (currentTokens < maxTokens && context.design_principles) {
192
- compressed.design_principles = context.design_principles.slice(0, 3);
193
- currentTokens = await this.tokenCounter.estimateTokens(
194
- JSON.stringify(compressed)
195
- );
196
- }
197
-
198
- if (currentTokens < maxTokens && context.content) {
199
- const maxContentLength = Math.floor((maxTokens - currentTokens) * 4);
200
- compressed.content = context.content.substring(0, maxContentLength) + '...';
201
- }
202
-
203
- return compressed;
204
- }
205
-
206
- /**
207
- * 프롬프트 주입 품질 검증
208
- * @param {Object} injectionResult - 주입 결과
209
- * @returns {Object} 품질 검증 결과
210
- */
211
- validateInjection(injectionResult) {
212
- const validation = {
213
- valid: true,
214
- issues: []
215
- };
216
-
217
- // 기본 검증
218
- if (!injectionResult.success) {
219
- validation.valid = false;
220
- validation.issues.push('주입 실패');
221
- }
222
-
223
- // 토큰 증가율 검증
224
- const tokenIncrease = parseFloat(
225
- injectionResult.tokenMetrics?.percentageIncrease?.replace('%', '') || 0
226
- );
227
- if (tokenIncrease > 50) {
228
- validation.issues.push('토큰 증가율이 50%를 초과합니다');
229
- }
230
-
231
- // 컨텍스트 완전성 검증
232
- const context = injectionResult.context;
233
- if (!context || !context.persona_name) {
234
- validation.valid = false;
235
- validation.issues.push('페르소나 정보 누락');
236
- }
237
-
238
- return validation;
239
- }
240
- }
241
-
242
- module.exports = PromptInjector;
@@ -1,119 +0,0 @@
1
- /**
2
- * 경량화된 페르소나 평가기
3
- * 3가지 핵심 지표만으로 빠른 평가 수행
4
- */
5
-
6
- export class SimplifiedEvaluator {
7
- constructor() {
8
- // 3가지 핵심 지표와 가중치
9
- this.coreMetrics = {
10
- roleAlignment: 0.5, // 페르소나 역할 일치도
11
- taskRelevance: 0.3, // 작업 관련성
12
- responseQuality: 0.2 // 기본 품질
13
- };
14
-
15
- // 페르소나별 핵심 키워드 (최소한만)
16
- this.personaKeywords = {
17
- architect: ['시스템', '설계', '구조', '아키텍처'],
18
- security: ['보안', '취약점', '암호화', '위협'],
19
- frontend: ['UI', 'UX', '사용자', '화면'],
20
- backend: ['API', '데이터베이스', '서버', '성능'],
21
- data_analyst: ['데이터', '분석', '통계', '인사이트']
22
- };
23
-
24
- // 간단한 피드백 메시지
25
- this.feedbackMessages = {
26
- architect: "💡 시스템 설계 관점을 더 포함해보세요",
27
- security: "🔒 보안 측면을 좀 더 고려해보세요",
28
- frontend: "🎨 사용자 경험 관점을 추가해보세요",
29
- backend: "⚙️ 서버/데이터 처리 관점을 강화해보세요",
30
- data_analyst: "📊 데이터 기반 인사이트를 더 제공해보세요"
31
- };
32
- }
33
-
34
- /**
35
- * 빠른 평가 수행
36
- * @param {string} response - AI 응답
37
- * @param {string} persona - 현재 페르소나
38
- * @returns {Object} 평가 결과
39
- */
40
- quickEvaluate(response, persona) {
41
- if (!response || !persona) {
42
- return { score: 1, feedback: null };
43
- }
44
-
45
- const scores = {
46
- roleAlignment: this.checkRoleAlignment(response, persona),
47
- taskRelevance: this.checkTaskRelevance(response),
48
- responseQuality: this.checkBasicQuality(response)
49
- };
50
-
51
- // 가중 평균 계산
52
- const totalScore = Object.entries(scores).reduce((sum, [metric, score]) => {
53
- return sum + (score * this.coreMetrics[metric]);
54
- }, 0);
55
-
56
- return {
57
- score: totalScore,
58
- scores: scores,
59
- needsFeedback: totalScore < 0.6,
60
- feedback: totalScore < 0.6 ? this.feedbackMessages[persona] : null
61
- };
62
- }
63
-
64
- /**
65
- * 페르소나 역할 일치도 체크 (간단하게)
66
- */
67
- checkRoleAlignment(response, persona) {
68
- const keywords = this.personaKeywords[persona] || [];
69
- if (keywords.length === 0) return 0.7;
70
-
71
- const lowerResponse = response.toLowerCase();
72
- const matchCount = keywords.filter(keyword =>
73
- lowerResponse.includes(keyword.toLowerCase())
74
- ).length;
75
-
76
- // 키워드 중 절반 이상 포함하면 높은 점수
77
- return matchCount >= keywords.length / 2 ? 0.9 : 0.5;
78
- }
79
-
80
- /**
81
- * 작업 관련성 체크 (기본값 높게)
82
- */
83
- checkTaskRelevance(response) {
84
- // 응답이 충분히 길면 관련성 있다고 가정
85
- if (response.length < 50) return 0.3;
86
- if (response.length < 200) return 0.6;
87
- return 0.8;
88
- }
89
-
90
- /**
91
- * 기본 품질 체크
92
- */
93
- checkBasicQuality(response) {
94
- // 매우 간단한 품질 체크
95
- const hasStructure = response.includes('\n') || response.includes('-');
96
- const hasContent = response.length > 100;
97
-
98
- if (hasStructure && hasContent) return 0.9;
99
- if (hasContent) return 0.7;
100
- return 0.5;
101
- }
102
-
103
- /**
104
- * 사용자에게 피드백이 필요한지 판단
105
- */
106
- shouldNotifyUser(score) {
107
- return score < 0.6;
108
- }
109
-
110
- /**
111
- * 부드러운 피드백 생성
112
- */
113
- getGentleFeedback(persona, score) {
114
- if (score >= 0.6) return null;
115
- return this.feedbackMessages[persona] || "💡 페르소나 특성을 더 활용해보세요";
116
- }
117
- }
118
-
119
- export default SimplifiedEvaluator;