-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Phase 1~3 — 프로젝트 기반, 플러그인 코어, 한국어 언어팩 #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
mapd3692
wants to merge
32
commits into
main
Choose a base branch
from
feature/initial-project-setup
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 24 commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
17182ae
Phase 1: 프로젝트 기반 구축
mapd3692 aac5a5c
Phase 2: 플러그인 코어 개발 — /lang 명령어 핸들러 완전 구현
mapd3692 9c55229
Phase 3: 한국어 언어팩 생성 및 locale-meta.json 업데이트
mapd3692 9cff0de
Add remaining Phase 1 files
mapd3692 ad2c33b
fix: Codex 리뷰 반영 — manifest id/configSchema, package extensions, cove…
mapd3692 93f2457
docs: README.md 한국어/영어 이중 언어 작성 (한국어 우선 배치)
mapd3692 1ceef37
fix: STATE_FILE 경로를 /app/data/로 이동 (자동 업데이트 복구)
mapd3692 73eb6d6
fix: extractNestedKeys lastIndex 업데이트로 nested 키 이중 카운팅 수정
mapd3692 decde8f
feat: scripts/en-keys/2026.3.13.txt 기준 키 파일 추가 (515개)
mapd3692 5e29ed5
fix: 플러그인 엔트리포인트를 register(api) API로 전환
mapd3692 b654983
fix: extract-keys.ts lastIndex 업데이트로 nested 키 이중 카운팅 수정
mapd3692 d461d80
fix: check-coverage.ts 참조 키 교집합 기반 coverage 계산
mapd3692 7bf0670
fix: check-coverage.yml에 pull-requests/issues write 권한 추가
mapd3692 9c5d2f2
fix: already-patched 상태 저장 누락 및 패치 앵커 실패 감지 추가
mapd3692 e38a566
chore: 스크립트 빌드 환경 설정 추가 (tsconfig.json, package.json, .gitignore)
mapd3692 37112e6
fix: CI 의존성 설치 방식을 npm ci로 변경
mapd3692 3261a2a
fix: check-coverage.ts 오류 메시지 및 coverage_markdown 줄바꿈 수정
mapd3692 ab71653
chore: plugin/index.ts writeState catch 블록 주석 수정
mapd3692 41e9206
fix: registerCommand/registerService를 OpenClaw 플러그인 API 명세에 맞게 수정
mapd3692 2b0eae9
fix: fork PR에서 코멘트 작성 실패 방지
mapd3692 97b7153
fix: OpenClaw 공식 타입 명세에 맞게 플러그인 API 시그니처 전면 교정
mapd3692 eeb0c6f
fix: Codex 리뷰 5차 반영 — default export, autoUpdate 안전성, 문법 검증 개선
mapd3692 9c0ba77
fix: Codex 리뷰 6차 반영 — ESM 파싱 수정, 로컬 개발 지원
mapd3692 5551ab5
fix: Codex 리뷰 7차 반영 — 런타임 경로 해결, http:// 지원, community chunk 거부
mapd3692 9fab1eb
fix: 문자열 리터럴 내 중괄호 파싱 수정 및 공식 locale 충돌 검사 추가
mapd3692 7abf45b
fix: Codex 리뷰 8차 반영 — 커버리지 중복 제거, coverage 필드 검증, README Gateway 재시작 안내
mapd3692 3c5d1ce
fix: Codex 리뷰 9차 반영 — exportName 구문 검사 강화 및 커뮤니티 alias 충돌 검사 추가
mapd3692 701441b
fix: Codex 리뷰 10차 반영 — orphan locale 파일 검사 및 exportName 변경 시 재패치
mapd3692 42cff50
fix: Codex 리뷰 11차 반영 — npm 미출시 설치 안내 제거 및 stateDir 기반 assets 경로 추론 수정
mapd3692 02fd143
fix: Codex 리뷰 12차 반영 — export 바인딩 검증, locale pack 버전 추적, find 경로 인용 처리
mapd3692 2f82372
fix: Codex 리뷰 13차 반영 — isAlreadyPatched 선행 확인 및 coverage CI 트리거 보완
mapd3692 12df569
fix: Codex 리뷰 14차 반영 — 재설치 시 chunk 갱신 및 CI 트리거 경로 보완
mapd3692 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| name: 새 언어 추가 요청 | ||
| description: 새로운 언어의 커뮤니티 번역을 추가합니다 | ||
| title: "[New Locale] " | ||
| labels: ["new-locale", "community"] | ||
| body: | ||
| - type: markdown | ||
| attributes: | ||
| value: | | ||
| 새로운 언어를 추가해 주셔서 감사합니다! 아래 정보를 채워주세요. | ||
|
|
||
| - type: input | ||
| id: locale-code | ||
| attributes: | ||
| label: 언어 코드 | ||
| description: "IETF 언어 태그 (예: ja-JP, vi-VN, fr-FR)" | ||
| placeholder: "ja-JP" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: input | ||
| id: locale-name | ||
| attributes: | ||
| label: 언어 이름 (원어) | ||
| description: "해당 언어의 원어 표기 (예: 日本語, Tiếng Việt, Français)" | ||
| placeholder: "日本語" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: input | ||
| id: aliases | ||
| attributes: | ||
| label: 별칭 (aliases) | ||
| description: "/lang 명령어에서 사용할 수 있는 별칭들 (쉼표 구분)" | ||
| placeholder: "ja, jp, japanese, 日本語" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: input | ||
| id: openclaw-version | ||
| attributes: | ||
| label: 대상 OpenClaw 버전 | ||
| description: "번역 대상 OpenClaw 버전" | ||
| placeholder: "2026.3.13" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: textarea | ||
| id: coverage | ||
| attributes: | ||
| label: 예상 번역률 | ||
| description: "전체 키 대비 번역한 키의 비율과 미번역 영역을 알려주세요" | ||
| placeholder: | | ||
| 번역률: 약 90% | ||
| 미번역: settings 섹션 일부 | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: textarea | ||
| id: notes | ||
| attributes: | ||
| label: 참고사항 | ||
| description: "번역 시 참고한 자료나 특이사항이 있으면 알려주세요" | ||
| placeholder: "OpenClaw PR #44902의 번역을 기반으로 작업했습니다." | ||
|
|
||
| - type: checkboxes | ||
| id: checklist | ||
| attributes: | ||
| label: 체크리스트 | ||
| options: | ||
| - label: chunk 파일이 올바른 JS export 형식입니다 | ||
| required: true | ||
| - label: locale-meta.json에 언어 정보를 추가했습니다 | ||
| required: true | ||
| - label: aliases가 기존 언어와 중복되지 않습니다 | ||
| required: true | ||
| - label: CONTRIBUTING.md의 가이드를 읽었습니다 | ||
| required: true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| name: 번역 개선 요청 | ||
| description: 기존 번역의 오류 수정이나 품질 개선을 요청합니다 | ||
| title: "[Translation] " | ||
| labels: ["translation-update"] | ||
| body: | ||
| - type: markdown | ||
| attributes: | ||
| value: | | ||
| 번역 개선에 기여해 주셔서 감사합니다! | ||
|
|
||
| - type: input | ||
| id: locale-code | ||
| attributes: | ||
| label: 언어 코드 | ||
| description: "수정 대상 언어 코드 (예: ko-KR)" | ||
| placeholder: "ko-KR" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: input | ||
| id: openclaw-version | ||
| attributes: | ||
| label: OpenClaw 버전 | ||
| description: "해당 번역의 OpenClaw 버전" | ||
| placeholder: "2026.3.13" | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: dropdown | ||
| id: type | ||
| attributes: | ||
| label: 요청 유형 | ||
| options: | ||
| - 오역 수정 | ||
| - 누락 번역 추가 | ||
| - 용어 통일 | ||
| - 문체 개선 | ||
| - 새 버전 키 추가 | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: textarea | ||
| id: details | ||
| attributes: | ||
| label: 상세 내용 | ||
| description: "수정이 필요한 부분과 제안하는 번역을 알려주세요" | ||
| placeholder: | | ||
| 키: common.health | ||
| 현재 번역: 건강 상태 | ||
| 제안 번역: 시스템 상태 | ||
|
|
||
| 이유: OpenClaw 맥락에서 "health"는 시스템 상태를 의미합니다. | ||
| validations: | ||
| required: true | ||
|
|
||
| - type: textarea | ||
| id: context | ||
| attributes: | ||
| label: 참고 맥락 | ||
| description: "해당 번역이 사용되는 UI 화면이나 맥락을 알려주세요 (스크린샷 첨부 가능)" | ||
|
|
||
| - type: checkboxes | ||
| id: checklist | ||
| attributes: | ||
| label: 체크리스트 | ||
| options: | ||
| - label: OpenClaw UI에서 해당 번역의 맥락을 확인했습니다 | ||
| required: true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| ## 변경 내용 | ||
|
|
||
| <!-- 이 PR에서 변경한 내용을 간단히 설명해주세요 --> | ||
|
|
||
| ## 번역 정보 | ||
|
|
||
| - **언어**: <!-- 예: 한국어 (ko-KR) --> | ||
| - **OpenClaw 버전**: <!-- 예: 2026.3.13 --> | ||
| - **번역률**: <!-- 예: 98% --> | ||
|
|
||
| ## 테스트 방법 | ||
|
|
||
| 1. OpenClaw에 플러그인 설치: `openclaw plugins install -l ./plugin` | ||
| 2. `/lang <언어코드>` 명령어 실행 | ||
| 3. 브라우저 새로고침 후 설정에서 언어 변경 확인 | ||
|
|
||
| ## 체크리스트 | ||
|
|
||
| - [ ] chunk 파일이 올바른 JS export 형식 (`var e={...};export{e as xx_XX};`) | ||
| - [ ] `locale-meta.json`에 언어 정보가 올바르게 등록됨 | ||
| - [ ] aliases가 기존 언어와 중복되지 않음 | ||
| - [ ] `CONTRIBUTING.md`의 파일명 규칙을 따름 (`{locale-code}-community.js`) | ||
| - [ ] 번역률이 `locale-meta.json`의 `coverage` 필드에 반영됨 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
| name: 번역률 계산 | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - "locales/**" | ||
| - "locale-meta.json" | ||
| push: | ||
| branches: | ||
| - main | ||
| paths: | ||
| - "locales/**" | ||
| - "locale-meta.json" | ||
|
|
||
| permissions: | ||
| pull-requests: write # fork PR에서 PR 코멘트 작성에 필요 | ||
| issues: write # issues.createComment / issues.updateComment 호출에 필요 | ||
| contents: read | ||
|
|
||
| jobs: | ||
| check-coverage: | ||
| name: 번역률 계산 | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - name: 체크아웃 | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Node.js 설정 | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: "20" | ||
|
|
||
| - name: 의존성 설치 | ||
| run: npm ci | ||
|
|
||
| - name: 번역률 계산 | ||
| id: coverage | ||
| run: npm run check-coverage | ||
|
|
||
| - name: PR 코멘트 작성 | ||
| # fork PR / Dependabot PR은 read-only 토큰이므로 코멘트 작성 건너뜀 | ||
| # 동일 레포 PR에서만 실행 (외부 기여자는 Actions 탭 로그로 결과 확인) | ||
| if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository | ||
| uses: actions/github-script@v7 | ||
| with: | ||
| script: | | ||
| const fs = require('fs'); | ||
|
|
||
| // 스크립트를 다시 실행하여 마크다운 결과 획득 | ||
| const { execSync } = require('child_process'); | ||
| let output; | ||
| try { | ||
| output = execSync('npm run check-coverage --silent', { encoding: 'utf-8' }); | ||
| } catch (e) { | ||
| output = e.stdout || '번역률 계산 중 오류가 발생했습니다.'; | ||
| } | ||
|
|
||
| // 번역률 테이블을 마크다운으로 변환 | ||
| const lines = output.split('\n'); | ||
| const tableLines = lines.filter(l => l.startsWith('|') || l.includes('===')); | ||
| let body = '## 📊 번역률 계산 결과\n\n'; | ||
|
|
||
| if (tableLines.length > 0) { | ||
| body += tableLines.filter(l => l.startsWith('|')).join('\n') + '\n'; | ||
| } else { | ||
| body += '번역 파일이 없습니다.\n'; | ||
| } | ||
|
|
||
| // 80% 미만 경고 | ||
| if (output.includes('⚠️')) { | ||
| body += '\n> ⚠️ **주의**: 번역률이 80% 미만인 언어가 있습니다.\n'; | ||
| } | ||
|
|
||
| body += '\n---\n🤖 *자동 생성된 코멘트 — [check-coverage.yml](.github/workflows/check-coverage.yml)*'; | ||
|
|
||
| // 기존 코멘트 찾아서 업데이트 또는 새로 생성 | ||
| const { data: comments } = await github.rest.issues.listComments({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| issue_number: context.issue.number, | ||
| }); | ||
|
|
||
| const botComment = comments.find(c => | ||
| c.body.includes('📊 번역률 계산 결과') && c.user.type === 'Bot' | ||
| ); | ||
|
|
||
| if (botComment) { | ||
| await github.rest.issues.updateComment({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| comment_id: botComment.id, | ||
| body, | ||
| }); | ||
| } else { | ||
| await github.rest.issues.createComment({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| issue_number: context.issue.number, | ||
| body, | ||
| }); | ||
| } | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.