@kaydash9999/banker-plugins 0.20.1 → 0.20.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +195 -1
- package/PRIVACY.md +13 -3
- package/README.md +27 -4
- package/bin/banker.js +84 -40
- package/bin/lib/telemetry-config.mjs +31 -16
- package/codex/manifest.json +1 -1
- package/codex/transform-matrix.md +1 -1
- package/commands/setup.md +23 -0
- package/hooks/progress.mjs +143 -38
- package/hooks/register.mjs +13 -3
- package/hooks/update-checkin.mjs +15 -7
- package/hooks/update-fetch.mjs +15 -9
- package/hooks/update-notify.mjs +2 -9
- package/package.json +1 -1
- package/skills/3d-intro-build/SKILL.md +11 -5
- package/skills/3d-intro-build/references/azure-adapter.mjs +374 -81
- package/skills/3d-intro-build/references/curate.mjs +48 -14
- package/skills/3d-intro-build/references/preview-lib.mjs +51 -15
- package/skills/3d-intro-build/references/prompts.md +4 -4
- package/skills/3d-intro-build/references/serve.mjs +6 -1
- package/skills/3d-intro-build/references/verify-intro.mjs +16 -9
- package/skills/3d-intro-build/references/video-pool.mjs +250 -135
- package/skills/3d-intro-setup/SKILL.md +41 -10
- package/skills/3d-intro-setup/references/azure-adapter.mjs +374 -81
- package/skills/3d-intro-setup/references/video-pool.mjs +250 -135
- package/skills/anti-drm/SKILL.md +6 -3
- package/skills/anti-drm/scripts/anti-drm.mjs +49 -12
- package/skills/anti-drm/scripts/instruction-toggle.mjs +105 -20
- package/skills/audit-mock/SKILL.md +1 -1
- package/skills/audit-security/SKILL.md +64 -2
- package/skills/deep-research/SKILL.md +5 -0
- package/skills/docs-setup/SKILL.md +37 -7
- package/skills/lineage/SKILL.md +12 -12
- package/skills/lineage/lineage.py +399 -300
- package/skills/motion-graphic-make/SKILL.md +1 -1
- package/skills/motion-graphic-make/references/curate.mjs +48 -14
- package/skills/motion-graphic-make/references/preview-lib.mjs +51 -15
- package/skills/motion-graphic-make/references/serve.mjs +6 -1
- package/skills/motion-graphic-setup/SKILL.md +58 -13
- package/skills/obsidizer/SKILL.md +1 -1
- package/skills/obsidizer/obsidize.mjs +8 -1
- package/skills/omc-patch/SKILL.md +80 -23
- package/skills/omc-patch/scripts/omc-patch.mjs +460 -116
- package/skills/payload-mon/SKILL.md +5 -2
- package/skills/payload-mon/scripts/payload-mon.mjs +137 -30
- package/skills/payload-mon/scripts/payload-size.mjs +4 -1
- package/skills/pdf-vision-extract/SKILL.md +11 -6
- package/skills/ralph-qa/SKILL.md +125 -151
- package/skills/ralph-qa/references/gemini-seat.mjs +67 -19
- package/skills/ralph-qa/references/payload-scan.mjs +22 -7
- package/skills/ralph-qa/references/seat-payload.mjs +646 -0
- package/skills/ralph-qa/references/seat-run.mjs +956 -0
- package/skills/ralph-qa/references/seat-spawn.mjs +205 -0
- package/skills/ralph-qa/references/verifier-probe.mjs +57 -16
- package/skills/setup-harness-factory/SKILL.md +17 -1
- package/skills/setup-insane-search/SKILL.md +16 -0
- package/skills/setup-java/SKILL.md +20 -1
- package/skills/setup-lsp/SKILL.md +56 -13
- package/skills/setup-mcp/SKILL.md +73 -4
- package/skills/setup-node/SKILL.md +31 -6
- package/skills/setup-omc/SKILL.md +24 -0
- package/skills/setup-omc-hud/SKILL.md +13 -5
- package/skills/setup-omc-hud/assets/apply-hud.mjs +381 -27
- package/skills/setup-omc-hud/assets/omc-hud-custom.mjs +81 -14
- package/skills/setup-omc-hud/scripts/claude-update-last.mjs +5 -3
- package/skills/setup-playwright/SKILL.md +45 -2
- package/skills/setup-pwsh/SKILL.md +19 -0
- package/skills/setup-python/SKILL.md +45 -7
- package/skills/setup-sandbox/SKILL.md +30 -5
- package/skills/setup-stitch/SKILL.md +22 -0
- package/skills/setup-tmux/SKILL.md +24 -4
- package/skills/tone-compact/SKILL.md +2 -1
- package/skills/tone-compact/scripts/instruction-toggle.mjs +105 -20
- package/skills/ultra-chain/SKILL.md +4 -3
- package/skills/ultra-chain/references/preview-lib.mjs +51 -15
- package/skills/ultra-chain/references/serve.mjs +6 -1
- package/skills/ultra-interview/SKILL.md +1 -0
- package/skills/update-banker/SKILL.md +19 -3
- package/skills/vertical-pptx/SKILL.md +6 -3
- package/skills/vertical-pptx-setup/SKILL.md +76 -20
|
@@ -26,6 +26,40 @@ command -v codex >/dev/null && codex mcp list 2>/dev/null
|
|
|
26
26
|
[ -f ~/.codex/config.toml ] && grep -c 'startup_timeout_sec = 300' ~/.codex/config.toml
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
### 네트워크 확인 (내려받기 전)
|
|
30
|
+
|
|
31
|
+
이 스킬이 내려받는 원천에 닿는지 먼저 본다(curl 은 10초, npm 은 15초 안). 닿지 않으면 그 원천에서 받는 단계는 하지 않고, 이미 설치된 것의 확인만 한 뒤 "오프라인이라 설치하지 않음(필요한 것: <못 깐 것>)" 으로 보고한다.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
[ "${CODEX_SANDBOX_NETWORK_DISABLED:-}" = 1 ] && echo "Codex sandbox 가 네트워크를 막음(아래 실패는 오프라인이 아님)"
|
|
35
|
+
in15() { "$@" & p=$!; ( sleep 15 && kill "$p" ) > /dev/null 2>&1 & k=$!; wait "$p" 2>/dev/null; r=$?; kill "$k" 2>/dev/null; wait "$k" 2>/dev/null; [ "$r" = 143 ] && echo "15초 안에 끝나지 않아 멈춤(패킷을 버리는 망일 수 있음)"; return "$r"; }
|
|
36
|
+
in15 sh -c 'cd ~ && exec npm ping --fetch-retries=0 --fetch-timeout=10000 --no-update-notifier' # npx 서버
|
|
37
|
+
# pip 이 읽는 설정 전부(PIP_CONFIG_FILE 포함)를 홈 폴더에서 읽는다. install 절이 global 절보다 앞선다
|
|
38
|
+
L=$( (cd ~ && { pip config list || pip3 config list || python3.13 -m pip config list || python3.12 -m pip config list || python3.11 -m pip config list || python3 -m pip config list; }) 2>/dev/null) || echo "pip 설정을 읽지 못함(pip 이 없거나 10 미만). 사내 미러를 쓰면 확인 주소를 그 미러로 바꿔 본다"
|
|
39
|
+
I="${PIP_INDEX_URL:-$(printf '%s\n' "$L" | sed -n "s/^install\.index-url='\(.*\)'$/\1/p")}"
|
|
40
|
+
I="${I:-$(printf '%s\n' "$L" | sed -n "s/^global\.index-url='\(.*\)'$/\1/p")}"
|
|
41
|
+
I=$(printf %s "${I:-https://pypi.org/simple}" | sed -E 's#^([A-Za-z][A-Za-z0-9+.-]*://)[^/]*@#\1#; s#/$##') # 주소의 사용자 정보는 뗌
|
|
42
|
+
printf 'url = "%s"\n' "$I/pip/" | curl --ssl-no-revoke -K - -sSI -o /dev/null --connect-timeout 5 --max-time 10 # uvx 서버
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- `npm ping` 은 홈 폴더에서 부른다. 지금 폴더에 있는 프로젝트의 `.npmrc` 가 정한 레지스트리와 토큰을 따르지 않게 하려는 것이다.
|
|
46
|
+
- `npm ping` 은 15초 감시(`in15`) 안에서 부른다. 패킷을 버리는 망에서 npm 은 연결에 시간 제한을 두지 않아(`--fetch-timeout` 은 받는 중의 쉼만 잰다) OS 의 연결 재시도가 끝날 때까지 기다린다(Rocky 8.10 실측 130초). 15초 안에 끝나지 않으면 `15초 안에 끝나지 않아 멈춤(패킷을 버리는 망일 수 있음)` 과 종료 143 이다. `--no-update-notifier` 는 npm 이 제 판을 묻는 요청을 하나 더 내지 않게 한다.
|
|
47
|
+
- `npm ping` 이 실패하면 ping 에 답하지 않는 사내 미러일 수 있다. `(cd ~ && T=$(mktemp -d) && { npm view @modelcontextprotocol/server-sequential-thinking version --fetch-retries=0 --fetch-timeout=10000 --cache "$T" --no-update-notifier; r=$?; rm -rf "$T"; exit $r; })` 도 실패해야 오프라인으로 본다. 이 스킬이 설치할 패키지(`@modelcontextprotocol/server-sequential-thinking`)를 빈 캐시로 물으므로 옛 값이 나올 수 없다. ping 이 15초 감시에 걸려 멈췄으면(종료 143) 이 확인은 하지 않는다. 같은 레지스트리라 같은 시간을 또 기다린다.
|
|
48
|
+
- `npm` 이 없으면(명령 없음) 오프라인이 아니라 확인하지 못한 것이다. Node 를 먼저 갖춘다(`setup-node`).
|
|
49
|
+
- `npm ping` 은 npm 의 프록시 설정(`proxy`, `https-proxy`)을 따른다. 사내 미러만 열린 망이면 그 미러가 쓰이는지 npm 설정을 본다.
|
|
50
|
+
- `curl -sSI` 는 머리만 받는다(본문을 받지 않음). 닿지 못하면 종료 코드가 0 이 아니다(HTTP 상태와 관계없음). `curl` 은 `HTTPS_PROXY` 를 따른다. 확인 줄은 `--ssl-no-revoke` 를 준다. Windows 의 Git Bash curl 도 Schannel 이라, 폐지 목록 서버에 닿지 못하는 망에서 폐지 확인이 실패하면 종료 60 이다(Windows 박스 실측). 다른 curl 은 이 깃발을 받고 무시한다(macOS curl 8.7.1, Rocky 8.10 curl 7.61.1 실측).
|
|
51
|
+
- PyPI 는 pip 이 쓰는 색인(`PIP_INDEX_URL`, `pip config list` 의 `install.index-url` 이나 `global.index-url`, 없으면 pypi.org)의 작은 쪽(`<색인>/pip/`)을 본다.
|
|
52
|
+
- `pip config get` 은 `PIP_CONFIG_FILE` 로 준 파일을 읽지 않아(pip 25.0 실측) `pip config list` 를 읽는다.
|
|
53
|
+
- Rocky 8 의 기본 pip(9.0.3, `pip3`)은 `config` 명령이 없고 `pip` 이름은 없다(Rocky 8.10 실측). 그래서 판 붙은 python(3.13, 3.12, 3.11)의 pip 도 차례로 본다.
|
|
54
|
+
- 홈 폴더에서 읽는다. `python3 -m pip` 는 지금 폴더를 import 경로 맨 앞에 두어, 지금 폴더에 있는 남의 저장소의 `pip/` 가 실행될 수 있다.
|
|
55
|
+
- bash 블록은 주소를 명령 인자가 아니라 표준 입력의 curl 설정(`-K -`)으로 넘긴다. 명령 인자는 같은 PC 의 다른 사용자가 `ps` 로 볼 수 있어, 경로나 질의에 든 토큰도 거기 싣지 않는다. 사용자 정보(`사용자:토큰@`)는 떼고 묻는다. 닿는지만 보므로 인증은 필요 없다(401 도 닿은 것이다). Windows 에서도 뗀 주소를 쓴다.
|
|
56
|
+
- Windows PowerShell 에서는 같은 주소를 `curl.exe --ssl-no-revoke -sSI -o NUL --connect-timeout 5 --max-time 10 <주소>` 로 보고 `$LASTEXITCODE` 가 0 인지 본다(PowerShell 5.1 의 `curl` 은 `Invoke-WebRequest` 별칭이다). `curl.exe` 는 Windows 시스템 프록시를 따르지 않고 `HTTPS_PROXY` 만 따른다. `--ssl-no-revoke` 는 폐지 목록 서버에 닿지 못하는 망에서 Schannel 의 폐지 확인 실패를 오프라인으로 읽지 않게 한다. 닿는지만 보고 받은 내용은 쓰지 않으므로 이 확인에만 준다. `curl.exe` 가 없으면 `$LASTEXITCODE` 에 앞 명령의 값이 남으므로 `Get-Command curl.exe -ErrorAction SilentlyContinue` 로 먼저 보고, 없으면 확인하지 못한 것으로 적는다. `npm ping` 은 `Push-Location ~; npm ping --fetch-retries=0 --fetch-timeout=10000 --no-update-notifier; Pop-Location` 처럼 홈에서 부르고 돌아온다(돌아오지 않으면 뒤 단계가 프로젝트가 아니라 홈에서 돈다). PowerShell 에는 15초 감시를 두지 않는다(Windows 의 연결 시간 제한은 약 21초로 알려져 있다. 미실측).
|
|
57
|
+
- 사내 미러만 열린 망이면 확인 주소를 그 미러로 바꿔 본다.
|
|
58
|
+
- Codex sandbox 가 네트워크를 막는 모드(기본 `workspace-write`, `read-only`)에서는 `CODEX_SANDBOX_NETWORK_DISABLED=1` 이 서고 확인이 모두 실패한다(curl 종료 7, npm `EPERM`). 블록의 첫 줄이 그렇다고 알린다. 그때는 '오프라인' 이 아니라 'sandbox 가 네트워크를 막음' 으로 보고하고, 승인을 받아 sandbox 밖에서 확인부터 다시 한다. Claude Code sandbox 안(`SANDBOX_RUNTIME=1`)에서는 허용 목록 밖 주소를 sandbox 프록시가 막는다. Windows PowerShell 에서는 `$env:CODEX_SANDBOX_NETWORK_DISABLED -eq '1'` 로 본다.
|
|
59
|
+
- 확인이 실패하면 보고에 그 명령, 종료 코드, stderr 첫 줄을 붙인다(예: `npm error code ETIMEDOUT`, `curl: (28) ...`). 원인을 '오프라인' 하나로 짐작하지 않는다.
|
|
60
|
+
- curl 의 종료 60(인증서 검증 실패)도 오프라인이 아니다. 망은 열려 있고, TLS 를 가로채는 사내 프록시의 인증서를 OS 가 믿지 않는 것이다. '인증서 문제로 설치하지 않음' 으로 보고한다.
|
|
61
|
+
- curl 은 닿는데 npm 만 인증서 오류(`UNABLE_TO_VERIFY_LEAF_SIGNATURE`, `SELF_SIGNED_CERT_IN_CHAIN`, `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`)로 실패하면 망은 열려 있고 npm 이 사내 인증서를 믿지 않는 것이다(npm 은 OS 인증서 저장소를 쓰지 않는다). '인증서 문제로 설치하지 않음' 으로 보고하고 `NODE_EXTRA_CA_CERTS=<사내 CA 파일>` 을 안내한다. Node 24 는 `NODE_OPTIONS=--use-system-ca` 도 된다.
|
|
62
|
+
|
|
29
63
|
## 1. Preflight
|
|
30
64
|
- **npx 없음** → Node 미설치 → `setup-node` 스킬로 먼저 설치.
|
|
31
65
|
- **uvx 없음** → uv 미설치 → `setup-python` 스킬로 먼저 설치(uv 설치는 그 스킬 소관).
|
|
@@ -44,6 +78,40 @@ command -v codex >/dev/null && codex mcp list 2>/dev/null
|
|
|
44
78
|
`<dir>` = `--fs-dir` 인자 또는 기본 `$HOME/projects`. **홈 디렉터리 전체를 넘기지 않는다** - Serena
|
|
45
79
|
`--project` 경고와 같은 이유(파일 노출 범위 과다)로, 실제 프로젝트 경로만 지정한다.
|
|
46
80
|
|
|
81
|
+
### 네트워크가 없는 곳 (오프라인 경로)
|
|
82
|
+
|
|
83
|
+
`npx -y <패키지>` 는 서버를 띄울 때마다 레지스트리에서 판을 정한다. 네트워크가 없으면 이미 받은 패키지가 있어도 세션마다 약 70초 뒤 실패한다(실측. Codex 는 아래 `startup_timeout_sec = 300` 까지 기다릴 수 있다). `uvx <패키지>` 가 오프라인에서 어떻게 끝나는지는 재지 못했다(미실측). 그래서 오프라인 경로는 두 경우 모두 설치한 실행 파일을 직접 등록한다.
|
|
84
|
+
0단계 확인이 실패하면 3절, 4절 대신 이렇게 한다.
|
|
85
|
+
|
|
86
|
+
- 네트워크가 필요한 서버(context7, fetch, tavily)는 등록하지 않고 "네트워크가 필요한 서버라 등록하지 않음" 으로 보고한다. 서비스 자체가 원격이라 깔아 두어도 쓸 수 없다.
|
|
87
|
+
- 온라인에서 등록해 둔 것이 있으면 세션마다 실패한다. 그대로 둘지 지울지 사용자에게 묻는다. 지우기로 하면 `claude mcp remove <이름> -s user`(Codex 는 `codex mcp remove <이름>`)로 지운다.
|
|
88
|
+
- 로컬에서 도는 서버(sequential-thinking, filesystem, git)는 판을 고정해 설치하고, 그 실행 파일을 직접 등록한다. 설치는 네트워크가 되는 곳(또는 사내 npm, PyPI 미러)에서 한 번 한다. 깔린 뒤에는 실행 파일을 바로 부르므로 레지스트리를 묻지 않는다.
|
|
89
|
+
- `<판>` 은 패키지마다 따로 정한다(두 npm 패키지의 판은 서로 다르다). npm 패키지는 네트워크가 되는 곳에서 `(cd ~ && npm view <패키지> version)` 으로 본다.
|
|
90
|
+
- 이미 같은 이름으로 등록돼 있으면(온라인에서 `npx` 로 등록해 둔 것) `claude mcp add` 가 "already exists" 로 실패한다. 3절처럼 먼저 지우고 등록한다.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm i -g @modelcontextprotocol/server-sequential-thinking@<판> @modelcontextprotocol/server-filesystem@<판>
|
|
94
|
+
uv tool install mcp-server-git==<판> # uv 가 없으면 pipx install mcp-server-git==<판>
|
|
95
|
+
|
|
96
|
+
FS_DIR="${FS_DIR:-$HOME/projects}"
|
|
97
|
+
ST=$(command -v mcp-server-sequential-thinking); FB=$(command -v mcp-server-filesystem); GT=$(command -v mcp-server-git)
|
|
98
|
+
[ -n "$ST" ] && [ -n "$FB" ] && [ -n "$GT" ] || echo "설치한 실행 파일을 찾지 못함(PATH 확인). 찾은 것만 등록"
|
|
99
|
+
[ -n "$ST" ] && { claude mcp remove sequential-thinking -s user 2>/dev/null; claude mcp add sequential-thinking -s user -- "$ST"; }
|
|
100
|
+
[ -n "$FB" ] && { claude mcp remove filesystem -s user 2>/dev/null; claude mcp add filesystem -s user -- "$FB" "$FS_DIR"; }
|
|
101
|
+
[ -n "$GT" ] && { claude mcp remove git -s user 2>/dev/null; claude mcp add git -s user -- "$GT"; }
|
|
102
|
+
```
|
|
103
|
+
Codex 는 같은 실행 파일로 등록한다. 다운로드가 없으므로 `startup_timeout_sec` 패치는 필요 없다.
|
|
104
|
+
```bash
|
|
105
|
+
FS_DIR="${FS_DIR:-$HOME/projects}"
|
|
106
|
+
ST=$(command -v mcp-server-sequential-thinking); FB=$(command -v mcp-server-filesystem); GT=$(command -v mcp-server-git)
|
|
107
|
+
[ -n "$ST" ] && { codex mcp remove sequential-thinking 2>/dev/null; codex mcp add sequential-thinking -- "$ST"; }
|
|
108
|
+
[ -n "$FB" ] && { codex mcp remove filesystem 2>/dev/null; codex mcp add filesystem -- "$FB" "$FS_DIR"; }
|
|
109
|
+
[ -n "$GT" ] && { codex mcp remove git 2>/dev/null; codex mcp add git -- "$GT"; }
|
|
110
|
+
```
|
|
111
|
+
- macOS, Linux 는 설치한 실행 파일을 절대 경로로 등록한다. PATH 앞쪽의 같은 이름이 등록에 끼어들지 못한다. 그 Node 판을 nvm 으로 지우면 경로가 끊기므로 다시 등록한다.
|
|
112
|
+
- npm 전역 실행 파일은 `#!/usr/bin/env node` 로 node 를 PATH 에서 찾는다. 서버를 띄우는 런타임의 PATH 에 node 가 없으면(GUI 나 IDE 에서 띄우면 nvm 의 PATH 가 없을 수 있다) 절대 경로로 등록해도 `env: 'node': No such file or directory` 로 뜨지 않는다. 그때는 그 런타임의 PATH 에 node 를 두거나, node 도 절대 경로로 등록한다(예: `codex mcp add sequential-thinking -- "$(command -v node)" "$ST"`).
|
|
113
|
+
- Windows 는 이름으로 등록하고 `cmd /c` 를 앞에 둔다(npm 전역 설치는 `.cmd` 를 만든다). 예: `claude mcp add sequential-thinking -s user -- cmd /c mcp-server-sequential-thinking`. Git Bash 의 `command -v` 는 Windows 런타임이 실행하지 못하는 `/c/Users/...` 꼴의 셸 스크립트 경로를 낸다.
|
|
114
|
+
|
|
47
115
|
## 3. Claude Code 배선
|
|
48
116
|
```bash
|
|
49
117
|
FS_DIR="${FS_DIR:-$HOME/projects}"
|
|
@@ -102,10 +170,10 @@ codex mcp add tavily --env TAVILY_API_KEY=YOUR_TAVILY_API_KEY -- npx -y tavily-m
|
|
|
102
170
|
고른다:
|
|
103
171
|
```bash
|
|
104
172
|
PY="$(command -v python3.12 || command -v python3.11 || command -v python3)"
|
|
105
|
-
"$PY" -c "import tomllib" 2>/dev/null || echo "⚠ tomllib 없음 - Python 3.11+ 설치 후 재시도(setup-python 참고)"
|
|
173
|
+
(cd ~ && "$PY" -c "import tomllib") 2>/dev/null || echo "⚠ tomllib 없음 - Python 3.11+ 설치 후 재시도(setup-python 참고)" # 홈에서: -c, -m, 표준 입력 스크립트는 지금 폴더의 모듈을 먼저 불러온다
|
|
106
174
|
```
|
|
107
175
|
```bash
|
|
108
|
-
"$PY" <<'EOF'
|
|
176
|
+
(cd ~ && "$PY" <<'EOF' # 홈에서: 표준 입력 스크립트는 지금 폴더의 모듈을 먼저 불러온다
|
|
109
177
|
import re
|
|
110
178
|
from pathlib import Path
|
|
111
179
|
import tomllib
|
|
@@ -130,14 +198,15 @@ tomllib.loads(new_text) # 패치 후 재검증
|
|
|
130
198
|
CFG.write_text(new_text, encoding="utf-8")
|
|
131
199
|
print("patched:", [n for n in NAMES if f"[mcp_servers.{n}]" in new_text])
|
|
132
200
|
EOF
|
|
201
|
+
)
|
|
133
202
|
```
|
|
134
203
|
|
|
135
204
|
## 검증 (보고 의무)
|
|
136
205
|
```bash
|
|
137
206
|
claude mcp list # 각 서버가 ✔ Connected 인지 확인
|
|
138
|
-
codex mcp list --json | python3 -m json.tool # 각 서버 등록 확인(json.tool 은 아무 python3 로 충분)
|
|
207
|
+
codex mcp list --json | (cd ~ && python3 -m json.tool) # 각 서버 등록 확인(json.tool 은 아무 python3 로 충분)
|
|
139
208
|
PY="$(command -v python3.12 || command -v python3.11 || command -v python3)" # tomllib=3.11+
|
|
140
|
-
"$PY" -c "import tomllib; tomllib.loads(open('$HOME/.codex/config.toml', encoding='utf-8').read()); print('✓ TOML 유효')"
|
|
209
|
+
(cd ~ && "$PY" -c "import tomllib; tomllib.loads(open('$HOME/.codex/config.toml', encoding='utf-8').read()); print('✓ TOML 유효')")
|
|
141
210
|
grep -c 'startup_timeout_sec = 300' ~/.codex/config.toml # 5(+tavily)건 이상 기대
|
|
142
211
|
```
|
|
143
212
|
4-field 보고: 변경(등록한 서버 목록·config.toml 패치분) / Evidence(위 출력) / 검증(Connected·TOML 유효) /
|
|
@@ -28,6 +28,28 @@ if (Get-Command node -ErrorAction SilentlyContinue) { node -v } else { "node:
|
|
|
28
28
|
if (Get-Command nvm -ErrorAction SilentlyContinue) { nvm version } else { "nvm-windows: 미설치" }
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
### 네트워크 확인 (내려받기 전)
|
|
32
|
+
|
|
33
|
+
이 스킬이 내려받는 원천에 10초 안에 닿는지 먼저 본다. 닿지 않으면 그 원천에서 받는 단계는 하지 않고, 이미 설치된 것의 확인만 한 뒤 "오프라인이라 설치하지 않음(필요한 것: <못 깐 것>)" 으로 보고한다.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
[ "${CODEX_SANDBOX_NETWORK_DISABLED:-}" = 1 ] && echo "Codex sandbox 가 네트워크를 막음(아래 실패는 오프라인이 아님)"
|
|
37
|
+
curl --ssl-no-revoke -sSI -o /dev/null --connect-timeout 5 --max-time 10 https://api.github.com # nvm 최신 판 조회(GitHub API)
|
|
38
|
+
curl --ssl-no-revoke -sSI -o /dev/null --connect-timeout 5 --max-time 10 https://raw.githubusercontent.com # nvm 설치 스크립트(GitHub)
|
|
39
|
+
curl --ssl-no-revoke -sSI -o /dev/null --connect-timeout 5 --max-time 10 https://github.com # nvm 의 install.sh 는 git 이 있으면 github.com 에서 clone 한다
|
|
40
|
+
curl --ssl-no-revoke -sSI -o /dev/null --connect-timeout 5 --max-time 10 https://nodejs.org/dist/ # nvm 이 받는 Node
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- `curl -sSI` 는 머리만 받는다(본문을 받지 않음). 닿지 못하면 종료 코드가 0 이 아니다(HTTP 상태와 관계없음). `curl` 은 `HTTPS_PROXY` 를 따른다. 확인 줄은 `--ssl-no-revoke` 를 준다. Windows 의 Git Bash curl 도 Schannel 이라, 폐지 목록 서버에 닿지 못하는 망에서 폐지 확인이 실패하면 종료 60 이다(Windows 박스 실측). 다른 curl 은 이 깃발을 받고 무시한다(macOS curl 8.7.1, Rocky 8.10 curl 7.61.1 실측).
|
|
44
|
+
- Windows PowerShell 에서는 같은 주소를 `curl.exe --ssl-no-revoke -sSI -o NUL --connect-timeout 5 --max-time 10 <주소>` 로 보고 `$LASTEXITCODE` 가 0 인지 본다(PowerShell 5.1 의 `curl` 은 `Invoke-WebRequest` 별칭이다). `curl.exe` 는 Windows 시스템 프록시를 따르지 않고 `HTTPS_PROXY` 만 따른다. `--ssl-no-revoke` 는 폐지 목록 서버에 닿지 못하는 망에서 Schannel 의 폐지 확인 실패를 오프라인으로 읽지 않게 한다. 닿는지만 보고 받은 내용은 쓰지 않으므로 이 확인에만 준다. `curl.exe` 가 없으면 `$LASTEXITCODE` 에 앞 명령의 값이 남으므로 `Get-Command curl.exe -ErrorAction SilentlyContinue` 로 먼저 보고, 없으면 확인하지 못한 것으로 적는다.
|
|
45
|
+
- 사내 미러만 열린 망이면 확인 주소를 그 미러로 바꿔 본다.
|
|
46
|
+
- OS 패키지 관리자(dnf, apt, brew, winget)의 단계는 자기 설정의 미러를 쓰므로 이 확인과 관계없이 시도하고, 실패하면 그 단계를 실패로 보고한다.
|
|
47
|
+
- 패킷을 버리거나 답하지 않는 망에서 dnf 는 저장소마다 약 2분(SYN 을 버리는 망 실측 121초), apt 는 원천마다 약 4분(답하지 않는 원천 실측 247초) 기다린 뒤 실패로 끝난다. 시간 제한은 관리자 설정을 따르므로 이 스킬이 바꾸지 않는다.
|
|
48
|
+
- `apt-get update` 는 받지 못해도 종료 0 이다. 출력의 `W: Failed to fetch` 가 있으면 그 단계를 실패로 보고한다.
|
|
49
|
+
- Codex sandbox 가 네트워크를 막는 모드(기본 `workspace-write`, `read-only`)에서는 `CODEX_SANDBOX_NETWORK_DISABLED=1` 이 서고 확인이 모두 실패한다(curl 종료 7, npm `EPERM`). 블록의 첫 줄이 그렇다고 알린다. 그때는 '오프라인' 이 아니라 'sandbox 가 네트워크를 막음' 으로 보고하고, 승인을 받아 sandbox 밖에서 확인부터 다시 한다. Claude Code sandbox 안(`SANDBOX_RUNTIME=1`)에서는 허용 목록 밖 주소를 sandbox 프록시가 막는다. Windows PowerShell 에서는 `$env:CODEX_SANDBOX_NETWORK_DISABLED -eq '1'` 로 본다.
|
|
50
|
+
- 확인이 실패하면 보고에 그 명령, 종료 코드, stderr 첫 줄을 붙인다(예: `npm error code ETIMEDOUT`, `curl: (28) ...`). 원인을 '오프라인' 하나로 짐작하지 않는다.
|
|
51
|
+
- curl 의 종료 60(인증서 검증 실패)도 오프라인이 아니다. 망은 열려 있고, TLS 를 가로채는 사내 프록시의 인증서를 OS 가 믿지 않는 것이다. '인증서 문제로 설치하지 않음' 으로 보고한다.
|
|
52
|
+
|
|
31
53
|
## 1. Rocky Linux 8
|
|
32
54
|
```bash
|
|
33
55
|
command -v curl >/dev/null && command -v git >/dev/null || sudo dnf install -y curl git
|
|
@@ -50,17 +72,20 @@ command -v curl >/dev/null && command -v git >/dev/null || sudo apt install -y c
|
|
|
50
72
|
## nvm 공통 설치 (Rocky8·Ubuntu·Debian·macOS)
|
|
51
73
|
```bash
|
|
52
74
|
# 최신 nvm 릴리스 태그 자동확인(하드코딩 회피). 실패 시 수동 확인 안내
|
|
53
|
-
NVM_LATEST=$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest \
|
|
75
|
+
NVM_LATEST=$(curl -fsSL --connect-timeout 10 --max-time 30 https://api.github.com/repos/nvm-sh/nvm/releases/latest \
|
|
54
76
|
| grep -m1 '"tag_name":' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/')
|
|
55
77
|
if [ -z "$NVM_LATEST" ]; then
|
|
56
|
-
echo "
|
|
57
|
-
|
|
78
|
+
echo "nvm 최신 태그를 받지 못했습니다. 설치하지 않습니다(https://github.com/nvm-sh/nvm/releases 에서 태그를 확인해 다시 실행)."
|
|
79
|
+
else
|
|
80
|
+
T=$(mktemp -d)
|
|
81
|
+
curl -fsSL --connect-timeout 10 --max-time 120 -o "$T/install.sh" \
|
|
82
|
+
"https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_LATEST}/install.sh" && bash "$T/install.sh"
|
|
83
|
+
rm -rf "$T"
|
|
58
84
|
fi
|
|
59
|
-
curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_LATEST}/install.sh" | bash
|
|
60
85
|
|
|
61
|
-
# 설치 스크립트가 rc 파일을 자동 갱신하나, 컨테이너 등 미반영 환경 대비 idempotent 마커도 병행
|
|
86
|
+
# 설치 스크립트가 rc 파일을 자동 갱신하나, 컨테이너 등 미반영 환경 대비 idempotent 마커도 병행(nvm 이 깔렸을 때만)
|
|
62
87
|
RC_FILE="$HOME/.bashrc" # macOS는 $HOME/.zshrc
|
|
63
|
-
grep -q '### BANKER_NODE_BEGIN ###' "$RC_FILE" || cat >> "$RC_FILE" <<'EOF'
|
|
88
|
+
[ -s "$HOME/.nvm/nvm.sh" ] && { grep -q '### BANKER_NODE_BEGIN ###' "$RC_FILE" || cat >> "$RC_FILE"; } <<'EOF'
|
|
64
89
|
|
|
65
90
|
### BANKER_NODE_BEGIN ###
|
|
66
91
|
export NVM_DIR="$HOME/.nvm"
|
|
@@ -16,6 +16,30 @@ command -v claude >/dev/null || echo "claude: 미설치"
|
|
|
16
16
|
```
|
|
17
17
|
- `ralph verify` 는 종료 코드가 아니라 **출력 문구로 판정**한다. 4.x CLI 는 모르는 명령에 `--help` 를 붙이면 전체 도움말을 찍고 0 으로 끝난다. `--help` 없이 부르면 Claude 실행으로 넘어가므로 점검에는 반드시 붙인다.
|
|
18
18
|
|
|
19
|
+
### 네트워크 확인 (내려받기 전)
|
|
20
|
+
|
|
21
|
+
이 스킬이 내려받는 원천에 닿는지 먼저 본다(curl 은 10초, npm 은 15초 안). 닿지 않으면 그 원천에서 받는 단계는 하지 않고, 이미 설치된 것의 확인만 한 뒤 "오프라인이라 설치하지 않음(필요한 것: <못 깐 것>)" 으로 보고한다.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
[ "${CODEX_SANDBOX_NETWORK_DISABLED:-}" = 1 ] && echo "Codex sandbox 가 네트워크를 막음(아래 실패는 오프라인이 아님)"
|
|
25
|
+
in15() { "$@" & p=$!; ( sleep 15 && kill "$p" ) > /dev/null 2>&1 & k=$!; wait "$p" 2>/dev/null; r=$?; kill "$k" 2>/dev/null; wait "$k" 2>/dev/null; [ "$r" = 143 ] && echo "15초 안에 끝나지 않아 멈춤(패킷을 버리는 망일 수 있음)"; return "$r"; }
|
|
26
|
+
in15 sh -c 'cd ~ && exec npm ping --fetch-retries=0 --fetch-timeout=10000 --no-update-notifier' # omc update, npm 전역 설치
|
|
27
|
+
curl --ssl-no-revoke -sSI -o /dev/null --connect-timeout 5 --max-time 10 https://github.com # OMC 마켓플레이스
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- `npm ping` 은 홈 폴더에서 부른다. 지금 폴더에 있는 프로젝트의 `.npmrc` 가 정한 레지스트리와 토큰을 따르지 않게 하려는 것이다.
|
|
31
|
+
- `npm ping` 은 15초 감시(`in15`) 안에서 부른다. 패킷을 버리는 망에서 npm 은 연결에 시간 제한을 두지 않아(`--fetch-timeout` 은 받는 중의 쉼만 잰다) OS 의 연결 재시도가 끝날 때까지 기다린다(Rocky 8.10 실측 130초). 15초 안에 끝나지 않으면 `15초 안에 끝나지 않아 멈춤(패킷을 버리는 망일 수 있음)` 과 종료 143 이다. `--no-update-notifier` 는 npm 이 제 판을 묻는 요청을 하나 더 내지 않게 한다.
|
|
32
|
+
- `npm ping` 이 실패하면 ping 에 답하지 않는 사내 미러일 수 있다. `(cd ~ && T=$(mktemp -d) && { npm view oh-my-claude-sisyphus version --fetch-retries=0 --fetch-timeout=10000 --cache "$T" --no-update-notifier; r=$?; rm -rf "$T"; exit $r; })` 도 실패해야 오프라인으로 본다. 이 스킬이 설치할 패키지(`oh-my-claude-sisyphus`)를 빈 캐시로 물으므로 옛 값이 나올 수 없다. ping 이 15초 감시에 걸려 멈췄으면(종료 143) 이 확인은 하지 않는다. 같은 레지스트리라 같은 시간을 또 기다린다.
|
|
33
|
+
- `npm` 이 없으면(명령 없음) 오프라인이 아니라 확인하지 못한 것이다. Node 를 먼저 갖춘다(`setup-node`).
|
|
34
|
+
- `npm ping` 은 npm 의 프록시 설정(`proxy`, `https-proxy`)을 따른다. 사내 미러만 열린 망이면 그 미러가 쓰이는지 npm 설정을 본다.
|
|
35
|
+
- `curl -sSI` 는 머리만 받는다(본문을 받지 않음). 닿지 못하면 종료 코드가 0 이 아니다(HTTP 상태와 관계없음). `curl` 은 `HTTPS_PROXY` 를 따른다. 확인 줄은 `--ssl-no-revoke` 를 준다. Windows 의 Git Bash curl 도 Schannel 이라, 폐지 목록 서버에 닿지 못하는 망에서 폐지 확인이 실패하면 종료 60 이다(Windows 박스 실측). 다른 curl 은 이 깃발을 받고 무시한다(macOS curl 8.7.1, Rocky 8.10 curl 7.61.1 실측).
|
|
36
|
+
- Windows PowerShell 에서는 같은 주소를 `curl.exe --ssl-no-revoke -sSI -o NUL --connect-timeout 5 --max-time 10 <주소>` 로 보고 `$LASTEXITCODE` 가 0 인지 본다(PowerShell 5.1 의 `curl` 은 `Invoke-WebRequest` 별칭이다). `curl.exe` 는 Windows 시스템 프록시를 따르지 않고 `HTTPS_PROXY` 만 따른다. `--ssl-no-revoke` 는 폐지 목록 서버에 닿지 못하는 망에서 Schannel 의 폐지 확인 실패를 오프라인으로 읽지 않게 한다. 닿는지만 보고 받은 내용은 쓰지 않으므로 이 확인에만 준다. `curl.exe` 가 없으면 `$LASTEXITCODE` 에 앞 명령의 값이 남으므로 `Get-Command curl.exe -ErrorAction SilentlyContinue` 로 먼저 보고, 없으면 확인하지 못한 것으로 적는다. `npm ping` 은 `Push-Location ~; npm ping --fetch-retries=0 --fetch-timeout=10000 --no-update-notifier; Pop-Location` 처럼 홈에서 부르고 돌아온다(돌아오지 않으면 뒤 단계가 프로젝트가 아니라 홈에서 돈다). PowerShell 에는 15초 감시를 두지 않는다(Windows 의 연결 시간 제한은 약 21초로 알려져 있다. 미실측).
|
|
37
|
+
- 사내 미러만 열린 망이면 확인 주소를 그 미러로 바꿔 본다.
|
|
38
|
+
- Codex sandbox 가 네트워크를 막는 모드(기본 `workspace-write`, `read-only`)에서는 `CODEX_SANDBOX_NETWORK_DISABLED=1` 이 서고 확인이 모두 실패한다(curl 종료 7, npm `EPERM`). 블록의 첫 줄이 그렇다고 알린다. 그때는 '오프라인' 이 아니라 'sandbox 가 네트워크를 막음' 으로 보고하고, 승인을 받아 sandbox 밖에서 확인부터 다시 한다. Claude Code sandbox 안(`SANDBOX_RUNTIME=1`)에서는 허용 목록 밖 주소를 sandbox 프록시가 막는다. Windows PowerShell 에서는 `$env:CODEX_SANDBOX_NETWORK_DISABLED -eq '1'` 로 본다.
|
|
39
|
+
- 확인이 실패하면 보고에 그 명령, 종료 코드, stderr 첫 줄을 붙인다(예: `npm error code ETIMEDOUT`, `curl: (28) ...`). 원인을 '오프라인' 하나로 짐작하지 않는다.
|
|
40
|
+
- curl 의 종료 60(인증서 검증 실패)도 오프라인이 아니다. 망은 열려 있고, TLS 를 가로채는 사내 프록시의 인증서를 OS 가 믿지 않는 것이다. '인증서 문제로 설치하지 않음' 으로 보고한다.
|
|
41
|
+
- curl 은 닿는데 npm 만 인증서 오류(`UNABLE_TO_VERIFY_LEAF_SIGNATURE`, `SELF_SIGNED_CERT_IN_CHAIN`, `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`)로 실패하면 망은 열려 있고 npm 이 사내 인증서를 믿지 않는 것이다(npm 은 OS 인증서 저장소를 쓰지 않는다). '인증서 문제로 설치하지 않음' 으로 보고하고 `NODE_EXTRA_CA_CERTS=<사내 CA 파일>` 을 안내한다. Node 24 는 `NODE_OPTIONS=--use-system-ca` 도 된다.
|
|
42
|
+
|
|
19
43
|
## Claude Code · OMC
|
|
20
44
|
- **이미 설치(`omc` 존재)** 면 최신화만 한다:
|
|
21
45
|
```bash
|
|
@@ -72,13 +72,17 @@ node "<이 스킬 디렉터리 절대경로>\assets\apply-hud.mjs"
|
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
- `[ok] statusLine -> node "<설정 폴더>/hud/omc-hud-custom.mjs"` 줄을 확인한다.
|
|
75
|
-
-
|
|
75
|
+
- `Render check` 줄을 확인한다. `[ok]` 면 정상이다. `[!!]` 나 `[..]` 면 그 줄을 그대로 보고한다. 이때도 설치는 끝났다(종료 0).
|
|
76
|
+
- 기존 statusLine 이 다른 명령이었으면 `[..] statusLine ran ...` 줄이 나온다. 보고에 그대로 넣는다. 그 명령은 첫 낱말(프로그램. 앞의 `이름=값` 대입은 건너뜀)과 길이만 나온다(예: `"node …" (42 characters)`). 첫 낱말이 설정이나 주소 꼴(`=`, `@`, `://` 가 듦)이면 `"(program hidden)"`, 대입뿐이면 `"(no program)"` 이 나온다. 명령 속 토큰과 비밀번호가 보고에 실리지 않게 하려는 것이다. 원문은 백업에만 있다.
|
|
77
|
+
- `settings.json` 은 새 파일로 바꿔 넣으므로, 손으로 준 ACL, 확장 속성(Windows 는 대체 데이터 스트림), SELinux 라벨은 새 파일에도 백업에도 따라오지 않는다(macOS, Windows, Rocky8 실측). 그런 속성이 필요하면 설치 뒤 다시 준다.
|
|
78
|
+
- `settings.json` 이 하드 링크면 `[..] settings.json has N other name(s) (a hard link)` 줄이 나온다. 제자리에 써서 다른 이름(스냅샷 등)도 새 내용이 됐다는 뜻이다. 보고에 넣는다.
|
|
79
|
+
- 설치할 자리(`settings.json`, `hud/` 의 파일, `.omc/hud-config.json`)에 일반 파일이 아닌 것(폴더, FIFO, 장치)이 있거나, 써 넣을 폴더 자리에 폴더가 아닌 것이 있으면 `[x] ... nothing changed` 와 종료 1 로 멈춘다. 그 자리를 비운 뒤 다시 실행한다.
|
|
76
80
|
- 종료 코드 1 이면 출력의 `[x]` 줄을 그대로 보고하고 멈춘다. 이때 바뀐 파일은 없다.
|
|
77
|
-
- `settings.json` 이 JSON 객체가 아니면 사용자가 고친 뒤 다시 실행한다.
|
|
81
|
+
- `settings.json` 이 JSON 문법에 맞지 않거나(주석, 끝 쉼표 포함) 객체가 아니면 사용자가 고친 뒤 다시 실행한다. 빈 파일은 Claude Code 처럼 `{}` 로 읽는다.
|
|
78
82
|
- OMC 가 없으면 OMC 를 먼저 설치한다(`setup-omc` 스킬). 이 스킬은 OMC 를 설치하지 않는다.
|
|
79
83
|
- 설정 폴더 경로에 셸이 해석하는 글자가 있으면 그 글자가 없는 폴더를 쓰게 안내한다.
|
|
80
84
|
- 쓸 수 없는 파일이나 폴더가 있으면 권한을 고친 뒤 다시 실행한다.
|
|
81
|
-
- 종료 코드 2 면 예기치 못한 오류로 중간에 멈춘 것이다. 출력을 그대로 보고하고,
|
|
85
|
+
- 종료 코드 2 면 예기치 못한 오류로 중간에 멈춘 것이다. 출력을 그대로 보고하고, 바꾼 파일의 이전 판은 `<파일>.backup.<시각>` 에 있다고 알린다. 로더와, 도구가 쓴 그대로의 블록은 백업하지 않는다(블록 안을 손으로 고쳤으면 그 래퍼를 백업한다).
|
|
82
86
|
|
|
83
87
|
## 2. payload-mon 켜기
|
|
84
88
|
|
|
@@ -89,12 +93,13 @@ node "<이 스킬 디렉터리 절대경로>/../payload-mon/scripts/payload-mon.
|
|
|
89
93
|
```
|
|
90
94
|
|
|
91
95
|
- Codex 사본에서 실행할 때 경로는 `<이 스킬 디렉터리 절대경로>/../banker-payload-mon/scripts/payload-mon.mjs` 다.
|
|
92
|
-
- 이유: `PL:` 칸은 payload-mon 이 래퍼 옆(`hud/payload-mon/`)에 두는 크기 계산 모듈을 쓴다. 모듈이 없으면 `PL:` 이 나오지 않는다.
|
|
96
|
+
- 이유: `PL:` 칸은 payload-mon 이 래퍼 옆(`hud/payload-mon/`)에 두는 크기 계산 모듈을 쓴다. 모듈이 없으면 `PL:` 이 나오지 않는다. 래퍼 파일이 링크면 링크가 가리키는 파일 옆에 둔다. 래퍼는 이 모듈을 링크가 가리키는 파일 옆에서, 로더(`omc-hud.mjs`)는 statusLine 명령의 경로 옆에서 먼저 찾는다.
|
|
93
97
|
- 출력 `켰습니다. 다음 statusline 갱신부터 PL 칸에 요청 크기가 늘 표시됩니다.` 를 확인한다. `이미 켜져 있습니다`, `모듈 사본을 이 버전으로 맞췄습니다` 도 정상이다.
|
|
94
98
|
|
|
95
99
|
## 3. 보고
|
|
96
100
|
|
|
97
101
|
- 1단계 출력의 statusLine 줄과 백업 경로
|
|
102
|
+
- 1단계의 `Render check` 줄
|
|
98
103
|
- 2단계 결과
|
|
99
104
|
- statusLine 이 바뀌었으면 Claude Code 재시작 안내
|
|
100
105
|
|
|
@@ -113,12 +118,13 @@ node "<이 스킬 디렉터리 절대경로>/scripts/claude-update-last.mjs" off
|
|
|
113
118
|
## 함정
|
|
114
119
|
|
|
115
120
|
- 다시 설치하면 래퍼와 `hud-config.json` 을 첨부 파일로 덮어쓴다. 손으로 고친 내용은 `.backup.<시각>` 에만 남는다.
|
|
121
|
+
- 도구가 쓴 그대로의 payload-mon, claude-update-last 블록만 다른 래퍼와 바뀌는 내용이 없는 `settings.json` 은 백업하지 않는다. 블록 안을 손으로 고쳤으면 그 래퍼를 백업한다.
|
|
116
122
|
- `settings.json` 의 `omcHud` 값은 `hud-config.json` 의 같은 키를 덮어쓴다. 래퍼가 기대는 아래 키를 바꾸면 칸이 달라지거나 OMC 원문이 그대로 나온다.
|
|
117
123
|
- `omcLabel`, `useBars`
|
|
118
124
|
- `maxWidth`, `maxOutputLines`
|
|
119
125
|
- `showCallCounts`, `callCountsFormat`
|
|
120
126
|
- `contextBar`, `gitBranch`
|
|
121
|
-
- `payload-mon off` 를 실행하면 크기 계산 모듈이 지워져 `PL:` 칸도 사라진다. 다시 보려면 `payload-mon on`.
|
|
127
|
+
- `payload-mon off` 를 실행하면 크기 계산 모듈이 지워져 `PL:` 칸도 사라진다. 다시 보려면 `payload-mon on`. 사본 폴더(`hud/payload-mon/`)가 링크면 그 안을 지우지 않으므로 `PL:` 칸이 남는다.
|
|
122
128
|
- v4 에서 payload-mon 블록은 모듈을 깔기 위해서만 남는다. 갱신마다 크기 추정이 두 번 돌지만 두 번째는 캐시를 쓴다.
|
|
123
129
|
- 래퍼를 손으로 고칠 때 `if (f.ctx) colored.push(colorCtx(f.ctx));` 줄을 지우지 않는다. 실행상 비어 있지만 `payload-mon on` 이 이 줄 바로 뒤에 블록을 넣는다.
|
|
124
130
|
- 래퍼는 statusLine 프로세스가 받은 터미널 폭(stderr, stdout 의 `columns`, 그다음 `COLUMNS`)으로 줄을 접는다. 폭을 받지 못하면 한 줄로 나오고 Claude Code 가 끝을 자른다.
|
|
@@ -132,3 +138,5 @@ node "<이 스킬 디렉터리 절대경로>/scripts/claude-update-last.mjs" off
|
|
|
132
138
|
- 설치는 네트워크를 쓰지 않는다. 다만 OMC 가 렌더할 때 네트워크로 얻는 정보(새 Claude Code 판 같은)는 오프라인에서 빠질 수 있다.
|
|
133
139
|
- 래퍼, HUD 설정, 모듈 사본은 플러그인 밖(`<설정 폴더>/hud/`, `<설정 폴더>/.omc/`)에 있다. 플러그인을 지워도 상태표시줄은 남는다.
|
|
134
140
|
- OMC 를 지울 때는 statusLine 도 지운다. OMC 로더는 플러그인을 못 찾으면 작업 폴더의 `node_modules` 에서 OMC HUD 를 찾아 불러오기 때문이다.
|
|
141
|
+
- 설치 끝의 렌더 확인은 래퍼를 입력 없이 한 번 돌려, OMC 진단의 첫 줄(`[OMC] HUD v<판> | preset: <이름>`)로 OMC 를 불러왔는지와 그린 판을 본다. 네트워크는 쓰지 않는다.
|
|
142
|
+
- 렌더 확인이 `[!!]` 로 OMC 를 불러오지 못한다거나 옛 판이 그린다고 하면 OMC 쪽 문제다. `[..]` 는 이 확인으로 알 수 없었다는 뜻이다(OMC 가 입력 없이 아무것도 내지 않음, 판만 다르고 이유를 못 찾음, Windows 에 `node.cmd` 만 있음). `/oh-my-claudecode:omc-setup` 은 고치면서 statusLine 을 OMC 명령으로 되돌리므로, 쓴 뒤에는 이 스킬을 다시 실행한다. omc-patch 를 쓰는 PC 는 omc-patch 도 다시 적용한다.
|