{"id":1430,"date":"2024-05-11T19:32:51","date_gmt":"2024-05-11T19:32:51","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1430"},"modified":"2024-05-11T19:32:58","modified_gmt":"2024-05-11T19:32:58","slug":"copilotyuanmaxiangxifenxieractivaterukoufenxi","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/copilotyuanmaxiangxifenxieractivaterukoufenxi.html","title":{"rendered":"copilot\u6e90\u7801\u8be6\u7ec6\u5206\u6790\uff08\u4e8c\uff09activate\u5165\u53e3\u5206\u6790"},"content":{"rendered":"<h2 data-id=\"heading-0\">copilot\u7684\u5165\u53e3\u51fd\u6570<\/h2>\n<p>\u6211\u4eec\u5c06activate\u65b9\u6cd5\u683c\u5f0f\u5316\u5982\u4e0b\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">async&nbsp;function&nbsp;<span class=\"hljs-built_in\">activate<\/span>(context)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u521b\u5efa\u5e76\u6807\u8bb0\u4e3a\u5df2\u53d1\u9001\u7684\u9065\u6d4b\u6570\u636e<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;let&nbsp;activationTelemetry&nbsp;=&nbsp;TelemetryData<span class=\"hljs-selector-class\">.createAndMarkAsIssued<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u521b\u5efa\u6269\u5c55\u4e0a\u4e0b\u6587\uff0c\u5e76\u7b49\u5f85\u5176\u5b8c\u6210<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;let&nbsp;ctx&nbsp;=&nbsp;await&nbsp;<span class=\"hljs-built_in\">createExtensionContext<\/span>(context);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6ce8\u518c\u72b6\u6001\u680f\uff0c\u5e76\u5c06CopilotRepositoryControlManager\u6dfb\u52a0\u5230\u4e0a\u4e0b\u6587\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;<span class=\"hljs-built_in\">registerStatusBar<\/span>(ctx,&nbsp;outputChannel);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CopilotRepositoryControlManager,&nbsp;new&nbsp;CopilotRepositoryControlManager(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6ce8\u518c\u8bca\u65ad\u547d\u4ee4<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp;&nbsp;<span class=\"hljs-built_in\">registerDiagnosticCommands<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6ce8\u518c\u5e26\u6709\u9065\u6d4b\u7684\u547d\u4ee4<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;<span class=\"hljs-built_in\">registerCommandWithTelemetry<\/span>(ctx,&nbsp;CMDSignIn,&nbsp;()&nbsp;=&gt;&nbsp;<span class=\"hljs-built_in\">getSession<\/span>(ctx,&nbsp;!<span class=\"hljs-number\">0<\/span>));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5c06CodeReference\u6dfb\u52a0\u5230\u8ba2\u9605\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(new&nbsp;CodeReference(ctx)<span class=\"hljs-selector-class\">.register<\/span>());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5c06onDeactivate\u6dfb\u52a0\u5230\u8ba2\u9605\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(onDeactivate(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5b9a\u4e49\u4e00\u4e2a\u5f02\u6b65\u51fd\u6570tryActivation<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;let&nbsp;tryActivation&nbsp;=&nbsp;<span class=\"hljs-built_in\">__name<\/span>(async&nbsp;()&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;statusBar&nbsp;=&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(StatusReporter);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bbe\u7f6e\u8fdb\u5ea6\uff0c\u5e76\u5141\u8bb8\u4e00\u6b21\u6027\u767b\u5f55<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;&nbsp;&nbsp;statusBar<span class=\"hljs-selector-class\">.setProgress<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">permitOneSignIn<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5b9a\u4e49\u4e00\u4e2a\u5904\u7406\u9519\u8bef\u7684\u51fd\u6570<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;rejectionHandler&nbsp;=&nbsp;<span class=\"hljs-built_in\">__name<\/span>((error,&nbsp;allowRetry&nbsp;=&nbsp;!<span class=\"hljs-number\">0<\/span>)&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;reason&nbsp;=&nbsp;error<span class=\"hljs-selector-class\">.message<\/span>&nbsp;||&nbsp;error;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bb0\u5f55\u9519\u8bef\uff0c\u5e76\u505c\u7528\u9065\u6d4b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">telemetryError<\/span>(ctx,&nbsp;\"activationFailed\",&nbsp;TelemetryData.createAndMarkAsIssued({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reason:&nbsp;reason<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(TelemetryReporters)<span class=\"hljs-selector-class\">.deactivate<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bbe\u7f6e\u9519\u8bef\u6d88\u606f\uff0c\u5e76\u5141\u8bb8\u91cd\u8bd5<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;message&nbsp;=&nbsp;reason&nbsp;===&nbsp;\"GitHubLoginFailed\"&nbsp;?&nbsp;SESSION_LOGIN_MESSAGE&nbsp;:&nbsp;`Extension&nbsp;activation&nbsp;failed:&nbsp;<span class=\"hljs-string\">\"${reason}\"<\/span>`;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusBar<span class=\"hljs-selector-class\">.setError<\/span>(message,&nbsp;allowRetry&nbsp;?&nbsp;tryActivation&nbsp;:&nbsp;void&nbsp;<span class=\"hljs-number\">0<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bb0\u5f55\u9519\u8bef\uff0c\u5e76\u5c06github.copilot.activated\u4e0a\u4e0b\u6587\u8bbe\u7f6e\u4e3afalse<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger<span class=\"hljs-selector-class\">.error<\/span>(ctx,&nbsp;message);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ja<span class=\"hljs-selector-class\">.commands<\/span><span class=\"hljs-selector-class\">.executeCommand<\/span>(\"setContext\",&nbsp;\"github.copilot.activated\",&nbsp;!<span class=\"hljs-number\">1<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\">&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;\"rejectionHandler\");<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u68c0\u67e5Node.js\u7248\u672c\u662f\u5426\u53d7\u652f\u6301<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;nodeVersionError&nbsp;=&nbsp;<span class=\"hljs-built_in\">errorMessageForUnsupportedNodeVersion<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\">&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(nodeVersionError)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">rejectionHandler<\/span>(nodeVersionError,&nbsp;!<span class=\"hljs-number\">1<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u83b7\u53d6Copilot&nbsp;token\u5e76\u7b49\u5f85\u5176\u5b8c\u6210<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"59\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(CopilotTokenManager)<span class=\"hljs-selector-class\">.getCopilotToken<\/span>(ctx)<span class=\"hljs-selector-class\">.then<\/span>(()&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"60\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5f3a\u5236\u8bbe\u7f6e\u4e3a\u6b63\u5e38\u72b6\u6001\uff0c\u5e76\u5c06github.copilot.activated\u4e0a\u4e0b\u6587\u8bbe\u7f6e\u4e3atrue<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"61\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusBar<span class=\"hljs-selector-class\">.forceNormal<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"62\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ja<span class=\"hljs-selector-class\">.commands<\/span><span class=\"hljs-selector-class\">.executeCommand<\/span>(\"setContext\",&nbsp;\"github.copilot.activated\",&nbsp;!<span class=\"hljs-number\">0<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"63\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"64\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6ce8\u518c\u9762\u677f\u652f\u6301\uff0c\u6ce8\u518cGhostText\u652f\u6301\uff0c\u5e76\u5c06\u6587\u6863\u8ddf\u8e2a\u5668\u548c\u5149\u6807\u8ddf\u8e2a\u5668\u6dfb\u52a0\u5230\u8ba2\u9605\u4e2d<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"65\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">registerPanelSupport<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"66\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">registerGhostTextSupport<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"67\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(registerDocumentTracker(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"68\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(registerCursorTracker(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"69\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"70\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6dfb\u52a0\u4e8b\u4ef6\u5904\u7406\u5668\uff0c\u5f53\u6d3b\u52a8\u7f16\u8f91\u5668\u6539\u53d8\u65f6\u63d0\u53d6\u4ed3\u5e93\u4fe1\u606f\uff0c\u5f53\u6253\u5f00\u6587\u6863\u65f6\u9884\u70ed\u8bed\u8a00\u68c0\u6d4b\u7f13\u5b58\uff0c\u5f53\u914d\u7f6e\u6539\u53d8\u65f6\u8c03\u7528onDidChangeConfigurationHandler<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"71\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(ja.window.onDidChangeActiveTextEditor(e&nbsp;=&gt;&nbsp;e&nbsp;&amp;&amp;&nbsp;extractRepoInfoInBackground(ctx,&nbsp;e.document.uri)));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"72\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(ja.workspace.onDidOpenTextDocument(doc&nbsp;=&gt;&nbsp;primeLanguageDetectionCache(ctx,&nbsp;doc)));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"73\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<span class=\"hljs-selector-class\">.subscriptions<\/span><span class=\"hljs-selector-class\">.push<\/span>(ja.workspace.onDidChangeConfiguration(e&nbsp;=&gt;&nbsp;onDidChangeConfigurationHandler(e,&nbsp;ctx)));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"74\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"75\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u68c0\u67e5\u6269\u5c55\u6a21\u5f0f\u662f\u5426\u4e3a\u5f00\u53d1\u6a21\u5f0f<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"76\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;isDevMode&nbsp;=&nbsp;context<span class=\"hljs-selector-class\">.extensionMode<\/span>&nbsp;===&nbsp;ja<span class=\"hljs-selector-class\">.ExtensionMode<\/span><span class=\"hljs-selector-class\">.Development<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"77\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"78\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u521d\u59cb\u5316\uff0c\u5982\u679c\u4e0d\u662f\u5f00\u53d1\u6a21\u5f0f\uff0c\u5219\u542f\u52a8\u7ebf\u7a0b\uff0c\u5e76\u53d1\u9001\u6fc0\u6d3b\u9065\u6d4b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"79\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">init<\/span>(ctx,&nbsp;!isDevMode,&nbsp;new&nbsp;Logger(<span class=\"hljs-number\">1<\/span>,&nbsp;\"promptlib&nbsp;proxy\"));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"80\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!isDevMode&nbsp;&amp;&amp;&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(hy.SnippetOrchestrator)<span class=\"hljs-selector-class\">.startThreading<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"81\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-built_in\">telemetry<\/span>(ctx,&nbsp;\"extension.activate\",&nbsp;activationTelemetry);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"82\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"83\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u5982\u679c\u6709\u6d3b\u52a8\u7684\u6587\u672c\u7f16\u8f91\u5668\uff0c\u5219\u66f4\u65b0\u5176\u5185\u5bb9<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"84\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ja<span class=\"hljs-selector-class\">.window<\/span>?<span class=\"hljs-selector-class\">.activeTextEditor<\/span>&nbsp;&amp;&amp;&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(CopilotRepositoryControlManager)<span class=\"hljs-selector-class\">.evaluate<\/span>(ja.window.activeTextEditor.document?.uri,&nbsp;ja.window.activeTextEditor.document.getText(),&nbsp;\"UPDATE\");<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"85\">&nbsp;&nbsp;&nbsp;&nbsp;})<span class=\"hljs-selector-class\">.catch<\/span>(ex&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"86\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5982\u679c\u53d1\u751f\u9519\u8bef\uff0c\u5219\u8c03\u7528rejectionHandler<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"87\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rejectionHandler(ex);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"88\">&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"89\">&nbsp;&nbsp;},&nbsp;\"tryActivation\");<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"90\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"91\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6dfb\u52a0\u4e8b\u4ef6\u5904\u7406\u5668\uff0c\u5f53\u4f1a\u8bdd\u6539\u53d8\u65f6\u8c03\u7528onDidChangeSessionsHandler<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"92\">&nbsp;&nbsp;ja<span class=\"hljs-selector-class\">.authentication<\/span><span class=\"hljs-selector-class\">.onDidChangeSessions<\/span>(async&nbsp;event&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"93\">&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;onDidChangeSessionsHandler(event,&nbsp;ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"94\">&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"95\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"96\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u542f\u52a8VS&nbsp;Code\u5b89\u88c5\u7ba1\u7406\u5668<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"97\">&nbsp;&nbsp;new&nbsp;<span class=\"hljs-built_in\">VsCodeInstallationManager<\/span>()<span class=\"hljs-selector-class\">.startup<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"98\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"99\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u7b49\u5f85tryActivation\u5b8c\u6210<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"100\">&nbsp;&nbsp;await&nbsp;<span class=\"hljs-built_in\">tryActivation<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"101\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"102\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8fd4\u56deCopilotExtensionApi\u7684\u65b0\u5b9e\u4f8b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"103\">&nbsp;&nbsp;return&nbsp;new&nbsp;<span class=\"hljs-built_in\">CopilotExtensionApi<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"104\">}<\/span>\n<\/code><\/pre>\n<p>\u5728\u5165\u53e3\u51fd\u6570\u4e2d\uff0c\u6d89\u53ca\u5230\u4e86\u51e0\u4e2a\u7ec4\u4ef6\uff1a<\/p>\n<ul>\n<li><code>TelemetryData<\/code>\uff0c\u8d1f\u8d23\u521b\u5efa\u4e0a\u62a5\u6570\u636e\u3002<\/li>\n<li><code>createExtensionContext<\/code> \uff0c\u8d1f\u8d23\u5904\u7406\u751f\u6210Context\u3002<\/li>\n<\/ul>\n<h2 data-id=\"heading-1\">\u5173\u4e8eContext\u7684\u521d\u59cb\u5316<\/h2>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">async&nbsp;function&nbsp;<span class=\"hljs-built_in\">createExtensionContext<\/span>(extensionContext)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u521b\u5efa\u4e00\u4e2a\u751f\u4ea7\u73af\u5883\u7684\u4e0a\u4e0b\u6587\uff0c\u5e76\u8bbe\u7f6e\u65e5\u5fd7\u76ee\u6807\u4e3a\u63a7\u5236\u53f0\u548c\u8f93\u51fa\u901a\u9053<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;let&nbsp;ctx&nbsp;=&nbsp;<span class=\"hljs-built_in\">createProductionContext<\/span>(new&nbsp;VSCodeConfigProvider()),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;&nbsp;&nbsp;logTarget&nbsp;=&nbsp;new&nbsp;<span class=\"hljs-built_in\">MultiLog<\/span>([new&nbsp;ConsoleLog(console),&nbsp;new&nbsp;<span class=\"hljs-built_in\">OutputChannelLog<\/span>(outputChannel)]);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.forceSet<\/span>(LogTarget,&nbsp;logTarget);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(EditorAndPluginInfo,&nbsp;new&nbsp;VSCodeEditorInfo());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">&nbsp;&nbsp;<span class=\"hljs-built_in\">initProxyEnvironment<\/span>(ctx.get(Fetcher),&nbsp;process<span class=\"hljs-selector-class\">.env<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(NotificationSender,&nbsp;new&nbsp;ExtensionNotificationSender());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(EditorSession,&nbsp;new&nbsp;EditorSession(vscode.env.sessionId,&nbsp;vscode.env.machineId));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(Extension,&nbsp;new&nbsp;Extension(extensionContext));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(EditorExperimentFilters,&nbsp;new&nbsp;VSCodeEditorExperimentFilters());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;<span class=\"hljs-built_in\">setupExperimentationService<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(SymbolDefinitionProvider,&nbsp;new&nbsp;ExtensionSymbolDefinitionProvider());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CopilotExtensionStatus,&nbsp;new&nbsp;CopilotExtensionStatus());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u6839\u636e\u6269\u5c55\u6a21\u5f0f\uff08\u6d4b\u8bd5\u6216\u751f\u4ea7\uff09\u8bbe\u7f6e\u4e0d\u540c\u7684\u670d\u52a1\u548c\u914d\u7f6e<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;if&nbsp;(extensionContext.extensionMode&nbsp;===&nbsp;vscode.ExtensionMode.Test)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.forceSet<\/span>(RuntimeMode,&nbsp;RuntimeMode.fromEnvironment(!<span class=\"hljs-number\">0<\/span>));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CopilotTokenManager,&nbsp;getTestingCopilotTokenManager());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.forceSet<\/span>(UrlOpener,&nbsp;new&nbsp;TestUrlOpener());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;<span class=\"hljs-built_in\">setupTelemetry<\/span>(ctx,&nbsp;extensionContext,&nbsp;\"copilot-test\",&nbsp;!<span class=\"hljs-number\">0<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;}&nbsp;else&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CopilotTokenManager,&nbsp;new&nbsp;VSCodeCopilotTokenManager());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.forceSet<\/span>(ExpConfigMaker,&nbsp;new&nbsp;ExpConfigFromTAS());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;<span class=\"hljs-built_in\">setupTelemetry<\/span>(ctx,&nbsp;extensionContext,&nbsp;extensionContext.extension.packageJSON.name,&nbsp;vscode.env.isTelemetryEnabled);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bbe\u7f6e\u5176\u4ed6\u670d\u52a1\u548c\u914d\u7f6e<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(LocationFactory,&nbsp;new&nbsp;ExtensionLocationFactory());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(TextDocumentManager,&nbsp;new&nbsp;ExtensionTextDocumentManager(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(WorkspaceFileSystem,&nbsp;new&nbsp;ExtensionWorkspaceFileSystem());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CommitFileResolver,&nbsp;new&nbsp;ExtensionCommitFileResolver());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(hy.FileSystem,&nbsp;extensionFileSystem);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(NetworkConfiguration,&nbsp;new&nbsp;VSCodeNetworkConfiguration());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8fd4\u56de\u521b\u5efa\u7684\u4e0a\u4e0b\u6587<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;return&nbsp;ctx;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">}<\/span>\n<\/code><\/pre>\n<p>\u6211\u4eec\u5148\u6765\u770b\u7b2c\u4e00\u884c\u4ee3\u7801\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">csharp<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-csharp code-block-extension-codeShowNum\" lang=\"csharp\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">let<\/span>&nbsp;ctx&nbsp;=&nbsp;createProductionContext(<span class=\"hljs-keyword\">new<\/span>&nbsp;VSCodeConfigProvider())<\/span>\n<\/code><\/pre>\n<p>\u5b83\u662f\u901a\u8fc7<code>createProductionContext<\/code> \u8fd9\u4e2a\u65b9\u6cd5\u521b\u5efa\u4e86\u4e00\u4e2aContext\uff0c\u53c2\u6570\u662f\u4e00\u4e2a<code>VSCodeConfigProvider<\/code> \u7684\u5b9e\u4f8b\u3002<\/p>\n<p>\u90a3\u4e48\u9996\u5148\u770b\u770b<code>VSCodeConfigProvider<\/code> \uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">var&nbsp;<span class=\"hljs-attr\">CopilotConfigPrefix<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"github.copilot\"<\/span><span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">var&nbsp;<span class=\"hljs-attr\">VSCodeConfigProvider<\/span>&nbsp;=&nbsp;class&nbsp;extends&nbsp;ConfigProvider&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;&nbsp;&nbsp;constructor()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">this.config<\/span>&nbsp;=&nbsp;vscode.workspace.getConfiguration(CopilotConfigPrefix),&nbsp;vscode.workspace.<span class=\"hljs-literal\">on<\/span>DidChangeConfiguration(changeEvent&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeEvent.affectsConfiguration(CopilotConfigPrefix)&nbsp;&amp;&amp;&nbsp;(<span class=\"hljs-attr\">this.config<\/span>&nbsp;=&nbsp;vscode.workspace.getConfiguration(CopilotConfigPrefix))<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;\/\/&nbsp;...<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">}<\/span>\n<\/code><\/pre>\n<p>\u4ec5\u770b\u4e00\u4e0b\u8fd9\u4e2aconstructor\u6211\u4eec\u5c31\u77e5\u9053\u662f\u62c9\u53d6\u4e86vscode\u7684\u914d\u7f6e\u9879\uff0cprefix\u4e3a<code>github.copilot<\/code> \uff0c\u5e76\u4e14\u76d1\u542c\u4e86config change\u91cd\u65b0\u8d4b\u503c\u7ed9this.config\u3002<\/p>\n<p>\u7136\u540e\u518d\u770b\u4e00\u4e0b<code>createProductionContext<\/code>\u7684\u5b9e\u73b0\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">function&nbsp;<span class=\"hljs-built_in\">createProductionContext<\/span>(configProvider)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u4e0a\u4e0b\u6587<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;let&nbsp;ctx&nbsp;=&nbsp;new&nbsp;<span class=\"hljs-built_in\">Context<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8bbe\u7f6e\u5404\u79cd\u670d\u52a1\u548c\u914d\u7f6e<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(ConfigProvider,&nbsp;configProvider);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(Clock,&nbsp;new&nbsp;Clock());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(BuildInfo,&nbsp;new&nbsp;BuildInfo());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;<span class=\"hljs-built_in\">setupRudimentaryLogging<\/span>(ctx);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;logger<span class=\"hljs-selector-class\">.debug<\/span>(ctx,&nbsp;\"Initializing&nbsp;main&nbsp;context\");<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CompletionsCache,&nbsp;new&nbsp;CompletionsCache());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CopilotTokenNotifier,&nbsp;new&nbsp;CopilotTokenNotifier());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(CertificateReaderCache,&nbsp;new&nbsp;CertificateReaderCache());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(RootCertificateReader,&nbsp;getRootCertificateReader(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(ProxySocketFactory,&nbsp;getProxySocketFactory(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(Fetcher,&nbsp;new&nbsp;HelixFetcher(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(LanguageDetection,&nbsp;getLanguageDetection(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(Features,&nbsp;new&nbsp;Features(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(PostInsertionNotifier,&nbsp;new&nbsp;PostInsertionNotifier());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(TelemetryUserConfig,&nbsp;new&nbsp;TelemetryUserConfig(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(TelemetryEndpointUrl,&nbsp;new&nbsp;TelemetryEndpointUrl());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(TelemetryReporters,&nbsp;new&nbsp;TelemetryReporters());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(HeaderContributors,&nbsp;new&nbsp;HeaderContributors());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(UserErrorNotifier,&nbsp;new&nbsp;UserErrorNotifier(ctx));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(ContextualFilterManager,&nbsp;new&nbsp;ContextualFilterManager());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(OpenAIFetcher,&nbsp;new&nbsp;LiveOpenAIFetcher());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(BlockModeConfig,&nbsp;new&nbsp;ConfigBlockModeConfig());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(UrlOpener,&nbsp;new&nbsp;RealUrlOpener());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(ExpConfigMaker,&nbsp;new&nbsp;ExpConfigNone());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(PromiseQueue,&nbsp;new&nbsp;PromiseQueue());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(uD.SnippetOrchestrator,&nbsp;new&nbsp;uD.SnippetOrchestrator());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;ctx<span class=\"hljs-selector-class\">.set<\/span>(ForceMultiLine,&nbsp;ForceMultiLine.default);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;<span class=\"hljs-comment\">\/\/&nbsp;\u8fd4\u56de\u521b\u5efa\u7684\u4e0a\u4e0b\u6587<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;return&nbsp;ctx;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">}<\/span>\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u8fd9\u4e2a\u65b9\u6cd5\u9996\u5148\u521b\u5efa\u4e86\u4e00\u4e2actx\uff0c\u7136\u540e\u8bbe\u7f6e\u4e86\u4e00\u7cfb\u5217\u7684\u7c7b\u4e0e\u5b9e\u4f8b\uff0c\u8fd9\u4e2aContext\u7c7b\u4f3c\u4e8e\u4f9d\u8d56\u6ce8\u5165\u5bb9\u5668\u7ba1\u7406\u7684\u4f5c\u7528\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">javascript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-javascript code-block-extension-codeShowNum\" lang=\"javascript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">var<\/span>&nbsp;<span class=\"hljs-title class_\">Context<\/span>&nbsp;=&nbsp;<span class=\"hljs-keyword\">class<\/span>&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;<span class=\"hljs-title function_\">constructor<\/span>(<span class=\"hljs-params\">baseContext<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">baseContext<\/span>&nbsp;=&nbsp;baseContext;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">constructionStack<\/span>&nbsp;=&nbsp;[];<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">instances<\/span>&nbsp;=&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;<span class=\"hljs-title class_\">Map<\/span>();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">let<\/span>&nbsp;stack&nbsp;=&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;<span class=\"hljs-title class_\">Error<\/span>().<span class=\"hljs-property\">stack<\/span>?.<span class=\"hljs-title function_\">split<\/span>(<span class=\"hljs-string\">`<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">`);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;&nbsp;&nbsp;stack&nbsp;&amp;&amp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">constructionStack<\/span>.<span class=\"hljs-title function_\">push<\/span>(...stack.<span class=\"hljs-title function_\">slice<\/span>(<span class=\"hljs-number\">1<\/span>));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;<span class=\"hljs-keyword\">static<\/span>&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-title function_\">__name<\/span>(<span class=\"hljs-variable language_\">this<\/span>,&nbsp;<span class=\"hljs-string\">\"Context\"<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp;&nbsp;<span class=\"hljs-title function_\">get<\/span>(<span class=\"hljs-params\">ctor<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">let<\/span>&nbsp;value&nbsp;=&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-title function_\">tryGet<\/span>(ctor);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(value)&nbsp;<span class=\"hljs-keyword\">return<\/span>&nbsp;value;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;<span class=\"hljs-title class_\">Error<\/span>(<span class=\"hljs-string\">`No&nbsp;instance&nbsp;of&nbsp;<span class=\"hljs-subst\">${ctor.name}<\/span>&nbsp;has&nbsp;been&nbsp;registered.`<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;<span class=\"hljs-title function_\">tryGet<\/span>(<span class=\"hljs-params\">ctor<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">let<\/span>&nbsp;value&nbsp;=&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">instances<\/span>.<span class=\"hljs-title function_\">get<\/span>(ctor);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(value)&nbsp;<span class=\"hljs-keyword\">return<\/span>&nbsp;value;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">baseContext<\/span>)&nbsp;<span class=\"hljs-keyword\">return<\/span>&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">baseContext<\/span>.<span class=\"hljs-title function_\">tryGet<\/span>(ctor);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;<span class=\"hljs-title function_\">set<\/span>(<span class=\"hljs-params\">ctor,&nbsp;instance<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-title function_\">tryGet<\/span>(ctor))&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;<span class=\"hljs-title class_\">Error<\/span>(<span class=\"hljs-string\">`An&nbsp;instance&nbsp;of&nbsp;<span class=\"hljs-subst\">${ctor.name}<\/span>&nbsp;has&nbsp;already&nbsp;been&nbsp;registered.&nbsp;Use&nbsp;forceSet()&nbsp;if&nbsp;you're&nbsp;sure&nbsp;it's&nbsp;a&nbsp;good&nbsp;idea.`<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-title function_\">assertIsInstance<\/span>(ctor,&nbsp;instance),&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">instances<\/span>.<span class=\"hljs-title function_\">set<\/span>(ctor,&nbsp;instance);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;<span class=\"hljs-title function_\">forceSet<\/span>(<span class=\"hljs-params\">ctor,&nbsp;instance<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-title function_\">assertIsInstance<\/span>(ctor,&nbsp;instance),&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">instances<\/span>.<span class=\"hljs-title function_\">set<\/span>(ctor,&nbsp;instance);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;<span class=\"hljs-title function_\">assertIsInstance<\/span>(<span class=\"hljs-params\">ctor,&nbsp;instance<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(!(instance&nbsp;<span class=\"hljs-keyword\">instanceof<\/span>&nbsp;ctor))&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">let<\/span>&nbsp;inst&nbsp;=&nbsp;<span class=\"hljs-title class_\">JSON<\/span>.<span class=\"hljs-title function_\">stringify<\/span>(instance);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;<span class=\"hljs-title class_\">Error<\/span>(<span class=\"hljs-string\">`The&nbsp;instance&nbsp;you're&nbsp;trying&nbsp;to&nbsp;register&nbsp;for&nbsp;<span class=\"hljs-subst\">${ctor.name}<\/span>&nbsp;is&nbsp;not&nbsp;an&nbsp;instance&nbsp;of&nbsp;it&nbsp;(<span class=\"hljs-subst\">${inst}<\/span>).`<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;<span class=\"hljs-title function_\">toString<\/span>(<span class=\"hljs-params\"><\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">let<\/span>&nbsp;lines&nbsp;=&nbsp;<span class=\"hljs-string\">`&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;created&nbsp;at:<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">`;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">for<\/span>&nbsp;(<span class=\"hljs-keyword\">let<\/span>&nbsp;stackEntry&nbsp;<span class=\"hljs-keyword\">of<\/span>&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">constructionStack<\/span>&nbsp;||&nbsp;[])&nbsp;lines&nbsp;+=&nbsp;<span class=\"hljs-string\">`&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-subst\">${stackEntry}<\/span><\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">`;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">return<\/span>&nbsp;lines&nbsp;+=&nbsp;<span class=\"hljs-variable language_\">this<\/span>.<span class=\"hljs-property\">baseContext<\/span>?.<span class=\"hljs-title function_\">toString<\/span>()&nbsp;??&nbsp;<span class=\"hljs-string\">\"\"<\/span>,&nbsp;lines;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">};<\/span>\n<\/code><\/pre>\n<p>\u5728main Context\u7684\u521d\u59cb\u5316\u8fc7\u7a0b\u4e2d\uff0c\u9996\u5148\u521d\u59cb\u5316\u4e86\u4e09\u4e2a\u7c7b\uff1a<\/p>\n<ul>\n<li><code>ConfigProvider<\/code> \uff0c\u4e5f\u5c31\u662f\u521a\u521a\u4f20\u8fdb\u6765\u7684\u90a3\u4e2aVSCodeConfigProvider\u3002<\/li>\n<li><code>Clock<\/code> \uff0c\u76ee\u524d\u770b\u8d77\u6765\u5c31\u662f\u5b9e\u73b0\u4e86\u4e00\u4e2aDate.now()\u3002<\/li>\n<li><code>BuildInfo<\/code> \uff0c\u5c01\u88c5\u4e86\u5173\u4e8epackage.json\u7684\u76f8\u5173\u4fe1\u606f\u3002<\/li>\n<\/ul>\n<p>\u7136\u540e\u8c03\u7528\u4e86<code>setupRudimentaryLogging<\/code> \u65b9\u6cd5\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">vbscript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-vbscript code-block-extension-codeShowNum\" lang=\"vbscript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">function<\/span>&nbsp;setupRudimentaryLogging(ctx)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;ctx.<span class=\"hljs-keyword\">set<\/span>(RuntimeMode,&nbsp;RuntimeMode.fromEnvironment(!<span class=\"hljs-number\">1<\/span>)),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;ctx.<span class=\"hljs-keyword\">set<\/span>(LogVerbose,&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;LogVerbose(isVerboseLoggingEnabled(ctx))),&nbsp;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;ctx.<span class=\"hljs-keyword\">set<\/span>(LogTarget,&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;Console<span class=\"hljs-built_in\">Log<\/span>(console));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">}<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u9762\u53c8\u521d\u59cb\u5316\u4e86\u4e09\u4e2a\u7c7b\uff1a<\/p>\n<ul>\n<li>\n<p><code>RuntimeMode<\/code> \uff0c\u5b9e\u9645\u4e0a\u8bb0\u5f55\u4e86\u51e0\u4e2a\u5173\u952e\u7684flag\uff1a<\/p>\n<ul>\n<li><code>debug<\/code> \uff0c\u7531<code>-debug<\/code>\u53c2\u6570\u6216<code>GITHUB_COPILOT_DEBUG<\/code>\u7684\u73af\u5883\u53d8\u91cf\u51b3\u5b9a\u3002<\/li>\n<li><code>verboseLogging<\/code> \uff0c\u7531<code>COPILOT_AGENT_VERBOSE<\/code>\u51b3\u5b9a\u3002<\/li>\n<li><code>telemetryLogging<\/code> \uff0c\u7531<code>COPILOT_LOG_TELEMETRY<\/code> \u51b3\u5b9a\u3002<\/li>\n<li><code>testMode<\/code> \uff0c\u5728\u8fd9\u91cc\u662f<code>false<\/code>\u3002<\/li>\n<li><code>recordInput<\/code> \uff0c\u7531<code>-record<\/code>\u53c2\u6570\u6216<code>GITHUB_COPILOT_RECORD<\/code> \u51b3\u5b9a\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>LogVerbose<\/code> \uff0c\u8bb0\u5f55\u662f\u5426\u662f<code>verboseLogging<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p><code>LogTarget<\/code> \uff0c\u6ce8\u518c\u4e3a<code>ConsoleLog<\/code> \u3002<\/p>\n<\/li>\n<\/ul>\n<p>\u63a5\u7740\u6253\u4e86\u4e00\u884cdebug\u65e5\u5fd7\uff1a\u201dInitializing main context\u201d\uff0c\u8fd9\u5e94\u8be5\u662fcopilot\u7684\u7b2c\u4e00\u884c\u65e5\u5fd7\u3002<\/p>\n<p>\u63a5\u7740\u521d\u59cb\u5316\u4e86\u4e00\u5806\u670d\u52a1\uff1a<\/p>\n<ul>\n<li><code>CompletionsCache<\/code> \uff0c\u8fd9\u4e2acache\u9ed8\u8ba4\u662fLRU\uff08100\uff09<\/li>\n<li><code>CopilotTokenNotifier<\/code> \uff0c\u8fd9\u662f\u4e00\u4e2a\u4e8b\u4ef6\u901a\u77e5\u5668\uff0c\u91cc\u9762\u5c01\u88c5\u4e86\u4e00\u4e2aemit\u65b9\u6cd5\u3002<\/li>\n<li><code>CertificateReaderCache<\/code> \uff0c\u8fd9\u662f\u4e00\u4e2akey\u4e3aplatform\uff0cvalue\u4e3aReader\u7684Map\u3002<\/li>\n<li><code>RootCertificateReader<\/code> \uff0c\u771f\u6b63\u7684\u8bc1\u4e66Reader\uff0c\u7528\u6765\u83b7\u53d6rootCA\u3002<\/li>\n<li><code>ProxySocketFactory<\/code> \uff0c\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2aKerberosProxySocketFactory\uff0c\u4f7f\u7528Kerberos\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u3002<\/li>\n<li><code>Fetcher<\/code>\uff0c\u662f\u4e00\u4e2aHelixFetcher\u7684\u5b9e\u4f8b\uff0c\u7528\u6765\u53d1\u9001HTTP\u8bf7\u6c42\u3002<\/li>\n<li><code>LanguageDetection<\/code> \uff0c\u5b9e\u9645\u4e0a\u662f\u7531<code>FilenameAndExensionLanguageDetection<\/code>\u548c<code>NotebookLanguageDetection<\/code>\u7ec4\u6210\uff0c\u7edf\u4e00\u8d70<code>CachingLanguageDetection<\/code>\u6765\u7f13\u5b58\uff0c\u63a8\u65ad\u5177\u4f53\u4e3a\u54ea\u4e2alanguage\u7684\u7b56\u7565\u8fd8\u6709\u70b9\u590d\u6742\u3002<\/li>\n<li><code>Features<\/code>\uff0c\u5305\u542b\u4e00\u4e9b\u5b9e\u9a8c\u7279\u6027\u3002<\/li>\n<li><code>PostInsertionNotifier<\/code> \uff0c\u7eaf\u7cb9\u5c31\u662f\u4e00\u4e2aeventEmitter\u3002<\/li>\n<li><code>TelemetryUserConfig<\/code> \uff0c\u5173\u4e8etelemetry\u7684\u4e00\u4e9b\u914d\u7f6e\uff0c\u57fa\u672c\u4e0a\u662f\u901a\u8fc7<code>CopilotTokenNotifier<\/code>\u8fd9\u4e2a\u4e8b\u4ef6\u76d1\u542c\u5f97\u5230\u7684\u3002<\/li>\n<li><code>TelemetryEndpointUrl<\/code> \uff0c\u7ef4\u62a4telemetry\u7684url\u5730\u5740\uff0c\u9ed8\u8ba4\u662f<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fcopilot-telemetry.githubusercontent.com%2Ftelemetry%25E3%2580%2582\" target=\"_blank\" title=\"https:\/\/copilot-telemetry.githubusercontent.com\/telemetry%E3%80%82\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">copilot-telemetry.githubusercontent.com\/telemetry\u3002<\/a><\/li>\n<li><code>TelemetryReporters<\/code> \uff0c\u7ef4\u62a4\u4e86telemetry\u7684reporter\u3002<\/li>\n<li><code>HeaderContributors<\/code> \uff0c\u7ef4\u62a4\u4e00\u4e2a<code>Contributors<\/code> \u7684\u5217\u8868\u3002<\/li>\n<li><code>UserErrorNotifier<\/code> \uff0c\u7528\u6765\u5904\u7406\u8bc1\u4e66\u76f8\u5173\u7684\u5f02\u5e38\uff1f<\/li>\n<li><code>ContextualFilterManager<\/code> \uff0c\u7ba1\u7406ContextualFilter\u3002<\/li>\n<li><code>OpenAIFetcher<\/code> \uff0c\u88ab\u5b9e\u4f8b\u5316\u4e3a<code>LiveOpenAIFetcher<\/code> \uff0c\u9002\u914d\u4e86OpenAI\u7684\u8fd4\u56de\u683c\u5f0f\u3002<\/li>\n<li><code>BlockModeConfig<\/code> \uff0c\u5b9e\u4f8b\u5316\u4e3a<code>ConfigBlockModeConfig<\/code>\uff0c\u8ddfindent\u914d\u7f6e\u6709\u5173\u3002<\/li>\n<li><code>UrlOpener<\/code> \uff0c\u88ab\u5b9e\u4f8b\u5316\u4e3a<code>RealUrlOpener<\/code> \uff0c\u5b9e\u73b0\u4e86\u4e00\u4e2aopen\u65b9\u6cd5\u3002<\/li>\n<li><code>ExpConfigMaker<\/code> \uff0c\u5b9e\u9a8c\u7279\u6027\u6807\u8bb0\uff0c\u8fd9\u91cc\u88ab\u5b9e\u4f8b\u5316\u4e3a\u4e00\u4e2a<code>ExpConfigNone<\/code> \uff0c\u9ed8\u8ba4\u4e0d\u62c9\u5b9e\u9a8c\u7279\u6027\u3002<\/li>\n<li><code>PromiseQueue<\/code> \uff0c\u4e00\u4e2apromise\u961f\u5217\u3002<\/li>\n<li><code>SnippetOrchestrator<\/code> \uff0csnippet\u7f16\u6392\u3002<\/li>\n<li><code>ForceMultiLine<\/code> \uff0c\u770b\u8d77\u6765\u662f\u5f3a\u5236multiline\u3002<\/li>\n<\/ul>\n<p>\u81f3\u6b64\u6574\u4e2a<code>createProductionContext<\/code> \u7684\u6d41\u7a0b\u5c31\u7ed3\u675f\u4e86\u3002\u63a5\u4e0b\u6765\u770b\u4e00\u4e0b<code>createExtensionContext<\/code> \u7684\u6d41\u7a0b\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">vbscript<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-vbscript code-block-extension-codeShowNum\" lang=\"vbscript\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">logTarget&nbsp;=&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;Multi<span class=\"hljs-built_in\">Log<\/span>([<span class=\"hljs-keyword\">new<\/span>&nbsp;Console<span class=\"hljs-built_in\">Log<\/span>(console),&nbsp;<span class=\"hljs-keyword\">new<\/span>&nbsp;OutputChannel<span class=\"hljs-built_in\">Log<\/span>(outputChannel)]);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">ctx.forceSet(LogTarget,&nbsp;logTarget);<\/span>\n<\/code><\/pre>\n<p>\u9996\u5148\u91cd\u7f6e\u4e86\u4e00\u4e0blogTarget\uff0c\u540c\u65f6\u5411console\u548coutputchannel\u8f93\u51fa\u3002<\/p>\n<p>\u7136\u540e\u5c06<code>EditorAndPluginInfo<\/code> \u8bbe\u7f6e\u4e3a<code>VSCodeEditorInfo<\/code> \uff0c\u5c01\u88c5\u4e86\u4e00\u4e9b\u57fa\u672c\u7684\u4fe1\u606f\u3002<\/p>\n<p>\u63a5\u7740\u521d\u59cb\u5316\u4e86<code>initProxyEnvironment<\/code> proxy\u7684\u903b\u8f91\uff0c\u76d1\u542cproxy\u7684\u53d8\u5316\u786e\u4fddproxy\u80fd\u591f\u6b63\u5e38\u3002<\/p>\n<p>\u63a5\u7740\u521d\u59cb\u5316\u4e86\u4ee5\u4e0b\u670d\u52a1\uff1a<\/p>\n<ul>\n<li><code>NotificationSender<\/code> \uff0c\u4e00\u4e2a\u901a\u77e5\u7684\u670d\u52a1\uff0c\u8c03\u7528<code>showWarningMessage<\/code>\u3002<\/li>\n<li><code>EditorSession<\/code> \uff0c\u7ba1\u7406session\u5468\u671f<\/li>\n<li><code>Extension<\/code> , Extension\u76f8\u5173\uff0ccontext\u5b58\u5728\u8fd9\u91cc\u3002<\/li>\n<li><code>EditorExperimentFilters<\/code> \uff0c\u8bbe\u7f6e\u4e3a<code>VSCodeEditorExperimentFilters<\/code> \uff0c\u770b\u8d77\u6765\u662f\u52a0\u4e86<code>X-VSCode-Build\uff0cX-VSCode-Language<\/code>\u4e24\u4e2a\u5c5e\u6027\u3002<\/li>\n<\/ul>\n<p>\u7136\u540e\u8c03\u7528\u4e86<code>setupExperimentationService<\/code> \uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scss<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scss code-block-extension-codeShowNum\" lang=\"scss\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">function&nbsp;<span class=\"hljs-built_in\">setupExperimentationService<\/span>(ctx)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;let&nbsp;features&nbsp;=&nbsp;ctx<span class=\"hljs-selector-class\">.get<\/span>(Features);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;features<span class=\"hljs-selector-class\">.registerStaticFilters<\/span>(createAllFilters(ctx)),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;features<span class=\"hljs-selector-class\">.registerDynamicFilter<\/span>(\"X-Copilot-OverrideEngine\",&nbsp;()&nbsp;=&gt;&nbsp;<span class=\"hljs-built_in\">getConfig<\/span>(ctx,&nbsp;ConfigKey.DebugOverrideEngine));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">}<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u9762\u5c31\u662f\u8bbe\u7f6e\u4e86\u4e00\u4e9b\u57fa\u7840\u7684\u5934\u4fe1\u606f\uff1a<\/p>\n<ul>\n<li><code>X-VSCode-AppVersion<\/code><\/li>\n<li><code>X-MSEdge-ClientId<\/code><\/li>\n<li><code>X-VSCode-ExtensionName<\/code><\/li>\n<li><code>X-VSCode-ExtensionVersion<\/code><\/li>\n<li><code>X-VSCode-TargetPopulation<\/code><\/li>\n<\/ul>\n<p>\u63a5\u7740\u5b9a\u4e49\u4e86\u4e24\u4e2a\u670d\u52a1\uff1a<\/p>\n<ul>\n<li><code>SymbolDefinitionProvider<\/code> \uff0c\u5b9a\u4e49\u4e86SymbolDefinition\u3002<\/li>\n<li><code>CopilotExtensionStatus<\/code> \uff0c\u5b9a\u4e49\u4e86\u5f53\u524d\u63d2\u4ef6\u7684\u72b6\u6001\u548c\u62a5\u9519\u4fe1\u606f\u3002<\/li>\n<\/ul>\n<p>\u63a5\u7740\u533a\u5206\u4e86\u73af\u5883\uff0c\u6b63\u5f0f\u73af\u5883\u4e2d\u7684\u5b9a\u4e49<\/p>\n<ul>\n<li><code>CopilotTokenManager<\/code>\uff0c\u8fd9\u4e2a\u662f\u6307copilot\u7684\u767b\u5f55token\u7ba1\u7406\u3002<\/li>\n<li>\u5c06<code>ExpConfigMaker<\/code> \u91cd\u65b0\u6307\u5411\u4e3a<code>ExpConfigFromTAS<\/code> \uff0c\u4e5f\u5c31\u662f\u9ed8\u8ba4\u4eceTAS\u5e73\u53f0\u4e0a\u62c9\u53d6\u5b9e\u9a8c\u7279\u6027\u6570\u636e\u3002<\/li>\n<\/ul>\n<p>\u63a5\u7740\u521d\u59cb\u5316<code>setupTelemetry<\/code> \u7684\u903b\u8f91\u3002<\/p>\n<p>\u7136\u540e\u8fd8\u6709\u4e00\u7cfb\u5217\u5176\u4ed6\u670d\u52a1\u7684\u8bbe\u7f6e\uff1a<\/p>\n<ul>\n<li><code>LocationFactory<\/code>\uff0c\u521d\u59cb\u5316\u4e00\u4e2alocation\u7684\u5de5\u5177\u7c7b\u3002<\/li>\n<li><code>TextDocumentManager<\/code> \uff0c\u8d1f\u8d23TextDocument\u76f8\u5173\u7684\u5904\u7406\u3002<\/li>\n<li><code>WorkspaceFileSystem<\/code> \uff0cworkspace\u5173\u4e8e\u6587\u4ef6\u76f8\u5173\u7684\u5904\u7406\u3002<\/li>\n<li><code>CommitFileResolver<\/code> \uff0c\u63d0\u4ea4\u6587\u4ef6\u76f8\u5173\u7684\u5904\u7406\u3002<\/li>\n<li><code>FileSystem<\/code> \uff0c\u6587\u4ef6\u76f8\u5173\u7684\u5904\u7406\u3002<\/li>\n<li><code>NetworkConfiguration<\/code> \uff0c\u4e3b\u8981\u662f\u8bbf\u95eegithub\u7684URL\u5730\u5740\u3002<\/li>\n<\/ul>\n<h2 data-id=\"heading-2\">\u5165\u53e3\u4e3b\u903b\u8f91\u68b3\u7406<\/h2>\n<p>\u5165\u53e3\u4e3b\u903b\u8f91\u7ec6\u679d\u672b\u8282\u6bd4\u8f83\u591a\uff0c\u8fd9\u91cc\u753b\u56fe\u505a\u4e2a\u603b\u7ed3\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/9cd81bcf0fff7ce6426d537abb6924d9.png\" alt=\"image\" \/><\/figure>\n<\/p>\n<p>image<\/p>\n<p>\u5728\u5165\u53e3\u521d\u59cb\u5316\u4e2d\uff0c\u6700\u91cd\u8981\u7684\u662f\u6807\u7ea2\u7684\u4e24\u6b65\uff1a<\/p>\n<ul>\n<li><code>registerGhostTextSupport<\/code> \uff0c\u8fd9\u4e2a\u6ce8\u518c\u4e86\u6574\u4e2aInlineCompletion\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u7684\u4ee3\u7801\u63d0\u793a\u90fd\u662f\u8d70\u8fd9\u4e2a\u903b\u8f91\u3002<\/li>\n<li><code>snippetOrchestrator.startThreading<\/code> \uff0c\u8fd9\u4e2a\u5f00\u542f\u4e86\u4e00\u4e2aworker\u7ebf\u7a0b\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8be6\u7ec6\u5206\u6790\u4e00\u4e0b\u3002<\/li>\n<\/ul>\n<h2 data-id=\"heading-3\">\u5173\u4e8eworker\u7ebf\u7a0b<\/h2>\n<p>copilot\u5c06\u6bd4\u8f83\u8017\u65f6\u7684\u64cd\u4f5c\u90fd\u653e\u5230\u4e86worker\u7ebf\u7a0b\u53bb\uff0c\u6bd4\u5982\u4e0b\u9762\u7684init\u65b9\u6cd5\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">var&nbsp;<span class=\"hljs-attr\">promptlib<\/span>&nbsp;=&nbsp;Ns(Dc())<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">var&nbsp;<span class=\"hljs-attr\">worker<\/span>&nbsp;=&nbsp;null<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">var&nbsp;<span class=\"hljs-attr\">handlers<\/span>&nbsp;=&nbsp;new&nbsp;Map()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">var&nbsp;<span class=\"hljs-attr\">nextHandlerId<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">0<\/span><span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">function&nbsp;init(ctx,&nbsp;use_worker_threads,&nbsp;logger)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;if&nbsp;(!use_worker_threads)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;<span class=\"hljs-attr\">localPromptlib<\/span>&nbsp;=&nbsp;(uL(),&nbsp;nT(Pre))<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;fn&nbsp;of&nbsp;allFuns)&nbsp;updatePromptLibProxyFunction(fn,&nbsp;localPromptlib<span class=\"hljs-section\">[fn]<\/span>)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp;&nbsp;&nbsp;&nbsp;return<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">&nbsp;&nbsp;for&nbsp;(let&nbsp;fn&nbsp;of&nbsp;workerFuns)&nbsp;updatePromptLibProxyFunction(fn,&nbsp;proxy(ctx,&nbsp;logger,&nbsp;fn))<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;<span class=\"hljs-attr\">promptLibProxy.getPrompt<\/span>&nbsp;=&nbsp;getPromptProxy(ctx,&nbsp;logger)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;<span class=\"hljs-attr\">worker<\/span>&nbsp;=&nbsp;X0.createWorker()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;handlers.clear()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;<span class=\"hljs-attr\">nextHandlerId<\/span>&nbsp;=&nbsp;<span class=\"hljs-number\">0<\/span><span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;worker.on(\"message\",&nbsp;({&nbsp;id,&nbsp;err,&nbsp;code,&nbsp;res&nbsp;})&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;<span class=\"hljs-attr\">handler<\/span>&nbsp;=&nbsp;handlers.get(id)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(ctx,&nbsp;`Response&nbsp;${id}&nbsp;-&nbsp;${res},&nbsp;${err}`)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(handler)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handlers.delete(id)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(err)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err.code<\/span>&nbsp;=&nbsp;code<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler.reject(err)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler.resolve(res)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;function&nbsp;handleError(maybeError)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;err<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(maybeError&nbsp;instanceof&nbsp;Error)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err<\/span>&nbsp;=&nbsp;maybeError<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(<span class=\"hljs-attr\">err.code<\/span>&nbsp;===&nbsp;<span class=\"hljs-string\">\"MODULE_NOT_FOUND\"<\/span>&nbsp;&amp;&amp;&nbsp;err.message?.endsWith(<span class=\"hljs-string\">\"worker.js'\"<\/span>))&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err<\/span>&nbsp;=&nbsp;new&nbsp;Error(<span class=\"hljs-string\">\"Failed&nbsp;to&nbsp;load&nbsp;worker.js\"<\/span>)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err.code<\/span>&nbsp;=&nbsp;<span class=\"hljs-string\">\"CopilotPromptLoadFailure\"<\/span><span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;<span class=\"hljs-attr\">ourStack<\/span>&nbsp;=&nbsp;new&nbsp;Error().stack<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(err.stack&nbsp;&amp;&amp;&nbsp;ourStack?.match(\/^Errorn\/))&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err.stack&nbsp;+=&nbsp;ourStack.replace(\/^Error\/,&nbsp;\"\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(maybeError?.<span class=\"hljs-attr\">name<\/span>&nbsp;===&nbsp;<span class=\"hljs-string\">\"ExitStatus\"<\/span>&nbsp;&amp;&amp;&nbsp;typeof&nbsp;maybeError.status&nbsp;==&nbsp;<span class=\"hljs-string\">\"number\"<\/span>)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err<\/span>&nbsp;=&nbsp;new&nbsp;Error(`worker.js&nbsp;exited&nbsp;with&nbsp;status&nbsp;<span class=\"hljs-variable\">${maybeError.status}<\/span>`)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err.code<\/span>&nbsp;=&nbsp;`CopilotPromptWorkerExit<span class=\"hljs-variable\">${maybeError.status}<\/span>`<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">err<\/span>&nbsp;=&nbsp;new&nbsp;Error(`Non-error&nbsp;thrown:&nbsp;<span class=\"hljs-variable\">${maybeError}<\/span>`)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\">&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;handler&nbsp;of&nbsp;handlers.values())&nbsp;handler.reject(err)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\">&nbsp;&nbsp;&nbsp;&nbsp;handlers.clear()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\">&nbsp;&nbsp;__name(handleError,&nbsp;\"handleError\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\">&nbsp;&nbsp;worker.on(\"error\",&nbsp;handleError)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"59\">}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"60\">__name(init,&nbsp;\"init\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"61\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"62\">function&nbsp;terminate()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"63\">&nbsp;&nbsp;if&nbsp;(worker)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"64\">&nbsp;&nbsp;&nbsp;&nbsp;worker.removeAllListeners()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"65\">&nbsp;&nbsp;&nbsp;&nbsp;worker.terminate()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"66\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-attr\">worker<\/span>&nbsp;=&nbsp;null<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"67\">&nbsp;&nbsp;&nbsp;&nbsp;handlers.clear()<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"68\">&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"69\">}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"70\">__name(terminate,&nbsp;\"terminate\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"71\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"72\">var&nbsp;<span class=\"hljs-attr\">workerFuns<\/span>&nbsp;=&nbsp;[<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"73\">&nbsp;&nbsp;<span class=\"hljs-string\">\"getFunctionPositions\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"74\">&nbsp;&nbsp;<span class=\"hljs-string\">\"isEmptyBlockStart\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"75\">&nbsp;&nbsp;<span class=\"hljs-string\">\"isBlockBodyFinished\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"76\">&nbsp;&nbsp;<span class=\"hljs-string\">\"getNodeStart\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"77\">&nbsp;&nbsp;<span class=\"hljs-string\">\"getCallSites\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"78\">&nbsp;&nbsp;<span class=\"hljs-string\">\"parsesWithoutError\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"79\">]<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"80\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"81\">var&nbsp;<span class=\"hljs-attr\">directFuns<\/span>&nbsp;=&nbsp;[<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"82\">&nbsp;&nbsp;<span class=\"hljs-string\">\"isSupportedLanguageId\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"83\">&nbsp;&nbsp;<span class=\"hljs-string\">\"getBlockCloseToken\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"84\">&nbsp;&nbsp;<span class=\"hljs-string\">\"getPrompt\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"85\">]<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"86\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"87\">var&nbsp;<span class=\"hljs-attr\">allFuns<\/span>&nbsp;=&nbsp;[...workerFuns,&nbsp;...directFuns]<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"88\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"89\">function&nbsp;proxy(ctx,&nbsp;logger,&nbsp;fn)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"90\">&nbsp;&nbsp;return&nbsp;function&nbsp;(...args)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"91\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;<span class=\"hljs-attr\">id<\/span>&nbsp;=&nbsp;nextHandlerId++<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"92\">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"93\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handlers.set(id,&nbsp;{&nbsp;resolve:&nbsp;resolve,&nbsp;reject:&nbsp;reject&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"94\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(ctx,&nbsp;`Proxy&nbsp;${fn}`)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"95\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worker?.postMessage({&nbsp;id:&nbsp;id,&nbsp;fn:&nbsp;fn,&nbsp;args:&nbsp;args&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"96\">&nbsp;&nbsp;&nbsp;&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"97\">&nbsp;&nbsp;}<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"98\">}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"99\">__name(proxy,&nbsp;\"proxy\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"100\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"101\">function&nbsp;getPromptProxy(ctx,&nbsp;logger)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"102\">&nbsp;&nbsp;return&nbsp;function&nbsp;(_fileSystem,&nbsp;...args)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"103\">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;<span class=\"hljs-attr\">id<\/span>&nbsp;=&nbsp;nextHandlerId++<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"104\">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"105\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handlers.set(id,&nbsp;{&nbsp;resolve:&nbsp;resolve,&nbsp;reject:&nbsp;reject&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"106\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(ctx,&nbsp;`Proxy&nbsp;getPrompt&nbsp;-&nbsp;${id}`)<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"107\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worker?.postMessage({&nbsp;id:&nbsp;id,&nbsp;fn:&nbsp;\"getPrompt\",&nbsp;args:&nbsp;args&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"108\">&nbsp;&nbsp;&nbsp;&nbsp;})<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"109\">&nbsp;&nbsp;}<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"110\">}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"111\">__name(getPromptProxy,&nbsp;\"getPromptProxy\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"112\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"113\">function&nbsp;updatePromptLibProxyFunction(fn,&nbsp;impl)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"114\">&nbsp;&nbsp;promptLibProxy<span class=\"hljs-section\">[fn]<\/span>&nbsp;=&nbsp;impl<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"115\">}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"116\">__name(updatePromptLibProxyFunction,&nbsp;\"updatePromptLibProxyFunction\")<span class=\"hljs-comment\">;<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"117\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"118\">var&nbsp;<span class=\"hljs-attr\">promptLibProxy<\/span>&nbsp;=&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"119\">&nbsp;&nbsp;isEmptyBlockStart:&nbsp;X0.isEmptyBlockStart,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"120\">&nbsp;&nbsp;isBlockBodyFinished:&nbsp;X0.isBlockBodyFinished,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"121\">&nbsp;&nbsp;isSupportedLanguageId:&nbsp;X0.isSupportedLanguageId,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"122\">&nbsp;&nbsp;getBlockCloseToken:&nbsp;X0.getBlockCloseToken,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"123\">&nbsp;&nbsp;getFunctionPositions:&nbsp;X0.getFunctionPositions,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"124\">&nbsp;&nbsp;getNodeStart:&nbsp;X0.getNodeStart,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"125\">&nbsp;&nbsp;getPrompt:&nbsp;X0.getPrompt,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"126\">&nbsp;&nbsp;getCallSites:&nbsp;X0.getCallSites,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"127\">&nbsp;&nbsp;parsesWithoutError:&nbsp;X0.parsesWithoutError<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"128\">}<span class=\"hljs-comment\">;<\/span><\/span>\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\uff0c\u653e\u5728worker\u7ebf\u7a0b\u7684\u65b9\u6cd5\u4e3b\u8981\u662f5\u4e2a\uff1a<\/p>\n<ul>\n<li><code>getFunctionPositions<\/code><\/li>\n<li><code>isEmptyBlockStart<\/code><\/li>\n<li><code>isBlockBodyFinished<\/code><\/li>\n<li><code>getNodeStart<\/code><\/li>\n<li><code>getCallSites<\/code><\/li>\n<li><code>parsesWithoutError<\/code><\/li>\n<\/ul>\n<p>\u5176\u4e2d\uff0c\u8fd8\u6709\u4e00\u4e2a\u65b9\u6cd5\u4e5f\u88ab\u5355\u72ec\u4ee3\u7406\u5230worker\u7ebf\u7a0b\uff1a<\/p>\n<ul>\n<li><code>getPrompt<\/code><\/li>\n<\/ul>\n<p>\u9664\u4e86\u8fd9\u4e2aworker\u7ebf\u7a0b\u4ee5\u5916\uff0c\u8fd8\u5f00\u4e86\u53e6\u5916\u4e00\u4e2aworker\u7ebf\u7a0bworkerProxy\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">kotlin<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-kotlin code-block-extension-codeShowNum\" lang=\"kotlin\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">workerFns&nbsp;=&nbsp;[<span class=\"hljs-string\">\"getNeighborSnippets\"<\/span>,&nbsp;<span class=\"hljs-string\">\"extractLocalImportContext\"<\/span>,&nbsp;<span class=\"hljs-string\">\"sleep\"<\/span>],&nbsp;WorkerProxy&nbsp;=&nbsp;<span class=\"hljs-keyword\">class<\/span>&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">constructor<\/span>()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.nextHandlerId&nbsp;=&nbsp;<span class=\"hljs-number\">0<\/span>;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.handlers&nbsp;=&nbsp;new&nbsp;Map();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.fns&nbsp;=&nbsp;new&nbsp;Map();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.extractLocalImportContext&nbsp;=&nbsp;extractLocalImportContext;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.getNeighborSnippets&nbsp;=&nbsp;getNeighborSnippets;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.sleep&nbsp;=&nbsp;sleep;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!Kf.isMainThread&nbsp;&amp;&amp;&nbsp;Kf.workerData?.port&nbsp;&amp;&amp;&nbsp;(wT(),&nbsp;process.cwd&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;Kf.workerData.cwd,&nbsp;<span class=\"hljs-keyword\">this<\/span>.configureWorkerResponse(Kf.workerData.port));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__name(<span class=\"hljs-keyword\">this<\/span>,&nbsp;<span class=\"hljs-string\">\"WorkerProxy\"<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initWorker()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port1:&nbsp;port1,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port2:&nbsp;port2<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;=&nbsp;new&nbsp;Kf.MessageChannel();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.port&nbsp;=&nbsp;port1,&nbsp;<span class=\"hljs-keyword\">this<\/span>.worker&nbsp;=&nbsp;new&nbsp;Kf.Worker((<span class=\"hljs-number\">0<\/span>,&nbsp;yre.resolve)(__dirname,&nbsp;<span class=\"hljs-string\">\"..\"<\/span>,&nbsp;<span class=\"hljs-string\">\"dist\"<\/span>,&nbsp;<span class=\"hljs-string\">\"workerProxy.js\"<\/span>),&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workerData:&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port:&nbsp;port2,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cwd:&nbsp;process.cwd()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transferList:&nbsp;[port2]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}),&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.on(<span class=\"hljs-string\">\"message\"<\/span>,&nbsp;m&nbsp;=&gt;&nbsp;<span class=\"hljs-keyword\">this<\/span>.handleMessage(m)),&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.on(<span class=\"hljs-string\">\"error\"<\/span>,&nbsp;e&nbsp;=&gt;&nbsp;<span class=\"hljs-keyword\">this<\/span>.handleError(e));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startThreading()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(<span class=\"hljs-keyword\">this<\/span>.worker)&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;new&nbsp;Error(<span class=\"hljs-string\">\"Worker&nbsp;thread&nbsp;already&nbsp;initialized.\"<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.proxyFunctions(),&nbsp;<span class=\"hljs-keyword\">this<\/span>.initWorker();<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stopThreading()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.worker&nbsp;&amp;&amp;&nbsp;(<span class=\"hljs-keyword\">this<\/span>.worker.terminate(),&nbsp;<span class=\"hljs-keyword\">this<\/span>.worker.removeAllListeners(),&nbsp;<span class=\"hljs-keyword\">this<\/span>.worker&nbsp;=&nbsp;void&nbsp;<span class=\"hljs-number\">0<\/span>,&nbsp;<span class=\"hljs-keyword\">this<\/span>.unproxyFunctions(),&nbsp;<span class=\"hljs-keyword\">this<\/span>.handlers.clear());<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyFunctions()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">for<\/span>&nbsp;(let&nbsp;fn&nbsp;of&nbsp;workerFns)&nbsp;<span class=\"hljs-keyword\">this<\/span>.fns.<span class=\"hljs-keyword\">set<\/span>(fn,&nbsp;<span class=\"hljs-keyword\">this<\/span>[fn]),&nbsp;<span class=\"hljs-keyword\">this<\/span>.proxy(fn);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unproxyFunctions()&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">for<\/span>&nbsp;(let&nbsp;fn&nbsp;of&nbsp;workerFns)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;originalFn&nbsp;=&nbsp;<span class=\"hljs-keyword\">this<\/span>.fns.<span class=\"hljs-keyword\">get<\/span>(fn);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(originalFn)&nbsp;<span class=\"hljs-keyword\">this<\/span>[fn]&nbsp;=&nbsp;originalFn;<span class=\"hljs-keyword\">else<\/span>&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;new&nbsp;Error(`Unproxy&nbsp;function&nbsp;not&nbsp;found:&nbsp;${fn}`);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configureWorkerResponse(port)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.port&nbsp;=&nbsp;port,&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.on(<span class=\"hljs-string\">\"message\"<\/span>,&nbsp;async&nbsp;({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn:&nbsp;fn,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args:&nbsp;args<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;proxiedFunction&nbsp;=&nbsp;<span class=\"hljs-keyword\">this<\/span>[fn];<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"50\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(!proxiedFunction)&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;new&nbsp;Error(`Function&nbsp;not&nbsp;found:&nbsp;${fn}`);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"51\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">try<\/span>&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"52\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;res&nbsp;=&nbsp;await&nbsp;proxiedFunction.apply(<span class=\"hljs-keyword\">this<\/span>,&nbsp;args);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.postMessage({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"54\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"55\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res:&nbsp;res<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"56\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"57\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class=\"hljs-keyword\">catch<\/span>&nbsp;(err)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"58\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(!(err&nbsp;instanceof&nbsp;Error))&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;err;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"59\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeof&nbsp;err.code&nbsp;==&nbsp;<span class=\"hljs-string\">\"string\"<\/span>&nbsp;?&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.postMessage({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"60\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"61\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err:&nbsp;err,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"62\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code:&nbsp;err.code<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"63\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;:&nbsp;<span class=\"hljs-keyword\">this<\/span>.port.postMessage({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"64\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"65\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err:&nbsp;err<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"66\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"67\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"68\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"69\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"70\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleMessage({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"71\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"72\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err:&nbsp;err,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"73\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code:&nbsp;code,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"74\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res:&nbsp;res<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"75\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"76\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;handler&nbsp;=&nbsp;<span class=\"hljs-keyword\">this<\/span>.handlers.<span class=\"hljs-keyword\">get<\/span>(id);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"77\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;&amp;&amp;&nbsp;(<span class=\"hljs-keyword\">this<\/span>.handlers.delete(id),&nbsp;err&nbsp;?&nbsp;(err.code&nbsp;=&nbsp;code,&nbsp;handler.reject(err))&nbsp;:&nbsp;handler.resolve(res));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"78\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"79\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handleError(maybeError)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"80\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(maybeError);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"81\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;err;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"82\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">if<\/span>&nbsp;(maybeError&nbsp;instanceof&nbsp;Error)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"83\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;maybeError,&nbsp;err.code&nbsp;===&nbsp;<span class=\"hljs-string\">\"MODULE_NOT_FOUND\"<\/span>&nbsp;&amp;&amp;&nbsp;err.message?.endsWith(<span class=\"hljs-string\">\"workerProxy.js'\"<\/span>)&nbsp;&amp;&amp;&nbsp;(err&nbsp;=&nbsp;new&nbsp;Error(<span class=\"hljs-string\">\"Failed&nbsp;to&nbsp;load&nbsp;workerProxy.js\"<\/span>),&nbsp;err.code&nbsp;=&nbsp;<span class=\"hljs-string\">\"CopilotPromptLoadFailure\"<\/span>);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"84\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;ourStack&nbsp;=&nbsp;new&nbsp;Error().stack;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"85\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err.stack&nbsp;&amp;&amp;&nbsp;ourStack?.match(\/^Errorn\/)&nbsp;&amp;&amp;&nbsp;(err.stack&nbsp;+=&nbsp;ourStack.replace(\/^Error\/,&nbsp;<span class=\"hljs-string\">\"\"<\/span>));<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"86\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class=\"hljs-keyword\">else<\/span>&nbsp;maybeError?.name&nbsp;===&nbsp;<span class=\"hljs-string\">\"ExitStatus\"<\/span>&nbsp;&amp;&amp;&nbsp;typeof&nbsp;maybeError.status&nbsp;==&nbsp;<span class=\"hljs-string\">\"number\"<\/span>&nbsp;?&nbsp;(err&nbsp;=&nbsp;new&nbsp;Error(`workerProxy.js&nbsp;exited&nbsp;with&nbsp;status&nbsp;${maybeError.status}`),&nbsp;err.code&nbsp;=&nbsp;`CopilotPromptWorkerExit${maybeError.status}`)&nbsp;:&nbsp;err&nbsp;=&nbsp;new&nbsp;Error(`Non-error&nbsp;thrown:&nbsp;${maybeError}`);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"87\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">for<\/span>&nbsp;(let&nbsp;handler&nbsp;of&nbsp;<span class=\"hljs-keyword\">this<\/span>.handlers.values())&nbsp;handler.reject(err);<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"88\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">throw<\/span>&nbsp;err;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"89\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"90\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy(fn)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"91\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>[fn]&nbsp;=&nbsp;function&nbsp;(...args)&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"92\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;id&nbsp;=&nbsp;<span class=\"hljs-keyword\">this<\/span>.nextHandlerId++;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"93\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">return<\/span>&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"94\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"hljs-keyword\">this<\/span>.handlers.<span class=\"hljs-keyword\">set<\/span>(id,&nbsp;{<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"95\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve:&nbsp;resolve,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"96\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject:&nbsp;reject<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"97\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}),&nbsp;<span class=\"hljs-keyword\">this<\/span>.port?.postMessage({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"98\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;id,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"99\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn:&nbsp;fn,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"100\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args:&nbsp;args<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"101\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"102\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"103\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"104\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"105\">&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;workerProxy&nbsp;=&nbsp;new&nbsp;WorkerProxy();<\/span>\n<\/code><\/pre>\n<p>\u8fd9\u91cc\u7684\u901a\u4fe1\u4ee3\u7406\u548c\u7b2c\u4e00\u4e2aworker\u7ebf\u7a0b\u7684\u4ee3\u7406\u673a\u5236\u5927\u540c\u5c0f\u5f02\uff0c\u8fd9\u6b21\u4ee3\u7406\u7684\u662f\u4e0esnippets\u76f8\u5173\u7684\u51e0\u4e2a\u65b9\u6cd5\uff1a<\/p>\n<ul>\n<li><code>getNeighborSnippets<\/code><\/li>\n<li><code>extractLocalImportContext<\/code><\/li>\n<li><code>sleep<\/code><\/li>\n<\/ul>\n<p>\u5c06\u8fd9\u4e9b\u6602\u8d35\u7684\u64cd\u4f5c\u653e\u5728worker\u7ebf\u7a0b\u4e2d\uff0c\u4fdd\u969c\u4e86\u6574\u4f53\u4e3b\u7ebf\u7a0b\u7684\u6027\u80fd\u4e0d\u4f1a\u5361\u987f\u3002<\/p>\n<h2 data-id=\"heading-4\">\u5c0f\u7ed3\u4e00\u4e0b<\/h2>\n<p>\u672c\u6587\u4e3b\u8981\u5206\u6790\u4e86copilot\u5165\u53e3\u51fd\u6570\u7684\u6574\u4f53\u903b\u8f91\uff0c\u6700\u91cd\u8981\u7684\u662f\u4e24\u5927\u5757\u5185\u5bb9\uff1a<\/p>\n<ul>\n<li><strong>Context\u521d\u59cb\u5316<\/strong><\/li>\n<li><strong>\u6ce8\u518cghostText\u5e76\u5f00\u542fworker\u7ebf\u7a0b<\/strong><\/li>\n<\/ul>\n<p>\u5728Context\u90e8\u5206\uff0ccopilot\u6240\u6709\u7684\u5b9e\u4f8b\u90fd\u662f\u901a\u8fc7<strong>\u6302\u5728\u5bb9\u5668\u7684\u65b9\u5f0f\u5f62\u6210\u5355\u4f8b\u7684<\/strong>\uff0c\u4e00\u4e2a\u597d\u5904\u5c31\u662f\u5bf9\u4e8e\u4e00\u4e2a\u7c7b\u53ef\u4ee5\u6709\u591a\u4e2a\u5b9e\u73b0\uff0c\u53ea\u9700\u8981\u66ff\u6362\u6389\u4e0d\u540c\u7684Instance\u5373\u53ef\uff0c\u8fd9\u4e5f\u7b26\u5408<strong>\u5f00\u95ed\u8bbe\u8ba1\u539f\u5219<\/strong>\u3002<\/p>\n<p>\u5728\u4e00\u7cfb\u5217\u521d\u59cb\u5316\u5b8c\u6210\u4e4b\u540e\uff0ccopilot\u767b\u5f55\u901a\u8fc7\u540e\uff0c\u4f1a\u6ce8\u518c\u5230ghostText\uff0c\u5f00\u542f<strong>inlineCompletion<\/strong>\u7684\u6a21\u5f0f\uff0c\u8fd9\u4e5f\u5c31\u662f\u6211\u4eec\u5728copilot\u4e2d\u4f53\u9a8c\u5230\u7684\u4ee3\u7801\u8865\u5168\u7684\u6838\u5fc3\u529f\u80fd\u3002<\/p>\n<p>\u53e6\u5916copilot\u8fd8\u5f00\u542f\u4e86\u4e24\u4e2a<strong>worker\u7ebf\u7a0b<\/strong>\uff0c\u5206\u522b\u4ee3\u7406\u4e86snippet\u76f8\u5173\u548cPrompt\u76f8\u5173\u7684\u51e0\u4e2a\u51fd\u6570\uff0c\u8fd9\u4e9b\u51fd\u6570\u9ed8\u8ba4\u5728\u975e\u5f00\u53d1\u73af\u5883\u4e0b\u4f1a\u5728worker\u7ebf\u7a0b\u8dd1\uff0c\u4ece\u800c\u4fdd\u969c\u4e86<strong>\u4e3b\u8fdb\u7a0b\u66f4\u4f18\u7684\u6027\u80fd<\/strong>\u3002<\/p>\n<p>\u4e0a\u8ff0\u4ee3\u7801\u5df2\u7ecf\u63d0\u4ea4\u5728Github\u4e0a\uff0c\u6709\u9700\u8981\u7684\u5c0f\u4f19\u4f34\u53ef\u81ea\u53d6\uff1a<\/p>\n<p><a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fmengjian-github%2Fcopilot-analysis-new\" target=\"_blank\" title=\"https:\/\/github.com\/mengjian-github\/copilot-analysis-new\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">github.com\/mengjian-gi\u2026<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>copilot\u7684\u5165\u53e3\u51fd\u6570 \u6211\u4eec\u5c06activate\u65b9\u6cd5\u683c\u5f0f\u5316\u5982\u4e0b\uff1a \u5728\u5165\u53e3\u51fd\u6570\u4e2d\uff0c\u6d89\u53ca\u5230\u4e86\u51e0\u4e2a\u7ec4\u4ef6\uff1a TelemetryData\uff0c\u8d1f\u8d23\u521b\u5efa\u4e0a\u62a5\u6570\u636e\u3002 createExtensionContext \uff0c\u8d1f\u8d23<\/p>\n","protected":false},"author":1,"featured_media":8475,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","views":"7","footnotes":""},"categories":[3],"tags":[128,129,136,126,127],"collection":[],"class_list":["post-1430","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-128","tag-129","tag-136","tag-gpt","tag-ai"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/comments?post=1430"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1430\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/8475"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1430"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}