@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.
- package/CLAUDE.md +13 -12
- package/README.md +2 -0
- package/dist/cli/collaborator.d.ts.map +1 -1
- package/dist/cli/collaborator.js +23 -6
- package/dist/cli/collaborator.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +3 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
- package/dist/cli/postinstall/claude-agents.js +15 -12
- package/dist/cli/postinstall/claude-agents.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts +2 -2
- package/dist/cli/postinstall/constants.js +2 -2
- package/dist/cli/postinstall/fs-utils.d.ts +5 -0
- package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
- package/dist/cli/postinstall/fs-utils.js +55 -0
- package/dist/cli/postinstall/fs-utils.js.map +1 -1
- package/dist/cli/postinstall/fs-utils.test.d.ts +2 -0
- package/dist/cli/postinstall/fs-utils.test.d.ts.map +1 -0
- package/dist/cli/postinstall/fs-utils.test.js +31 -0
- package/dist/cli/postinstall/fs-utils.test.js.map +1 -0
- package/dist/cli/postinstall/index.d.ts +1 -1
- package/dist/cli/postinstall/index.d.ts.map +1 -1
- package/dist/cli/postinstall/index.js +1 -1
- package/dist/cli/postinstall/index.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +5 -3
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/postinstall.d.ts +1 -1
- package/dist/cli/postinstall.d.ts.map +1 -1
- package/dist/cli/postinstall.js +1 -1
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +13 -1
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/infra/lib/CostAccumulator.d.ts +19 -2
- package/dist/infra/lib/CostAccumulator.d.ts.map +1 -1
- package/dist/infra/lib/CostAccumulator.js +60 -2
- package/dist/infra/lib/CostAccumulator.js.map +1 -1
- package/dist/infra/lib/SkillFrontmatter.d.ts.map +1 -1
- package/dist/infra/lib/SkillFrontmatter.js +15 -5
- package/dist/infra/lib/SkillFrontmatter.js.map +1 -1
- package/dist/infra/lib/SkillFrontmatter.test.d.ts +2 -0
- package/dist/infra/lib/SkillFrontmatter.test.d.ts.map +1 -0
- package/dist/infra/lib/SkillFrontmatter.test.js +60 -0
- package/dist/infra/lib/SkillFrontmatter.test.js.map +1 -0
- package/dist/infra/lib/antigravity/chat.d.ts.map +1 -1
- package/dist/infra/lib/antigravity/chat.js +6 -0
- package/dist/infra/lib/antigravity/chat.js.map +1 -1
- package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -1
- package/dist/infra/lib/antigravity/orchestration.js +13 -1
- package/dist/infra/lib/antigravity/orchestration.js.map +1 -1
- package/dist/infra/lib/antigravity/types.d.ts +8 -0
- package/dist/infra/lib/antigravity/types.d.ts.map +1 -1
- package/dist/infra/lib/gpt/auth.d.ts.map +1 -1
- package/dist/infra/lib/gpt/auth.js +13 -1
- package/dist/infra/lib/gpt/auth.js.map +1 -1
- package/dist/infra/lib/gpt/chat.d.ts.map +1 -1
- package/dist/infra/lib/gpt/chat.js +52 -31
- package/dist/infra/lib/gpt/chat.js.map +1 -1
- package/dist/infra/lib/gpt/embedding.d.ts.map +1 -1
- package/dist/infra/lib/gpt/embedding.js +6 -5
- package/dist/infra/lib/gpt/embedding.js.map +1 -1
- package/dist/infra/lib/gpt/orchestration.d.ts.map +1 -1
- package/dist/infra/lib/gpt/orchestration.js +13 -1
- package/dist/infra/lib/gpt/orchestration.js.map +1 -1
- package/dist/infra/lib/gpt/types.d.ts +8 -0
- package/dist/infra/lib/gpt/types.d.ts.map +1 -1
- package/dist/infra/lib/llm/timeout.d.ts +34 -0
- package/dist/infra/lib/llm/timeout.d.ts.map +1 -0
- package/dist/infra/lib/llm/timeout.js +45 -0
- package/dist/infra/lib/llm/timeout.js.map +1 -0
- package/dist/infra/lib/llm/timeout.test.d.ts +2 -0
- package/dist/infra/lib/llm/timeout.test.d.ts.map +1 -0
- package/dist/infra/lib/llm/timeout.test.js +50 -0
- package/dist/infra/lib/llm/timeout.test.js.map +1 -0
- package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
- package/dist/infra/orchestrator/AgentExecutor.js +3 -1
- package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
- package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
- package/dist/infra/orchestrator/LLMCluster.js +10 -1
- package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts +5 -0
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +7 -0
- package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
- package/dist/infra/orchestrator/PhasePipeline.d.ts +5 -5
- package/dist/infra/orchestrator/PhasePipeline.d.ts.map +1 -1
- package/dist/infra/orchestrator/PhasePipeline.js +19 -15
- package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +10 -0
- package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.js +23 -6
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.test.js +46 -19
- package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.js +41 -9
- package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
- package/hooks/scripts/__tests__/keyword-detector.test.js +51 -16
- package/hooks/scripts/auto-commit.js +14 -7
- package/hooks/scripts/codex-hook-adapter.js +5 -1
- package/hooks/scripts/keyword-detector.js +14 -2
- package/hooks/scripts/llm-orchestrate.js +13 -2
- package/hooks/scripts/prompt-dispatcher.js +32 -9
- package/package.json +1 -1
- package/skills/design-audit/SKILL.md +1 -0
- package/skills/design-normalize/SKILL.md +1 -0
- package/skills/design-teach/SKILL.md +1 -1
- package/skills/test/SKILL.md +9 -9
- package/skills/ui-ux-pro-max/SKILL.md +1 -0
- package/skills/vibe.analyze/SKILL.md +1 -1
- package/skills/vibe.event/SKILL.md +1 -1
- package/skills/vibe.run/SKILL.md +4 -4
- package/skills/vibe.test/SKILL.md +1 -1
- package/skills/vibe.verify/SKILL.md +1 -1
- 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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
162
|
-
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,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: [
|
|
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]
|
package/skills/test/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test
|
|
3
|
-
description: vibe 자가검진 본체 — 대상 harness(~/.claude/~/.codex)의 모든
|
|
4
|
-
when_to_use:
|
|
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
|
|
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
|
-
|
|
|
41
|
-
| skills | `<install>/skills/*/SKILL.md` | frontmatter parses · required fields (`name`, `description
|
|
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
|
-
"
|
|
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
|
-
|
|
|
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
|
|
140
|
-
- [ ]
|
|
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
|
|
package/skills/vibe.run/SKILL.md
CHANGED
|
@@ -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 ≤
|
|
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 ≤
|
|
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 ≤
|
|
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
|
|
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 ≤
|
|
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",
|
|
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 | ≤
|
|
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 |
|