claude-code-kr 0.3.11 → 0.3.12
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/lib/cckr-command.md +7 -1
- package/lib/hooks.js +11 -10
- package/lib/patcher.js +31 -0
- package/package.json +1 -1
package/lib/cckr-command.md
CHANGED
|
@@ -3,4 +3,10 @@ description: cckr 한글 패치 버전 확인
|
|
|
3
3
|
---
|
|
4
4
|
<!-- managed-by: claude-code-kr -->
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
이 세션에 적용된 cckr 버전과 디스크 상태를 함께 보여줘. 다음 bash 한 번만 실행하고 결과를 그대로 출력:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
echo "=== 이 세션 ==="; cat /tmp/cckr-session-$PPID.json 2>/dev/null || echo "(세션 정보 없음 — 새 세션을 시작하세요)"; echo ""; echo "=== 디스크 (현재 cli.js) ==="; cckr status
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
추가 해석/요약 없이 출력만 그대로.
|
package/lib/hooks.js
CHANGED
|
@@ -3,7 +3,7 @@ const path = require('path');
|
|
|
3
3
|
const os = require('os');
|
|
4
4
|
|
|
5
5
|
const SETTINGS_PATH = path.join(os.homedir(), '.claude', 'settings.json');
|
|
6
|
-
const HOOK_COMMAND = 'cckr apply 2>/dev/null || true';
|
|
6
|
+
const HOOK_COMMAND = 'CCKR_SESSION_PPID=$PPID cckr apply 2>/dev/null || true';
|
|
7
7
|
const HOOK_ID = 'cckr-auto-patch';
|
|
8
8
|
|
|
9
9
|
function readSettings() {
|
|
@@ -20,22 +20,23 @@ function install() {
|
|
|
20
20
|
if (!settings.hooks) settings.hooks = {};
|
|
21
21
|
if (!settings.hooks.SessionStart) settings.hooks.SessionStart = [];
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
settings.hooks.SessionStart = settings.hooks.SessionStart.filter(entry =>
|
|
25
|
-
!entry.hooks?.some(h => h.command?.includes('cc-kr-auto-patch') || (h.command?.includes('cc-kr') && !h.command?.includes('claude-code-kr')))
|
|
26
|
-
);
|
|
23
|
+
const expectedCommand = `bash -c '# ${HOOK_ID}\n${HOOK_COMMAND}'`;
|
|
27
24
|
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
entry.hooks?.some(h =>
|
|
25
|
+
// 옛날 cc-kr hook 제거 + 기존 cckr hook도 제거 (커맨드 갱신을 위해)
|
|
26
|
+
settings.hooks.SessionStart = settings.hooks.SessionStart.filter(entry =>
|
|
27
|
+
!entry.hooks?.some(h =>
|
|
28
|
+
h.command?.includes('cc-kr-auto-patch') ||
|
|
29
|
+
(h.command?.includes('cc-kr') && !h.command?.includes('claude-code-kr')) ||
|
|
30
|
+
h.command?.includes(HOOK_ID)
|
|
31
|
+
)
|
|
31
32
|
);
|
|
32
|
-
if (exists) return { ok: true, skipped: true };
|
|
33
33
|
|
|
34
|
+
// 새로 등록 (항상 최신 커맨드로)
|
|
34
35
|
settings.hooks.SessionStart.push({
|
|
35
36
|
matcher: '.*',
|
|
36
37
|
hooks: [{
|
|
37
38
|
type: 'command',
|
|
38
|
-
command:
|
|
39
|
+
command: expectedCommand
|
|
39
40
|
}]
|
|
40
41
|
});
|
|
41
42
|
|
package/lib/patcher.js
CHANGED
|
@@ -130,6 +130,37 @@ function apply(cliJs, { force = false } = {}) {
|
|
|
130
130
|
} catch {}
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
// 세션 시작 시점 캡처 — SessionStart hook이 CCKR_SESSION_PPID env로 호출
|
|
134
|
+
// 패치 직전의 marker = 이 세션이 메모리에 로드한 cli.js 버전
|
|
135
|
+
const sessionPpid = process.env.CCKR_SESSION_PPID;
|
|
136
|
+
if (sessionPpid && /^\d+$/.test(sessionPpid)) {
|
|
137
|
+
let preMarker = null;
|
|
138
|
+
try {
|
|
139
|
+
preMarker = JSON.parse(fs.readFileSync(markerPath, 'utf8'));
|
|
140
|
+
} catch {}
|
|
141
|
+
const sessionInfo = {
|
|
142
|
+
capturedAt: new Date().toISOString(),
|
|
143
|
+
claudePid: sessionPpid,
|
|
144
|
+
ccVersion: ccVersion,
|
|
145
|
+
// 이 세션이 로드한 cli.js의 cckr 버전 (패치 직전)
|
|
146
|
+
// marker 없으면 cli.js가 unpatched 상태였음
|
|
147
|
+
sessionCckrVersion: preMarker?.cckrVersion || 'unpatched',
|
|
148
|
+
installedCckrVersion: pkg.version,
|
|
149
|
+
};
|
|
150
|
+
try {
|
|
151
|
+
fs.writeFileSync(`/tmp/cckr-session-${sessionPpid}.json`, JSON.stringify(sessionInfo, null, 2));
|
|
152
|
+
// 7일 이상 된 세션 파일 정리
|
|
153
|
+
const tmpFiles = fs.readdirSync('/tmp').filter(f => /^cckr-session-\d+\.json$/.test(f));
|
|
154
|
+
const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
|
|
155
|
+
for (const f of tmpFiles) {
|
|
156
|
+
try {
|
|
157
|
+
const stat = fs.statSync(`/tmp/${f}`);
|
|
158
|
+
if (stat.mtimeMs < sevenDaysAgo) fs.unlinkSync(`/tmp/${f}`);
|
|
159
|
+
} catch {}
|
|
160
|
+
}
|
|
161
|
+
} catch {}
|
|
162
|
+
}
|
|
163
|
+
|
|
133
164
|
const bakPath = cliJs + '.bak';
|
|
134
165
|
|
|
135
166
|
// 백업 생성 또는 백업에서 복원 (중복 패치 방지)
|