livedesk 0.1.650 → 0.1.651
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/README.md +1 -1
- package/bin/livedesk.js +13 -13
- package/bootstrap/client-process-identity.js +2 -2
- package/client/package.json +1 -1
- package/diagnostics/{livedesk-mac-physical-gate-core.mjs → vuvodesk-mac-physical-gate-core.mjs} +3 -3
- package/diagnostics/{livedesk-mode3-capture-smoke.mjs → vuvodesk-mode3-capture-smoke.mjs} +2 -2
- package/diagnostics/{livedesk-transport-physical.mjs → vuvodesk-transport-physical.mjs} +1 -1
- package/electron/before-pack.cjs +1 -1
- package/electron/electron-builder.e2e.yml +1 -1
- package/electron/electron-builder.linux-x64-dev.yml +1 -1
- package/electron/electron-builder.linux-x64.yml +3 -3
- package/electron/electron-builder.mac-arm64-dev.yml +1 -1
- package/electron/electron-builder.mac-arm64.yml +4 -4
- package/electron/electron-builder.mac-x64-dev.yml +1 -1
- package/electron/electron-builder.mac-x64.yml +4 -4
- package/electron/electron-builder.win-dev.yml +1 -1
- package/electron/electron-builder.win.yml +3 -3
- package/electron/electron-builder.yml +2 -2
- package/hub/package.json +1 -1
- package/hub/src/captures/capture-store.js +2 -2
- package/hub/src/server.js +2 -2
- package/hub/src/{live-desk-update.js → vuvodesk-update.js} +1 -1
- package/package.json +5 -3
- package/runtime-core/package.json +1 -1
- package/scripts/sync-web-dist.js +11 -11
- package/web/dist/app.html +3 -3
- package/web/dist/app.webmanifest +1 -1
- package/web/dist/assets/{AgentSettingsTab-1QVVyDM0.js → AgentSettingsTab-CmoOFOcl.js} +1 -1
- package/web/dist/assets/{AgentsPage-PXaoor6-.js → AgentsPage-0p2Fa7hh.js} +1 -1
- package/web/dist/assets/{App-C0pLhnrj.js → App-iw6HSNbk.js} +3 -3
- package/web/dist/assets/{CaptureGallery-RoIgqppm.js → CaptureGallery-DlsfaKXP.js} +1 -1
- package/web/dist/assets/{DesktopUpdatePanel-CSORoxhi.js → DesktopUpdatePanel-D5sguo6U.js} +1 -1
- package/web/dist/assets/{SettingsPage-56oq8v6l.js → SettingsPage-BbO24wOs.js} +1 -1
- package/web/dist/assets/{SettingsTabs-CZ388qM0.js → SettingsTabs-DG1Q2KY3.js} +1 -1
- package/web/dist/assets/{ShareFilesPage-CxsFwtMy.js → ShareFilesPage-0PiU0oYj.js} +1 -1
- package/web/dist/assets/{SupportPage-D5pCkJTU.js → SupportPage-DcQ5yK4j.js} +1 -1
- package/web/dist/assets/{LiveDeskApp-BEyIPIAd.js → VuvoDeskApp-CeYs_j7-.js} +1 -1
- package/web/dist/assets/{app-Cf4_lX6I.js → app-BSxy34W0.js} +1 -1
- package/web/dist/assets/{main-BBDlfRlO.js → main-D5ioXAGK.js} +2 -2
- package/web/dist/assets/{styles-B5DEnner.js → styles-BriraxLg.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/dist/sw.js +1 -1
- package/web/dist/{livedesk-build-evidence.json → vuvodesk-build-evidence.json} +58 -58
- /package/diagnostics/{livedesk-mac-physical-isolation.mjs → vuvodesk-mac-physical-isolation.mjs} +0 -0
- /package/diagnostics/{livedesk-transport-physical-core.mjs → vuvodesk-transport-physical-core.mjs} +0 -0
- /package/web/dist/assets/{LiveDeskApp-ao5vkK6F.css → VuvoDeskApp-ao5vkK6F.css} +0 -0
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ wall and can be controlled like the other computers.
|
|
|
12
12
|
The `hub/`, `client/`, `runtime-core/`, and `web/` folders in this package are
|
|
13
13
|
generated copies. Edit the source packages rather than those copies. Before
|
|
14
14
|
packaging, `npm pack` rebuilds the production web workspace and then runs
|
|
15
|
-
`node packages/
|
|
15
|
+
`node packages/vuvodesk/scripts/sync-web-dist.js` to synchronize the product.
|
|
16
16
|
The published `livedesk` package owns both runtime roles; the
|
|
17
17
|
source-only `@livedesk/client` workspace is not a runtime dependency.
|
|
18
18
|
|
package/bin/livedesk.js
CHANGED
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
readDeadWindowsOwnedProcessManifest,
|
|
48
48
|
readWindowsOwnedProcessManifest
|
|
49
49
|
} from '../client/src/runtime/windows-owned-process-manifest.js';
|
|
50
|
-
import { inspectMacDiagnosticLease } from '../diagnostics/
|
|
50
|
+
import { inspectMacDiagnosticLease } from '../diagnostics/vuvodesk-mac-physical-isolation.mjs';
|
|
51
51
|
import {
|
|
52
52
|
buildHubSelfAgentLaunchSpec,
|
|
53
53
|
createHubSelfAgentSupervisor
|
|
@@ -423,7 +423,7 @@ async function runDiagnosticCommand(args) {
|
|
|
423
423
|
const diagnosticEntry = resolve(
|
|
424
424
|
packageRoot,
|
|
425
425
|
'diagnostics',
|
|
426
|
-
'
|
|
426
|
+
'vuvodesk-transport-physical.mjs'
|
|
427
427
|
);
|
|
428
428
|
if (!existsSync(diagnosticEntry)) {
|
|
429
429
|
throw new Error(`VuvoDesk transport-physical diagnostic is missing from this package: ${diagnosticEntry}`);
|
|
@@ -442,7 +442,7 @@ async function runDiagnosticCommand(args) {
|
|
|
442
442
|
const diagnosticEntry = resolve(
|
|
443
443
|
packageRoot,
|
|
444
444
|
'diagnostics',
|
|
445
|
-
'
|
|
445
|
+
'vuvodesk-mode3-capture-smoke.mjs'
|
|
446
446
|
);
|
|
447
447
|
if (!existsSync(diagnosticEntry)) {
|
|
448
448
|
throw new Error(`VuvoDesk mac-physical diagnostic is missing from this package: ${diagnosticEntry}`);
|
|
@@ -707,7 +707,7 @@ function isKnownLiveDeskLauncherProcess(processName, commandLine) {
|
|
|
707
707
|
const normalizedName = String(processName || '').trim().replaceAll('\\', '/').split('/').pop() || '';
|
|
708
708
|
const normalizedCommandLine = String(commandLine || '').replaceAll('\\', '/');
|
|
709
709
|
return /^(?:node|node\.exe)$/i.test(normalizedName)
|
|
710
|
-
&& /(?:^|\/)(?:node_modules\/livedesk\/bin\/livedesk\.js|packages\/livedesk\/bin\/livedesk\.js|node_modules\/\.bin\/livedesk)(?:\s|["']|$)/i
|
|
710
|
+
&& /(?:^|\/)(?:node_modules\/livedesk\/bin\/livedesk\.js|packages\/(?:livedesk|vuvodesk)\/bin\/livedesk\.js|node_modules\/\.bin\/livedesk)(?:\s|["']|$)/i
|
|
711
711
|
.test(normalizedCommandLine);
|
|
712
712
|
}
|
|
713
713
|
|
|
@@ -1619,9 +1619,9 @@ function isKnownLiveDeskProcess(processName, commandLine) {
|
|
|
1619
1619
|
return false;
|
|
1620
1620
|
}
|
|
1621
1621
|
|
|
1622
|
-
const isKnownHubServer = /(?:packages\/(?:
|
|
1623
|
-
const isUnifiedLauncher = /(?:node_modules\/livedesk|packages\/livedesk)\/bin\/livedesk\.js/i.test(normalizedCommandLine);
|
|
1624
|
-
const isLegacyClient = /(?:node_modules\/@livedesk\/client|packages\/client|packages\/livedesk\/client)\/bin\/livedesk-client\.js/i.test(normalizedCommandLine);
|
|
1622
|
+
const isKnownHubServer = /(?:packages\/(?:(?:live|vuvo)desk\/)?hub|node_modules\/@?livedesk\/hub)\/src\/server\.js/i.test(normalizedCommandLine);
|
|
1623
|
+
const isUnifiedLauncher = /(?:node_modules\/livedesk|packages\/(?:livedesk|vuvodesk))\/bin\/livedesk\.js/i.test(normalizedCommandLine);
|
|
1624
|
+
const isLegacyClient = /(?:node_modules\/@livedesk\/client|packages\/client|packages\/(?:livedesk|vuvodesk)\/client)\/bin\/livedesk-client\.js/i.test(normalizedCommandLine);
|
|
1625
1625
|
return isKnownHubServer || isUnifiedLauncher || isLegacyClient;
|
|
1626
1626
|
}
|
|
1627
1627
|
|
|
@@ -1674,9 +1674,9 @@ async function collectWindowsPortRecords(ports) {
|
|
|
1674
1674
|
' $commandLine = if ($proc) { [string]$proc.CommandLine } else { "" };',
|
|
1675
1675
|
' $creationUtcTicks = if ($proc -and $proc.CreationDate) { [string]$proc.CreationDate.ToUniversalTime().Ticks } else { "" };',
|
|
1676
1676
|
' $isNodeProcess = $processName -match "(?i)^node(?:\\.exe)?$";',
|
|
1677
|
-
' $hasKnownLiveDeskHubPath = $commandLine -match "(?i)(?:packages[\\\\/](?:
|
|
1678
|
-
' $hasUnifiedLauncherPath = $commandLine -match "(?i)(?:node_modules[\\\\/]livedesk|packages[\\\\/]livedesk)[\\\\/]bin[\\\\/]livedesk\\.js";',
|
|
1679
|
-
' $hasLegacyClientPath = $commandLine -match "(?i)(?:node_modules[\\\\/]@livedesk[\\\\/]client|packages[\\\\/]client|packages[\\\\/]livedesk[\\\\/]client)[\\\\/]bin[\\\\/]livedesk-client\\.js";',
|
|
1677
|
+
' $hasKnownLiveDeskHubPath = $commandLine -match "(?i)(?:packages[\\\\/](?:(?:live|vuvo)desk[\\\\/])?hub|node_modules[\\\\/]@?livedesk[\\\\/]hub)[\\\\/]src[\\\\/]server\\.js";',
|
|
1678
|
+
' $hasUnifiedLauncherPath = $commandLine -match "(?i)(?:node_modules[\\\\/]livedesk|packages[\\\\/](?:livedesk|vuvodesk))[\\\\/]bin[\\\\/]livedesk\\.js";',
|
|
1679
|
+
' $hasLegacyClientPath = $commandLine -match "(?i)(?:node_modules[\\\\/]@livedesk[\\\\/]client|packages[\\\\/]client|packages[\\\\/](?:livedesk|vuvodesk)[\\\\/]client)[\\\\/]bin[\\\\/]livedesk-client\\.js";',
|
|
1680
1680
|
' $knownLiveDesk = [bool]($isNodeProcess -and ($hasKnownLiveDeskHubPath -or $hasUnifiedLauncherPath -or $hasLegacyClientPath));',
|
|
1681
1681
|
' $state = [string]$connection.State;',
|
|
1682
1682
|
' $isListener = $state -match "^(?i:Listen|Listening)$";',
|
|
@@ -1744,9 +1744,9 @@ async function terminateExactWindowsPortOwners(records) {
|
|
|
1744
1744
|
' $processName = [string]$proc.Name;',
|
|
1745
1745
|
' $commandLine = [string]$proc.CommandLine;',
|
|
1746
1746
|
' $isNodeProcess = $processName -match "(?i)^node(?:\\.exe)?$";',
|
|
1747
|
-
' $hasKnownLiveDeskHubPath = $commandLine -match "(?i)(?:packages[\\\\/](?:
|
|
1748
|
-
' $hasUnifiedLauncherPath = $commandLine -match "(?i)(?:node_modules[\\\\/]livedesk|packages[\\\\/]livedesk)[\\\\/]bin[\\\\/]livedesk\\.js";',
|
|
1749
|
-
' $hasLegacyClientPath = $commandLine -match "(?i)(?:node_modules[\\\\/]@livedesk[\\\\/]client|packages[\\\\/]client|packages[\\\\/]livedesk[\\\\/]client)[\\\\/]bin[\\\\/]livedesk-client\\.js";',
|
|
1747
|
+
' $hasKnownLiveDeskHubPath = $commandLine -match "(?i)(?:packages[\\\\/](?:(?:live|vuvo)desk[\\\\/])?hub|node_modules[\\\\/]@?livedesk[\\\\/]hub)[\\\\/]src[\\\\/]server\\.js";',
|
|
1748
|
+
' $hasUnifiedLauncherPath = $commandLine -match "(?i)(?:node_modules[\\\\/]livedesk|packages[\\\\/](?:livedesk|vuvodesk))[\\\\/]bin[\\\\/]livedesk\\.js";',
|
|
1749
|
+
' $hasLegacyClientPath = $commandLine -match "(?i)(?:node_modules[\\\\/]@livedesk[\\\\/]client|packages[\\\\/]client|packages[\\\\/](?:livedesk|vuvodesk)[\\\\/]client)[\\\\/]bin[\\\\/]livedesk-client\\.js";',
|
|
1750
1750
|
' if ($actualStartTicks -ne $expectedStartTicks -or -not $isNodeProcess -or -not ($hasKnownLiveDeskHubPath -or $hasUnifiedLauncherPath -or $hasLegacyClientPath)) { continue };',
|
|
1751
1751
|
' $validatedRoots.Add([pscustomobject]@{ ProcessId = [int]$proc.ProcessId; ParentProcessId = [int]$proc.ParentProcessId; CreationUtcTicks = $actualStartTicks; Depth = 0 });',
|
|
1752
1752
|
'}',
|
|
@@ -11,7 +11,7 @@ function normalizeExecutablePath(value) {
|
|
|
11
11
|
return String(value || '').trim().replaceAll('\\', '/').replace(/\s+\(deleted\)$/i, '');
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
const BUNDLED_FAST_ROOT = '(?:node_modules/(?:livedesk/client|@livedesk/client)|packages/(?:
|
|
14
|
+
const BUNDLED_FAST_ROOT = '(?:node_modules/(?:livedesk/client|@livedesk/client)|packages/(?:(?:live|vuvo)desk/client|client))/fast/[^/\\s]+';
|
|
15
15
|
const OPTIONAL_FAST_ROOT = 'node_modules/@livedesk/fast-(?:linux-x64|osx-arm64|osx-x64|win-x64)/fast';
|
|
16
16
|
const FAST_ROOT = `(?:${BUNDLED_FAST_ROOT}|${OPTIONAL_FAST_ROOT})`;
|
|
17
17
|
const KNOWN_FAST_EXECUTABLE_PATH = new RegExp(`${FAST_ROOT}/livedesk-client-fast(?:\\.exe)?$`, 'i');
|
|
@@ -28,7 +28,7 @@ export function isKnownLiveDeskClientAgentProcess(processName, commandLine, exec
|
|
|
28
28
|
// packaged VuvoDesk Fast binary. A matching path elsewhere in argv is not
|
|
29
29
|
// sufficient.
|
|
30
30
|
const isTruncatedLinuxFast = /^livedesk-client$/i.test(normalizedName);
|
|
31
|
-
const isKnownNodeAgent = /(?:node_modules\/(?:livedesk\/client|@livedesk\/client)|packages\/(?:
|
|
31
|
+
const isKnownNodeAgent = /(?:node_modules\/(?:livedesk\/client|@livedesk\/client)|packages\/(?:(?:live|vuvo)desk\/client|client))\/bin\/livedesk-client-node\.js(?:\s|["']|$)/i.test(normalizedCommandLine);
|
|
32
32
|
const isKnownFastExecutable = new RegExp(
|
|
33
33
|
`${FAST_ROOT}/livedesk-client-fast(?:\\.exe)?(?:\\s|["']|$)`,
|
|
34
34
|
'i'
|
package/client/package.json
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"check": "node --check bin/client-version.js && node --check bin/livedesk-client.js && node --check bin/livedesk-client-node.js && node --check bin/livedesk-client-update-bootstrap.cjs && node --check bin/livedesk-client-fast.js",
|
|
21
21
|
"test:version": "node --test tests/client-version.test.mjs",
|
|
22
22
|
"pack:dry": "npm pack --dry-run",
|
|
23
|
-
"prepublishOnly": "node ../../scripts/
|
|
23
|
+
"prepublishOnly": "node ../../scripts/vuvodesk-release-git-gate.mjs"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
26
|
"livedesk",
|
package/diagnostics/{livedesk-mac-physical-gate-core.mjs → vuvodesk-mac-physical-gate-core.mjs}
RENAMED
|
@@ -375,13 +375,13 @@ function classifyMacLiveDeskRuntimeRecord(record) {
|
|
|
375
375
|
return 'client-agent';
|
|
376
376
|
}
|
|
377
377
|
if (
|
|
378
|
-
/(?:node_modules\/(?:livedesk\/client|@livedesk\/client)|packages\/(?:
|
|
378
|
+
/(?:node_modules\/(?:livedesk\/client|@livedesk\/client)|packages\/(?:(?:live|vuvo)desk\/client|client))\/bin\/livedesk-client(?:-node)?\.js(?:\s|$|["'])/i
|
|
379
379
|
.test(commandLine)
|
|
380
380
|
) {
|
|
381
381
|
return 'client-runtime';
|
|
382
382
|
}
|
|
383
383
|
if (
|
|
384
|
-
/(?:node_modules\/livedesk|packages\/livedesk)\/bin\/livedesk\.js(?:\s|$|["'])/i
|
|
384
|
+
/(?:node_modules\/livedesk|packages\/(?:livedesk|vuvodesk))\/bin\/livedesk\.js(?:\s|$|["'])/i
|
|
385
385
|
.test(commandLine)
|
|
386
386
|
|| /(?:^|[\s"'])[^"'\s]*node_modules\/\.bin\/livedesk(?:\s|$|["'])/i
|
|
387
387
|
.test(commandLine)
|
|
@@ -389,7 +389,7 @@ function classifyMacLiveDeskRuntimeRecord(record) {
|
|
|
389
389
|
return 'unified-runtime';
|
|
390
390
|
}
|
|
391
391
|
if (
|
|
392
|
-
/(?:node_modules\/(?:livedesk\/hub|@livedesk\/hub)|packages\/(?:
|
|
392
|
+
/(?:node_modules\/(?:livedesk\/hub|@livedesk\/hub)|packages\/(?:(?:live|vuvo)desk\/hub|hub))\/src\/server\.js(?:\s|$|["'])/i
|
|
393
393
|
.test(commandLine)
|
|
394
394
|
) {
|
|
395
395
|
return 'hub-runtime';
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
noteMacModifierBeforeSend,
|
|
26
26
|
parseMacLiveDeskRuntimeProcesses,
|
|
27
27
|
summarizeMacDiagnosticResourceSamples
|
|
28
|
-
} from './
|
|
28
|
+
} from './vuvodesk-mac-physical-gate-core.mjs';
|
|
29
29
|
import {
|
|
30
30
|
acquireMacDiagnosticLease,
|
|
31
31
|
buildMacDiagnosticTeardownPlan,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
runMacDiagnosticAbortableAttempt,
|
|
35
35
|
runMacDiagnosticStateTeardown,
|
|
36
36
|
stopOwnedProcess
|
|
37
|
-
} from './
|
|
37
|
+
} from './vuvodesk-mac-physical-isolation.mjs';
|
|
38
38
|
|
|
39
39
|
const rawArguments = process.argv.slice(2);
|
|
40
40
|
const publicMacPhysicalDiagnostic = String(rawArguments[0] || '').toLowerCase() === 'diagnose'
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
buildTransportPhysicalReport,
|
|
10
10
|
genericTransportPhysicalError,
|
|
11
11
|
isTransportPhysicalPhaseEvidence
|
|
12
|
-
} from './
|
|
12
|
+
} from './vuvodesk-transport-physical-core.mjs';
|
|
13
13
|
|
|
14
14
|
const DEFAULT_HUB_URL = 'http://127.0.0.1:5179';
|
|
15
15
|
const DEFAULT_PHASE_TIMEOUT_MS = 15_000;
|
package/electron/before-pack.cjs
CHANGED
|
@@ -2,7 +2,7 @@ const { createHash } = require('node:crypto');
|
|
|
2
2
|
const { existsSync, readFileSync, readdirSync, statSync } = require('node:fs');
|
|
3
3
|
const { isAbsolute, join, posix, relative, resolve, sep } = require('node:path');
|
|
4
4
|
|
|
5
|
-
const EVIDENCE_FILE = '
|
|
5
|
+
const EVIDENCE_FILE = 'vuvodesk-build-evidence.json';
|
|
6
6
|
const EVIDENCE_KIND = 'livedesk-production-web-source-evidence';
|
|
7
7
|
|
|
8
8
|
function fail(code, detail = '') {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
extends: file:packages/
|
|
2
|
-
afterPack: packages/
|
|
1
|
+
extends: file:packages/vuvodesk/electron/electron-builder.yml
|
|
2
|
+
afterPack: packages/vuvodesk/electron/after-pack.cjs
|
|
3
3
|
files:
|
|
4
4
|
- bin/**
|
|
5
5
|
- bootstrap/**
|
|
@@ -27,7 +27,7 @@ asarUnpack:
|
|
|
27
27
|
- node_modules/node-datachannel/**
|
|
28
28
|
- node_modules/@node-datachannel/linux-x64-gnu/**
|
|
29
29
|
linux:
|
|
30
|
-
icon: packages/
|
|
30
|
+
icon: packages/vuvodesk/electron/icon.png
|
|
31
31
|
category: Utility
|
|
32
32
|
executableName: livedesk
|
|
33
33
|
maintainer: "lovecrdm <lovecrdm@gmail.com>"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
extends: file:packages/
|
|
1
|
+
extends: file:packages/vuvodesk/electron/electron-builder.yml
|
|
2
2
|
files:
|
|
3
3
|
- bin/**
|
|
4
4
|
- bootstrap/**
|
|
@@ -26,12 +26,12 @@ asarUnpack:
|
|
|
26
26
|
- node_modules/node-datachannel/**
|
|
27
27
|
- node_modules/@node-datachannel/darwin-arm64/**
|
|
28
28
|
mac:
|
|
29
|
-
icon: packages/
|
|
29
|
+
icon: packages/vuvodesk/electron/icon.icns
|
|
30
30
|
category: public.app-category.utilities
|
|
31
31
|
hardenedRuntime: true
|
|
32
32
|
notarize: true
|
|
33
|
-
entitlements: packages/
|
|
34
|
-
entitlementsInherit: packages/
|
|
33
|
+
entitlements: packages/vuvodesk/electron/entitlements.mac.plist
|
|
34
|
+
entitlementsInherit: packages/vuvodesk/electron/entitlements.mac.plist
|
|
35
35
|
target:
|
|
36
36
|
- target: dmg
|
|
37
37
|
arch:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
extends: file:packages/
|
|
1
|
+
extends: file:packages/vuvodesk/electron/electron-builder.yml
|
|
2
2
|
files:
|
|
3
3
|
- bin/**
|
|
4
4
|
- bootstrap/**
|
|
@@ -26,12 +26,12 @@ asarUnpack:
|
|
|
26
26
|
- node_modules/node-datachannel/**
|
|
27
27
|
- node_modules/@node-datachannel/darwin-x64/**
|
|
28
28
|
mac:
|
|
29
|
-
icon: packages/
|
|
29
|
+
icon: packages/vuvodesk/electron/icon.icns
|
|
30
30
|
category: public.app-category.utilities
|
|
31
31
|
hardenedRuntime: true
|
|
32
32
|
notarize: true
|
|
33
|
-
entitlements: packages/
|
|
34
|
-
entitlementsInherit: packages/
|
|
33
|
+
entitlements: packages/vuvodesk/electron/entitlements.mac.plist
|
|
34
|
+
entitlementsInherit: packages/vuvodesk/electron/entitlements.mac.plist
|
|
35
35
|
target:
|
|
36
36
|
- target: dmg
|
|
37
37
|
arch:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
extends: file:packages/
|
|
1
|
+
extends: file:packages/vuvodesk/electron/electron-builder.yml
|
|
2
2
|
files:
|
|
3
3
|
- bin/**
|
|
4
4
|
- bootstrap/**
|
|
@@ -26,7 +26,7 @@ asarUnpack:
|
|
|
26
26
|
- node_modules/node-datachannel/**
|
|
27
27
|
- node_modules/@node-datachannel/win32-x64-msvc/**
|
|
28
28
|
win:
|
|
29
|
-
icon: packages/
|
|
29
|
+
icon: packages/vuvodesk/electron/icon.ico
|
|
30
30
|
target:
|
|
31
31
|
- target: nsis
|
|
32
32
|
arch:
|
|
@@ -35,7 +35,7 @@ win:
|
|
|
35
35
|
nsis:
|
|
36
36
|
oneClick: false
|
|
37
37
|
perMachine: false
|
|
38
|
-
include: packages/
|
|
38
|
+
include: packages/vuvodesk/electron/installer.nsh
|
|
39
39
|
createDesktopShortcut: true
|
|
40
40
|
createStartMenuShortcut: true
|
|
41
41
|
shortcutName: VuvoDesk
|
|
@@ -2,7 +2,7 @@ appId: com.livedesk.desktop
|
|
|
2
2
|
productName: VuvoDesk
|
|
3
3
|
artifactName: VuvoDesk-${version}-${arch}.${ext}
|
|
4
4
|
asar: true
|
|
5
|
-
beforePack: packages/
|
|
5
|
+
beforePack: packages/vuvodesk/electron/before-pack.cjs
|
|
6
6
|
directories:
|
|
7
|
-
app: packages/
|
|
7
|
+
app: packages/vuvodesk
|
|
8
8
|
output: dist/desktop
|
package/hub/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dev": "node src/server.js",
|
|
13
13
|
"start": "node src/server.js",
|
|
14
14
|
"check": "node --check src/server.js && node --check src/remote-hub.js && node --check src/remote-clipboard-contract.mjs && node --check src/console-direct.js",
|
|
15
|
-
"prepublishOnly": "node ../../scripts/
|
|
15
|
+
"prepublishOnly": "node ../../scripts/vuvodesk-release-git-gate.mjs"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
@@ -86,7 +86,7 @@ export class CaptureStore {
|
|
|
86
86
|
throw Object.assign(new Error('capture-mime-type-unsupported'), { status: 415 });
|
|
87
87
|
}
|
|
88
88
|
const extension = MIME_EXTENSIONS.get(mimeType) || (kind === 'screenshot' ? '.png' : '.webm');
|
|
89
|
-
const fileNameBase = safeName(metadata.fileName, `
|
|
89
|
+
const fileNameBase = safeName(metadata.fileName, `VuvoDesk_${kind}`);
|
|
90
90
|
const fileName = fileNameBase.toLowerCase().endsWith(extension) ? fileNameBase : `${fileNameBase}${extension}`;
|
|
91
91
|
const id = randomUUID();
|
|
92
92
|
const folder = kind === 'screenshot' ? 'images' : kind === 'timelapse' ? 'timelapses' : 'recordings';
|
|
@@ -122,7 +122,7 @@ export class CaptureStore {
|
|
|
122
122
|
const sessionId = randomUUID();
|
|
123
123
|
const tempPath = path.join(this.root, '.tmp', `${sessionId}.webm.part`);
|
|
124
124
|
await writeFile(tempPath, Buffer.alloc(0), { mode: 0o600 });
|
|
125
|
-
const fileNameBase = safeName(metadata.fileName, `
|
|
125
|
+
const fileNameBase = safeName(metadata.fileName, `VuvoDesk_${kind}`);
|
|
126
126
|
const session = {
|
|
127
127
|
sessionId,
|
|
128
128
|
kind,
|
package/hub/src/server.js
CHANGED
|
@@ -61,7 +61,7 @@ import { LiveDeskSettingsStore, SettingsConflictError } from './settings/setting
|
|
|
61
61
|
import { effectiveDevicePolicy } from './settings/settings-schema.js';
|
|
62
62
|
import { buildEffectiveDevicePolicy } from './settings/effective-device-policy.js';
|
|
63
63
|
import { CaptureStore } from './captures/capture-store.js';
|
|
64
|
-
import {
|
|
64
|
+
import { createVuvoDeskUpdateManager } from './vuvodesk-update.js';
|
|
65
65
|
import { createHubUdpTransport } from './transport/udp-hub-transport.js';
|
|
66
66
|
import { normalizeRuntimeAuthSession, runtimeRoleError } from '../../runtime-core/src/index.js';
|
|
67
67
|
import { fetchAuthResponse, AUTH_REQUEST_TIMEOUT_MS } from '../../runtime-core/src/auth-http.js';
|
|
@@ -1256,7 +1256,7 @@ function getLiveDeskUpdateStatus() {
|
|
|
1256
1256
|
}
|
|
1257
1257
|
|
|
1258
1258
|
const electronDesktopOwnsSelfUpdate = process.env.LIVEDESK_DESKTOP_HOST === '1';
|
|
1259
|
-
liveDeskUpdateManager =
|
|
1259
|
+
liveDeskUpdateManager = createVuvoDeskUpdateManager({
|
|
1260
1260
|
remoteHub,
|
|
1261
1261
|
currentManagerVersion: process.env.LIVEDESK_MANAGER_VERSION || packageInfo.version,
|
|
1262
1262
|
currentClientVersion: process.env.LIVEDESK_CLIENT_PACKAGE_VERSION || '',
|
|
@@ -259,7 +259,7 @@ function resetReconnectCandidate(target) {
|
|
|
259
259
|
target.stabilityDeadlineAt = '';
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
-
export function
|
|
262
|
+
export function createVuvoDeskUpdateManager({
|
|
263
263
|
remoteHub,
|
|
264
264
|
currentManagerVersion,
|
|
265
265
|
currentClientVersion,
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livedesk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.651",
|
|
4
4
|
"livedeskClientVersion": "0.1.271",
|
|
5
5
|
"buildFlavor": "production",
|
|
6
6
|
"description": "VuvoDesk Hub and client launcher",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "electron/main.mjs",
|
|
9
9
|
"bin": {
|
|
10
|
+
"vuvodesk": "bin/livedesk.js",
|
|
10
11
|
"livedesk": "bin/livedesk.js"
|
|
11
12
|
},
|
|
12
13
|
"files": [
|
|
@@ -22,13 +23,14 @@
|
|
|
22
23
|
"README.md"
|
|
23
24
|
],
|
|
24
25
|
"scripts": {
|
|
25
|
-
"check": "node --check bin/livedesk.js && node --check bootstrap/npm-update-cache.mjs && node --check bootstrap/update-host-client.mjs && node --check bootstrap/update-host.mjs && node --check diagnostics/
|
|
26
|
+
"check": "node --check bin/livedesk.js && node --check bootstrap/npm-update-cache.mjs && node --check bootstrap/update-host-client.mjs && node --check bootstrap/update-host.mjs && node --check diagnostics/vuvodesk-mode3-capture-smoke.mjs && node --check diagnostics/vuvodesk-mac-physical-gate-core.mjs && node --check diagnostics/vuvodesk-mac-physical-isolation.mjs && node --check diagnostics/vuvodesk-transport-physical-core.mjs && node --check diagnostics/vuvodesk-transport-physical.mjs && node --check scripts/sync-web-dist.js",
|
|
26
27
|
"build": "node scripts/sync-web-dist.js",
|
|
27
28
|
"prepack": "npm --prefix ../.. run build -w @livedesk/web && node scripts/sync-web-dist.js",
|
|
28
29
|
"pack:dry": "npm pack --dry-run",
|
|
29
|
-
"prepublishOnly": "node ../../scripts/
|
|
30
|
+
"prepublishOnly": "node ../../scripts/vuvodesk-release-git-gate.mjs"
|
|
30
31
|
},
|
|
31
32
|
"keywords": [
|
|
33
|
+
"vuvodesk",
|
|
32
34
|
"livedesk",
|
|
33
35
|
"remote",
|
|
34
36
|
"screen-wall",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
],
|
|
10
10
|
"scripts": {
|
|
11
11
|
"check": "node --check src/index.js && node --check src/direct-secure-transport.js && node --check src/console-direct-wire.js",
|
|
12
|
-
"prepublishOnly": "node ../../scripts/
|
|
12
|
+
"prepublishOnly": "node ../../scripts/vuvodesk-release-git-gate.mjs"
|
|
13
13
|
},
|
|
14
14
|
"engines": {
|
|
15
15
|
"node": ">=20"
|
package/scripts/sync-web-dist.js
CHANGED
|
@@ -80,14 +80,14 @@ function missingAssets(assets) {
|
|
|
80
80
|
return assets.filter(([, assetPath]) => !existsSync(assetPath)).map(([label]) => label);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
function
|
|
84
|
-
try {
|
|
85
|
-
const manifest = JSON.parse(readFileSync(resolve(repoRoot, 'package.json'), 'utf8'));
|
|
86
|
-
return manifest?.name === '
|
|
87
|
-
} catch {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
83
|
+
function isVuvoDeskMonorepo() {
|
|
84
|
+
try {
|
|
85
|
+
const manifest = JSON.parse(readFileSync(resolve(repoRoot, 'package.json'), 'utf8'));
|
|
86
|
+
return manifest?.name === 'vuvodesk-react';
|
|
87
|
+
} catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
91
|
|
|
92
92
|
function validateInstalledPackage() {
|
|
93
93
|
const missing = missingAssets(packagedRuntimeAssets);
|
|
@@ -101,9 +101,9 @@ function validateInstalledPackage() {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
const
|
|
105
|
-
const missingMonorepoSources = missingAssets(monorepoSourceAssets);
|
|
106
|
-
if (!
|
|
104
|
+
const vuvodeskMonorepo = isVuvoDeskMonorepo();
|
|
105
|
+
const missingMonorepoSources = missingAssets(monorepoSourceAssets);
|
|
106
|
+
if (!vuvodeskMonorepo) {
|
|
107
107
|
validateInstalledPackage();
|
|
108
108
|
console.log('Validated existing VuvoDesk packaged assets; monorepo synchronization is not required.');
|
|
109
109
|
} else {
|
package/web/dist/app.html
CHANGED
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
.vuvodesk-static-boot [hidden] { display: none; }
|
|
53
53
|
@keyframes vuvodesk-static-boot-spin { to { transform: rotate(360deg); } }
|
|
54
54
|
</style>
|
|
55
|
-
<script type="module" crossorigin src="/assets/app-
|
|
55
|
+
<script type="module" crossorigin src="/assets/app-BSxy34W0.js" data-vuvodesk-entry></script>
|
|
56
56
|
<link rel="modulepreload" crossorigin href="/assets/icons-CacEbnZu.js">
|
|
57
57
|
<link rel="modulepreload" crossorigin href="/assets/react-Cfedt3N5.js">
|
|
58
|
-
<link rel="modulepreload" crossorigin href="/assets/styles-
|
|
58
|
+
<link rel="modulepreload" crossorigin href="/assets/styles-BriraxLg.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="/assets/supabase-C7qjtLN3.js">
|
|
60
60
|
<link rel="modulepreload" crossorigin href="/assets/frame-lifecycle-esOdP-EY.js">
|
|
61
|
-
<link rel="modulepreload" crossorigin href="/assets/App-
|
|
61
|
+
<link rel="modulepreload" crossorigin href="/assets/App-iw6HSNbk.js">
|
|
62
62
|
<link rel="stylesheet" crossorigin href="/assets/styles-BbMJwyw_.css">
|
|
63
63
|
<link rel="stylesheet" crossorigin href="/assets/App-DFLBNvIi.css">
|
|
64
64
|
</head>
|
package/web/dist/app.webmanifest
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as x,j as t}from"./styles-
|
|
1
|
+
import{h as x,j as t}from"./styles-BriraxLg.js";import{a as c,a5 as A,k as q,a6 as I,a7 as z}from"./icons-CacEbnZu.js";import"./react-Cfedt3N5.js";const E={enabled:!0};function w(a){return{enabled:a?.enabled===!0}}async function L(a,p,f){let l=null;for(let s=0;s<2;s+=1){const g=await x("/api/settings",{signal:f},p);if(g.settings.agent?.enabled===a)return;try{await x("/api/settings",{method:"PATCH",signal:f,body:JSON.stringify({revision:g.revision,agent:{enabled:a}})},p);return}catch(i){if(l=i,s!==0||!String(i instanceof Error?i.message:i).startsWith("409 "))throw i}}throw l}function F({hubUrl:a,showToast:p}){const[f,l]=c.useState(E),[s,g]=c.useState(null),[i,m]=c.useState(""),[j,v]=c.useState(""),[y,d]=c.useState(""),b=c.useRef(0),u=c.useRef(null);c.useEffect(()=>{let e=!0;u.current?.abort();const n=new AbortController;u.current=n;const h=++b.current;return g(null),l(E),m(""),d(""),v(""),x("/api/settings/agent",{signal:n.signal},a).then(o=>{!e||n.signal.aborted||h!==b.current||(g(o.settings),l(w(o.settings)))}).catch(o=>{e&&!n.signal.aborted&&h===b.current&&d(o instanceof Error?o.message:String(o))}),()=>{e=!1,n.abort(),u.current===n&&(u.current=null)}},[a]);const k=(e,n)=>l(h=>({...h,[e]:n})),C=e=>{g(e),l(w(e))},S=()=>({generation:b.current,controller:u.current}),r=e=>e.generation===b.current&&e.controller!==null&&e.controller===u.current&&!e.controller.signal.aborted,R=async()=>{if(!s){d("Agent settings are not available yet.");return}const e=S();if(r(e)){m("save"),d(""),v("");try{if(await L(f.enabled,a,e.controller.signal),!r(e))return;const n=await x("/api/settings/agent",{signal:e.controller.signal},a);if(!r(e))return;C(n.settings),v("Codex Agent settings saved.")}catch(n){r(e)&&d(n instanceof Error?n.message:String(n))}finally{r(e)&&m("")}}},D=async()=>{const e=S();if(r(e)){m("test"),d(""),v("");try{const n=await x("/api/settings/agent/test",{method:"POST",signal:e.controller.signal,body:JSON.stringify({})},a);if(!r(e))return;const h=await x("/api/settings/agent",{signal:e.controller.signal},a);if(!r(e))return;C(h.settings);const o=Number.isFinite(n.connection?.latencyMs)?Math.max(0,Math.round(n.connection.latencyMs)):null;p(`Codex Agent connection verified${o!==null?` in ${o} ms.`:"."}`,"success")}catch(n){r(e)&&d(n instanceof Error?n.message:String(n))}finally{r(e)&&m("")}}},T=s?.codexInstallation==="installed"&&s.codexAuth==="signed-in",N=s!==null;return t.jsxs("div",{className:"settings-tab-content agent-settings-content",children:[t.jsxs("section",{className:"settings-section-card agent-enable-card",children:[t.jsxs("label",{className:"settings-toggle agent-enable-toggle",children:[t.jsx("input",{type:"checkbox",checked:f.enabled,onChange:e=>k("enabled",e.target.checked),disabled:!N||i!==""}),t.jsx("span",{children:"Enable Codex Agent"})]}),t.jsxs("p",{className:"settings-help",children:[t.jsx(A,{size:12})," Enabled by default. Agent commands use only the Codex account signed in on this Hub."]})]}),y&&t.jsx("div",{className:"agent-settings-alert error",role:"alert",children:y}),j&&t.jsx("div",{className:"agent-settings-alert success",role:"status",children:j}),t.jsxs("section",{className:"settings-section-card",children:[t.jsxs("div",{className:"settings-section-heading",children:[t.jsxs("div",{children:[t.jsx("span",{children:"Connection"}),t.jsx("h3",{children:"Codex SDK / CLI"})]}),t.jsx(q,{size:20})]}),t.jsxs("div",{className:"agent-connection-row",children:[t.jsx("span",{className:`agent-connection-dot ${T?"connected":s?.codexAuth==="not-signed-in"?"unavailable":""}`}),t.jsx("span",{children:s?.codexInstallation==="not-installed"?"Codex SDK not installed":s?.codexAuth==="signed-in"?"Codex CLI signed in":s?.codexAuth==="not-signed-in"?"Codex CLI sign-in required":"Codex status not tested"}),t.jsxs("button",{className:"settings-reset",onClick:()=>{D()},disabled:i!=="",type:"button",children:[t.jsx(I,{size:15})," ",i==="test"?"Testing":"Test connection"]})]}),t.jsxs("p",{className:"settings-help",children:[t.jsx(A,{size:12})," The Hub uses the installed Codex SDK / CLI to plan approved commands and run them through VuvoDesk Agent tools on selected computers. VuvoDesk never asks for separate credentials."]})]}),t.jsx("div",{className:"settings-action-row agent-settings-actions",children:t.jsxs("button",{className:"text-button primary",onClick:()=>{R()},disabled:!N||i!=="",type:"button",children:[t.jsx(z,{size:15})," ",i==="save"?"Saving":"Save Agent settings"]})})]})}export{F as AgentSettingsTab};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as t,e as ht,h as F}from"./styles-
|
|
1
|
+
import{j as t,e as ht,h as F}from"./styles-BriraxLg.js";import{a as d,m as yt,n as Ce,o as vt,l as ee,X as xe,p as wt,q as kt,s as Je,B as bt,t as Ct,u as Se,S as H,v as xt,w as St,x as _e,b as jt,y as At,k as Ze,z as Rt,N as Nt,F as Pt,H as It,I as Tt,J as Et,U as ue,c as Xe}from"./icons-CacEbnZu.js";import"./react-Cfedt3N5.js";const Ot=d.forwardRef(function({value:s,onChange:n,onSubmit:r,onOpenSuggestedTasks:i,suggestedOpen:f=!1,suggestedTaskCount:c,disabled:v=!1,placeholder:S="Ask VuvoDesk to work across your machines...",compact:g=!1},x){return t.jsxs("form",{className:"agents-composer",onSubmit:w=>{w.preventDefault(),r()},children:[t.jsx("button",{className:`agents-suggested-trigger ${f?"active":""}`,type:"button","aria-label":c===void 0?"Open Suggested tasks":`Open Suggested tasks (${c} available)`,"aria-expanded":f,onClick:i,disabled:v,children:t.jsx(yt,{size:17})}),t.jsx("textarea",{ref:x,value:s,onChange:w=>n(w.target.value.slice(0,4e3)),placeholder:S,"aria-label":"Ask VuvoDesk",rows:g?1:2,disabled:v}),t.jsxs("button",{className:"agents-run-button",type:"submit",disabled:v||!s.trim(),children:[v?t.jsx(Ce,{className:"spin",size:16}):t.jsx(vt,{size:16}),v?"Running":"Run"]})]})}),$t=["read","processControl","serviceControl","applicationControl","fileRead","fileWrite","fileDelete","shell","script","softwareInstall","network","systemPower","systemConfiguration","userAccount"];function de(e){return e.deviceName?.trim()||e.hostname?.trim()||e.deviceId}function pe(e){return e.connected!==!0?!1:e.synthetic===!0?!0:!e.channels||e.channels.control===!0}function Dt(e){return e==="running"||e==="completed"||e==="failed"||e==="cancelled"?e:"queued"}function _t(e){switch(e){case"process.list":return"Process list";case"system.health":return"System health";case"gpu.status":return"GPU status";case"disk.status":return"Disk status";case"service.status":return"Service status";case"diagnostics.collect":return"Diagnostics";case"process.control":return"Process control";case"service.control":return"Service control";case"application.launch":return"Launch application";case"application.close":return"Close application";case"file.read":return"Read file";case"file.write":return"Write file";case"file.delete":return"Delete file";case"file.list":return"List directory";case"command.run":return"Run command";case"script.run":return"Run script";case"software.install":return"Install software";case"network.status":return"Network status";case"system.power":return"Power action";case"system.configure":return"System configuration";case"logs.collect":return"Collect logs"}}const zt=64*1024,ze="[Earlier log output hidden by PWA display limit.]",Qe=new TextEncoder,Mt=new TextDecoder("utf-8",{fatal:!0}),Me=16*1024,Lt=200,Le="(?:access[_-]?(?:token|key)|refresh[_-]?token|id[_-]?token|pair[_-]?(?:token|key)|authorization|api[_-]?key|private[_-]?key|connection[_-]?string|credential|password|passwd|secret|cookie|set-cookie)",Ft="(?:access[_-]?(?:token|key)|refresh[_-]?token|id[_-]?token|pair[_-]?(?:token|key)|token|authorization|api[_-]?key|private[_-]?key|connection[_-]?string|credential|password|passwd|secret|cookie|set-cookie)",Bt="(?:access[_-]?(?:token|key)|refresh[_-]?token|id[_-]?token|pair[_-]?(?:token|key)|token|authorization|api[_-]?key|credential|password|secret|cookie)",Ut=/\b(?:sk-(?:proj-|ant-)?[A-Za-z0-9_-]{8,}|gh[pousr]_[A-Za-z0-9]{8,}|github_pat_[A-Za-z0-9_]{8,}|(?:AKIA|ASIA)[A-Z0-9]{16}|AIza[A-Za-z0-9_-]{35}|npm_[A-Za-z0-9]{8,}|xox[a-z]-[A-Za-z0-9-]{8,}|(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{8,})\b/g;function qt(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Fe(e){return Qe.encode(e).byteLength}function Be(e,s){const n=Qe.encode(e);if(n.byteLength<=s)return{value:e,truncated:!1};let r=n.byteLength-s;for(;r<n.byteLength&&(n[r]&192)===128;)r+=1;let i=Mt.decode(n.subarray(r));const f=i.indexOf(`
|
|
2
2
|
`);return f>=0&&f<i.length-1&&(i=i.slice(f+1)),{value:i,truncated:!0}}function et(e){return e.replace(/-----BEGIN [^-\r\n]*PRIVATE KEY-----[\s\S]*?-----END [^-\r\n]*PRIVATE KEY-----/gi,"[REDACTED PRIVATE KEY]").replace(/\b(?:proxy-)?authorization\s*[:=]\s*[^\r\n]*|\b(?:set-)?cookie\s*[:=]\s*[^\r\n]*/gi,"credential-header=[REDACTED]").replace(/\bBearer\s+(?:"[^"]*"|'[^']*'|[^\s,;]+)/gi,"Bearer [REDACTED]").replace(new RegExp(`("${Le}"\\s*:\\s*")[^"\\r\\n]*(")`,"gi"),"$1[REDACTED]$2").replace(new RegExp(`('${Le}'\\s*:\\s*')[^'\\r\\n]*(')`,"gi"),"$1[REDACTED]$2").replace(new RegExp(`((?:[A-Za-z0-9.-]+[_-])?${Ft}\\s*[:=]\\s*)(?!\\[REDACTED\\])[^\\s,;&]+`,"gi"),"$1[REDACTED]").replace(new RegExp(`([?&]${Bt}=)[^&\\s]+`,"gi"),"$1[REDACTED]").replace(/\b(?:eyJ|[A-Za-z0-9_-]{8,}\.)[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g,"[REDACTED TOKEN]").replace(Ut,"[REDACTED KEY]")}function Gt(e){return typeof e!="string"?"source unknown":et(e).replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,64)||"source unknown"}function Ue(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0?Math.floor(e):null}function Vt(e){if(typeof e!="string"||e.length===0)return{output:"",displayTruncated:!1};const s=Be(e.replace(/\r\n?/g,`
|
|
3
3
|
`),zt);let n=et(s.value).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g," ").trim(),r=s.truncated;const i=n?n.split(`
|
|
4
4
|
`):[];if(i.length>Lt-1&&(n=i.slice(-199).join(`
|