@agent-link/server 0.1.317 → 0.1.319

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/entra.d.ts +16 -0
  2. package/dist/entra.js +54 -0
  3. package/dist/entra.js.map +1 -0
  4. package/dist/session-manager.d.ts +10 -0
  5. package/dist/session-manager.js +13 -0
  6. package/dist/session-manager.js.map +1 -1
  7. package/dist/ws-agent.js +90 -4
  8. package/dist/ws-agent.js.map +1 -1
  9. package/dist/ws-client.js +98 -9
  10. package/dist/ws-client.js.map +1 -1
  11. package/package.json +2 -1
  12. package/web/dist/assets/{cssMode-C9yHRcou.js → cssMode-DsYeGpsY.js} +1 -1
  13. package/web/dist/assets/{editor.main-Bebs377N.js → editor.main-D14Ei3VN.js} +3 -3
  14. package/web/dist/assets/{freemarker2-CRgani2X.js → freemarker2-B297NgYx.js} +1 -1
  15. package/web/dist/assets/{handlebars-D7fKESU-.js → handlebars-CFNoZvqS.js} +1 -1
  16. package/web/dist/assets/{html-BiFxT-gl.js → html-DIhUgRLM.js} +1 -1
  17. package/web/dist/assets/{htmlMode-BWNIZAG-.js → htmlMode-DSPdUzmU.js} +1 -1
  18. package/web/dist/assets/{index-CX6HSj4r.js → index-BzTjcZpM.js} +3 -3
  19. package/web/dist/assets/{javascript-4A1G680A.js → javascript-4zdBn-MC.js} +1 -1
  20. package/web/dist/assets/{jsonMode-CSbPbOLN.js → jsonMode-But5urIv.js} +1 -1
  21. package/web/dist/assets/{liquid-BRP6Exy_.js → liquid-Bcr8yHwH.js} +1 -1
  22. package/web/dist/assets/{lspLanguageFeatures-tUIZIohp.js → lspLanguageFeatures-r-zKWpgt.js} +1 -1
  23. package/web/dist/assets/{mdx-BLD0l1_3.js → mdx-jM1yE_dy.js} +1 -1
  24. package/web/dist/assets/{msalAuth-sOt-7u8x.js → msalAuth-Br2JW59l.js} +1 -1
  25. package/web/dist/assets/{python-Ahd9b4HT.js → python-D3OwNqB1.js} +1 -1
  26. package/web/dist/assets/{razor-ru-BTiHV.js → razor-jOM-3x1h.js} +1 -1
  27. package/web/dist/assets/{tsMode-NNbdD34o.js → tsMode-DNS4fWD8.js} +1 -1
  28. package/web/dist/assets/{typescript-Ctub8Z_t.js → typescript-D50iR93V.js} +1 -1
  29. package/web/dist/assets/{xml-Yrmhwrh6.js → xml-BoD1o9fW.js} +1 -1
  30. package/web/dist/assets/{yaml-C4x50g3a.js → yaml-2AbPDlXI.js} +1 -1
  31. package/web/dist/index.html +1 -1
  32. package/web/dist/locales/en.json +6 -0
  33. package/web/dist/locales/zh.json +6 -0
@@ -0,0 +1,16 @@
1
+ import * as jose from 'jose';
2
+ export { jose };
3
+ export interface EntraIdentity {
4
+ oid: string;
5
+ email: string;
6
+ tid: string;
7
+ }
8
+ /**
9
+ * Verify an Entra ID token (JWT) and extract identity claims.
10
+ * Returns the identity on success, or throws on failure.
11
+ */
12
+ export declare function verifyEntraToken(idToken: string): Promise<EntraIdentity>;
13
+ /**
14
+ * Check whether Entra identity verification is configured on this server.
15
+ */
16
+ export declare function isEntraConfigured(): boolean;
package/dist/entra.js ADDED
@@ -0,0 +1,54 @@
1
+ import * as jose from 'jose';
2
+ export { jose };
3
+ // Cache the JWKS remote key set per tenant to avoid repeated fetches
4
+ const jwksCache = new Map();
5
+ function getJWKS(tenantId) {
6
+ let jwks = jwksCache.get(tenantId);
7
+ if (!jwks) {
8
+ const url = new URL(`https://login.microsoftonline.com/${tenantId}/discovery/v2.0/keys`);
9
+ jwks = jose.createRemoteJWKSet(url);
10
+ jwksCache.set(tenantId, jwks);
11
+ }
12
+ return jwks;
13
+ }
14
+ // Entra config from environment — same vars used by http.ts
15
+ const entraClientId = process.env.ENTRA_CLIENT_ID;
16
+ const entraTenantId = process.env.ENTRA_TENANT_ID;
17
+ /**
18
+ * Verify an Entra ID token (JWT) and extract identity claims.
19
+ * Returns the identity on success, or throws on failure.
20
+ */
21
+ export async function verifyEntraToken(idToken) {
22
+ if (!entraClientId || !entraTenantId) {
23
+ throw new Error('Entra ID not configured on server');
24
+ }
25
+ const jwks = getJWKS(entraTenantId);
26
+ const { payload } = await jose.jwtVerify(idToken, jwks, {
27
+ issuer: `https://login.microsoftonline.com/${entraTenantId}/v2.0`,
28
+ audience: entraClientId,
29
+ });
30
+ const oid = payload.oid;
31
+ const email = (payload.preferred_username || payload.email);
32
+ const tid = payload.tid;
33
+ if (!oid) {
34
+ throw new Error('Token missing oid claim');
35
+ }
36
+ if (!tid) {
37
+ throw new Error('Token missing tid claim');
38
+ }
39
+ if (tid !== entraTenantId) {
40
+ throw new Error(`Tenant mismatch: expected ${entraTenantId}, got ${tid}`);
41
+ }
42
+ return {
43
+ oid,
44
+ email: email || 'unknown',
45
+ tid,
46
+ };
47
+ }
48
+ /**
49
+ * Check whether Entra identity verification is configured on this server.
50
+ */
51
+ export function isEntraConfigured() {
52
+ return !!(entraClientId && entraTenantId);
53
+ }
54
+ //# sourceMappingURL=entra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entra.js","sourceRoot":"","sources":["../src/entra.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,CAAC;AAQhB,qEAAqE;AACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsD,CAAC;AAEhF,SAAS,OAAO,CAAC,QAAgB;IAC/B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,qCAAqC,QAAQ,sBAAsB,CAAC,CAAC;QACzF,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACpC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4DAA4D;AAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAClD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IACpD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACtD,MAAM,EAAE,qCAAqC,aAAa,OAAO;QACjE,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAyB,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAuB,CAAC;IAClF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAyB,CAAC;IAE9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,aAAa,SAAS,GAAG,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,GAAG;QACH,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;AAC5C,CAAC"}
@@ -13,6 +13,9 @@ export interface AgentSession {
13
13
  passwordHash: string | null;
14
14
  passwordSalt: string | null;
15
15
  entra: boolean;
16
+ entraVerified: boolean;
17
+ ownerOid?: string;
18
+ ownerEmail?: string;
16
19
  }
17
20
  export interface WebClient {
18
21
  ws: WebSocket;
@@ -21,11 +24,18 @@ export interface WebClient {
21
24
  sessionKey: Uint8Array | null;
22
25
  connectedAt: Date;
23
26
  isAlive: boolean;
27
+ entraVerified?: boolean;
24
28
  }
25
29
  export declare class SessionManager {
26
30
  readonly agents: Map<string, AgentSession>;
27
31
  readonly sessionToAgent: Map<string, string>;
28
32
  readonly webClients: Map<string, WebClient>;
33
+ readonly sessionOwners: Map<string, {
34
+ oid: string;
35
+ email: string;
36
+ updatedAt: number;
37
+ }>;
38
+ private static readonly SESSION_OWNER_TTL;
29
39
  generateSessionId(): string;
30
40
  registerAgent(agentId: string, agent: AgentSession): void;
31
41
  removeAgent(agentId: string): void;
@@ -3,6 +3,10 @@ export class SessionManager {
3
3
  agents = new Map();
4
4
  sessionToAgent = new Map();
5
5
  webClients = new Map();
6
+ // Persists ownerOid across agent disconnect/reconnect — keyed by sessionId.
7
+ // Entries include a timestamp and are pruned during heartbeat cleanup.
8
+ sessionOwners = new Map();
9
+ static SESSION_OWNER_TTL = 24 * 60 * 60 * 1000; // 24 hours
6
10
  generateSessionId() {
7
11
  return randomBytes(12).toString('base64url');
8
12
  }
@@ -81,6 +85,15 @@ export class SessionManager {
81
85
  }
82
86
  catch { /* swallow */ }
83
87
  }
88
+ // Prune expired session owners (no agent + no clients + past TTL)
89
+ const now = Date.now();
90
+ for (const [sessionId, owner] of this.sessionOwners) {
91
+ if (now - owner.updatedAt > SessionManager.SESSION_OWNER_TTL
92
+ && !this.sessionToAgent.has(sessionId)
93
+ && !this.getClientsForSession(sessionId).length) {
94
+ this.sessionOwners.delete(sessionId);
95
+ }
96
+ }
84
97
  return { removedAgents, removedClients };
85
98
  }
86
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
package/dist/ws-agent.js CHANGED
@@ -5,6 +5,7 @@ import { auth } from './auth-manager.js';
5
5
  import { MessageRelay } from './message-relay.js';
6
6
  import { generateSessionKey, encodeKey, parseMessage, encryptAndSend } from './encryption.js';
7
7
  import { handleAgentTunnelMessage, updateProxyConfig, cleanupAgentTunnels } from './tunnel.js';
8
+ import { verifyEntraToken, jose } from './entra.js';
8
9
  const agentRelay = new MessageRelay();
9
10
  export function handleAgentConnection(ws, req) {
10
11
  const url = new URL(req.url || '/', `http://${req.headers.host}`);
@@ -29,6 +30,12 @@ export function handleAgentConnection(ws, req) {
29
30
  if (!requestedSessionId) {
30
31
  console.log(`[Agent] No sessionId in query params for ${name} — generated new: ${sessionId}`);
31
32
  }
33
+ // Preserve ownerOid from session-level store (survives agent disconnect/removal)
34
+ const sessionOwner = requestedSessionId ? sessions.sessionOwners.get(requestedSessionId) : undefined;
35
+ // Also check the previous agent object (in case it hasn't been removed yet)
36
+ const previousAgent = requestedSessionId ? sessions.getAgentBySession(requestedSessionId) : undefined;
37
+ const previousOwnerOid = sessionOwner?.oid || previousAgent?.ownerOid;
38
+ const previousOwnerEmail = sessionOwner?.email || previousAgent?.ownerEmail;
32
39
  const sessionKey = generateSessionKey();
33
40
  const agent = {
34
41
  ws,
@@ -44,6 +51,9 @@ export function handleAgentConnection(ws, req) {
44
51
  passwordHash,
45
52
  passwordSalt,
46
53
  entra,
54
+ entraVerified: false,
55
+ ownerOid: previousOwnerOid,
56
+ ownerEmail: previousOwnerEmail,
47
57
  };
48
58
  sessions.registerAgent(agentId, agent);
49
59
  // Persist password auth per session so it survives agent disconnects
@@ -64,16 +74,29 @@ export function handleAgentConnection(ws, req) {
64
74
  console.error(`[Agent] Failed to send registration to ${name}:`, err.message);
65
75
  }
66
76
  // Notify any web clients already connected to this session (reconnect scenario)
77
+ const isEntraSession = entra || !!previousOwnerOid;
67
78
  for (const client of sessions.getClientsForSession(sessionId)) {
68
79
  if (client.ws.readyState === WebSocket.OPEN) {
69
80
  encryptAndSend(client.ws, {
70
81
  type: 'agent_reconnected',
71
82
  agent: { agentId, name, hostname, workDir, version },
83
+ entraVerifying: isEntraSession, // tell web client agent is re-verifying
72
84
  }, client.sessionKey).catch((err) => {
73
85
  console.error(`[Agent] Failed to notify client of reconnect:`, err.message);
74
86
  });
75
87
  }
76
88
  }
89
+ // Entra verification timeout: if agent connects with entra=1 (or reconnects to
90
+ // an Entra-protected session) but doesn't verify within 30s, close the socket.
91
+ if (entra || previousOwnerOid) {
92
+ setTimeout(() => {
93
+ const current = sessions.getAgent(agentId);
94
+ if (current && current.ws === ws && !current.entraVerified) {
95
+ console.error(`[Agent] Entra verification timeout for ${name} — closing`);
96
+ ws.close(4408, 'Entra verification timeout');
97
+ }
98
+ }, 30_000);
99
+ }
77
100
  ws.on('message', (data) => {
78
101
  agentRelay.enqueue(agentId, () => handleAgentMessage(agentId, data.toString()));
79
102
  });
@@ -122,6 +145,66 @@ async function handleAgentMessage(agentId, raw) {
122
145
  agent.workDir = msg.workDir;
123
146
  console.log(`[Agent] ${agent.name} changed workDir to: ${msg.workDir}`);
124
147
  }
148
+ // Block all messages from unverified agents on Entra-protected sessions (except entra_auth itself)
149
+ if ((agent.entra || agent.ownerOid) && !agent.entraVerified && msg.type !== 'entra_auth') {
150
+ console.warn(`[Agent] Blocked ${msg.type} from unverified agent ${agent.name}`);
151
+ return;
152
+ }
153
+ // Handle entra_auth: verify JWT and bind identity to session
154
+ if (msg.type === 'entra_auth' && typeof msg.token === 'string') {
155
+ try {
156
+ const identity = await verifyEntraToken(msg.token);
157
+ if (agent.ownerOid && agent.ownerOid !== identity.oid) {
158
+ // Reconnect with different identity — reject
159
+ console.error(`[Agent] Entra oid mismatch for session ${agent.sessionId}: expected ${agent.ownerOid}, got ${identity.oid}`);
160
+ await encryptAndSend(agent.ws, {
161
+ type: 'entra_auth_failed',
162
+ reason: 'oid_mismatch',
163
+ }, agent.sessionKey);
164
+ agent.ws.close(4403, 'Entra identity mismatch');
165
+ return;
166
+ }
167
+ agent.ownerOid = identity.oid;
168
+ agent.ownerEmail = identity.email;
169
+ agent.entraVerified = true;
170
+ // Persist ownerOid at session level so it survives agent disconnect
171
+ sessions.sessionOwners.set(agent.sessionId, { oid: identity.oid, email: identity.email, updatedAt: Date.now() });
172
+ console.log(`[Agent] Entra identity verified for ${agent.name}: ${identity.email} (oid: ${identity.oid})`);
173
+ await encryptAndSend(agent.ws, {
174
+ type: 'entra_auth_ok',
175
+ email: identity.email,
176
+ }, agent.sessionKey);
177
+ // Fix 2: Notify existing web clients that Entra verification is now required
178
+ for (const client of sessions.getClientsForSession(agent.sessionId)) {
179
+ if (client.ws.readyState !== WebSocket.OPEN)
180
+ continue;
181
+ if (!client.entraVerified) {
182
+ await encryptAndSend(client.ws, { type: 'entra_auth_required' }, client.sessionKey);
183
+ }
184
+ else {
185
+ // Agent (re-)verified — clear any token-expired banner on verified clients
186
+ await encryptAndSend(client.ws, { type: 'entra_agent_token_restored' }, client.sessionKey);
187
+ }
188
+ }
189
+ }
190
+ catch (err) {
191
+ const reason = err instanceof jose.errors.JWTExpired ? 'token_expired' : 'invalid_token';
192
+ console.error(`[Agent] Entra auth failed for ${agent.name}:`, err.message);
193
+ await encryptAndSend(agent.ws, {
194
+ type: 'entra_auth_failed',
195
+ reason,
196
+ }, agent.sessionKey);
197
+ // Notify web clients that agent token is expired
198
+ if (reason === 'token_expired') {
199
+ for (const client of sessions.getClientsForSession(agent.sessionId)) {
200
+ if (client.ws.readyState === WebSocket.OPEN && client.entraVerified) {
201
+ await encryptAndSend(client.ws, { type: 'entra_agent_token_expired' }, client.sessionKey);
202
+ }
203
+ }
204
+ }
205
+ }
206
+ return; // entra_auth is not forwarded to web clients
207
+ }
125
208
  // Intercept proxy_config_updated to cache config on server side
126
209
  if (msg.type === 'proxy_config_updated' && msg.config) {
127
210
  updateProxyConfig(agent.agentId, msg.config);
@@ -134,10 +217,13 @@ async function handleAgentMessage(agentId, raw) {
134
217
  // Forward agent messages to all web clients connected to this session
135
218
  let relayCount = 0;
136
219
  for (const client of sessions.getClientsForSession(agent.sessionId)) {
137
- if (client.ws.readyState === WebSocket.OPEN) {
138
- await encryptAndSend(client.ws, msg, client.sessionKey);
139
- relayCount++;
140
- }
220
+ if (client.ws.readyState !== WebSocket.OPEN)
221
+ continue;
222
+ // Skip unverified web clients on Entra-protected sessions (only when ownerOid established)
223
+ if (agent.ownerOid && !client.entraVerified)
224
+ continue;
225
+ await encryptAndSend(client.ws, msg, client.sessionKey);
226
+ relayCount++;
141
227
  }
142
228
  if (relayCount === 0 && msg.type !== 'claude_output' && msg.type !== 'pong') {
143
229
  console.warn(`[Agent] No web clients to relay ${msg.type} for session ${agent.sessionId}`);
@@ -1 +1 @@
1
- {"version":3,"file":"ws-agent.js","sourceRoot":"","sources":["../src/ws-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/F,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AAEtC,MAAM,UAAU,qBAAqB,CAAC,EAAa,EAAE,GAAoB;IACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;IAEpD,6DAA6D;IAC7D,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;QACtB,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,uEAAuE;IACvE,MAAM,kBAAkB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,kBAAkB,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IACrE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,qBAAqB,SAAS,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,MAAM,KAAK,GAAiB;QAC1B,EAAE;QACF,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,OAAO;QACP,SAAS;QACT,UAAU;QACV,WAAW,EAAE,IAAI,IAAI,EAAE;QACvB,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,YAAY;QACZ,KAAK;KACN,CAAC;IAEF,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEvC,qEAAqE;IACrE,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,KAAK,OAAO,eAAe,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAExK,0EAA0E;IAC1E,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,IAAI,EAAE,YAAY;YAClB,OAAO;YACP,SAAS;YACT,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;SAClC,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC3F,CAAC;IAED,gFAAgF;IAChF,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5C,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE;gBACxB,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;aACrD,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5B,2EAA2E;QAC3E,0EAA0E;QAC1E,gFAAgF;QAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACjC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE7B,kDAAkD;YAClD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC5C,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBACzF,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;oBAC1F,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACjB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,+BAA+B,IAAI,KAAK,OAAO,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,GAAW;IAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,gDAAgD,OAAO,SAAS,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACpH,OAAO;IACT,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,yDAAyD;IACzD,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtE,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,wBAAwB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,gEAAgE;IAChE,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtD,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAgG,CAAC,CAAC;QACvI,6CAA6C;IAC/C,CAAC;IAED,0EAA0E;IAC1E,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,sEAAsE;IACtE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACxD,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,UAAU,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,IAAI,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ws-agent.js","sourceRoot":"","sources":["../src/ws-agent.ts"],"names":[],"mappings":"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"}
package/dist/ws-client.js CHANGED
@@ -5,6 +5,7 @@ import { sessions } from './session-manager.js';
5
5
  import { auth } from './auth-manager.js';
6
6
  import { MessageRelay } from './message-relay.js';
7
7
  import { generateSessionKey, encodeKey, parseMessage, encryptAndSend } from './encryption.js';
8
+ import { verifyEntraToken, jose } from './entra.js';
8
9
  const require = createRequire(import.meta.url);
9
10
  const serverPkg = require('../package.json');
10
11
  const clientRelay = new MessageRelay();
@@ -133,19 +134,26 @@ function completeConnection(ws, clientId, sessionId, agent, authToken) {
133
134
  isAlive: true,
134
135
  };
135
136
  sessions.registerClient(clientId, client);
136
- // Build connected payload
137
+ // Build connected payload — hide agent details for Entra-protected sessions
138
+ // until the web client passes identity verification
139
+ // Entra protection is active only when ownerOid has been established (agent verified)
140
+ // agent.entra alone just means the agent intends to use Entra — not yet verified
141
+ const sessionOwner = sessions.sessionOwners.get(sessionId);
142
+ const isEntraProtected = !!(agent?.ownerOid || sessionOwner);
143
+ const agentInfo = agent && !isEntraProtected ? {
144
+ agentId: agent.agentId,
145
+ name: agent.name,
146
+ hostname: agent.hostname,
147
+ workDir: agent.workDir,
148
+ version: agent.version,
149
+ } : null;
137
150
  const payload = {
138
151
  type: 'connected',
139
152
  clientId,
140
153
  sessionKey: encodeKey(sessionKey),
141
154
  serverVersion: serverPkg.version,
142
- agent: agent ? {
143
- agentId: agent.agentId,
144
- name: agent.name,
145
- hostname: agent.hostname,
146
- workDir: agent.workDir,
147
- version: agent.version,
148
- } : null,
155
+ agent: agentInfo,
156
+ entraRequired: isEntraProtected,
149
157
  latestAgentVersion: serverPkg.latestAgentVersion || '',
150
158
  };
151
159
  if (authToken) {
@@ -158,6 +166,10 @@ function completeConnection(ws, clientId, sessionId, agent, authToken) {
158
166
  console.error(`[Web] Failed to send connected payload to ${clientId.slice(0, 8)}:`, err.message);
159
167
  }
160
168
  console.log(`[Web] Client ${clientId.slice(0, 8)} connected to session ${sessionId}, agent: ${agent ? agent.name : 'none'}${authToken ? ' (authenticated)' : ''}`);
169
+ // If session is Entra-protected, tell web client it must verify identity
170
+ if (isEntraProtected) {
171
+ encryptAndSend(ws, { type: 'entra_auth_required' }, sessionKey).catch(() => { });
172
+ }
161
173
  ws.on('message', (data) => {
162
174
  clientRelay.enqueue(clientId, () => handleWebMessage(clientId, data.toString()));
163
175
  });
@@ -185,12 +197,89 @@ async function handleWebMessage(clientId, raw) {
185
197
  if (msg.type !== 'ping') {
186
198
  console.log(`[Web] ${clientId.slice(0, 8)} → ${msg.type}`);
187
199
  }
188
- // Find the agent for this session and forward
200
+ // Find the agent for this session
189
201
  const agent = sessions.getAgentBySession(client.sessionId);
202
+ // Handle entra_auth from web client
203
+ if (msg.type === 'entra_auth' && typeof msg.token === 'string') {
204
+ const sessionOwnerForAuth = sessions.sessionOwners.get(client.sessionId);
205
+ if (!agent && !sessionOwnerForAuth) {
206
+ // No agent connected and no prior Entra owner — don't pre-verify, wait for agent
207
+ await encryptAndSend(client.ws, {
208
+ type: 'entra_auth_failed',
209
+ reason: 'agent_pending',
210
+ }, client.sessionKey);
211
+ return;
212
+ }
213
+ // Determine the ownerOid to check against (session-level or agent-level)
214
+ const ownerOid = sessionOwnerForAuth?.oid || agent?.ownerOid;
215
+ if (!ownerOid && !agent?.entra) {
216
+ // Session doesn't require Entra verification — non-Entra agent
217
+ await encryptAndSend(client.ws, { type: 'entra_auth_ok', email: '' }, client.sessionKey);
218
+ client.entraVerified = true;
219
+ return;
220
+ }
221
+ if (!ownerOid && agent?.entra) {
222
+ // Agent has entra=1 but hasn't verified yet — tell web client to wait
223
+ await encryptAndSend(client.ws, {
224
+ type: 'entra_auth_failed',
225
+ reason: 'agent_pending',
226
+ }, client.sessionKey);
227
+ return;
228
+ }
229
+ try {
230
+ const identity = await verifyEntraToken(msg.token);
231
+ if (ownerOid && identity.oid !== ownerOid) {
232
+ console.error(`[Web] Entra oid mismatch for client ${clientId.slice(0, 8)}: session owner ${ownerOid}, client ${identity.oid}`);
233
+ await encryptAndSend(client.ws, {
234
+ type: 'entra_auth_failed',
235
+ reason: 'oid_mismatch',
236
+ }, client.sessionKey);
237
+ client.ws.close(4403, 'Entra identity mismatch');
238
+ return;
239
+ }
240
+ client.entraVerified = true;
241
+ console.log(`[Web] Entra identity verified for client ${clientId.slice(0, 8)}: ${identity.email}`);
242
+ await encryptAndSend(client.ws, {
243
+ type: 'entra_auth_ok',
244
+ email: identity.email,
245
+ agent: agent ? {
246
+ agentId: agent.agentId,
247
+ name: agent.name,
248
+ hostname: agent.hostname,
249
+ workDir: agent.workDir,
250
+ version: agent.version,
251
+ } : null,
252
+ }, client.sessionKey);
253
+ }
254
+ catch (err) {
255
+ const reason = err instanceof jose.errors.JWTExpired ? 'token_expired' : 'invalid_token';
256
+ console.error(`[Web] Entra auth failed for client ${clientId.slice(0, 8)}:`, err.message);
257
+ await encryptAndSend(client.ws, {
258
+ type: 'entra_auth_failed',
259
+ reason,
260
+ }, client.sessionKey);
261
+ }
262
+ return;
263
+ }
264
+ // Block non-keepalive messages from unverified web clients on Entra-protected sessions
265
+ // Only gate when ownerOid is actually established, not just when agent.entra is set
266
+ const sessionOwnerBlock = sessions.sessionOwners.get(client.sessionId);
267
+ if ((agent?.ownerOid || sessionOwnerBlock) && !client.entraVerified && msg.type !== 'ping') {
268
+ await encryptAndSend(client.ws, {
269
+ type: 'error',
270
+ message: 'Entra identity verification required before sending messages',
271
+ }, client.sessionKey);
272
+ return;
273
+ }
190
274
  if (!agent || agent.ws.readyState !== WebSocket.OPEN) {
191
275
  await encryptAndSend(client.ws, { type: 'error', message: 'Agent not connected' }, client.sessionKey);
192
276
  return;
193
277
  }
278
+ // Block forwarding to unverified agent on Entra-protected sessions
279
+ if (agent.ownerOid && !agent.entraVerified) {
280
+ await encryptAndSend(client.ws, { type: 'error', message: 'Agent is verifying identity, please wait' }, client.sessionKey);
281
+ return;
282
+ }
194
283
  // Forward web client message to agent, encrypted with agent's session key
195
284
  await encryptAndSend(agent.ws, msg, agent.sessionKey);
196
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-link/server",
3
- "version": "0.1.317",
3
+ "version": "0.1.319",
4
4
  "latestAgentVersion": "0.1.145",
5
5
  "description": "AgentLink relay server",
6
6
  "license": "MIT",
@@ -45,6 +45,7 @@
45
45
  "dependencies": {
46
46
  "commander": "^12.0.0",
47
47
  "express": "^4.18.2",
48
+ "jose": "^6.2.2",
48
49
  "tweetnacl": "^1.0.3",
49
50
  "tweetnacl-util": "^0.15.1",
50
51
  "ws": "^8.16.0"
@@ -1 +1 @@
1
- import{c as e,l as t}from"./editor.main-Bebs377N.js";import{C as s,H as r,D as i,a as n,R as o,b as a,c as h,d as g,F as l,e as u,S as d,f as c,g as p}from"./lspLanguageFeatures-tUIZIohp.js";import{h as m,i as _,j as w,t as f,k}from"./lspLanguageFeatures-tUIZIohp.js";import"./index-CX6HSj4r.js";class v{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),3e4),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>12e4&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=e({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL(""+new URL("css.worker-CqmadvsI.js",import.meta.url).href,import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}}function I(e){const m=[],_=[],w=new v(e);m.push(w);const f=(...e)=>w.getLanguageServiceWorker(...e);return function(){const{languageId:m,modeConfiguration:w}=e;R(_),w.completionItems&&_.push(t.registerCompletionItemProvider(m,new s(f,["/","-",":"]))),w.hovers&&_.push(t.registerHoverProvider(m,new r(f))),w.documentHighlights&&_.push(t.registerDocumentHighlightProvider(m,new i(f))),w.definitions&&_.push(t.registerDefinitionProvider(m,new n(f))),w.references&&_.push(t.registerReferenceProvider(m,new o(f))),w.documentSymbols&&_.push(t.registerDocumentSymbolProvider(m,new a(f))),w.rename&&_.push(t.registerRenameProvider(m,new h(f))),w.colors&&_.push(t.registerColorProvider(m,new g(f))),w.foldingRanges&&_.push(t.registerFoldingRangeProvider(m,new l(f))),w.diagnostics&&_.push(new u(m,f,e.onDidChange)),w.selectionRanges&&_.push(t.registerSelectionRangeProvider(m,new d(f))),w.documentFormattingEdits&&_.push(t.registerDocumentFormattingEditProvider(m,new c(f))),w.documentRangeFormattingEdits&&_.push(t.registerDocumentRangeFormattingEditProvider(m,new p(f)))}(),m.push(P(_)),P(m)}function P(e){return{dispose:()=>R(e)}}function R(e){for(;e.length;)e.pop().dispose()}export{s as CompletionAdapter,n as DefinitionAdapter,u as DiagnosticsAdapter,g as DocumentColorAdapter,c as DocumentFormattingEditProvider,i as DocumentHighlightAdapter,m as DocumentLinkAdapter,p as DocumentRangeFormattingEditProvider,a as DocumentSymbolAdapter,l as FoldingRangeAdapter,r as HoverAdapter,o as ReferenceAdapter,h as RenameAdapter,d as SelectionRangeAdapter,v as WorkerManager,_ as fromPosition,w as fromRange,I as setupMode,f as toRange,k as toTextEdit};
1
+ import{c as e,l as t}from"./editor.main-D14Ei3VN.js";import{C as s,H as r,D as i,a as n,R as o,b as a,c as h,d as g,F as l,e as u,S as d,f as c,g as p}from"./lspLanguageFeatures-r-zKWpgt.js";import{h as m,i as _,j as w,t as f,k}from"./lspLanguageFeatures-r-zKWpgt.js";import"./index-BzTjcZpM.js";class v{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),3e4),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>12e4&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=e({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL(""+new URL("css.worker-CqmadvsI.js",import.meta.url).href,import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...e){let t;return this._getClient().then(e=>{t=e}).then(t=>{if(this._worker)return this._worker.withSyncedResources(e)}).then(e=>t)}}function I(e){const m=[],_=[],w=new v(e);m.push(w);const f=(...e)=>w.getLanguageServiceWorker(...e);return function(){const{languageId:m,modeConfiguration:w}=e;R(_),w.completionItems&&_.push(t.registerCompletionItemProvider(m,new s(f,["/","-",":"]))),w.hovers&&_.push(t.registerHoverProvider(m,new r(f))),w.documentHighlights&&_.push(t.registerDocumentHighlightProvider(m,new i(f))),w.definitions&&_.push(t.registerDefinitionProvider(m,new n(f))),w.references&&_.push(t.registerReferenceProvider(m,new o(f))),w.documentSymbols&&_.push(t.registerDocumentSymbolProvider(m,new a(f))),w.rename&&_.push(t.registerRenameProvider(m,new h(f))),w.colors&&_.push(t.registerColorProvider(m,new g(f))),w.foldingRanges&&_.push(t.registerFoldingRangeProvider(m,new l(f))),w.diagnostics&&_.push(new u(m,f,e.onDidChange)),w.selectionRanges&&_.push(t.registerSelectionRangeProvider(m,new d(f))),w.documentFormattingEdits&&_.push(t.registerDocumentFormattingEditProvider(m,new c(f))),w.documentRangeFormattingEdits&&_.push(t.registerDocumentRangeFormattingEditProvider(m,new p(f)))}(),m.push(P(_)),P(m)}function P(e){return{dispose:()=>R(e)}}function R(e){for(;e.length;)e.pop().dispose()}export{s as CompletionAdapter,n as DefinitionAdapter,u as DiagnosticsAdapter,g as DocumentColorAdapter,c as DocumentFormattingEditProvider,i as DocumentHighlightAdapter,m as DocumentLinkAdapter,p as DocumentRangeFormattingEditProvider,a as DocumentSymbolAdapter,l as FoldingRangeAdapter,r as HoverAdapter,o as ReferenceAdapter,h as RenameAdapter,d as SelectionRangeAdapter,v as WorkerManager,_ as fromPosition,w as fromRange,I as setupMode,f as toRange,k as toTextEdit};