@@ -6,6 +6,7 @@ import { registerMcpServer } from "./registerMcpServer";
66import { SettingsManager } from "./SettingsManager" ;
77import type { PackageJSON } from "./types" ;
88import { attachIncidentFileToChatContext } from "./uris/handlers/context" ;
9+ import { openWebviewWithUrl } from "./uris/handlers/webview" ;
910import { UriRouter } from "./uris/UriRouter" ;
1011
1112const START_PORT = 33100 ;
@@ -14,6 +15,12 @@ const END_PORT = 33199;
1415let digmaClient : DigmaApiClient | null = null ;
1516// let mcpServerDisposable: vscode.Disposable | null = null;
1617
18+ const getBaseDomain = ( url : string ) : string => {
19+ const hostname = new URL ( url ) . hostname ;
20+ const parts = hostname . split ( "." ) ;
21+ return parts . slice ( - 2 ) . join ( "." ) ;
22+ } ;
23+
1724const findAvailablePort = async (
1825 start : number ,
1926 end : number
@@ -63,6 +70,9 @@ async function initializeClient(
6370export async function activate ( context : vscode . ExtensionContext ) {
6471 const uriRouter = new UriRouter ( ) ;
6572
73+ const settingsManager = new SettingsManager ( context ) ;
74+ await initializeClient ( settingsManager ) ;
75+
6676 uriRouter . route (
6777 "/chat/context/add/file/incident/:incidentId" ,
6878 async ( params ) => {
@@ -73,8 +83,25 @@ export async function activate(context: vscode.ExtensionContext) {
7383 }
7484 ) ;
7585
76- const settingsManager = new SettingsManager ( context ) ;
77- await initializeClient ( settingsManager ) ;
86+ uriRouter . route ( "/webview/open" , async ( _ , query ) => {
87+ const url = query ?. url ;
88+
89+ const settingsUrl = await settingsManager . getSetting < string > ( "url" ) ;
90+ if ( settingsUrl && url ) {
91+ const settingsBaseDomain = getBaseDomain ( settingsUrl ) ;
92+ const urlBaseDomain = getBaseDomain ( url ) ;
93+
94+ if ( settingsBaseDomain === urlBaseDomain ) {
95+ openWebviewWithUrl ( url ) ;
96+ } else {
97+ vscode . window . showErrorMessage (
98+ "URL must be from the same base domain as configured"
99+ ) ;
100+ }
101+ } else {
102+ vscode . window . showErrorMessage ( "URL parameter is required for webview" ) ;
103+ }
104+ } ) ;
78105
79106 // Listen for configuration changes
80107 const configChangeListener = vscode . workspace . onDidChangeConfiguration (
0 commit comments