termdock 1.4.128 → 1.4.129
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/.desktop-dist/main.js +78 -7
- package/dist/client/assets/{ModelPreview-Ki--VGiC.js → ModelPreview-DA71QiMN.js} +1 -1
- package/dist/client/assets/{abnfDiagram-VRR7QNED-_MScG92N.js → abnfDiagram-VRR7QNED-vwQxXhvY.js} +1 -1
- package/dist/client/assets/{arc-t9qRCmSV.js → arc-KcBV2d81.js} +1 -1
- package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-sFlMCTBw.js → architectureDiagram-ZJ3FMSHR-BKm_EWca.js} +1 -1
- package/dist/client/assets/{blockDiagram-677ZJIJ3-ssxX4KkU.js → blockDiagram-677ZJIJ3-DAQx8c-B.js} +1 -1
- package/dist/client/assets/{c4Diagram-LMCZKHZV-BCz5LtTX.js → c4Diagram-LMCZKHZV-BeYeekky.js} +1 -1
- package/dist/client/assets/channel-jqLwHPeC.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-CDimwARA.js → chunk-2Q5K7J3B-DHqXZZU-.js} +1 -1
- package/dist/client/assets/{chunk-32BRIVSS-CDmUf83L.js → chunk-32BRIVSS-D1m2Benc.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-DLtTCYUg.js → chunk-5VM5RSS4-CtOKKO1w.js} +1 -1
- package/dist/client/assets/{chunk-EX3LRPZG-w_FWq-tH.js → chunk-EX3LRPZG-CXjhbuNm.js} +1 -1
- package/dist/client/assets/{chunk-JWPE2WC7-B0zV1WOe.js → chunk-JWPE2WC7-C0Zq6OdN.js} +1 -1
- package/dist/client/assets/{chunk-MOJQB5TN-C2VFDFd0.js → chunk-MOJQB5TN-BlkCCLDm.js} +1 -1
- package/dist/client/assets/{chunk-RYQCIY6F-BaaZmXwK.js → chunk-RYQCIY6F-Cz6TWAav.js} +1 -1
- package/dist/client/assets/{chunk-V7JOEXUC-p5cKhdl6.js → chunk-V7JOEXUC-DhLyQr8d.js} +1 -1
- package/dist/client/assets/{chunk-VR4S4FIN-DzfT9at0.js → chunk-VR4S4FIN-DSnFyHH_.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-C1zTdwEh.js → chunk-XXDRQBXY-C2ISI6ro.js} +1 -1
- package/dist/client/assets/classDiagram-OUVF2IWQ-DFjGJuxW.js +1 -0
- package/dist/client/assets/classDiagram-v2-EOCWNBFH-DFjGJuxW.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-BGHVpXFF.js → cose-bilkent-JH36ORCC-DQVr0EsM.js} +1 -1
- package/dist/client/assets/{cynefin-VYW2F7L2-BwZxg1VK.js → cynefin-VYW2F7L2-BP6p28mL.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-TSTJHNR4-D49XyIFA.js → cynefinDiagram-TSTJHNR4-CPUSyMuB.js} +1 -1
- package/dist/client/assets/{dagre-VKFMJZFB-DXoRuv6O.js → dagre-VKFMJZFB-C_zQd2eB.js} +1 -1
- package/dist/client/assets/{diagram-FQU43EPY-D0vgZCfK.js → diagram-FQU43EPY-RkUQLZyi.js} +1 -1
- package/dist/client/assets/{diagram-G47NLZAW-9K9fR0Z0.js → diagram-G47NLZAW-CtjAPFXS.js} +1 -1
- package/dist/client/assets/{diagram-NH7WQ7WH-CIIC3eUC.js → diagram-NH7WQ7WH-C5xtKZ-W.js} +1 -1
- package/dist/client/assets/{diagram-OA4YK3LP-CA3Uw6Ea.js → diagram-OA4YK3LP-CrbMkTb7.js} +1 -1
- package/dist/client/assets/{diagram-WEI45ONY-dhaSf1fa.js → diagram-WEI45ONY-DAF4URgC.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-CCIWWBDH-0bWc11Yz.js → ebnfDiagram-CCIWWBDH-ni71VSx1.js} +1 -1
- package/dist/client/assets/{erDiagram-Q63AITRT-C4FPyL3a.js → erDiagram-Q63AITRT-DODYotxF.js} +1 -1
- package/dist/client/assets/{flowDiagram-23GEKE2U-DXY0Jxj_.js → flowDiagram-23GEKE2U-CN1Vp7G4.js} +1 -1
- package/dist/client/assets/{ganttDiagram-NO4QXBWP-RPMjjnRd.js → ganttDiagram-NO4QXBWP-DoVPMnyV.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-Bf4HUqTl.js → gitGraphDiagram-IHSO6WYX-jiV9FRlU.js} +1 -1
- package/dist/client/assets/{index-D75wYB98.js → index-DPj6Kass.js} +4 -4
- package/dist/client/assets/{infoDiagram-FWYZ7A6U-ZqP7Ocf3.js → infoDiagram-FWYZ7A6U-Bk78PinY.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-BzdFAcyT.js → ishikawaDiagram-FXEZZL3T-C3lsh4Lh.js} +1 -1
- package/dist/client/assets/{journeyDiagram-5HDEW3XC-BfSvMq6y.js → journeyDiagram-5HDEW3XC-CHLuYRBt.js} +1 -1
- package/dist/client/assets/{kanban-definition-HUTT4EX6-Dpf9hCl5.js → kanban-definition-HUTT4EX6-UXjM1jpV.js} +1 -1
- package/dist/client/assets/{linear-ZmI28AZz.js → linear-BKUyrWyw.js} +1 -1
- package/dist/client/assets/{mermaid.core-BTzHsVSr.js → mermaid.core-Bhj0Bx21.js} +4 -4
- package/dist/client/assets/{mindmap-definition-LN4V7U3C-By5Ie3jN.js → mindmap-definition-LN4V7U3C-Dxv1Vfld.js} +1 -1
- package/dist/client/assets/{pegDiagram-2B236MQR--NolZ5bc.js → pegDiagram-2B236MQR-DYZ4d5zF.js} +1 -1
- package/dist/client/assets/{pieDiagram-ENE6RG2P-DI-Y6Yz-.js → pieDiagram-ENE6RG2P-BoId8qhV.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-DYnBddBB.js → quadrantDiagram-ABIIQ3AL-sswrNp8d.js} +1 -1
- package/dist/client/assets/{railroadDiagram-RFXS5EU6-DOOkdA8K.js → railroadDiagram-RFXS5EU6-BfYV2CjC.js} +1 -1
- package/dist/client/assets/{requirementDiagram-TGXJPOKE-BO_adPJj.js → requirementDiagram-TGXJPOKE-DZhZPZVt.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-HTMAVEWB-LVYAe84b.js → sankeyDiagram-HTMAVEWB-DXKoOi7e.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-DAkGCs0T.js → sequenceDiagram-DBY2YBRQ-CpulK2HV.js} +1 -1
- package/dist/client/assets/{sizeCapture-X5ZJPWSS-CszARDsf.js → sizeCapture-X5ZJPWSS-D-mlzS9r.js} +1 -1
- package/dist/client/assets/{stateDiagram-2N3HPSRC-DUs3aedx.js → stateDiagram-2N3HPSRC-l_ydCaW0.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-6OUMAXLB-Gh5mC4sm.js +1 -0
- package/dist/client/assets/{swimlanes-5IMT3BWC-Duig5jF-.js → swimlanes-5IMT3BWC-eEUQLyov.js} +2 -2
- package/dist/client/assets/swimlanesDiagram-G3AALYLV-CFuSbo_y.js +8 -0
- package/dist/client/assets/{timeline-definition-FHXFAJF6-BKW9IU-6.js → timeline-definition-FHXFAJF6-Bu7sztn9.js} +1 -1
- package/dist/client/assets/{vennDiagram-L72KCM5P-Cet4IXwa.js → vennDiagram-L72KCM5P-Bat45ZW0.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-EHGQE667-DgoE-0pr.js → wardleyDiagram-EHGQE667-Bxn0-4Oq.js} +1 -1
- package/dist/client/assets/{xychartDiagram-FW5EYKEG-BqJ_UrZL.js → xychartDiagram-FW5EYKEG-C4BdUEul.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/sw.js +1 -1
- package/package.json +1 -1
- package/runtime-manifest.json +1 -1
- package/dist/client/assets/channel-DLbt-DA1.js +0 -1
- package/dist/client/assets/classDiagram-OUVF2IWQ-CtCQ5VTR.js +0 -1
- package/dist/client/assets/classDiagram-v2-EOCWNBFH-CtCQ5VTR.js +0 -1
- package/dist/client/assets/stateDiagram-v2-6OUMAXLB-B8crJAxl.js +0 -1
- package/dist/client/assets/swimlanesDiagram-G3AALYLV-Di4AbqD1.js +0 -8
package/.desktop-dist/main.js
CHANGED
|
@@ -14,6 +14,8 @@ import { checkForDesktopUpdates, checkForRuntimeUpdates, configureDesktopUpdater
|
|
|
14
14
|
import { resolvePackagedRuntime, rollbackDownloadedRuntime, } from './runtime.js';
|
|
15
15
|
import { isExternalLinkStagingUrl, isSafeExternalUrl } from './externalLinks.js';
|
|
16
16
|
import { shouldThrottleDesktopRenderer } from './windowPolicy.js';
|
|
17
|
+
import { checkConnectedServiceRuntime, getConnectedServiceRuntimeState, restartConnectedServiceRuntime, } from './connectedServiceRuntime.js';
|
|
18
|
+
import { isOwnedDesktopRuntimeTarget } from './runtimeTarget.js';
|
|
17
19
|
import { canOfferCertificateTrust, downloadCertificateAuthority, isCertificateTrustError, isLocalNetworkHostname, } from './certificateTrust.js';
|
|
18
20
|
const execFileAsync = promisify(execFile);
|
|
19
21
|
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -67,6 +69,8 @@ let menuBarStatusWidth = 0;
|
|
|
67
69
|
let floatingWidgetWindow = null;
|
|
68
70
|
let floatingPositionTimer = null;
|
|
69
71
|
let desktopRuntimeOwnerServer = null;
|
|
72
|
+
let connectedServiceRuntimePollTimer = null;
|
|
73
|
+
let connectedServiceRuntimePollInFlight = false;
|
|
70
74
|
let isQuitting = false;
|
|
71
75
|
const FLOATING_WIDGET_WIDTHS = [64, 108, 152];
|
|
72
76
|
const FLOATING_WIDGET_HEIGHT = 40;
|
|
@@ -1171,6 +1175,62 @@ async function restartDesktopManagedRuntime() {
|
|
|
1171
1175
|
restartTimer.unref();
|
|
1172
1176
|
return getDesktopRuntimeUpdateState();
|
|
1173
1177
|
}
|
|
1178
|
+
function isOwnedDesktopRuntimeWindow(window, status) {
|
|
1179
|
+
const origin = windowServiceOrigins.get(window);
|
|
1180
|
+
if (!origin || !status.running || status.probe?.desktopManaged !== true || !status.state)
|
|
1181
|
+
return false;
|
|
1182
|
+
const localAddresses = new Set(Object.values(os.networkInterfaces())
|
|
1183
|
+
.flatMap((addresses) => addresses?.map((address) => address.address.toLowerCase()) ?? []));
|
|
1184
|
+
return isOwnedDesktopRuntimeTarget({
|
|
1185
|
+
origin,
|
|
1186
|
+
servicePort: status.state.port,
|
|
1187
|
+
desktopManaged: true,
|
|
1188
|
+
localAddresses,
|
|
1189
|
+
});
|
|
1190
|
+
}
|
|
1191
|
+
async function routeRuntimeOperationForWindow(webContents, desktopOperation, serviceOperation) {
|
|
1192
|
+
const sourceWindow = BrowserWindow.fromWebContents(webContents);
|
|
1193
|
+
if (!sourceWindow || !windowServiceOrigins.has(sourceWindow)) {
|
|
1194
|
+
throw new Error('只能从已连接的 Termdock 服务窗口操作 Runtime。');
|
|
1195
|
+
}
|
|
1196
|
+
const status = await getLocalServiceStatus();
|
|
1197
|
+
return isOwnedDesktopRuntimeWindow(sourceWindow, status)
|
|
1198
|
+
? desktopOperation()
|
|
1199
|
+
: serviceOperation();
|
|
1200
|
+
}
|
|
1201
|
+
function startConnectedServiceRuntimePolling() {
|
|
1202
|
+
if (connectedServiceRuntimePollTimer)
|
|
1203
|
+
return;
|
|
1204
|
+
const poll = async () => {
|
|
1205
|
+
if (connectedServiceRuntimePollInFlight)
|
|
1206
|
+
return;
|
|
1207
|
+
connectedServiceRuntimePollInFlight = true;
|
|
1208
|
+
try {
|
|
1209
|
+
const status = await getLocalServiceStatus();
|
|
1210
|
+
await Promise.all(BrowserWindow.getAllWindows().map(async (window) => {
|
|
1211
|
+
if (window.isDestroyed() || !windowServiceOrigins.has(window))
|
|
1212
|
+
return;
|
|
1213
|
+
if (isOwnedDesktopRuntimeWindow(window, status))
|
|
1214
|
+
return;
|
|
1215
|
+
try {
|
|
1216
|
+
const state = await getConnectedServiceRuntimeState(window.webContents);
|
|
1217
|
+
if (!window.isDestroyed()) {
|
|
1218
|
+
window.webContents.send('desktop:runtime-update-state-changed', state);
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
catch {
|
|
1222
|
+
// A disconnected or older service will be retried on the next poll.
|
|
1223
|
+
}
|
|
1224
|
+
}));
|
|
1225
|
+
}
|
|
1226
|
+
finally {
|
|
1227
|
+
connectedServiceRuntimePollInFlight = false;
|
|
1228
|
+
}
|
|
1229
|
+
};
|
|
1230
|
+
void poll();
|
|
1231
|
+
connectedServiceRuntimePollTimer = setInterval(() => void poll(), 2_000);
|
|
1232
|
+
connectedServiceRuntimePollTimer.unref();
|
|
1233
|
+
}
|
|
1174
1234
|
function writeRuntimeOwnerResponse(response, statusCode, payload) {
|
|
1175
1235
|
response.writeHead(statusCode, { 'content-type': 'application/json; charset=utf-8' });
|
|
1176
1236
|
response.end(JSON.stringify(payload));
|
|
@@ -1208,6 +1268,9 @@ async function startDesktopRuntimeOwnerServer() {
|
|
|
1208
1268
|
resolve();
|
|
1209
1269
|
});
|
|
1210
1270
|
});
|
|
1271
|
+
server.on('error', (error) => {
|
|
1272
|
+
console.error('[desktop-runtime] owner socket failed', error);
|
|
1273
|
+
});
|
|
1211
1274
|
fs.chmodSync(desktopRuntimeOwnerSocketPath, 0o600);
|
|
1212
1275
|
desktopRuntimeOwnerServer = server;
|
|
1213
1276
|
}
|
|
@@ -1704,9 +1767,9 @@ function installIpcHandlers() {
|
|
|
1704
1767
|
ipcMain.handle('desktop:update-state', () => getDesktopUpdateState());
|
|
1705
1768
|
ipcMain.handle('desktop:check-update', () => checkForDesktopUpdates());
|
|
1706
1769
|
ipcMain.handle('desktop:install-update', () => installDownloadedDesktopUpdate());
|
|
1707
|
-
ipcMain.handle('desktop:runtime-update-state', () => getDesktopRuntimeUpdateState());
|
|
1708
|
-
ipcMain.handle('desktop:check-runtime-update', () => checkForRuntimeUpdates());
|
|
1709
|
-
ipcMain.handle('desktop:restart-runtime', () => restartDesktopManagedRuntime());
|
|
1770
|
+
ipcMain.handle('desktop:runtime-update-state', (event) => routeRuntimeOperationForWindow(event.sender, () => getDesktopRuntimeUpdateState(), () => getConnectedServiceRuntimeState(event.sender)));
|
|
1771
|
+
ipcMain.handle('desktop:check-runtime-update', (event) => routeRuntimeOperationForWindow(event.sender, () => checkForRuntimeUpdates(), () => checkConnectedServiceRuntime(event.sender)));
|
|
1772
|
+
ipcMain.handle('desktop:restart-runtime', (event) => routeRuntimeOperationForWindow(event.sender, () => restartDesktopManagedRuntime(), () => restartConnectedServiceRuntime(event.sender)));
|
|
1710
1773
|
ipcMain.handle('desktop:show-connection-center', () => showConnectionCenter());
|
|
1711
1774
|
ipcMain.handle('desktop:reveal-data-directory', async () => {
|
|
1712
1775
|
fs.mkdirSync(termdockDir, { recursive: true, mode: 0o700 });
|
|
@@ -1992,11 +2055,15 @@ app.whenReady().then(async () => {
|
|
|
1992
2055
|
}
|
|
1993
2056
|
});
|
|
1994
2057
|
subscribeDesktopRuntimeUpdateState((state) => {
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
window.
|
|
1998
|
-
|
|
2058
|
+
void getLocalServiceStatus().then((status) => {
|
|
2059
|
+
for (const window of BrowserWindow.getAllWindows()) {
|
|
2060
|
+
if (!window.isDestroyed() && isOwnedDesktopRuntimeWindow(window, status)) {
|
|
2061
|
+
window.webContents.send('desktop:runtime-update-state-changed', state);
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
});
|
|
1999
2065
|
});
|
|
2066
|
+
startConnectedServiceRuntimePolling();
|
|
2000
2067
|
const startupConfig = readDesktopConfig();
|
|
2001
2068
|
const restoreUrls = startupConfig.openConnectionUrls;
|
|
2002
2069
|
startupRestoreActive = true;
|
|
@@ -2057,6 +2124,10 @@ app.on('before-quit', () => {
|
|
|
2057
2124
|
isQuitting = true;
|
|
2058
2125
|
desktopRuntimeOwnerServer?.close();
|
|
2059
2126
|
desktopRuntimeOwnerServer = null;
|
|
2127
|
+
if (connectedServiceRuntimePollTimer)
|
|
2128
|
+
clearInterval(connectedServiceRuntimePollTimer);
|
|
2129
|
+
connectedServiceRuntimePollTimer = null;
|
|
2130
|
+
connectedServiceRuntimePollInFlight = false;
|
|
2060
2131
|
fs.rmSync(desktopRuntimeOwnerSocketPath, { force: true });
|
|
2061
2132
|
});
|
|
2062
2133
|
export { PROTOCOL_VERSION };
|