@camstack/addon-ai 0.4.79 → 0.4.80

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
@@ -10752,12 +10752,30 @@ var BackupDestinationInfoSchema = object({
10752
10752
  lastSuccessAt: number$1().optional(),
10753
10753
  /** Newest-archive size from `manifests.json`, or undefined. */
10754
10754
  lastSuccessSizeBytes: number$1().optional(),
10755
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10755
+ /**
10756
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10757
+ * destination, comma-joined. Absent when no enabled schedule targets it
10758
+ * — a destination nothing is scheduled to write to must not advertise a
10759
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10760
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10761
+ * and reading it made a destination with a DISABLED schedule claim a
10762
+ * nightly run.
10763
+ */
10756
10764
  cron: string().optional(),
10757
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10765
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10758
10766
  nextRunAt: number$1().optional(),
10759
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10760
- lastRunAt: number$1().optional()
10767
+ /**
10768
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10769
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10770
+ * newest archive that actually landed) and `lastError`.
10771
+ */
10772
+ lastAttemptAt: number$1().optional(),
10773
+ /**
10774
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10775
+ * landed the archive. A destination that has never been written to has
10776
+ * neither this nor `lastAttemptAt`.
10777
+ */
10778
+ lastError: string().optional()
10761
10779
  });
10762
10780
  /**
10763
10781
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10920,8 +10938,16 @@ var BackupScheduleSchema = object({
10920
10938
  retentionCount: number$1().int().min(1).max(1e3),
10921
10939
  /** Optional subset of source locations to include; omitted = all. */
10922
10940
  dataSources: array(string()).readonly().optional(),
10923
- /** ms-epoch of last successful run. */
10924
- lastRunAt: number$1().optional(),
10941
+ /**
10942
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
10943
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
10944
+ * "succeeded" — a run refused by every destination stamps it too.
10945
+ */
10946
+ lastAttemptAt: number$1().optional(),
10947
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
10948
+ lastSuccessAt: number$1().optional(),
10949
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
10950
+ lastError: string().optional(),
10925
10951
  /** ms-epoch of next computed firing (read-only, filled on list). */
10926
10952
  nextRunAt: number$1().optional()
10927
10953
  });
@@ -10970,14 +10996,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10970
10996
  locationId: string(),
10971
10997
  enabled: boolean(),
10972
10998
  retentionCount: number$1().int().min(1).max(1e3),
10973
- label: string().optional(),
10974
- /**
10975
- * Per-destination cron expression. Empty string clears the
10976
- * schedule (manual-only). Validated server-side via croner;
10977
- * malformed expressions reject the upsert with an actionable
10978
- * message.
10979
- */
10980
- cron: string().optional()
10999
+ label: string().optional()
10981
11000
  }), _void(), {
10982
11001
  kind: "mutation",
10983
11002
  auth: "admin"
package/dist/addon.mjs CHANGED
@@ -10779,12 +10779,30 @@ var BackupDestinationInfoSchema = object({
10779
10779
  lastSuccessAt: number$1().optional(),
10780
10780
  /** Newest-archive size from `manifests.json`, or undefined. */
10781
10781
  lastSuccessSizeBytes: number$1().optional(),
10782
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10782
+ /**
10783
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10784
+ * destination, comma-joined. Absent when no enabled schedule targets it
10785
+ * — a destination nothing is scheduled to write to must not advertise a
10786
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10787
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10788
+ * and reading it made a destination with a DISABLED schedule claim a
10789
+ * nightly run.
10790
+ */
10783
10791
  cron: string().optional(),
10784
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10792
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10785
10793
  nextRunAt: number$1().optional(),
10786
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10787
- lastRunAt: number$1().optional()
10794
+ /**
10795
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10796
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10797
+ * newest archive that actually landed) and `lastError`.
10798
+ */
10799
+ lastAttemptAt: number$1().optional(),
10800
+ /**
10801
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10802
+ * landed the archive. A destination that has never been written to has
10803
+ * neither this nor `lastAttemptAt`.
10804
+ */
10805
+ lastError: string().optional()
10788
10806
  });
10789
10807
  /**
10790
10808
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10947,8 +10965,16 @@ var BackupScheduleSchema = object({
10947
10965
  retentionCount: number$1().int().min(1).max(1e3),
10948
10966
  /** Optional subset of source locations to include; omitted = all. */
10949
10967
  dataSources: array(string()).readonly().optional(),
10950
- /** ms-epoch of last successful run. */
10951
- lastRunAt: number$1().optional(),
10968
+ /**
10969
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
10970
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
10971
+ * "succeeded" — a run refused by every destination stamps it too.
10972
+ */
10973
+ lastAttemptAt: number$1().optional(),
10974
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
10975
+ lastSuccessAt: number$1().optional(),
10976
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
10977
+ lastError: string().optional(),
10952
10978
  /** ms-epoch of next computed firing (read-only, filled on list). */
10953
10979
  nextRunAt: number$1().optional()
10954
10980
  });
@@ -10997,14 +11023,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10997
11023
  locationId: string(),
10998
11024
  enabled: boolean(),
10999
11025
  retentionCount: number$1().int().min(1).max(1e3),
11000
- label: string().optional(),
11001
- /**
11002
- * Per-destination cron expression. Empty string clears the
11003
- * schedule (manual-only). Validated server-side via croner;
11004
- * malformed expressions reject the upsert with an actionable
11005
- * message.
11006
- */
11007
- cron: string().optional()
11026
+ label: string().optional()
11008
11027
  }), _void(), {
11009
11028
  kind: "mutation",
11010
11029
  auth: "admin"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-ai",
3
- "version": "0.4.79",
3
+ "version": "0.4.80",
4
4
  "description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
5
5
  "keywords": [
6
6
  "camstack",