ssh-server-manager 0.4.0__tar.gz → 0.4.1__tar.gz

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.
Files changed (38) hide show
  1. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/PKG-INFO +9 -2
  2. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/README.md +8 -1
  3. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/pyproject.toml +1 -1
  4. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/__init__.py +1 -1
  5. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/webapp.py +12 -3
  6. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/PKG-INFO +9 -2
  7. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/askpass.py +0 -0
  8. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/assets/ui/app.js +0 -0
  9. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/assets/ui/contexts.css +0 -0
  10. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/assets/ui/contexts.js +0 -0
  11. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/assets/ui/index.html +0 -0
  12. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/assets/ui/styles.css +0 -0
  13. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/auth.py +0 -0
  14. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/cli.py +0 -0
  15. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/db.py +0 -0
  16. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/importer.py +0 -0
  17. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/paths.py +0 -0
  18. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/service.py +0 -0
  19. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/ssh_config.py +0 -0
  20. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/ssh_runner.py +0 -0
  21. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/validation.py +0 -0
  22. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager/vault.py +0 -0
  23. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/SOURCES.txt +0 -0
  24. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/dependency_links.txt +0 -0
  25. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/entry_points.txt +0 -0
  26. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/requires.txt +0 -0
  27. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/scripts/ssh_server_manager.egg-info/top_level.txt +0 -0
  28. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/setup.cfg +0 -0
  29. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_askpass.py +0 -0
  30. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_auth.py +0 -0
  31. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_db.py +0 -0
  32. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_importer.py +0 -0
  33. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_runner.py +0 -0
  34. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_service.py +0 -0
  35. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_ssh_config.py +0 -0
  36. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_ui_assets.py +0 -0
  37. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_webapp.py +0 -0
  38. {ssh_server_manager-0.4.0 → ssh_server_manager-0.4.1}/tests/test_website.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-server-manager
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Local-first SSH host and credential manager for humans and AI agents — OS-keychain vault, loopback web UI, agent-safe by design
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://xiayh0107.github.io/servers-connect/
@@ -126,7 +126,8 @@ browser with a one-time tokenized URL.
126
126
  system/light/dark themes, import config, browse remote directories read-only
127
127
  over SFTP, copy file references for an agent, and reveal a stored secret
128
128
  after passkey or master-password re-authentication. Connection status expires
129
- instead of staying green.
129
+ instead of staying green. Inspect or shut down a background instance with
130
+ `serverctl ui --status` / `--stop` — no pid bookkeeping.
130
131
  - **Diagnostics** — `serverctl doctor` checks ssh availability and version,
131
132
  SFTP availability, vault backend safety, database and config paths, and
132
133
  Python dependencies.
@@ -150,6 +151,12 @@ Codex, and other agents can manage servers safely: agents get structured
150
151
  JSON output and connection error classification, while the AskPass
151
152
  architecture keeps secrets out of the model's context by design.
152
153
 
154
+ The skill also encodes conversation UX, not just commands: agents answer
155
+ inventory questions from a single `--json` call, hand interactive shells to
156
+ *your* terminal and proxy follow-up commands through `exec` (`connect`
157
+ refuses to run without a TTY instead of hanging), and clean up a background
158
+ UI with `serverctl ui --stop`.
159
+
153
160
  Deploy the skill with one line:
154
161
 
155
162
  ```bash
@@ -93,7 +93,8 @@ browser with a one-time tokenized URL.
93
93
  system/light/dark themes, import config, browse remote directories read-only
94
94
  over SFTP, copy file references for an agent, and reveal a stored secret
95
95
  after passkey or master-password re-authentication. Connection status expires
96
- instead of staying green.
96
+ instead of staying green. Inspect or shut down a background instance with
97
+ `serverctl ui --status` / `--stop` — no pid bookkeeping.
97
98
  - **Diagnostics** — `serverctl doctor` checks ssh availability and version,
98
99
  SFTP availability, vault backend safety, database and config paths, and
99
100
  Python dependencies.
@@ -117,6 +118,12 @@ Codex, and other agents can manage servers safely: agents get structured
117
118
  JSON output and connection error classification, while the AskPass
118
119
  architecture keeps secrets out of the model's context by design.
119
120
 
121
+ The skill also encodes conversation UX, not just commands: agents answer
122
+ inventory questions from a single `--json` call, hand interactive shells to
123
+ *your* terminal and proxy follow-up commands through `exec` (`connect`
124
+ refuses to run without a TTY instead of hanging), and clean up a background
125
+ UI with `serverctl ui --stop`.
126
+
120
127
  Deploy the skill with one line:
121
128
 
122
129
  ```bash
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ssh-server-manager"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "Local-first SSH host and credential manager for humans and AI agents — OS-keychain vault, loopback web UI, agent-safe by design"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -1,3 +1,3 @@
1
1
  """SSH Server Manager implementation."""
2
2
 
3
- __version__ = "0.4.0"
3
+ __version__ = "0.4.1"
@@ -429,12 +429,21 @@ def _pid_alive(pid: int) -> bool:
429
429
  if os.name == "nt":
430
430
  import ctypes
431
431
 
432
+ # OpenProcess succeeds on a terminated process while any handle to it
433
+ # is still held, so opening alone cannot distinguish alive from dead;
434
+ # ask whether the process object is signaled (i.e. has exited).
432
435
  PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
433
- handle = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, pid)
436
+ SYNCHRONIZE = 0x00100000
437
+ WAIT_TIMEOUT = 0x102
438
+ handle = ctypes.windll.kernel32.OpenProcess(
439
+ PROCESS_QUERY_LIMITED_INFORMATION | SYNCHRONIZE, False, pid
440
+ )
434
441
  if not handle:
435
442
  return False
436
- ctypes.windll.kernel32.CloseHandle(handle)
437
- return True
443
+ try:
444
+ return ctypes.windll.kernel32.WaitForSingleObject(handle, 0) == WAIT_TIMEOUT
445
+ finally:
446
+ ctypes.windll.kernel32.CloseHandle(handle)
438
447
  try:
439
448
  os.kill(pid, 0)
440
449
  except ProcessLookupError:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-server-manager
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Local-first SSH host and credential manager for humans and AI agents — OS-keychain vault, loopback web UI, agent-safe by design
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://xiayh0107.github.io/servers-connect/
@@ -126,7 +126,8 @@ browser with a one-time tokenized URL.
126
126
  system/light/dark themes, import config, browse remote directories read-only
127
127
  over SFTP, copy file references for an agent, and reveal a stored secret
128
128
  after passkey or master-password re-authentication. Connection status expires
129
- instead of staying green.
129
+ instead of staying green. Inspect or shut down a background instance with
130
+ `serverctl ui --status` / `--stop` — no pid bookkeeping.
130
131
  - **Diagnostics** — `serverctl doctor` checks ssh availability and version,
131
132
  SFTP availability, vault backend safety, database and config paths, and
132
133
  Python dependencies.
@@ -150,6 +151,12 @@ Codex, and other agents can manage servers safely: agents get structured
150
151
  JSON output and connection error classification, while the AskPass
151
152
  architecture keeps secrets out of the model's context by design.
152
153
 
154
+ The skill also encodes conversation UX, not just commands: agents answer
155
+ inventory questions from a single `--json` call, hand interactive shells to
156
+ *your* terminal and proxy follow-up commands through `exec` (`connect`
157
+ refuses to run without a TTY instead of hanging), and clean up a background
158
+ UI with `serverctl ui --stop`.
159
+
153
160
  Deploy the skill with one line:
154
161
 
155
162
  ```bash