Files
multica/packages/views/locales/en/agents.json
Naiyuan Qing 887c9228b8 feat(views): transcript reading hierarchy — presenter, expand modes, log-scale markdown (#5871)
* feat(views): transcript reading hierarchy — presenter, expand modes, log-scale markdown

The transcript rendered all five event kinds as identical truncated
one-liners: agent replies and errors were clipped to half a sentence and
only readable through an 11px bordered scroll box, indistinguishable in
weight from dozens of tool rows.

- trace-event-presenter.ts: pure presentation rules — kind, verbatim
  tool labels, newline-free one-line summaries, shell-wrapper stripping
  for command summaries, and per-kind default expansion.
- Smart reading hierarchy: agent text renders in place through
  RichContent (compact density + transcript-prose log scale: headings
  demoted to body size, 12.5px/11px two-step type ramp) and errors read
  unboxed; thinking and tool rows stay folded to one line.
- Expand mode menu replaces the expand-visible toggle: a persisted
  three-way preference (smart / expand all / collapse all) with per-item
  descriptions; row-level toggles override it until the mode changes.
  transcript-view-store migrates the legacy defaultExpanded boolean.
- Tool params/output expand into a quiet borderless surface; long
  content fades behind "Show all" instead of a nested scrollbar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(views): transcript header — status-first identity row, facts as typography, list toolbar

The header mixed five different natures in one visual container: status
pill, attribution badge, nine equal-weight metadata chips (including
truncated agent-description prose and a hostname), and the list controls
— everything a rounded bordered capsule, so information and controls
were indistinguishable and wrapped into a ragged 2-3 lines.

Restructure into three fixed-purpose rows:
- Identity: status pill anchors the left edge (the fact every viewer
  opens the dialog for), then the agent through its existing avatar
  component (hover card for details; fixes the empty-name case via
  agentInfo fallback) and a new borderless `inline` AttributionBadge
  variant. Close stays at the right.
- Facts: one dot-separated plain-text line — provider, runtime mode
  (hostname in hover title), duration, counts, timestamp; the workdir
  path collapses into a copy icon with the path as tooltip. The
  agent-description chip is gone (it lives in the avatar hover card).
- List toolbar: expand mode / sort / filter / copy move to their own
  row attached to the list they operate.

Only controls keep borders; only status keeps color; entities render
through their identity components; facts are typography.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(views): transcript header — two-tier by necessity (ⓘ popover), trigger source, full status machine

Following PR #5747's design lesson: split header metadata by whether a
viewer needs it BEFORE reading. The flat facts line put diagnostics
(provider, runtime hostname, mode, workdir, timestamps) on the
always-visible surface with equal weight.

- Identity row (tier 1): status · agent · trigger source · attribution.
  Trigger source ("Initial run" / "From a comment" / "Retry" / ...)
  answers "why does this run exist" — restored from #5747, was dropped.
- Status badge now covers the full state machine (queued / dispatched /
  cancelled / waiting), not just running/completed/failed.
- ⓘ Run-details popover (tier 2): runtime, provider, mode, workdir
  (copyable), created/started/completed — off the default surface.
- Toolbar left carries duration + event/tool counts (a read-before-you-
  read summary), so the control row balances instead of stranding the
  controls at the right with empty left space.

Persisted preferences (sort, filter selection, preserve-filters, expand
density) are untouched — same controls, same behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(views): transcript summary/controls — JSON preview, unify sort button, attribution to ⓘ

- Tool-result summary took the first non-empty line, so pretty-printed
  JSON previewed as a lone "[" or "{". Collapse whitespace instead so it
  reads "[ { "id": ... } ]".
- Sort was a segmented tab strip, reading as a different control family.
  Make it a single two-state toggle button on the shared toolbar chassis
  (shows current direction, flips on click) — every toolbar control now
  shares one chassis with a type-appropriate affordance (toggle / menu /
  action), not one forced shape.
- Attribution left the identity row. The accountable human is audit
  metadata, not read-time context, and "on behalf of" misread the
  direction; the trigger *mechanism* stays on the identity row, the
  *person* moves to the ⓘ popover as "Triggered by".
- Drop the tool-call count from the toolbar: redundant with the event
  count and informs no reading decision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(views): transcript toolbar uses the shared Button component + labels fix

Toolbar controls were hand-rolled <button>s, so they never got the
project's built-in aria-expanded active state — opening a menu left the
trigger looking idle. Route every control through the shared Button:

- Density / filter / ⓘ / close → Button variant="ghost" via the trigger
  render prop, so an open menu shows the muted active background for free.
- Active filter → Button variant="brand" (the design-system ON state),
  replacing the ad-hoc blue classes.
- Sort → ghost Button on the same chassis (was a segmented tab strip).
- Copy → ghost Button.

Wording:
- Sort reads "Oldest first" / "Newest first" (was the ambiguous
  "chronological / time order").
- Expand-mode "Smart" → "Focus" — names the result, not a hollow adjective.

Start/created/completed timestamps remain in the ⓘ Run-details popover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(views): filters always persist, drop "on behalf of" wording, surface run time

Three follow-ups from review:
- Remove the "Preserve filters" toggle. Persisting the filter selection
  is the only sensible behavior (a facet a run lacks already no-ops), so
  it should not be a user-facing switch. Filters now always persist;
  drop preserveFilters + the session-vs-persisted branching from the
  store and dialog.
- Inline attribution showed "on behalf of <name>", which read backwards
  and doubled up under the ⓘ "Triggered by" label. Render just the
  avatar + name; the source stays in the tooltip.
- Surface the run time (started ?? created) on the toolbar left next to
  duration and event count — "when did this happen" is read-before-you-
  read context. Full-precision timestamps remain in the ⓘ popover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(views): triggered-by back on the identity row, labeled toolbar facts

- The accountable human returns to the identity row next to the trigger
  mechanism (status · agent · trigger · person), where it's visible
  rather than buried in the ⓘ popover.
- Toolbar facts now carry explicit labels — "Created <time> · Took
  <duration> · N events" — instead of bare values the reader had to
  infer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(views): transcript identity row reads as one sentence, not three peers

The row put the agent, the trigger word, and the person at near-equal
weight with two same-size avatars, so it read as a jumble of names with
"comment-triggered" floating between them.

- The agent is the sole primary identity (avatar + medium weight).
- Trigger + person collapse into one muted secondary unit set apart from
  the agent, ordered "<person> · <how>".
- Drop the person's avatar here (new AttributionBadge `hideAvatar`) so
  two same-size faces don't read as two agents; the name alone, being
  muted, can't be confused with the agent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(views): copy-all exports full event bodies, not truncated summaries

handleCopyAll built its text from traceEventSummary — the one-line,
whitespace-collapsed, 200-char row preview — so every copied tool output
and agent reply was truncated with "...". Add traceEventCopyText, which
returns the complete body (full tool input JSON / result output / prose),
redact it like the detail view, and join events with blank lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(views): remove orphaned tool_calls i18n keys, fix inline-variant JSDoc

Review follow-ups (no behavior change):
- Delete tool_calls_one/tool_calls_other from all four locales — the
  metadata chip that used them was removed earlier in this branch.
- Correct the AttributionBadge inline-variant JSDoc: it renders the bare
  name (no "on behalf of" wrapper), matching the implementation and test.
- en events_one grammar: "1 event" not "1 events".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(views): fold copy timestamps into full-body copy (merge #5873)

Reconcile #5873's "timestamps in copied events" (merged to main) with
this branch's full-body copy rewrite: traceEventCopyText now prefixes
each line with the RFC 3339 timestamp when created_at is valid, on top of
the complete (untruncated) body, events separated by a blank line. The
two #5873 copy tests are updated to the full-body format; the orphaned
formatEventForClipboard helper is removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 16:12:10 +08:00

849 lines
38 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"page": {
"title": "Agents",
"tagline": "AI teammates that pick up issues, comment, and update status.",
"learn_more": "Learn more →",
"new_agent": "New agent",
"search_placeholder": "Search agents…",
"show_archived": "Show archived ({{count}}) →",
"of_total": "{{visible}} of {{total}}",
"list_load_failed": "Couldn't load agents",
"list_load_failed_default": "Something went wrong fetching the agent list.",
"try_again": "Try again"
},
"scope": {
"mine": "Mine",
"all": "All",
"archived": "Archived"
},
"sort": {
"label_recent": "Recent activity",
"label_name": "Name",
"label_runs": "Most runs",
"label_created": "Recently created"
},
"availability": {
"all": "All",
"online": "Online",
"unstable": "Unstable",
"offline": "Offline",
"archived": "Archived"
},
"workload": {
"working": "Working",
"queued": "Queued",
"idle": "Idle"
},
"archived": {
"active_link": "Active agents",
"title": "Archived agents"
},
"empty": {
"title": "No agents yet",
"description": "Create an agent and assign it issues, like any teammate. Local agents run on your machine; cloud agents run on Multica's runtime."
},
"no_matches": {
"title": "No matches",
"search_archived": "No archived agents match \"{{query}}\".",
"no_archived": "No archived agents yet.",
"search_active": "No agents match \"{{query}}\".",
"search_active_filtered": "No agents match \"{{query}}\" in this filter.",
"no_filter_match": "No agents match this filter.",
"search_runtime_filtered": "No agents on \"{{machine}}\" match \"{{query}}\".",
"runtime_filtered": "No agents on \"{{machine}}\"."
},
"runtime_filter": {
"all": "All runtimes",
"section_local": "Local",
"section_remote": "Remote",
"section_cloud": "Cloud",
"agent_count_one": "{{count}} agent",
"agent_count_other": "{{count}} agents",
"empty": "No machines yet"
},
"columns": {
"agent": "Agent",
"status": "Status",
"workload": "Workload",
"runtime": "Runtime",
"activity_7d": "Activity (7d)",
"runs": "Runs",
"last_active": "Last active",
"model": "Model",
"created": "Created",
"owner": "Owner",
"access": "Access"
},
"row": {
"you": "You",
"archived": "Archived",
"no_description": "No description",
"fallback_runtime_cloud": "Cloud",
"fallback_runtime_local": "Local",
"actions_aria": "Row actions",
"task_count_one": "{{count}} task",
"task_count_other": "{{count}} tasks"
},
"activity_tooltip": {
"created_today": "Created today",
"created_days_ago_one": "Created {{count}} day ago",
"created_days_ago_other": "Created {{count}} days ago",
"last_7_days": "Last 7 days",
"no_activity": "No activity",
"runs_one": "{{count}} run",
"runs_other": "{{count}} runs",
"failed_suffix": " · {{count}} failed ({{percent}}%)"
},
"row_actions": {
"cancel_all_tasks": "Cancel all tasks",
"duplicate": "Duplicate",
"restore": "Restore",
"archive": "Archive",
"set_access": "Set access scope",
"set_access_dialog_title": "Set access scope",
"set_access_applies_to": "Applies to {{count}} agents.",
"set_access_skipped": "{{count}} skipped (not owned by you).",
"set_access_dialog_confirm": "Apply",
"set_access_bulk_partial": "Applied to {{succeeded}}; {{failed}} failed (kept in current state).",
"agent_archived_toast": "Agent archived",
"archive_failed_toast": "Failed to archive agent",
"agent_restored_toast": "Agent restored",
"restore_failed_toast": "Failed to restore agent",
"no_tasks_to_cancel_toast": "No active tasks to cancel",
"cancelled_tasks_toast_one": "Cancelled {{count}} task",
"cancelled_tasks_toast_other": "Cancelled {{count}} tasks",
"cancel_failed_toast": "Failed to cancel tasks",
"cancel_dialog_title": "Cancel all tasks for \"{{name}}\"?",
"cancel_dialog_no_tasks": "There are no active tasks to cancel.",
"cancel_dialog_running_one": "{{count}} running",
"cancel_dialog_running_other": "{{count}} running",
"cancel_dialog_queued_one": "{{count}} queued",
"cancel_dialog_queued_other": "{{count}} queued",
"cancel_dialog_impact_one": "This will cancel {{summary}} task.",
"cancel_dialog_impact_other": "This will cancel {{summary}} tasks.",
"cancel_dialog_running_note": " Running tasks may take up to 5 seconds to fully halt.",
"cancel_dialog_irreversible": " Cancelled tasks cannot be resumed.",
"cancel_dialog_keep": "Keep them",
"cancel_dialog_confirm": "Cancel all tasks",
"archive_dialog_title": "Archive \"{{name}}\"?",
"archive_dialog_description": "The agent won't be assignable or mentionable, and any active tasks will be cancelled. All history is preserved and you can restore it later.",
"archive_dialog_cancel": "Cancel",
"archive_dialog_confirm": "Archive"
},
"detail": {
"back_to_agents": "Agents",
"back_to_agents_full": "Back to agents",
"not_found_title": "Agent not found",
"not_found_default": "This agent may have been archived or deleted.",
"no_access_title": "You don't have access to this agent",
"no_access_hint": "Only the agent owner or a workspace admin can view this private agent.",
"try_again": "Try again",
"archived_banner": "This agent is archived. It cannot be assigned or mentioned.",
"restore": "Restore",
"archive_dialog_title": "Archive agent?",
"archive_dialog_description": "\"{{name}}\" will be archived. It won't be assignable or mentionable, but all history is preserved. You can restore it later.",
"archive_dialog_cancel": "Cancel",
"archive_dialog_confirm": "Archive",
"more_archive": "Archive Agent",
"agent_updated_toast": "Agent updated",
"update_failed_toast": "Failed to update agent",
"agent_archived_toast": "Agent archived",
"archive_failed_toast": "Failed to archive agent",
"agent_restored_toast": "Agent restored",
"restore_failed_toast": "Failed to restore agent",
"dm": "DM",
"dm_no_permission_toast": "You don't have access to chat with this agent.",
"assign_work": "Assign work",
"more_actions_aria": "Agent actions",
"updated": "Updated {{when}}"
},
"inspector": {
"section_profile": "Profile",
"section_profile_hint": "Manage how this agent appears across the workspace.",
"section_execution": "Execution",
"section_execution_hint": "Choose the runtime, model, reasoning level, speed, and parallel task limit.",
"section_access": "Access",
"section_access_hint": "Control who can run this agent and use its connected capabilities.",
"section_properties": "Properties",
"section_details": "Details",
"section_details_hint": "Read-only ownership and lifecycle information.",
"section_skills": "Skills",
"section_integrations": "Integrations",
"prop_runtime": "Runtime",
"prop_model": "Model",
"prop_thinking": "Thinking",
"prop_speed": "Speed",
"prop_visibility": "Visibility",
"prop_concurrency": "Concurrency",
"prop_owner": "Owner",
"prop_created": "Created",
"prop_updated": "Updated",
"no_description_placeholder": "No description",
"avatar_label": "Avatar",
"avatar_hint": "Shown in assignments, activity, and chat.",
"name_label": "Name",
"description_label": "Description",
"labels_label": "Labels",
"labels_hint": "Workspace labels used to classify this agent.",
"change_avatar_aria": "Change avatar",
"avatar_updated_toast": "Avatar updated",
"avatar_upload_failed_toast": "Failed to upload avatar",
"rename_title": "Rename agent",
"rename_placeholder": "Agent name",
"rename_required": "Name is required",
"edit_description_title": "Edit description",
"description_placeholder": "What does this agent do?",
"save": "Save",
"cancel": "Cancel"
},
"overview": {
"agent_context": "Agent",
"access": "Access",
"attention_title": "Tasks need attention",
"attention_queued_one": "{{count}} task is queued while the runtime is unavailable.",
"attention_queued_other": "{{count}} tasks are queued while the runtime is unavailable."
},
"skill_attach": {
"trigger_aria": "Attach a workspace skill",
"trigger_label": "Attach"
},
"pickers": {
"concurrency_tooltip": "Concurrency · {{value}} max concurrent tasks",
"concurrency_range": "Max concurrent tasks ({{min}}{{max}})",
"runtime_none": "No runtime",
"runtime_tooltip": "Runtime · {{name}} · {{status}}",
"runtime_tooltip_none": "Runtime · none selected",
"runtime_online": "online",
"runtime_offline": "offline",
"runtime_owned_by": "owned by {{name}}",
"runtime_empty": "No runtimes",
"runtime_back_to_machines": "Back to machines",
"model_default": "Default",
"model_tooltip": "Model · {{value}}",
"model_managed_by_runtime": "Managed by runtime",
"model_search_placeholder": "Search or type a model ID",
"model_discovering": "Discovering models…",
"model_empty": "No models available",
"model_empty_with_dot": "No models available.",
"model_custom_tooltip": "Use \"{{value}}\" as a custom model id",
"model_custom_use": "Use \"{{value}}\"",
"model_clear": "Clear (use provider default)",
"model_clear_title": "Clear and fall back to the runtime's provider default",
"thinking_default": "Follow CLI config",
"thinking_tooltip": "Thinking · {{value}}",
"thinking_clear": "Follow CLI config",
"thinking_clear_title": "Clear the override and let the local CLI config (claude/codex) decide the reasoning level",
"service_tier_default": "Runtime default",
"service_tier_tooltip": "Speed · {{value}}",
"service_tier_clear": "Runtime default",
"service_tier_clear_title": "Clear the speed override and let the local Codex configuration decide"
},
"model_dropdown": {
"label": "Model",
"select_runtime_first": "Select a runtime first",
"default_provider": "Default (provider)",
"runtime_offline_manual": "Runtime offline — enter manually",
"managed_by_runtime_title": "Model selection is managed by this runtime.",
"managed_by_runtime_hint": "Configure the model on the runtime host (e.g. Hermes reads it from its own config file).",
"discovery_failed": "discovery failed",
"clear_full": "Clear selection (use provider default)"
},
"tabs": {
"overview": "Overview",
"work": "Work",
"capabilities": "Capabilities",
"settings": "Settings",
"general": "General",
"access": "Access",
"page_navigation_aria": "Agent page",
"section_navigation_aria": "Agent section",
"activity": "Activity",
"tasks": "Tasks",
"instructions": "Instructions",
"skills": "Skills",
"environment": "Environment",
"custom_args": "Custom Args",
"mcp_config": "MCP",
"composio_mcp": "MCP Apps",
"integrations": "Integrations",
"runtime_config": "Routing",
"discard_dialog_title": "Discard unsaved changes?",
"discard_dialog_description": "You have unsaved changes in this tab. Leaving now will discard them.",
"discard_keep": "Keep editing",
"discard_confirm": "Discard changes"
},
"creation_studio": {
"title": "Create an agent",
"squad_title": "Create an agent for this squad",
"duplicate_title": "Duplicate {{name}}",
"back": "Go back",
"eyebrow": "Agent creation",
"choose_title": "How would you like to start?",
"choose_description": "Start with full control, adapt a proven template, or describe what you need and build it through conversation.",
"recommended": "Recommended",
"continue": "Continue",
"step_choose": "Choose a starting point",
"step_template": "Choose a template",
"step_configure": "Review and configure",
"step_ai": "Build through conversation",
"modes": {
"blank": {
"title": "Start blank",
"description": "Configure every field yourself. Best when you already know exactly how this agent should work."
},
"template": {
"title": "Use a template",
"description": "Start from curated instructions and skills, then adapt every detail to your workspace."
},
"ai": {
"title": "Build with AI",
"description": "Describe the outcome you want. An Agent Builder will ask focused questions and prepare a live draft."
}
},
"templates": {
"search": "Search templates…",
"search_label": "Search agent templates",
"empty": "No templates match your search.",
"select_hint": "Select a template to preview its instructions and skills.",
"skills": "Included skills",
"instructions": "Instructions",
"use": "Use this template"
},
"sections": {
"identity": "Identity",
"identity_hint": "Give the agent a recognizable name and a concise purpose.",
"behavior": "Behavior & capabilities",
"behavior_hint": "Define how it should work and attach workspace skills it can rely on.",
"execution": "Execution",
"execution_hint": "Choose where the agent runs and optionally override the runtime's default model.",
"access": "Access",
"access_hint": "Control who can start runs with this agent. You can change this later."
},
"access": {
"private": {
"title": "Only me",
"description": "Only you can run this agent."
},
"workspace": {
"title": "Entire workspace",
"description": "Every workspace member can run it."
},
"members": {
"title": "Specific people",
"description": "Only selected members can run it.",
"required": "Select at least one member."
}
},
"builder": {
"setup_title": "Choose a runtime for Agent Builder",
"setup_description": "The selected online runtime powers the setup conversation and becomes the new agent's runtime by default.",
"start": "Start conversation",
"connect_runtime": "Connect a runtime",
"start_failed": "Could not start Agent Builder.",
"send_failed": "Could not send your message.",
"stop_failed": "Could not stop the current generation.",
"switch_runtime_failed": "Could not switch runtime. The conversation is still running on the previous one.",
"switch_runtime_pending": "Stop the current reply to switch runtime.",
"switch_runtime_success": "Runtime switched. Your draft is kept and the conversation continues on the new runtime with a fresh model session.",
"chat_title": "Agent Builder",
"chat_hint": "Shape the requirements through conversation and refine the configuration beside it.",
"runtime_online": "Runtime online",
"runtime_offline": "Runtime offline",
"empty_title": "What should this agent do?",
"empty_description": "Describe its role, workflow, output, or constraints. A useful first draft will appear on the right.",
"prompt_review": "Review frontend pull requests",
"prompt_research": "Research competitors and summarize findings",
"prompt_assistant": "Help our team plan and write projects",
"thinking": "Updating the draft…",
"placeholder": "Describe the agent you need…",
"send": "Send message"
},
"live_draft": "Agent configuration",
"live_draft_hint": "Conversation updates appear here, and you can adjust any field directly.",
"duplicate_env_notice": "Instructions, skills, model, and command arguments are copied. Environment variables are not copied for security.",
"create_and_open": "Create & open agent",
"create_and_add": "Create & add to squad",
"creating": "Creating agent…",
"create_failed": "Could not create the agent.",
"name_conflict": "An agent with this name already exists.",
"created": "{{name}} was created"
},
"create_dialog": {
"title_create": "Create Agent",
"title_duplicate": "Duplicate Agent",
"description_create": "Create a new AI agent for your workspace.",
"description_duplicate": "Create a new agent based on \"{{name}}\". Instructions, env, and skills are copied for you.",
"name_label": "Name",
"name_placeholder": "e.g. Deep Research Agent",
"description_label": "Description",
"description_placeholder": "What does this agent do?",
"visibility_label": "Visibility",
"access": {
"label": "Access",
"private_title": "Private",
"private_desc": "Only you can run this agent",
"public_title": "Public",
"public_desc": "Choose who can run this agent",
"public_workspace_option": "Everyone in this workspace",
"public_members_group": "Specific people",
"public_members_empty": "No workspace members to choose from",
"public_targets_empty_hint": "Pick at least one option below — otherwise the agent stays private."
},
"runtime_label": "Runtime",
"runtime_filter_mine": "Mine",
"runtime_filter_all": "All",
"runtime_loading": "Loading runtimes...",
"runtime_none": "No runtime available",
"runtime_cloud_badge": "Cloud",
"runtime_private_badge": "Private",
"runtime_private_locked_tooltip": "Private runtime — only its owner or a workspace admin can create agents on it. Ask the owner to switch it to Public to share.",
"runtime_search_placeholder": "Search machines…",
"runtime_no_results": "No matching machines",
"runtime_group_online": "{{online}}/{{total}} online",
"duplicate_copy_suffix": " (Copy)",
"create": "Create",
"creating": "Creating...",
"cancel": "Cancel",
"create_failed_toast": "Failed to create agent",
"skill_attach_failed_toast": "Agent created, but failed to attach skills: {{error}}",
"squad_join_failed_toast": "Agent \"{{name}}\" was created but couldn't join the squad: {{error}}. You can add it manually from Members.",
"instructions": {
"label": "Instructions",
"placeholder_blank": "Click to write instructions…",
"placeholder_duplicate": "Click to view or edit the duplicated instructions",
"collapse": "Collapse",
"editor_placeholder": "Write what this agent should do, what to focus on, what to avoid…"
},
"skills_section": {
"label": "Skills",
"placeholder": "Add skills from workspace",
"selected_one": "{{count}} selected — click to edit",
"selected_other": "{{count}} selected — click to edit",
"collapse": "Collapse",
"list_empty_multi": "No skills in this workspace yet. Create or import one first.",
"list_loading": "Loading…",
"list_empty_default": "No skills available.",
"list_no_match": "No skills match.",
"search_placeholder": "Search skills…"
},
"avatar": {
"change_aria": "Change avatar",
"upload_aria": "Upload avatar",
"remove_aria": "Remove avatar",
"select_image_toast": "Please select an image file.",
"upload_failed_toast": "Avatar upload failed"
}
},
"tab_body": {
"common": {
"save": "Save",
"add": "Add",
"unsaved_changes": "Unsaved changes"
},
"instructions": {
"intro": "Set the system prompt used for every task. Markdown is supported.",
"system_prompt_label": "System prompt",
"placeholder": "Define this agent's role, expertise, and working style.\n\n# Example\nYou are a frontend engineer specializing in React and TypeScript.\n\n## Working Style\n- Write small, focused PRs — one commit per logical change\n- Prefer composition over inheritance\n- Always add unit tests for new components\n\n## Constraints\n- Do not modify shared/ types without explicit approval\n- Follow the existing component patterns in features/"
},
"env": {
"intro_readonly": "Injected into the agent process at launch. Only workspace owners and admins can read or edit values; every reveal and edit is recorded in the workspace audit log.",
"empty_readonly": "No environment variables configured.",
"intro_prefix": "Injected into the agent process at launch (e.g. ",
"intro_separator": ", ",
"intro_suffix": ").",
"key_placeholder": "KEY",
"value_placeholder": "value",
"show_value_aria": "Show value",
"hide_value_aria": "Hide value",
"remove_aria": "Remove variable",
"duplicate_keys_toast": "Duplicate environment variable keys",
"saved_toast": "Environment variables saved",
"save_failed_toast": "Failed to save environment variables",
"not_revealed_title_one": "{{count}} variable configured",
"not_revealed_title_other": "{{count}} variables configured",
"not_revealed_empty": "No environment variables configured.",
"not_revealed_hint": "Values stay masked until you reveal them. Every reveal and edit is recorded in the workspace audit log.",
"reveal_action": "Reveal & edit",
"revealing": "Revealing…",
"reveal_failed_toast": "Failed to load env values",
"empty_editable": "No environment variables configured. Add one to inject it into the agent at launch."
},
"custom_args": {
"intro": "Add CLI arguments passed when this agent starts.",
"arguments_label": "Arguments",
"arguments_description": "Each item is passed as one token. The list order is preserved.",
"add_argument_action": "Add argument",
"add_action": "Add",
"update_action": "Update",
"cancel_action": "Cancel",
"command_preview_label": "Command preview",
"input_placeholder": "--profile",
"input_aria": "Argument {{index}}",
"new_argument_aria": "New argument",
"empty_title": "No arguments yet",
"empty_hint": "Add the first token to build the launch command.",
"edit_aria": "Edit argument {{index}}",
"remove_aria": "Remove argument {{index}}",
"saved_toast": "Custom arguments saved",
"save_failed_toast": "Failed to save custom arguments"
},
"mcp_config": {
"intro": "Manage the MCP servers available to this agent. Servers managed by Multica are merged with servers inherited from the local runtime.",
"managed_title": "Managed by Multica",
"managed_hint": "Saved in Multica for this agent. These servers are merged with runtime servers; a Multica server wins when names match.",
"managed_empty": "No MCP servers are managed by Multica yet.",
"add_action": "Add MCP",
"agent_disabled_badge": "Off for agent",
"runtime_disabled_badge": "Off in runtime",
"runtime_overridden_badge": "Overridden by Multica",
"runtime_title": "Inherited from runtime",
"runtime_hint": "Discovered automatically from {{runtime}} and merged at task launch. URLs, headers, commands, and environment variables never leave the machine.",
"refresh_action": "Refresh",
"runtime_missing": "Assign a local runtime to discover inherited MCP servers.",
"runtime_offline": "The local runtime is offline. Reconnect it to refresh inherited MCP servers.",
"runtime_discovering": "Discovering MCP servers from the local runtime…",
"runtime_failed": "Couldn't discover runtime MCP servers. Try again.",
"runtime_forbidden": "You don't have permission to view this runtime's MCP servers.",
"runtime_unsupported": "This runtime version cannot report its MCP inventory yet.",
"runtime_empty": "No MCP servers were found in the runtime's user configuration.",
"edit_aria": "Edit MCP server",
"delete_aria": "Delete MCP server",
"added_toast": "MCP server added",
"updated_toast": "MCP server updated",
"deleted_toast": "MCP server deleted",
"delete_failed_toast": "Failed to delete MCP server",
"dialog_add_title": "Add MCP Server",
"dialog_edit_title": "Edit MCP Server",
"dialog_description": "Use the guided form or edit the configuration for this single server as JSON.",
"dialog_name_label": "Name",
"dialog_name_placeholder": "e.g. context7",
"dialog_name_required": "Enter a server name.",
"dialog_name_invalid": "Use only letters, numbers, hyphens, and underscores.",
"dialog_name_duplicate": "A server with this name already exists.",
"dialog_form_tab": "Form",
"dialog_json_tab": "JSON",
"dialog_type_label": "Transport",
"dialog_type_stdio": "STDIO",
"dialog_type_http": "Streamable HTTP",
"dialog_command_label": "Command",
"dialog_command_required": "Enter the command used to launch this server.",
"dialog_args_label": "Arguments",
"dialog_add_arg": "Add argument",
"dialog_remove_arg": "Remove argument",
"dialog_env_label": "Environment variables",
"dialog_add_env": "Add environment variable",
"dialog_remove_env": "Remove environment variable",
"dialog_url_label": "Server URL",
"dialog_url_required": "Enter the MCP server URL.",
"dialog_headers_label": "HTTP headers",
"dialog_add_header": "Add header",
"dialog_remove_header": "Remove header",
"dialog_native_json_hint": "This historical provider-native entry can be edited in JSON without changing its format.",
"dialog_json_label": "Server configuration",
"dialog_json_aria": "MCP server JSON configuration",
"dialog_json_object": "The server configuration must be a JSON object.",
"dialog_json_target": "The server configuration must include a command or URL.",
"dialog_cancel": "Cancel",
"dialog_add_action": "Add Server",
"dialog_update_action": "Save Changes",
"delete_dialog_title": "Delete MCP Server?",
"delete_dialog_description": "{{name}} will no longer be available to this agent. Runtime servers are not affected.",
"delete_action": "Delete Server",
"invalid_json": "Invalid JSON: {{error}}",
"save_failed_toast": "Failed to save MCP config",
"redacted_title": "Configured — hidden from your view",
"redacted_hint": "Only the agent owner or a workspace admin can read this config."
},
"composio_mcp": {
"subtitle": "Check a toolkit to let this agent mount it as an MCP server — but only when you (its creator) are the one who triggered the run, directly or down a sub-agent chain.",
"loading": "Loading your connections…",
"load_failed": "Couldn't load your connected apps. Try again shortly.",
"empty_title": "No connected apps yet",
"empty_hint": "You haven't connected any third-party services. Authorize one first, then come back here to allow it.",
"empty_link_to_settings": "Connect one in Settings → Integrations",
"connected": "Connected",
"toggle_aria": "Allow {{toolkit}} for this agent",
"saving": "Saving…",
"save_failed_toast": "Couldn't save — please try again",
"redacted_title": "Configured — hidden from your view",
"redacted_hint": "Only the agent's creator can view or change which apps it may use.",
"shared_warning": "This agent is shared. People who can run this agent may use the Composio apps you enable here. Use Private or narrow the access list if these apps expose sensitive data.",
"workspace_warning": "Public to workspace: any workspace member may use these Composio apps through this agent."
},
"runtime_config": {
"intro": "Choose how the OpenClaw runtime executes this agent's turns. Local mode runs the agent inside the daemon process. Gateway mode forwards each turn to an OpenClaw Gateway — useful when the daemon host is a lightweight coordinator and the agent should run on a more powerful machine.",
"mode_label": "Routing mode",
"mode_local": "Local",
"mode_gateway": "Gateway",
"mode_local_hint": "Default. The daemon spawns `openclaw agent --local …` and the agent loop runs on this host.",
"mode_gateway_hint": "The daemon dials an OpenClaw Gateway. Leave the endpoint fields blank to inherit them from the daemon host's `~/.openclaw/openclaw.json`.",
"gateway_legend": "Gateway endpoint",
"host_label": "Host",
"host_placeholder": "gw.internal",
"port_label": "Port",
"port_invalid": "Port must be a positive integer.",
"token_label": "Auth token",
"token_placeholder": "Bearer token issued by the gateway",
"token_masked_placeholder": "Saved — submit a new value to rotate, or leave blank to keep",
"tls_label": "Use TLS",
"tls_hint": "Dial https:// instead of http://",
"saved_toast": "Routing config saved",
"save_failed_toast": "Failed to save routing config"
},
"skills": {
"intro": "This is the agent's effective skill set. Workspace skills are managed here; inherited Codex and Claude Code skills can also be turned off per agent.",
"assigned_title": "Assigned to agent",
"assigned_hint": "Workspace skills travel with the agent. Turn one off temporarily without removing it.",
"runtime_title": "Inherited from runtime",
"runtime_hint": "Discovered automatically from {{runtime}} and available whenever this agent runs there.",
"workspace_badge": "Workspace",
"inherited_badge": "Inherited",
"refresh_action": "Refresh",
"no_description": "No description",
"toggle_aria": "Toggle {{name}}",
"remove_aria": "Remove {{name}}",
"toggle_failed_toast": "Failed to change skill status",
"runtime_toggle_aria": "Toggle inherited {{name}}",
"runtime_toggle_failed_toast": "Failed to change inherited skill status",
"runtime_missing": "Assign a local runtime to discover inherited skills.",
"runtime_offline": "The local runtime is offline. Reconnect it to refresh inherited skills.",
"runtime_discovering": "Discovering skills from the local runtime…",
"runtime_failed": "Couldn't discover runtime skills. Try again.",
"runtime_forbidden": "You don't have permission to view this runtime's skills.",
"runtime_unsupported": "This runtime does not expose local skills.",
"runtime_empty": "No local skills were found for this runtime.",
"detail_title": "Skill details",
"detail_loading": "Loading skill details…",
"detail_source": "Source",
"detail_provider": "Provider",
"detail_plugin": "Plugin",
"detail_files": "Files",
"detail_supporting_files": "Supporting files",
"add_action": "Add skill",
"empty_title": "No skills assigned",
"empty_hint": "Add workspace skills to share team knowledge with this agent.",
"remove_failed_toast": "Failed to remove skill",
"add_dialog_title": "Add skill",
"add_dialog_description": "Select a workspace skill to assign to this agent.",
"add_dialog_search_placeholder": "Search skills",
"add_dialog_empty": "All workspace skills are already assigned.",
"add_dialog_no_match": "No skills match your search.",
"add_dialog_empty_partial": "No more skills to add — this agent already has all of them.",
"add_dialog_saving": "Adding…",
"add_dialog_confirm_default": "Add",
"add_dialog_confirm_one": "Add {{count}} skill",
"add_dialog_confirm_other": "Add {{count}} skills",
"add_dialog_cancel": "Cancel",
"add_failed_toast": "Failed to add skill"
},
"integrations": {
"intro": "Connect this agent to external chat platforms so people can work with it where they already are.",
"members_note": "Only workspace owners and admins can connect an agent to an external chat platform. You can view connected bots in Settings → Integrations."
},
"activity": {
"status": {
"queued": "Queued",
"dispatched": "Dispatched",
"waiting_local_directory": "Waiting for directory",
"running": "Running",
"completed": "Succeeded",
"failed": "Failed",
"cancelled": "Cancelled"
},
"section_now": "Now",
"section_last_30d": "Last 30 days",
"section_recent": "Recent work",
"subtitle_no_active": "No active work",
"subtitle_active_one": "{{count}} active task",
"subtitle_active_other": "{{count}} active tasks",
"subtitle_performance": "Performance",
"subtitle_no_recent": "Nothing finished yet",
"subtitle_recent_progress": "{{shown}} of {{total}} runs",
"subtitle_recent_latest": "{{count}} latest runs",
"empty_now": "This agent isn't running anything right now.",
"empty_30d": "No completions in the last 30 days.",
"empty_recent": "This agent hasn't completed anything yet.",
"show_more": "Show more →",
"runs_one": "run",
"runs_other": "runs",
"success_pct": "{{percent}}% success",
"success_label": "succeeded",
"avg_duration": "avg {{value}}",
"avg_duration_label": "average duration",
"failed_count": "{{count}} failed",
"failed_label": "failed",
"source_issue": "Issue",
"source_chat": "Chat",
"source_autopilot": "Autopilot",
"source_untracked": "Untracked",
"source_quick_create": "Quick create",
"source_creating_issue": "Creating issue",
"source_chat_session": "Chat session",
"source_autopilot_run": "Autopilot run",
"issue_short_fallback": "Issue {{prefix}}…",
"triggered_by": "Triggered by",
"open_issue_aria": "Open issue",
"open_issue_tooltip": "Open issue",
"transcript_tooltip": "View transcript",
"cancel_task_aria": "Cancel task",
"cancel_task_tooltip": "Cancel task",
"cancelling_tooltip": "Cancelling…",
"cancel_failed_toast": "Failed to cancel task",
"started_prefix": "Started {{when}}",
"dispatched_prefix": "Dispatched {{when}}",
"queued_prefix": "Queued {{when}}"
}
},
"char_counter": {
"over_limit": " · {{count}} over limit"
},
"presence": {
"queue_badge": "+{{count}} queued"
},
"visibility": {
"private": {
"label": "Personal",
"tooltip": "Personal · only you and workspace admins can use this agent"
},
"workspace": {
"label": "Workspace",
"tooltip": "Workspace · everyone in this workspace can use this agent"
}
},
"access": {
"section_title": "Who can run this agent",
"tooltip": "Access · who may run this agent",
"trigger_private": "Only me",
"trigger_workspace": "Workspace",
"scope_labels": {
"workspace": "Workspace",
"specific_people": "Specific people",
"owner_only": "Owner only"
},
"trigger_members_count": "{{count}} people",
"trigger_members_empty": "Specific people",
"trigger_team": "Team",
"private_title": "Only me",
"private_desc": "Only you can run this agent",
"shared_title": "Shared",
"shared_desc": "Choose the workspace or specific people who can run this agent",
"shared_target_required": "Select at least one person before saving.",
"workspace_title": "Entire workspace",
"workspace_desc": "All workspace members can run this agent",
"members_title": "Specific people",
"members_desc": "Only the people you pick can run this agent",
"team_title": "Public to team",
"team_desc": "Grant access to a whole team",
"team_coming_soon": "Coming soon",
"members_group": "People",
"public_group": "Public access",
"owner_only_readonly": "Only the agent owner can change who can run this agent.",
"members_empty": "No workspace members to choose from",
"composio_switch_hint": "Heads up — this agent has Composio apps enabled. Sharing it lets everyone with access use those apps through this agent."
},
"profile_card": {
"unavailable": "Agent unavailable",
"detail_link": "Detail →",
"runtime_label": "Runtime",
"skills_label": "Skills",
"owner_label": "Owner",
"unknown_runtime": "Unknown runtime",
"model_label": "Model",
"model_unset": "Runtime default"
},
"live_peek": {
"current_issue_label": "Now on",
"no_current_issue": "No task",
"last_activity_label": "Last seen",
"no_recent_activity": "No recent activity",
"failed_indicator": "Failed"
},
"transcript": {
"dialog_title": "Agent Execution Transcript",
"status_running": "Running",
"status_completed": "Completed",
"status_failed": "Failed",
"filter": "Filter",
"clear_filters": "Clear filters",
"events_one": "{{count}} event",
"events_other": "{{count}} events",
"events_filtered": "{{shown}} of {{total}} events",
"copy_all": "Copy all",
"copy_filtered": "Copy filtered",
"copied": "Copied",
"waiting_events": "Waiting for events...",
"antigravity_live_unavailable": "Antigravity does not currently provide live execution events. The transcript will be available after the task completes.",
"no_data": "No execution data recorded.",
"sort_label": "Sort",
"sort_chronological": "Oldest first",
"sort_newest_first": "Newest first",
"density_label": "Expand mode",
"density_smart": "Focus",
"density_smart_desc": "Replies and errors open; thinking and tool steps stay folded",
"density_expanded": "Expand all",
"density_expanded_desc": "Every row's full params and output, for step-by-step review",
"density_collapsed": "Collapse all",
"density_collapsed_desc": "One line per event — the most compact scan",
"no_output": "No output",
"show_all": "Show all",
"status_queued": "Queued",
"status_dispatched": "Dispatched",
"status_cancelled": "Cancelled",
"status_waiting": "Waiting",
"trigger_initial": "Initial run",
"trigger_comment": "From a comment",
"trigger_autopilot": "Autopilot",
"trigger_retry": "Retry",
"trigger_chat": "From chat",
"trigger_quick_create": "Quick create",
"trigger_direct": "Direct assignment",
"run_info": "Run details",
"details_runtime": "Runtime",
"details_provider": "Provider",
"details_mode": "Mode",
"details_workdir": "Workdir",
"details_created": "Created",
"details_started": "Started",
"details_completed": "Completed",
"copy_workdir": "Copy working directory",
"close": "Close",
"fact_created": "Created {{time}}",
"fact_took": "Took {{duration}}"
},
"task_failure": {
"agent_error": "Agent execution error",
"timeout": "Task timed out",
"runtime_offline": "Daemon offline",
"runtime_recovery": "Daemon restarted",
"manual": "Cancelled by user"
},
"last_active": {
"today": "Today",
"days_ago_one": "{{count}} day ago",
"days_ago_other": "{{count}} days ago",
"none": "No activity (30d)"
},
"toolbar": {
"result_count_title": "Matching agents / agents in scope",
"filter_label": "Filter",
"filter_active_count_one": "{{count}} filter",
"filter_active_count_other": "{{count}} filters",
"clear_filters": "Clear filters",
"section_availability": "Availability",
"section_access": "Access",
"section_runtime": "Runtime",
"display": "Display",
"sort_by": "Sort by",
"direction_asc": "Ascending",
"direction_desc": "Descending",
"section_columns": "Columns",
"section_owner": "Owner",
"section_model": "Model"
},
"actions": {
"selected_one": "{{count}} selected",
"selected_other": "{{count}} selected",
"clear_selection": "Clear selection"
}
}