Docs · Cocode ADE · 분석 · 설계 문서

풀스택 코딩 에디터 · E01

Discovery — 세 갈래 조사

오픈소스 Flutter IDE 정적 분석 · 기존 코드 실측 · 경쟁 에디터 조사

목차

파이프라인 1단계(Discovery) 산출물. 출처 세 갈래 — (1) ankurg132/flutter_ide 정적 분석(전문: docs/flutter-ide-analysis-fullstack-code-editor.md) (2) coco-de/cocode origin/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.md v3.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 요약, 전문은 부속 문서)과 코코드 현황 실측에서 얻은, 행동으로 이어지는 통찰:

  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 유보 포함)을 독립적으로 재확인한다.
  2. "편집 버퍼의 소유자"가 명시되지 않으면 데이터 손실은 구조적으로 발생한다. flutter_ide 는 Monaco 버퍼·_currentCode·디스크 세 곳에 상태가 살고, 탭 전환·닫기·종료 시 저장(flush)이 없어 최대 2초 분량 편집이 결정론적으로 소실된다(editor_screen.dart:514-548, 부속 문서 §6-b). 코코드의 CocodeEditorView 는 CodeLineEditingController 를 뷰 밖에서 소유하도록 설계됐으므로(DD-06), 탭 스택을 만들 때 "버퍼 수명 > 탭 수명"을 명세에 박아야 같은 함정을 피한다.
  3. Flutter 로 IDE 셸(크롬)을 만드는 것은 싸고, 의미론이 비싸다. flutter_ide 는 단일 저자가 약 4주(2025-12-11 ~ 2026-01-05, 커밋 22건)에 액티비티 바·트리·탭·터미널·git 사이드바를 다 그렸다. 그러나 LSP·검색·디버거·실행 구성·문제 패널은 전부 없다(부속 문서 §7). 코코드도 같은 상태다 — 패키지 11종에 테스트 약 1,442건이 있지만 앱 셸은 플레이스홀더(§1.3). 가치는 표면이 아니라 배선(에디터↔LSP↔실행↔검증)에서 나온다.
  4. flutter_ide 자체의 로드맵이 수렴 지점을 알려 준다. 열린 이슈는 Dart LSP(#6), 전역 검색↔에디터 연동(#7), AI 사이드바(#8), 설정 화면(#1)이다 — 데모 수준을 넘어서려는 순간 필요해지는 것이 정확히 이 넷이며, 코코드는 이 중 LSP 클라이언트·커맨드 팔레트·에이전트 런타임을 이미 패키지로 갖고 있다.
  5. 재사용은 "패턴만"이다. flutter_ide 저장소에는 LICENSE 파일이 없다(GitHub API license: null; README 본문에만 "MIT" 문구). 코드 복사는 배제하고, GitService 의 porcelain 파서·PTY 배선 레시피·리사이즈 핸들 같은 설계 패턴만 가져온다(부속 문서 §8).
  6. 터미널은 코코드의 가장 큰 미결 표면이다. 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·bricks 8종은 앱에 연결되지 않았다. 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명):

  1. 최근에 Serverpod 프로젝트에서 서버·클라이언트·DB 를 동시에 고친 작업을 하나 떠올려 주세요. 어떤 창들을 오갔고, 순서가 어땠나요?
  2. 그때 마이그레이션은 어떻게 만들고 적용했나요? 실패하면 무엇을 먼저 봤나요?
  3. 마지막으로 서버 로그와 클라이언트 콘솔을 나란히 봐야 했던 순간은 언제였나요?
  4. DB 안의 데이터를 확인할 때 무엇을 쓰나요? 그 도구를 열 때까지 몇 단계였나요?
  5. 에이전트(Claude Code·Codex 등)에게 서버 코드 수정을 맡겨 본 적 있나요? 결과를 어떻게 확인하고, 잘못됐을 때 어떻게 되돌렸나요?
  6. 지금 쓰는 에디터에서 한글 입력이 깨진 적이 있나요? 어디서(에디터/터미널), 어떤 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.yaml scaffold 절). → "Dart 풀스택"의 웹 축은 Jaspr 로 닫힌다.
  • 에디터·터미널 부품 현황(pub.dev): re_editor 0.10.0(6 플랫폼, "IDE 급 동적 구문 분석은 없다"고 스스로 명시 — 완성·힌트는 LSP 가 채워야 함) · flutter_monaco 3.4.3(Linux 미지원, 에셋 ~30MB) · xterm 4.0.0(2년 무갱신) → 유지 포크 xterm2 5.2.0 · flutter_pty 0.4.2(discontinued) → 유지 포크 flutter_pty2 1.0.2(Linux·macOS·Windows·Android, MIT). 단 D-067 이 xterm2 결함 재현을 확인해 미채택한 상태 — PTY 는 flutter_pty2 만 따로 평가할 여지가 있다(터미널 뷰와 PTY 는 분리 가능).

2.3 Differentiation Points

VS Code+Dart-Code 와 클라우드 빌더 사이에서 방어 가능한 축:

  1. Dart 풀스택을 한 창에서 — Flutter·Jaspr·Serverpod·PostgreSQL 의 편집·실행(serverpod start)·로그·마이그레이션·데이터 확인이 한 워크스페이스 안. 경쟁자 중 누구도 Dart 서버를 1급으로 두지 않는다(§2.1).
  2. ADE 안전망 위의 에디터 — 사람 편집과 에이전트 편집이 같은 화면에 있고, 에이전트 편집만 EditSnapshot·잠금·승인 게이트를 지난다(C-02·C-05·AC-11·AC-12). VS Code 확장으로는 흉내 내기 어려운, 이미 구현된 인프라(workspace FileWorkspaceGate·RollbackEngine·FileEditLockRegistry).
  3. 결정론적 풀스택 골격 — bricks ScaffoldEngine(mason 인프로세스, 스테이징→단일 이동)으로 서버·클라이언트·웹이 규약대로 생성된 워크스페이스에서 시작. 클라우드 빌더의 "프롬프트 → 임의 구조"와 반대 축.
  4. 가벼움(실측) — 최소 셸 아카이브 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 인수해야 할 위험

  1. 상위 게이트 미통과 상태 위에 쌓는다. 상위 Seed(모호성 0.3125/기준 0.2)·Planning(0.63/0.8)·Design 게이트가 전부 미통과다. 이 파이프라인의 Seed 는 상위 C-xx 를 상속하되, 상위가 바뀌면 함께 바뀐다는 것을 Evolution Log 에 명시해야 한다.
  2. 터미널·IME 리스크가 상위보다 커진다(§4.3). 풀스택 워크플로는 터미널이 중심이다.
  3. 비밀 취급 범위 확장 — DB 접속 정보는 LLM 키가 아니므로 CredentialVault 계약을 넓혀야 하고, 이는 D-034(BYOK, 자식 프로세스 전달 통로 없음)와의 정합성 검토를 요구한다.
  4. AC-05 경계 관리 — 다국어 LSP 를 "편집 지원"으로 붙이는 순간 "1급 프로젝트 타입"과의 경계가 흐려질 수 있다. CocodeProjectType 에 언어 항목을 추가하지 않는 것으로 선을 긋고, check_mvp_scope_must_not.py 스캔에 걸리지 않는 명명을 쓴다.
  5. 범위 팽창 — 부속 문서 §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


Generated by cc-product Discovery stage (BMAD v6) · 2026-09-16 · slug fullstack-code-editor