@su-record/vibe 2.9.25 → 2.9.33
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 +7 -4
- package/commands/vibe.figma.md +16 -0
- package/commands/vibe.run.md +6 -0
- package/commands/vibe.verify.md +22 -0
- package/dist/cli/auth.d.ts +7 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +51 -11
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.d.ts +5 -1
- package/dist/cli/collaborator.d.ts.map +1 -1
- package/dist/cli/collaborator.js +10 -5
- package/dist/cli/collaborator.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +5 -21
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts +13 -5
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +73 -32
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +21 -8
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +14 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall/global-config.d.ts.map +1 -1
- package/dist/cli/postinstall/global-config.js +8 -4
- package/dist/cli/postinstall/global-config.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +11 -0
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/LegacyMigration.d.ts +14 -0
- package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
- package/dist/cli/setup/LegacyMigration.js +61 -0
- package/dist/cli/setup/LegacyMigration.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts +18 -7
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +144 -104
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup/Provisioner.js +2 -2
- package/dist/cli/setup/Provisioner.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -2
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +2 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/utils/cli-detector.d.ts +9 -6
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +127 -8
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/infra/lib/browser/compare.d.ts +27 -0
- package/dist/infra/lib/browser/compare.d.ts.map +1 -1
- package/dist/infra/lib/browser/compare.js +55 -0
- package/dist/infra/lib/browser/compare.js.map +1 -1
- package/dist/infra/lib/browser/index.d.ts +2 -1
- package/dist/infra/lib/browser/index.d.ts.map +1 -1
- package/dist/infra/lib/browser/index.js +1 -1
- package/dist/infra/lib/browser/index.js.map +1 -1
- package/dist/infra/lib/figma/audit.d.ts +37 -0
- package/dist/infra/lib/figma/audit.d.ts.map +1 -0
- package/dist/infra/lib/figma/audit.js +130 -0
- package/dist/infra/lib/figma/audit.js.map +1 -0
- package/dist/infra/lib/figma/extract.d.ts +21 -1
- package/dist/infra/lib/figma/extract.d.ts.map +1 -1
- package/dist/infra/lib/figma/extract.js +84 -12
- package/dist/infra/lib/figma/extract.js.map +1 -1
- package/dist/infra/lib/figma/index.d.ts +4 -2
- package/dist/infra/lib/figma/index.d.ts.map +1 -1
- package/dist/infra/lib/figma/index.js +2 -1
- package/dist/infra/lib/figma/index.js.map +1 -1
- package/dist/infra/lib/figma/types.d.ts +31 -0
- package/dist/infra/lib/figma/types.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.d.ts +5 -0
- package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.js +21 -2
- package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
- package/hooks/hooks.json +8 -0
- package/hooks/scripts/command-log.js +3 -3
- package/hooks/scripts/context-save.js +3 -3
- package/hooks/scripts/evolution-engine.js +2 -2
- package/hooks/scripts/figma-extract.js +134 -1
- package/hooks/scripts/lib/dispatcher.js +9 -5
- package/hooks/scripts/lib/scope-from-spec.js +20 -5
- package/hooks/scripts/prompt-dispatcher.js +5 -3
- package/hooks/scripts/scope-guard.js +3 -3
- package/hooks/scripts/session-start.js +3 -3
- package/hooks/scripts/step-counter.js +45 -0
- package/hooks/scripts/stop-notify.js +2 -2
- package/hooks/scripts/utils.js +62 -4
- package/package.json +1 -1
- package/skills/vibe-figma-extract/SKILL.md +22 -0
- package/vibe/templates/claudemd-template.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryStorage.js","sourceRoot":"","sources":["../../../../src/infra/lib/memory/MemoryStorage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MemoryStorage.js","sourceRoot":"","sources":["../../../../src/infra/lib/memory/MemoryStorage.ts"],"names":[],"mappings":"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"}
|
package/hooks/hooks.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PreToolUse Hook - 모든 Bash 명령어를 타임스탬프와 함께 로깅
|
|
3
3
|
*
|
|
4
|
-
* 로그 위치: .
|
|
4
|
+
* 로그 위치: .vibe/command-log.txt (legacy .claude/vibe/ 또는 .coco/vibe/ 사용 중이면 그쪽)
|
|
5
5
|
* exit 0 항상 통과 (로깅만 수행, 차단하지 않음)
|
|
6
6
|
*/
|
|
7
7
|
import { appendFileSync, mkdirSync, existsSync } from 'fs';
|
|
8
8
|
import path from 'path';
|
|
9
|
-
import { PROJECT_DIR } from './utils.js';
|
|
9
|
+
import { PROJECT_DIR, projectVibeRoot } from './utils.js';
|
|
10
10
|
|
|
11
|
-
const LOG_DIR =
|
|
11
|
+
const LOG_DIR = projectVibeRoot(PROJECT_DIR);
|
|
12
12
|
const LOG_FILE = path.join(LOG_DIR, 'command-log.txt');
|
|
13
13
|
const MAX_CMD_LENGTH = 500;
|
|
14
14
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 구조적 메타데이터를 자동 추출하여 세션 복원 품질을 높임.
|
|
7
7
|
* (claw-code compact.rs 패턴 참조)
|
|
8
8
|
*/
|
|
9
|
-
import { getToolsBaseUrl, getLibBaseUrl, PROJECT_DIR } from './utils.js';
|
|
9
|
+
import { getToolsBaseUrl, getLibBaseUrl, PROJECT_DIR, projectVibePath } from './utils.js';
|
|
10
10
|
import { execSync } from 'child_process';
|
|
11
11
|
import fs from 'fs';
|
|
12
12
|
import path from 'path';
|
|
@@ -97,14 +97,14 @@ function extractStructuredMetadata() {
|
|
|
97
97
|
|
|
98
98
|
try {
|
|
99
99
|
// SPEC/TODO에서 진행 중 작업 추출
|
|
100
|
-
const specDir =
|
|
100
|
+
const specDir = projectVibePath(PROJECT_DIR, 'specs');
|
|
101
101
|
if (fs.existsSync(specDir)) {
|
|
102
102
|
const specs = fs.readdirSync(specDir).filter(f => f.endsWith('.md')).slice(0, 3);
|
|
103
103
|
for (const spec of specs) {
|
|
104
104
|
metadata.pendingWork.push(`SPEC: ${spec.replace('.md', '')}`);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
const todoDir =
|
|
107
|
+
const todoDir = projectVibePath(PROJECT_DIR, 'todos');
|
|
108
108
|
if (fs.existsSync(todoDir)) {
|
|
109
109
|
const todos = fs.readdirSync(todoDir).filter(f => f.endsWith('.md')).slice(0, 3);
|
|
110
110
|
for (const todo of todos) {
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* PostToolUse Hook - Evolution Engine
|
|
3
3
|
* Write/Edit 이벤트 후 인사이트 추출 및 자동 생성 파이프라인 트리거
|
|
4
4
|
*/
|
|
5
|
-
import { getLibBaseUrl, PROJECT_DIR } from './utils.js';
|
|
5
|
+
import { getLibBaseUrl, PROJECT_DIR, projectVibePath } from './utils.js';
|
|
6
6
|
import fs from 'fs';
|
|
7
7
|
import path from 'path';
|
|
8
8
|
|
|
9
9
|
async function main() {
|
|
10
10
|
// Evolution 활성화 여부 확인
|
|
11
|
-
const configPath =
|
|
11
|
+
const configPath = projectVibePath(PROJECT_DIR, 'config.json');
|
|
12
12
|
let config = { mode: 'suggest', enabled: false };
|
|
13
13
|
|
|
14
14
|
try {
|
|
@@ -161,6 +161,114 @@ function toRadialGradient(f) {
|
|
|
161
161
|
|
|
162
162
|
const BLEND_MODES = { MULTIPLY:'multiply', SCREEN:'screen', OVERLAY:'overlay', DARKEN:'darken', LIGHTEN:'lighten', COLOR_DODGE:'color-dodge', COLOR_BURN:'color-burn', HARD_LIGHT:'hard-light', SOFT_LIGHT:'soft-light', DIFFERENCE:'difference', EXCLUSION:'exclusion', HUE:'hue', SATURATION:'saturation', COLOR:'color', LUMINOSITY:'luminosity' };
|
|
163
163
|
|
|
164
|
+
// Figma-only blend modes with no CSS equivalent (silent-drop hazards)
|
|
165
|
+
const UNSUPPORTED_BLEND_MODES = new Set(['LINEAR_BURN', 'LINEAR_DODGE', 'PLUS_DARKER', 'PLUS_LIGHTER']);
|
|
166
|
+
|
|
167
|
+
// ─── Raw extraction & Audit (Figma→CSS translation-loss detection) ──
|
|
168
|
+
|
|
169
|
+
/** Pull raw numeric Figma properties for later raw-vs-computed reconciliation. */
|
|
170
|
+
function extractRaw(n) {
|
|
171
|
+
const raw = {};
|
|
172
|
+
if (n.itemSpacing != null) raw.itemSpacing = n.itemSpacing;
|
|
173
|
+
if (n.paddingTop != null) raw.paddingTop = n.paddingTop;
|
|
174
|
+
if (n.paddingRight != null) raw.paddingRight = n.paddingRight;
|
|
175
|
+
if (n.paddingBottom != null) raw.paddingBottom = n.paddingBottom;
|
|
176
|
+
if (n.paddingLeft != null) raw.paddingLeft = n.paddingLeft;
|
|
177
|
+
if (n.cornerRadius != null) raw.cornerRadius = n.cornerRadius;
|
|
178
|
+
if (n.rectangleCornerRadii) raw.rectangleCornerRadii = n.rectangleCornerRadii;
|
|
179
|
+
if (n.strokeWeight != null) raw.strokeWeight = n.strokeWeight;
|
|
180
|
+
if (n.strokeAlign) raw.strokeAlign = n.strokeAlign;
|
|
181
|
+
if (n.blendMode) raw.blendMode = n.blendMode;
|
|
182
|
+
if (n.opacity != null) raw.opacity = n.opacity;
|
|
183
|
+
if (n.type === 'TEXT' && n.style) {
|
|
184
|
+
const s = n.style;
|
|
185
|
+
if (s.fontSize != null) raw.fontSize = s.fontSize;
|
|
186
|
+
if (s.lineHeightPx != null) raw.lineHeightPx = s.lineHeightPx;
|
|
187
|
+
if (s.letterSpacing != null) raw.letterSpacing = s.letterSpacing;
|
|
188
|
+
if (s.fontWeight != null) raw.fontWeight = s.fontWeight;
|
|
189
|
+
if (s.leadingTrim) raw.leadingTrim = s.leadingTrim;
|
|
190
|
+
if (s.textBoxTrim) raw.textBoxTrim = s.textBoxTrim;
|
|
191
|
+
}
|
|
192
|
+
return raw;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Detect Figma properties that do not cross the CSS boundary cleanly. */
|
|
196
|
+
function auditNode(n) {
|
|
197
|
+
const warnings = [];
|
|
198
|
+
// Stroke alignment — only CENTER maps to CSS border
|
|
199
|
+
if (n.strokeAlign && n.strokeAlign !== 'CENTER' && (n.strokes || []).some(s => s.visible !== false)) {
|
|
200
|
+
warnings.push({
|
|
201
|
+
property: 'strokeAlign',
|
|
202
|
+
value: n.strokeAlign,
|
|
203
|
+
severity: 'P1',
|
|
204
|
+
reason: `CSS border renders stroke centered; Figma ${n.strokeAlign} cannot be matched without box-sizing trade-offs.`,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// Node-level blend mode
|
|
208
|
+
if (n.blendMode && UNSUPPORTED_BLEND_MODES.has(n.blendMode)) {
|
|
209
|
+
warnings.push({
|
|
210
|
+
property: 'blendMode',
|
|
211
|
+
value: n.blendMode,
|
|
212
|
+
severity: 'P1',
|
|
213
|
+
reason: `mix-blend-mode has no equivalent for ${n.blendMode}.`,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// Per-fill blend mode
|
|
217
|
+
for (const f of n.fills || []) {
|
|
218
|
+
if (f.visible !== false && f.blendMode && UNSUPPORTED_BLEND_MODES.has(f.blendMode)) {
|
|
219
|
+
warnings.push({
|
|
220
|
+
property: 'fill.blendMode',
|
|
221
|
+
value: f.blendMode,
|
|
222
|
+
severity: 'P1',
|
|
223
|
+
reason: `background-blend-mode has no equivalent for ${f.blendMode}.`,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// leadingTrim / textBoxTrim (text-box-trim is Firefox-unsupported)
|
|
228
|
+
if (n.type === 'TEXT' && n.style) {
|
|
229
|
+
if (n.style.leadingTrim && n.style.leadingTrim !== 'NONE') {
|
|
230
|
+
warnings.push({
|
|
231
|
+
property: 'leadingTrim',
|
|
232
|
+
value: n.style.leadingTrim,
|
|
233
|
+
severity: 'P2',
|
|
234
|
+
reason: 'text-box-trim is not supported in Firefox; visual vertical alignment will drift.',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
if (n.style.textBoxTrim && n.style.textBoxTrim !== 'NONE') {
|
|
238
|
+
warnings.push({
|
|
239
|
+
property: 'textBoxTrim',
|
|
240
|
+
value: n.style.textBoxTrim,
|
|
241
|
+
severity: 'P2',
|
|
242
|
+
reason: 'text-box-trim browser support is limited.',
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Constraints SCALE/CENTER — no CSS layout equivalent
|
|
247
|
+
if (n.constraints) {
|
|
248
|
+
const { horizontal, vertical } = n.constraints;
|
|
249
|
+
for (const [axis, val] of [['horizontal', horizontal], ['vertical', vertical]]) {
|
|
250
|
+
if (val === 'SCALE' || val === 'CENTER') {
|
|
251
|
+
warnings.push({
|
|
252
|
+
property: `constraints.${axis}`,
|
|
253
|
+
value: val,
|
|
254
|
+
severity: 'P2',
|
|
255
|
+
reason: `Figma ${val} constraint has no direct CSS mapping; responsive behavior will diverge.`,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Individual stroke weights combined with non-center align
|
|
261
|
+
if (n.individualStrokeWeights && n.strokeAlign && n.strokeAlign !== 'CENTER') {
|
|
262
|
+
warnings.push({
|
|
263
|
+
property: 'individualStrokeWeights',
|
|
264
|
+
value: n.strokeAlign,
|
|
265
|
+
severity: 'P2',
|
|
266
|
+
reason: 'Per-side border widths only align cleanly when strokeAlign=CENTER.',
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return warnings;
|
|
270
|
+
}
|
|
271
|
+
|
|
164
272
|
// ─── CSS Extraction ─────────────────────────────────────────────────
|
|
165
273
|
|
|
166
274
|
function extractCSS(n) {
|
|
@@ -327,10 +435,31 @@ function walk(node, parentAbsBBox) {
|
|
|
327
435
|
r.css.top = `${Math.round(node.absoluteBoundingBox.y - parentAbsBBox.y)}px`;
|
|
328
436
|
r.css.left = `${Math.round(node.absoluteBoundingBox.x - parentAbsBBox.x)}px`;
|
|
329
437
|
}
|
|
438
|
+
// Raw Figma values (for raw-vs-computed reconciliation in verification phase)
|
|
439
|
+
const raw = extractRaw(node);
|
|
440
|
+
if (Object.keys(raw).length) r.raw = raw;
|
|
441
|
+
// Translation-loss warnings (Figma → CSS incompatibilities)
|
|
442
|
+
const warnings = auditNode(node);
|
|
443
|
+
if (warnings.length) r.warnings = warnings;
|
|
330
444
|
if (node.children?.length) r.children = node.children.map(c => walk(c, node.absoluteBoundingBox));
|
|
331
445
|
return r;
|
|
332
446
|
}
|
|
333
447
|
|
|
448
|
+
/** Aggregate all warnings in a tree into a rollup keyed by severity. */
|
|
449
|
+
function rollupWarnings(tree) {
|
|
450
|
+
const all = [];
|
|
451
|
+
function visit(n) {
|
|
452
|
+
if (n.warnings?.length) {
|
|
453
|
+
for (const w of n.warnings) all.push({ nodeId: n.nodeId, name: n.name, ...w });
|
|
454
|
+
}
|
|
455
|
+
(n.children || []).forEach(visit);
|
|
456
|
+
}
|
|
457
|
+
visit(tree);
|
|
458
|
+
const p1 = all.filter(w => w.severity === 'P1').length;
|
|
459
|
+
const p2 = all.filter(w => w.severity === 'P2').length;
|
|
460
|
+
return { total: all.length, p1, p2, items: all };
|
|
461
|
+
}
|
|
462
|
+
|
|
334
463
|
function collectRefs(node, set = new Set()) {
|
|
335
464
|
if (node.imageRef) set.add(node.imageRef);
|
|
336
465
|
if (node.fills) { for (const f of node.fills) { if (f.imageRef) set.add(f.imageRef); } }
|
|
@@ -345,7 +474,9 @@ async function cmdTree(token, fk, nid, depth) {
|
|
|
345
474
|
const data = await apiFetch(`/files/${fk}/nodes?ids=${nid}${dp}`, token);
|
|
346
475
|
const nd = data.nodes?.[nid];
|
|
347
476
|
if (!nd?.document) fail(`Node ${nid} not found`);
|
|
348
|
-
|
|
477
|
+
const tree = walk(nd.document);
|
|
478
|
+
tree.auditSummary = rollupWarnings(tree);
|
|
479
|
+
console.log(JSON.stringify(tree, null, 2));
|
|
349
480
|
}
|
|
350
481
|
|
|
351
482
|
async function cmdImages(token, fk, nid, outDir, depth) {
|
|
@@ -525,6 +656,7 @@ async function cmdRender(token, fk, nid, outDir, depth, scale) {
|
|
|
525
656
|
const nd = treeData.nodes?.[nid];
|
|
526
657
|
if (!nd?.document) fail(`Node ${nid} not found`);
|
|
527
658
|
const tree = walk(nd.document);
|
|
659
|
+
tree.auditSummary = rollupWarnings(tree);
|
|
528
660
|
|
|
529
661
|
// 2. 이미지 이름 매핑 (노드 name 기반)
|
|
530
662
|
const sectionPrefix = kebab(tree.name);
|
|
@@ -607,6 +739,7 @@ async function cmdRender(token, fk, nid, outDir, depth, scale) {
|
|
|
607
739
|
},
|
|
608
740
|
images: imageMap,
|
|
609
741
|
imageCount: Object.keys(imageMap).length,
|
|
742
|
+
auditSummary: tree.auditSummary,
|
|
610
743
|
}, null, 2));
|
|
611
744
|
}
|
|
612
745
|
|
|
@@ -18,11 +18,15 @@ const SCRIPTS_DIR = path.resolve(__dirname, '..');
|
|
|
18
18
|
|
|
19
19
|
function loadHookConfig() {
|
|
20
20
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
const projectDir = process.env.CLAUDE_PROJECT_DIR || process.env.COCO_PROJECT_DIR || process.cwd();
|
|
22
|
+
// Vibe config 탐색 — `.vibe/` 를 SSOT 로 삼고, legacy `.claude/vibe/`, `.coco/vibe/` fallback
|
|
23
|
+
const candidates = [
|
|
24
|
+
path.join(projectDir, '.vibe', 'config.json'),
|
|
25
|
+
path.join(projectDir, '.claude', 'vibe', 'config.json'),
|
|
26
|
+
path.join(projectDir, '.coco', 'vibe', 'config.json'),
|
|
27
|
+
];
|
|
28
|
+
const configPath = candidates.find(p => fs.existsSync(p));
|
|
29
|
+
if (!configPath) return {};
|
|
26
30
|
return JSON.parse(fs.readFileSync(configPath, 'utf-8')).hooks || {};
|
|
27
31
|
} catch {
|
|
28
32
|
return {};
|
|
@@ -12,8 +12,23 @@ import path from 'path';
|
|
|
12
12
|
|
|
13
13
|
const ACTIVE_STATUSES = new Set(['pending', 'in-progress', 'in_progress', 'active', 'running']);
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Vibe 에셋 루트 해석 — `.vibe/` (SSOT) 우선, legacy `.claude/vibe/`, `.coco/vibe/` fallback.
|
|
17
|
+
* 반환값은 projectDir 기준 상대 경로 문자열 (예: `.vibe`, `.claude/vibe`).
|
|
18
|
+
*/
|
|
19
|
+
function detectVibeRoot(projectDir) {
|
|
20
|
+
try {
|
|
21
|
+
if (fs.existsSync(path.join(projectDir, '.vibe'))) return '.vibe';
|
|
22
|
+
if (fs.existsSync(path.join(projectDir, '.claude', 'vibe'))) return '.claude/vibe';
|
|
23
|
+
if (fs.existsSync(path.join(projectDir, '.coco', 'vibe'))) return '.coco/vibe';
|
|
24
|
+
} catch { /* ignore */ }
|
|
25
|
+
return '.vibe';
|
|
26
|
+
}
|
|
27
|
+
|
|
15
28
|
// 항상 허용: SPEC/plan/TODO 등 메타 문서는 구현 중에도 갱신 가능해야 함
|
|
16
|
-
|
|
29
|
+
function defaultAllow(projectDir) {
|
|
30
|
+
return [`${detectVibeRoot(projectDir)}/**`, 'CLAUDE.md', 'AGENTS.md'];
|
|
31
|
+
}
|
|
17
32
|
|
|
18
33
|
function readFrontmatter(content) {
|
|
19
34
|
if (!content.startsWith('---')) return {};
|
|
@@ -67,7 +82,7 @@ function extractPaths(markdown) {
|
|
|
67
82
|
// 명백한 비경로 제외
|
|
68
83
|
if (/^[A-Z_]+$/.test(raw)) continue; // 상수
|
|
69
84
|
if (/^\d+$/.test(raw)) continue; // 숫자
|
|
70
|
-
if (raw.startsWith('.') && !raw.startsWith('./') && !raw.startsWith('.claude')) continue;
|
|
85
|
+
if (raw.startsWith('.') && !raw.startsWith('./') && !raw.startsWith('.vibe') && !raw.startsWith('.claude') && !raw.startsWith('.coco')) continue;
|
|
71
86
|
|
|
72
87
|
const normalized = raw.replace(/^\.\//, '').replace(/\\/g, '/');
|
|
73
88
|
// 각 세그먼트 안전성 재검증 — "a.b.c" 같은 필드 경로 제거
|
|
@@ -126,7 +141,7 @@ function collapseDominated(globs) {
|
|
|
126
141
|
* 프로젝트의 활성 SPEC 목록 수집.
|
|
127
142
|
*/
|
|
128
143
|
export function findActiveSpecs(projectDir) {
|
|
129
|
-
const specsDir = path.join(projectDir,
|
|
144
|
+
const specsDir = path.join(projectDir, detectVibeRoot(projectDir), 'specs');
|
|
130
145
|
if (!fs.existsSync(specsDir)) return [];
|
|
131
146
|
const results = [];
|
|
132
147
|
const walk = (dir) => {
|
|
@@ -172,7 +187,7 @@ export function synthesizeScope(specFiles, { projectDir } = {}) {
|
|
|
172
187
|
catch { return false; }
|
|
173
188
|
})
|
|
174
189
|
: derived;
|
|
175
|
-
const allow = collapseDominated([...
|
|
190
|
+
const allow = collapseDominated([...defaultAllow(projectDir || '.'), ...verified]);
|
|
176
191
|
return {
|
|
177
192
|
auto: true,
|
|
178
193
|
mode: 'warn',
|
|
@@ -195,7 +210,7 @@ export function synthesizeScope(specFiles, { projectDir } = {}) {
|
|
|
195
210
|
* @returns {{ action: 'created'|'updated'|'skipped-manual'|'skipped-no-specs'|'unchanged', path: string }}
|
|
196
211
|
*/
|
|
197
212
|
export function syncScopeFile(projectDir) {
|
|
198
|
-
const scopePath = path.join(projectDir,
|
|
213
|
+
const scopePath = path.join(projectDir, detectVibeRoot(projectDir), 'scope.json');
|
|
199
214
|
const specs = findActiveSpecs(projectDir);
|
|
200
215
|
|
|
201
216
|
// 기존 파일이 수동 관리면 스킵
|
|
@@ -162,7 +162,9 @@ const matched = DISPATCH_RULES.some(r =>
|
|
|
162
162
|
if (!matched) {
|
|
163
163
|
setImmediate(async () => {
|
|
164
164
|
try {
|
|
165
|
-
const
|
|
165
|
+
const utils = await import('./utils.js');
|
|
166
|
+
const projectDir = process.env.CLAUDE_PROJECT_DIR || process.env.COCO_PROJECT_DIR || '.';
|
|
167
|
+
const configPath = utils.projectVibePath(projectDir, 'config.json');
|
|
166
168
|
let gapEnabled = true;
|
|
167
169
|
try {
|
|
168
170
|
const fs = await import('fs');
|
|
@@ -173,12 +175,12 @@ if (!matched) {
|
|
|
173
175
|
} catch { /* ignore */ }
|
|
174
176
|
|
|
175
177
|
if (gapEnabled) {
|
|
176
|
-
const LIB_BASE =
|
|
178
|
+
const LIB_BASE = utils.getLibBaseUrl();
|
|
177
179
|
const [memMod, gapMod] = await Promise.all([
|
|
178
180
|
import(`${LIB_BASE}memory/MemoryStorage.js`),
|
|
179
181
|
import(`${LIB_BASE}evolution/SkillGapDetector.js`),
|
|
180
182
|
]);
|
|
181
|
-
const storage = new memMod.MemoryStorage(
|
|
183
|
+
const storage = new memMod.MemoryStorage(projectDir);
|
|
182
184
|
const detector = new gapMod.SkillGapDetector(storage);
|
|
183
185
|
detector.logMiss(prompt.slice(0, 200));
|
|
184
186
|
storage.close();
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
|
|
22
22
|
import fs from 'fs';
|
|
23
23
|
import path from 'path';
|
|
24
|
-
import { PROJECT_DIR, logHookDecision } from './utils.js';
|
|
24
|
+
import { PROJECT_DIR, logHookDecision, projectVibePath, projectVibeRoot } from './utils.js';
|
|
25
25
|
|
|
26
|
-
const SCOPE_PATH =
|
|
26
|
+
const SCOPE_PATH = projectVibePath(PROJECT_DIR, 'scope.json');
|
|
27
27
|
|
|
28
28
|
function readScope() {
|
|
29
29
|
try {
|
|
@@ -131,7 +131,7 @@ lines.push(` file: ${rel}`);
|
|
|
131
131
|
if (denied) lines.push(` reason: matches deny pattern`);
|
|
132
132
|
else if (!allowed) lines.push(` reason: not in allow list`);
|
|
133
133
|
if (scope.reason) lines.push(` declared scope: ${scope.reason}`);
|
|
134
|
-
lines.push(` declared in: .
|
|
134
|
+
lines.push(` declared in: ${path.relative(PROJECT_DIR, SCOPE_PATH)} (mode=${scope.mode})`);
|
|
135
135
|
|
|
136
136
|
const blocking = scope.mode === 'block';
|
|
137
137
|
if (blocking) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SessionStart Hook - 세션 시작 시 메모리/시간 로드 + 버전 체크
|
|
3
3
|
*/
|
|
4
|
-
import { getToolsBaseUrl, PROJECT_DIR } from './utils.js';
|
|
4
|
+
import { getToolsBaseUrl, PROJECT_DIR, projectVibePath, projectVibeRoot } from './utils.js';
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import os from 'os';
|
|
@@ -99,14 +99,14 @@ async function main() {
|
|
|
99
99
|
const { syncScopeFile } = await import('./lib/scope-from-spec.js');
|
|
100
100
|
const result = syncScopeFile(PROJECT_DIR);
|
|
101
101
|
if (result.action === 'created' || result.action === 'updated' || result.action === 'removed') {
|
|
102
|
-
console.log(`\n🚧 Scope ${result.action} from active SPECs (.
|
|
102
|
+
console.log(`\n🚧 Scope ${result.action} from active SPECs (${path.relative(PROJECT_DIR, path.join(projectVibeRoot(PROJECT_DIR), 'scope.json'))})`);
|
|
103
103
|
}
|
|
104
104
|
} catch { /* scope sync is best-effort */ }
|
|
105
105
|
|
|
106
106
|
// Autonomy status summary
|
|
107
107
|
try {
|
|
108
108
|
const fs = await import('fs');
|
|
109
|
-
const configPath =
|
|
109
|
+
const configPath = projectVibePath(PROJECT_DIR, 'config.json');
|
|
110
110
|
let autonomyMode = 'suggest';
|
|
111
111
|
let sentinelEnabled = true;
|
|
112
112
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* PostToolUse Hook - 툴콜 스텝 카운터
|
|
4
|
+
*
|
|
5
|
+
* 목적: vibe 멀티-오케스트레이션의 "목표 달성까지 몇 스텝" 측정.
|
|
6
|
+
* 모든 성공 툴콜을 1 스텝으로 집계하여 `/vibe.verify` 리포트에 노출.
|
|
7
|
+
*
|
|
8
|
+
* 저장 위치: .claude/vibe/metrics/current-run.json
|
|
9
|
+
* - /vibe.run 시작 시 overwrite (feature, startedAt, steps=0)
|
|
10
|
+
* - 이후 툴콜마다 steps += 1
|
|
11
|
+
* - /vibe.verify가 읽어서 history.jsonl에 append 후 출력
|
|
12
|
+
*
|
|
13
|
+
* 실패 시 조용히 통과 (차단 금지).
|
|
14
|
+
*/
|
|
15
|
+
import fs from 'fs';
|
|
16
|
+
import path from 'path';
|
|
17
|
+
import { PROJECT_DIR, projectVibePath } from './utils.js';
|
|
18
|
+
|
|
19
|
+
const METRICS_DIR = projectVibePath(PROJECT_DIR, 'metrics');
|
|
20
|
+
const CURRENT_RUN = path.join(METRICS_DIR, 'current-run.json');
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
if (!fs.existsSync(METRICS_DIR)) {
|
|
24
|
+
fs.mkdirSync(METRICS_DIR, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let data = { feature: null, startedAt: null, steps: 0 };
|
|
28
|
+
if (fs.existsSync(CURRENT_RUN)) {
|
|
29
|
+
try {
|
|
30
|
+
data = JSON.parse(fs.readFileSync(CURRENT_RUN, 'utf-8'));
|
|
31
|
+
} catch {
|
|
32
|
+
// 손상 파일 무시, 새로 시작
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!data.startedAt) {
|
|
37
|
+
data.startedAt = new Date().toISOString();
|
|
38
|
+
}
|
|
39
|
+
data.steps = (data.steps || 0) + 1;
|
|
40
|
+
|
|
41
|
+
fs.writeFileSync(CURRENT_RUN, JSON.stringify(data, null, 2));
|
|
42
|
+
} catch {
|
|
43
|
+
// Never block on counter failure
|
|
44
|
+
}
|
|
45
|
+
process.exit(0);
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
import fs from 'fs';
|
|
25
25
|
import path from 'path';
|
|
26
|
-
import { PROJECT_DIR, VIBE_PATH, readVibeConfig } from './utils.js';
|
|
26
|
+
import { PROJECT_DIR, VIBE_PATH, readVibeConfig, projectVibePath } from './utils.js';
|
|
27
27
|
|
|
28
28
|
// Read hook input from stdin
|
|
29
29
|
let input = '';
|
|
@@ -148,7 +148,7 @@ async function main() {
|
|
|
148
148
|
|
|
149
149
|
// Load config
|
|
150
150
|
let config = { notifications: { onStop: true, channels: ['discord', 'telegram', 'slack'] } };
|
|
151
|
-
const configPath =
|
|
151
|
+
const configPath = projectVibePath(PROJECT_DIR, 'config.json');
|
|
152
152
|
|
|
153
153
|
try {
|
|
154
154
|
if (fs.existsSync(configPath)) {
|
package/hooks/scripts/utils.js
CHANGED
|
@@ -17,11 +17,69 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
17
17
|
const DETECTED_VIBE_PATH = path.resolve(__dirname, '..', '..');
|
|
18
18
|
|
|
19
19
|
export const VIBE_PATH = process.env.VIBE_PATH || DETECTED_VIBE_PATH;
|
|
20
|
-
export const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || '.';
|
|
20
|
+
export const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.env.COCO_PROJECT_DIR || '.';
|
|
21
21
|
|
|
22
22
|
// ~/.vibe/ 디렉토리 경로
|
|
23
23
|
const VIBE_HOME_DIR = path.join(os.homedir(), '.vibe');
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* 프로젝트 내 Vibe 에셋 루트 해석.
|
|
27
|
+
*
|
|
28
|
+
* 신규 SSOT: `<project>/.vibe/` — CLI(Claude/coco)와 무관한 공용 디렉토리.
|
|
29
|
+
* Legacy fallback:
|
|
30
|
+
* - `<project>/.claude/vibe/` (Claude Code 프로젝트 초기화 흔적)
|
|
31
|
+
* - `<project>/.coco/vibe/` (coco 프로젝트 초기화 흔적)
|
|
32
|
+
*
|
|
33
|
+
* 해석 규칙 — **읽기**(lookup) 시:
|
|
34
|
+
* 1) `.vibe/` 가 존재하면 그 경로
|
|
35
|
+
* 2) `.claude/vibe/` 가 존재하면 그 경로
|
|
36
|
+
* 3) `.coco/vibe/` 가 존재하면 그 경로
|
|
37
|
+
* 4) 아무것도 없으면 기본값 `.vibe/` (생성 대상)
|
|
38
|
+
*
|
|
39
|
+
* **쓰기**(write) 시에는 항상 새 SSOT 인 `.vibe/` 로 수렴시키는 것이 원칙이지만,
|
|
40
|
+
* 기존 프로젝트의 legacy 파일이 있으면 해당 위치에 쓰는 것이 덜 파괴적이다.
|
|
41
|
+
* → `projectVibePath(projectDir)` 는 기본적으로 "존재하는 경로 우선".
|
|
42
|
+
* 새로 생성하려는 파일은 호출자가 존재 여부를 점검해 `.vibe/` 경로를 선택하거나
|
|
43
|
+
* `projectVibePathPreferred(projectDir)` 로 항상 `.vibe/` 를 얻어 쓸 수 있다.
|
|
44
|
+
*/
|
|
45
|
+
export function projectVibeRoot(projectDir = PROJECT_DIR) {
|
|
46
|
+
try {
|
|
47
|
+
const vibeRoot = path.join(projectDir, '.vibe');
|
|
48
|
+
if (fs.existsSync(vibeRoot)) return vibeRoot;
|
|
49
|
+
const claudeVibe = path.join(projectDir, '.claude', 'vibe');
|
|
50
|
+
if (fs.existsSync(claudeVibe)) return claudeVibe;
|
|
51
|
+
const cocoVibe = path.join(projectDir, '.coco', 'vibe');
|
|
52
|
+
if (fs.existsSync(cocoVibe)) return cocoVibe;
|
|
53
|
+
} catch { /* ignore */ }
|
|
54
|
+
return path.join(projectDir, '.vibe');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** `<project>/.vibe/` 를 무조건 반환 (신규 파일 생성용). */
|
|
58
|
+
export function projectVibePathPreferred(projectDir = PROJECT_DIR, ...sub) {
|
|
59
|
+
return path.join(projectDir, '.vibe', ...sub);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** 읽기 우선 — 존재하는 legacy 경로를 반환, 없으면 새 `.vibe/`. */
|
|
63
|
+
export function projectVibePath(projectDir = PROJECT_DIR, ...sub) {
|
|
64
|
+
return path.join(projectVibeRoot(projectDir), ...sub);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 프로젝트 메모리 DB 디렉토리 해석.
|
|
69
|
+
* `.vibe/memories/` (신규) → `.claude/memories/` (legacy Claude) → `.coco/memories/` (legacy coco) → 기본 `.vibe/memories/`
|
|
70
|
+
*/
|
|
71
|
+
export function projectMemoryDir(projectDir = PROJECT_DIR) {
|
|
72
|
+
try {
|
|
73
|
+
const candidates = [
|
|
74
|
+
path.join(projectDir, '.vibe', 'memories'),
|
|
75
|
+
path.join(projectDir, '.claude', 'memories'),
|
|
76
|
+
path.join(projectDir, '.coco', 'memories'),
|
|
77
|
+
];
|
|
78
|
+
for (const c of candidates) if (fs.existsSync(c)) return c;
|
|
79
|
+
} catch { /* ignore */ }
|
|
80
|
+
return path.join(projectDir, '.vibe', 'memories');
|
|
81
|
+
}
|
|
82
|
+
|
|
25
83
|
/**
|
|
26
84
|
* ~/.vibe/config.json 읽기
|
|
27
85
|
* @returns {object} 파싱된 config 또는 빈 객체
|
|
@@ -37,11 +95,11 @@ export function readVibeConfig() {
|
|
|
37
95
|
}
|
|
38
96
|
|
|
39
97
|
/**
|
|
40
|
-
* 프로젝트 설정(.
|
|
98
|
+
* 프로젝트 설정(.vibe/config.json) 읽기 — legacy `.claude/vibe/`, `.coco/vibe/` fallback 포함
|
|
41
99
|
* @returns {object} 파싱된 config 또는 빈 객체
|
|
42
100
|
*/
|
|
43
101
|
export function readProjectConfig() {
|
|
44
|
-
const configPath =
|
|
102
|
+
const configPath = projectVibePath(PROJECT_DIR, 'config.json');
|
|
45
103
|
try {
|
|
46
104
|
if (fs.existsSync(configPath)) {
|
|
47
105
|
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
@@ -158,7 +216,7 @@ export function getToolsBaseUrl() {
|
|
|
158
216
|
}
|
|
159
217
|
|
|
160
218
|
export function getLibBaseUrl() {
|
|
161
|
-
return getPackageUrl(path.join('dist', 'infra', 'lib'), '
|
|
219
|
+
return getPackageUrl(path.join('dist', 'infra', 'lib'), 'constants.js');
|
|
162
220
|
}
|
|
163
221
|
|
|
164
222
|
// ─── Hook Trace Logging ───
|