Files
AgentHub/client/src/i18n/locales/en/common.json
T
nntrivi2001 9a54978eef feat: v2.5.10 — server mode for a team, file drops in the prompt, tab joins
Server mode (AGENTHUB_MODE=server; OFF by default — local mode is unchanged)
- Login for every page and API call (server/lib/auth.js, routes/auth.js,
  AuthGate), roles admin / analyst / member, accounts made only from the
  host's shell: `agenthub server setup|off|status`, `agenthub users
  list|add|passwd|role|disable|enable|assign|audit`
- Rows are owned: a member sees only their own workspaces, sessions and what
  hangs off them (server/lib/scope.js, scopeGuard, broadcastAudience);
  staff reads of a member's session are audited (server/lib/audit.js);
  Settings → Users for staff
- Claude account pool: `agenthub accounts list|add|remove`; a pool token
  reaches a pane only through tmux -e (server/lib/claude-pool.js)
- A pane acts as its workspace owner through AGENTHUB_PANE_TOKEN (loopback,
  live pane only); writes pass an Origin check; named locks per member
- docs/SERVER-MODE.md, docs/plans/server-mode/

Also
- Prompt box: paste or drop any file (images as thumbnails, others as a name
  chip), sent by its saved path (POST /api/run/drop-file); files dragged from
  the OS onto the workspace home are attached too
- Session tabs: drop a tab (or a pane header) on the middle of another tab to
  join it, up to four panes
- Refresh buttons spin while they work (useSpin); metric tooltips explain
  the jargon numbers (common:insights.help.*)
- Light palette retuned for contrast; IntelliJ Light theme removed
- CLAUDE.md sync marker trimmed; its history moved to docs/CLAUDE-SYNC-LOG.md

Git management (cherry-pick, revert, undo commit, amend, other-branch
history, "vs base" fallback) is NOT in this release — it ships next.

Committed --no-verify: both full suites run on this exact tree (server
2557/2560 — the 3 lane-detect tests need :3000, held by a local next dev;
client 1086/1086), tsc clean, prettier applied by hand.
2026-10-07 14:11:25 +07:00

234 lines
9.3 KiB
JSON
Raw 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.
{
"refresh": "Refresh",
"retry": "Retry",
"cancel": "Cancel",
"export": "Export",
"loading": "Loading...",
"noData": "No data",
"total": "Total",
"active": "active",
"total_lower": "total",
"subagent": "subagent",
"subagents": "subagents",
"subagent_label_one": "{{count}} subagent",
"subagent_label_other": "{{count}} subagents",
"events": "events",
"event": "event",
"sessions": "sessions",
"session": "session",
"agents": "agents",
"agent": "agent",
"live": "Live",
"offline": "Offline",
"running": "running",
"dashboardRun": "Run",
"days": "days",
"hours": "hours",
"updated": "Updated ",
"lastUpdated": "Last updated: ",
"showMore": "Show more ({{count}} remaining)",
"plusMore": "+{{count}} more",
"ofSessions": "% of sessions",
"save": "Save",
"edit": "Edit",
"delete": "Delete",
"actions": "Actions",
"close": "Close",
"unexpectedError": "Unexpected error",
"depth": "Depth",
"type": "Type",
"statusLabel": "Status",
"status": {
"working": "Working",
"waiting": "Waiting",
"completed": "Completed",
"error": "Error",
"active": "Active",
"abandoned": "Abandoned"
},
"awaitingReason": {
"notification": {
"label": "Needs input",
"desc": "Blocked on a permission prompt or an input request — Claude can't continue until you respond."
},
"stop": {
"label": "Turn done",
"desc": "Claude finished its reply; the session is idle until you send the next prompt."
},
"session_start": {
"label": "At prompt",
"desc": "The session just started or resumed and is sitting at an empty prompt — nothing has been asked yet."
},
"interrupted": {
"label": "Interrupted",
"desc": "The last turn was interrupted (Esc or a recovered hook) — Claude is waiting for direction."
}
},
"time": {
"justNow": "just now",
"mAgo": "{{count}}m ago",
"hAgo": "{{count}}h ago",
"dAgo": "{{count}}d ago",
"justNowShort": "now",
"mAgoShort": "{{count}}m",
"hAgoShort": "{{count}}h",
"dAgoShort": "{{count}}d"
},
"pagination": {
"previous": "Previous",
"next": "Next",
"showing": "Showing {{from}}-{{to}} of {{total}}"
},
"token": {
"input": "Input",
"output": "Output",
"cacheRead": "Cache Read",
"cacheWrite": "Cache Write",
"totalTokens": "Total tokens"
},
"cost": {
"model": "Model",
"cost": "Cost",
"totalCost": "Total Cost",
"totalEstimatedCost": "Total Estimated Cost"
},
"duration": {
"h_m": "{{h}}h {{m}}m",
"m_s": "{{m}}m {{s}}s",
"s": "{{s}}s"
},
"eventDetail": {
"summary": "Summary",
"seeDetailsBelow": "Check below for full details in {{fields}}",
"eventId": "Event ID",
"recordedAt": "Recorded at",
"session": "Session",
"sessionId": "Session ID",
"agentId": "Agent ID",
"agent": "Agent",
"cwd": "Working directory",
"permissionMode": "Permission mode",
"toolUseId": "Tool Use ID",
"toolName": "Tool",
"toolInput": "Tool Input",
"toolResponse": "Tool Response",
"isError": "Error",
"transcriptPath": "Transcript Path",
"agentTranscriptPath": "Subagent Transcript Path",
"hookEventName": "Hook Event Name",
"stopReason": "Stop Reason",
"stopHookActive": "Stop Hook Active",
"subagentType": "Subagent Type",
"agentType": "Agent Type",
"notificationType": "Notification Type",
"message": "Message",
"prompt": "Prompt",
"model": "Model",
"reason": "Reason",
"source": "Source",
"imported": "Imported",
"type": "Type",
"timestamp": "Timestamp",
"uuid": "UUID",
"durationMs": "Duration (ms)",
"compactionNumber": "Compaction Number",
"totalCompactions": "Total Compactions",
"lastAssistantMessage": "Last Assistant Message",
"rawPayload": "Raw Payload",
"copy": "Copy",
"copied": "Copied",
"noPayload": "No payload captured for this event.",
"viewDetails": "View details",
"expand": "Expand event",
"collapse": "Collapse event"
},
"eventFilters": {
"searchPlaceholder": "Search summary, tool, payload...",
"status": "Status",
"eventType": "Event type",
"toolName": "Tool",
"agentId": "Agent",
"sessionId": "Session",
"from": "From",
"to": "To",
"clearAll": "Clear filters",
"noOptions": "No options",
"showing": "Showing {{shown}} of {{total}}",
"loadMore": "Load more",
"loading": "Loading...",
"noResults": "No events match the current filters",
"grouped": "Group by tool call",
"flat": "Flat list",
"groupEventCount_one": "{{count}} event",
"groupEventCount_other": "{{count}} events",
"help": {
"toggle": "Help",
"title": "About events, filters, and grouping",
"subtitle": "Unlock deeper insights: badges, lifecycles, and filter mechanics explained.",
"valuesTitle": "What each filter accepts",
"valueStatusDesc": "Preset shortcut that expands to event_type values (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...).",
"valueEventTypeDesc": "Raw event_type strings from the DB. Pulled from /api/events/facets.",
"valueToolNameDesc": "tool_name values currently in the DB (Bash, Edit, Read, Grep, mcp__... tools). Pulled from /api/events/facets.",
"valueAgentIdDesc": "Full agent UUIDs (main + subagents). Select one or more to scope to specific agents.",
"valueSessionIdDesc": "Session UUIDs. Typically you'd navigate to /sessions/:id instead, but this lets you intersect multiple sessions.",
"valueSearchDesc": "Substring match on summary, tool_name, and the raw JSON payload. Debounced 300ms.",
"valueDateRangeDesc": "ISO datetime lower/upper bounds on the event's created_at.",
"statusesTitle": "Status badges",
"statusesIntro": "Status is derived from event_type. It's what you see on each row.",
"statusWorkingDesc": "Agent started a tool call (PreToolUse). The tool is about to run.",
"statusConnectedDesc": "Tool call completed and returned a result (PostToolUse).",
"statusCompletedDesc": "Turn or lifecycle boundary (Stop, SubagentStop, Compaction).",
"statusErrorDesc": "An error was recorded (error, APIError).",
"statusIdleDesc": "Lifecycle or metadata (Notification, TurnDuration, SessionStart, SessionEnd).",
"lifecycleTitle": "Event lifecycle",
"lifecycleDesc": "A typical tool call emits two events sharing the same tool_use_id:",
"lifecycleFlow": "PreToolUse (Working) → PostToolUse (Connected) → ... → Stop (Completed)",
"filtersTitle": "How filters work",
"filterTip1": "Filters compose with AND across categories. Within one category, multi-select is OR.",
"filterTip2": "Status is a shortcut that expands to event_type values (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...). Status + Event type compose as OR on event_type.",
"filterTipGrouping": "Grouping tip: a grouped row needs both Pre and Post events. If you filter by Status, pick Working + Connected together to keep pairs intact - otherwise a group will only show half of the call.",
"filterTip3": "Text search matches summary, tool_name, and the raw payload (data column).",
"filterTip4": "Date range applies to each event's created_at."
}
},
"examples": "Examples",
"help": "Help",
"copied": "Copied",
"copyFailed": "Could not copy to the clipboard",
"dismiss": "Dismiss",
"confirm": "Confirm",
"unsaved": {
"title": "Discard unsaved changes?",
"message": "Your edits have not been saved and will be lost.",
"discard": "Discard",
"keep": "Keep editing"
},
"auth": {
"title": "Sign in to AgentHub",
"username": "Username",
"password": "Password",
"submit": "Sign in",
"submitting": "Signing in…",
"failed": "Wrong username or password",
"tooMany": "Too many failed attempts — try again in a few minutes",
"logout": "Sign out",
"signedInAs": "Signed in as {{name}} ({{role}})"
},
"insights": {
"help": {
"sessions": "A session is one conversation with an AI agent, from start to finish.",
"agents": "Agents are the AI workers: the main one in each session plus any helpers it started.",
"tokens": "Tokens are the pieces of text the AI reads and writes. Roughly 1 token ≈ 4 characters. More tokens = more cost.",
"cost": "Estimated money spent, calculated from token counts and each model's price.",
"events": "Every step the AI takes (running a tool, finishing a reply…) is recorded as one event.",
"tokenMix": "Input = what you and the files sent the AI. Output = what the AI wrote. Cache read = text reused from memory (about 10× cheaper). Cache write = text saved to memory for reuse.",
"spendPace": "How fast money is being spent, and where this month will end up if that speed continues.",
"toolCalls": "How many actions the AI took: reading a file, editing, running a command…",
"subagents": "Helper agents the main AI started to work on part of the task in parallel.",
"compactions": "When a conversation gets too long, it is summarized to make room. Early details can be lost.",
"errors": "Steps that failed. A few are normal; many may mean the AI got stuck.",
"tokenFlow": "Input = sent to the AI, Output = written by the AI, Cache = reused from memory (cheaper)."
}
}
}