@su-record/vibe 3.2.37 → 3.2.39
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/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/dist/infra/lib/ui-ux/CsvDataLoader.d.ts.map +1 -1
- package/dist/infra/lib/ui-ux/CsvDataLoader.js +29 -2
- package/dist/infra/lib/ui-ux/CsvDataLoader.js.map +1 -1
- package/package.json +1 -1
- package/skills/vibe/SKILL.md +1 -1
- package/skills/vibe.image/SKILL.md +1 -1
- package/skills/vibe.review/SKILL.md +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
3
|
"displayName": "Vibe",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.39",
|
|
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.39",
|
|
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",
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvDataLoader.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/ui-ux/CsvDataLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CsvDataLoader.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/ui-ux/CsvDataLoader.ts"],"names":[],"mappings":"AA+BA,2BAA2B;AAC3B,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,KAAK,CAAU;gBAEX,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAWvE;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI;IA2CpE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOjC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
import Papa from 'papaparse';
|
|
2
1
|
import { readFileSync, existsSync } from 'fs';
|
|
3
2
|
import { join, resolve, relative, isAbsolute } from 'path';
|
|
4
3
|
import { homedir } from 'os';
|
|
5
4
|
import { fileURLToPath } from 'url';
|
|
6
5
|
import { dirname } from 'path';
|
|
6
|
+
import { createRequire } from 'module';
|
|
7
|
+
/**
|
|
8
|
+
* papaparse 를 **호출 시점에** 가져온다 — 모듈 로드 시점이 아니라.
|
|
9
|
+
*
|
|
10
|
+
* WHY: 이 파일은 `dist/tools/index.js` 통합 배럴이 재수출한다. 정적 import 면
|
|
11
|
+
* 배럴을 건드리는 **모든** 소비자가 papaparse 해석에 성공해야 한다 — CSV 를 쓸
|
|
12
|
+
* 생각이 전혀 없는 신호 수집기·비용 게이트까지 포함해서. 실제로 GPT 앱(플러그인
|
|
13
|
+
* 트리에는 node_modules 가 없다)에서 "선택 기능과 무관한 papaparse 누락으로
|
|
14
|
+
* 실패" 가 반복 보고됐다.
|
|
15
|
+
*
|
|
16
|
+
* 선택 기능의 의존성은 그 기능을 쓸 때만 필요해야 한다.
|
|
17
|
+
*/
|
|
18
|
+
function loadPapa() {
|
|
19
|
+
try {
|
|
20
|
+
return createRequire(import.meta.url)('papaparse');
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
7
26
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
27
|
const __dirname = dirname(__filename);
|
|
9
28
|
/**
|
|
@@ -46,7 +65,15 @@ export class CsvDataLoader {
|
|
|
46
65
|
try {
|
|
47
66
|
const rawContent = readFileSync(resolvedPath, 'utf-8');
|
|
48
67
|
const cleanContent = this.removeBom(rawContent);
|
|
49
|
-
const
|
|
68
|
+
const papa = loadPapa();
|
|
69
|
+
if (!papa) {
|
|
70
|
+
// 의존성 부재는 CSV 기능만 끈다 — 호출자를 죽이지 않는다
|
|
71
|
+
if (!this.quiet) {
|
|
72
|
+
console.warn(`[CsvDataLoader] papaparse unavailable — CSV loading disabled (${filename})`);
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const parseResult = papa.parse(cleanContent, {
|
|
50
77
|
header: true,
|
|
51
78
|
skipEmptyLines: true,
|
|
52
79
|
transformHeader: (h) => h.trim(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvDataLoader.js","sourceRoot":"","sources":["../../../../src/infra/lib/ui-ux/CsvDataLoader.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CsvDataLoader.js","sourceRoot":"","sources":["../../../../src/infra/lib/ui-ux/CsvDataLoader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/vibe/SKILL.md
CHANGED
|
@@ -107,7 +107,7 @@ user-invocable: true
|
|
|
107
107
|
stakes 의 결정론 신호(config 유무·임시 디렉토리·git 여부)도 이 한 번의 호출로 함께 받는다:
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { console.log(JSON.stringify(t.collectDispatchSignals(process.cwd(), {urls: [], attachments: [], feature: undefined}), null, 2)); })"
|
|
110
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/dispatch/index.js').then(t => { console.log(JSON.stringify(t.collectDispatchSignals(process.cwd(), {urls: [], attachments: [], feature: undefined}), null, 2)); })"
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
반환값을 **사실로 받는다**:
|
|
@@ -37,7 +37,7 @@ Generate images using the Antigravity image backend.
|
|
|
37
37
|
**Step 0-b: 비용 게이트 (생성 전 의무)** — 이미지 생성은 되돌릴 수 없는 지출이다. SSOT: `vibe/rules/loop-contract.md` 비용 게이트 절.
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const op={kind:'paid-generation',provider:'antigravity',label:'이미지 {N}장 생성'}; console.log(t.formatCostGate(op, t.evaluateCostGate(op))); })"
|
|
40
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/dispatch/index.js').then(t => { const op={kind:'paid-generation',provider:'antigravity',label:'이미지 {N}장 생성'}; console.log(t.formatCostGate(op, t.evaluateCostGate(op))); })"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
`ask` 면 생성 전에 무엇을 몇 장 만들지 제시하고 확인받는다. `autonomous` 면 묻지 않고 인박스에 기록한 뒤 진행한다. `.vibe/config.json` 의 `costGate.paidGenerationRequiresApproval: false` 로 끌 수 있다.
|
|
@@ -127,7 +127,7 @@ Detect project tech stack FIRST before launching reviewers.
|
|
|
127
127
|
**스폰 직전 비용 게이트** (SSOT: `vibe/rules/loop-contract.md` 비용 게이트 절). 위 표대로 정한 리뷰어 수를 그대로 넣는다:
|
|
128
128
|
|
|
129
129
|
```bash
|
|
130
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const op={kind:'agent-fanout',agentCount:{N},label:'리뷰어 {N}종 병렬'}; console.log(t.formatCostGate(op, t.evaluateCostGate(op))); })"
|
|
130
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/dispatch/index.js').then(t => { const op={kind:'agent-fanout',agentCount:{N},label:'리뷰어 {N}종 병렬'}; console.log(t.formatCostGate(op, t.evaluateCostGate(op))); })"
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
기본 임계값(12)에서 demo 2종·prototype 3종·production 8종은 전부 **통과**한다 — 평상시 규모는 멈추지 않는다. `ask` 가 나오면 스폰 전에 사용자에게 확인하고, `record` (autonomous) 면 묻지 않고 인박스에 남긴 뒤 진행한다.
|