Path: blob/main/extensions/copilot/src/extension/chatSessions/claude/common/claudeSessionStateService.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { EffortLevel, PermissionMode } from '@anthropic-ai/claude-agent-sdk';6import type * as vscode from 'vscode';7import { CapturingToken } from '../../../../platform/requestLogger/common/capturingToken';8import type { TraceContext } from '../../../../platform/otel/common/otelService';9import { createServiceIdentifier } from '../../../../util/common/services';10import { Event } from '../../../../util/vs/base/common/event';11import type { ClaudeFolderInfo } from './claudeFolderInfo';12import type { ParsedClaudeModelId } from './claudeModelId';1314/**15* Usage handler function type for reporting token usage to stream.16*/17export type UsageHandler = (usage: vscode.ChatResultUsage) => void;1819export interface SessionState {20modelId: ParsedClaudeModelId | undefined;21permissionMode: PermissionMode;22capturingToken: CapturingToken | undefined;23folderInfo: ClaudeFolderInfo | undefined;24usageHandler: UsageHandler | undefined;25reasoningEffort: EffortLevel | undefined;26traceContext: TraceContext | undefined;27}2829/**30* Event fired when session state changes.31*/32export interface SessionStateChangeEvent {33readonly sessionId: string;34readonly modelId?: ParsedClaudeModelId;35readonly permissionMode?: PermissionMode;36readonly folderInfo?: ClaudeFolderInfo;37}3839export interface IClaudeSessionStateService {40readonly _serviceBrand: undefined;4142/**43* Event fired when session state (model or permission mode) changes.44*/45readonly onDidChangeSessionState: Event<SessionStateChangeEvent>;4647/**48* Gets the stored model ID for a session (does not apply fallback logic).49*/50getModelIdForSession(sessionId: string): ParsedClaudeModelId | undefined;5152/**53* Sets the model ID for a session.54*/55setModelIdForSession(sessionId: string, modelId: ParsedClaudeModelId | undefined): void;5657/**58* Gets the permission mode for a session.59*/60getPermissionModeForSession(sessionId: string): PermissionMode;6162/**63* Sets the permission mode for a session.64*/65setPermissionModeForSession(sessionId: string, mode: PermissionMode): void;6667/**68* Gets the capturing token for a session (used for request logging grouping).69*/70getCapturingTokenForSession(sessionId: string): CapturingToken | undefined;7172/**73* Sets the capturing token for a session.74*/75setCapturingTokenForSession(sessionId: string, token: CapturingToken | undefined): void;7677/**78* Gets the folder info for a session.79*/80getFolderInfoForSession(sessionId: string): ClaudeFolderInfo | undefined;8182/**83* Sets the folder info for a session.84*/85setFolderInfoForSession(sessionId: string, folderInfo: ClaudeFolderInfo): void;8687/**88* Gets the usage handler for a session.89*/90getUsageHandlerForSession(sessionId: string): UsageHandler | undefined;9192/**93* Sets the usage handler for a session.94*/95setUsageHandlerForSession(sessionId: string, handler: UsageHandler | undefined): void;9697/**98* Gets the reasoning effort for a session (user's per-request selection from the model picker).99*/100getReasoningEffortForSession(sessionId: string): EffortLevel | undefined;101102/**103* Sets the reasoning effort for a session.104*/105setReasoningEffortForSession(sessionId: string, effort: EffortLevel | undefined): void;106107/**108* Gets the OTel trace context for a session (used to parent chat spans to invoke_agent).109*/110getTraceContextForSession(sessionId: string): TraceContext | undefined;111112/**113* Sets the OTel trace context for a session.114*/115setTraceContextForSession(sessionId: string, traceContext: TraceContext | undefined): void;116}117118export const IClaudeSessionStateService = createServiceIdentifier<IClaudeSessionStateService>('IClaudeSessionStateService');119120121