Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/worker/extHostHooksWorker.ts
5232 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 type * as vscode from 'vscode';
7
import { CancellationToken } from '../../../base/common/cancellation.js';
8
import { ILogService } from '../../../platform/log/common/log.js';
9
import { HookTypeValue } from '../../contrib/chat/common/promptSyntax/hookSchema.js';
10
import { isToolInvocationContext, IToolInvocationContext } from '../../contrib/chat/common/tools/languageModelToolsService.js';
11
import { IHookCommandDto, MainContext, MainThreadHooksShape } from '../common/extHost.protocol.js';
12
import { IChatHookExecutionOptions, IExtHostHooks } from '../common/extHostHooks.js';
13
import { IExtHostRpcService } from '../common/extHostRpcService.js';
14
import * as typeConverters from '../common/extHostTypeConverters.js';
15
import { IHookResult } from '../../contrib/chat/common/hooks/hooksTypes.js';
16
import { HookCommandResultKind, IHookCommandResult } from '../../contrib/chat/common/hooks/hooksCommandTypes.js';
17
18
export class WorkerExtHostHooks implements IExtHostHooks {
19
20
private readonly _mainThreadProxy: MainThreadHooksShape;
21
22
constructor(
23
@IExtHostRpcService extHostRpc: IExtHostRpcService,
24
@ILogService private readonly _logService: ILogService
25
) {
26
this._mainThreadProxy = extHostRpc.getProxy(MainContext.MainThreadHooks);
27
}
28
29
async executeHook(hookType: HookTypeValue, options: IChatHookExecutionOptions, token?: CancellationToken): Promise<vscode.ChatHookResult[]> {
30
if (!options.toolInvocationToken || !isToolInvocationContext(options.toolInvocationToken)) {
31
throw new Error('Invalid or missing tool invocation token');
32
}
33
34
const context = options.toolInvocationToken as IToolInvocationContext;
35
36
const results = await this._mainThreadProxy.$executeHook(hookType, context.sessionResource, options.input, token ?? CancellationToken.None);
37
return results.map(r => typeConverters.ChatHookResult.to(r as IHookResult));
38
}
39
40
async $runHookCommand(_hookCommand: IHookCommandDto, _input: unknown, _token: CancellationToken): Promise<IHookCommandResult> {
41
this._logService.debug('[WorkerExtHostHooks] Hook commands are not supported in web worker context');
42
43
// Web worker cannot run shell commands - return an error
44
return {
45
kind: HookCommandResultKind.Error,
46
result: 'Hook commands are not supported in web worker context'
47
};
48
}
49
}
50
51