@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.
Files changed (93) hide show
  1. package/CLAUDE.md +7 -4
  2. package/commands/vibe.figma.md +16 -0
  3. package/commands/vibe.run.md +6 -0
  4. package/commands/vibe.verify.md +22 -0
  5. package/dist/cli/auth.d.ts +7 -1
  6. package/dist/cli/auth.d.ts.map +1 -1
  7. package/dist/cli/auth.js +51 -11
  8. package/dist/cli/auth.js.map +1 -1
  9. package/dist/cli/collaborator.d.ts +5 -1
  10. package/dist/cli/collaborator.d.ts.map +1 -1
  11. package/dist/cli/collaborator.js +10 -5
  12. package/dist/cli/collaborator.js.map +1 -1
  13. package/dist/cli/commands/info.d.ts.map +1 -1
  14. package/dist/cli/commands/info.js +5 -21
  15. package/dist/cli/commands/info.js.map +1 -1
  16. package/dist/cli/commands/init.d.ts +13 -5
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +73 -32
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/remove.d.ts.map +1 -1
  21. package/dist/cli/commands/remove.js +21 -8
  22. package/dist/cli/commands/remove.js.map +1 -1
  23. package/dist/cli/commands/update.d.ts.map +1 -1
  24. package/dist/cli/commands/update.js +14 -8
  25. package/dist/cli/commands/update.js.map +1 -1
  26. package/dist/cli/index.js +4 -2
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/cli/postinstall/global-config.d.ts.map +1 -1
  29. package/dist/cli/postinstall/global-config.js +8 -4
  30. package/dist/cli/postinstall/global-config.js.map +1 -1
  31. package/dist/cli/postinstall/main.d.ts.map +1 -1
  32. package/dist/cli/postinstall/main.js +11 -0
  33. package/dist/cli/postinstall/main.js.map +1 -1
  34. package/dist/cli/setup/LegacyMigration.d.ts +14 -0
  35. package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
  36. package/dist/cli/setup/LegacyMigration.js +61 -0
  37. package/dist/cli/setup/LegacyMigration.js.map +1 -1
  38. package/dist/cli/setup/ProjectSetup.d.ts +18 -7
  39. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  40. package/dist/cli/setup/ProjectSetup.js +144 -104
  41. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  42. package/dist/cli/setup/Provisioner.js +2 -2
  43. package/dist/cli/setup/Provisioner.js.map +1 -1
  44. package/dist/cli/setup.d.ts +2 -2
  45. package/dist/cli/setup.d.ts.map +1 -1
  46. package/dist/cli/setup.js +2 -2
  47. package/dist/cli/setup.js.map +1 -1
  48. package/dist/cli/utils/cli-detector.d.ts +9 -6
  49. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  50. package/dist/cli/utils/cli-detector.js +127 -8
  51. package/dist/cli/utils/cli-detector.js.map +1 -1
  52. package/dist/infra/lib/browser/compare.d.ts +27 -0
  53. package/dist/infra/lib/browser/compare.d.ts.map +1 -1
  54. package/dist/infra/lib/browser/compare.js +55 -0
  55. package/dist/infra/lib/browser/compare.js.map +1 -1
  56. package/dist/infra/lib/browser/index.d.ts +2 -1
  57. package/dist/infra/lib/browser/index.d.ts.map +1 -1
  58. package/dist/infra/lib/browser/index.js +1 -1
  59. package/dist/infra/lib/browser/index.js.map +1 -1
  60. package/dist/infra/lib/figma/audit.d.ts +37 -0
  61. package/dist/infra/lib/figma/audit.d.ts.map +1 -0
  62. package/dist/infra/lib/figma/audit.js +130 -0
  63. package/dist/infra/lib/figma/audit.js.map +1 -0
  64. package/dist/infra/lib/figma/extract.d.ts +21 -1
  65. package/dist/infra/lib/figma/extract.d.ts.map +1 -1
  66. package/dist/infra/lib/figma/extract.js +84 -12
  67. package/dist/infra/lib/figma/extract.js.map +1 -1
  68. package/dist/infra/lib/figma/index.d.ts +4 -2
  69. package/dist/infra/lib/figma/index.d.ts.map +1 -1
  70. package/dist/infra/lib/figma/index.js +2 -1
  71. package/dist/infra/lib/figma/index.js.map +1 -1
  72. package/dist/infra/lib/figma/types.d.ts +31 -0
  73. package/dist/infra/lib/figma/types.d.ts.map +1 -1
  74. package/dist/infra/lib/memory/MemoryStorage.d.ts +5 -0
  75. package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
  76. package/dist/infra/lib/memory/MemoryStorage.js +21 -2
  77. package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
  78. package/hooks/hooks.json +8 -0
  79. package/hooks/scripts/command-log.js +3 -3
  80. package/hooks/scripts/context-save.js +3 -3
  81. package/hooks/scripts/evolution-engine.js +2 -2
  82. package/hooks/scripts/figma-extract.js +134 -1
  83. package/hooks/scripts/lib/dispatcher.js +9 -5
  84. package/hooks/scripts/lib/scope-from-spec.js +20 -5
  85. package/hooks/scripts/prompt-dispatcher.js +5 -3
  86. package/hooks/scripts/scope-guard.js +3 -3
  87. package/hooks/scripts/session-start.js +3 -3
  88. package/hooks/scripts/step-counter.js +45 -0
  89. package/hooks/scripts/stop-notify.js +2 -2
  90. package/hooks/scripts/utils.js +62 -4
  91. package/package.json +1 -1
  92. package/skills/vibe-figma-extract/SKILL.md +22 -0
  93. 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;AAEnF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,IAAI;IAClB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,wBAAwB;QACxB,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;QAEnD,YAAY;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;QAED,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YACD,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;QAED,0DAA0D;QAC1D,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE1D,SAAS,gBAAgB,CAAC,SAAiB,EAAE,KAAa;YACxD,SAAS,CAAC,SAAS,CAAC,CAAC;YAErB,WAAW;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;oBAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACxD,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC1C,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,SAAS;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAE3C,SAAS;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAC/C,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzD,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,kBAAkB;QAClB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3D,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE5C,kBAAkB;QAClB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,mEAAmE;QACnE,SAAS,iBAAiB,CAAC,SAAiB;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,SAAS,CAAC,aAAa,CAAC,CAAC;YAEzB,0BAA0B;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAClD,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAC9C,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzB,aAAa;YACb,MAAM,MAAM,GAAG;gBACb,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE;gBACxG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;gBAC9F,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;gBACtG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;aAC/F,CAAC;YACF,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBACtD,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC;YACH,kBAAkB,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QAED,iDAAiD;QACjD,4DAA4D;QAC5D,mCAAmC;QACnC,0BAA0B,EAAE,CAAC;QAE7B,sCAAsC;QACtC,kEAAkE;QAElE,mDAAmD;QACnD,uBAAuB,EAAE,CAAC;QAE1B,sDAAsD;QACtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACnD,mBAAmB,CAAC,sBAAsB,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACpE,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAEtC,0CAA0C;QAC1C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,iCAAiC,aAAa,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,4BAA4B,sBAAsB,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,qDAAqD;AACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACnC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACrC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CACxC,CAAC;AAEF,IAAI,WAAW,EAAE,CAAC;IAChB,IAAI,EAAE,CAAC;AACT,CAAC"}
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;AACnF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE1F,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,IAAI;IAClB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,wBAAwB;QACxB,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;QAEnD,YAAY;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;QAED,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YACD,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;QAED,0DAA0D;QAC1D,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE1D,SAAS,gBAAgB,CAAC,SAAiB,EAAE,KAAa;YACxD,SAAS,CAAC,SAAS,CAAC,CAAC;YAErB,WAAW;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;oBAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACxD,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC1C,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,SAAS;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAE3C,SAAS;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAC/C,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzD,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,kBAAkB;QAClB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3D,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE5C,kBAAkB;QAClB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,mEAAmE;QACnE,SAAS,iBAAiB,CAAC,SAAiB;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,SAAS,CAAC,aAAa,CAAC,CAAC;YAEzB,0BAA0B;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAClD,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAC9C,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzB,aAAa;YACb,MAAM,MAAM,GAAG;gBACb,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE;gBACxG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;gBAC9F,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;gBACtG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;aAC/F,CAAC;YACF,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBACtD,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC;YACH,sBAAsB,EAAE,CAAC;YACzB,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,sBAAsB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAC9E,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC;YACH,kBAAkB,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QAED,iDAAiD;QACjD,4DAA4D;QAC5D,mCAAmC;QACnC,0BAA0B,EAAE,CAAC;QAE7B,sCAAsC;QACtC,kEAAkE;QAElE,mDAAmD;QACnD,uBAAuB,EAAE,CAAC;QAE1B,sDAAsD;QACtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACnD,mBAAmB,CAAC,sBAAsB,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACpE,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAEtC,0CAA0C;QAC1C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,iCAAiC,aAAa,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,4BAA4B,sBAAsB,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,8BAA8B,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,qDAAqD;AACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACnC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACrC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CACxC,CAAC;AAEF,IAAI,WAAW,EAAE,CAAC;IAChB,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -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 업데이트 (core 섹션 추가/교체)
10
+ * 전역 ~/.claude/CLAUDE.md 생성/갱신 — vibe 규약(룰·키워드·워크플로) 전역 주입
11
11
  */
12
+ export declare function generateGlobalClaudeMd(): void;
12
13
  /**
13
- * 프로젝트 분석 → CLAUDE.md 생성/갱신
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;AAWlF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CA8CN;AAED;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CAiCN;AAKD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,EAAE,EAC3B,YAAY,EAAE,YAAY,GACzB,IAAI,CA6BN;AAkOD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,QAAQ,UAAQ,GAAG,IAAI,CAchG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAkC7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAiDzD;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"}
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
- * 프로젝트 분석 CLAUDE.md 생성/갱신
49
- * 정적 템플릿이 아닌, 실제 프로젝트 구조를 분석해서 맞춤 생성
51
+ * VIBE 섹션을 파일에 쓰기 — START/END 마커 기반 idempotent 갱신
50
52
  */
51
- export function generateProjectClaudeMd(projectRoot, detectedStacks, stackDetails) {
52
- const claudeMdPath = path.join(projectRoot, 'CLAUDE.md');
53
- // 프로젝트 구조 분석
54
- const dirs = analyzeProjectStructure(projectRoot);
55
- const stackNames = detectedStacks.map(s => STACK_NAMES[s.type]?.name || s.type);
56
- const language = detectOsLanguage();
57
- // VIBE 섹션 생성
58
- const vibeSection = buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language);
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 + '<!-- VIBE:END -->'.length).trimStart();
67
- const newContent = (before ? before + '\n\n' : '') + vibeSection + (after ? '\n\n' + after : '');
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 (startIdx !== -1) {
71
- // # VIBE는 있지만 END 마커 없음 — 이후 전체 교체
72
- const before = existing.substring(0, startIdx).trimEnd();
73
- fs.writeFileSync(claudeMdPath, (before ? before + '\n\n' : '') + vibeSection);
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
- // VIBE 섹션 없음 추가
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
- fs.writeFileSync(claudeMdPath, vibeSection);
78
+ else if (createIfMissing) {
79
+ ensureDir(path.dirname(filePath));
80
+ fs.writeFileSync(filePath, wrapped + '\n');
82
81
  }
83
82
  }
84
- const VIBE_START = '<!-- VIBE:START -->';
85
- const VIBE_END_TAG = '<!-- VIBE:END -->';
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 language = detectOsLanguage();
94
- let vibeSection = buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language);
95
- // coco 적응: Claude Code → coco, .claude/ → .coco/
96
- vibeSection = vibeSection.replace(/Claude Code/g, 'coco');
97
- vibeSection = vibeSection.replace(/~\/\.claude\//g, '~/.coco/');
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
- else {
114
- fs.writeFileSync(agentsMdPath, wrapped + '\n');
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
- /** 분석 결과 기반 VIBE 섹션 조립 */
184
- function buildVibeSection(projectRoot, dirs, stackNames, stackDetails, language) {
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('- Edit existing files, never create new ones');
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
- // Tech Stack
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/` | AI configuration, rules, skills |');
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: `.claude/vibe/config.json` → `references.rules[]`');
288
- lines.push('- Languages: `.claude/vibe/languages/`');
289
- lines.push('- Constitution: `.claude/vibe/constitution.md`');
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, '.claude');
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
- if (!gitignore.includes('.claude/settings.local.json')) {
387
- gitignore = gitignore.trimEnd() + '\n\n# core project hooks (personal)\n.claude/settings.local.json\n';
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
- if (!gitignore.includes('.claude/vibe/checkpoints/')) {
397
- gitignore = gitignore.trimEnd() + '\n\n# Phase checkpoints (ephemeral)\n.claude/vibe/checkpoints/\n';
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 폴더 제외 제거