메인 콘텐츠로 건너뛰기

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 저장소를 참고하세요.
마지막 수정일 2026년 7월 13일