@cat-factory/app 0.154.0 → 0.154.1

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.
@@ -255,7 +255,15 @@ async function generateOrFixManifest() {
255
255
  // it failed at. The returned run is tracked live (by frame id) via the workspace stream store.
256
256
  const envTest = useEnvironmentTestStore()
257
257
  const envTestStarting = ref(false)
258
- const envTestError = ref<string | null>(null)
258
+ // The self-test's start/stop error. Structured (not a bare string) so the not-provisionable case
259
+ // can render its remedy prose PLUS a one-click jump to the environment-handler config; every other
260
+ // case is plain text.
261
+ interface EnvTestError {
262
+ text: string
263
+ /** Show the "Configure infrastructure" deep-link — only the not-provisionable handler case. */
264
+ configurable?: boolean
265
+ }
266
+ const envTestError = ref<EnvTestError | null>(null)
259
267
  // The newest self-test run for this frame — re-attaches after a reconnect (the run is carried in
260
268
  // the snapshot while running), so the live stage keeps showing without a locally-held id.
261
269
  const envTestRun = computed(() => envTest.runForBlock(props.block.id))
@@ -291,14 +299,30 @@ const ENV_TEST_CONFLICT_KEYS: Record<Extract<ConflictReason, `env_test_${string}
291
299
  env_test_no_vcs: 'errors.conflict.title.env_test_no_vcs',
292
300
  }
293
301
 
294
- function envTestErrorText(e: unknown): string {
295
- const reason = parseConflict(e)?.reason
302
+ function buildEnvTestError(e: unknown): EnvTestError {
303
+ const parsed = parseConflict(e)
304
+ const reason = parsed?.reason
305
+ // No workspace handler resolves for the service's provision type. Word the SPECIFIC case —
306
+ // nothing configured vs. an ambiguous match (carried on `details.handlerIssue`, distinct from the
307
+ // `env_test_not_provisionable` code) — and offer the one-click jump to the Infrastructure →
308
+ // Test-environments handler config.
309
+ if (reason === 'env_test_not_provisionable') {
310
+ const ambiguous = parsed?.details.handlerIssue === 'type-mismatch'
311
+ return {
312
+ text: t(
313
+ ambiguous
314
+ ? 'errors.conflict.description.env_test_not_provisionable_type_mismatch'
315
+ : 'errors.conflict.description.env_test_not_provisionable_no_handler',
316
+ ),
317
+ configurable: true,
318
+ }
319
+ }
296
320
  const key =
297
321
  reason && reason in ENV_TEST_CONFLICT_KEYS
298
322
  ? ENV_TEST_CONFLICT_KEYS[reason as keyof typeof ENV_TEST_CONFLICT_KEYS]
299
323
  : undefined
300
- if (key && te(key)) return t(key)
301
- return apiErrorEnvelope(e)?.message ?? (e instanceof Error ? e.message : String(e))
324
+ if (key && te(key)) return { text: t(key) }
325
+ return { text: apiErrorEnvelope(e)?.message ?? (e instanceof Error ? e.message : String(e)) }
302
326
  }
303
327
 
304
328
  async function startEnvTest() {
@@ -308,7 +332,7 @@ async function startEnvTest() {
308
332
  try {
309
333
  await envTest.start(props.block.id)
310
334
  } catch (e) {
311
- envTestError.value = envTestErrorText(e)
335
+ envTestError.value = buildEnvTestError(e)
312
336
  } finally {
313
337
  envTestStarting.value = false
314
338
  }
@@ -320,7 +344,7 @@ async function stopEnvTest() {
320
344
  try {
321
345
  await envTest.stop(run.id)
322
346
  } catch (e) {
323
- envTestError.value = envTestErrorText(e)
347
+ envTestError.value = buildEnvTestError(e)
324
348
  }
325
349
  }
326
350
 
@@ -1072,9 +1096,23 @@ function setSize(value: InstanceSize) {
1072
1096
  </template>
1073
1097
  </p>
1074
1098
 
1075
- <p v-if="envTestError" class="text-[11px] text-rose-400" data-testid="env-test-error">
1076
- {{ envTestError }}
1077
- </p>
1099
+ <div v-if="envTestError" class="text-[11px] text-rose-400" data-testid="env-test-error">
1100
+ <p>{{ envTestError.text }}</p>
1101
+ <!-- Only the not-provisionable handler case is one-click fixable: jump to Infrastructure →
1102
+ Test environments, where the workspace's per-type environment handler is registered. -->
1103
+ <UButton
1104
+ v-if="envTestError.configurable"
1105
+ class="mt-1.5"
1106
+ icon="i-lucide-settings"
1107
+ size="xs"
1108
+ color="neutral"
1109
+ variant="soft"
1110
+ data-testid="env-test-configure-handler"
1111
+ @click="ui.openProviderConnection('environment')"
1112
+ >
1113
+ {{ t('errors.conflict.action.configureInfrastructure') }}
1114
+ </UButton>
1115
+ </div>
1078
1116
  </div>
1079
1117
  </InspectorSection>
1080
1118
  </template>
@@ -11,10 +11,12 @@ import CopyButton from '~/components/common/CopyButton.vue'
11
11
 
12
12
  const { t, d } = useI18n()
13
13
 
14
- // The permission ladder a minted key can carry (read ⊂ write ⊂ admin), mirroring the backend
15
- // contract. A `read` key can only observe; `write` adds create/start/manage; `admin` adds the
16
- // destructive/merge-adjacent operations (e.g. deleting a task).
17
- const SCOPES: PublicApiScope[] = ['read', 'write', 'admin']
14
+ // The permission ladder a minted key can carry (read ⊂ write ⊂ decide ⊂ admin), mirroring the
15
+ // backend contract. A `read` key can only observe; `write` adds create/start/manage; `decide` adds
16
+ // answering a run's PARKED human decisions (and, because of that, starting a headless run on a
17
+ // pipeline that can park at all); `admin` adds the destructive/merge-adjacent operations (e.g.
18
+ // deleting a task).
19
+ const SCOPES: PublicApiScope[] = ['read', 'write', 'decide', 'admin']
18
20
 
19
21
  /** Localized label for a scope — an exhaustive switch, so a new scope is a compile error here. */
20
22
  function scopeLabel(scope: PublicApiScope): string {
@@ -23,6 +25,8 @@ function scopeLabel(scope: PublicApiScope): string {
23
25
  return t('settings.apiTokens.scopes.read')
24
26
  case 'write':
25
27
  return t('settings.apiTokens.scopes.write')
28
+ case 'decide':
29
+ return t('settings.apiTokens.scopes.decide')
26
30
  case 'admin':
27
31
  return t('settings.apiTokens.scopes.admin')
28
32
  }
@@ -550,6 +550,7 @@
550
550
  "scopes": {
551
551
  "read": "Nur Lesen",
552
552
  "write": "Lesen und Schreiben",
553
+ "decide": "Antworten auf Entscheidungen",
553
554
  "admin": "Vollzugriff"
554
555
  },
555
556
  "toast": {
@@ -4137,6 +4138,8 @@
4137
4138
  "env_test_not_a_frame": "Der Umgebungs-Selbsttest läuft pro Service und kann daher nur für einen Service gestartet werden, nicht für ein Modul oder eine Aufgabe.",
4138
4139
  "env_test_infraless": "Für diesen Service ist keine Bereitstellung einer kurzlebigen Umgebung konfiguriert, es gibt also nichts, was der Selbsttest prüfen könnte.",
4139
4140
  "env_test_not_provisionable": "Dieser Service hat einen Bereitstellungstyp, aber es ist noch kein Workspace-Handler dafür verfügbar, sodass die Bereitstellung nicht laufen kann. Konfiguriere einen Umgebungs-Handler.",
4141
+ "env_test_not_provisionable_no_handler": "Für den Bereitstellungstyp dieses Service ist kein Workspace-Umgebungs-Handler konfiguriert. Registriere in Infrastruktur → Testumgebungen einen — für einen benutzerdefinierten Anbieter einen Custom (remote-custom)-Handler, dessen akzeptierte manifest id mit der übereinstimmt, die dieser Service festlegt.",
4142
+ "env_test_not_provisionable_type_mismatch": "Mehr als ein Umgebungs-Handler könnte auf den Bereitstellungstyp dieses Service passen. Lege für diesen Service eine manifest id fest, sodass genau einer aufgelöst wird, oder entferne den überlappenden Handler in Infrastruktur → Testumgebungen.",
4140
4143
  "env_test_no_vcs": "Der Selbsttest benötigt einen Git-Anbieter, um seinen Wegwerf-Branch zu erstellen und zu löschen, aber dieser Workspace ist mit keinem verbunden."
4141
4144
  },
4142
4145
  "action": {
@@ -554,6 +554,8 @@
554
554
  "env_test_not_a_frame": "The environment self-test runs per service, so it can only be started on a service, not on a module or task.",
555
555
  "env_test_infraless": "This service has no ephemeral-environment provisioning configured, so there is nothing for the self-test to exercise.",
556
556
  "env_test_not_provisionable": "This service has a provision type, but no workspace handler resolves for it yet, so provisioning can't run. Configure an environment handler.",
557
+ "env_test_not_provisionable_no_handler": "No workspace environment handler is configured for this service's provision type. In Infrastructure → Test environments, register one — for a custom provider, a Custom (remote-custom) handler whose accepted manifest id matches the one this service pins.",
558
+ "env_test_not_provisionable_type_mismatch": "More than one environment handler could match this service's provision type. Pin a manifest id for this service so exactly one resolves, or remove the overlapping handler in Infrastructure → Test environments.",
557
559
  "env_test_no_vcs": "The self-test needs a git provider to create and delete its throwaway branch, but this workspace isn't connected to one."
558
560
  },
559
561
  "action": {
@@ -2585,6 +2587,7 @@
2585
2587
  "scopes": {
2586
2588
  "read": "Read only",
2587
2589
  "write": "Read and write",
2590
+ "decide": "Answer decisions",
2588
2591
  "admin": "Full access"
2589
2592
  },
2590
2593
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "La autoprueba de entorno se ejecuta por servicio, así que solo puede iniciarse en un servicio, no en un módulo o una tarea.",
513
513
  "env_test_infraless": "Este servicio no tiene configurado el aprovisionamiento de entornos efímeros, así que no hay nada que la autoprueba pueda comprobar.",
514
514
  "env_test_not_provisionable": "Este servicio tiene un tipo de aprovisionamiento, pero aún no hay ningún gestor del espacio de trabajo para él, así que el aprovisionamiento no puede ejecutarse. Configura un gestor de entornos.",
515
+ "env_test_not_provisionable_no_handler": "No hay ningún gestor de entorno del espacio de trabajo configurado para el tipo de aprovisionamiento de este servicio. En Infraestructura → Entornos de prueba, registra uno; para un proveedor personalizado, un gestor Custom (remote-custom) cuyo manifest id aceptado coincida con el que fija este servicio.",
516
+ "env_test_not_provisionable_type_mismatch": "Más de un gestor de entorno podría coincidir con el tipo de aprovisionamiento de este servicio. Fija un manifest id para este servicio de modo que se resuelva exactamente uno, o elimina el gestor superpuesto en Infraestructura → Entornos de prueba.",
515
517
  "env_test_no_vcs": "La autoprueba necesita un proveedor de Git para crear y eliminar su rama desechable, pero este espacio de trabajo no está conectado a ninguno."
516
518
  },
517
519
  "action": {
@@ -2397,6 +2399,7 @@
2397
2399
  "scopes": {
2398
2400
  "read": "Solo lectura",
2399
2401
  "write": "Lectura y escritura",
2402
+ "decide": "Responder decisiones",
2400
2403
  "admin": "Acceso completo"
2401
2404
  },
2402
2405
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "L'auto-test d'environnement s'exécute par service, il ne peut donc être lancé que sur un service, pas sur un module ou une tâche.",
513
513
  "env_test_infraless": "Ce service n'a aucun provisionnement d'environnement éphémère configuré, il n'y a donc rien que l'auto-test puisse exercer.",
514
514
  "env_test_not_provisionable": "Ce service a un type de provisionnement, mais aucun gestionnaire de l'espace de travail ne s'y applique encore, le provisionnement ne peut donc pas s'exécuter. Configurez un gestionnaire d'environnement.",
515
+ "env_test_not_provisionable_no_handler": "Aucun gestionnaire d'environnement de l'espace de travail n'est configuré pour le type de provisionnement de ce service. Dans Infrastructure → Environnements de test, enregistrez-en un — pour un fournisseur personnalisé, un gestionnaire Custom (remote-custom) dont le manifest id accepté correspond à celui que ce service épingle.",
516
+ "env_test_not_provisionable_type_mismatch": "Plusieurs gestionnaires d'environnement pourraient correspondre au type de provisionnement de ce service. Épinglez un manifest id pour ce service afin qu'un seul se résolve, ou supprimez le gestionnaire qui se chevauche dans Infrastructure → Environnements de test.",
515
517
  "env_test_no_vcs": "L'auto-test a besoin d'un fournisseur Git pour créer et supprimer sa branche jetable, mais cet espace de travail n'est connecté à aucun."
516
518
  },
517
519
  "action": {
@@ -2397,6 +2399,7 @@
2397
2399
  "scopes": {
2398
2400
  "read": "Lecture seule",
2399
2401
  "write": "Lecture et écriture",
2402
+ "decide": "Répondre aux décisions",
2400
2403
  "admin": "Accès complet"
2401
2404
  },
2402
2405
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "הבדיקה העצמית של הסביבה רצה לכל שירות בנפרד, ולכן ניתן להתחיל אותה רק על שירות, לא על מודול או משימה.",
513
513
  "env_test_infraless": "לשירות זה לא מוגדרת הקצאת סביבה זמנית, ולכן אין מה שהבדיקה העצמית תבדוק.",
514
514
  "env_test_not_provisionable": "לשירות זה יש סוג הקצאה, אך עדיין אין עבורו מטפל בסביבת העבודה, ולכן ההקצאה אינה יכולה לרוץ. הגדר מטפל סביבה.",
515
+ "env_test_not_provisionable_no_handler": "לא מוגדר מטפל סביבה של סביבת העבודה עבור סוג ההקצאה של שירות זה. בתשתית → סביבות בדיקה, רשום אחד — עבור ספק מותאם אישית, מטפל Custom (remote-custom) שה-manifest id המקובל שלו תואם לזה ששירות זה מקבע.",
516
+ "env_test_not_provisionable_type_mismatch": "יותר ממטפל סביבה אחד יכול להתאים לסוג ההקצאה של שירות זה. קבע manifest id עבור שירות זה כך שרק אחד ייפתר, או הסר את המטפל החופף בתשתית → סביבות בדיקה.",
515
517
  "env_test_no_vcs": "הבדיקה העצמית זקוקה לספק Git כדי ליצור ולמחוק את הענף החד-פעמי שלה, אך סביבת עבודה זו אינה מחוברת לאף אחד."
516
518
  },
517
519
  "action": {
@@ -2518,6 +2520,7 @@
2518
2520
  "scopes": {
2519
2521
  "read": "קריאה בלבד",
2520
2522
  "write": "קריאה וכתיבה",
2523
+ "decide": "מענה להחלטות",
2521
2524
  "admin": "גישה מלאה"
2522
2525
  },
2523
2526
  "toast": {
@@ -550,6 +550,7 @@
550
550
  "scopes": {
551
551
  "read": "Sola lettura",
552
552
  "write": "Lettura e scrittura",
553
+ "decide": "Rispondere alle decisioni",
553
554
  "admin": "Accesso completo"
554
555
  },
555
556
  "toast": {
@@ -4137,6 +4138,8 @@
4137
4138
  "env_test_not_a_frame": "L'autotest dell'ambiente viene eseguito per servizio, quindi può essere avviato solo su un servizio, non su un modulo o un'attività.",
4138
4139
  "env_test_infraless": "Questo servizio non ha alcun provisioning di ambiente effimero configurato, quindi non c'è nulla che l'autotest possa verificare.",
4139
4140
  "env_test_not_provisionable": "Questo servizio ha un tipo di provisioning, ma non è ancora disponibile alcun handler del workspace, quindi il provisioning non può essere eseguito. Configura un handler dell'ambiente.",
4141
+ "env_test_not_provisionable_no_handler": "Nessun handler dell'ambiente del workspace è configurato per il tipo di provisioning di questo servizio. In Infrastruttura → Ambienti di test, registrane uno — per un provider personalizzato, un handler Custom (remote-custom) il cui manifest id accettato corrisponde a quello che questo servizio fissa.",
4142
+ "env_test_not_provisionable_type_mismatch": "Più di un handler dell'ambiente potrebbe corrispondere al tipo di provisioning di questo servizio. Fissa un manifest id per questo servizio in modo che se ne risolva esattamente uno, oppure rimuovi l'handler sovrapposto in Infrastruttura → Ambienti di test.",
4140
4143
  "env_test_no_vcs": "L'autotest ha bisogno di un provider Git per creare ed eliminare il suo branch usa e getta, ma questo workspace non è collegato a nessuno."
4141
4144
  },
4142
4145
  "action": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "環境のセルフテストはサービスごとに実行されるため、モジュールやタスクではなくサービスでのみ開始できます。",
513
513
  "env_test_infraless": "このサービスには一時環境のプロビジョニングが設定されていないため、セルフテストで検証するものがありません。",
514
514
  "env_test_not_provisionable": "このサービスにはプロビジョニングタイプがありますが、対応するワークスペースハンドラーがまだ解決されないため、プロビジョニングを実行できません。環境ハンドラーを設定してください。",
515
+ "env_test_not_provisionable_no_handler": "このサービスのプロビジョニングタイプに対して、ワークスペースの環境ハンドラーが設定されていません。インフラストラクチャ → テスト環境 で 1 つ登録してください。カスタムプロバイダーの場合は、受け入れる manifest id がこのサービスが固定するものと一致する Custom (remote-custom) ハンドラーを登録します。",
516
+ "env_test_not_provisionable_type_mismatch": "複数の環境ハンドラーがこのサービスのプロビジョニングタイプに一致する可能性があります。ちょうど 1 つだけが解決されるように、このサービスに manifest id を固定するか、インフラストラクチャ → テスト環境 で重複するハンドラーを削除してください。",
515
517
  "env_test_no_vcs": "セルフテストは使い捨てブランチの作成と削除のために Git プロバイダーを必要としますが、このワークスペースはいずれにも接続されていません。"
516
518
  },
517
519
  "action": {
@@ -2519,6 +2521,7 @@
2519
2521
  "scopes": {
2520
2522
  "read": "読み取り専用",
2521
2523
  "write": "読み取りと書き込み",
2524
+ "decide": "判断への回答",
2522
2525
  "admin": "フルアクセス"
2523
2526
  },
2524
2527
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "Autotest środowiska działa dla poszczególnych usług, więc można go uruchomić tylko dla usługi, a nie dla modułu czy zadania.",
513
513
  "env_test_infraless": "Ta usługa nie ma skonfigurowanego udostępniania środowisk tymczasowych, więc autotest nie ma czego sprawdzić.",
514
514
  "env_test_not_provisionable": "Ta usługa ma typ udostępniania, ale nie ma jeszcze dla niego żadnego mechanizmu obsługi w przestrzeni roboczej, więc udostępnianie nie może zostać uruchomione. Skonfiguruj mechanizm obsługi środowiska.",
515
+ "env_test_not_provisionable_no_handler": "Dla typu udostępniania tej usługi nie skonfigurowano żadnego mechanizmu obsługi środowiska w przestrzeni roboczej. W sekcji Infrastruktura → Środowiska testowe zarejestruj jeden — dla dostawcy niestandardowego mechanizm obsługi Custom (remote-custom), którego akceptowany manifest id odpowiada temu, który przypina ta usługa.",
516
+ "env_test_not_provisionable_type_mismatch": "Do typu udostępniania tej usługi może pasować więcej niż jeden mechanizm obsługi środowiska. Przypnij manifest id do tej usługi, aby rozwiązywany był dokładnie jeden, albo usuń nakładający się mechanizm obsługi w sekcji Infrastruktura → Środowiska testowe.",
515
517
  "env_test_no_vcs": "Autotest potrzebuje dostawcy Git, aby utworzyć i usunąć swoją jednorazową gałąź, ale ta przestrzeń robocza nie jest połączona z żadnym."
516
518
  },
517
519
  "action": {
@@ -2397,6 +2399,7 @@
2397
2399
  "scopes": {
2398
2400
  "read": "Tylko odczyt",
2399
2401
  "write": "Odczyt i zapis",
2402
+ "decide": "Odpowiadanie na decyzje",
2400
2403
  "admin": "Pełny dostęp"
2401
2404
  },
2402
2405
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "Ortam öz testi hizmet başına çalışır, bu yüzden yalnızca bir hizmette başlatılabilir; bir modülde veya görevde değil.",
513
513
  "env_test_infraless": "Bu hizmet için yapılandırılmış geçici ortam sağlama yok, bu yüzden öz testin sınayacağı bir şey yok.",
514
514
  "env_test_not_provisionable": "Bu hizmetin bir sağlama türü var ancak henüz onun için çözümlenen bir çalışma alanı işleyicisi yok, bu yüzden sağlama çalışamaz. Bir ortam işleyicisi yapılandır.",
515
+ "env_test_not_provisionable_no_handler": "Bu hizmetin sağlama türü için yapılandırılmış bir çalışma alanı ortam işleyicisi yok. Altyapı → Test ortamları bölümünde bir tane kaydet — özel bir sağlayıcı için, kabul ettiği manifest id bu hizmetin sabitlediğiyle eşleşen bir Custom (remote-custom) işleyicisi.",
516
+ "env_test_not_provisionable_type_mismatch": "Birden fazla ortam işleyicisi bu hizmetin sağlama türüyle eşleşebilir. Tam olarak biri çözümlensin diye bu hizmet için bir manifest id sabitle ya da Altyapı → Test ortamları bölümündeki çakışan işleyiciyi kaldır.",
515
517
  "env_test_no_vcs": "Öz test, tek kullanımlık dalını oluşturup silmek için bir Git sağlayıcısına ihtiyaç duyar ancak bu çalışma alanı hiçbirine bağlı değil."
516
518
  },
517
519
  "action": {
@@ -2519,6 +2521,7 @@
2519
2521
  "scopes": {
2520
2522
  "read": "Yalnızca okuma",
2521
2523
  "write": "Okuma ve yazma",
2524
+ "decide": "Kararları yanıtlama",
2522
2525
  "admin": "Tam erişim"
2523
2526
  },
2524
2527
  "toast": {
@@ -512,6 +512,8 @@
512
512
  "env_test_not_a_frame": "Самоперевірка середовища виконується для кожної служби, тож її можна запустити лише для служби, а не для модуля чи завдання.",
513
513
  "env_test_infraless": "Для цієї служби не налаштовано надання тимчасового середовища, тож самоперевірці нічого перевіряти.",
514
514
  "env_test_not_provisionable": "Ця служба має тип надання, але для нього ще немає обробника робочого простору, тож надання не може виконатися. Налаштуй обробник середовища.",
515
+ "env_test_not_provisionable_no_handler": "Для типу надання цієї служби не налаштовано жодного обробника середовища робочого простору. У розділі Інфраструктура → Тестові середовища зареєструй один — для власного постачальника обробник Custom (remote-custom), чий прийнятний manifest id збігається з тим, який закріплює ця служба.",
516
+ "env_test_not_provisionable_type_mismatch": "Типу надання цієї служби може відповідати більше ніж один обробник середовища. Закріпи manifest id для цієї служби, щоб розв'язувався рівно один, або вилучи обробник, що перекривається, у розділі Інфраструктура → Тестові середовища.",
515
517
  "env_test_no_vcs": "Самоперевірці потрібен постачальник Git, щоб створити та видалити свою тимчасову гілку, але цей робочий простір не під'єднано до жодного."
516
518
  },
517
519
  "action": {
@@ -2397,6 +2399,7 @@
2397
2399
  "scopes": {
2398
2400
  "read": "Лише читання",
2399
2401
  "write": "Читання та запис",
2402
+ "decide": "Відповіді на рішення",
2400
2403
  "admin": "Повний доступ"
2401
2404
  },
2402
2405
  "toast": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.154.0",
3
+ "version": "0.154.1",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,7 +40,7 @@
40
40
  "valibot": "^1.4.2",
41
41
  "vue": "3.5.40",
42
42
  "wretch": "^3.0.9",
43
- "@cat-factory/contracts": "0.162.0"
43
+ "@cat-factory/contracts": "0.163.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@toad-contracts/testing": "0.3.2",