@cat-factory/app 0.153.3 → 0.154.0

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.
@@ -0,0 +1,105 @@
1
+ import type { WorkspaceSnapshot } from '~/types/domain'
2
+ import { useAgentConfigStore } from '~/stores/agentConfig'
3
+ import { useAgentRunsStore } from '~/stores/agentRuns'
4
+ import { useAgentsStore } from '~/stores/agents'
5
+ import { useBoardStore } from '~/stores/board'
6
+ import { useBrainstormStore } from '~/stores/brainstorm'
7
+ import { useClarityStore } from '~/stores/clarity'
8
+ import { useConsensusStore } from '~/stores/consensus'
9
+ import { useEnvironmentTestStore } from '~/stores/environmentTest'
10
+ import { useExecutionStore } from '~/stores/execution'
11
+ import { useFragmentsStore } from '~/stores/fragments'
12
+ import { useGitHubStore } from '~/stores/github'
13
+ import { useInitiativesStore } from '~/stores/initiative'
14
+ import { useModelPresetsStore } from '~/stores/modelPresets'
15
+ import { useNotificationsStore } from '~/stores/notifications'
16
+ import { usePipelinesStore } from '~/stores/pipelines'
17
+ import { useProviderConnectionsStore } from '~/stores/providerConnections'
18
+ import { useRecurringPipelinesStore } from '~/stores/recurringPipelines'
19
+ import { useRequirementsStore } from '~/stores/requirements'
20
+ import { useRiskPoliciesStore } from '~/stores/riskPolicies'
21
+ import { useServiceFragmentDefaultsStore } from '~/stores/serviceFragmentDefaults'
22
+ import { useServicesStore } from '~/stores/services'
23
+ import { useSharedStacksStore } from '~/stores/sharedStacks'
24
+ import { useSkillsStore } from '~/stores/skills'
25
+ import { useTaskTypesStore } from '~/stores/taskTypes'
26
+ import { useTrackerStore } from '~/stores/tracker'
27
+ import { useWorkspaceSettingsStore } from '~/stores/workspaceSettings'
28
+ import { buildWorkspaceCapabilitiesManifest } from '~/modular/capabilities'
29
+
30
+ /**
31
+ * Drop the per-block caches that are NOT part of the snapshot (reviews, brainstorm/consensus
32
+ * sessions, the GitHub projection) so a switched-to board never shows the previous one's stale
33
+ * state. These are lazily reloaded/re-probed per board, so clearing on a same-board refresh
34
+ * would needlessly wipe an open review window — hence only on an actual id change.
35
+ */
36
+ export function resetPerBoardCaches() {
37
+ useRequirementsStore().reset()
38
+ useClarityStore().reset()
39
+ useBrainstormStore().reset()
40
+ useConsensusStore().reset()
41
+ useGitHubStore().reset()
42
+ useInitiativesStore().reset()
43
+ useDocInterviewStore().reset()
44
+ // The fragment picker catalog is per-board (the merged tenant catalog), so drop
45
+ // it too — the next inspector open re-fetches it for the switched-to board rather
46
+ // than showing the previous board's (or a raw-id placeholder for) fragments.
47
+ useFragmentsStore().invalidate()
48
+ }
49
+
50
+ /**
51
+ * Fan a workspace snapshot out into the per-feature data stores. Extracted verbatim from the
52
+ * `workspace` store's `hydrate` (which keeps the workspace-scoped state it owns + the
53
+ * board-switch cache reset) so the ordering of the hydrate calls is preserved exactly — a
54
+ * size-only split, not a new seam.
55
+ *
56
+ * `boardSince` (captured BEFORE this snapshot's fetch) lets the board store preserve any block
57
+ * live-`upsert`ed while the fetch was in flight, so a slower refresh can't clobber a newer live
58
+ * status (see `useBoardStore().hydrate`).
59
+ */
60
+ export function applySnapshotToStores(snapshot: WorkspaceSnapshot, boardSince?: number) {
61
+ useUserSettingsStore().hydrate(snapshot.userSettings ?? null)
62
+ useBoardStore().hydrate(snapshot.blocks, boardSince)
63
+ useBoardStore().hydrateArchived(snapshot.archivedServices ?? [])
64
+ usePipelinesStore().hydrate(snapshot.pipelines, snapshot.pipelineCatalogVersions)
65
+ useExecutionStore().hydrate(snapshot.executions, snapshot.workspace.id)
66
+ useAgentRunsStore().hydrate(snapshot.bootstrapJobs ?? [], snapshot.workspace.id)
67
+ useAgentRunsStore().hydrateEnvConfigRepair(snapshot.envConfigRepairJobs ?? [])
68
+ useEnvironmentTestStore().hydrate(snapshot.environmentTestRuns ?? [], snapshot.workspace.id)
69
+ useNotificationsStore().hydrate(snapshot.notifications ?? [])
70
+ useRiskPoliciesStore().hydrate(snapshot.riskPolicies ?? [], snapshot.riskPolicyCatalogVersions)
71
+ useSharedStacksStore().hydrate(snapshot.sharedStacks ?? [])
72
+ useWorkspaceSettingsStore().hydrate(snapshot.settings)
73
+ useAgentConfigStore().hydrate(snapshot.agentConfigCatalog ?? [])
74
+ useModelPresetsStore().hydrate(snapshot.modelPresets ?? [], snapshot.modelPresetCatalogVersions)
75
+ useServiceFragmentDefaultsStore().hydrate(snapshot.serviceFragmentDefaults?.fragmentIds)
76
+ useRecurringPipelinesStore().hydrate(snapshot.recurringPipelines ?? [])
77
+ useInitiativesStore().hydrate(snapshot.initiatives)
78
+ // Registered initiative presets (built-in generic + any a deployment mixed in): drive the
79
+ // create picker and which planning pipeline "Run planning" starts. Workspace-independent.
80
+ useInitiativesStore().hydratePresets(snapshot.initiativePresets)
81
+ useTrackerStore().hydrate(snapshot.trackerSettings)
82
+ useServicesStore().hydrate(snapshot.mounts ?? [], snapshot.serviceCatalog ?? [])
83
+ // Hydrate the deployment's backend-registered capabilities from ONE shared per-workspace
84
+ // remote capability manifest carrying BOTH custom agent kinds AND custom task types (its
85
+ // version covers both, so an unchanged snapshot no-ops both stores). Each store reads its
86
+ // own slot off it, so a proprietary agent kind renders as a first-class palette block +
87
+ // result view and a proprietary task type as a first-class create-task choice + card badge.
88
+ // Swapped wholesale per workspace (no global-catalog mutation).
89
+ const capabilities = buildWorkspaceCapabilitiesManifest(
90
+ snapshot.customAgentKinds ?? [],
91
+ snapshot.customTaskTypes ?? [],
92
+ )
93
+ useAgentsStore().hydrateCapabilities(capabilities)
94
+ useTaskTypesStore().hydrateCapabilities(capabilities)
95
+ // The account's repo-sourced Claude Skills catalog (shared across its workspaces), so the
96
+ // pipeline builder's per-step skill picker has its options. A straight replace.
97
+ useSkillsStore().hydrate(snapshot.skills ?? [])
98
+ // Seed the connect form's backend-kind selectors (built-in + any custom backend a
99
+ // deployment registered), so a programmatically-registered env/runner backend is a
100
+ // first-class connect option instead of a hardcoded manifest/kubernetes list.
101
+ useProviderConnectionsStore().registerBackendKinds({
102
+ environment: snapshot.environmentBackendKinds,
103
+ 'runner-pool': snapshot.runnerBackendKinds,
104
+ })
105
+ }
@@ -10,32 +10,7 @@ import type {
10
10
  } from '~/types/domain'
11
11
  import { useAccountsStore } from '~/stores/accounts'
12
12
  import { useBoardStore } from '~/stores/board'
13
- import { usePipelinesStore } from '~/stores/pipelines'
14
- import { useExecutionStore } from '~/stores/execution'
15
- import { useAgentRunsStore } from '~/stores/agentRuns'
16
- import { useEnvironmentTestStore } from '~/stores/environmentTest'
17
- import { useNotificationsStore } from '~/stores/notifications'
18
- import { useRiskPoliciesStore } from '~/stores/riskPolicies'
19
- import { useSharedStacksStore } from '~/stores/sharedStacks'
20
- import { useWorkspaceSettingsStore } from '~/stores/workspaceSettings'
21
- import { useAgentConfigStore } from '~/stores/agentConfig'
22
- import { useModelPresetsStore } from '~/stores/modelPresets'
23
- import { useServiceFragmentDefaultsStore } from '~/stores/serviceFragmentDefaults'
24
- import { useRecurringPipelinesStore } from '~/stores/recurringPipelines'
25
- import { useInitiativesStore } from '~/stores/initiative'
26
- import { useServicesStore } from '~/stores/services'
27
- import { useAgentsStore } from '~/stores/agents'
28
- import { useTaskTypesStore } from '~/stores/taskTypes'
29
- import { buildWorkspaceCapabilitiesManifest } from '~/modular/capabilities'
30
- import { useSkillsStore } from '~/stores/skills'
31
- import { useTrackerStore } from '~/stores/tracker'
32
- import { useRequirementsStore } from '~/stores/requirements'
33
- import { useClarityStore } from '~/stores/clarity'
34
- import { useBrainstormStore } from '~/stores/brainstorm'
35
- import { useConsensusStore } from '~/stores/consensus'
36
- import { useGitHubStore } from '~/stores/github'
37
- import { useFragmentsStore } from '~/stores/fragments'
38
- import { useProviderConnectionsStore } from '~/stores/providerConnections'
13
+ import { applySnapshotToStores, resetPerBoardCaches } from '~/stores/workspace/hydrate'
39
14
  import { markBoot } from '~/utils/bootMarks'
40
15
  import { retryWhileBackendUnreachable } from '~/utils/backendReady'
41
16
 
@@ -109,30 +84,14 @@ export const useWorkspaceStore = defineStore(
109
84
  * fresh loads (init/switch/create), where there is no in-flight-upsert race to guard.
110
85
  */
111
86
  function hydrate(snapshot: WorkspaceSnapshot, boardSince?: number) {
112
- // A change of active board (or the first load) drop the per-block caches that are
113
- // NOT part of the snapshot (reviews, brainstorm/consensus sessions, the GitHub
114
- // projection) so a switched-to board never shows the previous one's stale state.
115
- // These are lazily reloaded/re-probed per board, so clearing on a same-board refresh
116
- // would needlessly wipe an open review window — hence only on an actual id change.
117
- if (workspaceId.value !== snapshot.workspace.id) {
118
- useRequirementsStore().reset()
119
- useClarityStore().reset()
120
- useBrainstormStore().reset()
121
- useConsensusStore().reset()
122
- useGitHubStore().reset()
123
- useInitiativesStore().reset()
124
- useDocInterviewStore().reset()
125
- // The fragment picker catalog is per-board (the merged tenant catalog), so drop
126
- // it too — the next inspector open re-fetches it for the switched-to board rather
127
- // than showing the previous board's (or a raw-id placeholder for) fragments.
128
- useFragmentsStore().invalidate()
129
- }
87
+ // A change of active board (or the first load) drops the per-block caches that are NOT
88
+ // part of the snapshot; a same-board refresh keeps them (see `resetPerBoardCaches`).
89
+ if (workspaceId.value !== snapshot.workspace.id) resetPerBoardCaches()
130
90
  workspaceId.value = snapshot.workspace.id
131
91
  spend.value = snapshot.spend ?? null
132
92
  accountSpend.value = snapshot.accountSpend ?? null
133
93
  userSpend.value = snapshot.userSpend ?? null
134
94
  budgetCaps.value = snapshot.budgetCaps ?? null
135
- useUserSettingsStore().hydrate(snapshot.userSettings ?? null)
136
95
  infraSetup.value = snapshot.infraSetup ?? null
137
96
  access.value = snapshot.access ?? null
138
97
  // Keep the board list in step (e.g. a freshly created board, or a rename). The
@@ -144,55 +103,8 @@ export const useWorkspaceStore = defineStore(
144
103
  } else {
145
104
  workspaces.value.unshift(snapshot.workspace)
146
105
  }
147
- useBoardStore().hydrate(snapshot.blocks, boardSince)
148
- useBoardStore().hydrateArchived(snapshot.archivedServices ?? [])
149
- usePipelinesStore().hydrate(snapshot.pipelines, snapshot.pipelineCatalogVersions)
150
- useExecutionStore().hydrate(snapshot.executions, snapshot.workspace.id)
151
- useAgentRunsStore().hydrate(snapshot.bootstrapJobs ?? [], snapshot.workspace.id)
152
- useAgentRunsStore().hydrateEnvConfigRepair(snapshot.envConfigRepairJobs ?? [])
153
- useEnvironmentTestStore().hydrate(snapshot.environmentTestRuns ?? [], snapshot.workspace.id)
154
- useNotificationsStore().hydrate(snapshot.notifications ?? [])
155
- useRiskPoliciesStore().hydrate(
156
- snapshot.riskPolicies ?? [],
157
- snapshot.riskPolicyCatalogVersions,
158
- )
159
- useSharedStacksStore().hydrate(snapshot.sharedStacks ?? [])
160
- useWorkspaceSettingsStore().hydrate(snapshot.settings)
161
- useAgentConfigStore().hydrate(snapshot.agentConfigCatalog ?? [])
162
- useModelPresetsStore().hydrate(
163
- snapshot.modelPresets ?? [],
164
- snapshot.modelPresetCatalogVersions,
165
- )
166
- useServiceFragmentDefaultsStore().hydrate(snapshot.serviceFragmentDefaults?.fragmentIds)
167
- useRecurringPipelinesStore().hydrate(snapshot.recurringPipelines ?? [])
168
- useInitiativesStore().hydrate(snapshot.initiatives)
169
- // Registered initiative presets (built-in generic + any a deployment mixed in): drive the
170
- // create picker and which planning pipeline "Run planning" starts. Workspace-independent.
171
- useInitiativesStore().hydratePresets(snapshot.initiativePresets)
172
- useTrackerStore().hydrate(snapshot.trackerSettings)
173
- useServicesStore().hydrate(snapshot.mounts ?? [], snapshot.serviceCatalog ?? [])
174
- // Hydrate the deployment's backend-registered capabilities from ONE shared per-workspace
175
- // remote capability manifest carrying BOTH custom agent kinds AND custom task types (its
176
- // version covers both, so an unchanged snapshot no-ops both stores). Each store reads its
177
- // own slot off it, so a proprietary agent kind renders as a first-class palette block +
178
- // result view and a proprietary task type as a first-class create-task choice + card badge.
179
- // Swapped wholesale per workspace (no global-catalog mutation).
180
- const capabilities = buildWorkspaceCapabilitiesManifest(
181
- snapshot.customAgentKinds ?? [],
182
- snapshot.customTaskTypes ?? [],
183
- )
184
- useAgentsStore().hydrateCapabilities(capabilities)
185
- useTaskTypesStore().hydrateCapabilities(capabilities)
186
- // The account's repo-sourced Claude Skills catalog (shared across its workspaces), so the
187
- // pipeline builder's per-step skill picker has its options. A straight replace.
188
- useSkillsStore().hydrate(snapshot.skills ?? [])
189
- // Seed the connect form's backend-kind selectors (built-in + any custom backend a
190
- // deployment registered), so a programmatically-registered env/runner backend is a
191
- // first-class connect option instead of a hardcoded manifest/kubernetes list.
192
- useProviderConnectionsStore().registerBackendKinds({
193
- environment: snapshot.environmentBackendKinds,
194
- 'runner-pool': snapshot.runnerBackendKinds,
195
- })
106
+ // Fan the rest of the snapshot out into the per-feature data stores.
107
+ applySnapshotToStores(snapshot, boardSince)
196
108
  }
197
109
 
198
110
  /** Resolve accounts + boards, then open the right board for the active account. */
@@ -10,6 +10,7 @@ const DEFAULTS: WorkspaceSettings = {
10
10
  taskLimitShared: null,
11
11
  taskLimitPerType: null,
12
12
  storeAgentContext: true,
13
+ publishPrVerificationReport: true,
13
14
  artifactRetentionDays: 14,
14
15
  kaizenEnabled: true,
15
16
  delegateAgentsToRunnerPool: false,
@@ -760,6 +760,11 @@
760
760
  "body": "Speichere den vollständigen Kontext, der jedem Agenten bereitgestellt wird: die zusammengesetzten Prompts, die eingefügten Best-Practice-Fragmente und den vollständigen Inhalt der in seinen Container injizierten Dateien, sodass er später in der Observability-Ansicht inspiziert werden kann. Die Inhalte werden für denselben Zeitraum wie die LLM-Telemetrie pro Aufruf aufbewahrt. Deaktivieren, um die Speicherung zu stoppen (bestehende Snapshots werden durch die Aufbewahrung bereinigt).",
761
761
  "toggle": "Vollständigen Agentenkontext speichern"
762
762
  },
763
+ "prReport": {
764
+ "heading": "Verifizierungsbericht im Pull Request",
765
+ "body": "Pflegt einen Verifizierungsbericht im Pull Request jedes Laufs: das CI-Ergebnis, den Bericht des Testers, den Lebenszyklus der kurzlebigen Umgebung und die Merge-Bewertung – als erfasste Fakten statt als Behauptungen des Agenten. Zugangsdaten werden vor dem Schreiben entfernt. Zum Beenden ausschalten; ein bereits vorhandener Bericht bleibt unverändert.",
766
+ "toggle": "Verifizierungsbericht in Pull Requests veröffentlichen"
767
+ },
763
768
  "retention": {
764
769
  "heading": "Screenshot-Aufbewahrung",
765
770
  "body": "Wie lange die vom UI-Tester aufgenommenen Screenshots und die Referenz-Designbilder, gegen die sie geprüft werden (das visuelle Bestätigungs-Gate), aufbewahrt werden. Ein täglicher Cleanup-Job löscht sowohl die Bild-Bytes als auch ihre Metadaten, sobald sie älter als dieser Zeitraum sind.",
@@ -2795,6 +2795,11 @@
2795
2795
  "body": "Store the complete context provided to each agent: the composed prompts, the best-practice fragments folded in, and the full content of the files injected into its container, so it can be inspected later in the observability view. The bodies are kept for the same window as the per-call LLM telemetry. Turn off to stop storing it (existing snapshots are pruned by retention).",
2796
2796
  "toggle": "Store full agent context"
2797
2797
  },
2798
+ "prReport": {
2799
+ "heading": "Pull request verification report",
2800
+ "body": "Maintain a verification report on each run's pull request: the CI verdict, the tester's report, ephemeral-environment lifecycle and the merge assessment, as captured facts rather than the agent's own claims. Credentials are scrubbed before anything is written. Turn off to stop publishing; a report already on a pull request is left as it is.",
2801
+ "toggle": "Publish the verification report on pull requests"
2802
+ },
2798
2803
  "retention": {
2799
2804
  "heading": "Screenshot retention",
2800
2805
  "body": "How long to keep the UI tester's captured screenshots and the reference design images they're reviewed against (the visual-confirmation gate). A daily cleanup job deletes both the image bytes and their metadata once they age past this window.",
@@ -2607,6 +2607,11 @@
2607
2607
  "body": "Almacena el contexto completo proporcionado a cada agente: los prompts compuestos, los fragmentos de buenas prácticas incorporados y el contenido íntegro de los archivos inyectados en su contenedor, para poder inspeccionarlo después en la vista de observabilidad. Los cuerpos se conservan durante la misma ventana que la telemetría de LLM por llamada. Desactívalo para dejar de almacenarlo (las instantáneas existentes se eliminan por retención).",
2608
2608
  "toggle": "Almacenar el contexto completo del agente"
2609
2609
  },
2610
+ "prReport": {
2611
+ "heading": "Informe de verificación en la pull request",
2612
+ "body": "Mantiene un informe de verificación en la pull request de cada ejecución: el veredicto de CI, el informe del probador, el ciclo de vida del entorno efímero y la evaluación de fusión, como hechos registrados y no como afirmaciones del agente. Las credenciales se depuran antes de escribir nada. Desactívalo para dejar de publicarlo; un informe ya presente se deja tal cual.",
2613
+ "toggle": "Publicar el informe de verificación en las pull requests"
2614
+ },
2610
2615
  "retention": {
2611
2616
  "heading": "Retención de capturas de pantalla",
2612
2617
  "body": "Cuánto tiempo conservar las capturas de pantalla del probador de UI y las imágenes de diseño de referencia con las que se comparan (la verificación visual). Un trabajo de limpieza diario elimina tanto los bytes de las imágenes como sus metadatos cuando superan esta ventana.",
@@ -2607,6 +2607,11 @@
2607
2607
  "body": "Stockez le contexte complet fourni à chaque agent : les prompts composés, les fragments de bonnes pratiques intégrés et le contenu intégral des fichiers injectés dans son conteneur, afin de pouvoir l'inspecter plus tard dans la vue d'observabilité. Les corps sont conservés pendant la même fenêtre que la télémétrie LLM par appel. Désactivez pour cesser de le stocker (les instantanés existants sont supprimés par la rétention).",
2608
2608
  "toggle": "Stocker le contexte complet de l'agent"
2609
2609
  },
2610
+ "prReport": {
2611
+ "heading": "Rapport de vérification sur la pull request",
2612
+ "body": "Maintient un rapport de vérification sur la pull request de chaque exécution : le verdict de CI, le rapport du testeur, le cycle de vie de l'environnement éphémère et l'évaluation de fusion, sous forme de faits constatés plutôt que d'affirmations de l'agent. Les identifiants sont expurgés avant toute écriture. Désactivez pour cesser de le publier ; un rapport déjà présent reste inchangé.",
2613
+ "toggle": "Publier le rapport de vérification sur les pull requests"
2614
+ },
2610
2615
  "retention": {
2611
2616
  "heading": "Rétention des captures d'écran",
2612
2617
  "body": "Combien de temps conserver les captures d'écran du testeur d'UI et les images de conception de référence auxquelles elles sont comparées (la vérification visuelle). Un nettoyage quotidien supprime à la fois les octets des images et leurs métadonnées une fois qu'ils dépassent cette fenêtre.",
@@ -2728,6 +2728,11 @@
2728
2728
  "body": "אחסן את ההקשר המלא שניתן לכל סוכן: ההנחיות המורכבות, מקטעי שיטות העבודה המומלצות שמשולבים, והתוכן המלא של הקבצים שמוזרקים לקונטיינר שלו, כך שניתן יהיה לבדוק אותו מאוחר יותר בתצוגת התצפיתיות. הגופים נשמרים לאותו חלון כמו טלמטריית ה-LLM לכל קריאה. כבה כדי להפסיק לאחסן אותו (תצלומים קיימים נגזמים לפי תקופת השמירה).",
2729
2729
  "toggle": "אחסן הקשר סוכן מלא"
2730
2730
  },
2731
+ "prReport": {
2732
+ "heading": "דוח אימות בבקשת המשיכה",
2733
+ "body": "שמירת דוח אימות בבקשת המשיכה של כל הרצה: תוצאת ה-CI, דוח הבודק, מחזור החיים של הסביבה הזמנית והערכת המיזוג — כעובדות שנאספו ולא כטענות של הסוכן. פרטי גישה מנוקים לפני כל כתיבה. כבו כדי להפסיק לפרסם; דוח שכבר קיים נשאר כפי שהוא.",
2734
+ "toggle": "פרסום דוח האימות בבקשות משיכה"
2735
+ },
2731
2736
  "retention": {
2732
2737
  "heading": "שמירת צילומי מסך",
2733
2738
  "body": "כמה זמן לשמור את צילומי המסך שצולמו על ידי בודק הממשק ואת תמונות העיצוב המקוריות שמולן הם נסקרים (שער האישור החזותי). משימת ניקוי יומית מוחקת גם את בתי התמונה וגם את המטא-נתונים שלהם ברגע שהם מתיישנים מעבר לחלון זה.",
@@ -760,6 +760,11 @@
760
760
  "body": "Memorizza il contesto completo fornito a ogni agente: i prompt composti, i frammenti di best practice inclusi e il contenuto completo dei file iniettati nel suo container, cosicche possa essere ispezionato in seguito nella vista di osservabilita. I corpi vengono conservati per la stessa finestra della telemetria LLM per chiamata. Disattiva per interrompere la memorizzazione (gli snapshot esistenti vengono eliminati dalla retention).",
761
761
  "toggle": "Memorizza il contesto completo dell'agente"
762
762
  },
763
+ "prReport": {
764
+ "heading": "Rapporto di verifica sulla pull request",
765
+ "body": "Mantiene un rapporto di verifica sulla pull request di ogni esecuzione: il verdetto della CI, il rapporto del tester, il ciclo di vita dell'ambiente effimero e la valutazione di merge, come fatti rilevati e non come affermazioni dell'agente. Le credenziali vengono ripulite prima di ogni scrittura. Disattiva per smettere di pubblicarlo; un rapporto già presente resta invariato.",
766
+ "toggle": "Pubblica il rapporto di verifica sulle pull request"
767
+ },
763
768
  "retention": {
764
769
  "heading": "Retention degli screenshot",
765
770
  "body": "Per quanto tempo conservare gli screenshot catturati dal tester UI e le immagini di design di riferimento con cui vengono confrontati (il gate di conferma visiva). Un job di pulizia giornaliero elimina sia i byte delle immagini sia i loro metadati una volta superata questa finestra.",
@@ -2729,6 +2729,11 @@
2729
2729
  "body": "各エージェントに提供された完全なコンテキストを保存します。構成されたプロンプト、折り込まれたベストプラクティスのフラグメント、コンテナに注入されたファイルの全内容を保存し、後から可観測性ビューで確認できます。本文は呼び出しごとの LLM テレメトリと同じ期間だけ保持されます。オフにすると保存を停止します (既存のスナップショットは保持期限により削除されます)。",
2730
2730
  "toggle": "エージェントの完全なコンテキストを保存"
2731
2731
  },
2732
+ "prReport": {
2733
+ "heading": "プルリクエストの検証レポート",
2734
+ "body": "各実行のプルリクエストに検証レポートを維持します。CI の判定、テスターのレポート、一時環境のライフサイクル、マージ評価を、エージェント自身の主張ではなく記録された事実として掲載します。書き込み前に認証情報は削除されます。オフにすると公開を停止します。すでに掲載されているレポートはそのまま残ります。",
2735
+ "toggle": "プルリクエストに検証レポートを公開する"
2736
+ },
2732
2737
  "retention": {
2733
2738
  "heading": "スクリーンショットの保持",
2734
2739
  "body": "UI テスターがキャプチャしたスクリーンショットと、それらの照合に使われる参照デザイン画像 (視覚的確認ゲート) を保持する期間です。日次のクリーンアップジョブが、この期間を過ぎた画像データとそのメタデータの両方を削除します。",
@@ -2607,6 +2607,11 @@
2607
2607
  "body": "Przechowuj pełny kontekst przekazany każdemu agentowi: złożone prompty, włączone fragmenty dobrych praktyk oraz pełną treść plików wstrzykniętych do jego kontenera, aby można było je później sprawdzić w widoku obserwowalności. Treści są przechowywane przez to samo okno co telemetria LLM dla poszczególnych wywołań. Wyłącz, aby przestać je przechowywać (istniejące migawki są usuwane przez retencję).",
2608
2608
  "toggle": "Przechowuj pełny kontekst agenta"
2609
2609
  },
2610
+ "prReport": {
2611
+ "heading": "Raport weryfikacyjny w pull requeście",
2612
+ "body": "Utrzymuje raport weryfikacyjny w pull requeście każdego przebiegu: werdykt CI, raport testera, cykl życia środowiska tymczasowego i ocenę scalenia — jako zarejestrowane fakty, a nie deklaracje agenta. Poświadczenia są usuwane przed zapisem. Wyłącz, aby przestać publikować; raport już obecny pozostaje bez zmian.",
2613
+ "toggle": "Publikuj raport weryfikacyjny w pull requestach"
2614
+ },
2610
2615
  "retention": {
2611
2616
  "heading": "Retencja zrzutów ekranu",
2612
2617
  "body": "Jak długo przechowywać zrzuty ekranu z testera UI oraz referencyjne obrazy projektowe, z którymi są porównywane (weryfikacja wizualna). Codzienne zadanie czyszczące usuwa zarówno bajty obrazów, jak i ich metadane, gdy przekroczą to okno.",
@@ -2729,6 +2729,11 @@
2729
2729
  "body": "Her agent'a sağlanan tüm bağlamı saklayın: oluşturulan istemler, içine katlanan en iyi uygulama parçaları ve konteynerine enjekte edilen dosyaların tam içeriği; böylece daha sonra gözlemlenebilirlik görünümünde incelenebilir. Gövdeler, çağrı başına LLM telemetrisi ile aynı süre boyunca tutulur. Saklamayı durdurmak için kapatın (mevcut anlık görüntüler saklama ilkesiyle temizlenir).",
2730
2730
  "toggle": "Tüm agent bağlamını sakla"
2731
2731
  },
2732
+ "prReport": {
2733
+ "heading": "Pull request doğrulama raporu",
2734
+ "body": "Her çalıştırmanın pull request'inde bir doğrulama raporu tutar: CI sonucu, test edicinin raporu, geçici ortamın yaşam döngüsü ve birleştirme değerlendirmesi — ajanın kendi iddiaları yerine kaydedilmiş gerçekler olarak. Kimlik bilgileri yazılmadan önce temizlenir. Yayımlamayı durdurmak için kapatın; hâlihazırda yayımlanmış bir rapor olduğu gibi bırakılır.",
2735
+ "toggle": "Doğrulama raporunu pull request'lerde yayımla"
2736
+ },
2732
2737
  "retention": {
2733
2738
  "heading": "Ekran görüntüsü saklama",
2734
2739
  "body": "Arayüz test aracının yakaladığı ekran görüntülerinin ve bunların karşılaştırıldığı referans tasarım görsellerinin (görsel doğrulama geçidi) ne kadar süre tutulacağı. Günlük bir temizleme işi, hem görsel baytlarını hem de meta verilerini bu süreyi aştıklarında siler.",
@@ -2607,6 +2607,11 @@
2607
2607
  "body": "Зберігайте повний контекст, наданий кожному агенту: складені промпти, вбудовані фрагменти найкращих практик і повний вміст файлів, впроваджених у його контейнер, щоб згодом їх можна було переглянути у вікні спостережуваності. Тіла зберігаються протягом того самого вікна, що й телеметрія LLM для кожного виклику. Вимкніть, щоб припинити зберігання (наявні знімки видаляються за політикою зберігання).",
2608
2608
  "toggle": "Зберігати повний контекст агента"
2609
2609
  },
2610
+ "prReport": {
2611
+ "heading": "Звіт про перевірку в пул-реквесті",
2612
+ "body": "Підтримує звіт про перевірку в пул-реквесті кожного запуску: вердикт CI, звіт тестувальника, життєвий цикл тимчасового середовища та оцінку злиття — як зафіксовані факти, а не твердження агента. Облікові дані вилучаються перед будь-яким записом. Вимкніть, щоб припинити публікацію; вже наявний звіт залишається без змін.",
2613
+ "toggle": "Публікувати звіт про перевірку в пул-реквестах"
2614
+ },
2610
2615
  "retention": {
2611
2616
  "heading": "Зберігання знімків екрана",
2612
2617
  "body": "Як довго зберігати знімки екрана від тестувальника UI та еталонні дизайнерські зображення, з якими їх порівнюють (візуальна перевірка). Щоденне завдання очищення видаляє як байти зображень, так і їхні метадані, щойно вони виходять за межі цього вікна.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.153.3",
3
+ "version": "0.154.0",
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.161.0"
43
+ "@cat-factory/contracts": "0.162.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@toad-contracts/testing": "0.3.2",