LabTether
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport http counts 32 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
alerts_acknowledge
-
alerts_list
-
asset_reboot
-
asset_shutdown
-
asset_wake
-
assets_get
-
assets_list
-
connectors_health
-
credentials_list
-
docker_container_logs
-
docker_container_restart
-
docker_container_stats
-
docker_containers
-
docker_hosts
-
exec
-
exec_multi
-
files_list
-
files_read
-
groups_list
-
metrics_overview
-
saved_actions_list
-
schedules_list
-
services_list
-
services_restart
-
system_disks
-
system_network
-
system_packages
-
system_processes
-
topology_edges
-
updates_list_plans
-
webhooks_list
-
whoami
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 2428
filesystem 6
- fs (weak) labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/__tests__/productionRouteIntegration.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/__tests__/backupRouteIntegration.test.ts :1
import { readFileSync } from "node:fs"; - fs (weak) labtether-labtether-96f5929/web/console/app/api/__tests__/proxyOriginCoverage.test.ts :3
import fs from "node:fs"; - fs labtether-labtether-96f5929/web/console/lib/backend.ts :1
import { readFileSync } from "node:fs"; - fs (weak) labtether-labtether-96f5929/web/console/scripts/start-playwright-https.mjs :2
import { existsSync, mkdirSync, readFileSync } from "node:fs"; - fs (weak) labtether-labtether-96f5929/web/console/scripts/test-runtime-proxy-standalone.mjs :3
import { existsSync } from "node:fs";
shell / exec 4
- shell (weak) labtether-labtether-96f5929/scripts/lib/http-redirect.test.js :2
const { spawnSync } = require("node:child_process"); - shell (weak) labtether-labtether-96f5929/web/console/scripts/console-runtime.mjs :1
import { spawn } from "node:child_process"; - shell (weak) labtether-labtether-96f5929/web/console/scripts/start-playwright-https.mjs :1
import { spawn } from "node:child_process"; - shell (weak) labtether-labtether-96f5929/web/console/scripts/test-runtime-proxy-standalone.mjs :1
import { spawn } from "node:child_process";
network 220
- net (weak) labtether-labtether-96f5929/scripts/lib/http-redirect.js :3
const http = require("http"); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/api-docs/page.tsx :347
fetch("/api/v2/openapi.json", { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/files/fileConnectionsClient.ts :124
const response = await fetch(connectionURL(""), { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/files/fileOpsClient.ts :118
return fetch(`/api/file-connections/${encodeURIComponent(source.connectionId)}/download?${params.toString()}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/files/fileTransferClient.ts :58
const response = await fetch(transferURL(""), { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/groups/page.tsx :60
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/groups/useGroupMutationActions.ts :38
const response = await fetch("/api/groups", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/layout.tsx :69
fetch("/api/terminal/snippets", { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/NodeEditModal.tsx :53
const res = await fetch(`/api/assets/${encodeURIComponent(asset.id)}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/PBSBackupCoverageCard.tsx :36
const response = await fetch(`/api/pbs/assets/${encodeURIComponent(assetId)}/groups`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/PBSDatastoreDrilldown.tsx :49
fetch(`/api/pbs/assets/${encodeURIComponent(assetId)}/groups`, { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/PBSVerificationCard.tsx :48
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/ProxmoxTasksSection.tsx :60
const response = await fetch(`/api/proxmox/tasks/${encodeURIComponent(taskNode)}/${encodeURIComponent(taskUpid)}/log${collectorQuery}`, { signal: AbortSignal.timeout(15_000) }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/clusterTopologyGuestLinkingApi.ts :26
const response = await fetch(`/api/assets/${encodeURIComponent(guestID)}/dependencies?limit=200`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/pbs/PBSBackupGroupsTab.tsx :97
fetch(`/api/pbs/assets/${encodeURIComponent(assetId)}/groups`, { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/pbs/PBSSnapshotsTab.tsx :74
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/pbs/PBSTasksTab.tsx :86
fetch(`/api/pbs/tasks/${encodeURIComponent(node)}/${encodeURIComponent(upid)}/status${query}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/pbs/usePBSData.ts :16
const response = await fetch(path, { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/portainer/usePortainerData.ts :37
const response = await fetch(path, { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/proxmox/useProxmoxData.ts :10
const response = await fetch(path, { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/truenas/TrueNASDisksTab.tsx :53
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/truenas/TrueNASEventsTab.tsx :28
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/truenas/useTrueNASData.ts :16
const response = await fetch(path, { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useAgentDeviceName.ts :43
const response = await fetch(`/api/assets/${encodeURIComponent(nodeId)}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useAgentSettingsActions.ts :52
const response = await fetch(`/api/agents/${encodeURIComponent(nodeId)}/settings`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useAgentSettingsData.ts :27
fetch(`/api/agents/${encodeURIComponent(nodeId)}/settings`, { cache: "no-store" }), - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useDesktopSessionControls.ts :239
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useDeviceCapabilities.ts :65
const response = await window.fetch(url, { cache: "no-store", signal: ctrl.signal }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useNodeActionsData.ts :30
const res = await fetch(`/api/actions/runs?${params.toString()}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useNodeDeleteFlow.ts :43
const res = await fetch(`/api/assets/${encodeURIComponent(nodeId)}`, { method: "DELETE" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useNodeLogsData.ts :36
const res = await fetch(`/api/logs/query?${params.toString()}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useNodeProxmoxData.ts :67
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useNodeTelemetryData.ts :23
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useProtocolConfigs.ts :56
const res = await fetch(`/api/assets/${encodeURIComponent(assetId)}/protocols`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useStorageOperationsActions.ts :53
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/[id]/useStorageOperationsData.ts :51
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/nodesPageComponents.tsx :45
const res = await fetch("/api/agents/pending", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/page.tsx :56
const res = await fetch("/api/assets?resolve_composites=true", { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/nodes/useHierarchyManagement.ts :19
const response = await fetch("/api/groups", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/recordings/page.tsx :24
fetch("/api/recordings", { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/remote-view/RemoteViewSession.tsx :262
? await fetch( - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/remote-view/remoteBookmarksClient.ts :44
const res = await fetch(url, init); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/services/config/GroupingMergeTab.tsx :146
const res = await fetch("/api/services/web/grouping-settings", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/services/page.tsx :180
await fetch(`/api/services/web/grouping-suggestions/${encodeURIComponent(suggestion.id)}/accept`, { method: "POST" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/services/useServiceEditModalActions.ts :31
const response = await fetch(`/api/services/web/overrides?${params}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/services/useServiceIconLibrary.ts :27
fetch("/service-icons/index.json") - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/AboutCard.tsx :31
fetch("/api/version") - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/AccountSecurityCard.tsx :56
const response = await fetch("/api/auth/me/password", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/CredentialProfilesCard.tsx :51
const response = await fetch(`/api/settings/credentials${path}`, init); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/DangerZoneCard.tsx :36
const res = await fetch("/api/admin/reset", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/ManagedDatabaseCard.tsx :38
fetch("/api/settings/managed-database", { cache: "no-store" }) - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/McpConnectionCard.tsx :79
const res = await fetch("/api/settings/enrollment", { cache: "no-store", signal: AbortSignal.timeout(10_000) }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/PrometheusExportCard.tsx :91
const res = await fetch("/api/settings/runtime", { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/SSHHubKeyCard.tsx :39
const response = await fetch("/api/settings/ssh-hub-key", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/TLSManagementCard.tsx :96
const response = await fetch("/api/settings/tls", { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/TLSStatusCard.tsx :36
fetch("/api/v1/tls/info") - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/TailscaleServeCard.tsx :156
const response = await fetch("/api/settings/tailscale/serve", { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/settings/components/UserAccessCard.tsx :59
const response = await fetch("/api/auth/users", { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/topology/TopologyInbox.tsx :42
const res = await fetch("/api/topology/unsorted"); - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/topology/useAssetDependencies.ts :90
const response = await fetch(`/api/edges?${params.toString()}`, { - net labtether-labtether-96f5929/web/console/app/[locale]/(console)/topology/useTopologyData.ts :41
const res = await fetch(API_BASE, { signal: ac.signal }); - net labtether-labtether-96f5929/web/console/app/[locale]/login/page.tsx :58
const response = await fetch("/api/auth/bootstrap/status", { - net labtether-labtether-96f5929/web/console/app/[locale]/setup/page.tsx :75
const response = await fetch("/api/auth/bootstrap/status", { - net labtether-labtether-96f5929/web/console/app/api/actions/execute/route.ts :26
const response = await fetch(`${base.api}/actions/execute`, { - net labtether-labtether-96f5929/web/console/app/api/actions/runs/route.ts :18
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/admin/reset/route.ts :23
const response = await fetch(`${base.api}/admin/reset`, { - net labtether-labtether-96f5929/web/console/app/api/agents/[id]/settings/history/route.ts :13
const response = await fetch(`${base.api}/api/v1/agents/${encodeURIComponent(id)}/settings/history`, { - net labtether-labtether-96f5929/web/console/app/api/agents/[id]/settings/reset/route.ts :24
const response = await fetch(`${base.api}/api/v1/agents/${encodeURIComponent(id)}/settings/reset`, { - net labtether-labtether-96f5929/web/console/app/api/agents/[id]/settings/route.ts :14
const response = await fetch(`${base.api}/api/v1/agents/${encodeURIComponent(id)}/settings`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/agents/[id]/settings/test-docker/route.ts :24
const response = await fetch(`${base.api}/api/v1/agents/${encodeURIComponent(id)}/settings/test-docker`, { - net labtether-labtether-96f5929/web/console/app/api/agents/[id]/settings/update-agent/route.ts :24
const response = await fetch(`${base.api}/api/v1/agents/${encodeURIComponent(id)}/settings/update-agent`, { - net labtether-labtether-96f5929/web/console/app/api/agents/approve/route.ts :14
const response = await fetch(`${base.api}/api/v1/agents/approve`, { - net labtether-labtether-96f5929/web/console/app/api/agents/connected/route.ts :8
const response = await fetch(`${base.api}/agents/connected`, { - net labtether-labtether-96f5929/web/console/app/api/agents/pending/route.ts :20
const response = await fetch(`${base.api}/api/v1/agents/pending`, { - net labtether-labtether-96f5929/web/console/app/api/agents/reject/route.ts :14
const response = await fetch(`${base.api}/api/v1/agents/reject`, { - net labtether-labtether-96f5929/web/console/app/api/alerts/instances/route.ts :16
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/alerts/routes/[routeId]/route.ts :17
const response = await fetch(backendPath(base.api, routeId), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/alerts/routes/route.ts :17
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/alerts/rules/[ruleId]/route.ts :16
const response = await fetch(`${base.api}/alerts/rules/${encodeURIComponent(ruleId)}`, { - net labtether-labtether-96f5929/web/console/app/api/alerts/rules/route.ts :16
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/alerts/silences/[silenceId]/route.ts :16
const response = await fetch(`${base.api}/alerts/silences/${encodeURIComponent(silenceId)}`, { - net labtether-labtether-96f5929/web/console/app/api/alerts/silences/route.ts :16
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/alerts/templates/route.ts :10
const response = await fetch(`${base.api}/alerts/templates`, { - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/dependencies/[depId]/route.ts :19
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/dependencies/route.ts :21
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/desktop/credentials/retrieve/route.ts :13
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/desktop/credentials/route.ts :9
const res = await fetch( - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/protocols/[protocol]/route.ts :20
const response = await fetch( - net (weak) labtether-labtether-96f5929/web/console/app/api/assets/[id]/protocols/[protocol]/test/route.ts :20
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/protocols/route.ts :15
const response = await fetch(`${base.api}/assets/${encodeURIComponent(id)}/protocols`, { - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/protocols/ssh/push-hub-key/route.ts :20
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/assets/[id]/route.ts :15
const res = await fetch(`${base.api}/assets/${encodeURIComponent(id)}`, { - net labtether-labtether-96f5929/web/console/app/api/assets/manual/route.ts :15
const response = await fetch(`${base.api}/assets/manual`, { - net labtether-labtether-96f5929/web/console/app/api/assets/route.ts :26
const res = await fetch(assetsURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/auth/2fa/recovery-codes/route.ts :15
const response = await fetch(`${base.api}/auth/2fa/recovery-codes`, { - net labtether-labtether-96f5929/web/console/app/api/auth/2fa/route.ts :15
const response = await fetch(`${base.api}/auth/2fa`, { - net labtether-labtether-96f5929/web/console/app/api/auth/2fa/setup/route.ts :14
const response = await fetch(`${base.api}/auth/2fa/setup`, { - net labtether-labtether-96f5929/web/console/app/api/auth/2fa/verify/route.ts :15
const response = await fetch(`${base.api}/auth/2fa/verify`, { - net labtether-labtether-96f5929/web/console/app/api/auth/bootstrap/route.ts :29
const response = await fetch(`${base.api}/auth/bootstrap`, { - net labtether-labtether-96f5929/web/console/app/api/auth/bootstrap/status/route.ts :10
const response = await fetch(`${base.api}/auth/bootstrap/status`, { - net labtether-labtether-96f5929/web/console/app/api/auth/login/2fa/route.ts :47
const response = await fetch(`${base.api}/auth/login/2fa`, { - net labtether-labtether-96f5929/web/console/app/api/auth/login/route.ts :42
const response = await fetch(`${base.api}/auth/login`, { - net labtether-labtether-96f5929/web/console/app/api/auth/logout/route.ts :16
const response = await fetch(`${base.api}/auth/logout`, { - net labtether-labtether-96f5929/web/console/app/api/auth/me/password/route.ts :38
const response = await fetch(`${base.api}/auth/me/password`, { - net labtether-labtether-96f5929/web/console/app/api/auth/me/route.ts :11
const response = await fetch(`${base.api}/auth/me`, { - net labtether-labtether-96f5929/web/console/app/api/auth/oidc/callback/route.ts :23
const response = await fetch(`${base.api}/auth/oidc/callback`, { - net labtether-labtether-96f5929/web/console/app/api/auth/oidc/start/route.ts :17
const response = await fetch(`${base.api}/auth/oidc/start`, { - net labtether-labtether-96f5929/web/console/app/api/auth/providers/route.ts :9
const response = await fetch(`${base.api}/auth/providers`, { - net labtether-labtether-96f5929/web/console/app/api/auth/users/[id]/route.ts :27
const response = await fetch(`${base.api}/auth/users/${encodeURIComponent(id)}`, { - net labtether-labtether-96f5929/web/console/app/api/auth/users/[id]/sessions/route.ts :21
const response = await fetch(`${base.api}/auth/users/${encodeURIComponent(id)}/sessions`, { - net labtether-labtether-96f5929/web/console/app/api/auth/users/route.ts :13
const response = await fetch(`${base.api}/auth/users`, { - net labtether-labtether-96f5929/web/console/app/api/connectors/[connectorId]/actions/route.ts :24
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/cron/[assetId]/route.ts :18
const res = await fetch(url, { headers, cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/demo/session/route.ts :9
const response = await fetch(`${base.api}/api/demo/session`, { - net labtether-labtether-96f5929/web/console/app/api/dependencies/batch/route.ts :16
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/desktop/session/[id]/route.ts :43
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/desktop/session/route.ts :330
const response = await fetch(`${base.api}/desktop/sessions`, { - net labtether-labtether-96f5929/web/console/app/api/desktop/spice-ticket/route.ts :39
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/desktop/stream-ticket/route.ts :36
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/disks/[assetId]/route.ts :18
const res = await fetch(url, { headers, cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/displays/[id]/route.ts :26
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/docker/containers/[id]/[sub]/route.ts :28
const response = await fetch(backendURL, { - net labtether-labtether-96f5929/web/console/app/api/docker/containers/[id]/route.ts :20
const response = await fetch(`${base.api}/api/v1/docker/containers/${containerID}`, { - net labtether-labtether-96f5929/web/console/app/api/docker/hosts/[id]/[sub]/route.ts :23
const response = await fetch(`${base.api}/api/v1/docker/hosts/${hostID}/${subPath}`, { - net labtether-labtether-96f5929/web/console/app/api/docker/hosts/[id]/route.ts :20
const response = await fetch(`${base.api}/api/v1/docker/hosts/${hostID}`, { - net labtether-labtether-96f5929/web/console/app/api/docker/hosts/route.ts :12
const response = await fetch(`${base.api}/api/v1/docker/hosts`, { - net labtether-labtether-96f5929/web/console/app/api/docker/stacks/[id]/action/route.ts :32
const response = await fetch(`${base.api}/api/v1/docker/stacks/${stackID}/action`, { - net labtether-labtether-96f5929/web/console/app/api/edges/[id]/route.ts :24
const response = await fetch(`${base.api}/edges/${encodeURIComponent(id)}`, { - net labtether-labtether-96f5929/web/console/app/api/edges/ancestors/route.ts :22
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/edges/route.ts :23
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/edges/tree/route.ts :22
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/file-connections/[[...path]]/route.ts :41
const response = await fetch(url, fetchOptions); - net labtether-labtether-96f5929/web/console/app/api/file-transfers/[[...path]]/route.ts :41
const response = await fetch(url, fetchOptions); - net labtether-labtether-96f5929/web/console/app/api/groups/[groupId]/maintenance-windows/[windowId]/route.ts :61
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/groups/[groupId]/maintenance-windows/route.ts :24
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/groups/[groupId]/move/route.ts :64
return await fetch(new URL(path, `${origin}/`).toString(), init); - net labtether-labtether-96f5929/web/console/app/api/groups/[groupId]/route.ts :121
return await fetch(new URL(path, `${origin}/`).toString(), init); - net labtether-labtether-96f5929/web/console/app/api/groups/[groupId]/timeline/route.ts :23
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/groups/reliability/route.ts :18
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/groups/route.ts :83
return await fetch(backendURL.toString(), init); - net labtether-labtether-96f5929/web/console/app/api/health/route.ts :7
const res = await fetch(`${api}/healthz`, { cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/incidents/[id]/events/route.ts :11
const response = await fetch(`${base.api}/incidents/${encodeURIComponent(id)}/events`, { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/incidents/[id]/route.ts :16
const response = await fetch(`${base.api}/incidents/${encodeURIComponent(id)}`, { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/incidents/route.ts :20
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/links/suggestions/[id]/route.ts :21
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/links/suggestions/route.ts :10
const response = await fetch(`${base.api}/links/suggestions`, { - net labtether-labtether-96f5929/web/console/app/api/logs/journal/[assetId]/route.ts :23
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/logs/query/route.ts :19
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/logs/sources/route.ts :22
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/metrics/assets/[assetId]/route.ts :29
const response = await fetch(backendURL.toString(), { - net labtether-labtether-96f5929/web/console/app/api/network/[assetId]/[action]/route.ts :24
const response = await fetch(url, { - net labtether-labtether-96f5929/web/console/app/api/network/[assetId]/route.ts :18
const res = await fetch(url, { headers, cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/notifications/channels/[channelId]/route.ts :22
const response = await fetch(backendPath(base.api, channelId), { cache: "no-store", headers: authHeaders }); - net (weak) labtether-labtether-96f5929/web/console/app/api/notifications/channels/[channelId]/test/route.ts :20
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/notifications/channels/route.ts :22
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/notifications/history/route.ts :19
const response = await fetch(backendURL.toString(), { cache: "no-store", headers: authHeaders }); - net labtether-labtether-96f5929/web/console/app/api/packages/[assetId]/[action]/route.ts :24
const response = await fetch(url, { - net labtether-labtether-96f5929/web/console/app/api/packages/[assetId]/route.ts :18
const res = await fetch(url, { headers, cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/capabilities/route.ts :20
const response = await fetch(`${base.api}/pbs/assets/${assetID}/capabilities`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/certificates/route.ts :19
const response = await fetch(`${base.api}/pbs/assets/${assetID}/certificates`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/datastores/[storeName]/gc/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/datastores/${storeID}/gc`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/datastores/[storeName]/maintenance-disable/route.ts :25
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/datastores/[storeName]/maintenance-enable/route.ts :25
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/datastores/[storeName]/verify/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/datastores/${storeID}/verify`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/details/route.ts :20
const response = await fetch(`${base.api}/pbs/assets/${assetID}/details`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/groups/forget/route.ts :52
const response = await fetch(upstreamURL, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/groups/route.ts :20
const response = await fetch(`${base.api}/pbs/assets/${assetID}/groups`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/prune-jobs/[jobId]/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/prune-jobs/${jobID}`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/prune-jobs/[jobId]/run/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/prune-jobs/${jobID}/run`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/prune-jobs/[jobId]/simulate/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/prune-jobs/${jobID}/simulate`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/prune-jobs/route.ts :19
const response = await fetch(`${base.api}/pbs/assets/${assetID}/prune-jobs`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/snapshots/forget/route.ts :53
const response = await fetch(upstreamURL, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/snapshots/route.ts :28
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/snapshots/verify/route.ts :35
const response = await fetch(upstreamURL, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/sync-jobs/[jobId]/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/sync-jobs/${jobID}`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/sync-jobs/[jobId]/run/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/sync-jobs/${jobID}/run`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/sync-jobs/route.ts :19
const response = await fetch(`${base.api}/pbs/assets/${assetID}/sync-jobs`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/traffic-control/[ruleName]/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/traffic-control/${ruleID}`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/traffic-control/route.ts :19
const response = await fetch(`${base.api}/pbs/assets/${assetID}/traffic-control`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/verification/route.ts :20
const response = await fetch(`${base.api}/pbs/assets/${assetID}/verification`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/verify-jobs/[jobId]/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/verify-jobs/${jobID}`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/verify-jobs/[jobId]/run/route.ts :25
const response = await fetch(`${base.api}/pbs/assets/${assetID}/verify-jobs/${jobID}/run`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/assets/[assetId]/verify-jobs/route.ts :19
const response = await fetch(`${base.api}/pbs/assets/${assetID}/verify-jobs`, { - net labtether-labtether-96f5929/web/console/app/api/pbs/tasks/[node]/[upid]/log/route.ts :31
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/pbs/tasks/[node]/[upid]/status/route.ts :27
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/pbs/tasks/[node]/[upid]/stop/route.ts :32
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/portainer/assets/[assetId]/[...path]/route.ts :73
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/portainer/assets/[assetId]/capabilities/route.ts :20
const response = await fetch(`${base.api}/portainer/assets/${assetID}/capabilities`, { - net labtether-labtether-96f5929/web/console/app/api/portainer/endpoints/route.ts :12
const response = await fetch(`${base.api}/portainer/endpoints`, { - net labtether-labtether-96f5929/web/console/app/api/processes/[assetId]/route.ts :21
const res = await fetch(url, { headers, cache: "no-store" }); - net labtether-labtether-96f5929/web/console/app/api/proxmox/assets/[assetId]/capabilities/route.ts :20
const response = await fetch(`${base.api}/proxmox/assets/${assetID}/capabilities`, { - net labtether-labtether-96f5929/web/console/app/api/proxmox/assets/[assetId]/details/route.ts :20
const response = await fetch(`${base.api}/proxmox/assets/${assetID}/details`, { - net labtether-labtether-96f5929/web/console/app/api/proxmox/assets/[assetId]/metrics/route.ts :29
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/assets/[assetId]/storage/insights/route.ts :24
const response = await fetch(`${base.api}/proxmox/assets/${assetID}/storage/insights?${query.toString()}`, { - net labtether-labtether-96f5929/web/console/app/api/proxmox/cluster/status/route.ts :19
const response = await fetch(`${base.api}/proxmox/cluster/status${querySuffix}`, { - net labtether-labtether-96f5929/web/console/app/api/proxmox/nodes/[node]/certificates/route.ts :31
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/nodes/[node]/network/route.ts :30
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/nodes/[node]/replication/route.ts :31
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/nodes/[node]/syslog/route.ts :32
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/nodes/[node]/updates/route.ts :31
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/tasks/[node]/[upid]/log/route.ts :27
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/proxmox/tasks/[node]/[upid]/stop/route.ts :32
const response = await fetch( - net labtether-labtether-96f5929/web/console/app/api/queue/dead-letters/route.ts :12
const response = await fetch(backendURL, { - net labtether-labtether-96f5929/web/console/app/api/recordings/[sessionId]/route.ts :31
const response = await fetch( - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/docker/test/route.ts :18
const response = await fetch(`${base.api}/connectors/docker/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/homeassistant/test/route.ts :33
const response = await fetch(`${base.api}/connectors/homeassistant/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/pbs/test/route.ts :35
const response = await fetch(`${base.api}/connectors/pbs/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/portainer/test/route.ts :40
const response = await fetch(`${base.api}/connectors/portainer/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/prometheus/test-connection/route.ts :69
const response = await fetch(`${base.api}/settings/prometheus/test-connection`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/proxmox/test/route.ts :40
const response = await fetch(`${base.api}/connectors/proxmox/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/settings/truenas/test/route.ts :34
const response = await fetch(`${base.api}/connectors/truenas/test`, { - net (weak) labtether-labtether-96f5929/web/console/app/api/truenas/assets/[assetId]/disks/[diskName]/smart-test/route.ts :26
const response = await fetch( - net (weak) labtether-labtether-96f5929/web/console/e2e/desktop-remote-view.spec.ts :1427
const response = await fetch("/api/v1/nodes/agent-host-1/clipboard/get", { - net (weak) labtether-labtether-96f5929/web/console/e2e/resilience.spec.ts :162
const response = await request.fetch(call.path, { - net (weak) labtether-labtether-96f5929/web/console/e2e/topology.spec.ts :358
const result = await fetch(`/api/assets/${encodeURIComponent(nextAssetID)}`, { - net (weak) labtether-labtether-96f5929/web/console/scripts/__tests__/runtime-proxy.test.mjs :1
import { createServer } from "node:http"; - net (weak) labtether-labtether-96f5929/web/console/scripts/console-ingress.mjs :1
import { createServer, createConnection } from "node:net"; - net (weak) labtether-labtether-96f5929/web/console/scripts/runtime-proxy.mjs :1
import { createServer as createHttpServer, request as createHttpRequest } from "node:http"; - net (weak) labtether-labtether-96f5929/web/console/scripts/start-playwright-https.mjs :3
import { createServer as createHttpsServer } from "node:https"; - net (weak) labtether-labtether-96f5929/web/console/scripts/test-runtime-proxy-standalone.mjs :4
import { createServer } from "node:http";
secrets 1
- secrets labtether-labtether-96f5929/web/console/lib/backend.ts :305
const token = process.env.LABTETHER_API_TOKEN?.trim() || readServiceToken();
tool registrations 32
- whoami labtether-labtether-96f5929/internal/mcpserver/server.go :113
- assets_list labtether-labtether-96f5929/internal/mcpserver/server.go :120
- assets_get labtether-labtether-96f5929/internal/mcpserver/server.go :129
- exec labtether-labtether-96f5929/internal/mcpserver/server.go :137
- exec_multi labtether-labtether-96f5929/internal/mcpserver/server.go :147
- services_list labtether-labtether-96f5929/internal/mcpserver/server.go :159
- services_restart labtether-labtether-96f5929/internal/mcpserver/server.go :167
- files_list labtether-labtether-96f5929/internal/mcpserver/server.go :178
- files_read labtether-labtether-96f5929/internal/mcpserver/server.go :187
- docker_hosts labtether-labtether-96f5929/internal/mcpserver/server.go :198
- docker_containers labtether-labtether-96f5929/internal/mcpserver/server.go :205
- docker_container_restart labtether-labtether-96f5929/internal/mcpserver/server.go :213
- system_processes labtether-labtether-96f5929/internal/mcpserver/server.go :223
- system_network labtether-labtether-96f5929/internal/mcpserver/server.go :231
- system_disks labtether-labtether-96f5929/internal/mcpserver/server.go :239
- system_packages labtether-labtether-96f5929/internal/mcpserver/server.go :247
- alerts_list labtether-labtether-96f5929/internal/mcpserver/server.go :257
- alerts_acknowledge labtether-labtether-96f5929/internal/mcpserver/server.go :264
- asset_reboot labtether-labtether-96f5929/internal/mcpserver/server.go :274
- asset_shutdown labtether-labtether-96f5929/internal/mcpserver/server.go :282
- asset_wake labtether-labtether-96f5929/internal/mcpserver/server.go :290
- groups_list labtether-labtether-96f5929/internal/mcpserver/server.go :300
- metrics_overview labtether-labtether-96f5929/internal/mcpserver/server.go :309
- schedules_list labtether-labtether-96f5929/internal/mcpserver/server.go :318
- webhooks_list labtether-labtether-96f5929/internal/mcpserver/server.go :325
- saved_actions_list labtether-labtether-96f5929/internal/mcpserver/server.go :332
- credentials_list labtether-labtether-96f5929/internal/mcpserver/server.go :339
- topology_edges labtether-labtether-96f5929/internal/mcpserver/server.go :346
- updates_list_plans labtether-labtether-96f5929/internal/mcpserver/server.go :354
- connectors_health labtether-labtether-96f5929/internal/mcpserver/server.go :363
- docker_container_logs labtether-labtether-96f5929/internal/mcpserver/server.go :370
- docker_container_stats labtether-labtether-96f5929/internal/mcpserver/server.go :380
install hooks 1
- postinstall labtether-labtether-96f5929/web/console/package.json :19
sh scripts/patch-novnc.sh
declared dependencies 84
- github.com/mark3labs/mcp-go@v0.58.0
- @dagrejs/dagre@^3.1.1
- @novnc/novnc@^1.7.0
- @radix-ui/react-dialog@^1.1.23
- @radix-ui/react-dropdown-menu@^2.1.24
- @radix-ui/react-popover@^1.1.23
- @radix-ui/react-tooltip@^1.2.16
- @spice-project/spice-html5@^0.2.1
- @tailwindcss/postcss@^4.3.3
- @xterm/addon-fit@^0.11.0
- @xterm/addon-search@^0.16.0
- @xterm/addon-unicode11@^0.9.0
- @xterm/addon-web-links@^0.12.0
- @xterm/xterm@^6.0.0
- @xyflow/react@^12.11.5
- cmdk@^1.1.1
- guacamole-common-js@^1.5.0
- lucide-react@^1.34.0
- next@^16.3.3
- next-intl@^4.13.7
- qrcode@^1.5.4
- react@^19.2.8
- react-dom@^19.2.8
- react-resizable-panels@^4.12.3
- tailwindcss@^4.2.1
- @playwright/test@^1.62.1
- @types/dagre@^0.7.54
- @types/node@^25.9.1
- @types/qrcode@^1.5.6
- @types/react@^19.2.18
- @types/react-dom@^19.2.5
- @typescript-eslint/parser@^8.68.0
- @vitejs/plugin-react@^6.1.0
- eslint@^10.9.1
- eslint-plugin-react-hooks@^7.1.1
- jsdom@^29.1.1
- typescript@^6.0.3
- vitest@^4.1.11
- github.com/cloudsoda/go-smb2@v0.0.0-20260701064823-d8c5600d73b8
- github.com/coreos/go-oidc/v3@v3.20.0
- github.com/creack/pty@v1.1.24
- github.com/golang/snappy@v1.0.0
- github.com/gorilla/websocket@v1.5.3
- github.com/jackc/pgx/v5@v5.10.0
- github.com/jlaffaye/ftp@v0.2.4
- github.com/labtether/protocol@v1.6.5
- github.com/pkg/sftp@v1.13.11
- github.com/pquerna/otp@v1.5.0
- github.com/prometheus/client_golang@v1.24.1
- github.com/prometheus/client_model@v0.6.2
- github.com/robfig/cron/v3@v3.0.1
- github.com/studio-b12/gowebdav@v0.13.0
- golang.org/x/crypto@v0.56.0
- golang.org/x/oauth2@v0.36.0
- golang.org/x/sync@v0.22.0
- golang.org/x/sys@v0.47.0
- google.golang.org/protobuf@v1.36.12
- github.com/beorn7/perks@v1.0.1
- github.com/boombuler/barcode@v1.0.1-0.20190219062509-6c824513bacc
- github.com/cespare/xxhash/v2@v2.3.0
- github.com/cloudsoda/sddl@v0.0.0-20250224235906-926454e91efc
- github.com/geoffgarside/ber@v1.1.0
- github.com/go-jose/go-jose/v4@v4.1.4
- github.com/google/jsonschema-go@v0.4.2
- github.com/google/uuid@v1.6.0
- github.com/hashicorp/go-uuid@v1.0.3
- github.com/jackc/pgpassfile@v1.0.0
- github.com/jackc/pgservicefile@v0.0.0-20240606120523-5a60cdf6a761
- github.com/jackc/puddle/v2@v2.2.2
- github.com/jcmturner/aescts/v2@v2.0.0
- github.com/jcmturner/dnsutils/v2@v2.0.0
- github.com/jcmturner/gofork@v1.7.6
- github.com/jcmturner/goidentity/v6@v6.0.1
- github.com/jcmturner/gokrb5/v8@v8.4.4
- github.com/jcmturner/rpc/v2@v2.0.3
- github.com/kr/fs@v0.1.0
- github.com/munnerz/goautoneg@v0.0.0-20191010083416-a7dc8b61c822
- github.com/prometheus/common@v0.70.1
- github.com/prometheus/procfs@v0.21.1
- github.com/santhosh-tekuri/jsonschema/v6@v6.0.2
- github.com/spf13/cast@v1.7.1
- github.com/yosida95/uritemplate/v3@v3.0.2
- golang.org/x/net@v0.57.0
- golang.org/x/text@v0.41.0
perm:untrusted 1
- untrusted (weak) labtether-labtether-96f5929/web/console/scripts/__tests__/runtime-proxy.test.mjs :250
fetch(`http://127.0.0.1:${proxyPort}/ws/agent`).then((response) => response.text()),
transport_posture 1
- network-listening, binds all interfaces, no auth detected labtether-labtether-96f5929/scripts/lib/http-redirect.js :40
}).listen(httpPort, "0.0.0.0", () => {