@cat-factory/app 0.144.1 → 0.145.2
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/board/TaskDependencyEdges.vue +37 -73
- package/app/components/brainstorm/BrainstormWindow.vue +2 -7
- package/app/components/clarity/ClarityReviewWindow.vue +2 -2
- package/app/components/consensus/ConsensusSessionWindow.vue +2 -2
- package/app/components/docs/DocInterviewWindow.vue +1 -1
- package/app/components/forkDecision/ForkDecisionWindow.vue +1 -1
- package/app/components/initiative/InitiativePlanningWindow.vue +1 -1
- package/app/components/initiative/InitiativeTrackerWindow.vue +1 -1
- package/app/components/observability/StepMetricsBar.vue +8 -1
- package/app/components/panels/ObservabilityPanel.vue +20 -3
- package/app/components/panels/inspector/TaskExecution.vue +23 -0
- package/app/components/pipeline/PipelineProgress.vue +33 -1
- package/app/components/prReview/PrReviewWindow.vue +2 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +2 -2
- package/app/components/spec/ServiceSpecWindow.vue +2 -2
- package/app/composables/useResultView.ts +26 -3
- package/app/stores/pipelines.ts +50 -19
- package/app/stores/ui/modals.ts +599 -532
- package/app/stores/ui/resultViews.ts +8 -3
- package/app/stores/ui.dispatch.spec.ts +99 -0
- package/app/utils/catalog.spec.ts +1 -0
- package/app/utils/catalog.ts +18 -0
- package/app/utils/observability.spec.ts +28 -0
- package/app/utils/observability.ts +28 -0
- package/i18n/locales/de.json +9 -4
- package/i18n/locales/en.json +9 -4
- package/i18n/locales/es.json +9 -4
- package/i18n/locales/fr.json +9 -4
- package/i18n/locales/he.json +9 -4
- package/i18n/locales/it.json +9 -4
- package/i18n/locales/ja.json +9 -4
- package/i18n/locales/pl.json +9 -4
- package/i18n/locales/tr.json +9 -4
- package/i18n/locales/uk.json +9 -4
- package/package.json +1 -1
|
@@ -70,11 +70,16 @@ export function createUiResultViews() {
|
|
|
70
70
|
// A step that actually ran the consensus mechanism opens the dedicated Consensus
|
|
71
71
|
// Session window, regardless of its kind's normal result view — consensus is an
|
|
72
72
|
// execution MODE on a kind, not a kind, so it can't be a static archetype `resultView`.
|
|
73
|
+
// A step carrying a PR deep-review parks with BOTH a pending approval and
|
|
74
|
+
// `prReview.status`, so the generic approval button funnels here; route it to the
|
|
75
|
+
// findings-selection window regardless of catalog/manifest state (mirrors consensus).
|
|
73
76
|
const view = step?.consensus?.enabled
|
|
74
77
|
? 'consensus-session'
|
|
75
|
-
: step
|
|
76
|
-
?
|
|
77
|
-
:
|
|
78
|
+
: step?.prReview
|
|
79
|
+
? 'pr-review'
|
|
80
|
+
: step
|
|
81
|
+
? agentKindMeta(step.agentKind).resultView
|
|
82
|
+
: undefined
|
|
78
83
|
if (view && instance) {
|
|
79
84
|
// The brainstorm window is shared by both stages; carry which one from the step's kind.
|
|
80
85
|
const stage =
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import { useExecutionStore } from '~/stores/execution'
|
|
3
|
+
import { useUiStore } from '~/stores/ui'
|
|
4
|
+
import type { ExecutionInstance } from '~/types/domain'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Pins the `dispatchStepView` routing seam (the single dispatch every board/inspector/rail
|
|
8
|
+
* entry point uses). Its subtle case is the parked `pr-reviewer` step: it carries BOTH a
|
|
9
|
+
* pending approval and `prReview.status`, so a naive route sends the generic approval button
|
|
10
|
+
* into the prose panel (the #1261 bug). These assertions lock in that a step carrying
|
|
11
|
+
* `prReview` opens the dedicated findings window regardless of catalog/manifest state, and
|
|
12
|
+
* that the consensus MODE still wins over it.
|
|
13
|
+
*/
|
|
14
|
+
function instance(id: string, blockId: string, steps: unknown[]): ExecutionInstance {
|
|
15
|
+
return { id, blockId, steps } as unknown as ExecutionInstance
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe('dispatchStepView routing', () => {
|
|
19
|
+
let ui: ReturnType<typeof useUiStore>
|
|
20
|
+
let execution: ReturnType<typeof useExecutionStore>
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
ui = useUiStore()
|
|
23
|
+
execution = useExecutionStore()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('routes a step carrying prReview to the dedicated pr-review window', () => {
|
|
27
|
+
execution.hydrate(
|
|
28
|
+
[
|
|
29
|
+
instance('e1', 'b1', [
|
|
30
|
+
{
|
|
31
|
+
agentKind: 'pr-reviewer',
|
|
32
|
+
approval: { id: 'a1', status: 'pending' },
|
|
33
|
+
prReview: { status: 'awaiting_selection' },
|
|
34
|
+
},
|
|
35
|
+
]),
|
|
36
|
+
],
|
|
37
|
+
'ws1',
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
ui.openStepDetail('e1', 0)
|
|
41
|
+
|
|
42
|
+
expect(ui.resultView).toEqual({
|
|
43
|
+
view: 'pr-review',
|
|
44
|
+
blockId: 'b1',
|
|
45
|
+
instanceId: 'e1',
|
|
46
|
+
stepIndex: 0,
|
|
47
|
+
})
|
|
48
|
+
// The generic prose panel is NOT opened — routing bypassed it.
|
|
49
|
+
expect(ui.stepDetail).toBeNull()
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it('opening the pending approval on a pr-reviewer step still lands on pr-review', () => {
|
|
53
|
+
execution.hydrate(
|
|
54
|
+
[
|
|
55
|
+
instance('e1', 'b1', [
|
|
56
|
+
{
|
|
57
|
+
agentKind: 'pr-reviewer',
|
|
58
|
+
approval: { id: 'a1', status: 'pending' },
|
|
59
|
+
prReview: { status: 'awaiting_selection' },
|
|
60
|
+
},
|
|
61
|
+
]),
|
|
62
|
+
],
|
|
63
|
+
'ws1',
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
// Every surface's generic approval button funnels through openApprovalDetail → dispatch.
|
|
67
|
+
ui.openApprovalDetail('e1', 'a1')
|
|
68
|
+
|
|
69
|
+
expect(ui.resultView?.view).toBe('pr-review')
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('a consensus run wins over prReview (mode precedence)', () => {
|
|
73
|
+
execution.hydrate(
|
|
74
|
+
[
|
|
75
|
+
instance('e1', 'b1', [
|
|
76
|
+
{
|
|
77
|
+
agentKind: 'pr-reviewer',
|
|
78
|
+
consensus: { enabled: true },
|
|
79
|
+
prReview: { status: 'awaiting_selection' },
|
|
80
|
+
},
|
|
81
|
+
]),
|
|
82
|
+
],
|
|
83
|
+
'ws1',
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
ui.openStepDetail('e1', 0)
|
|
87
|
+
|
|
88
|
+
expect(ui.resultView?.view).toBe('consensus-session')
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('a plain step with no bespoke view falls back to the generic step-detail panel', () => {
|
|
92
|
+
execution.hydrate([instance('e1', 'b1', [{ agentKind: 'coder' }])], 'ws1')
|
|
93
|
+
|
|
94
|
+
ui.openStepDetail('e1', 0)
|
|
95
|
+
|
|
96
|
+
expect(ui.resultView).toBeNull()
|
|
97
|
+
expect(ui.stepDetail).toEqual({ instanceId: 'e1', stepIndex: 0 })
|
|
98
|
+
})
|
|
99
|
+
})
|
package/app/utils/catalog.ts
CHANGED
|
@@ -65,6 +65,24 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
|
|
|
65
65
|
'Read-only, multi-repo codebase investigation that traces the bug to its root cause and decides whether the report is fixable as-is or needs the reporter to clarify (no code changes).',
|
|
66
66
|
resultView: 'generic-structured',
|
|
67
67
|
},
|
|
68
|
+
{
|
|
69
|
+
// A read-only, token-bounded deep review of an EXISTING open pull request (the `pl_review`
|
|
70
|
+
// pipeline's single step). Registered on the backend so it also arrives via the workspace
|
|
71
|
+
// manifest, but modelled statically here so `agentKindMeta('pr-reviewer').resultView`
|
|
72
|
+
// resolves to the findings-selection window on every surface — not just when the manifest
|
|
73
|
+
// is hydrated. Mirrors the backend `presentation` in `pr-reviewer.ts`.
|
|
74
|
+
kind: 'pr-reviewer',
|
|
75
|
+
label: 'PR Reviewer',
|
|
76
|
+
icon: 'i-lucide-clipboard-check',
|
|
77
|
+
color: '#6366f1',
|
|
78
|
+
category: 'review',
|
|
79
|
+
description:
|
|
80
|
+
'Deep, token-bounded review of an open pull request: slices a large diff into cohesive ' +
|
|
81
|
+
'chunks, reviews each, and returns prioritized findings.',
|
|
82
|
+
// Opens the dedicated PR-review window (findings grouped by slice + multi-select →
|
|
83
|
+
// resolve) instead of the generic read-only JSON viewer. See PrReviewWindow.vue.
|
|
84
|
+
resultView: 'pr-review',
|
|
85
|
+
},
|
|
68
86
|
{
|
|
69
87
|
// A timeboxed read-only research/investigation agent. Its structured findings open in the
|
|
70
88
|
// shared generic viewer; the findings document is committed by a backend post-op (delivered
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { freshPromptTokens } from './observability'
|
|
3
|
+
|
|
4
|
+
describe('freshPromptTokens', () => {
|
|
5
|
+
it('subtracts the cached prefix from the prompt-token sum', () => {
|
|
6
|
+
expect(freshPromptTokens(1000, 300)).toBe(700)
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('reduces a near-fully-cached agentic run to its tiny fresh input (inclusive shape)', () => {
|
|
10
|
+
// The 31M-cache-read shape from the investigation on the INCLUSIVE shape (subscription
|
|
11
|
+
// harness / OpenAI-style): prompt tokens INCLUDE the cache reads, so subtracting the cached
|
|
12
|
+
// subset leaves the few-hundred-token fresh figure, not tens of millions.
|
|
13
|
+
expect(freshPromptTokens(31_100_498, 31_099_813)).toBe(685)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('treats promptTokens as already-fresh when cached exceeds it (Anthropic separate shape)', () => {
|
|
17
|
+
// Anthropic via the LLM proxy reports cache reads SEPARATELY, so promptTokens is fresh-only
|
|
18
|
+
// and cachedPromptTokens can far exceed it. The fresh figure is promptTokens itself — NOT 0
|
|
19
|
+
// (the old subtract-and-clamp collapsed real fresh input to zero on this shape).
|
|
20
|
+
expect(freshPromptTokens(685, 31_099_813)).toBe(685)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('never returns negative, and treats a fully-cached inclusive rollup as 0 fresh', () => {
|
|
24
|
+
expect(freshPromptTokens(500, 500)).toBe(0)
|
|
25
|
+
// cached > prompt ⇒ separate shape ⇒ fresh = prompt (never a negative number).
|
|
26
|
+
expect(freshPromptTokens(500, 600)).toBe(500)
|
|
27
|
+
})
|
|
28
|
+
})
|
|
@@ -11,6 +11,34 @@ export function formatTokens(n: number): string {
|
|
|
11
11
|
return `${(n / 1_000_000).toFixed(1)}M`
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* FRESH (uncached) prompt tokens: the input tokens actually processed this call/rollup after
|
|
16
|
+
* excluding the prefix served from the provider's cache. A long agentic run re-sends its whole
|
|
17
|
+
* growing transcript every turn, so on the "inclusive" shape the raw `promptTokens` sum is
|
|
18
|
+
* dominated by cache reads (often >99%) — showing THAT as "tokens burned" reads as a blow-up
|
|
19
|
+
* when almost nothing fresh was processed. This surfaces the fresh figure alongside cached.
|
|
20
|
+
*
|
|
21
|
+
* `cachedPromptTokens` has PROVIDER-DEPENDENT semantics (see the field docs on `stepMetricsSchema`
|
|
22
|
+
* / `llmCallMetricSchema`), so we can't blindly subtract:
|
|
23
|
+
* - Inclusive shape (OpenAI/DeepSeek, and the subscription-CLI harness, which folds cache into
|
|
24
|
+
* `promptTokens`): cached is a SUBSET of prompt ⇒ fresh = prompt − cached.
|
|
25
|
+
* - Separate shape (Anthropic via the LLM proxy): cache reads are reported SEPARATELY and
|
|
26
|
+
* `promptTokens` is ALREADY fresh-only, so cached can EXCEED prompt. Subtracting there would
|
|
27
|
+
* wrongly collapse a real fresh input to 0 — when cached ≥ prompt, `promptTokens` itself IS
|
|
28
|
+
* the fresh figure.
|
|
29
|
+
*
|
|
30
|
+
* NOTE: with only these two aggregates we cannot distinguish the separate shape while cached is
|
|
31
|
+
* still ≤ prompt (there the subtraction under-counts fresh by the cache-read amount). A fully
|
|
32
|
+
* exact split needs the wire contract to carry cache-read vs cache-write distinctly at the
|
|
33
|
+
* source; this heuristic fixes the dominant (cached ≫ prompt) case and never returns negative.
|
|
34
|
+
*/
|
|
35
|
+
export function freshPromptTokens(promptTokens: number, cachedPromptTokens: number): number {
|
|
36
|
+
// Separate shape: promptTokens is already fresh-only (cache reads counted separately).
|
|
37
|
+
if (cachedPromptTokens > promptTokens) return promptTokens
|
|
38
|
+
// Inclusive shape: cached is a subset of prompt.
|
|
39
|
+
return promptTokens - cachedPromptTokens
|
|
40
|
+
}
|
|
41
|
+
|
|
14
42
|
/** Compact duration: 850 → "850ms", 1500 → "1.5s", 90_000 → "1m 30s". */
|
|
15
43
|
export function formatMs(ms: number): string {
|
|
16
44
|
if (ms < 1000) return `${Math.round(ms)}ms`
|
package/i18n/locales/de.json
CHANGED
|
@@ -1235,7 +1235,8 @@
|
|
|
1235
1235
|
"open": "Öffnen",
|
|
1236
1236
|
"mergePr": "PR mergen",
|
|
1237
1237
|
"chooseApproach": "Ansatz wählen",
|
|
1238
|
-
"elapsedTooltip": "Verstrichene Zeit für diesen Schritt"
|
|
1238
|
+
"elapsedTooltip": "Verstrichene Zeit für diesen Schritt",
|
|
1239
|
+
"reviewFindings": "Befunde prüfen"
|
|
1239
1240
|
},
|
|
1240
1241
|
"structure": {
|
|
1241
1242
|
"title": "Struktur",
|
|
@@ -2748,11 +2749,12 @@
|
|
|
2748
2749
|
"tokensInOut": "Tokens (ein / aus)",
|
|
2749
2750
|
"transportOverhead": "Transport-Overhead",
|
|
2750
2751
|
"modelExecution": "Modellausführung",
|
|
2751
|
-
"truncated": "{count} abgeschnitten | {count} abgeschnitten"
|
|
2752
|
+
"truncated": "{count} abgeschnitten | {count} abgeschnitten",
|
|
2753
|
+
"cached": "{tokens} gecacht"
|
|
2752
2754
|
},
|
|
2753
2755
|
"metricsBar": {
|
|
2754
2756
|
"calls": "{count} Aufruf | {count} Aufrufe",
|
|
2755
|
-
"promptCompletionTokens": "Prompt-/Completion-Tokens",
|
|
2757
|
+
"promptCompletionTokens": "Frische (nicht gecachte) Prompt-/Completion-Tokens",
|
|
2756
2758
|
"cachedTokens": "({tokens} zwischengespeichert)",
|
|
2757
2759
|
"cachedTokensHint": "Prompt-Tokens, die aus dem Cache des Providers bedient wurden",
|
|
2758
2760
|
"errors": "{count} Fehler | {count} Fehler",
|
|
@@ -3256,7 +3258,10 @@
|
|
|
3256
3258
|
"proposing": "Ansätze werden vorgeschlagen…",
|
|
3257
3259
|
"choose": "Ansatz wählen"
|
|
3258
3260
|
},
|
|
3259
|
-
"elapsedTooltip": "Verstrichene Zeit für diesen Schritt"
|
|
3261
|
+
"elapsedTooltip": "Verstrichene Zeit für diesen Schritt",
|
|
3262
|
+
"prReview": {
|
|
3263
|
+
"review": "Befunde prüfen"
|
|
3264
|
+
}
|
|
3260
3265
|
},
|
|
3261
3266
|
"health": {
|
|
3262
3267
|
"title": "Pipeline-Zustand",
|
package/i18n/locales/en.json
CHANGED
|
@@ -1010,7 +1010,8 @@
|
|
|
1010
1010
|
"open": "Open",
|
|
1011
1011
|
"mergePr": "Merge PR",
|
|
1012
1012
|
"chooseApproach": "Choose approach",
|
|
1013
|
-
"elapsedTooltip": "Elapsed time on this step"
|
|
1013
|
+
"elapsedTooltip": "Elapsed time on this step",
|
|
1014
|
+
"reviewFindings": "Review findings"
|
|
1014
1015
|
},
|
|
1015
1016
|
"structure": {
|
|
1016
1017
|
"title": "Structure",
|
|
@@ -1326,11 +1327,12 @@
|
|
|
1326
1327
|
"tokensInOut": "Tokens (in / out)",
|
|
1327
1328
|
"transportOverhead": "Transport overhead",
|
|
1328
1329
|
"modelExecution": "Model execution",
|
|
1329
|
-
"truncated": "{count} truncated | {count} truncated"
|
|
1330
|
+
"truncated": "{count} truncated | {count} truncated",
|
|
1331
|
+
"cached": "{tokens} cached"
|
|
1330
1332
|
},
|
|
1331
1333
|
"metricsBar": {
|
|
1332
1334
|
"calls": "{count} call | {count} calls",
|
|
1333
|
-
"promptCompletionTokens": "
|
|
1335
|
+
"promptCompletionTokens": "Fresh (uncached) prompt / completion tokens",
|
|
1334
1336
|
"cachedTokens": "({tokens} cached)",
|
|
1335
1337
|
"cachedTokensHint": "Prompt tokens served from the provider's cache",
|
|
1336
1338
|
"errors": "{count} error | {count} errors",
|
|
@@ -3622,7 +3624,10 @@
|
|
|
3622
3624
|
"proposing": "Proposing approaches…",
|
|
3623
3625
|
"choose": "Choose an approach"
|
|
3624
3626
|
},
|
|
3625
|
-
"elapsedTooltip": "Elapsed time on this step"
|
|
3627
|
+
"elapsedTooltip": "Elapsed time on this step",
|
|
3628
|
+
"prReview": {
|
|
3629
|
+
"review": "Review findings"
|
|
3630
|
+
}
|
|
3626
3631
|
},
|
|
3627
3632
|
"health": {
|
|
3628
3633
|
"title": "Pipeline health",
|
package/i18n/locales/es.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "Inicia un pipeline para ver el historial de ejecución aquí."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "Elegir enfoque",
|
|
956
|
-
"elapsedTooltip": "Tiempo transcurrido en este paso"
|
|
956
|
+
"elapsedTooltip": "Tiempo transcurrido en este paso",
|
|
957
|
+
"reviewFindings": "Revisar hallazgos"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "Estructura",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "Tokens (entrada / salida)",
|
|
1267
1268
|
"transportOverhead": "Sobrecarga de transporte",
|
|
1268
1269
|
"modelExecution": "Ejecución del modelo",
|
|
1269
|
-
"truncated": "{count} truncada | {count} truncadas"
|
|
1270
|
+
"truncated": "{count} truncada | {count} truncadas",
|
|
1271
|
+
"cached": "{tokens} en caché"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} llamada | {count} llamadas",
|
|
1273
|
-
"promptCompletionTokens": "Tokens de prompt / completado",
|
|
1275
|
+
"promptCompletionTokens": "Tokens frescos (sin caché) de prompt / completado",
|
|
1274
1276
|
"cachedTokens": "({tokens} en caché)",
|
|
1275
1277
|
"cachedTokensHint": "Tokens de prompt servidos desde la caché del proveedor",
|
|
1276
1278
|
"errors": "{count} error | {count} errores",
|
|
@@ -3523,7 +3525,10 @@
|
|
|
3523
3525
|
"proposing": "Proponiendo enfoques…",
|
|
3524
3526
|
"choose": "Elegir un enfoque"
|
|
3525
3527
|
},
|
|
3526
|
-
"elapsedTooltip": "Tiempo transcurrido en este paso"
|
|
3528
|
+
"elapsedTooltip": "Tiempo transcurrido en este paso",
|
|
3529
|
+
"prReview": {
|
|
3530
|
+
"review": "Revisar hallazgos"
|
|
3531
|
+
}
|
|
3527
3532
|
},
|
|
3528
3533
|
"health": {
|
|
3529
3534
|
"title": "Estado de los pipelines",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "Lancez un pipeline pour voir l'historique d'exécution ici."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "Choisir l'approche",
|
|
956
|
-
"elapsedTooltip": "Temps écoulé sur cette étape"
|
|
956
|
+
"elapsedTooltip": "Temps écoulé sur cette étape",
|
|
957
|
+
"reviewFindings": "Examiner les remarques"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "Structure",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "Tokens (entrée / sortie)",
|
|
1267
1268
|
"transportOverhead": "Surcoût de transport",
|
|
1268
1269
|
"modelExecution": "Exécution du modèle",
|
|
1269
|
-
"truncated": "{count} tronqué | {count} tronqués"
|
|
1270
|
+
"truncated": "{count} tronqué | {count} tronqués",
|
|
1271
|
+
"cached": "{tokens} en cache"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} appel | {count} appels",
|
|
1273
|
-
"promptCompletionTokens": "Tokens de prompt / complétion",
|
|
1275
|
+
"promptCompletionTokens": "Tokens frais (non mis en cache) de prompt / complétion",
|
|
1274
1276
|
"cachedTokens": "({tokens} en cache)",
|
|
1275
1277
|
"cachedTokensHint": "Tokens de prompt servis depuis le cache du fournisseur",
|
|
1276
1278
|
"errors": "{count} erreur | {count} erreurs",
|
|
@@ -3523,7 +3525,10 @@
|
|
|
3523
3525
|
"proposing": "Proposition d'approches…",
|
|
3524
3526
|
"choose": "Choisir une approche"
|
|
3525
3527
|
},
|
|
3526
|
-
"elapsedTooltip": "Temps écoulé sur cette étape"
|
|
3528
|
+
"elapsedTooltip": "Temps écoulé sur cette étape",
|
|
3529
|
+
"prReview": {
|
|
3530
|
+
"review": "Examiner les remarques"
|
|
3531
|
+
}
|
|
3527
3532
|
},
|
|
3528
3533
|
"health": {
|
|
3529
3534
|
"title": "État des pipelines",
|
package/i18n/locales/he.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "התחל pipeline כדי לראות כאן את היסטוריית ההרצות."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "בחר גישה",
|
|
956
|
-
"elapsedTooltip": "הזמן שחלף בשלב זה"
|
|
956
|
+
"elapsedTooltip": "הזמן שחלף בשלב זה",
|
|
957
|
+
"reviewFindings": "עיין בממצאים"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "מבנה",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "טוקנים (נכנס / יוצא)",
|
|
1267
1268
|
"transportOverhead": "תקורת תעבורה",
|
|
1268
1269
|
"modelExecution": "הרצת מודל",
|
|
1269
|
-
"truncated": "{count} נקטע | {count} נקטעו"
|
|
1270
|
+
"truncated": "{count} נקטע | {count} נקטעו",
|
|
1271
|
+
"cached": "{tokens} במטמון"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} קריאה | {count} קריאות",
|
|
1273
|
-
"promptCompletionTokens": "טוקני פרומפט / השלמה",
|
|
1275
|
+
"promptCompletionTokens": "טוקני פרומפט / השלמה חדשים (ללא מטמון)",
|
|
1274
1276
|
"cachedTokens": "({tokens} במטמון)",
|
|
1275
1277
|
"cachedTokensHint": "טוקני פרומפט שהוגשו ממטמון הספק",
|
|
1276
1278
|
"errors": "{count} שגיאה | {count} שגיאות",
|
|
@@ -3534,7 +3536,10 @@
|
|
|
3534
3536
|
"proposing": "מציע גישות…",
|
|
3535
3537
|
"choose": "בחר גישה"
|
|
3536
3538
|
},
|
|
3537
|
-
"elapsedTooltip": "הזמן שחלף בשלב זה"
|
|
3539
|
+
"elapsedTooltip": "הזמן שחלף בשלב זה",
|
|
3540
|
+
"prReview": {
|
|
3541
|
+
"review": "עיין בממצאים"
|
|
3542
|
+
}
|
|
3538
3543
|
},
|
|
3539
3544
|
"health": {
|
|
3540
3545
|
"title": "בריאות הצינור",
|
package/i18n/locales/it.json
CHANGED
|
@@ -1235,7 +1235,8 @@
|
|
|
1235
1235
|
"open": "Aperta",
|
|
1236
1236
|
"mergePr": "Unisci PR",
|
|
1237
1237
|
"chooseApproach": "Scegli approccio",
|
|
1238
|
-
"elapsedTooltip": "Tempo trascorso su questo passaggio"
|
|
1238
|
+
"elapsedTooltip": "Tempo trascorso su questo passaggio",
|
|
1239
|
+
"reviewFindings": "Esamina i rilievi"
|
|
1239
1240
|
},
|
|
1240
1241
|
"structure": {
|
|
1241
1242
|
"title": "Struttura",
|
|
@@ -2748,11 +2749,12 @@
|
|
|
2748
2749
|
"tokensInOut": "Token (in / out)",
|
|
2749
2750
|
"transportOverhead": "Overhead di trasporto",
|
|
2750
2751
|
"modelExecution": "Esecuzione del modello",
|
|
2751
|
-
"truncated": "{count} troncata | {count} troncate"
|
|
2752
|
+
"truncated": "{count} troncata | {count} troncate",
|
|
2753
|
+
"cached": "{tokens} in cache"
|
|
2752
2754
|
},
|
|
2753
2755
|
"metricsBar": {
|
|
2754
2756
|
"calls": "{count} chiamata | {count} chiamate",
|
|
2755
|
-
"promptCompletionTokens": "Token di prompt / completion",
|
|
2757
|
+
"promptCompletionTokens": "Token freschi (non in cache) di prompt / completion",
|
|
2756
2758
|
"cachedTokens": "({tokens} in cache)",
|
|
2757
2759
|
"cachedTokensHint": "Token di prompt serviti dalla cache del provider",
|
|
2758
2760
|
"errors": "{count} errore | {count} errori",
|
|
@@ -3256,7 +3258,10 @@
|
|
|
3256
3258
|
"proposing": "Proposta di approcci…",
|
|
3257
3259
|
"choose": "Scegli un approccio"
|
|
3258
3260
|
},
|
|
3259
|
-
"elapsedTooltip": "Tempo trascorso su questo passaggio"
|
|
3261
|
+
"elapsedTooltip": "Tempo trascorso su questo passaggio",
|
|
3262
|
+
"prReview": {
|
|
3263
|
+
"review": "Esamina i rilievi"
|
|
3264
|
+
}
|
|
3260
3265
|
},
|
|
3261
3266
|
"health": {
|
|
3262
3267
|
"title": "Stato delle pipeline",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "パイプラインを開始すると、ここに実行履歴が表示されます。"
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "アプローチを選択",
|
|
956
|
-
"elapsedTooltip": "このステップの経過時間"
|
|
956
|
+
"elapsedTooltip": "このステップの経過時間",
|
|
957
|
+
"reviewFindings": "指摘を確認"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "構造",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "トークン (入力 / 出力)",
|
|
1267
1268
|
"transportOverhead": "転送オーバーヘッド",
|
|
1268
1269
|
"modelExecution": "モデル実行",
|
|
1269
|
-
"truncated": "{count} 件が切り詰め | {count} 件が切り詰め"
|
|
1270
|
+
"truncated": "{count} 件が切り詰め | {count} 件が切り詰め",
|
|
1271
|
+
"cached": "{tokens} キャッシュ済み"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} 件の呼び出し | {count} 件の呼び出し",
|
|
1273
|
-
"promptCompletionTokens": "
|
|
1275
|
+
"promptCompletionTokens": "新規(キャッシュ外)のプロンプト / 完了トークン",
|
|
1274
1276
|
"cachedTokens": "({tokens} 件キャッシュ済み)",
|
|
1275
1277
|
"cachedTokensHint": "プロバイダーのキャッシュから提供されたプロンプトトークン",
|
|
1276
1278
|
"errors": "{count} 件のエラー | {count} 件のエラー",
|
|
@@ -3535,7 +3537,10 @@
|
|
|
3535
3537
|
"proposing": "アプローチを提案中…",
|
|
3536
3538
|
"choose": "アプローチを選択"
|
|
3537
3539
|
},
|
|
3538
|
-
"elapsedTooltip": "このステップの経過時間"
|
|
3540
|
+
"elapsedTooltip": "このステップの経過時間",
|
|
3541
|
+
"prReview": {
|
|
3542
|
+
"review": "指摘を確認"
|
|
3543
|
+
}
|
|
3539
3544
|
},
|
|
3540
3545
|
"health": {
|
|
3541
3546
|
"title": "パイプラインの状態",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "Uruchom pipeline, aby zobaczyć tutaj historię uruchomień."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "Wybierz podejście",
|
|
956
|
-
"elapsedTooltip": "Czas, który upłynął na tym kroku"
|
|
956
|
+
"elapsedTooltip": "Czas, który upłynął na tym kroku",
|
|
957
|
+
"reviewFindings": "Przejrzyj ustalenia"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "Struktura",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "Tokeny (we / wy)",
|
|
1267
1268
|
"transportOverhead": "Narzut transportu",
|
|
1268
1269
|
"modelExecution": "Wykonanie modelu",
|
|
1269
|
-
"truncated": "{count} obcięte | {count} obcięte | {count} obciętych"
|
|
1270
|
+
"truncated": "{count} obcięte | {count} obcięte | {count} obciętych",
|
|
1271
|
+
"cached": "{tokens} z pamięci podręcznej"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} wywołanie | {count} wywołania | {count} wywołań",
|
|
1273
|
-
"promptCompletionTokens": "
|
|
1275
|
+
"promptCompletionTokens": "Świeże (niebuforowane) tokeny promptu / dopełnienia",
|
|
1274
1276
|
"cachedTokens": "({tokens} z pamięci podręcznej)",
|
|
1275
1277
|
"cachedTokensHint": "Tokeny promptu obsłużone z pamięci podręcznej dostawcy",
|
|
1276
1278
|
"errors": "{count} błąd | {count} błędy | {count} błędów",
|
|
@@ -3523,7 +3525,10 @@
|
|
|
3523
3525
|
"proposing": "Proponowanie podejść…",
|
|
3524
3526
|
"choose": "Wybierz podejście"
|
|
3525
3527
|
},
|
|
3526
|
-
"elapsedTooltip": "Czas, który upłynął na tym kroku"
|
|
3528
|
+
"elapsedTooltip": "Czas, który upłynął na tym kroku",
|
|
3529
|
+
"prReview": {
|
|
3530
|
+
"review": "Przejrzyj ustalenia"
|
|
3531
|
+
}
|
|
3527
3532
|
},
|
|
3528
3533
|
"health": {
|
|
3529
3534
|
"title": "Stan pipeline'ów",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "Çalıştırma geçmişini burada görmek için bir pipeline başlatın."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "Yaklaşım seç",
|
|
956
|
-
"elapsedTooltip": "Bu adımda geçen süre"
|
|
956
|
+
"elapsedTooltip": "Bu adımda geçen süre",
|
|
957
|
+
"reviewFindings": "Bulguları incele"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "Yapı",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "Token (giriş / çıkış)",
|
|
1267
1268
|
"transportOverhead": "Taşıma yükü",
|
|
1268
1269
|
"modelExecution": "Model yürütme",
|
|
1269
|
-
"truncated": "{count} kesildi | {count} kesildi"
|
|
1270
|
+
"truncated": "{count} kesildi | {count} kesildi",
|
|
1271
|
+
"cached": "{tokens} önbellekte"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} çağrı | {count} çağrı",
|
|
1273
|
-
"promptCompletionTokens": "
|
|
1275
|
+
"promptCompletionTokens": "Yeni (önbelleğe alınmamış) istem / tamamlama token'ları",
|
|
1274
1276
|
"cachedTokens": "({tokens} önbelleğe alındı)",
|
|
1275
1277
|
"cachedTokensHint": "Sağlayıcının önbelleğinden sunulan istem token'ları",
|
|
1276
1278
|
"errors": "{count} hata | {count} hata",
|
|
@@ -3535,7 +3537,10 @@
|
|
|
3535
3537
|
"proposing": "Yaklaşımlar öneriliyor…",
|
|
3536
3538
|
"choose": "Bir yaklaşım seçin"
|
|
3537
3539
|
},
|
|
3538
|
-
"elapsedTooltip": "Bu adımda geçen süre"
|
|
3540
|
+
"elapsedTooltip": "Bu adımda geçen süre",
|
|
3541
|
+
"prReview": {
|
|
3542
|
+
"review": "Bulguları incele"
|
|
3543
|
+
}
|
|
3539
3544
|
},
|
|
3540
3545
|
"health": {
|
|
3541
3546
|
"title": "Pipeline sağlığı",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -953,7 +953,8 @@
|
|
|
953
953
|
"body": "Запустіть pipeline, щоб побачити тут історію запусків."
|
|
954
954
|
},
|
|
955
955
|
"chooseApproach": "Обрати підхід",
|
|
956
|
-
"elapsedTooltip": "Час, що минув на цьому кроці"
|
|
956
|
+
"elapsedTooltip": "Час, що минув на цьому кроці",
|
|
957
|
+
"reviewFindings": "Переглянути зауваження"
|
|
957
958
|
},
|
|
958
959
|
"structure": {
|
|
959
960
|
"title": "Структура",
|
|
@@ -1266,11 +1267,12 @@
|
|
|
1266
1267
|
"tokensInOut": "Токени (вхід / вихід)",
|
|
1267
1268
|
"transportOverhead": "Накладні витрати транспорту",
|
|
1268
1269
|
"modelExecution": "Виконання моделі",
|
|
1269
|
-
"truncated": "{count} обрізаний | {count} обрізані | {count} обрізаних"
|
|
1270
|
+
"truncated": "{count} обрізаний | {count} обрізані | {count} обрізаних",
|
|
1271
|
+
"cached": "{tokens} з кешу"
|
|
1270
1272
|
},
|
|
1271
1273
|
"metricsBar": {
|
|
1272
1274
|
"calls": "{count} виклик | {count} виклики | {count} викликів",
|
|
1273
|
-
"promptCompletionTokens": "
|
|
1275
|
+
"promptCompletionTokens": "Нові (некешовані) токени запиту / завершення",
|
|
1274
1276
|
"cachedTokens": "({tokens} з кешу)",
|
|
1275
1277
|
"cachedTokensHint": "Токени запиту, надані з кешу провайдера",
|
|
1276
1278
|
"errors": "{count} помилка | {count} помилки | {count} помилок",
|
|
@@ -3523,7 +3525,10 @@
|
|
|
3523
3525
|
"proposing": "Пропонування підходів…",
|
|
3524
3526
|
"choose": "Оберіть підхід"
|
|
3525
3527
|
},
|
|
3526
|
-
"elapsedTooltip": "Час, що минув на цьому кроці"
|
|
3528
|
+
"elapsedTooltip": "Час, що минув на цьому кроці",
|
|
3529
|
+
"prReview": {
|
|
3530
|
+
"review": "Переглянути зауваження"
|
|
3531
|
+
}
|
|
3527
3532
|
},
|
|
3528
3533
|
"health": {
|
|
3529
3534
|
"title": "Стан пайплайнів",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.145.2",
|
|
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",
|