@su-record/vibe 3.2.19 → 3.2.21

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 (49) hide show
  1. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  2. package/dist/cli/setup/ProjectSetup.js +13 -1
  3. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  4. package/dist/tools/dispatch/deterministicSignals.d.ts.map +1 -1
  5. package/dist/tools/dispatch/deterministicSignals.js +15 -10
  6. package/dist/tools/dispatch/deterministicSignals.js.map +1 -1
  7. package/dist/tools/dispatch/vibePaths.d.ts +7 -0
  8. package/dist/tools/dispatch/vibePaths.d.ts.map +1 -0
  9. package/dist/tools/dispatch/vibePaths.js +35 -0
  10. package/dist/tools/dispatch/vibePaths.js.map +1 -0
  11. package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -1
  12. package/dist/tools/spec/validateSpecDocument.js +33 -6
  13. package/dist/tools/spec/validateSpecDocument.js.map +1 -1
  14. package/hooks/scripts/code-check.js +90 -16
  15. package/hooks/scripts/lib/anchor.js +15 -4
  16. package/hooks/scripts/lib/inbox.js +10 -2
  17. package/package.json +1 -1
  18. package/dist/infra/lib/DeepInit.d.ts +0 -60
  19. package/dist/infra/lib/DeepInit.d.ts.map +0 -1
  20. package/dist/infra/lib/DeepInit.js +0 -245
  21. package/dist/infra/lib/DeepInit.js.map +0 -1
  22. package/dist/infra/lib/FrameworkDetector.d.ts +0 -56
  23. package/dist/infra/lib/FrameworkDetector.d.ts.map +0 -1
  24. package/dist/infra/lib/FrameworkDetector.js +0 -287
  25. package/dist/infra/lib/FrameworkDetector.js.map +0 -1
  26. package/dist/infra/lib/ModelRouter.d.ts +0 -48
  27. package/dist/infra/lib/ModelRouter.d.ts.map +0 -1
  28. package/dist/infra/lib/ModelRouter.js +0 -216
  29. package/dist/infra/lib/ModelRouter.js.map +0 -1
  30. package/dist/infra/lib/ReviewRace.d.ts +0 -86
  31. package/dist/infra/lib/ReviewRace.d.ts.map +0 -1
  32. package/dist/infra/lib/ReviewRace.js +0 -454
  33. package/dist/infra/lib/ReviewRace.js.map +0 -1
  34. package/dist/infra/lib/RuleBuildSystem.d.ts +0 -157
  35. package/dist/infra/lib/RuleBuildSystem.d.ts.map +0 -1
  36. package/dist/infra/lib/RuleBuildSystem.js +0 -550
  37. package/dist/infra/lib/RuleBuildSystem.js.map +0 -1
  38. package/dist/infra/lib/SkillQualityGate.d.ts +0 -42
  39. package/dist/infra/lib/SkillQualityGate.d.ts.map +0 -1
  40. package/dist/infra/lib/SkillQualityGate.js +0 -220
  41. package/dist/infra/lib/SkillQualityGate.js.map +0 -1
  42. package/dist/infra/lib/SkillRepository.d.ts +0 -134
  43. package/dist/infra/lib/SkillRepository.d.ts.map +0 -1
  44. package/dist/infra/lib/SkillRepository.js +0 -500
  45. package/dist/infra/lib/SkillRepository.js.map +0 -1
  46. package/dist/infra/lib/UltraQA.d.ts +0 -89
  47. package/dist/infra/lib/UltraQA.d.ts.map +0 -1
  48. package/dist/infra/lib/UltraQA.js +0 -301
  49. package/dist/infra/lib/UltraQA.js.map +0 -1
@@ -1,287 +0,0 @@
1
- /**
2
- * Framework Detector - Automatically detect project framework from package.json
3
- * Inspired by Vercel's deploy script
4
- */
5
- import { readFile } from 'fs/promises';
6
- import { join } from 'path';
7
- import { existsSync } from 'fs';
8
- // Framework definitions with metadata
9
- export const FRAMEWORKS = {
10
- // Fullstack frameworks (check first - more specific)
11
- 'blitzjs': { id: 'blitzjs', name: 'Blitz.js', category: 'fullstack', runtime: 'node', features: ['ssr', 'api'] },
12
- 'nextjs': { id: 'nextjs', name: 'Next.js', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg', 'api', 'rsc'] },
13
- 'remix': { id: 'remix', name: 'Remix', category: 'fullstack', runtime: 'node', features: ['ssr', 'nested-routes'] },
14
- 'nuxtjs': { id: 'nuxtjs', name: 'Nuxt', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg'] },
15
- 'sveltekit-1': { id: 'sveltekit-1', name: 'SvelteKit', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg'] },
16
- 'solidstart-1': { id: 'solidstart-1', name: 'SolidStart', category: 'fullstack', runtime: 'node', features: ['ssr'] },
17
- 'tanstack-start': { id: 'tanstack-start', name: 'TanStack Start', category: 'fullstack', runtime: 'node', features: ['ssr'] },
18
- 'redwoodjs': { id: 'redwoodjs', name: 'RedwoodJS', category: 'fullstack', runtime: 'node', features: ['api', 'graphql'] },
19
- 'hydrogen': { id: 'hydrogen', name: 'Hydrogen', category: 'fullstack', runtime: 'node', features: ['shopify', 'ssr'] },
20
- // Frontend frameworks
21
- 'gatsby': { id: 'gatsby', name: 'Gatsby', category: 'frontend', runtime: 'node', features: ['ssg', 'graphql'] },
22
- 'react-router': { id: 'react-router', name: 'React Router', category: 'frontend', runtime: 'node', features: ['spa', 'nested-routes'] },
23
- 'astro': { id: 'astro', name: 'Astro', category: 'frontend', runtime: 'node', features: ['ssg', 'islands'] },
24
- 'svelte': { id: 'svelte', name: 'Svelte', category: 'frontend', runtime: 'browser', features: ['reactive'] },
25
- 'angular': { id: 'angular', name: 'Angular', category: 'frontend', runtime: 'browser', features: ['spa', 'di'] },
26
- 'create-react-app': { id: 'create-react-app', name: 'Create React App', category: 'frontend', runtime: 'browser', features: ['spa'] },
27
- 'vite': { id: 'vite', name: 'Vite', category: 'frontend', runtime: 'browser', features: ['hmr', 'esm'] },
28
- 'preact': { id: 'preact', name: 'Preact', category: 'frontend', runtime: 'browser', features: ['lightweight'] },
29
- 'ember': { id: 'ember', name: 'Ember.js', category: 'frontend', runtime: 'browser', features: ['spa', 'convention'] },
30
- // Backend frameworks
31
- 'nestjs': { id: 'nestjs', name: 'NestJS', category: 'backend', runtime: 'node', features: ['di', 'decorators'] },
32
- 'express': { id: 'express', name: 'Express', category: 'backend', runtime: 'node', features: ['minimal'] },
33
- 'fastify': { id: 'fastify', name: 'Fastify', category: 'backend', runtime: 'node', features: ['fast', 'schema'] },
34
- 'hono': { id: 'hono', name: 'Hono', category: 'backend', runtime: 'node', features: ['edge', 'lightweight'] },
35
- 'elysia': { id: 'elysia', name: 'Elysia', category: 'backend', runtime: 'bun', features: ['bun', 'fast'] },
36
- 'h3': { id: 'h3', name: 'h3', category: 'backend', runtime: 'node', features: ['minimal', 'edge'] },
37
- 'nitro': { id: 'nitro', name: 'Nitro', category: 'backend', runtime: 'node', features: ['universal'] },
38
- // Documentation frameworks
39
- 'docusaurus-2': { id: 'docusaurus-2', name: 'Docusaurus', category: 'docs', runtime: 'node', features: ['docs', 'mdx'] },
40
- 'vitepress': { id: 'vitepress', name: 'VitePress', category: 'docs', runtime: 'node', features: ['docs', 'vue'] },
41
- 'vuepress': { id: 'vuepress', name: 'VuePress', category: 'docs', runtime: 'node', features: ['docs', 'vue'] },
42
- 'hexo': { id: 'hexo', name: 'Hexo', category: 'docs', runtime: 'node', features: ['blog'] },
43
- 'eleventy': { id: 'eleventy', name: 'Eleventy', category: 'static', runtime: 'node', features: ['ssg', 'simple'] },
44
- 'gridsome': { id: 'gridsome', name: 'Gridsome', category: 'static', runtime: 'node', features: ['vue', 'graphql'] },
45
- // Other
46
- 'storybook': { id: 'storybook', name: 'Storybook', category: 'frontend', runtime: 'node', features: ['components', 'docs'] },
47
- 'sanity-v3': { id: 'sanity-v3', name: 'Sanity', category: 'backend', runtime: 'node', features: ['cms'] },
48
- 'ionic-angular': { id: 'ionic-angular', name: 'Ionic Angular', category: 'frontend', runtime: 'browser', features: ['mobile', 'hybrid'] },
49
- 'ionic-react': { id: 'ionic-react', name: 'Ionic React', category: 'frontend', runtime: 'browser', features: ['mobile', 'hybrid'] },
50
- 'stencil': { id: 'stencil', name: 'Stencil', category: 'frontend', runtime: 'browser', features: ['web-components'] },
51
- 'umijs': { id: 'umijs', name: 'UmiJS', category: 'frontend', runtime: 'node', features: ['enterprise', 'plugins'] },
52
- 'parcel': { id: 'parcel', name: 'Parcel', category: 'frontend', runtime: 'browser', features: ['zero-config'] },
53
- 'dojo': { id: 'dojo', name: 'Dojo', category: 'frontend', runtime: 'browser', features: ['widgets'] },
54
- 'polymer': { id: 'polymer', name: 'Polymer', category: 'frontend', runtime: 'browser', features: ['web-components'] },
55
- 'sapper': { id: 'sapper', name: 'Sapper', category: 'frontend', runtime: 'node', features: ['legacy-svelte'] },
56
- 'saber': { id: 'saber', name: 'Saber', category: 'static', runtime: 'node', features: ['vue'] },
57
- };
58
- // Detection order (more specific first)
59
- const DETECTION_ORDER = [
60
- // Fullstack (most specific first)
61
- { dep: 'blitz', framework: 'blitzjs' },
62
- { dep: 'next', framework: 'nextjs' },
63
- { dep: '@remix-run/', framework: 'remix' },
64
- { dep: '@react-router/', framework: 'react-router' },
65
- { dep: '@tanstack/start', framework: 'tanstack-start' },
66
- { dep: '@shopify/hydrogen', framework: 'hydrogen' },
67
- { dep: '@redwoodjs/', framework: 'redwoodjs' },
68
- { dep: '@sveltejs/kit', framework: 'sveltekit-1' },
69
- { dep: '@solidjs/start', framework: 'solidstart-1' },
70
- { dep: 'nuxt', framework: 'nuxtjs' },
71
- { dep: 'astro', framework: 'astro' },
72
- { dep: 'gatsby', framework: 'gatsby' },
73
- // Frontend
74
- { dep: 'svelte', framework: 'svelte' },
75
- { dep: '@ionic/angular', framework: 'ionic-angular' },
76
- { dep: '@angular/core', framework: 'angular' },
77
- { dep: '@ionic/react', framework: 'ionic-react' },
78
- { dep: 'react-scripts', framework: 'create-react-app' },
79
- { dep: 'preact', framework: 'preact' },
80
- { dep: 'ember-cli', framework: 'ember' },
81
- { dep: 'ember-source', framework: 'ember' },
82
- { dep: '@dojo/framework', framework: 'dojo' },
83
- { dep: '@polymer/', framework: 'polymer' },
84
- { dep: '@stencil/core', framework: 'stencil' },
85
- { dep: 'umi', framework: 'umijs' },
86
- { dep: 'sapper', framework: 'sapper' },
87
- // Documentation
88
- { dep: '@docusaurus/core', framework: 'docusaurus-2' },
89
- { dep: 'vitepress', framework: 'vitepress' },
90
- { dep: 'vuepress', framework: 'vuepress' },
91
- { dep: '@11ty/eleventy', framework: 'eleventy' },
92
- { dep: 'hexo', framework: 'hexo' },
93
- { dep: 'gridsome', framework: 'gridsome' },
94
- { dep: 'saber', framework: 'saber' },
95
- // Backend
96
- { dep: '@nestjs/core', framework: 'nestjs' },
97
- { dep: 'elysia', framework: 'elysia' },
98
- { dep: 'hono', framework: 'hono' },
99
- { dep: 'fastify', framework: 'fastify' },
100
- { dep: 'h3', framework: 'h3' },
101
- { dep: 'nitropack', framework: 'nitro' },
102
- { dep: 'express', framework: 'express' },
103
- // CMS / Tools
104
- { dep: 'sanity', framework: 'sanity-v3' },
105
- { dep: '@sanity/', framework: 'sanity-v3' },
106
- { dep: '@storybook/', framework: 'storybook' },
107
- // Generic (check last)
108
- { dep: 'vite', framework: 'vite' },
109
- { dep: 'parcel', framework: 'parcel' },
110
- ];
111
- /**
112
- * Read and parse package.json
113
- */
114
- async function readPackageJson(projectPath) {
115
- const pkgPath = join(projectPath, 'package.json');
116
- try {
117
- const content = await readFile(pkgPath, 'utf-8');
118
- return JSON.parse(content);
119
- }
120
- catch {
121
- return null;
122
- }
123
- }
124
- /**
125
- * Check if a dependency exists in package.json
126
- */
127
- function hasDependency(pkg, dep) {
128
- const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
129
- // Check for exact match or prefix match (e.g., "@remix-run/")
130
- return Object.keys(allDeps).some(key => key === dep || key.startsWith(dep));
131
- }
132
- /**
133
- * Detect project type (monorepo, single, static)
134
- */
135
- async function detectProjectType(projectPath, pkg) {
136
- // Check for monorepo indicators
137
- const monorepoFiles = ['pnpm-workspace.yaml', 'lerna.json', 'nx.json', 'turbo.json'];
138
- for (const file of monorepoFiles) {
139
- if (existsSync(join(projectPath, file))) {
140
- return 'monorepo';
141
- }
142
- }
143
- // Check for workspaces in package.json
144
- if (pkg && pkg.workspaces) {
145
- return 'monorepo';
146
- }
147
- // No package.json = likely static
148
- if (!pkg) {
149
- const hasHtml = existsSync(join(projectPath, 'index.html'));
150
- return hasHtml ? 'static' : 'unknown';
151
- }
152
- return 'single';
153
- }
154
- /**
155
- * Detect framework from package.json
156
- */
157
- export async function detectFramework(projectPath) {
158
- const pkg = await readPackageJson(projectPath);
159
- const projectType = await detectProjectType(projectPath, pkg);
160
- const allDetected = [];
161
- if (!pkg) {
162
- // Check for static HTML project
163
- const hasHtml = existsSync(join(projectPath, 'index.html'));
164
- return {
165
- framework: hasHtml ? { id: 'static', name: 'Static HTML', category: 'static' } : null,
166
- confidence: hasHtml ? 'medium' : 'low',
167
- allDetected: hasHtml ? ['static'] : [],
168
- projectType,
169
- };
170
- }
171
- // Detect all matching frameworks
172
- for (const { dep, framework } of DETECTION_ORDER) {
173
- if (hasDependency(pkg, dep)) {
174
- allDetected.push(framework);
175
- }
176
- }
177
- // Primary framework is the first detected (most specific due to order)
178
- const primaryFramework = allDetected[0];
179
- const frameworkInfo = primaryFramework ? FRAMEWORKS[primaryFramework] : null;
180
- return {
181
- framework: frameworkInfo,
182
- confidence: frameworkInfo ? 'high' : 'low',
183
- matchedDep: primaryFramework,
184
- allDetected,
185
- packageJson: pkg,
186
- projectType,
187
- };
188
- }
189
- /**
190
- * Detect framework from string content (for analysis without file access)
191
- */
192
- export function detectFrameworkFromContent(content) {
193
- const allDetected = [];
194
- for (const { dep, framework } of DETECTION_ORDER) {
195
- if (content.includes(`"${dep}"`) || content.includes(`"${dep}/`)) {
196
- allDetected.push(framework);
197
- }
198
- }
199
- const primaryFramework = allDetected[0];
200
- const frameworkInfo = primaryFramework ? FRAMEWORKS[primaryFramework] : null;
201
- return {
202
- framework: frameworkInfo,
203
- confidence: frameworkInfo ? 'high' : 'low',
204
- matchedDep: primaryFramework,
205
- allDetected,
206
- projectType: 'unknown',
207
- };
208
- }
209
- /**
210
- * Get recommended rules/agents based on framework
211
- */
212
- export function getFrameworkRecommendations(framework) {
213
- const reviewers = [];
214
- const rules = [];
215
- const features = framework.features || [];
216
- // Add language/framework-specific review focuses (code-reviewer with focus parameter)
217
- if (['nextjs', 'gatsby', 'remix', 'create-react-app', 'astro'].includes(framework.id)) {
218
- reviewers.push('code-reviewer (focus: idioms)');
219
- rules.push('react-*', 'async-*', 'bundle-*');
220
- }
221
- if (['nuxtjs', 'vitepress', 'vuepress', 'gridsome'].includes(framework.id)) {
222
- rules.push('vue-*');
223
- }
224
- if (['sveltekit-1', 'svelte'].includes(framework.id)) {
225
- rules.push('svelte-*');
226
- }
227
- if (['angular', 'ionic-angular'].includes(framework.id)) {
228
- rules.push('angular-*');
229
- }
230
- if (['nestjs', 'express', 'fastify', 'hono'].includes(framework.id)) {
231
- reviewers.push('code-reviewer (focus: idioms)');
232
- rules.push('server-*', 'security-*');
233
- }
234
- if (['elysia'].includes(framework.id)) {
235
- rules.push('bun-*');
236
- }
237
- // Always include common reviewers
238
- reviewers.push('security-reviewer', 'code-reviewer (focus: performance)');
239
- return { reviewers, rules, features };
240
- }
241
- /**
242
- * Format detection result for display
243
- */
244
- export function formatDetectionResult(result) {
245
- if (!result.framework) {
246
- return 'No framework detected';
247
- }
248
- const lines = [];
249
- lines.push(`Framework: ${result.framework.name} (${result.framework.id})`);
250
- lines.push(`Category: ${result.framework.category}`);
251
- lines.push(`Confidence: ${result.confidence}`);
252
- if (result.framework.runtime) {
253
- lines.push(`Runtime: ${result.framework.runtime}`);
254
- }
255
- if (result.framework.features && result.framework.features.length > 0) {
256
- lines.push(`Features: ${result.framework.features.join(', ')}`);
257
- }
258
- if (result.allDetected.length > 1) {
259
- lines.push(`Also detected: ${result.allDetected.slice(1).join(', ')}`);
260
- }
261
- lines.push(`Project type: ${result.projectType}`);
262
- return lines.join('\n');
263
- }
264
- /**
265
- * Quick check if project uses a specific framework
266
- */
267
- export async function isFramework(projectPath, frameworkId) {
268
- const result = await detectFramework(projectPath);
269
- return result.allDetected.includes(frameworkId);
270
- }
271
- /**
272
- * Get all supported frameworks grouped by category
273
- */
274
- export function getSupportedFrameworks() {
275
- const grouped = {
276
- fullstack: [],
277
- frontend: [],
278
- backend: [],
279
- docs: [],
280
- static: [],
281
- };
282
- Object.values(FRAMEWORKS).forEach(fw => {
283
- grouped[fw.category].push(fw);
284
- });
285
- return grouped;
286
- }
287
- //# sourceMappingURL=FrameworkDetector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../../src/infra/lib/FrameworkDetector.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Intelligent Model Router
3
- * 작업 복잡도를 자동 분석하여 최적의 모델을 선택
4
- */
5
- export type ModelTier = 'haiku' | 'sonnet' | 'opus';
6
- export interface ComplexitySignals {
7
- fileCount: number;
8
- lineCount: number;
9
- hasArchitectureChange: boolean;
10
- hasSecurityImplication: boolean;
11
- hasMultipleServices: boolean;
12
- isRefactoring: boolean;
13
- isNewFeature: boolean;
14
- isBugFix: boolean;
15
- isDocumentation: boolean;
16
- keywords: string[];
17
- }
18
- export interface RoutingResult {
19
- model: ModelTier;
20
- score: number;
21
- reason: string;
22
- signals: Partial<ComplexitySignals>;
23
- }
24
- /**
25
- * 텍스트에서 복잡도 신호 추출
26
- */
27
- export declare function extractComplexitySignals(text: string): ComplexitySignals;
28
- /**
29
- * 복잡도 점수 계산
30
- */
31
- export declare function calculateComplexityScore(signals: ComplexitySignals): number;
32
- /**
33
- * 최적 모델 선택
34
- */
35
- export declare function selectModel(score: number): ModelTier;
36
- /**
37
- * 메인 라우팅 함수
38
- */
39
- export declare function routeToModel(taskDescription: string): RoutingResult;
40
- /**
41
- * SPEC 파일 기반 라우팅
42
- */
43
- export declare function routeFromSpec(specContent: string): RoutingResult;
44
- /**
45
- * 에이전트 티어 선택 (agent-low, agent-medium, agent 패턴)
46
- */
47
- export declare function selectAgentTier(baseAgentName: string, taskDescription: string): string;
48
- //# sourceMappingURL=ModelRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/ModelRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAiDD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA+BxE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA6B3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAIpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,aAAa,CA4BnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAgChE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAatF"}
@@ -1,216 +0,0 @@
1
- /**
2
- * Intelligent Model Router
3
- * 작업 복잡도를 자동 분석하여 최적의 모델을 선택
4
- */
5
- // 복잡도 키워드 매핑
6
- const COMPLEXITY_KEYWORDS = {
7
- // High complexity (opus)
8
- 'architect': 15,
9
- 'refactor': 12,
10
- 'migrate': 12,
11
- 'security': 12,
12
- 'authentication': 10,
13
- 'authorization': 10,
14
- 'infrastructure': 10,
15
- 'database schema': 10,
16
- 'breaking change': 10,
17
- 'performance optimization': 8,
18
- 'distributed': 8,
19
- 'concurrent': 8,
20
- 'transaction': 8,
21
- // Medium complexity (sonnet)
22
- 'implement': 5,
23
- 'feature': 5,
24
- 'integration': 5,
25
- 'api': 4,
26
- 'component': 4,
27
- 'service': 4,
28
- 'module': 4,
29
- 'test': 3,
30
- 'validation': 3,
31
- // Low complexity (haiku)
32
- 'fix': 2,
33
- 'bug': 2,
34
- 'typo': 1,
35
- 'rename': 1,
36
- 'comment': 1,
37
- 'documentation': 1,
38
- 'style': 1,
39
- 'format': 1,
40
- 'lint': 1,
41
- };
42
- // 모델 티어 임계값
43
- const TIER_THRESHOLDS = {
44
- opus: 20, // score >= 20 → opus
45
- sonnet: 8, // score >= 8 → sonnet
46
- haiku: 0, // score < 8 → haiku
47
- };
48
- /**
49
- * 텍스트에서 복잡도 신호 추출
50
- */
51
- export function extractComplexitySignals(text) {
52
- const lowerText = text.toLowerCase();
53
- const keywords = [];
54
- // 키워드 매칭
55
- for (const keyword of Object.keys(COMPLEXITY_KEYWORDS)) {
56
- if (lowerText.includes(keyword)) {
57
- keywords.push(keyword);
58
- }
59
- }
60
- // 파일 수 추정 (패턴 매칭)
61
- const filePatterns = text.match(/\.(ts|js|py|go|rs|java|tsx|jsx|vue|svelte|css|scss|html|md)\b/gi) || [];
62
- const uniqueExtensions = new Set(filePatterns.map(p => p.toLowerCase()));
63
- // 라인 수 추정 (코드 블록)
64
- const codeBlocks = text.match(/```[\s\S]*?```/g) || [];
65
- const estimatedLines = codeBlocks.reduce((sum, block) => sum + block.split('\n').length, 0);
66
- return {
67
- fileCount: Math.max(uniqueExtensions.size, 1),
68
- lineCount: estimatedLines,
69
- hasArchitectureChange: /architect|infrastructure|system design|database schema/i.test(text),
70
- hasSecurityImplication: /security|auth|password|token|credential|encrypt|vulnerability/i.test(text),
71
- hasMultipleServices: /micro.?service|distributed|multiple.*service|cross.*service/i.test(text),
72
- isRefactoring: /refactor|restructure|reorganize|extract|split|merge/i.test(text),
73
- isNewFeature: /new feature|implement|create|add.*feature/i.test(text),
74
- isBugFix: /bug|fix|patch|hotfix|issue|error/i.test(text),
75
- isDocumentation: /document|readme|comment|jsdoc|explain/i.test(text),
76
- keywords,
77
- };
78
- }
79
- /**
80
- * 복잡도 점수 계산
81
- */
82
- export function calculateComplexityScore(signals) {
83
- let score = 0;
84
- // 키워드 기반 점수
85
- for (const keyword of signals.keywords) {
86
- score += COMPLEXITY_KEYWORDS[keyword] || 0;
87
- }
88
- // 파일 수 기반 점수
89
- if (signals.fileCount >= 10)
90
- score += 15;
91
- else if (signals.fileCount >= 5)
92
- score += 8;
93
- else if (signals.fileCount >= 3)
94
- score += 4;
95
- // 라인 수 기반 점수
96
- if (signals.lineCount >= 500)
97
- score += 10;
98
- else if (signals.lineCount >= 200)
99
- score += 5;
100
- else if (signals.lineCount >= 50)
101
- score += 2;
102
- // 특수 상황 가중치
103
- if (signals.hasArchitectureChange)
104
- score += 10;
105
- if (signals.hasSecurityImplication)
106
- score += 8;
107
- if (signals.hasMultipleServices)
108
- score += 8;
109
- if (signals.isRefactoring)
110
- score += 5;
111
- // 단순 작업 감점
112
- if (signals.isBugFix && !signals.hasSecurityImplication)
113
- score -= 3;
114
- if (signals.isDocumentation)
115
- score -= 5;
116
- return Math.max(0, score);
117
- }
118
- /**
119
- * 최적 모델 선택
120
- */
121
- export function selectModel(score) {
122
- if (score >= TIER_THRESHOLDS.opus)
123
- return 'opus';
124
- if (score >= TIER_THRESHOLDS.sonnet)
125
- return 'sonnet';
126
- return 'haiku';
127
- }
128
- /**
129
- * 메인 라우팅 함수
130
- */
131
- export function routeToModel(taskDescription) {
132
- const signals = extractComplexitySignals(taskDescription);
133
- const score = calculateComplexityScore(signals);
134
- const model = selectModel(score);
135
- // 선택 이유 생성
136
- let reason = '';
137
- if (model === 'opus') {
138
- reason = `High complexity task (score: ${score}). `;
139
- if (signals.hasArchitectureChange)
140
- reason += 'Architecture change detected. ';
141
- if (signals.hasSecurityImplication)
142
- reason += 'Security implications. ';
143
- if (signals.hasMultipleServices)
144
- reason += 'Multi-service coordination. ';
145
- }
146
- else if (model === 'sonnet') {
147
- reason = `Medium complexity task (score: ${score}). `;
148
- if (signals.isNewFeature)
149
- reason += 'New feature implementation. ';
150
- if (signals.fileCount >= 3)
151
- reason += `Multiple files (${signals.fileCount}). `;
152
- }
153
- else {
154
- reason = `Simple task (score: ${score}). `;
155
- if (signals.isBugFix)
156
- reason += 'Bug fix. ';
157
- if (signals.isDocumentation)
158
- reason += 'Documentation. ';
159
- }
160
- return {
161
- model,
162
- score,
163
- reason: reason.trim(),
164
- signals,
165
- };
166
- }
167
- /**
168
- * SPEC 파일 기반 라우팅
169
- */
170
- export function routeFromSpec(specContent) {
171
- // SPEC에서 Phase 수 추출
172
- const phaseMatches = specContent.match(/###\s*Phase\s*\d+/gi) || [];
173
- const phaseCount = phaseMatches.length;
174
- // SPEC에서 파일 목록 추출
175
- const fileMatches = specContent.match(/`[^`]+\.(ts|js|py|go|rs|java|tsx|jsx|vue|svelte|css|scss|html|md)`/gi) || [];
176
- const fileCount = new Set(fileMatches).size;
177
- // 기본 신호 추출
178
- const signals = extractComplexitySignals(specContent);
179
- signals.fileCount = Math.max(signals.fileCount, fileCount);
180
- // Phase 수에 따른 추가 점수
181
- let score = calculateComplexityScore(signals);
182
- if (phaseCount >= 5)
183
- score += 15;
184
- else if (phaseCount >= 3)
185
- score += 8;
186
- else if (phaseCount >= 2)
187
- score += 4;
188
- const model = selectModel(score);
189
- let reason = `SPEC analysis: ${phaseCount} phases, ~${fileCount} files. `;
190
- reason += model === 'opus' ? 'Large scope → Opus recommended.' :
191
- model === 'sonnet' ? 'Medium scope → Sonnet.' :
192
- 'Small scope → Haiku sufficient.';
193
- return {
194
- model,
195
- score,
196
- reason,
197
- signals,
198
- };
199
- }
200
- /**
201
- * 에이전트 티어 선택 (agent-low, agent-medium, agent 패턴)
202
- */
203
- export function selectAgentTier(baseAgentName, taskDescription) {
204
- const { model } = routeToModel(taskDescription);
205
- switch (model) {
206
- case 'haiku':
207
- return `${baseAgentName}-low`;
208
- case 'sonnet':
209
- return `${baseAgentName}-medium`;
210
- case 'opus':
211
- return baseAgentName; // 기본 = 최고 티어
212
- default:
213
- return baseAgentName;
214
- }
215
- }
216
- //# sourceMappingURL=ModelRouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../../src/infra/lib/ModelRouter.ts"],"names":[],"mappings":"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"}