Repository navigation
feat(usage): Muse Code CLI로 META 구독 사용량 표시 - #357
Conversation
- provider-usage-meta: `muse serve --provider meta --disable-write --disable-shell --no-session-log`를 띄워 MSP initialize 후 usage/read만 묻고 stdin을 닫는다. prompt와 모델 호출은 없다. 허용된 비밀 아닌 환경 변수만 넘기고, 15초 timeout과 응답 1MiB 상한, SIGKILL fallback을 둔다. - meta source를 kind "meta", TTL 5분으로 바꾸고 loadSubscriptionUsage가 probe로 읽는다. CLI 없음은 connect 안내, 관측 전은 no observed usage yet, 실패는 usage unavailable. - 테스트: 파서, 상태별 메시지, 자격 증명 미사용, 환경 변수 제한, PATH의 가짜 muse로 실제 handshake. - providers 문서, CHANGELOG 갱신.
|
OMK Community Thanks for opening this pull request. Mention Automated response. No code changes or merges are performed. |
dmae97
left a comment
There was a problem hiding this comment.
81429b4 검토에서 병합 전 수정이 필요한 프로세스 종료 경로를 재현했습니다. 아래 stdin 오류 처리를 추가해 주세요. 클라우드의 Node 24.22.1에서 이 커밋의 provider-usage-meta.ts와 provider-usage-text.ts를 그대로 사용했고, 실제 Muse나 외부 API 대신 가짜 프로세스만 실행했습니다. 전체 저장소 테스트를 새로 실행한 것은 아닙니다.
현재 CI run 42183630509는 build/check/test는 통과했지만 secret-scan이 실패했습니다. 로그에는 git log ... --full-history --all을 대상으로 과거 테스트 파일의 17개 탐지가 기록되어 있어, 이 PR이 새 비밀을 추가했다고 판단할 근거는 아닙니다. 그렇더라도 검사를 건너뛸 수는 없으니 탐지 내용을 검토하고 통과한 결과가 필요합니다. #356 선행 병합과 main 기준 재검증도 필요해 병합은 보류합니다.
| } | ||
|
|
||
| function write(child: ChildProcess, packet: Record<string, unknown>): void { | ||
| child.stdin?.write(`${JSON.stringify(packet)}\n`); |
There was a problem hiding this comment.
[P1] Muse의 stdin 오류를 처리해야 합니다. child.on("error", ...)는 child.stdin Socket의 error 이벤트를 잡지 못합니다. 가짜 Muse가 fs.closeSync(0) 뒤 {jsonrpc:"2.0", id:1, result:{}}를 stdout에 쓰고 잠시 살아 있게 하면, 이어지는 initialized/usage/read write에서 처리되지 않은 EPIPE가 나며 부모가 exit 1로 종료됩니다. fetchMetaUsage의 try/catch도 이 비동기 EventEmitter 오류를 잡지 못하므로, 선택적인 사용량 조회 실패가 TUI 전체를 종료시킬 수 있습니다. stdin 오류를 finish({kind:"failed"})로 연결하고 종료 후 write를 막아 주세요. stdin이 닫힌 상태에서 initialize 응답이 도착해도 부모가 살아 있고 usage unavailable로 끝나는 회귀 테스트가 필요합니다.
요약
Meta(
meta) OAuth로 로그인되어 있으면, 상태 레일 USAGE에 META 사용량을 공식 Muse Code CLI에서 읽어 보여 줍니다. 지금 main에서는quota API unavailable로 고정되어 있습니다.provider-usage-meta.ts(새 파일, 220줄) 동작muse serve --provider meta --disable-write --disable-shell --no-session-log를 띄웁니다.initializehandshake 후usage/read만 묻고 stdin을 닫아 host를 종료시킵니다. prompt를 보내지 않고 모델도 호출하지 않습니다.PATH,HOME, locale, temp/config 디렉터리처럼 정해진 비밀 아닌 환경 변수만 넘깁니다. OMK가 가진 키는 보내지 않습니다.no observed usage yet(tier가 있으면 함께)로, 0%가 아닙니다.connect:안내, 실패나 timeout이면usage unavailable입니다.docs/providers.md,CHANGELOG.md.원래 체크아웃의 미커밋 작업에서 이 부분만 골라 옮겼습니다. 원래 작업에는 이 모듈의 테스트가 없어서 새로 썼습니다.
검증 (로컬, 커밋 81429b4)
provider-usage-meta.test.ts(8개)PATH에 둔 가짜muse로 실제 handshake와 serve 인자를 확인하고, 응답 전에 종료되는 경우와 CLI가 없는 경우도 확인npx vitest --run: provider-usage,StatusSidebarComponent,statusPanelModel,loadSubscriptionUsage를 쓰는 10개 파일, 147개 통과npx tsgo --noEmit,npx biome check --error-on-warnings .,check:module-size,check:import-cycles,check:ts-imports,check:doc-links,check:feature-claims,check:release-surfacemuse serve --help에--disable-write,--disable-shell,--no-session-log,--provider가 모두 있습니다.fetchMetaUsage를 한 번 실행해 471ms에usage/read응답(no observed usage yet)을 받았고, 남은muse serve프로세스는 없었습니다.