파이프라인 1단계(Discovery) 산출물. 출처 세 갈래 — (1) ankurg132/flutter_ide 정적 분석(전문:
docs/flutter-ide-analysis-fullstack-code-editor.md) (2)coco-de/cocodeorigin/development@18c8326현황 실측(2026-09-16) (3) 시장·기술 보강 조사(WebSearch/WebFetch, 2026-09-16 — 출처는 문서 끝 §7). 상태:.pipeline/fullstack-code-editor.yaml· Level 3(대규모 기능/신규 모듈) · 상위 파이프라인.pipeline/cocode.yaml(Level 4, cocode ADE). ⚠️ 근거 등급: 상위 Seed Spec(docs/seed-spec-cocode.mdv3.4.0)은 DRAFT(Specification Gate 미통과)이므로 아래C-xx·AC-xx인용은 확정 계약이 아니라 작업 가설이다. 이 문서의 모든 수치는 출처를 병기하며, 출처 없는 목표치는 쓰지 않는다 — 상위 파이프라인이 8라운드 동안 "지어낸 수치를 불변 층위에 잠그는" 결함으로 게이트를 통과하지 못한 교훈(docs/spec-evaluation-cocode.md§반복된 실패 패턴 1번)을 따른다.
0. 요청의 해석 — "풀스택 코딩 에디터"가 여기서 뜻하는 것
사용자 요청 원문: "https://github.com/ankurg132/flutter_ide 분석해서 풀스택 코딩 에디터 구현 진행해보자".
"풀스택"은 두 가지로 읽히고, 어느 쪽인지가 이후 모든 단계의 범위를 가른다.
| 해석 | 내용 | 상위 명세와의 관계 |
|---|---|---|
| H1. Dart 풀스택 에디터 (권장, 이 문서의 작업 가설) | Flutter(모바일·데스크톱 클라이언트) · Jaspr(웹) · Serverpod(서버) · PostgreSQL 을 한 창에서 편집·실행·검사하는 에디터. 코코드 조직의 표준 스택과 일치한다(cc-product 스킬 노트: "Cocode team uses Dart full-stack (Flutter + Jaspr Web + Serverpod)"; 이 리포 자체가 app/ + backend/cocode_server(Serverpod) + feature/console(웹) 구조) |
C-03(Dart/Flutter 전용 포지셔닝) · AC-05(비-Dart 1급 프로젝트 타입 없음)와 합치. SQL·YAML·Dockerfile·CI 설정 등 비-Dart 파일 편집은 C-03 후단("프로젝트 내부의 비-Dart 파일 편집은 제한하지 않는다")에 따라 허용 |
| H2. 다국어 풀스택 에디터 | TS/Node·Python 등 임의 스택을 1급 프로젝트 타입으로 지원하는 범용 에디터 | AC-05(Must-Not)·C-03 과 정면 충돌. Seed Spec 스키마상 Core Problem·Immutable Constraints 는 잠긴 뒤 변경 불가이므로, H2 는 상위 Seed 를 "진화"시키는 게 아니라 새 Seed 를 쓰는 일이다 |
H1/H2 확정은 Specification 인터뷰 Level 1 의 1순위 질문이다(§5.1 Q1).
한 가지 더 짚어 둘 사실 — 상위 인수 경계 AC-03 은 이미 "코드 에디터·파일 트리·터미널을 포함한 개발자용 인터페이스"를 macOS·Windows·Linux 에 요구한다. 즉 코딩 에디터는 ADE 의 부속 옵션이 아니라 ADE 가 출시되려면 어차피 채워야 하는 표면이고, 오늘 그 표면은 플레이스홀더다(§1.3). 이번 작업은 그 공백을 "풀스택" 수준으로 채우는 것이다.
1. User Research
1.1 Target Personas
상위 파이프라인이 확정한 1차 고객(D-005: 코코드 내부 팀이 아니라 외부 Dart/Flutter 개발자 시장)을 승계하되, "풀스택"이 붙으면서 세그먼트가 좁아진다.
| 페르소나 | 정의 | 근거 | 이 작업에서의 위치 |
|---|---|---|---|
| P1. Serverpod 를 쓰는 외부 Dart 풀스택 개발자 | Flutter 클라이언트 + Serverpod 서버 + PostgreSQL 을 혼자 또는 소규모 팀으로 다루는 개발자. 현재는 VS Code(Dart-Code) + 터미널 여러 개 + 외부 DB 클라이언트를 오간다 | D-005 승계. Serverpod 4 가 serverpod start 로 "서버·DB·Flutter 앱을 한 명령으로 함께 실행"하는 방향으로 간 것(§2.2)은 이 페르소나의 워크플로가 실재함을 시사 |
1차 대상 |
| P2. 코코드 내부 팀(도그푸딩) | unibook 모노레포(Flutter 앱 + Serverpod 백엔드 + Jaspr/Flutter 웹 콘솔)를 개발하는 팀. 이미 cc-* 플러그인으로 에이전틱 워크플로를 운용 |
D-019 가 unibook 을 참조 워크스페이스로 고정(커밋 SHA 고정). Discovery 단계 P1 후보였으나 D-005 로 1차 고객에서 제외 | 검증 환경(AC-15 픽스처·도그푸딩), 고객은 아님 |
| P3. 비개발자·"드리머" | 코드 뷰 없이 자연어로만 조작하려는 사용자 | AC-04(Must-Not) | 범위 밖 |
표기 주의: 상위 Discovery(docs/discovery-cocode.md)는 P1=내부 팀·P2=외부 개발자였다. 이 문서는 1차 대상을 P1 로 두기 위해 번호를 다시 매겼으므로, 상위 문서를 인용할 때는 이름(내부/외부)으로 대조한다.
미검증: P1 이 "에디터 안의 DB 브라우저·API 클라이언트"를 원하는지, 아니면 익숙한 외부 도구(TablePlus·Postman 류)를 계속 쓰길 원하는지는 인터뷰로만 확정된다(§1.4 A-F5). 이 문서는 데스크 리서치 근거(Replit·Lovable 은 DB 를 내장, JetBrains 는 DB 도구를 IDE 에 통합)로 "원한다" 쪽을 가설로 둔다.
1.2 Key Insights
flutter_ide 정적 분석(§4.1 요약, 전문은 부속 문서)과 코코드 현황 실측에서 얻은, 행동으로 이어지는 통찰:
- Monaco-in-WebView 노선은 3-OS 요구와 양립하지 않는다. flutter_ide 는
flutter_monaco로 Monaco 를 WebView 안에 띄우는데, 최신 3.4.3 조차 Linux 미지원이고 에셋 약 30MB 를 첫 실행 시 추출하며 인스턴스당 30–100MB 를 쓴다(pub.dev, 2026-09-16). C-01 의 데스크톱 3종 요구 앞에서 Monaco 는 탈락이며, 이는 상위 파이프라인이re_editor를 고른 결정(D-066 유보 포함)을 독립적으로 재확인한다. - "편집 버퍼의 소유자"가 명시되지 않으면 데이터 손실은 구조적으로 발생한다. flutter_ide 는 Monaco 버퍼·
_currentCode·디스크 세 곳에 상태가 살고, 탭 전환·닫기·종료 시 저장(flush)이 없어 최대 2초 분량 편집이 결정론적으로 소실된다(editor_screen.dart:514-548, 부속 문서 §6-b). 코코드의CocodeEditorView는CodeLineEditingController를 뷰 밖에서 소유하도록 설계됐으므로(DD-06), 탭 스택을 만들 때 "버퍼 수명 > 탭 수명"을 명세에 박아야 같은 함정을 피한다. - Flutter 로 IDE 셸(크롬)을 만드는 것은 싸고, 의미론이 비싸다. flutter_ide 는 단일 저자가 약 4주(2025-12-11 ~ 2026-01-05, 커밋 22건)에 액티비티 바·트리·탭·터미널·git 사이드바를 다 그렸다. 그러나 LSP·검색·디버거·실행 구성·문제 패널은 전부 없다(부속 문서 §7). 코코드도 같은 상태다 — 패키지 11종에 테스트 약 1,442건이 있지만 앱 셸은 플레이스홀더(§1.3). 가치는 표면이 아니라 배선(에디터↔LSP↔실행↔검증)에서 나온다.
- flutter_ide 자체의 로드맵이 수렴 지점을 알려 준다. 열린 이슈는 Dart LSP(#6), 전역 검색↔에디터 연동(#7), AI 사이드바(#8), 설정 화면(#1)이다 — 데모 수준을 넘어서려는 순간 필요해지는 것이 정확히 이 넷이며, 코코드는 이 중 LSP 클라이언트·커맨드 팔레트·에이전트 런타임을 이미 패키지로 갖고 있다.
- 재사용은 "패턴만"이다. flutter_ide 저장소에는 LICENSE 파일이 없다(GitHub API
license: null; README 본문에만 "MIT" 문구). 코드 복사는 배제하고,GitService의 porcelain 파서·PTY 배선 레시피·리사이즈 핸들 같은 설계 패턴만 가져온다(부속 문서 §8). - 터미널은 코코드의 가장 큰 미결 표면이다.
terminal은 xterm/PTY 를 쓰지 않는 자체 구현으로, 커서 이동·대체 화면을 폐기하는 스크롤백 뷰이고 백엔드는 파이프(isPseudoTerminal:false)라 vim·htop 은 물론flutter run의 대화형 키(r/R/q)도 정상 동작을 보장하지 못한다. 유지되는 포크xterm2 5.2.0·flutter_pty2 1.0.2(sofluffy.io, MIT)가 있으나 D-067 이 xterm2 의 IME 결함 재현을 확인해 미채택했다. AC-16(한글 IME, 3-OS×에디터·터미널)은 D-069 기준 6조합 전부 미충족 — 풀스택 에디터의 터미널·프로세스 관리는 이 미결 위에 서야 한다.
1.3 현재 코코드 셸의 공백 (2026-09-16 실측)
app/cocode/lib/main.dart(106줄, PR #289)가 오늘 그리는 것:
슬롯(CocodePaneId) |
실제 내용 | 패키지에는 있는가 |
|---|---|---|
navigation |
CocodeFileTree — 정적 3노드(lib·test·README.md), 자식 로더는 빈 목록 |
ui 트리·가상 목록 완성. 디렉터리 워커 없음 |
editorStack |
ColoredBox + 슬롯 이름 텍스트(플레이스홀더) |
editor: CocodeEditorView(re_editor 0.10.0)·찾기 패널·구문 스킴 완성. 탭 스택·버퍼 관리 없음 |
terminal |
플레이스홀더 | terminal: 자체 ANSI 파서 + 파이프 백엔드. PTY 없음 |
workbench |
플레이스홀더 | — |
inspector |
CocodeTaskInspector(selectedTaskId: null) |
ui 위임 워크플로 UI 21종 완성(위젯북 발행) |
statusBar |
CocodeStatusBar(0/0/0) |
완성 |
app/cocode/pubspec.yaml의 워크스페이스 의존은core·ui·workspace·coui_flutter넷뿐.editor·terminal·lsp·desktop_platform·toolchain·agent·acp·bricks8종은 앱에 연결되지 않았다.ContractRegistry부트스트랩 등록·AgentRuntime등록·Bloc 컨테이너 0건.lsp의CocodeLspClient가 요구하는TextDocumentSource구현체가 리포에 없다 — LSP 는 붙일 곳이 없다. 진단(diagnostics)은 읽고 버린다(#60 AC3).- C-04 자가 검증 ①빌드 ②테스트 ③핫 리로드 ④정적 분석의 실행자(
VerificationMethodExecutor) 구현은 lib 에 0건(테스트 페이크뿐). app/cocode/**는analysis_options.yaml:123로 분석 제외, CI 테스트 스코프에서도 제외(D-031 도너 경계). 셸을 CI 안으로 들이는 것 자체가 첫 작업이다.- 창 분리·도킹은
WindowOperationUnsupported(D-025: Flutter 3.47.x stable 유지, master 채널 윈도잉 미채택).
→ 결론: "풀스택 코딩 에디터"의 첫 트랙은 새 기능이 아니라 셸 통합이다(§4.2 트랙 A). 이것 없이는 어떤 풀스택 표면도 붙을 자리가 없다.
1.4 Validated / Unvalidated Assumptions
| ID | 가정 | 유형 | 상태 | 검증 방법 |
|---|---|---|---|---|
| A-F1 | "풀스택" = Dart 풀스택(Flutter·Jaspr·Serverpod·PostgreSQL)이며 다국어 1급 지원은 요구되지 않는다 | Desirability | 미검증 — 이 문서의 최상위 가정 | Specification 인터뷰 Q1(§5.1). H2 라면 상위 Seed 재작성 |
| A-F2 | re_editor 0.10.0 위에 다중 탭·버퍼 관리·전역 검색을 얹어도 AC-15(10만 줄 응답성)를 유지한다 |
Feasibility | 미검증 — 상위 A-03 "유보"(D-066) 상속. 단일 뷰 벤치(package/editor/benchmark/ac15_responsiveness_bench.dart)는 1k→10만 줄에서 스크롤·커서·선택 비용이 2~5 ms 로 평평하고 적재만 선형(10만 줄 122 ms, JIT flutter test)임을 보였으나 절대 프레임 타임은 미측정(AC-15 PENDING, docs/ac15-responsiveness-cocode.md) |
탭 스택 구현 후 같은 벤치를 "탭 N개 열림" 조건으로 재실행. 목표치는 오너가 실측 뒤 결정(D-065) |
| A-F3 | 네이티브 PTY 백엔드를 CocodeTerminalBackend 계약 아래 추가하면 flutter run·serverpod start 의 대화형 키와 한글 IME(AC-16)를 3-OS 에서 만족시킬 수 있다 |
Feasibility | 미검증, 반증 이력 있음 — D-069 6조합 미충족, D-067 xterm2 결함 재현 | probe.ac16-ime-replay.yaml 3-OS 재생 워크플로를 PTY 백엔드에 대해 재실행 |
| A-F4 | Serverpod 4 의 serverpod start(서버+DB+Flutter 동시 실행·핫 리로드·자동 마이그레이션)를 실행 구성의 1급 대상으로 삼을 수 있을 만큼 4.0 이 이 에디터의 첫 릴리스 전에 안정화된다 |
Feasibility/Viability | 미검증 — 4.0 은 2026-07-08 public beta(serverpod.dev 블로그). 이 리포의 백엔드는 serverpod_cli 4.0.0-beta.3(CLAUDE.md) |
실행 구성을 "명령 템플릿"으로 추상화해 beta/stable 차이를 설정으로 흡수. stable 일정은 Serverpod 측 공지 추적 |
| A-F5 | P1 은 DB 브라우저·API 클라이언트가 에디터 안에 있는 것을 외부 도구 병행보다 선호한다 | Desirability | 미검증 — 데스크 리서치만(§2.2: Replit·Lovable 은 DB 내장, JetBrains 는 DB 도구 통합) | 사용자 인터뷰(§1.5 가이드) + Painted Door(팔레트에 명령만 노출하고 클릭률 관찰) |
| A-F6 | flutter_ide 코드를 복사할 필요가 없다 — 가치는 패턴에 있다 | Feasibility/Legal | 검증됨 — LICENSE 부재 + 부속 문서 §8 재사용 판정(부속 문서는 리사이즈 핸들 71줄만 '그대로 차용'으로 봤으나 라이선스 부재로 이것도 재작성한다 — 비용 0; 나머지는 패턴/폐기) | — |
| A-F7 | 사람의 직접 편집(에디터 타이핑·다중 파일 치환)은 C-02 의 EditSnapshot 대상이 아니므로, 에디터 기능은 WorkspaceFileGate 를 우회하지 않으면서도 스냅샷 부담 없이 구현할 수 있다 |
Feasibility | 미검증 — C-02 문면은 "사람이 에디터로 직접 하는 편집은 대상이 아니다"라 하지만, DD-15 dart:io 쓰기 허용 목록은 여전히 적용된다(현황 브리프 §7.1 검색/치환 행) |
Design 단계에서 "사람 편집 경로"의 쓰기 지점을 workspace 안에 어떻게 두는지 확정 |
| A-F8 | 사용자는 Firebase Studio 종료(2027-03-22) 이후 데스크톱 기반 Dart 풀스택 작업환경을 찾는다 | Viability | 미검증 — 종료 사실은 확인(§2.2), 수요 이동은 추정 | 출시 후 유입 경로 분석 |
1.5 인터뷰 가이드와 실험 설계 (요약)
인터뷰 가이드(The Mom Test — 과거 경험만 묻는다, 대상: P1 5~7명):
- 최근에 Serverpod 프로젝트에서 서버·클라이언트·DB 를 동시에 고친 작업을 하나 떠올려 주세요. 어떤 창들을 오갔고, 순서가 어땠나요?
- 그때 마이그레이션은 어떻게 만들고 적용했나요? 실패하면 무엇을 먼저 봤나요?
- 마지막으로 서버 로그와 클라이언트 콘솔을 나란히 봐야 했던 순간은 언제였나요?
- DB 안의 데이터를 확인할 때 무엇을 쓰나요? 그 도구를 열 때까지 몇 단계였나요?
- 에이전트(Claude Code·Codex 등)에게 서버 코드 수정을 맡겨 본 적 있나요? 결과를 어떻게 확인하고, 잘못됐을 때 어떻게 되돌렸나요?
- 지금 쓰는 에디터에서 한글 입력이 깨진 적이 있나요? 어디서(에디터/터미널), 어떤 OS 에서였나요?
MVP 실험(학습 목적, 수치 목표는 오너가 정한다):
- 가설: "셸 통합(트랙 A) + 에디터 코어(트랙 B) +
serverpod start실행 구성 하나"만으로도 P2(내부 팀)가 unibook 작업 하루를 cocode ADE 안에서 끝낼 수 있다. - 측정: ⓐ 하루 중 다른 에디터/터미널 앱으로 전환한 횟수와 사유 ⓑ 에디터를 떠나게 만든 기능 부재 목록(빈도순) ⓒ 데이터 손실·크래시 건수.
- 판정: 성공/실패 기준값은 첫 실측 분포를 본 뒤 오너가 정한다(D-065 와 같은 순서 — 실측 전 목표치 선고정 금지).
- 결과의 쓰임: ⓑ 의 상위 항목이 트랙 C·D 의 우선순위가 된다.
2. Market Analysis
2.1 Competitive Landscape
상위 Discovery(2026-08-25)의 지도(Zed·Cursor·Antigravity·Lumide·Serverpod 4·ACP 생태계, 실질 경쟁자 Orca)는 유효하다. "풀스택 에디터" 축에서 새로 보이는 것만 더한다.
| 경쟁축 | 대표 사례 | 이 작업과의 관계 |
|---|---|---|
| 클라우드 풀스택 AI 워크스페이스 | Firebase Studio — Flutter 가 1급 템플릿, Gemini 에이전트 모드, Firestore/Auth 프로비저닝, 프리뷰·배포 내장 | 2027-03-22 종료 확정, 2026-06-22 부터 신규 워크스페이스·가입 중단, 이전 대상은 Google AI Studio 또는 Antigravity(공식 문서). "Flutter 를 1급으로 두는 풀스택 워크스페이스" 자리가 비었고, 후계자는 둘 다 Flutter 특화가 아니다 |
| 풀스택 AI 앱 빌더 | Lovable(Supabase 통합·GitHub 동기화) · Bolt(JS 전용 백엔드) · Replit Agent(영속 서버 프로세스·내장 DB·브라우저 IDE) · v0(백엔드 생성 없음) | 전부 JS/Python·클라우드 중심, Flutter·Dart 부재. 다만 **"DB 와 서버 프로세스를 도구 안에 내장"**하는 것이 이 카테고리의 표준이 됐다는 점이 A-F5 의 데스크 근거 |
| AI 에디터(범용) | VS Code 포크(Cursor·Windsurf→Devin Desktop·Trae·Kiro) · 확장(Copilot·Cline·Continue) · AI 네이티브(Zed·Antigravity) · CLI 에이전트(Claude Code·Codex CLI·Aider) | 상위 Discovery 결론 유지 — 정면 승부 금지. 2026 사용 패턴은 "터미널 에이전트 + 일상 편집용 IDE + 백그라운드 에이전트"의 2~3종 병용이 일반적(DEV Community 비교 기사) — 코코드는 이 셋을 한 창의 ACP 호스팅으로 합치는 쪽 |
| Flutter 개발자의 현 기본값 | VS Code + Dart-Code: LSP·DAP·DevTools 임베드·핫 리로드 UI, Pub Workspaces 브레이크포인트 개선 진행 중(dartcode.org 릴리스 노트) | 실질적 대체 대상. 풀스택 에디터가 이기려면 "Dart-Code 가 못 하는 것"(서버·DB·마이그레이션·에이전트 롤백을 한 화면)에서만 이겨야 한다 |
| Flutter 특화 빌더 | FlutterFlow(프론트 비주얼 빌더 + 외부 BaaS: Firebase·Supabase·Xano) · DhiWise(2025년 Flutter 특화에서 이탈, 프롬프트→풀스택 웹 앱 생성으로 피벗) | 프론트 생성 도구지 에디터가 아님. FlutterFlow 는 백엔드를 외부에 두므로 "Dart 서버까지 한 창"은 빈자리 |
| Serverpod 자체 툴링 | Serverpod 4(2026-07-08 public beta): serverpod start 가 서버·DB·Flutter 앱을 함께 실행하고 변경을 핫 리로드하며 마이그레이션을 자동 적용. 번들 AI agent skills + MCP 서버(마이그레이션 생성·적용, 로그 읽기, 앱 구동·스크린샷 — 문서 검색 결과 기준) |
상위 Discovery 와 같은 결론 — 경쟁이 아니라 통합 대상. 풀스택 에디터의 실행 구성·DB 마이그레이션 UI 는 serverpod CLI/MCP 를 호출하는 쪽이 맞고, 자체 재구현은 피한다 |
| 선례 | flutter_ide(분석 대상), Lumide(상위 실사) | 둘 다 "Flutter 로 IDE 셸" 증명. flutter_ide 는 macOS 한정·데이터 손실·라이선스 부재로 부품 재사용 불가(패턴만) |
2.2 보강 조사 (2026-09-16 기준)
- Firebase Studio 종료: 공식 문서 문구 — "Firebase Studio is sunsetting on March 22, 2027. As of June 22, 2026, new workspace creation and user signup are disabled." 이전 경로는 Google AI Studio / Antigravity. Firebase 는 대신 Android·iOS·Flutter·Web 용 Agent Skills 와 AI Studio 의 Cloud Run 원클릭 배포로 방향을 틀었다(Google I/O 2026 Firebase 발표). → 클라우드 풀스택 Flutter 워크스페이스 카테고리에서 구글이 빠진다.
- Serverpod 4 Jetstream:
serverpod start로 "Serverpod will run and manage your full stack. When changes are detected, they are immediately hot-reloaded." 4.0 beta 에 geography 타입·클라이언트 사이드 DB·모델 dynamic 타입 포함, offline-first 동기화 엔진은 stable 로 예고. agent skills 는 antigravity·claude·cline·codex·copilot·cursor·opencode 등 에디터별 설치 지원(문서 검색 결과). → 코코드가 ACP/자체 런타임으로 호스팅하는 에이전트에게 같은 skills 를 그대로 공급하는 경로가 열려 있다. - Flutter 데스크톱 윈도잉: 프레임워크 API 는 완성됐으나 전부
@internal, 기능 플래그는 main 채널 전용(2026-08 기준 기사, flutter/flutter#30701). stable 에서는desktop_multi_window플러그인뿐. → D-025(stable 유지, 단일 창) 유지가 여전히 맞다. 분할 뷰는 창이 아니라 페인 내부 분할로 푼다. - 디버거 프로토콜:
flutter debug-adapter/dart debug_adapter가 DAP 준수 어댑터를 공식 제공하고,--test모드는dart.testNotification커스텀 이벤트를 낸다(flutter_tools README).package:dds의DartDebugAdapter클래스 공개. → 디버거는 자체 구현이 아니라 DAP 클라이언트(lsp와 같은 결의 프레이밍 코덱)로 충분하다. - Jaspr: SSR·SSG·SPA 지원, 2026-04 Google Open Source Blog 소개. 이 리포의
feature/console웹 콘솔은 Jaspr 병행 배포 구조(cocode_server→jaspr_tailwind의존 이력,.pipeline/cocode.yamlscaffold 절). → "Dart 풀스택"의 웹 축은 Jaspr 로 닫힌다. - 에디터·터미널 부품 현황(pub.dev):
re_editor0.10.0(6 플랫폼, "IDE 급 동적 구문 분석은 없다"고 스스로 명시 — 완성·힌트는 LSP 가 채워야 함) ·flutter_monaco3.4.3(Linux 미지원, 에셋 ~30MB) ·xterm4.0.0(2년 무갱신) → 유지 포크xterm25.2.0 ·flutter_pty0.4.2(discontinued) → 유지 포크flutter_pty21.0.2(Linux·macOS·Windows·Android, MIT). 단 D-067 이 xterm2 결함 재현을 확인해 미채택한 상태 — PTY 는flutter_pty2만 따로 평가할 여지가 있다(터미널 뷰와 PTY 는 분리 가능).
2.3 Differentiation Points
VS Code+Dart-Code 와 클라우드 빌더 사이에서 방어 가능한 축:
- Dart 풀스택을 한 창에서 — Flutter·Jaspr·Serverpod·PostgreSQL 의 편집·실행(
serverpod start)·로그·마이그레이션·데이터 확인이 한 워크스페이스 안. 경쟁자 중 누구도 Dart 서버를 1급으로 두지 않는다(§2.1). - ADE 안전망 위의 에디터 — 사람 편집과 에이전트 편집이 같은 화면에 있고, 에이전트 편집만 EditSnapshot·잠금·승인 게이트를 지난다(C-02·C-05·AC-11·AC-12). VS Code 확장으로는 흉내 내기 어려운, 이미 구현된 인프라(
workspaceFileWorkspaceGate·RollbackEngine·FileEditLockRegistry). - 결정론적 풀스택 골격 —
bricksScaffoldEngine(mason 인프로세스, 스테이징→단일 이동)으로 서버·클라이언트·웹이 규약대로 생성된 워크스페이스에서 시작. 클라우드 빌더의 "프롬프트 → 임의 구조"와 반대 축. - 가벼움(실측) — 최소 셸 아카이브 24.51 MiB / 디스크 58.29 MiB / 첫 프레임 967 ms / 유휴 RSS 약 104 MiB, macOS 1종 측정(
docs/a06-shell-footprint-cocode.md). Electron 부재가 원인이라는 상위 통찰은 그대로 유효하며, 목표치는 여전히 미정(D-071).
3. Vision
3.1 Vision Statement (초안 — Specification 단계에서 확정)
"Dart/Flutter 개발자가 프론트(Flutter·Jaspr)·서버(Serverpod)·DB(PostgreSQL)를 한 창에서 편집·실행·검사하고, 같은 창에서 에이전트에게 맡긴 편집을 검토·되돌릴 수 있는, 데스크톱 3종용 풀스택 코딩 에디터 — cocode ADE 의 개발자 표면."
Geoffrey Moore 형식: For Serverpod 를 쓰는 Dart 풀스택 개발자, who 서버·클라이언트·DB 를 한 작업에서 함께 고치며 여러 도구를 오가는, the cocode ADE 에디터 is a 데스크톱 코딩 에디터 that 스택 전체를 한 워크스페이스에서 실행·검사하고 에이전트 편집을 원자적으로 되돌린다. Unlike VS Code+Dart-Code(서버·DB 는 외부 도구)나 클라우드 빌더(Flutter 부재·코드 소유권 약함), our product Dart 스택 전용으로 설계돼 롤백·잠금·승인이 에디터 안에 있다.
상위 비전 문장(bricks·skills 워크플로의 제품화)과 충돌하지 않으며, 그 문장의 "개발자용 인터페이스" 부분을 구체화한 것이다.
3.2 North Star Metric (후보 — 미확정 유지)
상위 PRD §1.2 는 NSM 을 "지금 정하지 않는다"로 뒀다. 그 결정을 존중하되, 풀스택 축에서 후보를 좁힌다:
| 후보 | 적용 시나리오 | 측정 가능성 |
|---|---|---|
| 풀스택 워크스페이스(서버·클라이언트 디렉터리가 모두 있는 워크스페이스)의 주간 활성 수 | "한 창에서 풀스택"이 핵심 가치라면 | 워크스페이스 메타로 로컬 계측 가능(원격 전송은 별도 동의) |
| 편집→저장→(서버+클라이언트) 핫 리로드 사이클의 에디터 내 완주 비율 | 실행 구성 통합이 핵심 가치라면 | 실행 구성 이벤트로 계측 가능 |
| 에디터 밖 도구 전환 없이 끝난 세션 비율 | §1.5 실험의 ⓐ 를 그대로 지표화 | 세션 로그 + 자기 보고 혼합 |
4. Ideation
4.1 flutter_ide 분석 요약
전문은 docs/flutter-ide-analysis-fullstack-code-editor.md(8개 절, 파일:행 인용). 여기서는 판정만 옮긴다.
무엇인가: VS Code 외형의 단일 창 에디터. 21 Dart 파일 / 5,030줄. Monaco(WebView) + 파일 트리 + 탭 + 2초 자동저장 + PTY 터미널(xterm 4.0.0 + flutter_pty 0.4.2) + pub.dev 검색 + 내장 브라우저 탭 + git 사이드바. 상태 관리 없음(setState 85회, 전역 함수 포인터 runTerminalCommand, top-level 싱글턴 fileService). 테스트 0건(빈 템플릿), CI 없음, README 의 5-플랫폼 주장과 달리 실동작 타깃은 macOS 하나(Linux: Monaco 미지원 / Windows: 브라우저 탭 미구현·단축키 Meta 전용 / Web: flutter_pty 무조건 import 로 컴파일 불가).
기능 인벤토리와 판정 (부속 문서 §3·§8 요약):
| 기능 | flutter_ide 실체 | 재사용 판정 | 코코드 대응물 |
|---|---|---|---|
| Monaco 편집기 | WebView 호스팅, 2초마다 getValue() 폴링으로 문서 전체 IPC 회수 |
폐기 | editor CocodeEditorView(re_editor) |
| 탭 | 두 탭 위젯 복붙, dirty 표시·재정렬 없음 | 폐기 | 없음 — 신설 대상(탭 스택·버퍼 수명) |
| 자동저장·파일 감시 | Future.doWhile 취소 불가, 전환 시 flush 없음, 감시 억제는 500ms 타이밍 의존 |
폐기(문제 인식만 승계: 자체 저장 억제·빈 내용 보호) | 없음 — 신설(해시+세대 카운터 기반) |
| Quick Open | 파일명 substring, .dart 우선·build/ 후순위 랭킹 |
패턴만 | CocodeCommandPalette 확장 |
| 파일 트리 CRUD | 전체 트리 listSync 일괄, 삭제 후 폴더 선택창 재호출 버그 |
패턴만(디렉터리 우선 정렬·숨김 제외) | CocodeFileTree 지연 로더 + 신설 디렉터리 워커 |
| Flutter 프로젝트 뷰 | build() 안 동기 I/O |
폐기 | 트리 모델 위 필터로 재구현 |
| pub.dev 사이드바 | 검색→상세→flutter pub add; 라벨 버그(License 행에 이름) |
패턴만(플로우) | 신설 후보(트랙 D) |
| 터미널 | Pty.start↔TerminalView 배선 레시피는 표준; 명령은 셸에 문자열 타이핑 |
패턴만(배선) | terminal + 네이티브 PTY 백엔드 신설 |
| WebView 탭 | 첫 로드 후 모든 내비게이션을 새 탭으로 승격 | 패턴만(문서 브라우저 UX) | 신설 후보(트랙 D, 3-OS 가능한 구현 필요) |
| git 사이드바 | porcelain/pretty-format 파서·upstream/dirty 가드는 좋음; 커밋 전 무조건 git add -A, 체크아웃을 셸 타이핑(브랜치명 셸 인젝션 실재, git_sidebar.dart:880,883) |
패턴만(파서·가드) | 신설 cocode_git(트랙 D), 실행은 ToolchainProcessLauncher 경유 |
| 상태바·액티비티 바·리사이즈 핸들·웰컴 | 하드코딩 118색, Semantics 없음; 리사이즈 핸들만 순수 위젯(71줄) | 전부 패턴만 — 라이선스 부재로 복사 불가(리사이즈 핸들은 재작성 비용 0) | CocodeStatusBar·CocodeShellScaffold(CoUI Resizable) 이미 존재 |
| 단축키 | Meta+P·Meta+O 만 실제 배선, ⌘N·⌘클릭은 플레이스홀더 | 폐기 | CocodeKeyBindingRegistry(키맵 표 미정, UX-D-16) |
풀스택 관점 격차(부속 문서 §7): 다중 언어 LSP·문제 패널·디버거(DAP)·실행 구성·백엔드 프로세스 관리·다중 터미널·DB 브라우저·API 클라이언트·환경/시크릿·전역 검색/치환·분할 뷰·세션 복원·샌드박싱 — 전부 없음. 있는 것은 편집·트리·터미널·git·pub.dev 의 "부분".
4.2 Solution Direction
기존 아키텍처(docs/architecture-cocode.md §1.4 순환 차단 규칙 C1~C7, dependency_layers.yaml 래칫)를 그대로 지키며, 네 트랙으로 나눈다. 트랙 A 가 나머지의 전제다.
트랙 A 셸 통합 app/cocode 에 8개 패키지 배선 · ContractRegistry 12종 등록 · analyze/test 스코프 편입
트랙 B 에디터 코어 탭 스택 · 버퍼 수명 · 저장/외부 변경 감지 · 디렉터리 워커 · 전역 검색/치환 · TextDocumentSource → LSP 연결
트랙 C 풀스택 표면 실행 구성(serverpod start · flutter run · 테스트) · 네이티브 PTY + 다중 터미널/프로세스 패널 · DAP 디버거 · DB 브라우저 · API 클라이언트
트랙 D 보조 사이드바 git(cocode_git) · pub.dev · 문서 브라우저 · 설정/키맵
| 능력 | 착지 패키지(현황 브리프 §7.1) | 셸 표면 | 재사용 · 규약 |
|---|---|---|---|
| 셸 통합 | app/cocode pubspec 에 editor·terminal·lsp·desktop_platform·toolchain·agent·acp·bricks 추가; main.dart _pane 플레이스홀더 교체 |
editorStack·terminal 슬롯 |
contractTypes 12종 정확히 1회 등록 + DD-02a 완결성 테스트; analysis_options.yaml:123 exclude 를 도너 파일로 좁힘 |
| 탭 스택·버퍼 | editor(뷰) + 앱 레벨 세션 모델 |
editorStack — CoUI Tabs/TabPane, 분할은 페인 내부 중첩 Resizable(UX-D-03 범위) |
CodeLineEditingController 를 뷰 밖에서 소유(버퍼 수명 > 탭); 고빈도 이벤트 Bloc 미통과(DD-06) |
| 디렉터리 워커·감시 | workspace(읽기 전용 워커·인덱스 신설) |
navigation CocodeFileTree 지연 로더 |
.gitignore·build/ 제외; 쓰기는 DD-15 허용 목록 안 |
| 다중 언어 LSP | toolchain 에 서버 기동(ProcessLauncher.start + SandboxProfile) → ProcessLspTransport; TextDocumentSource 구현을 editor 에 신설 |
에디터 탭 | CocodeSyntaxRole 23종 = LSP 표준이라 언어 추가에 팔레트 변경 불요; 진단은 별도 DiagnosticsSink 계약(자가검증 ④ 와 절대 혼용 금지, C5); AC-05: 비-Dart 는 편집 지원까지만 |
| 실행 구성 | toolchain(ProcessLaunchRequest·EnvironmentWhitelist) + workspace(WorkspaceBuildTargets, D-052) · 영속 .cocode/config/workspace.json |
menuBar + CocodeCommandRegistry(K1) |
사람 실행 = humanTerminal 프로파일, 에이전트 실행 = agent 프로파일; serverpod start 는 명령 템플릿으로(A-F4) |
| 네이티브 PTY·프로세스 패널 | terminal CocodeTerminalBackend 의 두 번째 구현(FFI PTY; flutter_pty2 평가 대상) + toolchain 런처 |
terminal 슬롯 탭 그룹(터미널·검증 로그·문제) |
CocodeTerminalImeConnection(D-068) 유지; ANSI 파서에 커서 이동·대체 화면 추가 필요(현재 폐기) |
| 디버거 | 신설 cocode_debug(L2: core·toolchain) — DAP 클라이언트 |
하단 탭 + 에디터 거터(re_editor 거터 API) | vm_service 통로를 C-04 ③ 실행자와 공유 |
| DB 브라우저 · API 클라이언트 | 신설 cocode_db·cocode_http(L2) |
새 WindowSurfaceKind + navigation 탭; 표는 CocodeVirtualList + CoUI Table |
에이전트 발 네트워크는 PolicyProxyServer/HostAllowList(AC-14ⓑ); 접속 비밀은 CredentialVault — 현재 계약이 "LLM 키"로 한정돼 CredentialKey 네임스페이스 확장 결정 필요; DB 마이그레이션은 serverpod CLI/MCP 호출 |
| git | 신설 cocode_git(L2) — git CLI 를 ProcessLauncher.run 으로 |
트리 배지 CocodeNodeBadgeBuilder, diff 는 CocodeDiffView/CocodeMultiFileDiff 재사용 |
.cocode/history 롤백과 git 되돌림은 독립(DD-08) — 의미 혼용 금지 |
| AI 어시스트 | agent·acp 재사용 |
채팅은 inspector 슬롯 |
에이전트 편집은 ApplyFileEditUseCase → WorkspaceFileGate(C-02); Serverpod agent skills 공급 경로(§2.2) |
4.3 Technical Feasibility
| 영역 | 후보 | 판정 | 리스크·근거 |
|---|---|---|---|
| 에디터 코어 | re_editor 0.10.0 유지 |
채택(D-066 유보 상속) | 높음 — A-03 미검증·#254 PageUp/PageDown 미동작. 대안 Monaco 는 Linux 미지원으로 탈락(§1.2-1) |
| 구문·의미 색상 | re_highlight + LSP 시맨틱 토큰(lsp) |
채택(구현 완료) | 낮음 — TextDocumentSource 부재만 메우면 됨 |
| 다중 언어 LSP 서버 | Dart: dart language-server(SDK 내장) · SQL/YAML/Dockerfile: 외부 서버 |
가능 | 중간 — 외부 서버는 설치·기동 정책(샌드박스 허용 목록·환경변수 화이트리스트) 결정 필요 |
| 터미널 | 자체 terminal + 네이티브 PTY 신설(flutter_pty2 1.0.2 평가) |
조건부 | 높음 — AC-16 6조합 미충족(D-069), xterm2 결함 재현(D-067). 터미널 뷰와 PTY 를 분리 평가 |
| 실행 구성 | serverpod start(4.0 beta) · flutter run · dart test 를 ToolchainProcessLauncher 로 |
가능 | 중간 — Serverpod 4 stable 일정 미정(A-F4) |
| 디버거 | flutter debug-adapter/dart debug_adapter DAP 클라이언트 |
가능 | 낮음 — 공식 어댑터, 프레이밍은 lsp_message_codec 과 동형 |
| DB 접속 | postgres(순수 Dart 드라이버) |
가능 | 중간 — 비밀 저장(CredentialVault 확장)·dart:io 쓰기 허용 목록·AC-14 프록시 경유 설계 필요 |
| HTTP 클라이언트 | dio 5.9(package/core 이미 의존) |
가능 | 낮음 |
| 분할 뷰·다중 창 | 페인 내부 분할 / 다중 창은 WindowManager.detachSurface Unsupported |
분할만 | 낮음 — D-025(stable). 윈도잉 API 는 main 채널 전용(§2.2) |
| 웹 축(Jaspr) | 프로젝트 타입·실행 구성에 Jaspr 서브프로젝트 인식 | 가능 | 낮음 — 편집·실행 수준; 전용 UI 는 범위 밖 |
| 한글 IME | 에디터(re_editor)·터미널(자체) | 미해결 | 높음 — 상위 A-04 그대로. 새 텍스트 입력 표면(검색 패널·API 클라이언트 편집기)마다 I1~I3 규약(UX-D-18) 적용 |
가장 위험한 두 가정: (1) A-F3 터미널 IME·PTY — 풀스택 에디터는 터미널 의존도가 에디터보다 높다(서버 로그·마이그레이션·flutter run 키 입력). (2) A-F2 다중 탭 위 re_editor 응답성. 둘 다 상위 파이프라인의 게이팅 리스크(A-03·A-04)를 그대로 물려받으며, 이 작업이 그 스파이크를 "실사용 조건(탭 N개·PTY)"으로 확장하는 셈이다.
5. Recommendations
5.1 Specification 단계 입력 항목 — 오너 확답이 필요한 질문
아래는 Socratic 인터뷰 Level 1(표면) 질문이다. 각 항목에 이 문서의 권장안을 병기했으니, 동의하면 "권장안대로", 아니면 다른 답을 주면 된다. 답 없이 진행하면 상위 파이프라인이 겪은 "판정 주체 미정" 결함이 그대로 재발한다.
| # | 질문 | 권장안 | 이 답이 가르는 것 |
|---|---|---|---|
| Q1 | "풀스택"은 Dart 풀스택(Flutter·Jaspr·Serverpod·PostgreSQL)인가, 다국어(TS/Python 등 1급)인가? | Dart 풀스택(H1) — AC-05·C-03 과 합치, 조직 스택과 일치 | H2 면 상위 Seed 재작성, Level 4 재분류 |
| Q2 | 이 작업은 cocode ADE 의 하위 모듈(같은 app/cocode)인가, 별도 앱인가? |
하위 모듈 — AC-03 이 요구하는 표면을 채우는 것 | 별도 앱이면 셸·패키지 중복, Level 4 |
| Q3 | 첫 릴리스 범위는 트랙 A~D 중 어디까지인가? | A(셸 통합) + B(에디터 코어) + C 의 실행 구성·PTY 까지. DB 브라우저·API 클라이언트·디버거·git·pub.dev 는 §1.5 실험의 ⓑ 결과로 순서 결정 | Breakdown 의 Epic 수와 Story 점수 |
| Q4 | 에디터 코어는 re_editor 유지(D-066)인가, 재검토인가? |
유지 — Monaco 는 Linux 미지원·+30MB 로 탈락. 유보 조건(A-03)은 탭 N개 조건으로 재실측 | 트랙 B 전체 |
| Q5 | 새 Seed Spec 을 별도로 쓰되 C-01~C-05 를 상속하는가, 상위 Seed 를 evolve 하는가? | 별도 Seed + 상속 — 상위 Seed 가 DRAFT 라 evolve 프로토콜 대상이 아니고, 범위가 다르다 | Specification 산출물 형태 |
| Q6 | Serverpod 4(beta) 를 실행 구성의 1급 대상으로 삼아도 되는가, stable 까지 명령 템플릿 수준으로 두는가? | 명령 템플릿으로 시작, stable 후 1급 승격 | 트랙 C 실행 구성의 계약 |
| Q7 | 도그푸딩·AC-15 픽스처 워크스페이스는 unibook(D-019, SHA 고정)으로 하는가? | 예 | 실험 설계(§1.5)·벤치 조건 |
| Q8 | 터미널 PTY 는 flutter_pty2(외부, MIT) 평가를 허용하는가, 자체 FFI 로 가는가? |
flutter_pty2 평가 허용(D-067 은 xterm2 뷰 결함이었고 PTY 는 별개) |
트랙 C 터미널 |
5.2 인수해야 할 위험
- 상위 게이트 미통과 상태 위에 쌓는다. 상위 Seed(모호성 0.3125/기준 0.2)·Planning(0.63/0.8)·Design 게이트가 전부 미통과다. 이 파이프라인의 Seed 는 상위 C-xx 를 상속하되, 상위가 바뀌면 함께 바뀐다는 것을 Evolution Log 에 명시해야 한다.
- 터미널·IME 리스크가 상위보다 커진다(§4.3). 풀스택 워크플로는 터미널이 중심이다.
- 비밀 취급 범위 확장 — DB 접속 정보는 LLM 키가 아니므로
CredentialVault계약을 넓혀야 하고, 이는 D-034(BYOK, 자식 프로세스 전달 통로 없음)와의 정합성 검토를 요구한다. - AC-05 경계 관리 — 다국어 LSP 를 "편집 지원"으로 붙이는 순간 "1급 프로젝트 타입"과의 경계가 흐려질 수 있다.
CocodeProjectType에 언어 항목을 추가하지 않는 것으로 선을 긋고,check_mvp_scope_must_not.py스캔에 걸리지 않는 명명을 쓴다. - 범위 팽창 — 부속 문서 §7 의 격차 표(25행)를 전부 채우려 들면 Level 4 가 된다. Q3 의 답으로 첫 릴리스를 잘라야 한다.
5.3 다음 단계로 넘길 자료
- 이 문서 §0·§1.4·§5.1 → Specification Socratic 인터뷰 입력
- 부속 문서 §7·§8 → Seed Spec §4 인수 경계 초안의 "무엇을 안 만드는가" 목록
- 현황 브리프 §7(착지점 표, 이 문서 §4.2 에 요약) → Design 단계 아키텍처 입력
6. 판정 요약
| 항목 | 결론 |
|---|---|
| flutter_ide 의 가치 | "Flutter 로 IDE 셸" 증명 + 패턴 9종(부속 §5). 코드 재사용 불가(라이선스 부재·품질) |
| 코코드의 출발점 | 패키지 11종·테스트 약 1,442건은 있으나 셸은 플레이스홀더 — 첫 트랙은 셸 통합 |
| 시장 | 클라우드 풀스택 Flutter 워크스페이스(Firebase Studio)가 2027-03 종료. Dart 서버를 1급으로 두는 에디터는 없음. Serverpod 4 는 통합 대상 |
| 가장 큰 리스크 | 터미널 PTY·한글 IME(A-F3), 다중 탭 응답성(A-F2) |
| 다음 단계 전제 | §5.1 Q1~Q8 오너 답변 |
7. Sources
- ankurg132/flutter_ide — https://github.com/ankurg132/flutter_ide (GitHub API 실측 2026-09-16: 커밋 22 · 기여자 2 · ★35 · 포크 6 · LICENSE 없음)
- flutter_monaco — https://pub.dev/packages/flutter_monaco (3.4.3; Linux 미지원; 에셋 ~30MB)
- re_editor — https://pub.dev/packages/re_editor (0.10.0)
- xterm — https://pub.dev/packages/xterm (4.0.0) · xterm2 — https://pub.dev/packages/xterm2 (5.2.0) · flutter_pty2 — https://pub.dev/packages/flutter_pty2 (1.0.2)
- Firebase Studio 종료 고지 — https://firebase.google.com/docs/studio · Google I/O 2026 Firebase 발표 — https://firebase.blog/posts/2026/05/google-io-2026-announcements/
- Serverpod 4 public beta — https://serverpod.dev/blog/serverpod-4-public-beta · 4.0 업그레이드 문서 — https://docs.serverpod.dev/next/upgrading/upgrade-to-four
- Flutter 데스크톱 윈도잉 현황 — https://flutter.dev/blog/desktop-windowing-apis · https://startdebugging.net/2026/08/how-to-enable-multi-window-support-in-a-flutter-desktop-app/
- Dart/Flutter DAP — https://github.com/flutter/flutter/blob/master/packages/flutter_tools/lib/src/debug_adapters/README.md · https://pub.dev/documentation/dds/latest/dap/DartDebugAdapter-class.html
- Jaspr — https://opensource.googleblog.com/2026/04/jaspr-why-web-development-in-dart-might-just-be-a-good-idea.html · https://github.com/schultek/jaspr
- AI 에디터 시장 2026 — https://dev.to/chandrakantabehera/best-ai-ides-in-2026-cursor-vs-windsurf-vs-copilot-vs-zed-vs-claude-code-vs-codex-1gk7 · https://devgent.org/en/ai-code-editor-comparison-cursor-zed-windsurf-antigravity-kiro-developer-guide/
- 풀스택 AI 빌더 비교 — https://www.mindstudio.ai/blog/full-stack-ai-app-builders-compared · https://lovable.dev/guides/bolt-vs-replit-vs-lovable
- FlutterFlow/DhiWise — https://www.lowcode.agency/blog/flutterflow-alternatives · https://bilt.me/blog/flutterflow-alternatives
- Dart-Code 릴리스 노트 — https://dartcode.org/releases/v3-142/
- 코코드 내부:
docs/seed-spec-cocode.mdv3.4.0 ·docs/decision-log-cocode.md(D-001~D-073) ·docs/a06-shell-footprint-cocode.md·docs/planning-inputs-cocode.md·.pipeline/cocode.yaml·app/cocode/lib/main.dart@18c8326
Generated by cc-product Discovery stage (BMAD v6) · 2026-09-16 · slug fullstack-code-editor