Repository navigation
Conversation
Settings gains a Daemons page -- Local and every SSH daemon with its state, an SSH form a part at a time, import from the SSH config, connect, and remove asked first -- and a Notifications page with the kinds, the system toggle and the browser's Allow. Both say Unavailable where the server does not serve their endpoints yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
Landed together in #385. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Unit 9 of the multi-daemon + notifications batch.
views/settings/daemons.js: Local (fixed) plus each SSH daemon fromGET /api/daemonswith its state (up, connecting, installing, failed, idle), detail and version. The list polls while a daemon is connecting or installing, redrawing only the state cells so that a pending Remove confirmation or a Connect refusal stays put. There is an add/edit SSH form, filled in a part at a time (name, host, user, port, identity file via the path picker, proxy jump, SSH options as ordered pairs), which saves throughPOST /api/daemons.Importtakes a checklist fromGET /api/daemons/hostsand posts it toPOST /api/daemons/import {aliases}.Removeasks first and goes throughPOST /api/daemons/remove, andConnectthroughPOST /api/daemons/{name}/connect. A refusal is shown where it happened.views/settings/notifications.js: toggles for the C2 kinds (Done, Failed, Stopped, Questions, Chat turns) and for System, read and written through/api/notifications/settingsand saved on each change. Outside the app, anAllowbutton callsNotification.requestPermission()from the click and then shows the resulting state.PAGESmap. A 404 from their endpoints showsUnavailable./* settings: daemons, notifications */lays the daemon table out as stacked blocks at phone width.docs/user/web.md(Settings table) anddocs/reference/web.md(settings pages).Tests
tests/integration/test_web_settings_pages.py(Chromium and WebKit, with endpoints faked throughpage.route): add with options, import, remove with confirmation, a refused connect, the Unavailable state, toggles saving, and the permission button with a stubbedNotification.uv run pytest tests/unitandtests/integration/test_web_*.pypass.hmz web --port 0with routed fakes: light, dark, wide and phone screenshots, with no horizontal overflow.🤖 Generated with Claude Code