@progmruansilva/omp-web 1.202608.0
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/LICENSE +21 -0
- package/README.md +181 -0
- package/dist/cli.js +1015 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/assets/CodeViewer-Da66baHj.js +4 -0
- package/dist/client/assets/TerminalPanel-Bj9an79F.js +126 -0
- package/dist/client/assets/UnifiedDiffViewer-eK_kynTO.js +34 -0
- package/dist/client/assets/index-DytaeWNd.js +3070 -0
- package/dist/client/assets/vendor-editor-core-CL2gOCIg.js +12 -0
- package/dist/client/assets/vendor-editor-languages-zOM9I4iZ.js +26 -0
- package/dist/client/assets/vendor-editor-legacy-B4QLsWF8.js +1 -0
- package/dist/client/assets/vendor-terminal-DDGTF8rc.css +1 -0
- package/dist/client/assets/vendor-terminal-DjQ08hXu.js +16 -0
- package/dist/client/favicon-16x16.png +0 -0
- package/dist/client/favicon-180x180.png +0 -0
- package/dist/client/favicon-192x192.png +0 -0
- package/dist/client/favicon-32x32.png +0 -0
- package/dist/client/favicon-512x512.png +0 -0
- package/dist/client/favicon.ico +0 -0
- package/dist/client/favicon.png +0 -0
- package/dist/client/favicon.svg +11 -0
- package/dist/client/index.html +67 -0
- package/dist/client/manifest.webmanifest +36 -0
- package/dist/config.js +272 -0
- package/dist/config.js.map +1 -0
- package/dist/docker/ompWebDockerCommandPlan.js +211 -0
- package/dist/docker/ompWebDockerCommandPlan.js.map +1 -0
- package/dist/omp-web-plugins/info/omp-web-plugin.js +51 -0
- package/dist/omp-web-plugins/info/package.json +9 -0
- package/dist/omp-web-plugins/schedule-prompts/omp-web-plugin.js +43 -0
- package/dist/omp-web-plugins/schedule-prompts/package.json +9 -0
- package/dist/omp-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +242 -0
- package/dist/omp-web-plugins/schedule-prompts/types.js +2 -0
- package/dist/omp-web-plugins/updates/omp-web-plugin.js +173 -0
- package/dist/omp-web-plugins/updates/package.json +9 -0
- package/dist/omp-web-plugins/updates/updatesLogic.js +97 -0
- package/dist/ompWebVersionReport.js +217 -0
- package/dist/ompWebVersionReport.js.map +1 -0
- package/dist/plugin-api/unstable.d.ts +22 -0
- package/dist/plugin-api.d.ts +197 -0
- package/dist/server/activity/workspaceActivityRoutes.js +4 -0
- package/dist/server/activity/workspaceActivityRoutes.js.map +1 -0
- package/dist/server/activity/workspaceActivityService.js +98 -0
- package/dist/server/activity/workspaceActivityService.js.map +1 -0
- package/dist/server/app.js +162 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/configRoutes.js +270 -0
- package/dist/server/configRoutes.js.map +1 -0
- package/dist/server/diagnostics/nodePtySpawnHelper.js +130 -0
- package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
- package/dist/server/git/gitEnv.js +15 -0
- package/dist/server/git/gitEnv.js.map +1 -0
- package/dist/server/git/gitService.js +119 -0
- package/dist/server/git/gitService.js.map +1 -0
- package/dist/server/gitRoutes.js +23 -0
- package/dist/server/gitRoutes.js.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/machines/machineClient.js +162 -0
- package/dist/server/machines/machineClient.js.map +1 -0
- package/dist/server/machines/machinePluginProxyRoutes.js +157 -0
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
- package/dist/server/machines/machineProxyRoutes.js +127 -0
- package/dist/server/machines/machineProxyRoutes.js.map +1 -0
- package/dist/server/machines/machineRoutes.js +54 -0
- package/dist/server/machines/machineRoutes.js.map +1 -0
- package/dist/server/machines/machineService.js +230 -0
- package/dist/server/machines/machineService.js.map +1 -0
- package/dist/server/machines/machineStore.js +123 -0
- package/dist/server/machines/machineStore.js.map +1 -0
- package/dist/server/machines/proxyUtils.js +30 -0
- package/dist/server/machines/proxyUtils.js.map +1 -0
- package/dist/server/ompWebPluginService.js +279 -0
- package/dist/server/ompWebPluginService.js.map +1 -0
- package/dist/server/ompWebStatus.js +601 -0
- package/dist/server/ompWebStatus.js.map +1 -0
- package/dist/server/ompWebStatusCache.js +31 -0
- package/dist/server/ompWebStatusCache.js.map +1 -0
- package/dist/server/piPackageRoutes.js +82 -0
- package/dist/server/piPackageRoutes.js.map +1 -0
- package/dist/server/piPackageService.js +65 -0
- package/dist/server/piPackageService.js.map +1 -0
- package/dist/server/projects/directorySuggestions.js +37 -0
- package/dist/server/projects/directorySuggestions.js.map +1 -0
- package/dist/server/projects/projectService.js +31 -0
- package/dist/server/projects/projectService.js.map +1 -0
- package/dist/server/push/PushNotificationService.js +137 -0
- package/dist/server/push/PushNotificationService.js.map +1 -0
- package/dist/server/push/pushRoutes.js +55 -0
- package/dist/server/push/pushRoutes.js.map +1 -0
- package/dist/server/realtime/sessionEventHub.js +39 -0
- package/dist/server/realtime/sessionEventHub.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +61 -0
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
- package/dist/server/sessiond.js +92 -0
- package/dist/server/sessiond.js.map +1 -0
- package/dist/server/sessions/attachmentService.js +112 -0
- package/dist/server/sessions/attachmentService.js.map +1 -0
- package/dist/server/sessions/authProviderOptions.js +52 -0
- package/dist/server/sessions/authProviderOptions.js.map +1 -0
- package/dist/server/sessions/authRoutes.js +59 -0
- package/dist/server/sessions/authRoutes.js.map +1 -0
- package/dist/server/sessions/authService.js +105 -0
- package/dist/server/sessions/authService.js.map +1 -0
- package/dist/server/sessions/builtinCommands.js +29 -0
- package/dist/server/sessions/builtinCommands.js.map +1 -0
- package/dist/server/sessions/editPreview.js +196 -0
- package/dist/server/sessions/editPreview.js.map +1 -0
- package/dist/server/sessions/messagePaging.js +41 -0
- package/dist/server/sessions/messagePaging.js.map +1 -0
- package/dist/server/sessions/oauthLoginFlowService.js +136 -0
- package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +97 -0
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
- package/dist/server/sessions/piSessionService.js +2401 -0
- package/dist/server/sessions/piSessionService.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/schedulePromptService.js +46 -0
- package/dist/server/sessions/schedulePrompt/schedulePromptService.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/scheduler.js +315 -0
- package/dist/server/sessions/schedulePrompt/scheduler.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/storage.js +118 -0
- package/dist/server/sessions/schedulePrompt/storage.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/tool.js +252 -0
- package/dist/server/sessions/schedulePrompt/tool.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/types.js +2 -0
- package/dist/server/sessions/schedulePrompt/types.js.map +1 -0
- package/dist/server/sessions/sessionArchiveStore.js +254 -0
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
- package/dist/server/sessions/sessionArchiveTree.js +35 -0
- package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
- package/dist/server/sessions/sessionCleanup.js +157 -0
- package/dist/server/sessions/sessionCleanup.js.map +1 -0
- package/dist/server/sessions/sessionCommandService.js +260 -0
- package/dist/server/sessions/sessionCommandService.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +61 -0
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +344 -0
- package/dist/server/sessions/sessionRoutes.js.map +1 -0
- package/dist/server/sessions/sessionRuntimeStore.js +2 -0
- package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
- package/dist/server/sessions/spawnSessionTool.js +41 -0
- package/dist/server/sessions/spawnSessionTool.js.map +1 -0
- package/dist/server/sessions/spawnSubsessionTool.js +203 -0
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
- package/dist/server/sessions/spawnTargetResolver.js +36 -0
- package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
- package/dist/server/sessions/subsessionTranscript.js +233 -0
- package/dist/server/sessions/subsessionTranscript.js.map +1 -0
- package/dist/server/storage/projectStore.js +83 -0
- package/dist/server/storage/projectStore.js.map +1 -0
- package/dist/server/terminalProxyRoutes.js +140 -0
- package/dist/server/terminalProxyRoutes.js.map +1 -0
- package/dist/server/terminals/terminalRoutes.js +153 -0
- package/dist/server/terminals/terminalRoutes.js.map +1 -0
- package/dist/server/terminals/terminalService.js +320 -0
- package/dist/server/terminals/terminalService.js.map +1 -0
- package/dist/server/terminals/terminalSize.js +17 -0
- package/dist/server/terminals/terminalSize.js.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils.js +8 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server/webSocketBridge.js +32 -0
- package/dist/server/webSocketBridge.js.map +1 -0
- package/dist/server/workingDirectory.js +44 -0
- package/dist/server/workingDirectory.js.map +1 -0
- package/dist/server/workspaceExplorerRoutes.js +109 -0
- package/dist/server/workspaceExplorerRoutes.js.map +1 -0
- package/dist/server/workspaces/effectivePathAccess.js +27 -0
- package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
- package/dist/server/workspaces/fileContentService.js +181 -0
- package/dist/server/workspaces/fileContentService.js.map +1 -0
- package/dist/server/workspaces/fileSuggestions.js +512 -0
- package/dist/server/workspaces/fileSuggestions.js.map +1 -0
- package/dist/server/workspaces/fileTreeService.js +27 -0
- package/dist/server/workspaces/fileTreeService.js.map +1 -0
- package/dist/server/workspaces/gitWorktreeDiscovery.js +34 -0
- package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -0
- package/dist/server/workspaces/imagePreviewService.js +40 -0
- package/dist/server/workspaces/imagePreviewService.js.map +1 -0
- package/dist/server/workspaces/pathAccessPolicy.js +87 -0
- package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
- package/dist/server/workspaces/pathSafety.js +54 -0
- package/dist/server/workspaces/pathSafety.js.map +1 -0
- package/dist/server/workspaces/projectOmpWebConfig.js +56 -0
- package/dist/server/workspaces/projectOmpWebConfig.js.map +1 -0
- package/dist/server/workspaces/workspaceContext.js +8 -0
- package/dist/server/workspaces/workspaceContext.js.map +1 -0
- package/dist/server/workspaces/workspaceDeletionRoutes.js +111 -0
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
- package/dist/server/workspaces/workspaceService.js +39 -0
- package/dist/server/workspaces/workspaceService.js.map +1 -0
- package/dist/sessiond/config.js +9 -0
- package/dist/sessiond/config.js.map +1 -0
- package/dist/sessiond/sessionDaemonClient.js +65 -0
- package/dist/sessiond/sessionDaemonClient.js.map +1 -0
- package/dist/shared/activity.js +26 -0
- package/dist/shared/activity.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +688 -0
- package/dist/shared/apiTypes.js +11 -0
- package/dist/shared/apiTypes.js.map +1 -0
- package/dist/shared/capabilities.js +52 -0
- package/dist/shared/capabilities.js.map +1 -0
- package/dist/shared/federatedRoutes.js +79 -0
- package/dist/shared/federatedRoutes.js.map +1 -0
- package/dist/shared/machinePluginIds.js +41 -0
- package/dist/shared/machinePluginIds.js.map +1 -0
- package/dist/shared/ompWebStatusParsing.js +100 -0
- package/dist/shared/ompWebStatusParsing.js.map +1 -0
- package/dist/shared/pluginIds.js +5 -0
- package/dist/shared/pluginIds.js.map +1 -0
- package/dist/shared/promptAttachments.js +90 -0
- package/dist/shared/promptAttachments.js.map +1 -0
- package/dist/shared/thinkingLevels.d.ts +19 -0
- package/dist/shared/thinkingLevels.js +24 -0
- package/dist/shared/thinkingLevels.js.map +1 -0
- package/dist/shared/utils.js +4 -0
- package/dist/shared/utils.js.map +1 -0
- package/dist/shared/workspaceDeletion.js +12 -0
- package/dist/shared/workspaceDeletion.js.map +1 -0
- package/dist/shared/workspaceFiles.js +3 -0
- package/dist/shared/workspaceFiles.js.map +1 -0
- package/docs/assets/favicon.svg +11 -0
- package/docs/assets/omp-web-banner.png +0 -0
- package/docs/assets/omp-web-desktop.png +0 -0
- package/docs/assets/omp-web-mobile.png +0 -0
- package/docs/assets/omp-web-tablet.png +0 -0
- package/docs/config.md +208 -0
- package/docs/plugins.md +916 -0
- package/extensions/omp-web.ts +133 -0
- package/install.sh +5 -0
- package/package.json +141 -0
- package/plugin-api/unstable.d.ts +1 -0
- package/plugin-api.d.ts +1 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { effectiveOmpWebConfig } from "./config.js";
|
|
5
|
+
import { SessionDaemonClient } from "./sessiond/sessionDaemonClient.js";
|
|
6
|
+
import { parseOmpWebComponentStatus, parseOmpWebVersionResponse } from "./shared/ompWebStatusParsing.js";
|
|
7
|
+
import { errorMessage, isRecord } from "./server/utils.js";
|
|
8
|
+
const OMP_WEB_PACKAGE_NAME = "@ProgmRuanSilva/omp-web";
|
|
9
|
+
const OMP_WEB_VERSION_TIMEOUT_MS = 2000;
|
|
10
|
+
const OMP_WEB_VERSION_ENDPOINT_PATH = "/api/omp-web/version";
|
|
11
|
+
const OMP_WEB_STATUS_ENDPOINT_PATH = "/api/omp-web/status";
|
|
12
|
+
const DEFAULT_PACKAGE_VERSION = "0.0.0-dev";
|
|
13
|
+
export function packageVersion() {
|
|
14
|
+
return readPackageInfo()?.version ?? DEFAULT_PACKAGE_VERSION;
|
|
15
|
+
}
|
|
16
|
+
export async function printOmpWebVersionReport() {
|
|
17
|
+
console.log("PI WEB version");
|
|
18
|
+
printInstalledPackageVersions();
|
|
19
|
+
printRunningVersionInfo(await collectRunningVersionInfo());
|
|
20
|
+
}
|
|
21
|
+
function packageRootPath() {
|
|
22
|
+
return dirname(dirname(fileURLToPath(import.meta.url)));
|
|
23
|
+
}
|
|
24
|
+
function packageJsonPath() {
|
|
25
|
+
return join(packageRootPath(), "package.json");
|
|
26
|
+
}
|
|
27
|
+
function readPackageInfo() {
|
|
28
|
+
const path = packageJsonPath();
|
|
29
|
+
try {
|
|
30
|
+
return parsePackageInfo(JSON.parse(readFileSync(path, "utf8")), path);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function parsePackageInfo(value, path) {
|
|
37
|
+
if (!isRecord(value))
|
|
38
|
+
return undefined;
|
|
39
|
+
const name = value["name"];
|
|
40
|
+
const version = value["version"];
|
|
41
|
+
if (typeof name !== "string" || name === "" || typeof version !== "string" || version === "")
|
|
42
|
+
return undefined;
|
|
43
|
+
return { name, version, path };
|
|
44
|
+
}
|
|
45
|
+
function webVersionEndpoint() {
|
|
46
|
+
try {
|
|
47
|
+
const { config } = effectiveOmpWebConfig();
|
|
48
|
+
const host = httpClientHost(config.host);
|
|
49
|
+
const port = config.port ?? 8504;
|
|
50
|
+
return { endpoint: `http://${urlHost(host)}:${String(port)}${OMP_WEB_VERSION_ENDPOINT_PATH}` };
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return { error: `could not read PI WEB config: ${errorMessage(error)}` };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function httpClientHost(configuredHost) {
|
|
57
|
+
const host = configuredHost === undefined || configuredHost === "" ? "127.0.0.1" : configuredHost;
|
|
58
|
+
if (host === "0.0.0.0" || host === "::" || host === "[::]")
|
|
59
|
+
return "127.0.0.1";
|
|
60
|
+
return host;
|
|
61
|
+
}
|
|
62
|
+
function urlHost(host) {
|
|
63
|
+
if (host.startsWith("[") || !host.includes(":"))
|
|
64
|
+
return host;
|
|
65
|
+
return `[${host}]`;
|
|
66
|
+
}
|
|
67
|
+
function statusEndpointFor(versionEndpoint) {
|
|
68
|
+
if (!versionEndpoint.endsWith(OMP_WEB_VERSION_ENDPOINT_PATH))
|
|
69
|
+
return versionEndpoint;
|
|
70
|
+
return `${versionEndpoint.slice(0, -OMP_WEB_VERSION_ENDPOINT_PATH.length)}${OMP_WEB_STATUS_ENDPOINT_PATH}`;
|
|
71
|
+
}
|
|
72
|
+
async function fetchOmpWebVersionResponse(endpoint) {
|
|
73
|
+
const response = await fetch(endpoint, {
|
|
74
|
+
headers: { accept: "application/json" },
|
|
75
|
+
signal: AbortSignal.timeout(OMP_WEB_VERSION_TIMEOUT_MS),
|
|
76
|
+
});
|
|
77
|
+
if (!response.ok)
|
|
78
|
+
throw new Error(`HTTP ${String(response.status)}`);
|
|
79
|
+
const parsed = await response.json();
|
|
80
|
+
const status = parseOmpWebVersionResponse(parsed);
|
|
81
|
+
if (status === undefined)
|
|
82
|
+
throw new Error("response did not include PI WEB version information");
|
|
83
|
+
return status;
|
|
84
|
+
}
|
|
85
|
+
async function collectRunningVersionInfo() {
|
|
86
|
+
const endpoint = webVersionEndpoint();
|
|
87
|
+
if (endpoint.endpoint !== undefined) {
|
|
88
|
+
try {
|
|
89
|
+
const status = await fetchOmpWebVersionResponse(endpoint.endpoint);
|
|
90
|
+
return { generatedAt: status.generatedAt, web: status.components.web, sessiond: status.components.sessiond };
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
let webError = `${endpoint.endpoint}: ${errorMessage(error)}`;
|
|
94
|
+
const statusEndpoint = statusEndpointFor(endpoint.endpoint);
|
|
95
|
+
if (statusEndpoint !== endpoint.endpoint && error instanceof Error && error.message === "HTTP 404") {
|
|
96
|
+
try {
|
|
97
|
+
const status = await fetchOmpWebVersionResponse(statusEndpoint);
|
|
98
|
+
return { generatedAt: status.generatedAt, web: status.components.web, sessiond: status.components.sessiond };
|
|
99
|
+
}
|
|
100
|
+
catch (statusError) {
|
|
101
|
+
webError = `${webError}; ${statusEndpoint}: ${errorMessage(statusError)}`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return runningVersionInfoWithSessiondFallback({ webError });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return runningVersionInfoWithSessiondFallback({ webError: endpoint.error ?? "web/API status endpoint unavailable" });
|
|
108
|
+
}
|
|
109
|
+
async function runningVersionInfoWithSessiondFallback(base) {
|
|
110
|
+
const sessiond = await collectRunningSessiondInfo();
|
|
111
|
+
return {
|
|
112
|
+
webError: base.webError,
|
|
113
|
+
...(sessiond.component === undefined ? {} : { sessiond: sessiond.component }),
|
|
114
|
+
...(sessiond.error === undefined ? {} : { sessiondError: sessiond.error }),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
async function collectRunningSessiondInfo() {
|
|
118
|
+
try {
|
|
119
|
+
const response = await withTimeout(new SessionDaemonClient().request("GET", "/health"), OMP_WEB_VERSION_TIMEOUT_MS, "session daemon health check timed out");
|
|
120
|
+
if (response.statusCode < 200 || response.statusCode >= 300)
|
|
121
|
+
throw new Error(`HTTP ${String(response.statusCode)}`);
|
|
122
|
+
const parsed = response.body === "" ? undefined : JSON.parse(response.body);
|
|
123
|
+
const version = isRecord(parsed) ? parsed["version"] : undefined;
|
|
124
|
+
const component = parseOmpWebComponentStatus(version);
|
|
125
|
+
if (component === undefined)
|
|
126
|
+
throw new Error("health response did not include version information");
|
|
127
|
+
return { component };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return { error: errorMessage(error) };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function withTimeout(promise, timeoutMs, timeoutMessage) {
|
|
134
|
+
let timeout;
|
|
135
|
+
try {
|
|
136
|
+
return await Promise.race([
|
|
137
|
+
promise,
|
|
138
|
+
new Promise((_, reject) => {
|
|
139
|
+
timeout = setTimeout(() => {
|
|
140
|
+
reject(new Error(timeoutMessage));
|
|
141
|
+
}, timeoutMs);
|
|
142
|
+
}),
|
|
143
|
+
]);
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
if (timeout !== undefined)
|
|
147
|
+
clearTimeout(timeout);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function printInstalledPackageVersions() {
|
|
151
|
+
const info = readPackageInfo();
|
|
152
|
+
console.log("Installed packages:");
|
|
153
|
+
if (info === undefined) {
|
|
154
|
+
console.log(`? ${OMP_WEB_PACKAGE_NAME}: unknown`);
|
|
155
|
+
console.log(` missing package metadata: ${packageJsonPath()}`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
console.log(`✓ ${info.name}: ${info.version}`);
|
|
159
|
+
console.log(` ${info.path}`);
|
|
160
|
+
}
|
|
161
|
+
function printRunningVersionInfo(info) {
|
|
162
|
+
console.log("Running services:");
|
|
163
|
+
if (info.web === undefined)
|
|
164
|
+
printUnavailableComponent("Web/UI", info.webError);
|
|
165
|
+
else
|
|
166
|
+
printComponentVersion(info.web);
|
|
167
|
+
if (info.sessiond === undefined)
|
|
168
|
+
printUnavailableComponent("Session daemon", info.sessiondError);
|
|
169
|
+
else
|
|
170
|
+
printComponentVersion(info.sessiond);
|
|
171
|
+
if (info.generatedAt !== undefined)
|
|
172
|
+
console.log(` reported by web/API at ${info.generatedAt}`);
|
|
173
|
+
}
|
|
174
|
+
function printComponentVersion(component) {
|
|
175
|
+
const icon = component.available ? component.stale ? "!" : "✓" : "?";
|
|
176
|
+
const status = !component.available ? "unavailable" : component.stale ? "restart needed" : "current";
|
|
177
|
+
console.log(`${icon} ${component.label}: ${status}`);
|
|
178
|
+
if (component.available || component.runtimeVersion !== undefined || component.installedVersion !== undefined) {
|
|
179
|
+
console.log(` running: ${formatVersion(component.runtimeVersion)}; installed: ${formatVersion(component.installedVersion)}`);
|
|
180
|
+
}
|
|
181
|
+
const installation = installationLabel(component.installation);
|
|
182
|
+
if (installation !== undefined)
|
|
183
|
+
console.log(` installation: ${installation}`);
|
|
184
|
+
if (component.error !== undefined)
|
|
185
|
+
console.log(` ${component.error}`);
|
|
186
|
+
}
|
|
187
|
+
function printUnavailableComponent(label, error) {
|
|
188
|
+
console.log(`? ${label}: unavailable`);
|
|
189
|
+
if (error !== undefined && error !== "")
|
|
190
|
+
console.log(` ${error}`);
|
|
191
|
+
}
|
|
192
|
+
function installationLabel(installation) {
|
|
193
|
+
if (installation === undefined)
|
|
194
|
+
return undefined;
|
|
195
|
+
if (installation.kind === "pi-package") {
|
|
196
|
+
const source = installation.source ?? "Pi package";
|
|
197
|
+
const scope = installation.scope === undefined ? "" : ` · ${installation.scope}`;
|
|
198
|
+
const path = installation.path === undefined ? "" : ` · ${installation.path}`;
|
|
199
|
+
return `${source}${scope}${path}`;
|
|
200
|
+
}
|
|
201
|
+
if (installation.kind === "npm-global") {
|
|
202
|
+
const npmRoot = installation.npmRoot === undefined ? "" : ` · ${installation.npmRoot}`;
|
|
203
|
+
const path = installation.path === undefined ? "" : ` · ${installation.path}`;
|
|
204
|
+
return `global npm package${npmRoot}${path}`;
|
|
205
|
+
}
|
|
206
|
+
if (installation.kind === "local")
|
|
207
|
+
return installation.path === undefined ? "local checkout" : `local checkout · ${installation.path}`;
|
|
208
|
+
if (installation.kind === "docker") {
|
|
209
|
+
const mode = installation.dockerMode === "dev" ? "Docker development runtime" : "Docker runtime";
|
|
210
|
+
return installation.path === undefined ? mode : `${mode} · ${installation.path}`;
|
|
211
|
+
}
|
|
212
|
+
return installation.path === undefined ? "installation unknown" : `installation unknown · ${installation.path}`;
|
|
213
|
+
}
|
|
214
|
+
function formatVersion(version) {
|
|
215
|
+
return version === undefined || version === "" ? "unknown" : version;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=ompWebVersionReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ompWebVersionReport.js","sourceRoot":"","sources":["../src/ompWebVersionReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AACvD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AACxC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AAC7D,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAC3D,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAgB5C,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,EAAE,EAAE,OAAO,IAAI,uBAAuB,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,6BAA6B,EAAE,CAAC;IAChC,uBAAuB,CAAC,MAAM,yBAAyB,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,IAAY;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,6BAA6B,EAAE,EAAE,CAAC;IACjG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,iCAAiC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,cAAkC;IACxD,MAAM,IAAI,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;IAClG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,IAAI,IAAI,GAAG,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAuB;IAChD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAAE,OAAO,eAAe,CAAC;IACrF,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC,GAAG,4BAA4B,EAAE,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC;KACxD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,yBAAyB;IACtC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,QAAQ,GAAG,GAAG,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,cAAc,KAAK,QAAQ,CAAC,QAAQ,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACnG,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,cAAc,CAAC,CAAC;oBAChE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC/G,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,QAAQ,GAAG,GAAG,QAAQ,KAAK,cAAc,KAAK,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5E,CAAC;YACH,CAAC;YACD,OAAO,sCAAsC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,sCAAsC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,qCAAqC,EAAE,CAAC,CAAC;AACvH,CAAC;AAED,KAAK,UAAU,sCAAsC,CAAC,IAA0B;IAC9E,MAAM,QAAQ,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACpD,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC7E,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,IAAI,mBAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EACnD,0BAA0B,EAC1B,uCAAuC,CACxC,CAAC;QACF,IAAI,QAAQ,CAAC,UAAU,GAAG,GAAG,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpH,MAAM,MAAM,GAAY,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,MAAM,SAAS,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpG,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,cAAsB;IAC1F,IAAI,OAAkD,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,OAAO;YACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC3B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;gBACpC,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAGD,SAAS,6BAA6B;IACpC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,oBAAoB,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,+BAA+B,eAAe,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAwB;IACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAC1E,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;QAC5F,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAgC;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrE,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,IAAI,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9G,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC/E,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa,EAAE,KAAyB;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAgD;IACzE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC;QACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QACjF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QACvF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,qBAAqB,OAAO,GAAG,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,YAAY,CAAC,IAAI,EAAE,CAAC;IACvI,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjG,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0BAA0B,YAAY,CAAC,IAAI,EAAE,CAAC;AAClH,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TerminalCommandRun, TerminalCommandRunFilter, TerminalCommandRunHandle, Workspace, WorkspaceTerminalCommandInput } from "../plugin-api.js";
|
|
2
|
+
export interface UnstableRunTerminalCommandInput extends WorkspaceTerminalCommandInput {
|
|
3
|
+
workspace: Workspace;
|
|
4
|
+
}
|
|
5
|
+
export interface UnstableTerminalCommandRunsRuntime {
|
|
6
|
+
runCommand(input: UnstableRunTerminalCommandInput): Promise<TerminalCommandRunHandle>;
|
|
7
|
+
listCommandRuns(filter?: TerminalCommandRunFilter): Promise<TerminalCommandRun[]>;
|
|
8
|
+
getCommandRun(runId: string): Promise<TerminalCommandRun | undefined>;
|
|
9
|
+
open(options?: {
|
|
10
|
+
terminalId?: string | undefined;
|
|
11
|
+
}): void;
|
|
12
|
+
}
|
|
13
|
+
export interface UnstableRuntimeCapabilities {
|
|
14
|
+
terminalCommandRuns: UnstableTerminalCommandRunsRuntime;
|
|
15
|
+
openSettings?: (section?: string) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface UnstablePluginRuntimeContext {
|
|
18
|
+
ompWebUnstable?: UnstableRuntimeCapabilities;
|
|
19
|
+
}
|
|
20
|
+
export interface UnstableWorkspacePanelContext {
|
|
21
|
+
ompWebUnstable?: Pick<UnstableRuntimeCapabilities, "terminalCommandRuns">;
|
|
22
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import type { TemplateResult } from "lit";
|
|
2
|
+
import type { FileContentResponse, MachineKind, OmpWebStatusResponse, TerminalCommandRunHandle, WriteWorkspaceFileOptions, WriteWorkspaceFileResponse, DeleteWorkspaceFileResponse, MoveWorkspaceFileOptions, MoveWorkspaceFileResponse } from "./shared/apiTypes.js";
|
|
3
|
+
export type { FileContentMediaType, FileContentResponse, FileTreeEntry, FileTreeResponse, MachineKind, OmpWebComponentStatus, OmpWebDockerMode, OmpWebInstallationInfo, OmpWebInstallationKind, OmpWebReleaseStatus, OmpWebServiceComponent, OmpWebStatusMessage, OmpWebStatusResponse, OmpWebStatusSeverity, OmpWebVersionResponse, TerminalCommandRun, TerminalCommandRunFilter, TerminalCommandRunHandle, TerminalCommandRunStatus, WriteWorkspaceFileOptions, WriteWorkspaceFileResponse, DeleteWorkspaceFileResponse, MoveWorkspaceFileOptions, MoveWorkspaceFileResponse, } from "./shared/apiTypes.js";
|
|
4
|
+
export type PluginId = string;
|
|
5
|
+
export type LocalContributionId = string;
|
|
6
|
+
export type QualifiedContributionId = string;
|
|
7
|
+
export type HtmlTemplateTag = (strings: TemplateStringsArray, ...values: unknown[]) => TemplateResult;
|
|
8
|
+
export type SvgTemplateTag = (strings: TemplateStringsArray, ...values: unknown[]) => TemplateResult;
|
|
9
|
+
export interface OmpWebPlugin {
|
|
10
|
+
apiVersion: 1;
|
|
11
|
+
name: string;
|
|
12
|
+
activate: (context: PluginActivationContext) => PluginActivationResult;
|
|
13
|
+
}
|
|
14
|
+
export interface PluginActivationContext {
|
|
15
|
+
apiVersion: 1;
|
|
16
|
+
pluginId: PluginId;
|
|
17
|
+
html: HtmlTemplateTag;
|
|
18
|
+
svg: SvgTemplateTag;
|
|
19
|
+
}
|
|
20
|
+
export interface PluginActivationResult {
|
|
21
|
+
contributions: PluginContributions;
|
|
22
|
+
}
|
|
23
|
+
export interface PluginContributions {
|
|
24
|
+
actions?: PluginAction[];
|
|
25
|
+
workspacePanels?: WorkspacePanelContribution[];
|
|
26
|
+
workspaceLabels?: WorkspaceLabelContribution[];
|
|
27
|
+
themes?: ThemeContribution[];
|
|
28
|
+
themePairs?: ThemePairContribution[];
|
|
29
|
+
}
|
|
30
|
+
export interface PluginMachine {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
kind: MachineKind;
|
|
34
|
+
}
|
|
35
|
+
export interface PluginRuntimeState {
|
|
36
|
+
selectedWorkspace?: Workspace;
|
|
37
|
+
selectedSession?: unknown;
|
|
38
|
+
workspaceTool?: string;
|
|
39
|
+
mainView?: string;
|
|
40
|
+
ompWebStatus?: OmpWebStatusResponse;
|
|
41
|
+
}
|
|
42
|
+
export interface PluginPromptEditor {
|
|
43
|
+
/** Insert text at the current cursor position. Replaces any selection.
|
|
44
|
+
* If the editor is not focused, focuses it first.
|
|
45
|
+
* No-op if the editor is not mounted. */
|
|
46
|
+
insertText(text: string): void;
|
|
47
|
+
/** Get the current prompt text content. Returns "" if the editor is not mounted. */
|
|
48
|
+
getText(): string;
|
|
49
|
+
/** Get the current selection range, or null if no selection or editor not mounted. */
|
|
50
|
+
getSelection(): {
|
|
51
|
+
start: number;
|
|
52
|
+
end: number;
|
|
53
|
+
text: string;
|
|
54
|
+
} | null;
|
|
55
|
+
}
|
|
56
|
+
export interface PluginRuntimeContext {
|
|
57
|
+
state: PluginRuntimeState;
|
|
58
|
+
prompt: PluginPromptEditor;
|
|
59
|
+
openActionPalette: () => void;
|
|
60
|
+
focusPrompt: () => void;
|
|
61
|
+
addProject: () => void | Promise<void>;
|
|
62
|
+
configureAuth: () => void | Promise<void>;
|
|
63
|
+
logoutAuth: () => void | Promise<void>;
|
|
64
|
+
openThemePicker: () => void;
|
|
65
|
+
selectMainView: (view: string) => void;
|
|
66
|
+
selectWorkspaceTool: (tool: QualifiedContributionId) => void;
|
|
67
|
+
openTerminal: (options?: {
|
|
68
|
+
terminalId?: string | undefined;
|
|
69
|
+
}) => void;
|
|
70
|
+
refreshFiles: () => void | Promise<void>;
|
|
71
|
+
refreshGit: () => void | Promise<void>;
|
|
72
|
+
refreshAppData: () => void | Promise<void>;
|
|
73
|
+
reloadPage: () => void;
|
|
74
|
+
startSession: () => void | Promise<void>;
|
|
75
|
+
archiveSession: () => void | Promise<void>;
|
|
76
|
+
stopActiveWork: () => void | Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
export interface PluginAction {
|
|
79
|
+
id: LocalContributionId;
|
|
80
|
+
title: string;
|
|
81
|
+
description?: string;
|
|
82
|
+
shortcut?: string;
|
|
83
|
+
group?: string;
|
|
84
|
+
enabled?: (context: PluginRuntimeContext) => boolean;
|
|
85
|
+
/** Explain why a disabled action is visible but unavailable. */
|
|
86
|
+
disabledReason?: (context: PluginRuntimeContext) => string | undefined;
|
|
87
|
+
run: (context: PluginRuntimeContext) => void | Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export interface Workspace {
|
|
90
|
+
id: string;
|
|
91
|
+
projectId: string;
|
|
92
|
+
path: string;
|
|
93
|
+
label: string;
|
|
94
|
+
branch?: string;
|
|
95
|
+
isMain: boolean;
|
|
96
|
+
isGitRepo: boolean;
|
|
97
|
+
isGitWorktree: boolean;
|
|
98
|
+
}
|
|
99
|
+
export interface WorkspaceFiles {
|
|
100
|
+
/** Read a file from the workspace. Works for local and federated machines. */
|
|
101
|
+
readFile(path: string): Promise<FileContentResponse>;
|
|
102
|
+
/** Write content to a workspace file. Creates intermediate directories by default.
|
|
103
|
+
* Works for local and federated machines. Auto-refreshes the file explorer after success. */
|
|
104
|
+
writeFile(path: string, content: string | Uint8Array, options?: WriteWorkspaceFileOptions): Promise<WriteWorkspaceFileResponse>;
|
|
105
|
+
/** Delete a file from the workspace. Idempotent — returns { existed: false } if file doesn't exist.
|
|
106
|
+
* Deletes the entry itself (for symlinks, removes the symlink not the target). */
|
|
107
|
+
deleteFile(path: string): Promise<DeleteWorkspaceFileResponse>;
|
|
108
|
+
/** Move or rename a file within the workspace. Unix mv semantics.
|
|
109
|
+
* Default overwrite: false (safer than writeFile). Auto-refreshes the file explorer after success. */
|
|
110
|
+
moveFile(fromPath: string, toPath: string, options?: MoveWorkspaceFileOptions): Promise<MoveWorkspaceFileResponse>;
|
|
111
|
+
}
|
|
112
|
+
export type WorkspacePanelFiles = WorkspaceFiles;
|
|
113
|
+
export interface WorkspaceHost {
|
|
114
|
+
requestRender(): void;
|
|
115
|
+
}
|
|
116
|
+
export type WorkspacePanelHost = WorkspaceHost;
|
|
117
|
+
export interface WorkspaceContext {
|
|
118
|
+
machine: PluginMachine;
|
|
119
|
+
workspace: Workspace;
|
|
120
|
+
state?: PluginRuntimeState;
|
|
121
|
+
files: WorkspaceFiles;
|
|
122
|
+
host: WorkspaceHost;
|
|
123
|
+
}
|
|
124
|
+
export interface WorkspaceTerminalCommandInput {
|
|
125
|
+
title: string;
|
|
126
|
+
command: string;
|
|
127
|
+
metadata?: Record<string, string>;
|
|
128
|
+
open?: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface WorkspacePanelTerminal {
|
|
131
|
+
open(options?: {
|
|
132
|
+
terminalId?: string | undefined;
|
|
133
|
+
}): void;
|
|
134
|
+
runCommand(input: WorkspaceTerminalCommandInput): Promise<TerminalCommandRunHandle>;
|
|
135
|
+
}
|
|
136
|
+
export interface WorkspacePanelContext extends WorkspaceContext {
|
|
137
|
+
prompt: PluginPromptEditor;
|
|
138
|
+
terminal: WorkspacePanelTerminal;
|
|
139
|
+
}
|
|
140
|
+
export type WorkspacePanelIcon = TemplateResult;
|
|
141
|
+
export interface WorkspacePanelContribution {
|
|
142
|
+
id: LocalContributionId;
|
|
143
|
+
title: string;
|
|
144
|
+
icon?: WorkspacePanelIcon;
|
|
145
|
+
order?: number;
|
|
146
|
+
visible?: (context: WorkspacePanelContext) => boolean;
|
|
147
|
+
badge?: (context: WorkspacePanelContext) => string | number | TemplateResult | undefined;
|
|
148
|
+
render: (context: WorkspacePanelContext) => TemplateResult;
|
|
149
|
+
}
|
|
150
|
+
export interface WorkspaceLabelContext extends WorkspaceContext {
|
|
151
|
+
machine: PluginMachine;
|
|
152
|
+
workspace: Workspace;
|
|
153
|
+
state?: PluginRuntimeState;
|
|
154
|
+
files: WorkspaceFiles;
|
|
155
|
+
host: WorkspaceHost;
|
|
156
|
+
}
|
|
157
|
+
export type WorkspaceLabelItem = WorkspaceLabelTextItem | WorkspaceLabelLinkItem | WorkspaceLabelRenderItem;
|
|
158
|
+
export interface WorkspaceLabelTextItem {
|
|
159
|
+
type: "text";
|
|
160
|
+
text: string;
|
|
161
|
+
title?: string;
|
|
162
|
+
}
|
|
163
|
+
export interface WorkspaceLabelLinkItem {
|
|
164
|
+
type: "link";
|
|
165
|
+
text: string;
|
|
166
|
+
href: string;
|
|
167
|
+
title?: string;
|
|
168
|
+
target?: "_blank" | "_self";
|
|
169
|
+
}
|
|
170
|
+
export interface WorkspaceLabelRenderItem {
|
|
171
|
+
type: "render";
|
|
172
|
+
render: () => TemplateResult;
|
|
173
|
+
}
|
|
174
|
+
export interface WorkspaceLabelContribution {
|
|
175
|
+
id: LocalContributionId;
|
|
176
|
+
order?: number;
|
|
177
|
+
visible?: (context: WorkspaceLabelContext) => boolean;
|
|
178
|
+
items: (context: WorkspaceLabelContext) => WorkspaceLabelItem[];
|
|
179
|
+
}
|
|
180
|
+
export type ThemeColorScheme = "dark" | "light";
|
|
181
|
+
export type ThemeTokens = Record<string, string>;
|
|
182
|
+
export interface ThemeContribution {
|
|
183
|
+
id: LocalContributionId;
|
|
184
|
+
name: string;
|
|
185
|
+
description?: string;
|
|
186
|
+
order?: number;
|
|
187
|
+
colorScheme: ThemeColorScheme;
|
|
188
|
+
tokens: ThemeTokens;
|
|
189
|
+
}
|
|
190
|
+
export interface ThemePairContribution {
|
|
191
|
+
id: LocalContributionId;
|
|
192
|
+
name: string;
|
|
193
|
+
description?: string;
|
|
194
|
+
order?: number;
|
|
195
|
+
light: LocalContributionId;
|
|
196
|
+
dark: LocalContributionId;
|
|
197
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceActivityRoutes.js","sourceRoot":"","sources":["../../../src/server/activity/workspaceActivityRoutes.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,+BAA+B,CAAC,GAAoB,EAAE,QAAuC,EAAE,MAAM,GAAG,EAAE;IACxH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { isSessionActive, isWorkspaceActivityActive } from "../../shared/activity.js";
|
|
2
|
+
export class WorkspaceActivityService {
|
|
3
|
+
constructor(publisher) {
|
|
4
|
+
this.publisher = publisher;
|
|
5
|
+
this.sessions = new Map();
|
|
6
|
+
this.terminals = new Map();
|
|
7
|
+
}
|
|
8
|
+
applySessionStatus(cwd, status) {
|
|
9
|
+
const previousCwd = this.sessions.get(status.sessionId)?.cwd;
|
|
10
|
+
const record = this.sessions.get(status.sessionId) ?? { cwd };
|
|
11
|
+
record.cwd = cwd;
|
|
12
|
+
record.status = status;
|
|
13
|
+
if (!isSessionActive(status) && record.activity?.phase === "active")
|
|
14
|
+
delete record.activity;
|
|
15
|
+
this.sessions.set(status.sessionId, record);
|
|
16
|
+
this.pruneIdleSession(status.sessionId);
|
|
17
|
+
this.publishChangedCwds(previousCwd, cwd);
|
|
18
|
+
}
|
|
19
|
+
applySessionActivity(cwd, activity) {
|
|
20
|
+
const previousCwd = this.sessions.get(activity.sessionId)?.cwd;
|
|
21
|
+
const record = this.sessions.get(activity.sessionId) ?? { cwd };
|
|
22
|
+
record.cwd = cwd;
|
|
23
|
+
record.activity = activity;
|
|
24
|
+
this.sessions.set(activity.sessionId, record);
|
|
25
|
+
this.pruneIdleSession(activity.sessionId);
|
|
26
|
+
this.publishChangedCwds(previousCwd, cwd);
|
|
27
|
+
}
|
|
28
|
+
removeSession(sessionId, cwd) {
|
|
29
|
+
const previousCwd = this.sessions.get(sessionId)?.cwd ?? cwd;
|
|
30
|
+
this.sessions.delete(sessionId);
|
|
31
|
+
this.publishCwd(previousCwd);
|
|
32
|
+
}
|
|
33
|
+
reconcileSessionActivity(cwd, sessionIds) {
|
|
34
|
+
const knownSessionIds = new Set(sessionIds);
|
|
35
|
+
let changed = false;
|
|
36
|
+
for (const [sessionId, record] of this.sessions.entries()) {
|
|
37
|
+
if (record.cwd !== cwd || knownSessionIds.has(sessionId))
|
|
38
|
+
continue;
|
|
39
|
+
this.sessions.delete(sessionId);
|
|
40
|
+
changed = true;
|
|
41
|
+
}
|
|
42
|
+
if (changed)
|
|
43
|
+
this.publishCwd(cwd);
|
|
44
|
+
}
|
|
45
|
+
updateTerminal(terminal) {
|
|
46
|
+
const previousCwd = this.terminals.get(terminal.id)?.cwd;
|
|
47
|
+
if (terminal.exited)
|
|
48
|
+
this.terminals.delete(terminal.id);
|
|
49
|
+
else
|
|
50
|
+
this.terminals.set(terminal.id, { cwd: terminal.cwd });
|
|
51
|
+
this.publishChangedCwds(previousCwd, terminal.cwd);
|
|
52
|
+
}
|
|
53
|
+
removeTerminal(terminalId, cwd) {
|
|
54
|
+
const previousCwd = this.terminals.get(terminalId)?.cwd ?? cwd;
|
|
55
|
+
this.terminals.delete(terminalId);
|
|
56
|
+
this.publishCwd(previousCwd);
|
|
57
|
+
}
|
|
58
|
+
snapshot() {
|
|
59
|
+
return {
|
|
60
|
+
workspaces: this.activeCwds().map((cwd) => this.summaryForCwd(cwd)).filter(isWorkspaceActivityActive),
|
|
61
|
+
generatedAt: new Date().toISOString(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
pruneIdleSession(sessionId) {
|
|
65
|
+
const record = this.sessions.get(sessionId);
|
|
66
|
+
if (record !== undefined && !isSessionActive(record.status, record.activity))
|
|
67
|
+
this.sessions.delete(sessionId);
|
|
68
|
+
}
|
|
69
|
+
publishChangedCwds(previousCwd, cwd) {
|
|
70
|
+
this.publishCwd(previousCwd);
|
|
71
|
+
if (previousCwd !== cwd)
|
|
72
|
+
this.publishCwd(cwd);
|
|
73
|
+
}
|
|
74
|
+
publishCwd(cwd) {
|
|
75
|
+
if (cwd === undefined || cwd === "")
|
|
76
|
+
return;
|
|
77
|
+
this.publisher?.publishRealtime({ type: "workspace.activity", activity: this.summaryForCwd(cwd) });
|
|
78
|
+
}
|
|
79
|
+
activeCwds() {
|
|
80
|
+
const cwds = new Set();
|
|
81
|
+
for (const record of this.sessions.values()) {
|
|
82
|
+
if (isSessionActive(record.status, record.activity))
|
|
83
|
+
cwds.add(record.cwd);
|
|
84
|
+
}
|
|
85
|
+
for (const record of this.terminals.values())
|
|
86
|
+
cwds.add(record.cwd);
|
|
87
|
+
return [...cwds].sort((a, b) => a.localeCompare(b));
|
|
88
|
+
}
|
|
89
|
+
summaryForCwd(cwd) {
|
|
90
|
+
return {
|
|
91
|
+
cwd,
|
|
92
|
+
hasSessionActivity: [...this.sessions.values()].some((record) => record.cwd === cwd && isSessionActive(record.status, record.activity)),
|
|
93
|
+
hasTerminalActivity: [...this.terminals.values()].some((terminal) => terminal.cwd === cwd),
|
|
94
|
+
updatedAt: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=workspaceActivityService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceActivityService.js","sourceRoot":"","sources":["../../../src/server/activity/workspaceActivityService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAiBtF,MAAM,OAAO,wBAAwB;IAInC,YAA6B,SAAsC;QAAtC,cAAS,GAAT,SAAS,CAA6B;QAHlD,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5C,cAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEO,CAAC;IAEvE,kBAAkB,CAAC,GAAW,EAAE,MAAqB;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QAC9D,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,oBAAoB,CAAC,GAAW,EAAE,QAAyB;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QAChE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,GAAY;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,wBAAwB,CAAC,GAAW,EAAE,UAA4B;QAChE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,cAAc,CAAC,QAAqD;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;QACzD,IAAI,QAAQ,CAAC,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;YACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,cAAc,CAAC,UAAkB,EAAE,GAAY;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC;YACrG,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,SAAiB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChH,CAAC;IAEO,kBAAkB,CAAC,WAA+B,EAAE,GAAW;QACrE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,WAAW,KAAK,GAAG;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,UAAU,CAAC,GAAuB;QACxC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO;QAC5C,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAEO,UAAU;QAChB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,OAAO;YACL,GAAG;YACH,kBAAkB,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvI,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC;YAC1F,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF"}
|