@su-record/vibe 3.2.36 → 3.2.38
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-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CLAUDE.md +1 -0
- package/README.md +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +27 -4
- package/dist/cli/commands/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/vibe.continue/references/handoff.md +1 -1
- package/skills/vibe.run/references/parallel-agents.md +17 -9
- package/vibe/constitution.md +27 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
3
|
"displayName": "Vibe",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.38",
|
|
5
5
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "su-record",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.38",
|
|
4
4
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "su-record",
|
package/CLAUDE.md
CHANGED
|
@@ -39,6 +39,7 @@ Function ≤50 lines · Nesting ≤3 · Params ≤5 · Cyclomatic ≤10 — appl
|
|
|
39
39
|
|
|
40
40
|
### Forbidden Patterns
|
|
41
41
|
No `console.log` in commits · No hardcoded strings/numbers · No commented-out code · No incomplete code without TODO
|
|
42
|
+
- **수치에는 출처를 붙인다** — 실측(무엇을 어떻게 쟀는지) · 1차 문서 · 추정(추정임을 명시). 셋 다 아니면 숫자를 쓰지 않고 방향만 적는다. 측정 안 한 배수/퍼센트 금지, 모델마다 달라지는 값의 절대 하드코딩 금지(하네스 임계 신호를 쓴다). SSOT: `vibe/constitution.md` §3.5
|
|
42
43
|
|
|
43
44
|
### Convergence (review / auto-fix loops)
|
|
44
45
|
Loop semantics SSOT: `vibe/rules/loop-contract.md` (ANCHOR→ACT→JUDGE→RECORD; exit = gates pass │ stuck │ max_iterations).
|
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CA8B/C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,YAAY,GAAE,MAAM,EAAO,GAC1B,IAAI,CAoDN"}
|
|
@@ -6,9 +6,25 @@ import { execSync } from 'child_process';
|
|
|
6
6
|
import { log } from '../utils.js';
|
|
7
7
|
import { resolveExternalSkills } from '../postinstall/constants.js';
|
|
8
8
|
import { getProjectConfigPath, getProjectConfigPaths, } from '../../infra/lib/config/GlobalConfigManager.js';
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* skills.sh 설치 대상 검증 — `owner/repo` 와 `owner/repo@skill` 둘 다 허용한다.
|
|
11
|
+
*
|
|
12
|
+
* WHY: `@skill` 은 skills.sh 가 문서에 쓰는 **단일 스킬 설치 표기**다
|
|
13
|
+
* (`npx skills add vercel-labs/agent-skills@react-best-practices`). 그런데 vibe 의
|
|
14
|
+
* 검증기는 `@` 를 아예 몰라서, 공식 문서를 그대로 따라 친 사용자가
|
|
15
|
+
* "Invalid skill target" 을 받았다. 레포 전체를 받는 형태만 통과시키고 있었던 셈이다.
|
|
16
|
+
*
|
|
17
|
+
* 같은 이유로 `https://github.com/owner/repo` 전체 URL 형태도 받는다 — taste-skill 등
|
|
18
|
+
* 여러 배포처가 README 에 URL 형태만 싣는다(실측: skills.sh 문서에 세 표기가 모두 있다).
|
|
19
|
+
*
|
|
20
|
+
* 셸 주입 방지가 이 검증기의 목적이므로 허용 문자는 계속 화이트리스트로 좁게 둔다 —
|
|
21
|
+
* 표기 세 가지를 여는 것이지 임의 문자열을 통과시키는 것이 아니다.
|
|
22
|
+
*/
|
|
23
|
+
const OWNER_REPO = String.raw `[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+`;
|
|
24
|
+
const SKILL_SUFFIX = String.raw `(@[a-zA-Z0-9_.-]+)?`;
|
|
25
|
+
const SKILL_TARGET = new RegExp(`^(https:\\/\\/github\\.com\\/)?${OWNER_REPO}${SKILL_SUFFIX}$`);
|
|
10
26
|
function isValidSkillTarget(target) {
|
|
11
|
-
return
|
|
27
|
+
return SKILL_TARGET.test(target);
|
|
12
28
|
}
|
|
13
29
|
/**
|
|
14
30
|
* skills.sh 에코시스템에서 스킬 설치
|
|
@@ -19,7 +35,10 @@ export function skillsAdd(target) {
|
|
|
19
35
|
Usage: vibe skills add <owner/repo>
|
|
20
36
|
|
|
21
37
|
Install skills from skills.sh ecosystem.
|
|
22
|
-
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
vibe skills add vercel-labs/agent-skills # whole repo
|
|
41
|
+
vibe skills add vercel-labs/agent-skills@react-best-practices # one skill
|
|
23
42
|
`);
|
|
24
43
|
return;
|
|
25
44
|
}
|
|
@@ -66,7 +85,11 @@ export function installExternalSkills(projectRoot, stackTypes, capabilities = []
|
|
|
66
85
|
continue;
|
|
67
86
|
try {
|
|
68
87
|
log(` 📦 Installing external skill: ${pkg}...\n`);
|
|
69
|
-
|
|
88
|
+
// `-y` 없이는 프롬프트가 뜬다. skills CLI 는 에이전트 환경을 감지하면 알아서
|
|
89
|
+
// 비대화로 돌지만, 사용자가 **평범한 셸에서** `vibe init` 을 돌리면 감지가
|
|
90
|
+
// 안 되고 stdio:'pipe' 라 프롬프트가 보이지도 않는다 — 60초를 기다렸다가
|
|
91
|
+
// "Failed (skipped)" 로 조용히 넘어간다. 비대화 경로에서는 명시적으로 끈다.
|
|
92
|
+
execSync(`npx skills add ${pkg} --agent claude-code -y`, {
|
|
70
93
|
stdio: 'pipe',
|
|
71
94
|
cwd: projectRoot,
|
|
72
95
|
timeout: 60_000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,+CAA+C,CAAC;AAEvD,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@ Use this document before a session ends or a long pause when detailed work state
|
|
|
4
4
|
|
|
5
5
|
## When to Generate
|
|
6
6
|
|
|
7
|
-
- Context reaches
|
|
7
|
+
- Context reaches the harness's own threshold — the `context_window_80/90/95` signal, i.e. the 85% rule in CLAUDE.md. Do not hardcode an absolute token count: the window differs by model (200k vs 1M), so a fixed number is wrong for most sessions.
|
|
8
8
|
- The session has already been compacted three times.
|
|
9
9
|
- Work will pause for an extended period.
|
|
10
10
|
- Complex progress needs a durable record for a teammate or future session.
|
|
@@ -90,24 +90,32 @@ is the SSOT for proportional execution.
|
|
|
90
90
|
|
|
91
91
|
### Parallel Task Call Pattern (MUST FOLLOW)
|
|
92
92
|
|
|
93
|
-
**Correct — Single message with multiple parallel
|
|
93
|
+
**Correct — Single message with multiple parallel spawns:**
|
|
94
94
|
```
|
|
95
95
|
<message>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
Agent("Analyze src/components/ for existing patterns")
|
|
97
|
+
Agent("Check package.json dependencies")
|
|
98
|
+
Agent("Find usage of similar features in codebase")
|
|
99
99
|
</message>
|
|
100
|
-
→
|
|
100
|
+
→ 세 건이 동시에 돈다. 벽시계 시간은 **가장 느린 하나**로 수렴한다
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
**WRONG — Sequential calls (DO NOT DO THIS):**
|
|
104
104
|
```
|
|
105
|
-
<message>
|
|
106
|
-
<message>
|
|
107
|
-
<message>
|
|
108
|
-
→
|
|
105
|
+
<message>Agent("Analyze...")</message>
|
|
106
|
+
<message>Agent("Check...")</message>
|
|
107
|
+
<message>Agent("Find...")</message>
|
|
108
|
+
→ 벽시계 시간이 **셋의 합**이 된다. 서로 읽지 않는 작업을 줄 세운 대가다
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
> 도구 이름은 하네스가 바꾼다 — 서브에이전트 툴은 `Task` 에서 `Agent` 로 옮겨갔다
|
|
112
|
+
> (2026-08 실측: 세션 로그 60개에서 `Agent` 13회 / `Task` 0회). Codex 에는 이 이름의
|
|
113
|
+
> 도구가 없으므로 **호출 문법이 아니라 의도**로 읽는다 — "독립 작업은 한 번에 띄운다".
|
|
114
|
+
>
|
|
115
|
+
> **배수로 말하지 않는다.** 이전 판에는 "~3x faster" 라고 적혀 있었는데 근거가 없고
|
|
116
|
+
> 사실도 아니다 — 병렬 실행의 벽시계 시간은 개수로 나눠지지 않고 가장 느린 항목과
|
|
117
|
+
> 스폰 오버헤드로 정해진다. 측정하지 않은 배수는 적지 않는다.
|
|
118
|
+
|
|
111
119
|
### Background Agent Pattern (autonomous + parallel ACT)
|
|
112
120
|
|
|
113
121
|
Use the harness's native background subagents — spawn them in one message and continue working; completion notifications arrive automatically:
|
package/vibe/constitution.md
CHANGED
|
@@ -118,9 +118,36 @@ All reference documents are stored globally and specified in `.vibe/config.json`
|
|
|
118
118
|
- Clear git commit messages
|
|
119
119
|
- Use TODO/FIXME comments
|
|
120
120
|
- Document important decisions
|
|
121
|
+
- **수치에는 출처를 붙인다** — 아래 참조
|
|
121
122
|
|
|
122
123
|
---
|
|
123
124
|
|
|
125
|
+
## 3.5 수치 출처 규율 (Numbers Need Provenance)
|
|
126
|
+
|
|
127
|
+
문서·SPEC·커밋 메시지에 쓰는 **모든 수치는 출처가 있어야 한다.** 출처는 셋 중 하나다:
|
|
128
|
+
|
|
129
|
+
| 종류 | 표기 | 예 |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| **실측** | 무엇을 어떻게 쟀는지 함께 | "세션 로그 60개 실측: `Agent` 13회 / `Task` 0회" |
|
|
132
|
+
| **1차 문서** | 공급자 공식 문서·명세 링크 | "동시 상한 min(16, cores-2) — Workflow 도구 명세" |
|
|
133
|
+
| **추정** | **추정임을 명시**하고 계산 근거를 남긴다 | "시나리오 상수 × 횟수 (추정)" |
|
|
134
|
+
|
|
135
|
+
출처가 없으면 **숫자를 쓰지 않는다.** "더 빠르다", "줄어든다" 로 방향만 적는 것이
|
|
136
|
+
틀린 배수를 적는 것보다 낫다.
|
|
137
|
+
|
|
138
|
+
**금지**
|
|
139
|
+
- 측정하지 않은 배수·퍼센트 (`3x faster`, `70% 절감`)
|
|
140
|
+
- 모델·환경에 따라 달라지는 값의 절대 하드코딩 (`80–100k 토큰` — 컨텍스트 창이
|
|
141
|
+
200k 인지 1M 인지에 따라 뜻이 달라진다. 하네스가 주는 임계 신호를 쓴다)
|
|
142
|
+
- 출처 없이 인용된 제3자 수치 — **인용 자체가 1차 출처의 대체물이 아니다**
|
|
143
|
+
|
|
144
|
+
**WHY**: 근거 없는 수치는 반증되기 전까지 사실처럼 유통되고, 그 위에서 내린 결정은
|
|
145
|
+
되돌리기 어렵다. 널리 퍼진 "AI 코딩 비용의 90%는 불필요한 컨텍스트" 인용문은 1차
|
|
146
|
+
출처가 확인되지 않았고, 함께 돌던 "린트에 최상위 모델 = 30배" 는 공식 가격표 기준
|
|
147
|
+
최대 10배, "배치 70~90% 절감" 은 공식 할인율 50% 였다. 방향은 맞아도 숫자는
|
|
148
|
+
근거가 없었다. vibe 는 완료를 자기보고가 아니라 결정론적 게이트로 판정한다 —
|
|
149
|
+
같은 기준을 **문서의 수치**에도 적용한다.
|
|
150
|
+
|
|
124
151
|
## 4. Tech Stack
|
|
125
152
|
|
|
126
153
|
### Backend
|