메인 콘텐츠로 건너뛰기

RPC(Remote Procedure Call)

공식 SDK에서는 최근의 신기능은 api.schema.json을 기반으로 한 자동 코드 생성으로 대응하고 있습니다. Laravel 버전에서는 생성 후의 타 언어 버전을 참고해 동일하게 구현하고 있습니다.

ServerRpc

Client에 연결된 RPC 클래스입니다.

연결·모델·도구·계정

ping()과 connect()로 연결을 확인·시작하고, registerExtensionLaunchProvider()로 확장 기능의 실행 프로바이더를 등록합니다. 모델 목록·가격 단위·내장 카탈로그는 models(), 사용 가능한 도구 목록은 tools()에서 가져올 수 있습니다. account()에서는 할당량, 인증 상태, 로그인 사용자 목록, 로그인·로그아웃을 다루며, accounts()에서는 Microsoft Entra ID 토큰을 취득합니다.

MCP·커넥터·시크릿

mcp()는 MCP 설정의 목록·추가·업데이트·삭제, 활성화, 검출, 레지스트리 검색, 설치 계획과 적용을 제공합니다. connectors()에서는 커넥터 기능과 계정, 카탈로그를 확인할 수 있습니다. 서버 측 커넥터 조작은 계정 단위의 목록 취득·업데이트가 중심입니다. experimental인 secrets()->addFilterValues()는 호스트가 생성한 동적 시크릿을 CLI의 마스킹 필터에 등록합니다. 이후 CLI는 세션 로그와 내보내기에서 해당 값을 마스킹합니다.
이 RPC는 OAuth 토큰을 취득하지 않습니다. SDK는 값을 영구 저장하거나 추가 로그에 기록하지 않습니다. 호스트가 이미 취득한 값을 등록하세요.

Skills·Plugins·Agents·Instructions·Extensions

각 그룹에서 탐색, 사용 가능한 경로 취득, 설정 변경, 다시 불러오기를 할 수 있습니다. commands()는 내장 명령 목록, hooks()는 세션 시작 전 훅 탐색을 제공합니다. Skills와 Plugins는 활성화·비활성화와 설치 관리를 지원하며, Agents는 내장 에이전트 정보도 가져올 수 있습니다. Extensions는 영구 저장된 확장 기능을 탐색·활성화·비활성화합니다.

카탈로그와 설치

catalog()로 후보 검색·제품 추천 취득·선택·피드 취득을 수행하고, Skills·Plugins·MCP의 각 API로 설치 계획 확인, 적용, 상태 조회 및 취소를 수행합니다. 계획과 적용은 별도의 작업입니다. 실제 설치 예시는 뒷부분의 각 항목을 참고하세요.

세션·호스트·실행 환경

sessions()는 영구 저장된 세션의 검색, 이벤트 읽기, 크기 확인, 삭제·정리, fork를 다룹니다. Workspace 생성·불러오기와 원격 제어도 사용할 수 있습니다. host()는 호스트 시작, 세션 공개·목록·공개 해제, 인증 처리, 세션 수락 정책 변경, 폐기를 수행합니다. 이러한 호스트 RPC는 SDK의 상위 수준 AHP(Agent Host Protocol) 호스트 API의 기반이 됩니다. runtime()은 런타임의 라이프사이클을 다룹니다.

클라우드 에이전트 작업 (experimental)

cloudTasks()는 클라우드 코딩 에이전트 작업의 생성·삭제·조회, 세션 로그와 리플레이 취득, 공유 상태 변경, 작업 ID로 열 세션의 해석을 수행합니다. 각 메서드는 대응하는 Params 타입 또는 배열을 받아 결과를 타입이 지정된 DTO로 반환합니다. 생성 결과의 ok가 false인 경우, 서비스가 거부한 이유는 reason과 message에서, 실행된 HTTP 요청의 실패 정보는 statusCode, errorMessage, errorPayloadJson에서 확인할 수 있습니다.

Git·환경·샌드박스·정책

git()에서 브랜치, 작업 디렉터리, Git remote 정보를 가져오고, gitHubRepository()와 gitHubOwners()에서 GitHub 저장소와 소유자를 탐색할 수 있습니다. environments()는 Mission Control 환경, sandbox()와 sandboxProxyCa()는 샌드박스 지원 상황과 Proxy CA, contentExclusion()은 제외 정책 검증, managedSettings()와 userSettings()는 설정을 다룹니다. settings()로 설정 파일의 개별 키를 삭제하고 표시용 값을 마스킹할 수 있습니다. gitHubRepository()->getById()는 GitHub 저장소 ID로부터 owner/name을 해석하고, lookupBranchPullRequest()는 지정한 head owner와 브랜치를 우선순위대로 지정한 저장소에서 검색합니다. 둘 다 authInfo를 그대로 전달합니다. getById()의 결과는 repository에 owner/name을 포함하며, 찾지 못한 경우 null입니다. Pull Request 검색의 status는 found, no-token, no-pr, lookup-failed 중 하나이며, 알 수 없는 값은 문자열 그대로 유지되므로 예외가 발생하지 않습니다. pullRequest는 찾은 경우 연관 배열이고, 그 외에는 null입니다.
gitHubFetch()는 인증된 GitHub API 요청과 이름 있는 작업을, gitHubRelease()는 릴리스 검색·스냅샷·에셋 다운로드와 진행 상황 확인을 제공합니다. Fetch에서는 sessionId로 세션의 인증을 선택하며, 생략하면 프로세스의 인증이 사용됩니다. 호스트가 관리하는 인증 바인딩을 사용하려면 authOwnerId를 지정합니다. Release의 authInfo는 런타임이 관리하는 인증 정보의 선택자이며, 공개 릴리스의 검색·다운로드는 익명으로도 실행할 수 있습니다. 다운로드 결과의 path는 사용 후 호출 측에서 삭제하세요. Fetch의 allocateRequestId(), request(), executeOperation()과 Release의 abandonRequest(), getSnapshot(), downloadAsset()은 Extensions에서 호출할 수 없습니다. 현재 Laravel SDK는 두 그룹의 cancel RPC를 공개하지 않으므로 실행 중인 작업을 SDK에서 취소할 수 없습니다. abandonRequest()는 사용하지 않은 Release request ID를 폐기하는 작업이며, 실행 중인 작업을 중지하는 것은 아닙니다.

로컬 모델·HTTP 추론·파일 시스템

azureMl()은 로컬 모델의 카탈로그·해석·다운로드와 그 상태 확인·취소·삭제를 제공합니다. llmInference()는 모델 계층의 HTTP 요청을 클라이언트 측으로 중계하는 실험적 API입니다. sessionFs()는 세션의 파일 시스템/SQLite 콜백 프로바이더를 등록합니다.

네트워크 콜백 (experimental)

network()->setProvider()로 클라이언트 측에 등록한 프록시 해석 및 Kerberos 인증 콜백을 런타임에 알립니다. 일반적으로 Client의 network 옵션에서 자동 등록되므로 직접 호출할 필요는 없습니다. NetworkSetProviderRequest의 콜백 항목은 해당 핸들러가 등록되어 있음을 나타냅니다. RPC는 반환값이 없습니다. 사용하는 런타임은 network.setProvider RPC를 지원해야 하며, 지원하지 않으면 클라이언트 시작 시 업데이트를 안내하는 예외가 발생합니다. 자세한 내용은 인증을 참고하세요.
scope를 생략하면 connection입니다. runtime은 공유 백그라운드 통신도 대상으로 하지만, 이 scope를 동시에 등록할 수 있는 연결은 하나뿐입니다.

내부 및 실험적 RPC

공식 SDK에서 내부용으로 지정된 다음 RPC도 Laravel에서는 @experimental로 공개합니다. 향후 변경되거나 삭제될 수 있으며, 런타임의 호출자 제한도 적용됩니다. 에이전트 레지스트리 항목의 생성·목록 조회·삭제, 인증 URL의 브라우저 열기, 만료된 대용량 도구 출력 정리, 샌드박스 경로 허용 경고 조회를 사용할 수 있습니다. 목록 결과에는 연결 자격 증명이 포함되지 않습니다.

기본 호출 예시

원래 SDK에 포함되어 있던 기능도 자동 코드 생성 버전으로 다시 추가되었습니다.

기능별 사용 예시

아래에 위 기능들의 대표적인 호출 예시를 정리했습니다.

Agent Plugin catalog 후보

catalog.search에서 agent-plugin-discovery를 요구하고 검색 대상 kinds에 plugin을 지정하면 Agent Plugin 후보를 가져올 수 있습니다. 표준 형식 application/vnd.github.copilot-plugin 이외의 application/vnd.anthropic.claude-plugin+json과 application/agent-plugin+json을 받으려면 agent-plugin-discovery에 더해 agent-plugin-formats를 요구하세요. agent-plugin-confirmed-installation은 설치 가능 여부와 검토용 플랜을 반환하는 capability로, 이것도 agent-plugin-discovery와 함께 요구합니다. 허용하면 후보에 installability가 포함되며, 값은 installable, install-data-unavailable, feature-disabled, not-installable-kind 중 하나입니다. installPlan은 installability가 installable인 경우에만 포함됩니다. 플랜은 확인용 데이터이며, 이 catalog RPC가 설치를 실행하지는 않습니다. 플랜의 sources는 우선순위 순으로 materialization, marketplace, repository 후보를 포함합니다. Marketplace에는 이름과 저장소, 직접 Repository에는 저장소와 선택적 경로가 기록됩니다. materialization만 있는 플랜에서는 pluginName이 생략되고 components는 비어 있습니다. 이름과 실제로 설치되는 내용은 plugins.planInstall()이 반환하는 검토 내용에서 확인하세요. 선택된 후보는 plugins.planInstall()로 부작용 없는 검증 포함 플랜을 만들 수 있습니다. plugins.applyInstall()은 사용자에게 명시적인 확인을 요청하고, 허용된 경우 플랜을 적용합니다. 적용 후 플러그인은 비활성 상태로 등록됩니다. 검토 내용의 mcpServers는 검증된 파일이 선언한 서버 이름, transport, 원격인 경우의 host를 나타냅니다. 이는 안전성을 보장하는 것이 아니므로, 사용자가 내용을 확인한 뒤 명시적으로 확인하도록 하세요. 설치된 플러그인의 description은 manifest에서 가져온 것입니다. verifiedSource는 GitHub 저장소와 고정된 commit을 나타내며, commit에 고정된 직접 설치에서만 존재합니다. iconUrl은 외부의 신뢰할 수 없는 콘텐츠이므로, 가져올 때 인증 정보나 GitHub 자격 증명을 보내지 마세요. 자격 증명 자체는 거부 사유로 반환되지 않습니다. 설치 결과의 network-failure에서는 CatalogNetworkFailureReason, HTTP statusCode, 선택적 retryAfterSeconds와 안전하게 표시할 수 있는 message를 확인할 수 있습니다.
Agent Finder의 materialisation reference에서 계획하는 경우에는 catalog.planInstallFromReference()를 사용합니다. 결과의 outcome->kind는 plugin-install-planned, skill-install-planned, refused 중 하나입니다. 플러그인 계획은 plugins.applyInstall()에, 스킬 계획은 skills.applyInstall()에 전달하세요.

contentExclusion

세션을 만들기 전에 콘텐츠 제외 정책 JSON을 검증할 수 있습니다.
policiesJson은 파싱되지 않은 JSON 문자열 그대로 CLI에 전달됩니다. JSON 파싱 또는 스키마 검증에 실패하면 CLI로부터 RPC 오류(JsonRpcException)가 발생합니다. 이것은 정책 자체를 검증하는 서버 스코프 RPC입니다. 세션 작업 디렉터리 내의 경로를 실제 제외 정책에 비추어 확인하려면 세션 스코프의 contentExclusion()->checkPaths()를 사용합니다.

managedSettings (experimental: 관리 설정)

관리 설정의 읽기, 정책 해석, 스키마 취득, 검증, 합성 미리보기, 캐시 폐기를 수행합니다.

settings (experimental: 설정 파일 조작)

설정 파일에서 지정한 키를 삭제하고, 표시용으로 비밀 값을 대체합니다. removeRawKey()는 로드에 실패한 키처럼 정규 설정 경로가 아닌 키도 그대로 삭제할 수 있습니다. 파일을 파싱할 수 없으면 덮어쓰지 않고 status가 invalid가 됩니다. redactValueForDisplay()는 basePath로 지정한 설정 트리상의 위치를 기준으로 비밀 값을 플레이스홀더로 대체하므로, 사용자에게 표시하거나 로그에 출력할 때 사용할 수 있습니다.

Runtime·Host 라이프사이클(experimental)

host.unpublishSession()은 소유한 실행 중인 호스트에서 application publication을 철회합니다. 공개를 철회해도 원래 세션 기록, worktree, 실행 중인 작업은 삭제·중지되지 않습니다. 이미 공개되어 있지 않은 경우 unpublished가 false가 되며, application 이외의 publication은 오류가 됩니다.
host.dispose()는 hostId를 지정해 호스트 리스너를 폐기합니다.
host.setSessionCreationPolicy()는 실행 중인 호스트가 새 원격 세션을 수락할지 여부를 전환합니다. 이 변경은 기존 클라이언트의 연결을 끊지 않으며, 이후의 수락에만 적용됩니다.
SDK가 시작한 stdio 런타임에서는 Client::stop()이 세션을 끊은 뒤, JSON-RPC 연결과 프로세스를 닫기 전에 runtime.shutdown을 호출합니다. 세션 연결 해제(session.detach)는 모든 세션에서 합계 10초의 기한을 공유하며, 기한을 넘긴 연결 해제는 오류로 반환값에 포함한 뒤 중지 처리를 계속합니다. 런타임 정리 완료도 최대 10초 기다리며, 실패 시에는 오류를 반환값에 포함한 뒤 나머지 중지 처리를 계속합니다. cli_url 등 외부 런타임에 연결한 경우에는 공유 런타임을 종료하지 않도록 이 RPC를 호출하지 않습니다. CLI가 대응하는 요청을 특정하지 못해 id: null인 JSON-RPC 오류를 반환한 경우, 진행 중인 모든 요청이 JsonRpcException으로 실패합니다. 예외에는 인용된 값을 제거하고 길이를 제한한 진단 메시지가 포함됩니다. 연결은 유지됩니다. CLI가 이미 요청을 처리했을 수 있으므로, 안전하다고 확인하지 않은 채 자동으로 재시도하지 마세요. SDK는 CLI가 읽을 수 없는 127단계보다 깊게 중첩된 송신 요청을 전송 전에 거부합니다. 중첩이 너무 깊은 핸들러 응답은 JSON-RPC 오류로 대체합니다.

SessionRpc

Session에 연결된 RPC 클래스입니다. 이전 SDK에서는 불가능했던 플랜 모드 이용 등도 가능합니다.

모델·모드·이름·플랜

model()로 현재 모델 확인과 전환, reasoning effort·Auto tier·허용 모델 설정을 할 수 있습니다. mode()는 모드, name()은 세션 이름, plan()은 플랜 본문과 SQLite todo의 읽기·쓰기를 다룹니다.

워크스페이스·인스트럭션·LSP

workspaces()는 파일 목록·읽기·쓰기·이동·삭제와 디렉터리 조작을 제공합니다. instructions()로 인스트럭션 취득·다시 불러오기·탐색을, lsp()로 언어 서버 설정 초기화를 할 수 있습니다.

Autopilot 목표

autopilotObjective()->getState()는 세션의 현재 Autopilot 목표 상태를 타입이 지정된 객체로 반환합니다. 목표가 없으면 state는 null입니다. 이 API는 워크스페이스에 목표가 저장되어 있는지 확인하는 workspaces()->autopilotObjectiveExists()와는 다릅니다.
setStayInAutopilot()으로 objective 완료·일시 정지 시 interactive mode로 돌아가는 요청을 억제할 수 있습니다. 이 설정은 클라이언트 메모리 내에 유지되며 기본값은 true입니다. value에 false를 전달하면 억제를 해제할 수 있습니다. 다시 연결한 경우에는 다시 설정하세요.

에이전트·Fleet·백그라운드 작업

agent()로 에이전트 목록·선택·다시 불러오기를, fleet()로 Fleet을 시작합니다. tasks()에서는 백그라운드 에이전트와 클라이언트 소유 작업의 등록, 진행 상황 취득·업데이트, 전환, 메시지 전송, 취소, 삭제를 다룹니다.

MCP·Plugins·Extensions·Workflow

mcp()는 서버 목록·시작·중지·다시 불러오기, 도구·프롬프트·리소스, OAuth, sampling, 동적 헤더 업데이트를 다룹니다. plugins()와 extensions()는 세션 내 상태를 관리하고, customizations()는 커스터마이즈를 다시 불러옵니다. workflow()로 워크플로를 실행·조회하고, diagnostics()와 connectors()로 진단 정보와 커넥터를 가져올 수 있습니다.

Tools·Permissions·Commands·UI

tools()와 permissions()는 이벤트로 전달된 보류 중 요청에 대한 응답과 설정을 다룹니다. permissions()->clearResumeEscalation()은 재개 시 히스토리에서 복원된 권한 상승을 메모리에서 해제하고, 성공 여부를 타입이 지정된 결과로 반환합니다. commands()는 명령 목록·실행·이벤트 응답을, ui()는 사용자 입력·elicitation·플랜 승인 등의 요청에 대한 응답을 제공합니다. completions()는 입력 후보를 가져옵니다.

Accounts·인증·Providers

accounts()는 enumerate()를 통한 계정/프로바이더/로그인 계정 열거, get()·set(), begin()·advance()·cancel()을 통한 대화형 로그인을 다룹니다. gitHubAuth()는 세션의 인증 상태와 자격 증명, provider()와 providers()는 모델 연결 대상과 프로바이더 어댑터, connectors()는 세션의 커넥터 연결을 다룹니다.

기록·큐·로그·사용량

history()는 대화 압축(압축 설정 포함)·중단·인계 요약·잘라내기를, queue()는 보류 항목의 삽입·이동·편집·삭제·즉시 전송을 제공합니다. log(), eventLog(), usage(), quota(), limitPrediction()으로 로그와 이벤트, 사용량과 한도 정보를 다룹니다. schedule()에서는 예약된 프롬프트를 확인·중지할 수 있습니다.

라이프사이클·원격·호스트 연동

sendMessages()는 여러 메시지를 한 턴에서 실행하고, suspend()·shutdown()으로 세션을 중지합니다. interruptMainTurn()은 메인 턴을, cancelAllBackgroundAgents()는 백그라운드 에이전트를 개별적으로 제어합니다. remote()와 visibility()는 원격 공개·공유 상태, sandbox()는 세션의 샌드박스, managedSettings()는 세션 스코프의 관리 설정, contentExclusion()은 경로 판정, metadata()는 클라이언트 소유 메타데이터, canvas()는 Canvas 연동을 다룹니다.

debug (experimental)

debug()->collectLogs()로 세션의 이벤트 로그, 프로세스 로그, 셸 로그를 .tgz 아카이브 또는 디렉터리에 수집할 수 있습니다. 로그는 기본적으로 민감한 정보가 마스킹(redaction)됩니다. additionalEntries로 파일이나 디렉터리를 추가할 수 있으며, redaction에는 plain-text, events-jsonl, none을 지정할 수 있습니다. none을 지정하면 마스킹되지 않으므로 추가하는 내용에 주의하세요.
DebugCollectLogsDestination::directory('/tmp/copilot-debug')를 지정하면 스테이징 디렉터리에 출력할 수 있습니다. include에서는 수집할 로그와 참조 경로를 개별적으로 지정할 수 있으며, 결과의 entries와 skippedEntries에서 수집 내용을 확인할 수 있습니다. 대상·추가 항목의 경로는 CLI 서버 측 경로입니다. stdio로 CLI를 시작하는 표준 구성에서는 앱과 같은 호스트이지만, TCP로 다른 호스트의 CLI 서버에 연결한 경우에는 호출하는 쪽 머신이 아니라 서버 측 경로를 지정하세요.

contentExclusion (experimental)

세션 작업 디렉터리 내에 있는 로컬 절대 경로가 콘텐츠 제외 정책의 대상인지 확인할 수 있습니다. 파일 내용을 읽거나 첨부하기 전에 호출하세요.
checkPaths()는 절대 경로만 받으며, 경로는 세션 작업 디렉터리 안에 있어야 합니다. checks는 입력과 같은 순서로 반환되며, 중복된 경로도 그대로 유지됩니다. 지원되지 않는 경로나 파일 시스템이거나 정책 평가를 사용할 수 없는 경우에는 available: false와 빈 checks가 반환됩니다. 이 경우 isExcluded()는 항상 true를 반환하므로 모든 경로를 제외 대상으로 취급하세요. available: true라도 결과에 없는 경로는 안전한 쪽으로 판단해 제외 대상으로 판정합니다.

MCP Apps (experimental)

$session->rpc()->mcp()->apps()에서 MCP Apps용 RPC를 호출할 수 있습니다. listTools()와 callTool()에서는 호출 원본 MCP 서버 이름 originServerName이 필수입니다. callTool()의 결과는 자유 형식의 MCP 결과로 반환됩니다.
readResource()는 HTML 등의 리소스 데이터를 반환합니다. SDK는 브라우저 렌더링이나 iframe 조작을 하지 않으므로, 가져온 내용의 렌더링은 호출하는 애플리케이션의 책임입니다.

기능별 사용 예시

아래에 위 기능들의 대표적인 호출 예시를 정리했습니다.

remote (experimental: 원격 세션 지원)

자세한 내용은 Remote Sessions를 참고하세요.

sandbox (experimental: 샌드박스 제어)

권한 핸들러에서는 $request['sandboxPathGrant']가 있는 경우 대상 보류 중 요청의 requestId로 호출합니다. 이 RPC 자체가 허가 요청에 응답하므로, 성공한 경우에는 일반 응답을 보내지 않도록 PermissionDecision::noResult()를 반환합니다.

metadata (experimental: 세션 정보)

로컬 세션 관리 (experimental)

같은 설정 디렉터리에서 관리에 옵트인한 로컬 세션을 $session->rpc()->management()로 설정·목록 조회·생성·메시지 전송·닫기할 수 있습니다. setSessionCreationHandler()로 호스트 콜백을 등록하면 create()로부터의 reverse-RPC를 받을 수 있습니다. 콜백은 newSessionId와 권한·모델 제한을 유지한 채 자식 세션을 생성하고 SessionManagementCreateResult를 반환해야 합니다. 다음 예시에서 $sessionCreationHandler는 SessionManagementCreateHostRequest를 받아 호스트 측에서 자식 세션을 생성하고 SessionManagementCreateResult를 반환하는 클로저입니다.
message()의 accepted는 전달이 수락되었음을 나타내며, 응답이나 작업 완료를 의미하지 않습니다. 자식 세션의 작업 완료를 별도로 확인한 후, 생성한 자식만 닫으려면 close()를 사용합니다. 저장된 기록은 삭제되지 않습니다.

Session canvas

Canvas RPC는 $session->rpc()->canvas()에서 호출합니다. list()는 CanvasList의 canvases에, listOpen()은 CanvasListOpenResult의 openCanvases에 목록을 반환합니다. open()은 OpenCanvasInstance를, action 호출은 CanvasActionInvokeResult를 반환합니다. close()의 반환값은 없습니다.
Canvas provider의 reverse-RPC(canvas.open / canvas.close / canvas.action.invoke)는 SessionConfig / ResumeSessionConfig의 canvasHandler에서 처리합니다. Canvas 렌더링은 호스트 UI의 책임입니다.

workflow

Copilot CLI 1.0.89 계열에서 추가된 워크플로, 커넥터, 진단 등의 실험적 RPC API도 SessionRpc에서 사용할 수 있습니다. 이러한 가변 프로토콜 payload는 JSON 호환 배열로 전달하며, 응답도 배열로 반환됩니다. 각 호출에는 현재 sessionId가 자동으로 추가됩니다.
workflow()는 CLI가 제공하는 저수준 RPC를 호출합니다. Node.js SDK처럼 PHP 클로저를 워크플로로 등록·실행하는 고수준 API는 이번 동기화에서 추가하지 않았습니다. 이 새로운 RPC 그룹들은 CLI 버전에 의존하며 실험적이므로, 지원하는 CLI에서만 사용하세요.

SessionFS 콜백 타입

세션 스코프의 파일 시스템 조작을 위한 콜백 타입(Request/Result)이 정의되어 있습니다. 이는 Copilot CLI가 클라이언트에 콜백할 때의 요청/응답 타입입니다. SessionFsStatResult / SessionFsReaddirResult / SessionFsReaddirWithTypesResult는 실패 시 사용하는 선택적 error(SessionFsError)를 가집니다.

SessionFs 핸들러

Client는 sessionFs.readFile / readFileBytes / writeFile / writeFileBytes에 더해 appendFile, exists, stat, mkdir, readdir, readdirWithTypes, rm, rename, sqliteQuery, sqliteTransaction, sqliteExists의 각 요청을 Session의 프로바이더로 분배합니다. 파일 조작 실패는 ENOENT(ENOENT 또는 errno 2) / UNKNOWN의 error로 반환합니다. exists는 예외 시 false를, stat은 실패 시 0 값과 error를 반환합니다. 프로바이더가 지원하지 않는 조작은 UNKNOWN 오류(SQLite 계열은 JSON-RPC 오류)가 됩니다. sqliteQuery/sqliteExists의 예외는 JSON-RPC 오류로, sqliteTransaction의 실패는 결과의 error(errorClass 포함)로 반환합니다. 프로바이더 측 인터페이스(SessionFsFilesystemProvider, SessionFsSqliteCapableProvider, SessionFsSqliteProvider, SessionFsSqliteTransactionProvider)는 기존 SessionFsProvider(2개 메서드)를 깨뜨리지 않도록 별도의 인터페이스로 추가되었습니다.

SQLite 콜백 타입

SQLite 지원을 활성화하려면 SessionFsSetProviderRequest의 capabilities에 SessionFsSetProviderCapabilities(sqlite: true)를 전달합니다.
보통은 이 RPC를 직접 호출하지 않으며, Client 옵션 sessionFs(또는 config/copilot.php의 session_fs)를 지정하면 Client::start()가 sessionFs.setProvider를 한 번만 전송합니다. 세션에는 createSessionFsProvider가 필요합니다(SessionConfig 참고). SessionFsSqliteQueryType enum(src/Enums/)은 쿼리 종류를 나타냅니다:
  • Exec: DDL/여러 문(결과 없음)
  • Query: SELECT(행을 반환)
  • Run: INSERT/UPDATE/DELETE(rowsAffected 를 반환)
이 타입 클래스들은 src/Types/Rpc/에 배치되어 있습니다.

배열로 인자 지정

인자도 반환값도 전용 클래스를 사용하지만, 인자는 배열로 지정할 수도 있습니다.

테스트

Copilot::fake()로의 목은 사용할 수 없으므로 Copilot::expects('client')나 Copilot::expects('start')로 목해 주세요.
최신 정보는 GitHub 저장소를 참고하세요.
마지막 수정일 2026년 11월 9일