oh-my-design-cli 1.8.7 → 1.9.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/hooks/lib/preferences-parser.cjs +1 -0
- package/.claude/hooks/lib/preferences-writer.cjs +1 -0
- package/.claude/hooks/post-edit-watch.cjs +1 -0
- package/.claude/hooks/session-end-foldin.cjs +1 -0
- package/.claude/hooks/session-state-loader.cjs +1 -0
- package/.claude/hooks/skill-activation.cjs +1 -0
- package/.claude/settings.json +10 -1
- package/.github/assets/logo-bg.png +0 -0
- package/AGENTS.md +20 -1
- package/CHANGELOG.md +482 -0
- package/MIGRATION.md +103 -0
- package/README.ja.md +56 -19
- package/README.ko.md +47 -30
- package/README.md +48 -30
- package/README.zh-TW.md +59 -22
- package/agents/AGENT.md +8 -7
- package/agents/omd-codex-image.md +1 -1
- package/agents/omd-critic.md +6 -7
- package/agents/omd-designer-review.md +1 -1
- package/agents/omd-final-qa.md +1 -1
- package/agents/omd-humanizer.md +38 -0
- package/agents/omd-kr-writer.md +3 -4
- package/agents/omd-locale-adapter.md +12 -16
- package/agents/omd-master.md +24 -19
- package/agents/omd-microcopy.md +1 -1
- package/agents/omd-orchestrator.md +7 -8
- package/agents/omd-slop-auditor.md +31 -0
- package/agents/omd-ux-researcher.md +1 -1
- package/data/reference-fingerprints.json +1995 -38
- package/dist/bin/oh-my-design.js +16 -8
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/chunk-UJIHCEYF.js +99 -0
- package/dist/chunk-UJIHCEYF.js.map +1 -0
- package/dist/doctor-LDWSFM3I.js +763 -0
- package/dist/doctor-LDWSFM3I.js.map +1 -0
- package/dist/install-skills-ZZFNJ2II.js +1120 -0
- package/dist/install-skills-ZZFNJ2II.js.map +1 -0
- package/docs/CLI_QUICKSTART.md +157 -0
- package/package.json +25 -4
- package/scripts/postinstall.cjs +5 -4
- package/skills/claude-design/SKILL.md +38 -14
- package/skills/claude-design/references/claude-design-flow.md +11 -11
- package/skills/claude-design/references/codebase-analysis.md +5 -4
- package/skills/omd-final-qa/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +51 -50
- package/skills/omd-humanize/SKILL.md +116 -0
- package/skills/omd-humanize/agents/openai.yaml +4 -0
- package/skills/omd-humanize/references/locale-playbooks.md +102 -0
- package/skills/omd-humanize/references/sources.md +11 -0
- package/skills/omd-init/SKILL.md +18 -12
- package/skills/omd-locale-adapter/SKILL.md +58 -91
- package/skills/omd-orchestrator/SKILL.md +11 -5
- package/skills/omd-reference-capture/SKILL.md +80 -26
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
- package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
- package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
- package/skills/omd-slop-audit/SKILL.md +110 -0
- package/skills/omd-slop-audit/agents/openai.yaml +4 -0
- package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
- package/skills/omd-slop-audit/references/sources.md +24 -0
- package/web/references/104/DESIGN.md +354 -0
- package/web/references/11st/DESIGN.md +197 -316
- package/web/references/29cm/DESIGN.md +297 -393
- package/web/references/42dot/DESIGN.md +390 -0
- package/web/references/8percent/DESIGN.md +438 -0
- package/web/references/ably/DESIGN.md +267 -572
- package/web/references/acer/DESIGN.md +329 -0
- package/web/references/airbnb/DESIGN.md +219 -557
- package/web/references/alipay/DESIGN.md +179 -420
- package/web/references/apple/DESIGN.md +224 -498
- package/web/references/asleep/DESIGN.md +402 -0
- package/web/references/au/DESIGN.md +334 -0
- package/web/references/autopedia/DESIGN.md +382 -0
- package/web/references/aws-cloudscape/DESIGN.md +241 -0
- package/web/references/baemin/DESIGN.md +332 -491
- package/web/references/banksalad/DESIGN.md +269 -180
- package/web/references/barogo/DESIGN.md +416 -0
- package/web/references/beusable/DESIGN.md +464 -0
- package/web/references/bilibili/DESIGN.md +206 -374
- package/web/references/bmw/DESIGN.md +162 -276
- package/web/references/brandi/DESIGN.md +184 -325
- package/web/references/catchtable/DESIGN.md +219 -264
- package/web/references/cgv/DESIGN.md +317 -0
- package/web/references/channeltalk/DESIGN.md +210 -336
- package/web/references/china-airlines/DESIGN.md +291 -0
- package/web/references/cjonstyle/DESIGN.md +453 -0
- package/web/references/class101/DESIGN.md +168 -387
- package/web/references/classum/DESIGN.md +228 -203
- package/web/references/claude/DESIGN.md +242 -479
- package/web/references/clay/DESIGN.md +179 -377
- package/web/references/clickhouse/DESIGN.md +254 -343
- package/web/references/cohere/DESIGN.md +214 -324
- package/web/references/coinone/DESIGN.md +199 -179
- package/web/references/corca/DESIGN.md +414 -0
- package/web/references/coupang/DESIGN.md +205 -475
- package/web/references/cursor/DESIGN.md +240 -381
- package/web/references/dabang/DESIGN.md +248 -213
- package/web/references/dable/DESIGN.md +431 -0
- package/web/references/datarize/DESIGN.md +217 -330
- package/web/references/dealicious/DESIGN.md +402 -0
- package/web/references/drdiary/DESIGN.md +404 -0
- package/web/references/elastic/DESIGN.md +238 -0
- package/web/references/elevenlabs/DESIGN.md +183 -321
- package/web/references/eslite/DESIGN.md +257 -0
- package/web/references/evaair/DESIGN.md +338 -0
- package/web/references/expo/DESIGN.md +238 -331
- package/web/references/familymart-tw/DESIGN.md +254 -0
- package/web/references/ferrari/DESIGN.md +160 -377
- package/web/references/figma/DESIGN.md +197 -451
- package/web/references/fitpet/DESIGN.md +445 -0
- package/web/references/flex/DESIGN.md +170 -253
- package/web/references/framer/DESIGN.md +197 -340
- package/web/references/freee/DESIGN.md +211 -533
- package/web/references/friendliai/DESIGN.md +431 -0
- package/web/references/frip/DESIGN.md +440 -0
- package/web/references/gangnamunni/DESIGN.md +154 -591
- package/web/references/gaudiolab/DESIGN.md +414 -0
- package/web/references/google/DESIGN.md +290 -398
- package/web/references/hashicorp/DESIGN.md +273 -318
- package/web/references/heydealer/DESIGN.md +429 -0
- package/web/references/humanscape/DESIGN.md +433 -0
- package/web/references/hyundai/DESIGN.md +158 -368
- package/web/references/hyundaicard/DESIGN.md +171 -121
- package/web/references/ibm/DESIGN.md +227 -378
- package/web/references/idus/DESIGN.md +450 -0
- package/web/references/igaworks/DESIGN.md +437 -0
- package/web/references/inflearn/DESIGN.md +221 -366
- package/web/references/intuit/DESIGN.md +244 -0
- package/web/references/jandi/DESIGN.md +191 -291
- package/web/references/jobplanet/DESIGN.md +415 -0
- package/web/references/kakao/DESIGN.md +287 -475
- package/web/references/kakaobank/DESIGN.md +220 -521
- package/web/references/kakaogames/DESIGN.md +220 -0
- package/web/references/kakaopay/DESIGN.md +207 -526
- package/web/references/karrot/DESIGN.md +227 -251
- package/web/references/kb-kookmin/DESIGN.md +308 -0
- package/web/references/kbank/DESIGN.md +220 -175
- package/web/references/kmong/DESIGN.md +281 -356
- package/web/references/krds/DESIGN.md +245 -19
- package/web/references/kream/DESIGN.md +224 -359
- package/web/references/kurly/DESIGN.md +211 -533
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lguplus/DESIGN.md +259 -0
- package/web/references/likelion/DESIGN.md +283 -0
- package/web/references/line/DESIGN.md +396 -355
- package/web/references/linear.app/DESIGN.md +209 -562
- package/web/references/lotteon/DESIGN.md +386 -0
- package/web/references/lovable/DESIGN.md +255 -349
- package/web/references/makinarocks/DESIGN.md +149 -349
- package/web/references/maum-ai/DESIGN.md +423 -0
- package/web/references/medibloc/DESIGN.md +425 -0
- package/web/references/megabox/DESIGN.md +232 -0
- package/web/references/mercari/DESIGN.md +217 -434
- package/web/references/microsoft/DESIGN.md +234 -388
- package/web/references/mildang/DESIGN.md +411 -0
- package/web/references/millie/DESIGN.md +183 -504
- package/web/references/minimax/DESIGN.md +264 -322
- package/web/references/miricanvas/DESIGN.md +182 -355
- package/web/references/miro/DESIGN.md +234 -232
- package/web/references/mistral.ai/DESIGN.md +231 -314
- package/web/references/mixi/DESIGN.md +234 -0
- package/web/references/moin/DESIGN.md +445 -0
- package/web/references/mongodb/DESIGN.md +219 -316
- package/web/references/musinsa/DESIGN.md +184 -510
- package/web/references/mynavi/DESIGN.md +242 -0
- package/web/references/myrealtrip/DESIGN.md +169 -406
- package/web/references/naver/DESIGN.md +328 -499
- package/web/references/naverwebtoon/DESIGN.md +172 -395
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/notion/DESIGN.md +271 -475
- package/web/references/nrise/DESIGN.md +417 -0
- package/web/references/ohouse/DESIGN.md +210 -549
- package/web/references/oliveyoung/DESIGN.md +217 -326
- package/web/references/ollama/DESIGN.md +241 -308
- package/web/references/onestore/DESIGN.md +248 -0
- package/web/references/palantir/DESIGN.md +256 -0
- package/web/references/panasonic/DESIGN.md +276 -0
- package/web/references/patternfly/DESIGN.md +259 -0
- package/web/references/payhere/DESIGN.md +438 -0
- package/web/references/pega/DESIGN.md +262 -0
- package/web/references/peoplefund/DESIGN.md +431 -0
- package/web/references/petfriends/DESIGN.md +428 -0
- package/web/references/pinkfong/DESIGN.md +199 -367
- package/web/references/pinterest/DESIGN.md +258 -308
- package/web/references/poya/DESIGN.md +286 -0
- package/web/references/pozalabs/DESIGN.md +438 -0
- package/web/references/protopie/DESIGN.md +419 -0
- package/web/references/qraft/DESIGN.md +448 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/recruit/DESIGN.md +247 -0
- package/web/references/remember/DESIGN.md +202 -396
- package/web/references/resend/DESIGN.md +274 -348
- package/web/references/sakura-internet/DESIGN.md +269 -0
- package/web/references/samsung/DESIGN.md +157 -359
- package/web/references/sandoll/DESIGN.md +445 -0
- package/web/references/sanity/DESIGN.md +241 -375
- package/web/references/scatterlab/DESIGN.md +412 -0
- package/web/references/selectstar/DESIGN.md +439 -0
- package/web/references/servicenow/DESIGN.md +289 -0
- package/web/references/shinhanbank/DESIGN.md +161 -341
- package/web/references/shinhancard/DESIGN.md +208 -319
- package/web/references/sionic/DESIGN.md +454 -0
- package/web/references/sktelecom/DESIGN.md +310 -0
- package/web/references/socar/DESIGN.md +125 -32
- package/web/references/softbank/DESIGN.md +231 -0
- package/web/references/sony/DESIGN.md +234 -0
- package/web/references/soop/DESIGN.md +261 -0
- package/web/references/spacex/DESIGN.md +184 -323
- package/web/references/spotify/DESIGN.md +253 -394
- package/web/references/squeezebits/DESIGN.md +441 -0
- package/web/references/stayfolio/DESIGN.md +422 -0
- package/web/references/stripe/DESIGN.md +212 -491
- package/web/references/supabase/DESIGN.md +244 -316
- package/web/references/tabling/DESIGN.md +415 -0
- package/web/references/taishinbank/DESIGN.md +243 -0
- package/web/references/teamlab/DESIGN.md +240 -0
- package/web/references/teamsparta/DESIGN.md +472 -0
- package/web/references/tellingme/DESIGN.md +392 -0
- package/web/references/tesla/DESIGN.md +244 -427
- package/web/references/thsr/DESIGN.md +284 -0
- package/web/references/thumbtack/DESIGN.md +302 -0
- package/web/references/together.ai/DESIGN.md +257 -304
- package/web/references/toss/DESIGN.md +251 -593
- package/web/references/toss-securities/DESIGN.md +255 -178
- package/web/references/tossbank/DESIGN.md +195 -491
- package/web/references/toyota/DESIGN.md +238 -0
- package/web/references/tving/DESIGN.md +197 -245
- package/web/references/typed/DESIGN.md +413 -0
- package/web/references/uber/DESIGN.md +256 -333
- package/web/references/udn/DESIGN.md +250 -0
- package/web/references/upbit/DESIGN.md +145 -256
- package/web/references/upstage/DESIGN.md +211 -204
- package/web/references/uswds/DESIGN.md +287 -0
- package/web/references/vercel/DESIGN.md +236 -440
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/wise/DESIGN.md +223 -231
- package/web/references/wisetracker/DESIGN.md +462 -0
- package/web/references/wooribank/DESIGN.md +245 -0
- package/web/references/yanolja/DESIGN.md +250 -419
- package/web/references/yeogiotte/DESIGN.md +235 -418
- package/web/references/zapier/DESIGN.md +256 -377
- package/web/references/zendesk/DESIGN.md +288 -0
- package/web/references/zigzag/DESIGN.md +200 -621
- package/dist/install-skills-7UUDOLG2.js +0 -734
- package/dist/install-skills-7UUDOLG2.js.map +0 -1
package/skills/omd-init/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: "프로젝트 루트에 DESIGN.md를 부트스트랩 — 실제 기
|
|
|
7
7
|
|
|
8
8
|
프로젝트에 DESIGN.md + AI 코딩 에이전트용 shim 3종을 한 번에 세팅. 레퍼런스 톤&매너는 **preserve**하고, 사용자 프로젝트 맥락은 controlled-vocabulary delta_set으로만 반영.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
**런타임 CLI subcommand 호출 없음** — Read/Write/Bash(파일 작업만) 툴로 직접 처리한다. CLI의 사용자 표면은 bare `npx oh-my-design-cli`(대화형 installer)와 `npx oh-my-design-cli doctor`(설치 진단)이며, `omd init recommend` 같은 init subcommand는 제공하지 않는다. 이 skill은 설치 뒤 host agent 안에서 self-contained하게 동작한다.
|
|
11
11
|
|
|
12
12
|
## 전체 플로우
|
|
13
13
|
|
|
@@ -38,15 +38,19 @@ Phase 7: 요약 출력
|
|
|
38
38
|
|
|
39
39
|
다음 파일을 Read 툴로 전체 로드 (있는 순서대로 fallback):
|
|
40
40
|
|
|
41
|
-
1. `.
|
|
42
|
-
2.
|
|
43
|
-
3.
|
|
41
|
+
1. `.codex/data/reference-fingerprints.json` (Codex 설치 카탈로그)
|
|
42
|
+
2. `.claude/data/reference-fingerprints.json` (Claude Code / Cursor 설치 카탈로그)
|
|
43
|
+
3. `.opencode/data/reference-fingerprints.json` (OpenCode 설치 카탈로그)
|
|
44
|
+
4. `node_modules/oh-my-design-cli/data/reference-fingerprints.json` (npm 설치 직접 경로)
|
|
45
|
+
5. `data/reference-fingerprints.json` (개발 환경)
|
|
44
46
|
|
|
45
47
|
스키마: `{ count, items: [{ id, primary_color_hex, category, visual_theme, voice_fingerprint, tone_keywords, antipatterns, signature_motion, has_personas, category_raw }] }`.
|
|
46
48
|
|
|
47
49
|
추가 보조 파일 (있으면 같이 로드):
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
+
- 위에서 실제 선택된 data dir의 `vocabulary.json` — controlled vocab axes/keywords
|
|
51
|
+
- 같은 data dir의 `reference-tags.md` — human-readable keyword matrix
|
|
52
|
+
|
|
53
|
+
채널을 알 수 있으면 해당 채널 data dir을 우선 사용하되, 파일이 없으면 위 1→5 순서로 fallback한다. 서로 다른 설치 채널의 fingerprint와 보조 파일을 섞지 말 것.
|
|
50
54
|
|
|
51
55
|
### 2.2 task 분석 (silent, in-head)
|
|
52
56
|
|
|
@@ -126,12 +130,14 @@ Phase 4.2~6은 건너뛴다.
|
|
|
126
130
|
|
|
127
131
|
<!-- omd:catalog-resolution-order — omd-harness/omd-reference-capture SKILL.md + agents/omd-master.md 와 동일 순서 강제. drift guard: test/unit/core/catalog-resolution-order.test.ts -->
|
|
128
132
|
|
|
129
|
-
1. `.
|
|
130
|
-
2.
|
|
131
|
-
3.
|
|
132
|
-
4. `
|
|
133
|
+
1. `.codex/data/references/<id>/DESIGN.md` (Codex installer가 복사)
|
|
134
|
+
2. `.claude/data/references/<id>/DESIGN.md` (Claude Code / Cursor installer가 복사)
|
|
135
|
+
3. `.opencode/data/references/<id>/DESIGN.md` (OpenCode installer가 복사)
|
|
136
|
+
4. `node_modules/oh-my-design-cli/web/references/<id>/DESIGN.md` (로컬 npm 설치 직접 경로)
|
|
137
|
+
5. `web/references/<id>/DESIGN.md` (개발 레포)
|
|
138
|
+
6. `https://oh-my-design.kr/<id>/design.md` 를 fetch (WebFetch 또는 `curl -fsSL`) — 1~5 로컬 경로가 전부 없을 때. 200이면 응답 본문이 곧 reference DESIGN.md다. 가져온 내용은 **활성 채널의 첫 writable data dir** (`.codex/data`, `.claude/data`, `.opencode/data`) 아래 `references/<id>/DESIGN.md`에 저장한다. 채널을 판별할 수 없으면 1→3 중 먼저 존재하고 쓸 수 있는 dir을 사용하고, 모두 없으면 활성 host 채널 dir을 생성한다.
|
|
133
139
|
|
|
134
|
-
|
|
140
|
+
6까지 전부 실패하면 **절대 DESIGN.md를 임의로 지어내지 말 것.** 사용자에게
|
|
135
141
|
"레퍼런스 `<id>` 원문을 찾지 못했어요 (오프라인이거나 카탈로그 미배포).
|
|
136
142
|
네트워크 연결 후 재시도하거나 다른 레퍼런스를 골라주세요"라고 보고하고 종료.
|
|
137
143
|
|
|
@@ -311,4 +317,4 @@ Next:
|
|
|
311
317
|
- 레퍼런스에 없는 section/heading을 추가하지 말 것.
|
|
312
318
|
- `.omd/init-context.json`을 직접 편집할 때 schema 어기지 말 것.
|
|
313
319
|
- DESIGN.md가 이미 있는데 백업 없이 덮어쓰지 말 것 (Phase 4.2 rename 절차 준수).
|
|
314
|
-
- **존재하지 않는 CLI subcommand (`omd init recommend`, `omd init prepare`, `omd sync`)를 호출하지 말 것** —
|
|
320
|
+
- **존재하지 않는 CLI subcommand (`omd init recommend`, `omd init prepare`, `omd sync`)를 호출하지 말 것** — CLI는 bare installer와 `install-skills`, `doctor`만 제공한다.
|
|
@@ -1,124 +1,91 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: omd:locale-adapter
|
|
3
|
-
description: "한국어
|
|
4
|
-
user-invocable: true
|
|
3
|
+
description: "한국어 canonical 문서·UX copy를 EN/JA/ZH-CN/ZH-TW로 번역이 아니라 locale adaptation한다. thesis·사실·명령어는 보존하되 문장 순서, 주어, register, 제품 용어와 호흡은 각 언어에서 다시 쓴다. '다국어 적용', '영문/일문/간체/대만어 버전', 'locale 문서 만들어줘' 요청에 사용한다."
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
# omd:locale-adapter
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
한국어 canonical의 뜻과 사실을 다른 언어에서 **같이 이해되게** 만든다. 문장 단위 대응표를 만들지 않는다. EN, JA, ZH-CN, ZH-TW는 서로 독립된 원고다.
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
## 0. Source contract
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
- KO가 canonical이다. 다른 locale은 `source_revision` 또는 canonical content hash를 가진다.
|
|
13
|
+
- KO가 바뀌면 파생 locale을 stale로 표시하고 변경된 의미 단위를 다시 adapt한다.
|
|
14
|
+
- 공유하는 것은 thesis, 사실, 정보 계층, 명령, URL, 제품 동작이다.
|
|
15
|
+
- 공유하지 않는 것은 문장 순서, 비유, 인사, 주어, 문장 길이, 문장부호, 설명용 용어다.
|
|
16
|
+
- canonical에 없는 사실은 어떤 locale에도 추가하지 않는다.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
## 1. Target locale
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
### EN (`en`)
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
- 행동과 관찰 가능한 결과를 먼저 쓴다.
|
|
23
|
+
- repeated `not X, but Y`, 3단 슬로건, 추상 찬사를 원문의 구조 그대로 옮기지 않는다.
|
|
24
|
+
- 제품이 이미 쓰는 US/UK spelling을 유지한다.
|
|
25
|
+
- 한국 서비스는 첫 등장에만 독자에게 필요한 짧은 설명을 붙인다.
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
- 문장 길이: 15~25 words (KR 35~50자 ≈ EN 15~25 words)
|
|
23
|
-
- 1인칭: "we" or "I" 자연스럽게
|
|
24
|
-
- 문화 swap:
|
|
25
|
-
- "토스" → "Toss (Korea's leading fintech)" (첫 출현만)
|
|
26
|
-
- "당근" → "Karrot (a hyperlocal Korean marketplace)"
|
|
27
|
-
- 김치/돌잔치 등 강한 KR-only ref → 영미권 equivalent or 짧은 gloss
|
|
28
|
-
- "안녕하세요" 인사 → "Hi, I'm [name]." 또는 informal opener
|
|
29
|
-
- 분량: KR 자수의 0.45~0.55 (영어가 짧음)
|
|
30
|
-
- 헤더: KR 짧은 헤더 → EN은 좀 더 descriptive OK ("토스 느낌의 시작" → "What gives Toss its 'feel'")
|
|
27
|
+
### JA (`ja`)
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
- 설명문은 です・ます調를 기본으로 하고 같은 섹션에서 register를 섞지 않는다.
|
|
30
|
+
- 필요 없는 `私たちは / あなたは`는 생략한다.
|
|
31
|
+
- 제목은 짧게 쓰고 마침표를 붙이지 않는다.
|
|
32
|
+
- `正本 / 実ルート / 強いプロンプト` 같은 직역 대신 `唯一の基準 / 実際の製品画面 / 作業依頼`처럼 뜻이 통하는 제품 용어를 쓴다.
|
|
33
33
|
|
|
34
|
-
-
|
|
35
|
-
- 종결: です・ます 일관 (敬体)
|
|
36
|
-
- 격식 register: 영미보다 한 단계 더 정중
|
|
37
|
-
- 문화 swap:
|
|
38
|
-
- "토스" → "Toss (韓国最大級のフィンテック)"
|
|
39
|
-
- 한국 특유의 이웃문화 ref → 일본식 「ご近所」 비유
|
|
40
|
-
- 존경어/겸양어 자연스럽게 ("저는 ~한다고 생각해요" → "私は〜と考えています")
|
|
41
|
-
- 분량: KR 자수의 0.85~1.0
|
|
42
|
-
- 헤더: 한국어 짧은 헤더와 비슷한 호흡 ("토스 느낌の始まり")
|
|
43
|
-
- 한자: 常用漢字 위주. 어려운 한자는 仮名 병기.
|
|
34
|
+
### ZH-CN (`zh-CN`)
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
- 사용자-facing AI는 `AI 编程助手`, 기술 역할은 문맥에 따라 `智能体角色`로 구분한다.
|
|
37
|
+
- `赋能 / 无缝 / 全新升级 / 打造闭环` 같은 찬사를 기능 설명 대신 쓰지 않는다.
|
|
38
|
+
- `项目唯一设计依据 / 实际产品页面 / 可重复执行的检查 / 空状态`처럼 간결한 제품 용어를 쓴다.
|
|
39
|
+
- 행동과 결과를 먼저 쓰고 영어 정보 순서를 복제하지 않는다.
|
|
46
40
|
|
|
47
|
-
-
|
|
48
|
-
- **번체** (簡体 금지). 「設計」「顯示」「優化」.
|
|
49
|
-
- 문화 swap:
|
|
50
|
-
- "토스" → "Toss (南韓金融科技龍頭)"
|
|
51
|
-
- "당근" → "Karrot (南韓地區型二手交易平台)"
|
|
52
|
-
- 한국 idiom → 中華圈 idiom (가능한 경우)
|
|
53
|
-
- 분량: KR 자수의 0.6~0.75
|
|
54
|
-
- 인용부호: 「」 사용
|
|
55
|
-
- 헤더: KR 짧은 헤더와 비슷한 호흡 (「Toss 給人的感覺,從何而來」)
|
|
41
|
+
### ZH-TW (`zh-TW`)
|
|
56
42
|
|
|
57
|
-
|
|
43
|
+
- ZH-CN의 글자를 번체로 바꾸지 않고 대만 제품 문체로 다시 쓴다.
|
|
44
|
+
- `軟體 / 資訊 / 使用者 / 影片 / 預設 / 介面 / 專案 / 儲存 / 設定 / 登入 / 資料`를 우선한다.
|
|
45
|
+
- 사용자-facing AI는 `AI 程式助理`, 저장소는 `程式碼儲存庫` 또는 `專案儲存庫`로 쓴다.
|
|
46
|
+
- 일반 UI QA는 `檢查`, 규정·공식 audit만 `稽核`을 쓴다.
|
|
58
47
|
|
|
59
|
-
|
|
60
|
-
2. 글 전체 thesis 한 줄로 추출 (locale 다 동일해야 함)
|
|
61
|
-
3. 각 H2 섹션을 1개씩 옮김 — **문장 단위 직역 금지**, 단락 단위 의역
|
|
62
|
-
4. 문화 ref 발견 시 위 swap 룰 적용 + 첫 출현에 gloss
|
|
63
|
-
5. 인용/코드/URL/figure src는 그대로 보존
|
|
64
|
-
6. 헤더 number 일관성 유지 (KR=5 H2면 다른 locale도 5)
|
|
65
|
-
7. frontmatter `title_<locale>`, `subtitle_<locale>` 채우기
|
|
48
|
+
세부 후편집 규칙은 설치된 `omd-humanize/references/locale-playbooks.md`에서 대상 locale만 읽는다.
|
|
66
49
|
|
|
67
|
-
##
|
|
50
|
+
## 2. Adaptation workflow
|
|
68
51
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
1. KO canonical, frontmatter, DESIGN.md §10, 승인된 제품 용어를 읽는다.
|
|
53
|
+
2. 문서의 thesis 1–3개와 보호 구간(수치·명령·URL·ID·인용·제품 동작)을 적는다.
|
|
54
|
+
3. 문서 구조를 의미 단위로 나눈다. H2 개수는 정보 parity를 확인하는 보조 지표일 뿐 강제로 맞추지 않는다.
|
|
55
|
+
4. target locale에서 사용자가 읽을 순서로 문단을 새로 구성한다.
|
|
56
|
+
5. 문화 맥락이 없으면 첫 등장에만 짧게 설명한다. 등가 비유가 없으면 억지로 새 비유를 만들지 않는다.
|
|
57
|
+
6. code, command, URL, path, slug, skill/agent ID를 원문과 대조한다.
|
|
58
|
+
7. `omd:humanize`의 target-locale audit으로 번역투, locale 혼입, 기계적 구조를 검증한다.
|
|
59
|
+
8. UI copy면 실제 locale route에서 줄바꿈, overflow, CTA 동작, aria label을 확인한다.
|
|
75
60
|
|
|
76
|
-
##
|
|
61
|
+
## 3. Output metadata
|
|
77
62
|
|
|
78
|
-
|
|
79
|
-
|---|---|
|
|
80
|
-
| KR 특유의 이모지 사용 패턴 (`ㅎㅎ`, `^^`) | EN/JP/ZH-TW에서 제거. 톤은 다른 방식으로 표현. |
|
|
81
|
-
| 한자어 농담 | locale 등가 농담 없으면 그냥 의미만 유지하고 농담 톤 표시 |
|
|
82
|
-
| `안녕하세요` 같은 의례 인사 | EN은 informal greeting, JP는 「こんにちは」, ZH-TW는 「大家好」 |
|
|
83
|
-
| Toss/당근 같은 회사명 인지도 차이 | 첫 등장에서 1줄 gloss, 이후 그대로 |
|
|
63
|
+
문서 파일에는 가능한 경우 아래를 기록한다.
|
|
84
64
|
|
|
85
|
-
## 5. 출력 형식
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
content/posts/<slug>/index.ko.md ← source
|
|
89
|
-
content/posts/<slug>/index.en.md ← this skill 생성
|
|
90
|
-
content/posts/<slug>/index.ja.md
|
|
91
|
-
content/posts/<slug>/index.zh-tw.md
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
각 파일 frontmatter에:
|
|
95
65
|
```yaml
|
|
96
|
-
locale:
|
|
66
|
+
locale: ja
|
|
97
67
|
source_locale: ko
|
|
98
|
-
source_revision: <
|
|
68
|
+
source_revision: <ko content hash or git sha>
|
|
99
69
|
adapted_at: <ISO date>
|
|
100
70
|
```
|
|
101
71
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
각 locale 생성 후 writer가 직접 검증:
|
|
105
|
-
- H2 카운트가 KR과 일치
|
|
106
|
-
- 인용 / 통계 누락 0건
|
|
107
|
-
- figure src 경로 일치
|
|
108
|
-
- 분량이 위 1.x의 비율 범위
|
|
109
|
-
- 첫 출현 회사명 모두 gloss 처리됨
|
|
110
|
-
- 코드 블록 변경 0건
|
|
72
|
+
코드 dictionary처럼 frontmatter가 없으면 locale manifest 또는 테스트 fixture에 같은 revision을 기록한다.
|
|
111
73
|
|
|
112
|
-
|
|
74
|
+
## 4. Quality gate
|
|
113
75
|
|
|
114
|
-
|
|
76
|
+
- 보호 구간 변경 0
|
|
77
|
+
- 다른 locale의 사용자-facing 용어 혼입 0
|
|
78
|
+
- 제거된 기능·섹션을 소개하는 stale copy 0
|
|
79
|
+
- target locale에서 반복되는 기계적 대조·추상 찬사 cluster 0
|
|
80
|
+
- UI route의 horizontal overflow와 잘린 label 0
|
|
81
|
+
- canonical이 바뀌었는데 revision이 그대로인 파생 원고 0
|
|
115
82
|
|
|
116
|
-
|
|
83
|
+
미달 locale만 다시 작업한다. 영어 원고나 ZH-CN 원고를 fallback으로 노출하지 않는다.
|
|
117
84
|
|
|
118
|
-
##
|
|
85
|
+
## 금지
|
|
119
86
|
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
87
|
+
- 영어 문장을 모든 locale object의 prose fallback으로 사용
|
|
88
|
+
- ZH-TW가 ZH-CN prose를 상속
|
|
89
|
+
- 단락별 1:1 직역, 문장 순서 강제, 길이 비율을 품질 점수로 사용
|
|
90
|
+
- 고유명사를 알리기 위해 원문에 없는 시장 지위·성과를 추가
|
|
91
|
+
- `fallback`, `shim`, `truth source`, `strong prompt` 같은 설명용 영어를 그대로 노출
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: omd:orchestrator
|
|
3
|
-
description: "멀티 에이전트 디자인 워크플로우 supervisor.
|
|
3
|
+
description: "멀티 에이전트 디자인 워크플로우 supervisor. writer, locale adaptation, humanize, UI slop audit, designer review, final QA, image materialization을 routing한다. 2-round revision cap을 유지하며 다국어 문서·UI 개선·출간 준비처럼 여러 역할이 필요한 요청에 사용한다."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -17,7 +17,9 @@ omd v0.2 agent layer의 **supervisor**. 한 글/한 컴포넌트가 여러 speci
|
|
|
17
17
|
| 역할 | subagent | 용도 |
|
|
18
18
|
|---|---|---|
|
|
19
19
|
| Writer | `omd-kr-writer` | 한국어 본문 작성. `preset_id` 인자로 voice 결정. |
|
|
20
|
-
| Localizer | `omd-locale-adapter` | KR → EN/
|
|
20
|
+
| Localizer | `omd-locale-adapter` | KR → EN/JA/ZH-CN/ZH-TW **adaptation** (번역 아님) |
|
|
21
|
+
| Copy finalizer | `omd-humanizer` | locale별 번역투·기계적 구조를 국소 수정하고 보호 구간 대조 |
|
|
22
|
+
| Slop auditor | `omd-slop-auditor` | 실제 route의 context-free UI/copy cluster를 품질·취향과 분리해 감사 |
|
|
21
23
|
| Visual reviewer | `omd-designer-review` | DESIGN.md 대비 typo/색/spacing/state 검수 |
|
|
22
24
|
| Critic | `omd-final-qa` | Read-only rubric verdict. 2-round cap 강제. |
|
|
23
25
|
| Image materializer | `omd-codex-image` | `<!-- omd:gen-image -->` 블록을 채널별로 실체화 (Codex native gen / asset-curator fallback / OpenCode user-queue) |
|
|
@@ -34,7 +36,9 @@ omd v0.2 agent layer의 **supervisor**. 한 글/한 컴포넌트가 여러 speci
|
|
|
34
36
|
```
|
|
35
37
|
사용자 요청 도착
|
|
36
38
|
├─ "글 작성" 키워드 → Stage 1: omd-kr-writer
|
|
37
|
-
├─
|
|
39
|
+
├─ "AI 티/번역투/문장이 기계적" → omd-humanizer
|
|
40
|
+
├─ 다국어 요청 ("EN", "영문", "JA", "간체", "대만어") → Stage 3 + locale별 humanize 추가
|
|
41
|
+
├─ "AI slop/템플릿 같음" → omd-slop-auditor → 수정은 omd:apply
|
|
38
42
|
├─ artifact 첨부 + "리뷰" → Stage 2부터 진입
|
|
39
43
|
└─ "출간 ready" → Stage 4 final-qa로 직행
|
|
40
44
|
```
|
|
@@ -43,9 +47,11 @@ omd v0.2 agent layer의 **supervisor**. 한 글/한 컴포넌트가 여러 speci
|
|
|
43
47
|
|
|
44
48
|
```
|
|
45
49
|
Stage 1 WRITE omd-kr-writer (preset=toss-tech-design)
|
|
50
|
+
Stage 1h HUMANIZE omd-humanizer (KO 보호 구간 + 자연스러움 검증)
|
|
46
51
|
Stage 2 REVIEW omd-designer-review (artifact + brand DESIGN.md)
|
|
47
52
|
Stage 2r REVISION omd-kr-writer (review feedback 반영) ← max 2 round
|
|
48
|
-
Stage 3 LOCALIZE omd-locale-adapter (KR → EN/
|
|
53
|
+
Stage 3 LOCALIZE omd-locale-adapter (KR → EN/JA/ZH-CN/ZH-TW)
|
|
54
|
+
Stage 3h HUMANIZE omd-humanizer (각 locale 독립 검증)
|
|
49
55
|
Stage 4 CRITIC omd-final-qa (rubric, read-only)
|
|
50
56
|
Stage 4r REVISION omd-kr-writer (final-qa feedback) ← max 2 round (Stage 2와 별도 카운트)
|
|
51
57
|
Stage 4i IMAGES omd-codex-image (`<!-- omd:gen-image -->` 블록 처리, 채널별 분기)
|
|
@@ -114,7 +120,7 @@ prior_review: null # 또는 review report 경로
|
|
|
114
120
|
|
|
115
121
|
## 9. 병렬화 허용 케이스
|
|
116
122
|
|
|
117
|
-
- KR이 PASS된 뒤 EN/
|
|
123
|
+
- KR이 PASS된 뒤 EN/JA/ZH-CN/ZH-TW **adaptation은 병렬** (각각 다른 파일이라 conflict 없음). ZH-TW는 ZH-CN을 상속하지 않는다.
|
|
118
124
|
- DESIGN.md re-read는 stage마다 강제 (Anthropic best practice — memory hallucination 방지)
|
|
119
125
|
|
|
120
126
|
## 10. 종료 조건
|
|
@@ -95,7 +95,12 @@ Phase 7: 사용자 요약 + 다음 단계 안내
|
|
|
95
95
|
## Phase 1 — 입력 검증
|
|
96
96
|
|
|
97
97
|
사용자 요청에서 brand id 추출:
|
|
98
|
-
- 명시 brand 이름 (한글/영문) →
|
|
98
|
+
- 명시 brand 이름 (한글/영문) → 아래 순서에서 찾은 첫 `reference-fingerprints.json`의 `items[].id` 매칭:
|
|
99
|
+
1. `.codex/data/reference-fingerprints.json`
|
|
100
|
+
2. `.claude/data/reference-fingerprints.json`
|
|
101
|
+
3. `.opencode/data/reference-fingerprints.json`
|
|
102
|
+
4. `node_modules/oh-my-design-cli/data/reference-fingerprints.json`
|
|
103
|
+
5. `data/reference-fingerprints.json` (개발 레포)
|
|
99
104
|
- 없으면 사용자에게 묻기: "어느 reference brand 자료를 가져올까요? (예: banksalad, toss, socar)"
|
|
100
105
|
|
|
101
106
|
id가 카탈로그에 없으면 종료 + "X는 reference 카탈로그에 없어요. omd:init으로 추가 가능합니다."
|
|
@@ -106,19 +111,21 @@ id가 카탈로그에 없으면 종료 + "X는 reference 카탈로그에 없어
|
|
|
106
111
|
|
|
107
112
|
<!-- omd:catalog-resolution-order — omd-init/omd-harness SKILL.md + agents/omd-master.md 와 동일 순서 강제. drift guard: test/unit/core/catalog-resolution-order.test.ts -->
|
|
108
113
|
|
|
109
|
-
1. `.
|
|
110
|
-
2.
|
|
111
|
-
3.
|
|
112
|
-
4. `
|
|
114
|
+
1. `.codex/data/references/<id>/DESIGN.md` (Codex installer copy; 디렉토리에는 **DESIGN.md만** 보장)
|
|
115
|
+
2. `.claude/data/references/<id>/DESIGN.md` (Claude Code / Cursor installer copy; 디렉토리에는 **DESIGN.md만** 보장)
|
|
116
|
+
3. `.opencode/data/references/<id>/DESIGN.md` (OpenCode installer copy; 디렉토리에는 **DESIGN.md만** 보장)
|
|
117
|
+
4. `node_modules/oh-my-design-cli/web/references/<id>/DESIGN.md` (로컬 npm 설치 직접 경로 — 디렉토리에 _promo.json/_research.md 포함)
|
|
118
|
+
5. `web/references/<id>/DESIGN.md` (개발 레포)
|
|
119
|
+
6. `https://oh-my-design.kr/<id>/design.md` 를 fetch (WebFetch 또는 `curl -fsSL`) — 1~5 로컬 경로가 전부 없을 때. 200이면 본문이 곧 reference DESIGN.md. 가져온 내용은 **활성 채널의 첫 writable data dir** (`.codex/data`, `.claude/data`, `.opencode/data`) 아래 `references/<id>/DESIGN.md`에 저장한다. 채널을 판별할 수 없으면 1→3 중 먼저 존재하고 쓸 수 있는 dir을 사용하고, 모두 없으면 활성 host 채널 dir을 생성한다.
|
|
113
120
|
|
|
114
|
-
`<refdir>` = resolve된 DESIGN.md가 있는 디렉토리 (tier
|
|
121
|
+
`<refdir>` = resolve된 DESIGN.md가 있는 디렉토리 (tier 6 fetch면 위 규칙으로 정한 활성 채널 cache dir). `_promo.json`/`_research.md`는 installer copy나 network cache에 없을 수 있으니, 없으면 (4)/(5)로 폴백하고 그래도 없으면 fingerprints 기반 추론으로 진행.
|
|
115
122
|
|
|
116
123
|
다음을 순서대로 시도:
|
|
117
124
|
|
|
118
125
|
1. **homepage URL**:
|
|
119
126
|
- `<refdir>/_promo.json`의 `logo_url`이 brand site면 거기서 도메인 추출
|
|
120
127
|
- 없으면 `<refdir>/_research.md`에서 Tier 1 source URL grep
|
|
121
|
-
- 둘 다 없으면
|
|
128
|
+
- 둘 다 없으면 Phase 1에서 channel-aware하게 resolve한 `reference-fingerprints.json`의 `items[].category_raw` 기반으로 추론 — 마지막 수단
|
|
122
129
|
|
|
123
130
|
2. **logo URL** (`_promo.json` 우선):
|
|
124
131
|
- `_promo.json.logo_url` → 그대로 사용
|
|
@@ -254,15 +261,57 @@ canonical DESIGN.md가 "BM JUA를 landing/promo accent로"라고 적어뒀더라
|
|
|
254
261
|
|
|
255
262
|
mode=clone이면 omd:init/omd:harness가 생성 HTML `<head>`에 fonts.json의 `live_observed: true` 항목 `html_link`를 **반드시** 박는다. mode=inspired면 폰트 로드는 사용자 선택.
|
|
256
263
|
|
|
257
|
-
## Phase 3.9 —
|
|
264
|
+
## Phase 3.9 — MCP-free evidence collector (v2)
|
|
258
265
|
|
|
259
|
-
라이브
|
|
266
|
+
라이브 캡쳐의 정본은 버전된 `ReferenceEvidenceBundle`이다. 에이전트가 매번 다른 evaluate 스니펫을 만들지 않는다.
|
|
267
|
+
|
|
268
|
+
### 기본 경로: packaged/local collector
|
|
269
|
+
|
|
270
|
+
개발 저장소 안에서는:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
npm --prefix web run capture:reference -- <id-or-url> \
|
|
274
|
+
--max-routes 3 \
|
|
275
|
+
--out "$PWD/assets/_reference/<id>/evidence.json"
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
npm으로 설치된 스킬에서는:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# 현재 읽고 있는 SKILL.md와 같은 디렉토리의 bundled collector를 사용한다.
|
|
282
|
+
# 예: .agents/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs
|
|
283
|
+
SKILL_DIR="<directory-containing-this-SKILL.md>"
|
|
284
|
+
COLLECTOR="$SKILL_DIR/scripts/capture-reference-evidence.mjs"
|
|
285
|
+
node "$COLLECTOR" "<homepage-url>" --id "<id>" \
|
|
286
|
+
--max-routes 3 \
|
|
287
|
+
--out "$PWD/assets/_reference/<id>/evidence.json"
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
설치된 collector는 Node 18에서 실행되는 단일 ESM 파일이며 `playwright-core`까지 내부에 포함한다. 따라서 프로젝트 `node_modules`, npm cache, TypeScript runtime에 의존하지 않고 system Chrome을 직접 사용한다. Chrome 경로가 표준 위치가 아니면 `OMD_CHROME_PATH`만 지정한다. MCP server, MCP SDK, 별도 API key는 필요 없다. 설치형 collector에는 항상 Phase 2에서 확정한 homepage URL과 `--id`를 함께 전달한다. 이 방식은 npm package가 일회성 `npx` cache에서 사라진 뒤에도 동작한다.
|
|
291
|
+
|
|
292
|
+
현재 SKILL.md의 위치를 직접 알 수 없는 shell 환경에서는 아래 순서에서 첫 실행 파일을 찾는다:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
for candidate in \
|
|
296
|
+
"$PWD/.claude/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs" \
|
|
297
|
+
"$PWD/.agents/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs" \
|
|
298
|
+
"$PWD/.opencode/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs" \
|
|
299
|
+
"$HOME/.claude/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs" \
|
|
300
|
+
"$HOME/.agents/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs" \
|
|
301
|
+
"$HOME/.config/opencode/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs"
|
|
302
|
+
do
|
|
303
|
+
if [ -f "$candidate" ]; then COLLECTOR="$candidate"; break; fi
|
|
304
|
+
done
|
|
305
|
+
test -n "${COLLECTOR:-}" || { echo "capture_blocked: bundled collector not found"; exit 1; }
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
필수 산출물은 `evidence.json` 하나이며 schema version, surface URL, selector, computed style, FontFaceSet, `@font-face` source, interaction state, component fingerprint와 coverage를 포함한다. hover/focus/pressed는 state-specific computed snapshot으로 남고, 안전하게 열 수 있는 menu/dialog/form-error/tab/toast는 `interactions[]`의 trigger/target/state로 남는다. `tokens.json`, `.live-inspect-proof.json`, `structure.json`은 이 bundle의 하위 projection으로만 만든다.
|
|
260
309
|
|
|
261
310
|
### Fast-path: browser-harness (있으면 우선)
|
|
262
311
|
|
|
263
312
|
`shutil.which("browser-harness")` 또는 `command -v browser-harness`로 detect. 있고 `browser-harness --doctor` 가 `[ok ] chrome running` 띄우면 fast-path:
|
|
264
313
|
|
|
265
|
-
-
|
|
314
|
+
- **용도**: 이미 로그인된 surface나 collector가 열지 못한 메뉴/모달을 보충한다. sub-agent의 "did live inspect" 보고 대신 실제 raw evidence를 남긴다.
|
|
266
315
|
- **prerequisite**: Python 3.11+, uv 또는 pip, Chrome with `--remote-debugging-port=9222` 또는 `chrome://inspect#remote-debugging` 활성.
|
|
267
316
|
- **호출 패턴**:
|
|
268
317
|
```bash
|
|
@@ -293,43 +342,47 @@ mode=clone이면 omd:init/omd:harness가 생성 HTML `<head>`에 fonts.json의 `
|
|
|
293
342
|
capture_screenshot(path="<assets_dir>/screenshots/hero-desktop.png", full=False)
|
|
294
343
|
PY
|
|
295
344
|
```
|
|
296
|
-
- 결과를 `
|
|
345
|
+
- 결과를 임의 JSON으로 끝내지 말고 `evidence.json`의 surface/state evidence와 동일한 필드로 reconcile한다. screenshot은 보조 자료이며 토큰 근거를 대신하지 않는다.
|
|
297
346
|
|
|
298
|
-
### Fallback:
|
|
347
|
+
### Fallback: browser-harness only
|
|
299
348
|
|
|
300
|
-
browser-harness
|
|
349
|
+
packaged collector가 없고 browser-harness만 있으면 위 fast-path를 사용한다. 둘 다 없으면 live 검증을 했다고 주장하지 말고 `capture_blocked`를 기록한다. Playwright MCP로 fallback하지 않는다.
|
|
301
350
|
|
|
302
351
|
### 자동 선택 logic
|
|
303
352
|
|
|
304
353
|
```bash
|
|
305
|
-
if
|
|
306
|
-
echo "MODE=
|
|
354
|
+
if [ -f "web/scripts/capture-reference-evidence.ts" ]; then
|
|
355
|
+
echo "MODE=local-collector"
|
|
356
|
+
elif [ -n "${COLLECTOR:-}" ] && [ -f "$COLLECTOR" ]; then
|
|
357
|
+
echo "MODE=packaged-collector"
|
|
358
|
+
elif command -v browser-harness >/dev/null && browser-harness --doctor 2>&1 | grep -q "ok.*chrome running"; then
|
|
359
|
+
echo "MODE=harness-supplement"
|
|
307
360
|
else
|
|
308
|
-
echo "MODE=
|
|
361
|
+
echo "MODE=capture-blocked"
|
|
309
362
|
fi
|
|
310
363
|
```
|
|
311
364
|
|
|
312
365
|
### 사용자 안내 (선택)
|
|
313
366
|
|
|
314
367
|
skill 진입 시 사용자에게 한 줄로 알림:
|
|
315
|
-
> "
|
|
368
|
+
> "MCP 없이 evidence collector로 N개 surface를 캡쳐합니다." 또는 "collector가 없어 live capture가 막혔습니다."
|
|
316
369
|
|
|
317
370
|
이 안내는 informational only, 사용자 action 요구 X.
|
|
318
371
|
|
|
319
372
|
## Phase 4 — 토큰 캡쳐 (facts)
|
|
320
373
|
|
|
321
|
-
**Proof gate (위반 = regression)**: 이 Phase는 실제
|
|
374
|
+
**Proof gate (위반 = regression)**: 이 Phase는 실제 navigation + computed style 추출이 일어났음을 `evidence.json`으로 증명해야 한다. 사람이 쓴 "라이브 inspect 했다" 문장은 증거가 아니다.
|
|
322
375
|
|
|
323
376
|
### 4.0 — `.live-inspect-proof.json` 작성 (REQUIRED, 이 파일 없으면 후속 generator는 live_overrides 무시)
|
|
324
377
|
|
|
325
|
-
|
|
378
|
+
collector의 `evidence.json`에서 raw computed style 5개 이상을 projection해 `assets/_reference/<id>/.live-inspect-proof.json`에 저장한다:
|
|
326
379
|
|
|
327
380
|
```json
|
|
328
381
|
{
|
|
329
382
|
"navigated_at": "<ISO-8601 with seconds>",
|
|
330
383
|
"source_url": "https://www.banksalad.com",
|
|
331
384
|
"viewport": "1280x800",
|
|
332
|
-
"tool_used": "
|
|
385
|
+
"tool_used": "reference_evidence_collector_v1",
|
|
333
386
|
"raw_samples": [
|
|
334
387
|
{ "element_selector": "body", "font-family": "Pretendard, ...", "color": "rgb(0, 0, 0)", "background": "rgba(0, 0, 0, 0)" },
|
|
335
388
|
{ "element_selector": "header nav a:first-child", "font-size": "14px", "font-weight": "500" },
|
|
@@ -337,19 +390,20 @@ playwright `browser_navigate` 직후 `browser_evaluate`로 raw computed style 5
|
|
|
337
390
|
{ "element_selector": ".hero-section section", "background-color": "rgba(0, 0, 0, 0)" },
|
|
338
391
|
{ "element_selector": "footer", "background-color": "rgb(255, 255, 255)" }
|
|
339
392
|
],
|
|
340
|
-
"
|
|
393
|
+
"evidence_schema_version": 1,
|
|
394
|
+
"evidence_bundle": "./evidence.json"
|
|
341
395
|
}
|
|
342
396
|
```
|
|
343
397
|
|
|
344
|
-
후속 generator (omd:init / omd:harness)는
|
|
398
|
+
후속 generator (omd:init / omd:harness)는 `evidence.json`의 `schemaVersion === 1`, `surfaces.length >= 1`, raw element ≥5를 먼저 확인한다. legacy proof 파일만 있고 bundle이 없으면 canonical만 사용한다.
|
|
345
399
|
|
|
346
400
|
### 4.1 — drift detection (proof와 tokens.json#live_overrides 일관성)
|
|
347
401
|
|
|
348
|
-
tokens.json
|
|
402
|
+
`tokens.json#live_overrides`의 각 값은 bundle의 `surfaceId + selector + style property`로 역추적 가능해야 한다. canonical과 값이 같다는 이유만으로 실패 처리하지는 않지만, provenance가 없으면 override를 삭제한다.
|
|
349
403
|
|
|
350
404
|
### 4.2 — token 캡쳐 본문
|
|
351
405
|
|
|
352
|
-
|
|
406
|
+
`evidence.json`의 aggregate와 representative raw element를 reconcile한다. 결과는 `assets/_reference/<id>/tokens.json`:
|
|
353
407
|
|
|
354
408
|
```json
|
|
355
409
|
{
|
|
@@ -385,7 +439,7 @@ playwright MCP를 사용해 homepage에 navigate한 뒤 computed styles를 추
|
|
|
385
439
|
}
|
|
386
440
|
```
|
|
387
441
|
|
|
388
|
-
|
|
442
|
+
최소 샘플은 `body` / heading / hero CTA / card 또는 form / footer이며, 각 샘플은 bundle selector를 보존한다. 캡쳐하려는 brand가 카탈로그에 없으면 URL을 직접 collector에 전달한다. 카탈로그에 신규 brand를 추가하는 워크플로우(omd-add-reference)는 dev 레포에만 존재한다.
|
|
389
443
|
|
|
390
444
|
## Phase 4.5 — 구조 cue 캡쳐 (structure.json)
|
|
391
445
|
|
|
@@ -505,7 +559,7 @@ structure.json에는 텍스트·이미지·copy·brand statement 일체 X. 오
|
|
|
505
559
|
|
|
506
560
|
### 5.2 Hero screenshot
|
|
507
561
|
|
|
508
|
-
|
|
562
|
+
evidence collector와 같은 로컬 Playwright context 또는 browser-harness로 homepage 위 fold만 캡쳐(MCP 불필요):
|
|
509
563
|
|
|
510
564
|
- viewport: 1280×800 (데스크탑 기본)
|
|
511
565
|
- fullPage: **false** — 위 fold만
|