Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
f92a210
docs(#128-B2): link-guard 하드닝 설계·구현계획(Codex 2체크포인트 반영)
pdw96 Jun 23, 2026
7d6bc76
feat(#128-B2): path-guard isLinkSync — lstat 기반 링크/종류 판정(junction 포함)
pdw96 Jun 23, 2026
2f40bf6
test(#128-B2): path-guard 'suspicious' 분기 FIFO 실-커버 + spy 타이핑/주석 보정
pdw96 Jun 23, 2026
ebcb92f
feat(#128-B2): path-guard resolveWithin — realpath.native containment…
pdw96 Jun 23, 2026
9854adb
feat(#128-B2): listIgnored walk/엔트리 link-aware — symlink/junction 재귀·…
pdw96 Jun 23, 2026
2280033
test(#128-B2): listIgnored 새 테스트가 skipped{symlink} 메커니즘 단언 + suspicio…
pdw96 Jun 23, 2026
f86de80
feat(#128-B2): captureIgnoredBaseline lstat — 링크 leaf read 차단(밖 비밀 유출…
pdw96 Jun 23, 2026
ee95ce2
feat(#128-B2): collectIgnoredChanges lstat — 링크로 교체된 baseline 파일 비-re…
pdw96 Jun 23, 2026
6eae59b
feat(#128-B2): restore 쓰기 측 link-aware — 조상/leaf/created 링크 통한 밖 쓰기·삭…
pdw96 Jun 23, 2026
35d950f
refactor(#128-B2): workspace-tools containment를 path-guard helper로 통일…
pdw96 Jun 23, 2026
52602c8
docs(#128-B2): TOCTOU/격리 한계 주석(path-guard) + brain 갱신
pdw96 Jun 23, 2026
36f3e17
test(#128-B2): win32 junction leaf-교체 커버 + sensitive 정규식 좁힘 + rollbac…
pdw96 Jun 23, 2026
9448e79
fix(#128-B2): Codex PR P1/P2 — 민감 symlink fail-closed·dangling link l…
pdw96 Jun 23, 2026
f726d93
fix(#128-B2): Codex 재리뷰 P1 — 민감 디렉터리 symlink(.ssh/) fail-closed(슬래시 양…
pdw96 Jun 23, 2026
558ca83
fix(#128-B2): Codex 재리뷰 round3 — 분류불가 dir walk/조상 write fail-closed·민…
pdw96 Jun 23, 2026
23e067e
fix(#128-B2): Codex 재리뷰 round4 P2 — symlink-dir 치환 롤백·DT_UNKNOWN lsta…
pdw96 Jun 23, 2026
e8a193a
fix(#128-B2): Codex 재리뷰 round5 P2 — unclassified reason 분리(파괴적 sweep …
pdw96 Jun 23, 2026
baa3f93
fix(#128-B2): Codex 재리뷰 round6 P2 — 민감 링크 cap-후 fail-closed 도달 보장·삭제된…
pdw96 Jun 23, 2026
bc10b54
style(#128-B2): round6 신규 주석 일본어→한국어 정규화(코드베이스 컨벤션)
pdw96 Jun 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions brain.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Fleet — 코드베이스 브레인 (자동 생성)

> `npm run brain` 로 `src/` 에서 자동 추출한 구조 지도다. **코드를 탐색하기 전에 이 파일을 먼저 읽어** 토큰을 아껴라.
> 60 files · 151 import wires · 41 IPC channels · 생성 2026-06-22T16:40 UTC
> 61 files · 153 import wires · 41 IPC channels · 생성 2026-06-23T06:48 UTC
> 표기: `파일 — 역할 · →의존 · ←피의존`. id 는 `main/core/` 생략(예: `session/manager`).

## 레이어 (위 → 아래로 흐름)
Expand Down Expand Up @@ -82,15 +82,15 @@

### orchestrator · core — 여러 AI에게 역할을 나눠주고, 목표를 작은 작업들로 쪼개 차례로 시키고, 서로 검토·수정·요약까지 마치도록 전체 흐름을 지휘하는 '작업 진행 본부' 모듈이다.
- **orchestrator/orchestrator** — 목표 하나를 받아 계획·구현·검토·검증·요약까지 전 과정을 지휘하는 작업 총괄 지휘자 _목표를 작은 작업들로 쪼갠 뒤, 각 작업을 구현 AI가 실제 파일을 고치게 하고 다른 AI가 그 변경을 교차 검토해 통과할 때까지 반복하며, 위험한 변경은 승인을 받고 최종에는 테스트로 검증하고 실패하면 자동으로 고치게 합니다. 한 작업이 실패해도 전체가 멈추지 않게 격리하고, 사용자가 취소하면 진행 중 변경을 되돌리고 중단합니다._
- →의존: orchestrator/assignment, orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/plan, orchestrator/review, safety/approval, session/manager, shared/types, store/types, workspace/git, +1 · ←피의존: engine · 939줄
- →의존: orchestrator/assignment, orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/plan, orchestrator/review, safety/approval, session/manager, shared/types, store/types, workspace/git, +1 · ←피의존: engine · 953줄
- **orchestrator/diff-risk** — AI가 바꾼 코드가 위험한 변경인지 판정하는 위험 신호등 _AI가 고친 내용을 보고 비밀번호 같은 민감한 파일을 건드렸거나, 파일을 너무 많이 지웠거나, 변경 내용이 너무 길어 끝이 잘려 확인이 불가능하면 '위험'으로 표시하고 그 이유를 함께 알려 줍니다. 의심스러우면 안전하게 '위험' 쪽으로 분류합니다._
- →의존: safety/approval, shared/types, workspace/git, workspace/ignored-baseline · ←피의존: orchestrator/orchestrator · 37줄
- **orchestrator/plan** — 큰 목표를 실행 가능한 작은 작업 목록으로 쪼개 주는 계획 분해기 _기획 담당 AI에게 목표를 4~8개의 작업으로 나눠 달라고 요청하고, AI가 돌려준 응답이 형식이 조금 어긋나도 너그럽게 읽어내 작업 목록으로 정리합니다. 검증(테스트·빌드)이 실패하면 그 실패 내용을 다시 AI에게 알려 부족한 부분만 채울 '추가 보정 작업'도 뽑아냅니다._
- →의존: orchestrator/assignment, orchestrator/review, session/types, shared/types · ←피의존: orchestrator/orchestrator · 159줄
- **orchestrator/assignment** — 어떤 AI에게 어떤 역할(기획·구현·검토 등)을 맡길지 정하는 자리 배정표 _'계획짜기·설계·구현·검토·테스트' 같은 7가지 역할을 정해진 규칙(수동 지정·차례로 돌리기·잘하는 사람 우선)에 따라 AI들에게 나눠 줍니다. 같은 입력이면 늘 같은 결과가 나오고, '잘하는 사람 우선' 규칙에서도 한 AI에게 일이 몰리지 않도록 적게 쓴 AI를 먼저 골라 균형을 맞춥니다._
- →의존: shared/types · ←피의존: engine, orchestrator/orchestrator, orchestrator/plan · 96줄
- **orchestrator/ignored-guard**
- →의존: workspace/git, workspace/ignored-baseline · ←피의존: orchestrator/orchestrator · 44줄
- →의존: workspace/git, workspace/ignored-baseline · ←피의존: orchestrator/orchestrator · 50줄
- **orchestrator/review** — 각 단계에서 AI에게 보낼 지시문을 만들고 검토 결과를 읽어내는 대화 문구 담당 _구현·검토·요약·수정 단계마다 AI에게 보낼 안내 문구를 상황에 맞게 만들어 주고, 검토 AI의 답에서 '승인인지 수정 요청인지'와 그 피드백을 뽑아냅니다. AI가 형식을 안 지킨 어수선한 답을 줘도 핵심을 읽어내도록 대비책을 갖췄습니다._
- →의존: shared/types · ←피의존: orchestrator/orchestrator, orchestrator/plan · 121줄

Expand Down Expand Up @@ -128,12 +128,20 @@
- **tools/loop** — AI가 도구를 쓰겠다고 하면 실제로 실행해주고 그 결과를 다시 AI에게 돌려주길 반복하는 진행 관리자 _AI가 '이 도구를 써 달라'고 하면 승인을 받은 뒤 도구를 실행하고 결과를 다시 AI에게 전달하는 일을 도구 호출이 끝날 때까지 되풀이한다. 무한 반복을 막으려 최대 8번으로 제한하고, 그동안 쓴 비용(토큰)을 합산하며, 알 수 없는 도구나 승인 거부·실행 오류는 오류로 표시해 돌려준다._
- →의존: providers/types, tools/context, tools/types · ←피의존: session/api-session · 225줄
- **tools/workspace-tools** — 작업 폴더 안의 파일을 읽고 찾아보게 해주는 안전한 읽기 전용 도구 4종 세트 _파일 읽기·폴더 목록·내용 검색(grep)·파일 찾기(glob) 네 가지 도구를 만들며, 모두 지정한 작업 폴더 밖으로는 절대 나가지 못하게 막고 비밀번호 같은 민감 파일은 건너뛴다. 너무 큰 파일이나 많은 결과는 일부만 보여주고, 위험할 수 있는 검색 패턴은 미리 거부해 앱이 멈추지 않게 보호한다._
- →의존: safety/approval, tools/types · ←피의존: engine · 379줄
- →의존: safety/approval, tools/types, workspace/path-guard · ←피의존: engine · 366줄
- **tools/context** — 대화 기록이 너무 길어지지 않게 오래된 도구 결과를 짧은 표식으로 줄여주는 정리 담당 _AI에게 보내는 대화가 정해진 분량을 넘으면, 예전에 받았던 도구 실행 결과 내용을 '이전 도구 결과 정리됨'이라는 짧은 문구로 바꿔 자리를 비운다. 최근 결과 몇 개와 방금 막 만든 결과는 그대로 보존하고, 글자 수를 대략 세어(영어는 4글자에 한 토막, 한글·한자는 글자마다 한 토막으로 넉넉히) 한도 초과를 미리 막는다._
- →의존: providers/types · ←피의존: tools/loop · 154줄
- **tools/registry** — 여러 도구를 이름표로 정리해 이름만 대면 바로 찾아 쓰게 해주는 도구 명부 _넘겨받은 도구들을 이름표 순으로 정리해, 이름으로 도구를 찾거나 목록을 뽑아낼 수 있게 한다. 같은 이름의 도구가 두 번 들어오면 헷갈림을 막기 위해 충돌 오류를 낸다._
- →의존: tools/types · ←피의존: engine · 17줄

### workspace · core — AI들이 작업방에서 코드를 고칠 때, 시작 시점을 기록해 두고 무엇이 바뀌었는지 보여주거나 통째로 되돌릴 수 있게 해주는 안전장치 모듈.
- **workspace/git** — AI가 코드를 고치기 전 상태를 저장해 두고, 바뀐 내용을 모아 보여주거나 처음으로 되돌리는 작업 기록 관리원 _작업방을 버전 관리 저장소(git)로 만들어 '시작 사진'을 찍어두고, AI가 무엇을 바꿨는지 변경 목록과 그 내용(diff)을 모아 보여주거나, 마음에 안 들면 시작 사진 시점으로 통째로 되돌립니다. 사용자가 미리 만들어둔 작업은 시작 때 따로 보존해 지워지지 않게 하고, 여러 AI가 동시에 저장소를 건드려 생기는 잠금 충돌은 잠깐 기다렸다 다시 시도하며, 변경 내용이 너무 길면 6만 자에서 잘라 보여줍니다._
- →의존: cli/detect, workspace/ignored-baseline · ←피의존: engine, orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/orchestrator, workspace/ignored-baseline · 239줄
- **workspace/ignored-baseline**
- →의존: safety/approval, workspace/git, workspace/path-guard · ←피의존: orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/orchestrator, workspace/git · 415줄
- **workspace/path-guard**
- →의존: — · ←피의존: tools/workspace-tools, workspace/ignored-baseline · 70줄

### store · core — 앱이 다루는 모든 데이터(프로젝트, 할 일, 채팅방, 대화, 기록, AI 연결 정보)를 한곳에 모아 보관하고, 컴퓨터를 껐다 켜도 그대로 남도록 파일에 저장하는 '데이터 창고'다.
- **store/types** — 창고에 담기는 데이터들의 모양과 규칙을 미리 적어 둔 설계도 부품 _프로젝트·할 일·채팅방·저장된 AI 세션 등이 각각 어떤 항목들로 이뤄지는지 형태를 정의한 명세서다. 특히 AI 연결 정보는 구독형 CLI(클로드·코덱스 등)와 API 두 종류로 나뉘며, API 키 같은 비밀번호는 절대 그대로 적지 않고 암호로 바꾼 형태만 저장하도록 규칙을 못 박아 둔다._
- →의존: shared/types · ←피의존: chat/room, engine, main/index, orchestrator/orchestrator, store/json-file, store/memory · 151줄
Expand All @@ -142,12 +150,6 @@
- **store/json-file** — 데이터를 컴퓨터 안 파일에 안전하게 저장해 두는 보관 담당 부품 _앱이 다루는 모든 정보를 'fleet-store.json'이라는 파일에 적어두고, 다음에 앱을 켜면 다시 불러온다. 저장할 때는 임시 파일에 먼저 쓴 뒤 이름만 바꿔치기해서 도중에 멈춰도 원본이 안 깨지게 하고, 파일이 읽다가 망가져 있으면 '.corrupt' 라는 이름으로 따로 백업해 둔 뒤 빈 상태로 시작한다._
- →의존: store/memory, store/types · ←피의존: main/index · 60줄

### workspace · core — AI들이 작업방에서 코드를 고칠 때, 시작 시점을 기록해 두고 무엇이 바뀌었는지 보여주거나 통째로 되돌릴 수 있게 해주는 안전장치 모듈.
- **workspace/git** — AI가 코드를 고치기 전 상태를 저장해 두고, 바뀐 내용을 모아 보여주거나 처음으로 되돌리는 작업 기록 관리원 _작업방을 버전 관리 저장소(git)로 만들어 '시작 사진'을 찍어두고, AI가 무엇을 바꿨는지 변경 목록과 그 내용(diff)을 모아 보여주거나, 마음에 안 들면 시작 사진 시점으로 통째로 되돌립니다. 사용자가 미리 만들어둔 작업은 시작 때 따로 보존해 지워지지 않게 하고, 여러 AI가 동시에 저장소를 건드려 생기는 잠금 충돌은 잠깐 기다렸다 다시 시도하며, 변경 내용이 너무 길면 6만 자에서 잘라 보여줍니다._
- →의존: cli/detect, workspace/ignored-baseline · ←피의존: engine, orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/orchestrator, workspace/ignored-baseline · 239줄
- **workspace/ignored-baseline**
- →의존: safety/approval, workspace/git · ←피의존: orchestrator/diff-risk, orchestrator/ignored-guard, orchestrator/orchestrator, workspace/git · 361줄

### cli · core — 클로드·코덱스·제미니 같은 명령어형 AI 프로그램(CLI)이 컴퓨터에 깔려 있는지 확인하고, 그 프로그램을 실제로 실행해 답변 글자만 깔끔하게 뽑아내며, 각 프로그램의 사용법(명령어 종류)을 한곳에 정리해 두는 모듈이다.
- **cli/detect** — AI 명령어 프로그램을 실제로 실행하고, 깔려 있는지·어느 버전인지 확인하는 부품 _사람이 터미널에 명령어를 치듯 클로드·코덱스·제미니 프로그램을 대신 실행해 그 결과(출력 글자)를 받아온다. '--version'을 물어 설치 여부와 버전을 알아내고, 응답이 너무 오래 걸리거나(시간초과) 사용자가 중간에 취소하면 그 프로그램과 거기서 또 생긴 자식 프로그램들까지 끝까지 종료시킨 뒤 마무리한다. 여러 AI를 한꺼번에 동시 점검하는 기능도 있다._
- →의존: process/kill-tree, shared/types · ←피의존: engine, main/e2e, session/cli-session, workspace/git · 208줄
Expand Down
Loading