@cat-factory/app 0.232.2 → 0.234.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/observability/OutcomeFilterChips.vue +41 -0
- package/app/components/observability/RunFailureSummary.vue +243 -0
- package/app/components/observability/ToolCallList.vue +290 -0
- package/app/components/panels/ObservabilityPanel.vue +396 -129
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +119 -0
- package/app/components/settings/WorkspaceSettingsPanel.vue +22 -0
- package/app/composables/api/execution.ts +22 -0
- package/app/composables/api/taskTypeSuppressions.ts +25 -0
- package/app/composables/useApi.ts +2 -0
- package/app/composables/usePipelineHealth.spec.ts +15 -1
- package/app/composables/usePipelineHealth.ts +13 -7
- package/app/docs/consumer-extensions.md +7 -1
- package/app/stores/observability/toolCalls.ts +173 -0
- package/app/stores/observability.ts +13 -0
- package/app/stores/pipelines.ts +22 -5
- package/app/stores/taskTypes.spec.ts +29 -0
- package/app/stores/taskTypes.ts +40 -1
- package/app/stores/workspace/hydrate.ts +5 -0
- package/app/types/domain.ts +3 -0
- package/app/types/execution.ts +6 -0
- package/app/utils/descriptorFields.ts +13 -27
- package/app/utils/observability.spec.ts +313 -2
- package/app/utils/observability.ts +232 -1
- package/i18n/locales/de.json +53 -0
- package/i18n/locales/en.json +53 -0
- package/i18n/locales/es.json +53 -0
- package/i18n/locales/fr.json +53 -0
- package/i18n/locales/he.json +53 -0
- package/i18n/locales/it.json +53 -0
- package/i18n/locales/ja.json +53 -0
- package/i18n/locales/pl.json +53 -0
- package/i18n/locales/tr.json +53 -0
- package/i18n/locales/uk.json +53 -0
- package/package.json +2 -2
|
@@ -2,7 +2,17 @@
|
|
|
2
2
|
// rollups + the drill-down panel). Kept here so the components stay declarative and
|
|
3
3
|
// the number-crunching is unit-testable.
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import { classifyLlmCallOutcome } from '@cat-factory/contracts'
|
|
6
|
+
import type {
|
|
7
|
+
AgentFailure,
|
|
8
|
+
AgentToolCall,
|
|
9
|
+
LlmCallMetric,
|
|
10
|
+
LlmCallOutcome,
|
|
11
|
+
PipelineStep,
|
|
12
|
+
RunToolCallFailures,
|
|
13
|
+
StepMetrics,
|
|
14
|
+
StepPhaseMetrics,
|
|
15
|
+
} from '~/types/execution'
|
|
6
16
|
|
|
7
17
|
/** Compact token count: 1234 → "1.2k", 980 → "980", 2_500_000 → "2.5M". */
|
|
8
18
|
export function formatTokens(n: number): string {
|
|
@@ -174,6 +184,227 @@ export function foldRunPhaseMetrics(steps: readonly PipelineStep[]): StepPhaseMe
|
|
|
174
184
|
)
|
|
175
185
|
}
|
|
176
186
|
|
|
187
|
+
// --- failing-call-first triage ---------------------------------------------------------------
|
|
188
|
+
// The panel's top section answers "what broke" before the operator reads anything. Everything it
|
|
189
|
+
// shows is DERIVED here rather than in the component, for the usual reason plus one specific to
|
|
190
|
+
// this surface: the difference between "nothing failed" and "we recorded nothing" is a judgement
|
|
191
|
+
// with three inputs, and getting it wrong renders a confident all-clear over a run that died.
|
|
192
|
+
|
|
193
|
+
/** Which calls a drill-down list is narrowed to. `all` is the default: no filter. */
|
|
194
|
+
export type CallOutcomeFilter = 'all' | LlmCallOutcome
|
|
195
|
+
/** Which tool calls a trajectory list is narrowed to (a tool has no `warning` class). */
|
|
196
|
+
export type ToolOutcomeFilter = 'all' | 'ok' | 'error'
|
|
197
|
+
|
|
198
|
+
/** How many calls fall in each outcome class, so a filter control can state what it hides. */
|
|
199
|
+
export interface CallOutcomeCounts {
|
|
200
|
+
all: number
|
|
201
|
+
ok: number
|
|
202
|
+
warning: number
|
|
203
|
+
error: number
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Count a run's calls by outcome, classified through the SHARED rule in `@cat-factory/contracts`
|
|
208
|
+
* (the same one the row badge and the backend's `?outcome=` predicate use), so a chip reading
|
|
209
|
+
* "2 errors" and a list showing three red rows is not a state this can reach.
|
|
210
|
+
*/
|
|
211
|
+
export function countCallOutcomes(calls: readonly LlmCallMetric[]): CallOutcomeCounts {
|
|
212
|
+
const counts: CallOutcomeCounts = { all: calls.length, ok: 0, warning: 0, error: 0 }
|
|
213
|
+
for (const call of calls) counts[classifyLlmCallOutcome(call)] += 1
|
|
214
|
+
return counts
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** Narrow a call list to one outcome class; `all` passes the list through untouched. */
|
|
218
|
+
export function filterCallsByOutcome(
|
|
219
|
+
calls: readonly LlmCallMetric[],
|
|
220
|
+
filter: CallOutcomeFilter,
|
|
221
|
+
): LlmCallMetric[] {
|
|
222
|
+
if (filter === 'all') return [...calls]
|
|
223
|
+
return calls.filter((call) => classifyLlmCallOutcome(call) === filter)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Narrow a tool-call trajectory to the failing (or the succeeding) calls. */
|
|
227
|
+
export function filterToolCallsByOutcome(
|
|
228
|
+
toolCalls: readonly AgentToolCall[],
|
|
229
|
+
filter: ToolOutcomeFilter,
|
|
230
|
+
): AgentToolCall[] {
|
|
231
|
+
if (filter === 'all') return [...toolCalls]
|
|
232
|
+
return toolCalls.filter((call) => call.ok === (filter === 'ok'))
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* What one telemetry sink was able to say about this run.
|
|
237
|
+
*
|
|
238
|
+
* A sink that has not answered and a sink that answered "nothing" are different facts, and the
|
|
239
|
+
* one thing this surface must never do is render them alike. A bare row count cannot hold the
|
|
240
|
+
* difference: zero rows is what a still-loading read, a failed read, an unwired sink and a
|
|
241
|
+
* genuinely quiet run all look like from the outside.
|
|
242
|
+
*
|
|
243
|
+
* - `pending`: no answer yet — in flight, or never requested. Not evidence, and never a clean
|
|
244
|
+
* bill of health.
|
|
245
|
+
* - `unreachable`: the read FAILED. The strongest of the four, because it means no conclusion is
|
|
246
|
+
* available at all — an HTTP error rendered as "no rows recorded" is a claim about the run
|
|
247
|
+
* made out of a claim about the network.
|
|
248
|
+
* - `answered`: the sink spoke. `rows` may be 0, and THAT is the honest "nothing was recorded".
|
|
249
|
+
*/
|
|
250
|
+
export type SinkAnswer =
|
|
251
|
+
| { status: 'pending' }
|
|
252
|
+
| { status: 'unreachable' }
|
|
253
|
+
| { status: 'answered'; rows: number }
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Read one sink's answer off the store flags that describe it.
|
|
257
|
+
*
|
|
258
|
+
* The precedence is the point. An in-flight read is PENDING even when a previous answer or a
|
|
259
|
+
* previous error is still in hand, because what the panel says next depends on what is coming
|
|
260
|
+
* back, not on what it happened to be holding. Never-requested collapses into pending for the
|
|
261
|
+
* same reason: both are "nobody has answered", which is exactly what must not be rendered as
|
|
262
|
+
* "the answer was nothing".
|
|
263
|
+
*/
|
|
264
|
+
export function sinkAnswer(input: {
|
|
265
|
+
loading: boolean
|
|
266
|
+
error: string | null
|
|
267
|
+
loaded: boolean
|
|
268
|
+
rows: number
|
|
269
|
+
}): SinkAnswer {
|
|
270
|
+
if (input.loading) return { status: 'pending' }
|
|
271
|
+
if (input.error) return { status: 'unreachable' }
|
|
272
|
+
return input.loaded ? { status: 'answered', rows: input.rows } : { status: 'pending' }
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** Whether a sink answered and holds at least one row for the run. */
|
|
276
|
+
function answeredWithRows(answer: SinkAnswer): boolean {
|
|
277
|
+
return answer.status === 'answered' && answer.rows > 0
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* What the run's telemetry says about its failure, ready to render.
|
|
282
|
+
*
|
|
283
|
+
* `failure` is the run's own structured record (the `agent_runs.failure` JSON the engine writes);
|
|
284
|
+
* the two evidence rows are the calls that ACTUALLY failed, which is the part the operator
|
|
285
|
+
* otherwise finds by scrolling. They are independent: a run can fail with neither (the engine
|
|
286
|
+
* died, or the container never came up), with one, or with both.
|
|
287
|
+
*/
|
|
288
|
+
export interface RunFailureEvidence {
|
|
289
|
+
/** The run's structured failure record, or null when it did not fail (or recorded nothing). */
|
|
290
|
+
failure: AgentFailure | null
|
|
291
|
+
/** The most recent call that FAILED outright, or null when none did. */
|
|
292
|
+
lastErroredCall: LlmCallMetric | null
|
|
293
|
+
/** How many of the run's loaded calls failed outright. */
|
|
294
|
+
erroredCallCount: number
|
|
295
|
+
/** The last tool call that reported failure, or null when none did. */
|
|
296
|
+
lastFailedToolCall: AgentToolCall | null
|
|
297
|
+
/**
|
|
298
|
+
* How many of the run's tool calls reported failure — the SQL aggregate over the whole run,
|
|
299
|
+
* not the length of any list held here.
|
|
300
|
+
*
|
|
301
|
+
* This is the number that must not be counted off the trajectory. That read is a bounded
|
|
302
|
+
* PREFIX, so a run whose failures came after its opening moves would be counted at zero, which
|
|
303
|
+
* is the confident all-clear this whole section exists to refuse.
|
|
304
|
+
*/
|
|
305
|
+
failedToolCallCount: number
|
|
306
|
+
/**
|
|
307
|
+
* Whether {@link lastFailedToolCall} was picked from a bounded slice of the run's failures
|
|
308
|
+
* rather than all of them, so a "last" that is only the last one HELD says so.
|
|
309
|
+
*/
|
|
310
|
+
failedToolCallsTruncated: boolean
|
|
311
|
+
/** What each sink was able to say. See {@link SinkAnswer}. */
|
|
312
|
+
calls: SinkAnswer
|
|
313
|
+
tools: SinkAnswer
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Fold a run's failure record and its two telemetry sinks into the evidence the panel pins.
|
|
318
|
+
*
|
|
319
|
+
* The model calls arrive NEWEST-first (the metrics list's own order) and the tool-call failures
|
|
320
|
+
* OLDEST-first (trajectory order), so "the last one that failed" is the FIRST match in one and
|
|
321
|
+
* the LAST in the other. Reading either in the wrong direction still returns a failing call,
|
|
322
|
+
* which is why it is worth stating: it would just be the wrong one, and the row nearest the
|
|
323
|
+
* failure is the whole reason to pin one at all.
|
|
324
|
+
*
|
|
325
|
+
* The tool side is handed the run's FAILURES and its exact count, never the trajectory: the two
|
|
326
|
+
* are separate reads precisely so the count here is about the run rather than about the prefix
|
|
327
|
+
* the browse tab happens to be holding.
|
|
328
|
+
*/
|
|
329
|
+
export function deriveRunFailureEvidence(input: {
|
|
330
|
+
failure?: AgentFailure | null
|
|
331
|
+
calls: readonly LlmCallMetric[]
|
|
332
|
+
callsAnswer: SinkAnswer
|
|
333
|
+
toolFailures: RunToolCallFailures | null
|
|
334
|
+
toolsAnswer: SinkAnswer
|
|
335
|
+
}): RunFailureEvidence {
|
|
336
|
+
const errored = input.calls.filter((call) => !call.ok)
|
|
337
|
+
const failures = input.toolFailures?.failures ?? []
|
|
338
|
+
return {
|
|
339
|
+
failure: input.failure ?? null,
|
|
340
|
+
lastErroredCall: errored[0] ?? null,
|
|
341
|
+
erroredCallCount: errored.length,
|
|
342
|
+
lastFailedToolCall: failures[failures.length - 1] ?? null,
|
|
343
|
+
failedToolCallCount: input.toolFailures?.failed ?? 0,
|
|
344
|
+
failedToolCallsTruncated: input.toolFailures?.failuresTruncated ?? false,
|
|
345
|
+
calls: input.callsAnswer,
|
|
346
|
+
tools: input.toolsAnswer,
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Whether the pinned failure section has anything to say about this run.
|
|
352
|
+
*
|
|
353
|
+
* An UNREACHABLE sink counts: "part of this run's telemetry could not be read" is exactly the
|
|
354
|
+
* kind of thing an operator must be told before they conclude anything from the rest of the
|
|
355
|
+
* page, and staying silent about it is how the page's other numbers get believed whole.
|
|
356
|
+
*/
|
|
357
|
+
export function hasFailureEvidence(evidence: RunFailureEvidence): boolean {
|
|
358
|
+
return (
|
|
359
|
+
!!evidence.failure ||
|
|
360
|
+
evidence.erroredCallCount > 0 ||
|
|
361
|
+
evidence.failedToolCallCount > 0 ||
|
|
362
|
+
evidence.calls.status === 'unreachable' ||
|
|
363
|
+
evidence.tools.status === 'unreachable'
|
|
364
|
+
)
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Why the pinned section can point at no failing call, as a discriminated reason rather than a
|
|
369
|
+
* bare absence. Each needs different words and a different next step from the operator:
|
|
370
|
+
*
|
|
371
|
+
* - `sink-unreachable`: a read FAILED, so nothing can be concluded. Named first because it
|
|
372
|
+
* OUTRANKS every statement below: each of those is a claim about the run, and this is the one
|
|
373
|
+
* case where the panel does not have the standing to make one.
|
|
374
|
+
* - `recorded-clean`: both sinks answered, both hold rows, and none of them failed — so the
|
|
375
|
+
* cause sits where no producer records anything (the engine, or a container that died between
|
|
376
|
+
* calls).
|
|
377
|
+
* - `no-telemetry`: both answered and neither holds a row, so the run failed before (or outside
|
|
378
|
+
* of) any agent work, and this panel is the wrong place to look.
|
|
379
|
+
* - `partial-calls-only` / `partial-tools-only`: both answered but only one holds rows, named by
|
|
380
|
+
* the one that DID. Which sink is empty matters, because an empty sink is not evidence of
|
|
381
|
+
* anything and the panel must not let it read as a clean bill.
|
|
382
|
+
*
|
|
383
|
+
* Null when a failing call WAS found (nothing to explain) or while a sink is still loading (an
|
|
384
|
+
* answer nobody has given yet must never be reported as one that came back clean).
|
|
385
|
+
*/
|
|
386
|
+
export type NoFailingCallReason =
|
|
387
|
+
| 'sink-unreachable'
|
|
388
|
+
| 'recorded-clean'
|
|
389
|
+
| 'no-telemetry'
|
|
390
|
+
| 'partial-calls-only'
|
|
391
|
+
| 'partial-tools-only'
|
|
392
|
+
|
|
393
|
+
/** Why nothing failing could be pinned, or null when something was (or nothing is settled). */
|
|
394
|
+
export function noFailingCallReason(evidence: RunFailureEvidence): NoFailingCallReason | null {
|
|
395
|
+
if (evidence.calls.status === 'unreachable' || evidence.tools.status === 'unreachable') {
|
|
396
|
+
return 'sink-unreachable'
|
|
397
|
+
}
|
|
398
|
+
if (evidence.erroredCallCount > 0 || evidence.failedToolCallCount > 0) return null
|
|
399
|
+
if (evidence.calls.status === 'pending' || evidence.tools.status === 'pending') return null
|
|
400
|
+
const hasCalls = answeredWithRows(evidence.calls)
|
|
401
|
+
const hasTools = answeredWithRows(evidence.tools)
|
|
402
|
+
if (hasCalls && hasTools) return 'recorded-clean'
|
|
403
|
+
if (hasCalls) return 'partial-calls-only'
|
|
404
|
+
if (hasTools) return 'partial-tools-only'
|
|
405
|
+
return 'no-telemetry'
|
|
406
|
+
}
|
|
407
|
+
|
|
177
408
|
/** Tailwind text/bg colour for an output-headroom level (green → amber → red). */
|
|
178
409
|
export function headroomColor(ratio: number | null, truncated: boolean): string {
|
|
179
410
|
if (truncated || (ratio != null && ratio >= 0.98)) return 'text-rose-400'
|
package/i18n/locales/de.json
CHANGED
|
@@ -353,6 +353,13 @@
|
|
|
353
353
|
"manageAccount": "Kontofragmente verwalten →"
|
|
354
354
|
}
|
|
355
355
|
},
|
|
356
|
+
"taskTypeSuppressions": {
|
|
357
|
+
"intro": "Wählen Sie aus, welche wiederverwendbaren Operationen dieses Deployments auf diesem Board angeboten werden. Wird eine ausgeblendet, verschwindet sie hier aus der Aufgabenauswahl und das Anlegen von Arbeit darunter wird abgelehnt; andere Boards bleiben unberührt.",
|
|
358
|
+
"loading": "Operationen werden geladen…",
|
|
359
|
+
"empty": "Dieses Deployment registriert keine wiederverwendbaren Operationen.",
|
|
360
|
+
"offer": "Auf diesem Board anbieten",
|
|
361
|
+
"saveFailed": "Die angebotenen Operationen konnten nicht geändert werden"
|
|
362
|
+
},
|
|
356
363
|
"issueTracker": {
|
|
357
364
|
"filing": {
|
|
358
365
|
"heading": "Wo Tickets abgelegt werden",
|
|
@@ -932,6 +939,7 @@
|
|
|
932
939
|
"merge": "Risikorichtlinien",
|
|
933
940
|
"tracker": "Issue-Tracker",
|
|
934
941
|
"fragments": "Dienst-Best-Practices",
|
|
942
|
+
"operations": "Operationen",
|
|
935
943
|
"metadata": "Metadaten",
|
|
936
944
|
"members": "Mitglieder"
|
|
937
945
|
},
|
|
@@ -3487,6 +3495,51 @@
|
|
|
3487
3495
|
"provider": "Provider",
|
|
3488
3496
|
"resultsCount": "{count} Ergebnis | {count} Ergebnisse",
|
|
3489
3497
|
"queriesTitle": "Durchgeführte Suchen"
|
|
3498
|
+
},
|
|
3499
|
+
"callsTitle": "Modellaufrufe",
|
|
3500
|
+
"noCallsMatching": "Keine Modellaufrufe entsprechen diesem Filter.",
|
|
3501
|
+
"filter": {
|
|
3502
|
+
"all": "Alle",
|
|
3503
|
+
"failed": "Fehlgeschlagen",
|
|
3504
|
+
"warning": "Abgeschnitten",
|
|
3505
|
+
"ok": "OK"
|
|
3506
|
+
},
|
|
3507
|
+
"failure": {
|
|
3508
|
+
"title": "Was fehlgeschlagen ist",
|
|
3509
|
+
"kind": "Fehler: {kind}",
|
|
3510
|
+
"atStep": "bei Schritt {index}",
|
|
3511
|
+
"lastErroredCall": "Letzter fehlgeschlagener Modellaufruf",
|
|
3512
|
+
"moreErroredCalls": "und {count} weiterer früherer fehlgeschlagener Aufruf | und {count} weitere frühere fehlgeschlagene Aufrufe",
|
|
3513
|
+
"lastFailedToolCall": "Letzter fehlgeschlagener Werkzeugaufruf",
|
|
3514
|
+
"aFailedToolCall": "Ein fehlgeschlagener Tool-Aufruf",
|
|
3515
|
+
"moreFailedToolCalls": "und {count} weiterer früherer fehlgeschlagener Werkzeugaufruf | und {count} weitere frühere fehlgeschlagene Werkzeugaufrufe",
|
|
3516
|
+
"toolReturnedNothing": "Das Werkzeug hat nichts zurückgegeben.",
|
|
3517
|
+
"toolBodiesWithheld": "Argumente und Ergebnisse wurden für diesen Lauf nicht erfasst, daher liegt der Fehlertext des Werkzeugs nicht vor.",
|
|
3518
|
+
"noFailingCall": {
|
|
3519
|
+
"sink-unreachable": "Ein Teil der Telemetrie dieses Laufs konnte nicht geladen werden, daher lässt sich nicht sagen, was fehlgeschlagen ist.",
|
|
3520
|
+
"recorded-clean": "Weder ein Modellaufruf noch ein Werkzeugaufruf meldet einen Fehler, die Ursache hat also in keiner der beiden Quellen einen Eintrag hinterlassen: Sehen Sie in der Engine, im Container-Obduktionsbericht des fehlgeschlagenen Schritts und im Bereitstellungsprotokoll nach.",
|
|
3521
|
+
"partial-calls-only": "Kein Modellaufruf meldet einen Fehler, und für diesen Lauf wurden keine Werkzeugaufrufe aufgezeichnet, daher kann der Verlauf dazu nichts sagen.",
|
|
3522
|
+
"partial-tools-only": "Kein Werkzeugaufruf meldet einen Fehler, und für diesen Lauf wurden keine Modellaufrufe aufgezeichnet.",
|
|
3523
|
+
"no-telemetry": "Für diesen Lauf wurden weder Modellaufrufe noch Werkzeugaufrufe aufgezeichnet, er ist also vor (oder außerhalb) jeder Agentenarbeit fehlgeschlagen. Prüfen Sie das Bereitstellungsprotokoll."
|
|
3524
|
+
}
|
|
3525
|
+
},
|
|
3526
|
+
"toolCalls": {
|
|
3527
|
+
"title": "Werkzeugaufrufe",
|
|
3528
|
+
"subtitle": "was die Agenten getan haben, in der Reihenfolge, in der sie es taten",
|
|
3529
|
+
"loading": "Werkzeugaufrufe werden geladen…",
|
|
3530
|
+
"error": "Die Werkzeugaufrufe konnten nicht geladen werden.",
|
|
3531
|
+
"none": "Für diesen Lauf wurden keine Werkzeugaufrufe aufgezeichnet.",
|
|
3532
|
+
"noneMatching": "Keine Werkzeugaufrufe entsprechen diesem Filter.",
|
|
3533
|
+
"failed": "Fehlgeschlagen",
|
|
3534
|
+
"durationHint": "Wie lange das Werkzeug gebraucht hat",
|
|
3535
|
+
"dispatch": "Auftrag {jobId}",
|
|
3536
|
+
"seq": "Aufruf #{seq} dieses Auftrags",
|
|
3537
|
+
"bodiesWithheld": "Argumente und Ergebnisse wurden nicht erfasst, aus ihrem Fehlen lässt sich also nichts schließen.",
|
|
3538
|
+
"arguments": "Argumente",
|
|
3539
|
+
"result": "Ergebnis",
|
|
3540
|
+
"dropped": "{chars} Zeichen bei der Erfassung verworfen",
|
|
3541
|
+
"truncated": "Es werden die ersten {shown} Aufrufe dieses Laufs angezeigt. Die Zahlen oben gelten für den gesamten Lauf; filtere auf die Fehlschläge, um alle zu sehen.",
|
|
3542
|
+
"failuresTruncated": "Es werden die ersten {shown} fehlgeschlagenen Aufrufe angezeigt. Die Zahl oben gilt für den gesamten Lauf."
|
|
3490
3543
|
}
|
|
3491
3544
|
},
|
|
3492
3545
|
"platformObservability": {
|
package/i18n/locales/en.json
CHANGED
|
@@ -1727,6 +1727,51 @@
|
|
|
1727
1727
|
"provider": "Provider",
|
|
1728
1728
|
"resultsCount": "{count} result | {count} results",
|
|
1729
1729
|
"queriesTitle": "Performed searches"
|
|
1730
|
+
},
|
|
1731
|
+
"callsTitle": "Model calls",
|
|
1732
|
+
"noCallsMatching": "No model calls match this filter.",
|
|
1733
|
+
"filter": {
|
|
1734
|
+
"all": "All",
|
|
1735
|
+
"failed": "Failed",
|
|
1736
|
+
"warning": "Cut short",
|
|
1737
|
+
"ok": "OK"
|
|
1738
|
+
},
|
|
1739
|
+
"failure": {
|
|
1740
|
+
"title": "What failed",
|
|
1741
|
+
"kind": "Failure: {kind}",
|
|
1742
|
+
"atStep": "at step {index}",
|
|
1743
|
+
"lastErroredCall": "Last failed model call",
|
|
1744
|
+
"moreErroredCalls": "and {count} earlier failed call | and {count} earlier failed calls",
|
|
1745
|
+
"lastFailedToolCall": "Last failed tool call",
|
|
1746
|
+
"aFailedToolCall": "A failed tool call",
|
|
1747
|
+
"moreFailedToolCalls": "and {count} earlier failed tool call | and {count} earlier failed tool calls",
|
|
1748
|
+
"toolReturnedNothing": "The tool returned nothing.",
|
|
1749
|
+
"toolBodiesWithheld": "Arguments and results were not captured for this run, so the tool's own error text is not available.",
|
|
1750
|
+
"noFailingCall": {
|
|
1751
|
+
"sink-unreachable": "Part of this run's telemetry could not be loaded, so nothing can be concluded about what failed.",
|
|
1752
|
+
"recorded-clean": "No model call and no tool call reported failure, so the cause left no row in either sink: look at the engine, the container post-mortem on the failing step, and the provisioning log.",
|
|
1753
|
+
"partial-calls-only": "No model call reported failure, and no tool calls were recorded for this run, so the trajectory cannot say whether one did.",
|
|
1754
|
+
"partial-tools-only": "No tool call reported failure, and no model calls were recorded for this run.",
|
|
1755
|
+
"no-telemetry": "Neither model calls nor tool calls were recorded for this run, so it failed before (or outside of) any agent work. Check the provisioning log."
|
|
1756
|
+
}
|
|
1757
|
+
},
|
|
1758
|
+
"toolCalls": {
|
|
1759
|
+
"title": "Tool calls",
|
|
1760
|
+
"subtitle": "what the agents did, in the order they did it",
|
|
1761
|
+
"loading": "Loading tool calls…",
|
|
1762
|
+
"error": "Could not load the tool calls.",
|
|
1763
|
+
"none": "No tool calls recorded for this run.",
|
|
1764
|
+
"noneMatching": "No tool calls match this filter.",
|
|
1765
|
+
"failed": "Failed",
|
|
1766
|
+
"durationHint": "How long the tool took",
|
|
1767
|
+
"dispatch": "Dispatch {jobId}",
|
|
1768
|
+
"seq": "Call #{seq} of this dispatch",
|
|
1769
|
+
"bodiesWithheld": "Arguments and results were not captured, so nothing can be concluded from their absence.",
|
|
1770
|
+
"arguments": "Arguments",
|
|
1771
|
+
"result": "Result",
|
|
1772
|
+
"dropped": "{chars} characters dropped at capture",
|
|
1773
|
+
"truncated": "Showing the first {shown} calls of this run. The counts above are for the whole run; narrow to the failures to see all of them.",
|
|
1774
|
+
"failuresTruncated": "Showing the first {shown} failing calls. The count above is for the whole run."
|
|
1730
1775
|
}
|
|
1731
1776
|
},
|
|
1732
1777
|
"platformObservability": {
|
|
@@ -2869,6 +2914,13 @@
|
|
|
2869
2914
|
"manageAccount": "Manage account fragments →"
|
|
2870
2915
|
}
|
|
2871
2916
|
},
|
|
2917
|
+
"taskTypeSuppressions": {
|
|
2918
|
+
"intro": "Choose which of this deployment's reusable operations this board offers. Hiding one removes it from the create-task picker here and refuses creating work under it; other boards are unaffected.",
|
|
2919
|
+
"loading": "Loading operations…",
|
|
2920
|
+
"empty": "This deployment registers no reusable operations.",
|
|
2921
|
+
"offer": "Offer on this board",
|
|
2922
|
+
"saveFailed": "Could not change which operations this board offers"
|
|
2923
|
+
},
|
|
2872
2924
|
"issueTracker": {
|
|
2873
2925
|
"filing": {
|
|
2874
2926
|
"heading": "Where tickets are filed",
|
|
@@ -3457,6 +3509,7 @@
|
|
|
3457
3509
|
"merge": "Risk policies",
|
|
3458
3510
|
"tracker": "Issue tracker",
|
|
3459
3511
|
"fragments": "Service best practices",
|
|
3512
|
+
"operations": "Operations",
|
|
3460
3513
|
"metadata": "Metadata",
|
|
3461
3514
|
"members": "Members"
|
|
3462
3515
|
},
|
package/i18n/locales/es.json
CHANGED
|
@@ -1632,6 +1632,51 @@
|
|
|
1632
1632
|
"provider": "Proveedor",
|
|
1633
1633
|
"resultsCount": "{count} resultado | {count} resultados",
|
|
1634
1634
|
"queriesTitle": "Búsquedas realizadas"
|
|
1635
|
+
},
|
|
1636
|
+
"callsTitle": "Llamadas al modelo",
|
|
1637
|
+
"noCallsMatching": "Ninguna llamada al modelo coincide con este filtro.",
|
|
1638
|
+
"filter": {
|
|
1639
|
+
"all": "Todas",
|
|
1640
|
+
"failed": "Fallidas",
|
|
1641
|
+
"warning": "Truncadas",
|
|
1642
|
+
"ok": "Correctas"
|
|
1643
|
+
},
|
|
1644
|
+
"failure": {
|
|
1645
|
+
"title": "Qué falló",
|
|
1646
|
+
"kind": "Fallo: {kind}",
|
|
1647
|
+
"atStep": "en el paso {index}",
|
|
1648
|
+
"lastErroredCall": "Última llamada al modelo fallida",
|
|
1649
|
+
"moreErroredCalls": "y {count} llamada fallida anterior | y {count} llamadas fallidas anteriores",
|
|
1650
|
+
"lastFailedToolCall": "Última llamada a herramienta fallida",
|
|
1651
|
+
"aFailedToolCall": "Una llamada de herramienta fallida",
|
|
1652
|
+
"moreFailedToolCalls": "y {count} llamada a herramienta fallida anterior | y {count} llamadas a herramienta fallidas anteriores",
|
|
1653
|
+
"toolReturnedNothing": "La herramienta no devolvió nada.",
|
|
1654
|
+
"toolBodiesWithheld": "Los argumentos y resultados no se capturaron en esta ejecución, así que no se dispone del texto de error de la herramienta.",
|
|
1655
|
+
"noFailingCall": {
|
|
1656
|
+
"sink-unreachable": "No se pudo cargar parte de la telemetría de esta ejecución, así que no se puede concluir nada sobre qué falló.",
|
|
1657
|
+
"recorded-clean": "Ninguna llamada al modelo ni a herramientas informó de un fallo, así que la causa no dejó ningún registro en ninguna de las dos fuentes: revise el motor, la autopsia del contenedor del paso fallido y el registro de aprovisionamiento.",
|
|
1658
|
+
"partial-calls-only": "Ninguna llamada al modelo informó de un fallo, y no se registraron llamadas a herramientas en esta ejecución, así que la trayectoria no puede decir si alguna falló.",
|
|
1659
|
+
"partial-tools-only": "Ninguna llamada a herramienta informó de un fallo, y no se registraron llamadas al modelo en esta ejecución.",
|
|
1660
|
+
"no-telemetry": "No se registraron llamadas al modelo ni a herramientas en esta ejecución, así que falló antes de (o fuera de) todo trabajo de agente. Revise el registro de aprovisionamiento."
|
|
1661
|
+
}
|
|
1662
|
+
},
|
|
1663
|
+
"toolCalls": {
|
|
1664
|
+
"title": "Llamadas a herramientas",
|
|
1665
|
+
"subtitle": "lo que hicieron los agentes, en el orden en que lo hicieron",
|
|
1666
|
+
"loading": "Cargando llamadas a herramientas…",
|
|
1667
|
+
"error": "No se pudieron cargar las llamadas a herramientas.",
|
|
1668
|
+
"none": "No se registraron llamadas a herramientas en esta ejecución.",
|
|
1669
|
+
"noneMatching": "Ninguna llamada a herramienta coincide con este filtro.",
|
|
1670
|
+
"failed": "Fallida",
|
|
1671
|
+
"durationHint": "Cuánto tardó la herramienta",
|
|
1672
|
+
"dispatch": "Despacho {jobId}",
|
|
1673
|
+
"seq": "Llamada n.º {seq} de este despacho",
|
|
1674
|
+
"bodiesWithheld": "Los argumentos y resultados no se capturaron, así que su ausencia no permite concluir nada.",
|
|
1675
|
+
"arguments": "Argumentos",
|
|
1676
|
+
"result": "Resultado",
|
|
1677
|
+
"dropped": "{chars} caracteres descartados al capturar",
|
|
1678
|
+
"truncated": "Se muestran las primeras {shown} llamadas de esta ejecución. Los recuentos de arriba corresponden a la ejecución completa; filtra por los fallos para verlos todos.",
|
|
1679
|
+
"failuresTruncated": "Se muestran las primeras {shown} llamadas fallidas. El recuento de arriba corresponde a la ejecución completa."
|
|
1635
1680
|
}
|
|
1636
1681
|
},
|
|
1637
1682
|
"platformObservability": {
|
|
@@ -2621,6 +2666,13 @@
|
|
|
2621
2666
|
"manageAccount": "Gestionar los fragmentos de la cuenta →"
|
|
2622
2667
|
}
|
|
2623
2668
|
},
|
|
2669
|
+
"taskTypeSuppressions": {
|
|
2670
|
+
"intro": "Elige qué operaciones reutilizables de este despliegue ofrece este tablero. Ocultar una la quita del selector de creación de tareas aquí y rechaza crear trabajo con ella; otros tableros no se ven afectados.",
|
|
2671
|
+
"loading": "Cargando operaciones…",
|
|
2672
|
+
"empty": "Este despliegue no registra ninguna operación reutilizable.",
|
|
2673
|
+
"offer": "Ofrecer en este tablero",
|
|
2674
|
+
"saveFailed": "No se pudieron cambiar las operaciones que ofrece este tablero"
|
|
2675
|
+
},
|
|
2624
2676
|
"issueTracker": {
|
|
2625
2677
|
"filing": {
|
|
2626
2678
|
"heading": "Dónde se registran los tickets",
|
|
@@ -3200,6 +3252,7 @@
|
|
|
3200
3252
|
"merge": "Políticas de riesgo",
|
|
3201
3253
|
"tracker": "Gestor de incidencias",
|
|
3202
3254
|
"fragments": "Buenas prácticas del servicio",
|
|
3255
|
+
"operations": "Operaciones",
|
|
3203
3256
|
"metadata": "Metadatos",
|
|
3204
3257
|
"members": "Miembros"
|
|
3205
3258
|
},
|
package/i18n/locales/fr.json
CHANGED
|
@@ -1632,6 +1632,51 @@
|
|
|
1632
1632
|
"provider": "Fournisseur",
|
|
1633
1633
|
"resultsCount": "{count} résultat | {count} résultats",
|
|
1634
1634
|
"queriesTitle": "Recherches effectuées"
|
|
1635
|
+
},
|
|
1636
|
+
"callsTitle": "Appels de modèle",
|
|
1637
|
+
"noCallsMatching": "Aucun appel de modèle ne correspond à ce filtre.",
|
|
1638
|
+
"filter": {
|
|
1639
|
+
"all": "Tous",
|
|
1640
|
+
"failed": "En échec",
|
|
1641
|
+
"warning": "Tronqués",
|
|
1642
|
+
"ok": "OK"
|
|
1643
|
+
},
|
|
1644
|
+
"failure": {
|
|
1645
|
+
"title": "Ce qui a échoué",
|
|
1646
|
+
"kind": "Échec : {kind}",
|
|
1647
|
+
"atStep": "à l'étape {index}",
|
|
1648
|
+
"lastErroredCall": "Dernier appel de modèle en échec",
|
|
1649
|
+
"moreErroredCalls": "et {count} appel en échec antérieur | et {count} appels en échec antérieurs",
|
|
1650
|
+
"lastFailedToolCall": "Dernier appel d'outil en échec",
|
|
1651
|
+
"aFailedToolCall": "Un appel d'outil en échec",
|
|
1652
|
+
"moreFailedToolCalls": "et {count} appel d'outil en échec antérieur | et {count} appels d'outil en échec antérieurs",
|
|
1653
|
+
"toolReturnedNothing": "L'outil n'a rien renvoyé.",
|
|
1654
|
+
"toolBodiesWithheld": "Les arguments et les résultats n'ont pas été capturés pour cette exécution, le texte d'erreur de l'outil n'est donc pas disponible.",
|
|
1655
|
+
"noFailingCall": {
|
|
1656
|
+
"sink-unreachable": "Une partie de la télémétrie de cette exécution n'a pas pu être chargée : rien ne peut être conclu sur ce qui a échoué.",
|
|
1657
|
+
"recorded-clean": "Aucun appel de modèle ni d'outil ne signale d'échec : la cause n'a laissé de trace dans aucune des deux sources. Regardez du côté du moteur, de l'autopsie du conteneur de l'étape en échec et du journal de provisionnement.",
|
|
1658
|
+
"partial-calls-only": "Aucun appel de modèle ne signale d'échec, et aucun appel d'outil n'a été enregistré pour cette exécution : la trajectoire ne peut donc pas répondre.",
|
|
1659
|
+
"partial-tools-only": "Aucun appel d'outil ne signale d'échec, et aucun appel de modèle n'a été enregistré pour cette exécution.",
|
|
1660
|
+
"no-telemetry": "Ni appels de modèle ni appels d'outil n'ont été enregistrés pour cette exécution : elle a échoué avant (ou en dehors de) tout travail d'agent. Consultez le journal de provisionnement."
|
|
1661
|
+
}
|
|
1662
|
+
},
|
|
1663
|
+
"toolCalls": {
|
|
1664
|
+
"title": "Appels d'outils",
|
|
1665
|
+
"subtitle": "ce que les agents ont fait, dans l'ordre où ils l'ont fait",
|
|
1666
|
+
"loading": "Chargement des appels d'outils…",
|
|
1667
|
+
"error": "Impossible de charger les appels d'outils.",
|
|
1668
|
+
"none": "Aucun appel d'outil enregistré pour cette exécution.",
|
|
1669
|
+
"noneMatching": "Aucun appel d'outil ne correspond à ce filtre.",
|
|
1670
|
+
"failed": "En échec",
|
|
1671
|
+
"durationHint": "Durée de l'appel d'outil",
|
|
1672
|
+
"dispatch": "Envoi {jobId}",
|
|
1673
|
+
"seq": "Appel n° {seq} de cet envoi",
|
|
1674
|
+
"bodiesWithheld": "Les arguments et les résultats n'ont pas été capturés : leur absence ne permet donc rien de conclure.",
|
|
1675
|
+
"arguments": "Arguments",
|
|
1676
|
+
"result": "Résultat",
|
|
1677
|
+
"dropped": "{chars} caractères supprimés à la capture",
|
|
1678
|
+
"truncated": "Affichage des {shown} premiers appels de cette exécution. Les compteurs ci-dessus portent sur l'exécution entière ; filtrez sur les échecs pour tous les voir.",
|
|
1679
|
+
"failuresTruncated": "Affichage des {shown} premiers appels en échec. Le compteur ci-dessus porte sur l'exécution entière."
|
|
1635
1680
|
}
|
|
1636
1681
|
},
|
|
1637
1682
|
"platformObservability": {
|
|
@@ -2621,6 +2666,13 @@
|
|
|
2621
2666
|
"manageAccount": "Gérer les fragments du compte →"
|
|
2622
2667
|
}
|
|
2623
2668
|
},
|
|
2669
|
+
"taskTypeSuppressions": {
|
|
2670
|
+
"intro": "Choisissez les opérations réutilisables de ce déploiement proposées sur ce tableau. En masquer une la retire du sélecteur de création de tâche ici et refuse la création de travail associée ; les autres tableaux ne sont pas affectés.",
|
|
2671
|
+
"loading": "Chargement des opérations…",
|
|
2672
|
+
"empty": "Ce déploiement n'enregistre aucune opération réutilisable.",
|
|
2673
|
+
"offer": "Proposer sur ce tableau",
|
|
2674
|
+
"saveFailed": "Impossible de modifier les opérations proposées sur ce tableau"
|
|
2675
|
+
},
|
|
2624
2676
|
"issueTracker": {
|
|
2625
2677
|
"filing": {
|
|
2626
2678
|
"heading": "Où les tickets sont créés",
|
|
@@ -3200,6 +3252,7 @@
|
|
|
3200
3252
|
"merge": "Politiques de risque",
|
|
3201
3253
|
"tracker": "Suivi des tickets",
|
|
3202
3254
|
"fragments": "Bonnes pratiques du service",
|
|
3255
|
+
"operations": "Opérations",
|
|
3203
3256
|
"metadata": "Métadonnées",
|
|
3204
3257
|
"members": "Membres"
|
|
3205
3258
|
},
|
package/i18n/locales/he.json
CHANGED
|
@@ -1632,6 +1632,51 @@
|
|
|
1632
1632
|
"provider": "ספק",
|
|
1633
1633
|
"resultsCount": "תוצאה אחת | שתי תוצאות | {count} תוצאות",
|
|
1634
1634
|
"queriesTitle": "חיפושים שבוצעו"
|
|
1635
|
+
},
|
|
1636
|
+
"callsTitle": "קריאות מודל",
|
|
1637
|
+
"noCallsMatching": "אין קריאות מודל התואמות למסנן זה.",
|
|
1638
|
+
"filter": {
|
|
1639
|
+
"all": "הכול",
|
|
1640
|
+
"failed": "נכשלו",
|
|
1641
|
+
"warning": "נקטעו",
|
|
1642
|
+
"ok": "תקינות"
|
|
1643
|
+
},
|
|
1644
|
+
"failure": {
|
|
1645
|
+
"title": "מה נכשל",
|
|
1646
|
+
"kind": "כשל: {kind}",
|
|
1647
|
+
"atStep": "בשלב {index}",
|
|
1648
|
+
"lastErroredCall": "קריאת המודל האחרונה שנכשלה",
|
|
1649
|
+
"moreErroredCalls": "ועוד קריאה קודמת אחת שנכשלה | ועוד שתי קריאות קודמות שנכשלו | ועוד {count} קריאות קודמות שנכשלו",
|
|
1650
|
+
"lastFailedToolCall": "קריאת הכלי האחרונה שנכשלה",
|
|
1651
|
+
"aFailedToolCall": "קריאת כלי שנכשלה",
|
|
1652
|
+
"moreFailedToolCalls": "ועוד קריאת כלי קודמת אחת שנכשלה | ועוד שתי קריאות כלי קודמות שנכשלו | ועוד {count} קריאות כלי קודמות שנכשלו",
|
|
1653
|
+
"toolReturnedNothing": "הכלי לא החזיר דבר.",
|
|
1654
|
+
"toolBodiesWithheld": "ארגומנטים ותוצאות לא נלכדו עבור ריצה זו, ולכן טקסט השגיאה של הכלי אינו זמין.",
|
|
1655
|
+
"noFailingCall": {
|
|
1656
|
+
"sink-unreachable": "חלק מהטלמטריה של הריצה הזו לא נטען, ולכן אי אפשר להסיק דבר לגבי מה נכשל.",
|
|
1657
|
+
"recorded-clean": "אף קריאת מודל ואף קריאת כלי לא דיווחו על כשל, כך שהסיבה לא הותירה רשומה באף אחד מהמקורות: בדקו את המנוע, את דוח הנתיחה של המכולה בשלב שנכשל ואת יומן ההקצאה.",
|
|
1658
|
+
"partial-calls-only": "אף קריאת מודל לא דיווחה על כשל, ולא נרשמו קריאות כלי עבור ריצה זו, ולכן המסלול אינו יכול לענות על כך.",
|
|
1659
|
+
"partial-tools-only": "אף קריאת כלי לא דיווחה על כשל, ולא נרשמו קריאות מודל עבור ריצה זו.",
|
|
1660
|
+
"no-telemetry": "לא נרשמו עבור ריצה זו לא קריאות מודל ולא קריאות כלי, ולכן היא נכשלה לפני כל עבודת סוכן (או מחוץ לה). בדקו את יומן ההקצאה."
|
|
1661
|
+
}
|
|
1662
|
+
},
|
|
1663
|
+
"toolCalls": {
|
|
1664
|
+
"title": "קריאות כלים",
|
|
1665
|
+
"subtitle": "מה הסוכנים עשו, בסדר שבו עשו זאת",
|
|
1666
|
+
"loading": "טוען קריאות כלים…",
|
|
1667
|
+
"error": "לא ניתן לטעון את קריאות הכלים.",
|
|
1668
|
+
"none": "לא נרשמו קריאות כלים עבור ריצה זו.",
|
|
1669
|
+
"noneMatching": "אין קריאות כלים התואמות למסנן זה.",
|
|
1670
|
+
"failed": "נכשלה",
|
|
1671
|
+
"durationHint": "כמה זמן ארך הכלי",
|
|
1672
|
+
"dispatch": "שיגור {jobId}",
|
|
1673
|
+
"seq": "קריאה מס׳ {seq} בשיגור זה",
|
|
1674
|
+
"bodiesWithheld": "ארגומנטים ותוצאות לא נלכדו, ולכן אי אפשר להסיק דבר מהיעדרם.",
|
|
1675
|
+
"arguments": "ארגומנטים",
|
|
1676
|
+
"result": "תוצאה",
|
|
1677
|
+
"dropped": "{chars} תווים הושמטו בעת הלכידה",
|
|
1678
|
+
"truncated": "מוצגות {shown} הקריאות הראשונות של הריצה. המספרים למעלה מתייחסים לריצה כולה; סננו לכשלים כדי לראות את כולם.",
|
|
1679
|
+
"failuresTruncated": "מוצגות {shown} הקריאות הכושלות הראשונות. המספר למעלה מתייחס לריצה כולה."
|
|
1635
1680
|
}
|
|
1636
1681
|
},
|
|
1637
1682
|
"platformObservability": {
|
|
@@ -2762,6 +2807,13 @@
|
|
|
2762
2807
|
"manageAccount": "נהל מקטעי חשבון ←"
|
|
2763
2808
|
}
|
|
2764
2809
|
},
|
|
2810
|
+
"taskTypeSuppressions": {
|
|
2811
|
+
"intro": "בחרו אילו פעולות רב-פעמיות של פריסה זו יוצעו בלוח הזה. הסתרה של פעולה מסירה אותה מבורר יצירת המשימות כאן ומונעת יצירת עבודה תחתיה; לוחות אחרים אינם מושפעים.",
|
|
2812
|
+
"loading": "טוען פעולות…",
|
|
2813
|
+
"empty": "פריסה זו אינה רושמת פעולות רב-פעמיות.",
|
|
2814
|
+
"offer": "הצעה בלוח הזה",
|
|
2815
|
+
"saveFailed": "לא ניתן היה לשנות אילו פעולות מוצעות בלוח הזה"
|
|
2816
|
+
},
|
|
2765
2817
|
"issueTracker": {
|
|
2766
2818
|
"filing": {
|
|
2767
2819
|
"heading": "היכן מוגשים כרטיסים",
|
|
@@ -3341,6 +3393,7 @@
|
|
|
3341
3393
|
"merge": "מדיניות סיכון",
|
|
3342
3394
|
"tracker": "מעקב כרטיסים",
|
|
3343
3395
|
"fragments": "שיטות עבודה מומלצות לשירות",
|
|
3396
|
+
"operations": "פעולות",
|
|
3344
3397
|
"metadata": "מטא-נתונים",
|
|
3345
3398
|
"members": "חברים"
|
|
3346
3399
|
},
|