@kaydash9999/banker-plugins 0.19.5 → 0.20.1

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.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Claude Code skills + commands — QA, audit, docs, architecture, dependency setup, and wiki; the banker plugin marketplace.",
9
- "version": "0.19.5"
9
+ "version": "0.20.1"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "banker",
3
- "version": "0.19.5",
3
+ "version": "0.20.1",
4
4
  "description": "Claude Code plugin: QA/audit/docs/architecture skills + commands, a /banker:setup installer for OS dependencies (playwright, etc.), and wiki compaction.",
5
5
  "author": {
6
6
  "name": "smallOpenSource",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.20.1] - 2026-10-19
4
+
5
+ ### Changed
6
+ - 유지보수자용: 암호 모듈이 없을 때의 난수 시험이 정확한 출력을 단언하고, 업데이트 확인과 체크인의 시험이 흉내가 `node:crypto` 를 가로챘는지 스스로 확인한다.
7
+
8
+ ### Fixed
9
+ - `payload-mon` 의 `on` 과 `status` 가 래퍼 v4 에서도 "8MB 이상이면 ctx 옆에 표시" 라고 안내하던 것. v4 는 크기를 `PL:` 칸에 늘 보이므로 이제 그렇게 안내한다. `status` 는 켜져 있을 때만 어디에 보이는지 적는다. 옛 래퍼의 `on` 안내는 그대로다. README 의 payload-mon 설명도 고친다.
10
+
11
+ ## [0.20.0] - 2026-10-19
12
+
13
+ ### Changed
14
+ - `setup-omc-hud` 가 상태표시줄 파일을 내려받지 않고 스킬에 든 파일(`skills/setup-omc-hud/assets/`)로 설치한다. 모든 OS 에서 `node assets/apply-hud.mjs` 한 명령이고, 네트워크가 없어도 끝까지 된다. 예전에는 GitHub 의 omc_hud 저장소에서 OS 별 스크립트를 받아, 원본이 바뀌면 설치 결과도 말없이 바뀌었다.
15
+ - 설치 스크립트는 설정 폴더 경로의 공백과 `settings.json` 앞의 BOM 을 처리하고, 손으로 고친 래퍼와 HUD 설정은 `.backup.<시각>` 으로 남긴다. 백업은 원본의 바이트와 권한을 그대로 두고, statusLine 의 다른 필드(`padding` 등)는 남긴다.
16
+ - 설치 스크립트는 `settings.json` 이 JSON 객체가 아니거나, OMC 가 없거나, 설정 폴더 경로에 셸이 해석하는 글자(`"`, `$`, 백틱, `%`, `\`, 줄바꿈)가 있거나, 쓸 수 없는 파일이 있으면 아무 파일도 바꾸지 않고 멈춘다(종료 1). 예기치 못한 오류로 중간에 멈추면 종료 2 로 알린다.
17
+ - 첨부 HUD 설정은 OMC 출력을 8줄까지 둔다. 3줄이면 에이전트가 하나만 돌아도 갱신 안내와 함께 상세 줄이 `... (+N lines)` 로 접혔다.
18
+ - 상태표시줄 래퍼가 v4 로 바뀐다. 첫 줄은 `<model>/<effort>|5h:<pct>/<reset>|wk:<pct>/<reset>|<mm>:<pct>/<reset>|think|PL:<mb>M|se:<hours>h|ctx:<pct>%|🤖<agents>|🔧<tools>|⚡<skills>|<cwd>|<account>|<branch>|claude<cur>→<new>` 이고, 둘째 줄부터 에이전트 목록 같은 상세 줄이 붙는다. 화면 폭을 넘으면 칸 사이에서 접는다. OMC 와 Claude Code 의 갱신 안내 줄, OMC 판 표시는 보이지 않는다.
19
+ - `setup-omc-hud` 는 설치할 때마다 payload-mon 을 켠다. `PL:` 칸이 payload-mon 의 크기 계산 모듈을 쓰기 때문이다. 예전에는 켜져 있던 경우만 다시 켰다.
20
+ - `setup-omc-hud` 의 Claude 갱신 안내 블록 단계를 뺀다. 새 래퍼가 안내를 줄여 직접 맨 끝에 둔다. 인자 `off`, `status` 는 옛 래퍼에 넣은 블록을 위해 남는다.
21
+ - 유지보수자용: 설치 스크립트, 래퍼 형식, 블록 도구 둘과 래퍼 v4 의 왕복을 시험한다. smoke 는 스킬 설명서에 내려받기 명령이 없는지와 Codex 사본의 설치 스크립트가 도는지를 본다.
22
+
23
+ ### Fixed
24
+ - `payload-mon` 과 `setup-omc-hud` 의 블록 도구가 따옴표 안에서 펼쳐지지 않은 `~` 나 끝 공백이 든 `CLAUDE_CONFIG_DIR` 를 그대로 경로로 써서, 설치 스크립트가 만든 래퍼를 찾지 못하던 것. 이제 설치 스크립트와 같이 `~/x` 를 `<홈>/x` 로 읽는다.
25
+
3
26
  ## [0.19.5] - 2026-10-17
4
27
 
5
28
  ### Changed
package/README.md CHANGED
@@ -142,7 +142,7 @@ Claude Code 2.1.296 은 Claude 5 모델(Opus 5.5 등)에 작업 목록 도구(Ta
142
142
  | `update-banker` | 설치된 banker 를 3채널(Claude·npm·Codex) 순서 게이트로 최신화 |
143
143
  | `refresh-readme` | 코드와 어긋난 README 를 현재 상태에 맞게 갱신(드리프트 해소) |
144
144
  | `cleansing-memory` | 메모리 파일을 문서화된 threshold 내로 정리(중복 최신본화·무손실 압축) |
145
- | `payload-mon` | 상태표시줄 ctx 옆에 요청 payload 추정치(32MB 한도 대비, 8MB부터) 표시 켜기·끄기 |
145
+ | `payload-mon` | 상태표시줄에 요청 payload 추정치(32MB 한도 대비) 표시 켜기·끄기. 래퍼 v4 는 `PL:` 칸에 늘, 옛 래퍼는 8MB부터 ctx 옆에 |
146
146
  | `tone-compact` | 답변과 새 문서를 ASD-STE100 기반 한글 개조식(표·목록·원어 발음 표기·장식 기호 금지)으로 쓰는 문체 규칙 켜기·끄기(on 기본, 끌 때까지 유지) |
147
147
  | `anti-drm` | DRM 이 암호화하는 확장자(기본 11개: 텍스트·오피스·한글·PDF·CSV) 대신 대체 확장자(`.md`·`.html`·`.tsv`)로 파일을 만들게 하는 규칙 켜기·끄기(on 기본, 처음 켤 때 금지 확장자와 대체 확장자를 물음, `config` 로 변경, 끌 때까지 유지) |
148
148
  | `omc-patch` | OMC 자동 업데이트 뒤 사라진 훅 패치를 재적용하고 OMC 마켓플레이스 자동 업데이트를 고정(진단·확인·적용·검증·되돌리기). 옛 킷이 블록 안에 넣은 헬퍼(project-memory 꺼짐)를 찾아 고치고, project-memory 훅이 실제로 일하는지 임시 폴더에서 확인 |
@@ -180,7 +180,7 @@ USER_RESOURCES 가이드의 공통 요소를 OS별·런타임별(Claude Code/Cod
180
180
  | `setup-omc` | oh-my-claudecode(OMC) 설치·갱신 (Codex는 OMX) |
181
181
  | `setup-harness-factory` | revfactory/harness 팀 아키텍처 팩토리 설치·구성·사용안내 (Codex=meta-harness) |
182
182
  | `setup-playwright` | Playwright + headless 브라우저 (RHEL8/Rocky8·non-root·no-conda 폴백) |
183
- | `setup-omc-hud` | omc_hud 상태표시줄 (OS별). Claude 갱신 안내는 줄 맨 끝 |
183
+ | `setup-omc-hud` | omc_hud 상태표시줄(래퍼 v4). 스킬에 든 파일로 오프라인 설치, 모든 OS 같은 명령 |
184
184
  | `setup-insane-search` | insane-search 플러그인 설치 (Claude·Codex) |
185
185
  | `setup-stitch` | Stitch 디자인 MCP 프록시 등록(RockyLinux8 proxy) |
186
186
  | `docs-setup` | arch-diagram·pdf-vision-extract 의존성(pptx·pymupdf·plantuml) 설치 |
@@ -247,7 +247,7 @@ banker uninstall # 제거
247
247
  | `setup-mcp` | `claude mcp add` (context7·seq-thinking·filesystem·git·fetch) | `[mcp_servers.*]` |
248
248
  | `setup-lsp` | LSP MCP 등록 | `[mcp_servers.lsp_bridge]` |
249
249
  | `setup-stitch` | `claude mcp add stitch` | `codex mcp add stitch` |
250
- | `setup-omc-hud` | `statusLine` + `hud/omc-hud-custom.mjs` 에 Claude 갱신 안내를 줄 맨 끝으로 옮기는 블록 1개(`.claude-update-last.bak` 백업·멱등·`node --check` 검증, `off` 로 원복) | — (Codex는 OMX `hud`) |
250
+ | `setup-omc-hud` | `statusLine`(`settings.json` 백업) + `hud/omc-hud-custom.mjs`, `hud/omc-hud.mjs`, `.omc/hud-config.json`(바뀐 파일은 `.backup.<시각>` 백업) + payload-mon 켜기. 옛 판이 넣은 갱신 안내 블록은 `off` 로 원복 | — (Codex는 OMX `hud`) |
251
251
  | `setup-pwsh` | `env.CLAUDE_CODE_GIT_BASH_PATH` (병합) | — (네이티브 셸, 배선 불필요) |
252
252
  | `setup-harness-factory` | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` (env 영속) | — |
253
253
  | `smart-compact` | `statusLine.command` 래핑 + `UserPromptSubmit` 훅 추가 (백업·멱등) | `~/.codex/` 대응 |
@@ -301,7 +301,8 @@ Codex는 재설치할 때마다 기존 `banker-*` 를 먼저 정리하므로 옛
301
301
  > 표시 블록과 모듈 사본은 플러그인 밖(`~/.claude/hud/`)에 있어서, 플러그인을 지워도 남아 계속 표시됩니다.\
302
302
  > 이미 지웠다면 HUD를 재설치하거나, `omc-hud-custom.mjs` 에서 `// >>> payload-mon >>>` 부터 `// <<< payload-mon <<<` 까지 지우면 됩니다.
303
303
 
304
- > `setup-omc-hud` 가 넣은 Claude 갱신 안내 블록도 플러그인 밖(`~/.claude/hud/omc-hud-custom.mjs`)에 남습니다. 원래 순서로 되돌리려면 제거 전에 `/banker:setup-omc-hud off` 를 실행하세요.\
304
+ > `setup-omc-hud` 가 설치한 상태표시줄 래퍼와 설정도 플러그인 밖(`~/.claude/hud/`, `~/.claude/.omc/`)에 있어서, 플러그인을 지워도 남습니다.\
305
+ > 0.19.5 이하의 `setup-omc-hud` 가 옛 래퍼에 넣은 Claude 갱신 안내 블록은 제거 전에 `/banker:setup-omc-hud off` 로 뺄 수 있습니다.\
305
306
  > 이미 지웠다면 HUD를 재설치하거나, `// >>> claude-update-last >>>` 부터 `// <<< claude-update-last <<<` 까지 지우면 됩니다. 블록을 남겨 두어도 상태표시줄은 깨지지 않습니다.
306
307
 
307
308
  > `setup-bypass-permissions` 로 바꾼 권한 모드는 `settings.json` 에 남아, 플러그인을 지워도 모든 세션에서 확인 없이 도구가 실행됩니다. 제거 전에 `/banker:setup-bypass-permissions off` 를 실행하세요.\
@@ -366,6 +367,8 @@ banker 자체는 **MIT** ([LICENSE](LICENSE)). Owner: [smallOpenSource](https://
366
367
  패턴 목록은 Wikipedia [*Signs of AI writing*](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)(WikiProject AI Cleanup, **CC BY-SA**)에 기반합니다.
367
368
  - `skills/3d-intro-build/references`: [oso95/scroll-world](https://github.com/oso95/scroll-world) 의 스크럽 엔진(`scrub-engine.js`·`index-template.html`)을 그대로 벤더링, **MIT License**(© 2026 cyw).\
368
369
  원본 라이선스 고지는 `skills/3d-intro-build/references/LICENSE` 와 `NOTICE.md` 에 포함.
370
+ - `skills/setup-omc-hud/assets`: 상태표시줄 래퍼와 설치 스크립트는 [smallOpenSource/omc_hud](https://github.com/smallOpenSource/omc_hud) d3cedd5 를 고친 것, **MIT License**(© 2026 smallOpenSource).\
371
+ 원본 라이선스 고지는 `skills/setup-omc-hud/assets/LICENSE-omc_hud` 에 포함.
369
372
  - `skills/theme-selection/assets`: 번들 팔레트(`palettes.json`)는 [VoltAgent/awesome-design-md](https://github.com/VoltAgent/awesome-design-md) 의 DESIGN.md 에서 색 값을 읽어 만든 것, **MIT License**(© 2026 VoltAgent).\
370
373
  원본 라이선스 고지는 `skills/theme-selection/assets/LICENSE` 와 `NOTICE.md` 에 포함.\
371
374
  테마 이름의 상표는 각 소유자에게 있으며, banker 는 그 회사들과 관계가 없습니다.
@@ -28,7 +28,7 @@
28
28
  { "name": "ultra-init", "type": "skill", "target": "both", "reason": "orchestrates ralplan->ralph->QA gate (no ultragoal ledger: OMC 5.6.1 checkpoints need a /goal snapshot that would compete with ralph); Claude=OMC 5 (verify cycle in place of the removed ultraqa; needs the omc CLI with `omc ralph verify`), Codex=OMX (OMX ultraqa); body runtime-aware", "supportingFiles": [] },
29
29
  { "name": "omc-reference", "type": "skill", "target": "both", "reason": "OMC/OMX agent/tool/skill registry reference; runtime-aware (Codex counterpart is OMX)", "supportingFiles": [] },
30
30
  { "name": "setup-omc", "type": "skill", "target": "both", "reason": "installs OMC (Claude) or OMX (Codex `omx setup`); body already dual-runtime", "supportingFiles": [] },
31
- { "name": "setup-omc-hud", "type": "skill", "target": "both", "reason": "installs omc_hud (Claude statusLine) and moves OMC's Claude Code update notice to the end of the line; Codex uses OMX `hud`; runtime-aware", "supportingFiles": ["scripts/claude-update-last.mjs"] },
31
+ { "name": "setup-omc-hud", "type": "skill", "target": "both", "reason": "installs the omc_hud statusline wrapper v4 (Claude statusLine) from files bundled in assets/, offline and with one node command on every OS, then turns payload-mon on for the PL segment; off/status handle the update-notice block older wrappers took; Codex uses OMX `hud`; runtime-aware", "supportingFiles": ["assets/apply-hud.mjs", "assets/omc-hud-custom.mjs", "assets/hud-config.json", "assets/LICENSE-omc_hud", "scripts/claude-update-last.mjs"] },
32
32
  { "name": "setup-stitch", "type": "skill", "target": "both", "reason": "registers the Stitch MCP proxy (RockyLinux8 ~/bin/stitch-proxy.sh); Claude `claude mcp add`, Codex `codex mcp add`", "supportingFiles": [] },
33
33
 
34
34
  { "name": "docs-setup", "type": "skill", "target": "both", "reason": "installs arch-diagram/pdf-vision-extract deps (python-pptx, pymupdf, plantuml); python-env detect/select; runtime-agnostic installer", "supportingFiles": [] },
package/commands/setup.md CHANGED
@@ -31,7 +31,7 @@ banker 플러그인이 제공하는 설치 스킬들을 **multi-select**로 골
31
31
  - **setup-omc** — oh-my-claudecode(OMC) 설치/갱신(Codex는 OMX). `all-in-one`·`ultra-chain`·`ultra-init`·`/banker:front-qa` 의존성.
32
32
  - **setup-harness-factory** — revfactory/harness(팀 아키텍처 팩토리) 설치+구성+안내(Codex=meta-harness).
33
33
  - **setup-insane-search** — insane-search 플러그인(차단 사이트 우회, Claude/Codex 양쪽).
34
- - **setup-omc-hud** — omc_hud 상태표시줄(OS별).
34
+ - **setup-omc-hud** — omc_hud 상태표시줄(래퍼 v4, 스킬에 든 파일로 오프라인 설치).
35
35
  - **setup-stitch** — Stitch(디자인 생성) MCP 프록시 등록(RockyLinux8 proxy-script, API key 필요).
36
36
 
37
37
  **의존성 라이브러리**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaydash9999/banker-plugins",
3
- "version": "0.19.5",
3
+ "version": "0.20.1",
4
4
  "description": "banker — Claude Code + Codex CLI plugin (QA, audit, docs, architecture, wiki skills). Install via Claude Code marketplace, or `npm i -g @kaydash9999/banker-plugins` then `banker setup`.",
5
5
  "bin": {
6
6
  "banker": "bin/banker.js"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: payload-mon
3
- description: "OMC HUD 상태표시줄의 `ctx` 옆에, 현재 세션이 보내는 API 요청의 페이로드 추정치를 32MB 한도 대비로 표시하는 기능을 켜고 끔. 8MB 부터 표시. 'payload-mon'/'payload 모니터 켜/꺼'/'상태표시줄 payload 표시'/'요청 크기 경고'/'32MB 한도 경고'/'payload 표시가 안 보여' 시 사용."
3
+ description: "OMC HUD 상태표시줄에 현재 세션이 보내는 API 요청의 페이로드 추정치를 32MB 한도 대비로 표시하는 기능을 켜고 끔. 래퍼 v4 는 `PL:` 칸으로 늘 보이고, 옛 래퍼는 8MB 부터 `ctx` 옆에 보임. 'payload-mon'/'payload 모니터 켜/꺼'/'상태표시줄 payload 표시'/'요청 크기 경고'/'32MB 한도 경고'/'payload 표시가 안 보여' 시 사용."
4
4
  argument-hint: "on | off | status"
5
5
  ---
6
6
 
@@ -11,6 +11,7 @@ argument-hint: "on | off | status"
11
11
  Claude Code 는 요청 본문이 32MB 를 넘으면 "Request too large (max 32MB)" 로 거절한다.
12
12
  이 한도는 토큰이 아니라 바이트라서, ctx(컨텍스트 %)가 낮아도 이미지나 큰 도구 결과가 쌓이면 걸린다.
13
13
  이 스킬은 그 바이트를 추정해 한도의 25%(8MB)부터 ctx 옆에 `payload:28%/9.0MB` 처럼 보여 준다.
14
+ `setup-omc-hud` 가 까는 래퍼 v4 는 이 스킬의 모듈로 크기를 늘 `se` 앞에 `PL:0.5M` 처럼 보이고, 블록이 내는 칸은 그 `PL:` 이 대신한다.
14
15
 
15
16
  ## 실행
16
17
 
@@ -41,13 +42,14 @@ node "<이 스킬 디렉터리 절대경로>/scripts/payload-mon.mjs" <on|off|st
41
42
  블록이 불러오는 추정 모듈은 래퍼 옆 `hud/payload-mon/payload-size.mjs` 에 사본으로 둔다. 플러그인 설치 경로는 버전마다 바뀌어 업데이트 뒤에 사라지기 때문이다.
42
43
  이미 켜져 있으면 래퍼를 바꾸지 않고, 모듈 사본이 이 버전과 다를 때만 사본을 맞춘다. 예전 방식(블록 2개)으로 켜져 있었다면 새 방식으로 바꾼다.
43
44
  바꾸기 전 내용은 `omc-hud-custom.mjs.payload-mon.bak` 에 남는다.
44
- - `off`: 그 블록만 빼서 래퍼를 켜기 전 상태로 되돌리고, 모듈 사본과 추정치 캐시를 지운다.
45
+ - `off`: 그 블록만 빼서 래퍼를 켜기 전 상태로 되돌리고, 모듈 사본과 추정치 캐시를 지운다. 래퍼 v4 에서는 모듈 사본이 없어져 `PL:` 칸도 사라진다.
45
46
  - `status`: 켜짐·꺼짐, 모듈 사본이 이 버전과 같은지, statusLine 이 이 래퍼를 쓰는지, 현재 세션의 추정치를 보여 준다.
46
47
  - 같은 래퍼에 자기 표시 블록을 넣는 다른 도구가 있어도 서로의 블록을 건드리지 않는다.
47
48
 
48
49
  ## 무엇을 어떻게 보여 주는가
49
50
 
50
- - `ctx:21%|payload:28%/9.0MB|se:…`: 32MB 대비 %(ctx 와 같은 색: 70% 미만 초록, 85% 미만 노랑, 그 이상 빨강)와 크기(MB, 청록). 8MB 미만이면 숨긴다.
51
+ - 래퍼 v4: `PL:9.0M|se:0.7h|…`. 크기(MB, 소수 1자리)를 늘 보이고, 색은 32MB 대비 %(70% 미만 초록, 85% 미만 노랑, 그 이상 분홍)다.
52
+ - 옛 래퍼: `ctx:21%|payload:28%/9.0MB|se:…`: 32MB 대비 %(ctx 와 같은 색: 70% 미만 초록, 85% 미만 노랑, 그 이상 빨강)와 크기(MB, 청록). 8MB 미만이면 숨긴다.
51
53
  - 값은 마지막 `/compact` 이후 Claude Code 가 실제로 보내는 메시지의 바이트다. Claude Code 가 32MB 한도를 판정하는 방식과 같고, 무엇을 넣고 뺄지는 Claude Code 2.1.288 의 요청 필터를 따른다.
52
54
  - 세션 파일 크기가 아니다. 71MB 짜리 세션 파일도 실제 전송분은 0.1MB 일 수 있다. 알려진 오차는 `scripts/payload-size.mjs` 머리 주석에 있다.
53
55
 
@@ -60,7 +62,7 @@ node "<이 스킬 디렉터리 절대경로>/scripts/payload-mon.mjs" <on|off|st
60
62
  - "모듈 사본을 쓰지 못했습니다": 래퍼 옆 `hud/payload-mon/` 에 쓸 수 없다(권한, 같은 이름의 파일, 디스크 공간). 래퍼는 그대로다.
61
63
  - "표시(>>> / <<<)의 짝이 맞지 않습니다": 래퍼에 payload-mon 표시 줄이 한쪽만 남았다. `on`·`off` 모두 거부하므로, 손으로 고치지 말라는 원칙의 유일한 예외다.
62
64
  `setup-omc-hud` 로 HUD 를 재설치하거나, 래퍼에서 짝 없이 남은 `// >>> payload-mon >>>` 또는 `// <<< payload-mon <<<` 줄을 지운 뒤 다시 실행한다.
63
- - HUD 를 재설치한 뒤 payload 가 안 보이면 `on` 을 다시 실행한다. `setup-omc-hud` 로 재설치했다면 그 스킬이 다시 켠다.
65
+ - HUD 를 재설치한 뒤 payload 가 안 보이면 `on` 을 다시 실행한다. `setup-omc-hud` 는 설치할 때마다 이 스킬을 늘 켠다(래퍼 v4 의 `PL:` 칸이 모듈 사본을 씀).
64
66
  - banker 업데이트 알림에 payload-mon 이 바뀌었다고 나오거나 `status` 에 "모듈 사본이 이 버전과 다름" 이 나오면, `on` 을 한 번 실행해 사본을 맞춘다.
65
67
  - `status` 에 "주의: statusLine 명령에 … 보이지 않습니다" 가 나오면 statusline 이 다른 명령이다. smart-compact 처럼 HUD 를 감싸 호출하는 래퍼라면 정상 표시된다. 이 스킬은 OMC 커스텀 HUD 래퍼에만 붙는다.
66
68
  - 추정치가 실제 "Request too large" 시점과 크게 어긋나면 Claude Code 가 세션 파일 형식이나 요청 필터를 바꿨을 수 있다. banker 이슈로 알린다.
@@ -17,7 +17,8 @@
17
17
  * `const input`, runs the HUD in-process and keeps spawnSync for a fallback
18
18
  * branch. A block anchored on spawnSync would land in that branch, so the ctx
19
19
  * line is the only anchor. Earlier versions that also put a block before
20
- * spawnSync are converted on the next `on`.
20
+ * spawnSync are converted on the next `on`. Wrapper v4 (setup-omc-hud 0.20.0)
21
+ * shows the size in its own PL segment, so `on` and `status` point there.
21
22
  *
22
23
  * The block imports a copy of payload-size.mjs kept beside the wrapper
23
24
  * (<hud>/payload-mon/payload-size.mjs), not the module in this folder: a plugin
@@ -49,7 +50,7 @@ import {
49
50
  writeFileSync,
50
51
  } from "node:fs";
51
52
  import { homedir, tmpdir } from "node:os";
52
- import { basename, dirname, join } from "node:path";
53
+ import { basename, dirname, join, resolve } from "node:path";
53
54
  import { fileURLToPath, pathToFileURL } from "node:url";
54
55
  import { CACHE_DIR, clearCache, estimatePayloadBytes, REQUEST_LIMIT_BYTES, SHOW_FROM_BYTES } from "./payload-size.mjs";
55
56
 
@@ -60,9 +61,21 @@ const BLOCKS = /^[ \t]*\/\/ >>> payload-mon >>>[\s\S]*?\/\/ <<< payload-mon <<<[
60
61
  const CTX_LINE = /^ {2}if \(f\.ctx\) colored\.push\(colorCtx\(f\.ctx\)\);\r?\n/m;
61
62
  // The statusline JSON the block reads, in either layout.
62
63
  const INPUT_DECL = /^(?:let|const) input\b/m;
64
+ // Wrapper v4 pushes its own PL segment: the size from 0MB on, in place of the block's segment.
65
+ const PL_SEGMENT = /colored\.push\(`PL:/;
63
66
  const MB = 1024 * 1024;
64
67
 
65
- const CONFIG_DIR = process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
68
+ // The same rules as setup-omc-hud's installer (OMC's getClaudeConfigDir): trim, expand a leading "~",
69
+ // make it absolute, drop a trailing separator. A value no shell expanded ("~/x" in quotes) still finds
70
+ // the wrapper the installer put there.
71
+ function configDir() {
72
+ const v = (process.env.CLAUDE_CONFIG_DIR || "").trim();
73
+ if (!v) return join(homedir(), ".claude");
74
+ if (v === "~") return homedir();
75
+ if (v.startsWith("~/") || v.startsWith("~\\")) return join(homedir(), v.slice(2));
76
+ return resolve(v);
77
+ }
78
+ const CONFIG_DIR = configDir().replace(/[\\/]+$/, "");
66
79
 
67
80
  const DEFAULTS = {
68
81
  hudFile: process.env.PAYLOAD_MON_HUD_FILE || join(CONFIG_DIR, "hud", "omc-hud-custom.mjs"),
@@ -239,6 +252,15 @@ const notShownNote = (o) =>
239
252
  : `\n주의: statusLine 명령에 ${basename(o.hudFile)}가 보이지 않습니다. ` +
240
253
  "다른 래퍼(smart-compact 등)가 HUD를 감싸 호출하면 정상 표시되고, 아니면 화면에 나타나지 않습니다.";
241
254
 
255
+ const showsPL = (src) => src !== null && PL_SEGMENT.test(src);
256
+
257
+ // Where the size shows, named only while it does: the block in place and a
258
+ // module copy to import. "" otherwise, so status never promises a segment.
259
+ function displayWhere(o, src) {
260
+ if (src === null || !inPlace(src, moduleUrl(o.hudFile)) || copyState(o) === "missing") return "";
261
+ return showsPL(src) ? "PL 칸에 늘 표시" : `${SHOW_FROM_BYTES / MB}MB부터 표시`;
262
+ }
263
+
242
264
  export function turnOn(opts = {}) {
243
265
  const o = { ...DEFAULTS, ...opts };
244
266
  const src = readText(o.hudFile);
@@ -253,7 +275,9 @@ export function turnOn(opts = {}) {
253
275
  }
254
276
  const why = misfit(src);
255
277
  if (why) return refusal(why, o.hudFile);
256
- const done = "켰습니다. 다음 statusline 갱신부터 8MB 이상이면 ctx 옆에 payload가 표시됩니다.";
278
+ const done = showsPL(src)
279
+ ? "켰습니다. 다음 statusline 갱신부터 PL 칸에 요청 크기가 늘 표시됩니다."
280
+ : "켰습니다. 다음 statusline 갱신부터 8MB 이상이면 ctx 옆에 payload가 표시됩니다.";
257
281
  const after = insertBlock(src.replace(BLOCKS, ""), moduleUrl(o.hudFile));
258
282
  return commit(o.hudFile, src, after, done + notShownNote(o), () => syncModule(o));
259
283
  }
@@ -292,8 +316,12 @@ export function turnOff(opts = {}) {
292
316
  return res;
293
317
  }
294
318
 
295
- // "현재 세션: 0.8MB / 32MB (2%), 8MB부터 표시" for the session that runs this, "" if unknown.
296
- function sessionEstimate(o) {
319
+ // The estimate for the session that runs this, "" if unknown, ending with where
320
+ // it shows when `where` names it:
321
+ // "현재 세션: 0.8MB / 32MB (2%), PL 칸에 늘 표시" (wrapper v4, on)
322
+ // "현재 세션: 0.8MB / 32MB (2%), 8MB부터 표시" (older wrappers, on)
323
+ // "현재 세션: 0.8MB / 32MB (2%)" (off, or no module copy)
324
+ function sessionEstimate(o, where) {
297
325
  if (!o.sessionId || !existsSync(o.projectsDir)) return "";
298
326
  const file = `${o.sessionId}.jsonl`;
299
327
  const project = readdirSync(o.projectsDir).find((d) => existsSync(join(o.projectsDir, d, file)));
@@ -301,7 +329,7 @@ function sessionEstimate(o) {
301
329
  try {
302
330
  const bytes = estimatePayloadBytes(join(o.projectsDir, project, file), o.cacheDir);
303
331
  const pct = Math.floor((bytes / REQUEST_LIMIT_BYTES) * 100);
304
- return `현재 세션: ${(bytes / MB).toFixed(1)}MB / 32MB (${pct}%), ${SHOW_FROM_BYTES / MB}MB부터 표시`;
332
+ return `현재 세션: ${(bytes / MB).toFixed(1)}MB / 32MB (${pct}%)` + (where ? `, ${where}` : "");
305
333
  } catch {
306
334
  return "";
307
335
  }
@@ -337,7 +365,9 @@ export function status(opts = {}) {
337
365
  const lines = [`payload-mon: ${describe(o)} (${o.hudFile})`];
338
366
  const note = notShownNote(o);
339
367
  if (note) lines.push(note.trim());
340
- const estimate = sessionEstimate(o);
368
+ // null when the wrapper is missing or unreadable; describe has already said which.
369
+ const src = readBytes(o.hudFile)?.toString("utf8") ?? null;
370
+ const estimate = sessionEstimate(o, displayWhere(o, src));
341
371
  if (estimate) lines.push(estimate);
342
372
  return { ok: true, message: lines.join("\n") };
343
373
  }
@@ -1,73 +1,134 @@
1
1
  ---
2
2
  name: setup-omc-hud
3
- description: "Claude Code 의 상태표시줄 omc_hud 를 OS별 적용 스크립트로 설치하고, Claude Code 갱신 안내를 줄 맨 끝으로 옮김. Codex 는 OMX 의 `hud` 스킬을 씀. 'setup-omc-hud'/'omc_hud 설치'/'Claude 갱신 안내 위치' 또는 `/banker:setup` 시 사용."
3
+ description: "Claude Code 상태표시줄 omc_hud 래퍼를 스킬에 든 파일로 설치. 내려받지 않고 오프라인에서 모든 OS 같은 명령으로 동작하며, PL 칸에 쓰는 payload-mon 모듈도 켬. Codex 는 OMX 의 `hud` 스킬을 씀. 'setup-omc-hud'/'omc_hud 설치'/'상태표시줄 설치' 또는 `/banker:setup` 시 사용."
4
4
  argument-hint: "[off|status]"
5
5
  ---
6
6
 
7
- # setup-omc-hud — omc_hud 상태표시줄 설치 (OS별)
7
+ # setup-omc-hud: omc_hud 상태표시줄 설치 (오프라인)
8
8
 
9
- `smallOpenSource/omc_hud` 의 apply 스크립트를 OS에 맞게 내려받아 적용한다. `wget` 없으면 `curl`로 폴백. 답변은 한글.
9
+ 이 스킬 폴더의 `assets/` 에 든 파일로 상태표시줄 래퍼 v4 를 설치한다. 답변은 한글.
10
10
 
11
- **런타임:** omc_hud 는 Claude Code 상태표시줄(`~/.claude/settings.json` statusLine) 대상이다. **Codex 런타임에선 oh-my-codex(OMX)가 자체 `hud` 스킬/구성을 제공**하므로, Codex에선 이 스킬 대신 OMX 의 `hud` 를 사용한다.
11
+ - 내려받는 것이 없다. 네트워크가 없어도 끝까지 된다.
12
+ - Windows, Linux, macOS 모두 `node` 명령 하나로 같은 절차를 밟는다.
13
+ - 설치 파일: `apply-hud.mjs`(설치 스크립트), `omc-hud-custom.mjs`(래퍼 v4), `hud-config.json`(HUD 설정), `LICENSE-omc_hud`(원본 omc_hud 의 MIT 라이선스)
12
14
 
13
- **인자가 `off` 또는 `status` 일 때:** 0~3단계를 건너뛰고 3단계의 Claude 갱신 안내 스크립트만 그 인자로 실행해 결과를 보고한다(`off` 는 안내를 래퍼가 정한 자리로 되돌림, `status` 는 상태만 확인).
15
+ **런타임:** Claude Code 상태표시줄(`<설정 폴더>/settings.json` 의 `statusLine`)이 대상이다. Codex 런타임에서는 oh-my-codex(OMX)가 자체 `hud` 스킬을 주므로 이 스킬 대신 OMX 의 `hud` 를 쓴다.
16
+
17
+ **인자가 `off` 또는 `status` 일 때:** 0~3단계를 건너뛰고 "인자 off, status" 절만 실행한다.
18
+
19
+ ## 표시 형식
20
+
21
+ ```
22
+ <model>/<effort>|5h:<pct>/<reset>|wk:<pct>/<reset>|<mm>:<pct>/<reset>|think|PL:<mb>M|se:<hours>h|ctx:<pct>%|🤖<agents>|🔧<tools>|⚡<skills>|<cwd>|<account>|<branch>|claude<cur>→<new>
23
+ <에이전트 목록, 경고 같은 상세 줄>
24
+ ```
25
+
26
+ | 변수 | 뜻 | 예 | 나오는 조건 |
27
+ |---|---|---|---|
28
+ | `<model>` | 모델 이름 앞 2글자와 버전 | `Op5.5` | 항상 |
29
+ | `<effort>` | 추론 강도 | `high` | Claude Code 가 넘기거나 OMC 가 effort 칸을 낼 때 |
30
+ | `<pct>`, `<reset>` | 사용률과 초기화까지 남은 시간 | `96%`, `1h5m` | 사용량 정보가 있을 때 |
31
+ | `<mm>` | 모델별 사용량의 모델 이름 앞 2글자 | `Fa` | OMC 가 모델별 사용량을 낼 때 |
32
+ | `think` | 확장 사고 표시 | `think` | 확장 사고가 켜져 있을 때 |
33
+ | `<mb>` | 요청 크기 추정치(MB, 소수 1자리) | `0.5` | payload-mon 모듈이 있을 때 |
34
+ | `<hours>` | 세션 시간(시간, 소수 1자리) | `0.7` | 항상 |
35
+ | `ctx:<pct>%` | 대화 맥락 사용률 | `ctx:12%` | OMC 가 ctx 를 낼 때 |
36
+ | `<agents>` | 이 세션의 에이전트 호출 수 | `1` | 1 이상일 때 |
37
+ | `<tools>` | 도구 호출 수 | `14` | 1 이상일 때 |
38
+ | `<skills>` | 스킬 호출 수 | `3` | 1 이상일 때 |
39
+ | `<cwd>` | 작업 폴더 | `/home/user/project` | 항상 |
40
+ | `<account>` | 로그인 계정 이메일의 `@` 앞부분 | `user` | `.claude.json` 에 이메일이 있을 때 |
41
+ | `<branch>` | git 브랜치 | `main` | git 저장소 안일 때 |
42
+ | `<cur>`, `<new>` | 지금 Claude Code 판과 새 판 | `2.1.300`, `2.1.302` | 새 판이 있을 때. 지금 판을 모르면 `claude→<new>` |
43
+
44
+ - 조건이 맞지 않는 칸은 구분자 `|` 와 함께 빠진다.
45
+ - 색
46
+ - `%` 는 70% 미만 초록, 85% 미만 노랑, 그 이상 분홍(256색 213)
47
+ - `<mb>` 는 32MB 대비 같은 기준
48
+ - OMC 는 ctx 가 80% 를 넘으면 뒤에 `COMPRESS?`, `CRITICAL` 을 붙인다. 래퍼는 이 글자를 빼고 색으로만 보인다.
49
+ - ralph, autopilot, `agents:<n>`(실행 중인 에이전트) 같은 OMC 상태 칸은 활성일 때만 `⚡<skills>` 와 `<cwd>` 사이에 흐리게 나온다.
50
+ - 화면 폭을 넘으면 칸 사이에서 다음 줄로 넘어간다.
51
+ - 둘째 줄부터는 OMC 의 상세 줄(에이전트 목록, todo, 경고)이다. OMC 와 Claude Code 의 갱신 안내 줄은 뺀다.
52
+ - 첨부 HUD 설정은 OMC 출력을 8줄까지 둔다. 넘으면 OMC 가 상세 줄을 `... (+N lines)` 한 줄로 접는다.
14
53
 
15
54
  ## 0. 감지
55
+
56
+ - `node -v` 로 Node 18 이상인지 본다. OMC 5.7.4 는 Node 20 이상을 적는다.
57
+ - 설정 폴더는 `$CLAUDE_CONFIG_DIR`, 없으면 `~/.claude` 다.
58
+ - OMC 가 설치돼 있어야 한다. 없으면 1단계가 멈추고 알린다.
59
+
60
+ ## 1. 적용
61
+
62
+ 모든 OS 에서 같은 명령이다.
63
+
64
+ bash, zsh:
16
65
  ```bash
17
- case "$(uname -s)" in Darwin) OS=mac;; Linux) OS=linux;; *) OS=windows;; esac; echo "OS=$OS"
18
- command -v wget >/dev/null && echo "dl=wget" || { command -v curl >/dev/null && echo "dl=curl" || echo "dl=none(설치 필요)"; }
19
- # 적용 스크립트가 래퍼를 덮어쓰면 payload-mon 표시 블록이 빠진다. 지금 켜져 있는지 기억해 둔다(3단계에서 사용).
20
- HUD_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hud/omc-hud-custom.mjs"
21
- grep -qF '// >>> payload-mon >>>' "$HUD_FILE" 2>/dev/null && echo "payload-mon=on" || echo "payload-mon=off"
66
+ node "<이 스킬 디렉터리 절대경로>/assets/apply-hud.mjs"
22
67
  ```
23
- Windows(PowerShell)에서는 같은 확인을 이렇게 한다:
68
+
69
+ PowerShell:
24
70
  ```powershell
25
- $cfg = if ($env:CLAUDE_CONFIG_DIR) { $env:CLAUDE_CONFIG_DIR } else { "$env:USERPROFILE\.claude" }
26
- if (Select-String -Quiet -SimpleMatch -LiteralPath "$cfg\hud\omc-hud-custom.mjs" -Pattern '// >>> payload-mon >>>' -ErrorAction SilentlyContinue) { "payload-mon=on" } else { "payload-mon=off" }
71
+ node "<이 스킬 디렉터리 절대경로>\assets\apply-hud.mjs"
27
72
  ```
28
73
 
29
- ## 1. mac / linux — apply 스크립트 적용
74
+ - `[ok] statusLine -> node "<설정 폴더>/hud/omc-hud-custom.mjs"` 줄을 확인한다.
75
+ - 기존 statusLine 이 다른 명령이었으면 `[..] statusLine ran ...` 줄이 나온다. 보고에 그대로 넣는다.
76
+ - 종료 코드 1 이면 출력의 `[x]` 줄을 그대로 보고하고 멈춘다. 이때 바뀐 파일은 없다.
77
+ - `settings.json` 이 JSON 객체가 아니면 사용자가 고친 뒤 다시 실행한다.
78
+ - OMC 가 없으면 OMC 를 먼저 설치한다(`setup-omc` 스킬). 이 스킬은 OMC 를 설치하지 않는다.
79
+ - 설정 폴더 경로에 셸이 해석하는 글자가 있으면 그 글자가 없는 폴더를 쓰게 안내한다.
80
+ - 쓸 수 없는 파일이나 폴더가 있으면 권한을 고친 뒤 다시 실행한다.
81
+ - 종료 코드 2 면 예기치 못한 오류로 중간에 멈춘 것이다. 출력을 그대로 보고하고, 바뀐 파일의 이전 판은 `<파일>.backup.<시각>` 에 있다고 알린다.
82
+
83
+ ## 2. payload-mon 켜기
84
+
85
+ 이전 상태와 상관없이 늘 실행한다.
86
+
30
87
  ```bash
31
- RAW=https://raw.githubusercontent.com/smallOpenSource/omc_hud/refs/heads/main
32
- mkdir -p ~/dummy && cd ~/dummy
33
- script=$([ "$OS" = mac ] && echo apply-hud-macos.sh || echo apply-hud-linux.sh)
34
- for f in "$script" apply-hud.mjs hud-config.json omc-hud-custom.mjs; do
35
- if command -v wget >/dev/null; then wget -q "$RAW/$f"; else curl -fsSLO "$RAW/$f"; fi
36
- done
37
- chmod +x "$script" && "./$script"
38
- rm -f "$script" apply-hud.mjs hud-config.json omc-hud-custom.mjs # 정리
39
- cd - >/dev/null
88
+ node "<이 스킬 디렉터리 절대경로>/../payload-mon/scripts/payload-mon.mjs" on
40
89
  ```
41
90
 
42
- ## 2. windows
43
- `wget`이 없는 경우가 많아 **프로젝트 통째로 받아 적용**한다:
44
- ```powershell
45
- # git 있으면
46
- git clone https://github.com/smallOpenSource/omc_hud.git "$env:TEMP\omc_hud"; cd "$env:TEMP\omc_hud"
47
- # 저장소의 windows 적용 스크립트(apply-hud-*.ps1/.cmd) 또는 `node apply-hud.mjs` 안내를 따른다.
91
+ - Codex 사본에서 실행할 때 경로는 `<이 스킬 디렉터리 절대경로>/../banker-payload-mon/scripts/payload-mon.mjs` 다.
92
+ - 이유: `PL:` 칸은 payload-mon 이 래퍼 옆(`hud/payload-mon/`)에 두는 크기 계산 모듈을 쓴다. 모듈이 없으면 `PL:` 이 나오지 않는다.
93
+ - 출력 `켰습니다. 다음 statusline 갱신부터 PL 칸에 요청 크기가 늘 표시됩니다.` 를 확인한다. `이미 켜져 있습니다`, `모듈 사본을 이 버전으로 맞췄습니다` 도 정상이다.
94
+
95
+ ## 3. 보고
96
+
97
+ - 1단계 출력의 statusLine 줄과 백업 경로
98
+ - 2단계 결과
99
+ - statusLine 이 바뀌었으면 Claude Code 재시작 안내
100
+
101
+ ## 인자 off, status
102
+
103
+ 옛 래퍼(v3)에 넣었던 Claude 갱신 안내 블록(`claude-update-last`)을 다룬다. v4 래퍼는 갱신 안내를 직접 줄 맨 끝에 두므로 새 설치에는 이 블록이 필요 없다.
104
+
105
+ ```bash
106
+ node "<이 스킬 디렉터리 절대경로>/scripts/claude-update-last.mjs" off
48
107
  ```
49
- git 없으면 GitHub "Download ZIP" → 해제 → 동봉 적용 스크립트 실행.
50
-
51
- ## 3. 검증·보고
52
- - 적용 스크립트가 `~/.claude/settings.json` 의 statusLine 등을 갱신했는지(스크립트 출력 확인).
53
- - HUD는 **다음 프롬프트/세션**부터 반영될 수 있음 → 안 보이면 재시작 안내.
54
- - `~/dummy` 임시파일 정리 확인. 이미 적용돼 있으면 재적용 불필요.
55
- - **payload-mon 복구**: 0단계에서 `payload-mon=on` 이었다면, 적용 스크립트가 래퍼를 덮어써 payload 표시 블록이 빠진 상태다.
56
- payload-mon 스킬(Claude Code `/banker:payload-mon`, Codex `banker-payload-mon`)을 `on` 으로 실행해 다시 켜고, 그 결과를 함께 보고한다.
57
- `payload-mon=off` 였다면 아무것도 하지 않는다(사용자가 켠 적 없는 기능을 켜지 않는다).
58
- - **Claude 갱신 안내 위치**: payload-mon 처리 뒤에 이 스킬의 스크립트를 `on` 으로 실행한다. 재적용을 건너뛴 경우에도 실행하고, Windows 도 같은 명령이다.
59
- ```bash
60
- node "<이 스킬 디렉터리 절대경로>/scripts/claude-update-last.mjs" on
61
- ```
62
- 새 Claude Code 가 나오면 OMC 가 띄우는 `[Claude#2.1.288] -> 2.1.289 claude update` 를 상태표시줄 1번째 줄 맨 끝(OMC 표시 뒤)으로 옮긴다. 2번째 줄의 `[!] claude 2.1.289 - paste: ! claude update` 안내는 그대로 둔다.
63
- 출력을 그대로 보고한다. 종료 코드 1(거부)이면 래퍼는 바뀌지 않았으니 이유만 보고하고, 2(예기치 못한 오류로 중간에 멈춤)면 `status` 결과를 함께 보고한다.
64
- 되돌리기는 `off`, 상태 확인은 `status`.
108
+
109
+ - `off` 는 블록을 뺀다. `status` 는 상태만 본다.
110
+ - 출력을 그대로 보고한다. 종료 코드 1(거부)이면 래퍼는 바뀌지 않았으니 이유만 보고한다.
111
+ - 종료 코드 2(예기치 못한 오류로 중간에 멈춤)면 `status` 결과를 함께 보고한다.
65
112
 
66
113
  ## 함정
67
- - `curl` 다운로드는 **대문자 `-O`**(원격 파일명 유지). 소문자 `-o`는 출력명 지정이라 다름.
68
- - raw URL 의 `refs/heads/main` 브랜치명이 바뀌면 404 → 저장소 확인.
69
- - `.mjs` 적용은 Node 필요(`node -v`).
70
- - `claude-update-last` 를 `off` 로 꺼 두었어도 이 스킬을 다시 실행하면 3단계에서 다시 켜진다. 래퍼가 정한 자리를 원하면 끝난 뒤 `off`.
71
- - 블록은 OMC 의 안내 문구(`[Claude#X] -> Y claude update`)로 안내를 찾는다. OMC 가 문구를 바꾸면 안내는 래퍼가 정한 자리에 남고, 상태표시줄은 깨지지 않는다.
72
- - 블록은 래퍼가 세그먼트를 합치는 줄에서 `segs`·`colored` 를 읽는다. 래퍼 구조가 바뀌어 그 줄에서 이 이름이 보이지 않으면 `on` 은 성공해도 효과가 없다(상태표시줄은 그대로). 새 Claude Code 가 나왔을 때 안내가 맨 끝에 오는지로 확인한다.
73
- - 이 블록은 플러그인 밖(`~/.claude/hud/`)에 남는다. 플러그인을 지우기 전에 `off` 를 실행한다.
114
+
115
+ - 다시 설치하면 래퍼와 `hud-config.json` 을 첨부 파일로 덮어쓴다. 손으로 고친 내용은 `.backup.<시각>` 에만 남는다.
116
+ - `settings.json` 의 `omcHud` 값은 `hud-config.json` 의 같은 키를 덮어쓴다. 래퍼가 기대는 아래 키를 바꾸면 칸이 달라지거나 OMC 원문이 그대로 나온다.
117
+ - `omcLabel`, `useBars`
118
+ - `maxWidth`, `maxOutputLines`
119
+ - `showCallCounts`, `callCountsFormat`
120
+ - `contextBar`, `gitBranch`
121
+ - `payload-mon off` 를 실행하면 크기 계산 모듈이 지워져 `PL:` 칸도 사라진다. 다시 보려면 `payload-mon on`.
122
+ - v4 에서 payload-mon 블록은 모듈을 깔기 위해서만 남는다. 갱신마다 크기 추정이 두 번 돌지만 두 번째는 캐시를 쓴다.
123
+ - 래퍼를 손으로 고칠 때 `if (f.ctx) colored.push(colorCtx(f.ctx));` 줄을 지우지 않는다. 실행상 비어 있지만 `payload-mon on` 이 이 줄 바로 뒤에 블록을 넣는다.
124
+ - 래퍼는 statusLine 프로세스가 받은 터미널 폭(stderr, stdout 의 `columns`, 그다음 `COLUMNS`)으로 줄을 접는다. 폭을 받지 못하면 한 줄로 나오고 Claude Code 가 끝을 자른다.
125
+ - Claude Code 는 자기 화면이 터미널이면 그 폭과 높이를 `COLUMNS`, `LINES` 로 넘긴다(2.1.303 에서 확인). 그래서 보통은 접힌다.
126
+ - 분홍은 256색 코드다. 256색을 못 쓰는 터미널에서는 기본 색으로 보인다.
127
+ - statusLine 은 PATH 의 `node` 를 쓴다. GUI 로 띄운 Claude Code(macOS Dock, VS Code 확장)는 PATH 에 `/opt/homebrew/bin` 같은 폴더가 빠질 수 있다(추정). 상태표시줄이 안 나오면 PATH 를 확인한다.
128
+ - 설정 폴더 경로에 `"`, 백틱, `$`, `%`, `\`, 줄바꿈이 있으면 설치 스크립트가 거부한다. statusLine 명령의 큰따옴표 안에서도 셸이 이 글자를 해석해, 명령이 깨지거나 경로 속 명령이 실행되기 때문이다.
129
+ - 기존 statusLine 의 다른 필드(`padding`, `refreshInterval` 등)는 그대로 둔다. 다른 래퍼(smart-compact 등)가 감싼 명령은 이 래퍼의 명령으로 바뀐다. 이전 값은 `settings.json` 백업에 있다.
130
+ - 갱신 안내는 OMC 의 문구 `[Claude#<cur>] -> <new> claude update` 로 찾는다. OMC 가 문구를 바꾸면 줄이지 못하고 원문이 경로 앞 칸에 남는다. 상태표시줄은 깨지지 않는다.
131
+ - `[!] omc <ver> - paste: ` 와 `[!] claude <new> - paste: ` 로 시작하는 갱신 안내 줄은 뺀다. OMC 가 이 문구를 바꾸면 다시 보인다.
132
+ - 설치는 네트워크를 쓰지 않는다. 다만 OMC 가 렌더할 때 네트워크로 얻는 정보(새 Claude Code 판 같은)는 오프라인에서 빠질 수 있다.
133
+ - 래퍼, HUD 설정, 모듈 사본은 플러그인 밖(`<설정 폴더>/hud/`, `<설정 폴더>/.omc/`)에 있다. 플러그인을 지워도 상태표시줄은 남는다.
134
+ - OMC 를 지울 때는 statusLine 도 지운다. OMC 로더는 플러그인을 못 찾으면 작업 폴더의 `node_modules` 에서 OMC HUD 를 찾아 불러오기 때문이다.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 smallOpenSource
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.