@cat-factory/app 0.153.4 → 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.
- package/app/components/settings/WorkspaceSettingsPanel.vue +19 -0
- package/app/composables/useRunDeepLink.spec.ts +51 -0
- package/app/composables/useRunDeepLink.ts +91 -0
- package/app/pages/index.vue +4 -0
- package/app/stores/workspaceSettings.ts +1 -0
- package/i18n/locales/de.json +5 -0
- package/i18n/locales/en.json +5 -0
- package/i18n/locales/es.json +5 -0
- package/i18n/locales/fr.json +5 -0
- package/i18n/locales/he.json +5 -0
- package/i18n/locales/it.json +5 -0
- package/i18n/locales/ja.json +5 -0
- package/i18n/locales/pl.json +5 -0
- package/i18n/locales/tr.json +5 -0
- package/i18n/locales/uk.json +5 -0
- package/package.json +2 -2
|
@@ -149,6 +149,7 @@ const draft = reactive({
|
|
|
149
149
|
taskLimitShared: 5 as number,
|
|
150
150
|
perType: {} as Record<LimitTaskType, number>,
|
|
151
151
|
storeAgentContext: true,
|
|
152
|
+
publishPrVerificationReport: true,
|
|
152
153
|
artifactRetentionDays: 14,
|
|
153
154
|
kaizenEnabled: true,
|
|
154
155
|
reviewFrictionMode: 'off' as ReviewFrictionMode,
|
|
@@ -167,6 +168,7 @@ function hydrate() {
|
|
|
167
168
|
const pt = s.taskLimitPerType ?? {}
|
|
168
169
|
for (const t of TASK_TYPES) draft.perType[t] = pt[t] ?? 3
|
|
169
170
|
draft.storeAgentContext = s.storeAgentContext
|
|
171
|
+
draft.publishPrVerificationReport = s.publishPrVerificationReport
|
|
170
172
|
draft.artifactRetentionDays = s.artifactRetentionDays
|
|
171
173
|
draft.kaizenEnabled = s.kaizenEnabled
|
|
172
174
|
draft.reviewFrictionMode = s.reviewFrictionMode
|
|
@@ -222,6 +224,7 @@ async function save() {
|
|
|
222
224
|
)
|
|
223
225
|
: null,
|
|
224
226
|
storeAgentContext: draft.storeAgentContext,
|
|
227
|
+
publishPrVerificationReport: draft.publishPrVerificationReport,
|
|
225
228
|
artifactRetentionDays: draft.artifactRetentionDays,
|
|
226
229
|
kaizenEnabled: draft.kaizenEnabled,
|
|
227
230
|
reviewFrictionMode: draft.reviewFrictionMode,
|
|
@@ -421,6 +424,22 @@ async function save() {
|
|
|
421
424
|
</label>
|
|
422
425
|
</section>
|
|
423
426
|
|
|
427
|
+
<!-- Engine-maintained PR verification report -->
|
|
428
|
+
<section class="space-y-2">
|
|
429
|
+
<h3 class="text-sm font-semibold text-slate-200">
|
|
430
|
+
{{ t('settings.workspaceSettings.prReport.heading') }}
|
|
431
|
+
</h3>
|
|
432
|
+
<p class="text-[11px] text-slate-400">
|
|
433
|
+
{{ t('settings.workspaceSettings.prReport.body') }}
|
|
434
|
+
</p>
|
|
435
|
+
<label class="flex items-center gap-2">
|
|
436
|
+
<USwitch v-model="draft.publishPrVerificationReport" size="sm" />
|
|
437
|
+
<span class="text-sm text-slate-200">{{
|
|
438
|
+
t('settings.workspaceSettings.prReport.toggle')
|
|
439
|
+
}}</span>
|
|
440
|
+
</label>
|
|
441
|
+
</section>
|
|
442
|
+
|
|
424
443
|
<!-- Visual-confirmation artifact retention -->
|
|
425
444
|
<section class="space-y-2">
|
|
426
445
|
<h3 class="text-sm font-semibold text-slate-200">
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createPinia, setActivePinia } from 'pinia'
|
|
2
|
+
import { beforeEach, describe, expect, it } from 'vitest'
|
|
3
|
+
import { captureRunDeepLink } from './useRunDeepLink'
|
|
4
|
+
|
|
5
|
+
/** Point `window.location` + `history` at a URL the capture can read and rewrite. */
|
|
6
|
+
function setUrl(search: string): void {
|
|
7
|
+
history.replaceState(null, '', `/${search}`)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe('captureRunDeepLink', () => {
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
setActivePinia(createPinia())
|
|
13
|
+
setUrl('')
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('returns null when the URL carries no run link', () => {
|
|
17
|
+
setUrl('?other=1')
|
|
18
|
+
expect(captureRunDeepLink()).toBeNull()
|
|
19
|
+
// An unrelated param is left alone.
|
|
20
|
+
expect(window.location.search).toBe('?other=1')
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('parses the report link the engine emits', () => {
|
|
24
|
+
setUrl('?ws=ws_1&block=blk_1&run=exec_1&view=observability')
|
|
25
|
+
expect(captureRunDeepLink()).toEqual({
|
|
26
|
+
workspaceId: 'ws_1',
|
|
27
|
+
blockId: 'blk_1',
|
|
28
|
+
runId: 'exec_1',
|
|
29
|
+
view: 'observability',
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('strips its own params so a reload does not re-open the panel', () => {
|
|
34
|
+
setUrl('?ws=ws_1&run=exec_1&view=observability&keep=yes')
|
|
35
|
+
captureRunDeepLink()
|
|
36
|
+
// Only the link's own params are consumed; anything else survives.
|
|
37
|
+
expect(window.location.search).toBe('?keep=yes')
|
|
38
|
+
// …and a second read finds nothing left to replay.
|
|
39
|
+
expect(captureRunDeepLink()).toBeNull()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('tolerates a partial link (run id alone still resolves)', () => {
|
|
43
|
+
setUrl('?run=exec_1')
|
|
44
|
+
expect(captureRunDeepLink()).toEqual({
|
|
45
|
+
workspaceId: null,
|
|
46
|
+
blockId: null,
|
|
47
|
+
runId: 'exec_1',
|
|
48
|
+
view: null,
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
})
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot-time replay of a RUN deep link — `?ws=<id>&block=<id>&run=<id>&view=observability`.
|
|
3
|
+
*
|
|
4
|
+
* The engine's PR verification report links each PR back to the run's observability panel
|
|
5
|
+
* (Model activity / Provided context), built from the deployment's public app URL. The SPA is a
|
|
6
|
+
* single canvas with no URL identity for anything, so this is the narrow consumer that makes
|
|
7
|
+
* that link resolve: pin the board before the snapshot loads, then — once the board is ready —
|
|
8
|
+
* select the task and open the panel for the run.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately narrow. The GENERAL parser (every entity, every window, plus state→URL sync) is
|
|
11
|
+
* slice 4 of `docs/initiatives/global-search-and-deep-links.md`; when it lands, this composable
|
|
12
|
+
* is deleted rather than kept alongside it.
|
|
13
|
+
*/
|
|
14
|
+
import { watch } from 'vue'
|
|
15
|
+
import { useUiStore } from '../stores/ui'
|
|
16
|
+
import { useWorkspaceStore } from '../stores/workspace'
|
|
17
|
+
|
|
18
|
+
/** The parsed link, or null when the URL carried none. */
|
|
19
|
+
interface PendingRunLink {
|
|
20
|
+
workspaceId: string | null
|
|
21
|
+
blockId: string | null
|
|
22
|
+
runId: string
|
|
23
|
+
view: string | null
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const RUN_LINK_PARAMS = ['ws', 'block', 'run', 'view'] as const
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Read (and strip) a run deep link from the current URL. Called BEFORE `workspace.init()` so
|
|
30
|
+
* the pinned board id is in place when `resolveActiveBoard` picks which board to open. The
|
|
31
|
+
* params are removed from the URL — mirroring the `?invite=` / `?infraSetup=` handling — so a
|
|
32
|
+
* reload doesn't re-open the panel and the link isn't left sitting in history.
|
|
33
|
+
*/
|
|
34
|
+
export function captureRunDeepLink(): PendingRunLink | null {
|
|
35
|
+
if (typeof window === 'undefined') return null
|
|
36
|
+
const params = new URLSearchParams(window.location.search)
|
|
37
|
+
const runId = params.get('run')
|
|
38
|
+
if (!runId) return null
|
|
39
|
+
|
|
40
|
+
const link: PendingRunLink = {
|
|
41
|
+
workspaceId: params.get('ws'),
|
|
42
|
+
blockId: params.get('block'),
|
|
43
|
+
runId,
|
|
44
|
+
view: params.get('view'),
|
|
45
|
+
}
|
|
46
|
+
for (const key of RUN_LINK_PARAMS) params.delete(key)
|
|
47
|
+
const qs = params.toString()
|
|
48
|
+
history.replaceState(null, '', window.location.pathname + (qs ? `?${qs}` : ''))
|
|
49
|
+
return link
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Capture a run deep link and, once the board has hydrated, apply it. Returns nothing; the
|
|
54
|
+
* caller mounts it once, next to `workspace.init()`.
|
|
55
|
+
*
|
|
56
|
+
* Applying WAITS for `workspace.ready`: opening the panel against a half-loaded board would
|
|
57
|
+
* read an execution the snapshot hasn't delivered yet. The watcher is one-shot — a later
|
|
58
|
+
* refresh must not re-open a panel the user closed.
|
|
59
|
+
*/
|
|
60
|
+
export function useRunDeepLink(): void {
|
|
61
|
+
const link = captureRunDeepLink()
|
|
62
|
+
if (!link) return
|
|
63
|
+
|
|
64
|
+
const workspace = useWorkspaceStore()
|
|
65
|
+
const ui = useUiStore()
|
|
66
|
+
|
|
67
|
+
// Pin the board the link names BEFORE init resolves the active one, so the run's own board
|
|
68
|
+
// opens rather than whichever one was last used on this device.
|
|
69
|
+
if (link.workspaceId) workspace.workspaceId = link.workspaceId
|
|
70
|
+
|
|
71
|
+
// Applied at most once — a later refresh must not re-open a panel the user closed. The guard
|
|
72
|
+
// is a flag rather than `{ once: true }` (which would burn the single run on the immediate
|
|
73
|
+
// not-ready tick and never navigate) and `stop` is a `let` rather than a `const` (with
|
|
74
|
+
// `immediate`, the callback runs synchronously BEFORE the binding initialises, so an
|
|
75
|
+
// already-hydrated board would hit the temporal dead zone instead of navigating).
|
|
76
|
+
let applied = false
|
|
77
|
+
let stop: (() => void) | undefined
|
|
78
|
+
stop = watch(
|
|
79
|
+
() => workspace.ready,
|
|
80
|
+
(ready) => {
|
|
81
|
+
if (!ready || applied) return
|
|
82
|
+
applied = true
|
|
83
|
+
if (link.blockId) ui.select(link.blockId)
|
|
84
|
+
// `observability` is the only view this narrow parser serves — an unknown view still
|
|
85
|
+
// lands the user on the right board and task rather than failing the navigation.
|
|
86
|
+
if (link.view === 'observability') ui.openObservability(link.runId)
|
|
87
|
+
stop?.()
|
|
88
|
+
},
|
|
89
|
+
{ immediate: true },
|
|
90
|
+
)
|
|
91
|
+
}
|
package/app/pages/index.vue
CHANGED
|
@@ -145,6 +145,10 @@ useKeyboardShortcuts()
|
|
|
145
145
|
|
|
146
146
|
// Load the board from the backend before rendering it.
|
|
147
147
|
onMounted(() => {
|
|
148
|
+
// Consume a run deep link (`?ws=…&block=…&run=…&view=observability`) BEFORE init, so the
|
|
149
|
+
// board it names is the one that opens. This is what makes the observability link on an
|
|
150
|
+
// engine-published PR verification report resolve.
|
|
151
|
+
useRunDeepLink()
|
|
148
152
|
void workspace.init()
|
|
149
153
|
// Honour a `cat-factory k3s` CLI hand-off (`?infraSetup=local-k3s&…`): open the Infrastructure
|
|
150
154
|
// window pre-seeded with the provisioned connection so the user only pastes the token + saves.
|
package/i18n/locales/de.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/en.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/es.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/he.json
CHANGED
|
@@ -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": "כמה זמן לשמור את צילומי המסך שצולמו על ידי בודק הממשק ואת תמונות העיצוב המקוריות שמולן הם נסקרים (שער האישור החזותי). משימת ניקוי יומית מוחקת גם את בתי התמונה וגם את המטא-נתונים שלהם ברגע שהם מתיישנים מעבר לחלון זה.",
|
package/i18n/locales/it.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -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 テスターがキャプチャしたスクリーンショットと、それらの照合に使われる参照デザイン画像 (視覚的確認ゲート) を保持する期間です。日次のクリーンアップジョブが、この期間を過ぎた画像データとそのメタデータの両方を削除します。",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -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.",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -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.
|
|
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.
|
|
43
|
+
"@cat-factory/contracts": "0.162.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|