@su-record/vibe 2.12.2 → 2.12.4

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 (117) hide show
  1. package/CLAUDE.md +13 -12
  2. package/README.md +2 -0
  3. package/dist/cli/collaborator.d.ts.map +1 -1
  4. package/dist/cli/collaborator.js +23 -6
  5. package/dist/cli/collaborator.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +3 -1
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
  10. package/dist/cli/postinstall/claude-agents.js +15 -12
  11. package/dist/cli/postinstall/claude-agents.js.map +1 -1
  12. package/dist/cli/postinstall/constants.d.ts +2 -2
  13. package/dist/cli/postinstall/constants.js +2 -2
  14. package/dist/cli/postinstall/fs-utils.d.ts +5 -0
  15. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  16. package/dist/cli/postinstall/fs-utils.js +55 -0
  17. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  18. package/dist/cli/postinstall/fs-utils.test.d.ts +2 -0
  19. package/dist/cli/postinstall/fs-utils.test.d.ts.map +1 -0
  20. package/dist/cli/postinstall/fs-utils.test.js +31 -0
  21. package/dist/cli/postinstall/fs-utils.test.js.map +1 -0
  22. package/dist/cli/postinstall/index.d.ts +1 -1
  23. package/dist/cli/postinstall/index.d.ts.map +1 -1
  24. package/dist/cli/postinstall/index.js +1 -1
  25. package/dist/cli/postinstall/index.js.map +1 -1
  26. package/dist/cli/postinstall/main.d.ts.map +1 -1
  27. package/dist/cli/postinstall/main.js +5 -3
  28. package/dist/cli/postinstall/main.js.map +1 -1
  29. package/dist/cli/postinstall.d.ts +1 -1
  30. package/dist/cli/postinstall.d.ts.map +1 -1
  31. package/dist/cli/postinstall.js +1 -1
  32. package/dist/cli/postinstall.js.map +1 -1
  33. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  34. package/dist/cli/setup/ProjectSetup.js +13 -1
  35. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  36. package/dist/infra/lib/CostAccumulator.d.ts +19 -2
  37. package/dist/infra/lib/CostAccumulator.d.ts.map +1 -1
  38. package/dist/infra/lib/CostAccumulator.js +60 -2
  39. package/dist/infra/lib/CostAccumulator.js.map +1 -1
  40. package/dist/infra/lib/SkillFrontmatter.d.ts.map +1 -1
  41. package/dist/infra/lib/SkillFrontmatter.js +15 -5
  42. package/dist/infra/lib/SkillFrontmatter.js.map +1 -1
  43. package/dist/infra/lib/SkillFrontmatter.test.d.ts +2 -0
  44. package/dist/infra/lib/SkillFrontmatter.test.d.ts.map +1 -0
  45. package/dist/infra/lib/SkillFrontmatter.test.js +60 -0
  46. package/dist/infra/lib/SkillFrontmatter.test.js.map +1 -0
  47. package/dist/infra/lib/antigravity/chat.d.ts.map +1 -1
  48. package/dist/infra/lib/antigravity/chat.js +6 -0
  49. package/dist/infra/lib/antigravity/chat.js.map +1 -1
  50. package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -1
  51. package/dist/infra/lib/antigravity/orchestration.js +13 -1
  52. package/dist/infra/lib/antigravity/orchestration.js.map +1 -1
  53. package/dist/infra/lib/antigravity/types.d.ts +8 -0
  54. package/dist/infra/lib/antigravity/types.d.ts.map +1 -1
  55. package/dist/infra/lib/gpt/auth.d.ts.map +1 -1
  56. package/dist/infra/lib/gpt/auth.js +13 -1
  57. package/dist/infra/lib/gpt/auth.js.map +1 -1
  58. package/dist/infra/lib/gpt/chat.d.ts.map +1 -1
  59. package/dist/infra/lib/gpt/chat.js +52 -31
  60. package/dist/infra/lib/gpt/chat.js.map +1 -1
  61. package/dist/infra/lib/gpt/embedding.d.ts.map +1 -1
  62. package/dist/infra/lib/gpt/embedding.js +6 -5
  63. package/dist/infra/lib/gpt/embedding.js.map +1 -1
  64. package/dist/infra/lib/gpt/orchestration.d.ts.map +1 -1
  65. package/dist/infra/lib/gpt/orchestration.js +13 -1
  66. package/dist/infra/lib/gpt/orchestration.js.map +1 -1
  67. package/dist/infra/lib/gpt/types.d.ts +8 -0
  68. package/dist/infra/lib/gpt/types.d.ts.map +1 -1
  69. package/dist/infra/lib/llm/timeout.d.ts +34 -0
  70. package/dist/infra/lib/llm/timeout.d.ts.map +1 -0
  71. package/dist/infra/lib/llm/timeout.js +45 -0
  72. package/dist/infra/lib/llm/timeout.js.map +1 -0
  73. package/dist/infra/lib/llm/timeout.test.d.ts +2 -0
  74. package/dist/infra/lib/llm/timeout.test.d.ts.map +1 -0
  75. package/dist/infra/lib/llm/timeout.test.js +50 -0
  76. package/dist/infra/lib/llm/timeout.test.js.map +1 -0
  77. package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
  78. package/dist/infra/orchestrator/AgentExecutor.js +3 -1
  79. package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
  80. package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
  81. package/dist/infra/orchestrator/LLMCluster.js +10 -1
  82. package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
  83. package/dist/infra/orchestrator/MultiLlmResearch.d.ts +5 -0
  84. package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
  85. package/dist/infra/orchestrator/MultiLlmResearch.js +7 -0
  86. package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
  87. package/dist/infra/orchestrator/PhasePipeline.d.ts +5 -5
  88. package/dist/infra/orchestrator/PhasePipeline.d.ts.map +1 -1
  89. package/dist/infra/orchestrator/PhasePipeline.js +19 -15
  90. package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
  91. package/dist/infra/orchestrator/SmartRouter.d.ts +10 -0
  92. package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
  93. package/dist/infra/orchestrator/SmartRouter.js +23 -6
  94. package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
  95. package/dist/infra/orchestrator/SmartRouter.test.js +46 -19
  96. package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
  97. package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
  98. package/dist/infra/orchestrator/parallelResearch.js +41 -9
  99. package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
  100. package/hooks/scripts/__tests__/keyword-detector.test.js +51 -16
  101. package/hooks/scripts/auto-commit.js +14 -7
  102. package/hooks/scripts/codex-hook-adapter.js +5 -1
  103. package/hooks/scripts/keyword-detector.js +14 -2
  104. package/hooks/scripts/llm-orchestrate.js +13 -2
  105. package/hooks/scripts/prompt-dispatcher.js +32 -9
  106. package/package.json +1 -1
  107. package/skills/design-audit/SKILL.md +1 -0
  108. package/skills/design-normalize/SKILL.md +1 -0
  109. package/skills/design-teach/SKILL.md +1 -1
  110. package/skills/test/SKILL.md +9 -9
  111. package/skills/ui-ux-pro-max/SKILL.md +1 -0
  112. package/skills/vibe.analyze/SKILL.md +1 -1
  113. package/skills/vibe.event/SKILL.md +1 -1
  114. package/skills/vibe.run/SKILL.md +4 -4
  115. package/skills/vibe.test/SKILL.md +1 -1
  116. package/skills/vibe.verify/SKILL.md +1 -1
  117. package/vibe/rules/standards/complexity-metrics.md +2 -2
@@ -42,7 +42,9 @@ const mode = process.argv[3] || 'orchestrate';
42
42
  // WHY 3 retries: Enough to ride out brief 503/overload blips (typically 1-2
43
43
  // consecutive), but not so many that a genuinely down provider delays the
44
44
  // fallback chain for minutes.
45
- const MAX_RETRIES = 3;
45
+ // VIBE_LLM_MAX_RETRIES override: UserPromptSubmit(hook) 모드에서는 1(재시도 없음)로
46
+ // 낮춰 부모 dispatcher timeout 안에 단일 시도로 끝낸다. (B-2: hard-kill/무음실패 방지)
47
+ const MAX_RETRIES = Number(process.env.VIBE_LLM_MAX_RETRIES) || 3;
46
48
  // WHY 2000ms initial delay: LLM rate-limit windows are typically 1-5s;
47
49
  // starting at 2s with exponential backoff (2s, 4s, 8s) covers most reset intervals.
48
50
  const INITIAL_DELAY_MS = 2000;
@@ -203,7 +205,9 @@ function parseAnalyzeImageArgs(args) {
203
205
  // CLI Provider Functions
204
206
  // ============================================
205
207
 
206
- const CLI_TIMEOUT_MS = 180000;
208
+ // VIBE_LLM_PRIMARY_TIMEOUT_MS override: hook 모드에서는 부모 dispatcher timeout 보다
209
+ // 짧게 잡아(예: 45s) 자식이 스스로 정리하고 의미있는 메시지를 반환하게 한다.
210
+ const CLI_TIMEOUT_MS = Number(process.env.VIBE_LLM_PRIMARY_TIMEOUT_MS) || 180000;
207
211
  const CLI_FALLBACK_TIMEOUT_MS = 30000;
208
212
  const IS_WINDOWS = os.platform() === 'win32';
209
213
 
@@ -599,6 +603,13 @@ async function main() {
599
603
  providerChain = claudeSecondary ? ['antigravity', 'claude'] : ['antigravity', 'gpt'];
600
604
  }
601
605
 
606
+ // hook(UserPromptSubmit) 모드: 사용자가 `gpt`/`agy` 접두사로 명시적으로 부른 단발
607
+ // 보조 호출이라 cross-provider fallback 이 불필요하다. primary 1개로 단축해
608
+ // 부모 dispatcher timeout 안에 단일 시도로 끝낸다. (B-2)
609
+ if (process.env.VIBE_LLM_HOOK_MODE) {
610
+ providerChain = [providerChain[0]];
611
+ }
612
+
602
613
  const vibeConfig = readVibeConfig();
603
614
 
604
615
  for (let i = 0; i < providerChain.length; i++) {
@@ -82,39 +82,47 @@ const DISPATCH_RULES = [
82
82
  label: 'e2e-echo',
83
83
  },
84
84
 
85
- // 외부 LLM 호출 (GPT/Antigravity) - 패턴 매칭 필수
85
+ // 외부 LLM 호출 (GPT/Antigravity) 명시적 provider 접두사 필수.
86
+ //
87
+ // 과거에는 "추론해", "코드 리뷰", "디버깅해" 같은 자연어 패턴이 prompt
88
+ // 어디서든 매칭되어, 평범한 한국어/영어 요청에도 외부 LLM이 동기로 spawn되고
89
+ // 그 응답이 컨텍스트에 주입되었다(컨텍스트 오염 + 최대 30s 블로킹).
90
+ // 이제는 prompt가 `gpt`/`agy`/`antigravity` 로 **시작**할 때만 발동한다.
91
+ // 즉 사용자가 외부 LLM을 콕 집어 부를 때만 동작하고, 일상 요청엔 걸리지 않는다.
92
+ // (참고: `/vibe.reason` 스킬이 일반 추론을 담당하므로 자연어 자동호출은 불필요)
93
+ // `s` 플래그(dotAll)로 여러 줄 prompt 의 역할 키워드도 매칭한다.
86
94
  {
87
- pattern: /아키텍처.*(검토|리뷰|분석)|architecture.*(review|analyz)|설계.*검토|구조.*분석.*해/i,
95
+ pattern: /^\s*gpt\b.*(아키텍처|architecture|설계|구조)/is,
88
96
  script: 'llm-orchestrate.js',
89
97
  args: ['gpt', 'orchestrate', 'You are a software architect. Analyze and review the architecture.'],
90
98
  label: 'gpt-architecture',
91
99
  },
92
100
  {
93
- pattern: /(UI|UX).*(리뷰|검토|피드백|개선)|사용자.*경험.*검토|디자인.*리뷰|design.*feedback/i,
101
+ pattern: /^\s*(agy|antigravity)\b.*(ui|ux|디자인|design|사용자.*경험)/is,
94
102
  script: 'llm-orchestrate.js',
95
103
  args: ['antigravity', 'orchestrate', 'You are a UI/UX expert. Analyze and provide feedback.'],
96
104
  label: 'antigravity-uiux',
97
105
  },
98
106
  {
99
- pattern: /디버깅.*해|버그.*찾아|find.*bug|debug.*this.*code/i,
107
+ pattern: /^\s*gpt\b.*(디버깅|debug|버그|bug)/is,
100
108
  script: 'llm-orchestrate.js',
101
109
  args: ['gpt', 'orchestrate', 'You are a debugging expert. Find bugs and suggest fixes.'],
102
110
  label: 'gpt-debug',
103
111
  },
104
112
  {
105
- pattern: /코드.*정적.*분석|코드.*분석.*해줘|analyze.*code.*quality/i,
113
+ pattern: /^\s*(agy|antigravity)\b.*(분석|analyz|코드.*품질|code.*quality)/is,
106
114
  script: 'llm-orchestrate.js',
107
115
  args: ['antigravity', 'orchestrate', 'You are a code analysis expert. Review and analyze the code.'],
108
116
  label: 'antigravity-analysis',
109
117
  },
110
118
  {
111
- pattern: /코드.*리뷰|code.*review|PR.*리뷰|리뷰.*해줘.*코드/i,
119
+ pattern: /^\s*gpt\b.*(리뷰|review)/is,
112
120
  script: 'llm-orchestrate.js',
113
121
  args: ['gpt', 'orchestrate', 'You are a code review expert. Review the code for best practices, security, and performance.'],
114
122
  label: 'gpt-codereview',
115
123
  },
116
124
  {
117
- pattern: /추론.*해|reasoning|복잡.*분석|deep.*analysis/i,
125
+ pattern: /^\s*gpt\b.*(추론|reasoning|복잡.*분석|deep.*analysis)/is,
118
126
  script: 'llm-orchestrate.js',
119
127
  args: ['gpt', 'orchestrate', 'You are a reasoning expert. Analyze the problem deeply and provide detailed reasoning.'],
120
128
  label: 'gpt-reasoning',
@@ -155,14 +163,29 @@ for (const rule of DISPATCH_RULES) {
155
163
  const scriptPath = path.join(__dirname, rule.script);
156
164
  const args = rule.args || [];
157
165
 
166
+ // 외부 LLM 호출(llm-orchestrate)은 부모/자식 timeout 을 정합시킨다 (B-2):
167
+ // 자식은 hook 모드(primary 45s, fallback 없음, retry 없음)로 단일 시도 후 스스로
168
+ // 정리하고, 부모는 그보다 약간 긴 50s 로 감싸 hard-kill 을 피한다.
169
+ // 경량 스크립트(keyword-detector 등)는 기존 30s 유지.
170
+ const isLlm = rule.script === 'llm-orchestrate.js';
171
+ const execTimeout = isLlm ? 50000 : 30000;
172
+ const childEnv = isLlm
173
+ ? { ...process.env, VIBE_LLM_HOOK_MODE: '1', VIBE_LLM_PRIMARY_TIMEOUT_MS: '45000', VIBE_LLM_MAX_RETRIES: '1' }
174
+ : { ...process.env };
175
+
158
176
  execPromises.push(
159
177
  new Promise((resolve) => {
160
178
  execFile('node', [scriptPath, ...args], {
161
- timeout: 30000,
162
- env: { ...process.env },
179
+ timeout: execTimeout,
180
+ env: childEnv,
163
181
  }, (error, stdout, stderr) => {
164
182
  if (stdout?.trim()) {
165
183
  process.stdout.write(stdout);
184
+ } else if (error) {
185
+ // 무음실패 방지 — 외부 LLM 호출이 timeout 또는 에러로 결과 없이 죽을 때,
186
+ // 사용자가 원인을 알 수 있도록 한 줄만 노출한다.
187
+ const reason = error.killed ? `timed out (${execTimeout / 1000}s)` : (error.message || 'failed');
188
+ process.stdout.write(`[${rule.label}] external LLM call ${reason} — no result injected.\n`);
166
189
  }
167
190
  resolve();
168
191
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.12.2",
3
+ "version": "2.12.4",
4
4
  "description": "AI Coding Framework for Claude Code — 56 agents, 45 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: design-audit
3
+ user-invocable: true
3
4
  invocation: [command, auto]
4
5
  tier: standard
5
6
  description: "Design technical quality audit — a11y, performance, responsive, theming, AI slop detection with 5-dimension scoring. Use when design-audit, ui-audit, a11y-check, design-check."
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: design-normalize
3
+ user-invocable: true
3
4
  invocation: [command, auto]
4
5
  tier: standard
5
6
  description: "Normalize hardcoded values to design system tokens — colors, typography, spacing, shadows aligned to MASTER.md. Use when design-normalize, design-system, token-align."
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: design-teach
3
3
  user-invocable: false
4
- invocation: [command, auto]
4
+ invocation: [auto]
5
5
  tier: standard
6
6
  description: "Gather and store project design context — target audience, brand personality, aesthetic direction, constraints. Used by other design-* skills. Use when design-teach, design-setup, design-context."
7
7
  triggers: [design-teach, design-setup, design-context]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: test
3
- description: vibe 자가검진 본체 — 대상 harness(~/.claude/~/.codex)의 모든 command/skill/hook/agent 프로빙 → pass/fail 리포트 → ~/.vibe/test-reports/.
4
- when_to_use: /vibe.test 진입점에서 체인 호출. 직접 호출 금지.
3
+ description: vibe 자가검진 본체 — 대상 harness(~/.claude/~/.codex)의 모든 entry skill/skill/hook/agent 프로빙 → pass/fail 리포트 → ~/.vibe/test-reports/.
4
+ when_to_use: vibe.test 진입점에서 체인 호출. 직접 호출 금지.
5
5
  user-invocable: false
6
6
  tier: core
7
7
  ---
@@ -12,7 +12,7 @@ Probe every shipped vibe surface in one install dir and emit a pass/fail report.
12
12
 
13
13
  ## Why this exists
14
14
 
15
- When vibe ships new commands, skills, hooks, or agents, one side (CC or Codex) can end up out of sync with the other, frontmatter can drift, and hook tests can silently break. `/vibe.test` is the single mechanical check: does every surface in the target install actually load and pass its own tests?
15
+ When vibe ships new entry skills, skills, hooks, or agents, one side (CC or Codex) can end up out of sync with the other, frontmatter can drift, and hook tests can silently break. `vibe.test` is the single mechanical check: does every surface in the target install actually load and pass its own tests?
16
16
 
17
17
  ## Target harness
18
18
 
@@ -37,8 +37,8 @@ All probes are **structural or test-based** — no interactive command is ever a
37
37
 
38
38
  | Category | Source | Check |
39
39
  |---|---|---|
40
- | commands | `<install>/commands/*.md` | file readable · frontmatter parses · `description` present · body references a skill (`Load skill \`...\``) if it delegates |
41
- | skills | `<install>/skills/*/SKILL.md` | frontmatter parses · required fields (`name`, `description`, `invocation`) · `invocation` ⊆ `{command, auto, chain}` and non-empty · if `invocation` includes `auto` then `triggers` non-empty · if includes `command` then matching `commands/{vibe.X}.md` or `Load skill <name>` reference exists · if includes `chain` then another skill lists it in `chain-next` · body non-empty |
40
+ | entry skills | `<install>/skills/vibe*/SKILL.md` | file readable · frontmatter parses · `name`, `description`, `user-invocable: true` present |
41
+ | skills | `<install>/skills/*/SKILL.md` | frontmatter parses · required fields (`name`, `description`) · body non-empty |
42
42
  | hooks | repo `hooks/scripts/*.js` | for each script with a matching `__tests__/<name>.test.js`, run `npx vitest run <test> --reporter=json` and parse pass/fail counts |
43
43
  | agents | `<install>/agents/*.md` | file readable · frontmatter parses · required fields (`name`, `description`) |
44
44
 
@@ -62,7 +62,7 @@ Written to `~/.vibe/test-reports/<YYYYMMDD-HHmm>-<harness>.{json,md}`. Exact sch
62
62
  "failed": 2
63
63
  },
64
64
  "probes": {
65
- "commands": [
65
+ "entrySkills": [
66
66
  { "name": "vibe.spec", "status": "pass" },
67
67
  { "name": "vibe.test", "status": "pass" }
68
68
  ],
@@ -102,7 +102,7 @@ Written to `~/.vibe/test-reports/<YYYYMMDD-HHmm>-<harness>.{json,md}`. Exact sch
102
102
 
103
103
  | Category | Pass | Fail |
104
104
  |---|---:|---:|
105
- | commands | 15 | 0 |
105
+ | entry skills | 15 | 0 |
106
106
  | skills | 17 | 1 |
107
107
  | hooks | 6 | 0 |
108
108
  | agents | 3 | 1 |
@@ -136,5 +136,5 @@ If `failed` is empty, replace the Failures section with `_All probes passed._`.
136
136
  - [ ] JSON report matches the template above exactly (fields, types, naming)
137
137
  - [ ] Markdown summary printed to console after the run
138
138
  - [ ] Reports land in `~/.vibe/test-reports/`, never in project-local `.vibe/`
139
- - [ ] `failed.length > 0` → auto-invokes `/vibe.regress register --from-test`
140
- - [ ] `invocation` field invariants enforced per skill (`command` / `auto` / `chain` validity)
139
+ - [ ] `failed.length > 0` → auto-invokes `vibe.regress register --from-test`
140
+ - [ ] Entry skills are verified as user-invocable skill surfaces, not deprecated command files
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: ui-ux-pro-max
3
+ user-invocable: true
3
4
  invocation: [command]
4
5
  tier: standard
5
6
  description: "UI/UX design intelligence with bold aesthetic direction. Searchable database: 50+ styles, 97 color palettes, 57 font pairings, 99 UX guidelines, 25 chart types across 9 stacks (React, Vue, Svelte, Angular, Astro, Next.js, Flutter, Swift, Kotlin). Use when building any UI component, choosing color schemes, selecting typography, applying design patterns, or reviewing UX compliance. Must use this skill when user builds frontend — pages, components, dashboards, or landing pages — to ensure design quality beyond generic AI output."
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: vibe.analyze
3
3
  description: Analyze any target — code, document, website, or Figma design
4
- argument-hint: "feature-name" or file.pdf or https://... or --code or --deps or --arch
4
+ argument-hint: '"feature-name" or file.pdf or https://... or --code or --deps or --arch'
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: vibe.event
3
3
  description: Community event automation — D-Day based proactive task execution
4
- argument-hint: "MDC 12차 3/30" or "webinar AI에이전트 4/15" or "DWK 5차 5/20"
4
+ argument-hint: '"MDC 12차 3/30" or "webinar AI에이전트 4/15" or "DWK 5차 5/20"'
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: vibe.run
3
3
  description: Execute implementation from SPEC
4
- argument-hint: "feature name" or --phase N
4
+ argument-hint: '"feature name" or --phase N'
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -606,7 +606,7 @@ At automation levels L3 and L4, checkpoints that do not require confirmation are
606
606
 
607
607
  - `core/development-philosophy.md` - Surgical precision, modify only requested scope
608
608
  - `core/quick-start.md` - Korean, DRY, SRP, YAGNI
609
- - `standards/complexity-metrics.md` - Functions ≤20 lines, nesting ≤3 levels
609
+ - `standards/complexity-metrics.md` - Functions ≤50 lines, nesting ≤3 levels
610
610
  - `quality/checklist.md` - Code quality checklist
611
611
 
612
612
  **Language guide:** `~/.claude/vibe/languages/{stack}.md` (global reference)
@@ -1617,7 +1617,7 @@ After all scenarios complete + Antigravity review, **quality report is auto-gene
1617
1617
  │ │ Build │ ✅ │ npm run build succeeded │ │
1618
1618
  │ │ Tests │ ✅ │ 12/12 passed │ │
1619
1619
  │ │ Type check │ ✅ │ 0 errors │ │
1620
- │ │ Complexity │ ✅ │ All functions ≤30 lines │ │
1620
+ │ │ Complexity │ ✅ │ All functions ≤50 lines │ │
1621
1621
  │ │ Security │ ✅ │ 0 vulnerabilities │ │
1622
1622
  │ │ Race review │ ✅ │ 3 improvements applied │ │
1623
1623
  │ └─────────────────────────────────────────────────────────┘ │
@@ -1857,7 +1857,7 @@ Before marking any scenario as complete, ALL items must pass:
1857
1857
  | **Functionality** | All Given/When/Then conditions verified | 20% |
1858
1858
  | **Functionality** | Edge cases handled per scenario | 10% |
1859
1859
  | **Code Quality** | No `any` types in TypeScript | 10% |
1860
- | **Code Quality** | Functions ≤30 lines, nesting ≤3 levels | 10% |
1860
+ | **Code Quality** | Functions ≤50 lines, nesting ≤3 levels | 10% |
1861
1861
  | **Code Quality** | No hardcoded values (use constants) | 5% |
1862
1862
  | **Security** | Input validation implemented | 10% |
1863
1863
  | **Security** | Authentication/authorization checked | 5% |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vibe.test
3
- description: Self-test vibe — probe every command/skill/hook/agent in the target harness install dir and write a pass/fail report
3
+ description: Self-test vibe — probe every entry skill/skill/hook/agent in the target harness install dir and write a pass/fail report
4
4
  argument-hint: "[cc|codex] (empty = current harness)"
5
5
  user-invocable: true
6
6
  ---
@@ -257,7 +257,7 @@ Record the value as `{step_count}` and include it in the report below.
257
257
  │ │ Build │ ✅ │ Success │ │
258
258
  │ │ Tests │ ✅ │ 12/12 passed │ │
259
259
  │ │ Type Check │ ✅ │ 0 errors │ │
260
- │ │ Complexity │ ✅ │ All functions ≤30 lines │ │
260
+ │ │ Complexity │ ✅ │ All functions ≤50 lines │ │
261
261
  │ │ Code Coverage │ ⚠️ │ 78% (target: 80%) │ │
262
262
  │ └─────────────────────────────────────────────────────────┘ │
263
263
  │ │
@@ -283,7 +283,7 @@ npm install eslint-plugin-complexity
283
283
  "rules": {
284
284
  "complexity": ["error", 10],
285
285
  "max-depth": ["error", 3],
286
- "max-lines-per-function": ["error", 20]
286
+ "max-lines-per-function": ["error", 50]
287
287
  }
288
288
  }
289
289
  ```
@@ -307,7 +307,7 @@ radon mi app/
307
307
  |--------|--------|-------------|
308
308
  | Cyclomatic Complexity | ≤ 10 | Independent execution paths |
309
309
  | Cognitive Complexity | ≤ 15 | Easy to understand |
310
- | Function Length | ≤ 20 lines | Short, focused functions |
310
+ | Function Length | ≤ 50 lines | Short, focused functions |
311
311
  | Nesting Depth | ≤ 3 levels | Flat structure |
312
312
  | Parameters | ≤ 5 | Function parameter limit |
313
313
  | Dependencies | ≤ 7 | Module dependency limit |