@camstack/addon-terminal 0.1.82 → 0.1.83

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 CHANGED
@@ -10648,12 +10648,30 @@ var BackupDestinationInfoSchema = object({
10648
10648
  lastSuccessAt: number().optional(),
10649
10649
  /** Newest-archive size from `manifests.json`, or undefined. */
10650
10650
  lastSuccessSizeBytes: number().optional(),
10651
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10651
+ /**
10652
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10653
+ * destination, comma-joined. Absent when no enabled schedule targets it
10654
+ * — a destination nothing is scheduled to write to must not advertise a
10655
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10656
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10657
+ * and reading it made a destination with a DISABLED schedule claim a
10658
+ * nightly run.
10659
+ */
10652
10660
  cron: string().optional(),
10653
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10661
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10654
10662
  nextRunAt: number().optional(),
10655
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10656
- lastRunAt: number().optional()
10663
+ /**
10664
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10665
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10666
+ * newest archive that actually landed) and `lastError`.
10667
+ */
10668
+ lastAttemptAt: number().optional(),
10669
+ /**
10670
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10671
+ * landed the archive. A destination that has never been written to has
10672
+ * neither this nor `lastAttemptAt`.
10673
+ */
10674
+ lastError: string().optional()
10657
10675
  });
10658
10676
  /**
10659
10677
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10816,8 +10834,16 @@ var BackupScheduleSchema = object({
10816
10834
  retentionCount: number().int().min(1).max(1e3),
10817
10835
  /** Optional subset of source locations to include; omitted = all. */
10818
10836
  dataSources: array(string()).readonly().optional(),
10819
- /** ms-epoch of last successful run. */
10820
- lastRunAt: number().optional(),
10837
+ /**
10838
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
10839
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
10840
+ * "succeeded" — a run refused by every destination stamps it too.
10841
+ */
10842
+ lastAttemptAt: number().optional(),
10843
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
10844
+ lastSuccessAt: number().optional(),
10845
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
10846
+ lastError: string().optional(),
10821
10847
  /** ms-epoch of next computed firing (read-only, filled on list). */
10822
10848
  nextRunAt: number().optional()
10823
10849
  });
@@ -10866,14 +10892,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10866
10892
  locationId: string(),
10867
10893
  enabled: boolean(),
10868
10894
  retentionCount: number().int().min(1).max(1e3),
10869
- label: string().optional(),
10870
- /**
10871
- * Per-destination cron expression. Empty string clears the
10872
- * schedule (manual-only). Validated server-side via croner;
10873
- * malformed expressions reject the upsert with an actionable
10874
- * message.
10875
- */
10876
- cron: string().optional()
10895
+ label: string().optional()
10877
10896
  }), _void(), {
10878
10897
  kind: "mutation",
10879
10898
  auth: "admin"
package/dist/addon.mjs CHANGED
@@ -10625,12 +10625,30 @@ var BackupDestinationInfoSchema = object({
10625
10625
  lastSuccessAt: number().optional(),
10626
10626
  /** Newest-archive size from `manifests.json`, or undefined. */
10627
10627
  lastSuccessSizeBytes: number().optional(),
10628
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10628
+ /**
10629
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10630
+ * destination, comma-joined. Absent when no enabled schedule targets it
10631
+ * — a destination nothing is scheduled to write to must not advertise a
10632
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10633
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10634
+ * and reading it made a destination with a DISABLED schedule claim a
10635
+ * nightly run.
10636
+ */
10629
10637
  cron: string().optional(),
10630
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10638
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10631
10639
  nextRunAt: number().optional(),
10632
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10633
- lastRunAt: number().optional()
10640
+ /**
10641
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10642
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10643
+ * newest archive that actually landed) and `lastError`.
10644
+ */
10645
+ lastAttemptAt: number().optional(),
10646
+ /**
10647
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10648
+ * landed the archive. A destination that has never been written to has
10649
+ * neither this nor `lastAttemptAt`.
10650
+ */
10651
+ lastError: string().optional()
10634
10652
  });
10635
10653
  /**
10636
10654
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10793,8 +10811,16 @@ var BackupScheduleSchema = object({
10793
10811
  retentionCount: number().int().min(1).max(1e3),
10794
10812
  /** Optional subset of source locations to include; omitted = all. */
10795
10813
  dataSources: array(string()).readonly().optional(),
10796
- /** ms-epoch of last successful run. */
10797
- lastRunAt: number().optional(),
10814
+ /**
10815
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
10816
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
10817
+ * "succeeded" — a run refused by every destination stamps it too.
10818
+ */
10819
+ lastAttemptAt: number().optional(),
10820
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
10821
+ lastSuccessAt: number().optional(),
10822
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
10823
+ lastError: string().optional(),
10798
10824
  /** ms-epoch of next computed firing (read-only, filled on list). */
10799
10825
  nextRunAt: number().optional()
10800
10826
  });
@@ -10843,14 +10869,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10843
10869
  locationId: string(),
10844
10870
  enabled: boolean(),
10845
10871
  retentionCount: number().int().min(1).max(1e3),
10846
- label: string().optional(),
10847
- /**
10848
- * Per-destination cron expression. Empty string clears the
10849
- * schedule (manual-only). Validated server-side via croner;
10850
- * malformed expressions reject the upsert with an actionable
10851
- * message.
10852
- */
10853
- cron: string().optional()
10872
+ label: string().optional()
10854
10873
  }), _void(), {
10855
10874
  kind: "mutation",
10856
10875
  auth: "admin"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.82",
3
+ "version": "0.1.83",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",