Architecture
~/.lvis — 도메인 단위 격리된 로컬 스토리지
LVIS 호스트 + 모든 플러그인의 user-data 는 ~/.lvis/ 디렉토리 아래에 도메인 단위 namespace로 격리됩니다. 모든 디렉토리는 0o700, 파일은 0o600. 트리는 코드에서 실제로 생성되는 경로만 나열합니다.
0o700 dir
0o600 file
src/audit/audit-logger.ts
src/main/main.ts:105
~/.lvis/ — file tree (소스 검증된 항목만)
~/.lvis/
├── workspace/ # 메인 작업공간 root (main.ts:105)
├── sessions/ # 채팅 세션 (memory-manager.ts:696)
├── routine/ # 루틴 v2
│ ├── routines.json # schedule-routine.ts:4
│ └── sessions/<routineId>/<firedAt>.jsonl # per-fire isolation
├── audit/ # 일별 감사 로그 (audit-logger.ts:6)
│ ├── <YYYY-MM-DD>.jsonl
│ └── <YYYY-MM-DD>.sandbox.jsonl # 샌드박스 별도 sink
├── logs/
│ └── watcher-poll.jsonl # boot.ts:1151
├── memories/
│ └── MEMORY.md # MemorySeedDialog.tsx:6
├── skills/<name>/SKILL.md # skill-load.ts:57
├── agents/<name>.md # agent-spawn.ts:49
├── skill-approvals.json
├── mcp/
│ ├── servers.json # boot.ts:1012-1016
│ └── <slug>/
├── plugins/
│ ├── auth-partitions.json # boot.ts:252
│ └── <pluginId>/ # plugin namespace (boot.ts:309)
│ └── ... # plugin storage.* root
├── permissions.json # permissions-store.ts
├── settings.json # boot.ts:579
├── secrets/
│ └── .env.demo # 0o600 (preload.ts:345)
├── diff-cache/
│ └── <sessionId>/<toolUseId>.json # write-diff-cache.ts:6
└── onboarding/
├── tour-state.json # preload.ts:389
└── onboarding-context.md # preload.ts:477스토리지 룰 (검증)
- 단일 도메인 = 단일 디렉토리. routine/ · audit/ · plugins/ · mcp/ 등 모두 도메인 prefix 안에 모임.
- 0o700 / 0o600 권한 강제 — 코드 예시:
write-diff-cache.ts:84-85,memory-manager.ts:1154-1166,permission-settings-store.ts:189-192. - Plugin 격리: 모든 plugin 데이터는
~/.lvis/plugins/<pluginId>/아래. 외부 디렉토리 접근은hostApi.storage.*sandboxed FS 로만. - 감사 로그는 일별 분리: 단일 audit.log 가 아니라
audit/<YYYY-MM-DD>.jsonl+ sandbox sink 별도.
2026-05-09 Routine v2 namespace consolidation
과거
~/.lvis/routines.json + ~/.lvis/routine-sessions/ 두 path 가 root 에 분산 →~/.lvis/routine/ 단일 namespace 로 consolidate (PR #626). 현재 코드는 이 합쳐진 구조.잘못된 패턴
- ❌
~/.lvis/<feature>.jsonroot 에 도메인 specific 파일 분산 - ❌ plugin 이 다른 plugin / host 디렉토리 직접 read/write (SDK가 storage 를 sandbox 함)
- ❌ 새 feature root 에 새 파일 추가 → 항상
~/.lvis/<new-feature>/신설