xibecode 1.0.3 → 1.0.7
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.
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +10 -7
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/diagnostics.js +1 -1
- package/dist/commands/diagnostics.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/resume.js +1 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-pr.d.ts.map +1 -1
- package/dist/commands/run-pr.js +10 -9
- package/dist/commands/run-pr.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -13
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +3 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/components/AssistantMarkdown.js +1 -1
- package/dist/components/AssistantMarkdown.js.map +1 -1
- package/dist/ui/claude-style-chat.d.ts.map +1 -1
- package/dist/ui/claude-style-chat.js +12 -10
- package/dist/ui/claude-style-chat.js.map +1 -1
- package/dist/utils/built-in-skills-dir.d.ts +7 -0
- package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
- package/dist/utils/built-in-skills-dir.js +11 -0
- package/dist/utils/built-in-skills-dir.js.map +1 -0
- package/dist/utils/config.d.ts +2 -119
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +3 -88
- package/dist/utils/config.js.map +1 -1
- package/package.json +11 -17
- package/dist/commands/punycode.d.ts +0 -5
- package/dist/commands/punycode.d.ts.map +0 -1
- package/dist/commands/punycode.js +0 -48
- package/dist/commands/punycode.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -9
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -83
- package/dist/commands/tui.js.map +0 -1
- package/dist/core/agent-tool-policies.d.ts +0 -5
- package/dist/core/agent-tool-policies.d.ts.map +0 -1
- package/dist/core/agent-tool-policies.js +0 -18
- package/dist/core/agent-tool-policies.js.map +0 -1
- package/dist/core/agent.d.ts +0 -181
- package/dist/core/agent.d.ts.map +0 -1
- package/dist/core/agent.js +0 -1777
- package/dist/core/agent.js.map +0 -1
- package/dist/core/background-agent.d.ts +0 -23
- package/dist/core/background-agent.d.ts.map +0 -1
- package/dist/core/background-agent.js +0 -175
- package/dist/core/background-agent.js.map +0 -1
- package/dist/core/code-graph.d.ts +0 -18
- package/dist/core/code-graph.d.ts.map +0 -1
- package/dist/core/code-graph.js +0 -105
- package/dist/core/code-graph.js.map +0 -1
- package/dist/core/conflict-solver.d.ts +0 -26
- package/dist/core/conflict-solver.d.ts.map +0 -1
- package/dist/core/conflict-solver.js +0 -108
- package/dist/core/conflict-solver.js.map +0 -1
- package/dist/core/context-compactor.d.ts +0 -10
- package/dist/core/context-compactor.d.ts.map +0 -1
- package/dist/core/context-compactor.js +0 -158
- package/dist/core/context-compactor.js.map +0 -1
- package/dist/core/context-pruner.d.ts +0 -19
- package/dist/core/context-pruner.d.ts.map +0 -1
- package/dist/core/context-pruner.js +0 -103
- package/dist/core/context-pruner.js.map +0 -1
- package/dist/core/context.d.ts +0 -82
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -273
- package/dist/core/context.js.map +0 -1
- package/dist/core/conversation-recovery.d.ts +0 -9
- package/dist/core/conversation-recovery.d.ts.map +0 -1
- package/dist/core/conversation-recovery.js +0 -15
- package/dist/core/conversation-recovery.js.map +0 -1
- package/dist/core/debug-workflow.d.ts +0 -9
- package/dist/core/debug-workflow.d.ts.map +0 -1
- package/dist/core/debug-workflow.js +0 -19
- package/dist/core/debug-workflow.js.map +0 -1
- package/dist/core/docs-scraper.d.ts +0 -40
- package/dist/core/docs-scraper.d.ts.map +0 -1
- package/dist/core/docs-scraper.js +0 -386
- package/dist/core/docs-scraper.js.map +0 -1
- package/dist/core/editor.d.ts +0 -87
- package/dist/core/editor.d.ts.map +0 -1
- package/dist/core/editor.js +0 -377
- package/dist/core/editor.js.map +0 -1
- package/dist/core/export.d.ts +0 -11
- package/dist/core/export.d.ts.map +0 -1
- package/dist/core/export.js +0 -54
- package/dist/core/export.js.map +0 -1
- package/dist/core/history-manager.d.ts +0 -75
- package/dist/core/history-manager.d.ts.map +0 -1
- package/dist/core/history-manager.js +0 -146
- package/dist/core/history-manager.js.map +0 -1
- package/dist/core/marketplace-client.d.ts +0 -52
- package/dist/core/marketplace-client.d.ts.map +0 -1
- package/dist/core/marketplace-client.js +0 -71
- package/dist/core/marketplace-client.js.map +0 -1
- package/dist/core/mcp/mcp-config.d.ts +0 -10
- package/dist/core/mcp/mcp-config.d.ts.map +0 -1
- package/dist/core/mcp/mcp-config.js +0 -70
- package/dist/core/mcp/mcp-config.js.map +0 -1
- package/dist/core/mcp/mcp-policy.d.ts +0 -17
- package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
- package/dist/core/mcp/mcp-policy.js +0 -56
- package/dist/core/mcp/mcp-policy.js.map +0 -1
- package/dist/core/mcp/oauth-flow.d.ts +0 -30
- package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
- package/dist/core/mcp/oauth-flow.js +0 -230
- package/dist/core/mcp/oauth-flow.js.map +0 -1
- package/dist/core/mcp/oauth-store.d.ts +0 -13
- package/dist/core/mcp/oauth-store.d.ts.map +0 -1
- package/dist/core/mcp/oauth-store.js +0 -68
- package/dist/core/mcp/oauth-store.js.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
- package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.js +0 -83
- package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
- package/dist/core/mcp-client.d.ts +0 -99
- package/dist/core/mcp-client.d.ts.map +0 -1
- package/dist/core/mcp-client.js +0 -317
- package/dist/core/mcp-client.js.map +0 -1
- package/dist/core/memory-promotions.d.ts +0 -15
- package/dist/core/memory-promotions.d.ts.map +0 -1
- package/dist/core/memory-promotions.js +0 -38
- package/dist/core/memory-promotions.js.map +0 -1
- package/dist/core/memory.d.ts +0 -32
- package/dist/core/memory.d.ts.map +0 -1
- package/dist/core/memory.js +0 -121
- package/dist/core/memory.js.map +0 -1
- package/dist/core/modes.d.ts +0 -432
- package/dist/core/modes.d.ts.map +0 -1
- package/dist/core/modes.js +0 -1094
- package/dist/core/modes.js.map +0 -1
- package/dist/core/pattern-miner.d.ts +0 -43
- package/dist/core/pattern-miner.d.ts.map +0 -1
- package/dist/core/pattern-miner.js +0 -123
- package/dist/core/pattern-miner.js.map +0 -1
- package/dist/core/permission-store.d.ts +0 -15
- package/dist/core/permission-store.d.ts.map +0 -1
- package/dist/core/permission-store.js +0 -30
- package/dist/core/permission-store.js.map +0 -1
- package/dist/core/permissions.d.ts +0 -33
- package/dist/core/permissions.d.ts.map +0 -1
- package/dist/core/permissions.js +0 -141
- package/dist/core/permissions.js.map +0 -1
- package/dist/core/plan-artifacts.d.ts +0 -10
- package/dist/core/plan-artifacts.d.ts.map +0 -1
- package/dist/core/plan-artifacts.js +0 -60
- package/dist/core/plan-artifacts.js.map +0 -1
- package/dist/core/plan-session.d.ts +0 -25
- package/dist/core/plan-session.d.ts.map +0 -1
- package/dist/core/plan-session.js +0 -99
- package/dist/core/plan-session.js.map +0 -1
- package/dist/core/planMode.d.ts +0 -51
- package/dist/core/planMode.d.ts.map +0 -1
- package/dist/core/planMode.js +0 -245
- package/dist/core/planMode.js.map +0 -1
- package/dist/core/plugins.d.ts +0 -96
- package/dist/core/plugins.d.ts.map +0 -1
- package/dist/core/plugins.js +0 -204
- package/dist/core/plugins.js.map +0 -1
- package/dist/core/session-bridge.d.ts +0 -128
- package/dist/core/session-bridge.d.ts.map +0 -1
- package/dist/core/session-bridge.js +0 -328
- package/dist/core/session-bridge.js.map +0 -1
- package/dist/core/session-manager.d.ts +0 -80
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js +0 -166
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/session-memory.d.ts +0 -45
- package/dist/core/session-memory.d.ts.map +0 -1
- package/dist/core/session-memory.js +0 -103
- package/dist/core/session-memory.js.map +0 -1
- package/dist/core/skill-selection.d.ts +0 -36
- package/dist/core/skill-selection.d.ts.map +0 -1
- package/dist/core/skill-selection.js +0 -172
- package/dist/core/skill-selection.js.map +0 -1
- package/dist/core/skills-sh-client.d.ts +0 -19
- package/dist/core/skills-sh-client.d.ts.map +0 -1
- package/dist/core/skills-sh-client.js +0 -75
- package/dist/core/skills-sh-client.js.map +0 -1
- package/dist/core/skills.d.ts +0 -97
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -339
- package/dist/core/skills.js.map +0 -1
- package/dist/core/swarm.d.ts +0 -34
- package/dist/core/swarm.d.ts.map +0 -1
- package/dist/core/swarm.js +0 -111
- package/dist/core/swarm.js.map +0 -1
- package/dist/core/task-status.d.ts +0 -13
- package/dist/core/task-status.d.ts.map +0 -1
- package/dist/core/task-status.js +0 -17
- package/dist/core/task-status.js.map +0 -1
- package/dist/core/tool-orchestrator.d.ts +0 -30
- package/dist/core/tool-orchestrator.d.ts.map +0 -1
- package/dist/core/tool-orchestrator.js +0 -89
- package/dist/core/tool-orchestrator.js.map +0 -1
- package/dist/core/tools.d.ts +0 -462
- package/dist/core/tools.d.ts.map +0 -1
- package/dist/core/tools.js +0 -2916
- package/dist/core/tools.js.map +0 -1
- package/dist/core/transcript-cleanup.d.ts +0 -8
- package/dist/core/transcript-cleanup.d.ts.map +0 -1
- package/dist/core/transcript-cleanup.js +0 -52
- package/dist/core/transcript-cleanup.js.map +0 -1
- package/dist/core/visual-feedback.d.ts +0 -20
- package/dist/core/visual-feedback.d.ts.map +0 -1
- package/dist/core/visual-feedback.js +0 -117
- package/dist/core/visual-feedback.js.map +0 -1
- package/dist/tools/browser.d.ts +0 -120
- package/dist/tools/browser.d.ts.map +0 -1
- package/dist/tools/browser.js +0 -439
- package/dist/tools/browser.js.map +0 -1
- package/dist/tools/test-generator.d.ts +0 -157
- package/dist/tools/test-generator.d.ts.map +0 -1
- package/dist/tools/test-generator.js +0 -893
- package/dist/tools/test-generator.js.map +0 -1
- package/dist/tui/InkApp.d.ts +0 -21
- package/dist/tui/InkApp.d.ts.map +0 -1
- package/dist/tui/InkApp.js +0 -146
- package/dist/tui/InkApp.js.map +0 -1
- package/dist/tui/MarkdownMessage.d.ts +0 -16
- package/dist/tui/MarkdownMessage.d.ts.map +0 -1
- package/dist/tui/MarkdownMessage.js +0 -63
- package/dist/tui/MarkdownMessage.js.map +0 -1
- package/dist/tui/blessed-chat.d.ts +0 -9
- package/dist/tui/blessed-chat.d.ts.map +0 -1
- package/dist/tui/blessed-chat.js +0 -887
- package/dist/tui/blessed-chat.js.map +0 -1
- package/dist/tui/markdown-to-blessed.d.ts +0 -6
- package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
- package/dist/tui/markdown-to-blessed.js +0 -26
- package/dist/tui/markdown-to-blessed.js.map +0 -1
- package/dist/ui/ink/App.d.ts +0 -25
- package/dist/ui/ink/App.d.ts.map +0 -1
- package/dist/ui/ink/App.js +0 -372
- package/dist/ui/ink/App.js.map +0 -1
- package/dist/utils/at-references.d.ts +0 -14
- package/dist/utils/at-references.d.ts.map +0 -1
- package/dist/utils/at-references.js +0 -47
- package/dist/utils/at-references.js.map +0 -1
- package/dist/utils/auto-memory.d.ts +0 -24
- package/dist/utils/auto-memory.d.ts.map +0 -1
- package/dist/utils/auto-memory.js +0 -153
- package/dist/utils/auto-memory.js.map +0 -1
- package/dist/utils/git.d.ts +0 -89
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -444
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/mcp-servers-file.d.ts +0 -46
- package/dist/utils/mcp-servers-file.d.ts.map +0 -1
- package/dist/utils/mcp-servers-file.js +0 -212
- package/dist/utils/mcp-servers-file.js.map +0 -1
- package/dist/utils/safety.d.ts +0 -60
- package/dist/utils/safety.d.ts.map +0 -1
- package/dist/utils/safety.js +0 -254
- package/dist/utils/safety.js.map +0 -1
- package/dist/utils/smithery.d.ts +0 -25
- package/dist/utils/smithery.d.ts.map +0 -1
- package/dist/utils/smithery.js +0 -50
- package/dist/utils/smithery.js.map +0 -1
- package/dist/utils/testRunner.d.ts +0 -44
- package/dist/utils/testRunner.d.ts.map +0 -1
- package/dist/utils/testRunner.js +0 -270
- package/dist/utils/testRunner.js.map +0 -1
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import * as crypto from 'crypto';
|
|
2
|
-
import * as http from 'http';
|
|
3
|
-
import { URL } from 'url';
|
|
4
|
-
import { getOAuthToken, upsertOAuthToken } from './oauth-store.js';
|
|
5
|
-
function base64url(buf) {
|
|
6
|
-
return buf
|
|
7
|
-
.toString('base64')
|
|
8
|
-
.replace(/\+/g, '-')
|
|
9
|
-
.replace(/\//g, '_')
|
|
10
|
-
.replace(/=+$/g, '');
|
|
11
|
-
}
|
|
12
|
-
function pkcePair() {
|
|
13
|
-
const verifier = base64url(crypto.randomBytes(32));
|
|
14
|
-
const challenge = base64url(crypto.createHash('sha256').update(verifier).digest());
|
|
15
|
-
return { codeVerifier: verifier, codeChallenge: challenge };
|
|
16
|
-
}
|
|
17
|
-
async function discoverEndpoints(cfg) {
|
|
18
|
-
const oauth = cfg.oauth;
|
|
19
|
-
if (!oauth)
|
|
20
|
-
throw new Error('This MCP server has no oauth config');
|
|
21
|
-
const clientId = oauth.clientId;
|
|
22
|
-
if (!clientId)
|
|
23
|
-
throw new Error('Missing oauth.clientId in MCP server config');
|
|
24
|
-
// Prefer explicit endpoints.
|
|
25
|
-
if (oauth.authorizationUrl && oauth.tokenUrl) {
|
|
26
|
-
return {
|
|
27
|
-
authorizationUrl: oauth.authorizationUrl,
|
|
28
|
-
tokenUrl: oauth.tokenUrl,
|
|
29
|
-
clientId,
|
|
30
|
-
scopes: oauth.scopes || [],
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// Minimal discovery: if auth server metadata URL is provided, read it and pull endpoints.
|
|
34
|
-
if (oauth.authServerMetadataUrl) {
|
|
35
|
-
const res = await fetch(oauth.authServerMetadataUrl);
|
|
36
|
-
if (!res.ok)
|
|
37
|
-
throw new Error(`Failed to fetch auth server metadata (${res.status})`);
|
|
38
|
-
const meta = (await res.json());
|
|
39
|
-
if (!meta.authorization_endpoint || !meta.token_endpoint) {
|
|
40
|
-
throw new Error('Auth server metadata missing authorization_endpoint/token_endpoint');
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
authorizationUrl: meta.authorization_endpoint,
|
|
44
|
-
tokenUrl: meta.token_endpoint,
|
|
45
|
-
clientId,
|
|
46
|
-
scopes: oauth.scopes || [],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
throw new Error('Missing OAuth endpoints. Provide oauth.authorizationUrl+oauth.tokenUrl or oauth.authServerMetadataUrl');
|
|
50
|
-
}
|
|
51
|
-
export class McpOAuthFlowManager {
|
|
52
|
-
pending = new Map();
|
|
53
|
-
getPending(serverName) {
|
|
54
|
-
return this.pending.get(serverName) || null;
|
|
55
|
-
}
|
|
56
|
-
async start(serverName, cfg) {
|
|
57
|
-
const { authorizationUrl, tokenUrl, clientId, scopes } = await discoverEndpoints(cfg);
|
|
58
|
-
// Create ephemeral localhost callback server.
|
|
59
|
-
const server = http.createServer();
|
|
60
|
-
const port = await new Promise((resolve, reject) => {
|
|
61
|
-
server.on('error', reject);
|
|
62
|
-
server.listen(0, '127.0.0.1', () => {
|
|
63
|
-
const addr = server.address();
|
|
64
|
-
if (!addr || typeof addr === 'string')
|
|
65
|
-
return reject(new Error('Failed to bind localhost callback port'));
|
|
66
|
-
resolve(addr.port);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
70
|
-
const state = base64url(crypto.randomBytes(16));
|
|
71
|
-
const { codeVerifier, codeChallenge } = pkcePair();
|
|
72
|
-
this.pending.set(serverName, {
|
|
73
|
-
serverName,
|
|
74
|
-
codeVerifier,
|
|
75
|
-
state,
|
|
76
|
-
redirectUri,
|
|
77
|
-
tokenUrl,
|
|
78
|
-
clientId,
|
|
79
|
-
scopes,
|
|
80
|
-
});
|
|
81
|
-
// Handle callback: exchange code and store token.
|
|
82
|
-
server.on('request', async (req, res) => {
|
|
83
|
-
try {
|
|
84
|
-
const url = new URL(req.url || '/', redirectUri);
|
|
85
|
-
if (url.pathname !== '/callback') {
|
|
86
|
-
res.writeHead(404).end('Not found');
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const code = url.searchParams.get('code');
|
|
90
|
-
const gotState = url.searchParams.get('state');
|
|
91
|
-
const err = url.searchParams.get('error');
|
|
92
|
-
if (err) {
|
|
93
|
-
res.writeHead(400).end(`OAuth error: ${err}`);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (!code) {
|
|
97
|
-
res.writeHead(400).end('Missing code');
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const pending = this.pending.get(serverName);
|
|
101
|
-
if (!pending) {
|
|
102
|
-
res.writeHead(400).end('No pending OAuth session');
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (gotState !== pending.state) {
|
|
106
|
-
res.writeHead(400).end('State mismatch');
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
await this.exchangeCode(serverName, code);
|
|
110
|
-
res.writeHead(200, { 'content-type': 'text/plain; charset=utf-8' });
|
|
111
|
-
res.end('XibeCode MCP auth complete. You can return to the terminal.');
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
res.writeHead(500).end(`OAuth callback failed: ${e?.message || String(e)}`);
|
|
115
|
-
}
|
|
116
|
-
finally {
|
|
117
|
-
server.close(() => { });
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const auth = new URL(authorizationUrl);
|
|
121
|
-
auth.searchParams.set('response_type', 'code');
|
|
122
|
-
auth.searchParams.set('client_id', clientId);
|
|
123
|
-
auth.searchParams.set('redirect_uri', redirectUri);
|
|
124
|
-
auth.searchParams.set('state', state);
|
|
125
|
-
auth.searchParams.set('code_challenge_method', 'S256');
|
|
126
|
-
auth.searchParams.set('code_challenge', codeChallenge);
|
|
127
|
-
if (scopes.length)
|
|
128
|
-
auth.searchParams.set('scope', scopes.join(' '));
|
|
129
|
-
// Best-effort open browser, but always return URL for manual open.
|
|
130
|
-
try {
|
|
131
|
-
const open = (await import('open')).default;
|
|
132
|
-
await open(auth.toString());
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// ignore
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
authUrl: auth.toString(),
|
|
139
|
-
redirectUri,
|
|
140
|
-
state,
|
|
141
|
-
note: 'If your browser does not open automatically, open authUrl manually. If localhost callback is not reachable, use finish step with the full callback URL.',
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
async finish(serverName, callbackUrl) {
|
|
145
|
-
const pending = this.pending.get(serverName);
|
|
146
|
-
if (!pending) {
|
|
147
|
-
return { success: false, message: `No pending OAuth session for ${serverName}. Run start first.` };
|
|
148
|
-
}
|
|
149
|
-
const url = new URL(callbackUrl);
|
|
150
|
-
const code = url.searchParams.get('code');
|
|
151
|
-
const state = url.searchParams.get('state');
|
|
152
|
-
if (!code)
|
|
153
|
-
return { success: false, message: 'Callback URL missing code param' };
|
|
154
|
-
if (state !== pending.state)
|
|
155
|
-
return { success: false, message: 'State mismatch' };
|
|
156
|
-
await this.exchangeCode(serverName, code);
|
|
157
|
-
return { success: true, message: `OAuth completed for ${serverName}` };
|
|
158
|
-
}
|
|
159
|
-
async getValidAccessToken(serverName, cfg) {
|
|
160
|
-
const token = await getOAuthToken(serverName);
|
|
161
|
-
if (!token)
|
|
162
|
-
return null;
|
|
163
|
-
const now = Date.now();
|
|
164
|
-
const expiresSoon = token.expires_at ? token.expires_at - now < 5 * 60 * 1000 : false;
|
|
165
|
-
if (!expiresSoon)
|
|
166
|
-
return token.access_token;
|
|
167
|
-
if (!token.refresh_token)
|
|
168
|
-
return token.access_token;
|
|
169
|
-
const oauth = cfg.oauth;
|
|
170
|
-
if (!oauth)
|
|
171
|
-
return token.access_token;
|
|
172
|
-
const { tokenUrl, clientId } = await discoverEndpoints(cfg);
|
|
173
|
-
const refreshed = await this.refreshToken({ tokenUrl, clientId, refresh_token: token.refresh_token });
|
|
174
|
-
await upsertOAuthToken(serverName, refreshed);
|
|
175
|
-
return refreshed.access_token;
|
|
176
|
-
}
|
|
177
|
-
async exchangeCode(serverName, code) {
|
|
178
|
-
const pending = this.pending.get(serverName);
|
|
179
|
-
if (!pending)
|
|
180
|
-
throw new Error('No pending OAuth session');
|
|
181
|
-
const body = new URLSearchParams();
|
|
182
|
-
body.set('grant_type', 'authorization_code');
|
|
183
|
-
body.set('client_id', pending.clientId);
|
|
184
|
-
body.set('code', code);
|
|
185
|
-
body.set('redirect_uri', pending.redirectUri);
|
|
186
|
-
body.set('code_verifier', pending.codeVerifier);
|
|
187
|
-
if (pending.scopes.length)
|
|
188
|
-
body.set('scope', pending.scopes.join(' '));
|
|
189
|
-
const res = await fetch(pending.tokenUrl, {
|
|
190
|
-
method: 'POST',
|
|
191
|
-
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
192
|
-
body,
|
|
193
|
-
});
|
|
194
|
-
const json = (await res.json().catch(() => null));
|
|
195
|
-
if (!res.ok) {
|
|
196
|
-
throw new Error(`Token exchange failed (${res.status}): ${json?.error || JSON.stringify(json)}`);
|
|
197
|
-
}
|
|
198
|
-
const record = {
|
|
199
|
-
access_token: json.access_token,
|
|
200
|
-
token_type: json.token_type,
|
|
201
|
-
refresh_token: json.refresh_token,
|
|
202
|
-
scope: json.scope,
|
|
203
|
-
expires_at: json.expires_in ? Date.now() + Number(json.expires_in) * 1000 : undefined,
|
|
204
|
-
};
|
|
205
|
-
await upsertOAuthToken(serverName, record);
|
|
206
|
-
}
|
|
207
|
-
async refreshToken(params) {
|
|
208
|
-
const body = new URLSearchParams();
|
|
209
|
-
body.set('grant_type', 'refresh_token');
|
|
210
|
-
body.set('client_id', params.clientId);
|
|
211
|
-
body.set('refresh_token', params.refresh_token);
|
|
212
|
-
const res = await fetch(params.tokenUrl, {
|
|
213
|
-
method: 'POST',
|
|
214
|
-
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
215
|
-
body,
|
|
216
|
-
});
|
|
217
|
-
const json = (await res.json().catch(() => null));
|
|
218
|
-
if (!res.ok) {
|
|
219
|
-
throw new Error(`Token refresh failed (${res.status}): ${json?.error || JSON.stringify(json)}`);
|
|
220
|
-
}
|
|
221
|
-
return {
|
|
222
|
-
access_token: json.access_token,
|
|
223
|
-
token_type: json.token_type,
|
|
224
|
-
refresh_token: json.refresh_token || params.refresh_token,
|
|
225
|
-
scope: json.scope,
|
|
226
|
-
expires_at: json.expires_in ? Date.now() + Number(json.expires_in) * 1000 : undefined,
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=oauth-flow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-flow.js","sourceRoot":"","sources":["../../../src/core/mcp/oauth-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface OAuthTokenRecord {
|
|
2
|
-
access_token: string;
|
|
3
|
-
token_type?: string;
|
|
4
|
-
refresh_token?: string;
|
|
5
|
-
scope?: string;
|
|
6
|
-
expires_at?: number;
|
|
7
|
-
}
|
|
8
|
-
export type OAuthTokenFile = Record<string, OAuthTokenRecord>;
|
|
9
|
-
export declare function readOAuthTokens(): Promise<OAuthTokenFile>;
|
|
10
|
-
export declare function writeOAuthTokens(tokens: OAuthTokenFile): Promise<void>;
|
|
11
|
-
export declare function upsertOAuthToken(serverName: string, token: OAuthTokenRecord): Promise<void>;
|
|
12
|
-
export declare function getOAuthToken(serverName: string): Promise<OAuthTokenRecord | null>;
|
|
13
|
-
//# sourceMappingURL=oauth-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-store.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/oauth-store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAkC9D,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CAU/D;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5E;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjG;AAED,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGxF"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs/promises';
|
|
2
|
-
import * as os from 'os';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
function tokenFilePath() {
|
|
5
|
-
return path.join(os.homedir(), '.xibecode', 'mcp-oauth-tokens.json');
|
|
6
|
-
}
|
|
7
|
-
function lockFilePath() {
|
|
8
|
-
return path.join(os.homedir(), '.xibecode', 'mcp-oauth-tokens.lock');
|
|
9
|
-
}
|
|
10
|
-
async function withLock(fn) {
|
|
11
|
-
const lock = lockFilePath();
|
|
12
|
-
const dir = path.dirname(lock);
|
|
13
|
-
await fs.mkdir(dir, { recursive: true });
|
|
14
|
-
// Simple cross-process lock: create file exclusively.
|
|
15
|
-
const startedAt = Date.now();
|
|
16
|
-
while (true) {
|
|
17
|
-
try {
|
|
18
|
-
const handle = await fs.open(lock, 'wx');
|
|
19
|
-
try {
|
|
20
|
-
return await fn();
|
|
21
|
-
}
|
|
22
|
-
finally {
|
|
23
|
-
await handle.close().catch(() => { });
|
|
24
|
-
await fs.unlink(lock).catch(() => { });
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
if (err?.code !== 'EEXIST')
|
|
29
|
-
throw err;
|
|
30
|
-
if (Date.now() - startedAt > 20_000)
|
|
31
|
-
throw new Error('Timed out waiting for OAuth token lock');
|
|
32
|
-
await new Promise((r) => setTimeout(r, 125));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export async function readOAuthTokens() {
|
|
37
|
-
try {
|
|
38
|
-
const content = await fs.readFile(tokenFilePath(), 'utf-8');
|
|
39
|
-
const data = JSON.parse(content);
|
|
40
|
-
if (!data || typeof data !== 'object')
|
|
41
|
-
return {};
|
|
42
|
-
return data;
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
if (err?.code === 'ENOENT')
|
|
46
|
-
return {};
|
|
47
|
-
throw err;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
export async function writeOAuthTokens(tokens) {
|
|
51
|
-
const file = tokenFilePath();
|
|
52
|
-
const dir = path.dirname(file);
|
|
53
|
-
await fs.mkdir(dir, { recursive: true });
|
|
54
|
-
const payload = JSON.stringify(tokens, null, 2) + '\n';
|
|
55
|
-
await fs.writeFile(file, payload, { encoding: 'utf-8', mode: 0o600 });
|
|
56
|
-
}
|
|
57
|
-
export async function upsertOAuthToken(serverName, token) {
|
|
58
|
-
await withLock(async () => {
|
|
59
|
-
const all = await readOAuthTokens();
|
|
60
|
-
all[serverName] = token;
|
|
61
|
-
await writeOAuthTokens(all);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
export async function getOAuthToken(serverName) {
|
|
65
|
-
const all = await readOAuthTokens();
|
|
66
|
-
return all[serverName] ?? null;
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=oauth-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-store.js","sourceRoot":"","sources":["../../../src/core/mcp/oauth-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { MCPServersConfig } from '../../utils/config.js';
|
|
2
|
-
export interface ResolvedMcpServers {
|
|
3
|
-
servers: MCPServersConfig;
|
|
4
|
-
sourceSummary: {
|
|
5
|
-
managedUsed: boolean;
|
|
6
|
-
projectFiles: string[];
|
|
7
|
-
globalFile?: string;
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export declare function resolveMcpServers(params: {
|
|
11
|
-
cwd: string;
|
|
12
|
-
allowed?: string[];
|
|
13
|
-
denied?: string[];
|
|
14
|
-
allowManagedOnly?: boolean;
|
|
15
|
-
}): Promise<ResolvedMcpServers>;
|
|
16
|
-
//# sourceMappingURL=resolve-mcp-servers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-mcp-servers.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/resolve-mcp-servers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AA2BD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0D9B"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import * as os from 'os';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { MCPServersFileManager } from '../../utils/mcp-servers-file.js';
|
|
4
|
-
import { findProjectMcpConfigFiles, readMcpServersFromFile } from './mcp-config.js';
|
|
5
|
-
import { filterMcpServersByPolicy } from './mcp-policy.js';
|
|
6
|
-
function stdioSignature(cfg) {
|
|
7
|
-
const args = (cfg.args || []).join('\u0000');
|
|
8
|
-
// Do not include env values in signatures (can contain secrets).
|
|
9
|
-
const envKeys = cfg.env ? Object.keys(cfg.env).sort().join(',') : '';
|
|
10
|
-
return `stdio:${cfg.command}\u0000${args}\u0000envKeys:${envKeys}`;
|
|
11
|
-
}
|
|
12
|
-
function dedupeBySignature(servers) {
|
|
13
|
-
const seen = new Map(); // signature -> chosenName
|
|
14
|
-
const out = {};
|
|
15
|
-
for (const [name, cfg] of Object.entries(servers)) {
|
|
16
|
-
const sig = stdioSignature(cfg);
|
|
17
|
-
const existing = seen.get(sig);
|
|
18
|
-
if (existing) {
|
|
19
|
-
// Prefer later entries (higher precedence in our merge order) by overwriting.
|
|
20
|
-
delete out[existing];
|
|
21
|
-
}
|
|
22
|
-
seen.set(sig, name);
|
|
23
|
-
out[name] = cfg;
|
|
24
|
-
}
|
|
25
|
-
return out;
|
|
26
|
-
}
|
|
27
|
-
export async function resolveMcpServers(params) {
|
|
28
|
-
const configDir = path.join(os.homedir(), '.xibecode');
|
|
29
|
-
const managedPath = path.join(configDir, 'managed', 'managed-mcp.json');
|
|
30
|
-
// 1) Enterprise-managed override: if present, it is authoritative.
|
|
31
|
-
try {
|
|
32
|
-
const managed = await readMcpServersFromFile(managedPath, 'managed-mcp.json');
|
|
33
|
-
const filtered = filterMcpServersByPolicy(managed, {
|
|
34
|
-
allowed: params.allowed,
|
|
35
|
-
denied: params.denied,
|
|
36
|
-
allowManagedOnly: params.allowManagedOnly,
|
|
37
|
-
isManagedSource: true,
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
servers: dedupeBySignature(filtered),
|
|
41
|
-
sourceSummary: { managedUsed: true, projectFiles: [] },
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
// If it doesn't exist, continue. If it exists but is invalid, treat as error (surface via caller).
|
|
46
|
-
if (err?.code !== 'ENOENT') {
|
|
47
|
-
throw err;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// 2) Project scope: merge .mcp.json discovered up the directory tree (root->leaf).
|
|
51
|
-
const projectFiles = await findProjectMcpConfigFiles(params.cwd);
|
|
52
|
-
let merged = {};
|
|
53
|
-
for (const fp of projectFiles) {
|
|
54
|
-
const fromFile = await readMcpServersFromFile(fp);
|
|
55
|
-
merged = { ...merged, ...fromFile };
|
|
56
|
-
}
|
|
57
|
-
// 3) User scope: global ~/.xibecode/mcp-servers.json
|
|
58
|
-
const fm = new MCPServersFileManager();
|
|
59
|
-
const globalFile = fm.getFilePath();
|
|
60
|
-
try {
|
|
61
|
-
const fromGlobal = await fm.loadMCPServers();
|
|
62
|
-
merged = { ...merged, ...fromGlobal };
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// If global file is invalid, we still want project MCP servers to work.
|
|
66
|
-
// The caller can separately validate or show warnings.
|
|
67
|
-
}
|
|
68
|
-
merged = filterMcpServersByPolicy(merged, {
|
|
69
|
-
allowed: params.allowed,
|
|
70
|
-
denied: params.denied,
|
|
71
|
-
allowManagedOnly: params.allowManagedOnly,
|
|
72
|
-
isManagedSource: false,
|
|
73
|
-
});
|
|
74
|
-
return {
|
|
75
|
-
servers: dedupeBySignature(merged),
|
|
76
|
-
sourceSummary: {
|
|
77
|
-
managedUsed: false,
|
|
78
|
-
projectFiles,
|
|
79
|
-
globalFile,
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=resolve-mcp-servers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-mcp-servers.js","sourceRoot":"","sources":["../../../src/core/mcp/resolve-mcp-servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import type { Tool, Resource, Prompt } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { MCPServerConfig } from '../utils/config.js';
|
|
3
|
-
export interface MCPTool extends Tool {
|
|
4
|
-
serverName: string;
|
|
5
|
-
}
|
|
6
|
-
export interface MCPResource extends Resource {
|
|
7
|
-
serverName: string;
|
|
8
|
-
}
|
|
9
|
-
export interface MCPPrompt extends Prompt {
|
|
10
|
-
serverName: string;
|
|
11
|
-
}
|
|
12
|
-
export type MCPServerStateType = 'disabled' | 'connecting' | 'connected' | 'needs-auth' | 'error';
|
|
13
|
-
export interface MCPServerState {
|
|
14
|
-
name: string;
|
|
15
|
-
state: MCPServerStateType;
|
|
16
|
-
lastError?: string;
|
|
17
|
-
needsAuthUntil?: number;
|
|
18
|
-
updatedAt: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Manages connections to MCP servers and provides unified access to their capabilities
|
|
22
|
-
*/
|
|
23
|
-
export declare class MCPClientManager {
|
|
24
|
-
private clients;
|
|
25
|
-
private serverConfigs;
|
|
26
|
-
private tools;
|
|
27
|
-
private resources;
|
|
28
|
-
private prompts;
|
|
29
|
-
private serverStates;
|
|
30
|
-
private setState;
|
|
31
|
-
/**
|
|
32
|
-
* Connect to an MCP server
|
|
33
|
-
*/
|
|
34
|
-
connect(serverName: string, serverConfig: MCPServerConfig): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Connect to all MCP servers with simple retry/backoff.
|
|
37
|
-
*/
|
|
38
|
-
connectAll(servers: Record<string, MCPServerConfig>, opts?: {
|
|
39
|
-
retries?: number;
|
|
40
|
-
backoffMs?: number;
|
|
41
|
-
}): Promise<{
|
|
42
|
-
connected: string[];
|
|
43
|
-
failed: Array<{
|
|
44
|
-
name: string;
|
|
45
|
-
error: string;
|
|
46
|
-
}>;
|
|
47
|
-
skippedNeedsAuth: string[];
|
|
48
|
-
}>;
|
|
49
|
-
/**
|
|
50
|
-
* Disconnect from an MCP server
|
|
51
|
-
*/
|
|
52
|
-
disconnect(serverName: string): Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* Disconnect from all MCP servers
|
|
55
|
-
*/
|
|
56
|
-
disconnectAll(): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Discover and cache capabilities from a connected server
|
|
59
|
-
*/
|
|
60
|
-
private discoverCapabilities;
|
|
61
|
-
/**
|
|
62
|
-
* Get all available tools from all connected MCP servers
|
|
63
|
-
*/
|
|
64
|
-
getAvailableTools(): MCPTool[];
|
|
65
|
-
/**
|
|
66
|
-
* Get all available resources from all connected MCP servers
|
|
67
|
-
*/
|
|
68
|
-
getAvailableResources(): MCPResource[];
|
|
69
|
-
/**
|
|
70
|
-
* Get all available prompts from all connected MCP servers
|
|
71
|
-
*/
|
|
72
|
-
getAvailablePrompts(): MCPPrompt[];
|
|
73
|
-
/**
|
|
74
|
-
* Execute a tool from an MCP server
|
|
75
|
-
*/
|
|
76
|
-
executeMCPTool(toolName: string, args: Record<string, unknown>): Promise<any>;
|
|
77
|
-
/**
|
|
78
|
-
* Read a resource from an MCP server
|
|
79
|
-
*/
|
|
80
|
-
readResource(resourceUri: string): Promise<any>;
|
|
81
|
-
/**
|
|
82
|
-
* Get a prompt from an MCP server
|
|
83
|
-
*/
|
|
84
|
-
getPrompt(promptName: string, args?: Record<string, string>): Promise<any>;
|
|
85
|
-
/**
|
|
86
|
-
* Get list of connected servers
|
|
87
|
-
*/
|
|
88
|
-
getConnectedServers(): string[];
|
|
89
|
-
getServerStates(): MCPServerState[];
|
|
90
|
-
/**
|
|
91
|
-
* Check if connected to a specific server
|
|
92
|
-
*/
|
|
93
|
-
isConnected(serverName: string): boolean;
|
|
94
|
-
/**
|
|
95
|
-
* Get server configuration
|
|
96
|
-
*/
|
|
97
|
-
getServerConfig(serverName: string): MCPServerConfig | undefined;
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=mcp-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,MAAM,EAIP,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,OAAQ,SAAQ,IAAI;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAElG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,YAAY,CAA0C;IAE9D,OAAO,CAAC,QAAQ;IAWhB;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2D/E;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACxC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAmC/G;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCnD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;OAEG;YACW,oBAAoB;IA2ClC;;OAEG;IACH,iBAAiB,IAAI,OAAO,EAAE;IAI9B;;OAEG;IACH,qBAAqB,IAAI,WAAW,EAAE;IAItC;;OAEG;IACH,mBAAmB,IAAI,SAAS,EAAE;IAIlC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAmCnF;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAkCrD;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAmChF;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B,eAAe,IAAI,cAAc,EAAE;IAInC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;CAGjE"}
|