@tropass/connect 2.4.2

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 (51) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +62 -0
  3. package/dist/bin/tropass-connect.d.ts +2 -0
  4. package/dist/bin/tropass-connect.js +8 -0
  5. package/dist/bin/tropass-connect.js.map +1 -0
  6. package/dist/skills/agent-response-display/SKILL.md +111 -0
  7. package/dist/skills/tropass-gateway/SKILL.md +52 -0
  8. package/dist/src/cli.d.ts +1 -0
  9. package/dist/src/cli.js +52 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/constants.d.ts +8 -0
  12. package/dist/src/constants.js +9 -0
  13. package/dist/src/constants.js.map +1 -0
  14. package/dist/src/installer.d.ts +4 -0
  15. package/dist/src/installer.js +171 -0
  16. package/dist/src/installer.js.map +1 -0
  17. package/dist/src/installers/cli.d.ts +6 -0
  18. package/dist/src/installers/cli.js +40 -0
  19. package/dist/src/installers/cli.js.map +1 -0
  20. package/dist/src/installers/opencode.d.ts +2 -0
  21. package/dist/src/installers/opencode.js +159 -0
  22. package/dist/src/installers/opencode.js.map +1 -0
  23. package/dist/src/installers/shared.d.ts +7 -0
  24. package/dist/src/installers/shared.js +43 -0
  25. package/dist/src/installers/shared.js.map +1 -0
  26. package/dist/src/installers/types.d.ts +9 -0
  27. package/dist/src/installers/types.js +2 -0
  28. package/dist/src/installers/types.js.map +1 -0
  29. package/dist/src/interactive-installer.d.ts +15 -0
  30. package/dist/src/interactive-installer.js +138 -0
  31. package/dist/src/interactive-installer.js.map +1 -0
  32. package/dist/src/logging.d.ts +1 -0
  33. package/dist/src/logging.js +5 -0
  34. package/dist/src/logging.js.map +1 -0
  35. package/dist/src/path-utils.d.ts +3 -0
  36. package/dist/src/path-utils.js +43 -0
  37. package/dist/src/path-utils.js.map +1 -0
  38. package/dist/src/spawn.d.ts +5 -0
  39. package/dist/src/spawn.js +13 -0
  40. package/dist/src/spawn.js.map +1 -0
  41. package/dist/src/types.d.ts +50 -0
  42. package/dist/src/types.js +2 -0
  43. package/dist/src/types.js.map +1 -0
  44. package/dist/src/uvx.d.ts +2 -0
  45. package/dist/src/uvx.js +33 -0
  46. package/dist/src/uvx.js.map +1 -0
  47. package/dist/tools/tropass-provider.js +57 -0
  48. package/dist/tools/tropass.mjs +257 -0
  49. package/dist/tools/wait_for_model_task.py +24 -0
  50. package/dist/tools/wait_for_model_task.ts +51 -0
  51. package/package.json +57 -0
@@ -0,0 +1,159 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { DEFAULT_TOKEN_HEADER, MCP_MODEL_CALL_VERSION_HEADER, } from "../constants.js";
5
+ import { buildBearerToken, readJsonFile, readObjectProperty, stripBearerToken, writeJsonFile, writeTextFile, } from "./shared.js";
6
+ import { runAgentCli } from "./cli.js";
7
+ const PACKAGED_SKILLS_DIRECTORY = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../skills");
8
+ const PACKAGED_TOOLS_DIRECTORY = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../tools");
9
+ const SKILL_NAMES = ["tropass-gateway", "agent-response-display"];
10
+ const TOOL_FILE_NAME = "wait_for_model_task.ts";
11
+ const TOOL_SCRIPT_NAME = "wait_for_model_task.py";
12
+ const PLUGIN_FILE_NAME = "tropass.mjs";
13
+ const PROVIDER_PLUGIN_FILE_NAME = "tropass-provider.js";
14
+ const LEGACY_PLUGIN_FILE_NAME = "tropass-usage.mjs";
15
+ const INSTALLER_VERSION = readInstallerVersion();
16
+ export const opencodeInstaller = {
17
+ installConfig(options, configPath) {
18
+ if (options.scope === "global" && !options.configPath) {
19
+ runAgentCli([
20
+ "mcp",
21
+ "add",
22
+ "tropass",
23
+ "--url",
24
+ options.mcpUrl,
25
+ "--header",
26
+ `${DEFAULT_TOKEN_HEADER}=${buildBearerToken(options.apiToken)}`,
27
+ "--header",
28
+ `${MCP_MODEL_CALL_VERSION_HEADER}=${options.modelCallVersion}`,
29
+ ]);
30
+ writeOpenCodeConfig(configPath, options.mcpUrl, options.apiToken, options.modelCallVersion);
31
+ return;
32
+ }
33
+ writeOpenCodeConfig(configPath, options.mcpUrl, options.apiToken, options.modelCallVersion);
34
+ },
35
+ installProvider(options, configPath) {
36
+ writeOpenCodeProvider(configPath, options.apiToken, options.llmUrl);
37
+ },
38
+ installSkills(skillsPath) {
39
+ return SKILL_NAMES.map((name) => {
40
+ const relativePath = path.join(name, "SKILL.md");
41
+ const skillPath = path.join(skillsPath, relativePath);
42
+ writeTextFile(skillPath, fs.readFileSync(path.join(PACKAGED_SKILLS_DIRECTORY, relativePath), "utf8"));
43
+ return skillPath;
44
+ });
45
+ },
46
+ installTools(toolsPath, mcpUrl, apiToken, uvxCommand) {
47
+ fs.mkdirSync(toolsPath, { recursive: true });
48
+ const gatewayUrl = buildGatewayUrl(mcpUrl);
49
+ const toolTemplate = fs.readFileSync(path.join(PACKAGED_TOOLS_DIRECTORY, TOOL_FILE_NAME), "utf8");
50
+ const toolPath = path.join(toolsPath, TOOL_FILE_NAME);
51
+ writeTextFile(toolPath, fillTemplate(toolTemplate, {
52
+ GATEWAY_URL: gatewayUrl,
53
+ GATEWAY_API_TOKEN: stripBearerToken(apiToken),
54
+ UVX_COMMAND: uvxCommand,
55
+ }));
56
+ const scriptPath = path.join(toolsPath, TOOL_SCRIPT_NAME);
57
+ writeTextFile(scriptPath, fs.readFileSync(path.join(PACKAGED_TOOLS_DIRECTORY, TOOL_SCRIPT_NAME), "utf8"));
58
+ return [toolPath, scriptPath];
59
+ },
60
+ removeTools(toolsPath) {
61
+ return [TOOL_FILE_NAME, TOOL_SCRIPT_NAME]
62
+ .map((name) => path.join(toolsPath, name))
63
+ .filter((filePath) => fs.existsSync(filePath))
64
+ .map((filePath) => {
65
+ fs.rmSync(filePath);
66
+ return filePath;
67
+ });
68
+ },
69
+ installPlugins(configDir, configPath, options) {
70
+ const pluginPath = path.join(configDir, PLUGIN_FILE_NAME);
71
+ const template = fs.readFileSync(path.join(PACKAGED_TOOLS_DIRECTORY, PLUGIN_FILE_NAME), "utf8");
72
+ writeTextFile(pluginPath, fillTemplate(template, {
73
+ USAGE_URL: Buffer.from(`${options.llmUrl.replace(/\/v1$/, "")}/api/rpc/fetch-token-usage/`).toString("base64"),
74
+ API_TOKEN: Buffer.from(stripBearerToken(options.apiToken)).toString("base64"),
75
+ CONFIG_PATH: Buffer.from(configPath).toString("base64"),
76
+ PROJECT_DIR: Buffer.from(options.scope === "project" ? path.dirname(configDir) : "").toString("base64"),
77
+ INSTALLER_VERSION,
78
+ INSTALL_SCOPE: options.scope,
79
+ }));
80
+ const providerPluginPath = path.join(configDir, "plugins", PROVIDER_PLUGIN_FILE_NAME);
81
+ writeTextFile(providerPluginPath, fs.readFileSync(path.join(PACKAGED_TOOLS_DIRECTORY, PROVIDER_PLUGIN_FILE_NAME), "utf8"));
82
+ fs.rmSync(path.join(configDir, LEGACY_PLUGIN_FILE_NAME), { force: true });
83
+ const tuiConfigPath = path.join(configDir, "tui.json");
84
+ const tuiConfig = readJsonFile(tuiConfigPath);
85
+ const plugins = tuiConfig.plugin;
86
+ if (plugins !== undefined && !Array.isArray(plugins)) {
87
+ throw new Error(`Поле конфигурации 'plugin' в ${tuiConfigPath} должно быть массивом.`);
88
+ }
89
+ const tropassPlugins = new Set([`./${PLUGIN_FILE_NAME}`, `./${LEGACY_PLUGIN_FILE_NAME}`]);
90
+ tuiConfig.plugin = [...(plugins ?? []).filter((plugin) => !tropassPlugins.has(String(plugin))), `./${PLUGIN_FILE_NAME}`];
91
+ writeJsonFile(tuiConfigPath, tuiConfig);
92
+ return [pluginPath, providerPluginPath];
93
+ },
94
+ };
95
+ function writeOpenCodeConfig(configPath, mcpUrl, apiToken, modelCallVersion) {
96
+ const payload = readJsonFile(configPath);
97
+ payload.mcp = {
98
+ ...readObjectProperty(payload, "mcp"),
99
+ tropass: {
100
+ type: "remote",
101
+ enabled: true,
102
+ timeout: 30 * 60 * 1000,
103
+ url: mcpUrl,
104
+ headers: {
105
+ [DEFAULT_TOKEN_HEADER]: buildBearerToken(apiToken),
106
+ [MCP_MODEL_CALL_VERSION_HEADER]: modelCallVersion,
107
+ },
108
+ },
109
+ };
110
+ writeJsonFile(configPath, payload);
111
+ }
112
+ function writeOpenCodeProvider(configPath, apiToken, llmUrl) {
113
+ const payload = readJsonFile(configPath);
114
+ if (typeof payload.model === "string" && payload.model.startsWith("tropass/")) {
115
+ delete payload.model;
116
+ }
117
+ const commands = readObjectProperty(payload, "command");
118
+ delete commands.usage;
119
+ if (Object.keys(commands).length)
120
+ payload.command = commands;
121
+ else
122
+ delete payload.command;
123
+ payload.provider = {
124
+ ...readObjectProperty(payload, "provider"),
125
+ tropass: {
126
+ npm: "@ai-sdk/openai-compatible",
127
+ name: "Tropass",
128
+ options: {
129
+ baseURL: llmUrl,
130
+ apiKey: stripBearerToken(apiToken),
131
+ },
132
+ },
133
+ };
134
+ writeJsonFile(configPath, payload);
135
+ }
136
+ function fillTemplate(template, values) {
137
+ return Object.entries(values).reduce((filled, [name, value]) => filled.replaceAll(`{{${name}}}`, () => escapeForSourceString(value)), template);
138
+ }
139
+ function escapeForSourceString(value) {
140
+ return JSON.stringify(value).slice(1, -1);
141
+ }
142
+ function buildGatewayUrl(mcpUrl) {
143
+ return mcpUrl.replace(/\/mcp$/, "").replace(/\/+$/, "");
144
+ }
145
+ function readInstallerVersion() {
146
+ const moduleDirectory = path.dirname(fileURLToPath(import.meta.url));
147
+ const packagePaths = ["../../package.json", "../../../package.json"]
148
+ .map((relativePath) => path.resolve(moduleDirectory, relativePath));
149
+ const packagePath = packagePaths.find((candidate) => fs.existsSync(candidate));
150
+ if (!packagePath) {
151
+ throw new Error("Не найден package.json установщика Tropass.");
152
+ }
153
+ const version = readJsonFile(packagePath).version;
154
+ if (typeof version !== "string") {
155
+ throw new Error(`В ${packagePath} не указана версия установщика Tropass.`);
156
+ }
157
+ return version;
158
+ }
159
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/installers/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { JsonObject } from "../types.js";
2
+ export declare function buildBearerToken(apiToken: string): string;
3
+ export declare function stripBearerToken(apiToken: string): string;
4
+ export declare function readJsonFile(filePath: string): JsonObject;
5
+ export declare function writeJsonFile(filePath: string, payload: JsonObject): void;
6
+ export declare function writeTextFile(filePath: string, content: string): void;
7
+ export declare function readObjectProperty(payload: JsonObject, key: string): JsonObject;
@@ -0,0 +1,43 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export function buildBearerToken(apiToken) {
4
+ return apiToken.startsWith("Bearer ") ? apiToken : `Bearer ${apiToken}`;
5
+ }
6
+ export function stripBearerToken(apiToken) {
7
+ return apiToken.startsWith("Bearer ") ? apiToken.slice("Bearer ".length) : apiToken;
8
+ }
9
+ export function readJsonFile(filePath) {
10
+ if (!fs.existsSync(filePath)) {
11
+ return {};
12
+ }
13
+ const payload = fs.readFileSync(filePath, "utf8").trim();
14
+ if (!payload) {
15
+ return {};
16
+ }
17
+ const parsedPayload = JSON.parse(payload);
18
+ if (!isJsonObject(parsedPayload)) {
19
+ throw new Error(`${filePath} должен содержать JSON-объект.`);
20
+ }
21
+ return parsedPayload;
22
+ }
23
+ export function writeJsonFile(filePath, payload) {
24
+ writeTextFile(filePath, `${JSON.stringify(payload, null, 2)}\n`);
25
+ }
26
+ export function writeTextFile(filePath, content) {
27
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
28
+ fs.writeFileSync(filePath, content.endsWith("\n") ? content : `${content}\n`);
29
+ }
30
+ export function readObjectProperty(payload, key) {
31
+ const value = payload[key];
32
+ if (value === undefined) {
33
+ return {};
34
+ }
35
+ if (!isJsonObject(value)) {
36
+ throw new Error(`Поле конфигурации '${key}' должно быть JSON-объектом.`);
37
+ }
38
+ return value;
39
+ }
40
+ function isJsonObject(value) {
41
+ return typeof value === "object" && value !== null && !Array.isArray(value);
42
+ }
43
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/installers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,gCAAgC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAmB;IACjE,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe;IAC7D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAmB,EAAE,GAAW;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,8BAA8B,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ValidatedInstallOptions } from "../types.js";
2
+ export type HarnessInstaller = {
3
+ installConfig(options: ValidatedInstallOptions, configPath: string): void;
4
+ installProvider(options: ValidatedInstallOptions, configPath: string): void;
5
+ installSkills(skillsPath: string): string[];
6
+ installTools(toolsPath: string, mcpUrl: string, apiToken: string, uvxCommand: string): string[];
7
+ removeTools(toolsPath: string): string[];
8
+ installPlugins(configDir: string, configPath: string, options: ValidatedInstallOptions): string[];
9
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/installers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { InstallClient, InstallOptions, InstallResult, InstallScope } from "./types.js";
2
+ type InteractiveInstallOptions = Omit<InstallOptions, "client" | "scope"> & {
3
+ client: InstallClient;
4
+ scope: InstallScope | undefined;
5
+ };
6
+ type CompletedInstallOptions = {
7
+ client: InstallClient;
8
+ scope: InstallScope;
9
+ mcpUrl: string;
10
+ llmUrl: string;
11
+ apiToken: string;
12
+ };
13
+ export declare function runInteractiveInstaller(options: InteractiveInstallOptions): Promise<CompletedInstallOptions>;
14
+ export declare function writeInstallResult(result: InstallResult): void;
15
+ export {};
@@ -0,0 +1,138 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import process from "node:process";
3
+ import { Box, render, Text, useApp, useInput, usePaste } from "ink";
4
+ import Link from "ink-link";
5
+ import SelectInput from "ink-select-input";
6
+ import TextInput from "ink-text-input";
7
+ import { useRef, useState } from "react";
8
+ import { TROPASS_URL } from "./constants.js";
9
+ const SCOPE_ITEMS = [
10
+ { label: "Глобально — для текущего пользователя", value: "global" },
11
+ { label: "Проект — для текущего рабочего пространства", value: "project" }
12
+ ];
13
+ export async function runInteractiveInstaller(options) {
14
+ if (options.yes && options.client && options.scope && options.apiToken) {
15
+ return {
16
+ client: options.client,
17
+ scope: options.scope,
18
+ mcpUrl: options.mcpUrl,
19
+ llmUrl: options.llmUrl,
20
+ apiToken: options.apiToken
21
+ };
22
+ }
23
+ if (!process.stdin.isTTY) {
24
+ throw new Error("Для интерактивной установки нужен TTY. Передайте --client, --scope, --token и --yes.");
25
+ }
26
+ let completedOptions;
27
+ const instance = render(_jsx(InstallerWizard, { options: options, onComplete: (result) => { completedOptions = result; } }), { stdin: process.stdin, stdout: process.stderr });
28
+ await instance.waitUntilExit();
29
+ if (!completedOptions) {
30
+ throw new Error("Установка отменена.");
31
+ }
32
+ return completedOptions;
33
+ }
34
+ export function writeInstallResult(result) {
35
+ const instance = render(_jsx(InstallResultView, { result: result }), { stdout: process.stderr });
36
+ instance.unmount();
37
+ }
38
+ function InstallerWizard({ options, onComplete }) {
39
+ const { exit } = useApp();
40
+ const client = options.client;
41
+ const [scope, setScope] = useState(options.scope);
42
+ const [mcpUrl, setMcpUrl] = useState(options.mcpUrl);
43
+ const [llmUrl, setLlmUrl] = useState(options.llmUrl);
44
+ const [apiToken, setApiToken] = useState(options.apiToken ?? "");
45
+ const [mcpUrlConfirmed, setMcpUrlConfirmed] = useState(options.yes);
46
+ const [llmUrlConfirmed, setLlmUrlConfirmed] = useState(options.yes);
47
+ const step = resolveStep({ scope, mcpUrlConfirmed, llmUrlConfirmed });
48
+ const complete = (values, confirmedMcpUrl = mcpUrlConfirmed, confirmedLlmUrl = llmUrlConfirmed) => {
49
+ if (values.client && values.scope && values.apiToken && confirmedMcpUrl && confirmedLlmUrl) {
50
+ onComplete({ ...values, client: values.client, scope: values.scope, apiToken: values.apiToken });
51
+ exit();
52
+ }
53
+ };
54
+ const submitToken = (value) => {
55
+ const token = value.trim();
56
+ if (!token) {
57
+ return;
58
+ }
59
+ setApiToken(token);
60
+ complete({ client, scope, mcpUrl, llmUrl, apiToken: token });
61
+ };
62
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Link, { url: TROPASS_URL, children: _jsx(Text, { bold: true, color: "cyan", underline: true, children: "Tropass" }) }), _jsx(Text, { bold: true, color: "cyan", children: " Connect" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [step === "scope" && (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0431\u043B\u0430\u0441\u0442\u044C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438" }), _jsx(SelectInput, { items: SCOPE_ITEMS, onSelect: (item) => {
63
+ setScope(item.value);
64
+ complete({ client, scope: item.value, mcpUrl, llmUrl, apiToken });
65
+ } })] })), step === "mcp-url" && (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: "\u0411\u0430\u0437\u043E\u0432\u044B\u0439 URL \u0448\u043B\u044E\u0437\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 Tropass" }), _jsx(TextInput, { value: mcpUrl, onChange: setMcpUrl, onSubmit: (value) => {
66
+ if (value.trim()) {
67
+ const confirmedUrl = value.trim();
68
+ setMcpUrl(confirmedUrl);
69
+ setMcpUrlConfirmed(true);
70
+ complete({ client, scope, mcpUrl: confirmedUrl, llmUrl, apiToken }, true);
71
+ }
72
+ } })] })), step === "llm-url" && (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: "URL LLM-\u0448\u043B\u044E\u0437\u0430 Tropass" }), _jsx(TextInput, { value: llmUrl, onChange: setLlmUrl, onSubmit: (value) => {
73
+ if (value.trim()) {
74
+ const confirmedUrl = value.trim().replace(/\/+$/, "");
75
+ setLlmUrl(confirmedUrl);
76
+ setLlmUrlConfirmed(true);
77
+ complete({ client, scope, mcpUrl, llmUrl: confirmedUrl, apiToken }, mcpUrlConfirmed, true);
78
+ }
79
+ } })] })), step === "token" && (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: "API-\u0442\u043E\u043A\u0435\u043D Tropass" }), _jsx(TokenInput, { value: apiToken, onChange: setApiToken, onSubmit: submitToken })] }))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u2191/\u2193 \u0438 Enter \u00B7 Ctrl+C \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B" }) })] }));
80
+ function resolveStep(values) {
81
+ if (!values.scope)
82
+ return "scope";
83
+ if (!values.mcpUrlConfirmed)
84
+ return "mcp-url";
85
+ if (!values.llmUrlConfirmed)
86
+ return "llm-url";
87
+ return "token";
88
+ }
89
+ }
90
+ function TokenInput({ value, onChange, onSubmit }) {
91
+ const valueRef = useRef(value);
92
+ valueRef.current = value;
93
+ useInput((input, key) => {
94
+ if (key.return) {
95
+ onSubmit(valueRef.current);
96
+ return;
97
+ }
98
+ if (key.backspace || key.delete) {
99
+ const next = valueRef.current.slice(0, -1);
100
+ valueRef.current = next;
101
+ onChange(next);
102
+ return;
103
+ }
104
+ if (key.upArrow
105
+ || key.downArrow
106
+ || key.leftArrow
107
+ || key.rightArrow
108
+ || key.tab
109
+ || key.escape
110
+ || key.ctrl
111
+ || key.meta) {
112
+ return;
113
+ }
114
+ const next = valueRef.current + input;
115
+ valueRef.current = next;
116
+ onChange(next);
117
+ });
118
+ usePaste((text) => {
119
+ const next = valueRef.current + text.replace(/[\r\n\t]+/g, "");
120
+ valueRef.current = next;
121
+ onChange(next);
122
+ });
123
+ return _jsx(Text, { children: value.length > 0 ? "*".repeat(value.length) : " " });
124
+ }
125
+ function UvStatusLine({ result }) {
126
+ if (result.uvxCommand) {
127
+ return _jsxs(Text, { children: ["uvx: ", result.uvxCommand] });
128
+ }
129
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: "uvx \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u2014 MCP \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D \u043D\u0430 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C v1 \u0431\u0435\u0437 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430 wait_for_model_task." }), _jsx(Text, { dimColor: true, children: "\u041F\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 uv \u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443, \u0447\u0442\u043E\u0431\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C v2: https://docs.astral.sh/uv/getting-started/installation/" })] }));
130
+ }
131
+ function InstallResultView({ result }) {
132
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Text, { color: "green", bold: true, children: ["\u2713 Tropass MCP \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D \u0434\u043B\u044F ", result.client] }), _jsxs(Text, { children: ["\u041E\u0431\u043B\u0430\u0441\u0442\u044C: ", result.scope] }), _jsxs(Text, { children: ["\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F: ", result.configPath] }), _jsxs(Text, { children: ["\u0418\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438 \u0430\u0433\u0435\u043D\u0442\u0430: ", result.skillPaths.join(", ")] }), result.toolPaths.length
133
+ ? _jsxs(Text, { children: ["\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0430\u0433\u0435\u043D\u0442\u0430: ", result.toolPaths.join(", ")] })
134
+ : _jsx(Text, { children: "\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0430\u0433\u0435\u043D\u0442\u0430: \u043D\u0435 \u043D\u0443\u0436\u043D\u044B \u0432 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435" }), result.removedToolPaths.length
135
+ ? _jsxs(Text, { dimColor: true, children: ["\u0423\u0434\u0430\u043B\u0435\u043D\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043F\u0440\u043E\u0448\u043B\u043E\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438: ", result.removedToolPaths.join(", ")] })
136
+ : null, _jsxs(Text, { children: ["\u0412\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0435\u043B\u0435\u0439: ", result.modelCallVersion === "2" ? "асинхронный (v2)" : "синхронный (v1)"] }), _jsxs(Text, { children: ["\u041F\u043B\u0430\u0433\u0438\u043D\u044B OpenCode: ", result.pluginPaths.join(", ")] }), _jsx(UvStatusLine, { result: result }), _jsx(Text, { dimColor: true, children: "\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 MCP-\u043A\u043B\u0438\u0435\u043D\u0442." }), _jsxs(Text, { dimColor: true, children: ["Tropass: ", _jsx(Link, { url: TROPASS_URL, children: "\u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0430\u0439\u0442" })] })] }));
137
+ }
138
+ //# sourceMappingURL=interactive-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-installer.js","sourceRoot":"","sources":["../../src/interactive-installer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function logError(message: string, error: unknown): void;
@@ -0,0 +1,5 @@
1
+ export function logError(message, error) {
2
+ const detail = error instanceof Error ? error.message : String(error);
3
+ process.stderr.write(`[tropass-connect] ${message}: ${detail}\n`);
4
+ }
5
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAc;IACtD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function expandHome(filePath: string): string;
2
+ export declare function resolveOpenCodeConfigDir(): string;
3
+ export declare function resolveOpenCodeConfigPath(): string;
@@ -0,0 +1,43 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ export function expandHome(filePath) {
6
+ if (filePath === "~") {
7
+ return process.env.HOME || process.env.USERPROFILE || os.homedir();
8
+ }
9
+ if (filePath.startsWith("~/")) {
10
+ const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
11
+ return path.join(home, filePath.slice(2));
12
+ }
13
+ return filePath;
14
+ }
15
+ export function resolveOpenCodeConfigDir() {
16
+ if (process.env.OPENCODE_CONFIG_DIR) {
17
+ return path.resolve(expandHome(process.env.OPENCODE_CONFIG_DIR));
18
+ }
19
+ const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
20
+ const xdgConfigHome = process.env.XDG_CONFIG_HOME
21
+ ? path.resolve(expandHome(process.env.XDG_CONFIG_HOME))
22
+ : path.join(home, ".config");
23
+ return path.join(xdgConfigHome, "opencode");
24
+ }
25
+ export function resolveOpenCodeConfigPath() {
26
+ if (process.env.OPENCODE_CONFIG) {
27
+ return path.resolve(expandHome(process.env.OPENCODE_CONFIG));
28
+ }
29
+ const configDir = resolveOpenCodeConfigDir();
30
+ const jsonPath = path.join(configDir, "opencode.json");
31
+ const jsoncPath = path.join(configDir, "opencode.jsonc");
32
+ if (fs.existsSync(jsonPath) && !fs.existsSync(jsoncPath)) {
33
+ return jsonPath;
34
+ }
35
+ if (fs.existsSync(jsoncPath) && !fs.existsSync(jsonPath)) {
36
+ return jsoncPath;
37
+ }
38
+ if (fs.existsSync(jsonPath) && fs.existsSync(jsoncPath)) {
39
+ return jsonPath;
40
+ }
41
+ return jsoncPath;
42
+ }
43
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe;QAC/C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAEzD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import childProcess from "node:child_process";
2
+ export type SpawnResult = childProcess.SpawnSyncReturns<string>;
3
+ export declare function commandExists(command: string, args?: string[]): boolean;
4
+ export declare function describeSpawnFailure(result: SpawnResult): string;
5
+ export declare function windowsExecutable(name: string): string;
@@ -0,0 +1,13 @@
1
+ import childProcess from "node:child_process";
2
+ import process from "node:process";
3
+ export function commandExists(command, args = ["--version"]) {
4
+ return childProcess.spawnSync(command, args, { stdio: "ignore" }).status === 0;
5
+ }
6
+ export function describeSpawnFailure(result) {
7
+ return result.error?.message
8
+ || (result.stderr || result.stdout || "неизвестная ошибка").trim();
9
+ }
10
+ export function windowsExecutable(name) {
11
+ return process.platform === "win32" ? `${name}.exe` : name;
12
+ }
13
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,OAAO,MAAM,cAAc,CAAC;AAInC,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAiB,CAAC,WAAW,CAAC;IAC3E,OAAO,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO;WACvB,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,50 @@
1
+ export type InstallClient = "opencode";
2
+ export type InstallScope = "project" | "global";
3
+ export type ModelCallVersion = "1" | "2";
4
+ export type RawInstallOptions = {
5
+ client?: string;
6
+ config?: string;
7
+ configPath?: string;
8
+ url?: string;
9
+ mcpUrl?: string;
10
+ llmUrl?: string;
11
+ llmGatewayUrl?: string;
12
+ token?: string;
13
+ apiToken?: string;
14
+ project?: string;
15
+ projectDir?: string;
16
+ scope?: string;
17
+ uvxCommand?: string;
18
+ global?: boolean;
19
+ local?: boolean;
20
+ yes?: boolean;
21
+ };
22
+ export type InstallOptions = {
23
+ client?: string;
24
+ configPath?: string;
25
+ mcpUrl: string;
26
+ llmUrl: string;
27
+ apiToken?: string;
28
+ projectDir: string;
29
+ scope?: string;
30
+ uvxCommand?: string;
31
+ yes: boolean;
32
+ };
33
+ export type ValidatedInstallOptions = Omit<InstallOptions, "client" | "apiToken" | "scope"> & {
34
+ client: InstallClient;
35
+ apiToken: string;
36
+ scope: InstallScope;
37
+ modelCallVersion: ModelCallVersion;
38
+ };
39
+ export type InstallResult = {
40
+ client: InstallClient;
41
+ scope: InstallScope;
42
+ configPath: string;
43
+ skillPaths: string[];
44
+ toolPaths: string[];
45
+ pluginPaths: string[];
46
+ removedToolPaths: string[];
47
+ modelCallVersion: ModelCallVersion;
48
+ uvxCommand?: string;
49
+ };
50
+ export type JsonObject = Record<string, unknown>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function findUvx(): string | undefined;
2
+ export declare function uvxExecutable(): string;
@@ -0,0 +1,33 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ import { commandExists, windowsExecutable } from "./spawn.js";
6
+ // Абсолютный путь важнее найденного в PATH: PATH установщика и PATH процесса
7
+ // OpenCode (запуск из GUI, из IDE) — разные, а uvx обычно лежит в ~/.local/bin.
8
+ export function findUvx() {
9
+ const absolutePath = uvxCandidatePaths()
10
+ .find((candidate) => fs.existsSync(candidate) && commandExists(candidate));
11
+ if (absolutePath) {
12
+ return absolutePath;
13
+ }
14
+ return commandExists(uvxExecutable()) ? uvxExecutable() : undefined;
15
+ }
16
+ export function uvxExecutable() {
17
+ return windowsExecutable("uvx");
18
+ }
19
+ function uvxCandidatePaths() {
20
+ const executable = uvxExecutable();
21
+ const home = os.homedir();
22
+ return [
23
+ path.join(home, ".local", "bin", executable),
24
+ path.join(home, ".cargo", "bin", executable),
25
+ ...(process.platform === "win32"
26
+ ? [
27
+ path.join(home, "AppData", "Roaming", "uv", "bin", executable),
28
+ path.join(home, "AppData", "Local", "uv", "bin", executable),
29
+ ]
30
+ : ["/opt/homebrew/bin/uvx", "/usr/local/bin/uvx"]),
31
+ ];
32
+ }
33
+ //# sourceMappingURL=uvx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uvx.js","sourceRoot":"","sources":["../../src/uvx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAE5D,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,UAAU,OAAO;IACrB,MAAM,YAAY,GAAG,iBAAiB,EAAE;SACrC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC9B,CAAC,CAAC;gBACA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;aAC7D;YACD,CAAC,CAAC,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}