Commit Graph
2845 Commits
Author SHA1 Message Date
Juan Denis caab657806 Merge remote-tracking branch 'origin/dev' into dev 2026-10-24 14:44:37 -04:00
Juan Denis e955134e41 feat: run approved assistant deployments through persistent recipe operations 2026-10-24 06:30:26 -04:00
Juan Denis fd4795a376 fix: preserve search focus and ignore stale list responses 2026-10-24 06:29:24 -04:00
Juan Denis a3d64e5a52 fix: preserve container port semantics for previews of slot deployments 2026-10-24 06:24:18 -04:00
Juan Denis ada1276d39 feat: add pinned preview deployment controls and queued lifecycle feedback 2026-10-24 06:23:06 -04:00
Juan Denis c0dbb921e1 feat: queue preview automation and preserve cleanup ownership through app deletion 2026-10-24 06:21:26 -04:00
Juan Denis 5a13a0dfb1 feat: provision isolated generic previews with retryable resource cleanup 2026-10-24 06:11:46 -04:00
Juan Denis 355157856f feat: add effective environment inspector with browser regression checks 2026-10-24 06:02:51 -04:00
Juan Denis d4f6b2af55 feat: expose value-free effective environment provenance through app access boundary 2026-10-24 05:58:02 -04:00
Juan Denis 0894b8ff5b fix: require provisioned runtime before advertising previews 2026-10-24 05:56:04 -04:00
Juan Denis 9c934cb7a6 test: enforce pure nginx configuration boundaries 2026-10-24 05:36:59 -04:00
Juan Denis 69a9ad345a refactor: separate nginx configuration rendering from host operations 2026-10-24 05:36:03 -04:00
Juan Denis 2a030b31ef test: capture nginx rendering contract before extraction 2026-10-24 05:33:01 -04:00
Juan Denis ac0871c016 fix: start agent maintenance only in the guarded runtime phase 2026-10-24 05:14:36 -04:00
Juan Denis dd93f01fd6 refactor: keep File Manager download operations in the action hook 2026-10-24 05:02:47 -04:00
Juan Denis a853c91d61 fix: preserve File Manager deep links on initial mount 2026-10-24 04:54:38 -04:00
Juan Denis 8bf9f4681c test: cover File Manager tree races and listing failures 2026-10-24 04:51:50 -04:00
Juan Denis 3c5b948f2e test: enforce core boundaries and document extension rules 2026-10-24 04:48:54 -04:00
Juan Denis b534ee2baf refactor: split File Manager state and views with regression guards 2026-10-24 04:44:18 -04:00
github-actions[bot] 17280646b0 chore: bump version to 1.11.25 [skip ci] 2026-10-24 08:34:38 +00:00
Juan Denis e7ba1c2a89 refactor: route file operations through capability-checked adapters 2026-10-24 04:31:28 -04:00
Juan Denis 4898fccae1 refactor: separate backend startup phases and guard ordering 2026-10-24 04:30:14 -04:00
Max Freedom PollardandClaude Opus 5.5 3de85c2a17 fix(security): honour the failed-login time window (#180)
check_failed_logins computed a cutoff from since_hours and never used
it, so the Security -> Events "Failed login attempts (24h)" card and
its alert counted every failure still in /var/log/auth.log or
/var/log/secure: up to a week of SSH attempts under the usual weekly
log rotation.

Each matching line is now dated from its stamp, either RFC 3339
(rsyslog's high-precision format) or the traditional BSD syslog stamp
(no year, so a December line read in January is placed in the previous
year), and lines older than the cutoff are skipped. A line whose stamp
is not recognised is still counted rather than hidden. The log paths
move to SecurityService.AUTH_LOGS so the tests can point at a temp
file.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 04:27:36 -04:00
github-actions[bot] 76fdc53144 chore: bump version to 1.11.24 [skip ci] 2026-10-23 22:57:43 +00:00
Juan Denis 771fca6ef0 fix(registry): sync bundled WordPress 1.0.4 release metadata 2026-10-23 18:50:18 -04:00
github-actions[bot] 251461a5d0 chore: bump version to 1.11.23 [skip ci] 2026-10-23 22:29:51 +00:00
Juan Denis 2b5d2ff0f2 Merge branch 'dev' of https://github.com/jhd3197/ServerKit into dev 2026-10-23 18:12:48 -04:00
Juan Denis 1a6335e7cf fix: remember agent IP alerts across panel restarts 2026-10-23 18:05:15 -04:00
Juan Denis b85cc18220 fix: require patched PHP runtimes in WordPress templates 2026-10-23 18:05:08 -04:00
github-actions[bot] 0d1f594138 chore: bump version to 1.11.22 [skip ci] 2026-10-11 22:04:58 +00:00
Juan Denis 90c8fb0eac Close the bundled Gitea to the internet and signups
Same fix as the registry's template: Gitea 1.21 was reachable on
every interface with open registration, and a panel's Gitea was
exploited to mine Monero. Bind the web port to 127.0.0.1 behind the
panel's /gitea proxy, disable signups and move to Gitea 1.27.
2026-10-11 17:57:55 -04:00
github-actions[bot] 7ff4cb5709 chore: bump version to 1.11.21 [skip ci] 2026-10-11 20:48:37 +00:00
Juan Denis fe42d19048 Feature templates the registry marks as featured
The Templates page only featured a hard-coded list, so `featured: true`
in a template (Prompture Hub, Torre) never reached the Featured-first
view. The page now honors the flag alongside the list, and bundled
templates carry it into the catalog and the published index.
2026-10-11 16:41:38 -04:00
github-actions[bot] 72bd369bfe chore: bump version to 1.11.20 [skip ci] 2026-10-11 04:59:48 +00:00
Juan Denis b86c03dc6b Don't 500 on uptime stop when its data dir is unwritable
Stop now persists the tracking flag, and the save created the data
directory unguarded. Where that fails (an unprivileged host or CI
runner) the save is now logged and reported false, as its docstring
already promised, instead of raising.
2026-10-11 00:52:44 -04:00
Juan Denis 498901e70e Keep the panel booting when uptime can't resume
Resuming uptime tracking at boot read the history through a helper
that first created /var/lib/serverkit. The image runs unprivileged, so
that makedirs raised and the app never started. Reading now creates
nothing, and a failed resume is logged instead of aborting boot.
2026-10-11 00:50:14 -04:00
Juan Denis 6cfebf8a54 Let the load-average test run where os lacks it
Windows has no os.getloadavg, so patching it raised before the test
could run; create=True supplies the attribute.
2026-10-10 23:44:20 -04:00
Juan Denis 3e63a7f4b7 Use the platform's EAI_NONAME in the DNS test
The test raised errno -2, Linux's value, so on Windows (11001) the
check read it as a resolver failure and the test failed.
2026-10-10 23:44:00 -04:00
Juan Denis e49c627640 Let memoized file rows skip unrelated re-renders
FileRow and FileCard were wrapped in memo, but every handler passed to
them was re-created on each render, so a keystroke or a selection
re-rendered every row of a large directory. useStableHandler gives the
rows fixed handler identities that still run the latest code.
2026-10-10 22:38:21 -04:00
Juan Denis 540b86c445 Give each schedule picker its own field ids
The picker hardcoded ids like sp-hour, so two on one page (one per
schedule card) produced duplicate ids and every label pointed at the
first picker's field.
2026-10-10 22:35:53 -04:00
Juan Denis 73a93a7b36 Let labels name the resource and server pickers
The pickers dropped an id, so the five labels above them named
nothing. They now put it on the trigger button; clicking the label
opens the picker. Ratchet 46 -> 41.
2026-10-10 22:35:28 -04:00
Juan Denis f033edb70d Use the shared uptime formatter on monitor pages
Monitors and MonitorDetail each carried a copy of formatUptimePercent.
2026-10-10 22:28:16 -04:00
Juan Denis c7a50510c7 Format build and backup durations through intl
Three hand-rolled copies printed untranslated "3m 0s" and never
reached hours ("75m 0s"). They now use the intl formatter ("1h 15m",
in the panel language), keeping each caller's placeholder. The cron
and deploy-console formats with tenths of a second stay as they are.
2026-10-10 22:27:17 -04:00
Juan Denis a636f2cdb1 Ratchet unassociated form labels at 46
The rest head a group of options, sit over read-only text, or label a
picker that does not forward an id yet. A new label must name its
field.
2026-10-10 22:25:44 -04:00
Juan Denis 0adb6bf752 Tie form labels to their fields
156 labels named no field: no htmlFor and no control inside, so
clicking one did not focus the input and screen readers announced the
input without a name. Each now points at its field through a useId()
id. The change is additive only (ids and htmlFor), checked by comparing
tokens with the previous version.
2026-10-10 22:25:37 -04:00
Juan Denis f3145289c8 Time out version and status probes after 60s
--version, which, postconf, pip list/freeze and mailq had opted out of
the run_checked default with timeout=None, so a wedged binary held a
request thread forever. Installs, migrations, dumps and restores keep
no timeout.
2026-10-10 22:22:40 -04:00
Juan Denis 6400b76a7d Drop imports that shadowed module-level names
Function-local re-imports of User, WorkspaceService and secrets, and a
local list named secrets, hid the module names they duplicated.
2026-10-10 22:20:03 -04:00
Juan Denis adb9ae8fbb Open clickable rows and cards from the keyboard
A row with onRowClick could only be opened with a mouse or the j/k
cursor: it took no Tab focus and ignored Enter. Clickable rows in the
tables, the grid and the card view are now focusable and open on Enter
or Space, with a focus ring. Keys on a button inside the row still
reach the button, and the cursor listener skips a key a row handled.
2026-10-10 22:17:18 -04:00
Juan Denis 291b5df844 Document every panel environment variable
About 30 of the ~70 variables the backend reads were documented
nowhere: the encryption-key file, extension signing keys, the pip
opt-in, the setup-code pin. docs/ENVIRONMENT.md lists them all with
defaults, and a guard fails when the backend reads one it doesn't list.
2026-10-10 22:13:09 -04:00
Juan Denis f840744341 Drop an unused install-dir constant
disk_reclaim_service read SERVERKIT_DIR, which app/paths.py treats as
the /var/serverkit data root, and never used the value.
2026-10-10 22:10:27 -04:00