@wenathlan/saddle 2.0.153 → 2.0.155
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/Dockerfile +139 -55
- package/README.md +58 -59
- package/browser.ts +482 -0
- package/cli.ts +274 -0
- package/distribution.ts +731 -0
- package/docker.config +29 -8
- package/docs/artifactavailability.md +2 -2
- package/docs/browser.md +18 -1
- package/docs/{containerplatforms.2.1.0.md → containerplatforms210.md} +1 -1
- package/docs/{documentmap.1.8.12.md → documentmap1812.md} +1 -1
- package/docs/extension.md +13 -2
- package/docs/libraryapi.md +1 -1
- package/docs/{ninety.modalities.md → ninetymodalities.md} +87 -4
- package/docs/{planning.ninety.md → planningninety.md} +6 -6
- package/docs/{releasenotes.1.8.13.md → releasenotes1813.md} +2 -2
- package/docs/{releasenotes.1.8.14.md → releasenotes1814.md} +1 -1
- package/docs/{repo.synthesis.1.8.16.md → reposynthesis1816.md} +1 -1
- package/docs/todo.md +2 -2
- package/docs/{todo.1.8.15.md → todo1815.md} +1 -1
- package/docs/{todo.1.8.16.md → todo1816.md} +5 -5
- package/execution.ts +677 -0
- package/foundation.ts +314 -0
- package/index.ts +35 -27
- package/isolation.ts +84 -0
- package/modes.ts +170 -0
- package/mttg.config +1 -1
- package/orchestrator.ts +49 -15
- package/package.json +90 -75
- package/qemu.config +2 -2
- package/sandbox.ts +2094 -0
- package/scheduler.ts +1 -1
- package/server.ts +52 -0
- package/tsconfig.json +11 -12
- package/virtual.ts +1105 -0
- package/virtualgpu.ts +1 -1
- package/virtualization.ts +1 -1
- package/workloadlaw.ts +293 -0
- package/dist/App.d.ts +0 -5
- package/dist/App.js +0 -52
- package/dist/Sol/Sol.d.ts +0 -3
- package/dist/Sol/Sol.js +0 -46
- package/dist/Sol/agentbrowser/agentbrowser.d.ts +0 -9
- package/dist/Sol/agentbrowser/agentbrowser.js +0 -121
- package/dist/Sol/architecture/architecture.d.ts +0 -9
- package/dist/Sol/architecture/architecture.js +0 -93
- package/dist/Sol/compute/compute.d.ts +0 -9
- package/dist/Sol/compute/compute.js +0 -22
- package/dist/Sol/console/console.d.ts +0 -15
- package/dist/Sol/console/console.js +0 -292
- package/dist/Sol/dashboard/dashboard.d.ts +0 -10
- package/dist/Sol/dashboard/dashboard.js +0 -181
- package/dist/Sol/docs/docs.d.ts +0 -9
- package/dist/Sol/docs/docs.js +0 -28
- package/dist/Sol/home/home.d.ts +0 -35
- package/dist/Sol/home/home.js +0 -239
- package/dist/Sol/integrations/integrations.d.ts +0 -9
- package/dist/Sol/integrations/integrations.js +0 -83
- package/dist/Sol/intro/intro.d.ts +0 -7
- package/dist/Sol/intro/intro.js +0 -102
- package/dist/Sol/login/login.d.ts +0 -16
- package/dist/Sol/login/login.js +0 -49
- package/dist/Sol/notfound/notfound.d.ts +0 -9
- package/dist/Sol/notfound/notfound.js +0 -15
- package/dist/Sol/onboarding/onboarding.d.ts +0 -25
- package/dist/Sol/onboarding/onboarding.js +0 -60
- package/dist/Sol/playground/playground.d.ts +0 -9
- package/dist/Sol/playground/playground.js +0 -127
- package/dist/Sol/register/register.d.ts +0 -16
- package/dist/Sol/register/register.js +0 -193
- package/dist/Sol/shell/Shell.d.ts +0 -124
- package/dist/Sol/shell/Shell.js +0 -335
- package/dist/Sol/wingets/ComputeBootladder.d.ts +0 -6
- package/dist/Sol/wingets/ComputeBootladder.js +0 -71
- package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +0 -7
- package/dist/Sol/wingets/ComputeModalitycatalog.js +0 -71
- package/dist/Sol/wingets/ConsoleApibadge.d.ts +0 -7
- package/dist/Sol/wingets/ConsoleApibadge.js +0 -5
- package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +0 -6
- package/dist/Sol/wingets/ConsoleEdgelaw.js +0 -36
- package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +0 -19
- package/dist/Sol/wingets/ConsoleEventstimeline.js +0 -12
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +0 -8
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +0 -8
- package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +0 -21
- package/dist/Sol/wingets/ConsoleSpecpanel.js +0 -75
- package/dist/Sol/wingets/ConsoleTerminal.d.ts +0 -22
- package/dist/Sol/wingets/ConsoleTerminal.js +0 -77
- package/dist/Sol/wingets/DashboardAccountpanel.d.ts +0 -18
- package/dist/Sol/wingets/DashboardAccountpanel.js +0 -65
- package/dist/Sol/wingets/DashboardAdminpanel.d.ts +0 -6
- package/dist/Sol/wingets/DashboardAdminpanel.js +0 -90
- package/dist/Sol/wingets/DashboardAuditlog.d.ts +0 -8
- package/dist/Sol/wingets/DashboardAuditlog.js +0 -50
- package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +0 -10
- package/dist/Sol/wingets/DashboardCreatesandboxform.js +0 -71
- package/dist/Sol/wingets/DashboardEventstimeline.d.ts +0 -8
- package/dist/Sol/wingets/DashboardEventstimeline.js +0 -83
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +0 -57
- package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardMeshnodestable.js +0 -103
- package/dist/Sol/wingets/DashboardSandboxlist.d.ts +0 -10
- package/dist/Sol/wingets/DashboardSandboxlist.js +0 -163
- package/dist/Sol/wingets/DashboardUserstable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardUserstable.js +0 -78
- package/dist/Sol/wingets/HomeEntrygate.d.ts +0 -23
- package/dist/Sol/wingets/HomeEntrygate.js +0 -73
- package/dist/Sol/wingets/HomeMetricstrip.d.ts +0 -9
- package/dist/Sol/wingets/HomeMetricstrip.js +0 -4
- package/dist/Sol/wingets/HomeRuntimediagram.d.ts +0 -1
- package/dist/Sol/wingets/HomeRuntimediagram.js +0 -22
- package/dist/Sol/wingets/LoginForm.d.ts +0 -19
- package/dist/Sol/wingets/LoginForm.js +0 -141
- package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +0 -13
- package/dist/Sol/wingets/RegisterPasswordconfirm.js +0 -16
- package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +0 -19
- package/dist/Sol/wingets/RegisterPasswordmeter.js +0 -65
- package/dist/Sol/wingets/RegisterUsernamerules.d.ts +0 -11
- package/dist/Sol/wingets/RegisterUsernamerules.js +0 -16
- package/dist/Sol/wingets/index.d.ts +0 -39
- package/dist/Sol/wingets/index.js +0 -39
- package/dist/alternatives.d.ts +0 -508
- package/dist/alternatives.js +0 -950
- package/dist/api.d.ts +0 -154
- package/dist/api.js +0 -174
- package/dist/auth.d.ts +0 -268
- package/dist/auth.js +0 -476
- package/dist/automation.d.ts +0 -425
- package/dist/automation.js +0 -566
- package/dist/browser.d.ts +0 -561
- package/dist/browser.js +0 -1058
- package/dist/capacitor.config.d.ts +0 -45
- package/dist/capacitor.config.js +0 -48
- package/dist/catalog.d.ts +0 -43
- package/dist/catalog.js +0 -44
- package/dist/cli.d.ts +0 -16
- package/dist/cli.js +0 -168
- package/dist/communication.d.ts +0 -181
- package/dist/communication.js +0 -376
- package/dist/compute.d.ts +0 -1160
- package/dist/compute.js +0 -2272
- package/dist/dashboardlib.d.ts +0 -58
- package/dist/dashboardlib.js +0 -161
- package/dist/db.d.ts +0 -569
- package/dist/db.js +0 -1080
- package/dist/distribution.d.ts +0 -528
- package/dist/distribution.js +0 -810
- package/dist/drizzle.config.d.ts +0 -20
- package/dist/drizzle.config.js +0 -18
- package/dist/edgelandes.d.ts +0 -70
- package/dist/edgelandes.host.d.ts +0 -26
- package/dist/edgelandes.host.js +0 -1089
- package/dist/edgelandes.inproc.d.ts +0 -27
- package/dist/edgelandes.inproc.js +0 -952
- package/dist/edgelandes.js +0 -1133
- package/dist/edgelandes.ninety.d.ts +0 -31
- package/dist/edgelandes.ninety.js +0 -174
- package/dist/edgelandes.virtual.d.ts +0 -25
- package/dist/edgelandes.virtual.js +0 -629
- package/dist/edgeplane.d.ts +0 -114
- package/dist/edgeplane.js +0 -305
- package/dist/examplelocaljob.d.ts +0 -1
- package/dist/examplelocaljob.js +0 -14
- package/dist/execution.d.ts +0 -529
- package/dist/execution.js +0 -760
- package/dist/family.d.ts +0 -16
- package/dist/family.js +0 -42
- package/dist/familyurl.d.ts +0 -21
- package/dist/familyurl.js +0 -24
- package/dist/format.d.ts +0 -18
- package/dist/format.js +0 -59
- package/dist/foundation.d.ts +0 -172
- package/dist/foundation.js +0 -312
- package/dist/index.d.ts +0 -735
- package/dist/index.js +0 -1020
- package/dist/integration.d.ts +0 -235
- package/dist/integration.js +0 -228
- package/dist/intelligence.d.ts +0 -93
- package/dist/intelligence.js +0 -144
- package/dist/isolation.d.ts +0 -128
- package/dist/isolation.js +0 -95
- package/dist/labels.d.ts +0 -665
- package/dist/labels.js +0 -751
- package/dist/localauth.d.ts +0 -127
- package/dist/localauth.js +0 -413
- package/dist/media.d.ts +0 -343
- package/dist/media.js +0 -985
- package/dist/mesh.d.ts +0 -177
- package/dist/mesh.js +0 -468
- package/dist/modalityregistry.d.ts +0 -109
- package/dist/modalityregistry.js +0 -1386
- package/dist/modes.d.ts +0 -358
- package/dist/modes.js +0 -133
- package/dist/onboardingstate.d.ts +0 -79
- package/dist/onboardingstate.js +0 -282
- package/dist/orchestrator.d.ts +0 -1338
- package/dist/orchestrator.js +0 -4310
- package/dist/packager/targetcli.js +0 -4
- package/dist/paths.d.ts +0 -2
- package/dist/paths.js +0 -14
- package/dist/performance.d.ts +0 -415
- package/dist/performance.js +0 -826
- package/dist/quantum.d.ts +0 -809
- package/dist/quantum.js +0 -2072
- package/dist/render.d.ts +0 -380
- package/dist/render.js +0 -1072
- package/dist/runall.d.ts +0 -2
- package/dist/runall.js +0 -39
- package/dist/runtimeprobe.d.ts +0 -4
- package/dist/runtimeprobe.js +0 -8
- package/dist/sandbox.d.ts +0 -355
- package/dist/sandbox.js +0 -1721
- package/dist/sandboxenvprofile.d.ts +0 -29
- package/dist/sandboxenvprofile.js +0 -89
- package/dist/sandboxprofile.d.ts +0 -137
- package/dist/sandboxprofile.js +0 -241
- package/dist/sandboxqueue.d.ts +0 -108
- package/dist/sandboxqueue.js +0 -201
- package/dist/sandboxquota.d.ts +0 -121
- package/dist/sandboxquota.js +0 -236
- package/dist/scheduler.d.ts +0 -595
- package/dist/scheduler.js +0 -1258
- package/dist/scriptlanes.d.ts +0 -182
- package/dist/scriptlanes.js +0 -660
- package/dist/scripts.buildengine.d.ts +0 -1
- package/dist/scripts.buildengine.js +0 -39
- package/dist/scripts.securitygate.d.ts +0 -1
- package/dist/scripts.securitygate.js +0 -68
- package/dist/scripts.validateflatnative.d.ts +0 -1
- package/dist/scripts.validateflatnative.js +0 -72
- package/dist/security.d.ts +0 -500
- package/dist/security.js +0 -1169
- package/dist/seedcatalog.d.ts +0 -13
- package/dist/seedcatalog.js +0 -46
- package/dist/server.d.ts +0 -20
- package/dist/server.js +0 -53
- package/dist/speccatalog.d.ts +0 -31
- package/dist/speccatalog.js +0 -163
- package/dist/tiers.d.ts +0 -1001
- package/dist/tiers.js +0 -2169
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -5
- package/dist/vaulthandoff.d.ts +0 -141
- package/dist/vaulthandoff.js +0 -444
- package/dist/virtual.d.ts +0 -640
- package/dist/virtual.js +0 -1284
- package/dist/virtualcpu.d.ts +0 -315
- package/dist/virtualcpu.js +0 -1180
- package/dist/virtualgpu.d.ts +0 -344
- package/dist/virtualgpu.js +0 -1000
- package/dist/virtualization.d.ts +0 -606
- package/dist/virtualization.js +0 -1186
- package/dist/virtualmemory.d.ts +0 -817
- package/dist/virtualmemory.js +0 -1795
- package/dist/vite.config.d.ts +0 -3
- package/dist/vite.config.js +0 -43
- package/dist/vitest.config.d.ts +0 -2
- package/dist/vitest.config.js +0 -25
- package/dist/webserver.d.ts +0 -166
- package/dist/webserver.js +0 -2226
- package/dist/workloadlaw.d.ts +0 -133
- package/dist/workloadlaw.js +0 -193
- package/manifest.json +0 -20
- package/media.ts +0 -1337
- /package/docs/{architecture.1.8.19.md → architecture1819.md} +0 -0
- /package/docs/{architecture.1.8.19.mmd → architecture1819.mmd} +0 -0
- /package/docs/{artifactresearch.1.8.9.md → artifactresearch189.md} +0 -0
- /package/docs/{batches.1816.to.1820.md → batches1816to1820.md} +0 -0
- /package/docs/{brancharchive.2026.08.18.md → brancharchive20260818.md} +0 -0
- /package/docs/{containerplatforms.1.8.17.md → containerplatforms1817.md} +0 -0
- /package/docs/{e2ugh.engine.md → e2ughengine.md} +0 -0
- /package/docs/{flatbuildresearch.1.8.11.md → flatbuildresearch1811.md} +0 -0
- /package/docs/{licenseaudit.1.8.12.md → licenseaudit1812.md} +0 -0
- /package/docs/{mobileconversionresearch.1.8.10.md → mobileconversionresearch1810.md} +0 -0
- /package/docs/{nativeidentityresearch.1.8.11.md → nativeidentityresearch1811.md} +0 -0
- /package/docs/{native.wrappers.md → nativewrappers.md} +0 -0
- /package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
- /package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
- /package/docs/{planning.engine.md → planningengine.md} +0 -0
- /package/docs/{releasenotes.1.8.12.md → releasenotes1812.md} +0 -0
- /package/docs/{releasenotes.1.8.15.md → releasenotes1815.md} +0 -0
- /package/docs/{releasenotes.1.8.16.md → releasenotes1816.md} +0 -0
- /package/docs/{releasenotes.1.8.17.md → releasenotes1817.md} +0 -0
- /package/docs/{releasenotes.1.8.18.md → releasenotes1818.md} +0 -0
- /package/docs/{releasenotes.1.8.19.md → releasenotes1819.md} +0 -0
- /package/docs/{reorganization.1.8.8.md → reorganization188.md} +0 -0
- /package/docs/{reorganization.1.8.9.md → reorganization189.md} +0 -0
- /package/docs/{repo.analysis.1.8.21.json → repoanalysis1821.json} +0 -0
- /package/docs/{repo.candidates.1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
- /package/docs/{repo.research.1.8.16.md → reporesearch1816.md} +0 -0
- /package/docs/{repo.research.1.8.21.md → reporesearch1821.md} +0 -0
- /package/docs/{repo.selected.1.8.21.json → reposelected1821.json} +0 -0
- /package/docs/{repo.synthesis.1.8.21.md → reposynthesis1821.md} +0 -0
- /package/docs/{research.1.8.18.isolation.md → research1818isolation.md} +0 -0
- /package/docs/{research.1.8.19.virtual.browser.md → research1819virtualbrowser.md} +0 -0
- /package/docs/{scanningresearch.1.8.11.md → scanningresearch1811.md} +0 -0
- /package/docs/{securityaudit.1.8.7.md → securityaudit187.md} +0 -0
- /package/docs/{securityreferences.1.8.11.md → securityreferences1811.md} +0 -0
- /package/docs/{securityresearch.1.8.11.md → securityresearch1811.md} +0 -0
- /package/docs/{signingresearch.1.8.12.md → signingresearch1812.md} +0 -0
- /package/docs/{tauri.glib.risk.1.8.11.md → tauriglibrisk1811.md} +0 -0
- /package/docs/{todo.1.8.18.md → todo1818.md} +0 -0
- /package/docs/{todo.1.8.19.md → todo1819.md} +0 -0
- /package/docs/{toolchainresearch.1.8.9.md → toolchainresearch189.md} +0 -0
- /package/docs/{web.duplicatecleanup.md → webduplicatecleanup.md} +0 -0
- /package/docs/{web.ideas.md → webideas.md} +0 -0
- /package/docs/{workflowimprovements.2026.08.19.md → workflowimprovements20260819.md} +0 -0
package/dist/dashboardlib.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/** one api round trip normalized for the whole dashboard. */
|
|
2
|
-
export type ApiResult = {
|
|
3
|
-
ok: boolean;
|
|
4
|
-
status: number;
|
|
5
|
-
body: unknown;
|
|
6
|
-
};
|
|
7
|
-
/** the browser-local sandbox record (sessionStorage, never persisted elsewhere). */
|
|
8
|
-
export type LocalSandbox = {
|
|
9
|
-
id: string;
|
|
10
|
-
spec: {
|
|
11
|
-
model: string;
|
|
12
|
-
vcpus: number;
|
|
13
|
-
ramgb: number;
|
|
14
|
-
gpu: string;
|
|
15
|
-
mig: string;
|
|
16
|
-
};
|
|
17
|
-
createdat: string;
|
|
18
|
-
state: string;
|
|
19
|
-
};
|
|
20
|
-
/** the account normalized out of /auth/me or the local browser session. */
|
|
21
|
-
export type SessionUser = {
|
|
22
|
-
username: string;
|
|
23
|
-
role: string;
|
|
24
|
-
createdat: unknown;
|
|
25
|
-
lastloginat: unknown;
|
|
26
|
-
id: unknown;
|
|
27
|
-
};
|
|
28
|
-
/** the localStorage key the local engine mode keeps its shelf under. */
|
|
29
|
-
export declare const localsandboxkey = "saddle_local_sandboxes";
|
|
30
|
-
/**
|
|
31
|
-
* normalizes one call through the shared apifetch wrapper: the consolidated
|
|
32
|
-
* surface answers either the dashboard-style envelope {ok, status, body}
|
|
33
|
-
* or a raw fetch Response; both become {ok, status, body} here so the
|
|
34
|
-
* panels never depend on which page the wrapper was consolidated from.
|
|
35
|
-
*/
|
|
36
|
-
export declare function apiresult(path: string, init?: RequestInit): Promise<ApiResult>;
|
|
37
|
-
/** extracts the {error:{message}} text the api failures carry. */
|
|
38
|
-
export declare function errormessage(result: ApiResult, fallback: string): string;
|
|
39
|
-
/** first defined value among candidate keys (case-flexible, snake tolerant). */
|
|
40
|
-
export declare function pick(source: unknown, keys: string[], fallback?: unknown): unknown;
|
|
41
|
-
/** array out of a payload that may be a bare array or an envelope. */
|
|
42
|
-
export declare function asarray(payload: unknown, keys: string[]): unknown[];
|
|
43
|
-
/** formats a date-ish value (iso string, epoch seconds or ms). */
|
|
44
|
-
export declare function fmtdate(value: unknown): string;
|
|
45
|
-
/** humanizes a duration in seconds. */
|
|
46
|
-
export declare function fmtuptime(seconds: unknown): string;
|
|
47
|
-
/** the state chip class with the raw state sanitized to css-safe characters. */
|
|
48
|
-
export declare function chipclass(state: unknown): string;
|
|
49
|
-
/** normalizes the node role out of a /health payload. */
|
|
50
|
-
export declare function noderole(health: unknown): string;
|
|
51
|
-
/** reads the browser-local sandbox shelf (sessionStorage, defensive). */
|
|
52
|
-
export declare function readlocalsandboxes(): LocalSandbox[];
|
|
53
|
-
/** writes the browser-local sandbox shelf. */
|
|
54
|
-
export declare function writelocalsandboxes(list: LocalSandbox[]): void;
|
|
55
|
-
/** the static fallback cpu list when the engine catalog is empty. */
|
|
56
|
-
export declare const fallbackcpus: string[];
|
|
57
|
-
/** the static fallback gpu list when the engine catalog is empty. */
|
|
58
|
-
export declare const fallbackgpus: string[];
|
package/dist/dashboardlib.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
// dashboardlib.ts — Signal & Ledger: defensive utilities of the dashboard
|
|
2
|
-
// absorbed from e2ugh (moved from Sol/dashboard/lib.ts: pure logic rides the
|
|
3
|
-
// app root; the page folder keeps only the anchor and its tsx components) —
|
|
4
|
-
// shape-tolerant payloads (backend routes evolve in parallel) and the single
|
|
5
|
-
// api wrapper ({ok, status, body}) the whole page uses.
|
|
6
|
-
import { apifetch } from './api';
|
|
7
|
-
/** the localStorage key the local engine mode keeps its shelf under. */
|
|
8
|
-
export const localsandboxkey = 'saddle_local_sandboxes';
|
|
9
|
-
/**
|
|
10
|
-
* normalizes one call through the shared apifetch wrapper: the consolidated
|
|
11
|
-
* surface answers either the dashboard-style envelope {ok, status, body}
|
|
12
|
-
* or a raw fetch Response; both become {ok, status, body} here so the
|
|
13
|
-
* panels never depend on which page the wrapper was consolidated from.
|
|
14
|
-
*/
|
|
15
|
-
export async function apiresult(path, init) {
|
|
16
|
-
const response = (await apifetch(path, init));
|
|
17
|
-
if (response !== null &&
|
|
18
|
-
typeof response === 'object' &&
|
|
19
|
-
typeof response.json === 'function') {
|
|
20
|
-
let body = null;
|
|
21
|
-
try {
|
|
22
|
-
body = await response.json();
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
body = null;
|
|
26
|
-
}
|
|
27
|
-
return { ok: response.ok, status: response.status, body };
|
|
28
|
-
}
|
|
29
|
-
const envelope = response;
|
|
30
|
-
return {
|
|
31
|
-
ok: envelope?.ok === true,
|
|
32
|
-
status: typeof envelope?.status === 'number' ? envelope.status : 0,
|
|
33
|
-
body: envelope?.body ?? null,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/** extracts the {error:{message}} text the api failures carry. */
|
|
37
|
-
export function errormessage(result, fallback) {
|
|
38
|
-
const error = result.body?.error;
|
|
39
|
-
const message = error?.message;
|
|
40
|
-
return typeof message === 'string' && message.length > 0 ? message : fallback;
|
|
41
|
-
}
|
|
42
|
-
/** first defined value among candidate keys (case-flexible, snake tolerant). */
|
|
43
|
-
export function pick(source, keys, fallback = null) {
|
|
44
|
-
if (source === null || source === undefined || typeof source !== 'object') {
|
|
45
|
-
return fallback;
|
|
46
|
-
}
|
|
47
|
-
const record = source;
|
|
48
|
-
for (const key of keys) {
|
|
49
|
-
if (record[key] !== undefined && record[key] !== null) {
|
|
50
|
-
return record[key];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const lower = {};
|
|
54
|
-
for (const key of Object.keys(record)) {
|
|
55
|
-
lower[key.toLowerCase()] = record[key];
|
|
56
|
-
}
|
|
57
|
-
for (const key of keys) {
|
|
58
|
-
const hit = lower[key.toLowerCase()];
|
|
59
|
-
if (hit !== undefined && hit !== null) {
|
|
60
|
-
return hit;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return fallback;
|
|
64
|
-
}
|
|
65
|
-
/** array out of a payload that may be a bare array or an envelope. */
|
|
66
|
-
export function asarray(payload, keys) {
|
|
67
|
-
if (Array.isArray(payload)) {
|
|
68
|
-
return payload;
|
|
69
|
-
}
|
|
70
|
-
if (payload !== null && typeof payload === 'object') {
|
|
71
|
-
const record = payload;
|
|
72
|
-
for (const key of keys) {
|
|
73
|
-
if (Array.isArray(record[key])) {
|
|
74
|
-
return record[key];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return [];
|
|
79
|
-
}
|
|
80
|
-
/** formats a date-ish value (iso string, epoch seconds or ms). */
|
|
81
|
-
export function fmtdate(value) {
|
|
82
|
-
if (value === undefined || value === null || value === '') {
|
|
83
|
-
return '-';
|
|
84
|
-
}
|
|
85
|
-
let date = null;
|
|
86
|
-
if (typeof value === 'number') {
|
|
87
|
-
date = new Date(value < 1e12 ? value * 1000 : value);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
date = new Date(String(value));
|
|
91
|
-
}
|
|
92
|
-
if (Number.isNaN(date.getTime())) {
|
|
93
|
-
return String(value);
|
|
94
|
-
}
|
|
95
|
-
return date
|
|
96
|
-
.toISOString()
|
|
97
|
-
.replace('T', ' ')
|
|
98
|
-
.replace(/\.\d+Z$/, 'Z');
|
|
99
|
-
}
|
|
100
|
-
/** humanizes a duration in seconds. */
|
|
101
|
-
export function fmtuptime(seconds) {
|
|
102
|
-
const total = Math.max(0, Math.floor(Number(seconds) || 0));
|
|
103
|
-
const days = Math.floor(total / 86400);
|
|
104
|
-
const hours = Math.floor((total % 86400) / 3600);
|
|
105
|
-
const minutes = Math.floor((total % 3600) / 60);
|
|
106
|
-
if (days > 0) {
|
|
107
|
-
return `${days}d ${hours}h`;
|
|
108
|
-
}
|
|
109
|
-
if (hours > 0) {
|
|
110
|
-
return `${hours}h ${minutes}m`;
|
|
111
|
-
}
|
|
112
|
-
return `${minutes}m ${total % 60}s`;
|
|
113
|
-
}
|
|
114
|
-
/** the state chip class with the raw state sanitized to css-safe characters. */
|
|
115
|
-
export function chipclass(state) {
|
|
116
|
-
const raw = String(state ?? '')
|
|
117
|
-
.toLowerCase()
|
|
118
|
-
.replace(/[^a-z0-9-]/g, '');
|
|
119
|
-
return `dash-chip ${raw}`;
|
|
120
|
-
}
|
|
121
|
-
/** normalizes the node role out of a /health payload. */
|
|
122
|
-
export function noderole(health) {
|
|
123
|
-
const raw = pick(health, ['role', 'nodeRole', 'node', 'mode', 'kind'], 'standalone');
|
|
124
|
-
if (raw !== null && typeof raw === 'object') {
|
|
125
|
-
return String(pick(raw, ['role', 'kind', 'mode'], 'standalone')).toLowerCase();
|
|
126
|
-
}
|
|
127
|
-
return String(raw).toLowerCase();
|
|
128
|
-
}
|
|
129
|
-
/** reads the browser-local sandbox shelf (sessionStorage, defensive). */
|
|
130
|
-
export function readlocalsandboxes() {
|
|
131
|
-
try {
|
|
132
|
-
const raw = window.sessionStorage.getItem(localsandboxkey);
|
|
133
|
-
const parsed = raw ? JSON.parse(raw) : [];
|
|
134
|
-
return Array.isArray(parsed) ? parsed : [];
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
return [];
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/** writes the browser-local sandbox shelf. */
|
|
141
|
-
export function writelocalsandboxes(list) {
|
|
142
|
-
try {
|
|
143
|
-
window.sessionStorage.setItem(localsandboxkey, JSON.stringify(list));
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
/* storage may be unavailable; the list stays in memory for this view */
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/** the static fallback cpu list when the engine catalog is empty. */
|
|
150
|
-
export const fallbackcpus = [
|
|
151
|
-
'AMD EPYC 9965',
|
|
152
|
-
'AMD Ryzen 9 9950X3D',
|
|
153
|
-
'AMD Threadripper PRO 9995WX',
|
|
154
|
-
'AMD Threadripper 7980X',
|
|
155
|
-
'Intel Core Ultra 9 285K',
|
|
156
|
-
'AMD EPYC 9955',
|
|
157
|
-
'Intel Xeon 6980P',
|
|
158
|
-
'Apple M3 Ultra',
|
|
159
|
-
];
|
|
160
|
-
/** the static fallback gpu list when the engine catalog is empty. */
|
|
161
|
-
export const fallbackgpus = ['rtx5090', 'rtxpro6000', 'b200', 'h100', 'a100', 'rx9070xt', 'mi350x'];
|