@cat-factory/app 0.259.1 → 0.259.3

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.
@@ -32,6 +32,7 @@ export const REASON_KEY: Record<ToolServerUnavailableReason, string> = {
32
32
  oauth_not_connected: 'panels.stepDetail.toolServers.reason.oauthNotConnected',
33
33
  oauth_token_failed: 'panels.stepDetail.toolServers.reason.oauthTokenFailed',
34
34
  over_budget: 'panels.stepDetail.toolServers.reason.overBudget',
35
+ consensus_panel: 'panels.stepDetail.toolServers.reason.consensusPanel',
35
36
  }
36
37
 
37
38
  /**
@@ -64,6 +65,7 @@ export const REMEDY_KEY: Record<ToolServerUnavailableReason, string> = {
64
65
  oauth_not_connected: 'panels.stepDetail.toolServers.remedy.oauthNotConnected',
65
66
  oauth_token_failed: 'panels.stepDetail.toolServers.remedy.oauthTokenFailed',
66
67
  over_budget: 'panels.stepDetail.toolServers.remedy.overBudget',
68
+ consensus_panel: 'panels.stepDetail.toolServers.remedy.consensusPanel',
67
69
  }
68
70
 
69
71
  /** The reason vocabulary as the SCHEMA states it: what a parity assertion grades {@link REASON_KEY} against. */
@@ -29,6 +29,7 @@ import {
29
29
  type BinaryGeneratorCapability,
30
30
  type BinaryModality,
31
31
  type BinaryOutputConfig,
32
+ type BinaryValueOption,
32
33
  type ConflictingOutputSizeOption,
33
34
  } from '@cat-factory/contracts'
34
35
  import { binaryOutputPickIssues, type BinaryOutputPickIssue } from '~/utils/binaryOutput'
@@ -283,6 +284,17 @@ const SIZE_CONFLICT_LABELS: Record<ConflictingOutputSizeOption, () => string> =
283
284
  upscale: () => t('pipeline.builder.binaryUpscale'),
284
285
  }
285
286
 
287
+ /**
288
+ * A value option named by the FIELD LABEL it carries on this form, so a refusal about a value
289
+ * points at the control holding it. Closed and compiled-against on both sides of the wire (unlike
290
+ * a capability, which a newer mothership can name), so the lookup needs no membership guard.
291
+ */
292
+ const VALUE_OPTION_LABELS: Record<BinaryValueOption, () => string> = {
293
+ aspectRatio: () => t('pipeline.builder.binaryAspectRatio'),
294
+ outputSize: () => t('pipeline.builder.binaryOutputSize'),
295
+ upscale: () => t('pipeline.builder.binaryUpscale'),
296
+ }
297
+
286
298
  /**
287
299
  * A capability in the reader's language, INCLUDING one this build does not define.
288
300
  *
@@ -881,6 +893,23 @@ const declaredFormats = computed(() => {
881
893
  })
882
894
  }}
883
895
  </p>
896
+ <!-- A refusal one notch finer than the one above it: the option is supported everywhere and
897
+ the VALUE is on nobody's list. It names what IS accepted, because a refusal that only
898
+ says no leaves the reader guessing at a set the picker is already holding. -->
899
+ <p
900
+ v-for="value in pick.unacceptedValues"
901
+ :key="value.option"
902
+ class="text-[10px] text-amber-400"
903
+ data-testid="binary-output-value-unaccepted"
904
+ >
905
+ {{
906
+ t('pipeline.builder.binaryOptionValueUnaccepted', {
907
+ option: VALUE_OPTION_LABELS[value.option](),
908
+ requested: value.requested,
909
+ accepted: value.accepted.join(', '),
910
+ })
911
+ }}
912
+ </p>
884
913
  <!-- A refusal the SAVE makes on the step's own fields, so it is stated here rather than
885
914
  waited for: all three controls are offered together, and the remedy is deleting one of
886
915
  two values on this form. -->
@@ -910,6 +939,36 @@ const declaredFormats = computed(() => {
910
939
  })
911
940
  }}
912
941
  </p>
942
+ <!-- ADVISORY, and the one of the three the reader can act on precisely: another selected
943
+ integration DOES accept the value, so the step starts, and the ones that will not take it
944
+ are named because dropping or re-routing around them is the whole fix. -->
945
+ <p
946
+ v-for="value in pick.partiallyAcceptedValues"
947
+ :key="value.option"
948
+ class="text-[10px] text-slate-500"
949
+ data-testid="binary-output-value-partial"
950
+ >
951
+ {{
952
+ t('pipeline.builder.binaryOptionValuePartial', {
953
+ option: VALUE_OPTION_LABELS[value.option](),
954
+ requested: value.requested,
955
+ generators: value.refusedBy.join(', '),
956
+ })
957
+ }}
958
+ </p>
959
+ <!-- ADVISORY, grouped with the lines above it: one selected integration refuses the value and
960
+ another has not said what it takes, so the step starts and is served by the second. -->
961
+ <p
962
+ v-if="has('option_value_unverifiable')"
963
+ class="text-[10px] text-slate-500"
964
+ data-testid="binary-output-value-unverifiable"
965
+ >
966
+ {{
967
+ t('pipeline.builder.binaryOptionValueUnverifiable', {
968
+ options: pick.unverifiableValues.map((o) => VALUE_OPTION_LABELS[o]()).join(', '),
969
+ })
970
+ }}
971
+ </p>
913
972
  <p
914
973
  v-if="unusableMediaTypes.length"
915
974
  class="text-[10px] text-amber-400"
@@ -521,6 +521,91 @@ describe('binaryOutputPickIssues, generative half', () => {
521
521
  expect(pick.conflictingSizeOptions).toEqual(['upscale'])
522
522
  })
523
523
 
524
+ // The refusal a value axis adds over the capability one: every selected endpoint takes an
525
+ // aspect ratio and none of them takes THIS ratio. Stated here because the builder is where the
526
+ // fix is (pick a listed ratio, or select an integration that renders this one), and because the
527
+ // set it names is already on the snapshot the picker is holding.
528
+ it('names a value nothing selected accepts, and what they do accept', () => {
529
+ const pick = binaryOutputPickIssues(
530
+ { storageServiceId: 'files', generatorIds: ['bucketed'], generation: { aspectRatio: '7:3' } },
531
+ catalog,
532
+ true,
533
+ [
534
+ {
535
+ id: 'bucketed',
536
+ modalities: ['image' as const],
537
+ capabilities: ['aspect-ratio' as const],
538
+ accepts: { aspectRatios: ['1:1', '16:9'] },
539
+ },
540
+ ],
541
+ )
542
+ expect(pick.issues).toContain('option_value_unaccepted')
543
+ expect(pick.unacceptedValues).toEqual([
544
+ { option: 'aspectRatio', requested: '7:3', accepted: ['1:1', '16:9'] },
545
+ ])
546
+ })
547
+
548
+ // ADVISORY, and the state that keeps the refusal above from firing on a working selection: one
549
+ // integration refuses the ratio and another has not said what it takes.
550
+ it('advises rather than refuses when a silent declarer might still serve the value', () => {
551
+ const pick = binaryOutputPickIssues(
552
+ {
553
+ storageServiceId: 'files',
554
+ generatorIds: ['bucketed', 'open'],
555
+ generation: { aspectRatio: '7:3' },
556
+ },
557
+ catalog,
558
+ true,
559
+ [
560
+ {
561
+ id: 'bucketed',
562
+ modalities: ['image' as const],
563
+ capabilities: ['aspect-ratio' as const],
564
+ accepts: { aspectRatios: ['1:1', '16:9'] },
565
+ },
566
+ { id: 'open', modalities: ['image' as const], capabilities: ['aspect-ratio' as const] },
567
+ ],
568
+ )
569
+ expect(pick.issues).toContain('option_value_unverifiable')
570
+ expect(pick.issues).not.toContain('option_value_unaccepted')
571
+ expect(pick.unverifiableValues).toEqual(['aspectRatio'])
572
+ })
573
+
574
+ // ADVISORY too, and the one the reader can act on precisely: one selected endpoint takes the
575
+ // ratio and another has written down that it does not. Naming the second is the whole remedy,
576
+ // and it is the finding a first-accepting-declarer short-circuit reported as nothing at all.
577
+ it('names the integrations that enumerated a value away when another accepts it', () => {
578
+ const pick = binaryOutputPickIssues(
579
+ {
580
+ storageServiceId: 'files',
581
+ generatorIds: ['wide', 'bucketed'],
582
+ generation: { aspectRatio: '7:3' },
583
+ },
584
+ catalog,
585
+ true,
586
+ [
587
+ {
588
+ id: 'wide',
589
+ modalities: ['image' as const],
590
+ capabilities: ['aspect-ratio' as const],
591
+ accepts: { aspectRatios: ['7:3', '1:1'] },
592
+ },
593
+ {
594
+ id: 'bucketed',
595
+ modalities: ['image' as const],
596
+ capabilities: ['aspect-ratio' as const],
597
+ accepts: { aspectRatios: ['1:1', '16:9'] },
598
+ },
599
+ ],
600
+ )
601
+ expect(pick.issues).toContain('option_value_partial')
602
+ expect(pick.issues).not.toContain('option_value_unaccepted')
603
+ expect(pick.issues).not.toContain('option_value_unverifiable')
604
+ expect(pick.partiallyAcceptedValues).toEqual([
605
+ { option: 'aspectRatio', requested: '7:3', refusedBy: ['bucketed'] },
606
+ ])
607
+ })
608
+
524
609
  it('reports BOTH faults when an unknown id was the one covering a requirement', () => {
525
610
  // One edit should clear the step. Naming only the missing id would leave the user to
526
611
  // discover the uncovered requirement on the next round trip.
@@ -3,6 +3,7 @@ import {
3
3
  binaryCapabilityCoverage,
4
4
  binaryFormatCoverage,
5
5
  binaryModalityOverlaps,
6
+ binaryValueCoverage,
6
7
  conflictingOutputSizeOptions,
7
8
  isBinaryModality,
8
9
  modalityCarriesPixelDimensions,
@@ -13,6 +14,9 @@ import type {
13
14
  BinaryGeneratorCapability,
14
15
  BinaryModality,
15
16
  BinaryModalityOverlap,
17
+ BinaryPartiallyAcceptedValue,
18
+ BinaryUnacceptedValue,
19
+ BinaryValueOption,
16
20
  ConflictingOutputSizeOption,
17
21
  RegisteredBinaryGenerator,
18
22
  } from '@cat-factory/contracts'
@@ -532,6 +536,28 @@ export type BinaryOutputPickIssue =
532
536
  * flag most working selections in the product.
533
537
  */
534
538
  | 'capability_unverifiable'
539
+ /**
540
+ * A generation option every selected integration can be ASKED for and none of them accepts the
541
+ * step's VALUE at: a `7:3` aspect ratio against endpoints whose picklists offer ten others
542
+ * (kernel's `option_value_unaccepted` spelling verbatim, like the members above it). A refusal.
543
+ */
544
+ | 'option_value_unaccepted'
545
+ /**
546
+ * A selected integration ACCEPTS the step's value and another has enumerated it away, so the
547
+ * step is servable by part of what it selected and the rest would quietly deliver something
548
+ * else. ADVISORY, and the reason is the same one that makes a capability covered when a single
549
+ * integration declares it: which endpoint renders which artifact is the agent's call. What is
550
+ * NOT optional is naming the ones that refuse it, since routing around them is the whole remedy.
551
+ */
552
+ | 'option_value_partial'
553
+ /**
554
+ * The step's value is on no stated set, and a selected integration that declares the capability
555
+ * states no set at all, so it may still be served. ADVISORY, for the reason
556
+ * `capability_unverifiable` is, and it is deliberately silent where NOBODY states a set: that is
557
+ * the state every registration is in until an endpoint is audited, and a line that fired there
558
+ * would ride nearly every step carrying an aspect ratio.
559
+ */
560
+ | 'option_value_unverifiable'
535
561
  /**
536
562
  * The step states an exact output size AND another option that restates the delivered
537
563
  * dimensions (`aspectRatio`, `upscale`). A refusal, mirroring `assertUnambiguousOutputSize` at
@@ -567,6 +593,14 @@ export interface BinaryOutputPickState {
567
593
  unsupportedCapabilities: readonly BinaryGeneratorCapability[]
568
594
  /** The ones that could not be judged, kept apart from the refusal above. */
569
595
  unverifiableCapabilities: readonly BinaryGeneratorCapability[]
596
+ /** The requested option values nothing selected accepts, each with what IS accepted, so the
597
+ * message names a value the reader can pick instead of only the one they cannot. */
598
+ unacceptedValues: readonly BinaryUnacceptedValue[]
599
+ /** The requested values a selected integration accepts and another enumerated away, naming the
600
+ * ones that refuse them, since the remedy is dropping or re-routing around those. */
601
+ partiallyAcceptedValues: readonly BinaryPartiallyAcceptedValue[]
602
+ /** The ones a silent declarer left open, kept apart from the refusal above. */
603
+ unverifiableValues: readonly BinaryValueOption[]
570
604
  /** The options restating the delivered dimensions beside an exact size, for the line that names
571
605
  * which field to delete. Computed through contracts' own rule, so this cannot come to a
572
606
  * different answer from the save that refuses it. */
@@ -598,7 +632,7 @@ function generatorPickIssues(
598
632
  config: BinaryOutputConfig | undefined,
599
633
  generators: readonly Pick<
600
634
  RegisteredBinaryGenerator,
601
- 'id' | 'modalities' | 'mediaTypes' | 'capabilities'
635
+ 'id' | 'modalities' | 'mediaTypes' | 'capabilities' | 'accepts'
602
636
  >[],
603
637
  unavailable: boolean,
604
638
  ): {
@@ -610,6 +644,9 @@ function generatorPickIssues(
610
644
  overlaps: BinaryModalityOverlap[]
611
645
  unsupportedCapabilities: BinaryGeneratorCapability[]
612
646
  unverifiableCapabilities: BinaryGeneratorCapability[]
647
+ unacceptedValues: BinaryUnacceptedValue[]
648
+ partiallyAcceptedValues: BinaryPartiallyAcceptedValue[]
649
+ unverifiableValues: BinaryValueOption[]
613
650
  } {
614
651
  const none = {
615
652
  unknownGeneratorIds: [],
@@ -619,6 +656,9 @@ function generatorPickIssues(
619
656
  overlaps: [],
620
657
  unsupportedCapabilities: [],
621
658
  unverifiableCapabilities: [],
659
+ unacceptedValues: [],
660
+ partiallyAcceptedValues: [],
661
+ unverifiableValues: [],
622
662
  }
623
663
  if (unavailable) return { issues: ['generators_unavailable'], ...none }
624
664
  const byId = new Map(generators.map((g) => [g.id, g]))
@@ -646,6 +686,10 @@ function generatorPickIssues(
646
686
  requiredBinaryCapabilities(config?.generation),
647
687
  selected,
648
688
  )
689
+ // One notch finer: the option is supported and the VALUE is not. Imported like every rule
690
+ // beside it, so the line this surface shows and the refusal the backend raises are one
691
+ // judgement rather than two that agree until somebody edits one of them.
692
+ const value = binaryValueCoverage(config?.generation, selected)
649
693
  const issues: BinaryOutputPickIssue[] = []
650
694
  if (unknownGeneratorIds.length) issues.push('unknown_generator')
651
695
  if (uncovered.length) issues.push('modality_uncovered')
@@ -654,6 +698,9 @@ function generatorPickIssues(
654
698
  if (overlaps.length) issues.push('generator_overlap')
655
699
  if (capability.uncovered.length) issues.push('capability_unsupported')
656
700
  if (capability.unverifiable.length) issues.push('capability_unverifiable')
701
+ if (value.unaccepted.length) issues.push('option_value_unaccepted')
702
+ if (value.partial.length) issues.push('option_value_partial')
703
+ if (value.unverifiable.length) issues.push('option_value_unverifiable')
657
704
  return {
658
705
  issues,
659
706
  unknownGeneratorIds,
@@ -663,6 +710,9 @@ function generatorPickIssues(
663
710
  overlaps,
664
711
  unsupportedCapabilities: capability.uncovered,
665
712
  unverifiableCapabilities: capability.unverifiable,
713
+ unacceptedValues: value.unaccepted,
714
+ partiallyAcceptedValues: value.partial,
715
+ unverifiableValues: value.unverifiable,
666
716
  }
667
717
  }
668
718
 
@@ -699,7 +749,7 @@ export function binaryOutputPickIssues(
699
749
  // stays a legitimate value rather than a hole.
700
750
  generators: readonly Pick<
701
751
  RegisteredBinaryGenerator,
702
- 'id' | 'modalities' | 'mediaTypes' | 'capabilities'
752
+ 'id' | 'modalities' | 'mediaTypes' | 'capabilities' | 'accepts'
703
753
  >[] = [],
704
754
  // Whether the deployment's integrations could not be READ. Defaulted to `false` — the honest
705
755
  // default, since every deployment but a mothership-mode node reads them in-process and cannot
@@ -737,6 +787,9 @@ export function binaryOutputPickIssues(
737
787
  generatorOverlaps: generative.overlaps,
738
788
  unsupportedCapabilities: generative.unsupportedCapabilities,
739
789
  unverifiableCapabilities: generative.unverifiableCapabilities,
790
+ unacceptedValues: generative.unacceptedValues,
791
+ partiallyAcceptedValues: generative.partiallyAcceptedValues,
792
+ unverifiableValues: generative.unverifiableValues,
740
793
  conflictingSizeOptions,
741
794
  }
742
795
  }
@@ -764,6 +817,9 @@ export function binaryOutputPickIssues(
764
817
  generatorOverlaps: generative.overlaps,
765
818
  unsupportedCapabilities: generative.unsupportedCapabilities,
766
819
  unverifiableCapabilities: generative.unverifiableCapabilities,
820
+ unacceptedValues: generative.unacceptedValues,
821
+ partiallyAcceptedValues: generative.partiallyAcceptedValues,
822
+ unverifiableValues: generative.unverifiableValues,
767
823
  conflictingSizeOptions,
768
824
  }
769
825
  }
@@ -1997,6 +1997,7 @@
1997
1997
  "oauthNotConnected": "war nicht verfügbar: dieses Board wurde noch nicht damit verbunden.",
1998
1998
  "oauthTokenFailed": "war nicht verfügbar: die Verbindung liefert kein Zugriffstoken mehr.",
1999
1999
  "overBudget": "war nicht verfügbar: dieser Agent deklariert mehr Tool-Server, als ein Lauf mitführt.",
2000
+ "consensusPanel": "war nicht verfügbar: dieser Schritt lief als Konsens-Panel, und ein Panel hat keine Agentenlaufzeit, an die sich ein Tool-Server anschließen ließe.",
2000
2001
  "unknown": "war nicht verfügbar ({reason})."
2001
2002
  },
2002
2003
  "remedy": {
@@ -2007,7 +2008,8 @@
2007
2008
  "unusableSecret": "Korrigiere die Deklaration im Code der Installation: Die Zugangsdaten eines entfernten Servers reisen in einem Header, die eines lokalen werden in den Serverprozess injiziert.",
2008
2009
  "oauthNotConnected": "Verbinden Sie dieses Board im Infrastruktur-Fenster damit. Ein Deployment ohne ENCRYPTION_KEY hat keinen Ort für eine Berechtigung, das muss ein Betreiber also zuerst setzen.",
2009
2010
  "oauthTokenFailed": "Verbinden Sie es im Infrastruktur-Fenster neu, oder warten Sie die Störung des Anbieters ab.",
2010
- "overBudget": "Kürzen Sie, was der Agent deklariert, damit ein Lauf alles mitführen kann."
2011
+ "overBudget": "Kürzen Sie, was der Agent deklariert, damit ein Lauf alles mitführen kann.",
2012
+ "consensusPanel": "Schalten Sie Konsens für diesen Schritt ab, wenn er das Tool braucht, oder nehmen Sie in Kauf, dass das Panel ohne es urteilt. Am Server selbst muss sich nichts ändern."
2011
2013
  },
2012
2014
  "observed": {
2013
2015
  "ready": "gestartet",
@@ -4363,6 +4365,9 @@
4363
4365
  "binaryCapabilityUnknown": "{capability} (eine Fähigkeit, die diese Installation nicht definiert)",
4364
4366
  "binaryCapabilityUnsupported": "Keine ausgewählte Integration unterstützt {capabilities}, was die Generierungsoptionen dieses Schritts verlangen. Entferne die Option oder wähle eine Integration, die die Fähigkeit deklariert.",
4365
4367
  "binaryCapabilityUnverifiable": "Keine ausgewählte Integration deklariert Unterstützung für {capabilities}, aber eine von ihnen deklariert überhaupt keine Fähigkeiten, daher konnte das nicht geprüft werden. Der Schritt startet trotzdem; prüfe es in der API der Integration.",
4368
+ "binaryOptionValueUnaccepted": "Keine der ausgewählten Integrationen akzeptiert {option} von {requested}. Zusammen akzeptieren sie: {accepted}. Fordern Sie einen dieser Werte an oder wählen Sie eine Integration, die diesen Wert rendert.",
4369
+ "binaryOptionValuePartial": "{generators} akzeptiert {option} von {requested} nicht, eine andere ausgewählte Integration jedoch schon. Der Schritt startet trotzdem: Senden Sie diese Option nur an die Integrationen, die sie akzeptieren, oder entfernen Sie die übrigen.",
4370
+ "binaryOptionValueUnverifiable": "Eine ausgewählte Integration nennt die Werte, die sie akzeptiert, und akzeptiert nicht, was dieser Schritt verlangt ({options}); eine andere nennt gar keine, deshalb ließ sich das nicht klären. Der Schritt startet trotzdem, und nur ein Teil Ihrer Integrationen wird ihn bedienen.",
4366
4371
  "binaryReferenceImages": "Referenzbilder",
4367
4372
  "binaryReferenceImagesPlaceholder": "Rolle{'|'}Ort{'|'}Dienst, eine pro Zeile",
4368
4373
  "binaryReferenceImagesUnusable": "Nicht als Referenz gespeichert: {entries}. Jede Zeile muss Rolle{'|'}Ort sein, wobei die Rolle style, subject, composition oder base ist.",
@@ -1541,6 +1541,7 @@
1541
1541
  "oauthNotConnected": "was not available: nobody has connected this board to it yet.",
1542
1542
  "oauthTokenFailed": "was not available: the connection stopped producing an access token.",
1543
1543
  "overBudget": "was not available: this agent declares more tool servers than one run carries.",
1544
+ "consensusPanel": "was not available: this step ran as a consensus panel, and a panel has no agent runtime to connect a tool server to.",
1544
1545
  "unknown": "was not available ({reason})."
1545
1546
  },
1546
1547
  "remedy": {
@@ -1551,7 +1552,8 @@
1551
1552
  "unusableSecret": "Fix the declaration in the deployment's code: a remote server's credential rides a header, and a local one is injected into the server's own process.",
1552
1553
  "oauthNotConnected": "Connect this board to it from the Infrastructure window. A deployment with no ENCRYPTION_KEY has nowhere to keep a grant, so an operator has to set that first.",
1553
1554
  "oauthTokenFailed": "Reconnect it from the Infrastructure window, or wait out the vendor's outage.",
1554
- "overBudget": "Trim what the agent declares, so one run can carry all of it."
1555
+ "overBudget": "Trim what the agent declares, so one run can carry all of it.",
1556
+ "consensusPanel": "Turn consensus off for this step if it needs the tool, or accept that the panel judges without it. Nothing about the server has to change."
1555
1557
  },
1556
1558
  "observed": {
1557
1559
  "ready": "started",
@@ -4953,6 +4955,9 @@
4953
4955
  "binaryCapabilityUnknown": "{capability} (a capability this deployment does not define)",
4954
4956
  "binaryCapabilityUnsupported": "No selected integration supports {capabilities}, which this step's generation options ask for. Remove the option, or select an integration that declares the capability.",
4955
4957
  "binaryCapabilityUnverifiable": "No selected integration declares support for {capabilities}, but one of them declares no capabilities at all, so this could not be checked. The step still starts; confirm it from the integration’s API.",
4958
+ "binaryOptionValueUnaccepted": "No selected integration accepts {option} of {requested}. Between them they accept: {accepted}. Ask for one of those, or select an integration that renders this one.",
4959
+ "binaryOptionValuePartial": "{generators} do not accept {option} of {requested}, but another selected integration does. The step still starts: send this option only to the integrations that accept it, or drop the ones that do not.",
4960
+ "binaryOptionValueUnverifiable": "A selected integration states the values it accepts and does not accept what this step asks for ({options}), while another states none at all, so this could not be settled. The step still starts, and only some of your integrations will serve it.",
4956
4961
  "binaryReferenceImages": "Reference images",
4957
4962
  "binaryReferenceImagesPlaceholder": "role{'|'}location{'|'}service, one per line",
4958
4963
  "binaryReferenceImagesUnusable": "Not stored as references: {entries}. Each line must be role{'|'}location, where role is style, subject, composition or base.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "no estuvo disponible: nadie ha conectado este tablero con él todavía.",
1451
1451
  "oauthTokenFailed": "no estuvo disponible: la conexión dejó de producir un token de acceso.",
1452
1452
  "overBudget": "no estuvo disponible: este agente declara más servidores de los que lleva una ejecución.",
1453
+ "consensusPanel": "no estuvo disponible: este paso se ejecutó como un panel de consenso, y un panel no tiene entorno de agente al que conectar un servidor de herramientas.",
1453
1454
  "unknown": "no estuvo disponible ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "Corrige la declaración en el código de la instalación: la credencial de un servidor remoto viaja en una cabecera y la de uno local se inyecta en el proceso del servidor.",
1461
1462
  "oauthNotConnected": "Conecta este tablero con él desde la ventana de Infraestructura. Un despliegue sin ENCRYPTION_KEY no tiene dónde guardar una concesión, así que un operador debe configurarla primero.",
1462
1463
  "oauthTokenFailed": "Vuelve a conectarlo desde la ventana de Infraestructura, o espera a que pase la caída del proveedor.",
1463
- "overBudget": "Recorta lo que declara el agente, para que una ejecución pueda llevarlo todo."
1464
+ "overBudget": "Recorta lo que declara el agente, para que una ejecución pueda llevarlo todo.",
1465
+ "consensusPanel": "Desactiva el consenso en este paso si necesita la herramienta, o acepta que el panel juzgue sin ella. No hay que cambiar nada del servidor."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "iniciado",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (una capacidad que esta instalación no define)",
4803
4805
  "binaryCapabilityUnsupported": "Ninguna integración seleccionada admite {capabilities}, que las opciones de generación de este paso solicitan. Quita la opción o selecciona una integración que declare la capacidad.",
4804
4806
  "binaryCapabilityUnverifiable": "Ninguna integración seleccionada declara admitir {capabilities}, pero una de ellas no declara capacidad alguna, así que no se pudo comprobar. El paso arranca igualmente; confírmalo en la API de la integración.",
4807
+ "binaryOptionValueUnaccepted": "Ninguna integración seleccionada acepta {option} de {requested}. Entre todas aceptan: {accepted}. Pide uno de esos valores o selecciona una integración que genere este.",
4808
+ "binaryOptionValuePartial": "{generators} no acepta {option} de {requested}, pero otra integración seleccionada sí. El paso se inicia igualmente: envía esta opción solo a las integraciones que la aceptan, o quita las que no.",
4809
+ "binaryOptionValueUnverifiable": "Una integración seleccionada indica los valores que acepta y no acepta lo que pide este paso ({options}), mientras que otra no indica ninguno, así que no se pudo comprobar. El paso se inicia igualmente y solo algunas de tus integraciones lo atenderán.",
4805
4810
  "binaryReferenceImages": "Imágenes de referencia",
4806
4811
  "binaryReferenceImagesPlaceholder": "rol{'|'}ubicación{'|'}servicio, una por línea",
4807
4812
  "binaryReferenceImagesUnusable": "No se guardaron como referencia: {entries}. Cada línea debe ser rol{'|'}ubicación, con el rol style, subject, composition o base.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "n'était pas disponible : personne n'a encore connecté ce tableau à ce serveur.",
1451
1451
  "oauthTokenFailed": "n'était pas disponible : la connexion ne produit plus de jeton d'accès.",
1452
1452
  "overBudget": "n'était pas disponible : cet agent déclare plus de serveurs d'outils qu'une exécution n'en transporte.",
1453
+ "consensusPanel": "n'était pas disponible : cette étape s'est exécutée comme un panel de consensus, et un panel n'a pas d'environnement d'agent auquel rattacher un serveur d'outils.",
1453
1454
  "unknown": "n'était pas disponible ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "Corrigez la déclaration dans le code du déploiement : l’identifiant d’un serveur distant voyage dans un en-tête, celui d’un serveur local est injecté dans son processus.",
1461
1462
  "oauthNotConnected": "Connectez ce tableau à ce serveur depuis la fenêtre Infrastructure. Un déploiement sans ENCRYPTION_KEY n’a nulle part où conserver une autorisation : un opérateur doit d’abord la définir.",
1462
1463
  "oauthTokenFailed": "Reconnectez-le depuis la fenêtre Infrastructure, ou attendez la fin de la panne du fournisseur.",
1463
- "overBudget": "Réduisez ce que l’agent déclare, pour qu’une exécution puisse tout transporter."
1464
+ "overBudget": "Réduisez ce que l’agent déclare, pour qu’une exécution puisse tout transporter.",
1465
+ "consensusPanel": "Désactivez le consensus pour cette étape si elle a besoin de l'outil, ou acceptez que le panel juge sans lui. Rien n'est à changer côté serveur."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "démarré",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (une capacité que ce déploiement ne définit pas)",
4803
4805
  "binaryCapabilityUnsupported": "Aucune intégration sélectionnée ne prend en charge {capabilities}, que les options de génération de cette étape demandent. Retirez l’option ou sélectionnez une intégration qui déclare la capacité.",
4804
4806
  "binaryCapabilityUnverifiable": "Aucune intégration sélectionnée ne déclare prendre en charge {capabilities}, mais l’une d’elles ne déclare aucune capacité, la vérification est donc impossible. L’étape démarre quand même ; confirmez-le dans l’API de l’intégration.",
4807
+ "binaryOptionValueUnaccepted": "Aucune intégration sélectionnée n'accepte {option} de {requested}. Ensemble, elles acceptent : {accepted}. Demandez l'une de ces valeurs ou sélectionnez une intégration capable de produire celle-ci.",
4808
+ "binaryOptionValuePartial": "{generators} n'accepte pas {option} de {requested}, contrairement à une autre intégration sélectionnée. L'étape démarre quand même : n'envoyez cette option qu'aux intégrations qui l'acceptent, ou retirez les autres.",
4809
+ "binaryOptionValueUnverifiable": "Une intégration sélectionnée indique les valeurs qu'elle accepte et refuse ce que demande cette étape ({options}), tandis qu'une autre n'en indique aucune : impossible de trancher. L'étape démarre quand même, et seule une partie de vos intégrations la servira.",
4805
4810
  "binaryReferenceImages": "Images de référence",
4806
4811
  "binaryReferenceImagesPlaceholder": "rôle{'|'}emplacement{'|'}service, une par ligne",
4807
4812
  "binaryReferenceImagesUnusable": "Non enregistrées comme référence : {entries}. Chaque ligne doit être rôle{'|'}emplacement, le rôle étant style, subject, composition ou base.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "לא היה זמין: איש עדיין לא חיבר את הלוח הזה אליו.",
1451
1451
  "oauthTokenFailed": "לא היה זמין: החיבור הפסיק להנפיק אסימון גישה.",
1452
1452
  "overBudget": "לא היה זמין: הסוכן הזה מצהיר על יותר שרתי כלים ממה שריצה אחת נושאת.",
1453
+ "consensusPanel": "לא היה זמין: השלב הזה רץ כפאנל קונצנזוס, ולפאנל אין סביבת ריצה של סוכן שאפשר לחבר אליה שרת כלים.",
1453
1454
  "unknown": "לא היה זמין ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "תקנו את ההצהרה בקוד ההתקנה: פרטי ההזדהות של שרת מרוחק נשלחים בכותרת, ושל שרת מקומי מוזרקים לתהליך של השרת.",
1461
1462
  "oauthNotConnected": "חברו את הלוח הזה אליו מחלון התשתית. בפריסה ללא ENCRYPTION_KEY אין היכן לשמור הרשאה, ולכן מפעיל צריך להגדיר אותו קודם.",
1462
1463
  "oauthTokenFailed": "חברו אותו מחדש מחלון התשתית, או המתינו לסיום התקלה אצל הספק.",
1463
- "overBudget": "צמצמו את מה שהסוכן מצהיר עליו, כדי שריצה אחת תוכל לשאת הכול."
1464
+ "overBudget": "צמצמו את מה שהסוכן מצהיר עליו, כדי שריצה אחת תוכל לשאת הכול.",
1465
+ "consensusPanel": "כבו את הקונצנזוס בשלב הזה אם הוא זקוק לכלי, או קבלו שהפאנל ישפוט בלעדיו. אין צורך לשנות דבר בשרת עצמו."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "הופעל",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (יכולת שההתקנה הזו אינה מגדירה)",
4803
4805
  "binaryCapabilityUnsupported": "אף אינטגרציה שנבחרה אינה תומכת ב-{capabilities}, שאותה מבקשות אפשרויות היצירה של שלב זה. הסירו את האפשרות או בחרו אינטגרציה שמצהירה על היכולת.",
4804
4806
  "binaryCapabilityUnverifiable": "אף אינטגרציה שנבחרה אינה מצהירה על תמיכה ב-{capabilities}, אך אחת מהן אינה מצהירה על יכולות כלל, ולכן לא ניתן היה לבדוק זאת. השלב עדיין יתחיל; אשרו זאת מול ה-API של האינטגרציה.",
4807
+ "binaryOptionValueUnaccepted": "אף אחת מהאינטגרציות שנבחרו אינה מקבלת {option} בערך {requested}. יחד הן מקבלות: {accepted}. בקשו אחד מהערכים האלה, או בחרו אינטגרציה שמייצרת את הערך הזה.",
4808
+ "binaryOptionValuePartial": "{generators} אינה מקבלת {option} של {requested}, אך אינטגרציה אחרת שנבחרה כן מקבלת. השלב עדיין יתחיל: שלחו את האפשרות הזאת רק לאינטגרציות שמקבלות אותה, או הסירו את אלה שאינן מקבלות.",
4809
+ "binaryOptionValueUnverifiable": "אינטגרציה אחת שנבחרה מציינת אילו ערכים היא מקבלת ואינה מקבלת את מה שהשלב הזה מבקש ({options}), ואילו אחרת אינה מציינת ערכים כלל, ולכן לא ניתן היה להכריע. השלב עדיין יתחיל, ורק חלק מהאינטגרציות שלכם ישרתו אותו.",
4805
4810
  "binaryReferenceImages": "תמונות ייחוס",
4806
4811
  "binaryReferenceImagesPlaceholder": "תפקיד{'|'}מיקום{'|'}שירות, אחת בכל שורה",
4807
4812
  "binaryReferenceImagesUnusable": "לא נשמרו כייחוס: {entries}. כל שורה חייבת להיות תפקיד{'|'}מיקום, כאשר התפקיד הוא style, subject, composition או base.",
@@ -1997,6 +1997,7 @@
1997
1997
  "oauthNotConnected": "non era disponibile: nessuno ha ancora collegato questa lavagna al server.",
1998
1998
  "oauthTokenFailed": "non era disponibile: la connessione ha smesso di produrre un token di accesso.",
1999
1999
  "overBudget": "non era disponibile: questo agente dichiara più server di strumenti di quanti ne porti una singola esecuzione.",
2000
+ "consensusPanel": "non era disponibile: questo passo è stato eseguito come panel di consenso, e un panel non ha un runtime dell'agente a cui collegare un server di strumenti.",
2000
2001
  "unknown": "non era disponibile ({reason})."
2001
2002
  },
2002
2003
  "remedy": {
@@ -2007,7 +2008,8 @@
2007
2008
  "unusableSecret": "Correggi la dichiarazione nel codice dell’installazione: la credenziale di un server remoto viaggia in un’intestazione, quella di uno locale viene iniettata nel processo del server.",
2008
2009
  "oauthNotConnected": "Collega questa lavagna al server dalla finestra Infrastruttura. Un deployment senza ENCRYPTION_KEY non ha dove conservare una concessione, quindi un operatore deve impostarla prima.",
2009
2010
  "oauthTokenFailed": "Ricollegalo dalla finestra Infrastruttura, oppure attendi la fine del disservizio del fornitore.",
2010
- "overBudget": "Riduci ciò che l'agente dichiara, così una singola esecuzione può portarlo tutto."
2011
+ "overBudget": "Riduci ciò che l'agente dichiara, così una singola esecuzione può portarlo tutto.",
2012
+ "consensusPanel": "Disattiva il consenso per questo passo se gli serve lo strumento, oppure accetta che il panel giudichi senza. Del server non va cambiato nulla."
2011
2013
  },
2012
2014
  "observed": {
2013
2015
  "ready": "avviato",
@@ -4363,6 +4365,9 @@
4363
4365
  "binaryCapabilityUnknown": "{capability} (una capacità che questa installazione non definisce)",
4364
4366
  "binaryCapabilityUnsupported": "Nessuna integrazione selezionata supporta {capabilities}, richiesta dalle opzioni di generazione di questo passo. Rimuovi l’opzione oppure seleziona un’integrazione che dichiari la capacità.",
4365
4367
  "binaryCapabilityUnverifiable": "Nessuna integrazione selezionata dichiara di supportare {capabilities}, ma una di esse non dichiara alcuna capacità, quindi non è stato possibile verificarlo. Il passo parte comunque; conferma dall’API dell’integrazione.",
4368
+ "binaryOptionValueUnaccepted": "Nessuna integrazione selezionata accetta {option} di {requested}. Insieme accettano: {accepted}. Richiedi uno di questi valori oppure seleziona un'integrazione che generi questo.",
4369
+ "binaryOptionValuePartial": "{generators} non accetta {option} di {requested}, mentre un'altra integrazione selezionata sì. Il passo si avvia comunque: invia questa opzione solo alle integrazioni che la accettano, oppure rimuovi le altre.",
4370
+ "binaryOptionValueUnverifiable": "Un'integrazione selezionata dichiara i valori che accetta e non accetta quello richiesto da questo passo ({options}), mentre un'altra non ne dichiara nessuno, quindi non è stato possibile verificarlo. Il passo si avvia comunque e solo alcune delle tue integrazioni lo serviranno.",
4366
4371
  "binaryReferenceImages": "Immagini di riferimento",
4367
4372
  "binaryReferenceImagesPlaceholder": "ruolo{'|'}posizione{'|'}servizio, una per riga",
4368
4373
  "binaryReferenceImagesUnusable": "Non salvate come riferimento: {entries}. Ogni riga deve essere ruolo{'|'}posizione, con ruolo style, subject, composition o base.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "は利用できませんでした: このボードはまだ接続されていません。",
1451
1451
  "oauthTokenFailed": "は利用できませんでした: 接続からアクセストークンが発行されなくなりました。",
1452
1452
  "overBudget": "は利用できませんでした: このエージェントは 1 回の実行が運べる数を超えるツールサーバーを宣言しています。",
1453
+ "consensusPanel": "は利用できませんでした: このステップはコンセンサスパネルとして実行され、パネルにはツールサーバーを接続するエージェントランタイムがありません。",
1453
1454
  "unknown": "は利用できませんでした({reason})。"
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "デプロイのコードで宣言を修正してください。リモートサーバーの認証情報はヘッダーで送られ、ローカルサーバーのものはサーバープロセスに注入されます。",
1461
1462
  "oauthNotConnected": "インフラストラクチャ ウィンドウからこのボードを接続してください。ENCRYPTION_KEY のないデプロイには許可を保管する場所がないため、まず運用者がそれを設定する必要があります。",
1462
1463
  "oauthTokenFailed": "インフラストラクチャ ウィンドウから接続し直すか、提供元の障害が収まるのを待ってください。",
1463
- "overBudget": "1 回の実行ですべて運べるよう、このエージェントの宣言を減らしてください。"
1464
+ "overBudget": "1 回の実行ですべて運べるよう、このエージェントの宣言を減らしてください。",
1465
+ "consensusPanel": "このステップにそのツールが必要ならコンセンサスをオフにしてください。あるいはパネルがツールなしで判断することを受け入れてください。サーバー側を変更する必要はありません。"
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "起動済み",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability}(このデプロイでは定義されていない機能)",
4803
4805
  "binaryCapabilityUnsupported": "このステップの生成オプションが要求する {capabilities} に対応した連携が選択されていません。オプションを外すか、その機能を宣言している連携を選択してください。",
4804
4806
  "binaryCapabilityUnverifiable": "選択された連携のどれも {capabilities} への対応を宣言していませんが、そのうち一つは機能を一切宣言していないため確認できませんでした。ステップは開始されます。連携の API で確認してください。",
4807
+ "binaryOptionValueUnaccepted": "選択したどの連携先も {requested} という{option}を受け付けません。全体で受け付けられるのは {accepted} です。これらのいずれかを指定するか、この値を生成できる連携先を選択してください。",
4808
+ "binaryOptionValuePartial": "{generators} は {option} の {requested} を受け付けませんが、選択済みの別の連携先は受け付けます。ステップは開始します。このオプションは受け付ける連携先にのみ送るか、受け付けない連携先を選択から外してください。",
4809
+ "binaryOptionValueUnverifiable": "選択した連携先の一つは受け付ける値を明示しており、このステップが求める値({options})を受け付けません。一方で値を明示していない連携先もあるため、判定できませんでした。ステップは開始しますが、対応できるのは一部の連携先だけです。",
4805
4810
  "binaryReferenceImages": "参照画像",
4806
4811
  "binaryReferenceImagesPlaceholder": "役割{'|'}場所{'|'}サービス(1行に1件)",
4807
4812
  "binaryReferenceImagesUnusable": "参照として保存されませんでした: {entries}。各行は 役割{'|'}場所 の形式で、役割は style / subject / composition / base のいずれかです。",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "nie był dostępny: nikt jeszcze nie połączył z nim tej tablicy.",
1451
1451
  "oauthTokenFailed": "nie był dostępny: połączenie przestało wydawać token dostępu.",
1452
1452
  "overBudget": "nie był dostępny: ten agent deklaruje więcej serwerów narzędzi, niż niesie jedno uruchomienie.",
1453
+ "consensusPanel": "nie był dostępny: ten krok wykonał się jako panel konsensusu, a panel nie ma środowiska agenta, do którego można podłączyć serwer narzędzi.",
1453
1454
  "unknown": "nie był dostępny ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "Popraw deklarację w kodzie instalacji: dane uwierzytelniające serwera zdalnego jadą w nagłówku, a lokalnego są wstrzykiwane do procesu serwera.",
1461
1462
  "oauthNotConnected": "Połącz tę tablicę z serwerem w oknie Infrastruktura. Wdrożenie bez ENCRYPTION_KEY nie ma gdzie przechować zgody, więc operator musi ją najpierw ustawić.",
1462
1463
  "oauthTokenFailed": "Połącz go ponownie w oknie Infrastruktura albo przeczekaj awarię dostawcy.",
1463
- "overBudget": "Skróć to, co deklaruje agent, aby jedno uruchomienie uniosło całość."
1464
+ "overBudget": "Skróć to, co deklaruje agent, aby jedno uruchomienie uniosło całość.",
1465
+ "consensusPanel": "Wyłącz konsensus dla tego kroku, jeśli potrzebuje tego narzędzia, albo przyjmij, że panel oceni bez niego. W samym serwerze nic nie trzeba zmieniać."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "uruchomiony",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (możliwość, której ta instalacja nie definiuje)",
4803
4805
  "binaryCapabilityUnsupported": "Żadna wybrana integracja nie obsługuje {capabilities}, o co proszą opcje generowania tego kroku. Usuń opcję albo wybierz integrację, która deklaruje tę możliwość.",
4804
4806
  "binaryCapabilityUnverifiable": "Żadna wybrana integracja nie deklaruje obsługi {capabilities}, ale jedna z nich nie deklaruje żadnych możliwości, więc nie dało się tego sprawdzić. Krok i tak wystartuje; potwierdź to w API integracji.",
4807
+ "binaryOptionValueUnaccepted": "Żadna z wybranych integracji nie przyjmuje {option} o wartości {requested}. Łącznie przyjmują: {accepted}. Poproś o jedną z tych wartości albo wybierz integrację, która wygeneruje tę.",
4808
+ "binaryOptionValuePartial": "{generators} nie przyjmuje {option} o wartości {requested}, ale przyjmuje ją inna wybrana integracja. Krok i tak się uruchomi: wysyłaj tę opcję tylko do integracji, które ją przyjmują, albo usuń pozostałe.",
4809
+ "binaryOptionValueUnverifiable": "Jedna z wybranych integracji podaje przyjmowane wartości i nie przyjmuje tej, o którą prosi ten krok ({options}), a inna nie podaje żadnych, więc nie dało się tego rozstrzygnąć. Krok i tak się uruchomi, a obsłuży go tylko część integracji.",
4805
4810
  "binaryReferenceImages": "Obrazy referencyjne",
4806
4811
  "binaryReferenceImagesPlaceholder": "rola{'|'}lokalizacja{'|'}usługa, po jednym w wierszu",
4807
4812
  "binaryReferenceImagesUnusable": "Nie zapisano jako referencji: {entries}. Każdy wiersz musi mieć postać rola{'|'}lokalizacja, gdzie rola to style, subject, composition albo base.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "kullanılamadı: bu panoyu henüz kimse ona bağlamadı.",
1451
1451
  "oauthTokenFailed": "kullanılamadı: bağlantı artık erişim jetonu üretmiyor.",
1452
1452
  "overBudget": "kullanılamadı: bu ajan tek bir çalıştırmanın taşıdığından fazla araç sunucusu bildiriyor.",
1453
+ "consensusPanel": "kullanılamadı: bu adım bir uzlaşı paneli olarak çalıştı ve panelin bir araç sunucusunu bağlayacağı ajan çalışma ortamı yok.",
1453
1454
  "unknown": "kullanılamadı ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "Kurulumun kodundaki bildirimi düzeltin: uzak bir sunucunun kimlik bilgisi bir başlıkta taşınır, yerel olanınki sunucunun sürecine enjekte edilir.",
1461
1462
  "oauthNotConnected": "Bu panoyu Altyapı penceresinden ona bağlayın. ENCRYPTION_KEY olmayan bir dağıtımda izni saklayacak bir yer yoktur, bu yüzden önce bir operatörün bunu ayarlaması gerekir.",
1462
1463
  "oauthTokenFailed": "Altyapı penceresinden yeniden bağlayın ya da sağlayıcının kesintisinin geçmesini bekleyin.",
1463
- "overBudget": "Tek bir çalıştırma hepsini taşıyabilsin diye ajanın bildirdiklerini kısaltın."
1464
+ "overBudget": "Tek bir çalıştırma hepsini taşıyabilsin diye ajanın bildirdiklerini kısaltın.",
1465
+ "consensusPanel": "Adımın bu araca ihtiyacı varsa uzlaşıyı kapatın, ya da panelin araçsız karar vermesini kabul edin. Sunucuda değiştirilecek bir şey yok."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "başlatıldı",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (bu kurulumun tanımlamadığı bir yetenek)",
4803
4805
  "binaryCapabilityUnsupported": "Seçili entegrasyonların hiçbiri, bu adımın üretim seçeneklerinin istediği {capabilities} desteğini sunmuyor. Seçeneği kaldırın ya da yeteneği bildiren bir entegrasyon seçin.",
4804
4806
  "binaryCapabilityUnverifiable": "Seçili entegrasyonların hiçbiri {capabilities} desteğini bildirmiyor, ancak biri hiç yetenek bildirmiyor, bu yüzden bu doğrulanamadı. Adım yine de başlar; entegrasyonun API’sinden teyit edin.",
4807
+ "binaryOptionValueUnaccepted": "Seçili entegrasyonların hiçbiri {requested} değerinde {option} kabul etmiyor. Hepsi birlikte şunları kabul ediyor: {accepted}. Bunlardan birini isteyin ya da bu değeri üretebilen bir entegrasyon seçin.",
4808
+ "binaryOptionValuePartial": "{generators} {requested} değerindeki {option} seçeneğini kabul etmiyor, ancak seçili başka bir entegrasyon kabul ediyor. Adım yine de başlar: bu seçeneği yalnızca kabul eden entegrasyonlara gönderin ya da kabul etmeyenleri seçimden çıkarın.",
4809
+ "binaryOptionValueUnverifiable": "Seçili bir entegrasyon kabul ettiği değerleri bildiriyor ve bu adımın istediğini ({options}) kabul etmiyor; bir diğeri ise hiç değer bildirmiyor, bu yüzden kesin bir sonuca varılamadı. Adım yine de başlar ve yalnızca bazı entegrasyonlarınız onu karşılar.",
4805
4810
  "binaryReferenceImages": "Referans görseller",
4806
4811
  "binaryReferenceImagesPlaceholder": "rol{'|'}konum{'|'}servis, her satıra bir tane",
4807
4812
  "binaryReferenceImagesUnusable": "Referans olarak kaydedilmedi: {entries}. Her satır rol{'|'}konum biçiminde olmalı; rol style, subject, composition veya base olabilir.",
@@ -1450,6 +1450,7 @@
1450
1450
  "oauthNotConnected": "був недоступний: цю дошку ще ніхто до нього не під’єднав.",
1451
1451
  "oauthTokenFailed": "був недоступний: з’єднання перестало видавати токен доступу.",
1452
1452
  "overBudget": "був недоступний: цей агент оголошує більше серверів інструментів, ніж несе один запуск.",
1453
+ "consensusPanel": "був недоступний: цей крок виконався як панель консенсусу, а панель не має середовища агента, до якого можна під'єднати сервер інструментів.",
1453
1454
  "unknown": "був недоступний ({reason})."
1454
1455
  },
1455
1456
  "remedy": {
@@ -1460,7 +1461,8 @@
1460
1461
  "unusableSecret": "Виправте оголошення в коді інсталяції: облікові дані віддаленого сервера їдуть у заголовку, а локального вставляються у процес сервера.",
1461
1462
  "oauthNotConnected": "Під’єднайте цю дошку до нього у вікні інфраструктури. Розгортання без ENCRYPTION_KEY не має де зберігати дозвіл, тож оператор має спершу задати його.",
1462
1463
  "oauthTokenFailed": "Під’єднайте його заново у вікні інфраструктури або перечекайте збій постачальника.",
1463
- "overBudget": "Скоротіть те, що оголошує агент, щоб один запуск ніс усе."
1464
+ "overBudget": "Скоротіть те, що оголошує агент, щоб один запуск ніс усе.",
1465
+ "consensusPanel": "Вимкніть консенсус для цього кроку, якщо йому потрібен цей інструмент, або прийміть, що панель судитиме без нього. На самому сервері змінювати нічого не треба."
1464
1466
  },
1465
1467
  "observed": {
1466
1468
  "ready": "запущено",
@@ -4802,6 +4804,9 @@
4802
4804
  "binaryCapabilityUnknown": "{capability} (можливість, якої ця інсталяція не визначає)",
4803
4805
  "binaryCapabilityUnsupported": "Жодна вибрана інтеграція не підтримує {capabilities}, що його вимагають параметри генерації цього кроку. Приберіть параметр або виберіть інтеграцію, яка декларує цю можливість.",
4804
4806
  "binaryCapabilityUnverifiable": "Жодна вибрана інтеграція не декларує підтримку {capabilities}, але одна з них не декларує жодних можливостей, тож перевірити це не вдалося. Крок усе одно стартує; підтвердьте це в API інтеграції.",
4807
+ "binaryOptionValueUnaccepted": "Жодна з вибраних інтеграцій не приймає {option} зі значенням {requested}. Разом вони приймають: {accepted}. Попросіть одне з цих значень або виберіть інтеграцію, яка створює саме це.",
4808
+ "binaryOptionValuePartial": "{generators} не приймає {option} зі значенням {requested}, а інша вибрана інтеграція приймає. Крок усе одно запуститься: надсилайте цей параметр лише тим інтеграціям, які його приймають, або приберіть решту.",
4809
+ "binaryOptionValueUnverifiable": "Одна з вибраних інтеграцій перелічує значення, які приймає, і не приймає те, що просить цей крок ({options}), а інша не перелічує жодного, тож перевірити це не вдалося. Крок усе одно запуститься, і обслужить його лише частина інтеграцій.",
4805
4810
  "binaryReferenceImages": "Референсні зображення",
4806
4811
  "binaryReferenceImagesPlaceholder": "роль{'|'}розташування{'|'}сервіс, по одному в рядку",
4807
4812
  "binaryReferenceImagesUnusable": "Не збережено як референс: {entries}. Кожен рядок має бути роль{'|'}розташування, де роль це style, subject, composition або base.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.259.1",
3
+ "version": "0.259.3",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,7 +40,7 @@
40
40
  "valibot": "^1.4.2",
41
41
  "vue": "3.5.41",
42
42
  "wretch": "^3.0.9",
43
- "@cat-factory/contracts": "0.289.0"
43
+ "@cat-factory/contracts": "0.290.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@toad-contracts/testing": "0.3.2",