@stim-cli/core 1.38.0 → 1.40.0-next.20261103050129.gd5fe899
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{core-Hohf5Wnt.mjs → core-DdPq-c64.mjs} +8 -1
- package/dist/{index-UT7ghV30.d.mts → index-DYumFNYh.d.mts} +220 -17
- package/dist/index.d.mts +7 -2
- package/dist/index.mjs +2 -2
- package/dist/noise-session.d.mts +10 -2
- package/dist/noise-session.mjs +17 -3
- package/dist/phone-protocol.d.mts +5 -9
- package/dist/{protocol-CGriFVo2.d.mts → protocol-_p7V6XGi.d.mts} +124 -26
- package/dist/protocol.d.mts +2 -2
- package/dist/protocol.mjs +20 -8
- package/dist/receive-protocol.mjs +6837 -7768
- package/dist/state.d.mts +2 -2
- package/dist/state.mjs +230 -62
- package/package.json +1 -1
package/dist/state.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { S as tryAcquireClaim, _ as releaseClaim, f as isClaimRefusal, g as readClaimSet } from "./ownership-claim-DG2GMIoo.mjs";
|
|
2
2
|
import { inspectProcessIdentity } from "./process-identity.mjs";
|
|
3
|
-
import { $ as
|
|
3
|
+
import { $ as withDirLock, E as workspaceStateDir, G as ambientEnv, J as isJsonObject, Q as withStateReadCache, W as ambientContext, X as readJsonObject, Y as readJsonFile, Z as readStateFile, _ as rotateLog, d as ensurePrivateDir, et as withDirLockAsync, t as LOG_ROTATE_BYTES, u as configDir, v as rotatedLogPath, w as workspaceName } from "./core-DdPq-c64.mjs";
|
|
4
4
|
import { readOrCreateKeyFile } from "./noise-session.mjs";
|
|
5
5
|
import { validHomeId } from "./workspace-link.mjs";
|
|
6
6
|
import { a as workspaceSummary, i as statusViews, n as applyKeyedDelta, o as withDerivedFacts, r as SUMMARY_ARCHIVES, s as withGitChip, t as KeyedEntities } from "./keyed-delta-BBoOeR2J.mjs";
|
|
7
7
|
import { appendFileSync, closeSync, existsSync, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, realpathSync, statSync, watch, writeFileSync, writeSync } from "node:fs";
|
|
8
|
-
import { availableParallelism, homedir, loadavg } from "node:os";
|
|
8
|
+
import { availableParallelism, homedir, loadavg, totalmem } from "node:os";
|
|
9
9
|
import { basename, dirname, isAbsolute, join, posix, relative, resolve, sep, win32 } from "node:path";
|
|
10
10
|
import { createHash, randomBytes } from "node:crypto";
|
|
11
11
|
import { setImmediate as setImmediate$1 } from "node:timers/promises";
|
|
@@ -737,9 +737,6 @@ function maintenanceDir() {
|
|
|
737
737
|
function maintenanceStateFile() {
|
|
738
738
|
return join(maintenanceDir(), "state.json");
|
|
739
739
|
}
|
|
740
|
-
function maintenanceAttemptFile() {
|
|
741
|
-
return join(maintenanceDir(), "attempt.json");
|
|
742
|
-
}
|
|
743
740
|
function maintenanceNdjsonFile() {
|
|
744
741
|
return join(maintenanceDir(), "maintenance.ndjson");
|
|
745
742
|
}
|
|
@@ -786,16 +783,38 @@ function clientIdentityKeyFile() {
|
|
|
786
783
|
return join(configDir(), "client-identity.key");
|
|
787
784
|
}
|
|
788
785
|
/**
|
|
789
|
-
*
|
|
786
|
+
* A Unix socket at `path`. sun_path permits 103 UTF-8 bytes on macOS and 107 on Linux. Longer paths use
|
|
790
787
|
* /tmp/stim-sockets-<uid>/<SHA-256 of the normalized absolute socket path>.sock.
|
|
791
788
|
*/
|
|
792
|
-
function
|
|
793
|
-
const path = join(configDir(), "server", "local.sock");
|
|
789
|
+
function localSocket(path) {
|
|
794
790
|
const uid = process.getuid?.();
|
|
795
791
|
const maximumPathBytes = process.platform === "linux" ? 107 : 103;
|
|
796
792
|
if (uid === void 0 || Buffer.byteLength(path) <= maximumPathBytes) return path;
|
|
797
793
|
return join("/tmp", `stim-sockets-${uid}`, `${createHash("sha256").update(path).digest("hex")}.sock`);
|
|
798
794
|
}
|
|
795
|
+
/** stim-server's Unix socket for this machine's own user. */
|
|
796
|
+
function serverLocalSocket() {
|
|
797
|
+
return localSocket(join(configDir(), "server", "local.sock"));
|
|
798
|
+
}
|
|
799
|
+
/** The home daemon's directory: its claim, log, snapshot and, when the path fits, its socket. */
|
|
800
|
+
function daemonDir() {
|
|
801
|
+
return join(configDir(), "daemon");
|
|
802
|
+
}
|
|
803
|
+
/** The ownership claim the running home daemon holds for its lifetime. */
|
|
804
|
+
function daemonClaimRoot() {
|
|
805
|
+
return join(daemonDir(), "claim");
|
|
806
|
+
}
|
|
807
|
+
function daemonSocket() {
|
|
808
|
+
return localSocket(join(daemonDir(), "daemon.sock"));
|
|
809
|
+
}
|
|
810
|
+
/** The daemon's own log, rotated like workspace logs. */
|
|
811
|
+
function daemonNdjsonFile() {
|
|
812
|
+
return join(daemonDir(), "daemon.ndjson");
|
|
813
|
+
}
|
|
814
|
+
/** What the daemon's last tick measured and decided, written atomically each tick. */
|
|
815
|
+
function daemonSnapshotFile() {
|
|
816
|
+
return join(daemonDir(), "snapshot.json");
|
|
817
|
+
}
|
|
799
818
|
function serverSetupDir() {
|
|
800
819
|
return join(configDir(), "server", "setup");
|
|
801
820
|
}
|
|
@@ -890,6 +909,30 @@ function getConcurrencyLimits({ env = ambientEnv() } = {}) {
|
|
|
890
909
|
maxDevices: resolveLimit(env.STIM_MAX_DEVICES, c.maxDevices)
|
|
891
910
|
};
|
|
892
911
|
}
|
|
912
|
+
const GIB = 1024 ** 3;
|
|
913
|
+
/** The derived `concurrency.maxBuilds`: one native build per six cores, at least one. */
|
|
914
|
+
function derivedBuildCap(cores = availableParallelism()) {
|
|
915
|
+
return Math.max(1, Math.floor(cores / 6));
|
|
916
|
+
}
|
|
917
|
+
/** The derived `concurrency.maxDevices`: one booted simulator or emulator per 1.5 GB of RAM above 4 GB, at least two. */
|
|
918
|
+
function derivedDeviceCap(totalBytes = totalmem()) {
|
|
919
|
+
return Math.max(2, Math.floor((totalBytes - 4 * GIB) / (1.5 * GIB)));
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* The build and device caps admission enforces: `concurrency.maxBuilds` and `concurrency.maxDevices` when set above 0,
|
|
923
|
+
* else the derived caps. `derived` names the caps that were derived.
|
|
924
|
+
*/
|
|
925
|
+
function admissionLimits({ env = ambientEnv(), cores, totalBytes } = {}) {
|
|
926
|
+
const set = getConcurrencyLimits({ env });
|
|
927
|
+
return {
|
|
928
|
+
maxBuilds: set.maxBuilds || derivedBuildCap(cores),
|
|
929
|
+
maxDevices: set.maxDevices || derivedDeviceCap(totalBytes),
|
|
930
|
+
derived: {
|
|
931
|
+
builds: set.maxBuilds === 0,
|
|
932
|
+
devices: set.maxDevices === 0
|
|
933
|
+
}
|
|
934
|
+
};
|
|
935
|
+
}
|
|
893
936
|
function getPlatformDeviceLimits({ env = ambientEnv() } = {}) {
|
|
894
937
|
const c = loadConfig()?.concurrency || {};
|
|
895
938
|
return {
|
|
@@ -1270,7 +1313,8 @@ const REMOTE_DEVICE_BACKENDS = ["proxy", "eas"];
|
|
|
1270
1313
|
const IOS_SIMULATOR_APPS = [
|
|
1271
1314
|
"xcode",
|
|
1272
1315
|
"siniulator",
|
|
1273
|
-
"stim-desktop"
|
|
1316
|
+
"stim-desktop",
|
|
1317
|
+
"none"
|
|
1274
1318
|
];
|
|
1275
1319
|
const ANDROID_EMULATOR_APPS = ["emulator", "stim-desktop"];
|
|
1276
1320
|
const REPLACED_SETTINGS = { "remote.buildMode": {
|
|
@@ -1287,6 +1331,12 @@ function replacementAdvice(key, old) {
|
|
|
1287
1331
|
command: value ? `stim settings set ${replaced.key} ${value}` : null
|
|
1288
1332
|
};
|
|
1289
1333
|
}
|
|
1334
|
+
const SHARE_DEFAULT_PORT = 7790;
|
|
1335
|
+
const SHARE_EXPOSURES = [
|
|
1336
|
+
"auto",
|
|
1337
|
+
"tailscale",
|
|
1338
|
+
"proxy"
|
|
1339
|
+
];
|
|
1290
1340
|
const WEB_VIEWPORTS = ["desktop", "phone"];
|
|
1291
1341
|
const PROJECT = [
|
|
1292
1342
|
"workspace",
|
|
@@ -1657,6 +1707,27 @@ const SETTINGS = [
|
|
|
1657
1707
|
scopes: PROJECT,
|
|
1658
1708
|
description: "Bundle URL `stim android` prefetches to warm Metro"
|
|
1659
1709
|
},
|
|
1710
|
+
{
|
|
1711
|
+
key: "idle.minutes",
|
|
1712
|
+
type: {
|
|
1713
|
+
kind: "number",
|
|
1714
|
+
integer: true,
|
|
1715
|
+
minimum: 0
|
|
1716
|
+
},
|
|
1717
|
+
scopes: EVERY,
|
|
1718
|
+
default: 15,
|
|
1719
|
+
description: "Minutes without activity before a workspace goes idle: its dev server stops with its port kept, its owned simulators and emulators shut down, and its regenerable build outputs are deleted; stim revive resumes it. Unset, the smaller of metro.idleStopMinutes and devices.idleShutdownMinutes; 0 never"
|
|
1720
|
+
},
|
|
1721
|
+
{
|
|
1722
|
+
key: "idle.dormantDays",
|
|
1723
|
+
type: {
|
|
1724
|
+
kind: "number",
|
|
1725
|
+
minimum: 0
|
|
1726
|
+
},
|
|
1727
|
+
scopes: MACHINE,
|
|
1728
|
+
default: 3,
|
|
1729
|
+
description: "Days without activity before a workspace goes dormant: its owned simulators and emulators are deleted (the parked pool is untouched) and its logs are archived, while node_modules and Pods stay; any Stim command run in it leaves the stage. Fractions of a day are allowed; 0 never"
|
|
1730
|
+
},
|
|
1660
1731
|
{
|
|
1661
1732
|
key: "metro.idleStopMinutes",
|
|
1662
1733
|
type: {
|
|
@@ -1665,8 +1736,8 @@ const SETTINGS = [
|
|
|
1665
1736
|
minimum: 0
|
|
1666
1737
|
},
|
|
1667
1738
|
scopes: PROJECT,
|
|
1668
|
-
default:
|
|
1669
|
-
description: "
|
|
1739
|
+
default: 15,
|
|
1740
|
+
description: "Read as idle.minutes while idle.minutes is unset, when it is the smaller of the two; 0 never"
|
|
1670
1741
|
},
|
|
1671
1742
|
{
|
|
1672
1743
|
key: "devices.idleShutdownMinutes",
|
|
@@ -1676,8 +1747,8 @@ const SETTINGS = [
|
|
|
1676
1747
|
minimum: 0
|
|
1677
1748
|
},
|
|
1678
1749
|
scopes: EVERY,
|
|
1679
|
-
default:
|
|
1680
|
-
description: "
|
|
1750
|
+
default: 15,
|
|
1751
|
+
description: "Read as idle.minutes while idle.minutes is unset, when it is the smaller of the two; 0 never"
|
|
1681
1752
|
},
|
|
1682
1753
|
{
|
|
1683
1754
|
key: "devices.reclaimIdleMinutes",
|
|
@@ -1688,7 +1759,7 @@ const SETTINGS = [
|
|
|
1688
1759
|
},
|
|
1689
1760
|
scopes: EVERY,
|
|
1690
1761
|
default: 10,
|
|
1691
|
-
description: "
|
|
1762
|
+
description: "Not read: while a run waits for a device slot, the stim-daemon shuts down the longest-idle device of another workspace idle 2 minutes or more"
|
|
1692
1763
|
},
|
|
1693
1764
|
{
|
|
1694
1765
|
key: "macos.product",
|
|
@@ -1890,7 +1961,7 @@ const SETTINGS = [
|
|
|
1890
1961
|
scopes: MACHINE,
|
|
1891
1962
|
default: "xcode",
|
|
1892
1963
|
desktopDefault: "stim-desktop",
|
|
1893
|
-
description: "App that displays an owned iOS simulator; stim-desktop by default when Stim Desktop is installed"
|
|
1964
|
+
description: "App that displays an owned iOS simulator, or none to open no viewer; stim-desktop by default when Stim Desktop is installed"
|
|
1894
1965
|
},
|
|
1895
1966
|
{
|
|
1896
1967
|
key: "androidEmulatorApp",
|
|
@@ -1909,7 +1980,7 @@ const SETTINGS = [
|
|
|
1909
1980
|
scopes: MACHINE,
|
|
1910
1981
|
default: 0,
|
|
1911
1982
|
env: "STIM_MAX_BUILDS",
|
|
1912
|
-
description: "Concurrent native builds; 0
|
|
1983
|
+
description: "Concurrent native builds; 0 derives max(1, floor(CPU cores / 6))"
|
|
1913
1984
|
},
|
|
1914
1985
|
{
|
|
1915
1986
|
key: "concurrency.maxDevices",
|
|
@@ -1917,7 +1988,7 @@ const SETTINGS = [
|
|
|
1917
1988
|
scopes: MACHINE,
|
|
1918
1989
|
default: 0,
|
|
1919
1990
|
env: "STIM_MAX_DEVICES",
|
|
1920
|
-
description: "Booted owned iOS simulators and Android emulators together
|
|
1991
|
+
description: "Booted owned iOS simulators and Android emulators together; local and hosted macOS apps use separate pools; 0 derives max(2, floor((RAM - 4 GB) / 1.5 GB))"
|
|
1921
1992
|
},
|
|
1922
1993
|
{
|
|
1923
1994
|
key: "concurrency.maxIosDevices",
|
|
@@ -1941,7 +2012,7 @@ const SETTINGS = [
|
|
|
1941
2012
|
scopes: MACHINE,
|
|
1942
2013
|
default: 0,
|
|
1943
2014
|
env: "STIM_MAX_MACOS_APPS",
|
|
1944
|
-
description: "
|
|
2015
|
+
description: "Local and hosted macOS apps in separate pools, also bounded by concurrency.maxDevices; 0 means no per-platform limit"
|
|
1945
2016
|
},
|
|
1946
2017
|
{
|
|
1947
2018
|
key: "budget.minFreeDiskGb",
|
|
@@ -1949,8 +2020,7 @@ const SETTINGS = [
|
|
|
1949
2020
|
scopes: MACHINE,
|
|
1950
2021
|
default: 20,
|
|
1951
2022
|
env: "STIM_BUDGET_MIN_FREE_DISK_GB",
|
|
1952
|
-
|
|
1953
|
-
description: "Free disk, in GB, ios, android and start reclaim toward; 0 reclaims only below the hard floor"
|
|
2023
|
+
description: "Free disk, in GB, on a volume Stim writes to below which the pressure level is high and the stim-daemon reclaims; 0 turns the high disk level off"
|
|
1954
2024
|
},
|
|
1955
2025
|
{
|
|
1956
2026
|
key: "budget.hardFloorDiskGb",
|
|
@@ -1958,8 +2028,15 @@ const SETTINGS = [
|
|
|
1958
2028
|
scopes: MACHINE,
|
|
1959
2029
|
default: 5,
|
|
1960
2030
|
env: "STIM_BUDGET_HARD_FLOOR_DISK_GB",
|
|
1961
|
-
|
|
1962
|
-
|
|
2031
|
+
description: "Free disk, in GB, below which start, ios and android refuse with STIM_LOW_DISK after the stim-daemon's pressure ladder ran; 0 never refuses"
|
|
2032
|
+
},
|
|
2033
|
+
{
|
|
2034
|
+
key: "disk.criticalFreeGb",
|
|
2035
|
+
type: GIGABYTES,
|
|
2036
|
+
scopes: MACHINE,
|
|
2037
|
+
default: 6,
|
|
2038
|
+
env: "STIM_DISK_CRITICAL_FREE_GB",
|
|
2039
|
+
description: "Free disk, in GB, on a volume Stim writes to below which the pressure level is critical: the stim-daemon empties the Metro and compilation caches and deletes the devices of idle workspaces and their node_modules and Pods; 0 turns the critical disk level off"
|
|
1963
2040
|
},
|
|
1964
2041
|
{
|
|
1965
2042
|
key: "budget.maxCommittedMemoryGb",
|
|
@@ -1967,7 +2044,7 @@ const SETTINGS = [
|
|
|
1967
2044
|
scopes: MACHINE,
|
|
1968
2045
|
env: "STIM_BUDGET_MAX_COMMITTED_MEMORY_GB",
|
|
1969
2046
|
scopedHomeValue: 0,
|
|
1970
|
-
description: "
|
|
2047
|
+
description: "Not read: the stim-daemon's pressure ladder replaced the per-command budget"
|
|
1971
2048
|
},
|
|
1972
2049
|
{
|
|
1973
2050
|
key: "budget.maxLiveWorkspaces",
|
|
@@ -1975,7 +2052,7 @@ const SETTINGS = [
|
|
|
1975
2052
|
scopes: MACHINE,
|
|
1976
2053
|
env: "STIM_BUDGET_MAX_LIVE_WORKSPACES",
|
|
1977
2054
|
scopedHomeValue: 0,
|
|
1978
|
-
description: "
|
|
2055
|
+
description: "Not read: the stim-daemon's pressure ladder replaced the per-command budget"
|
|
1979
2056
|
},
|
|
1980
2057
|
{
|
|
1981
2058
|
key: "maintenance.mode",
|
|
@@ -2004,7 +2081,7 @@ const SETTINGS = [
|
|
|
2004
2081
|
scopes: MACHINE,
|
|
2005
2082
|
default: 1,
|
|
2006
2083
|
env: "STIM_MAINTENANCE_PRESSURE_CHECK_MINUTES",
|
|
2007
|
-
description: "
|
|
2084
|
+
description: "Not read: the stim-daemon measures disk and memory every tick"
|
|
2008
2085
|
},
|
|
2009
2086
|
{
|
|
2010
2087
|
key: "maintenance.sizeCheckMinutes",
|
|
@@ -2073,7 +2150,7 @@ const SETTINGS = [
|
|
|
2073
2150
|
scopes: MACHINE,
|
|
2074
2151
|
default: "warning",
|
|
2075
2152
|
env: "STIM_MAINTENANCE_MEMORY_PRESSURE_LEVEL",
|
|
2076
|
-
description: "
|
|
2153
|
+
description: "off: automatic maintenance names no memory culprits and stim gc --cache gradle-daemons never stops a daemon for memory; otherwise the stim-daemon's memory level (warning for 10 minutes, or critical) decides"
|
|
2077
2154
|
},
|
|
2078
2155
|
{
|
|
2079
2156
|
key: "maintenance.memoryWarningMinutes",
|
|
@@ -2085,7 +2162,7 @@ const SETTINGS = [
|
|
|
2085
2162
|
scopes: MACHINE,
|
|
2086
2163
|
default: 10,
|
|
2087
2164
|
env: "STIM_MAINTENANCE_MEMORY_WARNING_MINUTES",
|
|
2088
|
-
description: "
|
|
2165
|
+
description: "Not read: the stim-daemon's pressure level counts macOS memory pressure warning for 10 minutes"
|
|
2089
2166
|
},
|
|
2090
2167
|
{
|
|
2091
2168
|
key: "maintenance.minAvailableMemoryGb",
|
|
@@ -2095,7 +2172,7 @@ const SETTINGS = [
|
|
|
2095
2172
|
},
|
|
2096
2173
|
scopes: MACHINE,
|
|
2097
2174
|
env: "STIM_MAINTENANCE_MIN_AVAILABLE_MEMORY_GB",
|
|
2098
|
-
description: "
|
|
2175
|
+
description: "Not read: the stim-daemon's pressure level is high while available memory is under 10% of RAM"
|
|
2099
2176
|
},
|
|
2100
2177
|
{
|
|
2101
2178
|
key: "maintenance.capTargetPercent",
|
|
@@ -2132,7 +2209,7 @@ const SETTINGS = [
|
|
|
2132
2209
|
scopes: MACHINE,
|
|
2133
2210
|
default: 5,
|
|
2134
2211
|
env: "STIM_MAINTENANCE_IDLE_CHECK_MINUTES",
|
|
2135
|
-
description: "Interval in minutes of the check that
|
|
2212
|
+
description: "Interval in minutes of the automatic maintenance check that stops a workspace with a device hosted on a remote Mac once it is idle for maintenance.idleStopHours; the stim-daemon decides idle for other workspaces every minute (idle.minutes)"
|
|
2136
2213
|
},
|
|
2137
2214
|
{
|
|
2138
2215
|
key: "maintenance.idleStopHours",
|
|
@@ -2143,7 +2220,7 @@ const SETTINGS = [
|
|
|
2143
2220
|
scopes: EVERY,
|
|
2144
2221
|
default: 6,
|
|
2145
2222
|
env: "STIM_MAINTENANCE_IDLE_STOP_HOURS",
|
|
2146
|
-
description: "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command or
|
|
2223
|
+
description: "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command, input forwarded to a device or use of its frontmost device window before gc --delete stops a workspace's dev server and shuts down its owned or hosted simulators and emulators, as stim stop does, automatic maintenance does the same for a workspace with a hosted device, and stim-server stops a hosted session whose client has been gone that long; device and app log lines do not count; 0 never"
|
|
2147
2224
|
},
|
|
2148
2225
|
{
|
|
2149
2226
|
key: "maintenance.sweepHours",
|
|
@@ -2179,7 +2256,7 @@ const SETTINGS = [
|
|
|
2179
2256
|
scopes: MACHINE,
|
|
2180
2257
|
default: 3,
|
|
2181
2258
|
env: "STIM_MAINTENANCE_DEVICE_IDLE_DAYS",
|
|
2182
|
-
description: "
|
|
2259
|
+
description: "Not read: idle.dormantDays deletes the owned devices of a workspace without activity"
|
|
2183
2260
|
},
|
|
2184
2261
|
{
|
|
2185
2262
|
key: "maintenance.protectRecentHours",
|
|
@@ -2199,7 +2276,7 @@ const SETTINGS = [
|
|
|
2199
2276
|
scopes: MACHINE,
|
|
2200
2277
|
default: 12,
|
|
2201
2278
|
env: "STIM_MAINTENANCE_URGENT_FREE_DISK_GB",
|
|
2202
|
-
description: "
|
|
2279
|
+
description: "Not read: budget.minFreeDiskGb and disk.criticalFreeGb set the stim-daemon's pressure levels"
|
|
2203
2280
|
},
|
|
2204
2281
|
{
|
|
2205
2282
|
key: "maintenance.criticalFreeDiskGb",
|
|
@@ -2207,7 +2284,7 @@ const SETTINGS = [
|
|
|
2207
2284
|
scopes: MACHINE,
|
|
2208
2285
|
default: 6,
|
|
2209
2286
|
env: "STIM_MAINTENANCE_CRITICAL_FREE_DISK_GB",
|
|
2210
|
-
description: "
|
|
2287
|
+
description: "Not read: disk.criticalFreeGb sets the stim-daemon's critical pressure level"
|
|
2211
2288
|
},
|
|
2212
2289
|
{
|
|
2213
2290
|
key: "maintenance.pressureProtectMinutes",
|
|
@@ -2219,7 +2296,7 @@ const SETTINGS = [
|
|
|
2219
2296
|
scopes: MACHINE,
|
|
2220
2297
|
default: 10,
|
|
2221
2298
|
env: "STIM_MAINTENANCE_PRESSURE_PROTECT_MINUTES",
|
|
2222
|
-
description: "
|
|
2299
|
+
description: "Not read: the stim-daemon's pressure ladder never touches a workspace with a blocker and takes the longest-idle first"
|
|
2223
2300
|
},
|
|
2224
2301
|
{
|
|
2225
2302
|
key: "maintenance.gradleVersionIdleDays",
|
|
@@ -2231,7 +2308,7 @@ const SETTINGS = [
|
|
|
2231
2308
|
scopes: MACHINE,
|
|
2232
2309
|
default: 7,
|
|
2233
2310
|
env: "STIM_MAINTENANCE_GRADLE_VERSION_IDLE_DAYS",
|
|
2234
|
-
description: "
|
|
2311
|
+
description: "Days an unpinned Gradle version's caches and wrapper distribution stay unmodified before the stim-daemon deletes them, on its daily sweep or at once under disk pressure, after stopping the idle Gradle and Kotlin daemons that keep them; 0 turns this off"
|
|
2235
2312
|
},
|
|
2236
2313
|
{
|
|
2237
2314
|
key: "maintenance.removeFinishedWorktrees",
|
|
@@ -2337,6 +2414,22 @@ const SETTINGS = [
|
|
|
2337
2414
|
scopedHomeValue: 0,
|
|
2338
2415
|
description: "Parked emulators kept for adoption; 0 turns parking off"
|
|
2339
2416
|
},
|
|
2417
|
+
{
|
|
2418
|
+
key: "daemon.mode",
|
|
2419
|
+
type: {
|
|
2420
|
+
kind: "choice",
|
|
2421
|
+
choices: [
|
|
2422
|
+
"on",
|
|
2423
|
+
"report",
|
|
2424
|
+
"off"
|
|
2425
|
+
]
|
|
2426
|
+
},
|
|
2427
|
+
scopes: MACHINE,
|
|
2428
|
+
default: "on",
|
|
2429
|
+
env: "STIM_DAEMON",
|
|
2430
|
+
ciValue: "off",
|
|
2431
|
+
description: "The per-home stim-daemon that start, ios, android, web, macos and revive start and that exits once nothing runs in the home and every workspace is dormant or removed. on: it decides idle, stopping idle workspaces and deleting their regenerable build outputs, and runs automatic maintenance. report: it logs what it would do and acts on nothing. off: no daemon; each dev server supervisor times its own idle stop, and doctor, start, ios and android run automatic maintenance in their own process. The daemon keeps the mode it started with, STIM_DAEMON included, unless the machine setting later turns stricter, and the CI and non-sensitive setting environment overrides of the command that started it for its whole life. Off in CI unless STIM_DAEMON is set. Windows has no daemon and works as off"
|
|
2432
|
+
},
|
|
2340
2433
|
{
|
|
2341
2434
|
key: "debug.logs",
|
|
2342
2435
|
type: { kind: "boolean" },
|
|
@@ -2376,6 +2469,38 @@ const SETTINGS = [
|
|
|
2376
2469
|
default: false,
|
|
2377
2470
|
description: "Whether a machine approved for builds or device hosting here may update this machine's stim-server service to that machine's own stim-server build; releases from npm need no setting"
|
|
2378
2471
|
},
|
|
2472
|
+
{
|
|
2473
|
+
key: "share.exposure",
|
|
2474
|
+
type: {
|
|
2475
|
+
kind: "choice",
|
|
2476
|
+
choices: SHARE_EXPOSURES
|
|
2477
|
+
},
|
|
2478
|
+
scopes: MACHINE,
|
|
2479
|
+
default: "auto",
|
|
2480
|
+
description: "How stim share is reached from the internet: tailscale through a Tailscale Funnel route, proxy through your own reverse proxy that forwards to a loopback port, auto tailscale when the tailscale command is installed and logged in, else proxy. proxy never runs tailscale serve or tailscale funnel"
|
|
2481
|
+
},
|
|
2482
|
+
{
|
|
2483
|
+
key: "share.publicUrl",
|
|
2484
|
+
type: {
|
|
2485
|
+
kind: "string",
|
|
2486
|
+
pattern: "^https://[^\\s/?#@]+(/[^\\s?#]*)?$",
|
|
2487
|
+
patternHelp: "an https origin, optionally with a path prefix, such as https://demo.example.com"
|
|
2488
|
+
},
|
|
2489
|
+
scopes: MACHINE,
|
|
2490
|
+
description: "The https address your reverse proxy serves shares under in proxy mode, optionally with a path prefix that the proxy leaves on the path, such as https://demo.example.com. Share links print under it and its origin is the only one the frame socket accepts. Without it proxy mode prints a loopback link and a warning"
|
|
2491
|
+
},
|
|
2492
|
+
{
|
|
2493
|
+
key: "share.port",
|
|
2494
|
+
type: {
|
|
2495
|
+
kind: "number",
|
|
2496
|
+
integer: true,
|
|
2497
|
+
minimum: 1024,
|
|
2498
|
+
maximum: 65535
|
|
2499
|
+
},
|
|
2500
|
+
scopes: MACHINE,
|
|
2501
|
+
default: SHARE_DEFAULT_PORT,
|
|
2502
|
+
description: "The loopback port the share listener binds in proxy mode, so your reverse proxy can name it. It is not used in tailscale mode, which picks a free port"
|
|
2503
|
+
},
|
|
2379
2504
|
{
|
|
2380
2505
|
key: "server.lanAddresses",
|
|
2381
2506
|
type: { kind: "strings" },
|
|
@@ -2433,6 +2558,13 @@ const SETTINGS = [
|
|
|
2433
2558
|
env: "STIM_REMOTE_BUILD",
|
|
2434
2559
|
description: "Where iOS simulator Debug, Android emulator debug and macOS SwiftPM Debug builds run: local here; auto here while it has a free concurrency.maxBuilds slot and load under server.maxLoadPerCore, otherwise on a remote.machines entry; remote on a remote.machines entry in order, here only when none takes the build; remote-only the same but never here; a machine name exactly that machine without fallback. The ios, android and macos --remote-build flag overrides this setting and its environment override"
|
|
2435
2560
|
},
|
|
2561
|
+
{
|
|
2562
|
+
key: "server.maxOffloadedBuilds",
|
|
2563
|
+
type: CAPACITY,
|
|
2564
|
+
scopes: MACHINE,
|
|
2565
|
+
default: 0,
|
|
2566
|
+
description: "Builds from other machines this machine runs at once, across every client; 0 means no limit. server.maxLoadPerCore, concurrency.maxBuilds and the free disk floor still apply"
|
|
2567
|
+
},
|
|
2436
2568
|
{
|
|
2437
2569
|
key: "server.maxLoadPerCore",
|
|
2438
2570
|
type: {
|
|
@@ -2449,18 +2581,6 @@ const SETTINGS = [
|
|
|
2449
2581
|
scopes: MACHINE,
|
|
2450
2582
|
description: "Directory where stim-server keeps the checkouts, dependencies and build state of the machines that build here; default $STIM_HOME/build-worker"
|
|
2451
2583
|
},
|
|
2452
|
-
{
|
|
2453
|
-
key: "server.gradleDaemonIdleMinutes",
|
|
2454
|
-
type: {
|
|
2455
|
-
kind: "number",
|
|
2456
|
-
integer: true,
|
|
2457
|
-
minimum: 0,
|
|
2458
|
-
maximum: 35791
|
|
2459
|
-
},
|
|
2460
|
-
scopes: MACHINE,
|
|
2461
|
-
default: 30,
|
|
2462
|
-
description: "Minutes the Gradle daemon of an Android build another machine sent here stays warm after the build; 0 stops it when the build ends"
|
|
2463
|
-
},
|
|
2464
2584
|
{
|
|
2465
2585
|
key: "caches.buildCache",
|
|
2466
2586
|
type: ABSOLUTE_PATH,
|
|
@@ -2648,6 +2768,12 @@ function maxLoadPerCore() {
|
|
|
2648
2768
|
if (typeof value === "number" && Number.isFinite(value) && value > 0) return value;
|
|
2649
2769
|
return settingDefinition("server.maxLoadPerCore").default;
|
|
2650
2770
|
}
|
|
2771
|
+
/** `server.maxOffloadedBuilds`: how many builds from other machines run here at once, 0 when unlimited. */
|
|
2772
|
+
function maxOffloadedBuilds() {
|
|
2773
|
+
const value = loadConfig()?.server?.maxOffloadedBuilds;
|
|
2774
|
+
if (typeof value === "number" && Number.isInteger(value) && value >= 0) return value;
|
|
2775
|
+
return Number(settingDefinition("server.maxOffloadedBuilds")?.default ?? 0);
|
|
2776
|
+
}
|
|
2651
2777
|
function liveNativeBuilds() {
|
|
2652
2778
|
const dir = join(configDir(), "workspaces");
|
|
2653
2779
|
let names;
|
|
@@ -2693,7 +2819,7 @@ function machineCapacity() {
|
|
|
2693
2819
|
return {
|
|
2694
2820
|
...loadPerCore(),
|
|
2695
2821
|
builds: liveNativeBuilds() + liveOffloadedSlots(),
|
|
2696
|
-
maxBuilds:
|
|
2822
|
+
maxBuilds: admissionLimits().maxBuilds,
|
|
2697
2823
|
maxLoadPerCore: maxLoadPerCore()
|
|
2698
2824
|
};
|
|
2699
2825
|
}
|
|
@@ -4811,6 +4937,7 @@ function settingsJsonSchema() {
|
|
|
4811
4937
|
//#region state/status.ts
|
|
4812
4938
|
const BUILD_PHASES = [
|
|
4813
4939
|
"prepare",
|
|
4940
|
+
"cleanup",
|
|
4814
4941
|
"cache-lookup",
|
|
4815
4942
|
"wait",
|
|
4816
4943
|
"prebuild",
|
|
@@ -5163,7 +5290,36 @@ function readIdleStop(state) {
|
|
|
5163
5290
|
idleMinutes: record.idleMinutes
|
|
5164
5291
|
};
|
|
5165
5292
|
}
|
|
5293
|
+
const IDLE_STAGE_KEY = "idleStage";
|
|
5294
|
+
function readIdleStage(state) {
|
|
5295
|
+
const record = state?.[IDLE_STAGE_KEY];
|
|
5296
|
+
if (!isJsonObject(record) || typeof record.at !== "string" || typeof record.idleMinutes !== "number") return null;
|
|
5297
|
+
return {
|
|
5298
|
+
at: record.at,
|
|
5299
|
+
idleMinutes: record.idleMinutes,
|
|
5300
|
+
freedBytes: typeof record.freedBytes === "number" ? record.freedBytes : 0
|
|
5301
|
+
};
|
|
5302
|
+
}
|
|
5303
|
+
const DORMANT_STAGE_KEY = "dormantStage";
|
|
5304
|
+
function readDormantStage(state) {
|
|
5305
|
+
const record = state?.[DORMANT_STAGE_KEY];
|
|
5306
|
+
if (!isJsonObject(record) || typeof record.at !== "string" || typeof record.dormantDays !== "number") return null;
|
|
5307
|
+
return {
|
|
5308
|
+
at: record.at,
|
|
5309
|
+
dormantDays: record.dormantDays,
|
|
5310
|
+
deletedDevices: Array.isArray(record.deletedDevices) ? record.deletedDevices.filter((entry) => typeof entry === "string") : [],
|
|
5311
|
+
archived: record.archived === true
|
|
5312
|
+
};
|
|
5313
|
+
}
|
|
5314
|
+
const INTERACTIONS_KEY = "interactions";
|
|
5315
|
+
/** When a person last used each device slot's focused Simulator or emulator window, by device slot key. */
|
|
5316
|
+
function readInteractions(state) {
|
|
5317
|
+
const records = state?.[INTERACTIONS_KEY];
|
|
5318
|
+
if (!isJsonObject(records)) return {};
|
|
5319
|
+
return Object.fromEntries(Object.entries(records).filter((entry) => typeof entry[1] === "string" && Number.isFinite(Date.parse(entry[1]))));
|
|
5320
|
+
}
|
|
5166
5321
|
const DEVICE_RECLAIM_REASON = "reclaimed for a waiting run";
|
|
5322
|
+
const DEVICE_METRO_IDLE_STOP_REASON = "Metro's idle stop";
|
|
5167
5323
|
const DEVICE_IDLE_SHUTDOWN_KEY = "deviceIdleShutdowns";
|
|
5168
5324
|
/** The recorded idle shutdowns by device slot key (`ios`, `android`, `ios:<slot>`). */
|
|
5169
5325
|
function readDeviceIdleShutdowns(state) {
|
|
@@ -5189,7 +5345,8 @@ function readDevServerStopRequest(state) {
|
|
|
5189
5345
|
by: record.by,
|
|
5190
5346
|
pid: record.pid,
|
|
5191
5347
|
at: record.at,
|
|
5192
|
-
...typeof record.workspace === "string" ? { workspace: record.workspace } : {}
|
|
5348
|
+
...typeof record.workspace === "string" ? { workspace: record.workspace } : {},
|
|
5349
|
+
...typeof record.idleMinutes === "number" ? { idleMinutes: record.idleMinutes } : {}
|
|
5193
5350
|
};
|
|
5194
5351
|
}
|
|
5195
5352
|
function readDevServerStop(state) {
|
|
@@ -5476,16 +5633,18 @@ function readWorkspaceAgent(state) {
|
|
|
5476
5633
|
function parseViewedDevices(value) {
|
|
5477
5634
|
if (!Array.isArray(value)) return [];
|
|
5478
5635
|
return value.flatMap((entry) => {
|
|
5479
|
-
const { platform, id } = entry ?? {};
|
|
5480
|
-
|
|
5636
|
+
const { platform, id, lastInputAt } = entry ?? {};
|
|
5637
|
+
if (platform !== "ios" && platform !== "android" || typeof id !== "string" || !id) return [];
|
|
5638
|
+
return [{
|
|
5481
5639
|
platform,
|
|
5482
|
-
id
|
|
5483
|
-
|
|
5640
|
+
id,
|
|
5641
|
+
...typeof lastInputAt === "string" && Number.isFinite(Date.parse(lastInputAt)) ? { lastInputAt } : {}
|
|
5642
|
+
}];
|
|
5484
5643
|
});
|
|
5485
5644
|
}
|
|
5486
5645
|
/**
|
|
5487
|
-
* The devices a running stim-server streams frames of. A record whose server is not proven to
|
|
5488
|
-
* process counts for nothing.
|
|
5646
|
+
* The devices a running stim-server streams frames of or forwarded input to. A record whose server is not proven to
|
|
5647
|
+
* be the same live process counts for nothing.
|
|
5489
5648
|
*/
|
|
5490
5649
|
function readViewedDevices(dir = deviceViewersDir()) {
|
|
5491
5650
|
let names;
|
|
@@ -5501,6 +5660,15 @@ function readViewedDevices(dir = deviceViewersDir()) {
|
|
|
5501
5660
|
});
|
|
5502
5661
|
}
|
|
5503
5662
|
//#endregion
|
|
5663
|
+
//#region state/daemon.ts
|
|
5664
|
+
function isDaemonSnapshot(record) {
|
|
5665
|
+
return record?.version === 1 && typeof record.pid === "number" && typeof record.startedAt === "string" && typeof record.tickAt === "string" && typeof record.intervalMs === "number";
|
|
5666
|
+
}
|
|
5667
|
+
function readDaemonSnapshot(file = daemonSnapshotFile()) {
|
|
5668
|
+
const record = readJsonObject(file);
|
|
5669
|
+
return isDaemonSnapshot(record) ? record : null;
|
|
5670
|
+
}
|
|
5671
|
+
//#endregion
|
|
5504
5672
|
//#region state/stats.ts
|
|
5505
5673
|
const STATS_VERSION = 1;
|
|
5506
5674
|
/** Where a compiling build ran: here, on a remote machine, or here after offloading it failed. */
|
|
@@ -5790,6 +5958,9 @@ function normalizeBucket(bucket) {
|
|
|
5790
5958
|
coldRunMs: count(bucket.coldRunMs),
|
|
5791
5959
|
hitRuns: count(bucket.hitRuns),
|
|
5792
5960
|
hitRunMs: count(bucket.hitRunMs),
|
|
5961
|
+
...count(bucket.coldCleanupMs) > 0 ? { coldCleanupMs: count(bucket.coldCleanupMs) } : {},
|
|
5962
|
+
...count(bucket.hitCleanupMs) > 0 ? { hitCleanupMs: count(bucket.hitCleanupMs) } : {},
|
|
5963
|
+
...count(bucket.offloadedCleanupMs) > 0 ? { offloadedCleanupMs: count(bucket.offloadedCleanupMs) } : {},
|
|
5793
5964
|
timeSavedMs: count(bucket.timeSavedMs),
|
|
5794
5965
|
firstRunAt: timestamp(bucket.firstRunAt),
|
|
5795
5966
|
lastRunAt: timestamp(bucket.lastRunAt),
|
|
@@ -6413,7 +6584,7 @@ function hostedIosStatus(placement) {
|
|
|
6413
6584
|
...placement.reason ? { reason: placement.reason } : {},
|
|
6414
6585
|
agent: placement.agent,
|
|
6415
6586
|
device: placement.device ? {
|
|
6416
|
-
name: placement.device.
|
|
6587
|
+
name: placement.device.name,
|
|
6417
6588
|
runtime: placement.device.runtime
|
|
6418
6589
|
} : null
|
|
6419
6590
|
};
|
|
@@ -6614,7 +6785,8 @@ const KINDS = [
|
|
|
6614
6785
|
"would-delete-dependencies",
|
|
6615
6786
|
"would-stop-gradle-daemons",
|
|
6616
6787
|
"would-delete-gradle-version",
|
|
6617
|
-
"would-delete-temp-leftovers"
|
|
6788
|
+
"would-delete-temp-leftovers",
|
|
6789
|
+
"would-delete-trash"
|
|
6618
6790
|
];
|
|
6619
6791
|
/** Rejects missing, corrupt or unsupported payloads without throwing. */
|
|
6620
6792
|
function parseMaintenanceState(value) {
|
|
@@ -6669,10 +6841,6 @@ function parseMaintenanceState(value) {
|
|
|
6669
6841
|
function readMaintenanceState() {
|
|
6670
6842
|
return parseMaintenanceState(readJsonObject(maintenanceStateFile()));
|
|
6671
6843
|
}
|
|
6672
|
-
function readMaintenanceAttempt() {
|
|
6673
|
-
const value = readJsonObject(maintenanceAttemptFile())?.attemptedAt;
|
|
6674
|
-
return finite(value) ? value : void 0;
|
|
6675
|
-
}
|
|
6676
6844
|
//#endregion
|
|
6677
6845
|
//#region state/gc-log.ts
|
|
6678
6846
|
const TRIGGERS = [
|
|
@@ -6939,4 +7107,4 @@ function isSetupJournalPrunable(journal, now) {
|
|
|
6939
7107
|
return Date.parse(journal.expiresAt) + 36e5 < now;
|
|
6940
7108
|
}
|
|
6941
7109
|
//#endregion
|
|
6942
|
-
export { ACTIVITY_RECENCY_BASES, AGENT_TOOLS, ANDROID_COMPILER_CACHE_CHOICES, ANDROID_EMULATOR_APPS, ANDROID_PCH_CHOICES, APP_PROCESS_STATES, BUILD_HISTORY_KEY, BUILD_HISTORY_LIMIT, BUILD_LEDGER_CAP, BUILD_PHASES, BUILD_RESULTS, CAPACITY_REFUSAL_LIMIT, CAPACITY_REFUSAL_MAX_AGE_MS, DEBUG_ENV, DEFAULT_SERVER_PORT, DEVICE_HOST_LIMITS, DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_RECLAIM_REASON, DEV_SERVER_STOP_REQUEST_KEY, ENDED_AGENT_RETENTION_MS, ERROR_SOURCES, FINGERPRINT_MEMO_SCHEMA, HISTORY_LIMIT, HOSTED_AGENT_DRIVERS, HOSTED_APP_CHUNK_BYTES, HOSTED_LOGS_FIRST_BYTES, HOSTED_LOGS_PAGE_BYTES, HOSTED_MACOS_APP_SLOTS, HOSTED_METRO_LINKS_KEY, HOSTED_METRO_REQUESTS_KEY, HOSTED_PARKED_CANDIDATES, IDLE_STOP_KEY, IOS_SIMULATOR_APPS, KeyedEntities, LAST_BUILD_KEYS, LEVELS, MACHINE_CREDENTIALS_VERSION, MACHINE_OWNER_KINDS, MAINTENANCE_LOG_NAME, MEMORY_SOURCES, NATIVE_BUILD_STEPS, NATIVE_CRASH_LOG_PREFIX, PHYSICAL_DEVICE_CONNECTIONS, PLACEMENT_DECISIONS, PLACEMENT_WORDS, READY_PHASE_MS, RECORDING_CAP_BYTES, RECORDING_FOOTAGE_MS, RECORDING_PLATFORMS, REMOTE_DEVICE_BACKENDS, REPLACED_SETTINGS, RUN_ID_ENV, SETTINGS, SETTINGS_SCHEMA_FILE, SETTINGS_SCHEMA_URL, SETTING_GROUPS, SETTING_SCOPES, SOURCES, STATS_VERSION, STATUS_ISSUE_CODES, SUMMARY_ARCHIVES, TAILNET_MACHINE_PATTERN, TRACE_ENV, TUNNEL_MODES, TUTORIAL_VERSION, WARM_KEY, WEB_PAGE_STATES, WEB_VIEWPORTS, WORKSPACE_AGENT_KEY, WORKSPACE_PHASES, WORKSPACE_STAGE_KINDS, acceptsShape, advanceTail, agentDeviceStateDirs, agentDeviceStateDirsAsync, agentDeviceUsageFile, agentSessionOf, agentSessionsCacheFile, allMetroPorts, applyKeyedDelta, archiveDir, archiveEnabled, archiveLock, archiveRoot, archivedUsage, assertHostedDeviceLedger, attachExpoErrorContext, automaticMachineEnabled, budgetSweepFile, budgetSweepLock, buildCriteria, buildDiagnostics, buildLedgerDir, buildLedgerFile, buildLedgerLock, buildMachinesFile, buildMachinesLock, buildSlotPath, buildSlotsDir, buildWorkerRoot, bundleMarkerPlatform, cannotHost, capDrops, clientIdentity, clientIdentityKeyFile, closedSegmentName, coerceSettingText, compileGrep, configCorruptRepair, configLockPath, countErrorEntries, createAgentActionReader, createAsyncAgentActionReader, createDebugLog, createNdjsonTail, createdDevicesFile, createdDevicesLock, currentTailnet, debugLogDir, debugLoggingEnabled, decodeStats, deviceHostArea, deviceHostMachinesClaims, deviceHostMachinesFile, deviceHostMachinesLock, deviceHostRoot, deviceViewersDir, diskUsageCacheDir, diskUsageCacheFile, diskUsageFailureFile, diskUsageWalkClaims, easMachineStateRoot, easSessionLedgerFile, easSessionLedgerLock, emulatorLogFile, endedAgentSessionOf, endpoint, expectedShape, fileIdentity, fileSizes, findEnclosingWorktreeRoot, findPeer, findProjectRoot, fingerprintMemoDir, fingerprintMemoFile, fingerprintMemoLock, followLogs, footageDrops, gcLogDir, gcLogFile, getConcurrencyLimits, getConfigPath, getParkedMax, getPlatformDeviceLimits, getProject, getProjectSettings, getRepoSettings, gitMergeCacheDir, gitMergeCacheFile, hostedAgentDriverName, hostedAndroidDeviceName, hostedAndroidPlacements, hostedAndroidRecords, hostedAndroidStatus, hostedAppArea, hostedAppAttempt, hostedAppBlobs, hostedConsolePort, hostedDeviceId, hostedIdleStopHours, hostedIosPlacements, hostedIosRecords, hostedIosStatus, hostedMacosAppSlot, hostedMacosBundleId, hostedMacosLogsDir, hostedMemoryRefusal, hostedMetroLinks, hostedMetroRequests, hostedNativeLogsDir, hostedNativeRecords, hostedWorkerSettleMs, isBuildLedgerRecord, isExpoErrorContext, isGcLogRecord, isJournalExpired, isJsonObject, isLayeredSetting, isPathPrefix, isSensitiveReference, isSetupJournalPrunable, lastNativeUseFrom, lastUseFrom, levelRank, linkReplacedArchives, listRecordedDevices, listRecordedDevicesAsync, listSegments, listSegmentsAsync, listStatusCacheEntries, loadConfig, loadPerCore, loadState, localEndpoint, logFiles, machineCacheUsageFile, machineCapacity, machineEndpoint, macosAppState,
|
|
7110
|
+
export { ACTIVITY_RECENCY_BASES, AGENT_TOOLS, ANDROID_COMPILER_CACHE_CHOICES, ANDROID_EMULATOR_APPS, ANDROID_PCH_CHOICES, APP_PROCESS_STATES, BUILD_HISTORY_KEY, BUILD_HISTORY_LIMIT, BUILD_LEDGER_CAP, BUILD_PHASES, BUILD_RESULTS, CAPACITY_REFUSAL_LIMIT, CAPACITY_REFUSAL_MAX_AGE_MS, DEBUG_ENV, DEFAULT_SERVER_PORT, DEVICE_HOST_LIMITS, DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_METRO_IDLE_STOP_REASON, DEVICE_RECLAIM_REASON, DEV_SERVER_STOP_REQUEST_KEY, DORMANT_STAGE_KEY, ENDED_AGENT_RETENTION_MS, ERROR_SOURCES, FINGERPRINT_MEMO_SCHEMA, HISTORY_LIMIT, HOSTED_AGENT_DRIVERS, HOSTED_APP_CHUNK_BYTES, HOSTED_LOGS_FIRST_BYTES, HOSTED_LOGS_PAGE_BYTES, HOSTED_MACOS_APP_SLOTS, HOSTED_METRO_LINKS_KEY, HOSTED_METRO_REQUESTS_KEY, HOSTED_PARKED_CANDIDATES, IDLE_STAGE_KEY, IDLE_STOP_KEY, INTERACTIONS_KEY, IOS_SIMULATOR_APPS, KeyedEntities, LAST_BUILD_KEYS, LEVELS, MACHINE_CREDENTIALS_VERSION, MACHINE_OWNER_KINDS, MAINTENANCE_LOG_NAME, MEMORY_SOURCES, NATIVE_BUILD_STEPS, NATIVE_CRASH_LOG_PREFIX, PHYSICAL_DEVICE_CONNECTIONS, PLACEMENT_DECISIONS, PLACEMENT_WORDS, READY_PHASE_MS, RECORDING_CAP_BYTES, RECORDING_FOOTAGE_MS, RECORDING_PLATFORMS, REMOTE_DEVICE_BACKENDS, REPLACED_SETTINGS, RUN_ID_ENV, SETTINGS, SETTINGS_SCHEMA_FILE, SETTINGS_SCHEMA_URL, SETTING_GROUPS, SETTING_SCOPES, SHARE_DEFAULT_PORT, SHARE_EXPOSURES, SOURCES, STATS_VERSION, STATUS_ISSUE_CODES, SUMMARY_ARCHIVES, TAILNET_MACHINE_PATTERN, TRACE_ENV, TUNNEL_MODES, TUTORIAL_VERSION, WARM_KEY, WEB_PAGE_STATES, WEB_VIEWPORTS, WORKSPACE_AGENT_KEY, WORKSPACE_PHASES, WORKSPACE_STAGE_KINDS, acceptsShape, admissionLimits, advanceTail, agentDeviceStateDirs, agentDeviceStateDirsAsync, agentDeviceUsageFile, agentSessionOf, agentSessionsCacheFile, allMetroPorts, applyKeyedDelta, archiveDir, archiveEnabled, archiveLock, archiveRoot, archivedUsage, assertHostedDeviceLedger, attachExpoErrorContext, automaticMachineEnabled, budgetSweepFile, budgetSweepLock, buildCriteria, buildDiagnostics, buildLedgerDir, buildLedgerFile, buildLedgerLock, buildMachinesFile, buildMachinesLock, buildSlotPath, buildSlotsDir, buildWorkerRoot, bundleMarkerPlatform, cannotHost, capDrops, clientIdentity, clientIdentityKeyFile, closedSegmentName, coerceSettingText, compileGrep, configCorruptRepair, configLockPath, countErrorEntries, createAgentActionReader, createAsyncAgentActionReader, createDebugLog, createNdjsonTail, createdDevicesFile, createdDevicesLock, currentTailnet, daemonClaimRoot, daemonDir, daemonNdjsonFile, daemonSnapshotFile, daemonSocket, debugLogDir, debugLoggingEnabled, decodeStats, derivedBuildCap, derivedDeviceCap, deviceHostArea, deviceHostMachinesClaims, deviceHostMachinesFile, deviceHostMachinesLock, deviceHostRoot, deviceViewersDir, diskUsageCacheDir, diskUsageCacheFile, diskUsageFailureFile, diskUsageWalkClaims, easMachineStateRoot, easSessionLedgerFile, easSessionLedgerLock, emulatorLogFile, endedAgentSessionOf, endpoint, expectedShape, fileIdentity, fileSizes, findEnclosingWorktreeRoot, findPeer, findProjectRoot, fingerprintMemoDir, fingerprintMemoFile, fingerprintMemoLock, followLogs, footageDrops, gcLogDir, gcLogFile, getConcurrencyLimits, getConfigPath, getParkedMax, getPlatformDeviceLimits, getProject, getProjectSettings, getRepoSettings, gitMergeCacheDir, gitMergeCacheFile, hostedAgentDriverName, hostedAndroidDeviceName, hostedAndroidPlacements, hostedAndroidRecords, hostedAndroidStatus, hostedAppArea, hostedAppAttempt, hostedAppBlobs, hostedConsolePort, hostedDeviceId, hostedIdleStopHours, hostedIosPlacements, hostedIosRecords, hostedIosStatus, hostedMacosAppSlot, hostedMacosBundleId, hostedMacosLogsDir, hostedMemoryRefusal, hostedMetroLinks, hostedMetroRequests, hostedNativeLogsDir, hostedNativeRecords, hostedWorkerSettleMs, isBuildLedgerRecord, isExpoErrorContext, isGcLogRecord, isJournalExpired, isJsonObject, isLayeredSetting, isPathPrefix, isSensitiveReference, isSetupJournalPrunable, lastNativeUseFrom, lastUseFrom, levelRank, linkReplacedArchives, listRecordedDevices, listRecordedDevicesAsync, listSegments, listSegmentsAsync, listStatusCacheEntries, loadConfig, loadPerCore, loadState, localEndpoint, logFiles, machineCacheUsageFile, machineCapacity, machineEndpoint, macosAppState, maintenanceChildLogFile, maintenanceDir, maintenanceNdjsonFile, maintenanceRunClaims, maintenanceStateFile, markerWindow, maxLoadPerCore, maxOffloadedBuilds, mayRunHere, offloadSummary, openLogDir, openSegmentName, parseHostedAgentAccess, parseHostedAgentGrant, parseHostedAndroidDevice, parseHostedAndroidPlacement, parseHostedAppManifest, parseHostedAppOffer, parseHostedChoice, parseHostedDevice, parseHostedIosPlacement, parseHostedLocalDeviceCount, parseHostedLocalPlatformCounts, parseHostedLogsCursor, parseHostedMacosChoice, parseHostedMacosDevice, parseHostedMacosPlacement, parseHostedNativeOffer, parseHostedNativePlacement, parseHostedOfferRequest, parseHostedPlatformDevice, parseHostedRequest, parseMachine, parseMachineCredential, parseMacosRecord, parseMaintenanceState, parseMissReason, parseNdjsonLine, parseNdjsonText, parseSetupJournal, parseSince, parseTailnetIdentity, placementWord, planLogQuery, prefersRemote, projectRootDirectories, pullRequestCacheDir, pullRequestCacheFile, queryJsonLogs, queryLogs, readAgentDeviceUsage, readAgentDeviceUsageCache, readAgentSessionsCache, readArchive, readArchiveAsync, readArchiveState, readArchives, readArchivesAsync, readBuildDetail, readBuildHistory, readBuildLedger, readBuildMachines, readCreatedDevices, readDaemonSnapshot, readDevServerStop, readDevServerStopRequest, readDeviceHostMachines, readDeviceIdleShutdowns, readDevicePlacement, readDiskUsage, readDiskUsageFailure, readDormantStage, readEasSessionLedger, readEndedAgentSessions, readFingerprintMemo, readGcLog, readHomeIdentity, readHostedApp, readHostedAppMetadata, readHostedDevice, readHostedDeviceLedger, readHostedMacosApp, readHostedNativeLogsCheckpoint, readHostedSessions, readIdleStage, readIdleStop, readInteractions, readJsonFile, readJsonObject, readLastBuilds, readLogRecords, readLogTimeline, readLogsSince, readMachineCacheUsage, readMacosRecord, readMaintenanceState, readNdjsonGenerations, readPullRequestCache, readRunEstimates, readSetupJournal, readStateFile, readStats, readStatsReport, readSwiftpmCacheUsage, readViewedDevices, readWarmRecord, readWorkspaceAgent, readWorkspaceState, recordMatches, recordedBytes, recordingDeviceName, recordingEnabled, redactArgv, redactCommandLine, rememberHostedAppBlobRename, replacementAdvice, requireAutomaticMachine, runId, sameTailnet, saturation, serverLocalSocket, serverSetupDir, settingDefinition, settingValueError, settingsJsonSchema, setupJournalFile, sharedCcache, sharedCompilationCache, sharedGradle, sharedPods, sortByTs, statsFile, statsProjectKey, statusViews, stimBuildDigest, supervisorLogFile, supervisorPidFile, swiftpmCacheUsageFile, tailRead, tailscaleEnv, trace, trashRoot, trimCapacityRefusals, trimCapacityWaits, trimSamples, tryAcquireBuildSlotClaim, unreadableHostedAndroid, unreadableHostedIos, unreadableHostedNative, validEasSessionClaim, validHostedAppArguments, validHostedAppBlob, validRunId, validateAutomaticPool, wholePhases, windowsShortDir, windowsShortDirKey, withConfigLock, withConfigLockAsync, withDerivedFacts, withGitChip, withStateReadCache, workspaceAgentDeviceDir, workspaceBuildDetailFile, workspaceDerivedData, workspaceEndedAgentsFile, workspaceEndedAgentsLock, workspaceGradleBuild, workspaceLastUsed, workspaceLightenedFile, workspaceLogErrorIndex, workspaceLogsDir, workspaceMetadataFile, workspaceRecordingsDir, workspaceStateFile, workspaceStateLock, workspaceSummary, worktreeArchiveRoot, wrongTailnet };
|