@cat-factory/app 0.109.4 → 0.110.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.
Files changed (36) hide show
  1. package/app/components/board/AddTaskModal.vue +15 -15
  2. package/app/components/panels/inspector/TaskRunSettings.vue +12 -12
  3. package/app/components/pipeline/PipelineBuilder.vue +22 -0
  4. package/app/components/requirements/RequirementsReviewWindow.vue +300 -203
  5. package/app/components/settings/{MergePresetHealthModal.vue → RiskPolicyHealthModal.vue} +19 -19
  6. package/app/components/settings/{MergeThresholdsPanel.vue → RiskPolicyPanel.vue} +46 -46
  7. package/app/components/settings/UsageSettings.vue +142 -0
  8. package/app/components/settings/WorkspaceSettingsPanel.vue +14 -2
  9. package/app/composables/api/board.ts +1 -1
  10. package/app/composables/api/execution.ts +5 -0
  11. package/app/composables/api/presets.ts +18 -18
  12. package/app/composables/api/reviews.ts +7 -6
  13. package/app/composables/{useMergePresetHealth.ts → useRiskPolicyHealth.ts} +10 -10
  14. package/app/pages/index.vue +9 -9
  15. package/app/stores/board.ts +2 -2
  16. package/app/stores/pipelines.ts +41 -1
  17. package/app/stores/requirements.ts +9 -13
  18. package/app/stores/{mergePresets.ts → riskPolicies.ts} +13 -13
  19. package/app/stores/ui.ts +17 -17
  20. package/app/stores/usage.ts +60 -0
  21. package/app/stores/workspace.spec.ts +1 -1
  22. package/app/stores/workspace.ts +4 -4
  23. package/app/types/merge.ts +3 -3
  24. package/app/types/requirements.ts +1 -0
  25. package/app/utils/{mergePreset.ts → riskPolicy.ts} +4 -4
  26. package/i18n/locales/de.json +52 -27
  27. package/i18n/locales/en.json +52 -27
  28. package/i18n/locales/es.json +52 -27
  29. package/i18n/locales/fr.json +53 -28
  30. package/i18n/locales/he.json +53 -28
  31. package/i18n/locales/it.json +53 -28
  32. package/i18n/locales/ja.json +52 -27
  33. package/i18n/locales/pl.json +53 -28
  34. package/i18n/locales/tr.json +52 -27
  35. package/i18n/locales/uk.json +53 -28
  36. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import type { MergeThresholdPreset } from '~/types/merge'
1
+ import type { RiskPolicy } from '~/types/merge'
2
2
 
3
3
  /**
4
4
  * A compact one-line summary of a merge preset's auto-merge ceilings + CI-fix budget,
@@ -6,7 +6,7 @@ import type { MergeThresholdPreset } from '~/types/merge'
6
6
  * (not just its name) while choosing one. Percentages are the stored 0..1 ratios
7
7
  * rendered as whole percents.
8
8
  */
9
- export function mergePresetThresholds(p: MergeThresholdPreset): string {
9
+ export function riskPolicySummary(p: RiskPolicy): string {
10
10
  // Auto-merge disabled: the thresholds don't apply, every PR goes to human review.
11
11
  if (!p.autoMergeEnabled) return `manual review only · ${p.ciMaxAttempts} CI fixes`
12
12
  const pct = (n: number) => `${Math.round(n * 100)}%`
@@ -16,6 +16,6 @@ export function mergePresetThresholds(p: MergeThresholdPreset): string {
16
16
  }
17
17
 
18
18
  /** The preset name followed by its thresholds, for a single-line dropdown option. */
19
- export function mergePresetOptionLabel(p: MergeThresholdPreset): string {
20
- return `${p.name} — ${mergePresetThresholds(p)}`
19
+ export function riskPolicyOptionLabel(p: RiskPolicy): string {
20
+ return `${p.name} — ${riskPolicySummary(p)}`
21
21
  }
@@ -390,11 +390,11 @@
390
390
  "body": "\"{name}\" wird entfernt. Dies kann nicht rückgängig gemacht werden."
391
391
  }
392
392
  },
393
- "mergeThresholds": {
394
- "intro": "Benannte Auto-Merge-Richtlinien, die eine Aufgabe wählen kann. Nachdem CI bestanden hat, bewertet der {merger}-Agent den PR nach Komplexität, Risiko und Auswirkung (0-100 %); der PR wird nur automatisch gemergt, wenn jeder Wert auf oder unter den Obergrenzen des Presets liegt, andernfalls wird eine Review-Benachrichtigung ausgelöst. Das Standard-Preset gilt für jede Aufgabe, die keines wählt.",
393
+ "riskPolicy": {
394
+ "intro": "Benannte Auto-Merge-Richtlinien, die eine Aufgabe wählen kann. Nachdem CI bestanden hat, bewertet der {merger}-Agent den PR nach Komplexität, Risiko und Auswirkung (0-100 %); der PR wird nur automatisch gemergt, wenn jeder Wert auf oder unter den Obergrenzen der Richtlinie liegt, andernfalls wird eine Review-Benachrichtigung ausgelöst. Die Standardrichtlinie gilt für jede Aufgabe, die keine wählt.",
395
395
  "mergerAgent": "merger",
396
396
  "confirmDelete": {
397
- "title": "Dieses Merge-Preset löschen?",
397
+ "title": "Diese Risikorichtlinie löschen?",
398
398
  "body": "\"{name}\" wird entfernt. Aufgaben, die es verwenden, greifen auf den Workspace-Standard zurück."
399
399
  },
400
400
  "concern": {
@@ -403,11 +403,11 @@
403
403
  "medium": "Mittel",
404
404
  "high": "Hoch (nie anhalten)"
405
405
  },
406
- "presetNamePlaceholder": "Preset-Name",
406
+ "presetNamePlaceholder": "Richtlinienname",
407
407
  "default": "Standard",
408
408
  "makeDefault": "Als Standard festlegen",
409
- "deleteDefaultBlocked": "Das Standard-Preset kann nicht gelöscht werden",
410
- "deletePreset": "Preset löschen",
409
+ "deleteDefaultBlocked": "Die Standardrichtlinie kann nicht gelöscht werden",
410
+ "deletePreset": "Richtlinie löschen",
411
411
  "field": {
412
412
  "maxComplexity": "Max. Komplexität %",
413
413
  "maxRisk": "Max. Risiko %",
@@ -417,9 +417,9 @@
417
417
  "maxRequirementConcernAllowed": "Auto-Pass bei Bedenken auf oder unter",
418
418
  "autoMerge": "Auto-Merge"
419
419
  },
420
- "autoMergeOnHint": "Automatisch mergen, wenn innerhalb der Schwellenwerte.",
420
+ "autoMergeOnHint": "Automatisch mergen, wenn innerhalb der Richtliniengrenzen.",
421
421
  "autoMergeOffHint": "Den PR immer an ein menschliches Review weiterleiten.",
422
- "newPreset": "Neues Preset",
422
+ "newPreset": "Neue Richtlinie",
423
423
  "create": {
424
424
  "name": "Name",
425
425
  "namePlaceholder": "z. B. Vorsichtig",
@@ -432,12 +432,12 @@
432
432
  },
433
433
  "add": "Hinzufügen",
434
434
  "toast": {
435
- "saved": "Preset gespeichert",
436
- "saveFailed": "Preset konnte nicht gespeichert werden",
437
- "created": "Preset erstellt",
438
- "createFailed": "Preset konnte nicht erstellt werden",
435
+ "saved": "Richtlinie gespeichert",
436
+ "saveFailed": "Richtlinie konnte nicht gespeichert werden",
437
+ "created": "Richtlinie erstellt",
438
+ "createFailed": "Richtlinie konnte nicht erstellt werden",
439
439
  "defaultFailed": "Standard konnte nicht festgelegt werden",
440
- "deleteFailed": "Preset konnte nicht gelöscht werden"
440
+ "deleteFailed": "Richtlinie konnte nicht gelöscht werden"
441
441
  }
442
442
  },
443
443
  "observabilityConnection": {
@@ -639,12 +639,23 @@
639
639
  "saveFailed": "Katalog konnte nicht gespeichert werden"
640
640
  }
641
641
  },
642
+ "usage": {
643
+ "body": "Token-Nutzung in diesem Abrechnungszeitraum – über gemessene API-Aufrufe und pauschale Abo-Harnesses (Claude Code, Codex, GLM sowie gepoolte Kimi & DeepSeek) hinweg.",
644
+ "period": "Aktueller Abrechnungszeitraum – seit {date}.",
645
+ "empty": "In diesem Zeitraum wurde noch keine Nutzung erfasst.",
646
+ "subscription": "Abonnements",
647
+ "metered": "Gemessene API",
648
+ "illustrative": "Die für Abonnements angezeigten Kosten sind Richtwerte – diese Tarife sind Pauschalpreise und werden nicht pro Token abgerechnet.",
649
+ "tokens": "{input} ein / {output} aus",
650
+ "calls": "{count} Aufrufe"
651
+ },
642
652
  "workspaceSettings": {
643
653
  "title": "Workspace-Einstellungen",
644
654
  "tabs": {
655
+ "usage": "Nutzung",
645
656
  "workspace": "Workspace",
646
657
  "budget": "Budget",
647
- "merge": "Merge-Schwellenwerte",
658
+ "merge": "Risikorichtlinien",
648
659
  "tracker": "Issue-Tracker",
649
660
  "fragments": "Dienst-Best-Practices"
650
661
  },
@@ -1163,9 +1174,9 @@
1163
1174
  "pipeline": "Pipeline",
1164
1175
  "pipelineEmpty": "Kein Standard. Wähle eine Pipeline, wenn du diese Aufgabe ausführst.",
1165
1176
  "pipelineHint": "Die Pipeline, die der Run-Button standardmäßig startet: die Abfolge der Agent-Schritte (zum Beispiel Spec, Code, Test, Merge), die für diese Aufgabe ausgeführt werden.",
1166
- "mergePolicy": "Merge-Richtlinie",
1167
- "mergePresetDetail": "{name}: automatisch mergen, wenn Komplexität ≤ {complexity}, Risiko ≤ {risk}, Wirkung ≤ {impact}; bis zu {attempts} CI-Fix-Versuche.",
1168
- "mergePresetEmpty": "Kein Preset konfiguriert. Der Merger löst für jeden PR eine Prüfbenachrichtigung aus.",
1177
+ "mergePolicy": "Risikorichtlinie",
1178
+ "riskPolicyDetail": "{name}: automatisch mergen, wenn Komplexität ≤ {complexity}, Risiko ≤ {risk}, Wirkung ≤ {impact}; bis zu {attempts} CI-Fix-Versuche.",
1179
+ "riskPolicyEmpty": "Keine Risikorichtlinie konfiguriert. Der Merger löst für jeden PR eine Prüfbenachrichtigung aus.",
1169
1180
  "mergePolicyHint": "Entscheidet, wann ein fertiger Pull Request automatisch mergt, statt auf eine menschliche Prüfung zu warten, und wie viele CI-Fix-Versuche ein Lauf erhält.",
1170
1181
  "modelPreset": "Modell-Preset",
1171
1182
  "modelPresetHint": "Entscheidet, auf welchem KI-Modell jeder Agent-Schritt läuft.",
@@ -1726,7 +1737,7 @@
1726
1737
  "documentImport": "Aus Dokumenten importieren und spawnen",
1727
1738
  "taskImport": "Issues importieren",
1728
1739
  "fragments": "Kontextfragment-Bibliothek",
1729
- "mergeThresholds": "Merge-Schwellenwerte",
1740
+ "mergeThresholds": "Risikorichtlinien",
1730
1741
  "workspaceSettings": "Workspace-Einstellungen",
1731
1742
  "modelConfiguration": "Modellkonfiguration",
1732
1743
  "serviceFragmentDefaults": "Standard-Best-Practices für Services",
@@ -1746,7 +1757,7 @@
1746
1757
  "taskSource": "task source tracker issues",
1747
1758
  "taskImport": "task import issues",
1748
1759
  "fragments": "prompt fragments best practice guidelines context",
1749
- "mergeThresholds": "merge policy preset auto-merge ci",
1760
+ "mergeThresholds": "risikorichtlinie merge auto-merge ci iterationen",
1750
1761
  "workspaceSettings": "limit running tasks per service waiting escalation overdue notification timeout",
1751
1762
  "modelConfiguration": "model llm routing agent kind default preset configuration",
1752
1763
  "serviceFragmentDefaults": "fragment best practice guideline service default code-aware",
@@ -1974,7 +1985,7 @@
1974
1985
  "optional": "optional",
1975
1986
  "pipeline": "Pipeline",
1976
1987
  "chooseAtRunTime": "Zur Laufzeit auswählen",
1977
- "mergePolicy": "Merge-Richtlinie",
1988
+ "mergePolicy": "Risikorichtlinie",
1978
1989
  "workspaceDefault": "Workspace-Standard",
1979
1990
  "defaultPreset": "Standard ({name}) — {thresholds}",
1980
1991
  "defaultModelPreset": "Standard ({name})",
@@ -2829,6 +2840,8 @@
2829
2840
  "followUpDisableTooltip": "Follow-up-Companion aktiviert. Coder legt offene Punkte / Nebenaufgaben / Fragen offen; zum Deaktivieren klicken.",
2830
2841
  "testerQualityEnableTooltip": "Test-Qualitäts-Companion deaktiviert. Zum Aktivieren klicken (prüft den Bericht auf Abdeckung und wiederholt den Tester bei Lücken).",
2831
2842
  "testerQualityDisableTooltip": "Test-Qualitäts-Companion aktiviert. Prüft den Bericht vor der Freigabe auf Abdeckung und wiederholt den Tester bei Lücken; zum Deaktivieren klicken.",
2843
+ "autoRecommendEnableTooltip": "Automatische Empfehlung deaktiviert. Zum Aktivieren klicken (der Prüfer beantwortet Feststellungen vorab, die sich aus bewährten Praktiken / dem Kontext beantworten lassen, und überlässt Ihnen die geschäftlichen Entscheidungen).",
2844
+ "autoRecommendDisableTooltip": "Automatische Empfehlung aktiviert. Der Prüfer beantwortet Feststellungen vorab, die sich aus bewährten Praktiken / dem Kontext beantworten lassen; zum Deaktivieren klicken und jede Feststellung selbst beantworten.",
2832
2845
  "testerQualityLabel": "Test-Qualitäts-Companion",
2833
2846
  "testerQualityGateTooltip": "Die Qualitätsprüfung nur ausführen, wenn die Aufgabenschätzung einen Schwellenwert überschreitet (benötigt vorher einen Task Estimator)",
2834
2847
  "moveUp": "Schritt nach oben verschieben",
@@ -2999,6 +3012,17 @@
2999
3012
  "markedForRecommendation": "Für Empfehlung markiert",
3000
3013
  "recommendSomething": "Etwas empfehlen",
3001
3014
  "recommendationRequested": "Empfehlung angefordert — prüfen Sie den Vorschlag unten.",
3015
+ "recommendedDefault": "Empfohlene Vorgabe: behalten, bearbeiten oder die Feststellung verwerfen.",
3016
+ "needsYourInput": "Benötigt Ihre Eingabe",
3017
+ "mode": {
3018
+ "answer": "Beantworten",
3019
+ "dismiss": "Verwerfen",
3020
+ "recommend": "Empfehlen"
3021
+ },
3022
+ "userAnswered": "Sie haben geantwortet",
3023
+ "guidancePlaceholder": "Hinweise für die Empfehlung (optional)…",
3024
+ "guidanceHint": "Ihre Eingabe lenkt die Empfehlung; sie wird als Orientierung verwendet, nicht als Antwort gespeichert.",
3025
+ "dismissedHint": "Als irrelevant markiert; sie wird nicht übernommen.",
3002
3026
  "reopen": "Erneut öffnen",
3003
3027
  "recommendedAnswers": "Empfohlene Antworten",
3004
3028
  "recommendationProgress": "{ready} / {total} bereit",
@@ -3580,6 +3604,7 @@
3580
3604
  }
3581
3605
  },
3582
3606
  "common": {
3607
+ "loading": "Wird geladen…",
3583
3608
  "save": "Speichern",
3584
3609
  "cancel": "Abbrechen",
3585
3610
  "retry": "Erneut versuchen",
@@ -4372,22 +4397,22 @@
4372
4397
  "archiveFailed": "Archivierung nicht möglich"
4373
4398
  }
4374
4399
  },
4375
- "mergePreset": {
4400
+ "riskPolicy": {
4376
4401
  "health": {
4377
- "title": "Merge-Preset-Updates",
4378
- "allValid": "Alle integrierten Merge-Presets sind auf dem neuesten Stand.",
4379
- "newHeading": "Neue Presets verfügbar",
4380
- "newDescription": "Neue integrierte Merge-Presets sind verfügbar. Füge sie zur Bibliothek dieses Boards hinzu.",
4402
+ "title": "Risikorichtlinien-Updates",
4403
+ "allValid": "Alle integrierten Risikorichtlinien sind auf dem neuesten Stand.",
4404
+ "newHeading": "Neue Richtlinien verfügbar",
4405
+ "newDescription": "Neue integrierte Risikorichtlinien sind verfügbar. Füge sie zur Bibliothek dieses Boards hinzu.",
4381
4406
  "add": "Hinzufügen",
4382
4407
  "updatesHeading": "Updates verfügbar",
4383
- "updatesDescription": "Eine neuere Version dieser integrierten Merge-Presets ist verfügbar. Führe ein erneutes Seeding durch, um sie zu übernehmen (Standard und Reihenfolge bleiben erhalten).",
4408
+ "updatesDescription": "Eine neuere Version dieser integrierten Risikorichtlinien ist verfügbar. Führe ein erneutes Seeding durch, um sie zu übernehmen (Standard und Reihenfolge bleiben erhalten).",
4384
4409
  "versionAvailable": "Version {from} → {to} verfügbar.",
4385
4410
  "reseed": "Erneut seeden",
4386
4411
  "reseedAll": "Alle aktualisieren ({count})",
4387
4412
  "dismiss": "Schließen",
4388
4413
  "done": "Fertig",
4389
4414
  "toast": {
4390
- "reseedFailed": "Merge-Preset konnte nicht erneut geseedet werden"
4415
+ "reseedFailed": "Risikorichtlinie konnte nicht erneut geseedet werden"
4391
4416
  }
4392
4417
  }
4393
4418
  },
@@ -23,6 +23,7 @@
23
23
  }
24
24
  },
25
25
  "common": {
26
+ "loading": "Loading…",
26
27
  "save": "Save",
27
28
  "cancel": "Cancel",
28
29
  "retry": "Retry",
@@ -247,7 +248,7 @@
247
248
  "optional": "optional",
248
249
  "pipeline": "Pipeline",
249
250
  "chooseAtRunTime": "Choose at run time",
250
- "mergePolicy": "Merge policy",
251
+ "mergePolicy": "Risk policy",
251
252
  "workspaceDefault": "Workspace default",
252
253
  "defaultPreset": "Default ({name}) — {thresholds}",
253
254
  "defaultModelPreset": "Default ({name})",
@@ -912,9 +913,9 @@
912
913
  "pipeline": "Pipeline",
913
914
  "pipelineEmpty": "No default. Pick a pipeline when you run this task.",
914
915
  "pipelineHint": "The pipeline the Run button starts by default: the sequence of agent steps (for example spec, code, test, merge) executed for this task.",
915
- "mergePolicy": "Merge policy",
916
- "mergePresetDetail": "{name}: auto-merge when complexity ≤ {complexity}, risk ≤ {risk}, impact ≤ {impact}; up to {attempts} CI-fix attempts.",
917
- "mergePresetEmpty": "No preset configured. The merger raises a review notification for every PR.",
916
+ "mergePolicy": "Risk policy",
917
+ "riskPolicyDetail": "{name}: auto-merge when complexity ≤ {complexity}, risk ≤ {risk}, impact ≤ {impact}; up to {attempts} CI-fix attempts.",
918
+ "riskPolicyEmpty": "No risk policy configured. The merger raises a review notification for every PR.",
918
919
  "mergePolicyHint": "Decides when a finished pull request merges automatically instead of waiting for a human review, and how many CI-fix attempts a run gets.",
919
920
  "modelPreset": "Model preset",
920
921
  "modelPresetHint": "Decides which AI model each agent step runs on.",
@@ -1615,7 +1616,7 @@
1615
1616
  "documentImport": "Import and spawn from documents",
1616
1617
  "taskImport": "Import issues",
1617
1618
  "fragments": "Context fragment library",
1618
- "mergeThresholds": "Merge thresholds",
1619
+ "mergeThresholds": "Risk policies",
1619
1620
  "workspaceSettings": "Workspace settings",
1620
1621
  "modelConfiguration": "Model configuration",
1621
1622
  "serviceFragmentDefaults": "Default service best practices",
@@ -1635,7 +1636,7 @@
1635
1636
  "taskSource": "task source tracker issues",
1636
1637
  "taskImport": "task import issues",
1637
1638
  "fragments": "prompt fragments best practice guidelines context",
1638
- "mergeThresholds": "merge policy preset auto-merge ci",
1639
+ "mergeThresholds": "risk policy merge auto-merge ci iterations",
1639
1640
  "workspaceSettings": "limit running tasks per service waiting escalation overdue notification timeout",
1640
1641
  "modelConfiguration": "model llm routing agent kind default preset configuration",
1641
1642
  "serviceFragmentDefaults": "fragment best practice guideline service default code-aware",
@@ -2126,11 +2127,11 @@
2126
2127
  "body": "\"{name}\" will be removed. This can't be undone."
2127
2128
  }
2128
2129
  },
2129
- "mergeThresholds": {
2130
- "intro": "Named auto-merge policies a task can choose. After CI passes, the {merger} agent scores the PR on complexity, risk and impact (0-100%); the PR auto-merges only when every score is at or below the preset's ceilings, otherwise a review notification is raised. The default preset governs any task that picks none.",
2130
+ "riskPolicy": {
2131
+ "intro": "Named auto-merge policies a task can choose. After CI passes, the {merger} agent scores the PR on complexity, risk and impact (0-100%); the PR auto-merges only when every score is at or below the policy's ceilings, otherwise a review notification is raised. The default policy governs any task that picks none.",
2131
2132
  "mergerAgent": "merger",
2132
2133
  "confirmDelete": {
2133
- "title": "Delete this merge preset?",
2134
+ "title": "Delete this risk policy?",
2134
2135
  "body": "\"{name}\" will be removed. Tasks using it fall back to the workspace default."
2135
2136
  },
2136
2137
  "concern": {
@@ -2139,11 +2140,11 @@
2139
2140
  "medium": "Medium",
2140
2141
  "high": "High (never stop)"
2141
2142
  },
2142
- "presetNamePlaceholder": "Preset name",
2143
+ "presetNamePlaceholder": "Policy name",
2143
2144
  "default": "Default",
2144
2145
  "makeDefault": "Make default",
2145
- "deleteDefaultBlocked": "The default preset cannot be deleted",
2146
- "deletePreset": "Delete preset",
2146
+ "deleteDefaultBlocked": "The default policy cannot be deleted",
2147
+ "deletePreset": "Delete policy",
2147
2148
  "field": {
2148
2149
  "maxComplexity": "Max complexity %",
2149
2150
  "maxRisk": "Max risk %",
@@ -2153,9 +2154,9 @@
2153
2154
  "maxRequirementConcernAllowed": "Auto-pass concerns at or below",
2154
2155
  "autoMerge": "Auto-merge"
2155
2156
  },
2156
- "autoMergeOnHint": "Merge automatically when within thresholds.",
2157
+ "autoMergeOnHint": "Merge automatically when within the policy limits.",
2157
2158
  "autoMergeOffHint": "Always route the PR to a human review.",
2158
- "newPreset": "New preset",
2159
+ "newPreset": "New policy",
2159
2160
  "create": {
2160
2161
  "name": "Name",
2161
2162
  "namePlaceholder": "e.g. Cautious",
@@ -2168,12 +2169,12 @@
2168
2169
  },
2169
2170
  "add": "Add",
2170
2171
  "toast": {
2171
- "saved": "Preset saved",
2172
- "saveFailed": "Could not save preset",
2173
- "created": "Preset created",
2174
- "createFailed": "Could not create preset",
2172
+ "saved": "Policy saved",
2173
+ "saveFailed": "Could not save policy",
2174
+ "created": "Policy created",
2175
+ "createFailed": "Could not create policy",
2175
2176
  "defaultFailed": "Could not set default",
2176
- "deleteFailed": "Could not delete preset"
2177
+ "deleteFailed": "Could not delete policy"
2177
2178
  }
2178
2179
  },
2179
2180
  "observabilityConnection": {
@@ -2375,12 +2376,23 @@
2375
2376
  "saveFailed": "Could not save catalog"
2376
2377
  }
2377
2378
  },
2379
+ "usage": {
2380
+ "body": "Token usage this billing period, across metered API calls and flat-rate subscription harnesses (Claude Code, Codex, GLM, and pooled Kimi & DeepSeek).",
2381
+ "period": "Current billing period — since {date}.",
2382
+ "empty": "No usage recorded this period yet.",
2383
+ "subscription": "Subscriptions",
2384
+ "metered": "Metered API",
2385
+ "illustrative": "Costs shown for subscriptions are illustrative — these plans are flat-rate, not billed per token.",
2386
+ "tokens": "{input} in / {output} out",
2387
+ "calls": "{count} calls"
2388
+ },
2378
2389
  "workspaceSettings": {
2379
2390
  "title": "Workspace settings",
2380
2391
  "tabs": {
2392
+ "usage": "Usage",
2381
2393
  "workspace": "Workspace",
2382
2394
  "budget": "Budget",
2383
- "merge": "Merge thresholds",
2395
+ "merge": "Risk policies",
2384
2396
  "tracker": "Issue tracker",
2385
2397
  "fragments": "Service best practices"
2386
2398
  },
@@ -3134,6 +3146,8 @@
3134
3146
  "followUpDisableTooltip": "Follow-up companion enabled. Coder surfaces loose ends / side-tasks / questions; click to disable.",
3135
3147
  "testerQualityEnableTooltip": "Test quality companion disabled. Click to enable (audits the report for coverage and loops the Tester on gaps).",
3136
3148
  "testerQualityDisableTooltip": "Test quality companion enabled. Audits the report for coverage before greenlight and loops the Tester on gaps; click to disable.",
3149
+ "autoRecommendEnableTooltip": "Auto-recommendation disabled. Click to enable (the reviewer pre-answers findings answerable from best practice / context, leaving business decisions for you).",
3150
+ "autoRecommendDisableTooltip": "Auto-recommendation enabled. The reviewer pre-answers findings answerable from best practice / context; click to disable and answer every finding yourself.",
3137
3151
  "testerQualityLabel": "Test quality companion",
3138
3152
  "testerQualityGateTooltip": "Only run the quality audit when the task estimate clears a threshold (needs a Task Estimator earlier)",
3139
3153
  "moveUp": "Move step up",
@@ -3260,22 +3274,22 @@
3260
3274
  }
3261
3275
  }
3262
3276
  },
3263
- "mergePreset": {
3277
+ "riskPolicy": {
3264
3278
  "health": {
3265
- "title": "Merge preset updates",
3266
- "allValid": "All built-in merge presets are up to date.",
3267
- "newHeading": "New presets available",
3268
- "newDescription": "New built-in merge presets have shipped. Add them to this board's library.",
3279
+ "title": "Risk policy updates",
3280
+ "allValid": "All built-in risk policies are up to date.",
3281
+ "newHeading": "New policies available",
3282
+ "newDescription": "New built-in risk policies have shipped. Add them to this board's library.",
3269
3283
  "add": "Add",
3270
3284
  "updatesHeading": "Updates available",
3271
- "updatesDescription": "A newer version of these built-in merge presets has shipped. Reseed to adopt it (the default and ordering are kept).",
3285
+ "updatesDescription": "A newer version of these built-in risk policies has shipped. Reseed to adopt it (the default and ordering are kept).",
3272
3286
  "versionAvailable": "Version {from} → {to} available.",
3273
3287
  "reseed": "Reseed",
3274
3288
  "reseedAll": "Update all ({count})",
3275
3289
  "dismiss": "Dismiss",
3276
3290
  "done": "Done",
3277
3291
  "toast": {
3278
- "reseedFailed": "Could not reseed merge preset"
3292
+ "reseedFailed": "Could not reseed risk policy"
3279
3293
  }
3280
3294
  }
3281
3295
  },
@@ -3415,6 +3429,17 @@
3415
3429
  "markedForRecommendation": "Marked for recommendation",
3416
3430
  "recommendSomething": "Recommend something",
3417
3431
  "recommendationRequested": "Recommendation requested — review the suggestion below.",
3432
+ "recommendedDefault": "Recommended default — keep it, edit it, or dismiss the finding.",
3433
+ "needsYourInput": "Needs your input",
3434
+ "mode": {
3435
+ "answer": "Answer",
3436
+ "dismiss": "Dismiss",
3437
+ "recommend": "Recommend"
3438
+ },
3439
+ "userAnswered": "You answered",
3440
+ "guidancePlaceholder": "Guidance for the recommendation (optional)…",
3441
+ "guidanceHint": "Your input steers the recommendation; it's used as guidance, not saved as the answer.",
3442
+ "dismissedHint": "Marked irrelevant; it won't be incorporated.",
3418
3443
  "reopen": "Reopen",
3419
3444
  "recommendedAnswers": "Recommended answers",
3420
3445
  "recommendationProgress": "{ready} / {total} ready",
@@ -23,6 +23,7 @@
23
23
  }
24
24
  },
25
25
  "common": {
26
+ "loading": "Cargando…",
26
27
  "save": "Guardar",
27
28
  "cancel": "Cancelar",
28
29
  "retry": "Reintentar",
@@ -229,7 +230,7 @@
229
230
  "optional": "opcional",
230
231
  "pipeline": "Pipeline",
231
232
  "chooseAtRunTime": "Elegir al ejecutar",
232
- "mergePolicy": "Política de fusión",
233
+ "mergePolicy": "Política de riesgo",
233
234
  "workspaceDefault": "Predeterminado del espacio",
234
235
  "defaultPreset": "Predeterminado ({name}): {thresholds}",
235
236
  "defaultModelPreset": "Predeterminado ({name})",
@@ -858,9 +859,9 @@
858
859
  "pipeline": "Pipeline",
859
860
  "pipelineEmpty": "Sin predeterminado. Elige un pipeline cuando ejecutes esta tarea.",
860
861
  "pipelineHint": "El pipeline que el botón Ejecutar inicia por defecto: la secuencia de pasos de agente (por ejemplo especificación, código, pruebas, fusión) que se ejecuta para esta tarea.",
861
- "mergePolicy": "Política de fusión",
862
- "mergePresetDetail": "{name}: fusión automática cuando complejidad ≤ {complexity}, riesgo ≤ {risk}, impacto ≤ {impact}; hasta {attempts} intentos de corrección de CI.",
863
- "mergePresetEmpty": "No hay preajuste configurado. El fusionador genera una notificación de revisión para cada PR.",
862
+ "mergePolicy": "Política de riesgo",
863
+ "riskPolicyDetail": "{name}: fusión automática cuando complejidad ≤ {complexity}, riesgo ≤ {risk}, impacto ≤ {impact}; hasta {attempts} intentos de corrección de CI.",
864
+ "riskPolicyEmpty": "No hay política de riesgo configurada. El fusionador genera una notificación de revisión para cada PR.",
864
865
  "mergePolicyHint": "Decide cuándo un pull request terminado se fusiona automáticamente en lugar de esperar una revisión humana, y cuántos intentos de arreglo de CI tiene una ejecución.",
865
866
  "modelPreset": "Preajuste de modelo",
866
867
  "modelPresetHint": "Decide con qué modelo de IA se ejecuta cada paso de agente.",
@@ -1558,7 +1559,7 @@
1558
1559
  "documentImport": "Importar y generar desde documentos",
1559
1560
  "taskImport": "Importar incidencias",
1560
1561
  "fragments": "Biblioteca de fragmentos de contexto",
1561
- "mergeThresholds": "Umbrales de fusión",
1562
+ "mergeThresholds": "Políticas de riesgo",
1562
1563
  "workspaceSettings": "Ajustes del espacio de trabajo",
1563
1564
  "modelConfiguration": "Configuración de modelos",
1564
1565
  "serviceFragmentDefaults": "Buenas prácticas del servicio por defecto",
@@ -1578,7 +1579,7 @@
1578
1579
  "taskSource": "tarea fuente rastreador incidencias",
1579
1580
  "taskImport": "tarea importar incidencias",
1580
1581
  "fragments": "prompt fragmentos buenas prácticas directrices contexto",
1581
- "mergeThresholds": "fusión política preajuste auto-fusión ci",
1582
+ "mergeThresholds": "política de riesgo fusión auto-fusión ci iteraciones",
1582
1583
  "workspaceSettings": "límite tareas en ejecución por servicio espera escalado retraso notificación tiempo de espera",
1583
1584
  "modelConfiguration": "modelo llm enrutamiento tipo de agente preajuste por defecto configuración",
1584
1585
  "serviceFragmentDefaults": "fragmento buenas prácticas directriz servicio por defecto consciente del código",
@@ -1944,8 +1945,8 @@
1944
1945
  "body": "Se eliminará \"{name}\". Esta acción no se puede deshacer."
1945
1946
  }
1946
1947
  },
1947
- "mergeThresholds": {
1948
- "intro": "Políticas de fusión automática con nombre que una tarea puede elegir. Cuando CI pasa, el agente {merger} puntúa el PR en complejidad, riesgo e impacto (0-100%); el PR se fusiona automáticamente solo cuando cada puntuación está en o por debajo de los límites del ajuste, de lo contrario se genera una notificación de revisión. El ajuste predeterminado rige cualquier tarea que no elija ninguno.",
1948
+ "riskPolicy": {
1949
+ "intro": "Políticas de fusión automática con nombre que una tarea puede elegir. Cuando CI pasa, el agente {merger} puntúa el PR en complejidad, riesgo e impacto (0-100%); el PR se fusiona automáticamente solo cuando cada puntuación está en o por debajo de los límites de la política, de lo contrario se genera una notificación de revisión. La política predeterminada rige cualquier tarea que no elija ninguno.",
1949
1950
  "mergerAgent": "merger",
1950
1951
  "concern": {
1951
1952
  "none": "Ninguno (detener siempre)",
@@ -1953,11 +1954,11 @@
1953
1954
  "medium": "Medio",
1954
1955
  "high": "Alto (nunca detener)"
1955
1956
  },
1956
- "presetNamePlaceholder": "Nombre del ajuste",
1957
+ "presetNamePlaceholder": "Nombre de la política",
1957
1958
  "default": "Predeterminado",
1958
1959
  "makeDefault": "Hacer predeterminado",
1959
- "deleteDefaultBlocked": "El ajuste predeterminado no se puede eliminar",
1960
- "deletePreset": "Eliminar ajuste",
1960
+ "deleteDefaultBlocked": "La política predeterminada no se puede eliminar",
1961
+ "deletePreset": "Eliminar política",
1961
1962
  "field": {
1962
1963
  "maxComplexity": "Complejidad máx. %",
1963
1964
  "maxRisk": "Riesgo máx. %",
@@ -1967,7 +1968,7 @@
1967
1968
  "maxRequirementConcernAllowed": "Aprobación automática de inquietudes hasta",
1968
1969
  "autoMerge": "Fusión automática"
1969
1970
  },
1970
- "newPreset": "Nuevo ajuste",
1971
+ "newPreset": "Nueva política",
1971
1972
  "create": {
1972
1973
  "name": "Nombre",
1973
1974
  "namePlaceholder": "p. ej. Cauteloso",
@@ -1980,17 +1981,17 @@
1980
1981
  },
1981
1982
  "add": "Añadir",
1982
1983
  "toast": {
1983
- "saved": "Ajuste guardado",
1984
- "saveFailed": "No se pudo guardar el ajuste",
1985
- "created": "Ajuste creado",
1986
- "createFailed": "No se pudo crear el ajuste",
1984
+ "saved": "Política guardada",
1985
+ "saveFailed": "No se pudo guardar la política",
1986
+ "created": "Política creada",
1987
+ "createFailed": "No se pudo crear la política",
1987
1988
  "defaultFailed": "No se pudo establecer el predeterminado",
1988
- "deleteFailed": "No se pudo eliminar el ajuste"
1989
+ "deleteFailed": "No se pudo eliminar la política"
1989
1990
  },
1990
- "autoMergeOnHint": "Fusionar automáticamente cuando esté dentro de los umbrales.",
1991
+ "autoMergeOnHint": "Fusionar automáticamente cuando esté dentro de los límites de la política.",
1991
1992
  "autoMergeOffHint": "Enviar siempre el PR a revisión humana.",
1992
1993
  "confirmDelete": {
1993
- "title": "¿Eliminar este preset de fusión?",
1994
+ "title": "¿Eliminar esta política de riesgo?",
1994
1995
  "body": "Se eliminará \"{name}\". Las tareas que lo usan volverán al valor predeterminado del espacio de trabajo."
1995
1996
  }
1996
1997
  },
@@ -2193,12 +2194,23 @@
2193
2194
  "saveFailed": "No se pudo guardar el catálogo"
2194
2195
  }
2195
2196
  },
2197
+ "usage": {
2198
+ "body": "Uso de tokens en este período de facturación, entre llamadas de API medidas y suscripciones de tarifa plana (Claude Code, Codex, GLM y Kimi & DeepSeek agrupados).",
2199
+ "period": "Período de facturación actual: desde {date}.",
2200
+ "empty": "Aún no se ha registrado uso en este período.",
2201
+ "subscription": "Suscripciones",
2202
+ "metered": "API medida",
2203
+ "illustrative": "Los costes mostrados para las suscripciones son orientativos: estos planes son de tarifa plana y no se facturan por token.",
2204
+ "tokens": "{input} entrada / {output} salida",
2205
+ "calls": "{count} llamadas"
2206
+ },
2196
2207
  "workspaceSettings": {
2197
2208
  "title": "Configuración del espacio de trabajo",
2198
2209
  "tabs": {
2210
+ "usage": "Uso",
2199
2211
  "workspace": "Espacio de trabajo",
2200
2212
  "budget": "Presupuesto",
2201
- "merge": "Umbrales de fusión",
2213
+ "merge": "Políticas de riesgo",
2202
2214
  "tracker": "Gestor de incidencias",
2203
2215
  "fragments": "Buenas prácticas del servicio"
2204
2216
  },
@@ -3047,6 +3059,8 @@
3047
3059
  "followUpDisableTooltip": "Compañero de seguimiento activado. Coder detecta cabos sueltos / subtareas / preguntas; haz clic para desactivarlo.",
3048
3060
  "testerQualityEnableTooltip": "Compañero de calidad de pruebas desactivado. Haz clic para activarlo (audita la cobertura del informe y reitera el Tester ante lagunas).",
3049
3061
  "testerQualityDisableTooltip": "Compañero de calidad de pruebas activado. Audita la cobertura del informe antes de la aprobación y reitera el Tester ante lagunas; haz clic para desactivarlo.",
3062
+ "autoRecommendEnableTooltip": "Recomendación automática desactivada. Haz clic para activarla (el revisor responde de antemano los hallazgos que pueden responderse a partir de las buenas prácticas / el contexto, y te deja las decisiones de negocio).",
3063
+ "autoRecommendDisableTooltip": "Recomendación automática activada. El revisor responde de antemano los hallazgos que pueden responderse a partir de las buenas prácticas / el contexto; haz clic para desactivarla y responder cada hallazgo tú mismo.",
3050
3064
  "testerQualityLabel": "Compañero de calidad de pruebas",
3051
3065
  "testerQualityGateTooltip": "Ejecutar la auditoría de calidad solo cuando la estimación de la tarea supere un umbral (requiere un Estimador de Tareas antes)",
3052
3066
  "moveUp": "Subir el paso",
@@ -3290,6 +3304,17 @@
3290
3304
  "markedForRecommendation": "Marcado para recomendación",
3291
3305
  "recommendSomething": "Recomendar algo",
3292
3306
  "recommendationRequested": "Recomendación solicitada — revisa la sugerencia más abajo.",
3307
+ "recommendedDefault": "Valor recomendado por defecto: consérvalo, edítalo o descarta el hallazgo.",
3308
+ "needsYourInput": "Necesita tu intervención",
3309
+ "mode": {
3310
+ "answer": "Responder",
3311
+ "dismiss": "Descartar",
3312
+ "recommend": "Recomendar"
3313
+ },
3314
+ "userAnswered": "Respondiste",
3315
+ "guidancePlaceholder": "Orientación para la recomendación (opcional)…",
3316
+ "guidanceHint": "Tu texto guía la recomendación; se usa como orientación, no se guarda como respuesta.",
3317
+ "dismissedHint": "Marcado como irrelevante; no se incorporará.",
3293
3318
  "reopen": "Reabrir",
3294
3319
  "recommendedAnswers": "Respuestas recomendadas",
3295
3320
  "recommendationProgress": "{ready} / {total} listas",
@@ -4255,22 +4280,22 @@
4255
4280
  "help": "Qué es este repositorio: un servicio backend, una aplicación frontend, una biblioteca compartida o un repositorio de documentación (solo documentos/spikes)."
4256
4281
  }
4257
4282
  },
4258
- "mergePreset": {
4283
+ "riskPolicy": {
4259
4284
  "health": {
4260
- "title": "Actualizaciones de presets de fusión",
4261
- "allValid": "Todos los presets de fusión integrados están actualizados.",
4262
- "newHeading": "Nuevos presets disponibles",
4263
- "newDescription": "Hay nuevos presets de fusión integrados. Añádelos a la biblioteca de este tablero.",
4285
+ "title": "Actualizaciones de políticas de riesgo",
4286
+ "allValid": "Todas las políticas de riesgo integradas están actualizadas.",
4287
+ "newHeading": "Nuevas políticas disponibles",
4288
+ "newDescription": "Hay nuevas políticas de riesgo integradas. Añádelas a la biblioteca de este tablero.",
4264
4289
  "add": "Añadir",
4265
4290
  "updatesHeading": "Actualizaciones disponibles",
4266
- "updatesDescription": "Hay una versión más reciente de estos presets de fusión integrados. Regenera para adoptarla (se conservan el predeterminado y el orden).",
4291
+ "updatesDescription": "Hay una versión más reciente de estas políticas de riesgo integradas. Regenera para adoptarla (se conservan el predeterminado y el orden).",
4267
4292
  "versionAvailable": "Versión {from} → {to} disponible.",
4268
4293
  "reseed": "Regenerar",
4269
4294
  "reseedAll": "Actualizar todos ({count})",
4270
4295
  "dismiss": "Descartar",
4271
4296
  "done": "Hecho",
4272
4297
  "toast": {
4273
- "reseedFailed": "No se pudo regenerar el preset de fusión"
4298
+ "reseedFailed": "No se pudo regenerar la política de riesgo"
4274
4299
  }
4275
4300
  }
4276
4301
  },