feat(vscode): Maestro 서버 임베드 VS Code 확장 - #60
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
lib/server-embed.mjs를 재사용하는 얇은 소비자: 명령 4종(시작/중지/ 대시보드/로그), 상태바 토글, Output 채널 로그, Simple Browser 우선 대시보드. 서버 소유권 의미(재사용 서버 불간섭)는 embed 핸들 그대로. 라이프사이클 상태 머신은 vscode 비의존 모듈로 분리해 루트 스위트에서 단위 테스트(중복 시작·정지·실패·재사용 5건). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 18aab48c0f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
|
|
||
| async function activate(context) { | ||
| const { startMaestroServer } = await import(EMBED_PATH); |
There was a problem hiding this comment.
Load the embed module via a file URL
On Windows, EMBED_PATH is a drive-letter path such as C:\...\lib\server-embed.mjs; passing that string directly to dynamic import() makes Node treat c: as a URL scheme and reject with ERR_UNSUPPORTED_ESM_URL_SCHEME, so the extension fails during activation before any Maestro commands are usable. Convert the filesystem path with pathToFileURL(EMBED_PATH).href before importing.
Useful? React with 👍 / 👎.
| }, | ||
|
|
||
| async stop() { | ||
| if (!handle) return; |
There was a problem hiding this comment.
Honor stop requests during startup
If the user runs Stop Server or VS Code calls deactivate() while startServer() is still waiting for embed() to finish, handle is still null and this returns immediately; when startup later resolves, line 19 stores a live handle that was never stopped, leaving the server running after the stop/deactivate request. Track pending startup cancellation or await starting here and stop the resulting handle so stops during the health-check window are respected.
Useful? React with 👍 / 👎.
요약
2026-07 다음 후보 목록의 마지막 항목 — Claude Code 플러그인과 같은 소비자 패턴의 VS Code 확장.
스펙:
docs/superpowers/specs/2026-08-05-vscode-extension-design.md▶ Maestro 8080(클릭=대시보드) ↔⊘ Maestro(클릭=시작). deactivate 시 소유 서버 정리.lifecycle.cjs로 분리 — 루트 스위트tests/vscode-lifecycle.test.mjs5건(중복 start 핸들 유지, stop→재시작, 실패 시 idle, 재사용 구분, idle stop no-op).검증
루트 서버 76건(신규 5 포함) + UI 125건 전체 통과. 서버·lib 무변경(소비자 추가만).
참고: 로컬 test:ui가 17파일 수집 실패했던 것은 코드 문제가 아니라 로컬 node_modules 구버전(@capacitor/haptics 부재) —
npm ci로 해소, CI에는 영향 없음.🤖 Generated with Claude Code