@cat-factory/app 0.46.10 → 0.46.12

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 (48) hide show
  1. package/app/components/auth/AuthGate.vue +2 -1
  2. package/app/components/auth/LoginScreen.vue +41 -31
  3. package/app/components/auth/ResetPasswordScreen.vue +16 -13
  4. package/app/components/auth/UserMenu.vue +3 -2
  5. package/app/components/layout/AccountDeploymentSettings.vue +75 -32
  6. package/app/components/layout/AccountFragmentSettings.vue +2 -3
  7. package/app/components/layout/AccountTeamSettings.vue +75 -45
  8. package/app/components/layout/AiProvidersBanner.vue +11 -11
  9. package/app/components/layout/BoardSwitcher.vue +63 -29
  10. package/app/components/layout/CommandBar.vue +68 -54
  11. package/app/components/layout/GitHubPatBanner.vue +13 -6
  12. package/app/components/layout/IntegrationBackTitle.vue +4 -1
  13. package/app/components/layout/IntegrationsHub.vue +67 -49
  14. package/app/components/layout/NotificationsInbox.vue +48 -19
  15. package/app/components/layout/PersonalSetupModal.vue +26 -16
  16. package/app/components/layout/ProviderConfigBanner.vue +14 -9
  17. package/app/components/layout/SideBar.vue +20 -18
  18. package/app/components/layout/SpendWarningBanner.vue +16 -16
  19. package/app/components/observability/StepMetricsBar.vue +31 -11
  20. package/app/components/observability/StepModelActivity.vue +3 -2
  21. package/app/components/panels/AgentStepDetail.vue +52 -39
  22. package/app/components/panels/DecisionModal.vue +12 -5
  23. package/app/components/panels/GenericStructuredResultView.vue +16 -6
  24. package/app/components/panels/InspectorPanel.vue +35 -28
  25. package/app/components/panels/ObservabilityPanel.vue +92 -49
  26. package/app/components/panels/StepMetadataCard.vue +87 -30
  27. package/app/components/panels/StepRestartControl.vue +4 -3
  28. package/app/components/panels/StepRunMeta.vue +23 -10
  29. package/app/components/panels/StepTestReport.vue +14 -11
  30. package/app/components/panels/inspector/ContainerSummary.vue +25 -14
  31. package/app/components/panels/inspector/EpicChildren.vue +7 -4
  32. package/app/components/panels/inspector/RecurringScheduleSettings.vue +60 -19
  33. package/app/components/panels/inspector/ServiceFragments.vue +3 -2
  34. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +18 -13
  35. package/app/components/panels/inspector/ServiceTestConfig.vue +50 -39
  36. package/app/components/panels/inspector/TaskAgentConfig.vue +6 -5
  37. package/app/components/panels/inspector/TaskDependencies.vue +9 -4
  38. package/app/components/panels/inspector/TaskEstimateBadge.vue +14 -13
  39. package/app/components/panels/inspector/TaskExecution.vue +65 -31
  40. package/app/components/panels/inspector/TaskRunSettings.vue +93 -56
  41. package/app/components/panels/inspector/TaskStructure.vue +5 -4
  42. package/app/components/providers/PersonalSubscriptionSection.vue +1 -2
  43. package/i18n/locales/en.json +814 -0
  44. package/i18n/locales/es.json +811 -0
  45. package/i18n/locales/fr.json +811 -0
  46. package/i18n/locales/pl.json +811 -0
  47. package/i18n/locales/uk.json +811 -0
  48. package/package.json +1 -1
@@ -344,5 +344,819 @@
344
344
  "step3": "Copy the entire contents of auth.json, paste it below, and choose a personal password to protect it."
345
345
  }
346
346
  }
347
+ },
348
+ "inspector": {
349
+ "container": {
350
+ "modules": "Modules ({count})",
351
+ "taskCount": "{count} task | {count} tasks",
352
+ "allTasks": "All tasks ({count})",
353
+ "tasks": "Tasks ({count})",
354
+ "addTask": "Add task",
355
+ "noTasks": "No tasks yet. Add one to start work.",
356
+ "servicesHint": "Services are long-lived and don't complete. Work happens in their tasks and modules."
357
+ },
358
+ "epicChildren": {
359
+ "title": "Epic tasks",
360
+ "doneCount": "{done}/{total} done",
361
+ "empty": "No tasks belong to this epic yet. Import an epic's children, or set a task's epic.",
362
+ "unassigned": "Unassigned"
363
+ },
364
+ "recurring": {
365
+ "title": "Recurring pipeline",
366
+ "active": "Active",
367
+ "paused": "Paused",
368
+ "intervalDays": "{count}d",
369
+ "intervalHours": "{count}h",
370
+ "anyDay": "any day",
371
+ "cadence": "Every {every} · {days}{window} · {timezone}",
372
+ "weekdays": {
373
+ "sun": "Sun",
374
+ "mon": "Mon",
375
+ "tue": "Tue",
376
+ "wed": "Wed",
377
+ "thu": "Thu",
378
+ "fri": "Fri",
379
+ "sat": "Sat"
380
+ },
381
+ "nextRun": "Next run: {time}",
382
+ "runNow": "Run now",
383
+ "pause": "Pause",
384
+ "resume": "Resume",
385
+ "editCadence": "Edit cadence",
386
+ "recentRuns": "Recent runs",
387
+ "runStatus": {
388
+ "running": "Running",
389
+ "done": "Done",
390
+ "failed": "Failed",
391
+ "skipped": "Skipped"
392
+ },
393
+ "updateFailed": "Could not update schedule",
394
+ "runNowFailed": "Could not run now"
395
+ },
396
+ "fragments": {
397
+ "serviceTitle": "Service best practices",
398
+ "serviceEmpty": "None. Code-aware agents on this service follow their default guidance."
399
+ },
400
+ "releaseHealth": {
401
+ "title": "Post-release health",
402
+ "clear": "Clear",
403
+ "connectPrompt": "Connect an observability integration to watch this service after releases.",
404
+ "connectFirst": "Connect an observability integration first",
405
+ "connect": "Connect",
406
+ "hint": "The monitors and SLOs the gate watches after this service ships. Comma-separate ids.",
407
+ "monitorIds": "Monitor ids",
408
+ "sloIds": "SLO ids",
409
+ "envTag": "Env tag (optional)",
410
+ "saveMonitoring": "Save monitoring",
411
+ "savedToast": "Monitoring saved",
412
+ "saveFailed": "Could not save the mapping",
413
+ "clearFailed": "Could not clear the mapping"
414
+ },
415
+ "testConfig": {
416
+ "title": "Test infrastructure",
417
+ "defaultEnv": "Default test environment",
418
+ "defaultEnvHint": "The default tasks under this service are spawned with. Each task can override it in its agent settings.",
419
+ "env": {
420
+ "ephemeral": "Ephemeral environment",
421
+ "ephemeralHint": "tests run against a provisioned env",
422
+ "local": "Local (docker-compose)",
423
+ "localHint": "the Tester stands deps up locally"
424
+ },
425
+ "composePath": "docker-compose path",
426
+ "browseRepo": "Browse the repository for the compose file",
427
+ "composeHint": "Used by the Tester to stand up the service's dependencies locally.",
428
+ "selectComposeTitle": "Select the docker-compose file",
429
+ "selectComposeHint": "Pick the compose file in the repository. Its path is stored relative to the repo root.",
430
+ "selected": "Selected: {path}",
431
+ "noFileSelected": "No file selected.",
432
+ "useThisFile": "Use this file",
433
+ "noInfra": "No infra dependencies (the Tester spins nothing up)",
434
+ "missingInfra": "Set a docker-compose path or enable no infra dependencies, otherwise a pipeline with a Tester won't start.",
435
+ "provisioningTitle": "Ephemeral environment provisioning",
436
+ "provisioningHint": "A hint for provisioning this service's ephemeral test environment: which cloud provider to deploy to and how large an instance to request. Ignored for local (docker-compose) testing.",
437
+ "cloudProvider": "Cloud provider",
438
+ "instanceSize": "Instance size",
439
+ "providers": {
440
+ "docker": "Docker (local)",
441
+ "custom": "Custom"
442
+ },
443
+ "sizes": {
444
+ "small": "Small",
445
+ "medium": "Medium",
446
+ "large": "Large",
447
+ "xlarge": "XLarge"
448
+ }
449
+ },
450
+ "agentConfig": {
451
+ "title": "Agent configuration",
452
+ "inherited": "inherited from service",
453
+ "frozen": "Frozen: the agent has started"
454
+ },
455
+ "dependencies": {
456
+ "title": "Depends on",
457
+ "merged": "Merged",
458
+ "notMerged": "Not merged yet",
459
+ "empty": "No dependencies. Can run any time.",
460
+ "blocked": "Blocked until dependencies merge."
461
+ },
462
+ "estimate": {
463
+ "title": "Estimate",
464
+ "complexity": "Complexity",
465
+ "risk": "Risk",
466
+ "impact": "Impact"
467
+ },
468
+ "execution": {
469
+ "stage": {
470
+ "incorporating": "Incorporating…",
471
+ "reviewing": "Re-reviewing…",
472
+ "recommending": "Recommending…"
473
+ },
474
+ "prNumber": "PR #{number}",
475
+ "pullRequest": "Pull request",
476
+ "stepState": {
477
+ "pending": "Pending",
478
+ "working": "Working",
479
+ "waiting_decision": "Needs decision",
480
+ "done": "Done"
481
+ },
482
+ "failed": "Failed",
483
+ "needsDecision": "Needs decision",
484
+ "needsApproval": "Needs approval",
485
+ "spinningUp": "Spinning up…",
486
+ "stop": "Stop",
487
+ "stopTooltip": "Stop the run but keep it (readable and retryable)",
488
+ "reset": "Reset",
489
+ "resetTooltip": "Discard this run and reset the task to planned",
490
+ "viewDetailsOutput": "View details and read output",
491
+ "viewDetails": "View step details",
492
+ "companion": "Companion",
493
+ "companionTooltip": "Companion of a producer step",
494
+ "subtasksProgress": "{completed} of {total} subtasks done, {inProgress} in progress",
495
+ "subtasksDone": "{completed} of {total} subtasks done",
496
+ "resolve": "Resolve",
497
+ "decide": "Decide",
498
+ "review": "Review",
499
+ "approve": "Approve",
500
+ "fragmentsTooltip": "Best-practice fragments folded into this step: {fragments}",
501
+ "standardsApplied": "{count} standard applied | {count} standards applied",
502
+ "companionOf": "{label} (companion)",
503
+ "merged": "Merged",
504
+ "open": "Open",
505
+ "mergePr": "Merge PR"
506
+ },
507
+ "structure": {
508
+ "module": "Module",
509
+ "modulePlaceholder": "e.g. Sessions (created on implement if new)",
510
+ "bestPractices": "Best practices",
511
+ "bestPracticesEmpty": "None. Agents follow their default guidance."
512
+ },
513
+ "runSettings": {
514
+ "unassigned": "Unassigned",
515
+ "workspaceDefault": "Workspace default",
516
+ "workspaceDefaultParen": "(workspace default)",
517
+ "defaultPresetThresholds": "Default ({name}): {thresholds}",
518
+ "defaultPreset": "Default ({name})",
519
+ "noDefault": "No default",
520
+ "inheritWorkspace": "Inherit workspace",
521
+ "on": "On",
522
+ "off": "Off",
523
+ "inheritOn": "Inherit (on)",
524
+ "inheritOff": "Inherit (off)",
525
+ "technical": {
526
+ "unset": "Unset (auto-detect)",
527
+ "technical": "Technical",
528
+ "business": "Business"
529
+ },
530
+ "pipeline": "Pipeline",
531
+ "pipelineEmpty": "No default. Pick a pipeline when you run this task.",
532
+ "mergePolicy": "Merge policy",
533
+ "mergePresetDetail": "{name}: auto-merge when complexity ≤ {complexity}, risk ≤ {risk}, impact ≤ {impact}; up to {attempts} CI-fix attempts.",
534
+ "mergePresetEmpty": "No preset configured. The merger raises a review notification for every PR.",
535
+ "modelPreset": "Model preset",
536
+ "modelPresetBase": "base {model}",
537
+ "modelPresetOverrides": ", {count} override | , {count} overrides",
538
+ "modelPresetEmpty": "No preset configured. Agents run on the deployment's default routing.",
539
+ "unavailableModels": "Not available under the current configuration: {models}. This task would fail on those steps.",
540
+ "editPresets": "Edit presets",
541
+ "configureVendors": "Configure vendors",
542
+ "modelPresetChangeHint": "Changing this affects only steps that haven't started yet.",
543
+ "taskKind": "Task kind",
544
+ "technicalHint": {
545
+ "technical": "Technical: the implementer treats the task definition as primary and the spec as a regression reference; the spec-writer may produce no business specs.",
546
+ "business": "Business: the specification leads, as usual.",
547
+ "unset": "Auto-detect: inferred from the spec phase. Set it explicitly to override."
548
+ },
549
+ "issueWriteback": "Issue writeback",
550
+ "commentOnPrOpen": "Comment on PR open",
551
+ "closeOnMerge": "Close on merge",
552
+ "writebackHint": "Writes back to this task's linked tracker issue. Overrides the workspace default.",
553
+ "responsibleProduct": "Responsible product",
554
+ "responsibleEmpty": "Unassigned. Set a product owner to notify them when requirement review flags this task.",
555
+ "autoStartDependents": "Auto-start dependents",
556
+ "autoStartHint": "When this task merges, automatically start the tasks that depend on it (once their other dependencies are also done)."
557
+ }
558
+ },
559
+ "panels": {
560
+ "decision": {
561
+ "title": "Decision required",
562
+ "agentOnBlock": "{agent} on {block}",
563
+ "visualizationHint": "This is a visualization. Any choice simply resumes the pipeline."
564
+ },
565
+ "stepRestart": {
566
+ "restartFromStep": "Restart pipeline from this step",
567
+ "restartFromHere": "Restart from here"
568
+ },
569
+ "structuredResult": {
570
+ "fallbackTitle": "Agent result",
571
+ "titleWithBlock": "{label}: {title}",
572
+ "fallbackDescription": "Structured agent output",
573
+ "structuredOutput": "Structured output",
574
+ "noResult": "No result yet.",
575
+ "noResultHint": "The structured output appears once this agent finishes. While it runs, the step shows live progress on the board."
576
+ },
577
+ "testReport": {
578
+ "title": "Test report",
579
+ "greenlit": "Greenlit",
580
+ "needsFixes": "Needs fixes",
581
+ "fixAttempts": "{count}/{max} fix attempts",
582
+ "fixing": "· fixing…",
583
+ "tested": "Tested",
584
+ "outcomes": "Outcomes",
585
+ "concerns": "Concerns"
586
+ },
587
+ "stepMeta": {
588
+ "stateLabel": "State",
589
+ "duration": "Duration",
590
+ "elapsed": "elapsed",
591
+ "step": "Step",
592
+ "stepOf": "{number} of {total}",
593
+ "started": "Started",
594
+ "finished": "Finished",
595
+ "model": "Model",
596
+ "notRecorded": "Not recorded",
597
+ "run": "Run",
598
+ "clickToCopy": "{id} (click to copy)",
599
+ "spinningUpContainer": "Spinning up container…",
600
+ "subtasks": "Subtasks · {completed}/{total}",
601
+ "standardsApplied": "Standards applied",
602
+ "decision": "Decision",
603
+ "awaitingChoice": "Awaiting a human choice",
604
+ "approvalGate": "Approval gate",
605
+ "companionReview": "Companion review",
606
+ "correctionIterations": "{count} correction iteration. | {count} correction iterations.",
607
+ "state": {
608
+ "pending": "Pending",
609
+ "working": "Working",
610
+ "waiting_decision": "Needs input",
611
+ "done": "Done",
612
+ "failed": "Failed"
613
+ },
614
+ "approvalStatus": {
615
+ "pending": "Pending",
616
+ "approved": "Approved",
617
+ "changes_requested": "Changes requested",
618
+ "rejected": "Rejected"
619
+ }
620
+ },
621
+ "stepDetail": {
622
+ "contents": "Contents",
623
+ "details": "Details",
624
+ "approvalRequired": "Approval required",
625
+ "decisionRequired": "Decision required",
626
+ "expandAll": "Expand all sections",
627
+ "collapseAll": "Collapse all sections",
628
+ "copyRawOutput": "Copy raw output",
629
+ "closeEsc": "Close (Esc)",
630
+ "companionCapHeading": "{agent} hit its {attempts}-attempt rework limit, still below the {threshold} bar.",
631
+ "companionCapDetail": "Do one more automatic rework round, proceed to the next step accepting the current output, or stop and reset the task so you can edit the inputs and resubmit.",
632
+ "infraAttempts": "Infrastructure attempts",
633
+ "hideInfraAttempts": "Hide infrastructure attempts",
634
+ "editingConclusions": "Editing the conclusions",
635
+ "editConclusionsPlaceholder": "Edit the agent's conclusions; your edits are saved when you approve…",
636
+ "noProseOutput": "This agent produced no prose output.",
637
+ "approveWithCorrections": "Approve with corrections",
638
+ "reviewAndApprove": "Review & approve",
639
+ "editHint": "Edit the conclusions on the left; your edits are saved when you approve.",
640
+ "reviewHint": "Click any block in the output to comment on it, or leave overall feedback below.",
641
+ "editingNotice": "You're editing the conclusions directly. Manual edits can't be combined with per-block comments. Approve to save them, or cancel to return to review.",
642
+ "commentingOn": "Commenting on",
643
+ "commentPlaceholder": "Leave a comment on this block…",
644
+ "addComment": "Add comment",
645
+ "commentN": "Comment {number}",
646
+ "removeComment": "Remove comment",
647
+ "overallFeedback": "Overall feedback / reject reason",
648
+ "overallFeedbackPlaceholder": "Describe the changes the agent should make (optional if you left per-block comments)…",
649
+ "approveWithEdits": "Approve with these edits",
650
+ "cancelEdits": "Cancel edits",
651
+ "approveAndProceed": "Approve & proceed",
652
+ "rejectConfirmPrompt": "Reject this proposal and stop the run entirely?",
653
+ "confirmReject": "Confirm reject",
654
+ "requestChanges": "Request changes",
655
+ "reject": "Reject",
656
+ "requestChangesHint": "Request changes re-runs this step with your feedback & comments. Reject stops the run entirely."
657
+ },
658
+ "inspector": {
659
+ "frameStatus": {
660
+ "planned": "No tasks",
661
+ "ready": "Live",
662
+ "in_progress": "Active",
663
+ "blocked": "Needs attention",
664
+ "pr_ready": "Active",
665
+ "done": "Live"
666
+ },
667
+ "deleteRecurringPipeline": "Delete recurring pipeline",
668
+ "deleteTask": "Delete task",
669
+ "deleteModule": "Delete module",
670
+ "deleteService": "Delete service",
671
+ "titlePlaceholder": "Title…",
672
+ "reworkedRequirements": "Reworked requirements",
673
+ "agentStepsUseDocument": "Agent steps use this document.",
674
+ "open": "Open",
675
+ "originalDescriptionFrozen": "Original description (frozen)",
676
+ "noDescription": "No description",
677
+ "describeBlock": "Describe this block…",
678
+ "taskStartedLocked": "This task has started. Its details are locked.",
679
+ "lastIncorporatedRequirements": "Last incorporated requirements",
680
+ "priorDocHint": "From the previous review. Use it as a base: edit the description above and resubmit.",
681
+ "bootstrapping": "Bootstrapping…",
682
+ "importIssue": "Import issue",
683
+ "connectTracker": "Connect a tracker",
684
+ "spawnFromDocument": "Spawn from document",
685
+ "viewRequirements": "View Requirements",
686
+ "reRun": "Re-run",
687
+ "run": "Run",
688
+ "focus": "Focus"
689
+ }
690
+ },
691
+ "observability": {
692
+ "modelActivity": "Model activity",
693
+ "viewAllCalls": "View all calls →",
694
+ "providedContext": "Provided context",
695
+ "exportJson": "Export JSON",
696
+ "exportHint": "Download an LLM-friendly JSON export of this run",
697
+ "closeEsc": "Close (Esc)",
698
+ "loadingActivity": "Loading model activity…",
699
+ "loadingContext": "Loading provided context…",
700
+ "noCalls": "No model calls recorded for this run.",
701
+ "noContext": "No agent context stored for this run. It is captured per dispatch when the workspace has 'Store full agent context' enabled.",
702
+ "summary": {
703
+ "calls": "Calls",
704
+ "tokensInOut": "Tokens (in / out)",
705
+ "transportOverhead": "Transport overhead",
706
+ "modelExecution": "Model execution",
707
+ "truncated": "{count} truncated | {count} truncated"
708
+ },
709
+ "metricsBar": {
710
+ "calls": "{count} call | {count} calls",
711
+ "promptCompletionTokens": "Prompt / completion tokens",
712
+ "cachedTokens": "({tokens} cached)",
713
+ "cachedTokensHint": "Prompt tokens served from the provider's cache",
714
+ "errors": "{count} error | {count} errors",
715
+ "warnings": "{count} warning | {count} warnings",
716
+ "outputLimit": "Output limit",
717
+ "truncatedCalls": "{count} call truncated at the limit | {count} calls truncated at the limit",
718
+ "transportVsExecution": "Transport vs execution",
719
+ "transportOverhead": "Transport / proxy overhead",
720
+ "modelExecution": "Model execution"
721
+ },
722
+ "call": {
723
+ "tokensTitle": "{prompt} prompt / {completion} completion tokens",
724
+ "outputUsedVsLimit": "Output used vs limit",
725
+ "transportVsExecution": "Transport overhead / model execution",
726
+ "error": "error",
727
+ "ok": "ok",
728
+ "messages": "{count} messages",
729
+ "tools": "{count} tools",
730
+ "streamed": "streamed",
731
+ "buffered": "buffered",
732
+ "maxTokens": "max_tokens {value}",
733
+ "promptCached": "{cached}/{prompt} prompt cached",
734
+ "total": "total {duration}",
735
+ "prompt": "Prompt",
736
+ "promptPrefixOmitted": "(new messages only: {count} earlier omitted)",
737
+ "response": "Response",
738
+ "reasoning": "Reasoning"
739
+ },
740
+ "context": {
741
+ "injectedFiles": "Injected context files",
742
+ "bestPracticeFragments": "Best-practice fragments",
743
+ "filesCount": "{count} files",
744
+ "fragmentsCount": "{count} fragments",
745
+ "systemPrompt": "System prompt",
746
+ "userPrompt": "User prompt",
747
+ "details": "Details"
748
+ }
749
+ },
750
+ "auth": {
751
+ "gate": {
752
+ "loading": "Loading…"
753
+ },
754
+ "login": {
755
+ "appTitle": "Architecture Board",
756
+ "@appTitle": {
757
+ "description": "The product/app title shown on the login screen. Keep verbatim across every locale - it is a proper-noun-ish product name, do NOT translate it."
758
+ },
759
+ "subtitle": "Sign in to continue.",
760
+ "inviteSubtitle": "Accept your invitation to continue.",
761
+ "forgotSubtitle": "Reset your password.",
762
+ "continueWithGithub": "Continue with GitHub",
763
+ "continueWithGoogle": "Continue with Google",
764
+ "or": "or",
765
+ "namePlaceholder": "Name (optional)",
766
+ "emailPlaceholder": "Email",
767
+ "passwordPlaceholder": "Password",
768
+ "createAccount": "Create account",
769
+ "signIn": "Sign in",
770
+ "signUp": "Sign up",
771
+ "needAccount": "Need an account? {signUp}",
772
+ "haveAccount": "Already have an account? {signIn}",
773
+ "forgotPassword": "Forgot password?",
774
+ "forgotSent": "If an account exists for that email, a password reset link is on its way. Check your inbox.",
775
+ "sendResetLink": "Send reset link",
776
+ "backToSignIn": "Back to sign in",
777
+ "signInFailed": "Sign-in failed. Check your details and try again.",
778
+ "genericError": "Something went wrong. Please try again."
779
+ },
780
+ "resetPassword": {
781
+ "title": "Reset password",
782
+ "subtitle": "Choose a new password for your account.",
783
+ "doneBody": "Your password has been reset. You can now sign in with your new password.",
784
+ "goToSignIn": "Go to sign in",
785
+ "missingToken": "This reset link is missing its token. Request a new link from the sign-in screen.",
786
+ "backToSignIn": "Back to sign in",
787
+ "newPasswordPlaceholder": "New password",
788
+ "confirmPasswordPlaceholder": "Confirm new password",
789
+ "submit": "Reset password",
790
+ "errorTooShort": "Password must be at least 8 characters.",
791
+ "errorMismatch": "Passwords do not match.",
792
+ "errorInvalidLink": "This password reset link is invalid or has expired."
793
+ },
794
+ "userMenu": {
795
+ "mySetup": "My setup",
796
+ "signOut": "Sign out"
797
+ }
798
+ },
799
+ "layout": {
800
+ "accountDeployment": {
801
+ "title": "Deployment integrations",
802
+ "intro": "Credentials shared by every workspace in this account, sealed at rest. Values are never shown after saving; leave a field blank to keep the stored secret.",
803
+ "configured": "Configured",
804
+ "notSet": "Not set",
805
+ "clear": "Clear",
806
+ "loadFailed": "Could not load deployment settings",
807
+ "slack": {
808
+ "title": "Slack app (OAuth)",
809
+ "description": "Enables the \"Add to Slack\" OAuth flow. Without it, workspaces can still connect Slack by pasting a bot token.",
810
+ "clientId": "Client ID",
811
+ "clientSecret": "Client secret",
812
+ "redirectUrl": "Redirect URL",
813
+ "validation": "Enter the client id, secret and redirect URL",
814
+ "saved": "Slack OAuth saved",
815
+ "saveFailed": "Could not save Slack OAuth",
816
+ "cleared": "Slack OAuth cleared",
817
+ "clearFailed": "Could not clear Slack OAuth"
818
+ },
819
+ "web": {
820
+ "title": "Container web search",
821
+ "description": "The search upstream container agents reach through the backend proxy. Set a Brave key (recommended), or a self-hosted SearXNG URL (with an optional bearer key).",
822
+ "configured": "Configured ({provider})",
823
+ "braveKey": "Brave API key",
824
+ "searxngUrl": "SearXNG URL",
825
+ "searxngKey": "SearXNG key (optional)",
826
+ "validation": "Enter a Brave key or a SearXNG URL",
827
+ "saved": "Web search keys saved",
828
+ "saveFailed": "Could not save web search keys",
829
+ "cleared": "Web search keys cleared",
830
+ "clearFailed": "Could not clear web search keys"
831
+ }
832
+ },
833
+ "accountFragments": {
834
+ "intro": "Best-practice guidelines shared by every board in this account. Each board inherits these and can override or add its own. Code-aware agents (coder, reviewer, architect, fixers) fold the relevant ones into their prompt."
835
+ },
836
+ "accountTeam": {
837
+ "roles": {
838
+ "admin": "Admin",
839
+ "developer": "Developer",
840
+ "product": "Product"
841
+ },
842
+ "org": {
843
+ "ctaTitle": "Invite teammates & manage roles",
844
+ "ctaBody": "Members, roles and invitations live on an organization. Create one to invite teammates and manage their roles; your personal boards stay as they are.",
845
+ "namePlaceholder": "Acme Inc.",
846
+ "create": "Create organization",
847
+ "created": "Organization created"
848
+ },
849
+ "members": {
850
+ "title": "Members",
851
+ "empty": "No members yet."
852
+ },
853
+ "invite": {
854
+ "title": "Invite a teammate",
855
+ "submit": "Invite",
856
+ "revoke": "Revoke invitation",
857
+ "created": "Invitation created",
858
+ "createdEmailed": "An email was sent (or copy the link from the list below).",
859
+ "createdShareLink": "Share the accept link with your teammate.",
860
+ "status": {
861
+ "pending": "Pending",
862
+ "accepted": "Accepted",
863
+ "revoked": "Revoked"
864
+ }
865
+ },
866
+ "email": {
867
+ "title": "Email sender",
868
+ "notEnabled": "Email delivery is not enabled on this deployment. Invitations still produce a shareable accept link.",
869
+ "connectedAs": "Connected via {provider} as {from}",
870
+ "disconnect": "Disconnect",
871
+ "connect": "Connect email sender",
872
+ "connected": "Email sender connected",
873
+ "fromPlaceholder": "From address",
874
+ "apiKeyPlaceholder": "Provider API key",
875
+ "providers": {
876
+ "resend": "Resend",
877
+ "sendgrid": "SendGrid"
878
+ }
879
+ },
880
+ "apiKeys": {
881
+ "title": "Account API keys"
882
+ },
883
+ "errors": {
884
+ "updateRoles": "Could not update roles",
885
+ "loadSettings": "Could not load team settings",
886
+ "createOrg": "Could not create organization",
887
+ "sendInvite": "Could not send invitation",
888
+ "revokeInvite": "Could not revoke invitation",
889
+ "connectEmail": "Could not connect email sender",
890
+ "disconnectEmail": "Could not disconnect email sender"
891
+ }
892
+ },
893
+ "boardSwitcher": {
894
+ "accountFallback": "Account",
895
+ "boardFallback": "Board",
896
+ "providers": {
897
+ "docker": "Docker (local)",
898
+ "custom": "Custom"
899
+ },
900
+ "account": {
901
+ "newOrg": "New organization…",
902
+ "settings": "Account settings…",
903
+ "defaultProvider": "Default cloud provider"
904
+ },
905
+ "board": {
906
+ "new": "New board…",
907
+ "rename": "Rename board…",
908
+ "delete": "Delete board"
909
+ },
910
+ "prompt": {
911
+ "create": "Create",
912
+ "nameLabel": "Name",
913
+ "descriptionLabel": "Description",
914
+ "descriptionHint": "Optional",
915
+ "descriptionPlaceholder": "What is this board for?",
916
+ "account": {
917
+ "title": "New organization",
918
+ "placeholder": "Acme Inc."
919
+ },
920
+ "board": {
921
+ "title": "New board",
922
+ "placeholder": "Untitled board"
923
+ },
924
+ "rename": {
925
+ "title": "Board settings",
926
+ "placeholder": "Board name"
927
+ }
928
+ },
929
+ "toast": {
930
+ "updateProviderFailed": "Could not update default provider",
931
+ "switchAccountFailed": "Could not switch account",
932
+ "openBoardFailed": "Could not open board",
933
+ "boardDeleted": "Board deleted",
934
+ "deleteBoardFailed": "Could not delete board"
935
+ }
936
+ },
937
+ "notifications": {
938
+ "heading": "Needs your attention",
939
+ "overdue": "Overdue",
940
+ "openPr": "Open PR",
941
+ "dismiss": "Dismiss",
942
+ "action": {
943
+ "merge_review": "Merge",
944
+ "pipeline_complete": "Confirm & merge",
945
+ "ci_failed": "Retry run",
946
+ "test_failed": "Retry run",
947
+ "requirement_review": "Mark read",
948
+ "clarity_review": "Mark read",
949
+ "release_regression": "Acknowledge",
950
+ "decision_required": "Mark read",
951
+ "human_test_ready": "Mark read",
952
+ "visual_confirmation_ready": "Mark read",
953
+ "human_review": "Mark read",
954
+ "followup_pending": "Mark read",
955
+ "markRead": "Mark read"
956
+ }
957
+ },
958
+ "aiProvidersBanner": {
959
+ "setup": {
960
+ "title": "No AI model configured",
961
+ "body": "Agents need a model to run. AI works out of the box only on a Cloudflare deployment with Workers AI enabled. Otherwise connect a provider key, subscription, proxy, or local runner to continue.",
962
+ "action": "Configure AI"
963
+ },
964
+ "preset": {
965
+ "title": "Default model preset uses unavailable models",
966
+ "body": "Tasks using the default preset would fail. Edit the preset or configure the missing provider.",
967
+ "action": "Review preset"
968
+ }
969
+ },
970
+ "githubPatBanner": {
971
+ "title": "GitHub PAT not configured",
972
+ "body": "Local mode reaches GitHub with a personal access token. Without one, agent steps that clone, push, open PRs, gate on CI or merge will fail.",
973
+ "createToken": "Create a GitHub token (scopes pre-selected)",
974
+ "thenSet": "Then set {envVar} and restart."
975
+ },
976
+ "providerConfigBanner": {
977
+ "titleMany": "Providers need configuration",
978
+ "titleOne": {
979
+ "environment": "Environment provider needs configuration",
980
+ "runner-pool": "Runner pool needs configuration"
981
+ },
982
+ "body": "A provider is wired for this instance but is missing required settings, so it can't run yet. Add the mandatory fields to finish connecting it.",
983
+ "action": {
984
+ "environment": "Configure environment provider",
985
+ "runner-pool": "Configure runner pool"
986
+ }
987
+ },
988
+ "spendWarningBanner": {
989
+ "title": "Spend limit reached, agent execution paused",
990
+ "body": "This month's token spend has hit the configured budget, so running pipelines were paused to avoid further cost. Execution resumes automatically when the budget rolls over next month, or once the limit is raised.",
991
+ "spent": "Spent",
992
+ "budget": "Budget",
993
+ "tokens": "Tokens",
994
+ "resume": "Resume anyway",
995
+ "resumeHint": "Resuming continues spending; it will pause again if still over budget."
996
+ },
997
+ "personalSetup": {
998
+ "title": "My setup",
999
+ "intro": "Your personal connections, used for runs you start and visible only to you.",
1000
+ "connected": "Connected",
1001
+ "notConnected": "Not connected",
1002
+ "connectedCount": "no connected | {count} connected | {count} connected",
1003
+ "sourceControl": {
1004
+ "title": "Source control"
1005
+ },
1006
+ "githubToken": {
1007
+ "label": "My GitHub token",
1008
+ "description": "A personal access token used for runs you start (pushes, PRs, CI, merge)."
1009
+ },
1010
+ "models": {
1011
+ "title": "Models"
1012
+ },
1013
+ "localRunners": {
1014
+ "label": "My local runners",
1015
+ "description": "Your own-machine model runners (Ollama, LM Studio, vLLM)."
1016
+ },
1017
+ "subscriptions": {
1018
+ "label": "My subscriptions",
1019
+ "description": "Individual-usage plans you unlock with a personal password (Claude, GLM, Codex)."
1020
+ }
1021
+ },
1022
+ "integrationBack": {
1023
+ "backToMySetup": "Back to My setup",
1024
+ "backToIntegrations": "Back to Integrations"
1025
+ },
1026
+ "commandBar": {
1027
+ "searchPlaceholder": "Search or run a command…",
1028
+ "noMatches": "No matching commands.",
1029
+ "groups": {
1030
+ "create": "Create",
1031
+ "repositories": "Repositories",
1032
+ "integrations": "Integrations",
1033
+ "workspace": "Workspace",
1034
+ "account": "Account"
1035
+ },
1036
+ "cmd": {
1037
+ "newPipeline": "Build a pipeline",
1038
+ "addFromRepo": "Add service from existing repo",
1039
+ "bootstrapRepo": "Bootstrap a new repo",
1040
+ "githubManage": "Manage GitHub connection",
1041
+ "githubConnect": "Connect GitHub",
1042
+ "slackManage": "Manage Slack notifications",
1043
+ "slackConnect": "Connect Slack",
1044
+ "sourceManage": "Manage {source}",
1045
+ "sourceConnect": "Connect {source}",
1046
+ "documentImport": "Import and spawn from documents",
1047
+ "taskImport": "Import issues",
1048
+ "fragments": "Context fragment library",
1049
+ "mergeThresholds": "Merge thresholds",
1050
+ "workspaceSettings": "Workspace settings",
1051
+ "modelConfiguration": "Model configuration",
1052
+ "serviceFragmentDefaults": "Default service best practices",
1053
+ "accountSettings": "Account settings",
1054
+ "localModels": "My local runners",
1055
+ "sandbox": "Open Sandbox"
1056
+ },
1057
+ "keywords": {
1058
+ "newPipeline": "pipeline agents chain",
1059
+ "addFromRepo": "github import existing",
1060
+ "bootstrapRepo": "scaffold create reference architecture",
1061
+ "github": "git repos pull requests issues",
1062
+ "slack": "slack notifications channel mentions",
1063
+ "documentSource": "document source prd rfc",
1064
+ "documentImport": "document import spawn",
1065
+ "taskSource": "task source tracker issues",
1066
+ "taskImport": "task import issues",
1067
+ "fragments": "prompt fragments best practice guidelines context",
1068
+ "mergeThresholds": "merge policy preset auto-merge ci",
1069
+ "workspaceSettings": "limit running tasks per service waiting escalation overdue notification timeout",
1070
+ "modelConfiguration": "model llm routing agent kind default preset configuration",
1071
+ "serviceFragmentDefaults": "fragment best practice guideline service default code-aware",
1072
+ "accountSettings": "account team members roles invitations email api keys fragment best practice library context organization personal",
1073
+ "localModels": "local model runner ollama lm studio llamacpp vllm endpoint",
1074
+ "sandbox": "sandbox prompt model test experiment judge fixture benchmark evaluate"
1075
+ }
1076
+ },
1077
+ "integrationsHub": {
1078
+ "title": "Integrations",
1079
+ "intro": "Connect and manage the external systems this workspace can link in.",
1080
+ "searchPlaceholder": "Search integrations…",
1081
+ "noMatches": "No integrations match \"{query}\".",
1082
+ "getStarted": {
1083
+ "title": "Get started",
1084
+ "body": "Connect a code source and a model provider to run your first pipeline."
1085
+ },
1086
+ "status": {
1087
+ "connected": "Connected",
1088
+ "keyConnected": "Key connected",
1089
+ "notConnected": "Not connected",
1090
+ "needsAttention": "Needs attention",
1091
+ "disabled": "Disabled",
1092
+ "recommended": "Recommended"
1093
+ },
1094
+ "groups": {
1095
+ "models": "Models and providers",
1096
+ "sourceControl": "Source control",
1097
+ "communication": "Communication",
1098
+ "documents": "Documents",
1099
+ "taskTrackers": "Task trackers",
1100
+ "observability": "Observability",
1101
+ "infrastructure": "Infrastructure",
1102
+ "personal": "Personal (only you)"
1103
+ },
1104
+ "items": {
1105
+ "openrouter": {
1106
+ "description": "One gateway to 300+ models. Add your key and enable models in one place."
1107
+ },
1108
+ "vendors": {
1109
+ "label": "Vendors and keys",
1110
+ "description": "Workspace LLM subscriptions and provider API keys."
1111
+ },
1112
+ "github": {
1113
+ "description": "Connect the workspace's GitHub App, browse repos, PRs and issues."
1114
+ },
1115
+ "slack": {
1116
+ "description": "Route notifications to your team's Slack workspace."
1117
+ },
1118
+ "documentSource": {
1119
+ "description": "Link {source} as a document source for requirements context."
1120
+ },
1121
+ "documentImport": {
1122
+ "label": "Import and spawn",
1123
+ "description": "Pull documents from a connected source and spawn structure."
1124
+ },
1125
+ "taskSource": {
1126
+ "description": "Link {source} to import and reference tracker issues."
1127
+ },
1128
+ "taskImport": {
1129
+ "label": "Import issues",
1130
+ "description": "Pull issues from a connected tracker onto the board."
1131
+ },
1132
+ "trackerSettings": {
1133
+ "label": "Issue tracker settings"
1134
+ },
1135
+ "observability": {
1136
+ "label": "Post-release health",
1137
+ "description": "Watch monitors and SLOs after a release ships (Datadog)."
1138
+ },
1139
+ "environment": {
1140
+ "label": "Ephemeral environments",
1141
+ "description": "Where the Tester agent runs against a live preview environment."
1142
+ },
1143
+ "runnerPool": {
1144
+ "label": "Self-hosted runner pool",
1145
+ "description": "Where the coding agents run when not using Cloudflare Containers."
1146
+ },
1147
+ "localMode": {
1148
+ "label": "Local mode",
1149
+ "description": "Warm container pool plus per-repo checkout reuse for the local runner."
1150
+ },
1151
+ "githubPat": {
1152
+ "label": "My GitHub token",
1153
+ "description": "A personal access token used for runs you start (pushes, PRs, CI, merge)."
1154
+ },
1155
+ "localRunners": {
1156
+ "label": "My local runners",
1157
+ "description": "Your own-machine model runners (Ollama, LM Studio, vLLM…)."
1158
+ }
1159
+ }
1160
+ }
347
1161
  }
348
1162
  }