@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
|
@@ -17,6 +17,7 @@ import { generateCursorSkills } from './cursor-skills.js';
|
|
|
17
17
|
import { detectCocoCli } from '../utils/cli-detector.js';
|
|
18
18
|
import { getClaudeCodeStatus, formatClaudeCodeStatus } from '../auth.js';
|
|
19
19
|
import { migrateLegacyFiles } from '../../infra/lib/config/GlobalConfigManager.js';
|
|
20
|
+
import { generateGlobalClaudeMd, generateGlobalAgentsMd } from '../setup/ProjectSetup.js';
|
|
20
21
|
const __filename = fileURLToPath(import.meta.url);
|
|
21
22
|
const __dirname = path.dirname(__filename);
|
|
22
23
|
/**
|
|
@@ -116,6 +117,16 @@ export function main() {
|
|
|
116
117
|
if (cocoStatus.installed) {
|
|
117
118
|
installCoreAssets(cocoStatus.configDir);
|
|
118
119
|
}
|
|
120
|
+
// 5-0. 전역 CLAUDE.md / AGENTS.md 에 vibe 규약 섹션 주입 (idempotent)
|
|
121
|
+
try {
|
|
122
|
+
generateGlobalClaudeMd();
|
|
123
|
+
if (cocoStatus.installed) {
|
|
124
|
+
generateGlobalAgentsMd();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
console.warn('⚠️ global CLAUDE.md/AGENTS.md 갱신 실패:', e.message);
|
|
129
|
+
}
|
|
119
130
|
// 5-1. 레거시 설정 파일 → ~/.vibe/config.json 마이그레이션
|
|
120
131
|
try {
|
|
121
132
|
migrateLegacyFiles();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/postinstall/main.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAmB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/postinstall/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LegacyMigration - 레거시 마이그레이션 및 정리
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Legacy `.claude/vibe/`, `.coco/vibe/`, `.claude/memories/`, `.coco/memories/` 를
|
|
6
|
+
* 새 SSOT `.vibe/` 로 통합.
|
|
7
|
+
*
|
|
8
|
+
* 동작:
|
|
9
|
+
* - `.vibe/` 가 없으면 legacy 경로를 그대로 rename (기존 init/update 가 하던 동작).
|
|
10
|
+
* - `.vibe/` 가 있으면 legacy 파일을 병합: target 에 없는 것만 복사하고 legacy 는 제거.
|
|
11
|
+
* - `.claude/memories/`, `.coco/memories/` → `.vibe/memories/` (같은 로직).
|
|
12
|
+
* - legacy 디렉토리가 비게 되면 자동 정리 (상위의 `.claude`, `.coco` 자체는 건드리지 않음).
|
|
13
|
+
*
|
|
14
|
+
* 이미 통합된 프로젝트는 no-op.
|
|
15
|
+
* @returns 이동/제거한 legacy 경로 목록 (user-facing 로그용)
|
|
16
|
+
*/
|
|
17
|
+
export declare function consolidateLegacyVibe(projectRoot: string): string[];
|
|
4
18
|
/**
|
|
5
19
|
* .core/ → .claude/vibe/ 마이그레이션
|
|
6
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegacyMigration.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/LegacyMigration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAyB/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA8C1E;AAsDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAyB/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CA6C1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOtD"}
|
|
1
|
+
{"version":3,"file":"LegacyMigration.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/LegacyMigration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BnE;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAyB/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA8C1E;AAsDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAyB/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CA6C1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOtD"}
|
|
@@ -5,6 +5,67 @@ import path from 'path';
|
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import os from 'os';
|
|
7
7
|
import { ensureDir, copyDirRecursive, removeDirRecursive, log } from '../utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* Legacy `.claude/vibe/`, `.coco/vibe/`, `.claude/memories/`, `.coco/memories/` 를
|
|
10
|
+
* 새 SSOT `.vibe/` 로 통합.
|
|
11
|
+
*
|
|
12
|
+
* 동작:
|
|
13
|
+
* - `.vibe/` 가 없으면 legacy 경로를 그대로 rename (기존 init/update 가 하던 동작).
|
|
14
|
+
* - `.vibe/` 가 있으면 legacy 파일을 병합: target 에 없는 것만 복사하고 legacy 는 제거.
|
|
15
|
+
* - `.claude/memories/`, `.coco/memories/` → `.vibe/memories/` (같은 로직).
|
|
16
|
+
* - legacy 디렉토리가 비게 되면 자동 정리 (상위의 `.claude`, `.coco` 자체는 건드리지 않음).
|
|
17
|
+
*
|
|
18
|
+
* 이미 통합된 프로젝트는 no-op.
|
|
19
|
+
* @returns 이동/제거한 legacy 경로 목록 (user-facing 로그용)
|
|
20
|
+
*/
|
|
21
|
+
export function consolidateLegacyVibe(projectRoot) {
|
|
22
|
+
const vibeRoot = path.join(projectRoot, '.vibe');
|
|
23
|
+
const moved = [];
|
|
24
|
+
const plans = [
|
|
25
|
+
{ src: path.join(projectRoot, '.claude', 'vibe'), dst: vibeRoot },
|
|
26
|
+
{ src: path.join(projectRoot, '.coco', 'vibe'), dst: vibeRoot },
|
|
27
|
+
{ src: path.join(projectRoot, '.claude', 'memories'), dst: path.join(vibeRoot, 'memories') },
|
|
28
|
+
{ src: path.join(projectRoot, '.coco', 'memories'), dst: path.join(vibeRoot, 'memories') },
|
|
29
|
+
];
|
|
30
|
+
for (const { src, dst } of plans) {
|
|
31
|
+
if (!fs.existsSync(src))
|
|
32
|
+
continue;
|
|
33
|
+
try {
|
|
34
|
+
if (!fs.existsSync(dst)) {
|
|
35
|
+
// target 없음 → 통째로 rename
|
|
36
|
+
ensureDir(path.dirname(dst));
|
|
37
|
+
fs.renameSync(src, dst);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// 병합 — target 에 없는 파일만 복사
|
|
41
|
+
mergeDirInto(src, dst);
|
|
42
|
+
removeDirRecursive(src);
|
|
43
|
+
}
|
|
44
|
+
moved.push(path.relative(projectRoot, src));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// 권한 등으로 실패 시 조용히 스킵 — 사용자가 수동으로 정리
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return moved;
|
|
51
|
+
}
|
|
52
|
+
/** src 의 각 파일을 dst 에 복사 — 이미 존재하면 건드리지 않는다. */
|
|
53
|
+
function mergeDirInto(src, dst) {
|
|
54
|
+
ensureDir(dst);
|
|
55
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
56
|
+
const srcPath = path.join(src, entry.name);
|
|
57
|
+
const dstPath = path.join(dst, entry.name);
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
if (fs.existsSync(dstPath))
|
|
60
|
+
mergeDirInto(srcPath, dstPath);
|
|
61
|
+
else
|
|
62
|
+
copyDirRecursive(srcPath, dstPath);
|
|
63
|
+
}
|
|
64
|
+
else if (!fs.existsSync(dstPath)) {
|
|
65
|
+
fs.copyFileSync(srcPath, dstPath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
8
69
|
/**
|
|
9
70
|
* .core/ → .claude/vibe/ 마이그레이션
|
|
10
71
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegacyMigration.js","sourceRoot":"","sources":["../../../src/cli/setup/LegacyMigration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LegacyMigration.js","sourceRoot":"","sources":["../../../src/cli/setup/LegacyMigration.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,15 +7,20 @@ import { TechStack, StackDetails } from '../types.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function updateConstitution(coreDir: string, detectedStacks: TechStack[], stackDetails: StackDetails): void;
|
|
9
9
|
/**
|
|
10
|
-
* CLAUDE.md
|
|
10
|
+
* 전역 ~/.claude/CLAUDE.md 생성/갱신 — vibe 규약(룰·키워드·워크플로) 전역 주입
|
|
11
11
|
*/
|
|
12
|
+
export declare function generateGlobalClaudeMd(): void;
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
|
|
14
|
+
* 전역 ~/.coco/AGENTS.md 생성/갱신 (coco CLI 감지 시에만 호출)
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateGlobalAgentsMd(): void;
|
|
17
|
+
/**
|
|
18
|
+
* 프로젝트 분석 → CLAUDE.md 생성/갱신 (프로젝트별 섹션만)
|
|
19
|
+
* 전역 규약은 `~/.claude/CLAUDE.md`에서 별도 관리.
|
|
15
20
|
*/
|
|
16
21
|
export declare function generateProjectClaudeMd(projectRoot: string, detectedStacks: TechStack[], stackDetails: StackDetails): void;
|
|
17
22
|
/**
|
|
18
|
-
* 프로젝트 분석 → AGENTS.md 생성/갱신 (coco
|
|
23
|
+
* 프로젝트 분석 → AGENTS.md 생성/갱신 (coco 용, 프로젝트별 섹션만)
|
|
19
24
|
*/
|
|
20
25
|
export declare function generateProjectAgentsMd(projectRoot: string, detectedStacks: TechStack[], stackDetails: StackDetails): void;
|
|
21
26
|
/**
|
|
@@ -23,13 +28,19 @@ export declare function generateProjectAgentsMd(projectRoot: string, detectedSta
|
|
|
23
28
|
*/
|
|
24
29
|
export declare function updateRules(coreDir: string, detectedStacks: TechStack[], isUpdate?: boolean): void;
|
|
25
30
|
/**
|
|
26
|
-
* 프로젝트 레벨 훅 설치 (.claude/settings.local.json)
|
|
31
|
+
* 프로젝트 레벨 훅 설치 (.claude/settings.local.json 또는 .coco/settings.local.json)
|
|
32
|
+
*
|
|
33
|
+
* @param projectRoot 프로젝트 루트
|
|
34
|
+
* @param harnessDir 하네스 디렉토리 이름 ('.claude' | '.coco', 기본값: '.claude')
|
|
27
35
|
*/
|
|
28
|
-
export declare function installProjectHooks(projectRoot: string): void;
|
|
36
|
+
export declare function installProjectHooks(projectRoot: string, harnessDir?: string): void;
|
|
29
37
|
/**
|
|
30
38
|
* .gitignore 업데이트
|
|
39
|
+
*
|
|
40
|
+
* @param harnessDir '.claude' | '.coco' (기본값: '.claude')
|
|
41
|
+
* 하네스-특정 경로(settings.local.json, checkpoints/)는 해당 디렉토리에 쓰기 위해 사용.
|
|
31
42
|
*/
|
|
32
|
-
export declare function updateGitignore(projectRoot: string): void;
|
|
43
|
+
export declare function updateGitignore(projectRoot: string, harnessDir?: string): void;
|
|
33
44
|
/**
|
|
34
45
|
* config.json 생성/업데이트
|
|
35
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectSetup.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/ProjectSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAA8B,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ProjectSetup.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/ProjectSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAA8B,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAelF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CA8CN;AAoDD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CAgBN;AAyOD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,QAAQ,UAAQ,GAAG,IAAI,CAchG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAAkB,GAAG,IAAI,CAkC7F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAAkB,GAAG,IAAI,CAyDzF;AAqCD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,EAC1B,QAAQ,UAAQ,GACf,IAAI,CA8BN;AAaD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO,GAAG,IAAI,CAmF3F"}
|
|
@@ -13,6 +13,9 @@ import { getCoreConfigDir } from './GlobalInstaller.js';
|
|
|
13
13
|
import { handleCaughtError } from '../../infra/lib/utils.js';
|
|
14
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
15
15
|
const __dirname = path.dirname(__filename);
|
|
16
|
+
// VIBE 섹션 감싸는 마커 — CLAUDE.md/AGENTS.md 둘 다 이 마커 사이를 재생성.
|
|
17
|
+
const VIBE_START = '<!-- VIBE:START -->';
|
|
18
|
+
const VIBE_END_TAG = '<!-- VIBE:END -->';
|
|
16
19
|
/**
|
|
17
20
|
* constitution.md 생성 또는 업데이트
|
|
18
21
|
*/
|
|
@@ -45,78 +48,96 @@ export function updateConstitution(coreDir, detectedStacks, stackDetails) {
|
|
|
45
48
|
* CLAUDE.md 업데이트 (core 섹션 추가/교체)
|
|
46
49
|
*/
|
|
47
50
|
/**
|
|
48
|
-
*
|
|
49
|
-
* 정적 템플릿이 아닌, 실제 프로젝트 구조를 분석해서 맞춤 생성
|
|
51
|
+
* VIBE 섹션을 파일에 쓰기 — START/END 마커 기반 idempotent 갱신
|
|
50
52
|
*/
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (fs.existsSync(claudeMdPath)) {
|
|
60
|
-
const existing = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
61
|
-
const startIdx = existing.indexOf('# VIBE');
|
|
62
|
-
const endIdx = existing.indexOf('<!-- VIBE:END -->');
|
|
63
|
-
if (startIdx !== -1 && endIdx !== -1) {
|
|
64
|
-
// 마커 기반 교체
|
|
53
|
+
function writeVibeMarkedFile(filePath, section, createIfMissing = true) {
|
|
54
|
+
const wrapped = `${VIBE_START}\n${section}\n${VIBE_END_TAG}`;
|
|
55
|
+
if (fs.existsSync(filePath)) {
|
|
56
|
+
const existing = fs.readFileSync(filePath, 'utf-8');
|
|
57
|
+
const startIdx = existing.indexOf(VIBE_START);
|
|
58
|
+
const legacyStartIdx = existing.indexOf('# VIBE');
|
|
59
|
+
const endIdx = existing.indexOf(VIBE_END_TAG);
|
|
60
|
+
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
65
61
|
const before = existing.substring(0, startIdx).trimEnd();
|
|
66
|
-
const after = existing.substring(endIdx +
|
|
67
|
-
|
|
68
|
-
fs.writeFileSync(claudeMdPath, newContent);
|
|
62
|
+
const after = existing.substring(endIdx + VIBE_END_TAG.length).trimStart();
|
|
63
|
+
fs.writeFileSync(filePath, (before ? before + '\n\n' : '') + wrapped + (after ? '\n\n' + after : ''));
|
|
69
64
|
}
|
|
70
|
-
else if (
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
fs.writeFileSync(
|
|
65
|
+
else if (legacyStartIdx !== -1 && endIdx !== -1) {
|
|
66
|
+
const before = existing.substring(0, legacyStartIdx).trimEnd();
|
|
67
|
+
const after = existing.substring(endIdx + VIBE_END_TAG.length).trimStart();
|
|
68
|
+
fs.writeFileSync(filePath, (before ? before + '\n\n' : '') + wrapped + (after ? '\n\n' + after : ''));
|
|
69
|
+
}
|
|
70
|
+
else if (legacyStartIdx !== -1) {
|
|
71
|
+
const before = existing.substring(0, legacyStartIdx).trimEnd();
|
|
72
|
+
fs.writeFileSync(filePath, (before ? before + '\n\n' : '') + wrapped);
|
|
74
73
|
}
|
|
75
74
|
else {
|
|
76
|
-
|
|
77
|
-
fs.writeFileSync(claudeMdPath, existing.trimEnd() + '\n\n' + vibeSection);
|
|
75
|
+
fs.writeFileSync(filePath, existing.trimEnd() + '\n\n' + wrapped + '\n');
|
|
78
76
|
}
|
|
79
77
|
}
|
|
80
|
-
else {
|
|
81
|
-
|
|
78
|
+
else if (createIfMissing) {
|
|
79
|
+
ensureDir(path.dirname(filePath));
|
|
80
|
+
fs.writeFileSync(filePath, wrapped + '\n');
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
/** coco 변환 (Claude Code → coco, .claude/ → .coco/, CLAUDE.md → AGENTS.md) */
|
|
84
|
+
function adaptToCoco(section) {
|
|
85
|
+
return section
|
|
86
|
+
.replace(/Claude Code/g, 'coco')
|
|
87
|
+
.replace(/~\/\.claude\//g, '~/.coco/')
|
|
88
|
+
.replace(/\.claude\//g, '.coco/')
|
|
89
|
+
.replace(/`CLAUDE\.md`/g, '`AGENTS.md`')
|
|
90
|
+
.replace(/\.coco\/CLAUDE\.md/g, '.coco/AGENTS.md');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 전역 ~/.claude/CLAUDE.md 생성/갱신 — vibe 규약(룰·키워드·워크플로) 전역 주입
|
|
94
|
+
*/
|
|
95
|
+
export function generateGlobalClaudeMd() {
|
|
96
|
+
const globalPath = path.join(os.homedir(), '.claude', 'CLAUDE.md');
|
|
97
|
+
const section = buildGlobalSection(detectOsLanguage());
|
|
98
|
+
writeVibeMarkedFile(globalPath, section);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 전역 ~/.coco/AGENTS.md 생성/갱신 (coco CLI 감지 시에만 호출)
|
|
102
|
+
*/
|
|
103
|
+
export function generateGlobalAgentsMd() {
|
|
104
|
+
const globalPath = path.join(os.homedir(), '.coco', 'AGENTS.md');
|
|
105
|
+
const section = adaptToCoco(buildGlobalSection(detectOsLanguage()));
|
|
106
|
+
writeVibeMarkedFile(globalPath, section);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 프로젝트 분석 → CLAUDE.md 생성/갱신 (프로젝트별 섹션만)
|
|
110
|
+
* 전역 규약은 `~/.claude/CLAUDE.md`에서 별도 관리.
|
|
111
|
+
*/
|
|
112
|
+
export function generateProjectClaudeMd(projectRoot, detectedStacks, stackDetails) {
|
|
113
|
+
const claudeMdPath = path.join(projectRoot, 'CLAUDE.md');
|
|
114
|
+
const dirs = analyzeProjectStructure(projectRoot);
|
|
115
|
+
const stackNames = detectedStacks.map(s => STACK_NAMES[s.type]?.name || s.type);
|
|
116
|
+
const section = buildProjectSection(dirs, stackNames, stackDetails);
|
|
117
|
+
writeVibeMarkedFile(claudeMdPath, section);
|
|
118
|
+
}
|
|
86
119
|
/**
|
|
87
|
-
* 프로젝트 분석 → AGENTS.md 생성/갱신 (coco
|
|
120
|
+
* 프로젝트 분석 → AGENTS.md 생성/갱신 (coco 용, 프로젝트별 섹션만)
|
|
88
121
|
*/
|
|
89
122
|
export function generateProjectAgentsMd(projectRoot, detectedStacks, stackDetails) {
|
|
90
123
|
const agentsMdPath = path.join(projectRoot, 'AGENTS.md');
|
|
91
124
|
const dirs = analyzeProjectStructure(projectRoot);
|
|
92
125
|
const stackNames = detectedStacks.map(s => STACK_NAMES[s.type]?.name || s.type);
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
vibeSection = vibeSection.replace(/\.claude\//g, '.coco/');
|
|
99
|
-
const wrapped = `${VIBE_START}\n${vibeSection}\n${VIBE_END_TAG}`;
|
|
100
|
-
if (fs.existsSync(agentsMdPath)) {
|
|
101
|
-
const existing = fs.readFileSync(agentsMdPath, 'utf-8');
|
|
102
|
-
const startIdx = existing.indexOf(VIBE_START);
|
|
103
|
-
const endIdx = existing.indexOf(VIBE_END_TAG);
|
|
104
|
-
if (startIdx !== -1 && endIdx !== -1) {
|
|
105
|
-
const before = existing.substring(0, startIdx).trimEnd();
|
|
106
|
-
const after = existing.substring(endIdx + VIBE_END_TAG.length).trimStart();
|
|
107
|
-
fs.writeFileSync(agentsMdPath, (before ? before + '\n\n' : '') + wrapped + (after ? '\n\n' + after : ''));
|
|
108
|
-
}
|
|
109
|
-
else if (!existing.includes('/vibe.spec')) {
|
|
110
|
-
fs.writeFileSync(agentsMdPath, existing.trimEnd() + '\n\n' + wrapped + '\n');
|
|
111
|
-
}
|
|
126
|
+
const section = adaptToCoco(buildProjectSection(dirs, stackNames, stackDetails));
|
|
127
|
+
// 기존 동작 보존: AGENTS.md가 없고 `/vibe.spec` 마커도 없을 때만 신규 생성
|
|
128
|
+
if (!fs.existsSync(agentsMdPath)) {
|
|
129
|
+
writeVibeMarkedFile(agentsMdPath, section);
|
|
130
|
+
return;
|
|
112
131
|
}
|
|
113
|
-
|
|
114
|
-
|
|
132
|
+
const existing = fs.readFileSync(agentsMdPath, 'utf-8');
|
|
133
|
+
const hasMarker = existing.includes(VIBE_START) || existing.includes('# VIBE');
|
|
134
|
+
if (hasMarker || !existing.includes('/vibe.spec')) {
|
|
135
|
+
writeVibeMarkedFile(agentsMdPath, section);
|
|
115
136
|
}
|
|
116
137
|
}
|
|
117
138
|
function analyzeProjectStructure(projectRoot) {
|
|
118
139
|
const topLevel = fs.readdirSync(projectRoot)
|
|
119
|
-
.filter(f => !f.startsWith('.') || f === '.dev' || f === '.claude')
|
|
140
|
+
.filter(f => !f.startsWith('.') || f === '.dev' || f === '.vibe' || f === '.claude' || f === '.coco')
|
|
120
141
|
.filter(f => {
|
|
121
142
|
try {
|
|
122
143
|
return fs.statSync(path.join(projectRoot, f)).isDirectory();
|
|
@@ -180,21 +201,24 @@ function analyzeProjectStructure(projectRoot) {
|
|
|
180
201
|
packageManager,
|
|
181
202
|
};
|
|
182
203
|
}
|
|
183
|
-
/**
|
|
184
|
-
function
|
|
204
|
+
/** 전역 VIBE 규약 섹션 (프로젝트 독립) — ~/.claude/CLAUDE.md, ~/.coco/AGENTS.md */
|
|
205
|
+
function buildGlobalSection(language) {
|
|
185
206
|
const lines = [];
|
|
186
207
|
lines.push('# VIBE');
|
|
187
208
|
lines.push('');
|
|
209
|
+
lines.push('> Global vibe conventions — shared across all projects using Claude Code.');
|
|
210
|
+
lines.push('> Project-specific stack/structure lives in each project\'s `CLAUDE.md`.');
|
|
211
|
+
lines.push('');
|
|
188
212
|
if (language === 'ko') {
|
|
189
213
|
lines.push('**IMPORTANT: Always respond in Korean (한국어) unless the user explicitly requests otherwise.**');
|
|
190
214
|
lines.push('');
|
|
191
215
|
}
|
|
192
|
-
// Constraints
|
|
193
216
|
lines.push('## Constraints');
|
|
194
217
|
lines.push('');
|
|
195
218
|
lines.push('- Modify only requested scope');
|
|
196
219
|
lines.push('- Preserve existing style');
|
|
197
|
-
lines.push('-
|
|
220
|
+
lines.push('- Prefer editing existing files for modifications');
|
|
221
|
+
lines.push('- Create new files when the task requires them (user asks for a feature/module/scaffold) — an explicit user request overrides this default');
|
|
198
222
|
lines.push('- Function ≤50 lines, nesting ≤3, params ≤5, complexity ≤10');
|
|
199
223
|
lines.push('- No `any`, no `console.log` in commits, no commented-out code');
|
|
200
224
|
lines.push('');
|
|
@@ -213,7 +237,38 @@ function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language)
|
|
|
213
237
|
lines.push('- One hypothesis at a time. No "while I\'m here" refactoring.');
|
|
214
238
|
lines.push('- 3 failed fixes → suspect structural issue, stop patching');
|
|
215
239
|
lines.push('');
|
|
216
|
-
|
|
240
|
+
lines.push('## Workflow');
|
|
241
|
+
lines.push('');
|
|
242
|
+
lines.push('| Task | Command |');
|
|
243
|
+
lines.push('|------|---------|');
|
|
244
|
+
lines.push('| 1-2 files | Plan Mode |');
|
|
245
|
+
lines.push('| 3+ files | `/vibe.spec` |');
|
|
246
|
+
lines.push('| Analyze | `/vibe.analyze` (code, docs, web, Figma) |');
|
|
247
|
+
lines.push('| Harness check | `/vibe.harness` |');
|
|
248
|
+
lines.push('| Project structure | `/vibe.scaffold` |');
|
|
249
|
+
lines.push('');
|
|
250
|
+
lines.push('## Keywords');
|
|
251
|
+
lines.push('');
|
|
252
|
+
lines.push('`ultrawork` parallel+auto | `ralph` loop until 100% | `quick` fast mode');
|
|
253
|
+
lines.push('');
|
|
254
|
+
lines.push('## Quality');
|
|
255
|
+
lines.push('');
|
|
256
|
+
lines.push('Convergence: loop until P1=0. Changed files only.');
|
|
257
|
+
lines.push('At 70%+ context: save_memory → /new → /vibe.utils --continue');
|
|
258
|
+
lines.push('');
|
|
259
|
+
lines.push('## Git');
|
|
260
|
+
lines.push('');
|
|
261
|
+
lines.push('Include: `.vibe/{plans,specs,features,todos,config.json,constitution.md}`, `CLAUDE.md`');
|
|
262
|
+
lines.push('Exclude: `~/.claude/{rules,commands,agents,skills}/`, `.claude/settings.local.json`, `.vibe/{memories,checkpoints,metrics}/`');
|
|
263
|
+
return lines.join('\n');
|
|
264
|
+
}
|
|
265
|
+
/** 프로젝트별 VIBE 섹션 (스택·구조·커맨드) — 프로젝트 루트 CLAUDE.md/AGENTS.md */
|
|
266
|
+
function buildProjectSection(dirs, stackNames, stackDetails) {
|
|
267
|
+
const lines = [];
|
|
268
|
+
lines.push('# VIBE (project)');
|
|
269
|
+
lines.push('');
|
|
270
|
+
lines.push('> Global rules: `~/.claude/CLAUDE.md`. This file is project-specific only.');
|
|
271
|
+
lines.push('');
|
|
217
272
|
if (stackNames.length > 0) {
|
|
218
273
|
lines.push('## Tech Stack');
|
|
219
274
|
lines.push('');
|
|
@@ -226,7 +281,6 @@ function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language)
|
|
|
226
281
|
}
|
|
227
282
|
lines.push('');
|
|
228
283
|
}
|
|
229
|
-
// Project Structure (실제 분석 결과)
|
|
230
284
|
lines.push('## Project Structure');
|
|
231
285
|
lines.push('');
|
|
232
286
|
const structureRows = [];
|
|
@@ -243,13 +297,19 @@ function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language)
|
|
|
243
297
|
case '.dev':
|
|
244
298
|
structureRows.push('| `.dev/` | AI work logs, learnings, scratch |');
|
|
245
299
|
break;
|
|
300
|
+
case '.vibe':
|
|
301
|
+
structureRows.push('| `.vibe/` | Vibe SSOT (specs, plans, memories) — Claude/coco 공용 |');
|
|
302
|
+
break;
|
|
246
303
|
case 'tests':
|
|
247
304
|
case '__tests__':
|
|
248
305
|
case 'test':
|
|
249
306
|
structureRows.push(`| \`${dir}/\` | Test infrastructure |`);
|
|
250
307
|
break;
|
|
251
308
|
case '.claude':
|
|
252
|
-
structureRows.push('| `.claude/` |
|
|
309
|
+
structureRows.push('| `.claude/` | Claude Code CLI 설정 |');
|
|
310
|
+
break;
|
|
311
|
+
case '.coco':
|
|
312
|
+
structureRows.push('| `.coco/` | coco CLI 설정 |');
|
|
253
313
|
break;
|
|
254
314
|
case 'dist':
|
|
255
315
|
case 'out':
|
|
@@ -266,12 +326,10 @@ function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language)
|
|
|
266
326
|
lines.push(...structureRows);
|
|
267
327
|
lines.push('');
|
|
268
328
|
}
|
|
269
|
-
// src/ 하위 구조
|
|
270
329
|
if (dirs.srcChildren.length > 0) {
|
|
271
330
|
lines.push(`### Source layout: ${dirs.srcChildren.map(d => `${d}/`).join(', ')}`);
|
|
272
331
|
lines.push('');
|
|
273
332
|
}
|
|
274
|
-
// Build & Test
|
|
275
333
|
if (dirs.buildCommand || dirs.testCommand) {
|
|
276
334
|
lines.push('## Commands');
|
|
277
335
|
lines.push('');
|
|
@@ -281,44 +339,13 @@ function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language)
|
|
|
281
339
|
lines.push(`- Test: \`${dirs.testCommand}\``);
|
|
282
340
|
lines.push('');
|
|
283
341
|
}
|
|
284
|
-
// References (포인터)
|
|
285
342
|
lines.push('## References');
|
|
286
343
|
lines.push('');
|
|
287
|
-
lines.push('- Rules: `.
|
|
288
|
-
lines.push('- Languages:
|
|
289
|
-
lines.push('- Constitution: `.
|
|
344
|
+
lines.push('- Rules: `.vibe/config.json` → `references.rules[]`');
|
|
345
|
+
lines.push('- Languages: `~/.claude/vibe/languages/` (global)');
|
|
346
|
+
lines.push('- Constitution: `.vibe/constitution.md`');
|
|
290
347
|
if (dirs.hasDocs)
|
|
291
348
|
lines.push('- Business docs: `docs/`');
|
|
292
|
-
lines.push('');
|
|
293
|
-
// Workflow (간결하게)
|
|
294
|
-
lines.push('## Workflow');
|
|
295
|
-
lines.push('');
|
|
296
|
-
lines.push('| Task | Command |');
|
|
297
|
-
lines.push('|------|---------|');
|
|
298
|
-
lines.push('| 1-2 files | Plan Mode |');
|
|
299
|
-
lines.push('| 3+ files | `/vibe.spec` |');
|
|
300
|
-
lines.push('| Analyze | `/vibe.analyze` (code, docs, web, Figma) |');
|
|
301
|
-
lines.push('| Harness check | `/vibe.harness` |');
|
|
302
|
-
lines.push('| Project structure | `/vibe.scaffold` |');
|
|
303
|
-
lines.push('');
|
|
304
|
-
// Magic Keywords
|
|
305
|
-
lines.push('## Keywords');
|
|
306
|
-
lines.push('');
|
|
307
|
-
lines.push('`ultrawork` parallel+auto | `ralph` loop until 100% | `quick` fast mode');
|
|
308
|
-
lines.push('');
|
|
309
|
-
// Quality + Context
|
|
310
|
-
lines.push('## Quality');
|
|
311
|
-
lines.push('');
|
|
312
|
-
lines.push('Convergence: loop until P1=0. Changed files only.');
|
|
313
|
-
lines.push('At 70%+ context: save_memory → /new → /vibe.utils --continue');
|
|
314
|
-
lines.push('');
|
|
315
|
-
// Git
|
|
316
|
-
lines.push('## Git');
|
|
317
|
-
lines.push('');
|
|
318
|
-
lines.push('Include: `.claude/vibe/{plans,specs,features,todos}/`, `CLAUDE.md`');
|
|
319
|
-
lines.push('Exclude: `~/.claude/{rules,commands,agents,skills}/`, `.claude/settings.local.json`');
|
|
320
|
-
lines.push('');
|
|
321
|
-
lines.push('<!-- VIBE:END -->');
|
|
322
349
|
return lines.join('\n');
|
|
323
350
|
}
|
|
324
351
|
/**
|
|
@@ -339,10 +366,13 @@ export function updateRules(coreDir, detectedStacks, isUpdate = false) {
|
|
|
339
366
|
});
|
|
340
367
|
}
|
|
341
368
|
/**
|
|
342
|
-
* 프로젝트 레벨 훅 설치 (.claude/settings.local.json)
|
|
369
|
+
* 프로젝트 레벨 훅 설치 (.claude/settings.local.json 또는 .coco/settings.local.json)
|
|
370
|
+
*
|
|
371
|
+
* @param projectRoot 프로젝트 루트
|
|
372
|
+
* @param harnessDir 하네스 디렉토리 이름 ('.claude' | '.coco', 기본값: '.claude')
|
|
343
373
|
*/
|
|
344
|
-
export function installProjectHooks(projectRoot) {
|
|
345
|
-
const claudeDir = path.join(projectRoot,
|
|
374
|
+
export function installProjectHooks(projectRoot, harnessDir = '.claude') {
|
|
375
|
+
const claudeDir = path.join(projectRoot, harnessDir);
|
|
346
376
|
const settingsLocalPath = path.join(claudeDir, 'settings.local.json');
|
|
347
377
|
const packageRoot = path.resolve(__dirname, '..', '..', '..');
|
|
348
378
|
const hooksTemplate = path.join(packageRoot, 'hooks', 'hooks.json');
|
|
@@ -375,16 +405,20 @@ export function installProjectHooks(projectRoot) {
|
|
|
375
405
|
}
|
|
376
406
|
/**
|
|
377
407
|
* .gitignore 업데이트
|
|
408
|
+
*
|
|
409
|
+
* @param harnessDir '.claude' | '.coco' (기본값: '.claude')
|
|
410
|
+
* 하네스-특정 경로(settings.local.json, checkpoints/)는 해당 디렉토리에 쓰기 위해 사용.
|
|
378
411
|
*/
|
|
379
|
-
export function updateGitignore(projectRoot) {
|
|
412
|
+
export function updateGitignore(projectRoot, harnessDir = '.claude') {
|
|
380
413
|
const gitignorePath = path.join(projectRoot, '.gitignore');
|
|
381
414
|
if (!fs.existsSync(gitignorePath))
|
|
382
415
|
return;
|
|
383
416
|
let gitignore = fs.readFileSync(gitignorePath, 'utf-8');
|
|
384
417
|
let modified = false;
|
|
385
418
|
// settings.local.json 추가
|
|
386
|
-
|
|
387
|
-
|
|
419
|
+
const settingsPath = `${harnessDir}/settings.local.json`;
|
|
420
|
+
if (!gitignore.includes(settingsPath)) {
|
|
421
|
+
gitignore = gitignore.trimEnd() + `\n\n# core project hooks (personal)\n${settingsPath}\n`;
|
|
388
422
|
modified = true;
|
|
389
423
|
}
|
|
390
424
|
// .gemini/settings.json 추가 (Gemini CLI hooks - 개인 설정)
|
|
@@ -392,9 +426,15 @@ export function updateGitignore(projectRoot) {
|
|
|
392
426
|
gitignore = gitignore.trimEnd() + '\n\n# Gemini CLI hooks (personal)\n.gemini/settings.json\n';
|
|
393
427
|
modified = true;
|
|
394
428
|
}
|
|
395
|
-
// checkpoints 디렉토리 제외 (Phase Isolation Protocol 임시 파일)
|
|
396
|
-
|
|
397
|
-
|
|
429
|
+
// checkpoints 디렉토리 제외 (Phase Isolation Protocol 임시 파일) — .vibe/ SSOT
|
|
430
|
+
const checkpointsPath = `.vibe/checkpoints/`;
|
|
431
|
+
if (!gitignore.includes(checkpointsPath)) {
|
|
432
|
+
gitignore = gitignore.trimEnd() + `\n\n# Phase checkpoints (ephemeral)\n${checkpointsPath}\n`;
|
|
433
|
+
modified = true;
|
|
434
|
+
}
|
|
435
|
+
// 메모리 DB 제외 — 바이너리 SQLite 파일, 프로젝트마다 다름
|
|
436
|
+
if (!gitignore.includes('.vibe/memories/')) {
|
|
437
|
+
gitignore = gitignore.trimEnd() + '\n\n# Project memory DB (local)\n.vibe/memories/\n';
|
|
398
438
|
modified = true;
|
|
399
439
|
}
|
|
400
440
|
// 레거시 mcp 폴더 제외 제거
|