SessionConfig
SessionConfig 클래스로 다양한 설정이 가능합니다.
Copilot::run(prompt: '...', config: $config)이나 Copilot::start(function (CopilotSession $session) { ... }, config: $config)와 같이 사용합니다.
단순히 모델을 지정하고 싶은 정도로 SessionConfig 클래스를 사용할 것도 없을 때는 배열로 지정할 수도 있습니다. Copilot::run(prompt: '...', config: ['model' => 'auto'])
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SystemMessageConfig;
use Revolution\Copilot\Types\InfiniteSessionConfig;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverride;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideSupports;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideLimits;
use Revolution\Copilot\Enums\ReasoningEffort;
$config = new SessionConfig(
// 사용할 모델 지정
model: 'auto',
// 신규 세션 작성 시 고정 세션 ID를 지정
sessionId: 'session-123',
clientName: 'my-app',
// 추론 레벨. 대응하는 모델에서만 설정 가능.
reasoningEffort: ReasoningEffort::HIGH,
// 모델의 capabilities를 오버라이드. 런타임의 기본값에 deep-merge된다.
// modelCapabilities: new ModelCapabilitiesOverride(
// supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
// limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
// ),
// 배열로도 지정 가능
// modelCapabilities: ['supports' => ['vision' => true]],
// config 디렉터리를 덮어쓰기 설정
configDirectory: '',
// MCP 설정이나 스킬 디렉터리의 자동 검출 활성화
// .mcp.json 이나 .vscode/mcp.json 을 워킹 디렉터리에서 자동 검출하고,
// 명시적으로 지정한 mcpServers 나 skillDirectories 와 병합함(이름 충돌 시 명시 지정이 우선)
enableConfigDiscovery: true,
// 커스텀 도구
tools: [...],
// 시스템 메시지
systemMessage: new SystemMessageConfig(
content: 'You are a helpful assistant for Laravel developers.',
),
// 시스템 메시지: replace 모드(시스템 프롬프트를 완전히 대체)
// systemMessage: new SystemMessageConfig(
// mode: 'replace',
// content: '커스텀 시스템 프롬프트 전체',
// ),
// 시스템 메시지: customize 모드(섹션 단위로 오버라이드)
// systemMessage: new SystemMessageConfig(
// mode: 'customize',
// sections: [
// 'tone' => new SectionOverride(action: SectionOverrideAction::REPLACE, content: 'Always respond in Japanese.'),
// 'safety' => new SectionOverride(action: SectionOverrideAction::REMOVE),
// 'custom_instructions' => new SectionOverride(action: SectionOverrideAction::APPEND, content: 'Additional instructions here.'),
// ],
// content: 'append 모드와 마찬가지의 추가 콘텐츠(옵션)',
// ),
// 커스텀 프로바이더
provider: new ProviderConfig(),
// 세션별 GitHub 토큰(멀티테넌트 대응)
// 클라이언트 레벨의 github_token과는 별도로, 세션 단위로 토큰을 지정할 수 있음
gitHubToken: $user->github_token,
// 원격 세션의 동작 모드
// 'off' - 로컬만(기본값)
// 'export' - 세션 이벤트를 GitHub에 익스포트(원격 스티어링 없음)
// 'on' - 익스포트와 원격 스티어링 모두 활성화
remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,
// 클라우드 세션(로컬이 아닌 클라우드에서 세션 작성)
// 옵션으로 저장소 정보를 관련지을 수 있음
cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
repository: new \Revolution\Copilot\Types\CloudSessionRepository(
owner: 'myorg',
name: 'myrepo',
branch: 'main',
),
),
onPermissionRequest: function (array $request) {
// 권한 요청 처리
},
onUserInputRequest: function (UserInputRequest $request) {
// 사용자 인풋 요청 처리. ask_user
},
// 엘리시테이션 요청 핸들러
// 설정하면 에이전트의 폼 기반 UI 다이얼로그 요청을 받을 수 있음
onElicitationRequest: function (ElicitationContext $context) {
// 엘리시테이션 요청 처리
return ['action' => 'accept', 'content' => ['field' => 'value']];
},
// 플랜 모드 종료 요청 핸들러
// 설정하면 에이전트가 플랜 모드를 종료할 때의 요청을 받을 수 있음
onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
// 플랜 내용을 확인하고 승인, 거부
return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
},
// 자동 모드 전환 요청 핸들러
// 레이트 리밋 도달 시 auto 모드로의 전환을 허용할지 선택 가능
onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
// "yes", "yes_always", "no" 중 하나를 반환
return 'yes';
},
// 세션 훅
hooks: [],
// 워킹 디렉터리
workingDirectory: '',
// 스트리밍 활성화
streaming: true,
// 서브에이전트의 스트리밍 이벤트를 메인 스트림에 포함할지(기본값: true)
includeSubAgentStreamingEvents: true,
// 사용 가능한 빌트인 도구
availableTools: ['read_file', 'write_file'],
// 또는 제외할 도구
excludedTools: ['shell'],
// MCP 서버 설정
mcpServers: [
'github' => [
'type' => 'http',
'url' => 'https://api.githubcopilot.com/mcp/',
],
],
// 커스텀 에이전트
customAgents: [
[
'name' => 'reviewer',
'displayName' => 'Code Reviewer',
'description' => 'Reviews code for best practices',
'prompt' => 'You are an expert code reviewer.',
],
],
// 기본 에이전트 설정. 커스텀 에이전트가 선택되어 있지 않은 경우에 사용되는 빌트인 에이전트의 설정.
// excludedTools: 기본 에이전트에서 제외할 도구 리스트.
// 커스텀 서브에이전트에는 계속 사용 가능.
defaultAgent: ['excludedTools' => ['tool_name']],
// 세션 시작 시에 활성화할 에이전트를 지정. customAgents의 name과 일치해야 함.
agent: 'reviewer',
// 스킬 디렉터리
skillDirectories: [],
// 비활성 스킬
disabledSkills: [],
// 무한 세션 설정. 기본값은 활성.
infiniteSessions: new InfiniteSessionConfig(
enabled: true,
backgroundCompactionThreshold: 0.80, // 컨텍스트 사용률이 80%가 되면 압축 시작
bufferExhaustionThreshold: 0.95, // 압축이 완료될 때까지 95%에서 블록
),
// 무한 세션 비활성화
// infiniteSessions: new InfiniteSessionConfig(enabled: false),
// 세션 작성 RPC보다 앞서 이벤트 핸들러를 등록.
// session.start 등 초기 이벤트를 놓치지 않기 위해 사용.
// $session->on($handler)을 나중에 호출하는 것과 동등하지만, 라이프사이클의 더 이른 단계에서 등록됨.
onEvent: function (SessionEvent $event) {
// 모든 세션 이벤트를 받음
},
);
$response = Copilot::run('...', config: $config);
ResumeSessionConfig 클래스를 사용합니다. SessionConfig와 거의 같지만 약간 다릅니다. ResumeSessionConfig는 설정을 바꾸고 싶은 항목만 지정합니다. 그 외는 새 세션 시작 시의 설정이 인계됩니다.
클라우드 실행은 Cloud Sessions, Plugin Directory는 Plugin Directories를 참고하세요.
최신 정보는 GitHub 저장소를 참고하세요.