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 * as fs from 'fs';
7
>
import { DeferredPromise, raceCancellablePromises, timeout } from '../../../base/common/async.js';
8
>
import { Emitter } from '../../../base/common/event.js';
9
>
import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../base/common/lifecycle.js';
10
>
import { dirname, parse as pathParse } from '../../../base/common/path.js';
11
>
import * as platform from '../../../base/common/platform.js';
12
>
import { getSystemShell } from '../../../base/node/shell.js';
13
>
import { URI } from '../../../base/common/uri.js';
14
>
import { generateUuid } from '../../../base/common/uuid.js';
15
>
import { AiAgentEnvValue, AiAgentEnvVar } from '../../chat/common/aiAgentEnv.js';
16
>
import { createDecorator } from '../../instantiation/common/instantiation.js';
17
>
import { ILogService } from '../../log/common/log.js';
18
>
import { IProductService } from '../../product/common/productService.js';
19
>
import { getShellIntegrationInjection } from '../../terminal/node/terminalEnvironment.js';
20
>
import { AgentHostConfigKey, agentHostCustomizationConfigSchema } from '../common/agentHostCustomizationConfig.js';
21
>
import { ActionType } from '../common/state/protocol/actions.js';
22
>
import type { CreateTerminalParams } from '../common/state/protocol/commands.js';
23
>
import { TerminalClaim, TerminalContentPart, TerminalInfo, TerminalState, TerminalClaimKind } from '../common/state/protocol/state.js';
24
>
import { isTerminalAction } from '../common/state/sessionActions.js';
25
>
import { ROOT_STATE_URI } from '../common/state/sessionState.js';
26
>
import { IAgentConfigurationService } from './agentConfigurationService.js';
27
>
import { AgentHostHeadlessTerminal } from './agentHostHeadlessTerminal.js';
28
>
import { isZsh } from './agentHostShellUtils.js';
29
>
import { AgentHostStateManager, IAgentHostStateManager } from './agentHostStateManager.js';
30
>
import { Osc633Event, Osc633EventType, Osc633ParseSegment, Osc633Parser } from './osc633Parser.js';
31
>
32
>
const WAIT_FOR_PROMPT_TIMEOUT = 10_000;
33
>
const HEADLESS_TERMINAL_SCROLLBACK = 0;
34
>
const DSR_CURSOR_POSITION_QUERY = '\x1b[6n';
35
>
const DEC_DSR_CURSOR_POSITION_QUERY = '\x1b[?6n';
36
>
const SERVER_HANDLED_QUERY_PREFIXES = ['\x1b[?6', '\x1b[?', '\x1b[6', '\x1b[', '\x1b'];
37
>
38
>
export const IAgentHostTerminalManager = createDecorator<IAgentHostTerminalManager>('agentHostTerminalManager');
39
>
40
>
export interface ICommandFinishedEvent {
41
>
commandId: string;
42
>
exitCode: number | undefined;
43
>
command: string;
44
>
output: string;
45
>
}
46
>
47
>
export interface ITerminalQueryFilterState {
48
>
pendingData: string;
49
>
}
50
>
51
>
export interface ISendTextOptions {
52
>
shouldExecute: boolean;
53
>
/**
54
>
* Match workbench terminal sendText: wrap in bracketed paste markers only
55
>
* when requested by the caller and enabled by the terminal.
56
>
*/
57
>
bracketedPasteMode?: boolean;
58
>
}
59
>
60
>
export interface IFormatTerminalTextOptions {
61
>
shouldExecute: boolean;
62
>
forceBracketedPasteMode?: boolean;
63
>
}
64
>
65
>
export function removeServerHandledTerminalQueries(data: string, state: ITerminalQueryFilterState): string {
66
if (
67
!state.pendingData