@camstack/addon-terminal 0.1.2 → 0.1.3
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/dist/addon.js +85 -4
- package/dist/addon.mjs +85 -4
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7507,16 +7507,23 @@ var StorageLocationDeclarationSchema = object({
|
|
|
7507
7507
|
* Which node root the seeded `<id>:default` instance is placed under on a
|
|
7508
7508
|
* FRESH install:
|
|
7509
7509
|
* - `'data'` (default) — the node's data dir (`CAMSTACK_DATA` / boot dir),
|
|
7510
|
-
* the appData volume. Right for small/durable data (
|
|
7510
|
+
* the appData volume. Right for small/durable data (logs, models).
|
|
7511
7511
|
* - `'media'` — the dedicated media volume (`CAMSTACK_MEDIA_ROOT`) when that
|
|
7512
7512
|
* env is set, else falls back to the data root. Right for bulky, hot media
|
|
7513
7513
|
* (recordings, event media) that should stay off the appData disk.
|
|
7514
|
+
* - `'backup'` — the dedicated backup volume (`CAMSTACK_BACKUP_ROOT`, default
|
|
7515
|
+
* `/backups` in the image) so archives live on their own mount rather than
|
|
7516
|
+
* filling the appData disk. Falls back to the data root when unset.
|
|
7514
7517
|
*
|
|
7515
7518
|
* Only affects the seeded default's `basePath`; operators can repoint any
|
|
7516
7519
|
* location afterwards, and a `defaultsTo` slot inherits its parent's root
|
|
7517
7520
|
* regardless of this field. Absent (the common case) is treated as `'data'`.
|
|
7518
7521
|
*/
|
|
7519
|
-
defaultRoot: _enum([
|
|
7522
|
+
defaultRoot: _enum([
|
|
7523
|
+
"data",
|
|
7524
|
+
"media",
|
|
7525
|
+
"backup"
|
|
7526
|
+
]).optional()
|
|
7520
7527
|
});
|
|
7521
7528
|
var DecoderStatsSchema = object({
|
|
7522
7529
|
inputFps: number(),
|
|
@@ -14528,11 +14535,53 @@ var LocationStatSchema = object({
|
|
|
14528
14535
|
fileCount: number(),
|
|
14529
14536
|
present: boolean()
|
|
14530
14537
|
});
|
|
14538
|
+
/**
|
|
14539
|
+
* A backup schedule — the N:M "entry" that binds one cron cadence to a
|
|
14540
|
+
* SET of destination locations. Supersedes the per-location cron on
|
|
14541
|
+
* `BackupDestinationPolicy`: an operator creates a schedule, picks the
|
|
14542
|
+
* `backups` locations it should write to, and the orchestrator fans a
|
|
14543
|
+
* single archive out to all of them when the cron fires.
|
|
14544
|
+
*
|
|
14545
|
+
* `retentionCount` is per-schedule (D-decision 2026-07-28): every
|
|
14546
|
+
* location targeted by this schedule keeps this many archives from
|
|
14547
|
+
* this schedule's runs.
|
|
14548
|
+
*
|
|
14549
|
+
* `dataSources` optionally narrows which top-level state locations
|
|
14550
|
+
* (db, addons, tls, …) are archived; omitted = the orchestrator's
|
|
14551
|
+
* default full set.
|
|
14552
|
+
*/
|
|
14553
|
+
var BackupScheduleSchema = object({
|
|
14554
|
+
/** Stable id. Generated by the orchestrator on first upsert if absent. */
|
|
14555
|
+
id: string(),
|
|
14556
|
+
/** Operator-facing display name. */
|
|
14557
|
+
label: string(),
|
|
14558
|
+
/** 5-field POSIX cron. Empty = disabled cadence (kept for editing). */
|
|
14559
|
+
cron: string(),
|
|
14560
|
+
/** Master on/off toggle for the whole schedule. */
|
|
14561
|
+
enabled: boolean(),
|
|
14562
|
+
/** `backups`-location ids this schedule writes to (fan-out set). */
|
|
14563
|
+
locationIds: array(string()).readonly(),
|
|
14564
|
+
/** Archives kept per targeted location for this schedule. */
|
|
14565
|
+
retentionCount: number().int().min(1).max(1e3),
|
|
14566
|
+
/** Optional subset of source locations to include; omitted = all. */
|
|
14567
|
+
dataSources: array(string()).readonly().optional(),
|
|
14568
|
+
/** ms-epoch of last successful run. */
|
|
14569
|
+
lastRunAt: number().optional(),
|
|
14570
|
+
/** ms-epoch of next computed firing (read-only, filled on list). */
|
|
14571
|
+
nextRunAt: number().optional()
|
|
14572
|
+
});
|
|
14531
14573
|
method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
14532
14574
|
/** Subset of registered `backup-destination` addon ids to write to. */
|
|
14533
14575
|
destinations: array(string()).optional(),
|
|
14534
14576
|
locations: array(string()).optional(),
|
|
14535
|
-
label: string().optional()
|
|
14577
|
+
label: string().optional(),
|
|
14578
|
+
/**
|
|
14579
|
+
* Per-run retention override applied to every targeted
|
|
14580
|
+
* destination. Used by schedule-driven runs (per-entry
|
|
14581
|
+
* retention). Omitted = each destination's own policy
|
|
14582
|
+
* retention (manual runs).
|
|
14583
|
+
*/
|
|
14584
|
+
retentionCount: number().int().min(1).max(1e3).optional()
|
|
14536
14585
|
}).optional(), array(BackupEntrySchema).readonly(), {
|
|
14537
14586
|
kind: "mutation",
|
|
14538
14587
|
auth: "admin"
|
|
@@ -14581,7 +14630,21 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
|
|
|
14581
14630
|
ok: boolean(),
|
|
14582
14631
|
error: string().optional(),
|
|
14583
14632
|
nextRuns: array(number()).readonly()
|
|
14584
|
-
}))
|
|
14633
|
+
})), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(object({
|
|
14634
|
+
id: string().optional(),
|
|
14635
|
+
label: string(),
|
|
14636
|
+
cron: string(),
|
|
14637
|
+
enabled: boolean(),
|
|
14638
|
+
locationIds: array(string()).readonly(),
|
|
14639
|
+
retentionCount: number().int().min(1).max(1e3),
|
|
14640
|
+
dataSources: array(string()).readonly().optional()
|
|
14641
|
+
}), BackupScheduleSchema, {
|
|
14642
|
+
kind: "mutation",
|
|
14643
|
+
auth: "admin"
|
|
14644
|
+
}), method(object({ id: string() }), _void(), {
|
|
14645
|
+
kind: "mutation",
|
|
14646
|
+
auth: "admin"
|
|
14647
|
+
});
|
|
14585
14648
|
/**
|
|
14586
14649
|
* `broker` — unified pub/sub broker registry, system-scoped collection.
|
|
14587
14650
|
*
|
|
@@ -21703,6 +21766,12 @@ Object.freeze({
|
|
|
21703
21766
|
addonId: null,
|
|
21704
21767
|
access: "delete"
|
|
21705
21768
|
},
|
|
21769
|
+
"backup.deleteSchedule": {
|
|
21770
|
+
capName: "backup",
|
|
21771
|
+
capScope: "system",
|
|
21772
|
+
addonId: null,
|
|
21773
|
+
access: "delete"
|
|
21774
|
+
},
|
|
21706
21775
|
"backup.getEntries": {
|
|
21707
21776
|
capName: "backup",
|
|
21708
21777
|
capScope: "system",
|
|
@@ -21733,6 +21802,12 @@ Object.freeze({
|
|
|
21733
21802
|
addonId: null,
|
|
21734
21803
|
access: "view"
|
|
21735
21804
|
},
|
|
21805
|
+
"backup.listSchedules": {
|
|
21806
|
+
capName: "backup",
|
|
21807
|
+
capScope: "system",
|
|
21808
|
+
addonId: null,
|
|
21809
|
+
access: "view"
|
|
21810
|
+
},
|
|
21736
21811
|
"backup.previewSchedule": {
|
|
21737
21812
|
capName: "backup",
|
|
21738
21813
|
capScope: "system",
|
|
@@ -21757,6 +21832,12 @@ Object.freeze({
|
|
|
21757
21832
|
addonId: null,
|
|
21758
21833
|
access: "create"
|
|
21759
21834
|
},
|
|
21835
|
+
"backup.upsertSchedule": {
|
|
21836
|
+
capName: "backup",
|
|
21837
|
+
capScope: "system",
|
|
21838
|
+
addonId: null,
|
|
21839
|
+
access: "create"
|
|
21840
|
+
},
|
|
21760
21841
|
"battery.wakeForStream": {
|
|
21761
21842
|
capName: "battery",
|
|
21762
21843
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -7506,16 +7506,23 @@ var StorageLocationDeclarationSchema = object({
|
|
|
7506
7506
|
* Which node root the seeded `<id>:default` instance is placed under on a
|
|
7507
7507
|
* FRESH install:
|
|
7508
7508
|
* - `'data'` (default) — the node's data dir (`CAMSTACK_DATA` / boot dir),
|
|
7509
|
-
* the appData volume. Right for small/durable data (
|
|
7509
|
+
* the appData volume. Right for small/durable data (logs, models).
|
|
7510
7510
|
* - `'media'` — the dedicated media volume (`CAMSTACK_MEDIA_ROOT`) when that
|
|
7511
7511
|
* env is set, else falls back to the data root. Right for bulky, hot media
|
|
7512
7512
|
* (recordings, event media) that should stay off the appData disk.
|
|
7513
|
+
* - `'backup'` — the dedicated backup volume (`CAMSTACK_BACKUP_ROOT`, default
|
|
7514
|
+
* `/backups` in the image) so archives live on their own mount rather than
|
|
7515
|
+
* filling the appData disk. Falls back to the data root when unset.
|
|
7513
7516
|
*
|
|
7514
7517
|
* Only affects the seeded default's `basePath`; operators can repoint any
|
|
7515
7518
|
* location afterwards, and a `defaultsTo` slot inherits its parent's root
|
|
7516
7519
|
* regardless of this field. Absent (the common case) is treated as `'data'`.
|
|
7517
7520
|
*/
|
|
7518
|
-
defaultRoot: _enum([
|
|
7521
|
+
defaultRoot: _enum([
|
|
7522
|
+
"data",
|
|
7523
|
+
"media",
|
|
7524
|
+
"backup"
|
|
7525
|
+
]).optional()
|
|
7519
7526
|
});
|
|
7520
7527
|
var DecoderStatsSchema = object({
|
|
7521
7528
|
inputFps: number(),
|
|
@@ -14527,11 +14534,53 @@ var LocationStatSchema = object({
|
|
|
14527
14534
|
fileCount: number(),
|
|
14528
14535
|
present: boolean()
|
|
14529
14536
|
});
|
|
14537
|
+
/**
|
|
14538
|
+
* A backup schedule — the N:M "entry" that binds one cron cadence to a
|
|
14539
|
+
* SET of destination locations. Supersedes the per-location cron on
|
|
14540
|
+
* `BackupDestinationPolicy`: an operator creates a schedule, picks the
|
|
14541
|
+
* `backups` locations it should write to, and the orchestrator fans a
|
|
14542
|
+
* single archive out to all of them when the cron fires.
|
|
14543
|
+
*
|
|
14544
|
+
* `retentionCount` is per-schedule (D-decision 2026-07-28): every
|
|
14545
|
+
* location targeted by this schedule keeps this many archives from
|
|
14546
|
+
* this schedule's runs.
|
|
14547
|
+
*
|
|
14548
|
+
* `dataSources` optionally narrows which top-level state locations
|
|
14549
|
+
* (db, addons, tls, …) are archived; omitted = the orchestrator's
|
|
14550
|
+
* default full set.
|
|
14551
|
+
*/
|
|
14552
|
+
var BackupScheduleSchema = object({
|
|
14553
|
+
/** Stable id. Generated by the orchestrator on first upsert if absent. */
|
|
14554
|
+
id: string(),
|
|
14555
|
+
/** Operator-facing display name. */
|
|
14556
|
+
label: string(),
|
|
14557
|
+
/** 5-field POSIX cron. Empty = disabled cadence (kept for editing). */
|
|
14558
|
+
cron: string(),
|
|
14559
|
+
/** Master on/off toggle for the whole schedule. */
|
|
14560
|
+
enabled: boolean(),
|
|
14561
|
+
/** `backups`-location ids this schedule writes to (fan-out set). */
|
|
14562
|
+
locationIds: array(string()).readonly(),
|
|
14563
|
+
/** Archives kept per targeted location for this schedule. */
|
|
14564
|
+
retentionCount: number().int().min(1).max(1e3),
|
|
14565
|
+
/** Optional subset of source locations to include; omitted = all. */
|
|
14566
|
+
dataSources: array(string()).readonly().optional(),
|
|
14567
|
+
/** ms-epoch of last successful run. */
|
|
14568
|
+
lastRunAt: number().optional(),
|
|
14569
|
+
/** ms-epoch of next computed firing (read-only, filled on list). */
|
|
14570
|
+
nextRunAt: number().optional()
|
|
14571
|
+
});
|
|
14530
14572
|
method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
14531
14573
|
/** Subset of registered `backup-destination` addon ids to write to. */
|
|
14532
14574
|
destinations: array(string()).optional(),
|
|
14533
14575
|
locations: array(string()).optional(),
|
|
14534
|
-
label: string().optional()
|
|
14576
|
+
label: string().optional(),
|
|
14577
|
+
/**
|
|
14578
|
+
* Per-run retention override applied to every targeted
|
|
14579
|
+
* destination. Used by schedule-driven runs (per-entry
|
|
14580
|
+
* retention). Omitted = each destination's own policy
|
|
14581
|
+
* retention (manual runs).
|
|
14582
|
+
*/
|
|
14583
|
+
retentionCount: number().int().min(1).max(1e3).optional()
|
|
14535
14584
|
}).optional(), array(BackupEntrySchema).readonly(), {
|
|
14536
14585
|
kind: "mutation",
|
|
14537
14586
|
auth: "admin"
|
|
@@ -14580,7 +14629,21 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
|
|
|
14580
14629
|
ok: boolean(),
|
|
14581
14630
|
error: string().optional(),
|
|
14582
14631
|
nextRuns: array(number()).readonly()
|
|
14583
|
-
}))
|
|
14632
|
+
})), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(object({
|
|
14633
|
+
id: string().optional(),
|
|
14634
|
+
label: string(),
|
|
14635
|
+
cron: string(),
|
|
14636
|
+
enabled: boolean(),
|
|
14637
|
+
locationIds: array(string()).readonly(),
|
|
14638
|
+
retentionCount: number().int().min(1).max(1e3),
|
|
14639
|
+
dataSources: array(string()).readonly().optional()
|
|
14640
|
+
}), BackupScheduleSchema, {
|
|
14641
|
+
kind: "mutation",
|
|
14642
|
+
auth: "admin"
|
|
14643
|
+
}), method(object({ id: string() }), _void(), {
|
|
14644
|
+
kind: "mutation",
|
|
14645
|
+
auth: "admin"
|
|
14646
|
+
});
|
|
14584
14647
|
/**
|
|
14585
14648
|
* `broker` — unified pub/sub broker registry, system-scoped collection.
|
|
14586
14649
|
*
|
|
@@ -21702,6 +21765,12 @@ Object.freeze({
|
|
|
21702
21765
|
addonId: null,
|
|
21703
21766
|
access: "delete"
|
|
21704
21767
|
},
|
|
21768
|
+
"backup.deleteSchedule": {
|
|
21769
|
+
capName: "backup",
|
|
21770
|
+
capScope: "system",
|
|
21771
|
+
addonId: null,
|
|
21772
|
+
access: "delete"
|
|
21773
|
+
},
|
|
21705
21774
|
"backup.getEntries": {
|
|
21706
21775
|
capName: "backup",
|
|
21707
21776
|
capScope: "system",
|
|
@@ -21732,6 +21801,12 @@ Object.freeze({
|
|
|
21732
21801
|
addonId: null,
|
|
21733
21802
|
access: "view"
|
|
21734
21803
|
},
|
|
21804
|
+
"backup.listSchedules": {
|
|
21805
|
+
capName: "backup",
|
|
21806
|
+
capScope: "system",
|
|
21807
|
+
addonId: null,
|
|
21808
|
+
access: "view"
|
|
21809
|
+
},
|
|
21735
21810
|
"backup.previewSchedule": {
|
|
21736
21811
|
capName: "backup",
|
|
21737
21812
|
capScope: "system",
|
|
@@ -21756,6 +21831,12 @@ Object.freeze({
|
|
|
21756
21831
|
addonId: null,
|
|
21757
21832
|
access: "create"
|
|
21758
21833
|
},
|
|
21834
|
+
"backup.upsertSchedule": {
|
|
21835
|
+
capName: "backup",
|
|
21836
|
+
capScope: "system",
|
|
21837
|
+
addonId: null,
|
|
21838
|
+
access: "create"
|
|
21839
|
+
},
|
|
21759
21840
|
"battery.wakeForStream": {
|
|
21760
21841
|
capName: "battery",
|
|
21761
21842
|
capScope: "device",
|