파일마다 파이썬 커널 하나,IDE를 닫아도 남습니다.
DarkPyonix는 파이썬 커널을 노트북 파일에 묶습니다. 편집기를 닫거나 네트워크가 끊기거나 매니저가 죽어도 실행은 계속되고, 다음에 그 파일을 여는 도구가 같은 커널을 찾습니다.
노트북은 평범한 .py 파일입니다. 모든 실행은 파일 옆 __runs__/에
nbformat 4 노트북으로 남습니다.
- 파일당 커널 하나
- 매니저보다 오래 사는 커널
- 멈춤은 인터럽트
- 표준 라이브러리만, Python 3.8+
darkpyonix run train.py # 파일 전체를 실행하고 출력을 따라감
darkpyonix run train.py --detach # 실행을 맡기고 run id만 받음
darkpyonix logs train.py --follow # 최신 실행을 따라감
darkpyonix stop train.py # 실행 중인 셀을 인터럽트, 커널은 남음
darkpyonix vars train.py # 지금 커널이 가진 변수
몇 시간짜리 실행을 위해 만들었습니다
커널 ID는 파일 경로에서 나옵니다. 그래서 train.py를 여는 IDE, 에이전트, 공유 뷰어가
모두 같은 커널에 닿습니다. 같은 파일을 두 번 실행하면 현재 실행 정보와 함께 거절하므로, 에이전트가
실수로 중복 실행을 띄우지 못합니다.
멈추면 실행 중인 셀에 KeyboardInterrupt가 납니다. 변수는 남으므로 다음 실행이 거기서
이어집니다.
무엇인가
이 저장소에는 세 부분이 있습니다. 커널은 파일 하나에 묶인 파이썬 프로세스입니다. 표준
라이브러리만 쓰고, Python 3.8 이상의 어떤 인터프리터에서도 설치 없이 뜹니다. 매니저는
떠 있는 커널을 찾고 새 커널을 띄우며 편집기, 에이전트, 공유 노트북에 HTTP로 접근을 주는 앞단입니다.
darkpyonix CLI와 같은 Rust 바이너리입니다. 런타임 API는 노트북이
darkpyonix로 import하는 패키지입니다.
매니저는 언제 사라져도 됩니다. 커널은 매니저가 살아 있는지에 기대지 않으므로, 매니저 여러 개가 같은 커널에 붙을 수 있고 그중 어느 것이 끝나도 괜찮습니다.
지금 상태
재설계가 진행 중입니다. 변경 중 항목은 지금 동작하지만 바뀌는 중이며, 링크한 이슈에 무엇으로 바뀌는지 적혀 있습니다.
| 부분 | 상태 | 참고 |
|---|---|---|
| 커널: 파일당 하나, 매니저와 독립, 인터럽트, 실행 기록 | 구현 | SPEC FR-K, FR-X, FR-R |
| 런타임 API와 노트북 파서 | 구현 | SPEC FR-F |
Rust 매니저와 darkpyonix CLI | 구현 | SPEC FR-M, FR-C |
| 등록 파일 없는 발견 | 변경 중 #50 | INTENT D4 |
| 이벤트 스트림을 매니저가 커널로 넘김 | 변경 중 #47 | INTENT D6 |
| 비밀번호 로그인과 공유 토큰 수명 | 변경 중 #48 | SPEC FR-A |
| 2025 권한 모델과 WebSocket 동기화 | 변경 중 #49 | SPEC FR-S |
| PyPI 0.2.0 배포 | 계획 #46 | #45 |
| 미리 빌드한 CLI 바이너리(바이너리를 담은 wheel) | 계획 | INTENT D10 |
| VS Code·IntelliJ 노트북 렌더러 | 계획 #22 | |
| ash로 공유 커널 열기 | 계획 #20 | |
| darkpyonix.dev 허브 | 계획 #21 | #41 |