Compare commits

...
2 Commits
7 changed files with 282 additions and 748 deletions
+2 -2
View File
@@ -58,11 +58,10 @@ doesn't need a Docker socket or direct access to your game-server files.
## Development ## Development
The controller uses SvelteKit, TypeScript, and SQLite. The host agent uses the The controller uses SvelteKit, TypeScript, and SQLite. The host agent uses the
Python 3 standard library. For local development, install Node.js 22 and Python 3: Python 3 standard library. For local development, install Node.js 22.12+ and Python 3:
```sh ```sh
npm ci npm ci
npm run agent:package
export EC_SETUP_TOKEN=$(openssl rand -hex 32) export EC_SETUP_TOKEN=$(openssl rand -hex 32)
export BETA_ARCHIVE_DIR=./data/beta-archive export BETA_ARCHIVE_DIR=./data/beta-archive
EC_AUTH_ALLOW_HTTP=true npm run dev EC_AUTH_ALLOW_HTTP=true npm run dev
@@ -70,6 +69,7 @@ EC_AUTH_ALLOW_HTTP=true npm run dev
Open `http://localhost:3000` and use the setup token from your shell. The local Open `http://localhost:3000` and use the setup token from your shell. The local
database defaults to `./data/cherry.db`; keep it separate from production data. database defaults to `./data/cherry.db`; keep it separate from production data.
`npm run dev` packages the downloadable agent before starting the server.
```sh ```sh
npm run check npm run check
+14 -6
View File
@@ -10,11 +10,10 @@ does not require a Docker socket or direct access to host filesystems.
## Run locally ## Run locally
Use Node.js 22 (the container's version), npm and Python 3. Use Node.js 22.12+ (the container uses Node.js 22), npm and Python 3.
```sh ```sh
npm ci npm ci
npm run agent:package
export EC_SETUP_TOKEN="$(openssl rand -hex 32)" export EC_SETUP_TOKEN="$(openssl rand -hex 32)"
export BETA_ARCHIVE_DIR=./data/beta-archive export BETA_ARCHIVE_DIR=./data/beta-archive
EC_AUTH_ALLOW_HTTP=true npm run dev EC_AUTH_ALLOW_HTTP=true npm run dev
@@ -83,10 +82,19 @@ npm run test:agent
npm run build npm run build
``` ```
Builds regenerate the downloadable agent, standalone updater and checksum The `package.json` overrides keep SvelteKit 2 on patched `devalue` 5.x (5.9.4 or
manifest. They also bundle report workers under `build/reports` and launch newer) and `cookie` 0.7.x releases until its dependency ranges include those fixes.
preparation under `build/launch`. Development and test commands compile those These dependencies ship in the server bundle even though SvelteKit is a
workers automatically. Restart `npm run dev` after changing worker code. development dependency.
Dependency security checks must include development dependencies: use `npm audit`
without `--omit=dev`.
`npm run dev` and `npm run build` regenerate the downloadable agent, installer,
standalone updater and checksum manifest. Builds also bundle report workers
under `build/reports` and launch preparation under `build/launch`. Development
and test commands compile those workers automatically. Restart `npm run dev`
after changing agent or worker code, or run `npm run agent:package` to refresh
only the downloadable agent assets while the development server is running.
Automated tests simulate Docker and game hosts. Real Debian installation and Automated tests simulate Docker and game hosts. Real Debian installation and
T5/T6 server validation use the [host acceptance checklist](../guides/native-hosts.md#development-and-validation). T5/T6 server validation use the [host acceptance checklist](../guides/native-hosts.md#development-and-validation).
+251 -689
View File
File diff suppressed because it is too large Load Diff
+14 -5
View File
@@ -4,6 +4,9 @@
"description": "T5/T6 Plutonium Zombies fleet manager \u2014 replaces push_scripts.sh with a live web UI", "description": "T5/T6 Plutonium Zombies fleet manager \u2014 replaces push_scripts.sh with a live web UI",
"private": true, "private": true,
"type": "module", "type": "module",
"engines": {
"node": "^22.12.0 || >=24.0.0"
},
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",
"build": "vite build && npm run build:reports -- --outDir build/reports && npm run build:launch -- --outDir build/launch", "build": "vite build && npm run build:reports -- --outDir build/reports && npm run build:launch -- --outDir build/launch",
@@ -19,7 +22,7 @@
"test:agent": "python3 -m unittest discover -s agent/tests -v", "test:agent": "python3 -m unittest discover -s agent/tests -v",
"build:reports": "vite build --config vite.reports.config.ts", "build:reports": "vite build --config vite.reports.config.ts",
"build:launch": "vite build --config vite.launch.config.ts", "build:launch": "vite build --config vite.launch.config.ts",
"predev": "npm run build:reports && npm run build:launch", "predev": "npm run agent:package && npm run build:reports && npm run build:launch",
"pretest": "npm run build:reports && npm run build:launch", "pretest": "npm run build:reports && npm run build:launch",
"pretest:watch": "npm run build:reports && npm run build:launch", "pretest:watch": "npm run build:reports && npm run build:launch",
"check:styles": "node scripts/check-ui-styles.mjs" "check:styles": "node scripts/check-ui-styles.mjs"
@@ -32,15 +35,21 @@
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-node": "^5.2.9", "@sveltejs/adapter-node": "^5.2.9",
"@sveltejs/kit": "^2.8.0", "@sveltejs/kit": "^2.70.3",
"@sveltejs/vite-plugin-svelte": "^4.0.0", "@sveltejs/vite-plugin-svelte": "^6.2.4",
"@types/better-sqlite3": "^7.6.11", "@types/better-sqlite3": "^7.6.11",
"@types/node": "^22.7.0", "@types/node": "^22.7.0",
"svelte": "^5.1.0", "svelte": "^5.1.0",
"svelte-check": "^4.0.0", "svelte-check": "^4.0.0",
"tsx": "^4.19.0", "tsx": "^4.19.0",
"typescript": "^5.6.0", "typescript": "^5.6.0",
"vite": "^5.4.0", "vite": "^7.3.7",
"vitest": "^2.1.0" "vitest": "^4.1.11"
},
"overrides": {
"@sveltejs/kit": {
"cookie": "^0.7.2"
},
"devalue": "^5.9.4"
} }
} }
-16
View File
@@ -1,16 +0,0 @@
//////////////////////////////////////////////////
// GENERAL CONFIGURATION //
//////////////////////////////////////////////////
set g_inactivity "190" // Enable or Disable auto kick feature for idle/AFK players.
set sv_disableClientConsole "0" // Enable or Disable players ability to access server commands
set sv_floodProtect "1" // Chat Spam Protection.
set sv_kickBanTime "300" // Kick Ban Duration.
set sv_voice "1" // Allow Voice Chat?
set sv_voicequality "3" // Voice Quality.
set sp_minplayers "1" // Minimum amount of players.
set scr_allowFileIo "1" // Allow GSC scripts to interact with files?
set scr_kill_infinite_loops "1" // Kill misbehaving threads?
set sv_wwwBaseURL "" // Fast DL URL
set sv_maprotation "map zombie_theater"
-29
View File
@@ -1,29 +0,0 @@
Note: Unnecessary use of -X or --request, POST is already inferred.
* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
␍ 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying [::1]:3000...
* Connected to localhost (::1) port 3000
* using HTTP/1.x
> POST /api/configs HTTP/1.1␍
> Host: localhost:3000␍
> User-Agent: curl/8.15.0␍
> Accept: */*␍
> Content-Length: 1832␍
> Content-Type: multipart/form-data; boundary=------------------------barYWMs19HWi81kFXmt3OX␍
> ␍
} [1832 bytes data]
* upload completely sent off: 1832 bytes
< HTTP/1.1 200 OK␍
< Access-Control-Allow-Origin: *␍
< content-length: 232␍
< content-type: application/json␍
< Date: Sat, 12 Sep 2026 23:27:36 GMT␍
< Connection: keep-alive␍
< Keep-Alive: timeout=5␍
< ␍
{ [232 bytes data]
␍100 2064 100 232 100 1832 49225 379k --:--:-- --:--:-- --:--:-- 503k{"ok":true,"script":{"id":2,"name":"T5 Zombies Baseline","target_rel_path":"dedicated_sp.cfg","scope_type":"game","scope_value":"t5","current_version_id":null,"kind":"baseline","created_at":"2026-09-12T23:27:36.519Z"},"versionId":2}
* Connection #0 to host localhost left intact
+1 -1
View File
@@ -1,5 +1,5 @@
import { sveltekit } from '@sveltejs/kit/vite'; import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite'; import { defineConfig } from 'vitest/config';
export default defineConfig({ export default defineConfig({
plugins: [sveltekit()], plugins: [sveltekit()],