@cat-factory/app 0.283.0 → 0.285.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/README.md +19 -0
- package/app/components/board/BoardCanvas.logic.spec.ts +71 -0
- package/app/components/board/BoardCanvas.logic.ts +92 -0
- package/app/components/board/BoardCanvas.vue +14 -27
- package/app/components/board/nodes/TaskPipelineMini.vue +2 -1
- package/app/components/followUp/FollowUpWindow.vue +49 -9
- package/app/components/panels/AgentStepDetail.vue +27 -1
- package/app/components/panels/ResultWindowShell.vue +19 -0
- package/app/components/panels/RunDetailLoadState.vue +41 -0
- package/app/components/panels/inspector/TaskExecution.vue +3 -3
- package/app/components/pipeline/PipelineProgress.vue +7 -3
- package/app/components/settings/KubernetesEngineForm.vue +1 -1
- package/app/components/settings/KubernetesEnvironmentForm.vue +1 -1
- package/app/composables/api/execution.ts +12 -0
- package/app/composables/api/followUps.ts +11 -3
- package/app/composables/useBlockDrag.ts +51 -5
- package/app/composables/useSingleFlight.spec.ts +42 -0
- package/app/composables/useSingleFlight.ts +37 -0
- package/app/composables/useStepApproval.ts +19 -0
- package/app/composables/useStepTimer.ts +70 -14
- package/app/composables/useUpsertList.spec.ts +73 -0
- package/app/composables/useUpsertList.ts +52 -6
- package/app/composables/useViewport.ts +13 -3
- package/app/stores/consensus.ts +8 -1
- package/app/stores/docInterview.ts +10 -1
- package/app/stores/execution/reconcile.ts +182 -0
- package/app/stores/execution/wholeRunReads.ts +139 -0
- package/app/stores/execution.spec.ts +297 -1
- package/app/stores/execution.ts +57 -110
- package/app/stores/followUps.spec.ts +94 -0
- package/app/stores/followUps.ts +17 -3
- package/app/stores/kaizen.spec.ts +77 -14
- package/app/stores/kaizen.ts +75 -17
- package/app/stores/notifications.spec.ts +65 -0
- package/app/stores/notifications.ts +29 -0
- package/app/stores/observability/agentContext.ts +128 -0
- package/app/stores/observability/toolCalls.ts +30 -2
- package/app/stores/observability.spec.ts +98 -0
- package/app/stores/observability.ts +51 -79
- package/app/stores/requirements/settlement.ts +55 -0
- package/app/stores/requirements.ts +25 -23
- package/app/stores/ui/k3sDeepLink.spec.ts +5 -5
- package/app/stores/workspace/hydrate.ts +11 -0
- package/app/stores/workspace/refreshFunnel.spec.ts +15 -1
- package/app/types/execution.ts +1 -0
- package/i18n/locales/de.json +10 -1
- package/i18n/locales/en.json +10 -1
- package/i18n/locales/es.json +10 -1
- package/i18n/locales/fr.json +10 -1
- package/i18n/locales/he.json +10 -1
- package/i18n/locales/it.json +10 -1
- package/i18n/locales/ja.json +10 -1
- package/i18n/locales/pl.json +10 -1
- package/i18n/locales/tr.json +10 -1
- package/i18n/locales/uk.json +10 -1
- package/package.json +6 -6
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { defineStore } from 'pinia'
|
|
2
|
-
import { ref } from 'vue'
|
|
2
|
+
import { computed, ref } from 'vue'
|
|
3
3
|
import type {
|
|
4
4
|
RequirementReview,
|
|
5
5
|
ResolveRequirementsExceededChoice,
|
|
6
6
|
ReviewItemStatus,
|
|
7
7
|
} from '~/types/requirements'
|
|
8
8
|
import { useWorkspaceStore } from '~/stores/workspace'
|
|
9
|
+
// The settlement derivations over one review's findings (`stores/requirements/settlement.ts`):
|
|
10
|
+
// pure, memoised per review object, and re-exported below so every caller keeps reading them off
|
|
11
|
+
// the store.
|
|
12
|
+
import {
|
|
13
|
+
allSettled,
|
|
14
|
+
answeredCount,
|
|
15
|
+
canIncorporate,
|
|
16
|
+
canProceed,
|
|
17
|
+
openCount,
|
|
18
|
+
} from '~/stores/requirements/settlement'
|
|
9
19
|
import { createRecommendationCommands } from '~/stores/requirements/recommendations'
|
|
10
20
|
|
|
11
21
|
/**
|
|
@@ -48,8 +58,21 @@ export const useRequirementsStore = defineStore('requirements', () => {
|
|
|
48
58
|
/** Whether the Requirement Writer is still producing recommendations for a block (a `pending`
|
|
49
59
|
* placeholder exists). Server-derived, so the "Recommending…" state survives the window closing
|
|
50
60
|
* and a page reload — the client-local `recommending` set only covers the request round-trip. */
|
|
61
|
+
/**
|
|
62
|
+
* Blocks whose stored review still carries a `pending` recommendation placeholder, derived once
|
|
63
|
+
* per change to `reviews` rather than per call. {@link backgroundStage} asks this on the per-CARD
|
|
64
|
+
* path, so as a function it re-scanned one review's recommendation list for every card on the
|
|
65
|
+
* board on every event.
|
|
66
|
+
*/
|
|
67
|
+
const blocksAwaitingRecommendations = computed(() => {
|
|
68
|
+
const blocks = new Set<string>()
|
|
69
|
+
for (const [blockId, review] of Object.entries(reviews.value)) {
|
|
70
|
+
if ((review?.recommendations ?? []).some((r) => r.status === 'pending')) blocks.add(blockId)
|
|
71
|
+
}
|
|
72
|
+
return blocks
|
|
73
|
+
})
|
|
51
74
|
function hasPendingRecommendations(blockId: string): boolean {
|
|
52
|
-
return
|
|
75
|
+
return blocksAwaitingRecommendations.value.has(blockId)
|
|
53
76
|
}
|
|
54
77
|
/**
|
|
55
78
|
* The async background stage a block's review is in, or null. While the driver folds the
|
|
@@ -73,27 +96,6 @@ export const useRequirementsStore = defineStore('requirements', () => {
|
|
|
73
96
|
return incorporating.value.has(reviewId)
|
|
74
97
|
}
|
|
75
98
|
|
|
76
|
-
/** Findings still needing a human (status `open`). */
|
|
77
|
-
function openCount(review: RequirementReview): number {
|
|
78
|
-
return review.items.filter((i) => i.status === 'open').length
|
|
79
|
-
}
|
|
80
|
-
/** Findings the human answered (a reply recorded), which the companion folds in. */
|
|
81
|
-
function answeredCount(review: RequirementReview): number {
|
|
82
|
-
return review.items.filter((i) => i.status === 'answered' || i.status === 'resolved').length
|
|
83
|
-
}
|
|
84
|
-
/** Every finding is settled (answered or dismissed) — none still open. */
|
|
85
|
-
function allSettled(review: RequirementReview): boolean {
|
|
86
|
-
return openCount(review) === 0
|
|
87
|
-
}
|
|
88
|
-
/** Incorporation is possible: all findings settled AND at least one was answered. */
|
|
89
|
-
function canIncorporate(review: RequirementReview): boolean {
|
|
90
|
-
return allSettled(review) && answeredCount(review) > 0
|
|
91
|
-
}
|
|
92
|
-
/** Proceed (skip the companion) is possible: all findings settled but none answered. */
|
|
93
|
-
function canProceed(review: RequirementReview): boolean {
|
|
94
|
-
return allSettled(review) && answeredCount(review) === 0
|
|
95
|
-
}
|
|
96
|
-
|
|
97
99
|
function store(review: RequirementReview) {
|
|
98
100
|
reviews.value = { ...reviews.value, [review.blockId]: review }
|
|
99
101
|
}
|
|
@@ -16,7 +16,7 @@ function openWith(search: string): void {
|
|
|
16
16
|
|
|
17
17
|
const K3S_LINK =
|
|
18
18
|
'?infraSetup=local-k3s&label=Local+k3s&apiServerUrl=https%3A%2F%2F127.0.0.1%3A6443' +
|
|
19
|
-
'&namespaceTemplate=cf-env
|
|
19
|
+
'&namespaceTemplate=cf-env-pr%7B%7BpullNumber%7D%7D&hostTemplate=%7B%7Bnamespace%7D%7D.127.0.0.1.nip.io' +
|
|
20
20
|
'&scheme=http&insecureSkipTlsVerify=1'
|
|
21
21
|
|
|
22
22
|
/** The link a cluster published on a NON-default host port produces. */
|
|
@@ -25,7 +25,7 @@ const CUSTOM_PORT_LINK = `${K3S_LINK}&ingressPort=18080`
|
|
|
25
25
|
/** The link the CLI emits when it could NOT establish that the cluster serves ingress URLs. */
|
|
26
26
|
const NO_INGRESS_LINK =
|
|
27
27
|
'?infraSetup=local-k3s&label=Local+k3s&apiServerUrl=https%3A%2F%2F127.0.0.1%3A6443' +
|
|
28
|
-
'&namespaceTemplate=cf-env
|
|
28
|
+
'&namespaceTemplate=cf-env-pr%7B%7BpullNumber%7D%7D&insecureSkipTlsVerify=1'
|
|
29
29
|
|
|
30
30
|
describe('consumeK3sSetupDeepLink', () => {
|
|
31
31
|
beforeEach(() => {
|
|
@@ -45,8 +45,8 @@ describe('consumeK3sSetupDeepLink', () => {
|
|
|
45
45
|
expect(ui.k3sSetupPrefill.value).toEqual({
|
|
46
46
|
label: 'Local k3s',
|
|
47
47
|
apiServerUrl: 'https://127.0.0.1:6443',
|
|
48
|
-
namespaceTemplate: 'cf-env-{{pullNumber}}',
|
|
49
|
-
hostTemplate: '{{
|
|
48
|
+
namespaceTemplate: 'cf-env-pr{{pullNumber}}',
|
|
49
|
+
hostTemplate: '{{namespace}}.127.0.0.1.nip.io',
|
|
50
50
|
ingressPort: '',
|
|
51
51
|
urlScheme: 'http',
|
|
52
52
|
insecureSkipTlsVerify: true,
|
|
@@ -61,7 +61,7 @@ describe('consumeK3sSetupDeepLink', () => {
|
|
|
61
61
|
ui.consumeK3sSetupDeepLink()
|
|
62
62
|
|
|
63
63
|
expect(ui.k3sSetupPrefill.value?.ingressPort).toBe('18080')
|
|
64
|
-
expect(ui.k3sSetupPrefill.value?.hostTemplate).toBe('{{
|
|
64
|
+
expect(ui.k3sSetupPrefill.value?.hostTemplate).toBe('{{namespace}}.127.0.0.1.nip.io')
|
|
65
65
|
})
|
|
66
66
|
|
|
67
67
|
it('strips the ingress-port param too, so a reload does not re-seed it', () => {
|
|
@@ -11,6 +11,8 @@ import { useExecutionStore } from '~/stores/execution'
|
|
|
11
11
|
import { useFragmentsStore } from '~/stores/fragments'
|
|
12
12
|
import { useGitHubStore } from '~/stores/github'
|
|
13
13
|
import { useInitiativesStore } from '~/stores/initiative'
|
|
14
|
+
import { useKaizenStore } from '~/stores/kaizen'
|
|
15
|
+
import { useObservabilityStore } from '~/stores/observability'
|
|
14
16
|
import { useModelPresetsStore } from '~/stores/modelPresets'
|
|
15
17
|
import { useConsensusGroupsStore } from '~/stores/consensusGroups'
|
|
16
18
|
import { useNotificationsStore } from '~/stores/notifications'
|
|
@@ -43,6 +45,15 @@ export function resetPerBoardCaches() {
|
|
|
43
45
|
useGitHubStore().reset()
|
|
44
46
|
useInitiativesStore().reset()
|
|
45
47
|
useDocInterviewStore().reset()
|
|
48
|
+
// The per-RUN observability + Kaizen caches. An execution id belongs to the board that owns it
|
|
49
|
+
// and neither store is part of the snapshot, so nothing else ever evicted a key: a session that
|
|
50
|
+
// visited several boards kept every run it had ever opened a panel on.
|
|
51
|
+
useObservabilityStore().reset()
|
|
52
|
+
useKaizenStore().reset()
|
|
53
|
+
// The whole-run reads behind the step-detail overlays. The runs themselves ride the snapshot
|
|
54
|
+
// (`hydrate` replaces them), but the pending/failed marks and the requests still in flight are
|
|
55
|
+
// keyed by run ids the switched-to board does not have.
|
|
56
|
+
useExecutionStore().resetFullReads()
|
|
46
57
|
// The fragment picker catalog is per-board (the merged tenant catalog), so drop
|
|
47
58
|
// it too — the next inspector open re-fetches it for the switched-to board rather
|
|
48
59
|
// than showing the previous board's (or a raw-id placeholder for) fragments.
|
|
@@ -176,8 +176,21 @@ describe('refresh funnel', () => {
|
|
|
176
176
|
* the funnel holding a fetch that never settles and every later caller queued behind it forever.
|
|
177
177
|
*/
|
|
178
178
|
describe('deadline', () => {
|
|
179
|
+
/**
|
|
180
|
+
* The deadline is per FUNNEL, so a test that both times a fetch out AND then drives a second
|
|
181
|
+
* one to completion needs a value that satisfies both halves. The first half is satisfied by
|
|
182
|
+
* any value (its fetch never settles, so the timer always wins in the end, it just waits that
|
|
183
|
+
* long); the second is satisfied only while every turn AFTER the timeout fits inside the same
|
|
184
|
+
* budget. Sized at 5ms that budget was two macrotask turns plus assertions, which a loaded CI
|
|
185
|
+
* runner overruns: the recovery fetch timed out instead, the test failed on its own deadline
|
|
186
|
+
* and the abandoned promise surfaced as an unhandled rejection. So this is deliberately
|
|
187
|
+
* generous and must NOT be tightened for speed: it costs one wait, and what it buys is a
|
|
188
|
+
* timing assumption the runner cannot break.
|
|
189
|
+
*/
|
|
190
|
+
const GENEROUS_DEADLINE_MS = 250
|
|
191
|
+
|
|
179
192
|
it('fails the caller, aborts the request and frees the slot when a fetch never settles', async () => {
|
|
180
|
-
const h = harness('ws1',
|
|
193
|
+
const h = harness('ws1', GENEROUS_DEADLINE_MS)
|
|
181
194
|
const stalled = expect(h.funnel.refresh()).rejects.toThrow(/timed out/)
|
|
182
195
|
await stalled
|
|
183
196
|
expect(h.aborted()).toBe(true)
|
|
@@ -193,6 +206,7 @@ describe('refresh funnel', () => {
|
|
|
193
206
|
expect(h.applied()).toEqual(['recovered'])
|
|
194
207
|
})
|
|
195
208
|
|
|
209
|
+
// Nothing here outlives the timeout, so this one can stay fast.
|
|
196
210
|
it('does not count a timed-out fetch as coverage', async () => {
|
|
197
211
|
const h = harness('ws1', 5)
|
|
198
212
|
const mark = h.funnel.refreshMark()
|
package/app/types/execution.ts
CHANGED
package/i18n/locales/de.json
CHANGED
|
@@ -2291,6 +2291,10 @@
|
|
|
2291
2291
|
"dryRun": "Probelauf: nichts zusammenführen",
|
|
2292
2292
|
"dryRunForced": "Probelauf: Läufe deiner Rolle werden hier nie zusammengeführt",
|
|
2293
2293
|
"dryRunHint": "Dieser Lauf öffnet einen Pull Request und führt nichts zusammen."
|
|
2294
|
+
},
|
|
2295
|
+
"runDetail": {
|
|
2296
|
+
"loading": "Vollständiger Lauf wird geladen…",
|
|
2297
|
+
"loadFailed": "Vollständiger Lauf konnte nicht geladen werden: {reason}"
|
|
2294
2298
|
}
|
|
2295
2299
|
},
|
|
2296
2300
|
"layout": {
|
|
@@ -6474,16 +6478,21 @@
|
|
|
6474
6478
|
"suggested": "Vorgeschlagen:",
|
|
6475
6479
|
"viewIssue": "Issue ansehen",
|
|
6476
6480
|
"yourAnswer": "Deine Antwort:",
|
|
6477
|
-
"
|
|
6481
|
+
"yourRuling": "Deine Entscheidung:",
|
|
6482
|
+
"sendBackDropped": "Nie an den Coder gesendet: das Budget für Rückläufe war bereits aufgebraucht.",
|
|
6483
|
+
"answerPlaceholder": "Beantworte diese Frage und sende sie an den Coder zurück oder schließe sie als erledigt ab…",
|
|
6478
6484
|
"status": {
|
|
6479
6485
|
"pending": "Braucht eine Entscheidung",
|
|
6480
6486
|
"filed": "Als Issue eingereicht",
|
|
6481
6487
|
"queued": "An Coder gesendet",
|
|
6482
6488
|
"answered": "Beantwortet",
|
|
6489
|
+
"closed": "Entschieden",
|
|
6483
6490
|
"dismissed": "Verworfen"
|
|
6484
6491
|
},
|
|
6485
6492
|
"actions": {
|
|
6486
6493
|
"answerAndSend": "Antworten & zurücksenden",
|
|
6494
|
+
"answerAndClose": "Antworten & abschließen",
|
|
6495
|
+
"answerAndCloseHint": "Als erledigt festhalten, ohne einen weiteren Coder-Durchlauf zu verbrauchen.",
|
|
6487
6496
|
"dismiss": "Verwerfen",
|
|
6488
6497
|
"fileAsIssue": "Als Issue einreichen",
|
|
6489
6498
|
"sendToCoder": "An Coder senden"
|
package/i18n/locales/en.json
CHANGED
|
@@ -1809,6 +1809,10 @@
|
|
|
1809
1809
|
"dryRun": "Dry run: merge nothing",
|
|
1810
1810
|
"dryRunForced": "Dry run: your role's runs never merge here",
|
|
1811
1811
|
"dryRunHint": "This run opens a pull request and merges nothing."
|
|
1812
|
+
},
|
|
1813
|
+
"runDetail": {
|
|
1814
|
+
"loading": "Loading the full run…",
|
|
1815
|
+
"loadFailed": "Couldn't load the full run: {reason}"
|
|
1812
1816
|
}
|
|
1813
1817
|
},
|
|
1814
1818
|
"observability": {
|
|
@@ -6195,16 +6199,21 @@
|
|
|
6195
6199
|
"suggested": "Suggested:",
|
|
6196
6200
|
"viewIssue": "View issue",
|
|
6197
6201
|
"yourAnswer": "Your answer:",
|
|
6198
|
-
"
|
|
6202
|
+
"yourRuling": "Your ruling:",
|
|
6203
|
+
"sendBackDropped": "Never sent to the Coder: the send-back budget was already spent.",
|
|
6204
|
+
"answerPlaceholder": "Answer this question, then send it back to the Coder or close it as settled…",
|
|
6199
6205
|
"status": {
|
|
6200
6206
|
"pending": "Needs a decision",
|
|
6201
6207
|
"filed": "Filed as issue",
|
|
6202
6208
|
"queued": "Sent to Coder",
|
|
6203
6209
|
"answered": "Answered",
|
|
6210
|
+
"closed": "Ruled on",
|
|
6204
6211
|
"dismissed": "Dismissed"
|
|
6205
6212
|
},
|
|
6206
6213
|
"actions": {
|
|
6207
6214
|
"answerAndSend": "Answer & send back",
|
|
6215
|
+
"answerAndClose": "Answer & close",
|
|
6216
|
+
"answerAndCloseHint": "Record this as settled without spending another Coder pass.",
|
|
6208
6217
|
"dismiss": "Dismiss",
|
|
6209
6218
|
"fileAsIssue": "File as issue",
|
|
6210
6219
|
"sendToCoder": "Send to Coder"
|
package/i18n/locales/es.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "Ejecución de prueba: no fusionar nada",
|
|
1706
1706
|
"dryRunForced": "Ejecución de prueba: las ejecuciones de tu rol nunca se fusionan aquí",
|
|
1707
1707
|
"dryRunHint": "Esta ejecución abre una pull request y no fusiona nada."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Cargando la ejecución completa…",
|
|
1711
|
+
"loadFailed": "No se pudo cargar la ejecución completa: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "Sugerido:",
|
|
5898
5902
|
"viewIssue": "Ver incidencia",
|
|
5899
5903
|
"yourAnswer": "Tu respuesta:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "Tu decisión:",
|
|
5905
|
+
"sendBackDropped": "Nunca se envió al Coder: el presupuesto de reenvíos ya estaba agotado.",
|
|
5906
|
+
"answerPlaceholder": "Responde a esta pregunta y devuélvela al Coder o ciérrala como zanjada…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "Requiere una decisión",
|
|
5903
5909
|
"filed": "Registrado como incidencia",
|
|
5904
5910
|
"queued": "Enviado al Coder",
|
|
5905
5911
|
"answered": "Respondido",
|
|
5912
|
+
"closed": "Resuelto",
|
|
5906
5913
|
"dismissed": "Descartado"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "Responder y devolver",
|
|
5917
|
+
"answerAndClose": "Responder y cerrar",
|
|
5918
|
+
"answerAndCloseHint": "Registrarlo como zanjado sin gastar otra pasada del Coder.",
|
|
5910
5919
|
"dismiss": "Descartar",
|
|
5911
5920
|
"fileAsIssue": "Registrar como incidencia",
|
|
5912
5921
|
"sendToCoder": "Enviar al Coder"
|
package/i18n/locales/fr.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "Exécution à blanc : ne rien fusionner",
|
|
1706
1706
|
"dryRunForced": "Exécution à blanc : les exécutions de votre rôle ne sont jamais fusionnées ici",
|
|
1707
1707
|
"dryRunHint": "Cette exécution ouvre une pull request et ne fusionne rien."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Chargement de l'exécution complète…",
|
|
1711
|
+
"loadFailed": "Impossible de charger l'exécution complète : {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "Suggestion :",
|
|
5898
5902
|
"viewIssue": "Voir le ticket",
|
|
5899
5903
|
"yourAnswer": "Votre réponse :",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "Votre décision :",
|
|
5905
|
+
"sendBackDropped": "Jamais transmis au Coder : le budget de renvois était déjà épuisé.",
|
|
5906
|
+
"answerPlaceholder": "Répondez à cette question, puis renvoyez-la au Coder ou clôturez-la comme réglée…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "Nécessite une décision",
|
|
5903
5909
|
"filed": "Enregistré comme ticket",
|
|
5904
5910
|
"queued": "Envoyé au Coder",
|
|
5905
5911
|
"answered": "Répondu",
|
|
5912
|
+
"closed": "Tranché",
|
|
5906
5913
|
"dismissed": "Rejeté"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "Répondre et renvoyer",
|
|
5917
|
+
"answerAndClose": "Répondre et clore",
|
|
5918
|
+
"answerAndCloseHint": "Enregistrer comme réglé sans dépenser une passe supplémentaire du Coder.",
|
|
5910
5919
|
"dismiss": "Rejeter",
|
|
5911
5920
|
"fileAsIssue": "Enregistrer comme ticket",
|
|
5912
5921
|
"sendToCoder": "Envoyer au Coder"
|
package/i18n/locales/he.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "הרצת יבש: לא למזג דבר",
|
|
1706
1706
|
"dryRunForced": "הרצת יבש: הרצות של התפקיד שלך לעולם אינן ממוזגות כאן",
|
|
1707
1707
|
"dryRunHint": "ההרצה הזו פותחת בקשת משיכה ואינה ממזגת דבר."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "טוען את ההרצה המלאה…",
|
|
1711
|
+
"loadFailed": "לא ניתן לטעון את ההרצה המלאה: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "מוצע:",
|
|
5898
5902
|
"viewIssue": "הצג ניושן",
|
|
5899
5903
|
"yourAnswer": "התשובה שלך:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "ההכרעה שלך:",
|
|
5905
|
+
"sendBackDropped": "מעולם לא נשלח ל-Coder: תקציב ההחזרות כבר אזל.",
|
|
5906
|
+
"answerPlaceholder": "ענה על שאלה זו, ולאחר מכן שלח אותה בחזרה ל-Coder או סגור אותה כמוסדרת…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "דורש החלטה",
|
|
5903
5909
|
"filed": "הוגש כניושן",
|
|
5904
5910
|
"queued": "נשלח ל-Coder",
|
|
5905
5911
|
"answered": "נענה",
|
|
5912
|
+
"closed": "הוכרע",
|
|
5906
5913
|
"dismissed": "נדחה"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "ענה ושלח בחזרה",
|
|
5917
|
+
"answerAndClose": "לענות ולסגור",
|
|
5918
|
+
"answerAndCloseHint": "לתעד כמוסדר בלי לבזבז מעבר נוסף של ה-Coder.",
|
|
5910
5919
|
"dismiss": "דחה",
|
|
5911
5920
|
"fileAsIssue": "הגש כניושן",
|
|
5912
5921
|
"sendToCoder": "שלח ל-Coder"
|
package/i18n/locales/it.json
CHANGED
|
@@ -2291,6 +2291,10 @@
|
|
|
2291
2291
|
"dryRun": "Prova: non unire nulla",
|
|
2292
2292
|
"dryRunForced": "Prova: le esecuzioni del tuo ruolo qui non vengono mai unite",
|
|
2293
2293
|
"dryRunHint": "Questa esecuzione apre una pull request e non unisce nulla."
|
|
2294
|
+
},
|
|
2295
|
+
"runDetail": {
|
|
2296
|
+
"loading": "Caricamento dell'esecuzione completa…",
|
|
2297
|
+
"loadFailed": "Impossibile caricare l'esecuzione completa: {reason}"
|
|
2294
2298
|
}
|
|
2295
2299
|
},
|
|
2296
2300
|
"layout": {
|
|
@@ -6474,16 +6478,21 @@
|
|
|
6474
6478
|
"suggested": "Suggerito:",
|
|
6475
6479
|
"viewIssue": "Visualizza issue",
|
|
6476
6480
|
"yourAnswer": "La tua risposta:",
|
|
6477
|
-
"
|
|
6481
|
+
"yourRuling": "La tua decisione:",
|
|
6482
|
+
"sendBackDropped": "Mai inviato al Coder: il budget dei rinvii era già esaurito.",
|
|
6483
|
+
"answerPlaceholder": "Rispondi a questa domanda, poi inviala al Coder o chiudila come risolta…",
|
|
6478
6484
|
"status": {
|
|
6479
6485
|
"pending": "Richiede una decisione",
|
|
6480
6486
|
"filed": "Registrato come issue",
|
|
6481
6487
|
"queued": "Inviato al Coder",
|
|
6482
6488
|
"answered": "Risposto",
|
|
6489
|
+
"closed": "Deciso",
|
|
6483
6490
|
"dismissed": "Ignorato"
|
|
6484
6491
|
},
|
|
6485
6492
|
"actions": {
|
|
6486
6493
|
"answerAndSend": "Rispondi e invia",
|
|
6494
|
+
"answerAndClose": "Rispondi e chiudi",
|
|
6495
|
+
"answerAndCloseHint": "Registralo come risolto senza spendere un altro passaggio del Coder.",
|
|
6487
6496
|
"dismiss": "Ignora",
|
|
6488
6497
|
"fileAsIssue": "Registra come issue",
|
|
6489
6498
|
"sendToCoder": "Invia al Coder"
|
package/i18n/locales/ja.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "ドライラン: マージしない",
|
|
1706
1706
|
"dryRunForced": "ドライラン: あなたのロールの実行はここではマージされません",
|
|
1707
1707
|
"dryRunHint": "この実行はプルリクエストを開きますが、マージは行いません。"
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "実行の全体を読み込んでいます…",
|
|
1711
|
+
"loadFailed": "実行の全体を読み込めませんでした: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "提案:",
|
|
5898
5902
|
"viewIssue": "issueを表示",
|
|
5899
5903
|
"yourAnswer": "あなたの回答:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "あなたの裁定:",
|
|
5905
|
+
"sendBackDropped": "Coderには送信されませんでした: 差し戻しの予算をすでに使い切っていました。",
|
|
5906
|
+
"answerPlaceholder": "この質問に回答し、Coderに返送するか、決着済みとして確定してください…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "判断が必要",
|
|
5903
5909
|
"filed": "issueとして登録済み",
|
|
5904
5910
|
"queued": "Coderに送信済み",
|
|
5905
5911
|
"answered": "回答済み",
|
|
5912
|
+
"closed": "裁定済み",
|
|
5906
5913
|
"dismissed": "却下済み"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "回答して返送",
|
|
5917
|
+
"answerAndClose": "回答して確定",
|
|
5918
|
+
"answerAndCloseHint": "Coderの再実行を消費せずに決着済みとして記録します。",
|
|
5910
5919
|
"dismiss": "却下",
|
|
5911
5920
|
"fileAsIssue": "issueとして登録",
|
|
5912
5921
|
"sendToCoder": "Coderに送信"
|
package/i18n/locales/pl.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "Uruchomienie próbne: nic nie scalaj",
|
|
1706
1706
|
"dryRunForced": "Uruchomienie próbne: uruchomienia twojej roli nigdy nie są tu scalane",
|
|
1707
1707
|
"dryRunHint": "To uruchomienie otwiera pull request i niczego nie scala."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Wczytywanie pełnego przebiegu…",
|
|
1711
|
+
"loadFailed": "Nie udało się wczytać pełnego przebiegu: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "Sugerowane:",
|
|
5898
5902
|
"viewIssue": "Zobacz zgłoszenie",
|
|
5899
5903
|
"yourAnswer": "Twoja odpowiedź:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "Twoje rozstrzygnięcie:",
|
|
5905
|
+
"sendBackDropped": "Nigdy nie trafiło do Codera: budżet zawrotek był już wyczerpany.",
|
|
5906
|
+
"answerPlaceholder": "Odpowiedz na to pytanie, a następnie odeślij je do Codera albo zamknij jako rozstrzygnięte…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "Wymaga decyzji",
|
|
5903
5909
|
"filed": "Zgłoszone jako zgłoszenie",
|
|
5904
5910
|
"queued": "Wysłane do Codera",
|
|
5905
5911
|
"answered": "Odpowiedziano",
|
|
5912
|
+
"closed": "Rozstrzygnięte",
|
|
5906
5913
|
"dismissed": "Odrzucone"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "Odpowiedz i odeślij",
|
|
5917
|
+
"answerAndClose": "Odpowiedz i zamknij",
|
|
5918
|
+
"answerAndCloseHint": "Zapisz jako rozstrzygnięte bez zużywania kolejnego przebiegu Codera.",
|
|
5910
5919
|
"dismiss": "Odrzuć",
|
|
5911
5920
|
"fileAsIssue": "Zgłoś jako zgłoszenie",
|
|
5912
5921
|
"sendToCoder": "Wyślij do Codera"
|
package/i18n/locales/tr.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "Prova çalışması: hiçbir şeyi birleştirme",
|
|
1706
1706
|
"dryRunForced": "Prova çalışması: rolünün başlattığı çalıştırmalar burada asla birleştirilmez",
|
|
1707
1707
|
"dryRunHint": "Bu çalıştırma bir pull request açar ve hiçbir şeyi birleştirmez."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Çalıştırmanın tamamı yükleniyor…",
|
|
1711
|
+
"loadFailed": "Çalıştırmanın tamamı yüklenemedi: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "Önerilen:",
|
|
5898
5902
|
"viewIssue": "Sorunu görüntüle",
|
|
5899
5903
|
"yourAnswer": "Cevabınız:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "Kararınız:",
|
|
5905
|
+
"sendBackDropped": "Coder'a hiç gönderilmedi: geri gönderim bütçesi çoktan tükenmişti.",
|
|
5906
|
+
"answerPlaceholder": "Bu soruyu cevaplayın, ardından Coder'a geri gönderin veya çözülmüş olarak kapatın…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "Karar gerekiyor",
|
|
5903
5909
|
"filed": "Sorun olarak kaydedildi",
|
|
5904
5910
|
"queued": "Coder'a gönderildi",
|
|
5905
5911
|
"answered": "Cevaplandı",
|
|
5912
|
+
"closed": "Karara bağlandı",
|
|
5906
5913
|
"dismissed": "Reddedildi"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "Cevapla ve geri gönder",
|
|
5917
|
+
"answerAndClose": "Yanıtla ve kapat",
|
|
5918
|
+
"answerAndCloseHint": "Yeni bir Coder turu harcamadan çözülmüş olarak kaydet.",
|
|
5910
5919
|
"dismiss": "Reddet",
|
|
5911
5920
|
"fileAsIssue": "Sorun olarak kaydet",
|
|
5912
5921
|
"sendToCoder": "Coder'a gönder"
|
package/i18n/locales/uk.json
CHANGED
|
@@ -1705,6 +1705,10 @@
|
|
|
1705
1705
|
"dryRun": "Пробний запуск: нічого не зливати",
|
|
1706
1706
|
"dryRunForced": "Пробний запуск: запуски твоєї ролі тут ніколи не зливаються",
|
|
1707
1707
|
"dryRunHint": "Цей запуск відкриває pull request і нічого не зливає."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Завантаження повного запуску…",
|
|
1711
|
+
"loadFailed": "Не вдалося завантажити повний запуск: {reason}"
|
|
1708
1712
|
}
|
|
1709
1713
|
},
|
|
1710
1714
|
"observability": {
|
|
@@ -5897,16 +5901,21 @@
|
|
|
5897
5901
|
"suggested": "Пропозиція:",
|
|
5898
5902
|
"viewIssue": "Переглянути тікет",
|
|
5899
5903
|
"yourAnswer": "Ваша відповідь:",
|
|
5900
|
-
"
|
|
5904
|
+
"yourRuling": "Ваше рішення:",
|
|
5905
|
+
"sendBackDropped": "Ніколи не надіслано до Coder: бюджет повернень уже вичерпано.",
|
|
5906
|
+
"answerPlaceholder": "Дайте відповідь на це запитання, а потім поверніть його до Coder або закрийте як вирішене…",
|
|
5901
5907
|
"status": {
|
|
5902
5908
|
"pending": "Потребує рішення",
|
|
5903
5909
|
"filed": "Зареєстровано як тікет",
|
|
5904
5910
|
"queued": "Надіслано Coder",
|
|
5905
5911
|
"answered": "Відповіли",
|
|
5912
|
+
"closed": "Вирішено",
|
|
5906
5913
|
"dismissed": "Відхилено"
|
|
5907
5914
|
},
|
|
5908
5915
|
"actions": {
|
|
5909
5916
|
"answerAndSend": "Відповісти й повернути",
|
|
5917
|
+
"answerAndClose": "Відповісти й закрити",
|
|
5918
|
+
"answerAndCloseHint": "Записати як вирішене, не витрачаючи ще один прохід Coder.",
|
|
5910
5919
|
"dismiss": "Відхилити",
|
|
5911
5920
|
"fileAsIssue": "Зареєструвати як тікет",
|
|
5912
5921
|
"sendToCoder": "Надіслати Coder"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.285.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",
|
|
@@ -18,13 +18,14 @@
|
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
+
"@cat-factory/contracts": "0.327.0",
|
|
21
22
|
"@modular-frontend/core": "0.6.0",
|
|
22
23
|
"@modular-vue/core": "^1.5.0",
|
|
23
24
|
"@modular-vue/journeys": "^1.4.0",
|
|
24
25
|
"@modular-vue/nuxt": "^0.4.1",
|
|
25
26
|
"@modular-vue/runtime": "^1.4.1",
|
|
26
27
|
"@modular-vue/vue": "^1.4.1",
|
|
27
|
-
"@nuxt/ui": "^4.
|
|
28
|
+
"@nuxt/ui": "^4.11.0",
|
|
28
29
|
"@nuxtjs/i18n": "^10.6.0",
|
|
29
30
|
"@pinia/nuxt": "^1.0.2",
|
|
30
31
|
"@toad-contracts/core": "0.4.0",
|
|
@@ -39,18 +40,17 @@
|
|
|
39
40
|
"pinia-plugin-persistedstate": "^4.7.1",
|
|
40
41
|
"valibot": "^1.4.2",
|
|
41
42
|
"vue": "3.5.41",
|
|
42
|
-
"wretch": "^3.0.9"
|
|
43
|
-
"@cat-factory/contracts": "0.325.0"
|
|
43
|
+
"wretch": "^3.0.9"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|
|
47
|
-
"happy-dom": "^20.11.
|
|
47
|
+
"happy-dom": "^20.11.6",
|
|
48
48
|
"msw": "^2.15.0",
|
|
49
49
|
"nuxt": "^4.5.2",
|
|
50
50
|
"typescript": "^6.0.3",
|
|
51
51
|
"vitest": "^4.1.11",
|
|
52
52
|
"vue-i18n-extract": "^2.0.7",
|
|
53
|
-
"vue-tsc": "^3.3.
|
|
53
|
+
"vue-tsc": "^3.3.11"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"nuxt": "^4.5.2"
|