includio-cms 0.14.2 → 0.14.4

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,27 @@
3
3
  All notable changes to includio-cms are documented here.
4
4
  Generated from `src/lib/updates/` — do not edit manually.
5
5
 
6
+ ## 0.14.4 — 2026-03-31
7
+
8
+ Improved type generation — select/checkboxes emit union types, fields with defaultValue are non-optional
9
+
10
+ ### Added
11
+ - Type generation: select and checkboxes fields now emit string literal union types instead of generic `string`/`string[]`
12
+ - Type generation: fields with `defaultValue` are now treated as guaranteed (non-optional) in generated TypeScript types
13
+
14
+ ## 0.14.3 — 2026-03-27
15
+
16
+ Background maintenance system — automatic style generation, poster regeneration, video transcoding, orphan cleanup on configurable schedule
17
+
18
+ ### Added
19
+ - Background maintenance scheduler — runs style generation, poster regeneration, video transcoding, and orphan cleanup automatically
20
+ - Maintenance status API endpoint (`/admin/api/maintenance-status`) — real-time status of background tasks
21
+ - Configurable maintenance interval via `media.maintenance` config (`autoRun`, `intervalHours`)
22
+ - Maintenance page UI redesign — auto-status banner, organized sections, compact progress indicators
23
+
24
+ ### Fixed
25
+ - Maintenance page SSE handler deduplication — single reusable `handleSSE()` replaces 3 duplicated implementations
26
+
6
27
  ## 0.14.2 — 2026-03-27
7
28
 
8
29
  Image styles: aspectRatio support, lazy generation, skip defaults when custom styles defined
package/DOCS.md CHANGED
@@ -1,4 +1,4 @@
1
- # Includio CMS Documentation (v0.14.2)
1
+ # Includio CMS Documentation (v0.14.4)
2
2
 
3
3
  > This file is auto-generated from the docs site. For the latest version, update the package.
4
4
 
@@ -2472,6 +2472,17 @@ On the frontend, the `<Video>` component serves transcoded sources automatically
2472
2472
 
2473
2473
  See [Video Transcoding](/docs/video-transcoding) for full configuration and usage.
2474
2474
 
2475
+ ## Background Maintenance
2476
+
2477
+ Includio runs automatic background maintenance on a configurable schedule (default: every 6 hours). Tasks include:
2478
+
2479
+ 1. Generate missing image styles
2480
+ 2. Regenerate missing video posters
2481
+ 3. Transcode missing video variants (if ffmpeg available)
2482
+ 4. Clean up orphaned disk files
2483
+
2484
+ Configure via `media.maintenance` in your CMS config. See [Video Transcoding](/docs/video-transcoding#background-maintenance) for details.
2485
+
2475
2486
  ## File Adapter
2476
2487
 
2477
2488
  The file adapter handles physical storage. See [Files Adapter](/docs/adapters/files) for the interface.
@@ -2557,10 +2568,32 @@ interface VideoStyle {
2557
2568
  }
2558
2569
  ```
2559
2570
 
2571
+ ## Background Maintenance
2572
+
2573
+ Since **v0.14.3**, Includio runs automatic background maintenance that includes video transcoding alongside other tasks (image styles, posters, orphan cleanup).
2574
+
2575
+ Configure via `media.maintenance`:
2576
+
2577
+ ```typescript
2578
+ defineConfig({
2579
+ media: {
2580
+ maintenance: {
2581
+ autoRun: true, // default: true — start on CMS init
2582
+ intervalHours: 6 // default: 6 — hours between runs
2583
+ }
2584
+ }
2585
+ });
2586
+ ```
2587
+
2588
+ The first run starts 30 seconds after CMS initialization, then repeats at the configured interval.
2589
+
2590
+ Check status via `GET /admin/api/maintenance-status` — returns whether maintenance is running, last run time, next scheduled run, and result summary.
2591
+
2560
2592
  ## Admin UI
2561
2593
 
2562
2594
  The admin maintenance page provides:
2563
2595
 
2596
+ - **Auto-maintenance status banner** — shows running state, last/next run, result summary
2564
2597
  - **Batch transcode** — transcode all videos that don't have styles yet (SSE progress)
2565
2598
  - **Purge video styles** — delete all transcoded variants from disk and database
2566
2599
  - **Retranscode** — purge + retranscode all videos
package/ROADMAP.md CHANGED
@@ -269,6 +269,13 @@
269
269
  - [x] `[feature]` `[P1]` Skip default styles when field defines custom styles (prevents `<source>` conflicts in `<picture>`) <!-- files: src/lib/core/server/fields/utils/imageStyles.ts -->
270
270
  - [x] `[feature]` `[P2]` Lazy generation of custom field styles on first read <!-- files: src/lib/core/server/fields/utils/imageStyles.ts -->
271
271
 
272
+ ## 0.14.3 — Background maintenance
273
+
274
+ - [x] `[feature]` `[P1]` Background maintenance scheduler — auto styles, posters, transcodes, orphan cleanup on configurable interval <!-- files: src/lib/core/server/media/operations/backgroundMaintenance.ts, src/lib/core/cms.ts -->
275
+ - [x] `[feature]` `[P1]` Maintenance status API endpoint <!-- files: src/lib/admin/api/maintenance-status.ts, src/lib/admin/api/handler.ts -->
276
+ - [x] `[feature]` `[P2]` Configurable maintenance interval via `media.maintenance` config <!-- files: src/lib/types/cms.ts -->
277
+ - [x] `[feature]` `[P1]` Maintenance page UI redesign — status banner, sections, SSE handler dedup <!-- files: src/lib/admin/client/maintenance/maintenance-page.svelte -->
278
+
272
279
  ## 0.15.0 — SEO module
273
280
 
274
281
  - [ ] `[feature]` `[P1]` SERP preview + character limits for title/description <!-- files: src/lib/admin/components/fields/seo-field.svelte -->
@@ -293,7 +300,7 @@
293
300
  ## Backlog
294
301
 
295
302
  - [ ] `[feature]` `[P1]` Server-side pagination API (formalize 0.1.0 fix)
296
- - [ ] `[feature]` `[P1]` Improved type generation <!-- files: src/lib/core/server/generator/ -->
303
+ - [x] `[feature]` `[P1]` Improved type generation — union types for select/checkboxes, defaultValue makes fields non-optional <!-- files: src/lib/core/server/generator/ -->
297
304
  - [ ] `[feature]` `[P1]` Proper filtering API (SQL-level, not JS post-query)
298
305
  - [ ] `[feature]` `[P1]` Ban/unban UI — reason + expiry, `banUser`/`unbanUser` <!-- files: src/lib/admin/client/users/ban-user-dialog.svelte -->
299
306
  - [ ] `[feature]` `[P1]` Impersonation UI — impersonate/stop bar <!-- files: src/lib/admin/client/users/impersonation-bar.svelte -->
@@ -10,6 +10,7 @@ import * as regeneratePostersHandlers from './regenerate-posters.js';
10
10
  import * as transcodeVideosHandlers from './transcode-videos.js';
11
11
  import * as uploadLimitHandlers from './upload-limit.js';
12
12
  import * as systemInfoHandlers from './system-info.js';
13
+ import * as maintenanceStatusHandlers from './maintenance-status.js';
13
14
  import { requireAuth } from '../remote/middleware/auth.js';
14
15
  import { getCMS } from '../../core/cms.js';
15
16
  import { lookup } from 'mrmime';
@@ -26,6 +27,7 @@ export function createAdminApiHandler(options) {
26
27
  'transcode-videos': transcodeVideosHandlers,
27
28
  'upload-limit': uploadLimitHandlers,
28
29
  'system-info': systemInfoHandlers,
30
+ 'maintenance-status': maintenanceStatusHandlers,
29
31
  ...options?.extraRoutes
30
32
  };
31
33
  const privateMediaGet = async (event) => {
@@ -0,0 +1,2 @@
1
+ import { type RequestHandler } from '@sveltejs/kit';
2
+ export declare const GET: RequestHandler;
@@ -0,0 +1,7 @@
1
+ import { requireRole } from '../remote/middleware/auth.js';
2
+ import { getMaintenanceStatus } from '../../core/server/media/operations/backgroundMaintenance.js';
3
+ import { json } from '@sveltejs/kit';
4
+ export const GET = async () => {
5
+ requireRole('admin');
6
+ return json(getMaintenanceStatus());
7
+ };