Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/chatSessions/claude/common/claudeSessionStateService.ts
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { EffortLevel, PermissionMode } from '@anthropic-ai/claude-agent-sdk';
7
import type * as vscode from 'vscode';
8
import { CapturingToken } from '../../../../platform/requestLogger/common/capturingToken';
9
import type { TraceContext } from '../../../../platform/otel/common/otelService';
10
import { createServiceIdentifier } from '../../../../util/common/services';
11
import { Event } from '../../../../util/vs/base/common/event';
12
import type { ClaudeFolderInfo } from './claudeFolderInfo';
13
import type { ParsedClaudeModelId } from './claudeModelId';
14
15
/**
16
* Usage handler function type for reporting token usage to stream.
17
*/
18
export type UsageHandler = (usage: vscode.ChatResultUsage) => void;
19
20
export interface SessionState {
21
modelId: ParsedClaudeModelId | undefined;
22
permissionMode: PermissionMode;
23
capturingToken: CapturingToken | undefined;
24
folderInfo: ClaudeFolderInfo | undefined;
25
usageHandler: UsageHandler | undefined;
26
reasoningEffort: EffortLevel | undefined;
27
traceContext: TraceContext | undefined;
28
}
29
30
/**
31
* Event fired when session state changes.
32
*/
33
export interface SessionStateChangeEvent {
34
readonly sessionId: string;
35
readonly modelId?: ParsedClaudeModelId;
36
readonly permissionMode?: PermissionMode;
37
readonly folderInfo?: ClaudeFolderInfo;
38
}
39
40
export interface IClaudeSessionStateService {
41
readonly _serviceBrand: undefined;
42
43
/**
44
* Event fired when session state (model or permission mode) changes.
45
*/
46
readonly onDidChangeSessionState: Event<SessionStateChangeEvent>;
47
48
/**
49
* Gets the stored model ID for a session (does not apply fallback logic).
50
*/
51
getModelIdForSession(sessionId: string): ParsedClaudeModelId | undefined;
52
53
/**
54
* Sets the model ID for a session.
55
*/
56
setModelIdForSession(sessionId: string, modelId: ParsedClaudeModelId | undefined): void;
57
58
/**
59
* Gets the permission mode for a session.
60
*/
61
getPermissionModeForSession(sessionId: string): PermissionMode;
62
63
/**
64
* Sets the permission mode for a session.
65
*/
66
setPermissionModeForSession(sessionId: string, mode: PermissionMode): void;
67
68
/**
69
* Gets the capturing token for a session (used for request logging grouping).
70
*/
71
getCapturingTokenForSession(sessionId: string): CapturingToken | undefined;
72
73
/**
74
* Sets the capturing token for a session.
75
*/
76
setCapturingTokenForSession(sessionId: string, token: CapturingToken | undefined): void;
77
78
/**
79
* Gets the folder info for a session.
80
*/
81
getFolderInfoForSession(sessionId: string): ClaudeFolderInfo | undefined;
82
83
/**
84
* Sets the folder info for a session.
85
*/
86
setFolderInfoForSession(sessionId: string, folderInfo: ClaudeFolderInfo): void;
87
88
/**
89
* Gets the usage handler for a session.
90
*/
91
getUsageHandlerForSession(sessionId: string): UsageHandler | undefined;
92
93
/**
94
* Sets the usage handler for a session.
95
*/
96
setUsageHandlerForSession(sessionId: string, handler: UsageHandler | undefined): void;
97
98
/**
99
* Gets the reasoning effort for a session (user's per-request selection from the model picker).
100
*/
101
getReasoningEffortForSession(sessionId: string): EffortLevel | undefined;
102
103
/**
104
* Sets the reasoning effort for a session.
105
*/
106
setReasoningEffortForSession(sessionId: string, effort: EffortLevel | undefined): void;
107
108
/**
109
* Gets the OTel trace context for a session (used to parent chat spans to invoke_agent).
110
*/
111
getTraceContextForSession(sessionId: string): TraceContext | undefined;
112
113
/**
114
* Sets the OTel trace context for a session.
115
*/
116
setTraceContextForSession(sessionId: string, traceContext: TraceContext | undefined): void;
117
}
118
119
export const IClaudeSessionStateService = createServiceIdentifier<IClaudeSessionStateService>('IClaudeSessionStateService');
120
121