Community생산성 & 협업github.com

AnalyseDeCircuit/oxideterm

OxideTerm의 런타임 소유권 규칙을 SSH 노드, 터미널 패널, SFTP, 포트 포워딩, 재연결, 점프 호스트, 상태 확인, NodeRouter 또는 장기 실행 백엔드 작업 구현 또는 검토 시 적용합니다.

oxideterm란 무엇인가요?

이 스킬은 OxideTerm에서 SSH 세션, 백그라운드 작업 및 리소스 소유권을 올바르게 관리하는 방법을 설명합니다. 핵심 원칙은 물리적 SSH 노드 연결이 이를 사용하는 터미널 패널과 독립적이어야 하며, UI 수명이 백엔드 수명으로 암묵적으로 이어져서는 안 된다는 것입니다. 이 스킬은 연결 레지스트리와 NodeRouter에 의한 명시적 소유권, 터미널 패널 종료 시 공유 노드가 끊어지지 않도록 하는 것, SFTP가 실제 노드 기반 세션을 사용해야 하는 점, 포트 포워딩 작업이 터미널 패널 없이도 유지되어야 하는 점 등 필수 규칙을 정의합니다. 또한 UI가 터미널 존재 여부에서 노드 활성 상태를 유추하지 못하도록 하고, 모든 장기 실행 작업에 명시적 소유자와 취소 경로를 할당할 것을 요구합니다. 규칙 위반 예시와 검토 체크리스트를 제공하여 올바른 구현을 돕습니다. 지원 플랫폼은 Claude Code, Cursor, Codex 등 AI 에이전트 개발 환경입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AnalyseDeCircuit/oxideterm/tree/HEAD/.agents/skills/oxideterm-node-session-ownership

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

OxideTerm 노드 세션 소유권

변경 사항이 원격 세션이나 백그라운드 작업을 생성, 공유, 종료, 재연결 또는 관찰하는 구성 요소를 변경할 수 있을 때 이 스킬을 사용하세요.

핵심 불변 조건

연결된 SSH 노드는 이를 소비하는 모든 터미널 패널과 독립적입니다. UI 수명이 백엔드 수명으로 암묵적으로 이어져서는 안 됩니다.

flowchart TD
    W["워크스페이스 또는 애플리케이션 수명"] --> R["NodeRouter 및 연결 레지스트리"]
    R --> N["물리적 SSH 노드 연결"]
    N --> T["터미널 소비자"]
    N --> S["SFTP 소비자"]
    N --> F["포워딩 소비자"]
    R --> H["상태 확인 및 재연결 작업"]

필수 규칙

  • 노드 활성 상태는 연결 레지스트리, NodeRouter 또는 명시적 노드 연결 해제 작업에 속합니다.
  • 터미널 패널을 닫으면 해당 터미널 소비자는 제거됩니다. 공유 노드를 연결 해제해서는 안 됩니다.
  • SFTP는 실제 노드 기반 SFTP 세션을 획득해야 합니다. 파일 전송을 흉내내는 셸 명령어는 문서화된 호환성 대체 수단으로만 허용됩니다.
  • 포트 포워딩은 자체 리스너 및 브리지 작업을 소유합니다. 이러한 작업은 열려 있는 터미널 패널 없이도 활성 상태를 유지해야 하며, 포워딩 규칙이나 소유 노드가 중지되면 중지되어야 합니다.
  • 재연결, 상태 확인, 유예 기간 및 자식 프로세스 브리지에는 노드, 워크스페이스 또는 애플리케이션 수명에 연결된 명시적 소유자와 취소 경로가 필요합니다.
  • 장기 실행 작업은 명령 핸들러가 반환될 때 드롭되는 일회성 런타임에서 실행되어서는 안 됩니다.
  • 점프 호스트를 통해 연결된 자식 노드는 자식 전송이 필요로 하는 동안 부모 연결을 유지해야 합니다.
  • UI 구성 요소는 라우터 또는 레지스트리 이벤트를 통해 런타임 상태를 관찰합니다. 터미널 존재 여부에서 노드 활성 상태를 유추해서는 안 됩니다.
  • 소유권 이전(생성, 공유, 무효화, 재획득, 취소 및 UI 해체 후 의도적인 생존) 시 간결한 영어 주석을 추가하세요.

금지된 우회 방법

  • 노드 기반 API가 불편하다고 해서 관리되지 않는 두 번째 SSH 전송을 열지 마세요.
  • 호스트와 연결된 첫 번째 터미널 패널을 선택하여 연결을 찾지 마세요.
  • 장기 실행 작업을 임시 대화 상자, 명령 핸들러 또는 터미널 뷰에만 저장하지 마세요.
  • 하나의 채널, 패널, SFTP 요청 또는 포워딩 소비자가 닫혔다고 해서 노드가 연결 해제된 것으로 표시하지 마세요.
  • 생성된 자식 프로세스 또는 Tokio 작업을 종료 신호 및 제한된 완료 경로 없이 분리된 상태로 두지 마세요.

권장 사례

  • 우연한 Arc 유지에 의존하는 대신 각 백엔드 종속성을 레지스트리에서 소비자 또는 소유자로 표현하세요.
  • 물리적 전송 상태는 연결 항목에, 논리적 토폴로지는 NodeRouter에 유지하세요.
  • 연결 해제 캐스케이드가 호스트 문자열 일치가 아닌 기록된 부모-자식 연결 ID를 따르도록 하세요.
  • 작업 핸들 또는 취소 발신자를 작업 수명을 정의하는 객체에 유지하세요.
  • 터미널 상태를 폴링하는 것보다 이벤트 기반 UI 업데이트를 선호하세요.

호환성 경로

호환성 대체 수단은 명시적이고 제한적이며 정확하게 보고되는 경우에만 허용됩니다. 네이티브 SFTP, 포워딩 또는 노드 세션 구현으로 설명되어서는 안 됩니다. 임시 대체 수단의 경우에도 소유자와 정리 경로를 기록하세요.

예제

올바르지 않음:

// 패널을 닫으면 실수로 공유 노드의 유일한 소유자가 사라집니다.
struct TerminalPane {
    ssh_transport: SshTransport,
}

올바른 형태:

// 패널은 소비자 등록만 소유합니다. 레지스트리가 전송 활성 상태를 소유합니다.
struct TerminalPane {
    connection_id: String,
    terminal_consumer: ConnectionConsumer,
}

올바르지 않음:

tokio::runtime::Runtime::new()?.spawn(run_forward_listener());
// 명령이 반환되면 런타임이 드롭됩니다.

올바른 형태:

// 포워딩 소유자는 취소 핸들과 완료 핸들을 모두 유지합니다.
struct ForwardingJob {
    shutdown_tx: Option<oneshot::Sender<()>>,
    worker: JoinHandle<()>,
}

검토 체크리스트

  1. 물리적 연결 소유자를 식별하세요.
  2. 모든 터미널, SFTP, 포워딩, 재연결, 상태 확인 및 자식 노드 소비자를 나열하세요.
  3. 하나의 소비자를 닫아도 관련 없는 소비자가 닫히지 않는지 확인하세요.
  4. 명시적 노드 연결 해제가 종속 작업 및 자식 전송을 중지하는지 확인하세요.
  5. 생성된 모든 작업 또는 프로세스에 대해 유지된 소유자, 취소 신호 및 정리 경로를 검사하세요.
  6. UI 상태가 터미널에서 파생된 활성 상태가 아닌 노드 이벤트를 소비하는지 확인하세요.
  7. 남아 있는 모든 호환성 대체 수단을 정확히 명시하세요.

검증

  • 마지막 터미널을 닫고 노드가 다른 등록된 소비자에 의해 계속 사용 가능한지 증명하세요.
  • 터미널 패널 없이 SFTP를 여세요.
  • 로컬, 원격 및 동적 포워딩을 시작하고 리스너가 패널 종료 후에도 살아남는지 확인하세요.
  • 부모 노드를 연결 해제하고 종속 자식 노드 및 작업이 일관되게 전환되는지 확인하세요.
  • 유예 기간 내에 재연결하고 관련 없는 UI 상태가 손실되지 않는지 확인하세요.
  • 명시적 연결 해제 및 애플리케이션 종료 후 작업/프로세스 정리가 완료되는지 확인하세요.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬