chore: Phase 1 complete — all backend proxy tests pass
This commit is contained in:
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -108,15 +108,12 @@
|
|||||||
<nav class="settings-tabs">
|
<nav class="settings-tabs">
|
||||||
<button class="settings-tab settings-tab--active" data-tab="display">Display</button>
|
<button class="settings-tab settings-tab--active" data-tab="display">Display</button>
|
||||||
<button class="settings-tab" data-tab="sessions">Sessions</button>
|
<button class="settings-tab" data-tab="sessions">Sessions</button>
|
||||||
|
<button class="settings-tab" data-tab="notifications">Notifications</button>
|
||||||
<button class="settings-tab" data-tab="new-session">Commands</button>
|
<button class="settings-tab" data-tab="new-session">Commands</button>
|
||||||
<button class="settings-tab" data-tab="devices">Multi-Device</button>
|
<button class="settings-tab" data-tab="devices">Multi-Device</button>
|
||||||
</nav>
|
</nav>
|
||||||
<div class="settings-content">
|
<div class="settings-content">
|
||||||
<div class="settings-panel" data-tab="display">
|
<div class="settings-panel" data-tab="display">
|
||||||
<div class="settings-field">
|
|
||||||
<label class="settings-label" for="setting-device-name">Device Name</label>
|
|
||||||
<input type="text" id="setting-device-name" class="settings-input" placeholder="This device" />
|
|
||||||
</div>
|
|
||||||
<div class="settings-field">
|
<div class="settings-field">
|
||||||
<label class="settings-label" for="setting-font-size">Font Size</label>
|
<label class="settings-label" for="setting-font-size">Font Size</label>
|
||||||
<select id="setting-font-size" class="settings-select">
|
<select id="setting-font-size" class="settings-select">
|
||||||
@@ -188,6 +185,12 @@
|
|||||||
<label class="settings-label" for="setting-auto-open">Auto-open created sessions</label>
|
<label class="settings-label" for="setting-auto-open">Auto-open created sessions</label>
|
||||||
<input type="checkbox" id="setting-auto-open" class="settings-checkbox" checked />
|
<input type="checkbox" id="setting-auto-open" class="settings-checkbox" checked />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="settings-field settings-field--column">
|
||||||
|
<label class="settings-label">Hidden Sessions</label>
|
||||||
|
<div id="setting-hidden-sessions" class="settings-checkbox-list"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-panel hidden" data-tab="notifications">
|
||||||
<div class="settings-field">
|
<div class="settings-field">
|
||||||
<label class="settings-label" for="setting-bell-sound">Bell Sound</label>
|
<label class="settings-label" for="setting-bell-sound">Bell Sound</label>
|
||||||
<input type="checkbox" id="setting-bell-sound" class="settings-checkbox" />
|
<input type="checkbox" id="setting-bell-sound" class="settings-checkbox" />
|
||||||
@@ -199,10 +202,6 @@
|
|||||||
<button id="notification-request-btn" class="settings-action-btn">Request Permission</button>
|
<button id="notification-request-btn" class="settings-action-btn">Request Permission</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-field settings-field--column">
|
|
||||||
<label class="settings-label">Hidden Sessions</label>
|
|
||||||
<div id="setting-hidden-sessions" class="settings-checkbox-list"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-panel hidden" data-tab="new-session">
|
<div class="settings-panel hidden" data-tab="new-session">
|
||||||
<div class="settings-field settings-field--column">
|
<div class="settings-field settings-field--column">
|
||||||
@@ -219,6 +218,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-panel hidden" data-tab="devices">
|
<div class="settings-panel hidden" data-tab="devices">
|
||||||
|
<div class="settings-field">
|
||||||
|
<label class="settings-label" for="setting-device-name">Device Name</label>
|
||||||
|
<input type="text" id="setting-device-name" class="settings-input" placeholder="This device" />
|
||||||
|
</div>
|
||||||
<div class="settings-field">
|
<div class="settings-field">
|
||||||
<label class="settings-label" for="setting-multi-device-enabled">Enable multi-device support</label>
|
<label class="settings-label" for="setting-multi-device-enabled">Enable multi-device support</label>
|
||||||
<input type="checkbox" id="setting-multi-device-enabled" class="settings-checkbox" />
|
<input type="checkbox" id="setting-multi-device-enabled" class="settings-checkbox" />
|
||||||
@@ -232,6 +235,13 @@
|
|||||||
<option value="filtered">Filtered</option>
|
<option value="filtered">Filtered</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="settings-field">
|
||||||
|
<label class="settings-label" for="setting-view-scope">View Scope</label>
|
||||||
|
<select id="setting-view-scope" class="settings-select">
|
||||||
|
<option value="all">All Instances</option>
|
||||||
|
<option value="local">Local Only</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="settings-field settings-field--column">
|
<div class="settings-field settings-field--column">
|
||||||
<label class="settings-label">Remote Instances</label>
|
<label class="settings-label">Remote Instances</label>
|
||||||
<div id="setting-remote-instances" class="settings-remote-list"></div>
|
<div id="setting-remote-instances" class="settings-remote-list"></div>
|
||||||
|
|||||||
@@ -256,6 +256,14 @@ body {
|
|||||||
animation: bell-pulse 1.4s ease-in-out infinite;
|
animation: bell-pulse 1.4s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Bell count number inside the badge */
|
||||||
|
.tile-bell-count {
|
||||||
|
font-size: 9px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes bell-pulse {
|
@keyframes bell-pulse {
|
||||||
0%, 100% {
|
0%, 100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -45,3 +45,8 @@ addopts = "--import-mode=importlib -m 'not integration'"
|
|||||||
markers = [
|
markers = [
|
||||||
"integration: marks tests as integration tests requiring real tmux (deselect with '-m not integration')",
|
"integration: marks tests as integration tests requiring real tmux (deselect with '-m not integration')",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"pytest-timeout>=2.4.0",
|
||||||
|
]
|
||||||
|
|||||||
@@ -208,6 +208,7 @@ source = { editable = "." }
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aiofiles" },
|
{ name = "aiofiles" },
|
||||||
{ name = "fastapi" },
|
{ name = "fastapi" },
|
||||||
|
{ name = "httpx" },
|
||||||
{ name = "itsdangerous" },
|
{ name = "itsdangerous" },
|
||||||
{ name = "python-multipart" },
|
{ name = "python-multipart" },
|
||||||
{ name = "python-pam" },
|
{ name = "python-pam" },
|
||||||
@@ -219,17 +220,21 @@ dependencies = [
|
|||||||
[package.optional-dependencies]
|
[package.optional-dependencies]
|
||||||
dev = [
|
dev = [
|
||||||
{ name = "beautifulsoup4" },
|
{ name = "beautifulsoup4" },
|
||||||
{ name = "httpx" },
|
|
||||||
{ name = "pytest" },
|
{ name = "pytest" },
|
||||||
{ name = "pytest-asyncio" },
|
{ name = "pytest-asyncio" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.dev-dependencies]
|
||||||
|
dev = [
|
||||||
|
{ name = "pytest-timeout" },
|
||||||
|
]
|
||||||
|
|
||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "aiofiles", specifier = ">=23.0" },
|
{ name = "aiofiles", specifier = ">=23.0" },
|
||||||
{ name = "beautifulsoup4", marker = "extra == 'dev'", specifier = ">=4.12" },
|
{ name = "beautifulsoup4", marker = "extra == 'dev'", specifier = ">=4.12" },
|
||||||
{ name = "fastapi", specifier = ">=0.115.0" },
|
{ name = "fastapi", specifier = ">=0.115.0" },
|
||||||
{ name = "httpx", marker = "extra == 'dev'", specifier = ">=0.27.0" },
|
{ name = "httpx", specifier = ">=0.27.0" },
|
||||||
{ name = "itsdangerous", specifier = ">=2.1.0" },
|
{ name = "itsdangerous", specifier = ">=2.1.0" },
|
||||||
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" },
|
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" },
|
||||||
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.23.0" },
|
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.23.0" },
|
||||||
@@ -241,6 +246,9 @@ requires-dist = [
|
|||||||
]
|
]
|
||||||
provides-extras = ["dev"]
|
provides-extras = ["dev"]
|
||||||
|
|
||||||
|
[package.metadata.requires-dev]
|
||||||
|
dev = [{ name = "pytest-timeout", specifier = ">=2.4.0" }]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "packaging"
|
name = "packaging"
|
||||||
version = "26.0"
|
version = "26.0"
|
||||||
@@ -409,6 +417,18 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" },
|
{ url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-timeout"
|
||||||
|
version = "2.4.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "pytest" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/ac/82/4c9ecabab13363e72d880f2fb504c5f750433b2b6f16e99f4ec21ada284c/pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a", size = 17973, upload-time = "2025-05-05T19:44:34.99Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "python-dotenv"
|
name = "python-dotenv"
|
||||||
version = "1.2.2"
|
version = "1.2.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user