Small UI cleanup, auto-refresh, and per-kind artifact routes

- Remove redundant "manage scripts" button and pipeline sidebar from Fleet page
- Bump log tail default 200 -> 1000 lines
- Auto-refresh (5s) on deployments list/detail, betas list, server detail, and artifact detail
- Drift ignores dedicated.cfg (Plutonium MP config; regenerates if deleted)
- Extract ArtifactDetail component; mount under /scripts/[id], /configs/[id], /plugins/[id] so configs and plugins no longer land on /scripts URLs

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-09-12 23:30:04 -04:00
co-authored by Claude Opus 4.7
parent f10f0cefef
commit f716036d89
15 changed files with 668 additions and 603 deletions
+6 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import { onMount } from 'svelte';
import { onMount, onDestroy } from 'svelte';
interface ServerRow {
server: string;
@@ -113,9 +113,14 @@
}
}
let poll: ReturnType<typeof setInterval> | null = null;
onMount(async () => {
await Promise.all([loadDeployments(), scanDrift()]);
loading = false;
poll = setInterval(loadDeployments, 5000);
});
onDestroy(() => {
if (poll) clearInterval(poll);
});
function isActive(d: Deployment): boolean {
+11 -2
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import { onMount } from 'svelte';
import { onMount, onDestroy } from 'svelte';
import { page } from '$app/stores';
import DiffViewer from '$ui/components/DiffViewer.svelte';
@@ -39,10 +39,19 @@
let detail = $state<Detail | null>(null);
let openFile = $state<{ id: number; before: string | null; after: string | null; verb: string; relPath: string } | null>(null);
onMount(async () => {
async function loadDetail(): Promise<void> {
const id = $page.params.id;
const res = await fetch(`/api/deployments/${id}`);
detail = (await res.json()) as Detail;
}
let poll: ReturnType<typeof setInterval> | null = null;
onMount(() => {
loadDetail();
poll = setInterval(loadDetail, 5000);
});
onDestroy(() => {
if (poll) clearInterval(poll);
});
async function loadDiff(f: FileRow) {