Repository navigation
feat: 실행기 명령 표와 기억 유지 재시작 kadan restart - #159
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> # Conflicts: # src/cli.mjs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
실행기(codex·claude·agy 등)를 업데이트하거나 설정을 바꾼 뒤, 역할의 대화 기억은 그대로 두고 프로그램만 다시 띄우고 싶다. 실행기마다 다른 "같은 대화 다시 열기·대화 ID 찾기" 지식을 코드 곳곳이 아니라 데이터 표 한 곳(
runner-settings.json의runners.<실행기>)에 두고, 그 위에서kadan restart <역할>이 동작한다.변경
spawn옆에 선택 칸resume·fork·exec·version·update·conversation. 칸이 없는 옛 설정은 그대로 읽히고, 빈 칸은 "이 실행기는 … 미지원"으로 거절.kadan runners runner <실행기> --table <JSON>으로 채운다. (src/runner-table.mjs,src/runner-settings.mjs)open-file(열린 파일 이름 정규식)·pid-json(PID별 JSON 필드 +match일치 +stored저장 확인). 0개·여러 개·불일치·미저장은 거절, "가장 최근" 추측 없음.kadan restart <역할> [--force](src/restart.mjs,src/commands/restart.mjs): 거절 가능한 확인(대화 확정·저장 확인·명령 재조립·끝나지 않은 카드)을 모두 끄기 전에. 이후stop(restart 표시) → 같은 작업 폴더·옵션·대화 resume으로 start(restartOf). 비서는kadan up과 같은 체크포인트 경로.restartOf를mail-generation.mjs(우편·책임 공용)와watch-roles.mjs(감시 발령 맵)에서 이어감으로 처리.AI_HARNESS_NAMES,conversationOf(agy--conversation·devin--resume= 같은 대화), 문서의 정체 목록.src/process-tree.mjs(자손 PID·열린 파일)를 비서 복원과 공유.어댑터 금지와의 경계
CLAUDE.md의 다중 provider 어댑터 금지는 실행기별 코드 분기·능력 심사 계층이다. 이 표는spawn과 같은 수준의 명령 문자열 데이터이고, 새 코드에는 실행기 이름으로 갈라지는 분기가 없다(시험이 코드 검색으로 확인). 코드는 틀 채우기 한 곳과 대화 ID 찾기 일반 함수 둘만 안다. 출력 해석은 표에 넣지 않는다. 예외 하나:conversationOf는 원장에 이미 쌓인 옛 start를 다시 해석하므로(append-only) 설정이 아니라 코드에 옵션 읽기를 둔다. 남는 위험은pid-json을 지금 claude만 쓴다는 점(경로·필드·match가 데이터라 재사용 가능).결정·한계
stored(jsonl 존재)로 같은 보호.conversation칸은 비웠다(devin: 첫 입력 전 resume 미실측, omo: ID가 폴더 이름이라 두 방식에 안 맞음).exec는 틀만(설명 AI 연결은 후속). 대시보드 버튼·실행 모델 화면 표 보이기는 후속.docs/commands.md에 한계 기록).kadan stop이 알리는 것과 같은pendingCardsFor다(새 판정 없음).검증
tests/runner-table.test.mjs·tests/restart.test.mjs(세대 회귀: 우편·책임·감시 발령, 거절 시 stop 0회, --force, 비서 up과 start 사건 비교).discord-chatN3, 부하 간헐)이 병렬 실행에서 실패, 단독 실행 30/30 통과.🤖 Generated with Claude Code