@kaydash9999/banker-plugins 0.21.0 → 0.22.0
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 +28 -0
- package/PRIVACY.md +7 -3
- package/README.md +41 -4
- package/bin/banker.js +38 -12
- package/bin/lib/codex-hooks.mjs +7 -2
- package/bin/lib/codex-routes.mjs +112 -0
- package/bin/lib/command-skill.cjs +19 -0
- package/bin/lib/telemetry-config.mjs +2 -1
- package/codex/command-skills/front-qa/SKILL.md +56 -0
- package/codex/command-skills/setup/SKILL.md +87 -0
- package/codex/hooks.json +29 -0
- package/codex/skills/graceful-pause/SKILL.md +2 -2
- package/commands/setup.md +2 -2
- package/hooks/telemetry-count-codex.mjs +112 -25
- package/hooks/update-notify.mjs +82 -11
- package/package.json +1 -1
- package/skills/3d-intro-build/references/verify-intro.mjs +15 -1
- package/skills/anti-drm/SKILL.md +1 -1
- package/skills/anti-drm/scripts/instruction-toggle.mjs +57 -4
- package/skills/arch-diagram/build_pptx_template.py +47 -28
- package/skills/audit-web-page/SKILL.md +1 -1
- package/skills/audit-web-page/harness.py +0 -1
- package/skills/lineage/lineage.py +1435 -533
- package/skills/motion-graphic-make/SKILL.md +1 -1
- package/skills/obsidizer/SKILL.md +20 -5
- package/skills/payload-mon/SKILL.md +1 -1
- package/skills/play-qa/SKILL.md +1 -1
- package/skills/ralph-qa/SKILL.md +1 -1
- package/skills/remains/SKILL.md +1 -1
- package/skills/rfp-author/scripts/md2docx.py +63 -34
- package/skills/setup-bypass-permissions/SKILL.md +2 -2
- package/skills/setup-bypass-permissions/scripts/fallback/bypass-permissions.py +66 -15
- package/skills/smart-compact/SKILL.md +1 -1
- package/skills/smart-compact/scripts/codex-gate.mjs +2 -1
- package/skills/theme-selection/SKILL.md +1 -1
- package/skills/tone-compact/SKILL.md +1 -1
- package/skills/tone-compact/scripts/instruction-toggle.mjs +57 -4
- package/skills/ultra-chain/SKILL.md +2 -2
- package/skills/ultra-ui-qa/SKILL.md +1 -1
- package/skills/update-banker/SKILL.md +31 -6
- package/skills/vertical-pptx/SKILL.md +1 -1
- package/skills/vertical-pptx/build_a4p.js +20 -2
- package/skills/vertical-pptx/build_a4p.py +560 -359
|
@@ -13,8 +13,10 @@ banker 는 서로 다른 메커니즘의 채널 3개로 설치되고, 그 채널
|
|
|
13
13
|
**런타임:** 축은 OS 가 아니라 **채널**이다. banker 는 dependencies 0 이고 설치가 파일 복사라 OS 분기가 사실상 없다.
|
|
14
14
|
|
|
15
15
|
- **Claude Code**: 플러그인 채널이 있다. 갱신 동사는 `claude plugin update`, 관측 지점은 `~/.claude/plugins/installed_plugins.json`.
|
|
16
|
-
- **Codex CLI**:
|
|
17
|
-
-
|
|
16
|
+
- **Codex CLI**: 설치 길이 둘이다. 갱신 방법이 다르다.
|
|
17
|
+
- npm 길(`banker setup --codex`, 스킬 `$banker-<이름>`): npm 갱신 후 `banker setup --codex` 를 다시 돌린다. 이건 파괴적이다.
|
|
18
|
+
- 플러그인 길(`codex plugin add banker@banker-plugins`, 스킬 `$banker:<이름>`): `codex plugin` 에 update 동사는 없지만 `codex plugin marketplace upgrade banker-plugins` 가 GitHub 의 새 판을 받아 설치된 플러그인도 바꾼다. Codex 는 세션을 시작할 때도 스스로 올린다(0.144.5 실측). 파괴적이지 않고 npm 과 무관하다.
|
|
19
|
+
- **양쪽 공통**: npm 전역 CLI 채널. 이게 Codex npm 길의 **상류**라 언제나 먼저다. Codex 플러그인 길의 상류는 GitHub 저장소라 npm 게이트를 받지 않는다.
|
|
18
20
|
- 이 스킬은 `target: both` 다. Codex 런타임에 `claude` 가 없거나 Claude 런타임에 `codex` 가 없는 것은 **정상 경로**다. 채널 부재는 스킵이지 에러가 아니다.
|
|
19
21
|
- **"채널 부재" 는 두 가지다.** (a) 런타임이 없다(`command -v claude` 실패), (b) 런타임은 있는데 **banker 플러그인이 설치돼 있지 않다.** `command -v` 는 (a) 만 잡는다. Codex 주력 + Claude Code 설치됨 + banker 플러그인 미설치인 머신이 실재하고, 거기서 (b) 를 스킵으로 처리하지 않으면 프로브가 예외로 죽는다. 둘 다 스킵이다.
|
|
20
22
|
|
|
@@ -37,7 +39,10 @@ banker 는 서로 다른 메커니즘의 채널 3개로 설치되고, 그 채널
|
|
|
37
39
|
|---|---|---|---|
|
|
38
40
|
| Claude 플러그인 | 마켓플레이스 등록 후 플러그인 설치 | `claude plugin update banker@banker-plugins` | `~/.claude/plugins/installed_plugins.json` |
|
|
39
41
|
| npm 전역 CLI | npm 레지스트리에서 전역 prefix 로 설치 | `npm i -g @kaydash9999/banker-plugins@latest` | `banker --version` |
|
|
40
|
-
| Codex | npm 패키지에서 `~/.codex/skills` **와 `~/.codex/prompts`** 로 복사 | `banker setup --codex` | `ls ~/.codex/skills` **와** `ls ~/.codex/prompts` |
|
|
42
|
+
| Codex (npm 길) | npm 패키지에서 `~/.codex/skills` **와 `~/.codex/prompts`** 로 복사 | `banker setup --codex` | `ls ~/.codex/skills` **와** `ls ~/.codex/prompts` |
|
|
43
|
+
| Codex (플러그인 길) | GitHub 마켓플레이스 스냅샷을 `~/.codex/plugins/cache/banker-plugins/banker/<판>/` 에 둠 | `codex plugin marketplace upgrade banker-plugins` | `ls ~/.codex/plugins/cache/banker-plugins/banker/` |
|
|
44
|
+
|
|
45
|
+
`CODEX_HOME` 이 있으면 `~/.codex` 대신 그 폴더다. Codex 의 두 길을 함께 두면 스킬이 `$banker-<이름>` 과 `$banker:<이름>` 으로 겹치고 훅도 두 번 돈다. 둘 다 보이면 보고에 적고 하나만 두라고 안내한다(npm 길 빼기 `banker uninstall --codex`, 플러그인 빼기 `codex plugin remove banker@banker-plugins`). 이 스킬이 대신 지우지는 않는다.
|
|
41
46
|
|
|
42
47
|
세 채널은 다른 갱신 동사를 쓰고 각자의 값을 가진다. 한 채널을 갱신해도 나머지는 그대로다. 실제로 세 값이 모두 다른 상태가 관측된다.
|
|
43
48
|
|
|
@@ -75,6 +80,7 @@ in15 sh -c 'cd ~ && exec npm ping --fetch-retries=0 --fetch-timeout=10000 --no-u
|
|
|
75
80
|
command -v claude >/dev/null && echo "claude: present" || echo "claude: absent (Claude 채널 스킵)"
|
|
76
81
|
command -v codex >/dev/null && echo "codex: present" || echo "codex: absent (Codex 채널 스킵)"
|
|
77
82
|
command -v banker >/dev/null && banker --version || echo "banker: absent"
|
|
83
|
+
command -v codex >/dev/null && in15 codex plugin list 2>/dev/null | grep -E '^banker@[^ ]+ +installed, enabled' || echo "codex plugin: absent (플러그인 길 스킵)" # 켜진 banker@<마켓플레이스>와 판
|
|
78
84
|
[ "$P" = 0 ] && (cd ~ && npm view @kaydash9999/banker-plugins version --fetch-retries=0 --fetch-timeout=10000)
|
|
79
85
|
```
|
|
80
86
|
|
|
@@ -162,6 +168,18 @@ banker setup --codex --dry-run | grep -E '→ [0-9]+ skills'
|
|
|
162
168
|
- `--scope project` 는 `./.codex` 를 대상으로 한다. 기본은 `user`(`~/.codex`).
|
|
163
169
|
- 스킬은 `~/.codex/skills/banker-<name>/` 으로, 커맨드는 `~/.codex/prompts/banker-<name>.md` 로 설치된다. 스킬은 프론트매터 name 이 디렉터리명과 일치하도록 재작성된다. `~/.codex/AGENTS.md` 는 건드리지 않는다.
|
|
164
170
|
|
|
171
|
+
### 3b. Codex 플러그인 길
|
|
172
|
+
`codex plugin: absent` 면 스킵이다. 0단계가 보인 `banker@<마켓플레이스>` 의 마켓플레이스 이름을 아래 `banker-plugins` 자리에 쓴다. 이 길은 npm 게이트를 받지 않는다(상류가 GitHub 다). 지우고 다시 복사하지 않으므로 dry-run 단계가 없다.
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
codex plugin marketplace upgrade banker-plugins
|
|
176
|
+
ls "${CODEX_HOME:-$HOME/.codex}/plugins/cache/banker-plugins/banker/"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
- 설치된 플러그인 폴더가 새 판 이름으로 바뀌면 전진이다(옛 판 폴더는 Codex 가 지운다). 반영은 Codex 를 다시 연 뒤다.
|
|
180
|
+
- 마켓플레이스 이름이 다르면(`codex plugin marketplace list` 로 확인) 그 이름을 쓴다.
|
|
181
|
+
- 훅 신뢰는 명령 글에 묶여 있어 판이 바뀌어도 대개 그대로다. `/hooks` 에 banker 훅이 신뢰 필요로 보이면 그 사실만 보고한다.
|
|
182
|
+
|
|
165
183
|
### 4. 검증 (보고 의무)
|
|
166
184
|
**exit code 로 판정하지 마라.** `claude plugin install` 이 아무것도 안 하고 exit 0 을 주는 것이 정확히 그 이유다.
|
|
167
185
|
판정은 0단계와 **동일한 3-프로브를 재실행**해 before/after 를 비교하는 것으로만 한다.
|
|
@@ -195,9 +213,15 @@ console.log('manifest skills:',n('skill'));console.log('manifest commands:',n('c
|
|
|
195
213
|
|
|
196
214
|
보조로 `banker doctor` 가 디스크 카운트와 매니페스트 카운트를 나란히 찍어준다. **다만 프롬프트 카운트가 없어 프로브 3 을 대체하지 못한다.** 스킬 축의 교차 확인용으로만 쓴다.
|
|
197
215
|
|
|
216
|
+
프로브 4, Codex 플러그인 길(판 폴더 이름이 설치된 판이다):
|
|
217
|
+
```bash
|
|
218
|
+
ls "${CODEX_HOME:-$HOME/.codex}/plugins/cache/banker-plugins/banker/" 2>/dev/null || echo "absent (플러그인 길 미설치 -> 스킵)"
|
|
219
|
+
```
|
|
220
|
+
|
|
198
221
|
보조 프로브(디스크 상태가 아니라 런타임이 실제로 발견한 표면을 본다. 인증 불필요):
|
|
199
222
|
```bash
|
|
200
|
-
codex debug prompt-input </dev/null | grep -oE 'banker-[a-z0-9_-]+' | sort -u | wc -l
|
|
223
|
+
codex debug prompt-input </dev/null | grep -oE 'banker-[a-z0-9_-]+' | sort -u | wc -l # npm 길
|
|
224
|
+
codex debug prompt-input </dev/null | grep -oE 'banker:[a-z0-9_-]+' | sort -u | wc -l # 플러그인 길
|
|
201
225
|
```
|
|
202
226
|
|
|
203
227
|
보고 형식(채널별 before 에서 after 로. 아래는 예시):
|
|
@@ -206,6 +230,7 @@ Claude 플러그인 : 0.6.0 -> 0.7.0 전진
|
|
|
206
230
|
npm 전역 CLI : 0.2.0 -> 0.7.0 전진
|
|
207
231
|
Codex skills : 41 -> 48 (매니페스트 48) 전진
|
|
208
232
|
Codex prompts : 2 -> 2 (매니페스트 2) 유지
|
|
233
|
+
Codex 플러그인 : 0.6.0 -> 0.7.0 전진
|
|
209
234
|
```
|
|
210
235
|
|
|
211
236
|
- **Codex 는 skills 와 prompts 를 반드시 두 줄로 적는다.** 한 줄로 뭉개면 프롬프트 소실이 보고에서 사라진다.
|
|
@@ -248,5 +273,5 @@ Codex prompts : 2 -> 2 (매니페스트 2) 유지
|
|
|
248
273
|
|
|
249
274
|
ARGUMENTS: [--check] [--claude|--npm|--codex] (없으면 3채널 전부: 관측 → npm 게이트 → 나머지 채널 → 3-프로브 검증)
|
|
250
275
|
- `--check`: 아무것도 변경하지 않는다. 0단계 관측 + 4단계 프로브만 돌려 채널별 드리프트를 보고한다.
|
|
251
|
-
- `--claude` / `--npm` / `--codex`: 해당 채널만 갱신한다.
|
|
252
|
-
- 단 `--codex` 단독이어도 1단계 게이트(`banker --version` == `npm view ...`)
|
|
276
|
+
- `--claude` / `--npm` / `--codex`: 해당 채널만 갱신한다. `--codex` 는 Codex 의 두 길 중 설치된 것을 모두 갱신한다.
|
|
277
|
+
- 단 `--codex` 단독이어도 npm 길을 갱신하기 전에는 1단계 게이트(`banker --version` == `npm view ...`)를 **반드시** 확인한다. 불일치면 npm 갱신을 먼저 제안하고 확인받는다. 게이트 없는 npm 길 갱신은 없다. 플러그인 길만 설치돼 있으면 게이트 없이 3b 만 한다.
|
|
@@ -215,7 +215,7 @@ macOS 와 Linux 에서는 대체 폰트로 치환되고, 치환되면 글자 폭
|
|
|
215
215
|
|
|
216
216
|
```
|
|
217
217
|
--font <이름> → BANKER_PPTX_FONT → meta.font →
|
|
218
|
-
Noto Sans CJK KR → Malgun Gothic → Apple SD Gothic Neo → NanumGothic → 시스템 한국어 sans
|
|
218
|
+
Noto Sans CJK KR → Noto Sans KR → Malgun Gothic → Apple SD Gothic Neo → AppleGothic → NanumGothic → 시스템 한국어 sans
|
|
219
219
|
```
|
|
220
220
|
|
|
221
221
|
명시한 이름(`--font`·환경변수·`meta.font`)이 해석되지 않으면 `FONT_NOT_FOUND` 경고를 남기고 다음으로 내려간다. 조용히 바꾸지 않는다.
|
|
@@ -542,14 +542,22 @@ function fontWeightRank(flat) {
|
|
|
542
542
|
return 1;
|
|
543
543
|
}
|
|
544
544
|
|
|
545
|
+
// 파일명 탐색에 쓰는 조각. 힌트 표에 없는 이름(constructor 처럼 Object 가 물려받은 이름 포함)은 정리한 이름 하나.
|
|
546
|
+
function fontHints(name) {
|
|
547
|
+
const key = String(name).toLowerCase();
|
|
548
|
+
return (Object.prototype.hasOwnProperty.call(FONT_FILE_HINTS, key) ? FONT_FILE_HINTS[key] : [normName(name)]).filter(Boolean);
|
|
549
|
+
}
|
|
550
|
+
|
|
545
551
|
function globFontFile(name) {
|
|
546
|
-
const hints =
|
|
552
|
+
const hints = fontHints(name);
|
|
553
|
+
if (!hints.length) return null;
|
|
547
554
|
let budget = 20000;
|
|
548
555
|
const found = [];
|
|
549
556
|
const walk = (dir, depth) => {
|
|
550
557
|
if (depth > 6 || budget <= 0) return;
|
|
551
558
|
let entries;
|
|
552
559
|
try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch (e) { return; }
|
|
560
|
+
entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0)); // 어느 OS 에서나 이름순
|
|
553
561
|
const subdirs = [];
|
|
554
562
|
for (const ent of entries) {
|
|
555
563
|
budget -= 1;
|
|
@@ -581,6 +589,13 @@ function globFontFile(name) {
|
|
|
581
589
|
*/
|
|
582
590
|
function findFontFile(name) {
|
|
583
591
|
const want = normName(name);
|
|
592
|
+
if (!want) {
|
|
593
|
+
// ASCII 글자가 없는 이름(예: 나눔고딕)은 정리한 형태로 대조할 수 없다. 빈 문자열은 어떤 family 에나 들어 있다.
|
|
594
|
+
// fc-match 가 돌려준 family 원문과 정확히 같을 때만 찾은 것으로 본다. 파일명 탐색은 하지 않는다.
|
|
595
|
+
const exact = String(name).trim().toLowerCase();
|
|
596
|
+
const hit = fcMatch(escFc(name));
|
|
597
|
+
return hit && hit.families.some((f) => f.toLowerCase() === exact) && fs.existsSync(hit.file) ? hit.file : null;
|
|
598
|
+
}
|
|
584
599
|
// 한 방향(family 가 요청 이름을 품는가)만 본다. 반대 방향까지 허용하면
|
|
585
600
|
// "Noto Sans CJK KR" 을 요청했는데 "Noto Sans" 가 통과해 한글 없는 폰트에 그 이름이 붙는다.
|
|
586
601
|
const hit = fcMatch(escFc(name));
|
|
@@ -785,7 +800,8 @@ const USAGE = [
|
|
|
785
800
|
' 사람이 읽는 표와 상태 JSON 은 stderr 로 간다(리다이렉트 안전).',
|
|
786
801
|
' --out <경로> .pptx 출력 경로 (--emit-json 과 함께 쓰면 deck JSON 출력 경로)',
|
|
787
802
|
' --font <이름> 폰트 이름을 직접 지정. 체인: --font → BANKER_PPTX_FONT → meta.font',
|
|
788
|
-
' → Noto Sans CJK KR → Malgun Gothic → Apple SD Gothic Neo →
|
|
803
|
+
' → Noto Sans CJK KR → Noto Sans KR → Malgun Gothic → Apple SD Gothic Neo → AppleGothic',
|
|
804
|
+
' → NanumGothic → 시스템 한국어 sans',
|
|
789
805
|
' -h, --help 이 도움말',
|
|
790
806
|
'',
|
|
791
807
|
'종료 코드: 0 통과 · 1 검증 실패 · 2 환경 미비(pptxgenjs 없음) · 3 사용법 오류',
|
|
@@ -920,4 +936,6 @@ module.exports = {
|
|
|
920
936
|
BULLET_PREFIX,
|
|
921
937
|
FONT_CHAIN,
|
|
922
938
|
FONT_FILE_HINTS,
|
|
939
|
+
fontHints,
|
|
940
|
+
sanitizeFontName,
|
|
923
941
|
};
|